aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--changelog.md12
-rw-r--r--demo/dist/demo.css2
-rw-r--r--demo/dist/demo.js128
-rw-r--r--demo/dist/demo.js.map2
-rw-r--r--demo/dist/demo.min.js2
-rw-r--r--demo/dist/demo.min.js.map2
-rw-r--r--dist/plyr.css2
-rw-r--r--dist/plyr.js638
-rw-r--r--dist/plyr.js.map2
-rw-r--r--dist/plyr.min.js2
-rw-r--r--dist/plyr.min.js.map2
-rw-r--r--dist/plyr.polyfilled.js1046
-rw-r--r--dist/plyr.polyfilled.js.map2
-rw-r--r--dist/plyr.polyfilled.min.js2
-rw-r--r--dist/plyr.polyfilled.min.js.map2
-rw-r--r--gulpfile.js6
-rw-r--r--package.json12
-rw-r--r--readme.md8
-rw-r--r--src/js/controls.js1
-rw-r--r--src/js/defaults.js2
-rw-r--r--src/js/plyr.js2
-rw-r--r--src/js/plyr.polyfilled.js2
22 files changed, 1254 insertions, 625 deletions
diff --git a/changelog.md b/changelog.md
index dc09b53d..192efee0 100644
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,15 @@
+# v3.3.8
+
+* Added missing URL polyfill
+* Pause while seeking to mimic default HTML5 behaviour
+* Add 'seeked' event listener to update progress (fixes #966)
+* Trigger seeked event in youtube plugin if either playing or paused (fixes #921)
+* Fix for YouTube and Vimeo autoplays on seek (fixes #876)
+* Toggle controls improvements
+* Cleanup unused code
+* Poster image loading improvements
+* Fix for seek tooltip vs click accuracy
+
# v3.3.7
* Poster fixes (thanks @friday)
diff --git a/demo/dist/demo.css b/demo/dist/demo.css
index 2771bfa8..a156a51a 100644
--- a/demo/dist/demo.css
+++ b/demo/dist/demo.css
@@ -1 +1 @@
-@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:300;src:url(https://cdn.plyr.io/static/fonts/gordita-light.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-light.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:400;src:url(https://cdn.plyr.io/static/fonts/gordita-regular.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-regular.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:500;src:url(https://cdn.plyr.io/static/fonts/gordita-medium.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-medium.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:600;src:url(https://cdn.plyr.io/static/fonts/gordita-bold.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-bold.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:900;src:url(https://cdn.plyr.io/static/fonts/gordita-black.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-black.woff) format("woff")}@keyframes fadein{0%{opacity:0}100%{opacity:1}}/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a,button.faux-link{background-color:transparent;-webkit-text-decoration-skip:objects}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}*,::after,::before{box-sizing:border-box}body,html{display:flex;width:100%}html{background:linear-gradient(to left top,#4dc1ff,#0074b3);background-attachment:fixed;height:100%}body{align-items:center;display:flex;flex-direction:column;min-height:100%}.grid{flex:1;overflow:auto}main{margin:auto;padding-bottom:1px;text-align:center}aside{align-items:center;background:#fff;color:#55646b;display:flex;flex-shrink:0;justify-content:center;padding:15px;position:relative;text-align:center;text-shadow:none;width:100%}aside .icon{fill:#4baaf4;margin-right:10px}aside p{margin:0}aside a,aside button.faux-link{color:#4baaf4}aside a.tab-focus,aside button.tab-focus.faux-link{box-shadow:0 0 0 3px rgba(75,170,244,.35);outline:0}.grid{margin:0 auto;padding:20px}@media only screen and (min-width:768px){.grid{align-items:center;display:flex;max-width:1260px;width:100%}.grid>*{flex:1}}html{font-size:100%}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-size:15px;font-size:.9375rem;color:#fff;font-family:Gordita,Avenir,"Helvetica Neue",sans-serif;font-weight:500;line-height:1.75;text-shadow:0 1px 1px rgba(0,0,0,.15)}button,input,select,textarea{font:inherit}p,small{margin:0 0 20px}small{font-size:13px;font-size:.8125rem;display:block}h1{font-size:64px;font-size:4rem;font-weight:600;letter-spacing:-.025em;line-height:1.2;margin:0 0 20px}.button,.button__count{align-items:center;background:#fff;border:0;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.1);color:#55646b;display:inline-flex;padding:15px;position:relative;text-shadow:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle}.button{font-weight:600;padding-left:20px;padding-right:20px;transition:all .2s ease}.button:focus,.button:hover{color:#343f4a}.button:focus::after,.button:hover::after{display:none}.button:hover{box-shadow:0 2px 2px rgba(0,0,0,.1);transform:translateY(-1px)}.button:focus{outline:0}.button.tab-focus{box-shadow:0 0 0 3px rgba(255,255,255,.35);outline:0}.button:active{transform:translateY(1px)}.button--with-count{display:inline-flex}.button--with-count .button .icon{flex-shrink:0}.button__count{animation:fadein .2s ease;margin-left:10px}.button__count::before{border:5px solid transparent;border-left-width:0;border-right-color:#fff;content:'';height:0;position:absolute;right:100%;top:50%;transform:translateY(-50%);width:0}header{padding-bottom:20px;text-align:center}header .call-to-action{margin-top:30px}@media only screen and (min-width:768px){header{margin-right:60px;max-width:360px;padding-bottom:40px;text-align:left}}.icon{fill:currentColor;height:16px;vertical-align:-3px;width:16px}a svg,button svg,button.faux-link svg,label svg{pointer-events:none}.btn .icon,a .icon,button.faux-link .icon{margin-right:6px}button.faux-link{background:0 0;border:0;border-radius:0;cursor:pointer;font:inherit;line-height:1.75;margin:0;padding:0;position:relative;text-align:inherit;text-shadow:inherit;-moz-user-select:text;vertical-align:baseline;width:auto}a,button.faux-link{border-bottom:1px dotted currentColor;color:#fff;font-weight:600;position:relative;text-decoration:none;transition:all .2s ease}a::after,button.faux-link::after{background:currentColor;content:'';height:1px;left:50%;position:absolute;top:100%;transform:translateX(-50%);transition:width .2s ease;width:0}a:focus,a:hover,button.faux-link:focus,button.faux-link:hover{border-bottom-color:transparent;outline:0}a:focus::after,a:hover::after,button.faux-link:focus::after,button.faux-link:hover::after{width:100%}a.tab-focus,button.tab-focus.faux-link{box-shadow:0 0 0 3px rgba(255,255,255,.35);outline:0}a.no-border::after,button.no-border.faux-link::after{display:none}li,ul{list-style:none;margin:0;padding:0}audio,img,video{max-width:100%;vertical-align:middle}nav{display:flex;justify-content:center;margin-bottom:20px}video{max-width:100%;vertical-align:middle}.plyr{border-radius:4px;box-shadow:0 2px 5px rgba(0,0,0,.2);margin:20px auto}.plyr.plyr--audio{max-width:480px}.plyr__video-wrapper::after{border:1px solid rgba(0,0,0,.15);border-radius:inherit;bottom:0;content:'';left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:3}.plyr__cite{display:none;margin-top:20px}.plyr__cite .icon{margin-right:4px}.plyr--audio~ul .plyr__cite--audio,.plyr--video:not(.plyr--youtube):not(.plyr--vimeo)~ul .plyr__cite--video,.plyr--vimeo~ul .plyr__cite--vimeo,.plyr--youtube~ul .plyr__cite--youtube{display:block}@keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-popup{0%{opacity:.5;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}.plyr{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;direction:ltr;font-family:inherit;font-variant-numeric:tabular-nums;font-weight:500;line-height:1.7;max-width:100%;min-width:200px;position:relative;text-shadow:none;transition:box-shadow .3s ease}.plyr audio,.plyr video{border-radius:inherit;height:auto;vertical-align:middle;width:100%}.plyr button{font:inherit;line-height:inherit;width:auto}.plyr:focus{outline:0}.plyr--full-ui{box-sizing:border-box}.plyr--full-ui *,.plyr--full-ui ::after,.plyr--full-ui ::before{box-sizing:inherit}.plyr--full-ui a,.plyr--full-ui button,.plyr--full-ui button.faux-link,.plyr--full-ui input,.plyr--full-ui label{touch-action:manipulation}.plyr__badge{background:#4f5b5f;border-radius:2px;color:#fff;font-size:9px;line-height:1;padding:3px 4px}.plyr--full-ui ::-webkit-media-text-track-container{display:none}.plyr__captions{animation:plyr-fade-in .3s ease;bottom:0;color:#fff;display:none;font-size:12px;left:0;padding:10px;position:absolute;text-align:center;transform:translateY(-40px);transition:transform .4s ease-in-out;width:100%}.plyr__captions span{background:rgba(0,0,0,.8);border-radius:2px;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:185%;padding:.2em .5em;white-space:pre-wrap}.plyr__captions span div{display:inline}.plyr__captions span:empty{display:none}@media (min-width:480px){.plyr__captions{font-size:13px;padding:20px}}@media (min-width:768px){.plyr__captions{font-size:18px}}.plyr--captions-active .plyr__captions{display:block}.plyr--hide-controls .plyr__captions{transform:translateY(-15px)}.plyr__control{background:0 0;border:0;border-radius:3px;color:inherit;cursor:pointer;flex-shrink:0;overflow:visible;padding:7px;position:relative;transition:all .3s ease}.plyr__control svg{display:block;fill:currentColor;height:18px;pointer-events:none;width:18px}.plyr__control:focus{outline:0}.plyr__control.plyr__tab-focus{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__control[aria-pressed=false] .icon--pressed,.plyr__control[aria-pressed=false] .label--pressed,.plyr__control[aria-pressed=true] .icon--not-pressed,.plyr__control[aria-pressed=true] .label--not-pressed{display:none}.plyr--audio .plyr__control.plyr__tab-focus,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr__control--overlaid{background:rgba(26,175,255,.8);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;display:none;left:50%;padding:15px;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:2}.plyr__control--overlaid svg{height:20px;left:2px;position:relative;width:20px}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{background:#1aafff}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{align-items:center;display:flex;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__menu:first-child+[data-plyr=pause],.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__progress:first-child+[data-plyr=pause],.plyr__controls .plyr__time:first-child,.plyr__controls .plyr__time:first-child+[data-plyr=pause],.plyr__controls>.plyr__control:first-child,.plyr__controls>.plyr__control:first-child+[data-plyr=pause]{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:10px}.plyr__controls .plyr__menu+.plyr__control,.plyr__controls>.plyr__control+.plyr__control,.plyr__controls>.plyr__control+.plyr__menu{margin-left:5px}}.plyr--video .plyr__controls{background:linear-gradient(transparent,rgba(0,0,0,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;bottom:0;color:#fff;left:0;padding:35px 10px 10px;position:absolute;right:0;transition:opacity .4s ease-in-out,transform .4s ease-in-out;z-index:2}.plyr--video .plyr__controls .plyr__control svg{-webkit-filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15));filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15))}.plyr--video .plyr__controls .plyr__control.plyr__tab-focus,.plyr--video .plyr__controls .plyr__control:hover,.plyr--video .plyr__controls .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr--audio .plyr__controls{background:#fff;border-radius:inherit;color:#4f5b5f;padding:10px}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none;transform:translateY(100%)}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip]{display:none}.plyr--airplay-supported [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen],.plyr--pip-supported [data-plyr=pip]{display:inline-block}.plyr__video-embed{height:0;padding-bottom:56.25%;position:relative}.plyr__video-embed iframe{border:0;height:100%;left:0;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr--full-ui .plyr__video-embed iframe{pointer-events:none}.plyr--full-ui .plyr__video-embed>.plyr__video-embed__container{padding-bottom:240%;position:relative;transform:translateY(-38.28125%)}.plyr__menu{display:flex;position:relative}.plyr__menu .plyr__control svg{transition:transform .3s ease}.plyr__menu .plyr__control[aria-expanded=true] svg{transform:rotate(90deg)}.plyr__menu .plyr__control[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{animation:plyr-popup .2s ease;background:rgba(255,255,255,.9);border-radius:4px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:13px;margin-bottom:10px;position:absolute;right:-3px;text-align:left;white-space:nowrap;z-index:3}.plyr__menu__container>div{overflow:hidden;transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu__container::after{border:4px solid transparent;border-top-color:rgba(255,255,255,.9);content:'';height:0;position:absolute;right:15px;top:100%;width:0}.plyr__menu__container ul{list-style:none;margin:0;overflow:hidden;padding:7px}.plyr__menu__container ul li{margin-top:2px}.plyr__menu__container ul li:first-child{margin-top:0}.plyr__menu__container .plyr__control{align-items:center;color:#4f5b5f;display:flex;font-size:13px;padding:4px 14px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__menu__container .plyr__control::after{border:4px solid transparent;content:'';position:absolute;top:50%;transform:translateY(-50%)}.plyr__menu__container .plyr__control--forward{padding-right:28px}.plyr__menu__container .plyr__control--forward::after{border-left-color:rgba(79,91,95,.8);right:5px}.plyr__menu__container .plyr__control--forward.plyr__tab-focus::after,.plyr__menu__container .plyr__control--forward:hover::after{border-left-color:currentColor}.plyr__menu__container .plyr__control--back{font-weight:500;margin:7px;margin-bottom:3px;padding-left:28px;position:relative;width:calc(100% - 14px)}.plyr__menu__container .plyr__control--back::after{border-right-color:rgba(79,91,95,.8);left:7px}.plyr__menu__container .plyr__control--back::before{background:#b7c5cd;box-shadow:0 1px 0 #fff;content:'';height:1px;left:0;margin-top:4px;overflow:hidden;position:absolute;right:0;top:100%}.plyr__menu__container .plyr__control--back.plyr__tab-focus::after,.plyr__menu__container .plyr__control--back:hover::after{border-right-color:currentColor}.plyr__menu__container label.plyr__control{padding-left:7px}.plyr__menu__container label.plyr__control input[type=radio]+span{background:rgba(0,0,0,.1);border-radius:100%;display:block;flex-shrink:0;height:16px;margin-right:10px;position:relative;transition:all .3s ease;width:16px}.plyr__menu__container label.plyr__control input[type=radio]+span::after{background:#fff;border-radius:100%;content:'';height:6px;left:5px;opacity:0;position:absolute;top:5px;transform:scale(0);transition:transform .3s ease,opacity .3s ease;width:6px}.plyr__menu__container label.plyr__control input[type=radio]:checked+span{background:#1aafff}.plyr__menu__container label.plyr__control input[type=radio]:checked+span::after{opacity:1;transform:scale(1)}.plyr__menu__container label.plyr__control input[type=radio]:focus+span{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__menu__container label.plyr__control.plyr__tab-focus input[type=radio]+span,.plyr__menu__container label.plyr__control:hover input[type=radio]+span{background:rgba(0,0,0,.1)}.plyr__menu__container .plyr__menu__value{align-items:center;display:flex;margin-left:auto;margin-right:-7px;overflow:hidden;padding-left:25px;pointer-events:none}.plyr__progress{display:flex;flex:1;position:relative}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress .plyr__tooltip{font-size:11px;left:0}.plyr__progress--buffer{-webkit-appearance:none;background:0 0;border:0;border-radius:100px;height:6px;left:0;margin:-3px 0 0;padding:0;position:absolute;top:50%;width:100%}.plyr__progress--buffer::-webkit-progress-bar{background:0 0;transition:width .2s ease}.plyr__progress--buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:6px}.plyr__progress--buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:6px;transition:width .2s ease}.plyr__progress--buffer::-ms-fill{border-radius:100px;transition:width .2s ease}.plyr--video .plyr__progress--buffer{box-shadow:0 1px 1px rgba(0,0,0,.15);color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress--buffer{color:rgba(183,197,205,.66)}.plyr--loading .plyr__progress--buffer{animation:plyr-progress 1s linear infinite;background-image:linear-gradient(-45deg,rgba(47,52,61,.6) 25%,transparent 25%,transparent 50%,rgba(47,52,61,.6) 50%,rgba(47,52,61,.6) 75%,transparent 75%,transparent);background-repeat:repeat-x;background-size:25px 25px;color:transparent}.plyr--video.plyr--loading .plyr__progress--buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress--buffer{background-color:rgba(183,197,205,.66)}.plyr__poster{background-color:#000;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;height:100%;left:0;opacity:0;position:absolute;top:0;transition:opacity .3s ease;width:100%;z-index:1;pointer-events:none}.plyr--stopped .plyr__poster{opacity:1}.plyr--full-ui input[type=range]{-webkit-appearance:none;background:0 0;border:0;border-radius:28px;color:#1aafff;display:block;height:20px;margin:0;padding:0;transition:box-shadow .3s ease;width:100%}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-webkit-user-select:none;user-select:none;background-image:linear-gradient(to right,currentColor var(--value,0),transparent var(--value,0))}.plyr--full-ui input[type=range]::-webkit-slider-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;-webkit-appearance:none;margin-top:-4px}.plyr--full-ui input[type=range]::-moz-range-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-moz-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-moz-range-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px}.plyr--full-ui input[type=range]::-moz-range-progress{background:currentColor;border-radius:3px;height:6px}.plyr--full-ui input[type=range]::-ms-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;color:transparent}.plyr--full-ui input[type=range]::-ms-fill-upper{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-ms-fill-lower{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;background:currentColor}.plyr--full-ui input[type=range]::-ms-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;margin-top:0}.plyr--full-ui input[type=range]::-ms-tooltip{display:none}.plyr--full-ui input[type=range]:focus{outline:0}.plyr--full-ui input[type=range]::-moz-focus-outer{border:0}.plyr--full-ui input[type=range].plyr__tab-focus::-webkit-slider-runnable-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-moz-range-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-ms-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr__time{font-size:11px}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}@media (max-width:767px){.plyr__time+.plyr__time{display:none}}.plyr--video .plyr__time{text-shadow:0 1px 1px rgba(0,0,0,.15)}.plyr__tooltip{background:rgba(255,255,255,.9);border-radius:3px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:12px;font-weight:500;line-height:1.3;margin-bottom:10px;opacity:0;padding:5px 7.5px;pointer-events:none;position:absolute;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease;white-space:nowrap;z-index:2}.plyr__tooltip::before{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.9);bottom:-4px;content:'';height:0;left:50%;position:absolute;transform:translateX(-50%);width:0;z-index:2}.plyr .plyr__control.plyr__tab-focus .plyr__tooltip,.plyr .plyr__control:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%,0) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls>.plyr__control:first-child .plyr__tooltip::before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip::before{left:16px}.plyr__controls>.plyr__control:last-child .plyr__tooltip{right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip::before{left:auto;right:16px;transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{transform:translate(0,0) scale(1)}.plyr--video{overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{background:#000;border-radius:inherit;overflow:hidden;position:relative;z-index:0}.plyr__volume{flex:1;position:relative}.plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr__volume{max-width:50px}}@media (min-width:768px){.plyr__volume{max-width:80px}}.plyr--is-ios .plyr__volume{display:none!important}.plyr--is-ios.plyr--vimeo [data-plyr=mute]{display:none!important}.plyr--has-error{pointer-events:none}.plyr--has-error::after{align-items:center;background:#000;color:#fff;content:attr(data-plyr-error);display:flex;font-size:13px;height:100%;justify-content:center;left:0;position:absolute;text-align:center;text-shadow:0 1px 1px #000;top:0;width:100%;z-index:10}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:fullscreen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:fullscreen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}.plyr:fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}.plyr:-moz-full-screen .plyr__captions{font-size:21px}.plyr:-ms-fullscreen .plyr__captions{font-size:21px}.plyr:fullscreen .plyr__captions{font-size:21px}}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-moz-full-screen .plyr__captions{font-size:21px}}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-ms-fullscreen .plyr__captions{font-size:21px}}.plyr--fullscreen-fallback{background:#000;border-radius:0!important;height:100%;margin:0;width:100%;bottom:0;left:0;position:fixed;right:0;top:0;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-fallback .plyr__video-embed{overflow:visible}.plyr--fullscreen-fallback.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen{display:block}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr--fullscreen-fallback.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr--fullscreen-fallback .plyr__captions{font-size:21px}}.plyr__ads{border-radius:inherit;bottom:0;cursor:pointer;left:0;overflow:hidden;position:absolute;right:0;top:0;z-index:-1}.plyr__ads>div,.plyr__ads>div iframe{height:100%;position:absolute;width:100%}.plyr__ads::after{background:rgba(47,52,61,.8);border-radius:2px;bottom:10px;color:#fff;content:attr(data-badge-text);font-size:11px;padding:2px 6px;pointer-events:none;position:absolute;right:10px;z-index:3}.plyr__ads::after:empty{display:none}.plyr__cues{background:currentColor;display:block;height:6px;left:0;margin:-3px 0 0;opacity:.8;position:absolute;top:50%;width:3px;z-index:3}.plyr--no-transition{transition:none!important}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;border:0!important;height:1px!important;padding:0!important;position:absolute!important;width:1px!important}.no-border{border:0}[hidden]{display:none}.sr-only{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;opacity:.001;overflow:hidden;padding:0;position:absolute;width:1px} \ No newline at end of file
+@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:300;src:url(https://cdn.plyr.io/static/fonts/gordita-light.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-light.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:400;src:url(https://cdn.plyr.io/static/fonts/gordita-regular.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-regular.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:500;src:url(https://cdn.plyr.io/static/fonts/gordita-medium.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-medium.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:600;src:url(https://cdn.plyr.io/static/fonts/gordita-bold.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-bold.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:900;src:url(https://cdn.plyr.io/static/fonts/gordita-black.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-black.woff) format("woff")}@keyframes fadein{0%{opacity:0}100%{opacity:1}}/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a,button.faux-link{background-color:transparent;-webkit-text-decoration-skip:objects}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}*,::after,::before{box-sizing:border-box}body,html{display:flex;width:100%}html{background:linear-gradient(to left top,#4dc1ff,#0074b3);background-attachment:fixed;height:100%}body{align-items:center;display:flex;flex-direction:column;min-height:100%}.grid{flex:1;overflow:auto}main{margin:auto;padding-bottom:1px;text-align:center}aside{align-items:center;background:#fff;color:#55646b;display:flex;flex-shrink:0;justify-content:center;padding:15px;position:relative;text-align:center;text-shadow:none;width:100%}aside .icon{fill:#4baaf4;margin-right:10px}aside p{margin:0}aside a,aside button.faux-link{color:#4baaf4}aside a.tab-focus,aside button.tab-focus.faux-link{box-shadow:0 0 0 3px rgba(75,170,244,.35);outline:0}.grid{margin:0 auto;padding:20px}@media only screen and (min-width:768px){.grid{align-items:center;display:flex;max-width:1260px;width:100%}.grid>*{flex:1}}html{font-size:100%}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-size:15px;font-size:.9375rem;color:#fff;font-family:Gordita,Avenir,"Helvetica Neue",sans-serif;font-weight:500;line-height:1.75;text-shadow:0 1px 1px rgba(0,0,0,.15)}button,input,select,textarea{font:inherit}p,small{margin:0 0 20px}small{font-size:13px;font-size:.8125rem;display:block}h1{font-size:64px;font-size:4rem;font-weight:600;letter-spacing:-.025em;line-height:1.2;margin:0 0 20px}.button,.button__count{align-items:center;background:#fff;border:0;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.1);color:#55646b;display:inline-flex;padding:15px;position:relative;text-shadow:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle}.button{font-weight:600;padding-left:20px;padding-right:20px;transition:all .2s ease}.button:focus,.button:hover{color:#343f4a}.button:focus::after,.button:hover::after{display:none}.button:hover{box-shadow:0 2px 2px rgba(0,0,0,.1);transform:translateY(-1px)}.button:focus{outline:0}.button.tab-focus{box-shadow:0 0 0 3px rgba(255,255,255,.35);outline:0}.button:active{transform:translateY(1px)}.button--with-count{display:inline-flex}.button--with-count .button .icon{flex-shrink:0}.button__count{animation:fadein .2s ease;margin-left:10px}.button__count::before{border:5px solid transparent;border-left-width:0;border-right-color:#fff;content:'';height:0;position:absolute;right:100%;top:50%;transform:translateY(-50%);width:0}header{padding-bottom:20px;text-align:center}header .call-to-action{margin-top:30px}@media only screen and (min-width:768px){header{margin-right:60px;max-width:360px;padding-bottom:40px;text-align:left}}.icon{fill:currentColor;height:16px;vertical-align:-3px;width:16px}a svg,button svg,button.faux-link svg,label svg{pointer-events:none}.btn .icon,a .icon,button.faux-link .icon{margin-right:6px}button.faux-link{background:0 0;border:0;border-radius:0;cursor:pointer;font:inherit;line-height:1.75;margin:0;padding:0;position:relative;text-align:inherit;text-shadow:inherit;-moz-user-select:text;vertical-align:baseline;width:auto}a,button.faux-link{border-bottom:1px dotted currentColor;color:#fff;font-weight:600;position:relative;text-decoration:none;transition:all .2s ease}a::after,button.faux-link::after{background:currentColor;content:'';height:1px;left:50%;position:absolute;top:100%;transform:translateX(-50%);transition:width .2s ease;width:0}a:focus,a:hover,button.faux-link:focus,button.faux-link:hover{border-bottom-color:transparent;outline:0}a:focus::after,a:hover::after,button.faux-link:focus::after,button.faux-link:hover::after{width:100%}a.tab-focus,button.tab-focus.faux-link{box-shadow:0 0 0 3px rgba(255,255,255,.35);outline:0}a.no-border::after,button.no-border.faux-link::after{display:none}li,ul{list-style:none;margin:0;padding:0}audio,img,video{max-width:100%;vertical-align:middle}nav{display:flex;justify-content:center;margin-bottom:20px}video{max-width:100%;vertical-align:middle}.plyr{border-radius:4px;box-shadow:0 2px 5px rgba(0,0,0,.2);margin:20px auto}.plyr.plyr--audio{max-width:480px}.plyr__video-wrapper::after{border:1px solid rgba(0,0,0,.15);border-radius:inherit;bottom:0;content:'';left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:3}.plyr__cite{display:none;margin-top:20px}.plyr__cite .icon{margin-right:4px}.plyr--audio~ul .plyr__cite--audio,.plyr--video:not(.plyr--youtube):not(.plyr--vimeo)~ul .plyr__cite--video,.plyr--vimeo~ul .plyr__cite--vimeo,.plyr--youtube~ul .plyr__cite--youtube{display:block}@keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-popup{0%{opacity:.5;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}.plyr{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;direction:ltr;font-family:inherit;font-variant-numeric:tabular-nums;font-weight:500;line-height:1.7;max-width:100%;min-width:200px;position:relative;text-shadow:none;transition:box-shadow .3s ease}.plyr audio,.plyr video{border-radius:inherit;height:auto;vertical-align:middle;width:100%}.plyr button{font:inherit;line-height:inherit;width:auto}.plyr:focus{outline:0}.plyr--full-ui{box-sizing:border-box}.plyr--full-ui *,.plyr--full-ui ::after,.plyr--full-ui ::before{box-sizing:inherit}.plyr--full-ui a,.plyr--full-ui button,.plyr--full-ui button.faux-link,.plyr--full-ui input,.plyr--full-ui label{touch-action:manipulation}.plyr__badge{background:#4f5b5f;border-radius:2px;color:#fff;font-size:9px;line-height:1;padding:3px 4px}.plyr--full-ui ::-webkit-media-text-track-container{display:none}.plyr__captions{animation:plyr-fade-in .3s ease;bottom:0;color:#fff;display:none;font-size:12px;left:0;padding:10px;position:absolute;text-align:center;transform:translateY(-40px);transition:transform .4s ease-in-out;width:100%}.plyr__captions span{background:rgba(0,0,0,.8);border-radius:2px;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:185%;padding:.2em .5em;white-space:pre-wrap}.plyr__captions span div{display:inline}.plyr__captions span:empty{display:none}@media (min-width:480px){.plyr__captions{font-size:13px;padding:20px}}@media (min-width:768px){.plyr__captions{font-size:18px}}.plyr--captions-active .plyr__captions{display:block}.plyr--hide-controls .plyr__captions{transform:translateY(-15px)}.plyr__control{background:0 0;border:0;border-radius:3px;color:inherit;cursor:pointer;flex-shrink:0;overflow:visible;padding:7px;position:relative;transition:all .3s ease}.plyr__control svg{display:block;fill:currentColor;height:18px;pointer-events:none;width:18px}.plyr__control:focus{outline:0}.plyr__control.plyr__tab-focus{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__control[aria-pressed=false] .icon--pressed,.plyr__control[aria-pressed=false] .label--pressed,.plyr__control[aria-pressed=true] .icon--not-pressed,.plyr__control[aria-pressed=true] .label--not-pressed{display:none}.plyr--audio .plyr__control.plyr__tab-focus,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr__control--overlaid{background:rgba(26,175,255,.8);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;display:none;left:50%;padding:15px;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:2}.plyr__control--overlaid svg{height:20px;left:2px;position:relative;width:20px}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{background:#1aafff}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{align-items:center;display:flex;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__menu:first-child+[data-plyr=pause],.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__progress:first-child+[data-plyr=pause],.plyr__controls .plyr__time:first-child,.plyr__controls .plyr__time:first-child+[data-plyr=pause],.plyr__controls>.plyr__control:first-child,.plyr__controls>.plyr__control:first-child+[data-plyr=pause]{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:10px}.plyr__controls .plyr__menu+.plyr__control,.plyr__controls>.plyr__control+.plyr__control,.plyr__controls>.plyr__control+.plyr__menu{margin-left:5px}}.plyr--video .plyr__controls{background:linear-gradient(rgba(0,0,0,0),rgba(0,0,0,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;bottom:0;color:#fff;left:0;padding:35px 10px 10px;position:absolute;right:0;transition:opacity .4s ease-in-out,transform .4s ease-in-out;z-index:2}.plyr--video .plyr__controls .plyr__control svg{-webkit-filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15));filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15))}.plyr--video .plyr__controls .plyr__control.plyr__tab-focus,.plyr--video .plyr__controls .plyr__control:hover,.plyr--video .plyr__controls .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr--audio .plyr__controls{background:#fff;border-radius:inherit;color:#4f5b5f;padding:10px}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none;transform:translateY(100%)}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip]{display:none}.plyr--airplay-supported [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen],.plyr--pip-supported [data-plyr=pip]{display:inline-block}.plyr__video-embed{height:0;padding-bottom:56.25%;position:relative}.plyr__video-embed iframe{border:0;height:100%;left:0;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr--full-ui .plyr__video-embed iframe{pointer-events:none}.plyr--full-ui .plyr__video-embed>.plyr__video-embed__container{padding-bottom:240%;position:relative;transform:translateY(-38.28125%)}.plyr__menu{display:flex;position:relative}.plyr__menu .plyr__control svg{transition:transform .3s ease}.plyr__menu .plyr__control[aria-expanded=true] svg{transform:rotate(90deg)}.plyr__menu .plyr__control[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{animation:plyr-popup .2s ease;background:rgba(255,255,255,.9);border-radius:4px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:13px;margin-bottom:10px;position:absolute;right:-3px;text-align:left;white-space:nowrap;z-index:3}.plyr__menu__container>div{overflow:hidden;transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu__container::after{border:4px solid transparent;border-top-color:rgba(255,255,255,.9);content:'';height:0;position:absolute;right:15px;top:100%;width:0}.plyr__menu__container ul{list-style:none;margin:0;overflow:hidden;padding:7px}.plyr__menu__container ul li{margin-top:2px}.plyr__menu__container ul li:first-child{margin-top:0}.plyr__menu__container .plyr__control{align-items:center;color:#4f5b5f;display:flex;font-size:13px;padding:4px 14px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__menu__container .plyr__control::after{border:4px solid transparent;content:'';position:absolute;top:50%;transform:translateY(-50%)}.plyr__menu__container .plyr__control--forward{padding-right:28px}.plyr__menu__container .plyr__control--forward::after{border-left-color:rgba(79,91,95,.8);right:5px}.plyr__menu__container .plyr__control--forward.plyr__tab-focus::after,.plyr__menu__container .plyr__control--forward:hover::after{border-left-color:currentColor}.plyr__menu__container .plyr__control--back{font-weight:500;margin:7px;margin-bottom:3px;padding-left:28px;position:relative;width:calc(100% - 14px)}.plyr__menu__container .plyr__control--back::after{border-right-color:rgba(79,91,95,.8);left:7px}.plyr__menu__container .plyr__control--back::before{background:#b7c5cd;box-shadow:0 1px 0 #fff;content:'';height:1px;left:0;margin-top:4px;overflow:hidden;position:absolute;right:0;top:100%}.plyr__menu__container .plyr__control--back.plyr__tab-focus::after,.plyr__menu__container .plyr__control--back:hover::after{border-right-color:currentColor}.plyr__menu__container label.plyr__control{padding-left:7px}.plyr__menu__container label.plyr__control input[type=radio]+span{background:rgba(0,0,0,.1);border-radius:100%;display:block;flex-shrink:0;height:16px;margin-right:10px;position:relative;transition:all .3s ease;width:16px}.plyr__menu__container label.plyr__control input[type=radio]+span::after{background:#fff;border-radius:100%;content:'';height:6px;left:5px;opacity:0;position:absolute;top:5px;transform:scale(0);transition:transform .3s ease,opacity .3s ease;width:6px}.plyr__menu__container label.plyr__control input[type=radio]:checked+span{background:#1aafff}.plyr__menu__container label.plyr__control input[type=radio]:checked+span::after{opacity:1;transform:scale(1)}.plyr__menu__container label.plyr__control input[type=radio]:focus+span{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__menu__container label.plyr__control.plyr__tab-focus input[type=radio]+span,.plyr__menu__container label.plyr__control:hover input[type=radio]+span{background:rgba(0,0,0,.1)}.plyr__menu__container .plyr__menu__value{align-items:center;display:flex;margin-left:auto;margin-right:-7px;overflow:hidden;padding-left:25px;pointer-events:none}.plyr__progress{display:flex;flex:1;position:relative;margin-right:14px;left:7px}.plyr__progress input[type=range]{position:relative;z-index:2;width:calc(100% + 14px)!important;margin:0 -7px!important}.plyr__progress .plyr__tooltip{font-size:11px;left:0}.plyr__progress--buffer{-webkit-appearance:none;background:0 0;border:0;border-radius:100px;height:6px;left:0;margin:-3px 0 0;padding:0;position:absolute;top:50%;width:100%}.plyr__progress--buffer::-webkit-progress-bar{background:0 0;transition:width .2s ease}.plyr__progress--buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:6px}.plyr__progress--buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:6px;transition:width .2s ease}.plyr__progress--buffer::-ms-fill{border-radius:100px;transition:width .2s ease}.plyr--video .plyr__progress--buffer{box-shadow:0 1px 1px rgba(0,0,0,.15);color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress--buffer{color:rgba(183,197,205,.66)}.plyr--loading .plyr__progress--buffer{animation:plyr-progress 1s linear infinite;background-image:linear-gradient(-45deg,rgba(47,52,61,.6) 25%,transparent 25%,transparent 50%,rgba(47,52,61,.6) 50%,rgba(47,52,61,.6) 75%,transparent 75%,transparent);background-repeat:repeat-x;background-size:25px 25px;color:transparent}.plyr--video.plyr--loading .plyr__progress--buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress--buffer{background-color:rgba(183,197,205,.66)}.plyr__poster{background-color:#000;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;height:100%;left:0;opacity:0;position:absolute;top:0;transition:opacity .3s ease;width:100%;z-index:1;pointer-events:none}.plyr--stopped.plyr__poster-enabled .plyr__poster{opacity:1}.plyr--full-ui input[type=range]{-webkit-appearance:none;background:0 0;border:0;border-radius:28px;color:#1aafff;display:block;height:20px;margin:0;padding:0;transition:box-shadow .3s ease;width:100%}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-webkit-user-select:none;user-select:none;background-image:linear-gradient(to right,currentColor var(--value,0),transparent var(--value,0))}.plyr--full-ui input[type=range]::-webkit-slider-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;-webkit-appearance:none;margin-top:-4px}.plyr--full-ui input[type=range]::-moz-range-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-moz-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-moz-range-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px}.plyr--full-ui input[type=range]::-moz-range-progress{background:currentColor;border-radius:3px;height:6px}.plyr--full-ui input[type=range]::-ms-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;color:transparent}.plyr--full-ui input[type=range]::-ms-fill-upper{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-ms-fill-lower{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;background:currentColor}.plyr--full-ui input[type=range]::-ms-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;margin-top:0}.plyr--full-ui input[type=range]::-ms-tooltip{display:none}.plyr--full-ui input[type=range]:focus{outline:0}.plyr--full-ui input[type=range]::-moz-focus-outer{border:0}.plyr--full-ui input[type=range].plyr__tab-focus::-webkit-slider-runnable-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-moz-range-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-ms-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr__time{font-size:11px}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}@media (max-width:767px){.plyr__time+.plyr__time{display:none}}.plyr--video .plyr__time{text-shadow:0 1px 1px rgba(0,0,0,.15)}.plyr__tooltip{background:rgba(255,255,255,.9);border-radius:3px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:12px;font-weight:500;line-height:1.3;margin-bottom:10px;opacity:0;padding:5px 7.5px;pointer-events:none;position:absolute;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease;white-space:nowrap;z-index:2}.plyr__tooltip::before{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.9);bottom:-4px;content:'';height:0;left:50%;position:absolute;transform:translateX(-50%);width:0;z-index:2}.plyr .plyr__control.plyr__tab-focus .plyr__tooltip,.plyr .plyr__control:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%,0) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls>.plyr__control:first-child .plyr__tooltip::before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip::before{left:16px}.plyr__controls>.plyr__control:last-child .plyr__tooltip{right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip::before{left:auto;right:16px;transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{transform:translate(0,0) scale(1)}.plyr--video{overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{background:#000;border-radius:inherit;overflow:hidden;position:relative;z-index:0}.plyr__volume{flex:1;position:relative}.plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr__volume{max-width:50px}}@media (min-width:768px){.plyr__volume{max-width:80px}}.plyr--is-ios .plyr__volume{display:none!important}.plyr--is-ios.plyr--vimeo [data-plyr=mute]{display:none!important}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:fullscreen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:fullscreen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}.plyr:fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}.plyr:-moz-full-screen .plyr__captions{font-size:21px}.plyr:-ms-fullscreen .plyr__captions{font-size:21px}.plyr:fullscreen .plyr__captions{font-size:21px}}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-moz-full-screen .plyr__captions{font-size:21px}}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-ms-fullscreen .plyr__captions{font-size:21px}}.plyr--fullscreen-fallback{background:#000;border-radius:0!important;height:100%;margin:0;width:100%;bottom:0;left:0;position:fixed;right:0;top:0;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-fallback .plyr__video-embed{overflow:visible}.plyr--fullscreen-fallback.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen{display:block}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr--fullscreen-fallback.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr--fullscreen-fallback .plyr__captions{font-size:21px}}.plyr__ads{border-radius:inherit;bottom:0;cursor:pointer;left:0;overflow:hidden;position:absolute;right:0;top:0;z-index:-1}.plyr__ads>div,.plyr__ads>div iframe{height:100%;position:absolute;width:100%}.plyr__ads::after{background:rgba(47,52,61,.8);border-radius:2px;bottom:10px;color:#fff;content:attr(data-badge-text);font-size:11px;padding:2px 6px;pointer-events:none;position:absolute;right:10px;z-index:3}.plyr__ads::after:empty{display:none}.plyr__cues{background:currentColor;display:block;height:6px;left:0;margin:-3px 0 0;opacity:.8;position:absolute;top:50%;width:3px;z-index:3}.plyr--no-transition{transition:none!important}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;border:0!important;height:1px!important;padding:0!important;position:absolute!important;width:1px!important}.no-border{border:0}[hidden]{display:none}.sr-only{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;opacity:.001;overflow:hidden;padding:0;position:absolute;width:1px} \ No newline at end of file
diff --git a/demo/dist/demo.js b/demo/dist/demo.js
index aebe368c..3f6273ec 100644
--- a/demo/dist/demo.js
+++ b/demo/dist/demo.js
@@ -1,4 +1,4 @@
-(function () {
+typeof navigator === "object" && (function () {
'use strict';
var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
@@ -97,7 +97,7 @@ function isObject(what) {
// Yanked from https://git.io/vS8DV re-used under CC0
// with some tiny modifications
function isError(value) {
- switch ({}.toString.call(value)) {
+ switch (Object.prototype.toString.call(value)) {
case '[object Error]':
return true;
case '[object Exception]':
@@ -110,7 +110,15 @@ function isError(value) {
}
function isErrorEvent(value) {
- return supportsErrorEvent() && {}.toString.call(value) === '[object ErrorEvent]';
+ return Object.prototype.toString.call(value) === '[object ErrorEvent]';
+}
+
+function isDOMError(value) {
+ return Object.prototype.toString.call(value) === '[object DOMError]';
+}
+
+function isDOMException(value) {
+ return Object.prototype.toString.call(value) === '[object DOMException]';
}
function isUndefined(what) {
@@ -153,6 +161,24 @@ function supportsErrorEvent() {
}
}
+function supportsDOMError() {
+ try {
+ new DOMError(''); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsDOMException() {
+ try {
+ new DOMException(''); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
function supportsFetch() {
if (!('fetch' in _window)) return false;
@@ -668,6 +694,8 @@ var utils = {
isObject: isObject,
isError: isError,
isErrorEvent: isErrorEvent,
+ isDOMError: isDOMError,
+ isDOMException: isDOMException,
isUndefined: isUndefined,
isFunction: isFunction,
isPlainObject: isPlainObject,
@@ -675,6 +703,8 @@ var utils = {
isArray: isArray,
isEmptyObject: isEmptyObject,
supportsErrorEvent: supportsErrorEvent,
+ supportsDOMError: supportsDOMError,
+ supportsDOMException: supportsDOMException,
supportsFetch: supportsFetch,
supportsReferrerPolicy: supportsReferrerPolicy,
supportsPromiseRejectionEvent: supportsPromiseRejectionEvent,
@@ -729,10 +759,24 @@ var ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Ran
function getLocationHref() {
if (typeof document === 'undefined' || document.location == null) return '';
-
return document.location.href;
}
+function getLocationOrigin() {
+ if (typeof document === 'undefined' || document.location == null) return '';
+
+ // Oh dear IE10...
+ if (!document.location.origin) {
+ document.location.origin =
+ document.location.protocol +
+ '//' +
+ document.location.hostname +
+ (document.location.port ? ':' + document.location.port : '');
+ }
+
+ return document.location.origin;
+}
+
/**
* TraceKit.report: cross-browser processing of unhandled exceptions
*
@@ -1140,6 +1184,44 @@ TraceKit.computeStackTrace = (function computeStackTraceWrapper() {
element.func = UNKNOWN_FUNCTION;
}
+ if (element.url && element.url.substr(0, 5) === 'blob:') {
+ // Special case for handling JavaScript loaded into a blob.
+ // We use a synchronous AJAX request here as a blob is already in
+ // memory - it's not making a network request. This will generate a warning
+ // in the browser console, but there has already been an error so that's not
+ // that much of an issue.
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', element.url, false);
+ xhr.send(null);
+
+ // If we failed to download the source, skip this patch
+ if (xhr.status === 200) {
+ var source = xhr.responseText || '';
+
+ // We trim the source down to the last 300 characters as sourceMappingURL is always at the end of the file.
+ // Why 300? To be in line with: https://github.com/getsentry/sentry/blob/4af29e8f2350e20c28a6933354e4f42437b4ba42/src/sentry/lang/javascript/processor.py#L164-L175
+ source = source.slice(-300);
+
+ // Now we dig out the source map URL
+ var sourceMaps = source.match(/\/\/# sourceMappingURL=(.*)$/);
+
+ // If we don't find a source map comment or we find more than one, continue on to the next element.
+ if (sourceMaps) {
+ var sourceMapAddress = sourceMaps[1];
+
+ // Now we check to see if it's a relative URL.
+ // If it is, convert it to an absolute one.
+ if (sourceMapAddress.charAt(0) === '~') {
+ sourceMapAddress = getLocationOrigin() + sourceMapAddress.slice(1);
+ }
+
+ // Now we strip the '.map' off of the end of the URL and update the
+ // element so that Sentry can match the map to the blob.
+ element.url = sourceMapAddress.slice(0, -4);
+ }
+ }
+ }
+
stack.push(element);
}
@@ -1651,10 +1733,12 @@ var console$1 = {
+var isErrorEvent$1 = utils.isErrorEvent;
+var isDOMError$1 = utils.isDOMError;
+var isDOMException$1 = utils.isDOMException;
var isError$1 = utils.isError;
var isObject$1 = utils.isObject;
var isPlainObject$1 = utils.isPlainObject;
-var isErrorEvent$1 = utils.isErrorEvent;
var isUndefined$1 = utils.isUndefined;
var isFunction$1 = utils.isFunction;
var isString$1 = utils.isString;
@@ -1782,7 +1866,7 @@ Raven.prototype = {
// webpack (using a build step causes webpack #1617). Grunt verifies that
// this value matches package.json during build.
// See: https://github.com/getsentry/raven-js/issues/465
- VERSION: '3.24.2',
+ VERSION: '3.25.2',
debug: false,
@@ -2114,6 +2198,23 @@ Raven.prototype = {
if (isErrorEvent$1(ex) && ex.error) {
// If it is an ErrorEvent with `error` property, extract it to get actual Error
ex = ex.error;
+ } else if (isDOMError$1(ex) || isDOMException$1(ex)) {
+ // If it is a DOMError or DOMException (which are legacy APIs, but still supported in some browsers)
+ // then we just extract the name and message, as they don't provide anything else
+ // https://developer.mozilla.org/en-US/docs/Web/API/DOMError
+ // https://developer.mozilla.org/en-US/docs/Web/API/DOMException
+ var name = ex.name || (isDOMError$1(ex) ? 'DOMError' : 'DOMException');
+ var message = ex.message ? name + ': ' + ex.message : name;
+
+ return this.captureMessage(
+ message,
+ objectMerge$1(options, {
+ // neither DOMError or DOMException provide stack trace and we most likely wont get it this way as well
+ // but it's barely any overhead so we may at least try
+ stacktrace: true,
+ trimHeadFrames: options.trimHeadFrames + 1
+ })
+ );
} else if (isError$1(ex)) {
// we have a real Error object
ex = ex;
@@ -2125,6 +2226,7 @@ Raven.prototype = {
ex = new Error(options.message);
} else {
// If none of previous checks were valid, then it means that
+ // it's not a DOMError/DOMException
// it's not a plain Object
// it's not a valid ErrorEvent (one with an error property)
// it's not an Error
@@ -3073,8 +3175,8 @@ Raven.prototype = {
var hasPushAndReplaceState =
!isChromePackagedApp &&
_window$2.history &&
- history.pushState &&
- history.replaceState;
+ _window$2.history.pushState &&
+ _window$2.history.replaceState;
if (autoBreadcrumbs.location && hasPushAndReplaceState) {
// TODO: remove onpopstate handler on uninstall()
var oldOnPopState = _window$2.onpopstate;
@@ -3103,8 +3205,8 @@ Raven.prototype = {
};
};
- fill$1(history, 'pushState', historyReplacementFunction, wrappedBuiltIns);
- fill$1(history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);
+ fill$1(_window$2.history, 'pushState', historyReplacementFunction, wrappedBuiltIns);
+ fill$1(_window$2.history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);
}
if (autoBreadcrumbs.console && 'console' in _window$2 && console.log) {
@@ -3320,7 +3422,7 @@ Raven.prototype = {
}
]
},
- culprit: fileurl
+ transaction: fileurl
},
options
);
@@ -3394,7 +3496,7 @@ Raven.prototype = {
if (this._hasNavigator && _navigator.userAgent) {
httpData.headers = {
- 'User-Agent': navigator.userAgent
+ 'User-Agent': _navigator.userAgent
};
}
@@ -3435,7 +3537,7 @@ Raven.prototype = {
if (
!last ||
current.message !== last.message || // defined for captureMessage
- current.culprit !== last.culprit // defined for captureException/onerror
+ current.transaction !== last.transaction // defined for captureException/onerror
)
return false;
diff --git a/demo/dist/demo.js.map b/demo/dist/demo.js.map
index fe867317..baea9481 100644
--- a/demo/dist/demo.js.map
+++ b/demo/dist/demo.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../node_modules/raven-js/vendor/json-stringify-safe/stringify.js","../../../node_modules/raven-js/src/utils.js","../../../node_modules/raven-js/vendor/TraceKit/tracekit.js","../../../node_modules/raven-js/vendor/md5/md5.js","../../../node_modules/raven-js/src/configError.js","../../../node_modules/raven-js/src/console.js","../../../node_modules/raven-js/src/raven.js","../../../node_modules/raven-js/src/singleton.js","demo.js"],"names":["global","stringify","_window","isError","isObject","isPlainObject","isErrorEvent","isUndefined","isFunction","isString","isArray","isEmptyObject","each","objectMerge","truncate","objectFrozen","hasKey","joinRegExp","urlencode","uuid4","htmlTreeAsString","isSameException","isSameStacktrace","parseUrl","fill","supportsFetch","supportsReferrerPolicy","serializeKeysForMessage","serializeException","sanitize","require$$0","TraceKit","md5","RavenConfigError","Raven","RavenConstructor","isLive","window","location","host","config","install","addEventListener","context","shr","setup","tabClassName","target","classList","remove","event","keyCode","activeElement","add","player","Plyr","buttons","document","querySelectorAll","types","currentType","hash","replace","historySupport","history","pushState","toggleClass","element","className","state","newSource","type","init","length","video","source","audio","youtube","vimeo","from","forEach","button","parentElement","querySelector","setAttribute","removeAttribute","getAttribute","replaceState","i","s","o","g","r","a","m","GoogleAnalyticsObject","q","push","arguments","l","Date","createElement","getElementsByTagName","async","src","parentNode","insertBefore","ga"],"mappings":"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","file":"demo.js","sourcesContent":["/*\n json-stringify-safe\n Like JSON.stringify, but doesn't throw on circular references.\n\n Originally forked from https://github.com/isaacs/json-stringify-safe\n version 5.0.1 on 3/8/2017 and modified to handle Errors serialization\n and IE8 compatibility. Tests for this are in test/vendor.\n\n ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE\n*/\n\nexports = module.exports = stringify;\nexports.getSerialize = serializer;\n\nfunction indexOf(haystack, needle) {\n for (var i = 0; i < haystack.length; ++i) {\n if (haystack[i] === needle) return i;\n }\n return -1;\n}\n\nfunction stringify(obj, replacer, spaces, cycleReplacer) {\n return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);\n}\n\n// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106\nfunction stringifyError(value) {\n var err = {\n // These properties are implemented as magical getters and don't show up in for in\n stack: value.stack,\n message: value.message,\n name: value.name\n };\n\n for (var i in value) {\n if (Object.prototype.hasOwnProperty.call(value, i)) {\n err[i] = value[i];\n }\n }\n\n return err;\n}\n\nfunction serializer(replacer, cycleReplacer) {\n var stack = [];\n var keys = [];\n\n if (cycleReplacer == null) {\n cycleReplacer = function(key, value) {\n if (stack[0] === value) {\n return '[Circular ~]';\n }\n return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';\n };\n }\n\n return function(key, value) {\n if (stack.length > 0) {\n var thisPos = indexOf(stack, this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n\n if (~indexOf(stack, value)) {\n value = cycleReplacer.call(this, key, value);\n }\n } else {\n stack.push(value);\n }\n\n return replacer == null\n ? value instanceof Error ? stringifyError(value) : value\n : replacer.call(this, key, value);\n };\n}\n","var stringify = require('../vendor/json-stringify-safe/stringify');\n\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction isObject(what) {\n return typeof what === 'object' && what !== null;\n}\n\n// Yanked from https://git.io/vS8DV re-used under CC0\n// with some tiny modifications\nfunction isError(value) {\n switch ({}.toString.call(value)) {\n case '[object Error]':\n return true;\n case '[object Exception]':\n return true;\n case '[object DOMException]':\n return true;\n default:\n return value instanceof Error;\n }\n}\n\nfunction isErrorEvent(value) {\n return supportsErrorEvent() && {}.toString.call(value) === '[object ErrorEvent]';\n}\n\nfunction isUndefined(what) {\n return what === void 0;\n}\n\nfunction isFunction(what) {\n return typeof what === 'function';\n}\n\nfunction isPlainObject(what) {\n return Object.prototype.toString.call(what) === '[object Object]';\n}\n\nfunction isString(what) {\n return Object.prototype.toString.call(what) === '[object String]';\n}\n\nfunction isArray(what) {\n return Object.prototype.toString.call(what) === '[object Array]';\n}\n\nfunction isEmptyObject(what) {\n if (!isPlainObject(what)) return false;\n\n for (var _ in what) {\n if (what.hasOwnProperty(_)) {\n return false;\n }\n }\n return true;\n}\n\nfunction supportsErrorEvent() {\n try {\n new ErrorEvent(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsFetch() {\n if (!('fetch' in _window)) return false;\n\n try {\n new Headers(); // eslint-disable-line no-new\n new Request(''); // eslint-disable-line no-new\n new Response(); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n// https://caniuse.com/#feat=referrer-policy\n// It doesn't. And it throw exception instead of ignoring this parameter...\n// REF: https://github.com/getsentry/raven-js/issues/1233\nfunction supportsReferrerPolicy() {\n if (!supportsFetch()) return false;\n\n try {\n // eslint-disable-next-line no-new\n new Request('pickleRick', {\n referrerPolicy: 'origin'\n });\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsPromiseRejectionEvent() {\n return typeof PromiseRejectionEvent === 'function';\n}\n\nfunction wrappedCallback(callback) {\n function dataCallback(data, original) {\n var normalizedData = callback(data) || data;\n if (original) {\n return original(normalizedData) || normalizedData;\n }\n return normalizedData;\n }\n\n return dataCallback;\n}\n\nfunction each(obj, callback) {\n var i, j;\n\n if (isUndefined(obj.length)) {\n for (i in obj) {\n if (hasKey(obj, i)) {\n callback.call(null, i, obj[i]);\n }\n }\n } else {\n j = obj.length;\n if (j) {\n for (i = 0; i < j; i++) {\n callback.call(null, i, obj[i]);\n }\n }\n }\n}\n\nfunction objectMerge(obj1, obj2) {\n if (!obj2) {\n return obj1;\n }\n each(obj2, function(key, value) {\n obj1[key] = value;\n });\n return obj1;\n}\n\n/**\n * This function is only used for react-native.\n * react-native freezes object that have already been sent over the\n * js bridge. We need this function in order to check if the object is frozen.\n * So it's ok that objectFrozen returns false if Object.isFrozen is not\n * supported because it's not relevant for other \"platforms\". See related issue:\n * https://github.com/getsentry/react-native-sentry/issues/57\n */\nfunction objectFrozen(obj) {\n if (!Object.isFrozen) {\n return false;\n }\n return Object.isFrozen(obj);\n}\n\nfunction truncate(str, max) {\n if (typeof max !== 'number') {\n throw new Error('2nd argument to `truncate` function should be a number');\n }\n if (typeof str !== 'string' || max === 0) {\n return str;\n }\n return str.length <= max ? str : str.substr(0, max) + '\\u2026';\n}\n\n/**\n * hasKey, a better form of hasOwnProperty\n * Example: hasKey(MainHostObject, property) === true/false\n *\n * @param {Object} host object to check property\n * @param {string} key to check\n */\nfunction hasKey(object, key) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction joinRegExp(patterns) {\n // Combine an array of regular expressions and strings into one large regexp\n // Be mad.\n var sources = [],\n i = 0,\n len = patterns.length,\n pattern;\n\n for (; i < len; i++) {\n pattern = patterns[i];\n if (isString(pattern)) {\n // If it's a string, we need to escape it\n // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n sources.push(pattern.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1'));\n } else if (pattern && pattern.source) {\n // If it's a regexp already, we want to extract the source\n sources.push(pattern.source);\n }\n // Intentionally skip other cases\n }\n return new RegExp(sources.join('|'), 'i');\n}\n\nfunction urlencode(o) {\n var pairs = [];\n each(o, function(key, value) {\n pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n });\n return pairs.join('&');\n}\n\n// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n// intentionally using regex and not <a/> href parsing trick because React Native and other\n// environments where DOM might not be available\nfunction parseUrl(url) {\n if (typeof url !== 'string') return {};\n var match = url.match(/^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n // coerce to undefined values to empty string so we don't get 'undefined'\n var query = match[6] || '';\n var fragment = match[8] || '';\n return {\n protocol: match[2],\n host: match[4],\n path: match[5],\n relative: match[5] + query + fragment // everything minus origin\n };\n}\nfunction uuid4() {\n var crypto = _window.crypto || _window.msCrypto;\n\n if (!isUndefined(crypto) && crypto.getRandomValues) {\n // Use window.crypto API if available\n // eslint-disable-next-line no-undef\n var arr = new Uint16Array(8);\n crypto.getRandomValues(arr);\n\n // set 4 in byte 7\n arr[3] = (arr[3] & 0xfff) | 0x4000;\n // set 2 most significant bits of byte 9 to '10'\n arr[4] = (arr[4] & 0x3fff) | 0x8000;\n\n var pad = function(num) {\n var v = num.toString(16);\n while (v.length < 4) {\n v = '0' + v;\n }\n return v;\n };\n\n return (\n pad(arr[0]) +\n pad(arr[1]) +\n pad(arr[2]) +\n pad(arr[3]) +\n pad(arr[4]) +\n pad(arr[5]) +\n pad(arr[6]) +\n pad(arr[7])\n );\n } else {\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (Math.random() * 16) | 0,\n v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n}\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @param elem\n * @returns {string}\n */\nfunction htmlTreeAsString(elem) {\n /* eslint no-extra-parens:0*/\n var MAX_TRAVERSE_HEIGHT = 5,\n MAX_OUTPUT_LEN = 80,\n out = [],\n height = 0,\n len = 0,\n separator = ' > ',\n sepLength = separator.length,\n nextStr;\n\n while (elem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = htmlElementAsString(elem);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n // (ignore this limit if we are on the first iteration)\n if (\n nextStr === 'html' ||\n (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)\n ) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n elem = elem.parentNode;\n }\n\n return out.reverse().join(separator);\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @param HTMLElement\n * @returns {string}\n */\nfunction htmlElementAsString(elem) {\n var out = [],\n className,\n classes,\n key,\n attr,\n i;\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n out.push(elem.tagName.toLowerCase());\n if (elem.id) {\n out.push('#' + elem.id);\n }\n\n className = elem.className;\n if (className && isString(className)) {\n classes = className.split(/\\s+/);\n for (i = 0; i < classes.length; i++) {\n out.push('.' + classes[i]);\n }\n }\n var attrWhitelist = ['type', 'name', 'title', 'alt'];\n for (i = 0; i < attrWhitelist.length; i++) {\n key = attrWhitelist[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.push('[' + key + '=\"' + attr + '\"]');\n }\n }\n return out.join('');\n}\n\n/**\n * Returns true if either a OR b is truthy, but not both\n */\nfunction isOnlyOneTruthy(a, b) {\n return !!(!!a ^ !!b);\n}\n\n/**\n * Returns true if both parameters are undefined\n */\nfunction isBothUndefined(a, b) {\n return isUndefined(a) && isUndefined(b);\n}\n\n/**\n * Returns true if the two input exception interfaces have the same content\n */\nfunction isSameException(ex1, ex2) {\n if (isOnlyOneTruthy(ex1, ex2)) return false;\n\n ex1 = ex1.values[0];\n ex2 = ex2.values[0];\n\n if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;\n\n // in case both stacktraces are undefined, we can't decide so default to false\n if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) return false;\n\n return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);\n}\n\n/**\n * Returns true if the two input stack trace interfaces have the same content\n */\nfunction isSameStacktrace(stack1, stack2) {\n if (isOnlyOneTruthy(stack1, stack2)) return false;\n\n var frames1 = stack1.frames;\n var frames2 = stack2.frames;\n\n // Exit early if frame count differs\n if (frames1.length !== frames2.length) return false;\n\n // Iterate through every frame; bail out if anything differs\n var a, b;\n for (var i = 0; i < frames1.length; i++) {\n a = frames1[i];\n b = frames2[i];\n if (\n a.filename !== b.filename ||\n a.lineno !== b.lineno ||\n a.colno !== b.colno ||\n a['function'] !== b['function']\n )\n return false;\n }\n return true;\n}\n\n/**\n * Polyfill a method\n * @param obj object e.g. `document`\n * @param name method name present on object e.g. `addEventListener`\n * @param replacement replacement function\n * @param track {optional} record instrumentation to an array\n */\nfunction fill(obj, name, replacement, track) {\n if (obj == null) return;\n var orig = obj[name];\n obj[name] = replacement(orig);\n obj[name].__raven__ = true;\n obj[name].__orig__ = orig;\n if (track) {\n track.push([obj, name, orig]);\n }\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns {string}\n */\nfunction safeJoin(input, delimiter) {\n if (!isArray(input)) return '';\n\n var output = [];\n\n for (var i = 0; i < input.length; i++) {\n try {\n output.push(String(input[i]));\n } catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n\n return output.join(delimiter);\n}\n\n// Default Node.js REPL depth\nvar MAX_SERIALIZE_EXCEPTION_DEPTH = 3;\n// 50kB, as 100kB is max payload size, so half sounds reasonable\nvar MAX_SERIALIZE_EXCEPTION_SIZE = 50 * 1024;\nvar MAX_SERIALIZE_KEYS_LENGTH = 40;\n\nfunction utf8Length(value) {\n return ~-encodeURI(value).split(/%..|./).length;\n}\n\nfunction jsonSize(value) {\n return utf8Length(JSON.stringify(value));\n}\n\nfunction serializeValue(value) {\n if (typeof value === 'string') {\n var maxLength = 40;\n return truncate(value, maxLength);\n } else if (\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n typeof value === 'undefined'\n ) {\n return value;\n }\n\n var type = Object.prototype.toString.call(value);\n\n // Node.js REPL notation\n if (type === '[object Object]') return '[Object]';\n if (type === '[object Array]') return '[Array]';\n if (type === '[object Function]')\n return value.name ? '[Function: ' + value.name + ']' : '[Function]';\n\n return value;\n}\n\nfunction serializeObject(value, depth) {\n if (depth === 0) return serializeValue(value);\n\n if (isPlainObject(value)) {\n return Object.keys(value).reduce(function(acc, key) {\n acc[key] = serializeObject(value[key], depth - 1);\n return acc;\n }, {});\n } else if (Array.isArray(value)) {\n return value.map(function(val) {\n return serializeObject(val, depth - 1);\n });\n }\n\n return serializeValue(value);\n}\n\nfunction serializeException(ex, depth, maxSize) {\n if (!isPlainObject(ex)) return ex;\n\n depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth;\n maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize;\n\n var serialized = serializeObject(ex, depth);\n\n if (jsonSize(stringify(serialized)) > maxSize) {\n return serializeException(ex, depth - 1);\n }\n\n return serialized;\n}\n\nfunction serializeKeysForMessage(keys, maxLength) {\n if (typeof keys === 'number' || typeof keys === 'string') return keys.toString();\n if (!Array.isArray(keys)) return '';\n\n keys = keys.filter(function(key) {\n return typeof key === 'string';\n });\n if (keys.length === 0) return '[object has no keys]';\n\n maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength;\n if (keys[0].length >= maxLength) return keys[0];\n\n for (var usedKeys = keys.length; usedKeys > 0; usedKeys--) {\n var serialized = keys.slice(0, usedKeys).join(', ');\n if (serialized.length > maxLength) continue;\n if (usedKeys === keys.length) return serialized;\n return serialized + '\\u2026';\n }\n\n return '';\n}\n\nfunction sanitize(input, sanitizeKeys) {\n if (!isArray(sanitizeKeys) || (isArray(sanitizeKeys) && sanitizeKeys.length === 0))\n return input;\n\n var sanitizeRegExp = joinRegExp(sanitizeKeys);\n var sanitizeMask = '********';\n var safeInput;\n\n try {\n safeInput = JSON.parse(stringify(input));\n } catch (o_O) {\n return input;\n }\n\n function sanitizeWorker(workerInput) {\n if (isArray(workerInput)) {\n return workerInput.map(function(val) {\n return sanitizeWorker(val);\n });\n }\n\n if (isPlainObject(workerInput)) {\n return Object.keys(workerInput).reduce(function(acc, k) {\n if (sanitizeRegExp.test(k)) {\n acc[k] = sanitizeMask;\n } else {\n acc[k] = sanitizeWorker(workerInput[k]);\n }\n return acc;\n }, {});\n }\n\n return workerInput;\n }\n\n return sanitizeWorker(safeInput);\n}\n\nmodule.exports = {\n isObject: isObject,\n isError: isError,\n isErrorEvent: isErrorEvent,\n isUndefined: isUndefined,\n isFunction: isFunction,\n isPlainObject: isPlainObject,\n isString: isString,\n isArray: isArray,\n isEmptyObject: isEmptyObject,\n supportsErrorEvent: supportsErrorEvent,\n supportsFetch: supportsFetch,\n supportsReferrerPolicy: supportsReferrerPolicy,\n supportsPromiseRejectionEvent: supportsPromiseRejectionEvent,\n wrappedCallback: wrappedCallback,\n each: each,\n objectMerge: objectMerge,\n truncate: truncate,\n objectFrozen: objectFrozen,\n hasKey: hasKey,\n joinRegExp: joinRegExp,\n urlencode: urlencode,\n uuid4: uuid4,\n htmlTreeAsString: htmlTreeAsString,\n htmlElementAsString: htmlElementAsString,\n isSameException: isSameException,\n isSameStacktrace: isSameStacktrace,\n parseUrl: parseUrl,\n fill: fill,\n safeJoin: safeJoin,\n serializeException: serializeException,\n serializeKeysForMessage: serializeKeysForMessage,\n sanitize: sanitize\n};\n","var utils = require('../../src/utils');\n\n/*\n TraceKit - Cross brower stack traces\n\n This was originally forked from github.com/occ/TraceKit, but has since been\n largely re-written and is now maintained as part of raven-js. Tests for\n this are in test/vendor.\n\n MIT license\n*/\n\nvar TraceKit = {\n collectWindowErrors: true,\n debug: false\n};\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n// global reference to slice\nvar _slice = [].slice;\nvar UNKNOWN_FUNCTION = '?';\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types\nvar ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;\n\nfunction getLocationHref() {\n if (typeof document === 'undefined' || document.location == null) return '';\n\n return document.location.href;\n}\n\n/**\n * TraceKit.report: cross-browser processing of unhandled exceptions\n *\n * Syntax:\n * TraceKit.report.subscribe(function(stackInfo) { ... })\n * TraceKit.report.unsubscribe(function(stackInfo) { ... })\n * TraceKit.report(exception)\n * try { ...code... } catch(ex) { TraceKit.report(ex); }\n *\n * Supports:\n * - Firefox: full stack trace with line numbers, plus column number\n * on top frame; column number is not guaranteed\n * - Opera: full stack trace with line and column numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n * - IE: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n *\n * In theory, TraceKit should work on all of the following versions:\n * - IE5.5+ (only 8.0 tested)\n * - Firefox 0.9+ (only 3.5+ tested)\n * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require\n * Exceptions Have Stacktrace to be enabled in opera:config)\n * - Safari 3+ (only 4+ tested)\n * - Chrome 1+ (only 5+ tested)\n * - Konqueror 3.5+ (untested)\n *\n * Requires TraceKit.computeStackTrace.\n *\n * Tries to catch all unhandled exceptions and report them to the\n * subscribed handlers. Please note that TraceKit.report will rethrow the\n * exception. This is REQUIRED in order to get a useful stack trace in IE.\n * If the exception does not reach the top of the browser, you will only\n * get a stack trace from the point where TraceKit.report was called.\n *\n * Handlers receive a stackInfo object as described in the\n * TraceKit.computeStackTrace docs.\n */\nTraceKit.report = (function reportModuleWrapper() {\n var handlers = [],\n lastArgs = null,\n lastException = null,\n lastExceptionStack = null;\n\n /**\n * Add a crash handler.\n * @param {Function} handler\n */\n function subscribe(handler) {\n installGlobalHandler();\n handlers.push(handler);\n }\n\n /**\n * Remove a crash handler.\n * @param {Function} handler\n */\n function unsubscribe(handler) {\n for (var i = handlers.length - 1; i >= 0; --i) {\n if (handlers[i] === handler) {\n handlers.splice(i, 1);\n }\n }\n }\n\n /**\n * Remove all crash handlers.\n */\n function unsubscribeAll() {\n uninstallGlobalHandler();\n handlers = [];\n }\n\n /**\n * Dispatch stack information to all handlers.\n * @param {Object.<string, *>} stack\n */\n function notifyHandlers(stack, isWindowError) {\n var exception = null;\n if (isWindowError && !TraceKit.collectWindowErrors) {\n return;\n }\n for (var i in handlers) {\n if (handlers.hasOwnProperty(i)) {\n try {\n handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));\n } catch (inner) {\n exception = inner;\n }\n }\n }\n\n if (exception) {\n throw exception;\n }\n }\n\n var _oldOnerrorHandler, _onErrorHandlerInstalled;\n\n /**\n * Ensures all global unhandled exceptions are recorded.\n * Supported by Gecko and IE.\n * @param {string} msg Error message.\n * @param {string} url URL of script that generated the exception.\n * @param {(number|string)} lineNo The line number at which the error\n * occurred.\n * @param {?(number|string)} colNo The column number at which the error\n * occurred.\n * @param {?Error} ex The actual Error object.\n */\n function traceKitWindowOnError(msg, url, lineNo, colNo, ex) {\n var stack = null;\n // If 'ex' is ErrorEvent, get real Error from inside\n var exception = utils.isErrorEvent(ex) ? ex.error : ex;\n // If 'msg' is ErrorEvent, get real message from inside\n var message = utils.isErrorEvent(msg) ? msg.message : msg;\n\n if (lastExceptionStack) {\n TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(\n lastExceptionStack,\n url,\n lineNo,\n message\n );\n processLastException();\n } else if (exception && utils.isError(exception)) {\n // non-string `exception` arg; attempt to extract stack trace\n\n // New chrome and blink send along a real error object\n // Let's just report that like a normal error.\n // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror\n stack = TraceKit.computeStackTrace(exception);\n notifyHandlers(stack, true);\n } else {\n var location = {\n url: url,\n line: lineNo,\n column: colNo\n };\n\n var name = undefined;\n var groups;\n\n if ({}.toString.call(message) === '[object String]') {\n var groups = message.match(ERROR_TYPES_RE);\n if (groups) {\n name = groups[1];\n message = groups[2];\n }\n }\n\n location.func = UNKNOWN_FUNCTION;\n\n stack = {\n name: name,\n message: message,\n url: getLocationHref(),\n stack: [location]\n };\n notifyHandlers(stack, true);\n }\n\n if (_oldOnerrorHandler) {\n return _oldOnerrorHandler.apply(this, arguments);\n }\n\n return false;\n }\n\n function installGlobalHandler() {\n if (_onErrorHandlerInstalled) {\n return;\n }\n _oldOnerrorHandler = _window.onerror;\n _window.onerror = traceKitWindowOnError;\n _onErrorHandlerInstalled = true;\n }\n\n function uninstallGlobalHandler() {\n if (!_onErrorHandlerInstalled) {\n return;\n }\n _window.onerror = _oldOnerrorHandler;\n _onErrorHandlerInstalled = false;\n _oldOnerrorHandler = undefined;\n }\n\n function processLastException() {\n var _lastExceptionStack = lastExceptionStack,\n _lastArgs = lastArgs;\n lastArgs = null;\n lastExceptionStack = null;\n lastException = null;\n notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));\n }\n\n /**\n * Reports an unhandled Error to TraceKit.\n * @param {Error} ex\n * @param {?boolean} rethrow If false, do not re-throw the exception.\n * Only used for window.onerror to not cause an infinite loop of\n * rethrowing.\n */\n function report(ex, rethrow) {\n var args = _slice.call(arguments, 1);\n if (lastExceptionStack) {\n if (lastException === ex) {\n return; // already caught by an inner catch block, ignore\n } else {\n processLastException();\n }\n }\n\n var stack = TraceKit.computeStackTrace(ex);\n lastExceptionStack = stack;\n lastException = ex;\n lastArgs = args;\n\n // If the stack trace is incomplete, wait for 2 seconds for\n // slow slow IE to see if onerror occurs or not before reporting\n // this exception; otherwise, we will end up with an incomplete\n // stack trace\n setTimeout(function() {\n if (lastException === ex) {\n processLastException();\n }\n }, stack.incomplete ? 2000 : 0);\n\n if (rethrow !== false) {\n throw ex; // re-throw to propagate to the top level (and cause window.onerror)\n }\n }\n\n report.subscribe = subscribe;\n report.unsubscribe = unsubscribe;\n report.uninstall = unsubscribeAll;\n return report;\n})();\n\n/**\n * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript\n *\n * Syntax:\n * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)\n * Returns:\n * s.name - exception name\n * s.message - exception message\n * s.stack[i].url - JavaScript or HTML file URL\n * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)\n * s.stack[i].args - arguments passed to the function, if known\n * s.stack[i].line - line number, if known\n * s.stack[i].column - column number, if known\n *\n * Supports:\n * - Firefox: full stack trace with line numbers and unreliable column\n * number on top frame\n * - Opera 10: full stack trace with line and column numbers\n * - Opera 9-: full stack trace with line numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the topmost stacktrace element\n * only\n * - IE: no line numbers whatsoever\n *\n * Tries to guess names of anonymous functions by looking for assignments\n * in the source code. In IE and Safari, we have to guess source file names\n * by searching for function bodies inside all page scripts. This will not\n * work for scripts that are loaded cross-domain.\n * Here be dragons: some function names may be guessed incorrectly, and\n * duplicate functions may be mismatched.\n *\n * TraceKit.computeStackTrace should only be used for tracing purposes.\n * Logging of unhandled exceptions should be done with TraceKit.report,\n * which builds on top of TraceKit.computeStackTrace and provides better\n * IE support by utilizing the window.onerror event to retrieve information\n * about the top of the stack.\n *\n * Note: In IE and Safari, no stack trace is recorded on the Error object,\n * so computeStackTrace instead walks its *own* chain of callers.\n * This means that:\n * * in Safari, some methods may be missing from the stack trace;\n * * in IE, the topmost function in the stack trace will always be the\n * caller of computeStackTrace.\n *\n * This is okay for tracing (because you are likely to be calling\n * computeStackTrace from the function you want to be the topmost element\n * of the stack trace anyway), but not okay for logging unhandled\n * exceptions (because your catch block will likely be far away from the\n * inner function that actually caused the exception).\n *\n */\nTraceKit.computeStackTrace = (function computeStackTraceWrapper() {\n // Contents of Exception in various browsers.\n //\n // SAFARI:\n // ex.message = Can't find variable: qq\n // ex.line = 59\n // ex.sourceId = 580238192\n // ex.sourceURL = http://...\n // ex.expressionBeginOffset = 96\n // ex.expressionCaretOffset = 98\n // ex.expressionEndOffset = 98\n // ex.name = ReferenceError\n //\n // FIREFOX:\n // ex.message = qq is not defined\n // ex.fileName = http://...\n // ex.lineNumber = 59\n // ex.columnNumber = 69\n // ex.stack = ...stack trace... (see the example below)\n // ex.name = ReferenceError\n //\n // CHROME:\n // ex.message = qq is not defined\n // ex.name = ReferenceError\n // ex.type = not_defined\n // ex.arguments = ['aa']\n // ex.stack = ...stack trace...\n //\n // INTERNET EXPLORER:\n // ex.message = ...\n // ex.name = ReferenceError\n //\n // OPERA:\n // ex.message = ...message... (see the example below)\n // ex.name = ReferenceError\n // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)\n // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'\n\n /**\n * Computes stack trace information from the stack property.\n * Chrome and Gecko use this property.\n * @param {Error} ex\n * @return {?Object.<string, *>} Stack trace information.\n */\n function computeStackTraceFromStackProp(ex) {\n if (typeof ex.stack === 'undefined' || !ex.stack) return;\n\n var chrome = /^\\s*at (?:(.*?) ?\\()?((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|[a-z]:|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n var winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n // NOTE: blob urls are now supposed to always have an origin, therefore it's format\n // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\\/` as well\n var gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\\/.*?|\\[native code\\]|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\n // Used to additionally parse URL/line/column from eval frames\n var geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n var chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n var lines = ex.stack.split('\\n');\n var stack = [];\n var submatch;\n var parts;\n var element;\n var reference = /^(.*) is undefined$/.exec(ex.message);\n\n for (var i = 0, j = lines.length; i < j; ++i) {\n if ((parts = chrome.exec(lines[i]))) {\n var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n if (isEval && (submatch = chromeEval.exec(parts[2]))) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = submatch[1]; // url\n parts[3] = submatch[2]; // line\n parts[4] = submatch[3]; // column\n }\n element = {\n url: !isNative ? parts[2] : null,\n func: parts[1] || UNKNOWN_FUNCTION,\n args: isNative ? [parts[2]] : [],\n line: parts[3] ? +parts[3] : null,\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = winjs.exec(lines[i]))) {\n element = {\n url: parts[2],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: [],\n line: +parts[3],\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = gecko.exec(lines[i]))) {\n var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval && (submatch = geckoEval.exec(parts[3]))) {\n // throw out eval line/column and use top-most line number\n parts[3] = submatch[1];\n parts[4] = submatch[2];\n parts[5] = null; // no column when eval\n } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {\n // FireFox uses this awesome columnNumber property for its top frame\n // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n // so adding 1\n // NOTE: this hack doesn't work if top-most frame is eval\n stack[0].column = ex.columnNumber + 1;\n }\n element = {\n url: parts[3],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: parts[2] ? parts[2].split(',') : [],\n line: parts[4] ? +parts[4] : null,\n column: parts[5] ? +parts[5] : null\n };\n } else {\n continue;\n }\n\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n\n stack.push(element);\n }\n\n if (!stack.length) {\n return null;\n }\n\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n }\n\n /**\n * Adds information about the first frame to incomplete stack traces.\n * Safari and IE require this to get complete data on the first frame.\n * @param {Object.<string, *>} stackInfo Stack trace information from\n * one of the compute* methods.\n * @param {string} url The URL of the script that caused an error.\n * @param {(number|string)} lineNo The line number of the script that\n * caused an error.\n * @param {string=} message The error generated by the browser, which\n * hopefully contains the name of the object that caused the error.\n * @return {boolean} Whether or not the stack information was\n * augmented.\n */\n function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {\n var initial = {\n url: url,\n line: lineNo\n };\n\n if (initial.url && initial.line) {\n stackInfo.incomplete = false;\n\n if (!initial.func) {\n initial.func = UNKNOWN_FUNCTION;\n }\n\n if (stackInfo.stack.length > 0) {\n if (stackInfo.stack[0].url === initial.url) {\n if (stackInfo.stack[0].line === initial.line) {\n return false; // already in stack trace\n } else if (\n !stackInfo.stack[0].line &&\n stackInfo.stack[0].func === initial.func\n ) {\n stackInfo.stack[0].line = initial.line;\n return false;\n }\n }\n }\n\n stackInfo.stack.unshift(initial);\n stackInfo.partial = true;\n return true;\n } else {\n stackInfo.incomplete = true;\n }\n\n return false;\n }\n\n /**\n * Computes stack trace information by walking the arguments.caller\n * chain at the time the exception occurred. This will cause earlier\n * frames to be missed but is the only way to get any stack trace in\n * Safari and IE. The top frame is restored by\n * {@link augmentStackTraceWithInitialElement}.\n * @param {Error} ex\n * @return {?Object.<string, *>} Stack trace information.\n */\n function computeStackTraceByWalkingCallerChain(ex, depth) {\n var functionName = /function\\s+([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?\\s*\\(/i,\n stack = [],\n funcs = {},\n recursion = false,\n parts,\n item,\n source;\n\n for (\n var curr = computeStackTraceByWalkingCallerChain.caller;\n curr && !recursion;\n curr = curr.caller\n ) {\n if (curr === computeStackTrace || curr === TraceKit.report) {\n // console.log('skipping internal function');\n continue;\n }\n\n item = {\n url: null,\n func: UNKNOWN_FUNCTION,\n line: null,\n column: null\n };\n\n if (curr.name) {\n item.func = curr.name;\n } else if ((parts = functionName.exec(curr.toString()))) {\n item.func = parts[1];\n }\n\n if (typeof item.func === 'undefined') {\n try {\n item.func = parts.input.substring(0, parts.input.indexOf('{'));\n } catch (e) {}\n }\n\n if (funcs['' + curr]) {\n recursion = true;\n } else {\n funcs['' + curr] = true;\n }\n\n stack.push(item);\n }\n\n if (depth) {\n // console.log('depth is ' + depth);\n // console.log('stack is ' + stack.length);\n stack.splice(0, depth);\n }\n\n var result = {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n augmentStackTraceWithInitialElement(\n result,\n ex.sourceURL || ex.fileName,\n ex.line || ex.lineNumber,\n ex.message || ex.description\n );\n return result;\n }\n\n /**\n * Computes a stack trace for an exception.\n * @param {Error} ex\n * @param {(string|number)=} depth\n */\n function computeStackTrace(ex, depth) {\n var stack = null;\n depth = depth == null ? 0 : +depth;\n\n try {\n stack = computeStackTraceFromStackProp(ex);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n\n try {\n stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref()\n };\n }\n\n computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;\n computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;\n\n return computeStackTrace;\n})();\n\nmodule.exports = TraceKit;\n","/*\n * JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\n\n/*\n* Add integers, wrapping at 2^32. This uses 16-bit operations internally\n* to work around bugs in some JS interpreters.\n*/\nfunction safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return (msw << 16) | (lsw & 0xffff);\n}\n\n/*\n* Bitwise rotate a 32-bit number to the left.\n*/\nfunction bitRotateLeft(num, cnt) {\n return (num << cnt) | (num >>> (32 - cnt));\n}\n\n/*\n* These functions implement the four basic operations the algorithm uses.\n*/\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn((b & c) | (~b & d), a, b, x, s, t);\n}\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn((b & d) | (c & ~d), a, b, x, s, t);\n}\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\n/*\n* Calculate the MD5 of an array of little-endian words, and a bit length.\n*/\nfunction binlMD5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << (len % 32);\n x[(((len + 64) >>> 9) << 4) + 14] = len;\n\n var i;\n var olda;\n var oldb;\n var oldc;\n var oldd;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (i = 0; i < x.length; i += 16) {\n olda = a;\n oldb = b;\n oldc = c;\n oldd = d;\n\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n return [a, b, c, d];\n}\n\n/*\n* Convert an array of little-endian words to a string\n*/\nfunction binl2rstr(input) {\n var i;\n var output = '';\n var length32 = input.length * 32;\n for (i = 0; i < length32; i += 8) {\n output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);\n }\n return output;\n}\n\n/*\n* Convert a raw string to an array of little-endian words\n* Characters >255 have their high-byte silently ignored.\n*/\nfunction rstr2binl(input) {\n var i;\n var output = [];\n output[(input.length >> 2) - 1] = undefined;\n for (i = 0; i < output.length; i += 1) {\n output[i] = 0;\n }\n var length8 = input.length * 8;\n for (i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);\n }\n return output;\n}\n\n/*\n* Calculate the MD5 of a raw string\n*/\nfunction rstrMD5(s) {\n return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));\n}\n\n/*\n* Calculate the HMAC-MD5, of a key and some data (raw strings)\n*/\nfunction rstrHMACMD5(key, data) {\n var i;\n var bkey = rstr2binl(key);\n var ipad = [];\n var opad = [];\n var hash;\n ipad[15] = opad[15] = undefined;\n if (bkey.length > 16) {\n bkey = binlMD5(bkey, key.length * 8);\n }\n for (i = 0; i < 16; i += 1) {\n ipad[i] = bkey[i] ^ 0x36363636;\n opad[i] = bkey[i] ^ 0x5c5c5c5c;\n }\n hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);\n return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));\n}\n\n/*\n* Convert a raw string to a hex string\n*/\nfunction rstr2hex(input) {\n var hexTab = '0123456789abcdef';\n var output = '';\n var x;\n var i;\n for (i = 0; i < input.length; i += 1) {\n x = input.charCodeAt(i);\n output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);\n }\n return output;\n}\n\n/*\n* Encode a string as utf-8\n*/\nfunction str2rstrUTF8(input) {\n return unescape(encodeURIComponent(input));\n}\n\n/*\n* Take string arguments and return either raw or hex encoded strings\n*/\nfunction rawMD5(s) {\n return rstrMD5(str2rstrUTF8(s));\n}\nfunction hexMD5(s) {\n return rstr2hex(rawMD5(s));\n}\nfunction rawHMACMD5(k, d) {\n return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));\n}\nfunction hexHMACMD5(k, d) {\n return rstr2hex(rawHMACMD5(k, d));\n}\n\nfunction md5(string, key, raw) {\n if (!key) {\n if (!raw) {\n return hexMD5(string);\n }\n return rawMD5(string);\n }\n if (!raw) {\n return hexHMACMD5(key, string);\n }\n return rawHMACMD5(key, string);\n}\n\nmodule.exports = md5;\n","function RavenConfigError(message) {\n this.name = 'RavenConfigError';\n this.message = message;\n}\nRavenConfigError.prototype = new Error();\nRavenConfigError.prototype.constructor = RavenConfigError;\n\nmodule.exports = RavenConfigError;\n","var utils = require('./utils');\n\nvar wrapMethod = function(console, level, callback) {\n var originalConsoleLevel = console[level];\n var originalConsole = console;\n\n if (!(level in console)) {\n return;\n }\n\n var sentryLevel = level === 'warn' ? 'warning' : level;\n\n console[level] = function() {\n var args = [].slice.call(arguments);\n\n var msg = utils.safeJoin(args, ' ');\n var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};\n\n if (level === 'assert') {\n if (args[0] === false) {\n // Default browsers message\n msg =\n 'Assertion failed: ' + (utils.safeJoin(args.slice(1), ' ') || 'console.assert');\n data.extra.arguments = args.slice(1);\n callback && callback(msg, data);\n }\n } else {\n callback && callback(msg, data);\n }\n\n // this fails for some browsers. :(\n if (originalConsoleLevel) {\n // IE9 doesn't allow calling apply on console functions directly\n // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193\n Function.prototype.apply.call(originalConsoleLevel, originalConsole, args);\n }\n };\n};\n\nmodule.exports = {\n wrapMethod: wrapMethod\n};\n","/*global XDomainRequest:false */\n\nvar TraceKit = require('../vendor/TraceKit/tracekit');\nvar stringify = require('../vendor/json-stringify-safe/stringify');\nvar md5 = require('../vendor/md5/md5');\nvar RavenConfigError = require('./configError');\n\nvar utils = require('./utils');\nvar isError = utils.isError;\nvar isObject = utils.isObject;\nvar isPlainObject = utils.isPlainObject;\nvar isErrorEvent = utils.isErrorEvent;\nvar isUndefined = utils.isUndefined;\nvar isFunction = utils.isFunction;\nvar isString = utils.isString;\nvar isArray = utils.isArray;\nvar isEmptyObject = utils.isEmptyObject;\nvar each = utils.each;\nvar objectMerge = utils.objectMerge;\nvar truncate = utils.truncate;\nvar objectFrozen = utils.objectFrozen;\nvar hasKey = utils.hasKey;\nvar joinRegExp = utils.joinRegExp;\nvar urlencode = utils.urlencode;\nvar uuid4 = utils.uuid4;\nvar htmlTreeAsString = utils.htmlTreeAsString;\nvar isSameException = utils.isSameException;\nvar isSameStacktrace = utils.isSameStacktrace;\nvar parseUrl = utils.parseUrl;\nvar fill = utils.fill;\nvar supportsFetch = utils.supportsFetch;\nvar supportsReferrerPolicy = utils.supportsReferrerPolicy;\nvar serializeKeysForMessage = utils.serializeKeysForMessage;\nvar serializeException = utils.serializeException;\nvar sanitize = utils.sanitize;\n\nvar wrapConsoleMethod = require('./console').wrapMethod;\n\nvar dsnKeys = 'source protocol user pass host port path'.split(' '),\n dsnPattern = /^(?:(\\w+):)?\\/\\/(?:(\\w+)(:\\w+)?@)?([\\w\\.-]+)(?::(\\d+))?(\\/.*)/;\n\nfunction now() {\n return +new Date();\n}\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _document = _window.document;\nvar _navigator = _window.navigator;\n\nfunction keepOriginalCallback(original, callback) {\n return isFunction(callback)\n ? function(data) {\n return callback(data, original);\n }\n : callback;\n}\n\n// First, check for JSON support\n// If there is no JSON, we no-op the core features of Raven\n// since JSON is required to encode the payload\nfunction Raven() {\n this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);\n // Raven can run in contexts where there's no document (react-native)\n this._hasDocument = !isUndefined(_document);\n this._hasNavigator = !isUndefined(_navigator);\n this._lastCapturedException = null;\n this._lastData = null;\n this._lastEventId = null;\n this._globalServer = null;\n this._globalKey = null;\n this._globalProject = null;\n this._globalContext = {};\n this._globalOptions = {\n // SENTRY_RELEASE can be injected by https://github.com/getsentry/sentry-webpack-plugin\n release: _window.SENTRY_RELEASE && _window.SENTRY_RELEASE.id,\n logger: 'javascript',\n ignoreErrors: [],\n ignoreUrls: [],\n whitelistUrls: [],\n includePaths: [],\n headers: null,\n collectWindowErrors: true,\n captureUnhandledRejections: true,\n maxMessageLength: 0,\n // By default, truncates URL values to 250 chars\n maxUrlLength: 250,\n stackTraceLimit: 50,\n autoBreadcrumbs: true,\n instrument: true,\n sampleRate: 1,\n sanitizeKeys: []\n };\n this._fetchDefaults = {\n method: 'POST',\n keepalive: true,\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n // https://caniuse.com/#feat=referrer-policy\n // It doesn't. And it throw exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n referrerPolicy: supportsReferrerPolicy() ? 'origin' : ''\n };\n this._ignoreOnError = 0;\n this._isRavenInstalled = false;\n this._originalErrorStackTraceLimit = Error.stackTraceLimit;\n // capture references to window.console *and* all its methods first\n // before the console plugin has a chance to monkey patch\n this._originalConsole = _window.console || {};\n this._originalConsoleMethods = {};\n this._plugins = [];\n this._startTime = now();\n this._wrappedBuiltIns = [];\n this._breadcrumbs = [];\n this._lastCapturedEvent = null;\n this._keypressTimeout;\n this._location = _window.location;\n this._lastHref = this._location && this._location.href;\n this._resetBackoff();\n\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsole) {\n this._originalConsoleMethods[method] = this._originalConsole[method];\n }\n}\n\n/*\n * The core Raven singleton\n *\n * @this {Raven}\n */\n\nRaven.prototype = {\n // Hardcode version string so that raven source can be loaded directly via\n // webpack (using a build step causes webpack #1617). Grunt verifies that\n // this value matches package.json during build.\n // See: https://github.com/getsentry/raven-js/issues/465\n VERSION: '3.24.2',\n\n debug: false,\n\n TraceKit: TraceKit, // alias to TraceKit\n\n /*\n * Configure Raven with a DSN and extra options\n *\n * @param {string} dsn The public Sentry DSN\n * @param {object} options Set of global options [optional]\n * @return {Raven}\n */\n config: function(dsn, options) {\n var self = this;\n\n if (self._globalServer) {\n this._logDebug('error', 'Error: Raven has already been configured');\n return self;\n }\n if (!dsn) return self;\n\n var globalOptions = self._globalOptions;\n\n // merge in options\n if (options) {\n each(options, function(key, value) {\n // tags and extra are special and need to be put into context\n if (key === 'tags' || key === 'extra' || key === 'user') {\n self._globalContext[key] = value;\n } else {\n globalOptions[key] = value;\n }\n });\n }\n\n self.setDSN(dsn);\n\n // \"Script error.\" is hard coded into browsers for errors that it can't read.\n // this is the result of a script being pulled in from an external domain and CORS.\n globalOptions.ignoreErrors.push(/^Script error\\.?$/);\n globalOptions.ignoreErrors.push(/^Javascript error: Script error\\.? on line 0$/);\n\n // join regexp rules into one big rule\n globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);\n globalOptions.ignoreUrls = globalOptions.ignoreUrls.length\n ? joinRegExp(globalOptions.ignoreUrls)\n : false;\n globalOptions.whitelistUrls = globalOptions.whitelistUrls.length\n ? joinRegExp(globalOptions.whitelistUrls)\n : false;\n globalOptions.includePaths = joinRegExp(globalOptions.includePaths);\n globalOptions.maxBreadcrumbs = Math.max(\n 0,\n Math.min(globalOptions.maxBreadcrumbs || 100, 100)\n ); // default and hard limit is 100\n\n var autoBreadcrumbDefaults = {\n xhr: true,\n console: true,\n dom: true,\n location: true,\n sentry: true\n };\n\n var autoBreadcrumbs = globalOptions.autoBreadcrumbs;\n if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {\n autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);\n } else if (autoBreadcrumbs !== false) {\n autoBreadcrumbs = autoBreadcrumbDefaults;\n }\n globalOptions.autoBreadcrumbs = autoBreadcrumbs;\n\n var instrumentDefaults = {\n tryCatch: true\n };\n\n var instrument = globalOptions.instrument;\n if ({}.toString.call(instrument) === '[object Object]') {\n instrument = objectMerge(instrumentDefaults, instrument);\n } else if (instrument !== false) {\n instrument = instrumentDefaults;\n }\n globalOptions.instrument = instrument;\n\n TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;\n\n // return for chaining\n return self;\n },\n\n /*\n * Installs a global window.onerror error handler\n * to capture and report uncaught exceptions.\n * At this point, install() is required to be called due\n * to the way TraceKit is set up.\n *\n * @return {Raven}\n */\n install: function() {\n var self = this;\n if (self.isSetup() && !self._isRavenInstalled) {\n TraceKit.report.subscribe(function() {\n self._handleOnErrorStackInfo.apply(self, arguments);\n });\n\n if (self._globalOptions.captureUnhandledRejections) {\n self._attachPromiseRejectionHandler();\n }\n\n self._patchFunctionToString();\n\n if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {\n self._instrumentTryCatch();\n }\n\n if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();\n\n // Install all of the plugins\n self._drainPlugins();\n\n self._isRavenInstalled = true;\n }\n\n Error.stackTraceLimit = self._globalOptions.stackTraceLimit;\n return this;\n },\n\n /*\n * Set the DSN (can be called multiple time unlike config)\n *\n * @param {string} dsn The public Sentry DSN\n */\n setDSN: function(dsn) {\n var self = this,\n uri = self._parseDSN(dsn),\n lastSlash = uri.path.lastIndexOf('/'),\n path = uri.path.substr(1, lastSlash);\n\n self._dsn = dsn;\n self._globalKey = uri.user;\n self._globalSecret = uri.pass && uri.pass.substr(1);\n self._globalProject = uri.path.substr(lastSlash + 1);\n\n self._globalServer = self._getGlobalServer(uri);\n\n self._globalEndpoint =\n self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/';\n\n // Reset backoff state since we may be pointing at a\n // new project/server\n this._resetBackoff();\n },\n\n /*\n * Wrap code within a context so Raven can capture errors\n * reliably across domains that is executed immediately.\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The callback to be immediately executed within the context\n * @param {array} args An array of arguments to be called with the callback [optional]\n */\n context: function(options, func, args) {\n if (isFunction(options)) {\n args = func || [];\n func = options;\n options = undefined;\n }\n\n return this.wrap(options, func).apply(this, args);\n },\n\n /*\n * Wrap code within a context and returns back a new function to be executed\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The function to be wrapped in a new context\n * @param {function} func A function to call before the try/catch wrapper [optional, private]\n * @return {function} The newly wrapped functions with a context\n */\n wrap: function(options, func, _before) {\n var self = this;\n // 1 argument has been passed, and it's not a function\n // so just return it\n if (isUndefined(func) && !isFunction(options)) {\n return options;\n }\n\n // options is optional\n if (isFunction(options)) {\n func = options;\n options = undefined;\n }\n\n // At this point, we've passed along 2 arguments, and the second one\n // is not a function either, so we'll just return the second argument.\n if (!isFunction(func)) {\n return func;\n }\n\n // We don't wanna wrap it twice!\n try {\n if (func.__raven__) {\n return func;\n }\n\n // If this has already been wrapped in the past, return that\n if (func.__raven_wrapper__) {\n return func.__raven_wrapper__;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return func;\n }\n\n function wrapped() {\n var args = [],\n i = arguments.length,\n deep = !options || (options && options.deep !== false);\n\n if (_before && isFunction(_before)) {\n _before.apply(this, arguments);\n }\n\n // Recursively wrap all of a function's arguments that are\n // functions themselves.\n while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];\n\n try {\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means Raven caught an error invoking your application code. This is\n // expected behavior and NOT indicative of a bug with Raven.js.\n return func.apply(this, args);\n } catch (e) {\n self._ignoreNextOnError();\n self.captureException(e, options);\n throw e;\n }\n }\n\n // copy over properties of the old function\n for (var property in func) {\n if (hasKey(func, property)) {\n wrapped[property] = func[property];\n }\n }\n wrapped.prototype = func.prototype;\n\n func.__raven_wrapper__ = wrapped;\n // Signal that this function has been wrapped/filled already\n // for both debugging and to prevent it to being wrapped/filled twice\n wrapped.__raven__ = true;\n wrapped.__orig__ = func;\n\n return wrapped;\n },\n\n /**\n * Uninstalls the global error handler.\n *\n * @return {Raven}\n */\n uninstall: function() {\n TraceKit.report.uninstall();\n\n this._detachPromiseRejectionHandler();\n this._unpatchFunctionToString();\n this._restoreBuiltIns();\n this._restoreConsole();\n\n Error.stackTraceLimit = this._originalErrorStackTraceLimit;\n this._isRavenInstalled = false;\n\n return this;\n },\n\n /**\n * Callback used for `unhandledrejection` event\n *\n * @param {PromiseRejectionEvent} event An object containing\n * promise: the Promise that was rejected\n * reason: the value with which the Promise was rejected\n * @return void\n */\n _promiseRejectionHandler: function(event) {\n this._logDebug('debug', 'Raven caught unhandled promise rejection:', event);\n this.captureException(event.reason, {\n extra: {\n unhandledPromiseRejection: true\n }\n });\n },\n\n /**\n * Installs the global promise rejection handler.\n *\n * @return {raven}\n */\n _attachPromiseRejectionHandler: function() {\n this._promiseRejectionHandler = this._promiseRejectionHandler.bind(this);\n _window.addEventListener &&\n _window.addEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Uninstalls the global promise rejection handler.\n *\n * @return {raven}\n */\n _detachPromiseRejectionHandler: function() {\n _window.removeEventListener &&\n _window.removeEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Manually capture an exception and send it over to Sentry\n *\n * @param {error} ex An exception to be logged\n * @param {object} options A specific set of options for this error [optional]\n * @return {Raven}\n */\n captureException: function(ex, options) {\n options = objectMerge({trimHeadFrames: 0}, options ? options : {});\n\n if (isErrorEvent(ex) && ex.error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n ex = ex.error;\n } else if (isError(ex)) {\n // we have a real Error object\n ex = ex;\n } else if (isPlainObject(ex)) {\n // If it is plain Object, serialize it manually and extract options\n // This will allow us to group events based on top-level keys\n // which is much better than creating new group when any key/value change\n options = this._getCaptureExceptionOptionsFromPlainObject(options, ex);\n ex = new Error(options.message);\n } else {\n // If none of previous checks were valid, then it means that\n // it's not a plain Object\n // it's not a valid ErrorEvent (one with an error property)\n // it's not an Error\n // So bail out and capture it as a simple message:\n return this.captureMessage(\n ex,\n objectMerge(options, {\n stacktrace: true, // if we fall back to captureMessage, default to attempting a new trace\n trimHeadFrames: options.trimHeadFrames + 1\n })\n );\n }\n\n // Store the raw exception object for potential debugging and introspection\n this._lastCapturedException = ex;\n\n // TraceKit.report will re-raise any exception passed to it,\n // which means you have to wrap it in try/catch. Instead, we\n // can wrap it here and only re-raise if TraceKit.report\n // raises an exception different from the one we asked to\n // report on.\n try {\n var stack = TraceKit.computeStackTrace(ex);\n this._handleStackInfo(stack, options);\n } catch (ex1) {\n if (ex !== ex1) {\n throw ex1;\n }\n }\n\n return this;\n },\n\n _getCaptureExceptionOptionsFromPlainObject: function(currentOptions, ex) {\n var exKeys = Object.keys(ex).sort();\n var options = objectMerge(currentOptions, {\n message:\n 'Non-Error exception captured with keys: ' + serializeKeysForMessage(exKeys),\n fingerprint: [md5(exKeys)],\n extra: currentOptions.extra || {}\n });\n options.extra.__serialized__ = serializeException(ex);\n\n return options;\n },\n\n /*\n * Manually send a message to Sentry\n *\n * @param {string} msg A plain message to be captured in Sentry\n * @param {object} options A specific set of options for this message [optional]\n * @return {Raven}\n */\n captureMessage: function(msg, options) {\n // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an\n // early call; we'll error on the side of logging anything called before configuration since it's\n // probably something you should see:\n if (\n !!this._globalOptions.ignoreErrors.test &&\n this._globalOptions.ignoreErrors.test(msg)\n ) {\n return;\n }\n\n options = options || {};\n msg = msg + ''; // Make sure it's actually a string\n\n var data = objectMerge(\n {\n message: msg\n },\n options\n );\n\n var ex;\n // Generate a \"synthetic\" stack trace from this point.\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative\n // of a bug with Raven.js. Sentry generates synthetic traces either by configuration,\n // or if it catches a thrown object without a \"stack\" property.\n try {\n throw new Error(msg);\n } catch (ex1) {\n ex = ex1;\n }\n\n // null exception name so `Error` isn't prefixed to msg\n ex.name = null;\n var stack = TraceKit.computeStackTrace(ex);\n\n // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]\n var initialCall = isArray(stack.stack) && stack.stack[1];\n\n // if stack[1] is `Raven.captureException`, it means that someone passed a string to it and we redirected that call\n // to be handled by `captureMessage`, thus `initialCall` is the 3rd one, not 2nd\n // initialCall => captureException(string) => captureMessage(string)\n if (initialCall && initialCall.func === 'Raven.captureException') {\n initialCall = stack.stack[2];\n }\n\n var fileurl = (initialCall && initialCall.url) || '';\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n if (this._globalOptions.stacktrace || (options && options.stacktrace)) {\n // fingerprint on msg, not stack trace (legacy behavior, could be revisited)\n data.fingerprint = data.fingerprint == null ? msg : data.fingerprint;\n\n options = objectMerge(\n {\n trimHeadFrames: 0\n },\n options\n );\n // Since we know this is a synthetic trace, the top frame (this function call)\n // MUST be from Raven.js, so mark it for trimming\n // We add to the trim counter so that callers can choose to trim extra frames, such\n // as utility functions.\n options.trimHeadFrames += 1;\n\n var frames = this._prepareFrames(stack, options);\n data.stacktrace = {\n // Sentry expects frames oldest to newest\n frames: frames.reverse()\n };\n }\n\n // Make sure that fingerprint is always wrapped in an array\n if (data.fingerprint) {\n data.fingerprint = isArray(data.fingerprint)\n ? data.fingerprint\n : [data.fingerprint];\n }\n\n // Fire away!\n this._send(data);\n\n return this;\n },\n\n captureBreadcrumb: function(obj) {\n var crumb = objectMerge(\n {\n timestamp: now() / 1000\n },\n obj\n );\n\n if (isFunction(this._globalOptions.breadcrumbCallback)) {\n var result = this._globalOptions.breadcrumbCallback(crumb);\n\n if (isObject(result) && !isEmptyObject(result)) {\n crumb = result;\n } else if (result === false) {\n return this;\n }\n }\n\n this._breadcrumbs.push(crumb);\n if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {\n this._breadcrumbs.shift();\n }\n return this;\n },\n\n addPlugin: function(plugin /*arg1, arg2, ... argN*/) {\n var pluginArgs = [].slice.call(arguments, 1);\n\n this._plugins.push([plugin, pluginArgs]);\n if (this._isRavenInstalled) {\n this._drainPlugins();\n }\n\n return this;\n },\n\n /*\n * Set/clear a user to be sent along with the payload.\n *\n * @param {object} user An object representing user data [optional]\n * @return {Raven}\n */\n setUserContext: function(user) {\n // Intentionally do not merge here since that's an unexpected behavior.\n this._globalContext.user = user;\n\n return this;\n },\n\n /*\n * Merge extra attributes to be sent along with the payload.\n *\n * @param {object} extra An object representing extra data [optional]\n * @return {Raven}\n */\n setExtraContext: function(extra) {\n this._mergeContext('extra', extra);\n\n return this;\n },\n\n /*\n * Merge tags to be sent along with the payload.\n *\n * @param {object} tags An object representing tags [optional]\n * @return {Raven}\n */\n setTagsContext: function(tags) {\n this._mergeContext('tags', tags);\n\n return this;\n },\n\n /*\n * Clear all of the context.\n *\n * @return {Raven}\n */\n clearContext: function() {\n this._globalContext = {};\n\n return this;\n },\n\n /*\n * Get a copy of the current context. This cannot be mutated.\n *\n * @return {object} copy of context\n */\n getContext: function() {\n // lol javascript\n return JSON.parse(stringify(this._globalContext));\n },\n\n /*\n * Set environment of application\n *\n * @param {string} environment Typically something like 'production'.\n * @return {Raven}\n */\n setEnvironment: function(environment) {\n this._globalOptions.environment = environment;\n\n return this;\n },\n\n /*\n * Set release version of application\n *\n * @param {string} release Typically something like a git SHA to identify version\n * @return {Raven}\n */\n setRelease: function(release) {\n this._globalOptions.release = release;\n\n return this;\n },\n\n /*\n * Set the dataCallback option\n *\n * @param {function} callback The callback to run which allows the\n * data blob to be mutated before sending\n * @return {Raven}\n */\n setDataCallback: function(callback) {\n var original = this._globalOptions.dataCallback;\n this._globalOptions.dataCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the breadcrumbCallback option\n *\n * @param {function} callback The callback to run which allows filtering\n * or mutating breadcrumbs\n * @return {Raven}\n */\n setBreadcrumbCallback: function(callback) {\n var original = this._globalOptions.breadcrumbCallback;\n this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the shouldSendCallback option\n *\n * @param {function} callback The callback to run which allows\n * introspecting the blob before sending\n * @return {Raven}\n */\n setShouldSendCallback: function(callback) {\n var original = this._globalOptions.shouldSendCallback;\n this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /**\n * Override the default HTTP transport mechanism that transmits data\n * to the Sentry server.\n *\n * @param {function} transport Function invoked instead of the default\n * `makeRequest` handler.\n *\n * @return {Raven}\n */\n setTransport: function(transport) {\n this._globalOptions.transport = transport;\n\n return this;\n },\n\n /*\n * Get the latest raw exception that was captured by Raven.\n *\n * @return {error}\n */\n lastException: function() {\n return this._lastCapturedException;\n },\n\n /*\n * Get the last event id\n *\n * @return {string}\n */\n lastEventId: function() {\n return this._lastEventId;\n },\n\n /*\n * Determine if Raven is setup and ready to go.\n *\n * @return {boolean}\n */\n isSetup: function() {\n if (!this._hasJSON) return false; // needs JSON support\n if (!this._globalServer) {\n if (!this.ravenNotConfiguredError) {\n this.ravenNotConfiguredError = true;\n this._logDebug('error', 'Error: Raven has not been configured.');\n }\n return false;\n }\n return true;\n },\n\n afterLoad: function() {\n // TODO: remove window dependence?\n\n // Attempt to initialize Raven on load\n var RavenConfig = _window.RavenConfig;\n if (RavenConfig) {\n this.config(RavenConfig.dsn, RavenConfig.config).install();\n }\n },\n\n showReportDialog: function(options) {\n if (\n !_document // doesn't work without a document (React native)\n )\n return;\n\n options = options || {};\n\n var lastEventId = options.eventId || this.lastEventId();\n if (!lastEventId) {\n throw new RavenConfigError('Missing eventId');\n }\n\n var dsn = options.dsn || this._dsn;\n if (!dsn) {\n throw new RavenConfigError('Missing DSN');\n }\n\n var encode = encodeURIComponent;\n var qs = '';\n qs += '?eventId=' + encode(lastEventId);\n qs += '&dsn=' + encode(dsn);\n\n var user = options.user || this._globalContext.user;\n if (user) {\n if (user.name) qs += '&name=' + encode(user.name);\n if (user.email) qs += '&email=' + encode(user.email);\n }\n\n var globalServer = this._getGlobalServer(this._parseDSN(dsn));\n\n var script = _document.createElement('script');\n script.async = true;\n script.src = globalServer + '/api/embed/error-page/' + qs;\n (_document.head || _document.body).appendChild(script);\n },\n\n /**** Private functions ****/\n _ignoreNextOnError: function() {\n var self = this;\n this._ignoreOnError += 1;\n setTimeout(function() {\n // onerror should trigger before setTimeout\n self._ignoreOnError -= 1;\n });\n },\n\n _triggerEvent: function(eventType, options) {\n // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it\n var evt, key;\n\n if (!this._hasDocument) return;\n\n options = options || {};\n\n eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);\n\n if (_document.createEvent) {\n evt = _document.createEvent('HTMLEvents');\n evt.initEvent(eventType, true, true);\n } else {\n evt = _document.createEventObject();\n evt.eventType = eventType;\n }\n\n for (key in options)\n if (hasKey(options, key)) {\n evt[key] = options[key];\n }\n\n if (_document.createEvent) {\n // IE9 if standards\n _document.dispatchEvent(evt);\n } else {\n // IE8 regardless of Quirks or Standards\n // IE9 if quirks\n try {\n _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);\n } catch (e) {\n // Do nothing\n }\n }\n },\n\n /**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param evtName the event name (e.g. \"click\")\n * @returns {Function}\n * @private\n */\n _breadcrumbEventHandler: function(evtName) {\n var self = this;\n return function(evt) {\n // reset keypress timeout; e.g. triggering a 'click' after\n // a 'keypress' will reset the keypress debounce so that a new\n // set of keypresses can be recorded\n self._keypressTimeout = null;\n\n // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors). Ignore if we've\n // already captured the event.\n if (self._lastCapturedEvent === evt) return;\n\n self._lastCapturedEvent = evt;\n\n // try/catch both:\n // - accessing evt.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // can throw an exception in some circumstances.\n var target;\n try {\n target = htmlTreeAsString(evt.target);\n } catch (e) {\n target = '<unknown>';\n }\n\n self.captureBreadcrumb({\n category: 'ui.' + evtName, // e.g. ui.click, ui.input\n message: target\n });\n };\n },\n\n /**\n * Wraps addEventListener to capture keypress UI events\n * @returns {Function}\n * @private\n */\n _keypressEventHandler: function() {\n var self = this,\n debounceDuration = 1000; // milliseconds\n\n // TODO: if somehow user switches keypress target before\n // debounce timeout is triggered, we will only capture\n // a single breadcrumb from the FIRST target (acceptable?)\n return function(evt) {\n var target;\n try {\n target = evt.target;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n var tagName = target && target.tagName;\n\n // only consider keypress events on actual input elements\n // this will disregard keypresses targeting body (e.g. tabbing\n // through elements, hotkeys, etc)\n if (\n !tagName ||\n (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)\n )\n return;\n\n // record first keypress in a series, but ignore subsequent\n // keypresses until debounce clears\n var timeout = self._keypressTimeout;\n if (!timeout) {\n self._breadcrumbEventHandler('input')(evt);\n }\n clearTimeout(timeout);\n self._keypressTimeout = setTimeout(function() {\n self._keypressTimeout = null;\n }, debounceDuration);\n };\n },\n\n /**\n * Captures a breadcrumb of type \"navigation\", normalizing input URLs\n * @param to the originating URL\n * @param from the target URL\n * @private\n */\n _captureUrlChange: function(from, to) {\n var parsedLoc = parseUrl(this._location.href);\n var parsedTo = parseUrl(to);\n var parsedFrom = parseUrl(from);\n\n // because onpopstate only tells you the \"new\" (to) value of location.href, and\n // not the previous (from) value, we need to track the value of the current URL\n // state ourselves\n this._lastHref = to;\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)\n to = parsedTo.relative;\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)\n from = parsedFrom.relative;\n\n this.captureBreadcrumb({\n category: 'navigation',\n data: {\n to: to,\n from: from\n }\n });\n },\n\n _patchFunctionToString: function() {\n var self = this;\n self._originalFunctionToString = Function.prototype.toString;\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = function() {\n if (typeof this === 'function' && this.__raven__) {\n return self._originalFunctionToString.apply(this.__orig__, arguments);\n }\n return self._originalFunctionToString.apply(this, arguments);\n };\n },\n\n _unpatchFunctionToString: function() {\n if (this._originalFunctionToString) {\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = this._originalFunctionToString;\n }\n },\n\n /**\n * Wrap timer functions and event targets to catch errors and provide\n * better metadata.\n */\n _instrumentTryCatch: function() {\n var self = this;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapTimeFn(orig) {\n return function(fn, t) {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n var originalCallback = args[0];\n if (isFunction(originalCallback)) {\n args[0] = self.wrap(originalCallback);\n }\n\n // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it\n // also supports only two arguments and doesn't care what this is, so we\n // can just call the original function directly.\n if (orig.apply) {\n return orig.apply(this, args);\n } else {\n return orig(args[0], args[1]);\n }\n };\n }\n\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n function wrapEventTarget(global) {\n var proto = _window[global] && _window[global].prototype;\n if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {\n fill(\n proto,\n 'addEventListener',\n function(orig) {\n return function(evtName, fn, capture, secure) {\n // preserve arity\n try {\n if (fn && fn.handleEvent) {\n fn.handleEvent = self.wrap(fn.handleEvent);\n }\n } catch (err) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`\n // so that we don't have more than one wrapper function\n var before, clickHandler, keypressHandler;\n\n if (\n autoBreadcrumbs &&\n autoBreadcrumbs.dom &&\n (global === 'EventTarget' || global === 'Node')\n ) {\n // NOTE: generating multiple handlers per addEventListener invocation, should\n // revisit and verify we can just use one (almost certainly)\n clickHandler = self._breadcrumbEventHandler('click');\n keypressHandler = self._keypressEventHandler();\n before = function(evt) {\n // need to intercept every DOM event in `before` argument, in case that\n // same wrapped method is re-used for different events (e.g. mousemove THEN click)\n // see #724\n if (!evt) return;\n\n var eventType;\n try {\n eventType = evt.type;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n if (eventType === 'click') return clickHandler(evt);\n else if (eventType === 'keypress') return keypressHandler(evt);\n };\n }\n return orig.call(\n this,\n evtName,\n self.wrap(fn, undefined, before),\n capture,\n secure\n );\n };\n },\n wrappedBuiltIns\n );\n fill(\n proto,\n 'removeEventListener',\n function(orig) {\n return function(evt, fn, capture, secure) {\n try {\n fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);\n } catch (e) {\n // ignore, accessing __raven_wrapper__ will throw in some Selenium environments\n }\n return orig.call(this, evt, fn, capture, secure);\n };\n },\n wrappedBuiltIns\n );\n }\n }\n\n fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);\n fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);\n if (_window.requestAnimationFrame) {\n fill(\n _window,\n 'requestAnimationFrame',\n function(orig) {\n return function(cb) {\n return orig(self.wrap(cb));\n };\n },\n wrappedBuiltIns\n );\n }\n\n // event targets borrowed from bugsnag-js:\n // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666\n var eventTargets = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload'\n ];\n for (var i = 0; i < eventTargets.length; i++) {\n wrapEventTarget(eventTargets[i]);\n }\n },\n\n /**\n * Instrument browser built-ins w/ breadcrumb capturing\n * - XMLHttpRequests\n * - DOM interactions (click/typing)\n * - window.location changes\n * - console\n *\n * Can be disabled or individually configured via the `autoBreadcrumbs` config option\n */\n _instrumentBreadcrumbs: function() {\n var self = this;\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && isFunction(xhr[prop])) {\n fill(xhr, prop, function(orig) {\n return self.wrap(orig);\n }); // intentionally don't track filled methods on XHR instances\n }\n }\n\n if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {\n var xhrproto = _window.XMLHttpRequest && _window.XMLHttpRequest.prototype;\n fill(\n xhrproto,\n 'open',\n function(origOpen) {\n return function(method, url) {\n // preserve arity\n\n // if Sentry key appears in URL, don't capture\n if (isString(url) && url.indexOf(self._globalKey) === -1) {\n this.__raven_xhr = {\n method: method,\n url: url,\n status_code: null\n };\n }\n\n return origOpen.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n\n fill(\n xhrproto,\n 'send',\n function(origSend) {\n return function() {\n // preserve arity\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__raven_xhr && xhr.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhr.__raven_xhr.status_code = xhr.status;\n } catch (e) {\n /* do nothing */\n }\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'xhr',\n data: xhr.__raven_xhr\n });\n }\n }\n\n var props = ['onload', 'onerror', 'onprogress'];\n for (var j = 0; j < props.length; j++) {\n wrapProp(props[j], xhr);\n }\n\n if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {\n fill(\n xhr,\n 'onreadystatechange',\n function(orig) {\n return self.wrap(orig, undefined, onreadystatechangeHandler);\n } /* intentionally don't track this instrumentation */\n );\n } else {\n // if onreadystatechange wasn't actually set by the page on this xhr, we\n // are free to set our own and capture the breadcrumb\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n\n return origSend.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n }\n\n if (autoBreadcrumbs.xhr && supportsFetch()) {\n fill(\n _window,\n 'fetch',\n function(origFetch) {\n return function() {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n\n var fetchInput = args[0];\n var method = 'GET';\n var url;\n\n if (typeof fetchInput === 'string') {\n url = fetchInput;\n } else if ('Request' in _window && fetchInput instanceof _window.Request) {\n url = fetchInput.url;\n if (fetchInput.method) {\n method = fetchInput.method;\n }\n } else {\n url = '' + fetchInput;\n }\n\n // if Sentry key appears in URL, don't capture, as it's our own request\n if (url.indexOf(self._globalKey) !== -1) {\n return origFetch.apply(this, args);\n }\n\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n\n var fetchData = {\n method: method,\n url: url,\n status_code: null\n };\n\n return origFetch\n .apply(this, args)\n .then(function(response) {\n fetchData.status_code = response.status;\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData\n });\n\n return response;\n })\n ['catch'](function(err) {\n // if there is an error performing the request\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData,\n level: 'error'\n });\n\n throw err;\n });\n };\n },\n wrappedBuiltIns\n );\n }\n\n // Capture breadcrumbs from any click that is unhandled / bubbled up all the way\n // to the document. Do this before we instrument addEventListener.\n if (autoBreadcrumbs.dom && this._hasDocument) {\n if (_document.addEventListener) {\n _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);\n _document.addEventListener('keypress', self._keypressEventHandler(), false);\n } else if (_document.attachEvent) {\n // IE8 Compatibility\n _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));\n _document.attachEvent('onkeypress', self._keypressEventHandler());\n }\n }\n\n // record navigation (URL) changes\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n var chrome = _window.chrome;\n var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n var hasPushAndReplaceState =\n !isChromePackagedApp &&\n _window.history &&\n history.pushState &&\n history.replaceState;\n if (autoBreadcrumbs.location && hasPushAndReplaceState) {\n // TODO: remove onpopstate handler on uninstall()\n var oldOnPopState = _window.onpopstate;\n _window.onpopstate = function() {\n var currentHref = self._location.href;\n self._captureUrlChange(self._lastHref, currentHref);\n\n if (oldOnPopState) {\n return oldOnPopState.apply(this, arguments);\n }\n };\n\n var historyReplacementFunction = function(origHistFunction) {\n // note history.pushState.length is 0; intentionally not declaring\n // params to preserve 0 arity\n return function(/* state, title, url */) {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n\n // url argument is optional\n if (url) {\n // coerce to string (this is what pushState does)\n self._captureUrlChange(self._lastHref, url + '');\n }\n\n return origHistFunction.apply(this, arguments);\n };\n };\n\n fill(history, 'pushState', historyReplacementFunction, wrappedBuiltIns);\n fill(history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);\n }\n\n if (autoBreadcrumbs.console && 'console' in _window && console.log) {\n // console\n var consoleMethodCallback = function(msg, data) {\n self.captureBreadcrumb({\n message: msg,\n level: data.level,\n category: 'console'\n });\n };\n\n each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {\n wrapConsoleMethod(console, level, consoleMethodCallback);\n });\n }\n },\n\n _restoreBuiltIns: function() {\n // restore any wrapped builtins\n var builtin;\n while (this._wrappedBuiltIns.length) {\n builtin = this._wrappedBuiltIns.shift();\n\n var obj = builtin[0],\n name = builtin[1],\n orig = builtin[2];\n\n obj[name] = orig;\n }\n },\n\n _restoreConsole: function() {\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsoleMethods) {\n this._originalConsole[method] = this._originalConsoleMethods[method];\n }\n },\n\n _drainPlugins: function() {\n var self = this;\n\n // FIX ME TODO\n each(this._plugins, function(_, plugin) {\n var installer = plugin[0];\n var args = plugin[1];\n installer.apply(self, [self].concat(args));\n });\n },\n\n _parseDSN: function(str) {\n var m = dsnPattern.exec(str),\n dsn = {},\n i = 7;\n\n try {\n while (i--) dsn[dsnKeys[i]] = m[i] || '';\n } catch (e) {\n throw new RavenConfigError('Invalid DSN: ' + str);\n }\n\n if (dsn.pass && !this._globalOptions.allowSecretKey) {\n throw new RavenConfigError(\n 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'\n );\n }\n\n return dsn;\n },\n\n _getGlobalServer: function(uri) {\n // assemble the endpoint from the uri pieces\n var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');\n\n if (uri.protocol) {\n globalServer = uri.protocol + ':' + globalServer;\n }\n return globalServer;\n },\n\n _handleOnErrorStackInfo: function() {\n // if we are intentionally ignoring errors via onerror, bail out\n if (!this._ignoreOnError) {\n this._handleStackInfo.apply(this, arguments);\n }\n },\n\n _handleStackInfo: function(stackInfo, options) {\n var frames = this._prepareFrames(stackInfo, options);\n\n this._triggerEvent('handle', {\n stackInfo: stackInfo,\n options: options\n });\n\n this._processException(\n stackInfo.name,\n stackInfo.message,\n stackInfo.url,\n stackInfo.lineno,\n frames,\n options\n );\n },\n\n _prepareFrames: function(stackInfo, options) {\n var self = this;\n var frames = [];\n if (stackInfo.stack && stackInfo.stack.length) {\n each(stackInfo.stack, function(i, stack) {\n var frame = self._normalizeFrame(stack, stackInfo.url);\n if (frame) {\n frames.push(frame);\n }\n });\n\n // e.g. frames captured via captureMessage throw\n if (options && options.trimHeadFrames) {\n for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {\n frames[j].in_app = false;\n }\n }\n }\n frames = frames.slice(0, this._globalOptions.stackTraceLimit);\n return frames;\n },\n\n _normalizeFrame: function(frame, stackInfoUrl) {\n // normalize the frames data\n var normalized = {\n filename: frame.url,\n lineno: frame.line,\n colno: frame.column,\n function: frame.func || '?'\n };\n\n // Case when we don't have any information about the error\n // E.g. throwing a string or raw object, instead of an `Error` in Firefox\n // Generating synthetic error doesn't add any value here\n //\n // We should probably somehow let a user know that they should fix their code\n if (!frame.url) {\n normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler\n }\n\n normalized.in_app = !// determine if an exception came from outside of our app\n // first we check the global includePaths list.\n (\n (!!this._globalOptions.includePaths.test &&\n !this._globalOptions.includePaths.test(normalized.filename)) ||\n // Now we check for fun, if the function name is Raven or TraceKit\n /(Raven|TraceKit)\\./.test(normalized['function']) ||\n // finally, we do a last ditch effort and check for raven.min.js\n /raven\\.(min\\.)?js$/.test(normalized.filename)\n );\n\n return normalized;\n },\n\n _processException: function(type, message, fileurl, lineno, frames, options) {\n var prefixedMessage = (type ? type + ': ' : '') + (message || '');\n if (\n !!this._globalOptions.ignoreErrors.test &&\n (this._globalOptions.ignoreErrors.test(message) ||\n this._globalOptions.ignoreErrors.test(prefixedMessage))\n ) {\n return;\n }\n\n var stacktrace;\n\n if (frames && frames.length) {\n fileurl = frames[0].filename || fileurl;\n // Sentry expects frames oldest to newest\n // and JS sends them as newest to oldest\n frames.reverse();\n stacktrace = {frames: frames};\n } else if (fileurl) {\n stacktrace = {\n frames: [\n {\n filename: fileurl,\n lineno: lineno,\n in_app: true\n }\n ]\n };\n }\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n var data = objectMerge(\n {\n // sentry.interfaces.Exception\n exception: {\n values: [\n {\n type: type,\n value: message,\n stacktrace: stacktrace\n }\n ]\n },\n culprit: fileurl\n },\n options\n );\n\n // Fire away!\n this._send(data);\n },\n\n _trimPacket: function(data) {\n // For now, we only want to truncate the two different messages\n // but this could/should be expanded to just trim everything\n var max = this._globalOptions.maxMessageLength;\n if (data.message) {\n data.message = truncate(data.message, max);\n }\n if (data.exception) {\n var exception = data.exception.values[0];\n exception.value = truncate(exception.value, max);\n }\n\n var request = data.request;\n if (request) {\n if (request.url) {\n request.url = truncate(request.url, this._globalOptions.maxUrlLength);\n }\n if (request.Referer) {\n request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);\n }\n }\n\n if (data.breadcrumbs && data.breadcrumbs.values)\n this._trimBreadcrumbs(data.breadcrumbs);\n\n return data;\n },\n\n /**\n * Truncate breadcrumb values (right now just URLs)\n */\n _trimBreadcrumbs: function(breadcrumbs) {\n // known breadcrumb properties with urls\n // TODO: also consider arbitrary prop values that start with (https?)?://\n var urlProps = ['to', 'from', 'url'],\n urlProp,\n crumb,\n data;\n\n for (var i = 0; i < breadcrumbs.values.length; ++i) {\n crumb = breadcrumbs.values[i];\n if (\n !crumb.hasOwnProperty('data') ||\n !isObject(crumb.data) ||\n objectFrozen(crumb.data)\n )\n continue;\n\n data = objectMerge({}, crumb.data);\n for (var j = 0; j < urlProps.length; ++j) {\n urlProp = urlProps[j];\n if (data.hasOwnProperty(urlProp) && data[urlProp]) {\n data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);\n }\n }\n breadcrumbs.values[i].data = data;\n }\n },\n\n _getHttpData: function() {\n if (!this._hasNavigator && !this._hasDocument) return;\n var httpData = {};\n\n if (this._hasNavigator && _navigator.userAgent) {\n httpData.headers = {\n 'User-Agent': navigator.userAgent\n };\n }\n\n // Check in `window` instead of `document`, as we may be in ServiceWorker environment\n if (_window.location && _window.location.href) {\n httpData.url = _window.location.href;\n }\n\n if (this._hasDocument && _document.referrer) {\n if (!httpData.headers) httpData.headers = {};\n httpData.headers.Referer = _document.referrer;\n }\n\n return httpData;\n },\n\n _resetBackoff: function() {\n this._backoffDuration = 0;\n this._backoffStart = null;\n },\n\n _shouldBackoff: function() {\n return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;\n },\n\n /**\n * Returns true if the in-process data payload matches the signature\n * of the previously-sent data\n *\n * NOTE: This has to be done at this level because TraceKit can generate\n * data from window.onerror WITHOUT an exception object (IE8, IE9,\n * other old browsers). This can take the form of an \"exception\"\n * data object with a single frame (derived from the onerror args).\n */\n _isRepeatData: function(current) {\n var last = this._lastData;\n\n if (\n !last ||\n current.message !== last.message || // defined for captureMessage\n current.culprit !== last.culprit // defined for captureException/onerror\n )\n return false;\n\n // Stacktrace interface (i.e. from captureMessage)\n if (current.stacktrace || last.stacktrace) {\n return isSameStacktrace(current.stacktrace, last.stacktrace);\n } else if (current.exception || last.exception) {\n // Exception interface (i.e. from captureException/onerror)\n return isSameException(current.exception, last.exception);\n }\n\n return true;\n },\n\n _setBackoffState: function(request) {\n // If we are already in a backoff state, don't change anything\n if (this._shouldBackoff()) {\n return;\n }\n\n var status = request.status;\n\n // 400 - project_id doesn't exist or some other fatal\n // 401 - invalid/revoked dsn\n // 429 - too many requests\n if (!(status === 400 || status === 401 || status === 429)) return;\n\n var retry;\n try {\n // If Retry-After is not in Access-Control-Expose-Headers, most\n // browsers will throw an exception trying to access it\n if (supportsFetch()) {\n retry = request.headers.get('Retry-After');\n } else {\n retry = request.getResponseHeader('Retry-After');\n }\n\n // Retry-After is returned in seconds\n retry = parseInt(retry, 10) * 1000;\n } catch (e) {\n /* eslint no-empty:0 */\n }\n\n this._backoffDuration = retry\n ? // If Sentry server returned a Retry-After value, use it\n retry\n : // Otherwise, double the last backoff duration (starts at 1 sec)\n this._backoffDuration * 2 || 1000;\n\n this._backoffStart = now();\n },\n\n _send: function(data) {\n var globalOptions = this._globalOptions;\n\n var baseData = {\n project: this._globalProject,\n logger: globalOptions.logger,\n platform: 'javascript'\n },\n httpData = this._getHttpData();\n\n if (httpData) {\n baseData.request = httpData;\n }\n\n // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload\n if (data.trimHeadFrames) delete data.trimHeadFrames;\n\n data = objectMerge(baseData, data);\n\n // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge\n data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);\n data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);\n\n // Send along our own collected metadata with extra\n data.extra['session:duration'] = now() - this._startTime;\n\n if (this._breadcrumbs && this._breadcrumbs.length > 0) {\n // intentionally make shallow copy so that additions\n // to breadcrumbs aren't accidentally sent in this request\n data.breadcrumbs = {\n values: [].slice.call(this._breadcrumbs, 0)\n };\n }\n\n if (this._globalContext.user) {\n // sentry.interfaces.User\n data.user = this._globalContext.user;\n }\n\n // Include the environment if it's defined in globalOptions\n if (globalOptions.environment) data.environment = globalOptions.environment;\n\n // Include the release if it's defined in globalOptions\n if (globalOptions.release) data.release = globalOptions.release;\n\n // Include server_name if it's defined in globalOptions\n if (globalOptions.serverName) data.server_name = globalOptions.serverName;\n\n data = this._sanitizeData(data);\n\n // Cleanup empty properties before sending them to the server\n Object.keys(data).forEach(function(key) {\n if (data[key] == null || data[key] === '' || isEmptyObject(data[key])) {\n delete data[key];\n }\n });\n\n if (isFunction(globalOptions.dataCallback)) {\n data = globalOptions.dataCallback(data) || data;\n }\n\n // Why??????????\n if (!data || isEmptyObject(data)) {\n return;\n }\n\n // Check if the request should be filtered or not\n if (\n isFunction(globalOptions.shouldSendCallback) &&\n !globalOptions.shouldSendCallback(data)\n ) {\n return;\n }\n\n // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),\n // so drop requests until \"cool-off\" period has elapsed.\n if (this._shouldBackoff()) {\n this._logDebug('warn', 'Raven dropped error due to backoff: ', data);\n return;\n }\n\n if (typeof globalOptions.sampleRate === 'number') {\n if (Math.random() < globalOptions.sampleRate) {\n this._sendProcessedPayload(data);\n }\n } else {\n this._sendProcessedPayload(data);\n }\n },\n\n _sanitizeData: function(data) {\n return sanitize(data, this._globalOptions.sanitizeKeys);\n },\n\n _getUuid: function() {\n return uuid4();\n },\n\n _sendProcessedPayload: function(data, callback) {\n var self = this;\n var globalOptions = this._globalOptions;\n\n if (!this.isSetup()) return;\n\n // Try and clean up the packet before sending by truncating long values\n data = this._trimPacket(data);\n\n // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,\n // but this would require copying an un-truncated copy of the data packet, which can be\n // arbitrarily deep (extra_data) -- could be worthwhile? will revisit\n if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {\n this._logDebug('warn', 'Raven dropped repeat event: ', data);\n return;\n }\n\n // Send along an event_id if not explicitly passed.\n // This event_id can be used to reference the error within Sentry itself.\n // Set lastEventId after we know the error should actually be sent\n this._lastEventId = data.event_id || (data.event_id = this._getUuid());\n\n // Store outbound payload after trim\n this._lastData = data;\n\n this._logDebug('debug', 'Raven about to send:', data);\n\n var auth = {\n sentry_version: '7',\n sentry_client: 'raven-js/' + this.VERSION,\n sentry_key: this._globalKey\n };\n\n if (this._globalSecret) {\n auth.sentry_secret = this._globalSecret;\n }\n\n var exception = data.exception && data.exception.values[0];\n\n // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy\n if (\n this._globalOptions.autoBreadcrumbs &&\n this._globalOptions.autoBreadcrumbs.sentry\n ) {\n this.captureBreadcrumb({\n category: 'sentry',\n message: exception\n ? (exception.type ? exception.type + ': ' : '') + exception.value\n : data.message,\n event_id: data.event_id,\n level: data.level || 'error' // presume error unless specified\n });\n }\n\n var url = this._globalEndpoint;\n (globalOptions.transport || this._makeRequest).call(this, {\n url: url,\n auth: auth,\n data: data,\n options: globalOptions,\n onSuccess: function success() {\n self._resetBackoff();\n\n self._triggerEvent('success', {\n data: data,\n src: url\n });\n callback && callback();\n },\n onError: function failure(error) {\n self._logDebug('error', 'Raven transport failed to send: ', error);\n\n if (error.request) {\n self._setBackoffState(error.request);\n }\n\n self._triggerEvent('failure', {\n data: data,\n src: url\n });\n error = error || new Error('Raven send failed (no additional details provided)');\n callback && callback(error);\n }\n });\n },\n\n _makeRequest: function(opts) {\n // Auth is intentionally sent as part of query string (NOT as custom HTTP header) to avoid preflight CORS requests\n var url = opts.url + '?' + urlencode(opts.auth);\n\n var evaluatedHeaders = null;\n var evaluatedFetchParameters = {};\n\n if (opts.options.headers) {\n evaluatedHeaders = this._evaluateHash(opts.options.headers);\n }\n\n if (opts.options.fetchParameters) {\n evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);\n }\n\n if (supportsFetch()) {\n evaluatedFetchParameters.body = stringify(opts.data);\n\n var defaultFetchOptions = objectMerge({}, this._fetchDefaults);\n var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);\n\n if (evaluatedHeaders) {\n fetchOptions.headers = evaluatedHeaders;\n }\n\n return _window\n .fetch(url, fetchOptions)\n .then(function(response) {\n if (response.ok) {\n opts.onSuccess && opts.onSuccess();\n } else {\n var error = new Error('Sentry error code: ' + response.status);\n // It's called request only to keep compatibility with XHR interface\n // and not add more redundant checks in setBackoffState method\n error.request = response;\n opts.onError && opts.onError(error);\n }\n })\n ['catch'](function() {\n opts.onError &&\n opts.onError(new Error('Sentry error code: network unavailable'));\n });\n }\n\n var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();\n if (!request) return;\n\n // if browser doesn't support CORS (e.g. IE7), we are out of luck\n var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';\n\n if (!hasCORS) return;\n\n if ('withCredentials' in request) {\n request.onreadystatechange = function() {\n if (request.readyState !== 4) {\n return;\n } else if (request.status === 200) {\n opts.onSuccess && opts.onSuccess();\n } else if (opts.onError) {\n var err = new Error('Sentry error code: ' + request.status);\n err.request = request;\n opts.onError(err);\n }\n };\n } else {\n request = new XDomainRequest();\n // xdomainrequest cannot go http -> https (or vice versa),\n // so always use protocol relative\n url = url.replace(/^https?:/, '');\n\n // onreadystatechange not supported by XDomainRequest\n if (opts.onSuccess) {\n request.onload = opts.onSuccess;\n }\n if (opts.onError) {\n request.onerror = function() {\n var err = new Error('Sentry error code: XDomainRequest');\n err.request = request;\n opts.onError(err);\n };\n }\n }\n\n request.open('POST', url);\n\n if (evaluatedHeaders) {\n each(evaluatedHeaders, function(key, value) {\n request.setRequestHeader(key, value);\n });\n }\n\n request.send(stringify(opts.data));\n },\n\n _evaluateHash: function(hash) {\n var evaluated = {};\n\n for (var key in hash) {\n if (hash.hasOwnProperty(key)) {\n var value = hash[key];\n evaluated[key] = typeof value === 'function' ? value() : value;\n }\n }\n\n return evaluated;\n },\n\n _logDebug: function(level) {\n // We allow `Raven.debug` and `Raven.config(DSN, { debug: true })` to not make backward incompatible API change\n if (\n this._originalConsoleMethods[level] &&\n (this.debug || this._globalOptions.debug)\n ) {\n // In IE<10 console methods do not have their own 'apply' method\n Function.prototype.apply.call(\n this._originalConsoleMethods[level],\n this._originalConsole,\n [].slice.call(arguments, 1)\n );\n }\n },\n\n _mergeContext: function(key, context) {\n if (isUndefined(context)) {\n delete this._globalContext[key];\n } else {\n this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);\n }\n }\n};\n\n// Deprecations\nRaven.prototype.setUser = Raven.prototype.setUserContext;\nRaven.prototype.setReleaseContext = Raven.prototype.setRelease;\n\nmodule.exports = Raven;\n","/**\n * Enforces a single instance of the Raven client, and the\n * main entry point for Raven. If you are a consumer of the\n * Raven library, you SHOULD load this file (vs raven.js).\n **/\n\nvar RavenConstructor = require('./raven');\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _Raven = _window.Raven;\n\nvar Raven = new RavenConstructor();\n\n/*\n * Allow multiple versions of Raven to be installed.\n * Strip Raven from the global context and returns the instance.\n *\n * @return {Raven}\n */\nRaven.noConflict = function() {\n _window.Raven = _Raven;\n return Raven;\n};\n\nRaven.afterLoad();\n\nmodule.exports = Raven;\n\n/**\n * DISCLAIMER:\n *\n * Expose `Client` constructor for cases where user want to track multiple \"sub-applications\" in one larger app.\n * It's not meant to be used by a wide audience, so pleaaase make sure that you know what you're doing before using it.\n * Accidentally calling `install` multiple times, may result in an unexpected behavior that's very hard to debug.\n *\n * It's called `Client' to be in-line with Raven Node implementation.\n *\n * HOWTO:\n *\n * import Raven from 'raven-js';\n *\n * const someAppReporter = new Raven.Client();\n * const someOtherAppReporter = new Raven.Client();\n *\n * someAppReporter.config('__DSN__', {\n * ...config goes here\n * });\n *\n * someOtherAppReporter.config('__OTHER_DSN__', {\n * ...config goes here\n * });\n *\n * someAppReporter.captureMessage(...);\n * someAppReporter.captureException(...);\n * someAppReporter.captureBreadcrumb(...);\n *\n * someOtherAppReporter.captureMessage(...);\n * someOtherAppReporter.captureException(...);\n * someOtherAppReporter.captureBreadcrumb(...);\n *\n * It should \"just work\".\n */\nmodule.exports.Client = RavenConstructor;\n","// ==========================================================================\n// Plyr.io demo\n// This code is purely for the https://plyr.io website\n// Please see readme.md in the root or github.com/sampotts/plyr\n// ==========================================================================\n\nimport Raven from 'raven-js';\n\n(() => {\n const isLive = window.location.host === 'plyr.io';\n\n // Raven / Sentry\n // For demo site (https://plyr.io) only\n if (isLive) {\n Raven.config('https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555').install();\n }\n\n document.addEventListener('DOMContentLoaded', () => {\n Raven.context(() => {\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n document.activeElement.classList.add(tabClassName);\n }, 0);\n });\n\n // Setup the player\n const player = new Plyr('#player', {\n debug: true,\n title: 'View From A Blue Moon',\n iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: true,\n },\n /* controls: [\n 'play-large',\n 'restart',\n 'rewind',\n 'play',\n 'fast-forward',\n 'progress',\n 'current-time',\n 'duration',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ], */\n /* i18n: {\n restart: '重新開始',\n rewind: '快退{seektime}秒',\n play: '播放',\n pause: '暫停',\n fastForward: '快進{seektime}秒',\n seek: '尋求',\n played: '發揮',\n buffered: '緩衝的',\n currentTime: '當前時間戳',\n duration: '長短',\n volume: '音量',\n mute: '靜音',\n unmute: '取消靜音',\n enableCaptions: '開啟字幕',\n disableCaptions: '關閉字幕',\n enterFullscreen: '進入全螢幕',\n exitFullscreen: '退出全螢幕',\n frameTitle: '球員為{title}',\n captions: '字幕',\n settings: '設定',\n speed: '速度',\n normal: '正常',\n quality: '質量',\n loop: '循環',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: '重啟',\n disabled: '殘',\n enabled: '啟用',\n advertisement: '廣告',\n }, */\n captions: {\n active: true,\n },\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n ads: {\n enabled: true,\n publisherId: '918848828995742',\n },\n });\n\n // Expose for tinkering in the console\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-576p.mp4',\n type: 'video/mp4',\n size: 576,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-720p.mp4',\n type: 'video/mp4',\n size: 720,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1080p.mp4',\n type: 'video/mp4',\n size: 1080,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1440p.mp4',\n type: 'video/mp4',\n size: 1440,\n },\n ],\n poster: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title: 'Kishi Bashi &ndash; &ldquo;It All Began With A Burst&rdquo;',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n }],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n }],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button => toggleClass(button.parentElement, 'active', false));\n\n // Set active on parent\n toggleClass(document.querySelector(`[data-source=\"${type}\"]`), 'active', true);\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(cite => {\n cite.setAttribute('hidden', '');\n });\n document.querySelector(`.plyr__cite--${type}`).removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`,\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n });\n });\n\n // Google analytics\n // For demo site (https://plyr.io) only\n /* eslint-disable */\n if (isLive) {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n }\n /* eslint-enable */\n})();\n"]} \ No newline at end of file
+{"version":3,"sources":["../../../node_modules/raven-js/vendor/json-stringify-safe/stringify.js","../../../node_modules/raven-js/src/utils.js","../../../node_modules/raven-js/vendor/TraceKit/tracekit.js","../../../node_modules/raven-js/vendor/md5/md5.js","../../../node_modules/raven-js/src/configError.js","../../../node_modules/raven-js/src/console.js","../../../node_modules/raven-js/src/raven.js","../../../node_modules/raven-js/src/singleton.js","demo.js"],"names":["global","stringify","_window","isErrorEvent","isDOMError","isDOMException","isError","isObject","isPlainObject","isUndefined","isFunction","isString","isArray","isEmptyObject","each","objectMerge","truncate","objectFrozen","hasKey","joinRegExp","urlencode","uuid4","htmlTreeAsString","isSameException","isSameStacktrace","parseUrl","fill","supportsFetch","supportsReferrerPolicy","serializeKeysForMessage","serializeException","sanitize","require$$0","TraceKit","md5","RavenConfigError","Raven","RavenConstructor","isLive","window","location","host","config","install","addEventListener","context","shr","setup","tabClassName","target","classList","remove","event","keyCode","activeElement","add","player","Plyr","buttons","document","querySelectorAll","types","currentType","hash","replace","historySupport","history","pushState","toggleClass","element","className","state","newSource","type","init","length","video","source","audio","youtube","vimeo","from","forEach","button","parentElement","querySelector","setAttribute","removeAttribute","getAttribute","replaceState","i","s","o","g","r","a","m","GoogleAnalyticsObject","q","push","arguments","l","Date","createElement","getElementsByTagName","async","src","parentNode","insertBefore","ga"],"mappings":"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","file":"demo.js","sourcesContent":["/*\n json-stringify-safe\n Like JSON.stringify, but doesn't throw on circular references.\n\n Originally forked from https://github.com/isaacs/json-stringify-safe\n version 5.0.1 on 3/8/2017 and modified to handle Errors serialization\n and IE8 compatibility. Tests for this are in test/vendor.\n\n ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE\n*/\n\nexports = module.exports = stringify;\nexports.getSerialize = serializer;\n\nfunction indexOf(haystack, needle) {\n for (var i = 0; i < haystack.length; ++i) {\n if (haystack[i] === needle) return i;\n }\n return -1;\n}\n\nfunction stringify(obj, replacer, spaces, cycleReplacer) {\n return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);\n}\n\n// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106\nfunction stringifyError(value) {\n var err = {\n // These properties are implemented as magical getters and don't show up in for in\n stack: value.stack,\n message: value.message,\n name: value.name\n };\n\n for (var i in value) {\n if (Object.prototype.hasOwnProperty.call(value, i)) {\n err[i] = value[i];\n }\n }\n\n return err;\n}\n\nfunction serializer(replacer, cycleReplacer) {\n var stack = [];\n var keys = [];\n\n if (cycleReplacer == null) {\n cycleReplacer = function(key, value) {\n if (stack[0] === value) {\n return '[Circular ~]';\n }\n return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';\n };\n }\n\n return function(key, value) {\n if (stack.length > 0) {\n var thisPos = indexOf(stack, this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n\n if (~indexOf(stack, value)) {\n value = cycleReplacer.call(this, key, value);\n }\n } else {\n stack.push(value);\n }\n\n return replacer == null\n ? value instanceof Error ? stringifyError(value) : value\n : replacer.call(this, key, value);\n };\n}\n","var stringify = require('../vendor/json-stringify-safe/stringify');\n\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction isObject(what) {\n return typeof what === 'object' && what !== null;\n}\n\n// Yanked from https://git.io/vS8DV re-used under CC0\n// with some tiny modifications\nfunction isError(value) {\n switch (Object.prototype.toString.call(value)) {\n case '[object Error]':\n return true;\n case '[object Exception]':\n return true;\n case '[object DOMException]':\n return true;\n default:\n return value instanceof Error;\n }\n}\n\nfunction isErrorEvent(value) {\n return Object.prototype.toString.call(value) === '[object ErrorEvent]';\n}\n\nfunction isDOMError(value) {\n return Object.prototype.toString.call(value) === '[object DOMError]';\n}\n\nfunction isDOMException(value) {\n return Object.prototype.toString.call(value) === '[object DOMException]';\n}\n\nfunction isUndefined(what) {\n return what === void 0;\n}\n\nfunction isFunction(what) {\n return typeof what === 'function';\n}\n\nfunction isPlainObject(what) {\n return Object.prototype.toString.call(what) === '[object Object]';\n}\n\nfunction isString(what) {\n return Object.prototype.toString.call(what) === '[object String]';\n}\n\nfunction isArray(what) {\n return Object.prototype.toString.call(what) === '[object Array]';\n}\n\nfunction isEmptyObject(what) {\n if (!isPlainObject(what)) return false;\n\n for (var _ in what) {\n if (what.hasOwnProperty(_)) {\n return false;\n }\n }\n return true;\n}\n\nfunction supportsErrorEvent() {\n try {\n new ErrorEvent(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsDOMError() {\n try {\n new DOMError(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsDOMException() {\n try {\n new DOMException(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsFetch() {\n if (!('fetch' in _window)) return false;\n\n try {\n new Headers(); // eslint-disable-line no-new\n new Request(''); // eslint-disable-line no-new\n new Response(); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n// https://caniuse.com/#feat=referrer-policy\n// It doesn't. And it throw exception instead of ignoring this parameter...\n// REF: https://github.com/getsentry/raven-js/issues/1233\nfunction supportsReferrerPolicy() {\n if (!supportsFetch()) return false;\n\n try {\n // eslint-disable-next-line no-new\n new Request('pickleRick', {\n referrerPolicy: 'origin'\n });\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsPromiseRejectionEvent() {\n return typeof PromiseRejectionEvent === 'function';\n}\n\nfunction wrappedCallback(callback) {\n function dataCallback(data, original) {\n var normalizedData = callback(data) || data;\n if (original) {\n return original(normalizedData) || normalizedData;\n }\n return normalizedData;\n }\n\n return dataCallback;\n}\n\nfunction each(obj, callback) {\n var i, j;\n\n if (isUndefined(obj.length)) {\n for (i in obj) {\n if (hasKey(obj, i)) {\n callback.call(null, i, obj[i]);\n }\n }\n } else {\n j = obj.length;\n if (j) {\n for (i = 0; i < j; i++) {\n callback.call(null, i, obj[i]);\n }\n }\n }\n}\n\nfunction objectMerge(obj1, obj2) {\n if (!obj2) {\n return obj1;\n }\n each(obj2, function(key, value) {\n obj1[key] = value;\n });\n return obj1;\n}\n\n/**\n * This function is only used for react-native.\n * react-native freezes object that have already been sent over the\n * js bridge. We need this function in order to check if the object is frozen.\n * So it's ok that objectFrozen returns false if Object.isFrozen is not\n * supported because it's not relevant for other \"platforms\". See related issue:\n * https://github.com/getsentry/react-native-sentry/issues/57\n */\nfunction objectFrozen(obj) {\n if (!Object.isFrozen) {\n return false;\n }\n return Object.isFrozen(obj);\n}\n\nfunction truncate(str, max) {\n if (typeof max !== 'number') {\n throw new Error('2nd argument to `truncate` function should be a number');\n }\n if (typeof str !== 'string' || max === 0) {\n return str;\n }\n return str.length <= max ? str : str.substr(0, max) + '\\u2026';\n}\n\n/**\n * hasKey, a better form of hasOwnProperty\n * Example: hasKey(MainHostObject, property) === true/false\n *\n * @param {Object} host object to check property\n * @param {string} key to check\n */\nfunction hasKey(object, key) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction joinRegExp(patterns) {\n // Combine an array of regular expressions and strings into one large regexp\n // Be mad.\n var sources = [],\n i = 0,\n len = patterns.length,\n pattern;\n\n for (; i < len; i++) {\n pattern = patterns[i];\n if (isString(pattern)) {\n // If it's a string, we need to escape it\n // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n sources.push(pattern.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1'));\n } else if (pattern && pattern.source) {\n // If it's a regexp already, we want to extract the source\n sources.push(pattern.source);\n }\n // Intentionally skip other cases\n }\n return new RegExp(sources.join('|'), 'i');\n}\n\nfunction urlencode(o) {\n var pairs = [];\n each(o, function(key, value) {\n pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n });\n return pairs.join('&');\n}\n\n// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n// intentionally using regex and not <a/> href parsing trick because React Native and other\n// environments where DOM might not be available\nfunction parseUrl(url) {\n if (typeof url !== 'string') return {};\n var match = url.match(/^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n // coerce to undefined values to empty string so we don't get 'undefined'\n var query = match[6] || '';\n var fragment = match[8] || '';\n return {\n protocol: match[2],\n host: match[4],\n path: match[5],\n relative: match[5] + query + fragment // everything minus origin\n };\n}\nfunction uuid4() {\n var crypto = _window.crypto || _window.msCrypto;\n\n if (!isUndefined(crypto) && crypto.getRandomValues) {\n // Use window.crypto API if available\n // eslint-disable-next-line no-undef\n var arr = new Uint16Array(8);\n crypto.getRandomValues(arr);\n\n // set 4 in byte 7\n arr[3] = (arr[3] & 0xfff) | 0x4000;\n // set 2 most significant bits of byte 9 to '10'\n arr[4] = (arr[4] & 0x3fff) | 0x8000;\n\n var pad = function(num) {\n var v = num.toString(16);\n while (v.length < 4) {\n v = '0' + v;\n }\n return v;\n };\n\n return (\n pad(arr[0]) +\n pad(arr[1]) +\n pad(arr[2]) +\n pad(arr[3]) +\n pad(arr[4]) +\n pad(arr[5]) +\n pad(arr[6]) +\n pad(arr[7])\n );\n } else {\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (Math.random() * 16) | 0,\n v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n}\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @param elem\n * @returns {string}\n */\nfunction htmlTreeAsString(elem) {\n /* eslint no-extra-parens:0*/\n var MAX_TRAVERSE_HEIGHT = 5,\n MAX_OUTPUT_LEN = 80,\n out = [],\n height = 0,\n len = 0,\n separator = ' > ',\n sepLength = separator.length,\n nextStr;\n\n while (elem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = htmlElementAsString(elem);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n // (ignore this limit if we are on the first iteration)\n if (\n nextStr === 'html' ||\n (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)\n ) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n elem = elem.parentNode;\n }\n\n return out.reverse().join(separator);\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @param HTMLElement\n * @returns {string}\n */\nfunction htmlElementAsString(elem) {\n var out = [],\n className,\n classes,\n key,\n attr,\n i;\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n out.push(elem.tagName.toLowerCase());\n if (elem.id) {\n out.push('#' + elem.id);\n }\n\n className = elem.className;\n if (className && isString(className)) {\n classes = className.split(/\\s+/);\n for (i = 0; i < classes.length; i++) {\n out.push('.' + classes[i]);\n }\n }\n var attrWhitelist = ['type', 'name', 'title', 'alt'];\n for (i = 0; i < attrWhitelist.length; i++) {\n key = attrWhitelist[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.push('[' + key + '=\"' + attr + '\"]');\n }\n }\n return out.join('');\n}\n\n/**\n * Returns true if either a OR b is truthy, but not both\n */\nfunction isOnlyOneTruthy(a, b) {\n return !!(!!a ^ !!b);\n}\n\n/**\n * Returns true if both parameters are undefined\n */\nfunction isBothUndefined(a, b) {\n return isUndefined(a) && isUndefined(b);\n}\n\n/**\n * Returns true if the two input exception interfaces have the same content\n */\nfunction isSameException(ex1, ex2) {\n if (isOnlyOneTruthy(ex1, ex2)) return false;\n\n ex1 = ex1.values[0];\n ex2 = ex2.values[0];\n\n if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;\n\n // in case both stacktraces are undefined, we can't decide so default to false\n if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) return false;\n\n return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);\n}\n\n/**\n * Returns true if the two input stack trace interfaces have the same content\n */\nfunction isSameStacktrace(stack1, stack2) {\n if (isOnlyOneTruthy(stack1, stack2)) return false;\n\n var frames1 = stack1.frames;\n var frames2 = stack2.frames;\n\n // Exit early if frame count differs\n if (frames1.length !== frames2.length) return false;\n\n // Iterate through every frame; bail out if anything differs\n var a, b;\n for (var i = 0; i < frames1.length; i++) {\n a = frames1[i];\n b = frames2[i];\n if (\n a.filename !== b.filename ||\n a.lineno !== b.lineno ||\n a.colno !== b.colno ||\n a['function'] !== b['function']\n )\n return false;\n }\n return true;\n}\n\n/**\n * Polyfill a method\n * @param obj object e.g. `document`\n * @param name method name present on object e.g. `addEventListener`\n * @param replacement replacement function\n * @param track {optional} record instrumentation to an array\n */\nfunction fill(obj, name, replacement, track) {\n if (obj == null) return;\n var orig = obj[name];\n obj[name] = replacement(orig);\n obj[name].__raven__ = true;\n obj[name].__orig__ = orig;\n if (track) {\n track.push([obj, name, orig]);\n }\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns {string}\n */\nfunction safeJoin(input, delimiter) {\n if (!isArray(input)) return '';\n\n var output = [];\n\n for (var i = 0; i < input.length; i++) {\n try {\n output.push(String(input[i]));\n } catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n\n return output.join(delimiter);\n}\n\n// Default Node.js REPL depth\nvar MAX_SERIALIZE_EXCEPTION_DEPTH = 3;\n// 50kB, as 100kB is max payload size, so half sounds reasonable\nvar MAX_SERIALIZE_EXCEPTION_SIZE = 50 * 1024;\nvar MAX_SERIALIZE_KEYS_LENGTH = 40;\n\nfunction utf8Length(value) {\n return ~-encodeURI(value).split(/%..|./).length;\n}\n\nfunction jsonSize(value) {\n return utf8Length(JSON.stringify(value));\n}\n\nfunction serializeValue(value) {\n if (typeof value === 'string') {\n var maxLength = 40;\n return truncate(value, maxLength);\n } else if (\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n typeof value === 'undefined'\n ) {\n return value;\n }\n\n var type = Object.prototype.toString.call(value);\n\n // Node.js REPL notation\n if (type === '[object Object]') return '[Object]';\n if (type === '[object Array]') return '[Array]';\n if (type === '[object Function]')\n return value.name ? '[Function: ' + value.name + ']' : '[Function]';\n\n return value;\n}\n\nfunction serializeObject(value, depth) {\n if (depth === 0) return serializeValue(value);\n\n if (isPlainObject(value)) {\n return Object.keys(value).reduce(function(acc, key) {\n acc[key] = serializeObject(value[key], depth - 1);\n return acc;\n }, {});\n } else if (Array.isArray(value)) {\n return value.map(function(val) {\n return serializeObject(val, depth - 1);\n });\n }\n\n return serializeValue(value);\n}\n\nfunction serializeException(ex, depth, maxSize) {\n if (!isPlainObject(ex)) return ex;\n\n depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth;\n maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize;\n\n var serialized = serializeObject(ex, depth);\n\n if (jsonSize(stringify(serialized)) > maxSize) {\n return serializeException(ex, depth - 1);\n }\n\n return serialized;\n}\n\nfunction serializeKeysForMessage(keys, maxLength) {\n if (typeof keys === 'number' || typeof keys === 'string') return keys.toString();\n if (!Array.isArray(keys)) return '';\n\n keys = keys.filter(function(key) {\n return typeof key === 'string';\n });\n if (keys.length === 0) return '[object has no keys]';\n\n maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength;\n if (keys[0].length >= maxLength) return keys[0];\n\n for (var usedKeys = keys.length; usedKeys > 0; usedKeys--) {\n var serialized = keys.slice(0, usedKeys).join(', ');\n if (serialized.length > maxLength) continue;\n if (usedKeys === keys.length) return serialized;\n return serialized + '\\u2026';\n }\n\n return '';\n}\n\nfunction sanitize(input, sanitizeKeys) {\n if (!isArray(sanitizeKeys) || (isArray(sanitizeKeys) && sanitizeKeys.length === 0))\n return input;\n\n var sanitizeRegExp = joinRegExp(sanitizeKeys);\n var sanitizeMask = '********';\n var safeInput;\n\n try {\n safeInput = JSON.parse(stringify(input));\n } catch (o_O) {\n return input;\n }\n\n function sanitizeWorker(workerInput) {\n if (isArray(workerInput)) {\n return workerInput.map(function(val) {\n return sanitizeWorker(val);\n });\n }\n\n if (isPlainObject(workerInput)) {\n return Object.keys(workerInput).reduce(function(acc, k) {\n if (sanitizeRegExp.test(k)) {\n acc[k] = sanitizeMask;\n } else {\n acc[k] = sanitizeWorker(workerInput[k]);\n }\n return acc;\n }, {});\n }\n\n return workerInput;\n }\n\n return sanitizeWorker(safeInput);\n}\n\nmodule.exports = {\n isObject: isObject,\n isError: isError,\n isErrorEvent: isErrorEvent,\n isDOMError: isDOMError,\n isDOMException: isDOMException,\n isUndefined: isUndefined,\n isFunction: isFunction,\n isPlainObject: isPlainObject,\n isString: isString,\n isArray: isArray,\n isEmptyObject: isEmptyObject,\n supportsErrorEvent: supportsErrorEvent,\n supportsDOMError: supportsDOMError,\n supportsDOMException: supportsDOMException,\n supportsFetch: supportsFetch,\n supportsReferrerPolicy: supportsReferrerPolicy,\n supportsPromiseRejectionEvent: supportsPromiseRejectionEvent,\n wrappedCallback: wrappedCallback,\n each: each,\n objectMerge: objectMerge,\n truncate: truncate,\n objectFrozen: objectFrozen,\n hasKey: hasKey,\n joinRegExp: joinRegExp,\n urlencode: urlencode,\n uuid4: uuid4,\n htmlTreeAsString: htmlTreeAsString,\n htmlElementAsString: htmlElementAsString,\n isSameException: isSameException,\n isSameStacktrace: isSameStacktrace,\n parseUrl: parseUrl,\n fill: fill,\n safeJoin: safeJoin,\n serializeException: serializeException,\n serializeKeysForMessage: serializeKeysForMessage,\n sanitize: sanitize\n};\n","var utils = require('../../src/utils');\n\n/*\n TraceKit - Cross brower stack traces\n\n This was originally forked from github.com/occ/TraceKit, but has since been\n largely re-written and is now maintained as part of raven-js. Tests for\n this are in test/vendor.\n\n MIT license\n*/\n\nvar TraceKit = {\n collectWindowErrors: true,\n debug: false\n};\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n// global reference to slice\nvar _slice = [].slice;\nvar UNKNOWN_FUNCTION = '?';\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types\nvar ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;\n\nfunction getLocationHref() {\n if (typeof document === 'undefined' || document.location == null) return '';\n return document.location.href;\n}\n\nfunction getLocationOrigin() {\n if (typeof document === 'undefined' || document.location == null) return '';\n\n // Oh dear IE10...\n if (!document.location.origin) {\n document.location.origin =\n document.location.protocol +\n '//' +\n document.location.hostname +\n (document.location.port ? ':' + document.location.port : '');\n }\n\n return document.location.origin;\n}\n\n/**\n * TraceKit.report: cross-browser processing of unhandled exceptions\n *\n * Syntax:\n * TraceKit.report.subscribe(function(stackInfo) { ... })\n * TraceKit.report.unsubscribe(function(stackInfo) { ... })\n * TraceKit.report(exception)\n * try { ...code... } catch(ex) { TraceKit.report(ex); }\n *\n * Supports:\n * - Firefox: full stack trace with line numbers, plus column number\n * on top frame; column number is not guaranteed\n * - Opera: full stack trace with line and column numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n * - IE: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n *\n * In theory, TraceKit should work on all of the following versions:\n * - IE5.5+ (only 8.0 tested)\n * - Firefox 0.9+ (only 3.5+ tested)\n * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require\n * Exceptions Have Stacktrace to be enabled in opera:config)\n * - Safari 3+ (only 4+ tested)\n * - Chrome 1+ (only 5+ tested)\n * - Konqueror 3.5+ (untested)\n *\n * Requires TraceKit.computeStackTrace.\n *\n * Tries to catch all unhandled exceptions and report them to the\n * subscribed handlers. Please note that TraceKit.report will rethrow the\n * exception. This is REQUIRED in order to get a useful stack trace in IE.\n * If the exception does not reach the top of the browser, you will only\n * get a stack trace from the point where TraceKit.report was called.\n *\n * Handlers receive a stackInfo object as described in the\n * TraceKit.computeStackTrace docs.\n */\nTraceKit.report = (function reportModuleWrapper() {\n var handlers = [],\n lastArgs = null,\n lastException = null,\n lastExceptionStack = null;\n\n /**\n * Add a crash handler.\n * @param {Function} handler\n */\n function subscribe(handler) {\n installGlobalHandler();\n handlers.push(handler);\n }\n\n /**\n * Remove a crash handler.\n * @param {Function} handler\n */\n function unsubscribe(handler) {\n for (var i = handlers.length - 1; i >= 0; --i) {\n if (handlers[i] === handler) {\n handlers.splice(i, 1);\n }\n }\n }\n\n /**\n * Remove all crash handlers.\n */\n function unsubscribeAll() {\n uninstallGlobalHandler();\n handlers = [];\n }\n\n /**\n * Dispatch stack information to all handlers.\n * @param {Object.<string, *>} stack\n */\n function notifyHandlers(stack, isWindowError) {\n var exception = null;\n if (isWindowError && !TraceKit.collectWindowErrors) {\n return;\n }\n for (var i in handlers) {\n if (handlers.hasOwnProperty(i)) {\n try {\n handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));\n } catch (inner) {\n exception = inner;\n }\n }\n }\n\n if (exception) {\n throw exception;\n }\n }\n\n var _oldOnerrorHandler, _onErrorHandlerInstalled;\n\n /**\n * Ensures all global unhandled exceptions are recorded.\n * Supported by Gecko and IE.\n * @param {string} msg Error message.\n * @param {string} url URL of script that generated the exception.\n * @param {(number|string)} lineNo The line number at which the error\n * occurred.\n * @param {?(number|string)} colNo The column number at which the error\n * occurred.\n * @param {?Error} ex The actual Error object.\n */\n function traceKitWindowOnError(msg, url, lineNo, colNo, ex) {\n var stack = null;\n // If 'ex' is ErrorEvent, get real Error from inside\n var exception = utils.isErrorEvent(ex) ? ex.error : ex;\n // If 'msg' is ErrorEvent, get real message from inside\n var message = utils.isErrorEvent(msg) ? msg.message : msg;\n\n if (lastExceptionStack) {\n TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(\n lastExceptionStack,\n url,\n lineNo,\n message\n );\n processLastException();\n } else if (exception && utils.isError(exception)) {\n // non-string `exception` arg; attempt to extract stack trace\n\n // New chrome and blink send along a real error object\n // Let's just report that like a normal error.\n // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror\n stack = TraceKit.computeStackTrace(exception);\n notifyHandlers(stack, true);\n } else {\n var location = {\n url: url,\n line: lineNo,\n column: colNo\n };\n\n var name = undefined;\n var groups;\n\n if ({}.toString.call(message) === '[object String]') {\n var groups = message.match(ERROR_TYPES_RE);\n if (groups) {\n name = groups[1];\n message = groups[2];\n }\n }\n\n location.func = UNKNOWN_FUNCTION;\n\n stack = {\n name: name,\n message: message,\n url: getLocationHref(),\n stack: [location]\n };\n notifyHandlers(stack, true);\n }\n\n if (_oldOnerrorHandler) {\n return _oldOnerrorHandler.apply(this, arguments);\n }\n\n return false;\n }\n\n function installGlobalHandler() {\n if (_onErrorHandlerInstalled) {\n return;\n }\n _oldOnerrorHandler = _window.onerror;\n _window.onerror = traceKitWindowOnError;\n _onErrorHandlerInstalled = true;\n }\n\n function uninstallGlobalHandler() {\n if (!_onErrorHandlerInstalled) {\n return;\n }\n _window.onerror = _oldOnerrorHandler;\n _onErrorHandlerInstalled = false;\n _oldOnerrorHandler = undefined;\n }\n\n function processLastException() {\n var _lastExceptionStack = lastExceptionStack,\n _lastArgs = lastArgs;\n lastArgs = null;\n lastExceptionStack = null;\n lastException = null;\n notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));\n }\n\n /**\n * Reports an unhandled Error to TraceKit.\n * @param {Error} ex\n * @param {?boolean} rethrow If false, do not re-throw the exception.\n * Only used for window.onerror to not cause an infinite loop of\n * rethrowing.\n */\n function report(ex, rethrow) {\n var args = _slice.call(arguments, 1);\n if (lastExceptionStack) {\n if (lastException === ex) {\n return; // already caught by an inner catch block, ignore\n } else {\n processLastException();\n }\n }\n\n var stack = TraceKit.computeStackTrace(ex);\n lastExceptionStack = stack;\n lastException = ex;\n lastArgs = args;\n\n // If the stack trace is incomplete, wait for 2 seconds for\n // slow slow IE to see if onerror occurs or not before reporting\n // this exception; otherwise, we will end up with an incomplete\n // stack trace\n setTimeout(function() {\n if (lastException === ex) {\n processLastException();\n }\n }, stack.incomplete ? 2000 : 0);\n\n if (rethrow !== false) {\n throw ex; // re-throw to propagate to the top level (and cause window.onerror)\n }\n }\n\n report.subscribe = subscribe;\n report.unsubscribe = unsubscribe;\n report.uninstall = unsubscribeAll;\n return report;\n})();\n\n/**\n * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript\n *\n * Syntax:\n * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)\n * Returns:\n * s.name - exception name\n * s.message - exception message\n * s.stack[i].url - JavaScript or HTML file URL\n * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)\n * s.stack[i].args - arguments passed to the function, if known\n * s.stack[i].line - line number, if known\n * s.stack[i].column - column number, if known\n *\n * Supports:\n * - Firefox: full stack trace with line numbers and unreliable column\n * number on top frame\n * - Opera 10: full stack trace with line and column numbers\n * - Opera 9-: full stack trace with line numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the topmost stacktrace element\n * only\n * - IE: no line numbers whatsoever\n *\n * Tries to guess names of anonymous functions by looking for assignments\n * in the source code. In IE and Safari, we have to guess source file names\n * by searching for function bodies inside all page scripts. This will not\n * work for scripts that are loaded cross-domain.\n * Here be dragons: some function names may be guessed incorrectly, and\n * duplicate functions may be mismatched.\n *\n * TraceKit.computeStackTrace should only be used for tracing purposes.\n * Logging of unhandled exceptions should be done with TraceKit.report,\n * which builds on top of TraceKit.computeStackTrace and provides better\n * IE support by utilizing the window.onerror event to retrieve information\n * about the top of the stack.\n *\n * Note: In IE and Safari, no stack trace is recorded on the Error object,\n * so computeStackTrace instead walks its *own* chain of callers.\n * This means that:\n * * in Safari, some methods may be missing from the stack trace;\n * * in IE, the topmost function in the stack trace will always be the\n * caller of computeStackTrace.\n *\n * This is okay for tracing (because you are likely to be calling\n * computeStackTrace from the function you want to be the topmost element\n * of the stack trace anyway), but not okay for logging unhandled\n * exceptions (because your catch block will likely be far away from the\n * inner function that actually caused the exception).\n *\n */\nTraceKit.computeStackTrace = (function computeStackTraceWrapper() {\n // Contents of Exception in various browsers.\n //\n // SAFARI:\n // ex.message = Can't find variable: qq\n // ex.line = 59\n // ex.sourceId = 580238192\n // ex.sourceURL = http://...\n // ex.expressionBeginOffset = 96\n // ex.expressionCaretOffset = 98\n // ex.expressionEndOffset = 98\n // ex.name = ReferenceError\n //\n // FIREFOX:\n // ex.message = qq is not defined\n // ex.fileName = http://...\n // ex.lineNumber = 59\n // ex.columnNumber = 69\n // ex.stack = ...stack trace... (see the example below)\n // ex.name = ReferenceError\n //\n // CHROME:\n // ex.message = qq is not defined\n // ex.name = ReferenceError\n // ex.type = not_defined\n // ex.arguments = ['aa']\n // ex.stack = ...stack trace...\n //\n // INTERNET EXPLORER:\n // ex.message = ...\n // ex.name = ReferenceError\n //\n // OPERA:\n // ex.message = ...message... (see the example below)\n // ex.name = ReferenceError\n // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)\n // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'\n\n /**\n * Computes stack trace information from the stack property.\n * Chrome and Gecko use this property.\n * @param {Error} ex\n * @return {?Object.<string, *>} Stack trace information.\n */\n function computeStackTraceFromStackProp(ex) {\n if (typeof ex.stack === 'undefined' || !ex.stack) return;\n\n var chrome = /^\\s*at (?:(.*?) ?\\()?((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|[a-z]:|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n var winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n // NOTE: blob urls are now supposed to always have an origin, therefore it's format\n // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\\/` as well\n var gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\\/.*?|\\[native code\\]|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\n // Used to additionally parse URL/line/column from eval frames\n var geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n var chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n var lines = ex.stack.split('\\n');\n var stack = [];\n var submatch;\n var parts;\n var element;\n var reference = /^(.*) is undefined$/.exec(ex.message);\n\n for (var i = 0, j = lines.length; i < j; ++i) {\n if ((parts = chrome.exec(lines[i]))) {\n var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n if (isEval && (submatch = chromeEval.exec(parts[2]))) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = submatch[1]; // url\n parts[3] = submatch[2]; // line\n parts[4] = submatch[3]; // column\n }\n element = {\n url: !isNative ? parts[2] : null,\n func: parts[1] || UNKNOWN_FUNCTION,\n args: isNative ? [parts[2]] : [],\n line: parts[3] ? +parts[3] : null,\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = winjs.exec(lines[i]))) {\n element = {\n url: parts[2],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: [],\n line: +parts[3],\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = gecko.exec(lines[i]))) {\n var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval && (submatch = geckoEval.exec(parts[3]))) {\n // throw out eval line/column and use top-most line number\n parts[3] = submatch[1];\n parts[4] = submatch[2];\n parts[5] = null; // no column when eval\n } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {\n // FireFox uses this awesome columnNumber property for its top frame\n // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n // so adding 1\n // NOTE: this hack doesn't work if top-most frame is eval\n stack[0].column = ex.columnNumber + 1;\n }\n element = {\n url: parts[3],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: parts[2] ? parts[2].split(',') : [],\n line: parts[4] ? +parts[4] : null,\n column: parts[5] ? +parts[5] : null\n };\n } else {\n continue;\n }\n\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n\n if (element.url && element.url.substr(0, 5) === 'blob:') {\n // Special case for handling JavaScript loaded into a blob.\n // We use a synchronous AJAX request here as a blob is already in\n // memory - it's not making a network request. This will generate a warning\n // in the browser console, but there has already been an error so that's not\n // that much of an issue.\n var xhr = new XMLHttpRequest();\n xhr.open('GET', element.url, false);\n xhr.send(null);\n\n // If we failed to download the source, skip this patch\n if (xhr.status === 200) {\n var source = xhr.responseText || '';\n\n // We trim the source down to the last 300 characters as sourceMappingURL is always at the end of the file.\n // Why 300? To be in line with: https://github.com/getsentry/sentry/blob/4af29e8f2350e20c28a6933354e4f42437b4ba42/src/sentry/lang/javascript/processor.py#L164-L175\n source = source.slice(-300);\n\n // Now we dig out the source map URL\n var sourceMaps = source.match(/\\/\\/# sourceMappingURL=(.*)$/);\n\n // If we don't find a source map comment or we find more than one, continue on to the next element.\n if (sourceMaps) {\n var sourceMapAddress = sourceMaps[1];\n\n // Now we check to see if it's a relative URL.\n // If it is, convert it to an absolute one.\n if (sourceMapAddress.charAt(0) === '~') {\n sourceMapAddress = getLocationOrigin() + sourceMapAddress.slice(1);\n }\n\n // Now we strip the '.map' off of the end of the URL and update the\n // element so that Sentry can match the map to the blob.\n element.url = sourceMapAddress.slice(0, -4);\n }\n }\n }\n\n stack.push(element);\n }\n\n if (!stack.length) {\n return null;\n }\n\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n }\n\n /**\n * Adds information about the first frame to incomplete stack traces.\n * Safari and IE require this to get complete data on the first frame.\n * @param {Object.<string, *>} stackInfo Stack trace information from\n * one of the compute* methods.\n * @param {string} url The URL of the script that caused an error.\n * @param {(number|string)} lineNo The line number of the script that\n * caused an error.\n * @param {string=} message The error generated by the browser, which\n * hopefully contains the name of the object that caused the error.\n * @return {boolean} Whether or not the stack information was\n * augmented.\n */\n function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {\n var initial = {\n url: url,\n line: lineNo\n };\n\n if (initial.url && initial.line) {\n stackInfo.incomplete = false;\n\n if (!initial.func) {\n initial.func = UNKNOWN_FUNCTION;\n }\n\n if (stackInfo.stack.length > 0) {\n if (stackInfo.stack[0].url === initial.url) {\n if (stackInfo.stack[0].line === initial.line) {\n return false; // already in stack trace\n } else if (\n !stackInfo.stack[0].line &&\n stackInfo.stack[0].func === initial.func\n ) {\n stackInfo.stack[0].line = initial.line;\n return false;\n }\n }\n }\n\n stackInfo.stack.unshift(initial);\n stackInfo.partial = true;\n return true;\n } else {\n stackInfo.incomplete = true;\n }\n\n return false;\n }\n\n /**\n * Computes stack trace information by walking the arguments.caller\n * chain at the time the exception occurred. This will cause earlier\n * frames to be missed but is the only way to get any stack trace in\n * Safari and IE. The top frame is restored by\n * {@link augmentStackTraceWithInitialElement}.\n * @param {Error} ex\n * @return {?Object.<string, *>} Stack trace information.\n */\n function computeStackTraceByWalkingCallerChain(ex, depth) {\n var functionName = /function\\s+([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?\\s*\\(/i,\n stack = [],\n funcs = {},\n recursion = false,\n parts,\n item,\n source;\n\n for (\n var curr = computeStackTraceByWalkingCallerChain.caller;\n curr && !recursion;\n curr = curr.caller\n ) {\n if (curr === computeStackTrace || curr === TraceKit.report) {\n // console.log('skipping internal function');\n continue;\n }\n\n item = {\n url: null,\n func: UNKNOWN_FUNCTION,\n line: null,\n column: null\n };\n\n if (curr.name) {\n item.func = curr.name;\n } else if ((parts = functionName.exec(curr.toString()))) {\n item.func = parts[1];\n }\n\n if (typeof item.func === 'undefined') {\n try {\n item.func = parts.input.substring(0, parts.input.indexOf('{'));\n } catch (e) {}\n }\n\n if (funcs['' + curr]) {\n recursion = true;\n } else {\n funcs['' + curr] = true;\n }\n\n stack.push(item);\n }\n\n if (depth) {\n // console.log('depth is ' + depth);\n // console.log('stack is ' + stack.length);\n stack.splice(0, depth);\n }\n\n var result = {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n augmentStackTraceWithInitialElement(\n result,\n ex.sourceURL || ex.fileName,\n ex.line || ex.lineNumber,\n ex.message || ex.description\n );\n return result;\n }\n\n /**\n * Computes a stack trace for an exception.\n * @param {Error} ex\n * @param {(string|number)=} depth\n */\n function computeStackTrace(ex, depth) {\n var stack = null;\n depth = depth == null ? 0 : +depth;\n\n try {\n stack = computeStackTraceFromStackProp(ex);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n\n try {\n stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref()\n };\n }\n\n computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;\n computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;\n\n return computeStackTrace;\n})();\n\nmodule.exports = TraceKit;\n","/*\n * JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\n\n/*\n* Add integers, wrapping at 2^32. This uses 16-bit operations internally\n* to work around bugs in some JS interpreters.\n*/\nfunction safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return (msw << 16) | (lsw & 0xffff);\n}\n\n/*\n* Bitwise rotate a 32-bit number to the left.\n*/\nfunction bitRotateLeft(num, cnt) {\n return (num << cnt) | (num >>> (32 - cnt));\n}\n\n/*\n* These functions implement the four basic operations the algorithm uses.\n*/\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn((b & c) | (~b & d), a, b, x, s, t);\n}\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn((b & d) | (c & ~d), a, b, x, s, t);\n}\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\n/*\n* Calculate the MD5 of an array of little-endian words, and a bit length.\n*/\nfunction binlMD5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << (len % 32);\n x[(((len + 64) >>> 9) << 4) + 14] = len;\n\n var i;\n var olda;\n var oldb;\n var oldc;\n var oldd;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (i = 0; i < x.length; i += 16) {\n olda = a;\n oldb = b;\n oldc = c;\n oldd = d;\n\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n return [a, b, c, d];\n}\n\n/*\n* Convert an array of little-endian words to a string\n*/\nfunction binl2rstr(input) {\n var i;\n var output = '';\n var length32 = input.length * 32;\n for (i = 0; i < length32; i += 8) {\n output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);\n }\n return output;\n}\n\n/*\n* Convert a raw string to an array of little-endian words\n* Characters >255 have their high-byte silently ignored.\n*/\nfunction rstr2binl(input) {\n var i;\n var output = [];\n output[(input.length >> 2) - 1] = undefined;\n for (i = 0; i < output.length; i += 1) {\n output[i] = 0;\n }\n var length8 = input.length * 8;\n for (i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);\n }\n return output;\n}\n\n/*\n* Calculate the MD5 of a raw string\n*/\nfunction rstrMD5(s) {\n return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));\n}\n\n/*\n* Calculate the HMAC-MD5, of a key and some data (raw strings)\n*/\nfunction rstrHMACMD5(key, data) {\n var i;\n var bkey = rstr2binl(key);\n var ipad = [];\n var opad = [];\n var hash;\n ipad[15] = opad[15] = undefined;\n if (bkey.length > 16) {\n bkey = binlMD5(bkey, key.length * 8);\n }\n for (i = 0; i < 16; i += 1) {\n ipad[i] = bkey[i] ^ 0x36363636;\n opad[i] = bkey[i] ^ 0x5c5c5c5c;\n }\n hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);\n return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));\n}\n\n/*\n* Convert a raw string to a hex string\n*/\nfunction rstr2hex(input) {\n var hexTab = '0123456789abcdef';\n var output = '';\n var x;\n var i;\n for (i = 0; i < input.length; i += 1) {\n x = input.charCodeAt(i);\n output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);\n }\n return output;\n}\n\n/*\n* Encode a string as utf-8\n*/\nfunction str2rstrUTF8(input) {\n return unescape(encodeURIComponent(input));\n}\n\n/*\n* Take string arguments and return either raw or hex encoded strings\n*/\nfunction rawMD5(s) {\n return rstrMD5(str2rstrUTF8(s));\n}\nfunction hexMD5(s) {\n return rstr2hex(rawMD5(s));\n}\nfunction rawHMACMD5(k, d) {\n return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));\n}\nfunction hexHMACMD5(k, d) {\n return rstr2hex(rawHMACMD5(k, d));\n}\n\nfunction md5(string, key, raw) {\n if (!key) {\n if (!raw) {\n return hexMD5(string);\n }\n return rawMD5(string);\n }\n if (!raw) {\n return hexHMACMD5(key, string);\n }\n return rawHMACMD5(key, string);\n}\n\nmodule.exports = md5;\n","function RavenConfigError(message) {\n this.name = 'RavenConfigError';\n this.message = message;\n}\nRavenConfigError.prototype = new Error();\nRavenConfigError.prototype.constructor = RavenConfigError;\n\nmodule.exports = RavenConfigError;\n","var utils = require('./utils');\n\nvar wrapMethod = function(console, level, callback) {\n var originalConsoleLevel = console[level];\n var originalConsole = console;\n\n if (!(level in console)) {\n return;\n }\n\n var sentryLevel = level === 'warn' ? 'warning' : level;\n\n console[level] = function() {\n var args = [].slice.call(arguments);\n\n var msg = utils.safeJoin(args, ' ');\n var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};\n\n if (level === 'assert') {\n if (args[0] === false) {\n // Default browsers message\n msg =\n 'Assertion failed: ' + (utils.safeJoin(args.slice(1), ' ') || 'console.assert');\n data.extra.arguments = args.slice(1);\n callback && callback(msg, data);\n }\n } else {\n callback && callback(msg, data);\n }\n\n // this fails for some browsers. :(\n if (originalConsoleLevel) {\n // IE9 doesn't allow calling apply on console functions directly\n // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193\n Function.prototype.apply.call(originalConsoleLevel, originalConsole, args);\n }\n };\n};\n\nmodule.exports = {\n wrapMethod: wrapMethod\n};\n","/*global XDomainRequest:false */\n\nvar TraceKit = require('../vendor/TraceKit/tracekit');\nvar stringify = require('../vendor/json-stringify-safe/stringify');\nvar md5 = require('../vendor/md5/md5');\nvar RavenConfigError = require('./configError');\n\nvar utils = require('./utils');\nvar isErrorEvent = utils.isErrorEvent;\nvar isDOMError = utils.isDOMError;\nvar isDOMException = utils.isDOMException;\nvar isError = utils.isError;\nvar isObject = utils.isObject;\nvar isPlainObject = utils.isPlainObject;\nvar isUndefined = utils.isUndefined;\nvar isFunction = utils.isFunction;\nvar isString = utils.isString;\nvar isArray = utils.isArray;\nvar isEmptyObject = utils.isEmptyObject;\nvar each = utils.each;\nvar objectMerge = utils.objectMerge;\nvar truncate = utils.truncate;\nvar objectFrozen = utils.objectFrozen;\nvar hasKey = utils.hasKey;\nvar joinRegExp = utils.joinRegExp;\nvar urlencode = utils.urlencode;\nvar uuid4 = utils.uuid4;\nvar htmlTreeAsString = utils.htmlTreeAsString;\nvar isSameException = utils.isSameException;\nvar isSameStacktrace = utils.isSameStacktrace;\nvar parseUrl = utils.parseUrl;\nvar fill = utils.fill;\nvar supportsFetch = utils.supportsFetch;\nvar supportsReferrerPolicy = utils.supportsReferrerPolicy;\nvar serializeKeysForMessage = utils.serializeKeysForMessage;\nvar serializeException = utils.serializeException;\nvar sanitize = utils.sanitize;\n\nvar wrapConsoleMethod = require('./console').wrapMethod;\n\nvar dsnKeys = 'source protocol user pass host port path'.split(' '),\n dsnPattern = /^(?:(\\w+):)?\\/\\/(?:(\\w+)(:\\w+)?@)?([\\w\\.-]+)(?::(\\d+))?(\\/.*)/;\n\nfunction now() {\n return +new Date();\n}\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _document = _window.document;\nvar _navigator = _window.navigator;\n\nfunction keepOriginalCallback(original, callback) {\n return isFunction(callback)\n ? function(data) {\n return callback(data, original);\n }\n : callback;\n}\n\n// First, check for JSON support\n// If there is no JSON, we no-op the core features of Raven\n// since JSON is required to encode the payload\nfunction Raven() {\n this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);\n // Raven can run in contexts where there's no document (react-native)\n this._hasDocument = !isUndefined(_document);\n this._hasNavigator = !isUndefined(_navigator);\n this._lastCapturedException = null;\n this._lastData = null;\n this._lastEventId = null;\n this._globalServer = null;\n this._globalKey = null;\n this._globalProject = null;\n this._globalContext = {};\n this._globalOptions = {\n // SENTRY_RELEASE can be injected by https://github.com/getsentry/sentry-webpack-plugin\n release: _window.SENTRY_RELEASE && _window.SENTRY_RELEASE.id,\n logger: 'javascript',\n ignoreErrors: [],\n ignoreUrls: [],\n whitelistUrls: [],\n includePaths: [],\n headers: null,\n collectWindowErrors: true,\n captureUnhandledRejections: true,\n maxMessageLength: 0,\n // By default, truncates URL values to 250 chars\n maxUrlLength: 250,\n stackTraceLimit: 50,\n autoBreadcrumbs: true,\n instrument: true,\n sampleRate: 1,\n sanitizeKeys: []\n };\n this._fetchDefaults = {\n method: 'POST',\n keepalive: true,\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n // https://caniuse.com/#feat=referrer-policy\n // It doesn't. And it throw exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n referrerPolicy: supportsReferrerPolicy() ? 'origin' : ''\n };\n this._ignoreOnError = 0;\n this._isRavenInstalled = false;\n this._originalErrorStackTraceLimit = Error.stackTraceLimit;\n // capture references to window.console *and* all its methods first\n // before the console plugin has a chance to monkey patch\n this._originalConsole = _window.console || {};\n this._originalConsoleMethods = {};\n this._plugins = [];\n this._startTime = now();\n this._wrappedBuiltIns = [];\n this._breadcrumbs = [];\n this._lastCapturedEvent = null;\n this._keypressTimeout;\n this._location = _window.location;\n this._lastHref = this._location && this._location.href;\n this._resetBackoff();\n\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsole) {\n this._originalConsoleMethods[method] = this._originalConsole[method];\n }\n}\n\n/*\n * The core Raven singleton\n *\n * @this {Raven}\n */\n\nRaven.prototype = {\n // Hardcode version string so that raven source can be loaded directly via\n // webpack (using a build step causes webpack #1617). Grunt verifies that\n // this value matches package.json during build.\n // See: https://github.com/getsentry/raven-js/issues/465\n VERSION: '3.25.2',\n\n debug: false,\n\n TraceKit: TraceKit, // alias to TraceKit\n\n /*\n * Configure Raven with a DSN and extra options\n *\n * @param {string} dsn The public Sentry DSN\n * @param {object} options Set of global options [optional]\n * @return {Raven}\n */\n config: function(dsn, options) {\n var self = this;\n\n if (self._globalServer) {\n this._logDebug('error', 'Error: Raven has already been configured');\n return self;\n }\n if (!dsn) return self;\n\n var globalOptions = self._globalOptions;\n\n // merge in options\n if (options) {\n each(options, function(key, value) {\n // tags and extra are special and need to be put into context\n if (key === 'tags' || key === 'extra' || key === 'user') {\n self._globalContext[key] = value;\n } else {\n globalOptions[key] = value;\n }\n });\n }\n\n self.setDSN(dsn);\n\n // \"Script error.\" is hard coded into browsers for errors that it can't read.\n // this is the result of a script being pulled in from an external domain and CORS.\n globalOptions.ignoreErrors.push(/^Script error\\.?$/);\n globalOptions.ignoreErrors.push(/^Javascript error: Script error\\.? on line 0$/);\n\n // join regexp rules into one big rule\n globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);\n globalOptions.ignoreUrls = globalOptions.ignoreUrls.length\n ? joinRegExp(globalOptions.ignoreUrls)\n : false;\n globalOptions.whitelistUrls = globalOptions.whitelistUrls.length\n ? joinRegExp(globalOptions.whitelistUrls)\n : false;\n globalOptions.includePaths = joinRegExp(globalOptions.includePaths);\n globalOptions.maxBreadcrumbs = Math.max(\n 0,\n Math.min(globalOptions.maxBreadcrumbs || 100, 100)\n ); // default and hard limit is 100\n\n var autoBreadcrumbDefaults = {\n xhr: true,\n console: true,\n dom: true,\n location: true,\n sentry: true\n };\n\n var autoBreadcrumbs = globalOptions.autoBreadcrumbs;\n if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {\n autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);\n } else if (autoBreadcrumbs !== false) {\n autoBreadcrumbs = autoBreadcrumbDefaults;\n }\n globalOptions.autoBreadcrumbs = autoBreadcrumbs;\n\n var instrumentDefaults = {\n tryCatch: true\n };\n\n var instrument = globalOptions.instrument;\n if ({}.toString.call(instrument) === '[object Object]') {\n instrument = objectMerge(instrumentDefaults, instrument);\n } else if (instrument !== false) {\n instrument = instrumentDefaults;\n }\n globalOptions.instrument = instrument;\n\n TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;\n\n // return for chaining\n return self;\n },\n\n /*\n * Installs a global window.onerror error handler\n * to capture and report uncaught exceptions.\n * At this point, install() is required to be called due\n * to the way TraceKit is set up.\n *\n * @return {Raven}\n */\n install: function() {\n var self = this;\n if (self.isSetup() && !self._isRavenInstalled) {\n TraceKit.report.subscribe(function() {\n self._handleOnErrorStackInfo.apply(self, arguments);\n });\n\n if (self._globalOptions.captureUnhandledRejections) {\n self._attachPromiseRejectionHandler();\n }\n\n self._patchFunctionToString();\n\n if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {\n self._instrumentTryCatch();\n }\n\n if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();\n\n // Install all of the plugins\n self._drainPlugins();\n\n self._isRavenInstalled = true;\n }\n\n Error.stackTraceLimit = self._globalOptions.stackTraceLimit;\n return this;\n },\n\n /*\n * Set the DSN (can be called multiple time unlike config)\n *\n * @param {string} dsn The public Sentry DSN\n */\n setDSN: function(dsn) {\n var self = this,\n uri = self._parseDSN(dsn),\n lastSlash = uri.path.lastIndexOf('/'),\n path = uri.path.substr(1, lastSlash);\n\n self._dsn = dsn;\n self._globalKey = uri.user;\n self._globalSecret = uri.pass && uri.pass.substr(1);\n self._globalProject = uri.path.substr(lastSlash + 1);\n\n self._globalServer = self._getGlobalServer(uri);\n\n self._globalEndpoint =\n self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/';\n\n // Reset backoff state since we may be pointing at a\n // new project/server\n this._resetBackoff();\n },\n\n /*\n * Wrap code within a context so Raven can capture errors\n * reliably across domains that is executed immediately.\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The callback to be immediately executed within the context\n * @param {array} args An array of arguments to be called with the callback [optional]\n */\n context: function(options, func, args) {\n if (isFunction(options)) {\n args = func || [];\n func = options;\n options = undefined;\n }\n\n return this.wrap(options, func).apply(this, args);\n },\n\n /*\n * Wrap code within a context and returns back a new function to be executed\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The function to be wrapped in a new context\n * @param {function} func A function to call before the try/catch wrapper [optional, private]\n * @return {function} The newly wrapped functions with a context\n */\n wrap: function(options, func, _before) {\n var self = this;\n // 1 argument has been passed, and it's not a function\n // so just return it\n if (isUndefined(func) && !isFunction(options)) {\n return options;\n }\n\n // options is optional\n if (isFunction(options)) {\n func = options;\n options = undefined;\n }\n\n // At this point, we've passed along 2 arguments, and the second one\n // is not a function either, so we'll just return the second argument.\n if (!isFunction(func)) {\n return func;\n }\n\n // We don't wanna wrap it twice!\n try {\n if (func.__raven__) {\n return func;\n }\n\n // If this has already been wrapped in the past, return that\n if (func.__raven_wrapper__) {\n return func.__raven_wrapper__;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return func;\n }\n\n function wrapped() {\n var args = [],\n i = arguments.length,\n deep = !options || (options && options.deep !== false);\n\n if (_before && isFunction(_before)) {\n _before.apply(this, arguments);\n }\n\n // Recursively wrap all of a function's arguments that are\n // functions themselves.\n while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];\n\n try {\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means Raven caught an error invoking your application code. This is\n // expected behavior and NOT indicative of a bug with Raven.js.\n return func.apply(this, args);\n } catch (e) {\n self._ignoreNextOnError();\n self.captureException(e, options);\n throw e;\n }\n }\n\n // copy over properties of the old function\n for (var property in func) {\n if (hasKey(func, property)) {\n wrapped[property] = func[property];\n }\n }\n wrapped.prototype = func.prototype;\n\n func.__raven_wrapper__ = wrapped;\n // Signal that this function has been wrapped/filled already\n // for both debugging and to prevent it to being wrapped/filled twice\n wrapped.__raven__ = true;\n wrapped.__orig__ = func;\n\n return wrapped;\n },\n\n /**\n * Uninstalls the global error handler.\n *\n * @return {Raven}\n */\n uninstall: function() {\n TraceKit.report.uninstall();\n\n this._detachPromiseRejectionHandler();\n this._unpatchFunctionToString();\n this._restoreBuiltIns();\n this._restoreConsole();\n\n Error.stackTraceLimit = this._originalErrorStackTraceLimit;\n this._isRavenInstalled = false;\n\n return this;\n },\n\n /**\n * Callback used for `unhandledrejection` event\n *\n * @param {PromiseRejectionEvent} event An object containing\n * promise: the Promise that was rejected\n * reason: the value with which the Promise was rejected\n * @return void\n */\n _promiseRejectionHandler: function(event) {\n this._logDebug('debug', 'Raven caught unhandled promise rejection:', event);\n this.captureException(event.reason, {\n extra: {\n unhandledPromiseRejection: true\n }\n });\n },\n\n /**\n * Installs the global promise rejection handler.\n *\n * @return {raven}\n */\n _attachPromiseRejectionHandler: function() {\n this._promiseRejectionHandler = this._promiseRejectionHandler.bind(this);\n _window.addEventListener &&\n _window.addEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Uninstalls the global promise rejection handler.\n *\n * @return {raven}\n */\n _detachPromiseRejectionHandler: function() {\n _window.removeEventListener &&\n _window.removeEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Manually capture an exception and send it over to Sentry\n *\n * @param {error} ex An exception to be logged\n * @param {object} options A specific set of options for this error [optional]\n * @return {Raven}\n */\n captureException: function(ex, options) {\n options = objectMerge({trimHeadFrames: 0}, options ? options : {});\n\n if (isErrorEvent(ex) && ex.error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n ex = ex.error;\n } else if (isDOMError(ex) || isDOMException(ex)) {\n // If it is a DOMError or DOMException (which are legacy APIs, but still supported in some browsers)\n // then we just extract the name and message, as they don't provide anything else\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n var name = ex.name || (isDOMError(ex) ? 'DOMError' : 'DOMException');\n var message = ex.message ? name + ': ' + ex.message : name;\n\n return this.captureMessage(\n message,\n objectMerge(options, {\n // neither DOMError or DOMException provide stack trace and we most likely wont get it this way as well\n // but it's barely any overhead so we may at least try\n stacktrace: true,\n trimHeadFrames: options.trimHeadFrames + 1\n })\n );\n } else if (isError(ex)) {\n // we have a real Error object\n ex = ex;\n } else if (isPlainObject(ex)) {\n // If it is plain Object, serialize it manually and extract options\n // This will allow us to group events based on top-level keys\n // which is much better than creating new group when any key/value change\n options = this._getCaptureExceptionOptionsFromPlainObject(options, ex);\n ex = new Error(options.message);\n } else {\n // If none of previous checks were valid, then it means that\n // it's not a DOMError/DOMException\n // it's not a plain Object\n // it's not a valid ErrorEvent (one with an error property)\n // it's not an Error\n // So bail out and capture it as a simple message:\n return this.captureMessage(\n ex,\n objectMerge(options, {\n stacktrace: true, // if we fall back to captureMessage, default to attempting a new trace\n trimHeadFrames: options.trimHeadFrames + 1\n })\n );\n }\n\n // Store the raw exception object for potential debugging and introspection\n this._lastCapturedException = ex;\n\n // TraceKit.report will re-raise any exception passed to it,\n // which means you have to wrap it in try/catch. Instead, we\n // can wrap it here and only re-raise if TraceKit.report\n // raises an exception different from the one we asked to\n // report on.\n try {\n var stack = TraceKit.computeStackTrace(ex);\n this._handleStackInfo(stack, options);\n } catch (ex1) {\n if (ex !== ex1) {\n throw ex1;\n }\n }\n\n return this;\n },\n\n _getCaptureExceptionOptionsFromPlainObject: function(currentOptions, ex) {\n var exKeys = Object.keys(ex).sort();\n var options = objectMerge(currentOptions, {\n message:\n 'Non-Error exception captured with keys: ' + serializeKeysForMessage(exKeys),\n fingerprint: [md5(exKeys)],\n extra: currentOptions.extra || {}\n });\n options.extra.__serialized__ = serializeException(ex);\n\n return options;\n },\n\n /*\n * Manually send a message to Sentry\n *\n * @param {string} msg A plain message to be captured in Sentry\n * @param {object} options A specific set of options for this message [optional]\n * @return {Raven}\n */\n captureMessage: function(msg, options) {\n // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an\n // early call; we'll error on the side of logging anything called before configuration since it's\n // probably something you should see:\n if (\n !!this._globalOptions.ignoreErrors.test &&\n this._globalOptions.ignoreErrors.test(msg)\n ) {\n return;\n }\n\n options = options || {};\n msg = msg + ''; // Make sure it's actually a string\n\n var data = objectMerge(\n {\n message: msg\n },\n options\n );\n\n var ex;\n // Generate a \"synthetic\" stack trace from this point.\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative\n // of a bug with Raven.js. Sentry generates synthetic traces either by configuration,\n // or if it catches a thrown object without a \"stack\" property.\n try {\n throw new Error(msg);\n } catch (ex1) {\n ex = ex1;\n }\n\n // null exception name so `Error` isn't prefixed to msg\n ex.name = null;\n var stack = TraceKit.computeStackTrace(ex);\n\n // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]\n var initialCall = isArray(stack.stack) && stack.stack[1];\n\n // if stack[1] is `Raven.captureException`, it means that someone passed a string to it and we redirected that call\n // to be handled by `captureMessage`, thus `initialCall` is the 3rd one, not 2nd\n // initialCall => captureException(string) => captureMessage(string)\n if (initialCall && initialCall.func === 'Raven.captureException') {\n initialCall = stack.stack[2];\n }\n\n var fileurl = (initialCall && initialCall.url) || '';\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n if (this._globalOptions.stacktrace || (options && options.stacktrace)) {\n // fingerprint on msg, not stack trace (legacy behavior, could be revisited)\n data.fingerprint = data.fingerprint == null ? msg : data.fingerprint;\n\n options = objectMerge(\n {\n trimHeadFrames: 0\n },\n options\n );\n // Since we know this is a synthetic trace, the top frame (this function call)\n // MUST be from Raven.js, so mark it for trimming\n // We add to the trim counter so that callers can choose to trim extra frames, such\n // as utility functions.\n options.trimHeadFrames += 1;\n\n var frames = this._prepareFrames(stack, options);\n data.stacktrace = {\n // Sentry expects frames oldest to newest\n frames: frames.reverse()\n };\n }\n\n // Make sure that fingerprint is always wrapped in an array\n if (data.fingerprint) {\n data.fingerprint = isArray(data.fingerprint)\n ? data.fingerprint\n : [data.fingerprint];\n }\n\n // Fire away!\n this._send(data);\n\n return this;\n },\n\n captureBreadcrumb: function(obj) {\n var crumb = objectMerge(\n {\n timestamp: now() / 1000\n },\n obj\n );\n\n if (isFunction(this._globalOptions.breadcrumbCallback)) {\n var result = this._globalOptions.breadcrumbCallback(crumb);\n\n if (isObject(result) && !isEmptyObject(result)) {\n crumb = result;\n } else if (result === false) {\n return this;\n }\n }\n\n this._breadcrumbs.push(crumb);\n if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {\n this._breadcrumbs.shift();\n }\n return this;\n },\n\n addPlugin: function(plugin /*arg1, arg2, ... argN*/) {\n var pluginArgs = [].slice.call(arguments, 1);\n\n this._plugins.push([plugin, pluginArgs]);\n if (this._isRavenInstalled) {\n this._drainPlugins();\n }\n\n return this;\n },\n\n /*\n * Set/clear a user to be sent along with the payload.\n *\n * @param {object} user An object representing user data [optional]\n * @return {Raven}\n */\n setUserContext: function(user) {\n // Intentionally do not merge here since that's an unexpected behavior.\n this._globalContext.user = user;\n\n return this;\n },\n\n /*\n * Merge extra attributes to be sent along with the payload.\n *\n * @param {object} extra An object representing extra data [optional]\n * @return {Raven}\n */\n setExtraContext: function(extra) {\n this._mergeContext('extra', extra);\n\n return this;\n },\n\n /*\n * Merge tags to be sent along with the payload.\n *\n * @param {object} tags An object representing tags [optional]\n * @return {Raven}\n */\n setTagsContext: function(tags) {\n this._mergeContext('tags', tags);\n\n return this;\n },\n\n /*\n * Clear all of the context.\n *\n * @return {Raven}\n */\n clearContext: function() {\n this._globalContext = {};\n\n return this;\n },\n\n /*\n * Get a copy of the current context. This cannot be mutated.\n *\n * @return {object} copy of context\n */\n getContext: function() {\n // lol javascript\n return JSON.parse(stringify(this._globalContext));\n },\n\n /*\n * Set environment of application\n *\n * @param {string} environment Typically something like 'production'.\n * @return {Raven}\n */\n setEnvironment: function(environment) {\n this._globalOptions.environment = environment;\n\n return this;\n },\n\n /*\n * Set release version of application\n *\n * @param {string} release Typically something like a git SHA to identify version\n * @return {Raven}\n */\n setRelease: function(release) {\n this._globalOptions.release = release;\n\n return this;\n },\n\n /*\n * Set the dataCallback option\n *\n * @param {function} callback The callback to run which allows the\n * data blob to be mutated before sending\n * @return {Raven}\n */\n setDataCallback: function(callback) {\n var original = this._globalOptions.dataCallback;\n this._globalOptions.dataCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the breadcrumbCallback option\n *\n * @param {function} callback The callback to run which allows filtering\n * or mutating breadcrumbs\n * @return {Raven}\n */\n setBreadcrumbCallback: function(callback) {\n var original = this._globalOptions.breadcrumbCallback;\n this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the shouldSendCallback option\n *\n * @param {function} callback The callback to run which allows\n * introspecting the blob before sending\n * @return {Raven}\n */\n setShouldSendCallback: function(callback) {\n var original = this._globalOptions.shouldSendCallback;\n this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /**\n * Override the default HTTP transport mechanism that transmits data\n * to the Sentry server.\n *\n * @param {function} transport Function invoked instead of the default\n * `makeRequest` handler.\n *\n * @return {Raven}\n */\n setTransport: function(transport) {\n this._globalOptions.transport = transport;\n\n return this;\n },\n\n /*\n * Get the latest raw exception that was captured by Raven.\n *\n * @return {error}\n */\n lastException: function() {\n return this._lastCapturedException;\n },\n\n /*\n * Get the last event id\n *\n * @return {string}\n */\n lastEventId: function() {\n return this._lastEventId;\n },\n\n /*\n * Determine if Raven is setup and ready to go.\n *\n * @return {boolean}\n */\n isSetup: function() {\n if (!this._hasJSON) return false; // needs JSON support\n if (!this._globalServer) {\n if (!this.ravenNotConfiguredError) {\n this.ravenNotConfiguredError = true;\n this._logDebug('error', 'Error: Raven has not been configured.');\n }\n return false;\n }\n return true;\n },\n\n afterLoad: function() {\n // TODO: remove window dependence?\n\n // Attempt to initialize Raven on load\n var RavenConfig = _window.RavenConfig;\n if (RavenConfig) {\n this.config(RavenConfig.dsn, RavenConfig.config).install();\n }\n },\n\n showReportDialog: function(options) {\n if (\n !_document // doesn't work without a document (React native)\n )\n return;\n\n options = options || {};\n\n var lastEventId = options.eventId || this.lastEventId();\n if (!lastEventId) {\n throw new RavenConfigError('Missing eventId');\n }\n\n var dsn = options.dsn || this._dsn;\n if (!dsn) {\n throw new RavenConfigError('Missing DSN');\n }\n\n var encode = encodeURIComponent;\n var qs = '';\n qs += '?eventId=' + encode(lastEventId);\n qs += '&dsn=' + encode(dsn);\n\n var user = options.user || this._globalContext.user;\n if (user) {\n if (user.name) qs += '&name=' + encode(user.name);\n if (user.email) qs += '&email=' + encode(user.email);\n }\n\n var globalServer = this._getGlobalServer(this._parseDSN(dsn));\n\n var script = _document.createElement('script');\n script.async = true;\n script.src = globalServer + '/api/embed/error-page/' + qs;\n (_document.head || _document.body).appendChild(script);\n },\n\n /**** Private functions ****/\n _ignoreNextOnError: function() {\n var self = this;\n this._ignoreOnError += 1;\n setTimeout(function() {\n // onerror should trigger before setTimeout\n self._ignoreOnError -= 1;\n });\n },\n\n _triggerEvent: function(eventType, options) {\n // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it\n var evt, key;\n\n if (!this._hasDocument) return;\n\n options = options || {};\n\n eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);\n\n if (_document.createEvent) {\n evt = _document.createEvent('HTMLEvents');\n evt.initEvent(eventType, true, true);\n } else {\n evt = _document.createEventObject();\n evt.eventType = eventType;\n }\n\n for (key in options)\n if (hasKey(options, key)) {\n evt[key] = options[key];\n }\n\n if (_document.createEvent) {\n // IE9 if standards\n _document.dispatchEvent(evt);\n } else {\n // IE8 regardless of Quirks or Standards\n // IE9 if quirks\n try {\n _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);\n } catch (e) {\n // Do nothing\n }\n }\n },\n\n /**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param evtName the event name (e.g. \"click\")\n * @returns {Function}\n * @private\n */\n _breadcrumbEventHandler: function(evtName) {\n var self = this;\n return function(evt) {\n // reset keypress timeout; e.g. triggering a 'click' after\n // a 'keypress' will reset the keypress debounce so that a new\n // set of keypresses can be recorded\n self._keypressTimeout = null;\n\n // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors). Ignore if we've\n // already captured the event.\n if (self._lastCapturedEvent === evt) return;\n\n self._lastCapturedEvent = evt;\n\n // try/catch both:\n // - accessing evt.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // can throw an exception in some circumstances.\n var target;\n try {\n target = htmlTreeAsString(evt.target);\n } catch (e) {\n target = '<unknown>';\n }\n\n self.captureBreadcrumb({\n category: 'ui.' + evtName, // e.g. ui.click, ui.input\n message: target\n });\n };\n },\n\n /**\n * Wraps addEventListener to capture keypress UI events\n * @returns {Function}\n * @private\n */\n _keypressEventHandler: function() {\n var self = this,\n debounceDuration = 1000; // milliseconds\n\n // TODO: if somehow user switches keypress target before\n // debounce timeout is triggered, we will only capture\n // a single breadcrumb from the FIRST target (acceptable?)\n return function(evt) {\n var target;\n try {\n target = evt.target;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n var tagName = target && target.tagName;\n\n // only consider keypress events on actual input elements\n // this will disregard keypresses targeting body (e.g. tabbing\n // through elements, hotkeys, etc)\n if (\n !tagName ||\n (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)\n )\n return;\n\n // record first keypress in a series, but ignore subsequent\n // keypresses until debounce clears\n var timeout = self._keypressTimeout;\n if (!timeout) {\n self._breadcrumbEventHandler('input')(evt);\n }\n clearTimeout(timeout);\n self._keypressTimeout = setTimeout(function() {\n self._keypressTimeout = null;\n }, debounceDuration);\n };\n },\n\n /**\n * Captures a breadcrumb of type \"navigation\", normalizing input URLs\n * @param to the originating URL\n * @param from the target URL\n * @private\n */\n _captureUrlChange: function(from, to) {\n var parsedLoc = parseUrl(this._location.href);\n var parsedTo = parseUrl(to);\n var parsedFrom = parseUrl(from);\n\n // because onpopstate only tells you the \"new\" (to) value of location.href, and\n // not the previous (from) value, we need to track the value of the current URL\n // state ourselves\n this._lastHref = to;\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)\n to = parsedTo.relative;\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)\n from = parsedFrom.relative;\n\n this.captureBreadcrumb({\n category: 'navigation',\n data: {\n to: to,\n from: from\n }\n });\n },\n\n _patchFunctionToString: function() {\n var self = this;\n self._originalFunctionToString = Function.prototype.toString;\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = function() {\n if (typeof this === 'function' && this.__raven__) {\n return self._originalFunctionToString.apply(this.__orig__, arguments);\n }\n return self._originalFunctionToString.apply(this, arguments);\n };\n },\n\n _unpatchFunctionToString: function() {\n if (this._originalFunctionToString) {\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = this._originalFunctionToString;\n }\n },\n\n /**\n * Wrap timer functions and event targets to catch errors and provide\n * better metadata.\n */\n _instrumentTryCatch: function() {\n var self = this;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapTimeFn(orig) {\n return function(fn, t) {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n var originalCallback = args[0];\n if (isFunction(originalCallback)) {\n args[0] = self.wrap(originalCallback);\n }\n\n // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it\n // also supports only two arguments and doesn't care what this is, so we\n // can just call the original function directly.\n if (orig.apply) {\n return orig.apply(this, args);\n } else {\n return orig(args[0], args[1]);\n }\n };\n }\n\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n function wrapEventTarget(global) {\n var proto = _window[global] && _window[global].prototype;\n if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {\n fill(\n proto,\n 'addEventListener',\n function(orig) {\n return function(evtName, fn, capture, secure) {\n // preserve arity\n try {\n if (fn && fn.handleEvent) {\n fn.handleEvent = self.wrap(fn.handleEvent);\n }\n } catch (err) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`\n // so that we don't have more than one wrapper function\n var before, clickHandler, keypressHandler;\n\n if (\n autoBreadcrumbs &&\n autoBreadcrumbs.dom &&\n (global === 'EventTarget' || global === 'Node')\n ) {\n // NOTE: generating multiple handlers per addEventListener invocation, should\n // revisit and verify we can just use one (almost certainly)\n clickHandler = self._breadcrumbEventHandler('click');\n keypressHandler = self._keypressEventHandler();\n before = function(evt) {\n // need to intercept every DOM event in `before` argument, in case that\n // same wrapped method is re-used for different events (e.g. mousemove THEN click)\n // see #724\n if (!evt) return;\n\n var eventType;\n try {\n eventType = evt.type;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n if (eventType === 'click') return clickHandler(evt);\n else if (eventType === 'keypress') return keypressHandler(evt);\n };\n }\n return orig.call(\n this,\n evtName,\n self.wrap(fn, undefined, before),\n capture,\n secure\n );\n };\n },\n wrappedBuiltIns\n );\n fill(\n proto,\n 'removeEventListener',\n function(orig) {\n return function(evt, fn, capture, secure) {\n try {\n fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);\n } catch (e) {\n // ignore, accessing __raven_wrapper__ will throw in some Selenium environments\n }\n return orig.call(this, evt, fn, capture, secure);\n };\n },\n wrappedBuiltIns\n );\n }\n }\n\n fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);\n fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);\n if (_window.requestAnimationFrame) {\n fill(\n _window,\n 'requestAnimationFrame',\n function(orig) {\n return function(cb) {\n return orig(self.wrap(cb));\n };\n },\n wrappedBuiltIns\n );\n }\n\n // event targets borrowed from bugsnag-js:\n // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666\n var eventTargets = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload'\n ];\n for (var i = 0; i < eventTargets.length; i++) {\n wrapEventTarget(eventTargets[i]);\n }\n },\n\n /**\n * Instrument browser built-ins w/ breadcrumb capturing\n * - XMLHttpRequests\n * - DOM interactions (click/typing)\n * - window.location changes\n * - console\n *\n * Can be disabled or individually configured via the `autoBreadcrumbs` config option\n */\n _instrumentBreadcrumbs: function() {\n var self = this;\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && isFunction(xhr[prop])) {\n fill(xhr, prop, function(orig) {\n return self.wrap(orig);\n }); // intentionally don't track filled methods on XHR instances\n }\n }\n\n if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {\n var xhrproto = _window.XMLHttpRequest && _window.XMLHttpRequest.prototype;\n fill(\n xhrproto,\n 'open',\n function(origOpen) {\n return function(method, url) {\n // preserve arity\n\n // if Sentry key appears in URL, don't capture\n if (isString(url) && url.indexOf(self._globalKey) === -1) {\n this.__raven_xhr = {\n method: method,\n url: url,\n status_code: null\n };\n }\n\n return origOpen.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n\n fill(\n xhrproto,\n 'send',\n function(origSend) {\n return function() {\n // preserve arity\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__raven_xhr && xhr.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhr.__raven_xhr.status_code = xhr.status;\n } catch (e) {\n /* do nothing */\n }\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'xhr',\n data: xhr.__raven_xhr\n });\n }\n }\n\n var props = ['onload', 'onerror', 'onprogress'];\n for (var j = 0; j < props.length; j++) {\n wrapProp(props[j], xhr);\n }\n\n if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {\n fill(\n xhr,\n 'onreadystatechange',\n function(orig) {\n return self.wrap(orig, undefined, onreadystatechangeHandler);\n } /* intentionally don't track this instrumentation */\n );\n } else {\n // if onreadystatechange wasn't actually set by the page on this xhr, we\n // are free to set our own and capture the breadcrumb\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n\n return origSend.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n }\n\n if (autoBreadcrumbs.xhr && supportsFetch()) {\n fill(\n _window,\n 'fetch',\n function(origFetch) {\n return function() {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n\n var fetchInput = args[0];\n var method = 'GET';\n var url;\n\n if (typeof fetchInput === 'string') {\n url = fetchInput;\n } else if ('Request' in _window && fetchInput instanceof _window.Request) {\n url = fetchInput.url;\n if (fetchInput.method) {\n method = fetchInput.method;\n }\n } else {\n url = '' + fetchInput;\n }\n\n // if Sentry key appears in URL, don't capture, as it's our own request\n if (url.indexOf(self._globalKey) !== -1) {\n return origFetch.apply(this, args);\n }\n\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n\n var fetchData = {\n method: method,\n url: url,\n status_code: null\n };\n\n return origFetch\n .apply(this, args)\n .then(function(response) {\n fetchData.status_code = response.status;\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData\n });\n\n return response;\n })\n ['catch'](function(err) {\n // if there is an error performing the request\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData,\n level: 'error'\n });\n\n throw err;\n });\n };\n },\n wrappedBuiltIns\n );\n }\n\n // Capture breadcrumbs from any click that is unhandled / bubbled up all the way\n // to the document. Do this before we instrument addEventListener.\n if (autoBreadcrumbs.dom && this._hasDocument) {\n if (_document.addEventListener) {\n _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);\n _document.addEventListener('keypress', self._keypressEventHandler(), false);\n } else if (_document.attachEvent) {\n // IE8 Compatibility\n _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));\n _document.attachEvent('onkeypress', self._keypressEventHandler());\n }\n }\n\n // record navigation (URL) changes\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n var chrome = _window.chrome;\n var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n var hasPushAndReplaceState =\n !isChromePackagedApp &&\n _window.history &&\n _window.history.pushState &&\n _window.history.replaceState;\n if (autoBreadcrumbs.location && hasPushAndReplaceState) {\n // TODO: remove onpopstate handler on uninstall()\n var oldOnPopState = _window.onpopstate;\n _window.onpopstate = function() {\n var currentHref = self._location.href;\n self._captureUrlChange(self._lastHref, currentHref);\n\n if (oldOnPopState) {\n return oldOnPopState.apply(this, arguments);\n }\n };\n\n var historyReplacementFunction = function(origHistFunction) {\n // note history.pushState.length is 0; intentionally not declaring\n // params to preserve 0 arity\n return function(/* state, title, url */) {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n\n // url argument is optional\n if (url) {\n // coerce to string (this is what pushState does)\n self._captureUrlChange(self._lastHref, url + '');\n }\n\n return origHistFunction.apply(this, arguments);\n };\n };\n\n fill(_window.history, 'pushState', historyReplacementFunction, wrappedBuiltIns);\n fill(_window.history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);\n }\n\n if (autoBreadcrumbs.console && 'console' in _window && console.log) {\n // console\n var consoleMethodCallback = function(msg, data) {\n self.captureBreadcrumb({\n message: msg,\n level: data.level,\n category: 'console'\n });\n };\n\n each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {\n wrapConsoleMethod(console, level, consoleMethodCallback);\n });\n }\n },\n\n _restoreBuiltIns: function() {\n // restore any wrapped builtins\n var builtin;\n while (this._wrappedBuiltIns.length) {\n builtin = this._wrappedBuiltIns.shift();\n\n var obj = builtin[0],\n name = builtin[1],\n orig = builtin[2];\n\n obj[name] = orig;\n }\n },\n\n _restoreConsole: function() {\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsoleMethods) {\n this._originalConsole[method] = this._originalConsoleMethods[method];\n }\n },\n\n _drainPlugins: function() {\n var self = this;\n\n // FIX ME TODO\n each(this._plugins, function(_, plugin) {\n var installer = plugin[0];\n var args = plugin[1];\n installer.apply(self, [self].concat(args));\n });\n },\n\n _parseDSN: function(str) {\n var m = dsnPattern.exec(str),\n dsn = {},\n i = 7;\n\n try {\n while (i--) dsn[dsnKeys[i]] = m[i] || '';\n } catch (e) {\n throw new RavenConfigError('Invalid DSN: ' + str);\n }\n\n if (dsn.pass && !this._globalOptions.allowSecretKey) {\n throw new RavenConfigError(\n 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'\n );\n }\n\n return dsn;\n },\n\n _getGlobalServer: function(uri) {\n // assemble the endpoint from the uri pieces\n var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');\n\n if (uri.protocol) {\n globalServer = uri.protocol + ':' + globalServer;\n }\n return globalServer;\n },\n\n _handleOnErrorStackInfo: function() {\n // if we are intentionally ignoring errors via onerror, bail out\n if (!this._ignoreOnError) {\n this._handleStackInfo.apply(this, arguments);\n }\n },\n\n _handleStackInfo: function(stackInfo, options) {\n var frames = this._prepareFrames(stackInfo, options);\n\n this._triggerEvent('handle', {\n stackInfo: stackInfo,\n options: options\n });\n\n this._processException(\n stackInfo.name,\n stackInfo.message,\n stackInfo.url,\n stackInfo.lineno,\n frames,\n options\n );\n },\n\n _prepareFrames: function(stackInfo, options) {\n var self = this;\n var frames = [];\n if (stackInfo.stack && stackInfo.stack.length) {\n each(stackInfo.stack, function(i, stack) {\n var frame = self._normalizeFrame(stack, stackInfo.url);\n if (frame) {\n frames.push(frame);\n }\n });\n\n // e.g. frames captured via captureMessage throw\n if (options && options.trimHeadFrames) {\n for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {\n frames[j].in_app = false;\n }\n }\n }\n frames = frames.slice(0, this._globalOptions.stackTraceLimit);\n return frames;\n },\n\n _normalizeFrame: function(frame, stackInfoUrl) {\n // normalize the frames data\n var normalized = {\n filename: frame.url,\n lineno: frame.line,\n colno: frame.column,\n function: frame.func || '?'\n };\n\n // Case when we don't have any information about the error\n // E.g. throwing a string or raw object, instead of an `Error` in Firefox\n // Generating synthetic error doesn't add any value here\n //\n // We should probably somehow let a user know that they should fix their code\n if (!frame.url) {\n normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler\n }\n\n normalized.in_app = !// determine if an exception came from outside of our app\n // first we check the global includePaths list.\n (\n (!!this._globalOptions.includePaths.test &&\n !this._globalOptions.includePaths.test(normalized.filename)) ||\n // Now we check for fun, if the function name is Raven or TraceKit\n /(Raven|TraceKit)\\./.test(normalized['function']) ||\n // finally, we do a last ditch effort and check for raven.min.js\n /raven\\.(min\\.)?js$/.test(normalized.filename)\n );\n\n return normalized;\n },\n\n _processException: function(type, message, fileurl, lineno, frames, options) {\n var prefixedMessage = (type ? type + ': ' : '') + (message || '');\n if (\n !!this._globalOptions.ignoreErrors.test &&\n (this._globalOptions.ignoreErrors.test(message) ||\n this._globalOptions.ignoreErrors.test(prefixedMessage))\n ) {\n return;\n }\n\n var stacktrace;\n\n if (frames && frames.length) {\n fileurl = frames[0].filename || fileurl;\n // Sentry expects frames oldest to newest\n // and JS sends them as newest to oldest\n frames.reverse();\n stacktrace = {frames: frames};\n } else if (fileurl) {\n stacktrace = {\n frames: [\n {\n filename: fileurl,\n lineno: lineno,\n in_app: true\n }\n ]\n };\n }\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n var data = objectMerge(\n {\n // sentry.interfaces.Exception\n exception: {\n values: [\n {\n type: type,\n value: message,\n stacktrace: stacktrace\n }\n ]\n },\n transaction: fileurl\n },\n options\n );\n\n // Fire away!\n this._send(data);\n },\n\n _trimPacket: function(data) {\n // For now, we only want to truncate the two different messages\n // but this could/should be expanded to just trim everything\n var max = this._globalOptions.maxMessageLength;\n if (data.message) {\n data.message = truncate(data.message, max);\n }\n if (data.exception) {\n var exception = data.exception.values[0];\n exception.value = truncate(exception.value, max);\n }\n\n var request = data.request;\n if (request) {\n if (request.url) {\n request.url = truncate(request.url, this._globalOptions.maxUrlLength);\n }\n if (request.Referer) {\n request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);\n }\n }\n\n if (data.breadcrumbs && data.breadcrumbs.values)\n this._trimBreadcrumbs(data.breadcrumbs);\n\n return data;\n },\n\n /**\n * Truncate breadcrumb values (right now just URLs)\n */\n _trimBreadcrumbs: function(breadcrumbs) {\n // known breadcrumb properties with urls\n // TODO: also consider arbitrary prop values that start with (https?)?://\n var urlProps = ['to', 'from', 'url'],\n urlProp,\n crumb,\n data;\n\n for (var i = 0; i < breadcrumbs.values.length; ++i) {\n crumb = breadcrumbs.values[i];\n if (\n !crumb.hasOwnProperty('data') ||\n !isObject(crumb.data) ||\n objectFrozen(crumb.data)\n )\n continue;\n\n data = objectMerge({}, crumb.data);\n for (var j = 0; j < urlProps.length; ++j) {\n urlProp = urlProps[j];\n if (data.hasOwnProperty(urlProp) && data[urlProp]) {\n data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);\n }\n }\n breadcrumbs.values[i].data = data;\n }\n },\n\n _getHttpData: function() {\n if (!this._hasNavigator && !this._hasDocument) return;\n var httpData = {};\n\n if (this._hasNavigator && _navigator.userAgent) {\n httpData.headers = {\n 'User-Agent': _navigator.userAgent\n };\n }\n\n // Check in `window` instead of `document`, as we may be in ServiceWorker environment\n if (_window.location && _window.location.href) {\n httpData.url = _window.location.href;\n }\n\n if (this._hasDocument && _document.referrer) {\n if (!httpData.headers) httpData.headers = {};\n httpData.headers.Referer = _document.referrer;\n }\n\n return httpData;\n },\n\n _resetBackoff: function() {\n this._backoffDuration = 0;\n this._backoffStart = null;\n },\n\n _shouldBackoff: function() {\n return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;\n },\n\n /**\n * Returns true if the in-process data payload matches the signature\n * of the previously-sent data\n *\n * NOTE: This has to be done at this level because TraceKit can generate\n * data from window.onerror WITHOUT an exception object (IE8, IE9,\n * other old browsers). This can take the form of an \"exception\"\n * data object with a single frame (derived from the onerror args).\n */\n _isRepeatData: function(current) {\n var last = this._lastData;\n\n if (\n !last ||\n current.message !== last.message || // defined for captureMessage\n current.transaction !== last.transaction // defined for captureException/onerror\n )\n return false;\n\n // Stacktrace interface (i.e. from captureMessage)\n if (current.stacktrace || last.stacktrace) {\n return isSameStacktrace(current.stacktrace, last.stacktrace);\n } else if (current.exception || last.exception) {\n // Exception interface (i.e. from captureException/onerror)\n return isSameException(current.exception, last.exception);\n }\n\n return true;\n },\n\n _setBackoffState: function(request) {\n // If we are already in a backoff state, don't change anything\n if (this._shouldBackoff()) {\n return;\n }\n\n var status = request.status;\n\n // 400 - project_id doesn't exist or some other fatal\n // 401 - invalid/revoked dsn\n // 429 - too many requests\n if (!(status === 400 || status === 401 || status === 429)) return;\n\n var retry;\n try {\n // If Retry-After is not in Access-Control-Expose-Headers, most\n // browsers will throw an exception trying to access it\n if (supportsFetch()) {\n retry = request.headers.get('Retry-After');\n } else {\n retry = request.getResponseHeader('Retry-After');\n }\n\n // Retry-After is returned in seconds\n retry = parseInt(retry, 10) * 1000;\n } catch (e) {\n /* eslint no-empty:0 */\n }\n\n this._backoffDuration = retry\n ? // If Sentry server returned a Retry-After value, use it\n retry\n : // Otherwise, double the last backoff duration (starts at 1 sec)\n this._backoffDuration * 2 || 1000;\n\n this._backoffStart = now();\n },\n\n _send: function(data) {\n var globalOptions = this._globalOptions;\n\n var baseData = {\n project: this._globalProject,\n logger: globalOptions.logger,\n platform: 'javascript'\n },\n httpData = this._getHttpData();\n\n if (httpData) {\n baseData.request = httpData;\n }\n\n // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload\n if (data.trimHeadFrames) delete data.trimHeadFrames;\n\n data = objectMerge(baseData, data);\n\n // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge\n data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);\n data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);\n\n // Send along our own collected metadata with extra\n data.extra['session:duration'] = now() - this._startTime;\n\n if (this._breadcrumbs && this._breadcrumbs.length > 0) {\n // intentionally make shallow copy so that additions\n // to breadcrumbs aren't accidentally sent in this request\n data.breadcrumbs = {\n values: [].slice.call(this._breadcrumbs, 0)\n };\n }\n\n if (this._globalContext.user) {\n // sentry.interfaces.User\n data.user = this._globalContext.user;\n }\n\n // Include the environment if it's defined in globalOptions\n if (globalOptions.environment) data.environment = globalOptions.environment;\n\n // Include the release if it's defined in globalOptions\n if (globalOptions.release) data.release = globalOptions.release;\n\n // Include server_name if it's defined in globalOptions\n if (globalOptions.serverName) data.server_name = globalOptions.serverName;\n\n data = this._sanitizeData(data);\n\n // Cleanup empty properties before sending them to the server\n Object.keys(data).forEach(function(key) {\n if (data[key] == null || data[key] === '' || isEmptyObject(data[key])) {\n delete data[key];\n }\n });\n\n if (isFunction(globalOptions.dataCallback)) {\n data = globalOptions.dataCallback(data) || data;\n }\n\n // Why??????????\n if (!data || isEmptyObject(data)) {\n return;\n }\n\n // Check if the request should be filtered or not\n if (\n isFunction(globalOptions.shouldSendCallback) &&\n !globalOptions.shouldSendCallback(data)\n ) {\n return;\n }\n\n // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),\n // so drop requests until \"cool-off\" period has elapsed.\n if (this._shouldBackoff()) {\n this._logDebug('warn', 'Raven dropped error due to backoff: ', data);\n return;\n }\n\n if (typeof globalOptions.sampleRate === 'number') {\n if (Math.random() < globalOptions.sampleRate) {\n this._sendProcessedPayload(data);\n }\n } else {\n this._sendProcessedPayload(data);\n }\n },\n\n _sanitizeData: function(data) {\n return sanitize(data, this._globalOptions.sanitizeKeys);\n },\n\n _getUuid: function() {\n return uuid4();\n },\n\n _sendProcessedPayload: function(data, callback) {\n var self = this;\n var globalOptions = this._globalOptions;\n\n if (!this.isSetup()) return;\n\n // Try and clean up the packet before sending by truncating long values\n data = this._trimPacket(data);\n\n // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,\n // but this would require copying an un-truncated copy of the data packet, which can be\n // arbitrarily deep (extra_data) -- could be worthwhile? will revisit\n if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {\n this._logDebug('warn', 'Raven dropped repeat event: ', data);\n return;\n }\n\n // Send along an event_id if not explicitly passed.\n // This event_id can be used to reference the error within Sentry itself.\n // Set lastEventId after we know the error should actually be sent\n this._lastEventId = data.event_id || (data.event_id = this._getUuid());\n\n // Store outbound payload after trim\n this._lastData = data;\n\n this._logDebug('debug', 'Raven about to send:', data);\n\n var auth = {\n sentry_version: '7',\n sentry_client: 'raven-js/' + this.VERSION,\n sentry_key: this._globalKey\n };\n\n if (this._globalSecret) {\n auth.sentry_secret = this._globalSecret;\n }\n\n var exception = data.exception && data.exception.values[0];\n\n // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy\n if (\n this._globalOptions.autoBreadcrumbs &&\n this._globalOptions.autoBreadcrumbs.sentry\n ) {\n this.captureBreadcrumb({\n category: 'sentry',\n message: exception\n ? (exception.type ? exception.type + ': ' : '') + exception.value\n : data.message,\n event_id: data.event_id,\n level: data.level || 'error' // presume error unless specified\n });\n }\n\n var url = this._globalEndpoint;\n (globalOptions.transport || this._makeRequest).call(this, {\n url: url,\n auth: auth,\n data: data,\n options: globalOptions,\n onSuccess: function success() {\n self._resetBackoff();\n\n self._triggerEvent('success', {\n data: data,\n src: url\n });\n callback && callback();\n },\n onError: function failure(error) {\n self._logDebug('error', 'Raven transport failed to send: ', error);\n\n if (error.request) {\n self._setBackoffState(error.request);\n }\n\n self._triggerEvent('failure', {\n data: data,\n src: url\n });\n error = error || new Error('Raven send failed (no additional details provided)');\n callback && callback(error);\n }\n });\n },\n\n _makeRequest: function(opts) {\n // Auth is intentionally sent as part of query string (NOT as custom HTTP header) to avoid preflight CORS requests\n var url = opts.url + '?' + urlencode(opts.auth);\n\n var evaluatedHeaders = null;\n var evaluatedFetchParameters = {};\n\n if (opts.options.headers) {\n evaluatedHeaders = this._evaluateHash(opts.options.headers);\n }\n\n if (opts.options.fetchParameters) {\n evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);\n }\n\n if (supportsFetch()) {\n evaluatedFetchParameters.body = stringify(opts.data);\n\n var defaultFetchOptions = objectMerge({}, this._fetchDefaults);\n var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);\n\n if (evaluatedHeaders) {\n fetchOptions.headers = evaluatedHeaders;\n }\n\n return _window\n .fetch(url, fetchOptions)\n .then(function(response) {\n if (response.ok) {\n opts.onSuccess && opts.onSuccess();\n } else {\n var error = new Error('Sentry error code: ' + response.status);\n // It's called request only to keep compatibility with XHR interface\n // and not add more redundant checks in setBackoffState method\n error.request = response;\n opts.onError && opts.onError(error);\n }\n })\n ['catch'](function() {\n opts.onError &&\n opts.onError(new Error('Sentry error code: network unavailable'));\n });\n }\n\n var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();\n if (!request) return;\n\n // if browser doesn't support CORS (e.g. IE7), we are out of luck\n var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';\n\n if (!hasCORS) return;\n\n if ('withCredentials' in request) {\n request.onreadystatechange = function() {\n if (request.readyState !== 4) {\n return;\n } else if (request.status === 200) {\n opts.onSuccess && opts.onSuccess();\n } else if (opts.onError) {\n var err = new Error('Sentry error code: ' + request.status);\n err.request = request;\n opts.onError(err);\n }\n };\n } else {\n request = new XDomainRequest();\n // xdomainrequest cannot go http -> https (or vice versa),\n // so always use protocol relative\n url = url.replace(/^https?:/, '');\n\n // onreadystatechange not supported by XDomainRequest\n if (opts.onSuccess) {\n request.onload = opts.onSuccess;\n }\n if (opts.onError) {\n request.onerror = function() {\n var err = new Error('Sentry error code: XDomainRequest');\n err.request = request;\n opts.onError(err);\n };\n }\n }\n\n request.open('POST', url);\n\n if (evaluatedHeaders) {\n each(evaluatedHeaders, function(key, value) {\n request.setRequestHeader(key, value);\n });\n }\n\n request.send(stringify(opts.data));\n },\n\n _evaluateHash: function(hash) {\n var evaluated = {};\n\n for (var key in hash) {\n if (hash.hasOwnProperty(key)) {\n var value = hash[key];\n evaluated[key] = typeof value === 'function' ? value() : value;\n }\n }\n\n return evaluated;\n },\n\n _logDebug: function(level) {\n // We allow `Raven.debug` and `Raven.config(DSN, { debug: true })` to not make backward incompatible API change\n if (\n this._originalConsoleMethods[level] &&\n (this.debug || this._globalOptions.debug)\n ) {\n // In IE<10 console methods do not have their own 'apply' method\n Function.prototype.apply.call(\n this._originalConsoleMethods[level],\n this._originalConsole,\n [].slice.call(arguments, 1)\n );\n }\n },\n\n _mergeContext: function(key, context) {\n if (isUndefined(context)) {\n delete this._globalContext[key];\n } else {\n this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);\n }\n }\n};\n\n// Deprecations\nRaven.prototype.setUser = Raven.prototype.setUserContext;\nRaven.prototype.setReleaseContext = Raven.prototype.setRelease;\n\nmodule.exports = Raven;\n","/**\n * Enforces a single instance of the Raven client, and the\n * main entry point for Raven. If you are a consumer of the\n * Raven library, you SHOULD load this file (vs raven.js).\n **/\n\nvar RavenConstructor = require('./raven');\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _Raven = _window.Raven;\n\nvar Raven = new RavenConstructor();\n\n/*\n * Allow multiple versions of Raven to be installed.\n * Strip Raven from the global context and returns the instance.\n *\n * @return {Raven}\n */\nRaven.noConflict = function() {\n _window.Raven = _Raven;\n return Raven;\n};\n\nRaven.afterLoad();\n\nmodule.exports = Raven;\n\n/**\n * DISCLAIMER:\n *\n * Expose `Client` constructor for cases where user want to track multiple \"sub-applications\" in one larger app.\n * It's not meant to be used by a wide audience, so pleaaase make sure that you know what you're doing before using it.\n * Accidentally calling `install` multiple times, may result in an unexpected behavior that's very hard to debug.\n *\n * It's called `Client' to be in-line with Raven Node implementation.\n *\n * HOWTO:\n *\n * import Raven from 'raven-js';\n *\n * const someAppReporter = new Raven.Client();\n * const someOtherAppReporter = new Raven.Client();\n *\n * someAppReporter.config('__DSN__', {\n * ...config goes here\n * });\n *\n * someOtherAppReporter.config('__OTHER_DSN__', {\n * ...config goes here\n * });\n *\n * someAppReporter.captureMessage(...);\n * someAppReporter.captureException(...);\n * someAppReporter.captureBreadcrumb(...);\n *\n * someOtherAppReporter.captureMessage(...);\n * someOtherAppReporter.captureException(...);\n * someOtherAppReporter.captureBreadcrumb(...);\n *\n * It should \"just work\".\n */\nmodule.exports.Client = RavenConstructor;\n","// ==========================================================================\n// Plyr.io demo\n// This code is purely for the https://plyr.io website\n// Please see readme.md in the root or github.com/sampotts/plyr\n// ==========================================================================\n\nimport Raven from 'raven-js';\n\n(() => {\n const isLive = window.location.host === 'plyr.io';\n\n // Raven / Sentry\n // For demo site (https://plyr.io) only\n if (isLive) {\n Raven.config('https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555').install();\n }\n\n document.addEventListener('DOMContentLoaded', () => {\n Raven.context(() => {\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n document.activeElement.classList.add(tabClassName);\n }, 0);\n });\n\n // Setup the player\n const player = new Plyr('#player', {\n debug: true,\n title: 'View From A Blue Moon',\n iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: true,\n },\n /* controls: [\n 'play-large',\n 'restart',\n 'rewind',\n 'play',\n 'fast-forward',\n 'progress',\n 'current-time',\n 'duration',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ], */\n /* i18n: {\n restart: '重新開始',\n rewind: '快退{seektime}秒',\n play: '播放',\n pause: '暫停',\n fastForward: '快進{seektime}秒',\n seek: '尋求',\n played: '發揮',\n buffered: '緩衝的',\n currentTime: '當前時間戳',\n duration: '長短',\n volume: '音量',\n mute: '靜音',\n unmute: '取消靜音',\n enableCaptions: '開啟字幕',\n disableCaptions: '關閉字幕',\n enterFullscreen: '進入全螢幕',\n exitFullscreen: '退出全螢幕',\n frameTitle: '球員為{title}',\n captions: '字幕',\n settings: '設定',\n speed: '速度',\n normal: '正常',\n quality: '質量',\n loop: '循環',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: '重啟',\n disabled: '殘',\n enabled: '啟用',\n advertisement: '廣告',\n }, */\n captions: {\n active: true,\n },\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n ads: {\n enabled: true,\n publisherId: '918848828995742',\n },\n });\n\n // Expose for tinkering in the console\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-576p.mp4',\n type: 'video/mp4',\n size: 576,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-720p.mp4',\n type: 'video/mp4',\n size: 720,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1080p.mp4',\n type: 'video/mp4',\n size: 1080,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1440p.mp4',\n type: 'video/mp4',\n size: 1440,\n },\n ],\n poster: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title: 'Kishi Bashi &ndash; &ldquo;It All Began With A Burst&rdquo;',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n }],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n }],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button => toggleClass(button.parentElement, 'active', false));\n\n // Set active on parent\n toggleClass(document.querySelector(`[data-source=\"${type}\"]`), 'active', true);\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(cite => {\n cite.setAttribute('hidden', '');\n });\n document.querySelector(`.plyr__cite--${type}`).removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`,\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n });\n });\n\n // Google analytics\n // For demo site (https://plyr.io) only\n /* eslint-disable */\n if (isLive) {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n }\n /* eslint-enable */\n})();\n"]} \ No newline at end of file
diff --git a/demo/dist/demo.min.js b/demo/dist/demo.min.js
index f7c75ea2..57798670 100644
--- a/demo/dist/demo.min.js
+++ b/demo/dist/demo.min.js
@@ -1,2 +1,2 @@
-!function(){"use strict";var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};var t,r=(function(e,t){function r(e,t){for(var r=0;r<e.length;++r)if(e[r]===t)return r;return-1}function n(e,t){var n=[],o=[];return null==t&&(t=function(e,t){return n[0]===t?"[Circular ~]":"[Circular ~."+o.slice(0,r(n,t)).join(".")+"]"}),function(i,a){if(n.length>0){var s=r(n,this);~s?n.splice(s+1):n.push(this),~s?o.splice(s,1/0,i):o.push(i),~r(n,a)&&(a=t.call(this,i,a))}else n.push(a);return null==e?a instanceof Error?function(e){var t={stack:e.stack,message:e.message,name:e.name};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t}(a):a:e.call(this,i,a)}}(e.exports=function(e,t,r,o){return JSON.stringify(e,n(t,o),r)}).getSerialize=n}(t={exports:{}},t.exports),t.exports),n=(r.getSerialize,"undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{});function o(e){return void 0===e}function i(e){return"[object Object]"===Object.prototype.toString.call(e)}function a(e){return"[object String]"===Object.prototype.toString.call(e)}function s(e){return"[object Array]"===Object.prototype.toString.call(e)}function c(){try{return new ErrorEvent(""),!0}catch(e){return!1}}function l(){if(!("fetch"in n))return!1;try{return new Headers,new Request(""),new Response,!0}catch(e){return!1}}function u(e,t){var r,n;if(o(e.length))for(r in e)p(e,r)&&t.call(null,r,e[r]);else if(n=e.length)for(r=0;r<n;r++)t.call(null,r,e[r])}function h(e,t){if("number"!=typeof t)throw new Error("2nd argument to `truncate` function should be a number");return"string"!=typeof e||0===t?e:e.length<=t?e:e.substr(0,t)+"…"}function p(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function f(e){for(var t,r=[],n=0,o=e.length;n<o;n++)a(t=e[n])?r.push(t.replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1")):t&&t.source&&r.push(t.source);return new RegExp(r.join("|"),"i")}function d(e){var t,r,n,o,i,s=[];if(!e||!e.tagName)return"";if(s.push(e.tagName.toLowerCase()),e.id&&s.push("#"+e.id),(t=e.className)&&a(t))for(r=t.split(/\s+/),i=0;i<r.length;i++)s.push("."+r[i]);var c=["type","name","title","alt"];for(i=0;i<c.length;i++)n=c[i],(o=e.getAttribute(n))&&s.push("["+n+'="'+o+'"]');return s.join("")}function g(e,t){return!!(!!e^!!t)}function _(e,t){if(g(e,t))return!1;var r,n,o=e.frames,i=t.frames;if(o.length!==i.length)return!1;for(var a=0;a<o.length;a++)if(r=o[a],n=i[a],r.filename!==n.filename||r.lineno!==n.lineno||r.colno!==n.colno||r.function!==n.function)return!1;return!0}var v=3,m=51200,b=40;function y(e){return function(e){return~-encodeURI(e).split(/%..|./).length}(JSON.stringify(e))}function E(e){if("string"==typeof e){return h(e,40)}if("number"==typeof e||"boolean"==typeof e||void 0===e)return e;var t=Object.prototype.toString.call(e);return"[object Object]"===t?"[Object]":"[object Array]"===t?"[Array]":"[object Function]"===t?e.name?"[Function: "+e.name+"]":"[Function]":e}var w={isObject:function(e){return"object"==typeof e&&null!==e},isError:function(e){switch({}.toString.call(e)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return e instanceof Error}},isErrorEvent:function(e){return c()&&"[object ErrorEvent]"==={}.toString.call(e)},isUndefined:o,isFunction:function(e){return"function"==typeof e},isPlainObject:i,isString:a,isArray:s,isEmptyObject:function(e){if(!i(e))return!1;for(var t in e)if(e.hasOwnProperty(t))return!1;return!0},supportsErrorEvent:c,supportsFetch:l,supportsReferrerPolicy:function(){if(!l())return!1;try{return new Request("pickleRick",{referrerPolicy:"origin"}),!0}catch(e){return!1}},supportsPromiseRejectionEvent:function(){return"function"==typeof PromiseRejectionEvent},wrappedCallback:function(e){return function(t,r){var n=e(t)||t;return r&&r(n)||n}},each:u,objectMerge:function(e,t){return t?(u(t,function(t,r){e[t]=r}),e):e},truncate:h,objectFrozen:function(e){return!!Object.isFrozen&&Object.isFrozen(e)},hasKey:p,joinRegExp:f,urlencode:function(e){var t=[];return u(e,function(e,r){t.push(encodeURIComponent(e)+"="+encodeURIComponent(r))}),t.join("&")},uuid4:function(){var e=n.crypto||n.msCrypto;if(!o(e)&&e.getRandomValues){var t=new Uint16Array(8);e.getRandomValues(t),t[3]=4095&t[3]|16384,t[4]=16383&t[4]|32768;var r=function(e){for(var t=e.toString(16);t.length<4;)t="0"+t;return t};return r(t[0])+r(t[1])+r(t[2])+r(t[3])+r(t[4])+r(t[5])+r(t[6])+r(t[7])}return"xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})},htmlTreeAsString:function(e){for(var t,r=[],n=0,o=0,i=" > ".length;e&&n++<5&&!("html"===(t=d(e))||n>1&&o+r.length*i+t.length>=80);)r.push(t),o+=t.length,e=e.parentNode;return r.reverse().join(" > ")},htmlElementAsString:d,isSameException:function(e,t){return!g(e,t)&&(e=e.values[0],t=t.values[0],e.type===t.type&&e.value===t.value&&(r=e.stacktrace,n=t.stacktrace,(!o(r)||!o(n))&&_(e.stacktrace,t.stacktrace)));var r,n},isSameStacktrace:_,parseUrl:function(e){if("string"!=typeof e)return{};var t=e.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/),r=t[6]||"",n=t[8]||"";return{protocol:t[2],host:t[4],path:t[5],relative:t[5]+r+n}},fill:function(e,t,r,n){if(null!=e){var o=e[t];e[t]=r(o),e[t].__raven__=!0,e[t].__orig__=o,n&&n.push([e,t,o])}},safeJoin:function(e,t){if(!s(e))return"";for(var r=[],n=0;n<e.length;n++)try{r.push(String(e[n]))}catch(e){r.push("[value cannot be serialized]")}return r.join(t)},serializeException:function e(t,n,o){if(!i(t))return t;o="number"!=typeof(n="number"!=typeof n?v:n)?m:o;var a=function e(t,r){return 0===r?E(t):i(t)?Object.keys(t).reduce(function(n,o){return n[o]=e(t[o],r-1),n},{}):Array.isArray(t)?t.map(function(t){return e(t,r-1)}):E(t)}(t,n);return y(r(a))>o?e(t,n-1):a},serializeKeysForMessage:function(e,t){if("number"==typeof e||"string"==typeof e)return e.toString();if(!Array.isArray(e))return"";if(0===(e=e.filter(function(e){return"string"==typeof e})).length)return"[object has no keys]";if(t="number"!=typeof t?b:t,e[0].length>=t)return e[0];for(var r=e.length;r>0;r--){var n=e.slice(0,r).join(", ");if(!(n.length>t))return r===e.length?n:n+"…"}return""},sanitize:function(e,t){if(!s(t)||s(t)&&0===t.length)return e;var n,o=f(t),a="********";try{n=JSON.parse(r(e))}catch(t){return e}return function e(t){return s(t)?t.map(function(t){return e(t)}):i(t)?Object.keys(t).reduce(function(r,n){return o.test(n)?r[n]=a:r[n]=e(t[n]),r},{}):t}(n)}},k={collectWindowErrors:!0,debug:!1},x="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},S=[].slice,O="?",C=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;function R(){return"undefined"==typeof document||null==document.location?"":document.location.href}k.report=function(){var e,t,r=[],n=null,o=null,i=null;function a(e,t){var n=null;if(!t||k.collectWindowErrors){for(var o in r)if(r.hasOwnProperty(o))try{r[o].apply(null,[e].concat(S.call(arguments,2)))}catch(e){n=e}if(n)throw n}}function s(t,r,n,o,s){var l=w.isErrorEvent(s)?s.error:s,u=w.isErrorEvent(t)?t.message:t;if(i)k.computeStackTrace.augmentStackTraceWithInitialElement(i,r,n,u),c();else if(l&&w.isError(l))a(k.computeStackTrace(l),!0);else{var h,p={url:r,line:n,column:o},f=void 0;if("[object String]"==={}.toString.call(u))(h=u.match(C))&&(f=h[1],u=h[2]);p.func=O,a({name:f,message:u,url:R(),stack:[p]},!0)}return!!e&&e.apply(this,arguments)}function c(){var e=i,t=n;n=null,i=null,o=null,a.apply(null,[e,!1].concat(t))}function l(e,t){var r=S.call(arguments,1);if(i){if(o===e)return;c()}var a=k.computeStackTrace(e);if(i=a,o=e,n=r,setTimeout(function(){o===e&&c()},a.incomplete?2e3:0),!1!==t)throw e}return l.subscribe=function(n){t||(e=x.onerror,x.onerror=s,t=!0),r.push(n)},l.unsubscribe=function(e){for(var t=r.length-1;t>=0;--t)r[t]===e&&r.splice(t,1)},l.uninstall=function(){t&&(x.onerror=e,t=!1,e=void 0),r=[]},l}(),k.computeStackTrace=function(){function e(e){if(void 0!==e.stack&&e.stack){for(var t,r,n,o=/^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,i=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,a=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,s=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,c=/\((\S*)(?::(\d+))(?::(\d+))\)/,l=e.stack.split("\n"),u=[],h=(/^(.*) is undefined$/.exec(e.message),0),p=l.length;h<p;++h){if(r=o.exec(l[h])){var f=r[2]&&0===r[2].indexOf("native");r[2]&&0===r[2].indexOf("eval")&&(t=c.exec(r[2]))&&(r[2]=t[1],r[3]=t[2],r[4]=t[3]),n={url:f?null:r[2],func:r[1]||O,args:f?[r[2]]:[],line:r[3]?+r[3]:null,column:r[4]?+r[4]:null}}else if(r=i.exec(l[h]))n={url:r[2],func:r[1]||O,args:[],line:+r[3],column:r[4]?+r[4]:null};else{if(!(r=a.exec(l[h])))continue;r[3]&&r[3].indexOf(" > eval")>-1&&(t=s.exec(r[3]))?(r[3]=t[1],r[4]=t[2],r[5]=null):0!==h||r[5]||void 0===e.columnNumber||(u[0].column=e.columnNumber+1),n={url:r[3],func:r[1]||O,args:r[2]?r[2].split(","):[],line:r[4]?+r[4]:null,column:r[5]?+r[5]:null}}!n.func&&n.line&&(n.func=O),u.push(n)}return u.length?{name:e.name,message:e.message,url:R(),stack:u}:null}}function t(e,t,r,n){var o={url:t,line:r};if(o.url&&o.line){if(e.incomplete=!1,o.func||(o.func=O),e.stack.length>0&&e.stack[0].url===o.url){if(e.stack[0].line===o.line)return!1;if(!e.stack[0].line&&e.stack[0].func===o.func)return e.stack[0].line=o.line,!1}return e.stack.unshift(o),e.partial=!0,!0}return e.incomplete=!0,!1}function r(e,o){for(var i,a,s=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,c=[],l={},u=!1,h=r.caller;h&&!u;h=h.caller)if(h!==n&&h!==k.report){if(a={url:null,func:O,line:null,column:null},h.name?a.func=h.name:(i=s.exec(h.toString()))&&(a.func=i[1]),void 0===a.func)try{a.func=i.input.substring(0,i.input.indexOf("{"))}catch(e){}l[""+h]?u=!0:l[""+h]=!0,c.push(a)}o&&c.splice(0,o);var p={name:e.name,message:e.message,url:R(),stack:c};return t(p,e.sourceURL||e.fileName,e.line||e.lineNumber,e.message||e.description),p}function n(t,n){var o=null;n=null==n?0:+n;try{if(o=e(t))return o}catch(e){if(k.debug)throw e}try{if(o=r(t,n+1))return o}catch(e){if(k.debug)throw e}return{name:t.name,message:t.message,url:R()}}return n.augmentStackTraceWithInitialElement=t,n.computeStackTraceFromStackProp=e,n}();var j=k;function T(e,t){var r=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(r>>16)<<16|65535&r}function F(e,t,r,n,o,i){return T((a=T(T(t,e),T(n,i)))<<(s=o)|a>>>32-s,r);var a,s}function A(e,t,r,n,o,i,a){return F(t&r|~t&n,e,t,o,i,a)}function B(e,t,r,n,o,i,a){return F(t&n|r&~n,e,t,o,i,a)}function D(e,t,r,n,o,i,a){return F(t^r^n,e,t,o,i,a)}function H(e,t,r,n,o,i,a){return F(r^(t|~n),e,t,o,i,a)}function L(e,t){var r,n,o,i,a;e[t>>5]|=128<<t%32,e[14+(t+64>>>9<<4)]=t;var s=1732584193,c=-271733879,l=-1732584194,u=271733878;for(r=0;r<e.length;r+=16)n=s,o=c,i=l,a=u,c=H(c=H(c=H(c=H(c=D(c=D(c=D(c=D(c=B(c=B(c=B(c=B(c=A(c=A(c=A(c=A(c,l=A(l,u=A(u,s=A(s,c,l,u,e[r],7,-680876936),c,l,e[r+1],12,-389564586),s,c,e[r+2],17,606105819),u,s,e[r+3],22,-1044525330),l=A(l,u=A(u,s=A(s,c,l,u,e[r+4],7,-176418897),c,l,e[r+5],12,1200080426),s,c,e[r+6],17,-1473231341),u,s,e[r+7],22,-45705983),l=A(l,u=A(u,s=A(s,c,l,u,e[r+8],7,1770035416),c,l,e[r+9],12,-1958414417),s,c,e[r+10],17,-42063),u,s,e[r+11],22,-1990404162),l=A(l,u=A(u,s=A(s,c,l,u,e[r+12],7,1804603682),c,l,e[r+13],12,-40341101),s,c,e[r+14],17,-1502002290),u,s,e[r+15],22,1236535329),l=B(l,u=B(u,s=B(s,c,l,u,e[r+1],5,-165796510),c,l,e[r+6],9,-1069501632),s,c,e[r+11],14,643717713),u,s,e[r],20,-373897302),l=B(l,u=B(u,s=B(s,c,l,u,e[r+5],5,-701558691),c,l,e[r+10],9,38016083),s,c,e[r+15],14,-660478335),u,s,e[r+4],20,-405537848),l=B(l,u=B(u,s=B(s,c,l,u,e[r+9],5,568446438),c,l,e[r+14],9,-1019803690),s,c,e[r+3],14,-187363961),u,s,e[r+8],20,1163531501),l=B(l,u=B(u,s=B(s,c,l,u,e[r+13],5,-1444681467),c,l,e[r+2],9,-51403784),s,c,e[r+7],14,1735328473),u,s,e[r+12],20,-1926607734),l=D(l,u=D(u,s=D(s,c,l,u,e[r+5],4,-378558),c,l,e[r+8],11,-2022574463),s,c,e[r+11],16,1839030562),u,s,e[r+14],23,-35309556),l=D(l,u=D(u,s=D(s,c,l,u,e[r+1],4,-1530992060),c,l,e[r+4],11,1272893353),s,c,e[r+7],16,-155497632),u,s,e[r+10],23,-1094730640),l=D(l,u=D(u,s=D(s,c,l,u,e[r+13],4,681279174),c,l,e[r],11,-358537222),s,c,e[r+3],16,-722521979),u,s,e[r+6],23,76029189),l=D(l,u=D(u,s=D(s,c,l,u,e[r+9],4,-640364487),c,l,e[r+12],11,-421815835),s,c,e[r+15],16,530742520),u,s,e[r+2],23,-995338651),l=H(l,u=H(u,s=H(s,c,l,u,e[r],6,-198630844),c,l,e[r+7],10,1126891415),s,c,e[r+14],15,-1416354905),u,s,e[r+5],21,-57434055),l=H(l,u=H(u,s=H(s,c,l,u,e[r+12],6,1700485571),c,l,e[r+3],10,-1894986606),s,c,e[r+10],15,-1051523),u,s,e[r+1],21,-2054922799),l=H(l,u=H(u,s=H(s,c,l,u,e[r+8],6,1873313359),c,l,e[r+15],10,-30611744),s,c,e[r+6],15,-1560198380),u,s,e[r+13],21,1309151649),l=H(l,u=H(u,s=H(s,c,l,u,e[r+4],6,-145523070),c,l,e[r+11],10,-1120210379),s,c,e[r+2],15,718787259),u,s,e[r+9],21,-343485551),s=T(s,n),c=T(c,o),l=T(l,i),u=T(u,a);return[s,c,l,u]}function P(e){var t,r="",n=32*e.length;for(t=0;t<n;t+=8)r+=String.fromCharCode(e[t>>5]>>>t%32&255);return r}function I(e){var t,r=[];for(r[(e.length>>2)-1]=void 0,t=0;t<r.length;t+=1)r[t]=0;var n=8*e.length;for(t=0;t<n;t+=8)r[t>>5]|=(255&e.charCodeAt(t/8))<<t%32;return r}function U(e){var t,r,n="";for(r=0;r<e.length;r+=1)t=e.charCodeAt(r),n+="0123456789abcdef".charAt(t>>>4&15)+"0123456789abcdef".charAt(15&t);return n}function N(e){return unescape(encodeURIComponent(e))}function M(e){return function(e){return P(L(I(e),8*e.length))}(N(e))}function q(e,t){return function(e,t){var r,n,o=I(e),i=[],a=[];for(i[15]=a[15]=void 0,o.length>16&&(o=L(o,8*e.length)),r=0;r<16;r+=1)i[r]=909522486^o[r],a[r]=1549556828^o[r];return n=L(i.concat(I(t)),512+8*t.length),P(L(a.concat(n),640))}(N(e),N(t))}var z=function(e,t,r){return t?r?q(t,e):U(q(t,e)):r?M(e):U(M(e))};function K(e){this.name="RavenConfigError",this.message=e}K.prototype=new Error,K.prototype.constructor=K;var W=K,V=function(e,t,r){var n=e[t],o=e;if(t in e){var i="warn"===t?"warning":t;e[t]=function(){var e=[].slice.call(arguments),a=w.safeJoin(e," "),s={level:i,logger:"console",extra:{arguments:e}};"assert"===t?!1===e[0]&&(a="Assertion failed: "+(w.safeJoin(e.slice(1)," ")||"console.assert"),s.extra.arguments=e.slice(1),r&&r(a,s)):r&&r(a,s),n&&Function.prototype.apply.call(n,o,e)}}},$=w.isError,J=w.isObject,X=w.isPlainObject,G=w.isErrorEvent,Y=w.isUndefined,Z=w.isFunction,Q=w.isString,ee=w.isArray,te=w.isEmptyObject,re=w.each,ne=w.objectMerge,oe=w.truncate,ie=w.objectFrozen,ae=w.hasKey,se=w.joinRegExp,ce=w.urlencode,le=w.uuid4,ue=w.htmlTreeAsString,he=w.isSameException,pe=w.isSameStacktrace,fe=w.parseUrl,de=w.fill,ge=w.supportsFetch,_e=w.supportsReferrerPolicy,ve=w.serializeKeysForMessage,me=w.serializeException,be=w.sanitize,ye=V,Ee="source protocol user pass host port path".split(" "),we=/^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/;function ke(){return+new Date}var xe="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},Se=xe.document,Oe=xe.navigator;function Ce(e,t){return Z(t)?function(r){return t(r,e)}:t}function Re(){for(var e in this._hasJSON=!("object"!=typeof JSON||!JSON.stringify),this._hasDocument=!Y(Se),this._hasNavigator=!Y(Oe),this._lastCapturedException=null,this._lastData=null,this._lastEventId=null,this._globalServer=null,this._globalKey=null,this._globalProject=null,this._globalContext={},this._globalOptions={release:xe.SENTRY_RELEASE&&xe.SENTRY_RELEASE.id,logger:"javascript",ignoreErrors:[],ignoreUrls:[],whitelistUrls:[],includePaths:[],headers:null,collectWindowErrors:!0,captureUnhandledRejections:!0,maxMessageLength:0,maxUrlLength:250,stackTraceLimit:50,autoBreadcrumbs:!0,instrument:!0,sampleRate:1,sanitizeKeys:[]},this._fetchDefaults={method:"POST",keepalive:!0,referrerPolicy:_e()?"origin":""},this._ignoreOnError=0,this._isRavenInstalled=!1,this._originalErrorStackTraceLimit=Error.stackTraceLimit,this._originalConsole=xe.console||{},this._originalConsoleMethods={},this._plugins=[],this._startTime=ke(),this._wrappedBuiltIns=[],this._breadcrumbs=[],this._lastCapturedEvent=null,this._keypressTimeout,this._location=xe.location,this._lastHref=this._location&&this._location.href,this._resetBackoff(),this._originalConsole)this._originalConsoleMethods[e]=this._originalConsole[e]}Re.prototype={VERSION:"3.24.2",debug:!1,TraceKit:j,config:function(e,t){var r=this;if(r._globalServer)return this._logDebug("error","Error: Raven has already been configured"),r;if(!e)return r;var n=r._globalOptions;t&&re(t,function(e,t){"tags"===e||"extra"===e||"user"===e?r._globalContext[e]=t:n[e]=t}),r.setDSN(e),n.ignoreErrors.push(/^Script error\.?$/),n.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/),n.ignoreErrors=se(n.ignoreErrors),n.ignoreUrls=!!n.ignoreUrls.length&&se(n.ignoreUrls),n.whitelistUrls=!!n.whitelistUrls.length&&se(n.whitelistUrls),n.includePaths=se(n.includePaths),n.maxBreadcrumbs=Math.max(0,Math.min(n.maxBreadcrumbs||100,100));var o={xhr:!0,console:!0,dom:!0,location:!0,sentry:!0},i=n.autoBreadcrumbs;"[object Object]"==={}.toString.call(i)?i=ne(o,i):!1!==i&&(i=o),n.autoBreadcrumbs=i;var a={tryCatch:!0},s=n.instrument;return"[object Object]"==={}.toString.call(s)?s=ne(a,s):!1!==s&&(s=a),n.instrument=s,j.collectWindowErrors=!!n.collectWindowErrors,r},install:function(){var e=this;return e.isSetup()&&!e._isRavenInstalled&&(j.report.subscribe(function(){e._handleOnErrorStackInfo.apply(e,arguments)}),e._globalOptions.captureUnhandledRejections&&e._attachPromiseRejectionHandler(),e._patchFunctionToString(),e._globalOptions.instrument&&e._globalOptions.instrument.tryCatch&&e._instrumentTryCatch(),e._globalOptions.autoBreadcrumbs&&e._instrumentBreadcrumbs(),e._drainPlugins(),e._isRavenInstalled=!0),Error.stackTraceLimit=e._globalOptions.stackTraceLimit,this},setDSN:function(e){var t=this._parseDSN(e),r=t.path.lastIndexOf("/"),n=t.path.substr(1,r);this._dsn=e,this._globalKey=t.user,this._globalSecret=t.pass&&t.pass.substr(1),this._globalProject=t.path.substr(r+1),this._globalServer=this._getGlobalServer(t),this._globalEndpoint=this._globalServer+"/"+n+"api/"+this._globalProject+"/store/",this._resetBackoff()},context:function(e,t,r){return Z(e)&&(r=t||[],t=e,e=void 0),this.wrap(e,t).apply(this,r)},wrap:function(e,t,r){var n=this;if(Y(t)&&!Z(e))return e;if(Z(e)&&(t=e,e=void 0),!Z(t))return t;try{if(t.__raven__)return t;if(t.__raven_wrapper__)return t.__raven_wrapper__}catch(e){return t}function o(){var o=[],i=arguments.length,a=!e||e&&!1!==e.deep;for(r&&Z(r)&&r.apply(this,arguments);i--;)o[i]=a?n.wrap(e,arguments[i]):arguments[i];try{return t.apply(this,o)}catch(t){throw n._ignoreNextOnError(),n.captureException(t,e),t}}for(var i in t)ae(t,i)&&(o[i]=t[i]);return o.prototype=t.prototype,t.__raven_wrapper__=o,o.__raven__=!0,o.__orig__=t,o},uninstall:function(){return j.report.uninstall(),this._detachPromiseRejectionHandler(),this._unpatchFunctionToString(),this._restoreBuiltIns(),this._restoreConsole(),Error.stackTraceLimit=this._originalErrorStackTraceLimit,this._isRavenInstalled=!1,this},_promiseRejectionHandler:function(e){this._logDebug("debug","Raven caught unhandled promise rejection:",e),this.captureException(e.reason,{extra:{unhandledPromiseRejection:!0}})},_attachPromiseRejectionHandler:function(){return this._promiseRejectionHandler=this._promiseRejectionHandler.bind(this),xe.addEventListener&&xe.addEventListener("unhandledrejection",this._promiseRejectionHandler),this},_detachPromiseRejectionHandler:function(){return xe.removeEventListener&&xe.removeEventListener("unhandledrejection",this._promiseRejectionHandler),this},captureException:function(e,t){if(t=ne({trimHeadFrames:0},t||{}),G(e)&&e.error)e=e.error;else if($(e))e=e;else{if(!X(e))return this.captureMessage(e,ne(t,{stacktrace:!0,trimHeadFrames:t.trimHeadFrames+1}));t=this._getCaptureExceptionOptionsFromPlainObject(t,e),e=new Error(t.message)}this._lastCapturedException=e;try{var r=j.computeStackTrace(e);this._handleStackInfo(r,t)}catch(t){if(e!==t)throw t}return this},_getCaptureExceptionOptionsFromPlainObject:function(e,t){var r=Object.keys(t).sort(),n=ne(e,{message:"Non-Error exception captured with keys: "+ve(r),fingerprint:[z(r)],extra:e.extra||{}});return n.extra.__serialized__=me(t),n},captureMessage:function(e,t){if(!this._globalOptions.ignoreErrors.test||!this._globalOptions.ignoreErrors.test(e)){var r,n=ne({message:e+=""},t=t||{});try{throw new Error(e)}catch(e){r=e}r.name=null;var o=j.computeStackTrace(r),i=ee(o.stack)&&o.stack[1];i&&"Raven.captureException"===i.func&&(i=o.stack[2]);var a=i&&i.url||"";if((!this._globalOptions.ignoreUrls.test||!this._globalOptions.ignoreUrls.test(a))&&(!this._globalOptions.whitelistUrls.test||this._globalOptions.whitelistUrls.test(a))){if(this._globalOptions.stacktrace||t&&t.stacktrace){n.fingerprint=null==n.fingerprint?e:n.fingerprint,(t=ne({trimHeadFrames:0},t)).trimHeadFrames+=1;var s=this._prepareFrames(o,t);n.stacktrace={frames:s.reverse()}}return n.fingerprint&&(n.fingerprint=ee(n.fingerprint)?n.fingerprint:[n.fingerprint]),this._send(n),this}}},captureBreadcrumb:function(e){var t=ne({timestamp:ke()/1e3},e);if(Z(this._globalOptions.breadcrumbCallback)){var r=this._globalOptions.breadcrumbCallback(t);if(J(r)&&!te(r))t=r;else if(!1===r)return this}return this._breadcrumbs.push(t),this._breadcrumbs.length>this._globalOptions.maxBreadcrumbs&&this._breadcrumbs.shift(),this},addPlugin:function(e){var t=[].slice.call(arguments,1);return this._plugins.push([e,t]),this._isRavenInstalled&&this._drainPlugins(),this},setUserContext:function(e){return this._globalContext.user=e,this},setExtraContext:function(e){return this._mergeContext("extra",e),this},setTagsContext:function(e){return this._mergeContext("tags",e),this},clearContext:function(){return this._globalContext={},this},getContext:function(){return JSON.parse(r(this._globalContext))},setEnvironment:function(e){return this._globalOptions.environment=e,this},setRelease:function(e){return this._globalOptions.release=e,this},setDataCallback:function(e){var t=this._globalOptions.dataCallback;return this._globalOptions.dataCallback=Ce(t,e),this},setBreadcrumbCallback:function(e){var t=this._globalOptions.breadcrumbCallback;return this._globalOptions.breadcrumbCallback=Ce(t,e),this},setShouldSendCallback:function(e){var t=this._globalOptions.shouldSendCallback;return this._globalOptions.shouldSendCallback=Ce(t,e),this},setTransport:function(e){return this._globalOptions.transport=e,this},lastException:function(){return this._lastCapturedException},lastEventId:function(){return this._lastEventId},isSetup:function(){return!!this._hasJSON&&(!!this._globalServer||(this.ravenNotConfiguredError||(this.ravenNotConfiguredError=!0,this._logDebug("error","Error: Raven has not been configured.")),!1))},afterLoad:function(){var e=xe.RavenConfig;e&&this.config(e.dsn,e.config).install()},showReportDialog:function(e){if(Se){var t=(e=e||{}).eventId||this.lastEventId();if(!t)throw new W("Missing eventId");var r=e.dsn||this._dsn;if(!r)throw new W("Missing DSN");var n=encodeURIComponent,o="";o+="?eventId="+n(t),o+="&dsn="+n(r);var i=e.user||this._globalContext.user;i&&(i.name&&(o+="&name="+n(i.name)),i.email&&(o+="&email="+n(i.email)));var a=this._getGlobalServer(this._parseDSN(r)),s=Se.createElement("script");s.async=!0,s.src=a+"/api/embed/error-page/"+o,(Se.head||Se.body).appendChild(s)}},_ignoreNextOnError:function(){var e=this;this._ignoreOnError+=1,setTimeout(function(){e._ignoreOnError-=1})},_triggerEvent:function(e,t){var r,n;if(this._hasDocument){for(n in t=t||{},e="raven"+e.substr(0,1).toUpperCase()+e.substr(1),Se.createEvent?(r=Se.createEvent("HTMLEvents")).initEvent(e,!0,!0):(r=Se.createEventObject()).eventType=e,t)ae(t,n)&&(r[n]=t[n]);if(Se.createEvent)Se.dispatchEvent(r);else try{Se.fireEvent("on"+r.eventType.toLowerCase(),r)}catch(e){}}},_breadcrumbEventHandler:function(e){var t=this;return function(r){if(t._keypressTimeout=null,t._lastCapturedEvent!==r){var n;t._lastCapturedEvent=r;try{n=ue(r.target)}catch(e){n="<unknown>"}t.captureBreadcrumb({category:"ui."+e,message:n})}}},_keypressEventHandler:function(){var e=this;return function(t){var r;try{r=t.target}catch(e){return}var n=r&&r.tagName;if(n&&("INPUT"===n||"TEXTAREA"===n||r.isContentEditable)){var o=e._keypressTimeout;o||e._breadcrumbEventHandler("input")(t),clearTimeout(o),e._keypressTimeout=setTimeout(function(){e._keypressTimeout=null},1e3)}}},_captureUrlChange:function(e,t){var r=fe(this._location.href),n=fe(t),o=fe(e);this._lastHref=t,r.protocol===n.protocol&&r.host===n.host&&(t=n.relative),r.protocol===o.protocol&&r.host===o.host&&(e=o.relative),this.captureBreadcrumb({category:"navigation",data:{to:t,from:e}})},_patchFunctionToString:function(){var e=this;e._originalFunctionToString=Function.prototype.toString,Function.prototype.toString=function(){return"function"==typeof this&&this.__raven__?e._originalFunctionToString.apply(this.__orig__,arguments):e._originalFunctionToString.apply(this,arguments)}},_unpatchFunctionToString:function(){this._originalFunctionToString&&(Function.prototype.toString=this._originalFunctionToString)},_instrumentTryCatch:function(){var e=this,t=e._wrappedBuiltIns;function r(t){return function(r,n){for(var o=new Array(arguments.length),i=0;i<o.length;++i)o[i]=arguments[i];var a=o[0];return Z(a)&&(o[0]=e.wrap(a)),t.apply?t.apply(this,o):t(o[0],o[1])}}var n=this._globalOptions.autoBreadcrumbs;function o(r){var o=xe[r]&&xe[r].prototype;o&&o.hasOwnProperty&&o.hasOwnProperty("addEventListener")&&(de(o,"addEventListener",function(t){return function(o,i,a,s){try{i&&i.handleEvent&&(i.handleEvent=e.wrap(i.handleEvent))}catch(e){}var c,l,u;return n&&n.dom&&("EventTarget"===r||"Node"===r)&&(l=e._breadcrumbEventHandler("click"),u=e._keypressEventHandler(),c=function(e){if(e){var t;try{t=e.type}catch(e){return}return"click"===t?l(e):"keypress"===t?u(e):void 0}}),t.call(this,o,e.wrap(i,void 0,c),a,s)}},t),de(o,"removeEventListener",function(e){return function(t,r,n,o){try{r=r&&(r.__raven_wrapper__?r.__raven_wrapper__:r)}catch(e){}return e.call(this,t,r,n,o)}},t))}de(xe,"setTimeout",r,t),de(xe,"setInterval",r,t),xe.requestAnimationFrame&&de(xe,"requestAnimationFrame",function(t){return function(r){return t(e.wrap(r))}},t);for(var i=["EventTarget","Window","Node","ApplicationCache","AudioTrackList","ChannelMergerNode","CryptoOperation","EventSource","FileReader","HTMLUnknownElement","IDBDatabase","IDBRequest","IDBTransaction","KeyOperation","MediaController","MessagePort","ModalWindow","Notification","SVGElementInstance","Screen","TextTrack","TextTrackCue","TextTrackList","WebSocket","WebSocketWorker","Worker","XMLHttpRequest","XMLHttpRequestEventTarget","XMLHttpRequestUpload"],a=0;a<i.length;a++)o(i[a])},_instrumentBreadcrumbs:function(){var e=this,t=this._globalOptions.autoBreadcrumbs,r=e._wrappedBuiltIns;function n(t,r){t in r&&Z(r[t])&&de(r,t,function(t){return e.wrap(t)})}if(t.xhr&&"XMLHttpRequest"in xe){var o=xe.XMLHttpRequest&&xe.XMLHttpRequest.prototype;de(o,"open",function(t){return function(r,n){return Q(n)&&-1===n.indexOf(e._globalKey)&&(this.__raven_xhr={method:r,url:n,status_code:null}),t.apply(this,arguments)}},r),de(o,"send",function(t){return function(){var r=this;function o(){if(r.__raven_xhr&&4===r.readyState){try{r.__raven_xhr.status_code=r.status}catch(e){}e.captureBreadcrumb({type:"http",category:"xhr",data:r.__raven_xhr})}}for(var i=["onload","onerror","onprogress"],a=0;a<i.length;a++)n(i[a],r);return"onreadystatechange"in r&&Z(r.onreadystatechange)?de(r,"onreadystatechange",function(t){return e.wrap(t,void 0,o)}):r.onreadystatechange=o,t.apply(this,arguments)}},r)}t.xhr&&ge()&&de(xe,"fetch",function(t){return function(){for(var r=new Array(arguments.length),n=0;n<r.length;++n)r[n]=arguments[n];var o,i=r[0],a="GET";if("string"==typeof i?o=i:"Request"in xe&&i instanceof xe.Request?(o=i.url,i.method&&(a=i.method)):o=""+i,-1!==o.indexOf(e._globalKey))return t.apply(this,r);r[1]&&r[1].method&&(a=r[1].method);var s={method:a,url:o,status_code:null};return t.apply(this,r).then(function(t){return s.status_code=t.status,e.captureBreadcrumb({type:"http",category:"fetch",data:s}),t}).catch(function(t){throw e.captureBreadcrumb({type:"http",category:"fetch",data:s,level:"error"}),t})}},r),t.dom&&this._hasDocument&&(Se.addEventListener?(Se.addEventListener("click",e._breadcrumbEventHandler("click"),!1),Se.addEventListener("keypress",e._keypressEventHandler(),!1)):Se.attachEvent&&(Se.attachEvent("onclick",e._breadcrumbEventHandler("click")),Se.attachEvent("onkeypress",e._keypressEventHandler())));var i=xe.chrome,a=!(i&&i.app&&i.app.runtime)&&xe.history&&history.pushState&&history.replaceState;if(t.location&&a){var s=xe.onpopstate;xe.onpopstate=function(){var t=e._location.href;if(e._captureUrlChange(e._lastHref,t),s)return s.apply(this,arguments)};var c=function(t){return function(){var r=arguments.length>2?arguments[2]:void 0;return r&&e._captureUrlChange(e._lastHref,r+""),t.apply(this,arguments)}};de(history,"pushState",c,r),de(history,"replaceState",c,r)}if(t.console&&"console"in xe&&console.log){var l=function(t,r){e.captureBreadcrumb({message:t,level:r.level,category:"console"})};re(["debug","info","warn","error","log"],function(e,t){ye(console,t,l)})}},_restoreBuiltIns:function(){for(var e;this._wrappedBuiltIns.length;){var t=(e=this._wrappedBuiltIns.shift())[0],r=e[1],n=e[2];t[r]=n}},_restoreConsole:function(){for(var e in this._originalConsoleMethods)this._originalConsole[e]=this._originalConsoleMethods[e]},_drainPlugins:function(){var e=this;re(this._plugins,function(t,r){var n=r[0],o=r[1];n.apply(e,[e].concat(o))})},_parseDSN:function(e){var t=we.exec(e),r={},n=7;try{for(;n--;)r[Ee[n]]=t[n]||""}catch(t){throw new W("Invalid DSN: "+e)}if(r.pass&&!this._globalOptions.allowSecretKey)throw new W("Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key");return r},_getGlobalServer:function(e){var t="//"+e.host+(e.port?":"+e.port:"");return e.protocol&&(t=e.protocol+":"+t),t},_handleOnErrorStackInfo:function(){this._ignoreOnError||this._handleStackInfo.apply(this,arguments)},_handleStackInfo:function(e,t){var r=this._prepareFrames(e,t);this._triggerEvent("handle",{stackInfo:e,options:t}),this._processException(e.name,e.message,e.url,e.lineno,r,t)},_prepareFrames:function(e,t){var r=this,n=[];if(e.stack&&e.stack.length&&(re(e.stack,function(t,o){var i=r._normalizeFrame(o,e.url);i&&n.push(i)}),t&&t.trimHeadFrames))for(var o=0;o<t.trimHeadFrames&&o<n.length;o++)n[o].in_app=!1;return n=n.slice(0,this._globalOptions.stackTraceLimit)},_normalizeFrame:function(e,t){var r={filename:e.url,lineno:e.line,colno:e.column,function:e.func||"?"};return e.url||(r.filename=t),r.in_app=!(this._globalOptions.includePaths.test&&!this._globalOptions.includePaths.test(r.filename)||/(Raven|TraceKit)\./.test(r.function)||/raven\.(min\.)?js$/.test(r.filename)),r},_processException:function(e,t,r,n,o,i){var a,s=(e?e+": ":"")+(t||"");if((!this._globalOptions.ignoreErrors.test||!this._globalOptions.ignoreErrors.test(t)&&!this._globalOptions.ignoreErrors.test(s))&&(o&&o.length?(r=o[0].filename||r,o.reverse(),a={frames:o}):r&&(a={frames:[{filename:r,lineno:n,in_app:!0}]}),(!this._globalOptions.ignoreUrls.test||!this._globalOptions.ignoreUrls.test(r))&&(!this._globalOptions.whitelistUrls.test||this._globalOptions.whitelistUrls.test(r)))){var c=ne({exception:{values:[{type:e,value:t,stacktrace:a}]},culprit:r},i);this._send(c)}},_trimPacket:function(e){var t=this._globalOptions.maxMessageLength;if(e.message&&(e.message=oe(e.message,t)),e.exception){var r=e.exception.values[0];r.value=oe(r.value,t)}var n=e.request;return n&&(n.url&&(n.url=oe(n.url,this._globalOptions.maxUrlLength)),n.Referer&&(n.Referer=oe(n.Referer,this._globalOptions.maxUrlLength))),e.breadcrumbs&&e.breadcrumbs.values&&this._trimBreadcrumbs(e.breadcrumbs),e},_trimBreadcrumbs:function(e){for(var t,r,n,o=["to","from","url"],i=0;i<e.values.length;++i)if((r=e.values[i]).hasOwnProperty("data")&&J(r.data)&&!ie(r.data)){n=ne({},r.data);for(var a=0;a<o.length;++a)t=o[a],n.hasOwnProperty(t)&&n[t]&&(n[t]=oe(n[t],this._globalOptions.maxUrlLength));e.values[i].data=n}},_getHttpData:function(){if(this._hasNavigator||this._hasDocument){var e={};return this._hasNavigator&&Oe.userAgent&&(e.headers={"User-Agent":navigator.userAgent}),xe.location&&xe.location.href&&(e.url=xe.location.href),this._hasDocument&&Se.referrer&&(e.headers||(e.headers={}),e.headers.Referer=Se.referrer),e}},_resetBackoff:function(){this._backoffDuration=0,this._backoffStart=null},_shouldBackoff:function(){return this._backoffDuration&&ke()-this._backoffStart<this._backoffDuration},_isRepeatData:function(e){var t=this._lastData;return!(!t||e.message!==t.message||e.culprit!==t.culprit)&&(e.stacktrace||t.stacktrace?pe(e.stacktrace,t.stacktrace):!e.exception&&!t.exception||he(e.exception,t.exception))},_setBackoffState:function(e){if(!this._shouldBackoff()){var t=e.status;if(400===t||401===t||429===t){var r;try{r=ge()?e.headers.get("Retry-After"):e.getResponseHeader("Retry-After"),r=1e3*parseInt(r,10)}catch(e){}this._backoffDuration=r||(2*this._backoffDuration||1e3),this._backoffStart=ke()}}},_send:function(e){var t=this._globalOptions,r={project:this._globalProject,logger:t.logger,platform:"javascript"},n=this._getHttpData();n&&(r.request=n),e.trimHeadFrames&&delete e.trimHeadFrames,(e=ne(r,e)).tags=ne(ne({},this._globalContext.tags),e.tags),e.extra=ne(ne({},this._globalContext.extra),e.extra),e.extra["session:duration"]=ke()-this._startTime,this._breadcrumbs&&this._breadcrumbs.length>0&&(e.breadcrumbs={values:[].slice.call(this._breadcrumbs,0)}),this._globalContext.user&&(e.user=this._globalContext.user),t.environment&&(e.environment=t.environment),t.release&&(e.release=t.release),t.serverName&&(e.server_name=t.serverName),e=this._sanitizeData(e),Object.keys(e).forEach(function(t){(null==e[t]||""===e[t]||te(e[t]))&&delete e[t]}),Z(t.dataCallback)&&(e=t.dataCallback(e)||e),e&&!te(e)&&(Z(t.shouldSendCallback)&&!t.shouldSendCallback(e)||(this._shouldBackoff()?this._logDebug("warn","Raven dropped error due to backoff: ",e):"number"==typeof t.sampleRate?Math.random()<t.sampleRate&&this._sendProcessedPayload(e):this._sendProcessedPayload(e)))},_sanitizeData:function(e){return be(e,this._globalOptions.sanitizeKeys)},_getUuid:function(){return le()},_sendProcessedPayload:function(e,t){var r=this,n=this._globalOptions;if(this.isSetup())if(e=this._trimPacket(e),this._globalOptions.allowDuplicates||!this._isRepeatData(e)){this._lastEventId=e.event_id||(e.event_id=this._getUuid()),this._lastData=e,this._logDebug("debug","Raven about to send:",e);var o={sentry_version:"7",sentry_client:"raven-js/"+this.VERSION,sentry_key:this._globalKey};this._globalSecret&&(o.sentry_secret=this._globalSecret);var i=e.exception&&e.exception.values[0];this._globalOptions.autoBreadcrumbs&&this._globalOptions.autoBreadcrumbs.sentry&&this.captureBreadcrumb({category:"sentry",message:i?(i.type?i.type+": ":"")+i.value:e.message,event_id:e.event_id,level:e.level||"error"});var a=this._globalEndpoint;(n.transport||this._makeRequest).call(this,{url:a,auth:o,data:e,options:n,onSuccess:function(){r._resetBackoff(),r._triggerEvent("success",{data:e,src:a}),t&&t()},onError:function(n){r._logDebug("error","Raven transport failed to send: ",n),n.request&&r._setBackoffState(n.request),r._triggerEvent("failure",{data:e,src:a}),n=n||new Error("Raven send failed (no additional details provided)"),t&&t(n)}})}else this._logDebug("warn","Raven dropped repeat event: ",e)},_makeRequest:function(e){var t=e.url+"?"+ce(e.auth),n=null,o={};if(e.options.headers&&(n=this._evaluateHash(e.options.headers)),e.options.fetchParameters&&(o=this._evaluateHash(e.options.fetchParameters)),ge()){o.body=r(e.data);var i=ne({},this._fetchDefaults),a=ne(i,o);return n&&(a.headers=n),xe.fetch(t,a).then(function(t){if(t.ok)e.onSuccess&&e.onSuccess();else{var r=new Error("Sentry error code: "+t.status);r.request=t,e.onError&&e.onError(r)}}).catch(function(){e.onError&&e.onError(new Error("Sentry error code: network unavailable"))})}var s=xe.XMLHttpRequest&&new xe.XMLHttpRequest;s&&(("withCredentials"in s||"undefined"!=typeof XDomainRequest)&&("withCredentials"in s?s.onreadystatechange=function(){if(4===s.readyState)if(200===s.status)e.onSuccess&&e.onSuccess();else if(e.onError){var t=new Error("Sentry error code: "+s.status);t.request=s,e.onError(t)}}:(s=new XDomainRequest,t=t.replace(/^https?:/,""),e.onSuccess&&(s.onload=e.onSuccess),e.onError&&(s.onerror=function(){var t=new Error("Sentry error code: XDomainRequest");t.request=s,e.onError(t)})),s.open("POST",t),n&&re(n,function(e,t){s.setRequestHeader(e,t)}),s.send(r(e.data))))},_evaluateHash:function(e){var t={};for(var r in e)if(e.hasOwnProperty(r)){var n=e[r];t[r]="function"==typeof n?n():n}return t},_logDebug:function(e){this._originalConsoleMethods[e]&&(this.debug||this._globalOptions.debug)&&Function.prototype.apply.call(this._originalConsoleMethods[e],this._originalConsole,[].slice.call(arguments,1))},_mergeContext:function(e,t){Y(t)?delete this._globalContext[e]:this._globalContext[e]=ne(this._globalContext[e]||{},t)}},Re.prototype.setUser=Re.prototype.setUserContext,Re.prototype.setReleaseContext=Re.prototype.setRelease;var je=Re,Te="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},Fe=Te.Raven,Ae=new je;Ae.noConflict=function(){return Te.Raven=Fe,Ae},Ae.afterLoad();var Be,De,He,Le,Pe,Ie,Ue,Ne=Ae,Me=je;Ne.Client=Me,(Ue="plyr.io"===window.location.host)&&Ne.config("https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555").install(),document.addEventListener("DOMContentLoaded",function(){Ne.context(function(){window.shr&&window.shr.setup({count:{classname:"button__count"}}),document.addEventListener("focusout",function(e){e.target.classList.remove("tab-focus")}),document.addEventListener("keydown",function(e){9===e.keyCode&&setTimeout(function(){document.activeElement.classList.add("tab-focus")},0)});var e=new Plyr("#player",{debug:!0,title:"View From A Blue Moon",iconUrl:"../dist/plyr.svg",keyboard:{global:!0},tooltips:{controls:!0},captions:{active:!0},keys:{google:"AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c"},ads:{enabled:!0,publisherId:"918848828995742"}});window.player=e;var t=document.querySelectorAll("[data-source]"),r={video:"video",audio:"audio",youtube:"youtube",vimeo:"vimeo"},n=window.location.hash.replace("#",""),o=window.history&&window.history.pushState;function i(e,t,r){e&&e.classList[r?"add":"remove"](t)}function a(o,a){if(o in r&&(a||o!==n)&&(n.length||o!==r.video)){switch(o){case r.video:e.source={type:"video",title:"View From A Blue Moon",sources:[{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-576p.mp4",type:"video/mp4",size:576},{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-720p.mp4",type:"video/mp4",size:720},{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1080p.mp4",type:"video/mp4",size:1080},{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1440p.mp4",type:"video/mp4",size:1440}],poster:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg",tracks:[{kind:"captions",label:"English",srclang:"en",src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt",default:!0},{kind:"captions",label:"French",srclang:"fr",src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt"}]};break;case r.audio:e.source={type:"audio",title:"Kishi Bashi &ndash; &ldquo;It All Began With A Burst&rdquo;",sources:[{src:"https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3",type:"audio/mp3"},{src:"https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg",type:"audio/ogg"}]};break;case r.youtube:e.source={type:"video",sources:[{src:"https://youtube.com/watch?v=bTqVqk7FSmY",provider:"youtube"}]};break;case r.vimeo:e.source={type:"video",sources:[{src:"https://vimeo.com/76979871",provider:"vimeo"}]}}n=o,Array.from(t).forEach(function(e){return i(e.parentElement,"active",!1)}),i(document.querySelector('[data-source="'+o+'"]'),"active",!0),Array.from(document.querySelectorAll(".plyr__cite")).forEach(function(e){e.setAttribute("hidden","")}),document.querySelector(".plyr__cite--"+o).removeAttribute("hidden")}}if(Array.from(t).forEach(function(e){e.addEventListener("click",function(){var t=e.getAttribute("data-source");a(t),o&&window.history.pushState({type:t},"","#"+t)})}),window.addEventListener("popstate",function(e){e.state&&"type"in e.state&&a(e.state.type)}),o){var s=!n.length;s&&(n=r.video),n in r&&window.history.replaceState({type:n},"",s?"":"#"+n),n!==r.video&&a(n,!0)}})}),Ue&&(Be=window,De=document,He="script",Le="ga",Be.GoogleAnalyticsObject=Le,Be.ga=Be.ga||function(){(Be.ga.q=Be.ga.q||[]).push(arguments)},Be.ga.l=1*new Date,Pe=De.createElement(He),Ie=De.getElementsByTagName(He)[0],Pe.async=1,Pe.src="https://www.google-analytics.com/analytics.js",Ie.parentNode.insertBefore(Pe,Ie),window.ga("create","UA-40881672-11","auto"),window.ga("send","pageview"))}();
+"object"==typeof navigator&&function(){"use strict";var t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};var e,r=(function(t,e){function r(t,e){for(var r=0;r<t.length;++r)if(t[r]===e)return r;return-1}function n(t,e){var n=[],o=[];return null==e&&(e=function(t,e){return n[0]===e?"[Circular ~]":"[Circular ~."+o.slice(0,r(n,e)).join(".")+"]"}),function(i,a){if(n.length>0){var s=r(n,this);~s?n.splice(s+1):n.push(this),~s?o.splice(s,1/0,i):o.push(i),~r(n,a)&&(a=e.call(this,i,a))}else n.push(a);return null==t?a instanceof Error?function(t){var e={stack:t.stack,message:t.message,name:t.name};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e}(a):a:t.call(this,i,a)}}(t.exports=function(t,e,r,o){return JSON.stringify(t,n(e,o),r)}).getSerialize=n}(e={exports:{}},e.exports),e.exports),n=(r.getSerialize,"undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?self:{});function o(t){return void 0===t}function i(t){return"[object Object]"===Object.prototype.toString.call(t)}function a(t){return"[object String]"===Object.prototype.toString.call(t)}function s(t){return"[object Array]"===Object.prototype.toString.call(t)}function c(){if(!("fetch"in n))return!1;try{return new Headers,new Request(""),new Response,!0}catch(t){return!1}}function l(t,e){var r,n;if(o(t.length))for(r in t)p(t,r)&&e.call(null,r,t[r]);else if(n=t.length)for(r=0;r<n;r++)e.call(null,r,t[r])}function u(t,e){if("number"!=typeof e)throw new Error("2nd argument to `truncate` function should be a number");return"string"!=typeof t||0===e?t:t.length<=e?t:t.substr(0,e)+"…"}function p(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function h(t){for(var e,r=[],n=0,o=t.length;n<o;n++)a(e=t[n])?r.push(e.replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1")):e&&e.source&&r.push(e.source);return new RegExp(r.join("|"),"i")}function f(t){var e,r,n,o,i,s=[];if(!t||!t.tagName)return"";if(s.push(t.tagName.toLowerCase()),t.id&&s.push("#"+t.id),(e=t.className)&&a(e))for(r=e.split(/\s+/),i=0;i<r.length;i++)s.push("."+r[i]);var c=["type","name","title","alt"];for(i=0;i<c.length;i++)n=c[i],(o=t.getAttribute(n))&&s.push("["+n+'="'+o+'"]');return s.join("")}function d(t,e){return!!(!!t^!!e)}function g(t,e){if(d(t,e))return!1;var r,n,o=t.frames,i=e.frames;if(o.length!==i.length)return!1;for(var a=0;a<o.length;a++)if(r=o[a],n=i[a],r.filename!==n.filename||r.lineno!==n.lineno||r.colno!==n.colno||r.function!==n.function)return!1;return!0}var _=3,v=51200,m=40;function b(t){return function(t){return~-encodeURI(t).split(/%..|./).length}(JSON.stringify(t))}function y(t){if("string"==typeof t){return u(t,40)}if("number"==typeof t||"boolean"==typeof t||void 0===t)return t;var e=Object.prototype.toString.call(t);return"[object Object]"===e?"[Object]":"[object Array]"===e?"[Array]":"[object Function]"===e?t.name?"[Function: "+t.name+"]":"[Function]":t}var E={isObject:function(t){return"object"==typeof t&&null!==t},isError:function(t){switch(Object.prototype.toString.call(t)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return t instanceof Error}},isErrorEvent:function(t){return"[object ErrorEvent]"===Object.prototype.toString.call(t)},isDOMError:function(t){return"[object DOMError]"===Object.prototype.toString.call(t)},isDOMException:function(t){return"[object DOMException]"===Object.prototype.toString.call(t)},isUndefined:o,isFunction:function(t){return"function"==typeof t},isPlainObject:i,isString:a,isArray:s,isEmptyObject:function(t){if(!i(t))return!1;for(var e in t)if(t.hasOwnProperty(e))return!1;return!0},supportsErrorEvent:function(){try{return new ErrorEvent(""),!0}catch(t){return!1}},supportsDOMError:function(){try{return new DOMError(""),!0}catch(t){return!1}},supportsDOMException:function(){try{return new DOMException(""),!0}catch(t){return!1}},supportsFetch:c,supportsReferrerPolicy:function(){if(!c())return!1;try{return new Request("pickleRick",{referrerPolicy:"origin"}),!0}catch(t){return!1}},supportsPromiseRejectionEvent:function(){return"function"==typeof PromiseRejectionEvent},wrappedCallback:function(t){return function(e,r){var n=t(e)||e;return r&&r(n)||n}},each:l,objectMerge:function(t,e){return e?(l(e,function(e,r){t[e]=r}),t):t},truncate:u,objectFrozen:function(t){return!!Object.isFrozen&&Object.isFrozen(t)},hasKey:p,joinRegExp:h,urlencode:function(t){var e=[];return l(t,function(t,r){e.push(encodeURIComponent(t)+"="+encodeURIComponent(r))}),e.join("&")},uuid4:function(){var t=n.crypto||n.msCrypto;if(!o(t)&&t.getRandomValues){var e=new Uint16Array(8);t.getRandomValues(e),e[3]=4095&e[3]|16384,e[4]=16383&e[4]|32768;var r=function(t){for(var e=t.toString(16);e.length<4;)e="0"+e;return e};return r(e[0])+r(e[1])+r(e[2])+r(e[3])+r(e[4])+r(e[5])+r(e[6])+r(e[7])}return"xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g,function(t){var e=16*Math.random()|0;return("x"===t?e:3&e|8).toString(16)})},htmlTreeAsString:function(t){for(var e,r=[],n=0,o=0,i=" > ".length;t&&n++<5&&!("html"===(e=f(t))||n>1&&o+r.length*i+e.length>=80);)r.push(e),o+=e.length,t=t.parentNode;return r.reverse().join(" > ")},htmlElementAsString:f,isSameException:function(t,e){return!d(t,e)&&(t=t.values[0],e=e.values[0],t.type===e.type&&t.value===e.value&&(r=t.stacktrace,n=e.stacktrace,(!o(r)||!o(n))&&g(t.stacktrace,e.stacktrace)));var r,n},isSameStacktrace:g,parseUrl:function(t){if("string"!=typeof t)return{};var e=t.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/),r=e[6]||"",n=e[8]||"";return{protocol:e[2],host:e[4],path:e[5],relative:e[5]+r+n}},fill:function(t,e,r,n){if(null!=t){var o=t[e];t[e]=r(o),t[e].__raven__=!0,t[e].__orig__=o,n&&n.push([t,e,o])}},safeJoin:function(t,e){if(!s(t))return"";for(var r=[],n=0;n<t.length;n++)try{r.push(String(t[n]))}catch(t){r.push("[value cannot be serialized]")}return r.join(e)},serializeException:function t(e,n,o){if(!i(e))return e;o="number"!=typeof(n="number"!=typeof n?_:n)?v:o;var a=function t(e,r){return 0===r?y(e):i(e)?Object.keys(e).reduce(function(n,o){return n[o]=t(e[o],r-1),n},{}):Array.isArray(e)?e.map(function(e){return t(e,r-1)}):y(e)}(e,n);return b(r(a))>o?t(e,n-1):a},serializeKeysForMessage:function(t,e){if("number"==typeof t||"string"==typeof t)return t.toString();if(!Array.isArray(t))return"";if(0===(t=t.filter(function(t){return"string"==typeof t})).length)return"[object has no keys]";if(e="number"!=typeof e?m:e,t[0].length>=e)return t[0];for(var r=t.length;r>0;r--){var n=t.slice(0,r).join(", ");if(!(n.length>e))return r===t.length?n:n+"…"}return""},sanitize:function(t,e){if(!s(e)||s(e)&&0===e.length)return t;var n,o=h(e),a="********";try{n=JSON.parse(r(t))}catch(e){return t}return function t(e){return s(e)?e.map(function(e){return t(e)}):i(e)?Object.keys(e).reduce(function(r,n){return o.test(n)?r[n]=a:r[n]=t(e[n]),r},{}):e}(n)}},w={collectWindowErrors:!0,debug:!1},x="undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?self:{},k=[].slice,S="?",O=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;function C(){return"undefined"==typeof document||null==document.location?"":document.location.href}w.report=function(){var t,e,r=[],n=null,o=null,i=null;function a(t,e){var n=null;if(!e||w.collectWindowErrors){for(var o in r)if(r.hasOwnProperty(o))try{r[o].apply(null,[t].concat(k.call(arguments,2)))}catch(t){n=t}if(n)throw n}}function s(e,r,n,o,s){var l=E.isErrorEvent(s)?s.error:s,u=E.isErrorEvent(e)?e.message:e;if(i)w.computeStackTrace.augmentStackTraceWithInitialElement(i,r,n,u),c();else if(l&&E.isError(l))a(w.computeStackTrace(l),!0);else{var p,h={url:r,line:n,column:o},f=void 0;if("[object String]"==={}.toString.call(u))(p=u.match(O))&&(f=p[1],u=p[2]);h.func=S,a({name:f,message:u,url:C(),stack:[h]},!0)}return!!t&&t.apply(this,arguments)}function c(){var t=i,e=n;n=null,i=null,o=null,a.apply(null,[t,!1].concat(e))}function l(t,e){var r=k.call(arguments,1);if(i){if(o===t)return;c()}var a=w.computeStackTrace(t);if(i=a,o=t,n=r,setTimeout(function(){o===t&&c()},a.incomplete?2e3:0),!1!==e)throw t}return l.subscribe=function(n){e||(t=x.onerror,x.onerror=s,e=!0),r.push(n)},l.unsubscribe=function(t){for(var e=r.length-1;e>=0;--e)r[e]===t&&r.splice(e,1)},l.uninstall=function(){e&&(x.onerror=t,e=!1,t=void 0),r=[]},l}(),w.computeStackTrace=function(){function t(t){if(void 0!==t.stack&&t.stack){for(var e,r,n,o=/^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,i=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,a=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,s=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,c=/\((\S*)(?::(\d+))(?::(\d+))\)/,l=t.stack.split("\n"),u=[],p=(/^(.*) is undefined$/.exec(t.message),0),h=l.length;p<h;++p){if(r=o.exec(l[p])){var f=r[2]&&0===r[2].indexOf("native");r[2]&&0===r[2].indexOf("eval")&&(e=c.exec(r[2]))&&(r[2]=e[1],r[3]=e[2],r[4]=e[3]),n={url:f?null:r[2],func:r[1]||S,args:f?[r[2]]:[],line:r[3]?+r[3]:null,column:r[4]?+r[4]:null}}else if(r=i.exec(l[p]))n={url:r[2],func:r[1]||S,args:[],line:+r[3],column:r[4]?+r[4]:null};else{if(!(r=a.exec(l[p])))continue;r[3]&&r[3].indexOf(" > eval")>-1&&(e=s.exec(r[3]))?(r[3]=e[1],r[4]=e[2],r[5]=null):0!==p||r[5]||void 0===t.columnNumber||(u[0].column=t.columnNumber+1),n={url:r[3],func:r[1]||S,args:r[2]?r[2].split(","):[],line:r[4]?+r[4]:null,column:r[5]?+r[5]:null}}if(!n.func&&n.line&&(n.func=S),n.url&&"blob:"===n.url.substr(0,5)){var d=new XMLHttpRequest;if(d.open("GET",n.url,!1),d.send(null),200===d.status){var g=d.responseText||"",_=(g=g.slice(-300)).match(/\/\/# sourceMappingURL=(.*)$/);if(_){var v=_[1];"~"===v.charAt(0)&&(v=("undefined"==typeof document||null==document.location?"":(document.location.origin||(document.location.origin=document.location.protocol+"//"+document.location.hostname+(document.location.port?":"+document.location.port:"")),document.location.origin))+v.slice(1)),n.url=v.slice(0,-4)}}}u.push(n)}return u.length?{name:t.name,message:t.message,url:C(),stack:u}:null}}function e(t,e,r,n){var o={url:e,line:r};if(o.url&&o.line){if(t.incomplete=!1,o.func||(o.func=S),t.stack.length>0&&t.stack[0].url===o.url){if(t.stack[0].line===o.line)return!1;if(!t.stack[0].line&&t.stack[0].func===o.func)return t.stack[0].line=o.line,!1}return t.stack.unshift(o),t.partial=!0,!0}return t.incomplete=!0,!1}function r(t,o){for(var i,a,s=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,c=[],l={},u=!1,p=r.caller;p&&!u;p=p.caller)if(p!==n&&p!==w.report){if(a={url:null,func:S,line:null,column:null},p.name?a.func=p.name:(i=s.exec(p.toString()))&&(a.func=i[1]),void 0===a.func)try{a.func=i.input.substring(0,i.input.indexOf("{"))}catch(t){}l[""+p]?u=!0:l[""+p]=!0,c.push(a)}o&&c.splice(0,o);var h={name:t.name,message:t.message,url:C(),stack:c};return e(h,t.sourceURL||t.fileName,t.line||t.lineNumber,t.message||t.description),h}function n(e,n){var o=null;n=null==n?0:+n;try{if(o=t(e))return o}catch(t){if(w.debug)throw t}try{if(o=r(e,n+1))return o}catch(t){if(w.debug)throw t}return{name:e.name,message:e.message,url:C()}}return n.augmentStackTraceWithInitialElement=e,n.computeStackTraceFromStackProp=t,n}();var R=w;function j(t,e){var r=(65535&t)+(65535&e);return(t>>16)+(e>>16)+(r>>16)<<16|65535&r}function T(t,e,r,n,o,i){return j((a=j(j(e,t),j(n,i)))<<(s=o)|a>>>32-s,r);var a,s}function D(t,e,r,n,o,i,a){return T(e&r|~e&n,t,e,o,i,a)}function F(t,e,r,n,o,i,a){return T(e&n|r&~n,t,e,o,i,a)}function A(t,e,r,n,o,i,a){return T(e^r^n,t,e,o,i,a)}function B(t,e,r,n,o,i,a){return T(r^(e|~n),t,e,o,i,a)}function M(t,e){var r,n,o,i,a;t[e>>5]|=128<<e%32,t[14+(e+64>>>9<<4)]=e;var s=1732584193,c=-271733879,l=-1732584194,u=271733878;for(r=0;r<t.length;r+=16)n=s,o=c,i=l,a=u,s=D(s,c,l,u,t[r],7,-680876936),u=D(u,s,c,l,t[r+1],12,-389564586),l=D(l,u,s,c,t[r+2],17,606105819),c=D(c,l,u,s,t[r+3],22,-1044525330),s=D(s,c,l,u,t[r+4],7,-176418897),u=D(u,s,c,l,t[r+5],12,1200080426),l=D(l,u,s,c,t[r+6],17,-1473231341),c=D(c,l,u,s,t[r+7],22,-45705983),s=D(s,c,l,u,t[r+8],7,1770035416),u=D(u,s,c,l,t[r+9],12,-1958414417),l=D(l,u,s,c,t[r+10],17,-42063),c=D(c,l,u,s,t[r+11],22,-1990404162),s=D(s,c,l,u,t[r+12],7,1804603682),u=D(u,s,c,l,t[r+13],12,-40341101),l=D(l,u,s,c,t[r+14],17,-1502002290),s=F(s,c=D(c,l,u,s,t[r+15],22,1236535329),l,u,t[r+1],5,-165796510),u=F(u,s,c,l,t[r+6],9,-1069501632),l=F(l,u,s,c,t[r+11],14,643717713),c=F(c,l,u,s,t[r],20,-373897302),s=F(s,c,l,u,t[r+5],5,-701558691),u=F(u,s,c,l,t[r+10],9,38016083),l=F(l,u,s,c,t[r+15],14,-660478335),c=F(c,l,u,s,t[r+4],20,-405537848),s=F(s,c,l,u,t[r+9],5,568446438),u=F(u,s,c,l,t[r+14],9,-1019803690),l=F(l,u,s,c,t[r+3],14,-187363961),c=F(c,l,u,s,t[r+8],20,1163531501),s=F(s,c,l,u,t[r+13],5,-1444681467),u=F(u,s,c,l,t[r+2],9,-51403784),l=F(l,u,s,c,t[r+7],14,1735328473),s=A(s,c=F(c,l,u,s,t[r+12],20,-1926607734),l,u,t[r+5],4,-378558),u=A(u,s,c,l,t[r+8],11,-2022574463),l=A(l,u,s,c,t[r+11],16,1839030562),c=A(c,l,u,s,t[r+14],23,-35309556),s=A(s,c,l,u,t[r+1],4,-1530992060),u=A(u,s,c,l,t[r+4],11,1272893353),l=A(l,u,s,c,t[r+7],16,-155497632),c=A(c,l,u,s,t[r+10],23,-1094730640),s=A(s,c,l,u,t[r+13],4,681279174),u=A(u,s,c,l,t[r],11,-358537222),l=A(l,u,s,c,t[r+3],16,-722521979),c=A(c,l,u,s,t[r+6],23,76029189),s=A(s,c,l,u,t[r+9],4,-640364487),u=A(u,s,c,l,t[r+12],11,-421815835),l=A(l,u,s,c,t[r+15],16,530742520),s=B(s,c=A(c,l,u,s,t[r+2],23,-995338651),l,u,t[r],6,-198630844),u=B(u,s,c,l,t[r+7],10,1126891415),l=B(l,u,s,c,t[r+14],15,-1416354905),c=B(c,l,u,s,t[r+5],21,-57434055),s=B(s,c,l,u,t[r+12],6,1700485571),u=B(u,s,c,l,t[r+3],10,-1894986606),l=B(l,u,s,c,t[r+10],15,-1051523),c=B(c,l,u,s,t[r+1],21,-2054922799),s=B(s,c,l,u,t[r+8],6,1873313359),u=B(u,s,c,l,t[r+15],10,-30611744),l=B(l,u,s,c,t[r+6],15,-1560198380),c=B(c,l,u,s,t[r+13],21,1309151649),s=B(s,c,l,u,t[r+4],6,-145523070),u=B(u,s,c,l,t[r+11],10,-1120210379),l=B(l,u,s,c,t[r+2],15,718787259),c=B(c,l,u,s,t[r+9],21,-343485551),s=j(s,n),c=j(c,o),l=j(l,i),u=j(u,a);return[s,c,l,u]}function H(t){var e,r="",n=32*t.length;for(e=0;e<n;e+=8)r+=String.fromCharCode(t[e>>5]>>>e%32&255);return r}function L(t){var e,r=[];for(r[(t.length>>2)-1]=void 0,e=0;e<r.length;e+=1)r[e]=0;var n=8*t.length;for(e=0;e<n;e+=8)r[e>>5]|=(255&t.charCodeAt(e/8))<<e%32;return r}function P(t){var e,r,n="";for(r=0;r<t.length;r+=1)e=t.charCodeAt(r),n+="0123456789abcdef".charAt(e>>>4&15)+"0123456789abcdef".charAt(15&e);return n}function I(t){return unescape(encodeURIComponent(t))}function U(t){return function(t){return H(M(L(t),8*t.length))}(I(t))}function N(t,e){return function(t,e){var r,n,o=L(t),i=[],a=[];for(i[15]=a[15]=void 0,o.length>16&&(o=M(o,8*t.length)),r=0;r<16;r+=1)i[r]=909522486^o[r],a[r]=1549556828^o[r];return n=M(i.concat(L(e)),512+8*e.length),H(M(a.concat(n),640))}(I(t),I(e))}var q=function(t,e,r){return e?r?N(e,t):P(N(e,t)):r?U(t):P(U(t))};function z(t){this.name="RavenConfigError",this.message=t}z.prototype=new Error,z.prototype.constructor=z;var K=z,W=function(t,e,r){var n=t[e],o=t;if(e in t){var i="warn"===e?"warning":e;t[e]=function(){var t=[].slice.call(arguments),a=E.safeJoin(t," "),s={level:i,logger:"console",extra:{arguments:t}};"assert"===e?!1===t[0]&&(a="Assertion failed: "+(E.safeJoin(t.slice(1)," ")||"console.assert"),s.extra.arguments=t.slice(1),r&&r(a,s)):r&&r(a,s),n&&Function.prototype.apply.call(n,o,t)}}},V=E.isErrorEvent,$=E.isDOMError,X=E.isDOMException,J=E.isError,G=E.isObject,Y=E.isPlainObject,Z=E.isUndefined,Q=E.isFunction,tt=E.isString,et=E.isArray,rt=E.isEmptyObject,nt=E.each,ot=E.objectMerge,it=E.truncate,at=E.objectFrozen,st=E.hasKey,ct=E.joinRegExp,lt=E.urlencode,ut=E.uuid4,pt=E.htmlTreeAsString,ht=E.isSameException,ft=E.isSameStacktrace,dt=E.parseUrl,gt=E.fill,_t=E.supportsFetch,vt=E.supportsReferrerPolicy,mt=E.serializeKeysForMessage,bt=E.serializeException,yt=E.sanitize,Et=W,wt="source protocol user pass host port path".split(" "),xt=/^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/;function kt(){return+new Date}var St="undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?self:{},Ot=St.document,Ct=St.navigator;function Rt(t,e){return Q(e)?function(r){return e(r,t)}:e}function jt(){for(var t in this._hasJSON=!("object"!=typeof JSON||!JSON.stringify),this._hasDocument=!Z(Ot),this._hasNavigator=!Z(Ct),this._lastCapturedException=null,this._lastData=null,this._lastEventId=null,this._globalServer=null,this._globalKey=null,this._globalProject=null,this._globalContext={},this._globalOptions={release:St.SENTRY_RELEASE&&St.SENTRY_RELEASE.id,logger:"javascript",ignoreErrors:[],ignoreUrls:[],whitelistUrls:[],includePaths:[],headers:null,collectWindowErrors:!0,captureUnhandledRejections:!0,maxMessageLength:0,maxUrlLength:250,stackTraceLimit:50,autoBreadcrumbs:!0,instrument:!0,sampleRate:1,sanitizeKeys:[]},this._fetchDefaults={method:"POST",keepalive:!0,referrerPolicy:vt()?"origin":""},this._ignoreOnError=0,this._isRavenInstalled=!1,this._originalErrorStackTraceLimit=Error.stackTraceLimit,this._originalConsole=St.console||{},this._originalConsoleMethods={},this._plugins=[],this._startTime=kt(),this._wrappedBuiltIns=[],this._breadcrumbs=[],this._lastCapturedEvent=null,this._keypressTimeout,this._location=St.location,this._lastHref=this._location&&this._location.href,this._resetBackoff(),this._originalConsole)this._originalConsoleMethods[t]=this._originalConsole[t]}jt.prototype={VERSION:"3.25.2",debug:!1,TraceKit:R,config:function(t,e){var r=this;if(r._globalServer)return this._logDebug("error","Error: Raven has already been configured"),r;if(!t)return r;var n=r._globalOptions;e&&nt(e,function(t,e){"tags"===t||"extra"===t||"user"===t?r._globalContext[t]=e:n[t]=e}),r.setDSN(t),n.ignoreErrors.push(/^Script error\.?$/),n.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/),n.ignoreErrors=ct(n.ignoreErrors),n.ignoreUrls=!!n.ignoreUrls.length&&ct(n.ignoreUrls),n.whitelistUrls=!!n.whitelistUrls.length&&ct(n.whitelistUrls),n.includePaths=ct(n.includePaths),n.maxBreadcrumbs=Math.max(0,Math.min(n.maxBreadcrumbs||100,100));var o={xhr:!0,console:!0,dom:!0,location:!0,sentry:!0},i=n.autoBreadcrumbs;"[object Object]"==={}.toString.call(i)?i=ot(o,i):!1!==i&&(i=o),n.autoBreadcrumbs=i;var a={tryCatch:!0},s=n.instrument;return"[object Object]"==={}.toString.call(s)?s=ot(a,s):!1!==s&&(s=a),n.instrument=s,R.collectWindowErrors=!!n.collectWindowErrors,r},install:function(){var t=this;return t.isSetup()&&!t._isRavenInstalled&&(R.report.subscribe(function(){t._handleOnErrorStackInfo.apply(t,arguments)}),t._globalOptions.captureUnhandledRejections&&t._attachPromiseRejectionHandler(),t._patchFunctionToString(),t._globalOptions.instrument&&t._globalOptions.instrument.tryCatch&&t._instrumentTryCatch(),t._globalOptions.autoBreadcrumbs&&t._instrumentBreadcrumbs(),t._drainPlugins(),t._isRavenInstalled=!0),Error.stackTraceLimit=t._globalOptions.stackTraceLimit,this},setDSN:function(t){var e=this._parseDSN(t),r=e.path.lastIndexOf("/"),n=e.path.substr(1,r);this._dsn=t,this._globalKey=e.user,this._globalSecret=e.pass&&e.pass.substr(1),this._globalProject=e.path.substr(r+1),this._globalServer=this._getGlobalServer(e),this._globalEndpoint=this._globalServer+"/"+n+"api/"+this._globalProject+"/store/",this._resetBackoff()},context:function(t,e,r){return Q(t)&&(r=e||[],e=t,t=void 0),this.wrap(t,e).apply(this,r)},wrap:function(t,e,r){var n=this;if(Z(e)&&!Q(t))return t;if(Q(t)&&(e=t,t=void 0),!Q(e))return e;try{if(e.__raven__)return e;if(e.__raven_wrapper__)return e.__raven_wrapper__}catch(t){return e}function o(){var o=[],i=arguments.length,a=!t||t&&!1!==t.deep;for(r&&Q(r)&&r.apply(this,arguments);i--;)o[i]=a?n.wrap(t,arguments[i]):arguments[i];try{return e.apply(this,o)}catch(e){throw n._ignoreNextOnError(),n.captureException(e,t),e}}for(var i in e)st(e,i)&&(o[i]=e[i]);return o.prototype=e.prototype,e.__raven_wrapper__=o,o.__raven__=!0,o.__orig__=e,o},uninstall:function(){return R.report.uninstall(),this._detachPromiseRejectionHandler(),this._unpatchFunctionToString(),this._restoreBuiltIns(),this._restoreConsole(),Error.stackTraceLimit=this._originalErrorStackTraceLimit,this._isRavenInstalled=!1,this},_promiseRejectionHandler:function(t){this._logDebug("debug","Raven caught unhandled promise rejection:",t),this.captureException(t.reason,{extra:{unhandledPromiseRejection:!0}})},_attachPromiseRejectionHandler:function(){return this._promiseRejectionHandler=this._promiseRejectionHandler.bind(this),St.addEventListener&&St.addEventListener("unhandledrejection",this._promiseRejectionHandler),this},_detachPromiseRejectionHandler:function(){return St.removeEventListener&&St.removeEventListener("unhandledrejection",this._promiseRejectionHandler),this},captureException:function(t,e){if(e=ot({trimHeadFrames:0},e||{}),V(t)&&t.error)t=t.error;else{if($(t)||X(t)){var r=t.name||($(t)?"DOMError":"DOMException"),n=t.message?r+": "+t.message:r;return this.captureMessage(n,ot(e,{stacktrace:!0,trimHeadFrames:e.trimHeadFrames+1}))}if(J(t))t=t;else{if(!Y(t))return this.captureMessage(t,ot(e,{stacktrace:!0,trimHeadFrames:e.trimHeadFrames+1}));e=this._getCaptureExceptionOptionsFromPlainObject(e,t),t=new Error(e.message)}}this._lastCapturedException=t;try{var o=R.computeStackTrace(t);this._handleStackInfo(o,e)}catch(e){if(t!==e)throw e}return this},_getCaptureExceptionOptionsFromPlainObject:function(t,e){var r=Object.keys(e).sort(),n=ot(t,{message:"Non-Error exception captured with keys: "+mt(r),fingerprint:[q(r)],extra:t.extra||{}});return n.extra.__serialized__=bt(e),n},captureMessage:function(t,e){if(!this._globalOptions.ignoreErrors.test||!this._globalOptions.ignoreErrors.test(t)){var r,n=ot({message:t+=""},e=e||{});try{throw new Error(t)}catch(t){r=t}r.name=null;var o=R.computeStackTrace(r),i=et(o.stack)&&o.stack[1];i&&"Raven.captureException"===i.func&&(i=o.stack[2]);var a=i&&i.url||"";if((!this._globalOptions.ignoreUrls.test||!this._globalOptions.ignoreUrls.test(a))&&(!this._globalOptions.whitelistUrls.test||this._globalOptions.whitelistUrls.test(a))){if(this._globalOptions.stacktrace||e&&e.stacktrace){n.fingerprint=null==n.fingerprint?t:n.fingerprint,(e=ot({trimHeadFrames:0},e)).trimHeadFrames+=1;var s=this._prepareFrames(o,e);n.stacktrace={frames:s.reverse()}}return n.fingerprint&&(n.fingerprint=et(n.fingerprint)?n.fingerprint:[n.fingerprint]),this._send(n),this}}},captureBreadcrumb:function(t){var e=ot({timestamp:kt()/1e3},t);if(Q(this._globalOptions.breadcrumbCallback)){var r=this._globalOptions.breadcrumbCallback(e);if(G(r)&&!rt(r))e=r;else if(!1===r)return this}return this._breadcrumbs.push(e),this._breadcrumbs.length>this._globalOptions.maxBreadcrumbs&&this._breadcrumbs.shift(),this},addPlugin:function(t){var e=[].slice.call(arguments,1);return this._plugins.push([t,e]),this._isRavenInstalled&&this._drainPlugins(),this},setUserContext:function(t){return this._globalContext.user=t,this},setExtraContext:function(t){return this._mergeContext("extra",t),this},setTagsContext:function(t){return this._mergeContext("tags",t),this},clearContext:function(){return this._globalContext={},this},getContext:function(){return JSON.parse(r(this._globalContext))},setEnvironment:function(t){return this._globalOptions.environment=t,this},setRelease:function(t){return this._globalOptions.release=t,this},setDataCallback:function(t){var e=this._globalOptions.dataCallback;return this._globalOptions.dataCallback=Rt(e,t),this},setBreadcrumbCallback:function(t){var e=this._globalOptions.breadcrumbCallback;return this._globalOptions.breadcrumbCallback=Rt(e,t),this},setShouldSendCallback:function(t){var e=this._globalOptions.shouldSendCallback;return this._globalOptions.shouldSendCallback=Rt(e,t),this},setTransport:function(t){return this._globalOptions.transport=t,this},lastException:function(){return this._lastCapturedException},lastEventId:function(){return this._lastEventId},isSetup:function(){return!!this._hasJSON&&(!!this._globalServer||(this.ravenNotConfiguredError||(this.ravenNotConfiguredError=!0,this._logDebug("error","Error: Raven has not been configured.")),!1))},afterLoad:function(){var t=St.RavenConfig;t&&this.config(t.dsn,t.config).install()},showReportDialog:function(t){if(Ot){var e=(t=t||{}).eventId||this.lastEventId();if(!e)throw new K("Missing eventId");var r=t.dsn||this._dsn;if(!r)throw new K("Missing DSN");var n=encodeURIComponent,o="";o+="?eventId="+n(e),o+="&dsn="+n(r);var i=t.user||this._globalContext.user;i&&(i.name&&(o+="&name="+n(i.name)),i.email&&(o+="&email="+n(i.email)));var a=this._getGlobalServer(this._parseDSN(r)),s=Ot.createElement("script");s.async=!0,s.src=a+"/api/embed/error-page/"+o,(Ot.head||Ot.body).appendChild(s)}},_ignoreNextOnError:function(){var t=this;this._ignoreOnError+=1,setTimeout(function(){t._ignoreOnError-=1})},_triggerEvent:function(t,e){var r,n;if(this._hasDocument){for(n in e=e||{},t="raven"+t.substr(0,1).toUpperCase()+t.substr(1),Ot.createEvent?(r=Ot.createEvent("HTMLEvents")).initEvent(t,!0,!0):(r=Ot.createEventObject()).eventType=t,e)st(e,n)&&(r[n]=e[n]);if(Ot.createEvent)Ot.dispatchEvent(r);else try{Ot.fireEvent("on"+r.eventType.toLowerCase(),r)}catch(t){}}},_breadcrumbEventHandler:function(t){var e=this;return function(r){if(e._keypressTimeout=null,e._lastCapturedEvent!==r){var n;e._lastCapturedEvent=r;try{n=pt(r.target)}catch(t){n="<unknown>"}e.captureBreadcrumb({category:"ui."+t,message:n})}}},_keypressEventHandler:function(){var t=this;return function(e){var r;try{r=e.target}catch(t){return}var n=r&&r.tagName;if(n&&("INPUT"===n||"TEXTAREA"===n||r.isContentEditable)){var o=t._keypressTimeout;o||t._breadcrumbEventHandler("input")(e),clearTimeout(o),t._keypressTimeout=setTimeout(function(){t._keypressTimeout=null},1e3)}}},_captureUrlChange:function(t,e){var r=dt(this._location.href),n=dt(e),o=dt(t);this._lastHref=e,r.protocol===n.protocol&&r.host===n.host&&(e=n.relative),r.protocol===o.protocol&&r.host===o.host&&(t=o.relative),this.captureBreadcrumb({category:"navigation",data:{to:e,from:t}})},_patchFunctionToString:function(){var t=this;t._originalFunctionToString=Function.prototype.toString,Function.prototype.toString=function(){return"function"==typeof this&&this.__raven__?t._originalFunctionToString.apply(this.__orig__,arguments):t._originalFunctionToString.apply(this,arguments)}},_unpatchFunctionToString:function(){this._originalFunctionToString&&(Function.prototype.toString=this._originalFunctionToString)},_instrumentTryCatch:function(){var t=this,e=t._wrappedBuiltIns;function r(e){return function(r,n){for(var o=new Array(arguments.length),i=0;i<o.length;++i)o[i]=arguments[i];var a=o[0];return Q(a)&&(o[0]=t.wrap(a)),e.apply?e.apply(this,o):e(o[0],o[1])}}var n=this._globalOptions.autoBreadcrumbs;function o(r){var o=St[r]&&St[r].prototype;o&&o.hasOwnProperty&&o.hasOwnProperty("addEventListener")&&(gt(o,"addEventListener",function(e){return function(o,i,a,s){try{i&&i.handleEvent&&(i.handleEvent=t.wrap(i.handleEvent))}catch(t){}var c,l,u;return n&&n.dom&&("EventTarget"===r||"Node"===r)&&(l=t._breadcrumbEventHandler("click"),u=t._keypressEventHandler(),c=function(t){if(t){var e;try{e=t.type}catch(t){return}return"click"===e?l(t):"keypress"===e?u(t):void 0}}),e.call(this,o,t.wrap(i,void 0,c),a,s)}},e),gt(o,"removeEventListener",function(t){return function(e,r,n,o){try{r=r&&(r.__raven_wrapper__?r.__raven_wrapper__:r)}catch(t){}return t.call(this,e,r,n,o)}},e))}gt(St,"setTimeout",r,e),gt(St,"setInterval",r,e),St.requestAnimationFrame&&gt(St,"requestAnimationFrame",function(e){return function(r){return e(t.wrap(r))}},e);for(var i=["EventTarget","Window","Node","ApplicationCache","AudioTrackList","ChannelMergerNode","CryptoOperation","EventSource","FileReader","HTMLUnknownElement","IDBDatabase","IDBRequest","IDBTransaction","KeyOperation","MediaController","MessagePort","ModalWindow","Notification","SVGElementInstance","Screen","TextTrack","TextTrackCue","TextTrackList","WebSocket","WebSocketWorker","Worker","XMLHttpRequest","XMLHttpRequestEventTarget","XMLHttpRequestUpload"],a=0;a<i.length;a++)o(i[a])},_instrumentBreadcrumbs:function(){var t=this,e=this._globalOptions.autoBreadcrumbs,r=t._wrappedBuiltIns;function n(e,r){e in r&&Q(r[e])&&gt(r,e,function(e){return t.wrap(e)})}if(e.xhr&&"XMLHttpRequest"in St){var o=St.XMLHttpRequest&&St.XMLHttpRequest.prototype;gt(o,"open",function(e){return function(r,n){return tt(n)&&-1===n.indexOf(t._globalKey)&&(this.__raven_xhr={method:r,url:n,status_code:null}),e.apply(this,arguments)}},r),gt(o,"send",function(e){return function(){var r=this;function o(){if(r.__raven_xhr&&4===r.readyState){try{r.__raven_xhr.status_code=r.status}catch(t){}t.captureBreadcrumb({type:"http",category:"xhr",data:r.__raven_xhr})}}for(var i=["onload","onerror","onprogress"],a=0;a<i.length;a++)n(i[a],r);return"onreadystatechange"in r&&Q(r.onreadystatechange)?gt(r,"onreadystatechange",function(e){return t.wrap(e,void 0,o)}):r.onreadystatechange=o,e.apply(this,arguments)}},r)}e.xhr&&_t()&&gt(St,"fetch",function(e){return function(){for(var r=new Array(arguments.length),n=0;n<r.length;++n)r[n]=arguments[n];var o,i=r[0],a="GET";if("string"==typeof i?o=i:"Request"in St&&i instanceof St.Request?(o=i.url,i.method&&(a=i.method)):o=""+i,-1!==o.indexOf(t._globalKey))return e.apply(this,r);r[1]&&r[1].method&&(a=r[1].method);var s={method:a,url:o,status_code:null};return e.apply(this,r).then(function(e){return s.status_code=e.status,t.captureBreadcrumb({type:"http",category:"fetch",data:s}),e}).catch(function(e){throw t.captureBreadcrumb({type:"http",category:"fetch",data:s,level:"error"}),e})}},r),e.dom&&this._hasDocument&&(Ot.addEventListener?(Ot.addEventListener("click",t._breadcrumbEventHandler("click"),!1),Ot.addEventListener("keypress",t._keypressEventHandler(),!1)):Ot.attachEvent&&(Ot.attachEvent("onclick",t._breadcrumbEventHandler("click")),Ot.attachEvent("onkeypress",t._keypressEventHandler())));var i=St.chrome,a=!(i&&i.app&&i.app.runtime)&&St.history&&St.history.pushState&&St.history.replaceState;if(e.location&&a){var s=St.onpopstate;St.onpopstate=function(){var e=t._location.href;if(t._captureUrlChange(t._lastHref,e),s)return s.apply(this,arguments)};var c=function(e){return function(){var r=arguments.length>2?arguments[2]:void 0;return r&&t._captureUrlChange(t._lastHref,r+""),e.apply(this,arguments)}};gt(St.history,"pushState",c,r),gt(St.history,"replaceState",c,r)}if(e.console&&"console"in St&&console.log){var l=function(e,r){t.captureBreadcrumb({message:e,level:r.level,category:"console"})};nt(["debug","info","warn","error","log"],function(t,e){Et(console,e,l)})}},_restoreBuiltIns:function(){for(var t;this._wrappedBuiltIns.length;){var e=(t=this._wrappedBuiltIns.shift())[0],r=t[1],n=t[2];e[r]=n}},_restoreConsole:function(){for(var t in this._originalConsoleMethods)this._originalConsole[t]=this._originalConsoleMethods[t]},_drainPlugins:function(){var t=this;nt(this._plugins,function(e,r){var n=r[0],o=r[1];n.apply(t,[t].concat(o))})},_parseDSN:function(t){var e=xt.exec(t),r={},n=7;try{for(;n--;)r[wt[n]]=e[n]||""}catch(e){throw new K("Invalid DSN: "+t)}if(r.pass&&!this._globalOptions.allowSecretKey)throw new K("Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key");return r},_getGlobalServer:function(t){var e="//"+t.host+(t.port?":"+t.port:"");return t.protocol&&(e=t.protocol+":"+e),e},_handleOnErrorStackInfo:function(){this._ignoreOnError||this._handleStackInfo.apply(this,arguments)},_handleStackInfo:function(t,e){var r=this._prepareFrames(t,e);this._triggerEvent("handle",{stackInfo:t,options:e}),this._processException(t.name,t.message,t.url,t.lineno,r,e)},_prepareFrames:function(t,e){var r=this,n=[];if(t.stack&&t.stack.length&&(nt(t.stack,function(e,o){var i=r._normalizeFrame(o,t.url);i&&n.push(i)}),e&&e.trimHeadFrames))for(var o=0;o<e.trimHeadFrames&&o<n.length;o++)n[o].in_app=!1;return n=n.slice(0,this._globalOptions.stackTraceLimit)},_normalizeFrame:function(t,e){var r={filename:t.url,lineno:t.line,colno:t.column,function:t.func||"?"};return t.url||(r.filename=e),r.in_app=!(this._globalOptions.includePaths.test&&!this._globalOptions.includePaths.test(r.filename)||/(Raven|TraceKit)\./.test(r.function)||/raven\.(min\.)?js$/.test(r.filename)),r},_processException:function(t,e,r,n,o,i){var a,s=(t?t+": ":"")+(e||"");if((!this._globalOptions.ignoreErrors.test||!this._globalOptions.ignoreErrors.test(e)&&!this._globalOptions.ignoreErrors.test(s))&&(o&&o.length?(r=o[0].filename||r,o.reverse(),a={frames:o}):r&&(a={frames:[{filename:r,lineno:n,in_app:!0}]}),(!this._globalOptions.ignoreUrls.test||!this._globalOptions.ignoreUrls.test(r))&&(!this._globalOptions.whitelistUrls.test||this._globalOptions.whitelistUrls.test(r)))){var c=ot({exception:{values:[{type:t,value:e,stacktrace:a}]},transaction:r},i);this._send(c)}},_trimPacket:function(t){var e=this._globalOptions.maxMessageLength;if(t.message&&(t.message=it(t.message,e)),t.exception){var r=t.exception.values[0];r.value=it(r.value,e)}var n=t.request;return n&&(n.url&&(n.url=it(n.url,this._globalOptions.maxUrlLength)),n.Referer&&(n.Referer=it(n.Referer,this._globalOptions.maxUrlLength))),t.breadcrumbs&&t.breadcrumbs.values&&this._trimBreadcrumbs(t.breadcrumbs),t},_trimBreadcrumbs:function(t){for(var e,r,n,o=["to","from","url"],i=0;i<t.values.length;++i)if((r=t.values[i]).hasOwnProperty("data")&&G(r.data)&&!at(r.data)){n=ot({},r.data);for(var a=0;a<o.length;++a)e=o[a],n.hasOwnProperty(e)&&n[e]&&(n[e]=it(n[e],this._globalOptions.maxUrlLength));t.values[i].data=n}},_getHttpData:function(){if(this._hasNavigator||this._hasDocument){var t={};return this._hasNavigator&&Ct.userAgent&&(t.headers={"User-Agent":Ct.userAgent}),St.location&&St.location.href&&(t.url=St.location.href),this._hasDocument&&Ot.referrer&&(t.headers||(t.headers={}),t.headers.Referer=Ot.referrer),t}},_resetBackoff:function(){this._backoffDuration=0,this._backoffStart=null},_shouldBackoff:function(){return this._backoffDuration&&kt()-this._backoffStart<this._backoffDuration},_isRepeatData:function(t){var e=this._lastData;return!(!e||t.message!==e.message||t.transaction!==e.transaction)&&(t.stacktrace||e.stacktrace?ft(t.stacktrace,e.stacktrace):!t.exception&&!e.exception||ht(t.exception,e.exception))},_setBackoffState:function(t){if(!this._shouldBackoff()){var e=t.status;if(400===e||401===e||429===e){var r;try{r=_t()?t.headers.get("Retry-After"):t.getResponseHeader("Retry-After"),r=1e3*parseInt(r,10)}catch(t){}this._backoffDuration=r||(2*this._backoffDuration||1e3),this._backoffStart=kt()}}},_send:function(t){var e=this._globalOptions,r={project:this._globalProject,logger:e.logger,platform:"javascript"},n=this._getHttpData();n&&(r.request=n),t.trimHeadFrames&&delete t.trimHeadFrames,(t=ot(r,t)).tags=ot(ot({},this._globalContext.tags),t.tags),t.extra=ot(ot({},this._globalContext.extra),t.extra),t.extra["session:duration"]=kt()-this._startTime,this._breadcrumbs&&this._breadcrumbs.length>0&&(t.breadcrumbs={values:[].slice.call(this._breadcrumbs,0)}),this._globalContext.user&&(t.user=this._globalContext.user),e.environment&&(t.environment=e.environment),e.release&&(t.release=e.release),e.serverName&&(t.server_name=e.serverName),t=this._sanitizeData(t),Object.keys(t).forEach(function(e){(null==t[e]||""===t[e]||rt(t[e]))&&delete t[e]}),Q(e.dataCallback)&&(t=e.dataCallback(t)||t),t&&!rt(t)&&(Q(e.shouldSendCallback)&&!e.shouldSendCallback(t)||(this._shouldBackoff()?this._logDebug("warn","Raven dropped error due to backoff: ",t):"number"==typeof e.sampleRate?Math.random()<e.sampleRate&&this._sendProcessedPayload(t):this._sendProcessedPayload(t)))},_sanitizeData:function(t){return yt(t,this._globalOptions.sanitizeKeys)},_getUuid:function(){return ut()},_sendProcessedPayload:function(t,e){var r=this,n=this._globalOptions;if(this.isSetup())if(t=this._trimPacket(t),this._globalOptions.allowDuplicates||!this._isRepeatData(t)){this._lastEventId=t.event_id||(t.event_id=this._getUuid()),this._lastData=t,this._logDebug("debug","Raven about to send:",t);var o={sentry_version:"7",sentry_client:"raven-js/"+this.VERSION,sentry_key:this._globalKey};this._globalSecret&&(o.sentry_secret=this._globalSecret);var i=t.exception&&t.exception.values[0];this._globalOptions.autoBreadcrumbs&&this._globalOptions.autoBreadcrumbs.sentry&&this.captureBreadcrumb({category:"sentry",message:i?(i.type?i.type+": ":"")+i.value:t.message,event_id:t.event_id,level:t.level||"error"});var a=this._globalEndpoint;(n.transport||this._makeRequest).call(this,{url:a,auth:o,data:t,options:n,onSuccess:function(){r._resetBackoff(),r._triggerEvent("success",{data:t,src:a}),e&&e()},onError:function(n){r._logDebug("error","Raven transport failed to send: ",n),n.request&&r._setBackoffState(n.request),r._triggerEvent("failure",{data:t,src:a}),n=n||new Error("Raven send failed (no additional details provided)"),e&&e(n)}})}else this._logDebug("warn","Raven dropped repeat event: ",t)},_makeRequest:function(t){var e=t.url+"?"+lt(t.auth),n=null,o={};if(t.options.headers&&(n=this._evaluateHash(t.options.headers)),t.options.fetchParameters&&(o=this._evaluateHash(t.options.fetchParameters)),_t()){o.body=r(t.data);var i=ot({},this._fetchDefaults),a=ot(i,o);return n&&(a.headers=n),St.fetch(e,a).then(function(e){if(e.ok)t.onSuccess&&t.onSuccess();else{var r=new Error("Sentry error code: "+e.status);r.request=e,t.onError&&t.onError(r)}}).catch(function(){t.onError&&t.onError(new Error("Sentry error code: network unavailable"))})}var s=St.XMLHttpRequest&&new St.XMLHttpRequest;s&&(("withCredentials"in s||"undefined"!=typeof XDomainRequest)&&("withCredentials"in s?s.onreadystatechange=function(){if(4===s.readyState)if(200===s.status)t.onSuccess&&t.onSuccess();else if(t.onError){var e=new Error("Sentry error code: "+s.status);e.request=s,t.onError(e)}}:(s=new XDomainRequest,e=e.replace(/^https?:/,""),t.onSuccess&&(s.onload=t.onSuccess),t.onError&&(s.onerror=function(){var e=new Error("Sentry error code: XDomainRequest");e.request=s,t.onError(e)})),s.open("POST",e),n&&nt(n,function(t,e){s.setRequestHeader(t,e)}),s.send(r(t.data))))},_evaluateHash:function(t){var e={};for(var r in t)if(t.hasOwnProperty(r)){var n=t[r];e[r]="function"==typeof n?n():n}return e},_logDebug:function(t){this._originalConsoleMethods[t]&&(this.debug||this._globalOptions.debug)&&Function.prototype.apply.call(this._originalConsoleMethods[t],this._originalConsole,[].slice.call(arguments,1))},_mergeContext:function(t,e){Z(e)?delete this._globalContext[t]:this._globalContext[t]=ot(this._globalContext[t]||{},e)}},jt.prototype.setUser=jt.prototype.setUserContext,jt.prototype.setReleaseContext=jt.prototype.setRelease;var Tt=jt,Dt="undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?self:{},Ft=Dt.Raven,At=new Tt;At.noConflict=function(){return Dt.Raven=Ft,At},At.afterLoad();var Bt,Mt,Ht,Lt,Pt,It,Ut,Nt=At,qt=Tt;Nt.Client=qt,(Ut="plyr.io"===window.location.host)&&Nt.config("https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555").install(),document.addEventListener("DOMContentLoaded",function(){Nt.context(function(){window.shr&&window.shr.setup({count:{classname:"button__count"}}),document.addEventListener("focusout",function(t){t.target.classList.remove("tab-focus")}),document.addEventListener("keydown",function(t){9===t.keyCode&&setTimeout(function(){document.activeElement.classList.add("tab-focus")},0)});var t=new Plyr("#player",{debug:!0,title:"View From A Blue Moon",iconUrl:"../dist/plyr.svg",keyboard:{global:!0},tooltips:{controls:!0},captions:{active:!0},keys:{google:"AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c"},ads:{enabled:!0,publisherId:"918848828995742"}});window.player=t;var e=document.querySelectorAll("[data-source]"),r={video:"video",audio:"audio",youtube:"youtube",vimeo:"vimeo"},n=window.location.hash.replace("#",""),o=window.history&&window.history.pushState;function i(t,e,r){t&&t.classList[r?"add":"remove"](e)}function a(o,a){if(o in r&&(a||o!==n)&&(n.length||o!==r.video)){switch(o){case r.video:t.source={type:"video",title:"View From A Blue Moon",sources:[{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-576p.mp4",type:"video/mp4",size:576},{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-720p.mp4",type:"video/mp4",size:720},{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1080p.mp4",type:"video/mp4",size:1080},{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1440p.mp4",type:"video/mp4",size:1440}],poster:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg",tracks:[{kind:"captions",label:"English",srclang:"en",src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt",default:!0},{kind:"captions",label:"French",srclang:"fr",src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt"}]};break;case r.audio:t.source={type:"audio",title:"Kishi Bashi &ndash; &ldquo;It All Began With A Burst&rdquo;",sources:[{src:"https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3",type:"audio/mp3"},{src:"https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg",type:"audio/ogg"}]};break;case r.youtube:t.source={type:"video",sources:[{src:"https://youtube.com/watch?v=bTqVqk7FSmY",provider:"youtube"}]};break;case r.vimeo:t.source={type:"video",sources:[{src:"https://vimeo.com/76979871",provider:"vimeo"}]}}n=o,Array.from(e).forEach(function(t){return i(t.parentElement,"active",!1)}),i(document.querySelector('[data-source="'+o+'"]'),"active",!0),Array.from(document.querySelectorAll(".plyr__cite")).forEach(function(t){t.setAttribute("hidden","")}),document.querySelector(".plyr__cite--"+o).removeAttribute("hidden")}}if(Array.from(e).forEach(function(t){t.addEventListener("click",function(){var e=t.getAttribute("data-source");a(e),o&&window.history.pushState({type:e},"","#"+e)})}),window.addEventListener("popstate",function(t){t.state&&"type"in t.state&&a(t.state.type)}),o){var s=!n.length;s&&(n=r.video),n in r&&window.history.replaceState({type:n},"",s?"":"#"+n),n!==r.video&&a(n,!0)}})}),Ut&&(Bt=window,Mt=document,Ht="script",Lt="ga",Bt.GoogleAnalyticsObject=Lt,Bt.ga=Bt.ga||function(){(Bt.ga.q=Bt.ga.q||[]).push(arguments)},Bt.ga.l=1*new Date,Pt=Mt.createElement(Ht),It=Mt.getElementsByTagName(Ht)[0],Pt.async=1,Pt.src="https://www.google-analytics.com/analytics.js",It.parentNode.insertBefore(Pt,It),window.ga("create","UA-40881672-11","auto"),window.ga("send","pageview"))}();
//# sourceMappingURL=demo.min.js.map
diff --git a/demo/dist/demo.min.js.map b/demo/dist/demo.min.js.map
index b526fa53..f60e8ff5 100644
--- a/demo/dist/demo.min.js.map
+++ b/demo/dist/demo.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../node_modules/raven-js/vendor/json-stringify-safe/stringify.js","../../../node_modules/raven-js/src/utils.js","../../../node_modules/raven-js/vendor/TraceKit/tracekit.js","../../../node_modules/raven-js/vendor/md5/md5.js","../../../node_modules/raven-js/src/configError.js","../../../node_modules/raven-js/src/console.js","../../../node_modules/raven-js/src/raven.js","../../../node_modules/raven-js/src/singleton.js","demo.js"],"names":["indexOf","haystack","needle","i","length","serializer","replacer","cycleReplacer","stack","keys","key","value","slice","join","thisPos","this","splice","push","Infinity","call","Error","err","message","name","Object","prototype","hasOwnProperty","stringifyError","module","exports","obj","spaces","JSON","stringify","getSerialize","_window","window","global","self","isUndefined","what","isPlainObject","toString","isString","isArray","supportsErrorEvent","ErrorEvent","e","supportsFetch","Headers","Request","Response","each","callback","j","hasKey","truncate","str","max","substr","object","joinRegExp","patterns","pattern","sources","len","replace","source","RegExp","htmlElementAsString","elem","className","classes","attr","out","tagName","toLowerCase","id","split","attrWhitelist","getAttribute","isOnlyOneTruthy","a","b","isSameStacktrace","stack1","stack2","frames1","frames","frames2","filename","lineno","colno","MAX_SERIALIZE_EXCEPTION_DEPTH","MAX_SERIALIZE_EXCEPTION_SIZE","MAX_SERIALIZE_KEYS_LENGTH","jsonSize","encodeURI","utf8Length","serializeValue","type","utils","isObject","isError","isErrorEvent","isFunction","isEmptyObject","_","supportsReferrerPolicy","referrerPolicy","supportsPromiseRejectionEvent","PromiseRejectionEvent","wrappedCallback","data","original","normalizedData","objectMerge","obj1","obj2","objectFrozen","isFrozen","urlencode","o","pairs","encodeURIComponent","uuid4","crypto","msCrypto","getRandomValues","arr","Uint16Array","pad","num","v","c","r","Math","random","htmlTreeAsString","nextStr","height","sepLength","parentNode","reverse","isSameException","ex1","ex2","values","stacktrace","parseUrl","url","match","query","fragment","protocol","host","path","relative","fill","replacement","track","orig","__raven__","__orig__","safeJoin","input","delimiter","output","String","serializeException","ex","depth","maxSize","serialized","serializeObject","reduce","acc","Array","map","val","serializeKeysForMessage","maxLength","filter","usedKeys","sanitize","sanitizeKeys","safeInput","sanitizeRegExp","sanitizeMask","parse","o_O","sanitizeWorker","workerInput","k","test","TraceKit","collectWindowErrors","debug","_slice","UNKNOWN_FUNCTION","ERROR_TYPES_RE","getLocationHref","document","location","href","report","_oldOnerrorHandler","_onErrorHandlerInstalled","handlers","lastArgs","lastException","lastExceptionStack","notifyHandlers","isWindowError","exception","apply","concat","arguments","inner","traceKitWindowOnError","msg","lineNo","colNo","error","computeStackTrace","augmentStackTraceWithInitialElement","processLastException","groups","line","column","undefined","func","_lastExceptionStack","_lastArgs","rethrow","args","setTimeout","incomplete","subscribe","handler","onerror","unsubscribe","uninstall","computeStackTraceFromStackProp","submatch","parts","element","chrome","winjs","gecko","geckoEval","chromeEval","lines","exec","isNative","columnNumber","stackInfo","initial","unshift","partial","computeStackTraceByWalkingCallerChain","item","functionName","funcs","recursion","curr","caller","substring","result","sourceURL","fileName","lineNumber","description","tracekit","safeAdd","x","y","lsw","md5cmn","q","s","t","cnt","md5ff","d","md5gg","md5hh","md5ii","binlMD5","olda","oldb","oldc","oldd","binl2rstr","length32","fromCharCode","rstr2binl","length8","charCodeAt","rstr2hex","charAt","str2rstrUTF8","unescape","rawMD5","rstrMD5","rawHMACMD5","hash","bkey","ipad","opad","rstrHMACMD5","md5_1","string","raw","RavenConfigError","constructor","configError","console$1","console","level","originalConsoleLevel","originalConsole","sentryLevel","logger","extra","Function","wrapConsoleMethod","require$$0","dsnKeys","dsnPattern","now","Date","_document","_navigator","navigator","keepOriginalCallback","Raven","method","_hasJSON","_hasDocument","_hasNavigator","_lastCapturedException","_lastData","_lastEventId","_globalServer","_globalKey","_globalProject","_globalContext","_globalOptions","release","SENTRY_RELEASE","ignoreErrors","ignoreUrls","whitelistUrls","includePaths","headers","captureUnhandledRejections","maxMessageLength","maxUrlLength","stackTraceLimit","autoBreadcrumbs","instrument","sampleRate","_fetchDefaults","keepalive","_ignoreOnError","_isRavenInstalled","_originalErrorStackTraceLimit","_originalConsole","_originalConsoleMethods","_plugins","_startTime","_wrappedBuiltIns","_breadcrumbs","_lastCapturedEvent","_keypressTimeout","_location","_lastHref","_resetBackoff","VERSION","config","dsn","options","_logDebug","globalOptions","setDSN","maxBreadcrumbs","min","autoBreadcrumbDefaults","xhr","dom","sentry","instrumentDefaults","tryCatch","install","isSetup","_handleOnErrorStackInfo","_attachPromiseRejectionHandler","_patchFunctionToString","_instrumentTryCatch","_instrumentBreadcrumbs","_drainPlugins","uri","_parseDSN","lastSlash","lastIndexOf","_dsn","user","_globalSecret","pass","_getGlobalServer","_globalEndpoint","context","wrap","_before","__raven_wrapper__","wrapped","deep","_ignoreNextOnError","captureException","property","_detachPromiseRejectionHandler","_unpatchFunctionToString","_restoreBuiltIns","_restoreConsole","_promiseRejectionHandler","event","reason","unhandledPromiseRejection","bind","addEventListener","removeEventListener","trimHeadFrames","captureMessage","_getCaptureExceptionOptionsFromPlainObject","_handleStackInfo","currentOptions","exKeys","sort","fingerprint","md5","__serialized__","initialCall","fileurl","_prepareFrames","_send","captureBreadcrumb","crumb","timestamp","breadcrumbCallback","shift","addPlugin","plugin","pluginArgs","setUserContext","setExtraContext","_mergeContext","setTagsContext","tags","clearContext","getContext","setEnvironment","environment","setRelease","setDataCallback","dataCallback","setBreadcrumbCallback","setShouldSendCallback","shouldSendCallback","setTransport","transport","lastEventId","ravenNotConfiguredError","afterLoad","RavenConfig","showReportDialog","eventId","encode","qs","email","globalServer","script","createElement","async","src","head","body","appendChild","_triggerEvent","eventType","evt","toUpperCase","createEvent","initEvent","createEventObject","dispatchEvent","fireEvent","_breadcrumbEventHandler","evtName","target","category","_keypressEventHandler","isContentEditable","timeout","clearTimeout","_captureUrlChange","from","to","parsedLoc","parsedTo","parsedFrom","_originalFunctionToString","wrappedBuiltIns","wrapTimeFn","fn","originalCallback","wrapEventTarget","proto","capture","secure","handleEvent","before","clickHandler","keypressHandler","requestAnimationFrame","cb","eventTargets","wrapProp","prop","xhrproto","XMLHttpRequest","origOpen","__raven_xhr","status_code","origSend","onreadystatechangeHandler","readyState","status","props","onreadystatechange","origFetch","fetchInput","fetchData","then","response","attachEvent","hasPushAndReplaceState","app","runtime","history","pushState","replaceState","oldOnPopState","onpopstate","currentHref","historyReplacementFunction","origHistFunction","log","consoleMethodCallback","builtin","installer","m","allowSecretKey","port","_processException","frame","_normalizeFrame","in_app","stackInfoUrl","normalized","function","prefixedMessage","culprit","_trimPacket","request","Referer","breadcrumbs","_trimBreadcrumbs","urlProp","urlProps","_getHttpData","httpData","userAgent","User-Agent","referrer","_backoffDuration","_backoffStart","_shouldBackoff","_isRepeatData","current","last","_setBackoffState","retry","get","getResponseHeader","parseInt","baseData","project","platform","serverName","server_name","_sanitizeData","forEach","_sendProcessedPayload","_getUuid","allowDuplicates","event_id","auth","sentry_version","sentry_client","sentry_key","sentry_secret","_makeRequest","onSuccess","onError","opts","evaluatedHeaders","evaluatedFetchParameters","_evaluateHash","fetchParameters","defaultFetchOptions","fetchOptions","fetch","ok","XDomainRequest","onload","open","setRequestHeader","send","evaluated","setUser","setReleaseContext","raven","_Raven","RavenConstructor","noConflict","isLive","singleton","Client","shr","setup","classList","remove","keyCode","activeElement","add","player","Plyr","buttons","querySelectorAll","types","currentType","historySupport","toggleClass","state","newSource","init","video","audio","youtube","vimeo","button","parentElement","querySelector","cite","setAttribute","removeAttribute","GoogleAnalyticsObject","l","getElementsByTagName","insertBefore","ga"],"mappings":"2JAcA,SAASA,EAAQC,EAAUC,GACzB,IAAK,IAAIC,EAAI,EAAGA,EAAIF,EAASG,SAAUD,EACrC,GAAIF,EAASE,KAAOD,EAAQ,OAAOC,EAErC,OAAQ,EAyBV,SAASE,EAAWC,EAAUC,GAC5B,IAAIC,KACAC,KAWJ,OATqB,MAAjBF,IACFA,EAAgB,SAASG,EAAKC,GAC5B,OAAIH,EAAM,KAAOG,EACR,eAEF,eAAiBF,EAAKG,MAAM,EAAGZ,EAAQQ,EAAOG,IAAQE,KAAK,KAAO,MAItE,SAASH,EAAKC,GACnB,GAAIH,EAAMJ,OAAS,EAAG,CACpB,IAAIU,EAAUd,EAAQQ,EAAOO,OAC5BD,EAAUN,EAAMQ,OAAOF,EAAU,GAAKN,EAAMS,KAAKF,OACjDD,EAAUL,EAAKO,OAAOF,EAASI,EAAAA,EAAUR,GAAOD,EAAKQ,KAAKP,IAEtDV,EAAQQ,EAAOG,KAClBA,EAAQJ,EAAcY,KAAKJ,KAAML,EAAKC,SAGxCH,EAAMS,KAAKN,GAGb,OAAmB,MAAZL,EACHK,aAAiBS,MA5CzB,SAAwBT,GACtB,IAAIU,GAEFb,MAAOG,EAAMH,MACbc,QAASX,EAAMW,QACfC,KAAMZ,EAAMY,MAGd,IAAK,IAAIpB,KAAKQ,EACRa,OAAOC,UAAUC,eAAeP,KAAKR,EAAOR,KAC9CkB,EAAIlB,GAAKQ,EAAMR,IAInB,OAAOkB,EA8BwBM,CAAehB,GAASA,EACjDL,EAASa,KAAKJ,KAAML,EAAKC,KA5DvBiB,EAAAC,QAUV,SAAmBC,EAAKxB,EAAUyB,EAAQxB,GACxC,OAAOyB,KAAKC,UAAUH,EAAKzB,EAAWC,EAAUC,GAAgBwB,KAVlEG,aAAuB7B,wCCVnB8B,kBACgB,oBAAXC,OACHA,YACkB,IAAXC,EAAyBA,EAAyB,oBAATC,KAAuBA,SAyB7E,SAASC,EAAYC,GACnB,YAAgB,IAATA,EAOT,SAASC,EAAcD,GACrB,MAAgD,oBAAzChB,OAAOC,UAAUiB,SAASvB,KAAKqB,GAGxC,SAASG,EAASH,GAChB,MAAgD,oBAAzChB,OAAOC,UAAUiB,SAASvB,KAAKqB,GAGxC,SAASI,EAAQJ,GACf,MAAgD,mBAAzChB,OAAOC,UAAUiB,SAASvB,KAAKqB,GAcxC,SAASK,IACP,IAEE,OADA,IAAIC,WAAW,KACR,EACP,MAAOC,GACP,OAAO,GAIX,SAASC,IACP,KAAM,UAAWb,GAAU,OAAO,EAElC,IAIE,OAHA,IAAIc,QACJ,IAAIC,QAAQ,IACZ,IAAIC,UACG,EACP,MAAOJ,GACP,OAAO,GAsCX,SAASK,EAAKtB,EAAKuB,GACjB,IAAIlD,EAAGmD,EAEP,GAAIf,EAAYT,EAAI1B,QAClB,IAAKD,KAAK2B,EACJyB,EAAOzB,EAAK3B,IACdkD,EAASlC,KAAK,KAAMhB,EAAG2B,EAAI3B,SAK/B,GADAmD,EAAIxB,EAAI1B,OAEN,IAAKD,EAAI,EAAGA,EAAImD,EAAGnD,IACjBkD,EAASlC,KAAK,KAAMhB,EAAG2B,EAAI3B,IA+BnC,SAASqD,EAASC,EAAKC,GACrB,GAAmB,iBAARA,EACT,MAAM,IAAItC,MAAM,0DAElB,MAAmB,iBAARqC,GAA4B,IAARC,EACtBD,EAEFA,EAAIrD,QAAUsD,EAAMD,EAAMA,EAAIE,OAAO,EAAGD,GAAO,IAUxD,SAASH,EAAOK,EAAQlD,GACtB,OAAOc,OAAOC,UAAUC,eAAeP,KAAKyC,EAAQlD,GAGtD,SAASmD,EAAWC,GAQlB,IALA,IAGEC,EAHEC,KACF7D,EAAI,EACJ8D,EAAMH,EAAS1D,OAGVD,EAAI8D,EAAK9D,IAEVwC,EADJoB,EAAUD,EAAS3D,IAIjB6D,EAAQ/C,KAAK8C,EAAQG,QAAQ,8BAA+B,SACnDH,GAAWA,EAAQI,QAE5BH,EAAQ/C,KAAK8C,EAAQI,QAIzB,OAAO,IAAIC,OAAOJ,EAAQnD,KAAK,KAAM,KAoHvC,SAASwD,EAAoBC,GAC3B,IACEC,EACAC,EACA9D,EACA+D,EACAtE,EALEuE,KAOJ,IAAKJ,IAASA,EAAKK,QACjB,MAAO,GAST,GANAD,EAAIzD,KAAKqD,EAAKK,QAAQC,eAClBN,EAAKO,IACPH,EAAIzD,KAAK,IAAMqD,EAAKO,KAGtBN,EAAYD,EAAKC,YACA5B,EAAS4B,GAExB,IADAC,EAAUD,EAAUO,MAAM,OACrB3E,EAAI,EAAGA,EAAIqE,EAAQpE,OAAQD,IAC9BuE,EAAIzD,KAAK,IAAMuD,EAAQrE,IAG3B,IAAI4E,GAAiB,OAAQ,OAAQ,QAAS,OAC9C,IAAK5E,EAAI,EAAGA,EAAI4E,EAAc3E,OAAQD,IACpCO,EAAMqE,EAAc5E,IACpBsE,EAAOH,EAAKU,aAAatE,KAEvBgE,EAAIzD,KAAK,IAAMP,EAAM,KAAO+D,EAAO,MAGvC,OAAOC,EAAI7D,KAAK,IAMlB,SAASoE,EAAgBC,EAAGC,GAC1B,WAAYD,IAAMC,GA8BpB,SAASC,EAAiBC,EAAQC,GAChC,GAAIL,EAAgBI,EAAQC,GAAS,OAAO,EAE5C,IAOIJ,EAAGC,EAPHI,EAAUF,EAAOG,OACjBC,EAAUH,EAAOE,OAGrB,GAAID,EAAQnF,SAAWqF,EAAQrF,OAAQ,OAAO,EAI9C,IAAK,IAAID,EAAI,EAAGA,EAAIoF,EAAQnF,OAAQD,IAGlC,GAFA+E,EAAIK,EAAQpF,GACZgF,EAAIM,EAAQtF,GAEV+E,EAAEQ,WAAaP,EAAEO,UACjBR,EAAES,SAAWR,EAAEQ,QACfT,EAAEU,QAAUT,EAAES,OACdV,EAAY,WAAMC,EAAY,SAE9B,OAAO,EAEX,OAAO,EA4CT,IAAIU,EAAgC,EAEhCC,EAA+B,MAC/BC,EAA4B,GAMhC,SAASC,EAASrF,GAChB,OALF,SAAoBA,GAClB,QAASsF,UAAUtF,GAAOmE,MAAM,SAAS1E,OAIlC8F,CAAWlE,KAAKC,UAAUtB,IAGnC,SAASwF,EAAexF,GACtB,GAAqB,iBAAVA,EAAoB,CAE7B,OAAO6C,EAAS7C,EADA,IAEX,GACY,iBAAVA,GACU,kBAAVA,QACU,IAAVA,EAEP,OAAOA,EAGT,IAAIyF,EAAO5E,OAAOC,UAAUiB,SAASvB,KAAKR,GAG1C,MAAa,oBAATyF,EAAmC,WAC1B,mBAATA,EAAkC,UACzB,sBAATA,EACKzF,EAAMY,KAAO,cAAgBZ,EAAMY,KAAO,IAAM,aAElDZ,EA+FT,IAAA0F,GACEC,SA/jBF,SAAkB9D,GAChB,MAAuB,iBAATA,GAA8B,OAATA,GA+jBnC+D,QA1jBF,SAAiB5F,GACf,UAAW+B,SAASvB,KAAKR,IACvB,IAAK,iBAEL,IAAK,qBAEL,IAAK,wBACH,OAAO,EACT,QACE,OAAOA,aAAiBS,QAkjB5BoF,aA9iBF,SAAsB7F,GACpB,OAAOkC,KAAoD,2BAAzBH,SAASvB,KAAKR,IA8iBhD4B,YAAaA,EACbkE,WAxiBF,SAAoBjE,GAClB,MAAuB,mBAATA,GAwiBdC,cAAeA,EACfE,SAAUA,EACVC,QAASA,EACT8D,cA5hBF,SAAuBlE,GACrB,IAAKC,EAAcD,GAAO,OAAO,EAEjC,IAAK,IAAImE,KAAKnE,EACZ,GAAIA,EAAKd,eAAeiF,GACtB,OAAO,EAGX,OAAO,GAqhBP9D,mBAAoBA,EACpBG,cAAeA,EACf4D,uBA1fF,WACE,IAAK5D,IAAiB,OAAO,EAE7B,IAKE,OAHA,IAAIE,QAAQ,cACV2D,eAAgB,YAEX,EACP,MAAO9D,GACP,OAAO,IAifT+D,8BA7eF,WACE,MAAwC,mBAA1BC,uBA6edC,gBA1eF,SAAyB3D,GASvB,OARA,SAAsB4D,EAAMC,GAC1B,IAAIC,EAAiB9D,EAAS4D,IAASA,EACvC,OAAIC,GACKA,EAASC,IAEXA,IAqeT/D,KAAMA,EACNgE,YA7cF,SAAqBC,EAAMC,GACzB,OAAKA,GAGLlE,EAAKkE,EAAM,SAAS5G,EAAKC,GACvB0G,EAAK3G,GAAOC,IAEP0G,GALEA,GA4cT7D,SAAUA,EACV+D,aA7bF,SAAsBzF,GACpB,QAAKN,OAAOgG,UAGLhG,OAAOgG,SAAS1F,IA0bvByB,OAAQA,EACRM,WAAYA,EACZ4D,UA7YF,SAAmBC,GACjB,IAAIC,KAIJ,OAHAvE,EAAKsE,EAAG,SAAShH,EAAKC,GACpBgH,EAAM1G,KAAK2G,mBAAmBlH,GAAO,IAAMkH,mBAAmBjH,MAEzDgH,EAAM9G,KAAK,MAyYlBgH,MArXF,WACE,IAAIC,EAAS3F,EAAQ2F,QAAU3F,EAAQ4F,SAEvC,IAAKxF,EAAYuF,IAAWA,EAAOE,gBAAiB,CAGlD,IAAIC,EAAM,IAAIC,YAAY,GAC1BJ,EAAOE,gBAAgBC,GAGvBA,EAAI,GAAe,KAATA,EAAI,GAAc,MAE5BA,EAAI,GAAe,MAATA,EAAI,GAAe,MAE7B,IAAIE,EAAM,SAASC,GAEjB,IADA,IAAIC,EAAID,EAAI1F,SAAS,IACd2F,EAAEjI,OAAS,GAChBiI,EAAI,IAAMA,EAEZ,OAAOA,GAGT,OACEF,EAAIF,EAAI,IACRE,EAAIF,EAAI,IACRE,EAAIF,EAAI,IACRE,EAAIF,EAAI,IACRE,EAAIF,EAAI,IACRE,EAAIF,EAAI,IACRE,EAAIF,EAAI,IACRE,EAAIF,EAAI,IAIV,MAAO,mCAAmC/D,QAAQ,QAAS,SAASoE,GAClE,IAAIC,EAAqB,GAAhBC,KAAKC,SAAiB,EAE/B,OADY,MAANH,EAAYC,EAAS,EAAJA,EAAW,GACzB7F,SAAS,OAiVtBgG,iBArUF,SAA0BpE,GAWxB,IATA,IAOEqE,EALAjE,KACAkE,EAAS,EACT3E,EAAM,EAEN4E,EADY,MACUzI,OAGjBkE,GAAQsE,IATW,KAgBV,UANdD,EAAUtE,EAAoBC,KAO3BsE,EAAS,GAAK3E,EAAMS,EAAItE,OAASyI,EAAYF,EAAQvI,QAhBvC,KAqBjBsE,EAAIzD,KAAK0H,GAET1E,GAAO0E,EAAQvI,OACfkE,EAAOA,EAAKwE,WAGd,OAAOpE,EAAIqE,UAAUlI,KAvBP,QA+TdwD,oBAAqBA,EACrB2E,gBA5OF,SAAyBC,EAAKC,GAC5B,OAAIjE,EAAgBgE,EAAKC,KAEzBD,EAAMA,EAAIE,OAAO,GACjBD,EAAMA,EAAIC,OAAO,GAEbF,EAAI7C,OAAS8C,EAAI9C,MAAQ6C,EAAItI,QAAUuI,EAAIvI,QAbxBuE,EAgBH+D,EAAIG,WAhBEjE,EAgBU+D,EAAIE,aAfjC7G,EAAY2C,KAAM3C,EAAY4C,KAiB9BC,EAAiB6D,EAAIG,WAAYF,EAAIE,cAlB9C,IAAyBlE,EAAGC,GAoP1BC,iBAAkBA,EAClBiE,SAxYF,SAAkBC,GAChB,GAAmB,iBAARA,EAAkB,SAC7B,IAAIC,EAAQD,EAAIC,MAAM,kEAGlBC,EAAQD,EAAM,IAAM,GACpBE,EAAWF,EAAM,IAAM,GAC3B,OACEG,SAAUH,EAAM,GAChBI,KAAMJ,EAAM,GACZK,KAAML,EAAM,GACZM,SAAUN,EAAM,GAAKC,EAAQC,IA8X/BK,KA9LF,SAAchI,EAAKP,EAAMwI,EAAaC,GACpC,GAAW,MAAPlI,EAAJ,CACA,IAAImI,EAAOnI,EAAIP,GACfO,EAAIP,GAAQwI,EAAYE,GACxBnI,EAAIP,GAAM2I,WAAY,EACtBpI,EAAIP,GAAM4I,SAAWF,EACjBD,GACFA,EAAM/I,MAAMa,EAAKP,EAAM0I,MAwLzBG,SA9KF,SAAkBC,EAAOC,GACvB,IAAK1H,EAAQyH,GAAQ,MAAO,GAI5B,IAFA,IAAIE,KAEKpK,EAAI,EAAGA,EAAIkK,EAAMjK,OAAQD,IAChC,IACEoK,EAAOtJ,KAAKuJ,OAAOH,EAAMlK,KACzB,MAAO4C,GACPwH,EAAOtJ,KAAK,gCAIhB,OAAOsJ,EAAO1J,KAAKyJ,IAkKnBG,mBAzGF,SAASA,EAAmBC,EAAIC,EAAOC,GACrC,IAAKnI,EAAciI,GAAK,OAAOA,EAG/BE,EAA2B,iBAD3BD,EAAyB,iBAAVA,EAAqB9E,EAAgC8E,GAC9B7E,EAA+B8E,EAErE,IAAIC,EAvBN,SAASC,EAAgBnK,EAAOgK,GAC9B,OAAc,IAAVA,EAAoBxE,EAAexF,GAEnC8B,EAAc9B,GACTa,OAAOf,KAAKE,GAAOoK,OAAO,SAASC,EAAKtK,GAE7C,OADAsK,EAAItK,GAAOoK,EAAgBnK,EAAMD,GAAMiK,EAAQ,GACxCK,OAEAC,MAAMrI,QAAQjC,GAChBA,EAAMuK,IAAI,SAASC,GACxB,OAAOL,EAAgBK,EAAKR,EAAQ,KAIjCxE,EAAexF,GASLmK,CAAgBJ,EAAIC,GAErC,OAAI3E,EAAS/D,EAAU4I,IAAeD,EAC7BH,EAAmBC,EAAIC,EAAQ,GAGjCE,GA8FPO,wBA3FF,SAAiC3K,EAAM4K,GACrC,GAAoB,iBAAT5K,GAAqC,iBAATA,EAAmB,OAAOA,EAAKiC,WACtE,IAAKuI,MAAMrI,QAAQnC,GAAO,MAAO,GAKjC,GAAoB,KAHpBA,EAAOA,EAAK6K,OAAO,SAAS5K,GAC1B,MAAsB,iBAARA,KAEPN,OAAc,MAAO,uBAG9B,GADAiL,EAAiC,iBAAdA,EAAyBtF,EAA4BsF,EACpE5K,EAAK,GAAGL,QAAUiL,EAAW,OAAO5K,EAAK,GAE7C,IAAK,IAAI8K,EAAW9K,EAAKL,OAAQmL,EAAW,EAAGA,IAAY,CACzD,IAAIV,EAAapK,EAAKG,MAAM,EAAG2K,GAAU1K,KAAK,MAC9C,KAAIgK,EAAWzK,OAASiL,GACxB,OAAIE,IAAa9K,EAAKL,OAAeyK,EAC9BA,EAAa,IAGtB,MAAO,IAyEPW,SAtEF,SAAkBnB,EAAOoB,GACvB,IAAK7I,EAAQ6I,IAAkB7I,EAAQ6I,IAAyC,IAAxBA,EAAarL,OACnE,OAAOiK,EAET,IAEIqB,EAFAC,EAAiB9H,EAAW4H,GAC5BG,EAAe,WAGnB,IACEF,EAAY1J,KAAK6J,MAAM5J,EAAUoI,IACjC,MAAOyB,GACP,OAAOzB,EAwBT,OArBA,SAAS0B,EAAeC,GACtB,OAAIpJ,EAAQoJ,GACHA,EAAYd,IAAI,SAASC,GAC9B,OAAOY,EAAeZ,KAItB1I,EAAcuJ,GACTxK,OAAOf,KAAKuL,GAAajB,OAAO,SAASC,EAAKiB,GAMnD,OALIN,EAAeO,KAAKD,GACtBjB,EAAIiB,GAAKL,EAETZ,EAAIiB,GAAKF,EAAeC,EAAYC,IAE/BjB,OAIJgB,EAGFD,CAAeL,KCtjBpBS,GACFC,qBAAqB,EACrBC,OAAO,GAILlK,EACgB,oBAAXC,OACHA,YACkB,IAAXC,EAAyBA,EAAyB,oBAATC,KAAuBA,QAGzEgK,KAAY1L,MACZ2L,EAAmB,IAGnBC,EAAiB,0GAErB,SAASC,IACP,MAAwB,oBAAbC,UAAiD,MAArBA,SAASC,SAAyB,GAElED,SAASC,SAASC,KA0C3BT,EAASU,OAAS,WAChB,IA0DIC,EAAoBC,EA1DpBC,KACFC,EAAW,KACXC,EAAgB,KAChBC,EAAqB,KAmCvB,SAASC,EAAe5M,EAAO6M,GAC7B,IAAIC,EAAY,KAChB,IAAID,GAAkBlB,EAASC,oBAA/B,CAGA,IAAK,IAAIjM,KAAK6M,EACZ,GAAIA,EAAStL,eAAevB,GAC1B,IACE6M,EAAS7M,GAAGoN,MAAM,MAAO/M,GAAOgN,OAAOlB,EAAOnL,KAAKsM,UAAW,KAC9D,MAAOC,GACPJ,EAAYI,EAKlB,GAAIJ,EACF,MAAMA,GAiBV,SAASK,EAAsBC,EAAKtE,EAAKuE,EAAQC,EAAOpD,GACtD,IAEI4C,EAAYjH,EAAMG,aAAakE,GAAMA,EAAGqD,MAAQrD,EAEhDpJ,EAAU+E,EAAMG,aAAaoH,GAAOA,EAAItM,QAAUsM,EAEtD,GAAIT,EACFhB,EAAS6B,kBAAkBC,oCACzBd,EACA7D,EACAuE,EACAvM,GAEF4M,SACK,GAAIZ,GAAajH,EAAME,QAAQ+G,GAOpCF,EADQjB,EAAS6B,kBAAkBV,IACb,OACjB,CACL,IAUMa,EAVFxB,GACFrD,IAAKA,EACL8E,KAAMP,EACNQ,OAAQP,GAGNvM,OAAO+M,EAGX,GAAkC,uBAA3B5L,SAASvB,KAAKG,IACf6M,EAAS7M,EAAQiI,MAAMiD,MAEzBjL,EAAO4M,EAAO,GACd7M,EAAU6M,EAAO,IAIrBxB,EAAS4B,KAAOhC,EAQhBa,GALE7L,KAAMA,EACND,QAASA,EACTgI,IAAKmD,IACLjM,OAAQmM,KAEY,GAGxB,QAAIG,GACKA,EAAmBS,MAAMxM,KAAM0M,WAwB1C,SAASS,IACP,IAAIM,EAAsBrB,EACxBsB,EAAYxB,EACdA,EAAW,KACXE,EAAqB,KACrBD,EAAgB,KAChBE,EAAeG,MAAM,MAAOiB,GAAqB,GAAOhB,OAAOiB,IAUjE,SAAS5B,EAAOnC,EAAIgE,GAClB,IAAIC,EAAOrC,EAAOnL,KAAKsM,UAAW,GAClC,GAAIN,EAAoB,CACtB,GAAID,IAAkBxC,EACpB,OAEAwD,IAIJ,IAAI1N,EAAQ2L,EAAS6B,kBAAkBtD,GAevC,GAdAyC,EAAqB3M,EACrB0M,EAAgBxC,EAChBuC,EAAW0B,EAMXC,WAAW,WACL1B,IAAkBxC,GACpBwD,KAED1N,EAAMqO,WAAa,IAAO,IAEb,IAAZH,EACF,MAAMhE,EAOV,OAHAmC,EAAOiC,UAzLP,SAAmBC,GA0HbhC,IAGJD,EAAqB3K,EAAQ6M,QAC7B7M,EAAQ6M,QAAUrB,EAClBZ,GAA2B,GA7H3BC,EAAS/L,KAAK8N,IAwLhBlC,EAAOoC,YAjLP,SAAqBF,GACnB,IAAK,IAAI5O,EAAI6M,EAAS5M,OAAS,EAAGD,GAAK,IAAKA,EACtC6M,EAAS7M,KAAO4O,GAClB/B,EAAShM,OAAOb,EAAG,IA+KzB0M,EAAOqC,UAvKP,WA+GOnC,IAGL5K,EAAQ6M,QAAUlC,EAClBC,GAA2B,EAC3BD,OAAqBwB,GAlHrBtB,MAsKKH,EAtMS,GA4PlBV,EAAS6B,kBAAoB,WA4C3B,SAASmB,EAA+BzE,GACtC,QAAwB,IAAbA,EAAGlK,OAA0BkK,EAAGlK,MAA3C,CAiBA,IAfA,IAUI4O,EACAC,EACAC,EAZAC,EAAS,0IACTC,EAAQ,wHAGRC,EAAQ,6JAERC,EAAY,gDACZC,EAAa,gCACbC,EAAQlF,EAAGlK,MAAMsE,MAAM,MACvBtE,KAMKL,GAFO,sBAAsB0P,KAAKnF,EAAGpJ,SAEjC,GAAGgC,EAAIsM,EAAMxP,OAAQD,EAAImD,IAAKnD,EAAG,CAC5C,GAAKkP,EAAQE,EAAOM,KAAKD,EAAMzP,IAAM,CACnC,IAAI2P,EAAWT,EAAM,IAAqC,IAA/BA,EAAM,GAAGrP,QAAQ,UAC/BqP,EAAM,IAAmC,IAA7BA,EAAM,GAAGrP,QAAQ,UAC3BoP,EAAWO,EAAWE,KAAKR,EAAM,OAE9CA,EAAM,GAAKD,EAAS,GACpBC,EAAM,GAAKD,EAAS,GACpBC,EAAM,GAAKD,EAAS,IAEtBE,GACEhG,IAAMwG,EAAsB,KAAXT,EAAM,GACvBd,KAAMc,EAAM,IAAM9C,EAClBoC,KAAMmB,GAAYT,EAAM,OACxBjB,KAAMiB,EAAM,IAAMA,EAAM,GAAK,KAC7BhB,OAAQgB,EAAM,IAAMA,EAAM,GAAK,WAE5B,GAAKA,EAAQG,EAAMK,KAAKD,EAAMzP,IACnCmP,GACEhG,IAAK+F,EAAM,GACXd,KAAMc,EAAM,IAAM9C,EAClBoC,QACAP,MAAOiB,EAAM,GACbhB,OAAQgB,EAAM,IAAMA,EAAM,GAAK,UAE5B,CAAA,KAAKA,EAAQI,EAAMI,KAAKD,EAAMzP,KAsBnC,SArBakP,EAAM,IAAMA,EAAM,GAAGrP,QAAQ,YAAc,IACzCoP,EAAWM,EAAUG,KAAKR,EAAM,MAE7CA,EAAM,GAAKD,EAAS,GACpBC,EAAM,GAAKD,EAAS,GACpBC,EAAM,GAAK,MACI,IAANlP,GAAYkP,EAAM,SAAiC,IAApB3E,EAAGqF,eAK3CvP,EAAM,GAAG6N,OAAS3D,EAAGqF,aAAe,GAEtCT,GACEhG,IAAK+F,EAAM,GACXd,KAAMc,EAAM,IAAM9C,EAClBoC,KAAMU,EAAM,GAAKA,EAAM,GAAGvK,MAAM,QAChCsJ,KAAMiB,EAAM,IAAMA,EAAM,GAAK,KAC7BhB,OAAQgB,EAAM,IAAMA,EAAM,GAAK,OAM9BC,EAAQf,MAAQe,EAAQlB,OAC3BkB,EAAQf,KAAOhC,GAGjB/L,EAAMS,KAAKqO,GAGb,OAAK9O,EAAMJ,QAKTmB,KAAMmJ,EAAGnJ,KACTD,QAASoJ,EAAGpJ,QACZgI,IAAKmD,IACLjM,MAAOA,GAPA,MAwBX,SAASyN,EAAoC+B,EAAW1G,EAAKuE,EAAQvM,GACnE,IAAI2O,GACF3G,IAAKA,EACL8E,KAAMP,GAGR,GAAIoC,EAAQ3G,KAAO2G,EAAQ7B,KAAM,CAO/B,GANA4B,EAAUnB,YAAa,EAElBoB,EAAQ1B,OACX0B,EAAQ1B,KAAOhC,GAGbyD,EAAUxP,MAAMJ,OAAS,GACvB4P,EAAUxP,MAAM,GAAG8I,MAAQ2G,EAAQ3G,IAAK,CAC1C,GAAI0G,EAAUxP,MAAM,GAAG4N,OAAS6B,EAAQ7B,KACtC,OAAO,EACF,IACJ4B,EAAUxP,MAAM,GAAG4N,MACpB4B,EAAUxP,MAAM,GAAG+N,OAAS0B,EAAQ1B,KAGpC,OADAyB,EAAUxP,MAAM,GAAG4N,KAAO6B,EAAQ7B,MAC3B,EAOb,OAFA4B,EAAUxP,MAAM0P,QAAQD,GACxBD,EAAUG,SAAU,GACb,EAKT,OAHEH,EAAUnB,YAAa,GAGlB,EAYT,SAASuB,EAAsC1F,EAAIC,GASjD,IARA,IAIE0E,EACAgB,EALEC,EAAe,qEACjB9P,KACA+P,KACAC,GAAY,EAMRC,EAAOL,EAAsCM,OACjDD,IAASD,EACTC,EAAOA,EAAKC,OAEZ,GAAID,IAASzC,GAAqByC,IAAStE,EAASU,OAApD,CAkBA,GAbAwD,GACE/G,IAAK,KACLiF,KAAMhC,EACN6B,KAAM,KACNC,OAAQ,MAGNoC,EAAKlP,KACP8O,EAAK9B,KAAOkC,EAAKlP,MACP8N,EAAQiB,EAAaT,KAAKY,EAAK/N,eACzC2N,EAAK9B,KAAOc,EAAM,SAGK,IAAdgB,EAAK9B,KACd,IACE8B,EAAK9B,KAAOc,EAAMhF,MAAMsG,UAAU,EAAGtB,EAAMhF,MAAMrK,QAAQ,MACzD,MAAO+C,IAGPwN,EAAM,GAAKE,GACbD,GAAY,EAEZD,EAAM,GAAKE,IAAQ,EAGrBjQ,EAAMS,KAAKoP,GAGT1F,GAGFnK,EAAMQ,OAAO,EAAG2J,GAGlB,IAAIiG,GACFrP,KAAMmJ,EAAGnJ,KACTD,QAASoJ,EAAGpJ,QACZgI,IAAKmD,IACLjM,MAAOA,GAQT,OANAyN,EACE2C,EACAlG,EAAGmG,WAAanG,EAAGoG,SACnBpG,EAAG0D,MAAQ1D,EAAGqG,WACdrG,EAAGpJ,SAAWoJ,EAAGsG,aAEZJ,EAQT,SAAS5C,EAAkBtD,EAAIC,GAC7B,IAAInK,EAAQ,KACZmK,EAAiB,MAATA,EAAgB,GAAKA,EAE7B,IAEE,GADAnK,EAAQ2O,EAA+BzE,GAErC,OAAOlK,EAET,MAAOuC,GACP,GAAIoJ,EAASE,MACX,MAAMtJ,EAIV,IAEE,GADAvC,EAAQ4P,EAAsC1F,EAAIC,EAAQ,GAExD,OAAOnK,EAET,MAAOuC,GACP,GAAIoJ,EAASE,MACX,MAAMtJ,EAGV,OACExB,KAAMmJ,EAAGnJ,KACTD,QAASoJ,EAAGpJ,QACZgI,IAAKmD,KAOT,OAHAuB,EAAkBC,oCAAsCA,EACxDD,EAAkBmB,+BAAiCA,EAE5CnB,EA1SoB,GA6S7B,IAAAiD,EAAiB9E,EC7lBjB,SAAS+E,EAAQC,EAAGC,GAClB,IAAIC,GAAW,MAAJF,IAAmB,MAAJC,GAE1B,OADWD,GAAK,KAAOC,GAAK,KAAOC,GAAO,KAC3B,GAAa,MAANA,EAaxB,SAASC,EAAOC,EAAGrM,EAAGC,EAAGgM,EAAGK,EAAGC,GAC7B,OAAOP,GARc9I,EAQQ8I,EAAQA,EAAQhM,EAAGqM,GAAIL,EAAQC,EAAGM,OARrCC,EAQ0CF,GAP7CpJ,IAAS,GAAKsJ,EAOmCvM,GAR1E,IAAuBiD,EAAKsJ,EAU5B,SAASC,EAAMzM,EAAGC,EAAGmD,EAAGsJ,EAAGT,EAAGK,EAAGC,GAC/B,OAAOH,EAAQnM,EAAImD,GAAOnD,EAAIyM,EAAI1M,EAAGC,EAAGgM,EAAGK,EAAGC,GAEhD,SAASI,EAAM3M,EAAGC,EAAGmD,EAAGsJ,EAAGT,EAAGK,EAAGC,GAC/B,OAAOH,EAAQnM,EAAIyM,EAAMtJ,GAAKsJ,EAAI1M,EAAGC,EAAGgM,EAAGK,EAAGC,GAEhD,SAASK,EAAM5M,EAAGC,EAAGmD,EAAGsJ,EAAGT,EAAGK,EAAGC,GAC/B,OAAOH,EAAOnM,EAAImD,EAAIsJ,EAAG1M,EAAGC,EAAGgM,EAAGK,EAAGC,GAEvC,SAASM,EAAM7M,EAAGC,EAAGmD,EAAGsJ,EAAGT,EAAGK,EAAGC,GAC/B,OAAOH,EAAOhJ,GAAKnD,GAAKyM,GAAI1M,EAAGC,EAAGgM,EAAGK,EAAGC,GAM1C,SAASO,EAAQb,EAAGlN,GAKlB,IAAI9D,EACA8R,EACAC,EACAC,EACAC,EAPJjB,EAAElN,GAAO,IAAM,KAASA,EAAM,GAC9BkN,EAA8B,IAAzBlN,EAAM,KAAQ,GAAM,IAAWA,EAOpC,IAAIiB,EAAI,WACJC,GAAK,UACLmD,GAAK,WACLsJ,EAAI,UAER,IAAKzR,EAAI,EAAGA,EAAIgR,EAAE/Q,OAAQD,GAAK,GAC7B8R,EAAO/M,EACPgN,EAAO/M,EACPgN,EAAO7J,EACP8J,EAAOR,EAoEPzM,EAAI4M,EAJJ5M,EAAI4M,EAJJ5M,EAAI4M,EAJJ5M,EAAI4M,EALJ5M,EAAI2M,EAJJ3M,EAAI2M,EAJJ3M,EAAI2M,EAJJ3M,EAAI2M,EALJ3M,EAAI0M,EAJJ1M,EAAI0M,EAJJ1M,EAAI0M,EAJJ1M,EAAI0M,EALJ1M,EAAIwM,EAJJxM,EAAIwM,EAJJxM,EAAIwM,EAJJxM,EAAIwM,EAAMxM,EADVmD,EAAIqJ,EAAMrJ,EADVsJ,EAAID,EAAMC,EADV1M,EAAIyM,EAAMzM,EAAGC,EAAGmD,EAAGsJ,EAAGT,EAAEhR,GAAI,GAAI,WAChBgF,EAAGmD,EAAG6I,EAAEhR,EAAI,GAAI,IAAK,WACrB+E,EAAGC,EAAGgM,EAAEhR,EAAI,GAAI,GAAI,WACpByR,EAAG1M,EAAGiM,EAAEhR,EAAI,GAAI,IAAK,YAGrCmI,EAAIqJ,EAAMrJ,EADVsJ,EAAID,EAAMC,EADV1M,EAAIyM,EAAMzM,EAAGC,EAAGmD,EAAGsJ,EAAGT,EAAEhR,EAAI,GAAI,GAAI,WACpBgF,EAAGmD,EAAG6I,EAAEhR,EAAI,GAAI,GAAI,YACpB+E,EAAGC,EAAGgM,EAAEhR,EAAI,GAAI,IAAK,YACrByR,EAAG1M,EAAGiM,EAAEhR,EAAI,GAAI,IAAK,UAGrCmI,EAAIqJ,EAAMrJ,EADVsJ,EAAID,EAAMC,EADV1M,EAAIyM,EAAMzM,EAAGC,EAAGmD,EAAGsJ,EAAGT,EAAEhR,EAAI,GAAI,EAAG,YACnBgF,EAAGmD,EAAG6I,EAAEhR,EAAI,GAAI,IAAK,YACrB+E,EAAGC,EAAGgM,EAAEhR,EAAI,IAAK,IAAK,OACtByR,EAAG1M,EAAGiM,EAAEhR,EAAI,IAAK,IAAK,YAGtCmI,EAAIqJ,EAAMrJ,EADVsJ,EAAID,EAAMC,EADV1M,EAAIyM,EAAMzM,EAAGC,EAAGmD,EAAGsJ,EAAGT,EAAEhR,EAAI,IAAK,EAAG,YACpBgF,EAAGmD,EAAG6I,EAAEhR,EAAI,IAAK,IAAK,UACtB+E,EAAGC,EAAGgM,EAAEhR,EAAI,IAAK,IAAK,YACtByR,EAAG1M,EAAGiM,EAAEhR,EAAI,IAAK,GAAI,YAIrCmI,EAAIuJ,EAAMvJ,EADVsJ,EAAIC,EAAMD,EADV1M,EAAI2M,EAAM3M,EAAGC,EAAGmD,EAAGsJ,EAAGT,EAAEhR,EAAI,GAAI,GAAI,WACpBgF,EAAGmD,EAAG6I,EAAEhR,EAAI,GAAI,GAAI,YACpB+E,EAAGC,EAAGgM,EAAEhR,EAAI,IAAK,GAAI,WACrByR,EAAG1M,EAAGiM,EAAEhR,GAAI,IAAK,WAGjCmI,EAAIuJ,EAAMvJ,EADVsJ,EAAIC,EAAMD,EADV1M,EAAI2M,EAAM3M,EAAGC,EAAGmD,EAAGsJ,EAAGT,EAAEhR,EAAI,GAAI,GAAI,WACpBgF,EAAGmD,EAAG6I,EAAEhR,EAAI,IAAK,EAAG,UACpB+E,EAAGC,EAAGgM,EAAEhR,EAAI,IAAK,IAAK,WACtByR,EAAG1M,EAAGiM,EAAEhR,EAAI,GAAI,IAAK,WAGrCmI,EAAIuJ,EAAMvJ,EADVsJ,EAAIC,EAAMD,EADV1M,EAAI2M,EAAM3M,EAAGC,EAAGmD,EAAGsJ,EAAGT,EAAEhR,EAAI,GAAI,EAAG,WACnBgF,EAAGmD,EAAG6I,EAAEhR,EAAI,IAAK,GAAI,YACrB+E,EAAGC,EAAGgM,EAAEhR,EAAI,GAAI,IAAK,WACrByR,EAAG1M,EAAGiM,EAAEhR,EAAI,GAAI,GAAI,YAGpCmI,EAAIuJ,EAAMvJ,EADVsJ,EAAIC,EAAMD,EADV1M,EAAI2M,EAAM3M,EAAGC,EAAGmD,EAAGsJ,EAAGT,EAAEhR,EAAI,IAAK,GAAI,YACrBgF,EAAGmD,EAAG6I,EAAEhR,EAAI,GAAI,GAAI,UACpB+E,EAAGC,EAAGgM,EAAEhR,EAAI,GAAI,GAAI,YACpByR,EAAG1M,EAAGiM,EAAEhR,EAAI,IAAK,IAAK,YAItCmI,EAAIwJ,EAAMxJ,EADVsJ,EAAIE,EAAMF,EADV1M,EAAI4M,EAAM5M,EAAGC,EAAGmD,EAAGsJ,EAAGT,EAAEhR,EAAI,GAAI,GAAI,QACpBgF,EAAGmD,EAAG6I,EAAEhR,EAAI,GAAI,IAAK,YACrB+E,EAAGC,EAAGgM,EAAEhR,EAAI,IAAK,GAAI,YACrByR,EAAG1M,EAAGiM,EAAEhR,EAAI,IAAK,IAAK,UAGtCmI,EAAIwJ,EAAMxJ,EADVsJ,EAAIE,EAAMF,EADV1M,EAAI4M,EAAM5M,EAAGC,EAAGmD,EAAGsJ,EAAGT,EAAEhR,EAAI,GAAI,GAAI,YACpBgF,EAAGmD,EAAG6I,EAAEhR,EAAI,GAAI,GAAI,YACpB+E,EAAGC,EAAGgM,EAAEhR,EAAI,GAAI,IAAK,WACrByR,EAAG1M,EAAGiM,EAAEhR,EAAI,IAAK,IAAK,YAGtCmI,EAAIwJ,EAAMxJ,EADVsJ,EAAIE,EAAMF,EADV1M,EAAI4M,EAAM5M,EAAGC,EAAGmD,EAAGsJ,EAAGT,EAAEhR,EAAI,IAAK,EAAG,WACpBgF,EAAGmD,EAAG6I,EAAEhR,GAAI,IAAK,WACjB+E,EAAGC,EAAGgM,EAAEhR,EAAI,GAAI,IAAK,WACrByR,EAAG1M,EAAGiM,EAAEhR,EAAI,GAAI,GAAI,UAGpCmI,EAAIwJ,EAAMxJ,EADVsJ,EAAIE,EAAMF,EADV1M,EAAI4M,EAAM5M,EAAGC,EAAGmD,EAAGsJ,EAAGT,EAAEhR,EAAI,GAAI,GAAI,WACpBgF,EAAGmD,EAAG6I,EAAEhR,EAAI,IAAK,IAAK,WACtB+E,EAAGC,EAAGgM,EAAEhR,EAAI,IAAK,GAAI,WACrByR,EAAG1M,EAAGiM,EAAEhR,EAAI,GAAI,IAAK,WAIrCmI,EAAIyJ,EAAMzJ,EADVsJ,EAAIG,EAAMH,EADV1M,EAAI6M,EAAM7M,EAAGC,EAAGmD,EAAGsJ,EAAGT,EAAEhR,GAAI,GAAI,WAChBgF,EAAGmD,EAAG6I,EAAEhR,EAAI,GAAI,GAAI,YACpB+E,EAAGC,EAAGgM,EAAEhR,EAAI,IAAK,IAAK,YACtByR,EAAG1M,EAAGiM,EAAEhR,EAAI,GAAI,IAAK,UAGrCmI,EAAIyJ,EAAMzJ,EADVsJ,EAAIG,EAAMH,EADV1M,EAAI6M,EAAM7M,EAAGC,EAAGmD,EAAGsJ,EAAGT,EAAEhR,EAAI,IAAK,EAAG,YACpBgF,EAAGmD,EAAG6I,EAAEhR,EAAI,GAAI,IAAK,YACrB+E,EAAGC,EAAGgM,EAAEhR,EAAI,IAAK,IAAK,SACtByR,EAAG1M,EAAGiM,EAAEhR,EAAI,GAAI,IAAK,YAGrCmI,EAAIyJ,EAAMzJ,EADVsJ,EAAIG,EAAMH,EADV1M,EAAI6M,EAAM7M,EAAGC,EAAGmD,EAAGsJ,EAAGT,EAAEhR,EAAI,GAAI,EAAG,YACnBgF,EAAGmD,EAAG6I,EAAEhR,EAAI,IAAK,IAAK,UACtB+E,EAAGC,EAAGgM,EAAEhR,EAAI,GAAI,IAAK,YACrByR,EAAG1M,EAAGiM,EAAEhR,EAAI,IAAK,GAAI,YAGrCmI,EAAIyJ,EAAMzJ,EADVsJ,EAAIG,EAAMH,EADV1M,EAAI6M,EAAM7M,EAAGC,EAAGmD,EAAGsJ,EAAGT,EAAEhR,EAAI,GAAI,GAAI,WACpBgF,EAAGmD,EAAG6I,EAAEhR,EAAI,IAAK,IAAK,YACtB+E,EAAGC,EAAGgM,EAAEhR,EAAI,GAAI,GAAI,WACpByR,EAAG1M,EAAGiM,EAAEhR,EAAI,GAAI,IAAK,WAErC+E,EAAIgM,EAAQhM,EAAG+M,GACf9M,EAAI+L,EAAQ/L,EAAG+M,GACf5J,EAAI4I,EAAQ5I,EAAG6J,GACfP,EAAIV,EAAQU,EAAGQ,GAEjB,OAAQlN,EAAGC,EAAGmD,EAAGsJ,GAMnB,SAASS,EAAUhI,GACjB,IAAIlK,EACAoK,EAAS,GACT+H,EAA0B,GAAfjI,EAAMjK,OACrB,IAAKD,EAAI,EAAGA,EAAImS,EAAUnS,GAAK,EAC7BoK,GAAUC,OAAO+H,aAAclI,EAAMlK,GAAK,KAAQA,EAAI,GAAO,KAE/D,OAAOoK,EAOT,SAASiI,EAAUnI,GACjB,IAAIlK,EACAoK,KAEJ,IADAA,GAAQF,EAAMjK,QAAU,GAAK,QAAKkO,EAC7BnO,EAAI,EAAGA,EAAIoK,EAAOnK,OAAQD,GAAK,EAClCoK,EAAOpK,GAAK,EAEd,IAAIsS,EAAyB,EAAfpI,EAAMjK,OACpB,IAAKD,EAAI,EAAGA,EAAIsS,EAAStS,GAAK,EAC5BoK,EAAOpK,GAAK,KAAiC,IAA1BkK,EAAMqI,WAAWvS,EAAI,KAAeA,EAAI,GAE7D,OAAOoK,EAkCT,SAASoI,EAAStI,GAChB,IAEI8G,EACAhR,EAFAoK,EAAS,GAGb,IAAKpK,EAAI,EAAGA,EAAIkK,EAAMjK,OAAQD,GAAK,EACjCgR,EAAI9G,EAAMqI,WAAWvS,GACrBoK,GANW,mBAMMqI,OAAQzB,IAAM,EAAK,IANzB,mBAMwCyB,OAAW,GAAJzB,GAE5D,OAAO5G,EAMT,SAASsI,EAAaxI,GACpB,OAAOyI,SAASlL,mBAAmByC,IAMrC,SAAS0I,EAAOvB,GACd,OAnDF,SAAiBA,GACf,OAAOa,EAAUL,EAAQQ,EAAUhB,GAAe,EAAXA,EAAEpR,SAkDlC4S,CAAQH,EAAarB,IAK9B,SAASyB,EAAWhH,EAAG2F,GACrB,OAlDF,SAAqBlR,EAAKuG,GACxB,IAAI9G,EAIA+S,EAHAC,EAAOX,EAAU9R,GACjB0S,KACAC,KAMJ,IAJAD,EAAK,IAAMC,EAAK,SAAM/E,EAClB6E,EAAK/S,OAAS,KAChB+S,EAAOnB,EAAQmB,EAAmB,EAAbzS,EAAIN,SAEtBD,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACvBiT,EAAKjT,GAAe,UAAVgT,EAAKhT,GACfkT,EAAKlT,GAAe,WAAVgT,EAAKhT,GAGjB,OADA+S,EAAOlB,EAAQoB,EAAK5F,OAAOgF,EAAUvL,IAAQ,IAAoB,EAAdA,EAAK7G,QACjDiS,EAAUL,EAAQqB,EAAK7F,OAAO0F,GAAO,MAmCrCI,CAAYT,EAAa5G,GAAI4G,EAAajB,IAmBnD,IAAA2B,EAbA,SAAaC,EAAQ9S,EAAK+S,GACxB,OAAK/S,EAMA+S,EAGER,EAAWvS,EAAK8S,GAbhBb,EAASM,EAWIvS,EAAK8S,IANlBC,EAGEV,EAAOS,GAdTb,EAASI,EAYES,KC/PpB,SAASE,EAAiBpS,GACxBP,KAAKQ,KAAO,mBACZR,KAAKO,QAAUA,EAEjBoS,EAAiBjS,UAAY,IAAIL,MACjCsS,EAAiBjS,UAAUkS,YAAcD,EAEzC,IAAAE,EAAiBF,ECgCjBG,EArCiB,SAASC,EAASC,EAAO1Q,GACxC,IAAI2Q,EAAuBF,EAAQC,GAC/BE,EAAkBH,EAEtB,GAAMC,KAASD,EAAf,CAIA,IAAII,EAAwB,SAAVH,EAAmB,UAAYA,EAEjDD,EAAQC,GAAS,WACf,IAAIpF,KAAU/N,MAAMO,KAAKsM,WAErBG,EAAMvH,EAAM+D,SAASuE,EAAM,KAC3B1H,GAAQ8M,MAAOG,EAAaC,OAAQ,UAAWC,OAAQ3G,UAAWkB,IAExD,WAAVoF,GACc,IAAZpF,EAAK,KAEPf,EACE,sBAAwBvH,EAAM+D,SAASuE,EAAK/N,MAAM,GAAI,MAAQ,kBAChEqG,EAAKmN,MAAM3G,UAAYkB,EAAK/N,MAAM,GAClCyC,GAAYA,EAASuK,EAAK3G,IAG5B5D,GAAYA,EAASuK,EAAK3G,GAIxB+M,GAGFK,SAAS5S,UAAU8L,MAAMpM,KAAK6S,EAAsBC,EAAiBtF,MC1BvEpI,EAAUF,EAAME,QAChBD,EAAWD,EAAMC,SACjB7D,EAAgB4D,EAAM5D,cACtB+D,EAAeH,EAAMG,aACrBjE,EAAc8D,EAAM9D,YACpBkE,EAAaJ,EAAMI,WACnB9D,EAAW0D,EAAM1D,SACjBC,GAAUyD,EAAMzD,QAChB8D,GAAgBL,EAAMK,cACtBtD,GAAOiD,EAAMjD,KACbgE,GAAcf,EAAMe,YACpB5D,GAAW6C,EAAM7C,SACjB+D,GAAelB,EAAMkB,aACrBhE,GAAS8C,EAAM9C,OACfM,GAAawC,EAAMxC,WACnB4D,GAAYpB,EAAMoB,UAClBI,GAAQxB,EAAMwB,MACda,GAAmBrC,EAAMqC,iBACzBM,GAAkB3C,EAAM2C,gBACxB5D,GAAmBiB,EAAMjB,iBACzBiE,GAAWhD,EAAMgD,SACjBS,GAAOzD,EAAMyD,KACb9G,GAAgBqD,EAAMrD,cACtB4D,GAAyBP,EAAMO,uBAC/BwE,GAA0B/E,EAAM+E,wBAChCX,GAAqBpE,EAAMoE,mBAC3Be,GAAWnF,EAAMmF,SAEjB8I,GAAoBC,EAEpBC,GAAU,2CAA2C1P,MAAM,KAC7D2P,GAAa,gEAEf,SAASC,KACP,OAAQ,IAAIC,KAId,IAAIxS,GACgB,oBAAXC,OACHA,YACkB,IAAXC,EAAyBA,EAAyB,oBAATC,KAAuBA,QACzEsS,GAAYzS,GAAQuK,SACpBmI,GAAa1S,GAAQ2S,UAEzB,SAASC,GAAqB7N,EAAU7D,GACtC,OAAOoD,EAAWpD,GACd,SAAS4D,GACP,OAAO5D,EAAS4D,EAAMC,IAExB7D,EAMN,SAAS2R,KA2DP,IAAK,IAAIC,KA1DTlU,KAAKmU,WAA8B,iBAATlT,OAAqBA,KAAKC,WAEpDlB,KAAKoU,cAAgB5S,EAAYqS,IACjC7T,KAAKqU,eAAiB7S,EAAYsS,IAClC9T,KAAKsU,uBAAyB,KAC9BtU,KAAKuU,UAAY,KACjBvU,KAAKwU,aAAe,KACpBxU,KAAKyU,cAAgB,KACrBzU,KAAK0U,WAAa,KAClB1U,KAAK2U,eAAiB,KACtB3U,KAAK4U,kBACL5U,KAAK6U,gBAEHC,QAAS1T,GAAQ2T,gBAAkB3T,GAAQ2T,eAAejR,GAC1DsP,OAAQ,aACR4B,gBACAC,cACAC,iBACAC,gBACAC,QAAS,KACT/J,qBAAqB,EACrBgK,4BAA4B,EAC5BC,iBAAkB,EAElBC,aAAc,IACdC,gBAAiB,GACjBC,iBAAiB,EACjBC,YAAY,EACZC,WAAY,EACZjL,iBAEF1K,KAAK4V,gBACH1B,OAAQ,OACR2B,WAAW,EAKX/P,eAAgBD,KAA2B,SAAW,IAExD7F,KAAK8V,eAAiB,EACtB9V,KAAK+V,mBAAoB,EACzB/V,KAAKgW,8BAAgC3V,MAAMmV,gBAG3CxV,KAAKiW,iBAAmB7U,GAAQ2R,YAChC/S,KAAKkW,2BACLlW,KAAKmW,YACLnW,KAAKoW,WAAazC,KAClB3T,KAAKqW,oBACLrW,KAAKsW,gBACLtW,KAAKuW,mBAAqB,KAC1BvW,KAAKwW,iBACLxW,KAAKyW,UAAYrV,GAAQwK,SACzB5L,KAAK0W,UAAY1W,KAAKyW,WAAazW,KAAKyW,UAAU5K,KAClD7L,KAAK2W,gBAGc3W,KAAKiW,iBACtBjW,KAAKkW,wBAAwBhC,GAAUlU,KAAKiW,iBAAiB/B,GAUjED,GAAMvT,WAKJkW,QAAS,SAETtL,OAAO,EAEPF,SAAUA,EASVyL,OAAQ,SAASC,EAAKC,GACpB,IAAIxV,EAAOvB,KAEX,GAAIuB,EAAKkT,cAEP,OADAzU,KAAKgX,UAAU,QAAS,4CACjBzV,EAET,IAAKuV,EAAK,OAAOvV,EAEjB,IAAI0V,EAAgB1V,EAAKsT,eAGrBkC,GACF1U,GAAK0U,EAAS,SAASpX,EAAKC,GAEd,SAARD,GAA0B,UAARA,GAA2B,SAARA,EACvC4B,EAAKqT,eAAejV,GAAOC,EAE3BqX,EAActX,GAAOC,IAK3B2B,EAAK2V,OAAOJ,GAIZG,EAAcjC,aAAa9U,KAAK,qBAChC+W,EAAcjC,aAAa9U,KAAK,iDAGhC+W,EAAcjC,aAAelS,GAAWmU,EAAcjC,cACtDiC,EAAchC,aAAagC,EAAchC,WAAW5V,QAChDyD,GAAWmU,EAAchC,YAE7BgC,EAAc/B,gBAAgB+B,EAAc/B,cAAc7V,QACtDyD,GAAWmU,EAAc/B,eAE7B+B,EAAc9B,aAAerS,GAAWmU,EAAc9B,cACtD8B,EAAcE,eAAiB1P,KAAK9E,IAClC,EACA8E,KAAK2P,IAAIH,EAAcE,gBAAkB,IAAK,MAGhD,IAAIE,GACFC,KAAK,EACLvE,SAAS,EACTwE,KAAK,EACL3L,UAAU,EACV4L,QAAQ,GAGN/B,EAAkBwB,EAAcxB,gBACM,uBAAnC9T,SAASvB,KAAKqV,GACnBA,EAAkBpP,GAAYgR,EAAwB5B,IACzB,IAApBA,IACTA,EAAkB4B,GAEpBJ,EAAcxB,gBAAkBA,EAEhC,IAAIgC,GACFC,UAAU,GAGRhC,EAAauB,EAAcvB,WAW/B,MAVqC,uBAA9B/T,SAASvB,KAAKsV,GACnBA,EAAarP,GAAYoR,EAAoB/B,IACrB,IAAfA,IACTA,EAAa+B,GAEfR,EAAcvB,WAAaA,EAE3BtK,EAASC,sBAAwB4L,EAAc5L,oBAGxC9J,GAWToW,QAAS,WACP,IAAIpW,EAAOvB,KAyBX,OAxBIuB,EAAKqW,YAAcrW,EAAKwU,oBAC1B3K,EAASU,OAAOiC,UAAU,WACxBxM,EAAKsW,wBAAwBrL,MAAMjL,EAAMmL,aAGvCnL,EAAKsT,eAAeQ,4BACtB9T,EAAKuW,iCAGPvW,EAAKwW,yBAEDxW,EAAKsT,eAAea,YAAcnU,EAAKsT,eAAea,WAAWgC,UACnEnW,EAAKyW,sBAGHzW,EAAKsT,eAAeY,iBAAiBlU,EAAK0W,yBAG9C1W,EAAK2W,gBAEL3W,EAAKwU,mBAAoB,GAG3B1V,MAAMmV,gBAAkBjU,EAAKsT,eAAeW,gBACrCxV,MAQTkX,OAAQ,SAASJ,GACf,IACEqB,EADSnY,KACEoY,UAAUtB,GACrBuB,EAAYF,EAAItP,KAAKyP,YAAY,KACjCzP,EAAOsP,EAAItP,KAAKjG,OAAO,EAAGyV,GAHjBrY,KAKNuY,KAAOzB,EALD9W,KAMN0U,WAAayD,EAAIK,KANXxY,KAONyY,cAAgBN,EAAIO,MAAQP,EAAIO,KAAK9V,OAAO,GAPtC5C,KAQN2U,eAAiBwD,EAAItP,KAAKjG,OAAOyV,EAAY,GARvCrY,KAUNyU,cAVMzU,KAUe2Y,iBAAiBR,GAVhCnY,KAYN4Y,gBAZM5Y,KAaJyU,cAAgB,IAAM5L,EAAO,OAbzB7I,KAauC2U,eAAiB,UAInE3U,KAAK2W,iBAWPkC,QAAS,SAAS9B,EAASvJ,EAAMI,GAO/B,OANIlI,EAAWqR,KACbnJ,EAAOJ,MACPA,EAAOuJ,EACPA,OAAUxJ,GAGLvN,KAAK8Y,KAAK/B,EAASvJ,GAAMhB,MAAMxM,KAAM4N,IAW9CkL,KAAM,SAAS/B,EAASvJ,EAAMuL,GAC5B,IAAIxX,EAAOvB,KAGX,GAAIwB,EAAYgM,KAAU9H,EAAWqR,GACnC,OAAOA,EAWT,GAPIrR,EAAWqR,KACbvJ,EAAOuJ,EACPA,OAAUxJ,IAKP7H,EAAW8H,GACd,OAAOA,EAIT,IACE,GAAIA,EAAKrE,UACP,OAAOqE,EAIT,GAAIA,EAAKwL,kBACP,OAAOxL,EAAKwL,kBAEd,MAAOhX,GAIP,OAAOwL,EAGT,SAASyL,IACP,IAAIrL,KACFxO,EAAIsN,UAAUrN,OACd6Z,GAAQnC,GAAYA,IAA4B,IAAjBA,EAAQmC,KAQzC,IANIH,GAAWrT,EAAWqT,IACxBA,EAAQvM,MAAMxM,KAAM0M,WAKftN,KAAKwO,EAAKxO,GAAK8Z,EAAO3X,EAAKuX,KAAK/B,EAASrK,UAAUtN,IAAMsN,UAAUtN,GAE1E,IAKE,OAAOoO,EAAKhB,MAAMxM,KAAM4N,GACxB,MAAO5L,GAGP,MAFAT,EAAK4X,qBACL5X,EAAK6X,iBAAiBpX,EAAG+U,GACnB/U,GAKV,IAAK,IAAIqX,KAAY7L,EACfhL,GAAOgL,EAAM6L,KACfJ,EAAQI,GAAY7L,EAAK6L,IAW7B,OARAJ,EAAQvY,UAAY8M,EAAK9M,UAEzB8M,EAAKwL,kBAAoBC,EAGzBA,EAAQ9P,WAAY,EACpB8P,EAAQ7P,SAAWoE,EAEZyL,GAQT9K,UAAW,WAWT,OAVA/C,EAASU,OAAOqC,YAEhBnO,KAAKsZ,iCACLtZ,KAAKuZ,2BACLvZ,KAAKwZ,mBACLxZ,KAAKyZ,kBAELpZ,MAAMmV,gBAAkBxV,KAAKgW,8BAC7BhW,KAAK+V,mBAAoB,EAElB/V,MAWT0Z,yBAA0B,SAASC,GACjC3Z,KAAKgX,UAAU,QAAS,4CAA6C2C,GACrE3Z,KAAKoZ,iBAAiBO,EAAMC,QAC1BvG,OACEwG,2BAA2B,MAUjC/B,+BAAgC,WAI9B,OAHA9X,KAAK0Z,yBAA2B1Z,KAAK0Z,yBAAyBI,KAAK9Z,MACnEoB,GAAQ2Y,kBACN3Y,GAAQ2Y,iBAAiB,qBAAsB/Z,KAAK0Z,0BAC/C1Z,MAQTsZ,+BAAgC,WAG9B,OAFAlY,GAAQ4Y,qBACN5Y,GAAQ4Y,oBAAoB,qBAAsBha,KAAK0Z,0BAClD1Z,MAUToZ,iBAAkB,SAASzP,EAAIoN,GAG7B,GAFAA,EAAU1Q,IAAa4T,eAAgB,GAAIlD,OAEvCtR,EAAakE,IAAOA,EAAGqD,MAEzBrD,EAAKA,EAAGqD,WACH,GAAIxH,EAAQmE,GAEjBA,EAAKA,MACA,CAAA,IAAIjI,EAAciI,GAYvB,OAAO3J,KAAKka,eACVvQ,EACAtD,GAAY0Q,GACV1O,YAAY,EACZ4R,eAAgBlD,EAAQkD,eAAiB,KAZ7ClD,EAAU/W,KAAKma,2CAA2CpD,EAASpN,GACnEA,EAAK,IAAItJ,MAAM0W,EAAQxW,SAiBzBP,KAAKsU,uBAAyB3K,EAO9B,IACE,IAAIlK,EAAQ2L,EAAS6B,kBAAkBtD,GACvC3J,KAAKoa,iBAAiB3a,EAAOsX,GAC7B,MAAO7O,GACP,GAAIyB,IAAOzB,EACT,MAAMA,EAIV,OAAOlI,MAGTma,2CAA4C,SAASE,EAAgB1Q,GACnE,IAAI2Q,EAAS7Z,OAAOf,KAAKiK,GAAI4Q,OACzBxD,EAAU1Q,GAAYgU,GACxB9Z,QACE,2CAA6C8J,GAAwBiQ,GACvEE,aAAcC,EAAIH,IAClBjH,MAAOgH,EAAehH,YAIxB,OAFA0D,EAAQ1D,MAAMqH,eAAiBhR,GAAmBC,GAE3CoN,GAUTmD,eAAgB,SAASrN,EAAKkK,GAI5B,IACI/W,KAAK6U,eAAeG,aAAa7J,OACnCnL,KAAK6U,eAAeG,aAAa7J,KAAK0B,GAFxC,CAUA,IAOIlD,EAPAzD,EAAOG,IAEP9F,QAJJsM,GAAY,IADZkK,EAAUA,OAeV,IACE,MAAM,IAAI1W,MAAMwM,GAChB,MAAO3E,GACPyB,EAAKzB,EAIPyB,EAAGnJ,KAAO,KACV,IAAIf,EAAQ2L,EAAS6B,kBAAkBtD,GAGnCgR,EAAc9Y,GAAQpC,EAAMA,QAAUA,EAAMA,MAAM,GAKlDkb,GAAoC,2BAArBA,EAAYnN,OAC7BmN,EAAclb,EAAMA,MAAM,IAG5B,IAAImb,EAAWD,GAAeA,EAAYpS,KAAQ,GAElD,KACIvI,KAAK6U,eAAeI,WAAW9J,OACjCnL,KAAK6U,eAAeI,WAAW9J,KAAKyP,OAMlC5a,KAAK6U,eAAeK,cAAc/J,MACnCnL,KAAK6U,eAAeK,cAAc/J,KAAKyP,IAF1C,CAOA,GAAI5a,KAAK6U,eAAexM,YAAe0O,GAAWA,EAAQ1O,WAAa,CAErEnC,EAAKsU,YAAkC,MAApBtU,EAAKsU,YAAsB3N,EAAM3G,EAAKsU,aAEzDzD,EAAU1Q,IAEN4T,eAAgB,GAElBlD,IAMMkD,gBAAkB,EAE1B,IAAIxV,EAASzE,KAAK6a,eAAepb,EAAOsX,GACxC7Q,EAAKmC,YAEH5D,OAAQA,EAAOuD,WAcnB,OATI9B,EAAKsU,cACPtU,EAAKsU,YAAc3Y,GAAQqE,EAAKsU,aAC5BtU,EAAKsU,aACJtU,EAAKsU,cAIZxa,KAAK8a,MAAM5U,GAEJlG,QAGT+a,kBAAmB,SAASha,GAC1B,IAAIia,EAAQ3U,IAER4U,UAAWtH,KAAQ,KAErB5S,GAGF,GAAI2E,EAAW1F,KAAK6U,eAAeqG,oBAAqB,CACtD,IAAIrL,EAAS7P,KAAK6U,eAAeqG,mBAAmBF,GAEpD,GAAIzV,EAASsK,KAAYlK,GAAckK,GACrCmL,EAAQnL,OACH,IAAe,IAAXA,EACT,OAAO7P,KAQX,OAJAA,KAAKsW,aAAapW,KAAK8a,GACnBhb,KAAKsW,aAAajX,OAASW,KAAK6U,eAAesC,gBACjDnX,KAAKsW,aAAa6E,QAEbnb,MAGTob,UAAW,SAASC,GAClB,IAAIC,KAAgBzb,MAAMO,KAAKsM,UAAW,GAO1C,OALA1M,KAAKmW,SAASjW,MAAMmb,EAAQC,IACxBtb,KAAK+V,mBACP/V,KAAKkY,gBAGAlY,MASTub,eAAgB,SAAS/C,GAIvB,OAFAxY,KAAK4U,eAAe4D,KAAOA,EAEpBxY,MASTwb,gBAAiB,SAASnI,GAGxB,OAFArT,KAAKyb,cAAc,QAASpI,GAErBrT,MAST0b,eAAgB,SAASC,GAGvB,OAFA3b,KAAKyb,cAAc,OAAQE,GAEpB3b,MAQT4b,aAAc,WAGZ,OAFA5b,KAAK4U,kBAEE5U,MAQT6b,WAAY,WAEV,OAAO5a,KAAK6J,MAAM5J,EAAUlB,KAAK4U,kBASnCkH,eAAgB,SAASC,GAGvB,OAFA/b,KAAK6U,eAAekH,YAAcA,EAE3B/b,MASTgc,WAAY,SAASlH,GAGnB,OAFA9U,KAAK6U,eAAeC,QAAUA,EAEvB9U,MAUTic,gBAAiB,SAAS3Z,GACxB,IAAI6D,EAAWnG,KAAK6U,eAAeqH,aAEnC,OADAlc,KAAK6U,eAAeqH,aAAelI,GAAqB7N,EAAU7D,GAC3DtC,MAUTmc,sBAAuB,SAAS7Z,GAC9B,IAAI6D,EAAWnG,KAAK6U,eAAeqG,mBAEnC,OADAlb,KAAK6U,eAAeqG,mBAAqBlH,GAAqB7N,EAAU7D,GACjEtC,MAUToc,sBAAuB,SAAS9Z,GAC9B,IAAI6D,EAAWnG,KAAK6U,eAAewH,mBAEnC,OADArc,KAAK6U,eAAewH,mBAAqBrI,GAAqB7N,EAAU7D,GACjEtC,MAYTsc,aAAc,SAASC,GAGrB,OAFAvc,KAAK6U,eAAe0H,UAAYA,EAEzBvc,MAQTmM,cAAe,WACb,OAAOnM,KAAKsU,wBAQdkI,YAAa,WACX,OAAOxc,KAAKwU,cAQdoD,QAAS,WACP,QAAK5X,KAAKmU,aACLnU,KAAKyU,gBACHzU,KAAKyc,0BACRzc,KAAKyc,yBAA0B,EAC/Bzc,KAAKgX,UAAU,QAAS,2CAEnB,KAKX0F,UAAW,WAIT,IAAIC,EAAcvb,GAAQub,YACtBA,GACF3c,KAAK6W,OAAO8F,EAAY7F,IAAK6F,EAAY9F,QAAQc,WAIrDiF,iBAAkB,SAAS7F,GACzB,GACGlD,GADH,CAOA,IAAI2I,GAFJzF,EAAUA,OAEgB8F,SAAW7c,KAAKwc,cAC1C,IAAKA,EACH,MAAM,IAAI7J,EAAiB,mBAG7B,IAAImE,EAAMC,EAAQD,KAAO9W,KAAKuY,KAC9B,IAAKzB,EACH,MAAM,IAAInE,EAAiB,eAG7B,IAAImK,EAASjW,mBACTkW,EAAK,GACTA,GAAM,YAAcD,EAAON,GAC3BO,GAAM,QAAUD,EAAOhG,GAEvB,IAAI0B,EAAOzB,EAAQyB,MAAQxY,KAAK4U,eAAe4D,KAC3CA,IACEA,EAAKhY,OAAMuc,GAAM,SAAWD,EAAOtE,EAAKhY,OACxCgY,EAAKwE,QAAOD,GAAM,UAAYD,EAAOtE,EAAKwE,SAGhD,IAAIC,EAAejd,KAAK2Y,iBAAiB3Y,KAAKoY,UAAUtB,IAEpDoG,EAASrJ,GAAUsJ,cAAc,UACrCD,EAAOE,OAAQ,EACfF,EAAOG,IAAMJ,EAAe,yBAA2BF,GACtDlJ,GAAUyJ,MAAQzJ,GAAU0J,MAAMC,YAAYN,KAIjD/D,mBAAoB,WAClB,IAAI5X,EAAOvB,KACXA,KAAK8V,gBAAkB,EACvBjI,WAAW,WAETtM,EAAKuU,gBAAkB,KAI3B2H,cAAe,SAASC,EAAW3G,GAEjC,IAAI4G,EAAKhe,EAET,GAAKK,KAAKoU,aAAV,CAcA,IAAKzU,KAZLoX,EAAUA,MAEV2G,EAAY,QAAUA,EAAU9a,OAAO,EAAG,GAAGgb,cAAgBF,EAAU9a,OAAO,GAE1EiR,GAAUgK,aACZF,EAAM9J,GAAUgK,YAAY,eACxBC,UAAUJ,GAAW,GAAM,IAE/BC,EAAM9J,GAAUkK,qBACZL,UAAYA,EAGN3G,EACNvU,GAAOuU,EAASpX,KAClBge,EAAIhe,GAAOoX,EAAQpX,IAGvB,GAAIkU,GAAUgK,YAEZhK,GAAUmK,cAAcL,QAIxB,IACE9J,GAAUoK,UAAU,KAAON,EAAID,UAAU7Z,cAAe8Z,GACxD,MAAO3b,OAYbkc,wBAAyB,SAASC,GAChC,IAAI5c,EAAOvB,KACX,OAAO,SAAS2d,GASd,GALApc,EAAKiV,iBAAmB,KAKpBjV,EAAKgV,qBAAuBoH,EAAhC,CAQA,IAAIS,EANJ7c,EAAKgV,mBAAqBoH,EAO1B,IACES,EAASzW,GAAiBgW,EAAIS,QAC9B,MAAOpc,GACPoc,EAAS,YAGX7c,EAAKwZ,mBACHsD,SAAU,MAAQF,EAClB5d,QAAS6d,OAUfE,sBAAuB,WACrB,IAAI/c,EAAOvB,KAMX,OAAO,SAAS2d,GACd,IAAIS,EACJ,IACEA,EAAST,EAAIS,OACb,MAAOpc,GAGP,OAEF,IAAI4B,EAAUwa,GAAUA,EAAOxa,QAK/B,GACGA,IACY,UAAZA,GAAmC,aAAZA,GAA2Bwa,EAAOG,mBAF5D,CAQA,IAAIC,EAAUjd,EAAKiV,iBACdgI,GACHjd,EAAK2c,wBAAwB,QAA7B3c,CAAsCoc,GAExCc,aAAaD,GACbjd,EAAKiV,iBAAmB3I,WAAW,WACjCtM,EAAKiV,iBAAmB,MAjCP,QA4CvBkI,kBAAmB,SAASC,EAAMC,GAChC,IAAIC,EAAYvW,GAAStI,KAAKyW,UAAU5K,MACpCiT,EAAWxW,GAASsW,GACpBG,EAAazW,GAASqW,GAK1B3e,KAAK0W,UAAYkI,EAIbC,EAAUlW,WAAamW,EAASnW,UAAYkW,EAAUjW,OAASkW,EAASlW,OAC1EgW,EAAKE,EAAShW,UACZ+V,EAAUlW,WAAaoW,EAAWpW,UAAYkW,EAAUjW,OAASmW,EAAWnW,OAC9E+V,EAAOI,EAAWjW,UAEpB9I,KAAK+a,mBACHsD,SAAU,aACVnY,MACE0Y,GAAIA,EACJD,KAAMA,MAKZ5G,uBAAwB,WACtB,IAAIxW,EAAOvB,KACXuB,EAAKyd,0BAA4B1L,SAAS5S,UAAUiB,SAEpD2R,SAAS5S,UAAUiB,SAAW,WAC5B,MAAoB,mBAAT3B,MAAuBA,KAAKmJ,UAC9B5H,EAAKyd,0BAA0BxS,MAAMxM,KAAKoJ,SAAUsD,WAEtDnL,EAAKyd,0BAA0BxS,MAAMxM,KAAM0M,aAItD6M,yBAA0B,WACpBvZ,KAAKgf,4BAEP1L,SAAS5S,UAAUiB,SAAW3B,KAAKgf,4BAQvChH,oBAAqB,WACnB,IAAIzW,EAAOvB,KAEPif,EAAkB1d,EAAK8U,iBAE3B,SAAS6I,EAAWhW,GAClB,OAAO,SAASiW,EAAIzO,GAKlB,IADA,IAAI9C,EAAO,IAAI1D,MAAMwC,UAAUrN,QACtBD,EAAI,EAAGA,EAAIwO,EAAKvO,SAAUD,EACjCwO,EAAKxO,GAAKsN,UAAUtN,GAEtB,IAAIggB,EAAmBxR,EAAK,GAQ5B,OAPIlI,EAAW0Z,KACbxR,EAAK,GAAKrM,EAAKuX,KAAKsG,IAMlBlW,EAAKsD,MACAtD,EAAKsD,MAAMxM,KAAM4N,GAEjB1E,EAAK0E,EAAK,GAAIA,EAAK,KAKhC,IAAI6H,EAAkBzV,KAAK6U,eAAeY,gBAE1C,SAAS4J,EAAgB/d,GACvB,IAAIge,EAAQle,GAAQE,IAAWF,GAAQE,GAAQZ,UAC3C4e,GAASA,EAAM3e,gBAAkB2e,EAAM3e,eAAe,sBACxDoI,GACEuW,EACA,mBACA,SAASpW,GACP,OAAO,SAASiV,EAASgB,EAAII,EAASC,GAEpC,IACML,GAAMA,EAAGM,cACXN,EAAGM,YAAcle,EAAKuX,KAAKqG,EAAGM,cAEhC,MAAOnf,IAMT,IAAIof,EAAQC,EAAcC,EA6B1B,OA1BEnK,GACAA,EAAgB8B,MACJ,gBAAXjW,GAAuC,SAAXA,KAI7Bqe,EAAepe,EAAK2c,wBAAwB,SAC5C0B,EAAkBre,EAAK+c,wBACvBoB,EAAS,SAAS/B,GAIhB,GAAKA,EAAL,CAEA,IAAID,EACJ,IACEA,EAAYC,EAAItY,KAChB,MAAOrD,GAGP,OAEF,MAAkB,UAAd0b,EAA8BiC,EAAahC,GACxB,aAAdD,EAAiCkC,EAAgBjC,QAArD,KAGFzU,EAAK9I,KACVJ,KACAme,EACA5c,EAAKuX,KAAKqG,OAAI5R,EAAWmS,GACzBH,EACAC,KAINP,GAEFlW,GACEuW,EACA,sBACA,SAASpW,GACP,OAAO,SAASyU,EAAKwB,EAAII,EAASC,GAChC,IACEL,EAAKA,IAAOA,EAAGnG,kBAAoBmG,EAAGnG,kBAAoBmG,GAC1D,MAAOnd,IAGT,OAAOkH,EAAK9I,KAAKJ,KAAM2d,EAAKwB,EAAII,EAASC,KAG7CP,IAKNlW,GAAK3H,GAAS,aAAc8d,EAAYD,GACxClW,GAAK3H,GAAS,cAAe8d,EAAYD,GACrC7d,GAAQye,uBACV9W,GACE3H,GACA,wBACA,SAAS8H,GACP,OAAO,SAAS4W,GACd,OAAO5W,EAAK3H,EAAKuX,KAAKgH,MAG1Bb,GAqCJ,IA/BA,IAAIc,GACF,cACA,SACA,OACA,mBACA,iBACA,oBACA,kBACA,cACA,aACA,qBACA,cACA,aACA,iBACA,eACA,kBACA,cACA,cACA,eACA,qBACA,SACA,YACA,eACA,gBACA,YACA,kBACA,SACA,iBACA,4BACA,wBAEO3gB,EAAI,EAAGA,EAAI2gB,EAAa1gB,OAAQD,IACvCigB,EAAgBU,EAAa3gB,KAajC6Y,uBAAwB,WACtB,IAAI1W,EAAOvB,KACPyV,EAAkBzV,KAAK6U,eAAeY,gBAEtCwJ,EAAkB1d,EAAK8U,iBAE3B,SAAS2J,EAASC,EAAM3I,GAClB2I,KAAQ3I,GAAO5R,EAAW4R,EAAI2I,KAChClX,GAAKuO,EAAK2I,EAAM,SAAS/W,GACvB,OAAO3H,EAAKuX,KAAK5P,KAKvB,GAAIuM,EAAgB6B,KAAO,mBAAoBlW,GAAS,CACtD,IAAI8e,EAAW9e,GAAQ+e,gBAAkB/e,GAAQ+e,eAAezf,UAChEqI,GACEmX,EACA,OACA,SAASE,GACP,OAAO,SAASlM,EAAQ3L,GAYtB,OARI3G,EAAS2G,KAA0C,IAAlCA,EAAItJ,QAAQsC,EAAKmT,cACpC1U,KAAKqgB,aACHnM,OAAQA,EACR3L,IAAKA,EACL+X,YAAa,OAIVF,EAAS5T,MAAMxM,KAAM0M,aAGhCuS,GAGFlW,GACEmX,EACA,OACA,SAASK,GACP,OAAO,WAEL,IAAIjJ,EAAMtX,KAEV,SAASwgB,IACP,GAAIlJ,EAAI+I,aAAkC,IAAnB/I,EAAImJ,WAAkB,CAC3C,IAGEnJ,EAAI+I,YAAYC,YAAchJ,EAAIoJ,OAClC,MAAO1e,IAITT,EAAKwZ,mBACH1V,KAAM,OACNgZ,SAAU,MACVnY,KAAMoR,EAAI+I,eAMhB,IADA,IAAIM,GAAS,SAAU,UAAW,cACzBpe,EAAI,EAAGA,EAAIoe,EAAMthB,OAAQkD,IAChCyd,EAASW,EAAMpe,GAAI+U,GAiBrB,MAdI,uBAAwBA,GAAO5R,EAAW4R,EAAIsJ,oBAChD7X,GACEuO,EACA,qBACA,SAASpO,GACP,OAAO3H,EAAKuX,KAAK5P,OAAMqE,EAAWiT,KAMtClJ,EAAIsJ,mBAAqBJ,EAGpBD,EAAS/T,MAAMxM,KAAM0M,aAGhCuS,GAIAxJ,EAAgB6B,KAAOrV,MACzB8G,GACE3H,GACA,QACA,SAASyf,GACP,OAAO,WAKL,IADA,IAAIjT,EAAO,IAAI1D,MAAMwC,UAAUrN,QACtBD,EAAI,EAAGA,EAAIwO,EAAKvO,SAAUD,EACjCwO,EAAKxO,GAAKsN,UAAUtN,GAGtB,IAEImJ,EAFAuY,EAAalT,EAAK,GAClBsG,EAAS,MAeb,GAZ0B,iBAAf4M,EACTvY,EAAMuY,EACG,YAAa1f,IAAW0f,aAAsB1f,GAAQe,SAC/DoG,EAAMuY,EAAWvY,IACbuY,EAAW5M,SACbA,EAAS4M,EAAW5M,SAGtB3L,EAAM,GAAKuY,GAIyB,IAAlCvY,EAAItJ,QAAQsC,EAAKmT,YACnB,OAAOmM,EAAUrU,MAAMxM,KAAM4N,GAG3BA,EAAK,IAAMA,EAAK,GAAGsG,SACrBA,EAAStG,EAAK,GAAGsG,QAGnB,IAAI6M,GACF7M,OAAQA,EACR3L,IAAKA,EACL+X,YAAa,MAGf,OAAOO,EACJrU,MAAMxM,KAAM4N,GACZoT,KAAK,SAASC,GASb,OARAF,EAAUT,YAAcW,EAASP,OAEjCnf,EAAKwZ,mBACH1V,KAAM,OACNgZ,SAAU,QACVnY,KAAM6a,IAGDE,IAED,MAAE,SAAS3gB,GASjB,MAPAiB,EAAKwZ,mBACH1V,KAAM,OACNgZ,SAAU,QACVnY,KAAM6a,EACN/N,MAAO,UAGH1S,MAId2e,GAMAxJ,EAAgB8B,KAAOvX,KAAKoU,eAC1BP,GAAUkG,kBACZlG,GAAUkG,iBAAiB,QAASxY,EAAK2c,wBAAwB,UAAU,GAC3ErK,GAAUkG,iBAAiB,WAAYxY,EAAK+c,yBAAyB,IAC5DzK,GAAUqN,cAEnBrN,GAAUqN,YAAY,UAAW3f,EAAK2c,wBAAwB,UAC9DrK,GAAUqN,YAAY,aAAc3f,EAAK+c,2BAQ7C,IAAI9P,EAASpN,GAAQoN,OAEjB2S,IADsB3S,GAAUA,EAAO4S,KAAO5S,EAAO4S,IAAIC,UAG3DjgB,GAAQkgB,SACRA,QAAQC,WACRD,QAAQE,aACV,GAAI/L,EAAgB7J,UAAYuV,EAAwB,CAEtD,IAAIM,EAAgBrgB,GAAQsgB,WAC5BtgB,GAAQsgB,WAAa,WACnB,IAAIC,EAAcpgB,EAAKkV,UAAU5K,KAGjC,GAFAtK,EAAKmd,kBAAkBnd,EAAKmV,UAAWiL,GAEnCF,EACF,OAAOA,EAAcjV,MAAMxM,KAAM0M,YAIrC,IAAIkV,EAA6B,SAASC,GAGxC,OAAO,WACL,IAAItZ,EAAMmE,UAAUrN,OAAS,EAAIqN,UAAU,QAAKa,EAQhD,OALIhF,GAEFhH,EAAKmd,kBAAkBnd,EAAKmV,UAAWnO,EAAM,IAGxCsZ,EAAiBrV,MAAMxM,KAAM0M,aAIxC3D,GAAKuY,QAAS,YAAaM,EAA4B3C,GACvDlW,GAAKuY,QAAS,eAAgBM,EAA4B3C,GAG5D,GAAIxJ,EAAgB1C,SAAW,YAAa3R,IAAW2R,QAAQ+O,IAAK,CAElE,IAAIC,EAAwB,SAASlV,EAAK3G,GACxC3E,EAAKwZ,mBACHxa,QAASsM,EACTmG,MAAO9M,EAAK8M,MACZqL,SAAU,aAIdhc,IAAM,QAAS,OAAQ,OAAQ,QAAS,OAAQ,SAASuD,EAAGoN,GAC1DO,GAAkBR,QAASC,EAAO+O,OAKxCvI,iBAAkB,WAGhB,IADA,IAAIwI,EACGhiB,KAAKqW,iBAAiBhX,QAAQ,CAGnC,IAAI0B,GAFJihB,EAAUhiB,KAAKqW,iBAAiB8E,SAEd,GAChB3a,EAAOwhB,EAAQ,GACf9Y,EAAO8Y,EAAQ,GAEjBjhB,EAAIP,GAAQ0I,IAIhBuQ,gBAAiB,WAEf,IAAK,IAAIvF,KAAUlU,KAAKkW,wBACtBlW,KAAKiW,iBAAiB/B,GAAUlU,KAAKkW,wBAAwBhC,IAIjEgE,cAAe,WACb,IAAI3W,EAAOvB,KAGXqC,GAAKrC,KAAKmW,SAAU,SAASvQ,EAAGyV,GAC9B,IAAI4G,EAAY5G,EAAO,GACnBzN,EAAOyN,EAAO,GAClB4G,EAAUzV,MAAMjL,GAAOA,GAAMkL,OAAOmB,OAIxCwK,UAAW,SAAS1V,GAClB,IAAIwf,EAAIxO,GAAW5E,KAAKpM,GACtBoU,KACA1X,EAAI,EAEN,IACE,KAAOA,KAAK0X,EAAIrD,GAAQrU,IAAM8iB,EAAE9iB,IAAM,GACtC,MAAO4C,GACP,MAAM,IAAI2Q,EAAiB,gBAAkBjQ,GAG/C,GAAIoU,EAAI4B,OAAS1Y,KAAK6U,eAAesN,eACnC,MAAM,IAAIxP,EACR,kFAIJ,OAAOmE,GAGT6B,iBAAkB,SAASR,GAEzB,IAAI8E,EAAe,KAAO9E,EAAIvP,MAAQuP,EAAIiK,KAAO,IAAMjK,EAAIiK,KAAO,IAKlE,OAHIjK,EAAIxP,WACNsU,EAAe9E,EAAIxP,SAAW,IAAMsU,GAE/BA,GAGTpF,wBAAyB,WAElB7X,KAAK8V,gBACR9V,KAAKoa,iBAAiB5N,MAAMxM,KAAM0M,YAItC0N,iBAAkB,SAASnL,EAAW8H,GACpC,IAAItS,EAASzE,KAAK6a,eAAe5L,EAAW8H,GAE5C/W,KAAKyd,cAAc,UACjBxO,UAAWA,EACX8H,QAASA,IAGX/W,KAAKqiB,kBACHpT,EAAUzO,KACVyO,EAAU1O,QACV0O,EAAU1G,IACV0G,EAAUrK,OACVH,EACAsS,IAIJ8D,eAAgB,SAAS5L,EAAW8H,GAClC,IAAIxV,EAAOvB,KACPyE,KACJ,GAAIwK,EAAUxP,OAASwP,EAAUxP,MAAMJ,SACrCgD,GAAK4M,EAAUxP,MAAO,SAASL,EAAGK,GAChC,IAAI6iB,EAAQ/gB,EAAKghB,gBAAgB9iB,EAAOwP,EAAU1G,KAC9C+Z,GACF7d,EAAOvE,KAAKoiB,KAKZvL,GAAWA,EAAQkD,gBACrB,IAAK,IAAI1X,EAAI,EAAGA,EAAIwU,EAAQkD,gBAAkB1X,EAAIkC,EAAOpF,OAAQkD,IAC/DkC,EAAOlC,GAAGigB,QAAS,EAKzB,OADA/d,EAASA,EAAO5E,MAAM,EAAGG,KAAK6U,eAAeW,kBAI/C+M,gBAAiB,SAASD,EAAOG,GAE/B,IAAIC,GACF/d,SAAU2d,EAAM/Z,IAChB3D,OAAQ0d,EAAMjV,KACdxI,MAAOyd,EAAMhV,OACbqV,SAAUL,EAAM9U,MAAQ,KAuB1B,OAfK8U,EAAM/Z,MACTma,EAAW/d,SAAW8d,GAGxBC,EAAWF,SAGNxiB,KAAK6U,eAAeM,aAAahK,OACjCnL,KAAK6U,eAAeM,aAAahK,KAAKuX,EAAW/d,WAEpD,qBAAqBwG,KAAKuX,EAAqB,WAE/C,qBAAqBvX,KAAKuX,EAAW/d,WAGhC+d,GAGTL,kBAAmB,SAAShd,EAAM9E,EAASqa,EAAShW,EAAQH,EAAQsS,GAClE,IASI1O,EATAua,GAAmBvd,EAAOA,EAAO,KAAO,KAAO9E,GAAW,IAC9D,KACIP,KAAK6U,eAAeG,aAAa7J,OAClCnL,KAAK6U,eAAeG,aAAa7J,KAAK5K,KACrCP,KAAK6U,eAAeG,aAAa7J,KAAKyX,MAOtCne,GAAUA,EAAOpF,QACnBub,EAAUnW,EAAO,GAAGE,UAAYiW,EAGhCnW,EAAOuD,UACPK,GAAc5D,OAAQA,IACbmW,IACTvS,GACE5D,SAEIE,SAAUiW,EACVhW,OAAQA,EACR4d,QAAQ,QAOZxiB,KAAK6U,eAAeI,WAAW9J,OACjCnL,KAAK6U,eAAeI,WAAW9J,KAAKyP,OAMlC5a,KAAK6U,eAAeK,cAAc/J,MACnCnL,KAAK6U,eAAeK,cAAc/J,KAAKyP,KAF1C,CAOA,IAAI1U,EAAOG,IAGPkG,WACEnE,SAEI/C,KAAMA,EACNzF,MAAOW,EACP8H,WAAYA,KAIlBwa,QAASjI,GAEX7D,GAIF/W,KAAK8a,MAAM5U,KAGb4c,YAAa,SAAS5c,GAGpB,IAAIvD,EAAM3C,KAAK6U,eAAeS,iBAI9B,GAHIpP,EAAK3F,UACP2F,EAAK3F,QAAUkC,GAASyD,EAAK3F,QAASoC,IAEpCuD,EAAKqG,UAAW,CAClB,IAAIA,EAAYrG,EAAKqG,UAAUnE,OAAO,GACtCmE,EAAU3M,MAAQ6C,GAAS8J,EAAU3M,MAAO+C,GAG9C,IAAIogB,EAAU7c,EAAK6c,QAanB,OAZIA,IACEA,EAAQxa,MACVwa,EAAQxa,IAAM9F,GAASsgB,EAAQxa,IAAKvI,KAAK6U,eAAeU,eAEtDwN,EAAQC,UACVD,EAAQC,QAAUvgB,GAASsgB,EAAQC,QAAShjB,KAAK6U,eAAeU,gBAIhErP,EAAK+c,aAAe/c,EAAK+c,YAAY7a,QACvCpI,KAAKkjB,iBAAiBhd,EAAK+c,aAEtB/c,GAMTgd,iBAAkB,SAASD,GAQzB,IALA,IACEE,EACAnI,EACA9U,EAHEkd,GAAY,KAAM,OAAQ,OAKrBhkB,EAAI,EAAGA,EAAI6jB,EAAY7a,OAAO/I,SAAUD,EAE/C,IADA4b,EAAQiI,EAAY7a,OAAOhJ,IAElBuB,eAAe,SACrB4E,EAASyV,EAAM9U,QAChBM,GAAawU,EAAM9U,MAHrB,CAOAA,EAAOG,MAAgB2U,EAAM9U,MAC7B,IAAK,IAAI3D,EAAI,EAAGA,EAAI6gB,EAAS/jB,SAAUkD,EACrC4gB,EAAUC,EAAS7gB,GACf2D,EAAKvF,eAAewiB,IAAYjd,EAAKid,KACvCjd,EAAKid,GAAW1gB,GAASyD,EAAKid,GAAUnjB,KAAK6U,eAAeU,eAGhE0N,EAAY7a,OAAOhJ,GAAG8G,KAAOA,IAIjCmd,aAAc,WACZ,GAAKrjB,KAAKqU,eAAkBrU,KAAKoU,aAAjC,CACA,IAAIkP,KAkBJ,OAhBItjB,KAAKqU,eAAiBP,GAAWyP,YACnCD,EAASlO,SACPoO,aAAczP,UAAUwP,YAKxBniB,GAAQwK,UAAYxK,GAAQwK,SAASC,OACvCyX,EAAS/a,IAAMnH,GAAQwK,SAASC,MAG9B7L,KAAKoU,cAAgBP,GAAU4P,WAC5BH,EAASlO,UAASkO,EAASlO,YAChCkO,EAASlO,QAAQ4N,QAAUnP,GAAU4P,UAGhCH,IAGT3M,cAAe,WACb3W,KAAK0jB,iBAAmB,EACxB1jB,KAAK2jB,cAAgB,MAGvBC,eAAgB,WACd,OAAO5jB,KAAK0jB,kBAAoB/P,KAAQ3T,KAAK2jB,cAAgB3jB,KAAK0jB,kBAYpEG,cAAe,SAASC,GACtB,IAAIC,EAAO/jB,KAAKuU,UAEhB,SACGwP,GACDD,EAAQvjB,UAAYwjB,EAAKxjB,SACzBujB,EAAQjB,UAAYkB,EAAKlB,WAKvBiB,EAAQzb,YAAc0b,EAAK1b,WACtBhE,GAAiByf,EAAQzb,WAAY0b,EAAK1b,aACxCyb,EAAQvX,YAAawX,EAAKxX,WAE5BtE,GAAgB6b,EAAQvX,UAAWwX,EAAKxX,aAMnDyX,iBAAkB,SAASjB,GAEzB,IAAI/iB,KAAK4jB,iBAAT,CAIA,IAAIlD,EAASqC,EAAQrC,OAKrB,GAAiB,MAAXA,GAA6B,MAAXA,GAA6B,MAAXA,EAA1C,CAEA,IAAIuD,EACJ,IAIIA,EADEhiB,KACM8gB,EAAQ3N,QAAQ8O,IAAI,eAEpBnB,EAAQoB,kBAAkB,eAIpCF,EAA8B,IAAtBG,SAASH,EAAO,IACxB,MAAOjiB,IAIThC,KAAK0jB,iBAAmBO,IAII,EAAxBjkB,KAAK0jB,kBAAwB,KAEjC1jB,KAAK2jB,cAAgBhQ,QAGvBmH,MAAO,SAAS5U,GACd,IAAI+Q,EAAgBjX,KAAK6U,eAErBwP,GACAC,QAAStkB,KAAK2U,eACdvB,OAAQ6D,EAAc7D,OACtBmR,SAAU,cAEZjB,EAAWtjB,KAAKqjB,eAEdC,IACFe,EAAStB,QAAUO,GAIjBpd,EAAK+T,uBAAuB/T,EAAK+T,gBAErC/T,EAAOG,GAAYge,EAAUne,IAGxByV,KAAOtV,GAAYA,MAAgBrG,KAAK4U,eAAe+G,MAAOzV,EAAKyV,MACxEzV,EAAKmN,MAAQhN,GAAYA,MAAgBrG,KAAK4U,eAAevB,OAAQnN,EAAKmN,OAG1EnN,EAAKmN,MAAM,oBAAsBM,KAAQ3T,KAAKoW,WAE1CpW,KAAKsW,cAAgBtW,KAAKsW,aAAajX,OAAS,IAGlD6G,EAAK+c,aACH7a,UAAWvI,MAAMO,KAAKJ,KAAKsW,aAAc,KAIzCtW,KAAK4U,eAAe4D,OAEtBtS,EAAKsS,KAAOxY,KAAK4U,eAAe4D,MAI9BvB,EAAc8E,cAAa7V,EAAK6V,YAAc9E,EAAc8E,aAG5D9E,EAAcnC,UAAS5O,EAAK4O,QAAUmC,EAAcnC,SAGpDmC,EAAcuN,aAAYte,EAAKue,YAAcxN,EAAcuN,YAE/Dte,EAAOlG,KAAK0kB,cAAcxe,GAG1BzF,OAAOf,KAAKwG,GAAMye,QAAQ,SAAShlB,IAChB,MAAbuG,EAAKvG,IAA8B,KAAduG,EAAKvG,IAAegG,GAAcO,EAAKvG,aACvDuG,EAAKvG,KAIZ+F,EAAWuR,EAAciF,gBAC3BhW,EAAO+Q,EAAciF,aAAahW,IAASA,GAIxCA,IAAQP,GAAcO,KAMzBR,EAAWuR,EAAcoF,sBACxBpF,EAAcoF,mBAAmBnW,KAOhClG,KAAK4jB,iBACP5jB,KAAKgX,UAAU,OAAQ,uCAAwC9Q,GAIzB,iBAA7B+Q,EAActB,WACnBlO,KAAKC,SAAWuP,EAActB,YAChC3V,KAAK4kB,sBAAsB1e,GAG7BlG,KAAK4kB,sBAAsB1e,MAI/Bwe,cAAe,SAASxe,GACtB,OAAOuE,GAASvE,EAAMlG,KAAK6U,eAAenK,eAG5Cma,SAAU,WACR,OAAO/d,MAGT8d,sBAAuB,SAAS1e,EAAM5D,GACpC,IAAIf,EAAOvB,KACPiX,EAAgBjX,KAAK6U,eAEzB,GAAK7U,KAAK4X,UAQV,GALA1R,EAAOlG,KAAK8iB,YAAY5c,GAKnBlG,KAAK6U,eAAeiQ,kBAAmB9kB,KAAK6jB,cAAc3d,GAA/D,CAQAlG,KAAKwU,aAAetO,EAAK6e,WAAa7e,EAAK6e,SAAW/kB,KAAK6kB,YAG3D7kB,KAAKuU,UAAYrO,EAEjBlG,KAAKgX,UAAU,QAAS,uBAAwB9Q,GAEhD,IAAI8e,GACFC,eAAgB,IAChBC,cAAe,YAAcllB,KAAK4W,QAClCuO,WAAYnlB,KAAK0U,YAGf1U,KAAKyY,gBACPuM,EAAKI,cAAgBplB,KAAKyY,eAG5B,IAAIlM,EAAYrG,EAAKqG,WAAarG,EAAKqG,UAAUnE,OAAO,GAItDpI,KAAK6U,eAAeY,iBACpBzV,KAAK6U,eAAeY,gBAAgB+B,QAEpCxX,KAAK+a,mBACHsD,SAAU,SACV9d,QAASgM,GACJA,EAAUlH,KAAOkH,EAAUlH,KAAO,KAAO,IAAMkH,EAAU3M,MAC1DsG,EAAK3F,QACTwkB,SAAU7e,EAAK6e,SACf/R,MAAO9M,EAAK8M,OAAS,UAIzB,IAAIzK,EAAMvI,KAAK4Y,iBACd3B,EAAcsF,WAAavc,KAAKqlB,cAAcjlB,KAAKJ,MAClDuI,IAAKA,EACLyc,KAAMA,EACN9e,KAAMA,EACN6Q,QAASE,EACTqO,UAAW,WACT/jB,EAAKoV,gBAELpV,EAAKkc,cAAc,WACjBvX,KAAMA,EACNmX,IAAK9U,IAEPjG,GAAYA,KAEdijB,QAAS,SAAiBvY,GACxBzL,EAAKyV,UAAU,QAAS,mCAAoChK,GAExDA,EAAM+V,SACRxhB,EAAKyiB,iBAAiBhX,EAAM+V,SAG9BxhB,EAAKkc,cAAc,WACjBvX,KAAMA,EACNmX,IAAK9U,IAEPyE,EAAQA,GAAS,IAAI3M,MAAM,sDAC3BiC,GAAYA,EAAS0K,WApEvBhN,KAAKgX,UAAU,OAAQ,+BAAgC9Q,IAyE3Dmf,aAAc,SAASG,GAErB,IAAIjd,EAAMid,EAAKjd,IAAM,IAAM7B,GAAU8e,EAAKR,MAEtCS,EAAmB,KACnBC,KAUJ,GARIF,EAAKzO,QAAQ3B,UACfqQ,EAAmBzlB,KAAK2lB,cAAcH,EAAKzO,QAAQ3B,UAGjDoQ,EAAKzO,QAAQ6O,kBACfF,EAA2B1lB,KAAK2lB,cAAcH,EAAKzO,QAAQ6O,kBAGzD3jB,KAAiB,CACnByjB,EAAyBnI,KAAOrc,EAAUskB,EAAKtf,MAE/C,IAAI2f,EAAsBxf,MAAgBrG,KAAK4V,gBAC3CkQ,EAAezf,GAAYwf,EAAqBH,GAMpD,OAJID,IACFK,EAAa1Q,QAAUqQ,GAGlBrkB,GACJ2kB,MAAMxd,EAAKud,GACX9E,KAAK,SAASC,GACb,GAAIA,EAAS+E,GACXR,EAAKF,WAAaE,EAAKF,gBAClB,CACL,IAAItY,EAAQ,IAAI3M,MAAM,sBAAwB4gB,EAASP,QAGvD1T,EAAM+V,QAAU9B,EAChBuE,EAAKD,SAAWC,EAAKD,QAAQvY,MAGzB,MAAE,WACRwY,EAAKD,SACHC,EAAKD,QAAQ,IAAIllB,MAAM,6CAI/B,IAAI0iB,EAAU3hB,GAAQ+e,gBAAkB,IAAI/e,GAAQ+e,eAC/C4C,KAGS,oBAAqBA,GAAqC,oBAAnBkD,kBAIjD,oBAAqBlD,EACvBA,EAAQnC,mBAAqB,WAC3B,GAA2B,IAAvBmC,EAAQtC,WAEL,GAAuB,MAAnBsC,EAAQrC,OACjB8E,EAAKF,WAAaE,EAAKF,iBAClB,GAAIE,EAAKD,QAAS,CACvB,IAAIjlB,EAAM,IAAID,MAAM,sBAAwB0iB,EAAQrC,QACpDpgB,EAAIyiB,QAAUA,EACdyC,EAAKD,QAAQjlB,MAIjByiB,EAAU,IAAIkD,eAGd1d,EAAMA,EAAIpF,QAAQ,WAAY,IAG1BqiB,EAAKF,YACPvC,EAAQmD,OAASV,EAAKF,WAEpBE,EAAKD,UACPxC,EAAQ9U,QAAU,WAChB,IAAI3N,EAAM,IAAID,MAAM,qCACpBC,EAAIyiB,QAAUA,EACdyC,EAAKD,QAAQjlB,MAKnByiB,EAAQoD,KAAK,OAAQ5d,GAEjBkd,GACFpjB,GAAKojB,EAAkB,SAAS9lB,EAAKC,GACnCmjB,EAAQqD,iBAAiBzmB,EAAKC,KAIlCmjB,EAAQsD,KAAKnlB,EAAUskB,EAAKtf,UAG9Byf,cAAe,SAASxT,GACtB,IAAImU,KAEJ,IAAK,IAAI3mB,KAAOwS,EACd,GAAIA,EAAKxR,eAAehB,GAAM,CAC5B,IAAIC,EAAQuS,EAAKxS,GACjB2mB,EAAU3mB,GAAwB,mBAAVC,EAAuBA,IAAUA,EAI7D,OAAO0mB,GAGTtP,UAAW,SAAShE,GAGhBhT,KAAKkW,wBAAwBlD,KAC5BhT,KAAKsL,OAAStL,KAAK6U,eAAevJ,QAGnCgI,SAAS5S,UAAU8L,MAAMpM,KACvBJ,KAAKkW,wBAAwBlD,GAC7BhT,KAAKiW,oBACFpW,MAAMO,KAAKsM,UAAW,KAK/B+O,cAAe,SAAS9b,EAAKkZ,GACvBrX,EAAYqX,UACP7Y,KAAK4U,eAAejV,GAE3BK,KAAK4U,eAAejV,GAAO0G,GAAYrG,KAAK4U,eAAejV,OAAYkZ,KAM7E5E,GAAMvT,UAAU6lB,QAAUtS,GAAMvT,UAAU6a,eAC1CtH,GAAMvT,UAAU8lB,kBAAoBvS,GAAMvT,UAAUsb,WAEpD,IAAAyK,GAAiBxS,GC3mEb7S,GACgB,oBAAXC,OACHA,YACkB,IAAXC,EAAyBA,EAAyB,oBAATC,KAAuBA,QACzEmlB,GAAStlB,GAAQ6S,MAEjBA,GAAQ,IAAI0S,GAQhB1S,GAAM2S,WAAa,WAEjB,OADAxlB,GAAQ6S,MAAQyS,GACTzS,IAGTA,GAAMyI,YAEN,ICsRAtd,GAAAqR,GAAA9J,GAAAa,GAAArD,GAAA+d,GA3SA2E,GDqBAC,GAAiB7S,GAoCjB8S,GAAwBJ,iBCzDxBE,GAAA,YAAAxlB,OAAAuK,SAAAhD,UAKAiO,OAAA,6DAAAc,mBAGAoC,iBAAA,mBAAA,cACAlB,QAAA,WACAxX,OAAA2lB,YACAA,IAAAC,wBRRA,4BASAlN,iBAAA,WAAA,SAAAJ,KQWAyE,OAAA8I,UAAAC,OAJA,wBRFApN,iBAAA,UAAA,SAAAJ,GQWA,IAAAA,EAAAyN,oBAMA,oBACAC,cAAAH,UAAAI,IAhBA,cAiBA,SAIAC,EAAA,IAAAC,KAAA,kBACA,QACA,gCACA,qCAEA,uBAGA,qBAqDA,gBAGA,yDAGA,cACA,4BAKAD,OAAAA,MAGAE,EAAA9b,SAAA+b,iBAAA,iBACAC,SPpFA,cOsFA,gBACA,gBACA,SAEAC,EAAAvmB,OAAAuK,SAAAuG,KAAAhP,QAAA,IAAA,IACA0kB,EAAAxmB,OAAAigB,SAAAjgB,OAAAigB,QAAAC,mBAGAuG,EAAAvZ,EAAA/K,EAAAukB,GACAxZ,KACA2Y,UAAAa,EAAA,MAAA,UAAAvkB,YAKAwkB,EAAA3iB,EAAA4iB,MAEA5iB,KAAAsiB,IAAAM,GAAA5iB,IAAAuiB,KAAAA,EAAAvoB,QAAAgG,IAAAsiB,EAAAO,eAIA7iB,QACAsiB,EAAAO,QACA9kB,aACA,cACA,sCAGA,8EACA,iBACA,UAGA,8EACA,iBACA,UAGA,+EACA,iBACA,WAGA,+EPpFA,iBOsFA,cAGA,qFAGA,iBACA,kBACA,SACA,mFACA,SPlFA,iBOsFA,iBACA,SACA,wFAOAukB,EAAAQ,QACA/kB,aACA,cACA,4EPlFA,mFOsFA,kBAGA,mFACA,0BAOAukB,EAAAS,UACAhlB,aACA,sBAEA,mDACA,wBAMAukB,EAAAU,QACAjlB,aACA,sBAEA,sCACA,aAWAiC,QAGAsZ,KAAA8I,GAAA9C,QAAA,SAAA2D,UAAAR,EAAAQ,EAAAC,cAAA,UAAA,OAGA5c,SAAA6c,cAAA,iBAAAnjB,EAAA,MAAA,UAAA,SAGAsZ,KAAAhT,SAAA+b,iBAAA,gBAAA/C,QAAA,SAAA8D,KACAC,aAAA,SAAA,eAEAF,cAAA,gBAAAnjB,GAAAsjB,gBAAA,oBAIAhK,KAAA8I,GAAA9C,QAAA,SAAA2D,KACAvO,iBAAA,QAAA,eACA1U,EAAAijB,EAAArkB,aAAA,iBAEAoB,GPnFAwiB,UOsFAvG,QAAAC,WAAAlc,KAAAA,GAAA,GAAA,IAAAA,cAMA0U,iBAAA,WAAA,SAAAJ,GACAA,EAAAoO,OAAA,SAAApO,EAAAoO,SACApO,EAAAoO,MAAA1iB,QAKAwiB,EAAA,KACAK,GAAAN,EAAAvoB,OAGA6oB,MACAP,EAAAO,OAIAN,KAAAD,UACArG,QAAAE,mBAEAoG,GAEA,GACAM,EAAA,GAAA,IAAAN,GAKAA,IAAAD,EAAAO,SACAN,GAAA,QASAf,KACAznB,GAaAiC,OAbAoP,GAaA9E,SAbAhF,GAaA,SAbAa,GAaA,QAZAohB,sBAAAphB,MACA,GACApI,GAAA,IACA,YACAA,GAAA,GAAAoR,EAAApR,GAAA,GAAAoR,OAAAtQ,KAAAwM,ePnFA,GAAAmc,EAAA,EAAA,IAAAjV,QOsFAnD,GAAA0M,cAAAxW,OACA8J,GAAAqY,qBAAAniB,IAAA,MACAyW,MAAA,KACAC,IAEA,mDADAtV,WAAAghB,aAAA5kB,GAAA+d,WAEA8G,GAAA,SAAA,iBAAA,eACAA,GAAA,OAAA","file":"demo.min.js","sourcesContent":["/*\n json-stringify-safe\n Like JSON.stringify, but doesn't throw on circular references.\n\n Originally forked from https://github.com/isaacs/json-stringify-safe\n version 5.0.1 on 3/8/2017 and modified to handle Errors serialization\n and IE8 compatibility. Tests for this are in test/vendor.\n\n ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE\n*/\n\nexports = module.exports = stringify;\nexports.getSerialize = serializer;\n\nfunction indexOf(haystack, needle) {\n for (var i = 0; i < haystack.length; ++i) {\n if (haystack[i] === needle) return i;\n }\n return -1;\n}\n\nfunction stringify(obj, replacer, spaces, cycleReplacer) {\n return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);\n}\n\n// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106\nfunction stringifyError(value) {\n var err = {\n // These properties are implemented as magical getters and don't show up in for in\n stack: value.stack,\n message: value.message,\n name: value.name\n };\n\n for (var i in value) {\n if (Object.prototype.hasOwnProperty.call(value, i)) {\n err[i] = value[i];\n }\n }\n\n return err;\n}\n\nfunction serializer(replacer, cycleReplacer) {\n var stack = [];\n var keys = [];\n\n if (cycleReplacer == null) {\n cycleReplacer = function(key, value) {\n if (stack[0] === value) {\n return '[Circular ~]';\n }\n return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';\n };\n }\n\n return function(key, value) {\n if (stack.length > 0) {\n var thisPos = indexOf(stack, this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n\n if (~indexOf(stack, value)) {\n value = cycleReplacer.call(this, key, value);\n }\n } else {\n stack.push(value);\n }\n\n return replacer == null\n ? value instanceof Error ? stringifyError(value) : value\n : replacer.call(this, key, value);\n };\n}\n","var stringify = require('../vendor/json-stringify-safe/stringify');\n\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction isObject(what) {\n return typeof what === 'object' && what !== null;\n}\n\n// Yanked from https://git.io/vS8DV re-used under CC0\n// with some tiny modifications\nfunction isError(value) {\n switch ({}.toString.call(value)) {\n case '[object Error]':\n return true;\n case '[object Exception]':\n return true;\n case '[object DOMException]':\n return true;\n default:\n return value instanceof Error;\n }\n}\n\nfunction isErrorEvent(value) {\n return supportsErrorEvent() && {}.toString.call(value) === '[object ErrorEvent]';\n}\n\nfunction isUndefined(what) {\n return what === void 0;\n}\n\nfunction isFunction(what) {\n return typeof what === 'function';\n}\n\nfunction isPlainObject(what) {\n return Object.prototype.toString.call(what) === '[object Object]';\n}\n\nfunction isString(what) {\n return Object.prototype.toString.call(what) === '[object String]';\n}\n\nfunction isArray(what) {\n return Object.prototype.toString.call(what) === '[object Array]';\n}\n\nfunction isEmptyObject(what) {\n if (!isPlainObject(what)) return false;\n\n for (var _ in what) {\n if (what.hasOwnProperty(_)) {\n return false;\n }\n }\n return true;\n}\n\nfunction supportsErrorEvent() {\n try {\n new ErrorEvent(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsFetch() {\n if (!('fetch' in _window)) return false;\n\n try {\n new Headers(); // eslint-disable-line no-new\n new Request(''); // eslint-disable-line no-new\n new Response(); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n// https://caniuse.com/#feat=referrer-policy\n// It doesn't. And it throw exception instead of ignoring this parameter...\n// REF: https://github.com/getsentry/raven-js/issues/1233\nfunction supportsReferrerPolicy() {\n if (!supportsFetch()) return false;\n\n try {\n // eslint-disable-next-line no-new\n new Request('pickleRick', {\n referrerPolicy: 'origin'\n });\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsPromiseRejectionEvent() {\n return typeof PromiseRejectionEvent === 'function';\n}\n\nfunction wrappedCallback(callback) {\n function dataCallback(data, original) {\n var normalizedData = callback(data) || data;\n if (original) {\n return original(normalizedData) || normalizedData;\n }\n return normalizedData;\n }\n\n return dataCallback;\n}\n\nfunction each(obj, callback) {\n var i, j;\n\n if (isUndefined(obj.length)) {\n for (i in obj) {\n if (hasKey(obj, i)) {\n callback.call(null, i, obj[i]);\n }\n }\n } else {\n j = obj.length;\n if (j) {\n for (i = 0; i < j; i++) {\n callback.call(null, i, obj[i]);\n }\n }\n }\n}\n\nfunction objectMerge(obj1, obj2) {\n if (!obj2) {\n return obj1;\n }\n each(obj2, function(key, value) {\n obj1[key] = value;\n });\n return obj1;\n}\n\n/**\n * This function is only used for react-native.\n * react-native freezes object that have already been sent over the\n * js bridge. We need this function in order to check if the object is frozen.\n * So it's ok that objectFrozen returns false if Object.isFrozen is not\n * supported because it's not relevant for other \"platforms\". See related issue:\n * https://github.com/getsentry/react-native-sentry/issues/57\n */\nfunction objectFrozen(obj) {\n if (!Object.isFrozen) {\n return false;\n }\n return Object.isFrozen(obj);\n}\n\nfunction truncate(str, max) {\n if (typeof max !== 'number') {\n throw new Error('2nd argument to `truncate` function should be a number');\n }\n if (typeof str !== 'string' || max === 0) {\n return str;\n }\n return str.length <= max ? str : str.substr(0, max) + '\\u2026';\n}\n\n/**\n * hasKey, a better form of hasOwnProperty\n * Example: hasKey(MainHostObject, property) === true/false\n *\n * @param {Object} host object to check property\n * @param {string} key to check\n */\nfunction hasKey(object, key) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction joinRegExp(patterns) {\n // Combine an array of regular expressions and strings into one large regexp\n // Be mad.\n var sources = [],\n i = 0,\n len = patterns.length,\n pattern;\n\n for (; i < len; i++) {\n pattern = patterns[i];\n if (isString(pattern)) {\n // If it's a string, we need to escape it\n // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n sources.push(pattern.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1'));\n } else if (pattern && pattern.source) {\n // If it's a regexp already, we want to extract the source\n sources.push(pattern.source);\n }\n // Intentionally skip other cases\n }\n return new RegExp(sources.join('|'), 'i');\n}\n\nfunction urlencode(o) {\n var pairs = [];\n each(o, function(key, value) {\n pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n });\n return pairs.join('&');\n}\n\n// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n// intentionally using regex and not <a/> href parsing trick because React Native and other\n// environments where DOM might not be available\nfunction parseUrl(url) {\n if (typeof url !== 'string') return {};\n var match = url.match(/^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n // coerce to undefined values to empty string so we don't get 'undefined'\n var query = match[6] || '';\n var fragment = match[8] || '';\n return {\n protocol: match[2],\n host: match[4],\n path: match[5],\n relative: match[5] + query + fragment // everything minus origin\n };\n}\nfunction uuid4() {\n var crypto = _window.crypto || _window.msCrypto;\n\n if (!isUndefined(crypto) && crypto.getRandomValues) {\n // Use window.crypto API if available\n // eslint-disable-next-line no-undef\n var arr = new Uint16Array(8);\n crypto.getRandomValues(arr);\n\n // set 4 in byte 7\n arr[3] = (arr[3] & 0xfff) | 0x4000;\n // set 2 most significant bits of byte 9 to '10'\n arr[4] = (arr[4] & 0x3fff) | 0x8000;\n\n var pad = function(num) {\n var v = num.toString(16);\n while (v.length < 4) {\n v = '0' + v;\n }\n return v;\n };\n\n return (\n pad(arr[0]) +\n pad(arr[1]) +\n pad(arr[2]) +\n pad(arr[3]) +\n pad(arr[4]) +\n pad(arr[5]) +\n pad(arr[6]) +\n pad(arr[7])\n );\n } else {\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (Math.random() * 16) | 0,\n v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n}\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @param elem\n * @returns {string}\n */\nfunction htmlTreeAsString(elem) {\n /* eslint no-extra-parens:0*/\n var MAX_TRAVERSE_HEIGHT = 5,\n MAX_OUTPUT_LEN = 80,\n out = [],\n height = 0,\n len = 0,\n separator = ' > ',\n sepLength = separator.length,\n nextStr;\n\n while (elem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = htmlElementAsString(elem);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n // (ignore this limit if we are on the first iteration)\n if (\n nextStr === 'html' ||\n (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)\n ) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n elem = elem.parentNode;\n }\n\n return out.reverse().join(separator);\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @param HTMLElement\n * @returns {string}\n */\nfunction htmlElementAsString(elem) {\n var out = [],\n className,\n classes,\n key,\n attr,\n i;\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n out.push(elem.tagName.toLowerCase());\n if (elem.id) {\n out.push('#' + elem.id);\n }\n\n className = elem.className;\n if (className && isString(className)) {\n classes = className.split(/\\s+/);\n for (i = 0; i < classes.length; i++) {\n out.push('.' + classes[i]);\n }\n }\n var attrWhitelist = ['type', 'name', 'title', 'alt'];\n for (i = 0; i < attrWhitelist.length; i++) {\n key = attrWhitelist[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.push('[' + key + '=\"' + attr + '\"]');\n }\n }\n return out.join('');\n}\n\n/**\n * Returns true if either a OR b is truthy, but not both\n */\nfunction isOnlyOneTruthy(a, b) {\n return !!(!!a ^ !!b);\n}\n\n/**\n * Returns true if both parameters are undefined\n */\nfunction isBothUndefined(a, b) {\n return isUndefined(a) && isUndefined(b);\n}\n\n/**\n * Returns true if the two input exception interfaces have the same content\n */\nfunction isSameException(ex1, ex2) {\n if (isOnlyOneTruthy(ex1, ex2)) return false;\n\n ex1 = ex1.values[0];\n ex2 = ex2.values[0];\n\n if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;\n\n // in case both stacktraces are undefined, we can't decide so default to false\n if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) return false;\n\n return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);\n}\n\n/**\n * Returns true if the two input stack trace interfaces have the same content\n */\nfunction isSameStacktrace(stack1, stack2) {\n if (isOnlyOneTruthy(stack1, stack2)) return false;\n\n var frames1 = stack1.frames;\n var frames2 = stack2.frames;\n\n // Exit early if frame count differs\n if (frames1.length !== frames2.length) return false;\n\n // Iterate through every frame; bail out if anything differs\n var a, b;\n for (var i = 0; i < frames1.length; i++) {\n a = frames1[i];\n b = frames2[i];\n if (\n a.filename !== b.filename ||\n a.lineno !== b.lineno ||\n a.colno !== b.colno ||\n a['function'] !== b['function']\n )\n return false;\n }\n return true;\n}\n\n/**\n * Polyfill a method\n * @param obj object e.g. `document`\n * @param name method name present on object e.g. `addEventListener`\n * @param replacement replacement function\n * @param track {optional} record instrumentation to an array\n */\nfunction fill(obj, name, replacement, track) {\n if (obj == null) return;\n var orig = obj[name];\n obj[name] = replacement(orig);\n obj[name].__raven__ = true;\n obj[name].__orig__ = orig;\n if (track) {\n track.push([obj, name, orig]);\n }\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns {string}\n */\nfunction safeJoin(input, delimiter) {\n if (!isArray(input)) return '';\n\n var output = [];\n\n for (var i = 0; i < input.length; i++) {\n try {\n output.push(String(input[i]));\n } catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n\n return output.join(delimiter);\n}\n\n// Default Node.js REPL depth\nvar MAX_SERIALIZE_EXCEPTION_DEPTH = 3;\n// 50kB, as 100kB is max payload size, so half sounds reasonable\nvar MAX_SERIALIZE_EXCEPTION_SIZE = 50 * 1024;\nvar MAX_SERIALIZE_KEYS_LENGTH = 40;\n\nfunction utf8Length(value) {\n return ~-encodeURI(value).split(/%..|./).length;\n}\n\nfunction jsonSize(value) {\n return utf8Length(JSON.stringify(value));\n}\n\nfunction serializeValue(value) {\n if (typeof value === 'string') {\n var maxLength = 40;\n return truncate(value, maxLength);\n } else if (\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n typeof value === 'undefined'\n ) {\n return value;\n }\n\n var type = Object.prototype.toString.call(value);\n\n // Node.js REPL notation\n if (type === '[object Object]') return '[Object]';\n if (type === '[object Array]') return '[Array]';\n if (type === '[object Function]')\n return value.name ? '[Function: ' + value.name + ']' : '[Function]';\n\n return value;\n}\n\nfunction serializeObject(value, depth) {\n if (depth === 0) return serializeValue(value);\n\n if (isPlainObject(value)) {\n return Object.keys(value).reduce(function(acc, key) {\n acc[key] = serializeObject(value[key], depth - 1);\n return acc;\n }, {});\n } else if (Array.isArray(value)) {\n return value.map(function(val) {\n return serializeObject(val, depth - 1);\n });\n }\n\n return serializeValue(value);\n}\n\nfunction serializeException(ex, depth, maxSize) {\n if (!isPlainObject(ex)) return ex;\n\n depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth;\n maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize;\n\n var serialized = serializeObject(ex, depth);\n\n if (jsonSize(stringify(serialized)) > maxSize) {\n return serializeException(ex, depth - 1);\n }\n\n return serialized;\n}\n\nfunction serializeKeysForMessage(keys, maxLength) {\n if (typeof keys === 'number' || typeof keys === 'string') return keys.toString();\n if (!Array.isArray(keys)) return '';\n\n keys = keys.filter(function(key) {\n return typeof key === 'string';\n });\n if (keys.length === 0) return '[object has no keys]';\n\n maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength;\n if (keys[0].length >= maxLength) return keys[0];\n\n for (var usedKeys = keys.length; usedKeys > 0; usedKeys--) {\n var serialized = keys.slice(0, usedKeys).join(', ');\n if (serialized.length > maxLength) continue;\n if (usedKeys === keys.length) return serialized;\n return serialized + '\\u2026';\n }\n\n return '';\n}\n\nfunction sanitize(input, sanitizeKeys) {\n if (!isArray(sanitizeKeys) || (isArray(sanitizeKeys) && sanitizeKeys.length === 0))\n return input;\n\n var sanitizeRegExp = joinRegExp(sanitizeKeys);\n var sanitizeMask = '********';\n var safeInput;\n\n try {\n safeInput = JSON.parse(stringify(input));\n } catch (o_O) {\n return input;\n }\n\n function sanitizeWorker(workerInput) {\n if (isArray(workerInput)) {\n return workerInput.map(function(val) {\n return sanitizeWorker(val);\n });\n }\n\n if (isPlainObject(workerInput)) {\n return Object.keys(workerInput).reduce(function(acc, k) {\n if (sanitizeRegExp.test(k)) {\n acc[k] = sanitizeMask;\n } else {\n acc[k] = sanitizeWorker(workerInput[k]);\n }\n return acc;\n }, {});\n }\n\n return workerInput;\n }\n\n return sanitizeWorker(safeInput);\n}\n\nmodule.exports = {\n isObject: isObject,\n isError: isError,\n isErrorEvent: isErrorEvent,\n isUndefined: isUndefined,\n isFunction: isFunction,\n isPlainObject: isPlainObject,\n isString: isString,\n isArray: isArray,\n isEmptyObject: isEmptyObject,\n supportsErrorEvent: supportsErrorEvent,\n supportsFetch: supportsFetch,\n supportsReferrerPolicy: supportsReferrerPolicy,\n supportsPromiseRejectionEvent: supportsPromiseRejectionEvent,\n wrappedCallback: wrappedCallback,\n each: each,\n objectMerge: objectMerge,\n truncate: truncate,\n objectFrozen: objectFrozen,\n hasKey: hasKey,\n joinRegExp: joinRegExp,\n urlencode: urlencode,\n uuid4: uuid4,\n htmlTreeAsString: htmlTreeAsString,\n htmlElementAsString: htmlElementAsString,\n isSameException: isSameException,\n isSameStacktrace: isSameStacktrace,\n parseUrl: parseUrl,\n fill: fill,\n safeJoin: safeJoin,\n serializeException: serializeException,\n serializeKeysForMessage: serializeKeysForMessage,\n sanitize: sanitize\n};\n","var utils = require('../../src/utils');\n\n/*\n TraceKit - Cross brower stack traces\n\n This was originally forked from github.com/occ/TraceKit, but has since been\n largely re-written and is now maintained as part of raven-js. Tests for\n this are in test/vendor.\n\n MIT license\n*/\n\nvar TraceKit = {\n collectWindowErrors: true,\n debug: false\n};\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n// global reference to slice\nvar _slice = [].slice;\nvar UNKNOWN_FUNCTION = '?';\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types\nvar ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;\n\nfunction getLocationHref() {\n if (typeof document === 'undefined' || document.location == null) return '';\n\n return document.location.href;\n}\n\n/**\n * TraceKit.report: cross-browser processing of unhandled exceptions\n *\n * Syntax:\n * TraceKit.report.subscribe(function(stackInfo) { ... })\n * TraceKit.report.unsubscribe(function(stackInfo) { ... })\n * TraceKit.report(exception)\n * try { ...code... } catch(ex) { TraceKit.report(ex); }\n *\n * Supports:\n * - Firefox: full stack trace with line numbers, plus column number\n * on top frame; column number is not guaranteed\n * - Opera: full stack trace with line and column numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n * - IE: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n *\n * In theory, TraceKit should work on all of the following versions:\n * - IE5.5+ (only 8.0 tested)\n * - Firefox 0.9+ (only 3.5+ tested)\n * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require\n * Exceptions Have Stacktrace to be enabled in opera:config)\n * - Safari 3+ (only 4+ tested)\n * - Chrome 1+ (only 5+ tested)\n * - Konqueror 3.5+ (untested)\n *\n * Requires TraceKit.computeStackTrace.\n *\n * Tries to catch all unhandled exceptions and report them to the\n * subscribed handlers. Please note that TraceKit.report will rethrow the\n * exception. This is REQUIRED in order to get a useful stack trace in IE.\n * If the exception does not reach the top of the browser, you will only\n * get a stack trace from the point where TraceKit.report was called.\n *\n * Handlers receive a stackInfo object as described in the\n * TraceKit.computeStackTrace docs.\n */\nTraceKit.report = (function reportModuleWrapper() {\n var handlers = [],\n lastArgs = null,\n lastException = null,\n lastExceptionStack = null;\n\n /**\n * Add a crash handler.\n * @param {Function} handler\n */\n function subscribe(handler) {\n installGlobalHandler();\n handlers.push(handler);\n }\n\n /**\n * Remove a crash handler.\n * @param {Function} handler\n */\n function unsubscribe(handler) {\n for (var i = handlers.length - 1; i >= 0; --i) {\n if (handlers[i] === handler) {\n handlers.splice(i, 1);\n }\n }\n }\n\n /**\n * Remove all crash handlers.\n */\n function unsubscribeAll() {\n uninstallGlobalHandler();\n handlers = [];\n }\n\n /**\n * Dispatch stack information to all handlers.\n * @param {Object.<string, *>} stack\n */\n function notifyHandlers(stack, isWindowError) {\n var exception = null;\n if (isWindowError && !TraceKit.collectWindowErrors) {\n return;\n }\n for (var i in handlers) {\n if (handlers.hasOwnProperty(i)) {\n try {\n handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));\n } catch (inner) {\n exception = inner;\n }\n }\n }\n\n if (exception) {\n throw exception;\n }\n }\n\n var _oldOnerrorHandler, _onErrorHandlerInstalled;\n\n /**\n * Ensures all global unhandled exceptions are recorded.\n * Supported by Gecko and IE.\n * @param {string} msg Error message.\n * @param {string} url URL of script that generated the exception.\n * @param {(number|string)} lineNo The line number at which the error\n * occurred.\n * @param {?(number|string)} colNo The column number at which the error\n * occurred.\n * @param {?Error} ex The actual Error object.\n */\n function traceKitWindowOnError(msg, url, lineNo, colNo, ex) {\n var stack = null;\n // If 'ex' is ErrorEvent, get real Error from inside\n var exception = utils.isErrorEvent(ex) ? ex.error : ex;\n // If 'msg' is ErrorEvent, get real message from inside\n var message = utils.isErrorEvent(msg) ? msg.message : msg;\n\n if (lastExceptionStack) {\n TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(\n lastExceptionStack,\n url,\n lineNo,\n message\n );\n processLastException();\n } else if (exception && utils.isError(exception)) {\n // non-string `exception` arg; attempt to extract stack trace\n\n // New chrome and blink send along a real error object\n // Let's just report that like a normal error.\n // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror\n stack = TraceKit.computeStackTrace(exception);\n notifyHandlers(stack, true);\n } else {\n var location = {\n url: url,\n line: lineNo,\n column: colNo\n };\n\n var name = undefined;\n var groups;\n\n if ({}.toString.call(message) === '[object String]') {\n var groups = message.match(ERROR_TYPES_RE);\n if (groups) {\n name = groups[1];\n message = groups[2];\n }\n }\n\n location.func = UNKNOWN_FUNCTION;\n\n stack = {\n name: name,\n message: message,\n url: getLocationHref(),\n stack: [location]\n };\n notifyHandlers(stack, true);\n }\n\n if (_oldOnerrorHandler) {\n return _oldOnerrorHandler.apply(this, arguments);\n }\n\n return false;\n }\n\n function installGlobalHandler() {\n if (_onErrorHandlerInstalled) {\n return;\n }\n _oldOnerrorHandler = _window.onerror;\n _window.onerror = traceKitWindowOnError;\n _onErrorHandlerInstalled = true;\n }\n\n function uninstallGlobalHandler() {\n if (!_onErrorHandlerInstalled) {\n return;\n }\n _window.onerror = _oldOnerrorHandler;\n _onErrorHandlerInstalled = false;\n _oldOnerrorHandler = undefined;\n }\n\n function processLastException() {\n var _lastExceptionStack = lastExceptionStack,\n _lastArgs = lastArgs;\n lastArgs = null;\n lastExceptionStack = null;\n lastException = null;\n notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));\n }\n\n /**\n * Reports an unhandled Error to TraceKit.\n * @param {Error} ex\n * @param {?boolean} rethrow If false, do not re-throw the exception.\n * Only used for window.onerror to not cause an infinite loop of\n * rethrowing.\n */\n function report(ex, rethrow) {\n var args = _slice.call(arguments, 1);\n if (lastExceptionStack) {\n if (lastException === ex) {\n return; // already caught by an inner catch block, ignore\n } else {\n processLastException();\n }\n }\n\n var stack = TraceKit.computeStackTrace(ex);\n lastExceptionStack = stack;\n lastException = ex;\n lastArgs = args;\n\n // If the stack trace is incomplete, wait for 2 seconds for\n // slow slow IE to see if onerror occurs or not before reporting\n // this exception; otherwise, we will end up with an incomplete\n // stack trace\n setTimeout(function() {\n if (lastException === ex) {\n processLastException();\n }\n }, stack.incomplete ? 2000 : 0);\n\n if (rethrow !== false) {\n throw ex; // re-throw to propagate to the top level (and cause window.onerror)\n }\n }\n\n report.subscribe = subscribe;\n report.unsubscribe = unsubscribe;\n report.uninstall = unsubscribeAll;\n return report;\n})();\n\n/**\n * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript\n *\n * Syntax:\n * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)\n * Returns:\n * s.name - exception name\n * s.message - exception message\n * s.stack[i].url - JavaScript or HTML file URL\n * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)\n * s.stack[i].args - arguments passed to the function, if known\n * s.stack[i].line - line number, if known\n * s.stack[i].column - column number, if known\n *\n * Supports:\n * - Firefox: full stack trace with line numbers and unreliable column\n * number on top frame\n * - Opera 10: full stack trace with line and column numbers\n * - Opera 9-: full stack trace with line numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the topmost stacktrace element\n * only\n * - IE: no line numbers whatsoever\n *\n * Tries to guess names of anonymous functions by looking for assignments\n * in the source code. In IE and Safari, we have to guess source file names\n * by searching for function bodies inside all page scripts. This will not\n * work for scripts that are loaded cross-domain.\n * Here be dragons: some function names may be guessed incorrectly, and\n * duplicate functions may be mismatched.\n *\n * TraceKit.computeStackTrace should only be used for tracing purposes.\n * Logging of unhandled exceptions should be done with TraceKit.report,\n * which builds on top of TraceKit.computeStackTrace and provides better\n * IE support by utilizing the window.onerror event to retrieve information\n * about the top of the stack.\n *\n * Note: In IE and Safari, no stack trace is recorded on the Error object,\n * so computeStackTrace instead walks its *own* chain of callers.\n * This means that:\n * * in Safari, some methods may be missing from the stack trace;\n * * in IE, the topmost function in the stack trace will always be the\n * caller of computeStackTrace.\n *\n * This is okay for tracing (because you are likely to be calling\n * computeStackTrace from the function you want to be the topmost element\n * of the stack trace anyway), but not okay for logging unhandled\n * exceptions (because your catch block will likely be far away from the\n * inner function that actually caused the exception).\n *\n */\nTraceKit.computeStackTrace = (function computeStackTraceWrapper() {\n // Contents of Exception in various browsers.\n //\n // SAFARI:\n // ex.message = Can't find variable: qq\n // ex.line = 59\n // ex.sourceId = 580238192\n // ex.sourceURL = http://...\n // ex.expressionBeginOffset = 96\n // ex.expressionCaretOffset = 98\n // ex.expressionEndOffset = 98\n // ex.name = ReferenceError\n //\n // FIREFOX:\n // ex.message = qq is not defined\n // ex.fileName = http://...\n // ex.lineNumber = 59\n // ex.columnNumber = 69\n // ex.stack = ...stack trace... (see the example below)\n // ex.name = ReferenceError\n //\n // CHROME:\n // ex.message = qq is not defined\n // ex.name = ReferenceError\n // ex.type = not_defined\n // ex.arguments = ['aa']\n // ex.stack = ...stack trace...\n //\n // INTERNET EXPLORER:\n // ex.message = ...\n // ex.name = ReferenceError\n //\n // OPERA:\n // ex.message = ...message... (see the example below)\n // ex.name = ReferenceError\n // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)\n // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'\n\n /**\n * Computes stack trace information from the stack property.\n * Chrome and Gecko use this property.\n * @param {Error} ex\n * @return {?Object.<string, *>} Stack trace information.\n */\n function computeStackTraceFromStackProp(ex) {\n if (typeof ex.stack === 'undefined' || !ex.stack) return;\n\n var chrome = /^\\s*at (?:(.*?) ?\\()?((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|[a-z]:|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n var winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n // NOTE: blob urls are now supposed to always have an origin, therefore it's format\n // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\\/` as well\n var gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\\/.*?|\\[native code\\]|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\n // Used to additionally parse URL/line/column from eval frames\n var geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n var chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n var lines = ex.stack.split('\\n');\n var stack = [];\n var submatch;\n var parts;\n var element;\n var reference = /^(.*) is undefined$/.exec(ex.message);\n\n for (var i = 0, j = lines.length; i < j; ++i) {\n if ((parts = chrome.exec(lines[i]))) {\n var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n if (isEval && (submatch = chromeEval.exec(parts[2]))) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = submatch[1]; // url\n parts[3] = submatch[2]; // line\n parts[4] = submatch[3]; // column\n }\n element = {\n url: !isNative ? parts[2] : null,\n func: parts[1] || UNKNOWN_FUNCTION,\n args: isNative ? [parts[2]] : [],\n line: parts[3] ? +parts[3] : null,\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = winjs.exec(lines[i]))) {\n element = {\n url: parts[2],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: [],\n line: +parts[3],\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = gecko.exec(lines[i]))) {\n var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval && (submatch = geckoEval.exec(parts[3]))) {\n // throw out eval line/column and use top-most line number\n parts[3] = submatch[1];\n parts[4] = submatch[2];\n parts[5] = null; // no column when eval\n } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {\n // FireFox uses this awesome columnNumber property for its top frame\n // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n // so adding 1\n // NOTE: this hack doesn't work if top-most frame is eval\n stack[0].column = ex.columnNumber + 1;\n }\n element = {\n url: parts[3],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: parts[2] ? parts[2].split(',') : [],\n line: parts[4] ? +parts[4] : null,\n column: parts[5] ? +parts[5] : null\n };\n } else {\n continue;\n }\n\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n\n stack.push(element);\n }\n\n if (!stack.length) {\n return null;\n }\n\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n }\n\n /**\n * Adds information about the first frame to incomplete stack traces.\n * Safari and IE require this to get complete data on the first frame.\n * @param {Object.<string, *>} stackInfo Stack trace information from\n * one of the compute* methods.\n * @param {string} url The URL of the script that caused an error.\n * @param {(number|string)} lineNo The line number of the script that\n * caused an error.\n * @param {string=} message The error generated by the browser, which\n * hopefully contains the name of the object that caused the error.\n * @return {boolean} Whether or not the stack information was\n * augmented.\n */\n function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {\n var initial = {\n url: url,\n line: lineNo\n };\n\n if (initial.url && initial.line) {\n stackInfo.incomplete = false;\n\n if (!initial.func) {\n initial.func = UNKNOWN_FUNCTION;\n }\n\n if (stackInfo.stack.length > 0) {\n if (stackInfo.stack[0].url === initial.url) {\n if (stackInfo.stack[0].line === initial.line) {\n return false; // already in stack trace\n } else if (\n !stackInfo.stack[0].line &&\n stackInfo.stack[0].func === initial.func\n ) {\n stackInfo.stack[0].line = initial.line;\n return false;\n }\n }\n }\n\n stackInfo.stack.unshift(initial);\n stackInfo.partial = true;\n return true;\n } else {\n stackInfo.incomplete = true;\n }\n\n return false;\n }\n\n /**\n * Computes stack trace information by walking the arguments.caller\n * chain at the time the exception occurred. This will cause earlier\n * frames to be missed but is the only way to get any stack trace in\n * Safari and IE. The top frame is restored by\n * {@link augmentStackTraceWithInitialElement}.\n * @param {Error} ex\n * @return {?Object.<string, *>} Stack trace information.\n */\n function computeStackTraceByWalkingCallerChain(ex, depth) {\n var functionName = /function\\s+([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?\\s*\\(/i,\n stack = [],\n funcs = {},\n recursion = false,\n parts,\n item,\n source;\n\n for (\n var curr = computeStackTraceByWalkingCallerChain.caller;\n curr && !recursion;\n curr = curr.caller\n ) {\n if (curr === computeStackTrace || curr === TraceKit.report) {\n // console.log('skipping internal function');\n continue;\n }\n\n item = {\n url: null,\n func: UNKNOWN_FUNCTION,\n line: null,\n column: null\n };\n\n if (curr.name) {\n item.func = curr.name;\n } else if ((parts = functionName.exec(curr.toString()))) {\n item.func = parts[1];\n }\n\n if (typeof item.func === 'undefined') {\n try {\n item.func = parts.input.substring(0, parts.input.indexOf('{'));\n } catch (e) {}\n }\n\n if (funcs['' + curr]) {\n recursion = true;\n } else {\n funcs['' + curr] = true;\n }\n\n stack.push(item);\n }\n\n if (depth) {\n // console.log('depth is ' + depth);\n // console.log('stack is ' + stack.length);\n stack.splice(0, depth);\n }\n\n var result = {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n augmentStackTraceWithInitialElement(\n result,\n ex.sourceURL || ex.fileName,\n ex.line || ex.lineNumber,\n ex.message || ex.description\n );\n return result;\n }\n\n /**\n * Computes a stack trace for an exception.\n * @param {Error} ex\n * @param {(string|number)=} depth\n */\n function computeStackTrace(ex, depth) {\n var stack = null;\n depth = depth == null ? 0 : +depth;\n\n try {\n stack = computeStackTraceFromStackProp(ex);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n\n try {\n stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref()\n };\n }\n\n computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;\n computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;\n\n return computeStackTrace;\n})();\n\nmodule.exports = TraceKit;\n","/*\n * JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\n\n/*\n* Add integers, wrapping at 2^32. This uses 16-bit operations internally\n* to work around bugs in some JS interpreters.\n*/\nfunction safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return (msw << 16) | (lsw & 0xffff);\n}\n\n/*\n* Bitwise rotate a 32-bit number to the left.\n*/\nfunction bitRotateLeft(num, cnt) {\n return (num << cnt) | (num >>> (32 - cnt));\n}\n\n/*\n* These functions implement the four basic operations the algorithm uses.\n*/\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn((b & c) | (~b & d), a, b, x, s, t);\n}\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn((b & d) | (c & ~d), a, b, x, s, t);\n}\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\n/*\n* Calculate the MD5 of an array of little-endian words, and a bit length.\n*/\nfunction binlMD5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << (len % 32);\n x[(((len + 64) >>> 9) << 4) + 14] = len;\n\n var i;\n var olda;\n var oldb;\n var oldc;\n var oldd;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (i = 0; i < x.length; i += 16) {\n olda = a;\n oldb = b;\n oldc = c;\n oldd = d;\n\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n return [a, b, c, d];\n}\n\n/*\n* Convert an array of little-endian words to a string\n*/\nfunction binl2rstr(input) {\n var i;\n var output = '';\n var length32 = input.length * 32;\n for (i = 0; i < length32; i += 8) {\n output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);\n }\n return output;\n}\n\n/*\n* Convert a raw string to an array of little-endian words\n* Characters >255 have their high-byte silently ignored.\n*/\nfunction rstr2binl(input) {\n var i;\n var output = [];\n output[(input.length >> 2) - 1] = undefined;\n for (i = 0; i < output.length; i += 1) {\n output[i] = 0;\n }\n var length8 = input.length * 8;\n for (i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);\n }\n return output;\n}\n\n/*\n* Calculate the MD5 of a raw string\n*/\nfunction rstrMD5(s) {\n return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));\n}\n\n/*\n* Calculate the HMAC-MD5, of a key and some data (raw strings)\n*/\nfunction rstrHMACMD5(key, data) {\n var i;\n var bkey = rstr2binl(key);\n var ipad = [];\n var opad = [];\n var hash;\n ipad[15] = opad[15] = undefined;\n if (bkey.length > 16) {\n bkey = binlMD5(bkey, key.length * 8);\n }\n for (i = 0; i < 16; i += 1) {\n ipad[i] = bkey[i] ^ 0x36363636;\n opad[i] = bkey[i] ^ 0x5c5c5c5c;\n }\n hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);\n return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));\n}\n\n/*\n* Convert a raw string to a hex string\n*/\nfunction rstr2hex(input) {\n var hexTab = '0123456789abcdef';\n var output = '';\n var x;\n var i;\n for (i = 0; i < input.length; i += 1) {\n x = input.charCodeAt(i);\n output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);\n }\n return output;\n}\n\n/*\n* Encode a string as utf-8\n*/\nfunction str2rstrUTF8(input) {\n return unescape(encodeURIComponent(input));\n}\n\n/*\n* Take string arguments and return either raw or hex encoded strings\n*/\nfunction rawMD5(s) {\n return rstrMD5(str2rstrUTF8(s));\n}\nfunction hexMD5(s) {\n return rstr2hex(rawMD5(s));\n}\nfunction rawHMACMD5(k, d) {\n return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));\n}\nfunction hexHMACMD5(k, d) {\n return rstr2hex(rawHMACMD5(k, d));\n}\n\nfunction md5(string, key, raw) {\n if (!key) {\n if (!raw) {\n return hexMD5(string);\n }\n return rawMD5(string);\n }\n if (!raw) {\n return hexHMACMD5(key, string);\n }\n return rawHMACMD5(key, string);\n}\n\nmodule.exports = md5;\n","function RavenConfigError(message) {\n this.name = 'RavenConfigError';\n this.message = message;\n}\nRavenConfigError.prototype = new Error();\nRavenConfigError.prototype.constructor = RavenConfigError;\n\nmodule.exports = RavenConfigError;\n","var utils = require('./utils');\n\nvar wrapMethod = function(console, level, callback) {\n var originalConsoleLevel = console[level];\n var originalConsole = console;\n\n if (!(level in console)) {\n return;\n }\n\n var sentryLevel = level === 'warn' ? 'warning' : level;\n\n console[level] = function() {\n var args = [].slice.call(arguments);\n\n var msg = utils.safeJoin(args, ' ');\n var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};\n\n if (level === 'assert') {\n if (args[0] === false) {\n // Default browsers message\n msg =\n 'Assertion failed: ' + (utils.safeJoin(args.slice(1), ' ') || 'console.assert');\n data.extra.arguments = args.slice(1);\n callback && callback(msg, data);\n }\n } else {\n callback && callback(msg, data);\n }\n\n // this fails for some browsers. :(\n if (originalConsoleLevel) {\n // IE9 doesn't allow calling apply on console functions directly\n // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193\n Function.prototype.apply.call(originalConsoleLevel, originalConsole, args);\n }\n };\n};\n\nmodule.exports = {\n wrapMethod: wrapMethod\n};\n","/*global XDomainRequest:false */\n\nvar TraceKit = require('../vendor/TraceKit/tracekit');\nvar stringify = require('../vendor/json-stringify-safe/stringify');\nvar md5 = require('../vendor/md5/md5');\nvar RavenConfigError = require('./configError');\n\nvar utils = require('./utils');\nvar isError = utils.isError;\nvar isObject = utils.isObject;\nvar isPlainObject = utils.isPlainObject;\nvar isErrorEvent = utils.isErrorEvent;\nvar isUndefined = utils.isUndefined;\nvar isFunction = utils.isFunction;\nvar isString = utils.isString;\nvar isArray = utils.isArray;\nvar isEmptyObject = utils.isEmptyObject;\nvar each = utils.each;\nvar objectMerge = utils.objectMerge;\nvar truncate = utils.truncate;\nvar objectFrozen = utils.objectFrozen;\nvar hasKey = utils.hasKey;\nvar joinRegExp = utils.joinRegExp;\nvar urlencode = utils.urlencode;\nvar uuid4 = utils.uuid4;\nvar htmlTreeAsString = utils.htmlTreeAsString;\nvar isSameException = utils.isSameException;\nvar isSameStacktrace = utils.isSameStacktrace;\nvar parseUrl = utils.parseUrl;\nvar fill = utils.fill;\nvar supportsFetch = utils.supportsFetch;\nvar supportsReferrerPolicy = utils.supportsReferrerPolicy;\nvar serializeKeysForMessage = utils.serializeKeysForMessage;\nvar serializeException = utils.serializeException;\nvar sanitize = utils.sanitize;\n\nvar wrapConsoleMethod = require('./console').wrapMethod;\n\nvar dsnKeys = 'source protocol user pass host port path'.split(' '),\n dsnPattern = /^(?:(\\w+):)?\\/\\/(?:(\\w+)(:\\w+)?@)?([\\w\\.-]+)(?::(\\d+))?(\\/.*)/;\n\nfunction now() {\n return +new Date();\n}\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _document = _window.document;\nvar _navigator = _window.navigator;\n\nfunction keepOriginalCallback(original, callback) {\n return isFunction(callback)\n ? function(data) {\n return callback(data, original);\n }\n : callback;\n}\n\n// First, check for JSON support\n// If there is no JSON, we no-op the core features of Raven\n// since JSON is required to encode the payload\nfunction Raven() {\n this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);\n // Raven can run in contexts where there's no document (react-native)\n this._hasDocument = !isUndefined(_document);\n this._hasNavigator = !isUndefined(_navigator);\n this._lastCapturedException = null;\n this._lastData = null;\n this._lastEventId = null;\n this._globalServer = null;\n this._globalKey = null;\n this._globalProject = null;\n this._globalContext = {};\n this._globalOptions = {\n // SENTRY_RELEASE can be injected by https://github.com/getsentry/sentry-webpack-plugin\n release: _window.SENTRY_RELEASE && _window.SENTRY_RELEASE.id,\n logger: 'javascript',\n ignoreErrors: [],\n ignoreUrls: [],\n whitelistUrls: [],\n includePaths: [],\n headers: null,\n collectWindowErrors: true,\n captureUnhandledRejections: true,\n maxMessageLength: 0,\n // By default, truncates URL values to 250 chars\n maxUrlLength: 250,\n stackTraceLimit: 50,\n autoBreadcrumbs: true,\n instrument: true,\n sampleRate: 1,\n sanitizeKeys: []\n };\n this._fetchDefaults = {\n method: 'POST',\n keepalive: true,\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n // https://caniuse.com/#feat=referrer-policy\n // It doesn't. And it throw exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n referrerPolicy: supportsReferrerPolicy() ? 'origin' : ''\n };\n this._ignoreOnError = 0;\n this._isRavenInstalled = false;\n this._originalErrorStackTraceLimit = Error.stackTraceLimit;\n // capture references to window.console *and* all its methods first\n // before the console plugin has a chance to monkey patch\n this._originalConsole = _window.console || {};\n this._originalConsoleMethods = {};\n this._plugins = [];\n this._startTime = now();\n this._wrappedBuiltIns = [];\n this._breadcrumbs = [];\n this._lastCapturedEvent = null;\n this._keypressTimeout;\n this._location = _window.location;\n this._lastHref = this._location && this._location.href;\n this._resetBackoff();\n\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsole) {\n this._originalConsoleMethods[method] = this._originalConsole[method];\n }\n}\n\n/*\n * The core Raven singleton\n *\n * @this {Raven}\n */\n\nRaven.prototype = {\n // Hardcode version string so that raven source can be loaded directly via\n // webpack (using a build step causes webpack #1617). Grunt verifies that\n // this value matches package.json during build.\n // See: https://github.com/getsentry/raven-js/issues/465\n VERSION: '3.24.2',\n\n debug: false,\n\n TraceKit: TraceKit, // alias to TraceKit\n\n /*\n * Configure Raven with a DSN and extra options\n *\n * @param {string} dsn The public Sentry DSN\n * @param {object} options Set of global options [optional]\n * @return {Raven}\n */\n config: function(dsn, options) {\n var self = this;\n\n if (self._globalServer) {\n this._logDebug('error', 'Error: Raven has already been configured');\n return self;\n }\n if (!dsn) return self;\n\n var globalOptions = self._globalOptions;\n\n // merge in options\n if (options) {\n each(options, function(key, value) {\n // tags and extra are special and need to be put into context\n if (key === 'tags' || key === 'extra' || key === 'user') {\n self._globalContext[key] = value;\n } else {\n globalOptions[key] = value;\n }\n });\n }\n\n self.setDSN(dsn);\n\n // \"Script error.\" is hard coded into browsers for errors that it can't read.\n // this is the result of a script being pulled in from an external domain and CORS.\n globalOptions.ignoreErrors.push(/^Script error\\.?$/);\n globalOptions.ignoreErrors.push(/^Javascript error: Script error\\.? on line 0$/);\n\n // join regexp rules into one big rule\n globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);\n globalOptions.ignoreUrls = globalOptions.ignoreUrls.length\n ? joinRegExp(globalOptions.ignoreUrls)\n : false;\n globalOptions.whitelistUrls = globalOptions.whitelistUrls.length\n ? joinRegExp(globalOptions.whitelistUrls)\n : false;\n globalOptions.includePaths = joinRegExp(globalOptions.includePaths);\n globalOptions.maxBreadcrumbs = Math.max(\n 0,\n Math.min(globalOptions.maxBreadcrumbs || 100, 100)\n ); // default and hard limit is 100\n\n var autoBreadcrumbDefaults = {\n xhr: true,\n console: true,\n dom: true,\n location: true,\n sentry: true\n };\n\n var autoBreadcrumbs = globalOptions.autoBreadcrumbs;\n if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {\n autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);\n } else if (autoBreadcrumbs !== false) {\n autoBreadcrumbs = autoBreadcrumbDefaults;\n }\n globalOptions.autoBreadcrumbs = autoBreadcrumbs;\n\n var instrumentDefaults = {\n tryCatch: true\n };\n\n var instrument = globalOptions.instrument;\n if ({}.toString.call(instrument) === '[object Object]') {\n instrument = objectMerge(instrumentDefaults, instrument);\n } else if (instrument !== false) {\n instrument = instrumentDefaults;\n }\n globalOptions.instrument = instrument;\n\n TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;\n\n // return for chaining\n return self;\n },\n\n /*\n * Installs a global window.onerror error handler\n * to capture and report uncaught exceptions.\n * At this point, install() is required to be called due\n * to the way TraceKit is set up.\n *\n * @return {Raven}\n */\n install: function() {\n var self = this;\n if (self.isSetup() && !self._isRavenInstalled) {\n TraceKit.report.subscribe(function() {\n self._handleOnErrorStackInfo.apply(self, arguments);\n });\n\n if (self._globalOptions.captureUnhandledRejections) {\n self._attachPromiseRejectionHandler();\n }\n\n self._patchFunctionToString();\n\n if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {\n self._instrumentTryCatch();\n }\n\n if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();\n\n // Install all of the plugins\n self._drainPlugins();\n\n self._isRavenInstalled = true;\n }\n\n Error.stackTraceLimit = self._globalOptions.stackTraceLimit;\n return this;\n },\n\n /*\n * Set the DSN (can be called multiple time unlike config)\n *\n * @param {string} dsn The public Sentry DSN\n */\n setDSN: function(dsn) {\n var self = this,\n uri = self._parseDSN(dsn),\n lastSlash = uri.path.lastIndexOf('/'),\n path = uri.path.substr(1, lastSlash);\n\n self._dsn = dsn;\n self._globalKey = uri.user;\n self._globalSecret = uri.pass && uri.pass.substr(1);\n self._globalProject = uri.path.substr(lastSlash + 1);\n\n self._globalServer = self._getGlobalServer(uri);\n\n self._globalEndpoint =\n self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/';\n\n // Reset backoff state since we may be pointing at a\n // new project/server\n this._resetBackoff();\n },\n\n /*\n * Wrap code within a context so Raven can capture errors\n * reliably across domains that is executed immediately.\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The callback to be immediately executed within the context\n * @param {array} args An array of arguments to be called with the callback [optional]\n */\n context: function(options, func, args) {\n if (isFunction(options)) {\n args = func || [];\n func = options;\n options = undefined;\n }\n\n return this.wrap(options, func).apply(this, args);\n },\n\n /*\n * Wrap code within a context and returns back a new function to be executed\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The function to be wrapped in a new context\n * @param {function} func A function to call before the try/catch wrapper [optional, private]\n * @return {function} The newly wrapped functions with a context\n */\n wrap: function(options, func, _before) {\n var self = this;\n // 1 argument has been passed, and it's not a function\n // so just return it\n if (isUndefined(func) && !isFunction(options)) {\n return options;\n }\n\n // options is optional\n if (isFunction(options)) {\n func = options;\n options = undefined;\n }\n\n // At this point, we've passed along 2 arguments, and the second one\n // is not a function either, so we'll just return the second argument.\n if (!isFunction(func)) {\n return func;\n }\n\n // We don't wanna wrap it twice!\n try {\n if (func.__raven__) {\n return func;\n }\n\n // If this has already been wrapped in the past, return that\n if (func.__raven_wrapper__) {\n return func.__raven_wrapper__;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return func;\n }\n\n function wrapped() {\n var args = [],\n i = arguments.length,\n deep = !options || (options && options.deep !== false);\n\n if (_before && isFunction(_before)) {\n _before.apply(this, arguments);\n }\n\n // Recursively wrap all of a function's arguments that are\n // functions themselves.\n while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];\n\n try {\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means Raven caught an error invoking your application code. This is\n // expected behavior and NOT indicative of a bug with Raven.js.\n return func.apply(this, args);\n } catch (e) {\n self._ignoreNextOnError();\n self.captureException(e, options);\n throw e;\n }\n }\n\n // copy over properties of the old function\n for (var property in func) {\n if (hasKey(func, property)) {\n wrapped[property] = func[property];\n }\n }\n wrapped.prototype = func.prototype;\n\n func.__raven_wrapper__ = wrapped;\n // Signal that this function has been wrapped/filled already\n // for both debugging and to prevent it to being wrapped/filled twice\n wrapped.__raven__ = true;\n wrapped.__orig__ = func;\n\n return wrapped;\n },\n\n /**\n * Uninstalls the global error handler.\n *\n * @return {Raven}\n */\n uninstall: function() {\n TraceKit.report.uninstall();\n\n this._detachPromiseRejectionHandler();\n this._unpatchFunctionToString();\n this._restoreBuiltIns();\n this._restoreConsole();\n\n Error.stackTraceLimit = this._originalErrorStackTraceLimit;\n this._isRavenInstalled = false;\n\n return this;\n },\n\n /**\n * Callback used for `unhandledrejection` event\n *\n * @param {PromiseRejectionEvent} event An object containing\n * promise: the Promise that was rejected\n * reason: the value with which the Promise was rejected\n * @return void\n */\n _promiseRejectionHandler: function(event) {\n this._logDebug('debug', 'Raven caught unhandled promise rejection:', event);\n this.captureException(event.reason, {\n extra: {\n unhandledPromiseRejection: true\n }\n });\n },\n\n /**\n * Installs the global promise rejection handler.\n *\n * @return {raven}\n */\n _attachPromiseRejectionHandler: function() {\n this._promiseRejectionHandler = this._promiseRejectionHandler.bind(this);\n _window.addEventListener &&\n _window.addEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Uninstalls the global promise rejection handler.\n *\n * @return {raven}\n */\n _detachPromiseRejectionHandler: function() {\n _window.removeEventListener &&\n _window.removeEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Manually capture an exception and send it over to Sentry\n *\n * @param {error} ex An exception to be logged\n * @param {object} options A specific set of options for this error [optional]\n * @return {Raven}\n */\n captureException: function(ex, options) {\n options = objectMerge({trimHeadFrames: 0}, options ? options : {});\n\n if (isErrorEvent(ex) && ex.error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n ex = ex.error;\n } else if (isError(ex)) {\n // we have a real Error object\n ex = ex;\n } else if (isPlainObject(ex)) {\n // If it is plain Object, serialize it manually and extract options\n // This will allow us to group events based on top-level keys\n // which is much better than creating new group when any key/value change\n options = this._getCaptureExceptionOptionsFromPlainObject(options, ex);\n ex = new Error(options.message);\n } else {\n // If none of previous checks were valid, then it means that\n // it's not a plain Object\n // it's not a valid ErrorEvent (one with an error property)\n // it's not an Error\n // So bail out and capture it as a simple message:\n return this.captureMessage(\n ex,\n objectMerge(options, {\n stacktrace: true, // if we fall back to captureMessage, default to attempting a new trace\n trimHeadFrames: options.trimHeadFrames + 1\n })\n );\n }\n\n // Store the raw exception object for potential debugging and introspection\n this._lastCapturedException = ex;\n\n // TraceKit.report will re-raise any exception passed to it,\n // which means you have to wrap it in try/catch. Instead, we\n // can wrap it here and only re-raise if TraceKit.report\n // raises an exception different from the one we asked to\n // report on.\n try {\n var stack = TraceKit.computeStackTrace(ex);\n this._handleStackInfo(stack, options);\n } catch (ex1) {\n if (ex !== ex1) {\n throw ex1;\n }\n }\n\n return this;\n },\n\n _getCaptureExceptionOptionsFromPlainObject: function(currentOptions, ex) {\n var exKeys = Object.keys(ex).sort();\n var options = objectMerge(currentOptions, {\n message:\n 'Non-Error exception captured with keys: ' + serializeKeysForMessage(exKeys),\n fingerprint: [md5(exKeys)],\n extra: currentOptions.extra || {}\n });\n options.extra.__serialized__ = serializeException(ex);\n\n return options;\n },\n\n /*\n * Manually send a message to Sentry\n *\n * @param {string} msg A plain message to be captured in Sentry\n * @param {object} options A specific set of options for this message [optional]\n * @return {Raven}\n */\n captureMessage: function(msg, options) {\n // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an\n // early call; we'll error on the side of logging anything called before configuration since it's\n // probably something you should see:\n if (\n !!this._globalOptions.ignoreErrors.test &&\n this._globalOptions.ignoreErrors.test(msg)\n ) {\n return;\n }\n\n options = options || {};\n msg = msg + ''; // Make sure it's actually a string\n\n var data = objectMerge(\n {\n message: msg\n },\n options\n );\n\n var ex;\n // Generate a \"synthetic\" stack trace from this point.\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative\n // of a bug with Raven.js. Sentry generates synthetic traces either by configuration,\n // or if it catches a thrown object without a \"stack\" property.\n try {\n throw new Error(msg);\n } catch (ex1) {\n ex = ex1;\n }\n\n // null exception name so `Error` isn't prefixed to msg\n ex.name = null;\n var stack = TraceKit.computeStackTrace(ex);\n\n // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]\n var initialCall = isArray(stack.stack) && stack.stack[1];\n\n // if stack[1] is `Raven.captureException`, it means that someone passed a string to it and we redirected that call\n // to be handled by `captureMessage`, thus `initialCall` is the 3rd one, not 2nd\n // initialCall => captureException(string) => captureMessage(string)\n if (initialCall && initialCall.func === 'Raven.captureException') {\n initialCall = stack.stack[2];\n }\n\n var fileurl = (initialCall && initialCall.url) || '';\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n if (this._globalOptions.stacktrace || (options && options.stacktrace)) {\n // fingerprint on msg, not stack trace (legacy behavior, could be revisited)\n data.fingerprint = data.fingerprint == null ? msg : data.fingerprint;\n\n options = objectMerge(\n {\n trimHeadFrames: 0\n },\n options\n );\n // Since we know this is a synthetic trace, the top frame (this function call)\n // MUST be from Raven.js, so mark it for trimming\n // We add to the trim counter so that callers can choose to trim extra frames, such\n // as utility functions.\n options.trimHeadFrames += 1;\n\n var frames = this._prepareFrames(stack, options);\n data.stacktrace = {\n // Sentry expects frames oldest to newest\n frames: frames.reverse()\n };\n }\n\n // Make sure that fingerprint is always wrapped in an array\n if (data.fingerprint) {\n data.fingerprint = isArray(data.fingerprint)\n ? data.fingerprint\n : [data.fingerprint];\n }\n\n // Fire away!\n this._send(data);\n\n return this;\n },\n\n captureBreadcrumb: function(obj) {\n var crumb = objectMerge(\n {\n timestamp: now() / 1000\n },\n obj\n );\n\n if (isFunction(this._globalOptions.breadcrumbCallback)) {\n var result = this._globalOptions.breadcrumbCallback(crumb);\n\n if (isObject(result) && !isEmptyObject(result)) {\n crumb = result;\n } else if (result === false) {\n return this;\n }\n }\n\n this._breadcrumbs.push(crumb);\n if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {\n this._breadcrumbs.shift();\n }\n return this;\n },\n\n addPlugin: function(plugin /*arg1, arg2, ... argN*/) {\n var pluginArgs = [].slice.call(arguments, 1);\n\n this._plugins.push([plugin, pluginArgs]);\n if (this._isRavenInstalled) {\n this._drainPlugins();\n }\n\n return this;\n },\n\n /*\n * Set/clear a user to be sent along with the payload.\n *\n * @param {object} user An object representing user data [optional]\n * @return {Raven}\n */\n setUserContext: function(user) {\n // Intentionally do not merge here since that's an unexpected behavior.\n this._globalContext.user = user;\n\n return this;\n },\n\n /*\n * Merge extra attributes to be sent along with the payload.\n *\n * @param {object} extra An object representing extra data [optional]\n * @return {Raven}\n */\n setExtraContext: function(extra) {\n this._mergeContext('extra', extra);\n\n return this;\n },\n\n /*\n * Merge tags to be sent along with the payload.\n *\n * @param {object} tags An object representing tags [optional]\n * @return {Raven}\n */\n setTagsContext: function(tags) {\n this._mergeContext('tags', tags);\n\n return this;\n },\n\n /*\n * Clear all of the context.\n *\n * @return {Raven}\n */\n clearContext: function() {\n this._globalContext = {};\n\n return this;\n },\n\n /*\n * Get a copy of the current context. This cannot be mutated.\n *\n * @return {object} copy of context\n */\n getContext: function() {\n // lol javascript\n return JSON.parse(stringify(this._globalContext));\n },\n\n /*\n * Set environment of application\n *\n * @param {string} environment Typically something like 'production'.\n * @return {Raven}\n */\n setEnvironment: function(environment) {\n this._globalOptions.environment = environment;\n\n return this;\n },\n\n /*\n * Set release version of application\n *\n * @param {string} release Typically something like a git SHA to identify version\n * @return {Raven}\n */\n setRelease: function(release) {\n this._globalOptions.release = release;\n\n return this;\n },\n\n /*\n * Set the dataCallback option\n *\n * @param {function} callback The callback to run which allows the\n * data blob to be mutated before sending\n * @return {Raven}\n */\n setDataCallback: function(callback) {\n var original = this._globalOptions.dataCallback;\n this._globalOptions.dataCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the breadcrumbCallback option\n *\n * @param {function} callback The callback to run which allows filtering\n * or mutating breadcrumbs\n * @return {Raven}\n */\n setBreadcrumbCallback: function(callback) {\n var original = this._globalOptions.breadcrumbCallback;\n this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the shouldSendCallback option\n *\n * @param {function} callback The callback to run which allows\n * introspecting the blob before sending\n * @return {Raven}\n */\n setShouldSendCallback: function(callback) {\n var original = this._globalOptions.shouldSendCallback;\n this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /**\n * Override the default HTTP transport mechanism that transmits data\n * to the Sentry server.\n *\n * @param {function} transport Function invoked instead of the default\n * `makeRequest` handler.\n *\n * @return {Raven}\n */\n setTransport: function(transport) {\n this._globalOptions.transport = transport;\n\n return this;\n },\n\n /*\n * Get the latest raw exception that was captured by Raven.\n *\n * @return {error}\n */\n lastException: function() {\n return this._lastCapturedException;\n },\n\n /*\n * Get the last event id\n *\n * @return {string}\n */\n lastEventId: function() {\n return this._lastEventId;\n },\n\n /*\n * Determine if Raven is setup and ready to go.\n *\n * @return {boolean}\n */\n isSetup: function() {\n if (!this._hasJSON) return false; // needs JSON support\n if (!this._globalServer) {\n if (!this.ravenNotConfiguredError) {\n this.ravenNotConfiguredError = true;\n this._logDebug('error', 'Error: Raven has not been configured.');\n }\n return false;\n }\n return true;\n },\n\n afterLoad: function() {\n // TODO: remove window dependence?\n\n // Attempt to initialize Raven on load\n var RavenConfig = _window.RavenConfig;\n if (RavenConfig) {\n this.config(RavenConfig.dsn, RavenConfig.config).install();\n }\n },\n\n showReportDialog: function(options) {\n if (\n !_document // doesn't work without a document (React native)\n )\n return;\n\n options = options || {};\n\n var lastEventId = options.eventId || this.lastEventId();\n if (!lastEventId) {\n throw new RavenConfigError('Missing eventId');\n }\n\n var dsn = options.dsn || this._dsn;\n if (!dsn) {\n throw new RavenConfigError('Missing DSN');\n }\n\n var encode = encodeURIComponent;\n var qs = '';\n qs += '?eventId=' + encode(lastEventId);\n qs += '&dsn=' + encode(dsn);\n\n var user = options.user || this._globalContext.user;\n if (user) {\n if (user.name) qs += '&name=' + encode(user.name);\n if (user.email) qs += '&email=' + encode(user.email);\n }\n\n var globalServer = this._getGlobalServer(this._parseDSN(dsn));\n\n var script = _document.createElement('script');\n script.async = true;\n script.src = globalServer + '/api/embed/error-page/' + qs;\n (_document.head || _document.body).appendChild(script);\n },\n\n /**** Private functions ****/\n _ignoreNextOnError: function() {\n var self = this;\n this._ignoreOnError += 1;\n setTimeout(function() {\n // onerror should trigger before setTimeout\n self._ignoreOnError -= 1;\n });\n },\n\n _triggerEvent: function(eventType, options) {\n // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it\n var evt, key;\n\n if (!this._hasDocument) return;\n\n options = options || {};\n\n eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);\n\n if (_document.createEvent) {\n evt = _document.createEvent('HTMLEvents');\n evt.initEvent(eventType, true, true);\n } else {\n evt = _document.createEventObject();\n evt.eventType = eventType;\n }\n\n for (key in options)\n if (hasKey(options, key)) {\n evt[key] = options[key];\n }\n\n if (_document.createEvent) {\n // IE9 if standards\n _document.dispatchEvent(evt);\n } else {\n // IE8 regardless of Quirks or Standards\n // IE9 if quirks\n try {\n _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);\n } catch (e) {\n // Do nothing\n }\n }\n },\n\n /**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param evtName the event name (e.g. \"click\")\n * @returns {Function}\n * @private\n */\n _breadcrumbEventHandler: function(evtName) {\n var self = this;\n return function(evt) {\n // reset keypress timeout; e.g. triggering a 'click' after\n // a 'keypress' will reset the keypress debounce so that a new\n // set of keypresses can be recorded\n self._keypressTimeout = null;\n\n // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors). Ignore if we've\n // already captured the event.\n if (self._lastCapturedEvent === evt) return;\n\n self._lastCapturedEvent = evt;\n\n // try/catch both:\n // - accessing evt.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // can throw an exception in some circumstances.\n var target;\n try {\n target = htmlTreeAsString(evt.target);\n } catch (e) {\n target = '<unknown>';\n }\n\n self.captureBreadcrumb({\n category: 'ui.' + evtName, // e.g. ui.click, ui.input\n message: target\n });\n };\n },\n\n /**\n * Wraps addEventListener to capture keypress UI events\n * @returns {Function}\n * @private\n */\n _keypressEventHandler: function() {\n var self = this,\n debounceDuration = 1000; // milliseconds\n\n // TODO: if somehow user switches keypress target before\n // debounce timeout is triggered, we will only capture\n // a single breadcrumb from the FIRST target (acceptable?)\n return function(evt) {\n var target;\n try {\n target = evt.target;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n var tagName = target && target.tagName;\n\n // only consider keypress events on actual input elements\n // this will disregard keypresses targeting body (e.g. tabbing\n // through elements, hotkeys, etc)\n if (\n !tagName ||\n (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)\n )\n return;\n\n // record first keypress in a series, but ignore subsequent\n // keypresses until debounce clears\n var timeout = self._keypressTimeout;\n if (!timeout) {\n self._breadcrumbEventHandler('input')(evt);\n }\n clearTimeout(timeout);\n self._keypressTimeout = setTimeout(function() {\n self._keypressTimeout = null;\n }, debounceDuration);\n };\n },\n\n /**\n * Captures a breadcrumb of type \"navigation\", normalizing input URLs\n * @param to the originating URL\n * @param from the target URL\n * @private\n */\n _captureUrlChange: function(from, to) {\n var parsedLoc = parseUrl(this._location.href);\n var parsedTo = parseUrl(to);\n var parsedFrom = parseUrl(from);\n\n // because onpopstate only tells you the \"new\" (to) value of location.href, and\n // not the previous (from) value, we need to track the value of the current URL\n // state ourselves\n this._lastHref = to;\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)\n to = parsedTo.relative;\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)\n from = parsedFrom.relative;\n\n this.captureBreadcrumb({\n category: 'navigation',\n data: {\n to: to,\n from: from\n }\n });\n },\n\n _patchFunctionToString: function() {\n var self = this;\n self._originalFunctionToString = Function.prototype.toString;\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = function() {\n if (typeof this === 'function' && this.__raven__) {\n return self._originalFunctionToString.apply(this.__orig__, arguments);\n }\n return self._originalFunctionToString.apply(this, arguments);\n };\n },\n\n _unpatchFunctionToString: function() {\n if (this._originalFunctionToString) {\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = this._originalFunctionToString;\n }\n },\n\n /**\n * Wrap timer functions and event targets to catch errors and provide\n * better metadata.\n */\n _instrumentTryCatch: function() {\n var self = this;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapTimeFn(orig) {\n return function(fn, t) {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n var originalCallback = args[0];\n if (isFunction(originalCallback)) {\n args[0] = self.wrap(originalCallback);\n }\n\n // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it\n // also supports only two arguments and doesn't care what this is, so we\n // can just call the original function directly.\n if (orig.apply) {\n return orig.apply(this, args);\n } else {\n return orig(args[0], args[1]);\n }\n };\n }\n\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n function wrapEventTarget(global) {\n var proto = _window[global] && _window[global].prototype;\n if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {\n fill(\n proto,\n 'addEventListener',\n function(orig) {\n return function(evtName, fn, capture, secure) {\n // preserve arity\n try {\n if (fn && fn.handleEvent) {\n fn.handleEvent = self.wrap(fn.handleEvent);\n }\n } catch (err) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`\n // so that we don't have more than one wrapper function\n var before, clickHandler, keypressHandler;\n\n if (\n autoBreadcrumbs &&\n autoBreadcrumbs.dom &&\n (global === 'EventTarget' || global === 'Node')\n ) {\n // NOTE: generating multiple handlers per addEventListener invocation, should\n // revisit and verify we can just use one (almost certainly)\n clickHandler = self._breadcrumbEventHandler('click');\n keypressHandler = self._keypressEventHandler();\n before = function(evt) {\n // need to intercept every DOM event in `before` argument, in case that\n // same wrapped method is re-used for different events (e.g. mousemove THEN click)\n // see #724\n if (!evt) return;\n\n var eventType;\n try {\n eventType = evt.type;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n if (eventType === 'click') return clickHandler(evt);\n else if (eventType === 'keypress') return keypressHandler(evt);\n };\n }\n return orig.call(\n this,\n evtName,\n self.wrap(fn, undefined, before),\n capture,\n secure\n );\n };\n },\n wrappedBuiltIns\n );\n fill(\n proto,\n 'removeEventListener',\n function(orig) {\n return function(evt, fn, capture, secure) {\n try {\n fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);\n } catch (e) {\n // ignore, accessing __raven_wrapper__ will throw in some Selenium environments\n }\n return orig.call(this, evt, fn, capture, secure);\n };\n },\n wrappedBuiltIns\n );\n }\n }\n\n fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);\n fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);\n if (_window.requestAnimationFrame) {\n fill(\n _window,\n 'requestAnimationFrame',\n function(orig) {\n return function(cb) {\n return orig(self.wrap(cb));\n };\n },\n wrappedBuiltIns\n );\n }\n\n // event targets borrowed from bugsnag-js:\n // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666\n var eventTargets = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload'\n ];\n for (var i = 0; i < eventTargets.length; i++) {\n wrapEventTarget(eventTargets[i]);\n }\n },\n\n /**\n * Instrument browser built-ins w/ breadcrumb capturing\n * - XMLHttpRequests\n * - DOM interactions (click/typing)\n * - window.location changes\n * - console\n *\n * Can be disabled or individually configured via the `autoBreadcrumbs` config option\n */\n _instrumentBreadcrumbs: function() {\n var self = this;\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && isFunction(xhr[prop])) {\n fill(xhr, prop, function(orig) {\n return self.wrap(orig);\n }); // intentionally don't track filled methods on XHR instances\n }\n }\n\n if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {\n var xhrproto = _window.XMLHttpRequest && _window.XMLHttpRequest.prototype;\n fill(\n xhrproto,\n 'open',\n function(origOpen) {\n return function(method, url) {\n // preserve arity\n\n // if Sentry key appears in URL, don't capture\n if (isString(url) && url.indexOf(self._globalKey) === -1) {\n this.__raven_xhr = {\n method: method,\n url: url,\n status_code: null\n };\n }\n\n return origOpen.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n\n fill(\n xhrproto,\n 'send',\n function(origSend) {\n return function() {\n // preserve arity\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__raven_xhr && xhr.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhr.__raven_xhr.status_code = xhr.status;\n } catch (e) {\n /* do nothing */\n }\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'xhr',\n data: xhr.__raven_xhr\n });\n }\n }\n\n var props = ['onload', 'onerror', 'onprogress'];\n for (var j = 0; j < props.length; j++) {\n wrapProp(props[j], xhr);\n }\n\n if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {\n fill(\n xhr,\n 'onreadystatechange',\n function(orig) {\n return self.wrap(orig, undefined, onreadystatechangeHandler);\n } /* intentionally don't track this instrumentation */\n );\n } else {\n // if onreadystatechange wasn't actually set by the page on this xhr, we\n // are free to set our own and capture the breadcrumb\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n\n return origSend.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n }\n\n if (autoBreadcrumbs.xhr && supportsFetch()) {\n fill(\n _window,\n 'fetch',\n function(origFetch) {\n return function() {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n\n var fetchInput = args[0];\n var method = 'GET';\n var url;\n\n if (typeof fetchInput === 'string') {\n url = fetchInput;\n } else if ('Request' in _window && fetchInput instanceof _window.Request) {\n url = fetchInput.url;\n if (fetchInput.method) {\n method = fetchInput.method;\n }\n } else {\n url = '' + fetchInput;\n }\n\n // if Sentry key appears in URL, don't capture, as it's our own request\n if (url.indexOf(self._globalKey) !== -1) {\n return origFetch.apply(this, args);\n }\n\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n\n var fetchData = {\n method: method,\n url: url,\n status_code: null\n };\n\n return origFetch\n .apply(this, args)\n .then(function(response) {\n fetchData.status_code = response.status;\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData\n });\n\n return response;\n })\n ['catch'](function(err) {\n // if there is an error performing the request\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData,\n level: 'error'\n });\n\n throw err;\n });\n };\n },\n wrappedBuiltIns\n );\n }\n\n // Capture breadcrumbs from any click that is unhandled / bubbled up all the way\n // to the document. Do this before we instrument addEventListener.\n if (autoBreadcrumbs.dom && this._hasDocument) {\n if (_document.addEventListener) {\n _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);\n _document.addEventListener('keypress', self._keypressEventHandler(), false);\n } else if (_document.attachEvent) {\n // IE8 Compatibility\n _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));\n _document.attachEvent('onkeypress', self._keypressEventHandler());\n }\n }\n\n // record navigation (URL) changes\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n var chrome = _window.chrome;\n var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n var hasPushAndReplaceState =\n !isChromePackagedApp &&\n _window.history &&\n history.pushState &&\n history.replaceState;\n if (autoBreadcrumbs.location && hasPushAndReplaceState) {\n // TODO: remove onpopstate handler on uninstall()\n var oldOnPopState = _window.onpopstate;\n _window.onpopstate = function() {\n var currentHref = self._location.href;\n self._captureUrlChange(self._lastHref, currentHref);\n\n if (oldOnPopState) {\n return oldOnPopState.apply(this, arguments);\n }\n };\n\n var historyReplacementFunction = function(origHistFunction) {\n // note history.pushState.length is 0; intentionally not declaring\n // params to preserve 0 arity\n return function(/* state, title, url */) {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n\n // url argument is optional\n if (url) {\n // coerce to string (this is what pushState does)\n self._captureUrlChange(self._lastHref, url + '');\n }\n\n return origHistFunction.apply(this, arguments);\n };\n };\n\n fill(history, 'pushState', historyReplacementFunction, wrappedBuiltIns);\n fill(history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);\n }\n\n if (autoBreadcrumbs.console && 'console' in _window && console.log) {\n // console\n var consoleMethodCallback = function(msg, data) {\n self.captureBreadcrumb({\n message: msg,\n level: data.level,\n category: 'console'\n });\n };\n\n each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {\n wrapConsoleMethod(console, level, consoleMethodCallback);\n });\n }\n },\n\n _restoreBuiltIns: function() {\n // restore any wrapped builtins\n var builtin;\n while (this._wrappedBuiltIns.length) {\n builtin = this._wrappedBuiltIns.shift();\n\n var obj = builtin[0],\n name = builtin[1],\n orig = builtin[2];\n\n obj[name] = orig;\n }\n },\n\n _restoreConsole: function() {\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsoleMethods) {\n this._originalConsole[method] = this._originalConsoleMethods[method];\n }\n },\n\n _drainPlugins: function() {\n var self = this;\n\n // FIX ME TODO\n each(this._plugins, function(_, plugin) {\n var installer = plugin[0];\n var args = plugin[1];\n installer.apply(self, [self].concat(args));\n });\n },\n\n _parseDSN: function(str) {\n var m = dsnPattern.exec(str),\n dsn = {},\n i = 7;\n\n try {\n while (i--) dsn[dsnKeys[i]] = m[i] || '';\n } catch (e) {\n throw new RavenConfigError('Invalid DSN: ' + str);\n }\n\n if (dsn.pass && !this._globalOptions.allowSecretKey) {\n throw new RavenConfigError(\n 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'\n );\n }\n\n return dsn;\n },\n\n _getGlobalServer: function(uri) {\n // assemble the endpoint from the uri pieces\n var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');\n\n if (uri.protocol) {\n globalServer = uri.protocol + ':' + globalServer;\n }\n return globalServer;\n },\n\n _handleOnErrorStackInfo: function() {\n // if we are intentionally ignoring errors via onerror, bail out\n if (!this._ignoreOnError) {\n this._handleStackInfo.apply(this, arguments);\n }\n },\n\n _handleStackInfo: function(stackInfo, options) {\n var frames = this._prepareFrames(stackInfo, options);\n\n this._triggerEvent('handle', {\n stackInfo: stackInfo,\n options: options\n });\n\n this._processException(\n stackInfo.name,\n stackInfo.message,\n stackInfo.url,\n stackInfo.lineno,\n frames,\n options\n );\n },\n\n _prepareFrames: function(stackInfo, options) {\n var self = this;\n var frames = [];\n if (stackInfo.stack && stackInfo.stack.length) {\n each(stackInfo.stack, function(i, stack) {\n var frame = self._normalizeFrame(stack, stackInfo.url);\n if (frame) {\n frames.push(frame);\n }\n });\n\n // e.g. frames captured via captureMessage throw\n if (options && options.trimHeadFrames) {\n for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {\n frames[j].in_app = false;\n }\n }\n }\n frames = frames.slice(0, this._globalOptions.stackTraceLimit);\n return frames;\n },\n\n _normalizeFrame: function(frame, stackInfoUrl) {\n // normalize the frames data\n var normalized = {\n filename: frame.url,\n lineno: frame.line,\n colno: frame.column,\n function: frame.func || '?'\n };\n\n // Case when we don't have any information about the error\n // E.g. throwing a string or raw object, instead of an `Error` in Firefox\n // Generating synthetic error doesn't add any value here\n //\n // We should probably somehow let a user know that they should fix their code\n if (!frame.url) {\n normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler\n }\n\n normalized.in_app = !// determine if an exception came from outside of our app\n // first we check the global includePaths list.\n (\n (!!this._globalOptions.includePaths.test &&\n !this._globalOptions.includePaths.test(normalized.filename)) ||\n // Now we check for fun, if the function name is Raven or TraceKit\n /(Raven|TraceKit)\\./.test(normalized['function']) ||\n // finally, we do a last ditch effort and check for raven.min.js\n /raven\\.(min\\.)?js$/.test(normalized.filename)\n );\n\n return normalized;\n },\n\n _processException: function(type, message, fileurl, lineno, frames, options) {\n var prefixedMessage = (type ? type + ': ' : '') + (message || '');\n if (\n !!this._globalOptions.ignoreErrors.test &&\n (this._globalOptions.ignoreErrors.test(message) ||\n this._globalOptions.ignoreErrors.test(prefixedMessage))\n ) {\n return;\n }\n\n var stacktrace;\n\n if (frames && frames.length) {\n fileurl = frames[0].filename || fileurl;\n // Sentry expects frames oldest to newest\n // and JS sends them as newest to oldest\n frames.reverse();\n stacktrace = {frames: frames};\n } else if (fileurl) {\n stacktrace = {\n frames: [\n {\n filename: fileurl,\n lineno: lineno,\n in_app: true\n }\n ]\n };\n }\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n var data = objectMerge(\n {\n // sentry.interfaces.Exception\n exception: {\n values: [\n {\n type: type,\n value: message,\n stacktrace: stacktrace\n }\n ]\n },\n culprit: fileurl\n },\n options\n );\n\n // Fire away!\n this._send(data);\n },\n\n _trimPacket: function(data) {\n // For now, we only want to truncate the two different messages\n // but this could/should be expanded to just trim everything\n var max = this._globalOptions.maxMessageLength;\n if (data.message) {\n data.message = truncate(data.message, max);\n }\n if (data.exception) {\n var exception = data.exception.values[0];\n exception.value = truncate(exception.value, max);\n }\n\n var request = data.request;\n if (request) {\n if (request.url) {\n request.url = truncate(request.url, this._globalOptions.maxUrlLength);\n }\n if (request.Referer) {\n request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);\n }\n }\n\n if (data.breadcrumbs && data.breadcrumbs.values)\n this._trimBreadcrumbs(data.breadcrumbs);\n\n return data;\n },\n\n /**\n * Truncate breadcrumb values (right now just URLs)\n */\n _trimBreadcrumbs: function(breadcrumbs) {\n // known breadcrumb properties with urls\n // TODO: also consider arbitrary prop values that start with (https?)?://\n var urlProps = ['to', 'from', 'url'],\n urlProp,\n crumb,\n data;\n\n for (var i = 0; i < breadcrumbs.values.length; ++i) {\n crumb = breadcrumbs.values[i];\n if (\n !crumb.hasOwnProperty('data') ||\n !isObject(crumb.data) ||\n objectFrozen(crumb.data)\n )\n continue;\n\n data = objectMerge({}, crumb.data);\n for (var j = 0; j < urlProps.length; ++j) {\n urlProp = urlProps[j];\n if (data.hasOwnProperty(urlProp) && data[urlProp]) {\n data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);\n }\n }\n breadcrumbs.values[i].data = data;\n }\n },\n\n _getHttpData: function() {\n if (!this._hasNavigator && !this._hasDocument) return;\n var httpData = {};\n\n if (this._hasNavigator && _navigator.userAgent) {\n httpData.headers = {\n 'User-Agent': navigator.userAgent\n };\n }\n\n // Check in `window` instead of `document`, as we may be in ServiceWorker environment\n if (_window.location && _window.location.href) {\n httpData.url = _window.location.href;\n }\n\n if (this._hasDocument && _document.referrer) {\n if (!httpData.headers) httpData.headers = {};\n httpData.headers.Referer = _document.referrer;\n }\n\n return httpData;\n },\n\n _resetBackoff: function() {\n this._backoffDuration = 0;\n this._backoffStart = null;\n },\n\n _shouldBackoff: function() {\n return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;\n },\n\n /**\n * Returns true if the in-process data payload matches the signature\n * of the previously-sent data\n *\n * NOTE: This has to be done at this level because TraceKit can generate\n * data from window.onerror WITHOUT an exception object (IE8, IE9,\n * other old browsers). This can take the form of an \"exception\"\n * data object with a single frame (derived from the onerror args).\n */\n _isRepeatData: function(current) {\n var last = this._lastData;\n\n if (\n !last ||\n current.message !== last.message || // defined for captureMessage\n current.culprit !== last.culprit // defined for captureException/onerror\n )\n return false;\n\n // Stacktrace interface (i.e. from captureMessage)\n if (current.stacktrace || last.stacktrace) {\n return isSameStacktrace(current.stacktrace, last.stacktrace);\n } else if (current.exception || last.exception) {\n // Exception interface (i.e. from captureException/onerror)\n return isSameException(current.exception, last.exception);\n }\n\n return true;\n },\n\n _setBackoffState: function(request) {\n // If we are already in a backoff state, don't change anything\n if (this._shouldBackoff()) {\n return;\n }\n\n var status = request.status;\n\n // 400 - project_id doesn't exist or some other fatal\n // 401 - invalid/revoked dsn\n // 429 - too many requests\n if (!(status === 400 || status === 401 || status === 429)) return;\n\n var retry;\n try {\n // If Retry-After is not in Access-Control-Expose-Headers, most\n // browsers will throw an exception trying to access it\n if (supportsFetch()) {\n retry = request.headers.get('Retry-After');\n } else {\n retry = request.getResponseHeader('Retry-After');\n }\n\n // Retry-After is returned in seconds\n retry = parseInt(retry, 10) * 1000;\n } catch (e) {\n /* eslint no-empty:0 */\n }\n\n this._backoffDuration = retry\n ? // If Sentry server returned a Retry-After value, use it\n retry\n : // Otherwise, double the last backoff duration (starts at 1 sec)\n this._backoffDuration * 2 || 1000;\n\n this._backoffStart = now();\n },\n\n _send: function(data) {\n var globalOptions = this._globalOptions;\n\n var baseData = {\n project: this._globalProject,\n logger: globalOptions.logger,\n platform: 'javascript'\n },\n httpData = this._getHttpData();\n\n if (httpData) {\n baseData.request = httpData;\n }\n\n // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload\n if (data.trimHeadFrames) delete data.trimHeadFrames;\n\n data = objectMerge(baseData, data);\n\n // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge\n data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);\n data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);\n\n // Send along our own collected metadata with extra\n data.extra['session:duration'] = now() - this._startTime;\n\n if (this._breadcrumbs && this._breadcrumbs.length > 0) {\n // intentionally make shallow copy so that additions\n // to breadcrumbs aren't accidentally sent in this request\n data.breadcrumbs = {\n values: [].slice.call(this._breadcrumbs, 0)\n };\n }\n\n if (this._globalContext.user) {\n // sentry.interfaces.User\n data.user = this._globalContext.user;\n }\n\n // Include the environment if it's defined in globalOptions\n if (globalOptions.environment) data.environment = globalOptions.environment;\n\n // Include the release if it's defined in globalOptions\n if (globalOptions.release) data.release = globalOptions.release;\n\n // Include server_name if it's defined in globalOptions\n if (globalOptions.serverName) data.server_name = globalOptions.serverName;\n\n data = this._sanitizeData(data);\n\n // Cleanup empty properties before sending them to the server\n Object.keys(data).forEach(function(key) {\n if (data[key] == null || data[key] === '' || isEmptyObject(data[key])) {\n delete data[key];\n }\n });\n\n if (isFunction(globalOptions.dataCallback)) {\n data = globalOptions.dataCallback(data) || data;\n }\n\n // Why??????????\n if (!data || isEmptyObject(data)) {\n return;\n }\n\n // Check if the request should be filtered or not\n if (\n isFunction(globalOptions.shouldSendCallback) &&\n !globalOptions.shouldSendCallback(data)\n ) {\n return;\n }\n\n // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),\n // so drop requests until \"cool-off\" period has elapsed.\n if (this._shouldBackoff()) {\n this._logDebug('warn', 'Raven dropped error due to backoff: ', data);\n return;\n }\n\n if (typeof globalOptions.sampleRate === 'number') {\n if (Math.random() < globalOptions.sampleRate) {\n this._sendProcessedPayload(data);\n }\n } else {\n this._sendProcessedPayload(data);\n }\n },\n\n _sanitizeData: function(data) {\n return sanitize(data, this._globalOptions.sanitizeKeys);\n },\n\n _getUuid: function() {\n return uuid4();\n },\n\n _sendProcessedPayload: function(data, callback) {\n var self = this;\n var globalOptions = this._globalOptions;\n\n if (!this.isSetup()) return;\n\n // Try and clean up the packet before sending by truncating long values\n data = this._trimPacket(data);\n\n // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,\n // but this would require copying an un-truncated copy of the data packet, which can be\n // arbitrarily deep (extra_data) -- could be worthwhile? will revisit\n if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {\n this._logDebug('warn', 'Raven dropped repeat event: ', data);\n return;\n }\n\n // Send along an event_id if not explicitly passed.\n // This event_id can be used to reference the error within Sentry itself.\n // Set lastEventId after we know the error should actually be sent\n this._lastEventId = data.event_id || (data.event_id = this._getUuid());\n\n // Store outbound payload after trim\n this._lastData = data;\n\n this._logDebug('debug', 'Raven about to send:', data);\n\n var auth = {\n sentry_version: '7',\n sentry_client: 'raven-js/' + this.VERSION,\n sentry_key: this._globalKey\n };\n\n if (this._globalSecret) {\n auth.sentry_secret = this._globalSecret;\n }\n\n var exception = data.exception && data.exception.values[0];\n\n // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy\n if (\n this._globalOptions.autoBreadcrumbs &&\n this._globalOptions.autoBreadcrumbs.sentry\n ) {\n this.captureBreadcrumb({\n category: 'sentry',\n message: exception\n ? (exception.type ? exception.type + ': ' : '') + exception.value\n : data.message,\n event_id: data.event_id,\n level: data.level || 'error' // presume error unless specified\n });\n }\n\n var url = this._globalEndpoint;\n (globalOptions.transport || this._makeRequest).call(this, {\n url: url,\n auth: auth,\n data: data,\n options: globalOptions,\n onSuccess: function success() {\n self._resetBackoff();\n\n self._triggerEvent('success', {\n data: data,\n src: url\n });\n callback && callback();\n },\n onError: function failure(error) {\n self._logDebug('error', 'Raven transport failed to send: ', error);\n\n if (error.request) {\n self._setBackoffState(error.request);\n }\n\n self._triggerEvent('failure', {\n data: data,\n src: url\n });\n error = error || new Error('Raven send failed (no additional details provided)');\n callback && callback(error);\n }\n });\n },\n\n _makeRequest: function(opts) {\n // Auth is intentionally sent as part of query string (NOT as custom HTTP header) to avoid preflight CORS requests\n var url = opts.url + '?' + urlencode(opts.auth);\n\n var evaluatedHeaders = null;\n var evaluatedFetchParameters = {};\n\n if (opts.options.headers) {\n evaluatedHeaders = this._evaluateHash(opts.options.headers);\n }\n\n if (opts.options.fetchParameters) {\n evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);\n }\n\n if (supportsFetch()) {\n evaluatedFetchParameters.body = stringify(opts.data);\n\n var defaultFetchOptions = objectMerge({}, this._fetchDefaults);\n var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);\n\n if (evaluatedHeaders) {\n fetchOptions.headers = evaluatedHeaders;\n }\n\n return _window\n .fetch(url, fetchOptions)\n .then(function(response) {\n if (response.ok) {\n opts.onSuccess && opts.onSuccess();\n } else {\n var error = new Error('Sentry error code: ' + response.status);\n // It's called request only to keep compatibility with XHR interface\n // and not add more redundant checks in setBackoffState method\n error.request = response;\n opts.onError && opts.onError(error);\n }\n })\n ['catch'](function() {\n opts.onError &&\n opts.onError(new Error('Sentry error code: network unavailable'));\n });\n }\n\n var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();\n if (!request) return;\n\n // if browser doesn't support CORS (e.g. IE7), we are out of luck\n var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';\n\n if (!hasCORS) return;\n\n if ('withCredentials' in request) {\n request.onreadystatechange = function() {\n if (request.readyState !== 4) {\n return;\n } else if (request.status === 200) {\n opts.onSuccess && opts.onSuccess();\n } else if (opts.onError) {\n var err = new Error('Sentry error code: ' + request.status);\n err.request = request;\n opts.onError(err);\n }\n };\n } else {\n request = new XDomainRequest();\n // xdomainrequest cannot go http -> https (or vice versa),\n // so always use protocol relative\n url = url.replace(/^https?:/, '');\n\n // onreadystatechange not supported by XDomainRequest\n if (opts.onSuccess) {\n request.onload = opts.onSuccess;\n }\n if (opts.onError) {\n request.onerror = function() {\n var err = new Error('Sentry error code: XDomainRequest');\n err.request = request;\n opts.onError(err);\n };\n }\n }\n\n request.open('POST', url);\n\n if (evaluatedHeaders) {\n each(evaluatedHeaders, function(key, value) {\n request.setRequestHeader(key, value);\n });\n }\n\n request.send(stringify(opts.data));\n },\n\n _evaluateHash: function(hash) {\n var evaluated = {};\n\n for (var key in hash) {\n if (hash.hasOwnProperty(key)) {\n var value = hash[key];\n evaluated[key] = typeof value === 'function' ? value() : value;\n }\n }\n\n return evaluated;\n },\n\n _logDebug: function(level) {\n // We allow `Raven.debug` and `Raven.config(DSN, { debug: true })` to not make backward incompatible API change\n if (\n this._originalConsoleMethods[level] &&\n (this.debug || this._globalOptions.debug)\n ) {\n // In IE<10 console methods do not have their own 'apply' method\n Function.prototype.apply.call(\n this._originalConsoleMethods[level],\n this._originalConsole,\n [].slice.call(arguments, 1)\n );\n }\n },\n\n _mergeContext: function(key, context) {\n if (isUndefined(context)) {\n delete this._globalContext[key];\n } else {\n this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);\n }\n }\n};\n\n// Deprecations\nRaven.prototype.setUser = Raven.prototype.setUserContext;\nRaven.prototype.setReleaseContext = Raven.prototype.setRelease;\n\nmodule.exports = Raven;\n","/**\n * Enforces a single instance of the Raven client, and the\n * main entry point for Raven. If you are a consumer of the\n * Raven library, you SHOULD load this file (vs raven.js).\n **/\n\nvar RavenConstructor = require('./raven');\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _Raven = _window.Raven;\n\nvar Raven = new RavenConstructor();\n\n/*\n * Allow multiple versions of Raven to be installed.\n * Strip Raven from the global context and returns the instance.\n *\n * @return {Raven}\n */\nRaven.noConflict = function() {\n _window.Raven = _Raven;\n return Raven;\n};\n\nRaven.afterLoad();\n\nmodule.exports = Raven;\n\n/**\n * DISCLAIMER:\n *\n * Expose `Client` constructor for cases where user want to track multiple \"sub-applications\" in one larger app.\n * It's not meant to be used by a wide audience, so pleaaase make sure that you know what you're doing before using it.\n * Accidentally calling `install` multiple times, may result in an unexpected behavior that's very hard to debug.\n *\n * It's called `Client' to be in-line with Raven Node implementation.\n *\n * HOWTO:\n *\n * import Raven from 'raven-js';\n *\n * const someAppReporter = new Raven.Client();\n * const someOtherAppReporter = new Raven.Client();\n *\n * someAppReporter.config('__DSN__', {\n * ...config goes here\n * });\n *\n * someOtherAppReporter.config('__OTHER_DSN__', {\n * ...config goes here\n * });\n *\n * someAppReporter.captureMessage(...);\n * someAppReporter.captureException(...);\n * someAppReporter.captureBreadcrumb(...);\n *\n * someOtherAppReporter.captureMessage(...);\n * someOtherAppReporter.captureException(...);\n * someOtherAppReporter.captureBreadcrumb(...);\n *\n * It should \"just work\".\n */\nmodule.exports.Client = RavenConstructor;\n","// ==========================================================================\n// Plyr.io demo\n// This code is purely for the https://plyr.io website\n// Please see readme.md in the root or github.com/sampotts/plyr\n// ==========================================================================\n\nimport Raven from 'raven-js';\n\n(() => {\n const isLive = window.location.host === 'plyr.io';\n\n // Raven / Sentry\n // For demo site (https://plyr.io) only\n if (isLive) {\n Raven.config('https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555').install();\n }\n\n document.addEventListener('DOMContentLoaded', () => {\n Raven.context(() => {\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n document.activeElement.classList.add(tabClassName);\n }, 0);\n });\n\n // Setup the player\n const player = new Plyr('#player', {\n debug: true,\n title: 'View From A Blue Moon',\n iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: true,\n },\n /* controls: [\n 'play-large',\n 'restart',\n 'rewind',\n 'play',\n 'fast-forward',\n 'progress',\n 'current-time',\n 'duration',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ], */\n /* i18n: {\n restart: '重新開始',\n rewind: '快退{seektime}秒',\n play: '播放',\n pause: '暫停',\n fastForward: '快進{seektime}秒',\n seek: '尋求',\n played: '發揮',\n buffered: '緩衝的',\n currentTime: '當前時間戳',\n duration: '長短',\n volume: '音量',\n mute: '靜音',\n unmute: '取消靜音',\n enableCaptions: '開啟字幕',\n disableCaptions: '關閉字幕',\n enterFullscreen: '進入全螢幕',\n exitFullscreen: '退出全螢幕',\n frameTitle: '球員為{title}',\n captions: '字幕',\n settings: '設定',\n speed: '速度',\n normal: '正常',\n quality: '質量',\n loop: '循環',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: '重啟',\n disabled: '殘',\n enabled: '啟用',\n advertisement: '廣告',\n }, */\n captions: {\n active: true,\n },\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n ads: {\n enabled: true,\n publisherId: '918848828995742',\n },\n });\n\n // Expose for tinkering in the console\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-576p.mp4',\n type: 'video/mp4',\n size: 576,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-720p.mp4',\n type: 'video/mp4',\n size: 720,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1080p.mp4',\n type: 'video/mp4',\n size: 1080,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1440p.mp4',\n type: 'video/mp4',\n size: 1440,\n },\n ],\n poster: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title: 'Kishi Bashi &ndash; &ldquo;It All Began With A Burst&rdquo;',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n }],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n }],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button => toggleClass(button.parentElement, 'active', false));\n\n // Set active on parent\n toggleClass(document.querySelector(`[data-source=\"${type}\"]`), 'active', true);\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(cite => {\n cite.setAttribute('hidden', '');\n });\n document.querySelector(`.plyr__cite--${type}`).removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`,\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n });\n });\n\n // Google analytics\n // For demo site (https://plyr.io) only\n /* eslint-disable */\n if (isLive) {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n }\n /* eslint-enable */\n})();\n"]} \ No newline at end of file
+{"version":3,"sources":["../../../node_modules/raven-js/vendor/json-stringify-safe/stringify.js","../../../node_modules/raven-js/src/utils.js","../../../node_modules/raven-js/vendor/TraceKit/tracekit.js","../../../node_modules/raven-js/vendor/md5/md5.js","../../../node_modules/raven-js/src/configError.js","../../../node_modules/raven-js/src/console.js","../../../node_modules/raven-js/src/raven.js","../../../node_modules/raven-js/src/singleton.js","demo.js"],"names":["indexOf","haystack","needle","i","length","serializer","replacer","cycleReplacer","stack","keys","key","value","slice","join","thisPos","this","splice","push","Infinity","call","Error","err","message","name","Object","prototype","hasOwnProperty","stringifyError","module","exports","obj","spaces","JSON","stringify","getSerialize","_window","window","global","self","isUndefined","what","isPlainObject","toString","isString","isArray","supportsFetch","Headers","Request","Response","e","each","callback","j","hasKey","truncate","str","max","substr","object","joinRegExp","patterns","pattern","sources","len","replace","source","RegExp","htmlElementAsString","elem","className","classes","attr","out","tagName","toLowerCase","id","split","attrWhitelist","getAttribute","isOnlyOneTruthy","a","b","isSameStacktrace","stack1","stack2","frames1","frames","frames2","filename","lineno","colno","MAX_SERIALIZE_EXCEPTION_DEPTH","MAX_SERIALIZE_EXCEPTION_SIZE","MAX_SERIALIZE_KEYS_LENGTH","jsonSize","encodeURI","utf8Length","serializeValue","type","utils","isObject","isError","isErrorEvent","isDOMError","isDOMException","isFunction","isEmptyObject","_","supportsErrorEvent","ErrorEvent","supportsDOMError","DOMError","supportsDOMException","DOMException","supportsReferrerPolicy","referrerPolicy","supportsPromiseRejectionEvent","PromiseRejectionEvent","wrappedCallback","data","original","normalizedData","objectMerge","obj1","obj2","objectFrozen","isFrozen","urlencode","o","pairs","encodeURIComponent","uuid4","crypto","msCrypto","getRandomValues","arr","Uint16Array","pad","num","v","c","r","Math","random","htmlTreeAsString","nextStr","height","sepLength","parentNode","reverse","isSameException","ex1","ex2","values","stacktrace","parseUrl","url","match","query","fragment","protocol","host","path","relative","fill","replacement","track","orig","__raven__","__orig__","safeJoin","input","delimiter","output","String","serializeException","ex","depth","maxSize","serialized","serializeObject","reduce","acc","Array","map","val","serializeKeysForMessage","maxLength","filter","usedKeys","sanitize","sanitizeKeys","safeInput","sanitizeRegExp","sanitizeMask","parse","o_O","sanitizeWorker","workerInput","k","test","TraceKit","collectWindowErrors","debug","_slice","UNKNOWN_FUNCTION","ERROR_TYPES_RE","getLocationHref","document","location","href","report","_oldOnerrorHandler","_onErrorHandlerInstalled","handlers","lastArgs","lastException","lastExceptionStack","notifyHandlers","isWindowError","exception","apply","concat","arguments","inner","traceKitWindowOnError","msg","lineNo","colNo","error","computeStackTrace","augmentStackTraceWithInitialElement","processLastException","groups","line","column","undefined","func","_lastExceptionStack","_lastArgs","rethrow","args","setTimeout","incomplete","subscribe","handler","onerror","unsubscribe","uninstall","computeStackTraceFromStackProp","submatch","parts","element","chrome","winjs","gecko","geckoEval","chromeEval","lines","exec","isNative","columnNumber","xhr","XMLHttpRequest","open","send","status","responseText","sourceMaps","sourceMapAddress","charAt","origin","hostname","port","stackInfo","initial","unshift","partial","computeStackTraceByWalkingCallerChain","item","functionName","funcs","recursion","curr","caller","substring","result","sourceURL","fileName","lineNumber","description","tracekit","safeAdd","x","y","lsw","md5cmn","q","s","t","cnt","md5ff","d","md5gg","md5hh","md5ii","binlMD5","olda","oldb","oldc","oldd","binl2rstr","length32","fromCharCode","rstr2binl","length8","charCodeAt","rstr2hex","str2rstrUTF8","unescape","rawMD5","rstrMD5","rawHMACMD5","hash","bkey","ipad","opad","rstrHMACMD5","md5_1","string","raw","RavenConfigError","constructor","configError","console$1","console","level","originalConsoleLevel","originalConsole","sentryLevel","logger","extra","Function","wrapConsoleMethod","require$$0","dsnKeys","dsnPattern","now","Date","_document","_navigator","navigator","keepOriginalCallback","Raven","method","_hasJSON","_hasDocument","_hasNavigator","_lastCapturedException","_lastData","_lastEventId","_globalServer","_globalKey","_globalProject","_globalContext","_globalOptions","release","SENTRY_RELEASE","ignoreErrors","ignoreUrls","whitelistUrls","includePaths","headers","captureUnhandledRejections","maxMessageLength","maxUrlLength","stackTraceLimit","autoBreadcrumbs","instrument","sampleRate","_fetchDefaults","keepalive","_ignoreOnError","_isRavenInstalled","_originalErrorStackTraceLimit","_originalConsole","_originalConsoleMethods","_plugins","_startTime","_wrappedBuiltIns","_breadcrumbs","_lastCapturedEvent","_keypressTimeout","_location","_lastHref","_resetBackoff","VERSION","config","dsn","options","_logDebug","globalOptions","setDSN","maxBreadcrumbs","min","autoBreadcrumbDefaults","dom","sentry","instrumentDefaults","tryCatch","install","isSetup","_handleOnErrorStackInfo","_attachPromiseRejectionHandler","_patchFunctionToString","_instrumentTryCatch","_instrumentBreadcrumbs","_drainPlugins","uri","_parseDSN","lastSlash","lastIndexOf","_dsn","user","_globalSecret","pass","_getGlobalServer","_globalEndpoint","context","wrap","_before","__raven_wrapper__","wrapped","deep","_ignoreNextOnError","captureException","property","_detachPromiseRejectionHandler","_unpatchFunctionToString","_restoreBuiltIns","_restoreConsole","_promiseRejectionHandler","event","reason","unhandledPromiseRejection","bind","addEventListener","removeEventListener","trimHeadFrames","captureMessage","_getCaptureExceptionOptionsFromPlainObject","_handleStackInfo","currentOptions","exKeys","sort","fingerprint","md5","__serialized__","initialCall","fileurl","_prepareFrames","_send","captureBreadcrumb","crumb","timestamp","breadcrumbCallback","shift","addPlugin","plugin","pluginArgs","setUserContext","setExtraContext","_mergeContext","setTagsContext","tags","clearContext","getContext","setEnvironment","environment","setRelease","setDataCallback","dataCallback","setBreadcrumbCallback","setShouldSendCallback","shouldSendCallback","setTransport","transport","lastEventId","ravenNotConfiguredError","afterLoad","RavenConfig","showReportDialog","eventId","encode","qs","email","globalServer","script","createElement","async","src","head","body","appendChild","_triggerEvent","eventType","evt","toUpperCase","createEvent","initEvent","createEventObject","dispatchEvent","fireEvent","_breadcrumbEventHandler","evtName","target","category","_keypressEventHandler","isContentEditable","timeout","clearTimeout","_captureUrlChange","from","to","parsedLoc","parsedTo","parsedFrom","_originalFunctionToString","wrappedBuiltIns","wrapTimeFn","fn","originalCallback","wrapEventTarget","proto","capture","secure","handleEvent","before","clickHandler","keypressHandler","requestAnimationFrame","cb","eventTargets","wrapProp","prop","xhrproto","origOpen","__raven_xhr","status_code","origSend","onreadystatechangeHandler","readyState","props","onreadystatechange","origFetch","fetchInput","fetchData","then","response","attachEvent","hasPushAndReplaceState","app","runtime","history","pushState","replaceState","oldOnPopState","onpopstate","currentHref","historyReplacementFunction","origHistFunction","log","consoleMethodCallback","builtin","installer","m","allowSecretKey","_processException","frame","_normalizeFrame","in_app","stackInfoUrl","normalized","function","prefixedMessage","transaction","_trimPacket","request","Referer","breadcrumbs","_trimBreadcrumbs","urlProp","urlProps","_getHttpData","httpData","userAgent","User-Agent","referrer","_backoffDuration","_backoffStart","_shouldBackoff","_isRepeatData","current","last","_setBackoffState","retry","get","getResponseHeader","parseInt","baseData","project","platform","serverName","server_name","_sanitizeData","forEach","_sendProcessedPayload","_getUuid","allowDuplicates","event_id","auth","sentry_version","sentry_client","sentry_key","sentry_secret","_makeRequest","onSuccess","onError","opts","evaluatedHeaders","evaluatedFetchParameters","_evaluateHash","fetchParameters","defaultFetchOptions","fetchOptions","fetch","ok","XDomainRequest","onload","setRequestHeader","evaluated","setUser","setReleaseContext","raven","_Raven","RavenConstructor","noConflict","isLive","singleton","Client","shr","setup","classList","remove","keyCode","activeElement","add","player","Plyr","buttons","querySelectorAll","types","currentType","historySupport","toggleClass","state","newSource","init","video","audio","youtube","vimeo","button","parentElement","querySelector","cite","setAttribute","removeAttribute","GoogleAnalyticsObject","l","getElementsByTagName","insertBefore","ga"],"mappings":"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","file":"demo.min.js","sourcesContent":["/*\n json-stringify-safe\n Like JSON.stringify, but doesn't throw on circular references.\n\n Originally forked from https://github.com/isaacs/json-stringify-safe\n version 5.0.1 on 3/8/2017 and modified to handle Errors serialization\n and IE8 compatibility. Tests for this are in test/vendor.\n\n ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE\n*/\n\nexports = module.exports = stringify;\nexports.getSerialize = serializer;\n\nfunction indexOf(haystack, needle) {\n for (var i = 0; i < haystack.length; ++i) {\n if (haystack[i] === needle) return i;\n }\n return -1;\n}\n\nfunction stringify(obj, replacer, spaces, cycleReplacer) {\n return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);\n}\n\n// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106\nfunction stringifyError(value) {\n var err = {\n // These properties are implemented as magical getters and don't show up in for in\n stack: value.stack,\n message: value.message,\n name: value.name\n };\n\n for (var i in value) {\n if (Object.prototype.hasOwnProperty.call(value, i)) {\n err[i] = value[i];\n }\n }\n\n return err;\n}\n\nfunction serializer(replacer, cycleReplacer) {\n var stack = [];\n var keys = [];\n\n if (cycleReplacer == null) {\n cycleReplacer = function(key, value) {\n if (stack[0] === value) {\n return '[Circular ~]';\n }\n return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';\n };\n }\n\n return function(key, value) {\n if (stack.length > 0) {\n var thisPos = indexOf(stack, this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n\n if (~indexOf(stack, value)) {\n value = cycleReplacer.call(this, key, value);\n }\n } else {\n stack.push(value);\n }\n\n return replacer == null\n ? value instanceof Error ? stringifyError(value) : value\n : replacer.call(this, key, value);\n };\n}\n","var stringify = require('../vendor/json-stringify-safe/stringify');\n\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction isObject(what) {\n return typeof what === 'object' && what !== null;\n}\n\n// Yanked from https://git.io/vS8DV re-used under CC0\n// with some tiny modifications\nfunction isError(value) {\n switch (Object.prototype.toString.call(value)) {\n case '[object Error]':\n return true;\n case '[object Exception]':\n return true;\n case '[object DOMException]':\n return true;\n default:\n return value instanceof Error;\n }\n}\n\nfunction isErrorEvent(value) {\n return Object.prototype.toString.call(value) === '[object ErrorEvent]';\n}\n\nfunction isDOMError(value) {\n return Object.prototype.toString.call(value) === '[object DOMError]';\n}\n\nfunction isDOMException(value) {\n return Object.prototype.toString.call(value) === '[object DOMException]';\n}\n\nfunction isUndefined(what) {\n return what === void 0;\n}\n\nfunction isFunction(what) {\n return typeof what === 'function';\n}\n\nfunction isPlainObject(what) {\n return Object.prototype.toString.call(what) === '[object Object]';\n}\n\nfunction isString(what) {\n return Object.prototype.toString.call(what) === '[object String]';\n}\n\nfunction isArray(what) {\n return Object.prototype.toString.call(what) === '[object Array]';\n}\n\nfunction isEmptyObject(what) {\n if (!isPlainObject(what)) return false;\n\n for (var _ in what) {\n if (what.hasOwnProperty(_)) {\n return false;\n }\n }\n return true;\n}\n\nfunction supportsErrorEvent() {\n try {\n new ErrorEvent(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsDOMError() {\n try {\n new DOMError(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsDOMException() {\n try {\n new DOMException(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsFetch() {\n if (!('fetch' in _window)) return false;\n\n try {\n new Headers(); // eslint-disable-line no-new\n new Request(''); // eslint-disable-line no-new\n new Response(); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n// https://caniuse.com/#feat=referrer-policy\n// It doesn't. And it throw exception instead of ignoring this parameter...\n// REF: https://github.com/getsentry/raven-js/issues/1233\nfunction supportsReferrerPolicy() {\n if (!supportsFetch()) return false;\n\n try {\n // eslint-disable-next-line no-new\n new Request('pickleRick', {\n referrerPolicy: 'origin'\n });\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsPromiseRejectionEvent() {\n return typeof PromiseRejectionEvent === 'function';\n}\n\nfunction wrappedCallback(callback) {\n function dataCallback(data, original) {\n var normalizedData = callback(data) || data;\n if (original) {\n return original(normalizedData) || normalizedData;\n }\n return normalizedData;\n }\n\n return dataCallback;\n}\n\nfunction each(obj, callback) {\n var i, j;\n\n if (isUndefined(obj.length)) {\n for (i in obj) {\n if (hasKey(obj, i)) {\n callback.call(null, i, obj[i]);\n }\n }\n } else {\n j = obj.length;\n if (j) {\n for (i = 0; i < j; i++) {\n callback.call(null, i, obj[i]);\n }\n }\n }\n}\n\nfunction objectMerge(obj1, obj2) {\n if (!obj2) {\n return obj1;\n }\n each(obj2, function(key, value) {\n obj1[key] = value;\n });\n return obj1;\n}\n\n/**\n * This function is only used for react-native.\n * react-native freezes object that have already been sent over the\n * js bridge. We need this function in order to check if the object is frozen.\n * So it's ok that objectFrozen returns false if Object.isFrozen is not\n * supported because it's not relevant for other \"platforms\". See related issue:\n * https://github.com/getsentry/react-native-sentry/issues/57\n */\nfunction objectFrozen(obj) {\n if (!Object.isFrozen) {\n return false;\n }\n return Object.isFrozen(obj);\n}\n\nfunction truncate(str, max) {\n if (typeof max !== 'number') {\n throw new Error('2nd argument to `truncate` function should be a number');\n }\n if (typeof str !== 'string' || max === 0) {\n return str;\n }\n return str.length <= max ? str : str.substr(0, max) + '\\u2026';\n}\n\n/**\n * hasKey, a better form of hasOwnProperty\n * Example: hasKey(MainHostObject, property) === true/false\n *\n * @param {Object} host object to check property\n * @param {string} key to check\n */\nfunction hasKey(object, key) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction joinRegExp(patterns) {\n // Combine an array of regular expressions and strings into one large regexp\n // Be mad.\n var sources = [],\n i = 0,\n len = patterns.length,\n pattern;\n\n for (; i < len; i++) {\n pattern = patterns[i];\n if (isString(pattern)) {\n // If it's a string, we need to escape it\n // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n sources.push(pattern.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1'));\n } else if (pattern && pattern.source) {\n // If it's a regexp already, we want to extract the source\n sources.push(pattern.source);\n }\n // Intentionally skip other cases\n }\n return new RegExp(sources.join('|'), 'i');\n}\n\nfunction urlencode(o) {\n var pairs = [];\n each(o, function(key, value) {\n pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n });\n return pairs.join('&');\n}\n\n// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n// intentionally using regex and not <a/> href parsing trick because React Native and other\n// environments where DOM might not be available\nfunction parseUrl(url) {\n if (typeof url !== 'string') return {};\n var match = url.match(/^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n // coerce to undefined values to empty string so we don't get 'undefined'\n var query = match[6] || '';\n var fragment = match[8] || '';\n return {\n protocol: match[2],\n host: match[4],\n path: match[5],\n relative: match[5] + query + fragment // everything minus origin\n };\n}\nfunction uuid4() {\n var crypto = _window.crypto || _window.msCrypto;\n\n if (!isUndefined(crypto) && crypto.getRandomValues) {\n // Use window.crypto API if available\n // eslint-disable-next-line no-undef\n var arr = new Uint16Array(8);\n crypto.getRandomValues(arr);\n\n // set 4 in byte 7\n arr[3] = (arr[3] & 0xfff) | 0x4000;\n // set 2 most significant bits of byte 9 to '10'\n arr[4] = (arr[4] & 0x3fff) | 0x8000;\n\n var pad = function(num) {\n var v = num.toString(16);\n while (v.length < 4) {\n v = '0' + v;\n }\n return v;\n };\n\n return (\n pad(arr[0]) +\n pad(arr[1]) +\n pad(arr[2]) +\n pad(arr[3]) +\n pad(arr[4]) +\n pad(arr[5]) +\n pad(arr[6]) +\n pad(arr[7])\n );\n } else {\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (Math.random() * 16) | 0,\n v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n}\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @param elem\n * @returns {string}\n */\nfunction htmlTreeAsString(elem) {\n /* eslint no-extra-parens:0*/\n var MAX_TRAVERSE_HEIGHT = 5,\n MAX_OUTPUT_LEN = 80,\n out = [],\n height = 0,\n len = 0,\n separator = ' > ',\n sepLength = separator.length,\n nextStr;\n\n while (elem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = htmlElementAsString(elem);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n // (ignore this limit if we are on the first iteration)\n if (\n nextStr === 'html' ||\n (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)\n ) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n elem = elem.parentNode;\n }\n\n return out.reverse().join(separator);\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @param HTMLElement\n * @returns {string}\n */\nfunction htmlElementAsString(elem) {\n var out = [],\n className,\n classes,\n key,\n attr,\n i;\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n out.push(elem.tagName.toLowerCase());\n if (elem.id) {\n out.push('#' + elem.id);\n }\n\n className = elem.className;\n if (className && isString(className)) {\n classes = className.split(/\\s+/);\n for (i = 0; i < classes.length; i++) {\n out.push('.' + classes[i]);\n }\n }\n var attrWhitelist = ['type', 'name', 'title', 'alt'];\n for (i = 0; i < attrWhitelist.length; i++) {\n key = attrWhitelist[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.push('[' + key + '=\"' + attr + '\"]');\n }\n }\n return out.join('');\n}\n\n/**\n * Returns true if either a OR b is truthy, but not both\n */\nfunction isOnlyOneTruthy(a, b) {\n return !!(!!a ^ !!b);\n}\n\n/**\n * Returns true if both parameters are undefined\n */\nfunction isBothUndefined(a, b) {\n return isUndefined(a) && isUndefined(b);\n}\n\n/**\n * Returns true if the two input exception interfaces have the same content\n */\nfunction isSameException(ex1, ex2) {\n if (isOnlyOneTruthy(ex1, ex2)) return false;\n\n ex1 = ex1.values[0];\n ex2 = ex2.values[0];\n\n if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;\n\n // in case both stacktraces are undefined, we can't decide so default to false\n if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) return false;\n\n return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);\n}\n\n/**\n * Returns true if the two input stack trace interfaces have the same content\n */\nfunction isSameStacktrace(stack1, stack2) {\n if (isOnlyOneTruthy(stack1, stack2)) return false;\n\n var frames1 = stack1.frames;\n var frames2 = stack2.frames;\n\n // Exit early if frame count differs\n if (frames1.length !== frames2.length) return false;\n\n // Iterate through every frame; bail out if anything differs\n var a, b;\n for (var i = 0; i < frames1.length; i++) {\n a = frames1[i];\n b = frames2[i];\n if (\n a.filename !== b.filename ||\n a.lineno !== b.lineno ||\n a.colno !== b.colno ||\n a['function'] !== b['function']\n )\n return false;\n }\n return true;\n}\n\n/**\n * Polyfill a method\n * @param obj object e.g. `document`\n * @param name method name present on object e.g. `addEventListener`\n * @param replacement replacement function\n * @param track {optional} record instrumentation to an array\n */\nfunction fill(obj, name, replacement, track) {\n if (obj == null) return;\n var orig = obj[name];\n obj[name] = replacement(orig);\n obj[name].__raven__ = true;\n obj[name].__orig__ = orig;\n if (track) {\n track.push([obj, name, orig]);\n }\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns {string}\n */\nfunction safeJoin(input, delimiter) {\n if (!isArray(input)) return '';\n\n var output = [];\n\n for (var i = 0; i < input.length; i++) {\n try {\n output.push(String(input[i]));\n } catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n\n return output.join(delimiter);\n}\n\n// Default Node.js REPL depth\nvar MAX_SERIALIZE_EXCEPTION_DEPTH = 3;\n// 50kB, as 100kB is max payload size, so half sounds reasonable\nvar MAX_SERIALIZE_EXCEPTION_SIZE = 50 * 1024;\nvar MAX_SERIALIZE_KEYS_LENGTH = 40;\n\nfunction utf8Length(value) {\n return ~-encodeURI(value).split(/%..|./).length;\n}\n\nfunction jsonSize(value) {\n return utf8Length(JSON.stringify(value));\n}\n\nfunction serializeValue(value) {\n if (typeof value === 'string') {\n var maxLength = 40;\n return truncate(value, maxLength);\n } else if (\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n typeof value === 'undefined'\n ) {\n return value;\n }\n\n var type = Object.prototype.toString.call(value);\n\n // Node.js REPL notation\n if (type === '[object Object]') return '[Object]';\n if (type === '[object Array]') return '[Array]';\n if (type === '[object Function]')\n return value.name ? '[Function: ' + value.name + ']' : '[Function]';\n\n return value;\n}\n\nfunction serializeObject(value, depth) {\n if (depth === 0) return serializeValue(value);\n\n if (isPlainObject(value)) {\n return Object.keys(value).reduce(function(acc, key) {\n acc[key] = serializeObject(value[key], depth - 1);\n return acc;\n }, {});\n } else if (Array.isArray(value)) {\n return value.map(function(val) {\n return serializeObject(val, depth - 1);\n });\n }\n\n return serializeValue(value);\n}\n\nfunction serializeException(ex, depth, maxSize) {\n if (!isPlainObject(ex)) return ex;\n\n depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth;\n maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize;\n\n var serialized = serializeObject(ex, depth);\n\n if (jsonSize(stringify(serialized)) > maxSize) {\n return serializeException(ex, depth - 1);\n }\n\n return serialized;\n}\n\nfunction serializeKeysForMessage(keys, maxLength) {\n if (typeof keys === 'number' || typeof keys === 'string') return keys.toString();\n if (!Array.isArray(keys)) return '';\n\n keys = keys.filter(function(key) {\n return typeof key === 'string';\n });\n if (keys.length === 0) return '[object has no keys]';\n\n maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength;\n if (keys[0].length >= maxLength) return keys[0];\n\n for (var usedKeys = keys.length; usedKeys > 0; usedKeys--) {\n var serialized = keys.slice(0, usedKeys).join(', ');\n if (serialized.length > maxLength) continue;\n if (usedKeys === keys.length) return serialized;\n return serialized + '\\u2026';\n }\n\n return '';\n}\n\nfunction sanitize(input, sanitizeKeys) {\n if (!isArray(sanitizeKeys) || (isArray(sanitizeKeys) && sanitizeKeys.length === 0))\n return input;\n\n var sanitizeRegExp = joinRegExp(sanitizeKeys);\n var sanitizeMask = '********';\n var safeInput;\n\n try {\n safeInput = JSON.parse(stringify(input));\n } catch (o_O) {\n return input;\n }\n\n function sanitizeWorker(workerInput) {\n if (isArray(workerInput)) {\n return workerInput.map(function(val) {\n return sanitizeWorker(val);\n });\n }\n\n if (isPlainObject(workerInput)) {\n return Object.keys(workerInput).reduce(function(acc, k) {\n if (sanitizeRegExp.test(k)) {\n acc[k] = sanitizeMask;\n } else {\n acc[k] = sanitizeWorker(workerInput[k]);\n }\n return acc;\n }, {});\n }\n\n return workerInput;\n }\n\n return sanitizeWorker(safeInput);\n}\n\nmodule.exports = {\n isObject: isObject,\n isError: isError,\n isErrorEvent: isErrorEvent,\n isDOMError: isDOMError,\n isDOMException: isDOMException,\n isUndefined: isUndefined,\n isFunction: isFunction,\n isPlainObject: isPlainObject,\n isString: isString,\n isArray: isArray,\n isEmptyObject: isEmptyObject,\n supportsErrorEvent: supportsErrorEvent,\n supportsDOMError: supportsDOMError,\n supportsDOMException: supportsDOMException,\n supportsFetch: supportsFetch,\n supportsReferrerPolicy: supportsReferrerPolicy,\n supportsPromiseRejectionEvent: supportsPromiseRejectionEvent,\n wrappedCallback: wrappedCallback,\n each: each,\n objectMerge: objectMerge,\n truncate: truncate,\n objectFrozen: objectFrozen,\n hasKey: hasKey,\n joinRegExp: joinRegExp,\n urlencode: urlencode,\n uuid4: uuid4,\n htmlTreeAsString: htmlTreeAsString,\n htmlElementAsString: htmlElementAsString,\n isSameException: isSameException,\n isSameStacktrace: isSameStacktrace,\n parseUrl: parseUrl,\n fill: fill,\n safeJoin: safeJoin,\n serializeException: serializeException,\n serializeKeysForMessage: serializeKeysForMessage,\n sanitize: sanitize\n};\n","var utils = require('../../src/utils');\n\n/*\n TraceKit - Cross brower stack traces\n\n This was originally forked from github.com/occ/TraceKit, but has since been\n largely re-written and is now maintained as part of raven-js. Tests for\n this are in test/vendor.\n\n MIT license\n*/\n\nvar TraceKit = {\n collectWindowErrors: true,\n debug: false\n};\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n// global reference to slice\nvar _slice = [].slice;\nvar UNKNOWN_FUNCTION = '?';\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types\nvar ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;\n\nfunction getLocationHref() {\n if (typeof document === 'undefined' || document.location == null) return '';\n return document.location.href;\n}\n\nfunction getLocationOrigin() {\n if (typeof document === 'undefined' || document.location == null) return '';\n\n // Oh dear IE10...\n if (!document.location.origin) {\n document.location.origin =\n document.location.protocol +\n '//' +\n document.location.hostname +\n (document.location.port ? ':' + document.location.port : '');\n }\n\n return document.location.origin;\n}\n\n/**\n * TraceKit.report: cross-browser processing of unhandled exceptions\n *\n * Syntax:\n * TraceKit.report.subscribe(function(stackInfo) { ... })\n * TraceKit.report.unsubscribe(function(stackInfo) { ... })\n * TraceKit.report(exception)\n * try { ...code... } catch(ex) { TraceKit.report(ex); }\n *\n * Supports:\n * - Firefox: full stack trace with line numbers, plus column number\n * on top frame; column number is not guaranteed\n * - Opera: full stack trace with line and column numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n * - IE: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n *\n * In theory, TraceKit should work on all of the following versions:\n * - IE5.5+ (only 8.0 tested)\n * - Firefox 0.9+ (only 3.5+ tested)\n * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require\n * Exceptions Have Stacktrace to be enabled in opera:config)\n * - Safari 3+ (only 4+ tested)\n * - Chrome 1+ (only 5+ tested)\n * - Konqueror 3.5+ (untested)\n *\n * Requires TraceKit.computeStackTrace.\n *\n * Tries to catch all unhandled exceptions and report them to the\n * subscribed handlers. Please note that TraceKit.report will rethrow the\n * exception. This is REQUIRED in order to get a useful stack trace in IE.\n * If the exception does not reach the top of the browser, you will only\n * get a stack trace from the point where TraceKit.report was called.\n *\n * Handlers receive a stackInfo object as described in the\n * TraceKit.computeStackTrace docs.\n */\nTraceKit.report = (function reportModuleWrapper() {\n var handlers = [],\n lastArgs = null,\n lastException = null,\n lastExceptionStack = null;\n\n /**\n * Add a crash handler.\n * @param {Function} handler\n */\n function subscribe(handler) {\n installGlobalHandler();\n handlers.push(handler);\n }\n\n /**\n * Remove a crash handler.\n * @param {Function} handler\n */\n function unsubscribe(handler) {\n for (var i = handlers.length - 1; i >= 0; --i) {\n if (handlers[i] === handler) {\n handlers.splice(i, 1);\n }\n }\n }\n\n /**\n * Remove all crash handlers.\n */\n function unsubscribeAll() {\n uninstallGlobalHandler();\n handlers = [];\n }\n\n /**\n * Dispatch stack information to all handlers.\n * @param {Object.<string, *>} stack\n */\n function notifyHandlers(stack, isWindowError) {\n var exception = null;\n if (isWindowError && !TraceKit.collectWindowErrors) {\n return;\n }\n for (var i in handlers) {\n if (handlers.hasOwnProperty(i)) {\n try {\n handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));\n } catch (inner) {\n exception = inner;\n }\n }\n }\n\n if (exception) {\n throw exception;\n }\n }\n\n var _oldOnerrorHandler, _onErrorHandlerInstalled;\n\n /**\n * Ensures all global unhandled exceptions are recorded.\n * Supported by Gecko and IE.\n * @param {string} msg Error message.\n * @param {string} url URL of script that generated the exception.\n * @param {(number|string)} lineNo The line number at which the error\n * occurred.\n * @param {?(number|string)} colNo The column number at which the error\n * occurred.\n * @param {?Error} ex The actual Error object.\n */\n function traceKitWindowOnError(msg, url, lineNo, colNo, ex) {\n var stack = null;\n // If 'ex' is ErrorEvent, get real Error from inside\n var exception = utils.isErrorEvent(ex) ? ex.error : ex;\n // If 'msg' is ErrorEvent, get real message from inside\n var message = utils.isErrorEvent(msg) ? msg.message : msg;\n\n if (lastExceptionStack) {\n TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(\n lastExceptionStack,\n url,\n lineNo,\n message\n );\n processLastException();\n } else if (exception && utils.isError(exception)) {\n // non-string `exception` arg; attempt to extract stack trace\n\n // New chrome and blink send along a real error object\n // Let's just report that like a normal error.\n // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror\n stack = TraceKit.computeStackTrace(exception);\n notifyHandlers(stack, true);\n } else {\n var location = {\n url: url,\n line: lineNo,\n column: colNo\n };\n\n var name = undefined;\n var groups;\n\n if ({}.toString.call(message) === '[object String]') {\n var groups = message.match(ERROR_TYPES_RE);\n if (groups) {\n name = groups[1];\n message = groups[2];\n }\n }\n\n location.func = UNKNOWN_FUNCTION;\n\n stack = {\n name: name,\n message: message,\n url: getLocationHref(),\n stack: [location]\n };\n notifyHandlers(stack, true);\n }\n\n if (_oldOnerrorHandler) {\n return _oldOnerrorHandler.apply(this, arguments);\n }\n\n return false;\n }\n\n function installGlobalHandler() {\n if (_onErrorHandlerInstalled) {\n return;\n }\n _oldOnerrorHandler = _window.onerror;\n _window.onerror = traceKitWindowOnError;\n _onErrorHandlerInstalled = true;\n }\n\n function uninstallGlobalHandler() {\n if (!_onErrorHandlerInstalled) {\n return;\n }\n _window.onerror = _oldOnerrorHandler;\n _onErrorHandlerInstalled = false;\n _oldOnerrorHandler = undefined;\n }\n\n function processLastException() {\n var _lastExceptionStack = lastExceptionStack,\n _lastArgs = lastArgs;\n lastArgs = null;\n lastExceptionStack = null;\n lastException = null;\n notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));\n }\n\n /**\n * Reports an unhandled Error to TraceKit.\n * @param {Error} ex\n * @param {?boolean} rethrow If false, do not re-throw the exception.\n * Only used for window.onerror to not cause an infinite loop of\n * rethrowing.\n */\n function report(ex, rethrow) {\n var args = _slice.call(arguments, 1);\n if (lastExceptionStack) {\n if (lastException === ex) {\n return; // already caught by an inner catch block, ignore\n } else {\n processLastException();\n }\n }\n\n var stack = TraceKit.computeStackTrace(ex);\n lastExceptionStack = stack;\n lastException = ex;\n lastArgs = args;\n\n // If the stack trace is incomplete, wait for 2 seconds for\n // slow slow IE to see if onerror occurs or not before reporting\n // this exception; otherwise, we will end up with an incomplete\n // stack trace\n setTimeout(function() {\n if (lastException === ex) {\n processLastException();\n }\n }, stack.incomplete ? 2000 : 0);\n\n if (rethrow !== false) {\n throw ex; // re-throw to propagate to the top level (and cause window.onerror)\n }\n }\n\n report.subscribe = subscribe;\n report.unsubscribe = unsubscribe;\n report.uninstall = unsubscribeAll;\n return report;\n})();\n\n/**\n * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript\n *\n * Syntax:\n * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)\n * Returns:\n * s.name - exception name\n * s.message - exception message\n * s.stack[i].url - JavaScript or HTML file URL\n * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)\n * s.stack[i].args - arguments passed to the function, if known\n * s.stack[i].line - line number, if known\n * s.stack[i].column - column number, if known\n *\n * Supports:\n * - Firefox: full stack trace with line numbers and unreliable column\n * number on top frame\n * - Opera 10: full stack trace with line and column numbers\n * - Opera 9-: full stack trace with line numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the topmost stacktrace element\n * only\n * - IE: no line numbers whatsoever\n *\n * Tries to guess names of anonymous functions by looking for assignments\n * in the source code. In IE and Safari, we have to guess source file names\n * by searching for function bodies inside all page scripts. This will not\n * work for scripts that are loaded cross-domain.\n * Here be dragons: some function names may be guessed incorrectly, and\n * duplicate functions may be mismatched.\n *\n * TraceKit.computeStackTrace should only be used for tracing purposes.\n * Logging of unhandled exceptions should be done with TraceKit.report,\n * which builds on top of TraceKit.computeStackTrace and provides better\n * IE support by utilizing the window.onerror event to retrieve information\n * about the top of the stack.\n *\n * Note: In IE and Safari, no stack trace is recorded on the Error object,\n * so computeStackTrace instead walks its *own* chain of callers.\n * This means that:\n * * in Safari, some methods may be missing from the stack trace;\n * * in IE, the topmost function in the stack trace will always be the\n * caller of computeStackTrace.\n *\n * This is okay for tracing (because you are likely to be calling\n * computeStackTrace from the function you want to be the topmost element\n * of the stack trace anyway), but not okay for logging unhandled\n * exceptions (because your catch block will likely be far away from the\n * inner function that actually caused the exception).\n *\n */\nTraceKit.computeStackTrace = (function computeStackTraceWrapper() {\n // Contents of Exception in various browsers.\n //\n // SAFARI:\n // ex.message = Can't find variable: qq\n // ex.line = 59\n // ex.sourceId = 580238192\n // ex.sourceURL = http://...\n // ex.expressionBeginOffset = 96\n // ex.expressionCaretOffset = 98\n // ex.expressionEndOffset = 98\n // ex.name = ReferenceError\n //\n // FIREFOX:\n // ex.message = qq is not defined\n // ex.fileName = http://...\n // ex.lineNumber = 59\n // ex.columnNumber = 69\n // ex.stack = ...stack trace... (see the example below)\n // ex.name = ReferenceError\n //\n // CHROME:\n // ex.message = qq is not defined\n // ex.name = ReferenceError\n // ex.type = not_defined\n // ex.arguments = ['aa']\n // ex.stack = ...stack trace...\n //\n // INTERNET EXPLORER:\n // ex.message = ...\n // ex.name = ReferenceError\n //\n // OPERA:\n // ex.message = ...message... (see the example below)\n // ex.name = ReferenceError\n // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)\n // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'\n\n /**\n * Computes stack trace information from the stack property.\n * Chrome and Gecko use this property.\n * @param {Error} ex\n * @return {?Object.<string, *>} Stack trace information.\n */\n function computeStackTraceFromStackProp(ex) {\n if (typeof ex.stack === 'undefined' || !ex.stack) return;\n\n var chrome = /^\\s*at (?:(.*?) ?\\()?((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|[a-z]:|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n var winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n // NOTE: blob urls are now supposed to always have an origin, therefore it's format\n // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\\/` as well\n var gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\\/.*?|\\[native code\\]|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\n // Used to additionally parse URL/line/column from eval frames\n var geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n var chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n var lines = ex.stack.split('\\n');\n var stack = [];\n var submatch;\n var parts;\n var element;\n var reference = /^(.*) is undefined$/.exec(ex.message);\n\n for (var i = 0, j = lines.length; i < j; ++i) {\n if ((parts = chrome.exec(lines[i]))) {\n var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n if (isEval && (submatch = chromeEval.exec(parts[2]))) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = submatch[1]; // url\n parts[3] = submatch[2]; // line\n parts[4] = submatch[3]; // column\n }\n element = {\n url: !isNative ? parts[2] : null,\n func: parts[1] || UNKNOWN_FUNCTION,\n args: isNative ? [parts[2]] : [],\n line: parts[3] ? +parts[3] : null,\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = winjs.exec(lines[i]))) {\n element = {\n url: parts[2],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: [],\n line: +parts[3],\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = gecko.exec(lines[i]))) {\n var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval && (submatch = geckoEval.exec(parts[3]))) {\n // throw out eval line/column and use top-most line number\n parts[3] = submatch[1];\n parts[4] = submatch[2];\n parts[5] = null; // no column when eval\n } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {\n // FireFox uses this awesome columnNumber property for its top frame\n // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n // so adding 1\n // NOTE: this hack doesn't work if top-most frame is eval\n stack[0].column = ex.columnNumber + 1;\n }\n element = {\n url: parts[3],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: parts[2] ? parts[2].split(',') : [],\n line: parts[4] ? +parts[4] : null,\n column: parts[5] ? +parts[5] : null\n };\n } else {\n continue;\n }\n\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n\n if (element.url && element.url.substr(0, 5) === 'blob:') {\n // Special case for handling JavaScript loaded into a blob.\n // We use a synchronous AJAX request here as a blob is already in\n // memory - it's not making a network request. This will generate a warning\n // in the browser console, but there has already been an error so that's not\n // that much of an issue.\n var xhr = new XMLHttpRequest();\n xhr.open('GET', element.url, false);\n xhr.send(null);\n\n // If we failed to download the source, skip this patch\n if (xhr.status === 200) {\n var source = xhr.responseText || '';\n\n // We trim the source down to the last 300 characters as sourceMappingURL is always at the end of the file.\n // Why 300? To be in line with: https://github.com/getsentry/sentry/blob/4af29e8f2350e20c28a6933354e4f42437b4ba42/src/sentry/lang/javascript/processor.py#L164-L175\n source = source.slice(-300);\n\n // Now we dig out the source map URL\n var sourceMaps = source.match(/\\/\\/# sourceMappingURL=(.*)$/);\n\n // If we don't find a source map comment or we find more than one, continue on to the next element.\n if (sourceMaps) {\n var sourceMapAddress = sourceMaps[1];\n\n // Now we check to see if it's a relative URL.\n // If it is, convert it to an absolute one.\n if (sourceMapAddress.charAt(0) === '~') {\n sourceMapAddress = getLocationOrigin() + sourceMapAddress.slice(1);\n }\n\n // Now we strip the '.map' off of the end of the URL and update the\n // element so that Sentry can match the map to the blob.\n element.url = sourceMapAddress.slice(0, -4);\n }\n }\n }\n\n stack.push(element);\n }\n\n if (!stack.length) {\n return null;\n }\n\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n }\n\n /**\n * Adds information about the first frame to incomplete stack traces.\n * Safari and IE require this to get complete data on the first frame.\n * @param {Object.<string, *>} stackInfo Stack trace information from\n * one of the compute* methods.\n * @param {string} url The URL of the script that caused an error.\n * @param {(number|string)} lineNo The line number of the script that\n * caused an error.\n * @param {string=} message The error generated by the browser, which\n * hopefully contains the name of the object that caused the error.\n * @return {boolean} Whether or not the stack information was\n * augmented.\n */\n function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {\n var initial = {\n url: url,\n line: lineNo\n };\n\n if (initial.url && initial.line) {\n stackInfo.incomplete = false;\n\n if (!initial.func) {\n initial.func = UNKNOWN_FUNCTION;\n }\n\n if (stackInfo.stack.length > 0) {\n if (stackInfo.stack[0].url === initial.url) {\n if (stackInfo.stack[0].line === initial.line) {\n return false; // already in stack trace\n } else if (\n !stackInfo.stack[0].line &&\n stackInfo.stack[0].func === initial.func\n ) {\n stackInfo.stack[0].line = initial.line;\n return false;\n }\n }\n }\n\n stackInfo.stack.unshift(initial);\n stackInfo.partial = true;\n return true;\n } else {\n stackInfo.incomplete = true;\n }\n\n return false;\n }\n\n /**\n * Computes stack trace information by walking the arguments.caller\n * chain at the time the exception occurred. This will cause earlier\n * frames to be missed but is the only way to get any stack trace in\n * Safari and IE. The top frame is restored by\n * {@link augmentStackTraceWithInitialElement}.\n * @param {Error} ex\n * @return {?Object.<string, *>} Stack trace information.\n */\n function computeStackTraceByWalkingCallerChain(ex, depth) {\n var functionName = /function\\s+([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?\\s*\\(/i,\n stack = [],\n funcs = {},\n recursion = false,\n parts,\n item,\n source;\n\n for (\n var curr = computeStackTraceByWalkingCallerChain.caller;\n curr && !recursion;\n curr = curr.caller\n ) {\n if (curr === computeStackTrace || curr === TraceKit.report) {\n // console.log('skipping internal function');\n continue;\n }\n\n item = {\n url: null,\n func: UNKNOWN_FUNCTION,\n line: null,\n column: null\n };\n\n if (curr.name) {\n item.func = curr.name;\n } else if ((parts = functionName.exec(curr.toString()))) {\n item.func = parts[1];\n }\n\n if (typeof item.func === 'undefined') {\n try {\n item.func = parts.input.substring(0, parts.input.indexOf('{'));\n } catch (e) {}\n }\n\n if (funcs['' + curr]) {\n recursion = true;\n } else {\n funcs['' + curr] = true;\n }\n\n stack.push(item);\n }\n\n if (depth) {\n // console.log('depth is ' + depth);\n // console.log('stack is ' + stack.length);\n stack.splice(0, depth);\n }\n\n var result = {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n augmentStackTraceWithInitialElement(\n result,\n ex.sourceURL || ex.fileName,\n ex.line || ex.lineNumber,\n ex.message || ex.description\n );\n return result;\n }\n\n /**\n * Computes a stack trace for an exception.\n * @param {Error} ex\n * @param {(string|number)=} depth\n */\n function computeStackTrace(ex, depth) {\n var stack = null;\n depth = depth == null ? 0 : +depth;\n\n try {\n stack = computeStackTraceFromStackProp(ex);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n\n try {\n stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref()\n };\n }\n\n computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;\n computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;\n\n return computeStackTrace;\n})();\n\nmodule.exports = TraceKit;\n","/*\n * JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\n\n/*\n* Add integers, wrapping at 2^32. This uses 16-bit operations internally\n* to work around bugs in some JS interpreters.\n*/\nfunction safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return (msw << 16) | (lsw & 0xffff);\n}\n\n/*\n* Bitwise rotate a 32-bit number to the left.\n*/\nfunction bitRotateLeft(num, cnt) {\n return (num << cnt) | (num >>> (32 - cnt));\n}\n\n/*\n* These functions implement the four basic operations the algorithm uses.\n*/\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn((b & c) | (~b & d), a, b, x, s, t);\n}\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn((b & d) | (c & ~d), a, b, x, s, t);\n}\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\n/*\n* Calculate the MD5 of an array of little-endian words, and a bit length.\n*/\nfunction binlMD5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << (len % 32);\n x[(((len + 64) >>> 9) << 4) + 14] = len;\n\n var i;\n var olda;\n var oldb;\n var oldc;\n var oldd;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (i = 0; i < x.length; i += 16) {\n olda = a;\n oldb = b;\n oldc = c;\n oldd = d;\n\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n return [a, b, c, d];\n}\n\n/*\n* Convert an array of little-endian words to a string\n*/\nfunction binl2rstr(input) {\n var i;\n var output = '';\n var length32 = input.length * 32;\n for (i = 0; i < length32; i += 8) {\n output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);\n }\n return output;\n}\n\n/*\n* Convert a raw string to an array of little-endian words\n* Characters >255 have their high-byte silently ignored.\n*/\nfunction rstr2binl(input) {\n var i;\n var output = [];\n output[(input.length >> 2) - 1] = undefined;\n for (i = 0; i < output.length; i += 1) {\n output[i] = 0;\n }\n var length8 = input.length * 8;\n for (i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);\n }\n return output;\n}\n\n/*\n* Calculate the MD5 of a raw string\n*/\nfunction rstrMD5(s) {\n return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));\n}\n\n/*\n* Calculate the HMAC-MD5, of a key and some data (raw strings)\n*/\nfunction rstrHMACMD5(key, data) {\n var i;\n var bkey = rstr2binl(key);\n var ipad = [];\n var opad = [];\n var hash;\n ipad[15] = opad[15] = undefined;\n if (bkey.length > 16) {\n bkey = binlMD5(bkey, key.length * 8);\n }\n for (i = 0; i < 16; i += 1) {\n ipad[i] = bkey[i] ^ 0x36363636;\n opad[i] = bkey[i] ^ 0x5c5c5c5c;\n }\n hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);\n return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));\n}\n\n/*\n* Convert a raw string to a hex string\n*/\nfunction rstr2hex(input) {\n var hexTab = '0123456789abcdef';\n var output = '';\n var x;\n var i;\n for (i = 0; i < input.length; i += 1) {\n x = input.charCodeAt(i);\n output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);\n }\n return output;\n}\n\n/*\n* Encode a string as utf-8\n*/\nfunction str2rstrUTF8(input) {\n return unescape(encodeURIComponent(input));\n}\n\n/*\n* Take string arguments and return either raw or hex encoded strings\n*/\nfunction rawMD5(s) {\n return rstrMD5(str2rstrUTF8(s));\n}\nfunction hexMD5(s) {\n return rstr2hex(rawMD5(s));\n}\nfunction rawHMACMD5(k, d) {\n return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));\n}\nfunction hexHMACMD5(k, d) {\n return rstr2hex(rawHMACMD5(k, d));\n}\n\nfunction md5(string, key, raw) {\n if (!key) {\n if (!raw) {\n return hexMD5(string);\n }\n return rawMD5(string);\n }\n if (!raw) {\n return hexHMACMD5(key, string);\n }\n return rawHMACMD5(key, string);\n}\n\nmodule.exports = md5;\n","function RavenConfigError(message) {\n this.name = 'RavenConfigError';\n this.message = message;\n}\nRavenConfigError.prototype = new Error();\nRavenConfigError.prototype.constructor = RavenConfigError;\n\nmodule.exports = RavenConfigError;\n","var utils = require('./utils');\n\nvar wrapMethod = function(console, level, callback) {\n var originalConsoleLevel = console[level];\n var originalConsole = console;\n\n if (!(level in console)) {\n return;\n }\n\n var sentryLevel = level === 'warn' ? 'warning' : level;\n\n console[level] = function() {\n var args = [].slice.call(arguments);\n\n var msg = utils.safeJoin(args, ' ');\n var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};\n\n if (level === 'assert') {\n if (args[0] === false) {\n // Default browsers message\n msg =\n 'Assertion failed: ' + (utils.safeJoin(args.slice(1), ' ') || 'console.assert');\n data.extra.arguments = args.slice(1);\n callback && callback(msg, data);\n }\n } else {\n callback && callback(msg, data);\n }\n\n // this fails for some browsers. :(\n if (originalConsoleLevel) {\n // IE9 doesn't allow calling apply on console functions directly\n // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193\n Function.prototype.apply.call(originalConsoleLevel, originalConsole, args);\n }\n };\n};\n\nmodule.exports = {\n wrapMethod: wrapMethod\n};\n","/*global XDomainRequest:false */\n\nvar TraceKit = require('../vendor/TraceKit/tracekit');\nvar stringify = require('../vendor/json-stringify-safe/stringify');\nvar md5 = require('../vendor/md5/md5');\nvar RavenConfigError = require('./configError');\n\nvar utils = require('./utils');\nvar isErrorEvent = utils.isErrorEvent;\nvar isDOMError = utils.isDOMError;\nvar isDOMException = utils.isDOMException;\nvar isError = utils.isError;\nvar isObject = utils.isObject;\nvar isPlainObject = utils.isPlainObject;\nvar isUndefined = utils.isUndefined;\nvar isFunction = utils.isFunction;\nvar isString = utils.isString;\nvar isArray = utils.isArray;\nvar isEmptyObject = utils.isEmptyObject;\nvar each = utils.each;\nvar objectMerge = utils.objectMerge;\nvar truncate = utils.truncate;\nvar objectFrozen = utils.objectFrozen;\nvar hasKey = utils.hasKey;\nvar joinRegExp = utils.joinRegExp;\nvar urlencode = utils.urlencode;\nvar uuid4 = utils.uuid4;\nvar htmlTreeAsString = utils.htmlTreeAsString;\nvar isSameException = utils.isSameException;\nvar isSameStacktrace = utils.isSameStacktrace;\nvar parseUrl = utils.parseUrl;\nvar fill = utils.fill;\nvar supportsFetch = utils.supportsFetch;\nvar supportsReferrerPolicy = utils.supportsReferrerPolicy;\nvar serializeKeysForMessage = utils.serializeKeysForMessage;\nvar serializeException = utils.serializeException;\nvar sanitize = utils.sanitize;\n\nvar wrapConsoleMethod = require('./console').wrapMethod;\n\nvar dsnKeys = 'source protocol user pass host port path'.split(' '),\n dsnPattern = /^(?:(\\w+):)?\\/\\/(?:(\\w+)(:\\w+)?@)?([\\w\\.-]+)(?::(\\d+))?(\\/.*)/;\n\nfunction now() {\n return +new Date();\n}\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _document = _window.document;\nvar _navigator = _window.navigator;\n\nfunction keepOriginalCallback(original, callback) {\n return isFunction(callback)\n ? function(data) {\n return callback(data, original);\n }\n : callback;\n}\n\n// First, check for JSON support\n// If there is no JSON, we no-op the core features of Raven\n// since JSON is required to encode the payload\nfunction Raven() {\n this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);\n // Raven can run in contexts where there's no document (react-native)\n this._hasDocument = !isUndefined(_document);\n this._hasNavigator = !isUndefined(_navigator);\n this._lastCapturedException = null;\n this._lastData = null;\n this._lastEventId = null;\n this._globalServer = null;\n this._globalKey = null;\n this._globalProject = null;\n this._globalContext = {};\n this._globalOptions = {\n // SENTRY_RELEASE can be injected by https://github.com/getsentry/sentry-webpack-plugin\n release: _window.SENTRY_RELEASE && _window.SENTRY_RELEASE.id,\n logger: 'javascript',\n ignoreErrors: [],\n ignoreUrls: [],\n whitelistUrls: [],\n includePaths: [],\n headers: null,\n collectWindowErrors: true,\n captureUnhandledRejections: true,\n maxMessageLength: 0,\n // By default, truncates URL values to 250 chars\n maxUrlLength: 250,\n stackTraceLimit: 50,\n autoBreadcrumbs: true,\n instrument: true,\n sampleRate: 1,\n sanitizeKeys: []\n };\n this._fetchDefaults = {\n method: 'POST',\n keepalive: true,\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n // https://caniuse.com/#feat=referrer-policy\n // It doesn't. And it throw exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n referrerPolicy: supportsReferrerPolicy() ? 'origin' : ''\n };\n this._ignoreOnError = 0;\n this._isRavenInstalled = false;\n this._originalErrorStackTraceLimit = Error.stackTraceLimit;\n // capture references to window.console *and* all its methods first\n // before the console plugin has a chance to monkey patch\n this._originalConsole = _window.console || {};\n this._originalConsoleMethods = {};\n this._plugins = [];\n this._startTime = now();\n this._wrappedBuiltIns = [];\n this._breadcrumbs = [];\n this._lastCapturedEvent = null;\n this._keypressTimeout;\n this._location = _window.location;\n this._lastHref = this._location && this._location.href;\n this._resetBackoff();\n\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsole) {\n this._originalConsoleMethods[method] = this._originalConsole[method];\n }\n}\n\n/*\n * The core Raven singleton\n *\n * @this {Raven}\n */\n\nRaven.prototype = {\n // Hardcode version string so that raven source can be loaded directly via\n // webpack (using a build step causes webpack #1617). Grunt verifies that\n // this value matches package.json during build.\n // See: https://github.com/getsentry/raven-js/issues/465\n VERSION: '3.25.2',\n\n debug: false,\n\n TraceKit: TraceKit, // alias to TraceKit\n\n /*\n * Configure Raven with a DSN and extra options\n *\n * @param {string} dsn The public Sentry DSN\n * @param {object} options Set of global options [optional]\n * @return {Raven}\n */\n config: function(dsn, options) {\n var self = this;\n\n if (self._globalServer) {\n this._logDebug('error', 'Error: Raven has already been configured');\n return self;\n }\n if (!dsn) return self;\n\n var globalOptions = self._globalOptions;\n\n // merge in options\n if (options) {\n each(options, function(key, value) {\n // tags and extra are special and need to be put into context\n if (key === 'tags' || key === 'extra' || key === 'user') {\n self._globalContext[key] = value;\n } else {\n globalOptions[key] = value;\n }\n });\n }\n\n self.setDSN(dsn);\n\n // \"Script error.\" is hard coded into browsers for errors that it can't read.\n // this is the result of a script being pulled in from an external domain and CORS.\n globalOptions.ignoreErrors.push(/^Script error\\.?$/);\n globalOptions.ignoreErrors.push(/^Javascript error: Script error\\.? on line 0$/);\n\n // join regexp rules into one big rule\n globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);\n globalOptions.ignoreUrls = globalOptions.ignoreUrls.length\n ? joinRegExp(globalOptions.ignoreUrls)\n : false;\n globalOptions.whitelistUrls = globalOptions.whitelistUrls.length\n ? joinRegExp(globalOptions.whitelistUrls)\n : false;\n globalOptions.includePaths = joinRegExp(globalOptions.includePaths);\n globalOptions.maxBreadcrumbs = Math.max(\n 0,\n Math.min(globalOptions.maxBreadcrumbs || 100, 100)\n ); // default and hard limit is 100\n\n var autoBreadcrumbDefaults = {\n xhr: true,\n console: true,\n dom: true,\n location: true,\n sentry: true\n };\n\n var autoBreadcrumbs = globalOptions.autoBreadcrumbs;\n if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {\n autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);\n } else if (autoBreadcrumbs !== false) {\n autoBreadcrumbs = autoBreadcrumbDefaults;\n }\n globalOptions.autoBreadcrumbs = autoBreadcrumbs;\n\n var instrumentDefaults = {\n tryCatch: true\n };\n\n var instrument = globalOptions.instrument;\n if ({}.toString.call(instrument) === '[object Object]') {\n instrument = objectMerge(instrumentDefaults, instrument);\n } else if (instrument !== false) {\n instrument = instrumentDefaults;\n }\n globalOptions.instrument = instrument;\n\n TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;\n\n // return for chaining\n return self;\n },\n\n /*\n * Installs a global window.onerror error handler\n * to capture and report uncaught exceptions.\n * At this point, install() is required to be called due\n * to the way TraceKit is set up.\n *\n * @return {Raven}\n */\n install: function() {\n var self = this;\n if (self.isSetup() && !self._isRavenInstalled) {\n TraceKit.report.subscribe(function() {\n self._handleOnErrorStackInfo.apply(self, arguments);\n });\n\n if (self._globalOptions.captureUnhandledRejections) {\n self._attachPromiseRejectionHandler();\n }\n\n self._patchFunctionToString();\n\n if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {\n self._instrumentTryCatch();\n }\n\n if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();\n\n // Install all of the plugins\n self._drainPlugins();\n\n self._isRavenInstalled = true;\n }\n\n Error.stackTraceLimit = self._globalOptions.stackTraceLimit;\n return this;\n },\n\n /*\n * Set the DSN (can be called multiple time unlike config)\n *\n * @param {string} dsn The public Sentry DSN\n */\n setDSN: function(dsn) {\n var self = this,\n uri = self._parseDSN(dsn),\n lastSlash = uri.path.lastIndexOf('/'),\n path = uri.path.substr(1, lastSlash);\n\n self._dsn = dsn;\n self._globalKey = uri.user;\n self._globalSecret = uri.pass && uri.pass.substr(1);\n self._globalProject = uri.path.substr(lastSlash + 1);\n\n self._globalServer = self._getGlobalServer(uri);\n\n self._globalEndpoint =\n self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/';\n\n // Reset backoff state since we may be pointing at a\n // new project/server\n this._resetBackoff();\n },\n\n /*\n * Wrap code within a context so Raven can capture errors\n * reliably across domains that is executed immediately.\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The callback to be immediately executed within the context\n * @param {array} args An array of arguments to be called with the callback [optional]\n */\n context: function(options, func, args) {\n if (isFunction(options)) {\n args = func || [];\n func = options;\n options = undefined;\n }\n\n return this.wrap(options, func).apply(this, args);\n },\n\n /*\n * Wrap code within a context and returns back a new function to be executed\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The function to be wrapped in a new context\n * @param {function} func A function to call before the try/catch wrapper [optional, private]\n * @return {function} The newly wrapped functions with a context\n */\n wrap: function(options, func, _before) {\n var self = this;\n // 1 argument has been passed, and it's not a function\n // so just return it\n if (isUndefined(func) && !isFunction(options)) {\n return options;\n }\n\n // options is optional\n if (isFunction(options)) {\n func = options;\n options = undefined;\n }\n\n // At this point, we've passed along 2 arguments, and the second one\n // is not a function either, so we'll just return the second argument.\n if (!isFunction(func)) {\n return func;\n }\n\n // We don't wanna wrap it twice!\n try {\n if (func.__raven__) {\n return func;\n }\n\n // If this has already been wrapped in the past, return that\n if (func.__raven_wrapper__) {\n return func.__raven_wrapper__;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return func;\n }\n\n function wrapped() {\n var args = [],\n i = arguments.length,\n deep = !options || (options && options.deep !== false);\n\n if (_before && isFunction(_before)) {\n _before.apply(this, arguments);\n }\n\n // Recursively wrap all of a function's arguments that are\n // functions themselves.\n while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];\n\n try {\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means Raven caught an error invoking your application code. This is\n // expected behavior and NOT indicative of a bug with Raven.js.\n return func.apply(this, args);\n } catch (e) {\n self._ignoreNextOnError();\n self.captureException(e, options);\n throw e;\n }\n }\n\n // copy over properties of the old function\n for (var property in func) {\n if (hasKey(func, property)) {\n wrapped[property] = func[property];\n }\n }\n wrapped.prototype = func.prototype;\n\n func.__raven_wrapper__ = wrapped;\n // Signal that this function has been wrapped/filled already\n // for both debugging and to prevent it to being wrapped/filled twice\n wrapped.__raven__ = true;\n wrapped.__orig__ = func;\n\n return wrapped;\n },\n\n /**\n * Uninstalls the global error handler.\n *\n * @return {Raven}\n */\n uninstall: function() {\n TraceKit.report.uninstall();\n\n this._detachPromiseRejectionHandler();\n this._unpatchFunctionToString();\n this._restoreBuiltIns();\n this._restoreConsole();\n\n Error.stackTraceLimit = this._originalErrorStackTraceLimit;\n this._isRavenInstalled = false;\n\n return this;\n },\n\n /**\n * Callback used for `unhandledrejection` event\n *\n * @param {PromiseRejectionEvent} event An object containing\n * promise: the Promise that was rejected\n * reason: the value with which the Promise was rejected\n * @return void\n */\n _promiseRejectionHandler: function(event) {\n this._logDebug('debug', 'Raven caught unhandled promise rejection:', event);\n this.captureException(event.reason, {\n extra: {\n unhandledPromiseRejection: true\n }\n });\n },\n\n /**\n * Installs the global promise rejection handler.\n *\n * @return {raven}\n */\n _attachPromiseRejectionHandler: function() {\n this._promiseRejectionHandler = this._promiseRejectionHandler.bind(this);\n _window.addEventListener &&\n _window.addEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Uninstalls the global promise rejection handler.\n *\n * @return {raven}\n */\n _detachPromiseRejectionHandler: function() {\n _window.removeEventListener &&\n _window.removeEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Manually capture an exception and send it over to Sentry\n *\n * @param {error} ex An exception to be logged\n * @param {object} options A specific set of options for this error [optional]\n * @return {Raven}\n */\n captureException: function(ex, options) {\n options = objectMerge({trimHeadFrames: 0}, options ? options : {});\n\n if (isErrorEvent(ex) && ex.error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n ex = ex.error;\n } else if (isDOMError(ex) || isDOMException(ex)) {\n // If it is a DOMError or DOMException (which are legacy APIs, but still supported in some browsers)\n // then we just extract the name and message, as they don't provide anything else\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n var name = ex.name || (isDOMError(ex) ? 'DOMError' : 'DOMException');\n var message = ex.message ? name + ': ' + ex.message : name;\n\n return this.captureMessage(\n message,\n objectMerge(options, {\n // neither DOMError or DOMException provide stack trace and we most likely wont get it this way as well\n // but it's barely any overhead so we may at least try\n stacktrace: true,\n trimHeadFrames: options.trimHeadFrames + 1\n })\n );\n } else if (isError(ex)) {\n // we have a real Error object\n ex = ex;\n } else if (isPlainObject(ex)) {\n // If it is plain Object, serialize it manually and extract options\n // This will allow us to group events based on top-level keys\n // which is much better than creating new group when any key/value change\n options = this._getCaptureExceptionOptionsFromPlainObject(options, ex);\n ex = new Error(options.message);\n } else {\n // If none of previous checks were valid, then it means that\n // it's not a DOMError/DOMException\n // it's not a plain Object\n // it's not a valid ErrorEvent (one with an error property)\n // it's not an Error\n // So bail out and capture it as a simple message:\n return this.captureMessage(\n ex,\n objectMerge(options, {\n stacktrace: true, // if we fall back to captureMessage, default to attempting a new trace\n trimHeadFrames: options.trimHeadFrames + 1\n })\n );\n }\n\n // Store the raw exception object for potential debugging and introspection\n this._lastCapturedException = ex;\n\n // TraceKit.report will re-raise any exception passed to it,\n // which means you have to wrap it in try/catch. Instead, we\n // can wrap it here and only re-raise if TraceKit.report\n // raises an exception different from the one we asked to\n // report on.\n try {\n var stack = TraceKit.computeStackTrace(ex);\n this._handleStackInfo(stack, options);\n } catch (ex1) {\n if (ex !== ex1) {\n throw ex1;\n }\n }\n\n return this;\n },\n\n _getCaptureExceptionOptionsFromPlainObject: function(currentOptions, ex) {\n var exKeys = Object.keys(ex).sort();\n var options = objectMerge(currentOptions, {\n message:\n 'Non-Error exception captured with keys: ' + serializeKeysForMessage(exKeys),\n fingerprint: [md5(exKeys)],\n extra: currentOptions.extra || {}\n });\n options.extra.__serialized__ = serializeException(ex);\n\n return options;\n },\n\n /*\n * Manually send a message to Sentry\n *\n * @param {string} msg A plain message to be captured in Sentry\n * @param {object} options A specific set of options for this message [optional]\n * @return {Raven}\n */\n captureMessage: function(msg, options) {\n // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an\n // early call; we'll error on the side of logging anything called before configuration since it's\n // probably something you should see:\n if (\n !!this._globalOptions.ignoreErrors.test &&\n this._globalOptions.ignoreErrors.test(msg)\n ) {\n return;\n }\n\n options = options || {};\n msg = msg + ''; // Make sure it's actually a string\n\n var data = objectMerge(\n {\n message: msg\n },\n options\n );\n\n var ex;\n // Generate a \"synthetic\" stack trace from this point.\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative\n // of a bug with Raven.js. Sentry generates synthetic traces either by configuration,\n // or if it catches a thrown object without a \"stack\" property.\n try {\n throw new Error(msg);\n } catch (ex1) {\n ex = ex1;\n }\n\n // null exception name so `Error` isn't prefixed to msg\n ex.name = null;\n var stack = TraceKit.computeStackTrace(ex);\n\n // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]\n var initialCall = isArray(stack.stack) && stack.stack[1];\n\n // if stack[1] is `Raven.captureException`, it means that someone passed a string to it and we redirected that call\n // to be handled by `captureMessage`, thus `initialCall` is the 3rd one, not 2nd\n // initialCall => captureException(string) => captureMessage(string)\n if (initialCall && initialCall.func === 'Raven.captureException') {\n initialCall = stack.stack[2];\n }\n\n var fileurl = (initialCall && initialCall.url) || '';\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n if (this._globalOptions.stacktrace || (options && options.stacktrace)) {\n // fingerprint on msg, not stack trace (legacy behavior, could be revisited)\n data.fingerprint = data.fingerprint == null ? msg : data.fingerprint;\n\n options = objectMerge(\n {\n trimHeadFrames: 0\n },\n options\n );\n // Since we know this is a synthetic trace, the top frame (this function call)\n // MUST be from Raven.js, so mark it for trimming\n // We add to the trim counter so that callers can choose to trim extra frames, such\n // as utility functions.\n options.trimHeadFrames += 1;\n\n var frames = this._prepareFrames(stack, options);\n data.stacktrace = {\n // Sentry expects frames oldest to newest\n frames: frames.reverse()\n };\n }\n\n // Make sure that fingerprint is always wrapped in an array\n if (data.fingerprint) {\n data.fingerprint = isArray(data.fingerprint)\n ? data.fingerprint\n : [data.fingerprint];\n }\n\n // Fire away!\n this._send(data);\n\n return this;\n },\n\n captureBreadcrumb: function(obj) {\n var crumb = objectMerge(\n {\n timestamp: now() / 1000\n },\n obj\n );\n\n if (isFunction(this._globalOptions.breadcrumbCallback)) {\n var result = this._globalOptions.breadcrumbCallback(crumb);\n\n if (isObject(result) && !isEmptyObject(result)) {\n crumb = result;\n } else if (result === false) {\n return this;\n }\n }\n\n this._breadcrumbs.push(crumb);\n if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {\n this._breadcrumbs.shift();\n }\n return this;\n },\n\n addPlugin: function(plugin /*arg1, arg2, ... argN*/) {\n var pluginArgs = [].slice.call(arguments, 1);\n\n this._plugins.push([plugin, pluginArgs]);\n if (this._isRavenInstalled) {\n this._drainPlugins();\n }\n\n return this;\n },\n\n /*\n * Set/clear a user to be sent along with the payload.\n *\n * @param {object} user An object representing user data [optional]\n * @return {Raven}\n */\n setUserContext: function(user) {\n // Intentionally do not merge here since that's an unexpected behavior.\n this._globalContext.user = user;\n\n return this;\n },\n\n /*\n * Merge extra attributes to be sent along with the payload.\n *\n * @param {object} extra An object representing extra data [optional]\n * @return {Raven}\n */\n setExtraContext: function(extra) {\n this._mergeContext('extra', extra);\n\n return this;\n },\n\n /*\n * Merge tags to be sent along with the payload.\n *\n * @param {object} tags An object representing tags [optional]\n * @return {Raven}\n */\n setTagsContext: function(tags) {\n this._mergeContext('tags', tags);\n\n return this;\n },\n\n /*\n * Clear all of the context.\n *\n * @return {Raven}\n */\n clearContext: function() {\n this._globalContext = {};\n\n return this;\n },\n\n /*\n * Get a copy of the current context. This cannot be mutated.\n *\n * @return {object} copy of context\n */\n getContext: function() {\n // lol javascript\n return JSON.parse(stringify(this._globalContext));\n },\n\n /*\n * Set environment of application\n *\n * @param {string} environment Typically something like 'production'.\n * @return {Raven}\n */\n setEnvironment: function(environment) {\n this._globalOptions.environment = environment;\n\n return this;\n },\n\n /*\n * Set release version of application\n *\n * @param {string} release Typically something like a git SHA to identify version\n * @return {Raven}\n */\n setRelease: function(release) {\n this._globalOptions.release = release;\n\n return this;\n },\n\n /*\n * Set the dataCallback option\n *\n * @param {function} callback The callback to run which allows the\n * data blob to be mutated before sending\n * @return {Raven}\n */\n setDataCallback: function(callback) {\n var original = this._globalOptions.dataCallback;\n this._globalOptions.dataCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the breadcrumbCallback option\n *\n * @param {function} callback The callback to run which allows filtering\n * or mutating breadcrumbs\n * @return {Raven}\n */\n setBreadcrumbCallback: function(callback) {\n var original = this._globalOptions.breadcrumbCallback;\n this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the shouldSendCallback option\n *\n * @param {function} callback The callback to run which allows\n * introspecting the blob before sending\n * @return {Raven}\n */\n setShouldSendCallback: function(callback) {\n var original = this._globalOptions.shouldSendCallback;\n this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /**\n * Override the default HTTP transport mechanism that transmits data\n * to the Sentry server.\n *\n * @param {function} transport Function invoked instead of the default\n * `makeRequest` handler.\n *\n * @return {Raven}\n */\n setTransport: function(transport) {\n this._globalOptions.transport = transport;\n\n return this;\n },\n\n /*\n * Get the latest raw exception that was captured by Raven.\n *\n * @return {error}\n */\n lastException: function() {\n return this._lastCapturedException;\n },\n\n /*\n * Get the last event id\n *\n * @return {string}\n */\n lastEventId: function() {\n return this._lastEventId;\n },\n\n /*\n * Determine if Raven is setup and ready to go.\n *\n * @return {boolean}\n */\n isSetup: function() {\n if (!this._hasJSON) return false; // needs JSON support\n if (!this._globalServer) {\n if (!this.ravenNotConfiguredError) {\n this.ravenNotConfiguredError = true;\n this._logDebug('error', 'Error: Raven has not been configured.');\n }\n return false;\n }\n return true;\n },\n\n afterLoad: function() {\n // TODO: remove window dependence?\n\n // Attempt to initialize Raven on load\n var RavenConfig = _window.RavenConfig;\n if (RavenConfig) {\n this.config(RavenConfig.dsn, RavenConfig.config).install();\n }\n },\n\n showReportDialog: function(options) {\n if (\n !_document // doesn't work without a document (React native)\n )\n return;\n\n options = options || {};\n\n var lastEventId = options.eventId || this.lastEventId();\n if (!lastEventId) {\n throw new RavenConfigError('Missing eventId');\n }\n\n var dsn = options.dsn || this._dsn;\n if (!dsn) {\n throw new RavenConfigError('Missing DSN');\n }\n\n var encode = encodeURIComponent;\n var qs = '';\n qs += '?eventId=' + encode(lastEventId);\n qs += '&dsn=' + encode(dsn);\n\n var user = options.user || this._globalContext.user;\n if (user) {\n if (user.name) qs += '&name=' + encode(user.name);\n if (user.email) qs += '&email=' + encode(user.email);\n }\n\n var globalServer = this._getGlobalServer(this._parseDSN(dsn));\n\n var script = _document.createElement('script');\n script.async = true;\n script.src = globalServer + '/api/embed/error-page/' + qs;\n (_document.head || _document.body).appendChild(script);\n },\n\n /**** Private functions ****/\n _ignoreNextOnError: function() {\n var self = this;\n this._ignoreOnError += 1;\n setTimeout(function() {\n // onerror should trigger before setTimeout\n self._ignoreOnError -= 1;\n });\n },\n\n _triggerEvent: function(eventType, options) {\n // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it\n var evt, key;\n\n if (!this._hasDocument) return;\n\n options = options || {};\n\n eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);\n\n if (_document.createEvent) {\n evt = _document.createEvent('HTMLEvents');\n evt.initEvent(eventType, true, true);\n } else {\n evt = _document.createEventObject();\n evt.eventType = eventType;\n }\n\n for (key in options)\n if (hasKey(options, key)) {\n evt[key] = options[key];\n }\n\n if (_document.createEvent) {\n // IE9 if standards\n _document.dispatchEvent(evt);\n } else {\n // IE8 regardless of Quirks or Standards\n // IE9 if quirks\n try {\n _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);\n } catch (e) {\n // Do nothing\n }\n }\n },\n\n /**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param evtName the event name (e.g. \"click\")\n * @returns {Function}\n * @private\n */\n _breadcrumbEventHandler: function(evtName) {\n var self = this;\n return function(evt) {\n // reset keypress timeout; e.g. triggering a 'click' after\n // a 'keypress' will reset the keypress debounce so that a new\n // set of keypresses can be recorded\n self._keypressTimeout = null;\n\n // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors). Ignore if we've\n // already captured the event.\n if (self._lastCapturedEvent === evt) return;\n\n self._lastCapturedEvent = evt;\n\n // try/catch both:\n // - accessing evt.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // can throw an exception in some circumstances.\n var target;\n try {\n target = htmlTreeAsString(evt.target);\n } catch (e) {\n target = '<unknown>';\n }\n\n self.captureBreadcrumb({\n category: 'ui.' + evtName, // e.g. ui.click, ui.input\n message: target\n });\n };\n },\n\n /**\n * Wraps addEventListener to capture keypress UI events\n * @returns {Function}\n * @private\n */\n _keypressEventHandler: function() {\n var self = this,\n debounceDuration = 1000; // milliseconds\n\n // TODO: if somehow user switches keypress target before\n // debounce timeout is triggered, we will only capture\n // a single breadcrumb from the FIRST target (acceptable?)\n return function(evt) {\n var target;\n try {\n target = evt.target;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n var tagName = target && target.tagName;\n\n // only consider keypress events on actual input elements\n // this will disregard keypresses targeting body (e.g. tabbing\n // through elements, hotkeys, etc)\n if (\n !tagName ||\n (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)\n )\n return;\n\n // record first keypress in a series, but ignore subsequent\n // keypresses until debounce clears\n var timeout = self._keypressTimeout;\n if (!timeout) {\n self._breadcrumbEventHandler('input')(evt);\n }\n clearTimeout(timeout);\n self._keypressTimeout = setTimeout(function() {\n self._keypressTimeout = null;\n }, debounceDuration);\n };\n },\n\n /**\n * Captures a breadcrumb of type \"navigation\", normalizing input URLs\n * @param to the originating URL\n * @param from the target URL\n * @private\n */\n _captureUrlChange: function(from, to) {\n var parsedLoc = parseUrl(this._location.href);\n var parsedTo = parseUrl(to);\n var parsedFrom = parseUrl(from);\n\n // because onpopstate only tells you the \"new\" (to) value of location.href, and\n // not the previous (from) value, we need to track the value of the current URL\n // state ourselves\n this._lastHref = to;\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)\n to = parsedTo.relative;\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)\n from = parsedFrom.relative;\n\n this.captureBreadcrumb({\n category: 'navigation',\n data: {\n to: to,\n from: from\n }\n });\n },\n\n _patchFunctionToString: function() {\n var self = this;\n self._originalFunctionToString = Function.prototype.toString;\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = function() {\n if (typeof this === 'function' && this.__raven__) {\n return self._originalFunctionToString.apply(this.__orig__, arguments);\n }\n return self._originalFunctionToString.apply(this, arguments);\n };\n },\n\n _unpatchFunctionToString: function() {\n if (this._originalFunctionToString) {\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = this._originalFunctionToString;\n }\n },\n\n /**\n * Wrap timer functions and event targets to catch errors and provide\n * better metadata.\n */\n _instrumentTryCatch: function() {\n var self = this;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapTimeFn(orig) {\n return function(fn, t) {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n var originalCallback = args[0];\n if (isFunction(originalCallback)) {\n args[0] = self.wrap(originalCallback);\n }\n\n // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it\n // also supports only two arguments and doesn't care what this is, so we\n // can just call the original function directly.\n if (orig.apply) {\n return orig.apply(this, args);\n } else {\n return orig(args[0], args[1]);\n }\n };\n }\n\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n function wrapEventTarget(global) {\n var proto = _window[global] && _window[global].prototype;\n if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {\n fill(\n proto,\n 'addEventListener',\n function(orig) {\n return function(evtName, fn, capture, secure) {\n // preserve arity\n try {\n if (fn && fn.handleEvent) {\n fn.handleEvent = self.wrap(fn.handleEvent);\n }\n } catch (err) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`\n // so that we don't have more than one wrapper function\n var before, clickHandler, keypressHandler;\n\n if (\n autoBreadcrumbs &&\n autoBreadcrumbs.dom &&\n (global === 'EventTarget' || global === 'Node')\n ) {\n // NOTE: generating multiple handlers per addEventListener invocation, should\n // revisit and verify we can just use one (almost certainly)\n clickHandler = self._breadcrumbEventHandler('click');\n keypressHandler = self._keypressEventHandler();\n before = function(evt) {\n // need to intercept every DOM event in `before` argument, in case that\n // same wrapped method is re-used for different events (e.g. mousemove THEN click)\n // see #724\n if (!evt) return;\n\n var eventType;\n try {\n eventType = evt.type;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n if (eventType === 'click') return clickHandler(evt);\n else if (eventType === 'keypress') return keypressHandler(evt);\n };\n }\n return orig.call(\n this,\n evtName,\n self.wrap(fn, undefined, before),\n capture,\n secure\n );\n };\n },\n wrappedBuiltIns\n );\n fill(\n proto,\n 'removeEventListener',\n function(orig) {\n return function(evt, fn, capture, secure) {\n try {\n fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);\n } catch (e) {\n // ignore, accessing __raven_wrapper__ will throw in some Selenium environments\n }\n return orig.call(this, evt, fn, capture, secure);\n };\n },\n wrappedBuiltIns\n );\n }\n }\n\n fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);\n fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);\n if (_window.requestAnimationFrame) {\n fill(\n _window,\n 'requestAnimationFrame',\n function(orig) {\n return function(cb) {\n return orig(self.wrap(cb));\n };\n },\n wrappedBuiltIns\n );\n }\n\n // event targets borrowed from bugsnag-js:\n // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666\n var eventTargets = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload'\n ];\n for (var i = 0; i < eventTargets.length; i++) {\n wrapEventTarget(eventTargets[i]);\n }\n },\n\n /**\n * Instrument browser built-ins w/ breadcrumb capturing\n * - XMLHttpRequests\n * - DOM interactions (click/typing)\n * - window.location changes\n * - console\n *\n * Can be disabled or individually configured via the `autoBreadcrumbs` config option\n */\n _instrumentBreadcrumbs: function() {\n var self = this;\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && isFunction(xhr[prop])) {\n fill(xhr, prop, function(orig) {\n return self.wrap(orig);\n }); // intentionally don't track filled methods on XHR instances\n }\n }\n\n if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {\n var xhrproto = _window.XMLHttpRequest && _window.XMLHttpRequest.prototype;\n fill(\n xhrproto,\n 'open',\n function(origOpen) {\n return function(method, url) {\n // preserve arity\n\n // if Sentry key appears in URL, don't capture\n if (isString(url) && url.indexOf(self._globalKey) === -1) {\n this.__raven_xhr = {\n method: method,\n url: url,\n status_code: null\n };\n }\n\n return origOpen.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n\n fill(\n xhrproto,\n 'send',\n function(origSend) {\n return function() {\n // preserve arity\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__raven_xhr && xhr.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhr.__raven_xhr.status_code = xhr.status;\n } catch (e) {\n /* do nothing */\n }\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'xhr',\n data: xhr.__raven_xhr\n });\n }\n }\n\n var props = ['onload', 'onerror', 'onprogress'];\n for (var j = 0; j < props.length; j++) {\n wrapProp(props[j], xhr);\n }\n\n if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {\n fill(\n xhr,\n 'onreadystatechange',\n function(orig) {\n return self.wrap(orig, undefined, onreadystatechangeHandler);\n } /* intentionally don't track this instrumentation */\n );\n } else {\n // if onreadystatechange wasn't actually set by the page on this xhr, we\n // are free to set our own and capture the breadcrumb\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n\n return origSend.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n }\n\n if (autoBreadcrumbs.xhr && supportsFetch()) {\n fill(\n _window,\n 'fetch',\n function(origFetch) {\n return function() {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n\n var fetchInput = args[0];\n var method = 'GET';\n var url;\n\n if (typeof fetchInput === 'string') {\n url = fetchInput;\n } else if ('Request' in _window && fetchInput instanceof _window.Request) {\n url = fetchInput.url;\n if (fetchInput.method) {\n method = fetchInput.method;\n }\n } else {\n url = '' + fetchInput;\n }\n\n // if Sentry key appears in URL, don't capture, as it's our own request\n if (url.indexOf(self._globalKey) !== -1) {\n return origFetch.apply(this, args);\n }\n\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n\n var fetchData = {\n method: method,\n url: url,\n status_code: null\n };\n\n return origFetch\n .apply(this, args)\n .then(function(response) {\n fetchData.status_code = response.status;\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData\n });\n\n return response;\n })\n ['catch'](function(err) {\n // if there is an error performing the request\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData,\n level: 'error'\n });\n\n throw err;\n });\n };\n },\n wrappedBuiltIns\n );\n }\n\n // Capture breadcrumbs from any click that is unhandled / bubbled up all the way\n // to the document. Do this before we instrument addEventListener.\n if (autoBreadcrumbs.dom && this._hasDocument) {\n if (_document.addEventListener) {\n _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);\n _document.addEventListener('keypress', self._keypressEventHandler(), false);\n } else if (_document.attachEvent) {\n // IE8 Compatibility\n _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));\n _document.attachEvent('onkeypress', self._keypressEventHandler());\n }\n }\n\n // record navigation (URL) changes\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n var chrome = _window.chrome;\n var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n var hasPushAndReplaceState =\n !isChromePackagedApp &&\n _window.history &&\n _window.history.pushState &&\n _window.history.replaceState;\n if (autoBreadcrumbs.location && hasPushAndReplaceState) {\n // TODO: remove onpopstate handler on uninstall()\n var oldOnPopState = _window.onpopstate;\n _window.onpopstate = function() {\n var currentHref = self._location.href;\n self._captureUrlChange(self._lastHref, currentHref);\n\n if (oldOnPopState) {\n return oldOnPopState.apply(this, arguments);\n }\n };\n\n var historyReplacementFunction = function(origHistFunction) {\n // note history.pushState.length is 0; intentionally not declaring\n // params to preserve 0 arity\n return function(/* state, title, url */) {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n\n // url argument is optional\n if (url) {\n // coerce to string (this is what pushState does)\n self._captureUrlChange(self._lastHref, url + '');\n }\n\n return origHistFunction.apply(this, arguments);\n };\n };\n\n fill(_window.history, 'pushState', historyReplacementFunction, wrappedBuiltIns);\n fill(_window.history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);\n }\n\n if (autoBreadcrumbs.console && 'console' in _window && console.log) {\n // console\n var consoleMethodCallback = function(msg, data) {\n self.captureBreadcrumb({\n message: msg,\n level: data.level,\n category: 'console'\n });\n };\n\n each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {\n wrapConsoleMethod(console, level, consoleMethodCallback);\n });\n }\n },\n\n _restoreBuiltIns: function() {\n // restore any wrapped builtins\n var builtin;\n while (this._wrappedBuiltIns.length) {\n builtin = this._wrappedBuiltIns.shift();\n\n var obj = builtin[0],\n name = builtin[1],\n orig = builtin[2];\n\n obj[name] = orig;\n }\n },\n\n _restoreConsole: function() {\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsoleMethods) {\n this._originalConsole[method] = this._originalConsoleMethods[method];\n }\n },\n\n _drainPlugins: function() {\n var self = this;\n\n // FIX ME TODO\n each(this._plugins, function(_, plugin) {\n var installer = plugin[0];\n var args = plugin[1];\n installer.apply(self, [self].concat(args));\n });\n },\n\n _parseDSN: function(str) {\n var m = dsnPattern.exec(str),\n dsn = {},\n i = 7;\n\n try {\n while (i--) dsn[dsnKeys[i]] = m[i] || '';\n } catch (e) {\n throw new RavenConfigError('Invalid DSN: ' + str);\n }\n\n if (dsn.pass && !this._globalOptions.allowSecretKey) {\n throw new RavenConfigError(\n 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'\n );\n }\n\n return dsn;\n },\n\n _getGlobalServer: function(uri) {\n // assemble the endpoint from the uri pieces\n var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');\n\n if (uri.protocol) {\n globalServer = uri.protocol + ':' + globalServer;\n }\n return globalServer;\n },\n\n _handleOnErrorStackInfo: function() {\n // if we are intentionally ignoring errors via onerror, bail out\n if (!this._ignoreOnError) {\n this._handleStackInfo.apply(this, arguments);\n }\n },\n\n _handleStackInfo: function(stackInfo, options) {\n var frames = this._prepareFrames(stackInfo, options);\n\n this._triggerEvent('handle', {\n stackInfo: stackInfo,\n options: options\n });\n\n this._processException(\n stackInfo.name,\n stackInfo.message,\n stackInfo.url,\n stackInfo.lineno,\n frames,\n options\n );\n },\n\n _prepareFrames: function(stackInfo, options) {\n var self = this;\n var frames = [];\n if (stackInfo.stack && stackInfo.stack.length) {\n each(stackInfo.stack, function(i, stack) {\n var frame = self._normalizeFrame(stack, stackInfo.url);\n if (frame) {\n frames.push(frame);\n }\n });\n\n // e.g. frames captured via captureMessage throw\n if (options && options.trimHeadFrames) {\n for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {\n frames[j].in_app = false;\n }\n }\n }\n frames = frames.slice(0, this._globalOptions.stackTraceLimit);\n return frames;\n },\n\n _normalizeFrame: function(frame, stackInfoUrl) {\n // normalize the frames data\n var normalized = {\n filename: frame.url,\n lineno: frame.line,\n colno: frame.column,\n function: frame.func || '?'\n };\n\n // Case when we don't have any information about the error\n // E.g. throwing a string or raw object, instead of an `Error` in Firefox\n // Generating synthetic error doesn't add any value here\n //\n // We should probably somehow let a user know that they should fix their code\n if (!frame.url) {\n normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler\n }\n\n normalized.in_app = !// determine if an exception came from outside of our app\n // first we check the global includePaths list.\n (\n (!!this._globalOptions.includePaths.test &&\n !this._globalOptions.includePaths.test(normalized.filename)) ||\n // Now we check for fun, if the function name is Raven or TraceKit\n /(Raven|TraceKit)\\./.test(normalized['function']) ||\n // finally, we do a last ditch effort and check for raven.min.js\n /raven\\.(min\\.)?js$/.test(normalized.filename)\n );\n\n return normalized;\n },\n\n _processException: function(type, message, fileurl, lineno, frames, options) {\n var prefixedMessage = (type ? type + ': ' : '') + (message || '');\n if (\n !!this._globalOptions.ignoreErrors.test &&\n (this._globalOptions.ignoreErrors.test(message) ||\n this._globalOptions.ignoreErrors.test(prefixedMessage))\n ) {\n return;\n }\n\n var stacktrace;\n\n if (frames && frames.length) {\n fileurl = frames[0].filename || fileurl;\n // Sentry expects frames oldest to newest\n // and JS sends them as newest to oldest\n frames.reverse();\n stacktrace = {frames: frames};\n } else if (fileurl) {\n stacktrace = {\n frames: [\n {\n filename: fileurl,\n lineno: lineno,\n in_app: true\n }\n ]\n };\n }\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n var data = objectMerge(\n {\n // sentry.interfaces.Exception\n exception: {\n values: [\n {\n type: type,\n value: message,\n stacktrace: stacktrace\n }\n ]\n },\n transaction: fileurl\n },\n options\n );\n\n // Fire away!\n this._send(data);\n },\n\n _trimPacket: function(data) {\n // For now, we only want to truncate the two different messages\n // but this could/should be expanded to just trim everything\n var max = this._globalOptions.maxMessageLength;\n if (data.message) {\n data.message = truncate(data.message, max);\n }\n if (data.exception) {\n var exception = data.exception.values[0];\n exception.value = truncate(exception.value, max);\n }\n\n var request = data.request;\n if (request) {\n if (request.url) {\n request.url = truncate(request.url, this._globalOptions.maxUrlLength);\n }\n if (request.Referer) {\n request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);\n }\n }\n\n if (data.breadcrumbs && data.breadcrumbs.values)\n this._trimBreadcrumbs(data.breadcrumbs);\n\n return data;\n },\n\n /**\n * Truncate breadcrumb values (right now just URLs)\n */\n _trimBreadcrumbs: function(breadcrumbs) {\n // known breadcrumb properties with urls\n // TODO: also consider arbitrary prop values that start with (https?)?://\n var urlProps = ['to', 'from', 'url'],\n urlProp,\n crumb,\n data;\n\n for (var i = 0; i < breadcrumbs.values.length; ++i) {\n crumb = breadcrumbs.values[i];\n if (\n !crumb.hasOwnProperty('data') ||\n !isObject(crumb.data) ||\n objectFrozen(crumb.data)\n )\n continue;\n\n data = objectMerge({}, crumb.data);\n for (var j = 0; j < urlProps.length; ++j) {\n urlProp = urlProps[j];\n if (data.hasOwnProperty(urlProp) && data[urlProp]) {\n data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);\n }\n }\n breadcrumbs.values[i].data = data;\n }\n },\n\n _getHttpData: function() {\n if (!this._hasNavigator && !this._hasDocument) return;\n var httpData = {};\n\n if (this._hasNavigator && _navigator.userAgent) {\n httpData.headers = {\n 'User-Agent': _navigator.userAgent\n };\n }\n\n // Check in `window` instead of `document`, as we may be in ServiceWorker environment\n if (_window.location && _window.location.href) {\n httpData.url = _window.location.href;\n }\n\n if (this._hasDocument && _document.referrer) {\n if (!httpData.headers) httpData.headers = {};\n httpData.headers.Referer = _document.referrer;\n }\n\n return httpData;\n },\n\n _resetBackoff: function() {\n this._backoffDuration = 0;\n this._backoffStart = null;\n },\n\n _shouldBackoff: function() {\n return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;\n },\n\n /**\n * Returns true if the in-process data payload matches the signature\n * of the previously-sent data\n *\n * NOTE: This has to be done at this level because TraceKit can generate\n * data from window.onerror WITHOUT an exception object (IE8, IE9,\n * other old browsers). This can take the form of an \"exception\"\n * data object with a single frame (derived from the onerror args).\n */\n _isRepeatData: function(current) {\n var last = this._lastData;\n\n if (\n !last ||\n current.message !== last.message || // defined for captureMessage\n current.transaction !== last.transaction // defined for captureException/onerror\n )\n return false;\n\n // Stacktrace interface (i.e. from captureMessage)\n if (current.stacktrace || last.stacktrace) {\n return isSameStacktrace(current.stacktrace, last.stacktrace);\n } else if (current.exception || last.exception) {\n // Exception interface (i.e. from captureException/onerror)\n return isSameException(current.exception, last.exception);\n }\n\n return true;\n },\n\n _setBackoffState: function(request) {\n // If we are already in a backoff state, don't change anything\n if (this._shouldBackoff()) {\n return;\n }\n\n var status = request.status;\n\n // 400 - project_id doesn't exist or some other fatal\n // 401 - invalid/revoked dsn\n // 429 - too many requests\n if (!(status === 400 || status === 401 || status === 429)) return;\n\n var retry;\n try {\n // If Retry-After is not in Access-Control-Expose-Headers, most\n // browsers will throw an exception trying to access it\n if (supportsFetch()) {\n retry = request.headers.get('Retry-After');\n } else {\n retry = request.getResponseHeader('Retry-After');\n }\n\n // Retry-After is returned in seconds\n retry = parseInt(retry, 10) * 1000;\n } catch (e) {\n /* eslint no-empty:0 */\n }\n\n this._backoffDuration = retry\n ? // If Sentry server returned a Retry-After value, use it\n retry\n : // Otherwise, double the last backoff duration (starts at 1 sec)\n this._backoffDuration * 2 || 1000;\n\n this._backoffStart = now();\n },\n\n _send: function(data) {\n var globalOptions = this._globalOptions;\n\n var baseData = {\n project: this._globalProject,\n logger: globalOptions.logger,\n platform: 'javascript'\n },\n httpData = this._getHttpData();\n\n if (httpData) {\n baseData.request = httpData;\n }\n\n // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload\n if (data.trimHeadFrames) delete data.trimHeadFrames;\n\n data = objectMerge(baseData, data);\n\n // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge\n data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);\n data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);\n\n // Send along our own collected metadata with extra\n data.extra['session:duration'] = now() - this._startTime;\n\n if (this._breadcrumbs && this._breadcrumbs.length > 0) {\n // intentionally make shallow copy so that additions\n // to breadcrumbs aren't accidentally sent in this request\n data.breadcrumbs = {\n values: [].slice.call(this._breadcrumbs, 0)\n };\n }\n\n if (this._globalContext.user) {\n // sentry.interfaces.User\n data.user = this._globalContext.user;\n }\n\n // Include the environment if it's defined in globalOptions\n if (globalOptions.environment) data.environment = globalOptions.environment;\n\n // Include the release if it's defined in globalOptions\n if (globalOptions.release) data.release = globalOptions.release;\n\n // Include server_name if it's defined in globalOptions\n if (globalOptions.serverName) data.server_name = globalOptions.serverName;\n\n data = this._sanitizeData(data);\n\n // Cleanup empty properties before sending them to the server\n Object.keys(data).forEach(function(key) {\n if (data[key] == null || data[key] === '' || isEmptyObject(data[key])) {\n delete data[key];\n }\n });\n\n if (isFunction(globalOptions.dataCallback)) {\n data = globalOptions.dataCallback(data) || data;\n }\n\n // Why??????????\n if (!data || isEmptyObject(data)) {\n return;\n }\n\n // Check if the request should be filtered or not\n if (\n isFunction(globalOptions.shouldSendCallback) &&\n !globalOptions.shouldSendCallback(data)\n ) {\n return;\n }\n\n // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),\n // so drop requests until \"cool-off\" period has elapsed.\n if (this._shouldBackoff()) {\n this._logDebug('warn', 'Raven dropped error due to backoff: ', data);\n return;\n }\n\n if (typeof globalOptions.sampleRate === 'number') {\n if (Math.random() < globalOptions.sampleRate) {\n this._sendProcessedPayload(data);\n }\n } else {\n this._sendProcessedPayload(data);\n }\n },\n\n _sanitizeData: function(data) {\n return sanitize(data, this._globalOptions.sanitizeKeys);\n },\n\n _getUuid: function() {\n return uuid4();\n },\n\n _sendProcessedPayload: function(data, callback) {\n var self = this;\n var globalOptions = this._globalOptions;\n\n if (!this.isSetup()) return;\n\n // Try and clean up the packet before sending by truncating long values\n data = this._trimPacket(data);\n\n // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,\n // but this would require copying an un-truncated copy of the data packet, which can be\n // arbitrarily deep (extra_data) -- could be worthwhile? will revisit\n if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {\n this._logDebug('warn', 'Raven dropped repeat event: ', data);\n return;\n }\n\n // Send along an event_id if not explicitly passed.\n // This event_id can be used to reference the error within Sentry itself.\n // Set lastEventId after we know the error should actually be sent\n this._lastEventId = data.event_id || (data.event_id = this._getUuid());\n\n // Store outbound payload after trim\n this._lastData = data;\n\n this._logDebug('debug', 'Raven about to send:', data);\n\n var auth = {\n sentry_version: '7',\n sentry_client: 'raven-js/' + this.VERSION,\n sentry_key: this._globalKey\n };\n\n if (this._globalSecret) {\n auth.sentry_secret = this._globalSecret;\n }\n\n var exception = data.exception && data.exception.values[0];\n\n // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy\n if (\n this._globalOptions.autoBreadcrumbs &&\n this._globalOptions.autoBreadcrumbs.sentry\n ) {\n this.captureBreadcrumb({\n category: 'sentry',\n message: exception\n ? (exception.type ? exception.type + ': ' : '') + exception.value\n : data.message,\n event_id: data.event_id,\n level: data.level || 'error' // presume error unless specified\n });\n }\n\n var url = this._globalEndpoint;\n (globalOptions.transport || this._makeRequest).call(this, {\n url: url,\n auth: auth,\n data: data,\n options: globalOptions,\n onSuccess: function success() {\n self._resetBackoff();\n\n self._triggerEvent('success', {\n data: data,\n src: url\n });\n callback && callback();\n },\n onError: function failure(error) {\n self._logDebug('error', 'Raven transport failed to send: ', error);\n\n if (error.request) {\n self._setBackoffState(error.request);\n }\n\n self._triggerEvent('failure', {\n data: data,\n src: url\n });\n error = error || new Error('Raven send failed (no additional details provided)');\n callback && callback(error);\n }\n });\n },\n\n _makeRequest: function(opts) {\n // Auth is intentionally sent as part of query string (NOT as custom HTTP header) to avoid preflight CORS requests\n var url = opts.url + '?' + urlencode(opts.auth);\n\n var evaluatedHeaders = null;\n var evaluatedFetchParameters = {};\n\n if (opts.options.headers) {\n evaluatedHeaders = this._evaluateHash(opts.options.headers);\n }\n\n if (opts.options.fetchParameters) {\n evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);\n }\n\n if (supportsFetch()) {\n evaluatedFetchParameters.body = stringify(opts.data);\n\n var defaultFetchOptions = objectMerge({}, this._fetchDefaults);\n var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);\n\n if (evaluatedHeaders) {\n fetchOptions.headers = evaluatedHeaders;\n }\n\n return _window\n .fetch(url, fetchOptions)\n .then(function(response) {\n if (response.ok) {\n opts.onSuccess && opts.onSuccess();\n } else {\n var error = new Error('Sentry error code: ' + response.status);\n // It's called request only to keep compatibility with XHR interface\n // and not add more redundant checks in setBackoffState method\n error.request = response;\n opts.onError && opts.onError(error);\n }\n })\n ['catch'](function() {\n opts.onError &&\n opts.onError(new Error('Sentry error code: network unavailable'));\n });\n }\n\n var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();\n if (!request) return;\n\n // if browser doesn't support CORS (e.g. IE7), we are out of luck\n var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';\n\n if (!hasCORS) return;\n\n if ('withCredentials' in request) {\n request.onreadystatechange = function() {\n if (request.readyState !== 4) {\n return;\n } else if (request.status === 200) {\n opts.onSuccess && opts.onSuccess();\n } else if (opts.onError) {\n var err = new Error('Sentry error code: ' + request.status);\n err.request = request;\n opts.onError(err);\n }\n };\n } else {\n request = new XDomainRequest();\n // xdomainrequest cannot go http -> https (or vice versa),\n // so always use protocol relative\n url = url.replace(/^https?:/, '');\n\n // onreadystatechange not supported by XDomainRequest\n if (opts.onSuccess) {\n request.onload = opts.onSuccess;\n }\n if (opts.onError) {\n request.onerror = function() {\n var err = new Error('Sentry error code: XDomainRequest');\n err.request = request;\n opts.onError(err);\n };\n }\n }\n\n request.open('POST', url);\n\n if (evaluatedHeaders) {\n each(evaluatedHeaders, function(key, value) {\n request.setRequestHeader(key, value);\n });\n }\n\n request.send(stringify(opts.data));\n },\n\n _evaluateHash: function(hash) {\n var evaluated = {};\n\n for (var key in hash) {\n if (hash.hasOwnProperty(key)) {\n var value = hash[key];\n evaluated[key] = typeof value === 'function' ? value() : value;\n }\n }\n\n return evaluated;\n },\n\n _logDebug: function(level) {\n // We allow `Raven.debug` and `Raven.config(DSN, { debug: true })` to not make backward incompatible API change\n if (\n this._originalConsoleMethods[level] &&\n (this.debug || this._globalOptions.debug)\n ) {\n // In IE<10 console methods do not have their own 'apply' method\n Function.prototype.apply.call(\n this._originalConsoleMethods[level],\n this._originalConsole,\n [].slice.call(arguments, 1)\n );\n }\n },\n\n _mergeContext: function(key, context) {\n if (isUndefined(context)) {\n delete this._globalContext[key];\n } else {\n this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);\n }\n }\n};\n\n// Deprecations\nRaven.prototype.setUser = Raven.prototype.setUserContext;\nRaven.prototype.setReleaseContext = Raven.prototype.setRelease;\n\nmodule.exports = Raven;\n","/**\n * Enforces a single instance of the Raven client, and the\n * main entry point for Raven. If you are a consumer of the\n * Raven library, you SHOULD load this file (vs raven.js).\n **/\n\nvar RavenConstructor = require('./raven');\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _Raven = _window.Raven;\n\nvar Raven = new RavenConstructor();\n\n/*\n * Allow multiple versions of Raven to be installed.\n * Strip Raven from the global context and returns the instance.\n *\n * @return {Raven}\n */\nRaven.noConflict = function() {\n _window.Raven = _Raven;\n return Raven;\n};\n\nRaven.afterLoad();\n\nmodule.exports = Raven;\n\n/**\n * DISCLAIMER:\n *\n * Expose `Client` constructor for cases where user want to track multiple \"sub-applications\" in one larger app.\n * It's not meant to be used by a wide audience, so pleaaase make sure that you know what you're doing before using it.\n * Accidentally calling `install` multiple times, may result in an unexpected behavior that's very hard to debug.\n *\n * It's called `Client' to be in-line with Raven Node implementation.\n *\n * HOWTO:\n *\n * import Raven from 'raven-js';\n *\n * const someAppReporter = new Raven.Client();\n * const someOtherAppReporter = new Raven.Client();\n *\n * someAppReporter.config('__DSN__', {\n * ...config goes here\n * });\n *\n * someOtherAppReporter.config('__OTHER_DSN__', {\n * ...config goes here\n * });\n *\n * someAppReporter.captureMessage(...);\n * someAppReporter.captureException(...);\n * someAppReporter.captureBreadcrumb(...);\n *\n * someOtherAppReporter.captureMessage(...);\n * someOtherAppReporter.captureException(...);\n * someOtherAppReporter.captureBreadcrumb(...);\n *\n * It should \"just work\".\n */\nmodule.exports.Client = RavenConstructor;\n","// ==========================================================================\n// Plyr.io demo\n// This code is purely for the https://plyr.io website\n// Please see readme.md in the root or github.com/sampotts/plyr\n// ==========================================================================\n\nimport Raven from 'raven-js';\n\n(() => {\n const isLive = window.location.host === 'plyr.io';\n\n // Raven / Sentry\n // For demo site (https://plyr.io) only\n if (isLive) {\n Raven.config('https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555').install();\n }\n\n document.addEventListener('DOMContentLoaded', () => {\n Raven.context(() => {\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n document.activeElement.classList.add(tabClassName);\n }, 0);\n });\n\n // Setup the player\n const player = new Plyr('#player', {\n debug: true,\n title: 'View From A Blue Moon',\n iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: true,\n },\n /* controls: [\n 'play-large',\n 'restart',\n 'rewind',\n 'play',\n 'fast-forward',\n 'progress',\n 'current-time',\n 'duration',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ], */\n /* i18n: {\n restart: '重新開始',\n rewind: '快退{seektime}秒',\n play: '播放',\n pause: '暫停',\n fastForward: '快進{seektime}秒',\n seek: '尋求',\n played: '發揮',\n buffered: '緩衝的',\n currentTime: '當前時間戳',\n duration: '長短',\n volume: '音量',\n mute: '靜音',\n unmute: '取消靜音',\n enableCaptions: '開啟字幕',\n disableCaptions: '關閉字幕',\n enterFullscreen: '進入全螢幕',\n exitFullscreen: '退出全螢幕',\n frameTitle: '球員為{title}',\n captions: '字幕',\n settings: '設定',\n speed: '速度',\n normal: '正常',\n quality: '質量',\n loop: '循環',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: '重啟',\n disabled: '殘',\n enabled: '啟用',\n advertisement: '廣告',\n }, */\n captions: {\n active: true,\n },\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n ads: {\n enabled: true,\n publisherId: '918848828995742',\n },\n });\n\n // Expose for tinkering in the console\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-576p.mp4',\n type: 'video/mp4',\n size: 576,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-720p.mp4',\n type: 'video/mp4',\n size: 720,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1080p.mp4',\n type: 'video/mp4',\n size: 1080,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1440p.mp4',\n type: 'video/mp4',\n size: 1440,\n },\n ],\n poster: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title: 'Kishi Bashi &ndash; &ldquo;It All Began With A Burst&rdquo;',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n }],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n }],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button => toggleClass(button.parentElement, 'active', false));\n\n // Set active on parent\n toggleClass(document.querySelector(`[data-source=\"${type}\"]`), 'active', true);\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(cite => {\n cite.setAttribute('hidden', '');\n });\n document.querySelector(`.plyr__cite--${type}`).removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`,\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n });\n });\n\n // Google analytics\n // For demo site (https://plyr.io) only\n /* eslint-disable */\n if (isLive) {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n }\n /* eslint-enable */\n})();\n"]} \ No newline at end of file
diff --git a/dist/plyr.css b/dist/plyr.css
index b41a56cb..7591416a 100644
--- a/dist/plyr.css
+++ b/dist/plyr.css
@@ -1 +1 @@
-@keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-popup{0%{opacity:.5;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}.plyr{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;direction:ltr;font-family:Avenir,"Avenir Next","Helvetica Neue","Segoe UI",Helvetica,Arial,sans-serif;font-variant-numeric:tabular-nums;font-weight:500;line-height:1.7;max-width:100%;min-width:200px;position:relative;text-shadow:none;transition:box-shadow .3s ease}.plyr audio,.plyr video{border-radius:inherit;height:auto;vertical-align:middle;width:100%}.plyr button{font:inherit;line-height:inherit;width:auto}.plyr:focus{outline:0}.plyr--full-ui{box-sizing:border-box}.plyr--full-ui *,.plyr--full-ui ::after,.plyr--full-ui ::before{box-sizing:inherit}.plyr--full-ui a,.plyr--full-ui button,.plyr--full-ui input,.plyr--full-ui label{touch-action:manipulation}.plyr__badge{background:#4f5b5f;border-radius:2px;color:#fff;font-size:9px;line-height:1;padding:3px 4px}.plyr--full-ui ::-webkit-media-text-track-container{display:none}.plyr__captions{animation:plyr-fade-in .3s ease;bottom:0;color:#fff;display:none;font-size:14px;left:0;padding:10px;position:absolute;text-align:center;transform:translateY(-40px);transition:transform .4s ease-in-out;width:100%}.plyr__captions span{background:rgba(0,0,0,.8);border-radius:2px;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:185%;padding:.2em .5em;white-space:pre-wrap}.plyr__captions span div{display:inline}.plyr__captions span:empty{display:none}@media (min-width:480px){.plyr__captions{font-size:16px;padding:20px}}@media (min-width:768px){.plyr__captions{font-size:18px}}.plyr--captions-active .plyr__captions{display:block}.plyr--hide-controls .plyr__captions{transform:translateY(-15px)}.plyr__control{background:0 0;border:0;border-radius:3px;color:inherit;cursor:pointer;flex-shrink:0;overflow:visible;padding:7px;position:relative;transition:all .3s ease}.plyr__control svg{display:block;fill:currentColor;height:18px;pointer-events:none;width:18px}.plyr__control:focus{outline:0}.plyr__control.plyr__tab-focus{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__control[aria-pressed=false] .icon--pressed,.plyr__control[aria-pressed=false] .label--pressed,.plyr__control[aria-pressed=true] .icon--not-pressed,.plyr__control[aria-pressed=true] .label--not-pressed{display:none}.plyr--audio .plyr__control.plyr__tab-focus,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr__control--overlaid{background:rgba(26,175,255,.8);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;display:none;left:50%;padding:15px;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:2}.plyr__control--overlaid svg{height:20px;left:2px;position:relative;width:20px}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{background:#1aafff}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{align-items:center;display:flex;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__menu:first-child+[data-plyr=pause],.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__progress:first-child+[data-plyr=pause],.plyr__controls .plyr__time:first-child,.plyr__controls .plyr__time:first-child+[data-plyr=pause],.plyr__controls>.plyr__control:first-child,.plyr__controls>.plyr__control:first-child+[data-plyr=pause]{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:10px}.plyr__controls .plyr__menu+.plyr__control,.plyr__controls>.plyr__control+.plyr__control,.plyr__controls>.plyr__control+.plyr__menu{margin-left:5px}}.plyr--video .plyr__controls{background:linear-gradient(transparent,rgba(0,0,0,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;bottom:0;color:#fff;left:0;padding:35px 10px 10px;position:absolute;right:0;transition:opacity .4s ease-in-out,transform .4s ease-in-out;z-index:2}.plyr--video .plyr__controls .plyr__control svg{-webkit-filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15));filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15))}.plyr--video .plyr__controls .plyr__control.plyr__tab-focus,.plyr--video .plyr__controls .plyr__control:hover,.plyr--video .plyr__controls .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr--audio .plyr__controls{background:#fff;border-radius:inherit;color:#4f5b5f;padding:10px}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none;transform:translateY(100%)}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip]{display:none}.plyr--airplay-supported [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen],.plyr--pip-supported [data-plyr=pip]{display:inline-block}.plyr__video-embed{height:0;padding-bottom:56.25%;position:relative}.plyr__video-embed iframe{border:0;height:100%;left:0;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr--full-ui .plyr__video-embed iframe{pointer-events:none}.plyr--full-ui .plyr__video-embed>.plyr__video-embed__container{padding-bottom:240%;position:relative;transform:translateY(-38.28125%)}.plyr__menu{display:flex;position:relative}.plyr__menu .plyr__control svg{transition:transform .3s ease}.plyr__menu .plyr__control[aria-expanded=true] svg{transform:rotate(90deg)}.plyr__menu .plyr__control[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{animation:plyr-popup .2s ease;background:rgba(255,255,255,.9);border-radius:4px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:16px;margin-bottom:10px;position:absolute;right:-3px;text-align:left;white-space:nowrap;z-index:3}.plyr__menu__container>div{overflow:hidden;transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu__container::after{border:4px solid transparent;border-top-color:rgba(255,255,255,.9);content:'';height:0;position:absolute;right:15px;top:100%;width:0}.plyr__menu__container ul{list-style:none;margin:0;overflow:hidden;padding:7px}.plyr__menu__container ul li{margin-top:2px}.plyr__menu__container ul li:first-child{margin-top:0}.plyr__menu__container .plyr__control{align-items:center;color:#4f5b5f;display:flex;font-size:14px;padding:4px 14px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__menu__container .plyr__control::after{border:4px solid transparent;content:'';position:absolute;top:50%;transform:translateY(-50%)}.plyr__menu__container .plyr__control--forward{padding-right:28px}.plyr__menu__container .plyr__control--forward::after{border-left-color:rgba(79,91,95,.8);right:5px}.plyr__menu__container .plyr__control--forward.plyr__tab-focus::after,.plyr__menu__container .plyr__control--forward:hover::after{border-left-color:currentColor}.plyr__menu__container .plyr__control--back{font-weight:500;margin:7px;margin-bottom:3px;padding-left:28px;position:relative;width:calc(100% - 14px)}.plyr__menu__container .plyr__control--back::after{border-right-color:rgba(79,91,95,.8);left:7px}.plyr__menu__container .plyr__control--back::before{background:#b7c5cd;box-shadow:0 1px 0 #fff;content:'';height:1px;left:0;margin-top:4px;overflow:hidden;position:absolute;right:0;top:100%}.plyr__menu__container .plyr__control--back.plyr__tab-focus::after,.plyr__menu__container .plyr__control--back:hover::after{border-right-color:currentColor}.plyr__menu__container label.plyr__control{padding-left:7px}.plyr__menu__container label.plyr__control input[type=radio]+span{background:rgba(0,0,0,.1);border-radius:100%;display:block;flex-shrink:0;height:16px;margin-right:10px;position:relative;transition:all .3s ease;width:16px}.plyr__menu__container label.plyr__control input[type=radio]+span::after{background:#fff;border-radius:100%;content:'';height:6px;left:5px;opacity:0;position:absolute;top:5px;transform:scale(0);transition:transform .3s ease,opacity .3s ease;width:6px}.plyr__menu__container label.plyr__control input[type=radio]:checked+span{background:#1aafff}.plyr__menu__container label.plyr__control input[type=radio]:checked+span::after{opacity:1;transform:scale(1)}.plyr__menu__container label.plyr__control input[type=radio]:focus+span{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__menu__container label.plyr__control.plyr__tab-focus input[type=radio]+span,.plyr__menu__container label.plyr__control:hover input[type=radio]+span{background:rgba(0,0,0,.1)}.plyr__menu__container .plyr__menu__value{align-items:center;display:flex;margin-left:auto;margin-right:-7px;overflow:hidden;padding-left:25px;pointer-events:none}.plyr__progress{display:flex;flex:1;position:relative}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress .plyr__tooltip{font-size:14px;left:0}.plyr__progress--buffer{-webkit-appearance:none;background:0 0;border:0;border-radius:100px;height:6px;left:0;margin:-3px 0 0;padding:0;position:absolute;top:50%;width:100%}.plyr__progress--buffer::-webkit-progress-bar{background:0 0;transition:width .2s ease}.plyr__progress--buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:6px}.plyr__progress--buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:6px;transition:width .2s ease}.plyr__progress--buffer::-ms-fill{border-radius:100px;transition:width .2s ease}.plyr--video .plyr__progress--buffer{box-shadow:0 1px 1px rgba(0,0,0,.15);color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress--buffer{color:rgba(183,197,205,.66)}.plyr--loading .plyr__progress--buffer{animation:plyr-progress 1s linear infinite;background-image:linear-gradient(-45deg,rgba(47,52,61,.6) 25%,transparent 25%,transparent 50%,rgba(47,52,61,.6) 50%,rgba(47,52,61,.6) 75%,transparent 75%,transparent);background-repeat:repeat-x;background-size:25px 25px;color:transparent}.plyr--video.plyr--loading .plyr__progress--buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress--buffer{background-color:rgba(183,197,205,.66)}.plyr__poster{background-color:#000;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;height:100%;left:0;opacity:0;position:absolute;top:0;transition:opacity .3s ease;width:100%;z-index:1;pointer-events:none}.plyr--stopped .plyr__poster{opacity:1}.plyr--full-ui input[type=range]{-webkit-appearance:none;background:0 0;border:0;border-radius:28px;color:#1aafff;display:block;height:20px;margin:0;padding:0;transition:box-shadow .3s ease;width:100%}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-webkit-user-select:none;user-select:none;background-image:linear-gradient(to right,currentColor var(--value,0),transparent var(--value,0))}.plyr--full-ui input[type=range]::-webkit-slider-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;-webkit-appearance:none;margin-top:-4px}.plyr--full-ui input[type=range]::-moz-range-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-moz-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-moz-range-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px}.plyr--full-ui input[type=range]::-moz-range-progress{background:currentColor;border-radius:3px;height:6px}.plyr--full-ui input[type=range]::-ms-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;color:transparent}.plyr--full-ui input[type=range]::-ms-fill-upper{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-ms-fill-lower{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;background:currentColor}.plyr--full-ui input[type=range]::-ms-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;margin-top:0}.plyr--full-ui input[type=range]::-ms-tooltip{display:none}.plyr--full-ui input[type=range]:focus{outline:0}.plyr--full-ui input[type=range]::-moz-focus-outer{border:0}.plyr--full-ui input[type=range].plyr__tab-focus::-webkit-slider-runnable-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-moz-range-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-ms-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr__time{font-size:14px}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}@media (max-width:767px){.plyr__time+.plyr__time{display:none}}.plyr--video .plyr__time{text-shadow:0 1px 1px rgba(0,0,0,.15)}.plyr__tooltip{background:rgba(255,255,255,.9);border-radius:3px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:14px;font-weight:500;line-height:1.3;margin-bottom:10px;opacity:0;padding:5px 7.5px;pointer-events:none;position:absolute;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease;white-space:nowrap;z-index:2}.plyr__tooltip::before{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.9);bottom:-4px;content:'';height:0;left:50%;position:absolute;transform:translateX(-50%);width:0;z-index:2}.plyr .plyr__control.plyr__tab-focus .plyr__tooltip,.plyr .plyr__control:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%,0) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls>.plyr__control:first-child .plyr__tooltip::before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip::before{left:16px}.plyr__controls>.plyr__control:last-child .plyr__tooltip{right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip::before{left:auto;right:16px;transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{transform:translate(0,0) scale(1)}.plyr--video{overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{background:#000;border-radius:inherit;overflow:hidden;position:relative;z-index:0}.plyr__volume{flex:1;position:relative}.plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr__volume{max-width:50px}}@media (min-width:768px){.plyr__volume{max-width:80px}}.plyr--is-ios .plyr__volume{display:none!important}.plyr--is-ios.plyr--vimeo [data-plyr=mute]{display:none!important}.plyr--has-error{pointer-events:none}.plyr--has-error::after{align-items:center;background:#000;color:#fff;content:attr(data-plyr-error);display:flex;font-size:16px;height:100%;justify-content:center;left:0;position:absolute;text-align:center;text-shadow:0 1px 1px #000;top:0;width:100%;z-index:10}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:fullscreen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:fullscreen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}.plyr:fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}.plyr:-moz-full-screen .plyr__captions{font-size:21px}.plyr:-ms-fullscreen .plyr__captions{font-size:21px}.plyr:fullscreen .plyr__captions{font-size:21px}}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-moz-full-screen .plyr__captions{font-size:21px}}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-ms-fullscreen .plyr__captions{font-size:21px}}.plyr--fullscreen-fallback{background:#000;border-radius:0!important;height:100%;margin:0;width:100%;bottom:0;left:0;position:fixed;right:0;top:0;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-fallback .plyr__video-embed{overflow:visible}.plyr--fullscreen-fallback.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen{display:block}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr--fullscreen-fallback.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr--fullscreen-fallback .plyr__captions{font-size:21px}}.plyr__ads{border-radius:inherit;bottom:0;cursor:pointer;left:0;overflow:hidden;position:absolute;right:0;top:0;z-index:-1}.plyr__ads>div,.plyr__ads>div iframe{height:100%;position:absolute;width:100%}.plyr__ads::after{background:rgba(47,52,61,.8);border-radius:2px;bottom:10px;color:#fff;content:attr(data-badge-text);font-size:11px;padding:2px 6px;pointer-events:none;position:absolute;right:10px;z-index:3}.plyr__ads::after:empty{display:none}.plyr__cues{background:currentColor;display:block;height:6px;left:0;margin:-3px 0 0;opacity:.8;position:absolute;top:50%;width:3px;z-index:3}.plyr--no-transition{transition:none!important}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;border:0!important;height:1px!important;padding:0!important;position:absolute!important;width:1px!important} \ No newline at end of file
+@keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-popup{0%{opacity:.5;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}.plyr{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;direction:ltr;font-family:Avenir,"Avenir Next","Helvetica Neue","Segoe UI",Helvetica,Arial,sans-serif;font-variant-numeric:tabular-nums;font-weight:500;line-height:1.7;max-width:100%;min-width:200px;position:relative;text-shadow:none;transition:box-shadow .3s ease}.plyr audio,.plyr video{border-radius:inherit;height:auto;vertical-align:middle;width:100%}.plyr button{font:inherit;line-height:inherit;width:auto}.plyr:focus{outline:0}.plyr--full-ui{box-sizing:border-box}.plyr--full-ui *,.plyr--full-ui ::after,.plyr--full-ui ::before{box-sizing:inherit}.plyr--full-ui a,.plyr--full-ui button,.plyr--full-ui input,.plyr--full-ui label{touch-action:manipulation}.plyr__badge{background:#4f5b5f;border-radius:2px;color:#fff;font-size:9px;line-height:1;padding:3px 4px}.plyr--full-ui ::-webkit-media-text-track-container{display:none}.plyr__captions{animation:plyr-fade-in .3s ease;bottom:0;color:#fff;display:none;font-size:14px;left:0;padding:10px;position:absolute;text-align:center;transform:translateY(-40px);transition:transform .4s ease-in-out;width:100%}.plyr__captions span{background:rgba(0,0,0,.8);border-radius:2px;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:185%;padding:.2em .5em;white-space:pre-wrap}.plyr__captions span div{display:inline}.plyr__captions span:empty{display:none}@media (min-width:480px){.plyr__captions{font-size:16px;padding:20px}}@media (min-width:768px){.plyr__captions{font-size:18px}}.plyr--captions-active .plyr__captions{display:block}.plyr--hide-controls .plyr__captions{transform:translateY(-15px)}.plyr__control{background:0 0;border:0;border-radius:3px;color:inherit;cursor:pointer;flex-shrink:0;overflow:visible;padding:7px;position:relative;transition:all .3s ease}.plyr__control svg{display:block;fill:currentColor;height:18px;pointer-events:none;width:18px}.plyr__control:focus{outline:0}.plyr__control.plyr__tab-focus{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__control[aria-pressed=false] .icon--pressed,.plyr__control[aria-pressed=false] .label--pressed,.plyr__control[aria-pressed=true] .icon--not-pressed,.plyr__control[aria-pressed=true] .label--not-pressed{display:none}.plyr--audio .plyr__control.plyr__tab-focus,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr__control--overlaid{background:rgba(26,175,255,.8);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;display:none;left:50%;padding:15px;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:2}.plyr__control--overlaid svg{height:20px;left:2px;position:relative;width:20px}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{background:#1aafff}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{align-items:center;display:flex;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__menu:first-child+[data-plyr=pause],.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__progress:first-child+[data-plyr=pause],.plyr__controls .plyr__time:first-child,.plyr__controls .plyr__time:first-child+[data-plyr=pause],.plyr__controls>.plyr__control:first-child,.plyr__controls>.plyr__control:first-child+[data-plyr=pause]{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:10px}.plyr__controls .plyr__menu+.plyr__control,.plyr__controls>.plyr__control+.plyr__control,.plyr__controls>.plyr__control+.plyr__menu{margin-left:5px}}.plyr--video .plyr__controls{background:linear-gradient(rgba(0,0,0,0),rgba(0,0,0,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;bottom:0;color:#fff;left:0;padding:35px 10px 10px;position:absolute;right:0;transition:opacity .4s ease-in-out,transform .4s ease-in-out;z-index:2}.plyr--video .plyr__controls .plyr__control svg{-webkit-filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15));filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15))}.plyr--video .plyr__controls .plyr__control.plyr__tab-focus,.plyr--video .plyr__controls .plyr__control:hover,.plyr--video .plyr__controls .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr--audio .plyr__controls{background:#fff;border-radius:inherit;color:#4f5b5f;padding:10px}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none;transform:translateY(100%)}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip]{display:none}.plyr--airplay-supported [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen],.plyr--pip-supported [data-plyr=pip]{display:inline-block}.plyr__video-embed{height:0;padding-bottom:56.25%;position:relative}.plyr__video-embed iframe{border:0;height:100%;left:0;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr--full-ui .plyr__video-embed iframe{pointer-events:none}.plyr--full-ui .plyr__video-embed>.plyr__video-embed__container{padding-bottom:240%;position:relative;transform:translateY(-38.28125%)}.plyr__menu{display:flex;position:relative}.plyr__menu .plyr__control svg{transition:transform .3s ease}.plyr__menu .plyr__control[aria-expanded=true] svg{transform:rotate(90deg)}.plyr__menu .plyr__control[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{animation:plyr-popup .2s ease;background:rgba(255,255,255,.9);border-radius:4px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:16px;margin-bottom:10px;position:absolute;right:-3px;text-align:left;white-space:nowrap;z-index:3}.plyr__menu__container>div{overflow:hidden;transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu__container::after{border:4px solid transparent;border-top-color:rgba(255,255,255,.9);content:'';height:0;position:absolute;right:15px;top:100%;width:0}.plyr__menu__container ul{list-style:none;margin:0;overflow:hidden;padding:7px}.plyr__menu__container ul li{margin-top:2px}.plyr__menu__container ul li:first-child{margin-top:0}.plyr__menu__container .plyr__control{align-items:center;color:#4f5b5f;display:flex;font-size:14px;padding:4px 14px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__menu__container .plyr__control::after{border:4px solid transparent;content:'';position:absolute;top:50%;transform:translateY(-50%)}.plyr__menu__container .plyr__control--forward{padding-right:28px}.plyr__menu__container .plyr__control--forward::after{border-left-color:rgba(79,91,95,.8);right:5px}.plyr__menu__container .plyr__control--forward.plyr__tab-focus::after,.plyr__menu__container .plyr__control--forward:hover::after{border-left-color:currentColor}.plyr__menu__container .plyr__control--back{font-weight:500;margin:7px;margin-bottom:3px;padding-left:28px;position:relative;width:calc(100% - 14px)}.plyr__menu__container .plyr__control--back::after{border-right-color:rgba(79,91,95,.8);left:7px}.plyr__menu__container .plyr__control--back::before{background:#b7c5cd;box-shadow:0 1px 0 #fff;content:'';height:1px;left:0;margin-top:4px;overflow:hidden;position:absolute;right:0;top:100%}.plyr__menu__container .plyr__control--back.plyr__tab-focus::after,.plyr__menu__container .plyr__control--back:hover::after{border-right-color:currentColor}.plyr__menu__container label.plyr__control{padding-left:7px}.plyr__menu__container label.plyr__control input[type=radio]+span{background:rgba(0,0,0,.1);border-radius:100%;display:block;flex-shrink:0;height:16px;margin-right:10px;position:relative;transition:all .3s ease;width:16px}.plyr__menu__container label.plyr__control input[type=radio]+span::after{background:#fff;border-radius:100%;content:'';height:6px;left:5px;opacity:0;position:absolute;top:5px;transform:scale(0);transition:transform .3s ease,opacity .3s ease;width:6px}.plyr__menu__container label.plyr__control input[type=radio]:checked+span{background:#1aafff}.plyr__menu__container label.plyr__control input[type=radio]:checked+span::after{opacity:1;transform:scale(1)}.plyr__menu__container label.plyr__control input[type=radio]:focus+span{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__menu__container label.plyr__control.plyr__tab-focus input[type=radio]+span,.plyr__menu__container label.plyr__control:hover input[type=radio]+span{background:rgba(0,0,0,.1)}.plyr__menu__container .plyr__menu__value{align-items:center;display:flex;margin-left:auto;margin-right:-7px;overflow:hidden;padding-left:25px;pointer-events:none}.plyr__progress{display:flex;flex:1;position:relative;margin-right:14px;left:7px}.plyr__progress input[type=range]{position:relative;z-index:2;width:calc(100% + 14px)!important;margin:0 -7px!important}.plyr__progress .plyr__tooltip{font-size:14px;left:0}.plyr__progress--buffer{-webkit-appearance:none;background:0 0;border:0;border-radius:100px;height:6px;left:0;margin:-3px 0 0;padding:0;position:absolute;top:50%;width:100%}.plyr__progress--buffer::-webkit-progress-bar{background:0 0;transition:width .2s ease}.plyr__progress--buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:6px}.plyr__progress--buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:6px;transition:width .2s ease}.plyr__progress--buffer::-ms-fill{border-radius:100px;transition:width .2s ease}.plyr--video .plyr__progress--buffer{box-shadow:0 1px 1px rgba(0,0,0,.15);color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress--buffer{color:rgba(183,197,205,.66)}.plyr--loading .plyr__progress--buffer{animation:plyr-progress 1s linear infinite;background-image:linear-gradient(-45deg,rgba(47,52,61,.6) 25%,transparent 25%,transparent 50%,rgba(47,52,61,.6) 50%,rgba(47,52,61,.6) 75%,transparent 75%,transparent);background-repeat:repeat-x;background-size:25px 25px;color:transparent}.plyr--video.plyr--loading .plyr__progress--buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress--buffer{background-color:rgba(183,197,205,.66)}.plyr__poster{background-color:#000;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;height:100%;left:0;opacity:0;position:absolute;top:0;transition:opacity .3s ease;width:100%;z-index:1;pointer-events:none}.plyr--stopped.plyr__poster-enabled .plyr__poster{opacity:1}.plyr--full-ui input[type=range]{-webkit-appearance:none;background:0 0;border:0;border-radius:28px;color:#1aafff;display:block;height:20px;margin:0;padding:0;transition:box-shadow .3s ease;width:100%}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-webkit-user-select:none;user-select:none;background-image:linear-gradient(to right,currentColor var(--value,0),transparent var(--value,0))}.plyr--full-ui input[type=range]::-webkit-slider-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;-webkit-appearance:none;margin-top:-4px}.plyr--full-ui input[type=range]::-moz-range-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-moz-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-moz-range-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px}.plyr--full-ui input[type=range]::-moz-range-progress{background:currentColor;border-radius:3px;height:6px}.plyr--full-ui input[type=range]::-ms-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;color:transparent}.plyr--full-ui input[type=range]::-ms-fill-upper{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-ms-fill-lower{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;background:currentColor}.plyr--full-ui input[type=range]::-ms-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;margin-top:0}.plyr--full-ui input[type=range]::-ms-tooltip{display:none}.plyr--full-ui input[type=range]:focus{outline:0}.plyr--full-ui input[type=range]::-moz-focus-outer{border:0}.plyr--full-ui input[type=range].plyr__tab-focus::-webkit-slider-runnable-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-moz-range-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-ms-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr__time{font-size:14px}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}@media (max-width:767px){.plyr__time+.plyr__time{display:none}}.plyr--video .plyr__time{text-shadow:0 1px 1px rgba(0,0,0,.15)}.plyr__tooltip{background:rgba(255,255,255,.9);border-radius:3px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:14px;font-weight:500;line-height:1.3;margin-bottom:10px;opacity:0;padding:5px 7.5px;pointer-events:none;position:absolute;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease;white-space:nowrap;z-index:2}.plyr__tooltip::before{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.9);bottom:-4px;content:'';height:0;left:50%;position:absolute;transform:translateX(-50%);width:0;z-index:2}.plyr .plyr__control.plyr__tab-focus .plyr__tooltip,.plyr .plyr__control:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%,0) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls>.plyr__control:first-child .plyr__tooltip::before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip::before{left:16px}.plyr__controls>.plyr__control:last-child .plyr__tooltip{right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip::before{left:auto;right:16px;transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{transform:translate(0,0) scale(1)}.plyr--video{overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{background:#000;border-radius:inherit;overflow:hidden;position:relative;z-index:0}.plyr__volume{flex:1;position:relative}.plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr__volume{max-width:50px}}@media (min-width:768px){.plyr__volume{max-width:80px}}.plyr--is-ios .plyr__volume{display:none!important}.plyr--is-ios.plyr--vimeo [data-plyr=mute]{display:none!important}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:fullscreen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:fullscreen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}.plyr:fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}.plyr:-moz-full-screen .plyr__captions{font-size:21px}.plyr:-ms-fullscreen .plyr__captions{font-size:21px}.plyr:fullscreen .plyr__captions{font-size:21px}}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-moz-full-screen .plyr__captions{font-size:21px}}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-ms-fullscreen .plyr__captions{font-size:21px}}.plyr--fullscreen-fallback{background:#000;border-radius:0!important;height:100%;margin:0;width:100%;bottom:0;left:0;position:fixed;right:0;top:0;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-fallback .plyr__video-embed{overflow:visible}.plyr--fullscreen-fallback.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen{display:block}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr--fullscreen-fallback.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr--fullscreen-fallback .plyr__captions{font-size:21px}}.plyr__ads{border-radius:inherit;bottom:0;cursor:pointer;left:0;overflow:hidden;position:absolute;right:0;top:0;z-index:-1}.plyr__ads>div,.plyr__ads>div iframe{height:100%;position:absolute;width:100%}.plyr__ads::after{background:rgba(47,52,61,.8);border-radius:2px;bottom:10px;color:#fff;content:attr(data-badge-text);font-size:11px;padding:2px 6px;pointer-events:none;position:absolute;right:10px;z-index:3}.plyr__ads::after:empty{display:none}.plyr__cues{background:currentColor;display:block;height:6px;left:0;margin:-3px 0 0;opacity:.8;position:absolute;top:50%;width:3px;z-index:3}.plyr--no-transition{transition:none!important}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;border:0!important;height:1px!important;padding:0!important;position:absolute!important;width:1px!important} \ No newline at end of file
diff --git a/dist/plyr.js b/dist/plyr.js
index e8697c88..90923b8c 100644
--- a/dist/plyr.js
+++ b/dist/plyr.js
@@ -1,4 +1,4 @@
-(function (global, factory) {
+typeof navigator === "object" && (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define('Plyr', factory) :
(global.Plyr = factory());
@@ -602,6 +602,24 @@ var utils = {
},
+ // Load image avoiding xhr/fetch CORS issues
+ // Server status can't be obtained this way unfortunately, so this uses "naturalWidth" to determine if the image has loaded.
+ // By default it checks if it is at least 1px, but you can add a second argument to change this.
+ loadImage: function loadImage(src) {
+ var minWidth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
+
+ return new Promise(function (resolve, reject) {
+ var image = new Image();
+ var handler = function handler() {
+ delete image.onload;
+ delete image.onerror;
+ (image.naturalWidth >= minWidth ? resolve : reject)(image);
+ };
+ Object.assign(image, { onload: handler, onerror: handler, src: src });
+ });
+ },
+
+
// Load an external script
loadScript: function loadScript(url) {
return new Promise(function (resolve, reject) {
@@ -730,7 +748,7 @@ var utils = {
// Add text node
if (utils.is.string(text)) {
- element.textContent = text;
+ element.innerText = text;
}
// Return built element
@@ -884,14 +902,16 @@ var utils = {
},
- // Toggle class on an element
- toggleClass: function toggleClass(element, className, toggle) {
+ // Mirror Element.classList.toggle, with IE compatibility for "force" argument
+ toggleClass: function toggleClass(element, className, force) {
if (utils.is.element(element)) {
- var contains = element.classList.contains(className);
-
- element.classList[toggle ? 'add' : 'remove'](className);
+ var method = 'toggle';
+ if (typeof force !== 'undefined') {
+ method = force ? 'add' : 'remove';
+ }
- return toggle && !contains || !toggle && contains;
+ element.classList[method](className);
+ return element.classList.contains(className);
}
return null;
@@ -1274,6 +1294,12 @@ var utils = {
},
+ // Clone nested objects
+ cloneDeep: function cloneDeep(object) {
+ return JSON.parse(JSON.stringify(object));
+ },
+
+
// Get the closest value in an array
closest: function closest(array, value) {
if (!utils.is.array(array) || !array.length) {
@@ -2093,7 +2119,7 @@ var controls = {
break;
}
- progress.textContent = '% ' + suffix.toLowerCase();
+ progress.innerText = '% ' + suffix.toLowerCase();
}
this.elements.display[type] = progress;
@@ -2167,7 +2193,7 @@ var controls = {
var forceHours = utils.getHours(this.duration) > 0;
// eslint-disable-next-line no-param-reassign
- target.textContent = utils.formatTime(time, forceHours, inverted);
+ target.innerText = utils.formatTime(time, forceHours, inverted);
},
@@ -2236,6 +2262,7 @@ var controls = {
// Video playing
case 'timeupdate':
case 'seeking':
+ case 'seeked':
value = utils.getPercentage(this.currentTime, this.duration);
// Set seek range value only if it's a 'natural' time event
@@ -2293,7 +2320,7 @@ var controls = {
// Calculate percentage
var percent = 0;
- var clientRect = this.elements.inputs.seek.getBoundingClientRect();
+ var clientRect = this.elements.progress.getBoundingClientRect();
var visible = this.config.classNames.tooltip + '--visible';
var toggle = function toggle(_toggle) {
@@ -2354,9 +2381,10 @@ var controls = {
},
- // Show the duration on metadataloaded
+ // Show the duration on metadataloaded or durationchange events
durationUpdate: function durationUpdate() {
- if (!this.supported.ui) {
+ // Bail if no ui or durationchange event triggered after playing/seek when invertTime is false
+ if (!this.supported.ui || !this.config.invertTime && this.currentTime) {
return;
}
@@ -2920,7 +2948,6 @@ var controls = {
// Seek tooltip
if (this.config.tooltips.seek) {
var tooltip = utils.createElement('span', {
- role: 'tooltip',
class: this.config.classNames.tooltip
}, '00:00');
@@ -3471,7 +3498,7 @@ var captions = {
// Set the span content
if (utils.is.string(caption)) {
- content.textContent = caption.trim();
+ content.innerText = caption.trim();
} else {
content.appendChild(caption);
}
@@ -3601,7 +3628,7 @@ var defaults$1 = {
// Sprite (for icons)
loadSprite: true,
iconPrefix: 'plyr',
- iconUrl: 'https://cdn.plyr.io/3.3.7/plyr.svg',
+ iconUrl: 'https://cdn.plyr.io/3.3.8/plyr.svg',
// Blank video (used to prevent errors on source change)
blankVideo: 'https://cdn.plyr.io/static/blank.mp4',
@@ -3709,8 +3736,7 @@ var defaults$1 = {
},
youtube: {
sdk: 'https://www.youtube.com/iframe_api',
- api: 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',
- poster: 'https://img.youtube.com/vi/{0}/maxresdefault.jpg,https://img.youtube.com/vi/{0}/hqdefault.jpg'
+ api: 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet'
},
googleIMA: {
sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js'
@@ -3806,13 +3832,13 @@ var defaults$1 = {
embed: 'plyr__video-embed',
embedContainer: 'plyr__video-embed__container',
poster: 'plyr__poster',
+ posterEnabled: 'plyr__poster-enabled',
ads: 'plyr__ads',
control: 'plyr__control',
playing: 'plyr--playing',
paused: 'plyr--paused',
stopped: 'plyr--stopped',
loading: 'plyr--loading',
- error: 'plyr--has-error',
hover: 'plyr--hover',
tooltip: 'plyr__tooltip',
cues: 'plyr__cues',
@@ -4207,8 +4233,10 @@ var ui = {
// Set the title
ui.setTitle.call(this);
- // Set the poster image
- ui.setPoster.call(this);
+ // Assure the poster image is set, if the property was added before the element was created
+ if (this.poster && this.elements.poster && !this.elements.poster.style.backgroundImage) {
+ ui.setPoster.call(this, this.poster);
+ }
},
@@ -4250,17 +4278,43 @@ var ui = {
},
- // Set the poster image
- setPoster: function setPoster() {
- if (!utils.is.element(this.elements.poster) || utils.is.empty(this.poster)) {
- return;
+ // Toggle poster
+ togglePoster: function togglePoster(enable) {
+ utils.toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);
+ },
+
+
+ // Set the poster image (async)
+ setPoster: function setPoster(poster) {
+ var _this2 = this;
+
+ // Set property regardless of validity
+ this.media.setAttribute('poster', poster);
+
+ // Bail if element is missing
+ if (!utils.is.element(this.elements.poster)) {
+ return Promise.reject();
}
- // Set the inline style
- var posters = this.poster.split(',');
- this.elements.poster.style.backgroundImage = posters.map(function (p) {
- return 'url(\'' + p + '\')';
- }).join(',');
+ // Load the image, and set poster if successful
+ var loadPromise = utils.loadImage(poster).then(function () {
+ _this2.elements.poster.style.backgroundImage = 'url(\'' + poster + '\')';
+ Object.assign(_this2.elements.poster.style, {
+ backgroundImage: 'url(\'' + poster + '\')',
+ // Reset backgroundSize as well (since it can be set to "cover" for padded thumbnails for youtube)
+ backgroundSize: ''
+ });
+ ui.togglePoster.call(_this2, true);
+ return poster;
+ });
+
+ // Hide the element if the poster can't be loaded (otherwise it will just be a black element covering the video)
+ loadPromise.catch(function () {
+ return ui.togglePoster.call(_this2, false);
+ });
+
+ // Return the promise so the caller can use it as well
+ return loadPromise;
},
@@ -4280,13 +4334,13 @@ var ui = {
}
// Toggle controls
- this.toggleControls(!this.playing);
+ ui.toggleControls.call(this);
},
// Check if media is loading
checkLoading: function checkLoading(event) {
- var _this2 = this;
+ var _this3 = this;
this.loading = ['stalled', 'waiting'].includes(event.type);
@@ -4295,38 +4349,24 @@ var ui = {
// Timer to prevent flicker when seeking
this.timers.loading = setTimeout(function () {
- // Toggle container class hook
- utils.toggleClass(_this2.elements.container, _this2.config.classNames.loading, _this2.loading);
+ // Update progress bar loading class state
+ utils.toggleClass(_this3.elements.container, _this3.config.classNames.loading, _this3.loading);
- // Show controls if loading, hide if done
- _this2.toggleControls(_this2.loading);
+ // Update controls visibility
+ ui.toggleControls.call(_this3);
}, this.loading ? 250 : 0);
},
- // Check if media failed to load
- checkFailed: function checkFailed() {
- var _this3 = this;
+ // Toggle controls based on state and `force` argument
+ toggleControls: function toggleControls(force) {
+ var controls$$1 = this.elements.controls;
- // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState
- this.failed = this.media.networkState === 3;
- if (this.failed) {
- utils.toggleClass(this.elements.container, this.config.classNames.loading, false);
- utils.toggleClass(this.elements.container, this.config.classNames.error, true);
+ if (controls$$1 && this.config.hideControls) {
+ // Show controls if force, loading, paused, or button interaction, otherwise hide
+ this.toggleControls(Boolean(force || this.loading || this.paused || controls$$1.pressed || controls$$1.hover));
}
-
- // Clear timer
- clearTimeout(this.timers.failed);
-
- // Timer to prevent flicker when seeking
- this.timers.loading = setTimeout(function () {
- // Toggle container class hook
- utils.toggleClass(_this3.elements.container, _this3.config.classNames.loading, _this3.loading);
-
- // Show controls if loading, hide if done
- _this3.toggleControls(_this3.loading);
- }, this.loading ? 250 : 0);
}
};
@@ -4564,13 +4604,35 @@ var Listeners = function () {
}, 0);
});
- // Toggle controls visibility based on mouse movement
- if (this.player.config.hideControls) {
- // Toggle controls on mouse events and entering fullscreen
- utils.on(this.player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', function (event) {
- _this2.player.toggleControls(event);
- });
- }
+ // Toggle controls on mouse events and entering fullscreen
+ utils.on(this.player.elements.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen', function (event) {
+ var controls$$1 = _this2.player.elements.controls;
+
+ // Remove button states for fullscreen
+
+ if (event.type === 'enterfullscreen') {
+ controls$$1.pressed = false;
+ controls$$1.hover = false;
+ }
+
+ // Show, then hide after a timeout unless another control event occurs
+ var show = ['touchstart', 'touchmove', 'mousemove'].includes(event.type);
+
+ var delay = 0;
+
+ if (show) {
+ ui.toggleControls.call(_this2.player, true);
+ // Use longer timeout for touch devices
+ delay = _this2.player.touch ? 3000 : 2000;
+ }
+
+ // Clear timer
+ clearTimeout(_this2.player.timers.controls);
+ // Timer to prevent flicker when seeking
+ _this2.player.timers.controls = setTimeout(function () {
+ return ui.toggleControls.call(_this2.player, false);
+ }, delay);
+ });
}
// Listen for media events
@@ -4581,7 +4643,7 @@ var Listeners = function () {
var _this3 = this;
// Time change on media
- utils.on(this.player.media, 'timeupdate seeking', function (event) {
+ utils.on(this.player.media, 'timeupdate seeking seeked', function (event) {
return controls.timeUpdate.call(_this3.player, event);
});
@@ -4607,7 +4669,7 @@ var Listeners = function () {
});
// Check for buffer progress
- utils.on(this.player.media, 'progress playing', function (event) {
+ utils.on(this.player.media, 'progress playing seeking seeked', function (event) {
return controls.updateProgress.call(_this3.player, event);
});
@@ -4626,9 +4688,6 @@ var Listeners = function () {
return ui.checkLoading.call(_this3.player, event);
});
- // Check if media failed to load
- // utils.on(this.player.media, 'play', event => ui.checkFailed.call(this.player, event));
-
// If autoplay, then load advertisement if required
// TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows
utils.on(this.player.media, 'playing', function () {
@@ -4850,9 +4909,47 @@ var Listeners = function () {
}
});
+ // Set range input alternative "value", which matches the tooltip time (#954)
+ on(this.player.elements.inputs.seek, 'mousedown mousemove', function (event) {
+ var clientRect = _this4.player.elements.progress.getBoundingClientRect();
+ var percent = 100 / clientRect.width * (event.pageX - clientRect.left);
+ event.currentTarget.setAttribute('seek-value', percent);
+ });
+
+ // Pause while seeking
+ on(this.player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', function (event) {
+ var seek = event.currentTarget;
+
+ // Was playing before?
+ var play = seek.hasAttribute('play-on-seeked');
+
+ // Done seeking
+ var done = ['mouseup', 'touchend', 'keyup'].includes(event.type);
+
+ // If we're done seeking and it was playing, resume playback
+ if (play && done) {
+ seek.removeAttribute('play-on-seeked');
+ _this4.player.play();
+ } else if (!done && _this4.player.playing) {
+ seek.setAttribute('play-on-seeked', '');
+ _this4.player.pause();
+ }
+ });
+
// Seek
on(this.player.elements.inputs.seek, inputEvent, function (event) {
- _this4.player.currentTime = event.target.value / event.target.max * _this4.player.duration;
+ var seek = event.currentTarget;
+
+ // If it exists, use seek-value instead of "value" for consistency with tooltip time (#954)
+ var seekTo = seek.getAttribute('seek-value');
+
+ if (utils.is.empty(seekTo)) {
+ seekTo = seek.value;
+ }
+
+ seek.removeAttribute('seek-value');
+
+ _this4.player.currentTime = seekTo / seek.max * _this4.player.duration;
}, 'seek');
// Current time invert
@@ -4887,23 +4984,48 @@ var Listeners = function () {
return controls.updateSeekTooltip.call(_this4.player, event);
});
- // Toggle controls visibility based on mouse movement
- if (this.player.config.hideControls) {
- // Watch for cursor over controls so they don't hide when trying to interact
- on(this.player.elements.controls, 'mouseenter mouseleave', function (event) {
- _this4.player.elements.controls.hover = !_this4.player.touch && event.type === 'mouseenter';
- });
+ // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)
+ on(this.player.elements.controls, 'mouseenter mouseleave', function (event) {
+ _this4.player.elements.controls.hover = !_this4.player.touch && event.type === 'mouseenter';
+ });
- // Watch for cursor over controls so they don't hide when trying to interact
- on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', function (event) {
- _this4.player.elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);
- });
+ // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)
+ on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', function (event) {
+ _this4.player.elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);
+ });
- // Focus in/out on controls
- on(this.player.elements.controls, 'focusin focusout', function (event) {
- _this4.player.toggleControls(event);
- });
- }
+ // Focus in/out on controls
+ on(this.player.elements.controls, 'focusin focusout', function (event) {
+ var _player = _this4.player,
+ config = _player.config,
+ elements = _player.elements,
+ timers = _player.timers;
+
+ // Skip transition to prevent focus from scrolling the parent element
+
+ utils.toggleClass(elements.controls, config.classNames.noTransition, event.type === 'focusin');
+
+ // Toggle
+ ui.toggleControls.call(_this4.player, event.type === 'focusin');
+
+ // If focusin, hide again after delay
+ if (event.type === 'focusin') {
+ // Restore transition
+ setTimeout(function () {
+ utils.toggleClass(elements.controls, config.classNames.noTransition, false);
+ }, 0);
+
+ // Delay a little more for keyboard users
+ var delay = _this4.touch ? 3000 : 4000;
+
+ // Clear timer
+ clearTimeout(timers.controls);
+ // Hide
+ timers.controls = setTimeout(function () {
+ return ui.toggleControls.call(_this4.player, false);
+ }, delay);
+ }
+ });
// Mouse wheel for volume
on(this.player.elements.inputs.volume, 'wheel', function (event) {
@@ -4955,6 +5077,14 @@ var Listeners = function () {
// ==========================================================================
+// Set playback state and trigger change (only on actual change)
+function assurePlaybackState(play) {
+ if (this.media.paused === play) {
+ this.media.paused = !play;
+ utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');
+ }
+}
+
var vimeo = {
setup: function setup() {
var _this = this;
@@ -5050,11 +5180,8 @@ var vimeo = {
// Get original image
url.pathname = url.pathname.split('_')[0] + '.jpg';
- // Set attribute
- player.media.setAttribute('poster', url.href);
-
- // Update
- ui.setPoster.call(player);
+ // Set and show poster
+ ui.setPoster.call(player, url.href);
});
// Setup instance
@@ -5074,15 +5201,13 @@ var vimeo = {
// Create a faux HTML5 API using the Vimeo API
player.media.play = function () {
- player.embed.play().then(function () {
- player.media.paused = false;
- });
+ assurePlaybackState.call(player, true);
+ return player.embed.play();
};
player.media.pause = function () {
- player.embed.pause().then(function () {
- player.media.paused = true;
- });
+ assurePlaybackState.call(player, false);
+ return player.embed.pause();
};
player.media.stop = function () {
@@ -5098,26 +5223,35 @@ var vimeo = {
return currentTime;
},
set: function set(time) {
- // Get current paused state
- // Vimeo will automatically play on seek
- var paused = player.media.paused;
-
- // Set seeking flag
-
- player.media.seeking = true;
-
- // Trigger seeking
- utils.dispatchEvent.call(player, player.media, 'seeking');
-
- // Seek after events
- player.embed.setCurrentTime(time).catch(function () {
+ // Vimeo will automatically play on seek if the video hasn't been played before
+
+ // Get current paused state and volume etc
+ var embed = player.embed,
+ media = player.media,
+ paused = player.paused,
+ volume = player.volume;
+
+ // Set seeking state and trigger event
+
+ media.seeking = true;
+ utils.dispatchEvent.call(player, media, 'seeking');
+
+ // If paused, mute until seek is complete
+ Promise.resolve(paused && embed.setVolume(0))
+ // Seek
+ .then(function () {
+ return embed.setCurrentTime(time);
+ })
+ // Restore paused
+ .then(function () {
+ return paused && embed.pause();
+ })
+ // Restore volume
+ .then(function () {
+ return paused && embed.setVolume(volume);
+ }).catch(function () {
// Do nothing
});
-
- // Restore pause state
- if (paused) {
- player.pause();
- }
}
});
@@ -5265,17 +5399,12 @@ var vimeo = {
});
player.embed.on('play', function () {
- // Only fire play if paused before
- if (player.media.paused) {
- utils.dispatchEvent.call(player, player.media, 'play');
- }
- player.media.paused = false;
+ assurePlaybackState.call(player, true);
utils.dispatchEvent.call(player, player.media, 'playing');
});
player.embed.on('pause', function () {
- player.media.paused = true;
- utils.dispatchEvent.call(player, player.media, 'pause');
+ assurePlaybackState.call(player, false);
});
player.embed.on('timeupdate', function (data) {
@@ -5306,7 +5435,6 @@ var vimeo = {
player.embed.on('seeked', function () {
player.media.seeking = false;
utils.dispatchEvent.call(player, player.media, 'seeked');
- utils.dispatchEvent.call(player, player.media, 'play');
});
player.embed.on('ended', function () {
@@ -5388,6 +5516,14 @@ function mapQualityUnits(levels) {
}));
}
+// Set playback state and trigger change (only on actual change)
+function assurePlaybackState$1(play) {
+ if (this.media.paused === play) {
+ this.media.paused = !play;
+ utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');
+ }
+}
+
var youtube = {
setup: function setup() {
var _this = this;
@@ -5491,7 +5627,26 @@ var youtube = {
player.media = utils.replaceElement(container, player.media);
// Set poster image
- player.media.setAttribute('poster', utils.format(player.config.urls.youtube.poster, videoId));
+ var posterSrc = function posterSrc(format) {
+ return 'https://img.youtube.com/vi/' + videoId + '/' + format + 'default.jpg';
+ };
+
+ // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)
+ utils.loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded
+ .catch(function () {
+ return utils.loadImage(posterSrc('sd'), 121);
+ }) // 480p padded 4:3
+ .catch(function () {
+ return utils.loadImage(posterSrc('hq'));
+ }) // 360p padded 4:3. Always exists
+ .then(function (image) {
+ return ui.setPoster.call(player, image.src);
+ }).then(function (posterSrc) {
+ // If the image is padded, use background-size "cover" instead (like youtube does too with their posters)
+ if (!posterSrc.includes('maxres')) {
+ player.elements.poster.style.backgroundSize = 'cover';
+ }
+ });
// Setup instance
// https://developers.google.com/youtube/iframe_api_reference
@@ -5578,10 +5733,12 @@ var youtube = {
// Create a faux HTML5 API using the YouTube API
player.media.play = function () {
+ assurePlaybackState$1.call(player, true);
instance.playVideo();
};
player.media.pause = function () {
+ assurePlaybackState$1.call(player, false);
instance.pauseVideo();
};
@@ -5599,23 +5756,17 @@ var youtube = {
return Number(instance.getCurrentTime());
},
set: function set(time) {
- // Vimeo will automatically play on seek
- var paused = player.media.paused;
-
- // Set seeking flag
+ // If paused, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).
+ if (player.paused) {
+ player.embed.mute();
+ }
+ // Set seeking state and trigger event
player.media.seeking = true;
-
- // Trigger seeking
utils.dispatchEvent.call(player, player.media, 'seeking');
// Seek after events sent
instance.seekTo(time);
-
- // Restore pause state
- if (paused) {
- player.pause();
- }
}
});
@@ -5738,6 +5889,14 @@ var youtube = {
// Reset timer
clearInterval(player.timers.playing);
+ var seeked = player.media.seeking && [1, 2].includes(event.data);
+
+ if (seeked) {
+ // Unset seeking and fire seeked event
+ player.media.seeking = false;
+ utils.dispatchEvent.call(player, player.media, 'seeked');
+ }
+
// Handle events
// -1 Unstarted
// 0 Ended
@@ -5757,7 +5916,7 @@ var youtube = {
break;
case 0:
- player.media.paused = true;
+ assurePlaybackState$1.call(player, false);
// YouTube doesn't support loop for a single video, so mimick it.
if (player.media.loop) {
@@ -5771,42 +5930,39 @@ var youtube = {
break;
case 1:
- // If we were seeking, fire seeked event
- if (player.media.seeking) {
- utils.dispatchEvent.call(player, player.media, 'seeked');
- }
- player.media.seeking = false;
-
- // Only fire play if paused before
+ // Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)
if (player.media.paused) {
- utils.dispatchEvent.call(player, player.media, 'play');
- }
- player.media.paused = false;
+ player.media.pause();
+ } else {
+ assurePlaybackState$1.call(player, true);
- utils.dispatchEvent.call(player, player.media, 'playing');
+ utils.dispatchEvent.call(player, player.media, 'playing');
- // Poll to get playback progress
- player.timers.playing = setInterval(function () {
- utils.dispatchEvent.call(player, player.media, 'timeupdate');
- }, 50);
+ // Poll to get playback progress
+ player.timers.playing = setInterval(function () {
+ utils.dispatchEvent.call(player, player.media, 'timeupdate');
+ }, 50);
- // Check duration again due to YouTube bug
- // https://github.com/sampotts/plyr/issues/374
- // https://code.google.com/p/gdata-issues/issues/detail?id=8690
- if (player.media.duration !== instance.getDuration()) {
- player.media.duration = instance.getDuration();
- utils.dispatchEvent.call(player, player.media, 'durationchange');
- }
+ // Check duration again due to YouTube bug
+ // https://github.com/sampotts/plyr/issues/374
+ // https://code.google.com/p/gdata-issues/issues/detail?id=8690
+ if (player.media.duration !== instance.getDuration()) {
+ player.media.duration = instance.getDuration();
+ utils.dispatchEvent.call(player, player.media, 'durationchange');
+ }
- // Get quality
- controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));
+ // Get quality
+ controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));
+ }
break;
case 2:
- player.media.paused = true;
-
- utils.dispatchEvent.call(player, player.media, 'pause');
+ // Restore audio (YouTube starts playing on seek if the video hasn't been played yet)
+ if (!player.muted) {
+ player.embed.unMute();
+ }
+ assurePlaybackState$1.call(player, false);
break;
@@ -6740,7 +6896,7 @@ var Plyr = function () {
}
// Set config
- this.config = utils.extend({}, defaults$1, options || {}, function () {
+ this.config = utils.extend({}, defaults$1, Plyr.defaults, options || {}, function () {
try {
return JSON.parse(_this.media.getAttribute('data-plyr-config'));
} catch (e) {
@@ -7180,114 +7336,35 @@ var Plyr = function () {
/**
* Toggle the player controls
- * @param {boolean} toggle - Whether to show the controls
+ * @param {boolean} [toggle] - Whether to show the controls
*/
}, {
key: 'toggleControls',
value: function toggleControls(toggle) {
- var _this2 = this;
-
- // We need controls of course...
- if (!utils.is.element(this.elements.controls)) {
- return;
- }
-
- // Don't hide if no UI support or it's audio
- if (!this.supported.ui || this.isAudio) {
- return;
- }
-
- var delay = 0;
- var show = toggle;
- var isEnterFullscreen = false;
-
- // Get toggle state if not set
- if (!utils.is.boolean(toggle)) {
- if (utils.is.event(toggle)) {
- // Is the enter fullscreen event
- isEnterFullscreen = toggle.type === 'enterfullscreen';
-
- // Events that show the controls
- var showEvents = ['touchstart', 'touchmove', 'mouseenter', 'mousemove', 'focusin'];
-
- // Events that delay hiding
- var delayEvents = ['touchmove', 'touchend', 'mousemove'];
-
- // Whether to show controls
- show = showEvents.includes(toggle.type);
-
- // Delay hiding on move events
- if (delayEvents.includes(toggle.type)) {
- delay = 2000;
- }
+ // Don't toggle if missing UI support or if it's audio
+ if (this.supported.ui && !this.isAudio) {
+ // Get state before change
+ var isHidden = utils.hasClass(this.elements.container, this.config.classNames.hideControls);
- // Delay a little more for keyboard users
- if (!this.touch && toggle.type === 'focusin') {
- delay = 3000;
- utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);
- }
- } else {
- show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);
- }
- }
+ // Negate the argument if not undefined since adding the class to hides the controls
+ var force = typeof toggle === 'undefined' ? undefined : !toggle;
- // Clear timer on every call
- clearTimeout(this.timers.controls);
+ // Apply and get updated state
+ var hiding = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, force);
- // If the mouse is not over the controls, set a timeout to hide them
- if (show || this.paused || this.loading) {
- // Check if controls toggled
- var toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);
-
- // Trigger event
- if (toggled) {
- utils.dispatchEvent.call(this, this.media, 'controlsshown');
+ // Close menu
+ if (hiding && this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {
+ controls.toggleMenu.call(this, false);
}
-
- // Always show controls when paused or if touch
- if (this.paused || this.loading) {
- return;
- }
-
- // Delay for hiding on touch
- if (this.touch) {
- delay = 3000;
+ // Trigger event on change
+ if (hiding !== isHidden) {
+ var eventName = hiding ? 'controlshidden' : 'controlsshown';
+ utils.dispatchEvent.call(this, this.media, eventName);
}
+ return !hiding;
}
-
- // If toggle is false or if we're playing (regardless of toggle),
- // then set the timer to hide the controls
- if (!show || this.playing) {
- this.timers.controls = setTimeout(function () {
- // We need controls of course...
- if (!utils.is.element(_this2.elements.controls)) {
- return;
- }
-
- // If the mouse is over the controls (and not entering fullscreen), bail
- if ((_this2.elements.controls.pressed || _this2.elements.controls.hover) && !isEnterFullscreen) {
- return;
- }
-
- // Restore transition behaviour
- if (!utils.hasClass(_this2.elements.container, _this2.config.classNames.hideControls)) {
- utils.toggleClass(_this2.elements.controls, _this2.config.classNames.noTransition, false);
- }
-
- // Set hideControls class
- var toggled = utils.toggleClass(_this2.elements.container, _this2.config.classNames.hideControls, _this2.config.hideControls);
-
- // Trigger event and close menu
- if (toggled) {
- utils.dispatchEvent.call(_this2, _this2.media, 'controlshidden');
-
- if (_this2.config.controls.includes('settings') && !utils.is.empty(_this2.config.settings)) {
- controls.toggleMenu.call(_this2, false);
- }
- }
- }, delay);
- }
+ return false;
}
/**
@@ -7325,7 +7402,7 @@ var Plyr = function () {
}, {
key: 'destroy',
value: function destroy(callback) {
- var _this3 = this;
+ var _this2 = this;
var soft = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
@@ -7338,22 +7415,22 @@ var Plyr = function () {
document.body.style.overflow = '';
// GC for embed
- _this3.embed = null;
+ _this2.embed = null;
// If it's a soft destroy, make minimal changes
if (soft) {
- if (Object.keys(_this3.elements).length) {
+ if (Object.keys(_this2.elements).length) {
// Remove elements
- utils.removeElement(_this3.elements.buttons.play);
- utils.removeElement(_this3.elements.captions);
- utils.removeElement(_this3.elements.controls);
- utils.removeElement(_this3.elements.wrapper);
+ utils.removeElement(_this2.elements.buttons.play);
+ utils.removeElement(_this2.elements.captions);
+ utils.removeElement(_this2.elements.controls);
+ utils.removeElement(_this2.elements.wrapper);
// Clear for GC
- _this3.elements.buttons.play = null;
- _this3.elements.captions = null;
- _this3.elements.controls = null;
- _this3.elements.wrapper = null;
+ _this2.elements.buttons.play = null;
+ _this2.elements.captions = null;
+ _this2.elements.controls = null;
+ _this2.elements.wrapper = null;
}
// Callback
@@ -7362,26 +7439,26 @@ var Plyr = function () {
}
} else {
// Unbind listeners
- _this3.listeners.clear();
+ _this2.listeners.clear();
// Replace the container with the original element provided
- utils.replaceElement(_this3.elements.original, _this3.elements.container);
+ utils.replaceElement(_this2.elements.original, _this2.elements.container);
// Event
- utils.dispatchEvent.call(_this3, _this3.elements.original, 'destroyed', true);
+ utils.dispatchEvent.call(_this2, _this2.elements.original, 'destroyed', true);
// Callback
if (utils.is.function(callback)) {
- callback.call(_this3.elements.original);
+ callback.call(_this2.elements.original);
}
// Reset state
- _this3.ready = false;
+ _this2.ready = false;
// Clear for garbage collection
setTimeout(function () {
- _this3.elements = null;
- _this3.media = null;
+ _this2.elements = null;
+ _this2.media = null;
}, 200);
}
};
@@ -7900,10 +7977,7 @@ var Plyr = function () {
return;
}
- if (utils.is.string(input)) {
- this.media.setAttribute('poster', input);
- ui.setPoster.call(this);
- }
+ ui.setPoster.call(this, input);
}
/**
@@ -8084,6 +8158,8 @@ var Plyr = function () {
return Plyr;
}();
+Plyr.defaults = utils.cloneDeep(defaults$1);
+
return Plyr;
})));
diff --git a/dist/plyr.js.map b/dist/plyr.js.map
index 8f283542..c9c400b7 100644
--- a/dist/plyr.js.map
+++ b/dist/plyr.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../node_modules/loadjs/dist/loadjs.umd.js","storage.js","types.js","utils.js","support.js","html5.js","i18n.js","controls.js","captions.js","console.js","defaults.js","fullscreen.js","ui.js","listeners.js","plugins/vimeo.js","plugins/youtube.js","media.js","plugins/ads.js","source.js","plyr.js"],"names":["define","this","Storage","player","enabled","config","storage","key","supported","store","window","localStorage","getItem","utils","is","empty","json","JSON","parse","string","length","object","get","extend","setItem","stringify","test","removeItem","e","providers","types","input","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","instanceof","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","kind","array","nodeList","keys","constructor","document","documentMode","documentElement","style","navigator","userAgent","platform","url","responseType","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","responseText","response","Error","statusText","open","send","id","prefix","hasId","isCached","exists","querySelectorAll","injectSprite","data","innerHTML","body","insertBefore","childNodes","useStorage","container","createElement","toggleHidden","setAttribute","cached","call","content","fetch","then","result","catch","Math","floor","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","entries","value","sel","existingAttributes","existing","split","selector","s","trim","className","replace","stripped","parts","start","charAt","class","hidden","hide","boolean","hasAttribute","removeAttribute","toggle","contains","classList","prototype","match","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelector","focused","activeElement","focusable","getElements","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","support","passiveListeners","bubbles","detail","CustomEvent","assign","dispatchEvent","toggleState","pressed","getAttribute","state","args","toString","i","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","source","shift","filter","item","indexOf","reduce","prev","curr","abs","youtube","vimeo","regex","$2","parser","href","search","startsWith","parseUrl","hashes","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","getRatio","w","h","ratio","transitionEndEvent","undefined","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","defineProperty","removeEventListener","range","matchMedia","html5","getSources","sizes","dedupe","mime","currentTime","playing","src","load","play","blankVideo","debug","log","i18n","seekTime","title","controls","URL","iconUrl","location","cors","host","isIE","svg4everybody","getElement","selectors","buttons","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","classNames","tooltip","error","warn","toggleNativeControls","namespace","getIconUrl","iconPath","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","badge","menu","buttonType","button","toCamelCase","label","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","push","updateRangeFill","suffix","list","checked","radio","faux","insertAdjacentHTML","forceHours","setRange","muted","setProgress","getElementsByTagName","nodeValue","getPercentage","buffered","isWebkit","setProperty","tooltips","percent","clientRect","getBoundingClientRect","visible","toggleClass","touch","pageX","left","hasClass","parseFloat","updateTimeDisplay","invert","invertTime","seeking","updateProgress","hasDuration","displayDuration","paused","updateSeekTooltip","setting","tabs","panes","quality","toggleTab","checkMenu","emptyElement","getBadge","createBadge","sort","a","b","sorting","getLabel","createMenuItem","updateSetting","pane","active","some","lang","language","default","getTracks","tracks","track","unshift","speed","isVimeo","values","tab","form","show","isMenuItem","isButton","stopPropagation","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","update","create","findElements","repaint","labels","stored","isYouTube","textTracks","setCaptionsMenu","insertAfter","hostname","protocol","createObjectURL","blob","setLanguage","setCue","mode","currentTrack","getCurrentTrack","activeCues","embed","enableTextTrack","cue","setText","getCueAsHTML","caption","noop","Console","console","bind","defaults","userLanguage","onChange","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","fallback","Fullscreen","property","native","iosNative","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","exitFullscreen","action","enter","exit","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","pre","uiSupported","listeners","inject","setup","loop","updateVolume","timeUpdate","checkPlaying","isTouch","ready","setTitle","setPoster","isEmbed","iframe","poster","posters","backgroundImage","p","stopped","toggleControls","loading","timers","setTimeout","failed","networkState","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","repeat","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","keyboard","global","tabFocus","hideControls","durationUpdate","hasAudio","resetOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","set","concat","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","showHomeTab","showTab","toggleInvert","hover","webkitDirectionInvertedFromDevice","step","direction","deltaY","deltaX","setAspectRatio","Vimeo","loadScript","urls","sdk","padding","paddingBottom","offset","transform","autoplay","buildUrlParams","parseVimeoId","embedContainer","replaceElement","thumbnail_large","pathname","Player","autopause","disableTextTrack","stop","setCurrentTime","selected","setPlaybackRate","setVolume","setLoop","currentSrc","getVideoUrl","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","cues","stripHTML","frame","seconds","build","mapQualityUnit","mapQualityUnits","levels","level","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","google","items","snippet","currentId","parseYouTubeId","generateId","message","instance","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","seekTo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","buffering","setInterval","getVideoLoadedFraction","lastBuffered","getAvailableQualityLevels","wrap","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","handlers","handler","apply","Date","now","base","insertElement","attribute","cancelRequests","check","crossorigin","addStyleHook","insertElements","Plyr","jQuery","plyr","original","tagName","getProviderByUrl","getUrlParams","truthy","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","showEvents","delayEvents","noTransition","toggled","soft","done","clear","unload","targetTime","end","fauxDuration","realDuration","min","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","inline","webkitPresentationMode","t"],"mappings":"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","file":"plyr.js","sourcesContent":["(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\nimport Storage from './storage';\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, NodeList);\n },\n element(input) {\n return this.instanceof(input, Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, Event);\n },\n cue(input) {\n return this.instanceof(input, TextTrackCue) || this.instanceof(input, VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n const useStorage = Storage.supported;\n\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (useStorage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (useStorage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove element(s)\n removeElement(element) {\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: this,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Format string\n format(input, ...args) {\n if (utils.is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => utils.is.string(args[i]) ? args[i] : '');\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Restore time\n player.currentTime = currentTime;\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\n });\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n\n\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const attributes = utils.getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = utils.createElement('div', utils.extend(attributes, {\n class: `plyr__time ${attributes.class}`,\n 'aria-label': i18n.get(type, this.config),\n }), '00:00');\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, forceHours, inverted);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n controls.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n controls.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n setProgress(this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n controls.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n controls.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n controls.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n utils.toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 2160:\n label = '4K';\n break;\n\n case 1440:\n case 1080:\n case 720:\n label = 'HD';\n break;\n\n case 576:\n case 480:\n label = 'SD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n const label = controls.getLabel.call(this, 'quality', quality);\n controls.createMenuItem.call(this, quality, list, type, label, getBadge(quality));\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}&times;`;\n\n case 'quality':\n if (utils.is.number(value)) {\n return `${value}p`;\n }\n\n return utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n if (this.captions.active) {\n if (this.options.captions.length > 2 || !this.options.captions.some(lang => lang === 'enabled')) {\n value = this.captions.language;\n } else {\n value = 'enabled';\n }\n } else {\n value = '';\n }\n\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const toggle = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: !utils.is.empty(track.language) ? track.language : 'enabled',\n label: captions.getLabel.call(this, track),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label,\n track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null,\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n // Store reference\n this.options.captions = tracks.map(track => track.language);\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => {\n const label = controls.getLabel.call(this, 'speed', speed);\n controls.createMenuItem.call(this, speed, list, type, label);\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.hasAttribute('hidden');\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n utils.toggleHidden(form, !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n utils.toggleHidden(current, true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n utils.toggleHidden(pane, false);\n\n const tabs = utils.getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.cors) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([\n key,\n value,\n ]) => {\n result = utils.replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (utils.is.string(this.config.controls)) {\n container = replace(container);\n } else if (utils.is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n const tracks = captions.getTracks.call(this);\n\n if (!tracks.length) {\n return null;\n }\n\n // Get track based on current language\n let track = tracks.find(track => track.language.toLowerCase() === this.language);\n\n // Get the <track> with default attribute\n if (!track) {\n track = utils.getElement.call(this, 'track[default]');\n }\n\n // Get the first track\n if (!track) {\n [track] = tracks;\n }\n\n return track;\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Reset to start when playback ended\n resetOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.3.7/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: (navigator.language || navigator.userLanguage).split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime}s',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime}s',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/v2/video/{0}.json',\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api: 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n poster: 'https://img.youtube.com/vi/{0}/maxresdefault.jpg,https://img.youtube.com/vi/{0}/hqdefault.jpg',\n },\n googleIMA: {\n sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n ads: 'plyr__ads',\n control: 'plyr__control',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.property = Fullscreen.property;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (utils.is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n controls.updateVolume.call(this);\n\n // Reset time display\n controls.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Set the poster image\n ui.setPoster.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n\n // Set the poster image\n setPoster() {\n if (!utils.is.element(this.elements.poster) || utils.is.empty(this.poster)) {\n return;\n }\n\n // Set the inline style\n const posters = this.poster.split(',');\n this.elements.poster.style.backgroundImage = posters.map(p => `url('${p}')`).join(',');\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Only update controls on non timeupdate events\n if (utils.is.event(event) && event.type === 'timeupdate') {\n return;\n }\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.player.toggleControls(event);\n });\n }\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking', event => controls.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadeddata loadedmetadata', event => controls.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing', event => controls.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => controls.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied timeupdate', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // Check if media failed to load\n // utils.on(this.player.media, 'play', event => ui.checkFailed.call(this.player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n showHomeTab();\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n this.player.currentTime = event.target.value / event.target.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n this.player.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n // muted: player.muted,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = utils.format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div', { class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Get poster image\n utils.fetch(utils.format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (utils.is.empty(response)) {\n return;\n }\n\n // Get the URL for thumbnail\n const url = new URL(response[0].thumbnail_large);\n\n // Get original image\n url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n // Set attribute\n player.media.setAttribute('poster', url.href);\n\n // Update\n ui.setPoster.call(player);\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe, {\n autopause: player.config.autopause,\n muted: player.muted,\n });\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time).catch(() => {\n // Do nothing\n });\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = utils.format(this.config.urls.youtube.api, videoId, key);\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Set poster image\n player.media.setAttribute('poster', utils.format(player.config.urls.youtube.poster, videoId));\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport utils from './utils';\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = utils.createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n html5.extend.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport i18n from '../i18n';\nimport utils from '../utils';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n get enabled() {\n return this.player.isVideo && this.player.config.ads.enabled && !utils.is.empty(this.publisherId);\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.sdk)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n // Mute based on current state\n request.setAdWillPlayMuted(!this.player.muted);\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!utils.is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (utils.is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport { providers } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if (!utils.is.empty(input.poster)) {\n this.poster = input.poster;\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.3.7\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport Console from './console';\nimport controls from './controls';\nimport defaults from './defaults';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport { providers, types } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n captions: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n const clone = this.media.cloneNode(true);\n clone.autoplay = false;\n this.elements.original = clone;\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(params.playsinline);\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended);\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get stopped state\n */\n get stopped() {\n return Boolean(this.paused && this.currentTime === 0);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (utils.is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // True duration\n const realDuration = this.media ? Number(this.media.duration) : 0;\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality) || quality === 0) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isVideo) {\n this.debug.warn('Poster can only be set for video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n ui.setPoster.call(this);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n this.toggleCaptions(false);\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // Check for support\n if (!this.options.captions.includes(language)) {\n this.debug.warn(`Unsupported language option: ${language}`);\n return;\n }\n\n // Ensure captions are enabled\n this.toggleCaptions(true);\n\n // Enabled only\n if (language === 'enabled') {\n return;\n }\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Events that show the controls\n const showEvents = [\n 'touchstart',\n 'touchmove',\n 'mouseenter',\n 'mousemove',\n 'focusin',\n ];\n\n // Events that delay hiding\n const delayEvents = [\n 'touchmove',\n 'touchend',\n 'mousemove',\n ];\n\n // Whether to show controls\n show = showEvents.includes(toggle.type);\n\n // Delay hiding on move events\n if (delayEvents.includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (!this.touch && toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (this.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Set hideControls class\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, this.config.hideControls);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (utils.is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (utils.is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (utils.is.array(selector)) {\n targets = selector.filter(i => utils.is.element(i));\n }\n\n if (utils.is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nexport default Plyr;\n"]} \ No newline at end of file
+{"version":3,"sources":["../../node_modules/loadjs/dist/loadjs.umd.js","storage.js","types.js","utils.js","support.js","html5.js","i18n.js","controls.js","captions.js","console.js","defaults.js","fullscreen.js","ui.js","listeners.js","plugins/vimeo.js","plugins/youtube.js","media.js","plugins/ads.js","source.js","plyr.js"],"names":["define","this","Storage","player","enabled","config","storage","key","supported","store","window","localStorage","getItem","utils","is","empty","json","JSON","parse","string","length","object","get","extend","setItem","stringify","test","removeItem","e","providers","types","input","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","instanceof","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","kind","array","nodeList","keys","constructor","document","documentMode","documentElement","style","navigator","userAgent","platform","url","responseType","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","responseText","response","Error","statusText","open","send","src","minWidth","image","Image","handler","onload","onerror","naturalWidth","assign","id","prefix","hasId","isCached","exists","querySelectorAll","injectSprite","data","innerHTML","body","insertBefore","childNodes","useStorage","container","createElement","toggleHidden","setAttribute","cached","call","content","fetch","then","result","catch","Math","floor","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","innerText","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","entries","value","sel","existingAttributes","existing","split","selector","s","trim","className","replace","stripped","parts","start","charAt","class","hidden","hide","boolean","hasAttribute","removeAttribute","force","method","classList","contains","prototype","match","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelector","focused","activeElement","toggle","focusable","getElements","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","support","passiveListeners","bubbles","detail","CustomEvent","dispatchEvent","toggleState","pressed","getAttribute","state","args","toString","i","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","source","shift","filter","item","indexOf","reduce","prev","curr","abs","youtube","vimeo","regex","$2","parser","href","search","startsWith","parseUrl","hashes","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","width","height","getRatio","w","h","ratio","transitionEndEvent","undefined","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","defineProperty","removeEventListener","range","matchMedia","html5","getSources","sizes","dedupe","mime","currentTime","playing","load","play","blankVideo","debug","log","i18n","seekTime","title","controls","URL","iconUrl","location","cors","host","isIE","svg4everybody","getElement","selectors","buttons","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","classNames","tooltip","error","warn","toggleNativeControls","namespace","getIconUrl","iconPath","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","badge","menu","buttonType","button","toCamelCase","label","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","push","updateRangeFill","suffix","list","checked","radio","faux","insertAdjacentHTML","forceHours","setRange","muted","setProgress","getElementsByTagName","nodeValue","getPercentage","buffered","isWebkit","setProperty","tooltips","percent","clientRect","getBoundingClientRect","visible","toggleClass","touch","pageX","left","hasClass","parseFloat","updateTimeDisplay","invert","invertTime","seeking","updateProgress","hasDuration","displayDuration","paused","updateSeekTooltip","setting","tabs","panes","quality","toggleTab","checkMenu","emptyElement","getBadge","createBadge","sort","a","b","sorting","getLabel","createMenuItem","updateSetting","pane","active","some","lang","language","default","getTracks","tracks","track","unshift","speed","isVimeo","values","tab","form","show","isMenuItem","isButton","stopPropagation","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","update","create","findElements","repaint","labels","stored","isYouTube","textTracks","setCaptionsMenu","insertAfter","hostname","protocol","createObjectURL","blob","setLanguage","setCue","mode","currentTrack","getCurrentTrack","activeCues","embed","enableTextTrack","cue","setText","getCueAsHTML","caption","noop","Console","console","bind","defaults","userLanguage","onChange","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","fallback","Fullscreen","property","native","iosNative","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","exitFullscreen","action","enter","exit","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","pre","uiSupported","listeners","inject","setup","loop","updateVolume","timeUpdate","checkPlaying","isTouch","ready","setTitle","poster","backgroundImage","setPoster","isEmbed","iframe","enable","posterEnabled","loadPromise","loadImage","togglePoster","stopped","toggleControls","loading","timers","setTimeout","hideControls","hover","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","repeat","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","keyboard","global","tabFocus","delay","durationUpdate","hasAudio","resetOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","set","concat","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","showHomeTab","showTab","currentTarget","done","seekTo","toggleInvert","noTransition","webkitDirectionInvertedFromDevice","step","direction","deltaY","deltaX","assurePlaybackState","setAspectRatio","Vimeo","loadScript","urls","sdk","padding","paddingBottom","offset","transform","autoplay","buildUrlParams","parseVimeoId","embedContainer","replaceElement","thumbnail_large","pathname","Player","autopause","disableTextTrack","stop","setVolume","setCurrentTime","selected","setPlaybackRate","setLoop","currentSrc","getVideoUrl","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","cues","stripHTML","frame","seconds","build","mapQualityUnit","mapQualityUnits","levels","level","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","google","items","snippet","currentId","parseYouTubeId","generateId","posterSrc","backgroundSize","message","instance","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","buffering","setInterval","getVideoLoadedFraction","lastBuffered","seeked","getAvailableQualityLevels","unMute","wrap","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","handlers","apply","Date","now","base","insertElement","attribute","cancelRequests","check","crossorigin","addStyleHook","insertElements","Plyr","failed","jQuery","plyr","original","tagName","getProviderByUrl","getUrlParams","truthy","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","clear","unload","targetTime","end","fauxDuration","realDuration","min","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","inline","webkitPresentationMode","t","cloneDeep"],"mappings":"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","file":"plyr.js","sourcesContent":["(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\nimport Storage from './storage';\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, NodeList);\n },\n element(input) {\n return this.instanceof(input, Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, Event);\n },\n cue(input) {\n return this.instanceof(input, TextTrackCue) || this.instanceof(input, VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load image avoiding xhr/fetch CORS issues\n // Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded.\n // By default it checks if it is at least 1px, but you can add a second argument to change this.\n loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n Object.assign(image, {onload: handler, onerror: handler, src});\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n const useStorage = Storage.supported;\n\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (useStorage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (useStorage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove element(s)\n removeElement(element) {\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\n toggleClass(element, className, force) {\n if (utils.is.element(element)) {\n let method = 'toggle';\n if (typeof force !== 'undefined') {\n method = force ? 'add' : 'remove';\n }\n\n element.classList[method](className);\n return element.classList.contains(className);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: this,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Format string\n format(input, ...args) {\n if (utils.is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => (utils.is.string(args[i]) ? args[i] : ''));\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Clone nested objects\n cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Restore time\n player.currentTime = currentTime;\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\n });\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n\n\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.innerText = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const attributes = utils.getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = utils.createElement('div', utils.extend(attributes, {\n class: `plyr__time ${attributes.class}`,\n 'aria-label': i18n.get(type, this.config),\n }), '00:00');\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.innerText = utils.formatTime(time, forceHours, inverted);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n controls.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n case 'seeked':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n controls.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n setProgress(this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.progress.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n controls.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n controls.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded or durationchange events\n durationUpdate() {\n // Bail if no ui or durationchange event triggered after playing/seek when invertTime is false\n if (!this.supported.ui || (!this.config.invertTime && this.currentTime)) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n controls.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n utils.toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 2160:\n label = '4K';\n break;\n\n case 1440:\n case 1080:\n case 720:\n label = 'HD';\n break;\n\n case 576:\n case 480:\n label = 'SD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n const label = controls.getLabel.call(this, 'quality', quality);\n controls.createMenuItem.call(this, quality, list, type, label, getBadge(quality));\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}&times;`;\n\n case 'quality':\n if (utils.is.number(value)) {\n return `${value}p`;\n }\n\n return utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n if (this.captions.active) {\n if (this.options.captions.length > 2 || !this.options.captions.some(lang => lang === 'enabled')) {\n value = this.captions.language;\n } else {\n value = 'enabled';\n }\n } else {\n value = '';\n }\n\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const toggle = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: !utils.is.empty(track.language) ? track.language : 'enabled',\n label: captions.getLabel.call(this, track),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label,\n track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null,\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n // Store reference\n this.options.captions = tracks.map(track => track.language);\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => {\n const label = controls.getLabel.call(this, 'speed', speed);\n controls.createMenuItem.call(this, speed, list, type, label);\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.hasAttribute('hidden');\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n utils.toggleHidden(form, !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n utils.toggleHidden(current, true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n utils.toggleHidden(pane, false);\n\n const tabs = utils.getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.cors) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([\n key,\n value,\n ]) => {\n result = utils.replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (utils.is.string(this.config.controls)) {\n container = replace(container);\n } else if (utils.is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n const tracks = captions.getTracks.call(this);\n\n if (!tracks.length) {\n return null;\n }\n\n // Get track based on current language\n let track = tracks.find(track => track.language.toLowerCase() === this.language);\n\n // Get the <track> with default attribute\n if (!track) {\n track = utils.getElement.call(this, 'track[default]');\n }\n\n // Get the first track\n if (!track) {\n [track] = tracks;\n }\n\n return track;\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.innerText = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Reset to start when playback ended\n resetOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.3.8/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: (navigator.language || navigator.userLanguage).split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime}s',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime}s',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/v2/video/{0}.json',\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api: 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n },\n googleIMA: {\n sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.property = Fullscreen.property;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (utils.is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n controls.updateVolume.call(this);\n\n // Reset time display\n controls.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster && this.elements.poster && !this.elements.poster.style.backgroundImage) {\n ui.setPoster.call(this, this.poster);\n }\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n\n // Toggle poster\n togglePoster(enable) {\n utils.toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n\n // Set the poster image (async)\n setPoster(poster) {\n // Set property regardless of validity\n this.media.setAttribute('poster', poster);\n\n // Bail if element is missing\n if (!utils.is.element(this.elements.poster)) {\n return Promise.reject();\n }\n\n // Load the image, and set poster if successful\n const loadPromise = utils.loadImage(poster)\n .then(() => {\n this.elements.poster.style.backgroundImage = `url('${poster}')`;\n Object.assign(this.elements.poster.style, {\n backgroundImage: `url('${poster}')`,\n // Reset backgroundSize as well (since it can be set to \"cover\" for padded thumbnails for youtube)\n backgroundSize: '',\n });\n ui.togglePoster.call(this, true);\n return poster;\n });\n\n // Hide the element if the poster can't be loaded (otherwise it will just be a black element covering the video)\n loadPromise.catch(() => ui.togglePoster.call(this, false));\n\n // Return the promise so the caller can use it as well\n return loadPromise;\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Only update controls on non timeupdate events\n if (utils.is.event(event) && event.type === 'timeupdate') {\n return;\n }\n\n // Toggle controls\n ui.toggleControls.call(this);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Update progress bar loading class state\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Update controls visibility\n ui.toggleControls.call(this);\n }, this.loading ? 250 : 0);\n },\n\n // Toggle controls based on state and `force` argument\n toggleControls(force) {\n const { controls } = this.elements;\n\n if (controls && this.config.hideControls) {\n // Show controls if force, loading, paused, or button interaction, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover));\n }\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen', event => {\n const { controls } = this.player.elements;\n\n // Remove button states for fullscreen\n if (event.type === 'enterfullscreen') {\n controls.pressed = false;\n controls.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = [\n 'touchstart',\n 'touchmove',\n 'mousemove',\n ].includes(event.type);\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(this.player, true);\n // Use longer timeout for touch devices\n delay = this.player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(this.player.timers.controls);\n // Timer to prevent flicker when seeking\n this.player.timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n });\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadeddata loadedmetadata', event => controls.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing seeking seeked', event => controls.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => controls.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied timeupdate', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n showHomeTab();\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n on(this.player.elements.inputs.seek, 'mousedown mousemove', event => {\n const clientRect = this.player.elements.progress.getBoundingClientRect();\n const percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n on(this.player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n\n // Was playing before?\n const play = seek.hasAttribute('play-on-seeked');\n\n // Done seeking\n const done = [\n 'mouseup',\n 'touchend',\n 'keyup',\n ].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute('play-on-seeked');\n this.player.play();\n } else if (!done && this.player.playing) {\n seek.setAttribute('play-on-seeked', '');\n this.player.pause();\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n const seek = event.currentTarget;\n\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (utils.is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n this.player.currentTime = seekTo / seek.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n const { config, elements, timers } = this.player;\n\n // Skip transition to prevent focus from scrolling the parent element\n utils.toggleClass(elements.controls, config.classNames.noTransition, event.type === 'focusin');\n\n // Toggle\n ui.toggleControls.call(this.player, event.type === 'focusin');\n\n // If focusin, hide again after delay\n if (event.type === 'focusin') {\n // Restore transition\n setTimeout(() => {\n utils.toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for keyboard users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n // Hide\n timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n }\n });\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (this.media.paused === play) {\n this.media.paused = !play;\n utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n // muted: player.muted,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = utils.format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div', { class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Get poster image\n utils.fetch(utils.format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (utils.is.empty(response)) {\n return;\n }\n\n // Get the URL for thumbnail\n const url = new URL(response[0].thumbnail_large);\n\n // Get original image\n url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n // Set and show poster\n ui.setPoster.call(player, url.href);\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe, {\n autopause: player.config.autopause,\n muted: player.muted,\n });\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n return player.embed.play();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n return player.embed.pause();\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Vimeo will automatically play on seek if the video hasn't been played before\n\n // Get current paused state and volume etc\n const { embed, media, paused, volume } = player;\n\n // Set seeking state and trigger event\n media.seeking = true;\n utils.dispatchEvent.call(player, media, 'seeking');\n\n // If paused, mute until seek is complete\n Promise.resolve(paused && embed.setVolume(0))\n // Seek\n .then(() => embed.setCurrentTime(time))\n // Restore paused\n .then(() => paused && embed.pause())\n // Restore volume\n .then(() => paused && embed.setVolume(volume))\n .catch(() => {\n // Do nothing\n });\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n assurePlaybackState.call(player, true);\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n assurePlaybackState.call(player, false);\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (this.media.paused === play) {\n this.media.paused = !play;\n utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = utils.format(this.config.urls.youtube.api, videoId, key);\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Set poster image\n const posterSrc = format => `https://img.youtube.com/vi/${videoId}/${format}default.jpg`;\n\n // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)\n utils.loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n .catch(() => utils.loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n .catch(() => utils.loadImage(posterSrc('hq'))) // 360p padded 4:3. Always exists\n .then(image => ui.setPoster.call(player, image.src))\n .then(posterSrc => {\n // If the image is padded, use background-size \"cover\" instead (like youtube does too with their posters)\n if (!posterSrc.includes('maxres')) {\n player.elements.poster.style.backgroundSize = 'cover';\n }\n });\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n instance.playVideo();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // If paused, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n if (player.paused) {\n player.embed.mute();\n }\n\n // Set seeking state and trigger event\n player.media.seeking = true;\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n const seeked = player.media.seeking && [\n 1,\n 2,\n ].includes(event.data);\n\n if (seeked) {\n // Unset seeking and fire seeked event\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n assurePlaybackState.call(player, false);\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)\n if (player.media.paused) {\n player.media.pause();\n } else {\n assurePlaybackState.call(player, true);\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\n }\n\n break;\n\n case 2:\n // Restore audio (YouTube starts playing on seek if the video hasn't been played yet)\n if (!player.muted) {\n player.embed.unMute();\n }\n assurePlaybackState.call(player, false);\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport utils from './utils';\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = utils.createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n html5.extend.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport i18n from '../i18n';\nimport utils from '../utils';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n get enabled() {\n return this.player.isVideo && this.player.config.ads.enabled && !utils.is.empty(this.publisherId);\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.sdk)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n // Mute based on current state\n request.setAdWillPlayMuted(!this.player.muted);\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!utils.is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (utils.is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport { providers } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if (!utils.is.empty(input.poster)) {\n this.poster = input.poster;\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.3.8\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport Console from './console';\nimport controls from './controls';\nimport defaults from './defaults';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport { providers, types } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n Plyr.defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n captions: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n const clone = this.media.cloneNode(true);\n clone.autoplay = false;\n this.elements.original = clone;\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(params.playsinline);\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended);\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get stopped state\n */\n get stopped() {\n return Boolean(this.paused && this.currentTime === 0);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (utils.is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // True duration\n const realDuration = this.media ? Number(this.media.duration) : 0;\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality) || quality === 0) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isVideo) {\n this.debug.warn('Poster can only be set for video');\n return;\n }\n\n ui.setPoster.call(this, input);\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n this.toggleCaptions(false);\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // Check for support\n if (!this.options.captions.includes(language)) {\n this.debug.warn(`Unsupported language option: ${language}`);\n return;\n }\n\n // Ensure captions are enabled\n this.toggleCaptions(true);\n\n // Enabled only\n if (language === 'enabled') {\n return;\n }\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} [toggle] - Whether to show the controls\n */\n toggleControls(toggle) {\n // Don't toggle if missing UI support or if it's audio\n if (this.supported.ui && !this.isAudio) {\n // Get state before change\n const isHidden = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n\n // Negate the argument if not undefined since adding the class to hides the controls\n const force = typeof toggle === 'undefined' ? undefined : !toggle;\n\n // Apply and get updated state\n const hiding = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n // Close menu\n if (hiding && this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n utils.dispatchEvent.call(this, this.media, eventName);\n }\n return !hiding;\n }\n return false;\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (utils.is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (utils.is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (utils.is.array(selector)) {\n targets = selector.filter(i => utils.is.element(i));\n }\n\n if (utils.is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = utils.cloneDeep(defaults);\n\nexport default Plyr;\n"]} \ No newline at end of file
diff --git a/dist/plyr.min.js b/dist/plyr.min.js
index db415594..79d367bf 100644
--- a/dist/plyr.min.js
+++ b/dist/plyr.min.js
@@ -1,2 +1,2 @@
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var e,t,i=(function(e,t){var i;i=function(){var e=function(){},t={},i={},n={};function s(e,t){if(e){var s=n[e];if(i[e]=t,s)for(;s.length;)s[0](e,t),s.splice(0,1)}}function a(t,i){t.call&&(t={success:t}),i.length?(t.error||e)(i):(t.success||e)(t)}function l(t,i,n,s){var a,r,o=document,c=n.async,u=(n.numRetries||0)+1,d=n.before||e,p=t.replace(/^(css|img)!/,"");s=s||0,/(^css!|\.css$)/.test(t)?(a=!0,(r=o.createElement("link")).rel="stylesheet",r.href=p):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(r=o.createElement("img")).src=p:((r=o.createElement("script")).src=t,r.async=void 0===c||c),r.onload=r.onerror=r.onbeforeload=function(e){var o=e.type[0];if(a&&"hideFocus"in r)try{r.sheet.cssText.length||(o="e")}catch(e){o="e"}if("e"==o&&(s+=1)<u)return l(t,i,n,s);i(t,o,e.defaultPrevented)},!1!==d(t,r)&&o.head.appendChild(r)}function r(e,i,n){var r,o;if(i&&i.trim&&(r=i),o=(r?n:i)||{},r){if(r in t)throw"LoadJS";t[r]=!0}!function(e,t,i){var n,s,a=(e=e.push?e:[e]).length,r=a,o=[];for(n=function(e,i,n){if("e"==i&&o.push(e),"b"==i){if(!n)return;o.push(e)}--a||t(o)},s=0;s<r;s++)l(e[s],n,i)}(e,function(e){a(o,e),s(r,e)},o)}return r.ready=function(e,t){return function(e,t){var s,a,l,r=[],o=(e=e.push?e:[e]).length,c=o;for(s=function(e,i){i.length&&r.push(e),--c||t(r)};o--;)a=e[o],(l=i[a])?s(a,l):(n[a]=n[a]||[]).push(s)}(e,function(e){a(t,e)}),r},r.done=function(e){s(e,[])},r.reset=function(){t={},i={},n={}},r.isDefined=function(e){return e in t},r},e.exports=i()}(e={exports:{}},e.exports),e.exports),n=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},s=function(){function e(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t}}(),a=function(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e},l=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var i=[],n=!0,s=!1,a=void 0;try{for(var l,r=e[Symbol.iterator]();!(n=(l=r.next()).done)&&(i.push(l.value),!t||i.length!==t);n=!0);}catch(e){s=!0,a=e}finally{try{!n&&r.return&&r.return()}finally{if(s)throw a}}return i}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),r=function(){function e(t){n(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return s(e,[{key:"get",value:function(t){if(!e.supported)return null;var i=window.localStorage.getItem(this.key);if(u.is.empty(i))return null;var n=JSON.parse(i);return u.is.string(t)&&t.length?n[t]:n}},{key:"set",value:function(t){if(e.supported&&this.enabled&&u.is.object(t)){var i=this.get();u.is.empty(i)&&(i={}),u.extend(i,t),window.localStorage.setItem(this.key,JSON.stringify(i))}}}],[{key:"supported",get:function(){try{if(!("localStorage"in window))return!1;return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}(),o={html5:"html5",youtube:"youtube",vimeo:"vimeo"},c={audio:"audio",video:"video"},u={is:{object:function(e){return this.getConstructor(e)===Object},number:function(e){return this.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return this.getConstructor(e)===String},boolean:function(e){return this.getConstructor(e)===Boolean},function:function(e){return this.getConstructor(e)===Function},array:function(e){return!this.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return this.instanceof(e,WeakMap)},nodeList:function(e){return this.instanceof(e,NodeList)},element:function(e){return this.instanceof(e,Element)},textNode:function(e){return this.getConstructor(e)===Text},event:function(e){return this.instanceof(e,Event)},cue:function(e){return this.instanceof(e,TextTrackCue)||this.instanceof(e,VTTCue)},track:function(e){return this.instanceof(e,TextTrack)||!this.nullOrUndefined(e)&&this.string(e.kind)},url:function(e){return!this.nullOrUndefined(e)&&/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e)},nullOrUndefined:function(e){return null===e||void 0===e},empty:function(e){return this.nullOrUndefined(e)||(this.string(e)||this.array(e)||this.nodeList(e))&&!e.length||this.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)},getConstructor:function(e){return this.nullOrUndefined(e)?null:e.constructor}},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(i,n){try{var s=new XMLHttpRequest;if(!("withCredentials"in s))return;s.addEventListener("load",function(){if("text"===t)try{i(JSON.parse(s.responseText))}catch(e){i(s.responseText)}else i(s.response)}),s.addEventListener("error",function(){throw new Error(s.statusText)}),s.open("GET",e,!0),s.responseType=t,s.send()}catch(e){n(e)}})},loadScript:function(e){return new Promise(function(t,n){i(e,{success:t,error:n})})},loadSprite:function(e,t){if(u.is.string(e)){var i=u.is.string(t),n=function(){return document.querySelectorAll("#"+t).length};if(!i||!n()){var s=r.supported,a=document.createElement("div");if(u.toggleHidden(a,!0),i&&a.setAttribute("id",t),s){var l=window.localStorage.getItem("cache-"+t);if(null!==l){var o=JSON.parse(l);return void c.call(a,o.content)}}u.fetch(e).then(function(e){u.is.empty(e)||(s&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),c.call(a,e))}).catch(function(){})}}function c(e){i&&n()||(this.innerHTML=e,document.body.insertBefore(this,document.body.childNodes[0]))}},generateId:function(e){return e+"-"+Math.floor(1e4*Math.random())},wrap:function(e,t){var i=e.length?e:[e];Array.from(i).reverse().forEach(function(e,i){var n=i>0?t.cloneNode(!0):t,s=e.parentNode,a=e.nextSibling;n.appendChild(e),a?s.insertBefore(n,a):s.appendChild(n)})},createElement:function(e,t,i){var n=document.createElement(e);return u.is.object(t)&&u.setAttributes(n,t),u.is.string(i)&&(n.textContent=i),n},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,i,n){t.appendChild(u.createElement(e,i,n))},removeElement:function(e){u.is.nodeList(e)||u.is.array(e)?Array.from(e).forEach(u.removeElement):u.is.element(e)&&u.is.element(e.parentNode)&&e.parentNode.removeChild(e)},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return u.is.element(t)&&u.is.element(t.parentNode)&&u.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){u.is.element(e)&&!u.is.empty(t)&&Object.entries(t).forEach(function(t){var i=l(t,2),n=i[0],s=i[1];e.setAttribute(n,s)})},getAttributesFromSelector:function(e,t){if(!u.is.string(e)||u.is.empty(e))return{};var i={},n=t;return e.split(",").forEach(function(e){var t=e.trim(),s=t.replace(".",""),a=t.replace(/[[\]]/g,"").split("="),l=a[0],r=a.length>1?a[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":u.is.object(n)&&u.is.string(n.class)&&(n.class+=" "+s),i.class=s;break;case"#":i.id=t.replace("#","");break;case"[":i[l]=r}}),i},toggleHidden:function(e,t){if(u.is.element(e)){var i=t;u.is.boolean(i)||(i=!e.hasAttribute("hidden")),i?e.setAttribute("hidden",""):e.removeAttribute("hidden")}},toggleClass:function(e,t,i){if(u.is.element(e)){var n=e.classList.contains(t);return e.classList[i?"add":"remove"](t),i&&!n||!i&&n}return null},hasClass:function(e,t){return u.is.element(e)&&e.classList.contains(t)},matches:function(e,t){var i={Element:Element};var n=i.matches||i.webkitMatchesSelector||i.mozMatchesSelector||i.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return n.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(u.is.element(e)){var i=u.getElements.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),n=i[0],s=i[i.length-1],a=function(e){if("Tab"===e.key&&9===e.keyCode){var t=u.getFocusElement();t!==s||e.shiftKey?t===n&&e.shiftKey&&(s.focus(),e.preventDefault()):(n.focus(),e.preventDefault())}};t?u.on(this.elements.container,"keydown",a,!1):u.off(this.elements.container,"keydown",a,!1)}},toggleListener:function(e,t,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(!u.is.empty(e)&&!u.is.empty(t)&&u.is.function(i))if(u.is.nodeList(e)||u.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&u.toggleListener.call(null,e,t,i,n,s,a)});else{var l=t.split(" "),r=a;d.passiveListeners&&(r={passive:s,capture:a}),l.forEach(function(t){e[n?"addEventListener":"removeEventListener"](t,i,r)})}},on:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];u.toggleListener(e,t,i,!0,n,s)},off:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];u.toggleListener(e,t,i,!1,n,s)},dispatchEvent:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(u.is.element(e)&&!u.is.empty(t)){var s=new CustomEvent(t,{bubbles:i,detail:Object.assign({},n,{plyr:this})});e.dispatchEvent(s)}},toggleState:function(e,t){if(u.is.array(e)||u.is.nodeList(e))Array.from(e).forEach(function(e){return u.toggleState(e,t)});else if(u.is.element(e)){var i="true"===e.getAttribute("aria-pressed"),n=u.is.boolean(t)?t:!i;e.setAttribute("aria-pressed",n)}},format:function(e){for(var t=arguments.length,i=Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];return u.is.empty(e)?e:e.toString().replace(/{(\d+)}/g,function(e,t){return u.is.string(i[t])?i[t]:""})},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!u.is.number(e))return this.formatTime(null,t,i);var n=function(e){return("0"+e).slice(-2)},s=this.getHours(e),a=this.getMinutes(e),l=this.getSeconds(e);return t||s>0?s+=":":s="",(i?"-":"")+s+n(a)+":"+n(l)},replaceAll:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1"),"g"),i.toString())},toTitleCase:function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString().replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})},toPascalCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=u.replaceAll(e,"-"," "),e=u.replaceAll(e,"_"," "),e=u.toTitleCase(e),u.replaceAll(e," ","")},toCamelCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=u.toPascalCase(e)).charAt(0).toLowerCase()+e.slice(1)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,i=Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];if(!i.length)return e;var s=i.shift();return u.is.object(s)?(Object.keys(s).forEach(function(t){u.is.object(s[t])?(Object.keys(e).includes(t)||Object.assign(e,a({},t,{})),u.extend(e[t],s[t])):Object.assign(e,a({},t,s[t]))}),u.extend.apply(u,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,i=Array(e.length);t<e.length;t++)i[t]=e[t];return i}return Array.from(e)}(i)))):e},dedupe:function(e){return u.is.array(e)?e.filter(function(t,i){return e.indexOf(t)===i}):e},closest:function(e,t){return u.is.array(e)&&e.length?e.reduce(function(e,i){return Math.abs(i-t)<Math.abs(e-t)?i:e}):null},getProviderByUrl:function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?o.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{0,9}(?=\b|\/)/.test(e)?o.vimeo:null},parseYouTubeId:function(e){if(u.is.empty(e))return null;return e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if(u.is.empty(e))return null;if(u.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement("a");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith("http://")||e.startsWith("https://"))&&(t=this.parseUrl(e).search);return this.is.empty(t)?null:t.slice(t.indexOf("?")+1).split("&").reduce(function(e,t){var i=t.split("="),n=l(i,2),s=n[0],r=n[1];return Object.assign(e,a({},s,decodeURIComponent(r)))},{})},buildUrlParams:function(e){return u.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&"):""},stripHTML:function(e){var t=document.createDocumentFragment(),i=document.createElement("div");return t.appendChild(i),i.innerHTML=e,t.firstChild.innerText},getAspectRatio:function(e,t){var i=function e(t,i){return 0===i?t:e(i,t%i)}(e,t);return e/i+":"+t/i},get transitionEndEvent(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},i=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!u.is.string(i)&&t[i]},repaint:function(e){setTimeout(function(){u.toggleHidden(e,!0),e.offsetHeight,u.toggleHidden(e,!1)},0)}},d={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,i){var n=!1,s=!1,a=u.getBrowser(),l=a.isIPhone&&i&&d.playsinline;switch(t+":"+e){case"html5:video":s=(n=d.video)&&d.rangeInput&&(!a.isIPhone||l);break;case"html5:audio":s=(n=d.audio)&&d.rangeInput;break;case"youtube:video":case"vimeo:video":n=!0,s=d.rangeInput&&(!a.isIPhone||l);break;default:s=(n=d.audio&&d.video)&&d.rangeInput}return{api:n,ui:s}},pip:!u.getBrowser().isIPhone&&u.is.function(u.createElement("video").webkitSetPresentationMode),airplay:u.is.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!u.is.function(t.canPlayType))return!1;if(e.includes("codecs="))return t.canPlayType(e).replace(/no/,"");if(this.isVideo)switch(e){case"video/webm":return t.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return t.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return t.canPlayType('video/ogg; codecs="theora"').replace(/no/,"");default:return!1}else if(this.isAudio)switch(e){case"audio/mpeg":return t.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return t.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return t.canPlayType('audio/wav; codecs="1"').replace(/no/,"");default:return!1}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch(e){}return e}(),rangeInput:(t=document.createElement("input"),t.type="range","range"===t.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==u.transitionEndEvent,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},p={getSources:function(){return this.isHTML5?this.media.querySelectorAll("source"):null},getQualityOptions:function(){if(!this.isHTML5)return null;var e=p.getSources.call(this);if(u.is.empty(e))return null;var t=Array.from(e).filter(function(e){return!u.is.empty(e.getAttribute("size"))});return u.is.empty(t)?null:u.dedupe(t.map(function(e){return Number(e.getAttribute("size"))}))},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,"quality",{get:function(){var t=p.getSources.call(e);if(u.is.empty(t))return null;var i=Array.from(t).filter(function(t){return t.getAttribute("src")===e.source});return u.is.empty(i)?null:Number(i[0].getAttribute("size"))},set:function(t){var i=p.getSources.call(e);if(!u.is.empty(i)){var n=Array.from(i).filter(function(e){return Number(e.getAttribute("size"))===t});if(!u.is.empty(n)){var s=n.filter(function(t){return d.mime.call(e,t.getAttribute("type"))});if(!u.is.empty(s)){u.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:t});var a=e.currentTime,l=e.playing;e.media.src=s[0].getAttribute("src"),e.media.load(),l&&e.play(),e.currentTime=a,u.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:t})}}}}})}},cancelRequests:function(){this.isHTML5&&(u.removeElement(p.getSources()),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}},h=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(u.is.empty(e)||u.is.empty(t)||!Object.keys(t.i18n).includes(e))return"";var i=t.i18n[e],n={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(n).forEach(function(e){var t=l(e,2),n=t[0],s=t[1];i=u.replaceAll(i,n,s)}),i},m=u.getBrowser(),g={getIconUrl:function(){var e=new URL(this.config.iconUrl,window.location).host!==window.location.host||m.isIE&&!window.svg4everybody;return{url:this.config.iconUrl,cors:e}},findElements:function(){try{return this.elements.controls=u.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:u.getElements.call(this,this.config.selectors.buttons.play),pause:u.getElement.call(this,this.config.selectors.buttons.pause),restart:u.getElement.call(this,this.config.selectors.buttons.restart),rewind:u.getElement.call(this,this.config.selectors.buttons.rewind),fastForward:u.getElement.call(this,this.config.selectors.buttons.fastForward),mute:u.getElement.call(this,this.config.selectors.buttons.mute),pip:u.getElement.call(this,this.config.selectors.buttons.pip),airplay:u.getElement.call(this,this.config.selectors.buttons.airplay),settings:u.getElement.call(this,this.config.selectors.buttons.settings),captions:u.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:u.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=u.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:u.getElement.call(this,this.config.selectors.inputs.seek),volume:u.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:u.getElement.call(this,this.config.selectors.display.buffer),currentTime:u.getElement.call(this,this.config.selectors.display.currentTime),duration:u.getElement.call(this,this.config.selectors.display.duration)},u.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},createIcon:function(e,t){var i=g.getIconUrl.call(this),n=(i.cors?"":i.url)+"#"+this.config.iconPrefix,s=document.createElementNS("http://www.w3.org/2000/svg","svg");u.setAttributes(s,u.extend(t,{role:"presentation",focusable:"false"}));var a=document.createElementNS("http://www.w3.org/2000/svg","use"),l=n+"-"+e;return"href"in a?a.setAttributeNS("http://www.w3.org/1999/xlink","href",l):a.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",l),s.appendChild(a),s},createLabel:function(e,t){var i=h(e,this.config),n=Object.assign({},t);switch(e){case"pip":i="PIP";break;case"airplay":i="AirPlay"}return"class"in n?n.class+=" "+this.config.classNames.hidden:n.class=this.config.classNames.hidden,u.createElement("span",n,i)},createBadge:function(e){if(u.is.empty(e))return null;var t=u.createElement("span",{class:this.config.classNames.menu.value});return t.appendChild(u.createElement("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var i=u.createElement("button"),n=Object.assign({},t),s=u.toCamelCase(e),a=!1,l=void 0,r=void 0,o=void 0,c=void 0;switch("type"in n||(n.type="button"),"class"in n?n.class.includes(this.config.classNames.control)&&(n.class+=" "+this.config.classNames.control):n.class=this.config.classNames.control,e){case"play":a=!0,l="play",o="pause",r="play",c="pause";break;case"mute":a=!0,l="mute",o="unmute",r="volume",c="muted";break;case"captions":a=!0,l="enableCaptions",o="disableCaptions",r="captions-off",c="captions-on";break;case"fullscreen":a=!0,l="enterFullscreen",o="exitFullscreen",r="enter-fullscreen",c="exit-fullscreen";break;case"play-large":n.class+=" "+this.config.classNames.control+"--overlaid",s="play",l="play",r="play";break;default:l=s,r=e}return a?(i.appendChild(g.createIcon.call(this,c,{class:"icon--pressed"})),i.appendChild(g.createIcon.call(this,r,{class:"icon--not-pressed"})),i.appendChild(g.createLabel.call(this,o,{class:"label--pressed"})),i.appendChild(g.createLabel.call(this,l,{class:"label--not-pressed"})),n["aria-pressed"]=!1):(i.appendChild(g.createIcon.call(this,r)),i.appendChild(g.createLabel.call(this,l))),u.extend(n,u.getAttributesFromSelector(this.config.selectors.buttons[s],n)),u.setAttributes(i,n),"play"===s?(u.is.array(this.elements.buttons[s])||(this.elements.buttons[s]=[]),this.elements.buttons[s].push(i)):this.elements.buttons[s]=i,i},createRange:function(e,t){var i=u.createElement("label",{for:t.id,id:t.id+"-label",class:this.config.classNames.hidden},h(e,this.config)),n=u.createElement("input",u.extend(u.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-labelledby":t.id+"-label","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=n,g.updateRangeFill.call(this,n),{label:i,input:n}},createProgress:function(e,t){var i=u.createElement("progress",u.extend(u.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"presentation","aria-hidden":!0},t));if("volume"!==e){i.appendChild(u.createElement("span",null,"0"));var n="";switch(e){case"played":n=h("played",this.config);break;case"buffer":n=h("buffered",this.config)}i.textContent="% "+n.toLowerCase()}return this.elements.display[e]=i,i},createTime:function(e){var t=u.getAttributesFromSelector(this.config.selectors.display[e]),i=u.createElement("div",u.extend(t,{class:"plyr__time "+t.class,"aria-label":h(e,this.config)}),"00:00");return this.elements.display[e]=i,i},createMenuItem:function(e,t,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,a=arguments.length>5&&void 0!==arguments[5]&&arguments[5],l=u.createElement("li"),r=u.createElement("label",{class:this.config.classNames.control}),o=u.createElement("input",u.extend(u.getAttributesFromSelector(this.config.selectors.inputs[i]),{type:"radio",name:"plyr-"+i,value:e,checked:a,class:"plyr__sr-only"})),c=u.createElement("span",{hidden:""});r.appendChild(o),r.appendChild(c),r.insertAdjacentHTML("beforeend",n),u.is.element(s)&&r.appendChild(s),l.appendChild(r),t.appendChild(l)},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(u.is.element(e)&&u.is.number(t)){var n=u.getHours(this.duration)>0;e.textContent=u.formatTime(t,n,i)}},updateVolume:function(){this.supported.ui&&(u.is.element(this.elements.inputs.volume)&&g.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),u.is.element(this.elements.buttons.mute)&&u.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;u.is.element(e)&&(e.value=t,g.updateRangeFill.call(this,e))},updateProgress:function(e){var t=this;if(this.supported.ui&&u.is.event(e)){var i=0;if(e)switch(e.type){case"timeupdate":case"seeking":i=u.getPercentage(this.currentTime,this.duration),"timeupdate"===e.type&&g.setRange.call(this,this.elements.inputs.seek,i);break;case"playing":case"progress":!function(e,i){var n=u.is.number(i)?i:0,s=u.is.element(e)?e:t.elements.display.buffer;if(u.is.element(s)){s.value=n;var a=s.getElementsByTagName("span")[0];u.is.element(a)&&(a.childNodes[0].nodeValue=n)}}(this.elements.display.buffer,100*this.buffered)}}},updateRangeFill:function(e){var t=u.is.event(e)?e.target:e;u.is.element(t)&&"range"===t.getAttribute("type")&&(t.setAttribute("aria-valuenow",t.value),m.isWebkit&&t.style.setProperty("--value",t.value/t.max*100+"%"))},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&u.is.element(this.elements.inputs.seek)&&u.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var i=0,n=this.elements.inputs.seek.getBoundingClientRect(),s=this.config.classNames.tooltip+"--visible",a=function(e){u.toggleClass(t.elements.display.seekTooltip,s,e)};if(this.touch)a(!1);else{if(u.is.event(e))i=100/n.width*(e.pageX-n.left);else{if(!u.hasClass(this.elements.display.seekTooltip,s))return;i=parseFloat(this.elements.display.seekTooltip.style.left,10)}i<0?i=0:i>100&&(i=100),g.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*i),this.elements.display.seekTooltip.style.left=i+"%",u.is.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&a("mouseenter"===e.type)}}},timeUpdate:function(e){var t=!u.is.element(this.elements.display.duration)&&this.config.invertTime;g.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||g.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui){var e=u.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&g.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&g.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),g.updateSeekTooltip.call(this)}},toggleTab:function(e,t){u.toggleHidden(this.elements.settings.tabs[e],!t)},setQualityMenu:function(e){var t=this;if(u.is.element(this.elements.settings.panes.quality)){var i=this.elements.settings.panes.quality.querySelector("ul");u.is.array(e)&&(this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}));var n=!u.is.empty(this.options.quality)&&this.options.quality.length>1;if(g.toggleTab.call(this,"quality",n),g.checkMenu.call(this),n){u.emptyElement(i);this.options.quality.sort(function(e,i){var n=t.config.quality.options;return n.indexOf(e)>n.indexOf(i)?1:-1}).forEach(function(e){var n=g.getLabel.call(t,"quality",e);g.createMenuItem.call(t,e,i,"quality",n,function(e){var i="";switch(e){case 2160:i="4K";break;case 1440:case 1080:case 720:i="HD";break;case 576:case 480:i="SD"}return i.length?g.createBadge.call(t,i):null}(e))}),g.updateSetting.call(this,"quality",i)}}},getLabel:function(e,t){switch(e){case"speed":return 1===t?h("normal",this.config):t+"&times;";case"quality":return u.is.number(t)?t+"p":u.toTitleCase(t);case"captions":return f.getLabel.call(this);default:return null}},updateSetting:function(e,t,i){var n=this.elements.settings.panes[e],s=null,a=t;switch(e){case"captions":s=this.captions.active?this.options.captions.length>2||!this.options.captions.some(function(e){return"enabled"===e})?this.captions.language:"enabled":"";break;default:if(s=u.is.empty(i)?this[e]:i,u.is.empty(s)&&(s=this.config[e].default),!u.is.empty(this.options[e])&&!this.options[e].includes(s))return void this.debug.warn("Unsupported value of '"+s+"' for "+e);if(!this.config[e].options.includes(s))return void this.debug.warn("Disabled value of '"+s+"' for "+e)}if(u.is.element(a)||(a=n&&n.querySelector("ul")),u.is.element(a)){this.elements.settings.tabs[e].querySelector("."+this.config.classNames.menu.value).innerHTML=g.getLabel.call(this,e,s);var l=a&&a.querySelector('input[value="'+s+'"]');u.is.element(l)&&(l.checked=!0)}},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector("ul"),i=f.getTracks.call(this).length;if(g.toggleTab.call(this,"captions",i),u.emptyElement(t),g.checkMenu.call(this),i){var n=f.getTracks.call(this).map(function(t){return{language:u.is.empty(t.language)?"enabled":t.language,label:f.getLabel.call(e,t)}});n.unshift({language:"",label:h("disabled",this.config)}),n.forEach(function(i){g.createMenuItem.call(e,i.language,t,"language",i.label,"enabled"!==i.language?g.createBadge.call(e,i.language.toUpperCase()):null,i.language.toLowerCase()===e.captions.language.toLowerCase())}),this.options.captions=n.map(function(e){return e.language}),g.updateSetting.call(this,"captions",t)}},setSpeedMenu:function(e){var t=this;if(this.config.controls.includes("settings")&&this.config.settings.includes("speed")&&u.is.element(this.elements.settings.panes.speed)){u.is.array(e)?this.options.speed=e:(this.isHTML5||this.isVimeo)&&(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(e){return t.config.speed.options.includes(e)});var i=!u.is.empty(this.options.speed)&&this.options.speed.length>1;if(g.toggleTab.call(this,"speed",i),g.checkMenu.call(this),i){var n=this.elements.settings.panes.speed.querySelector("ul");u.emptyElement(n),this.options.speed.forEach(function(e){var i=g.getLabel.call(t,"speed",e);g.createMenuItem.call(t,e,n,"speed",i)}),g.updateSetting.call(this,"speed",n)}}},checkMenu:function(){var e=this.elements.settings.tabs,t=!u.is.empty(e)&&Object.values(e).some(function(e){return!e.hidden});u.toggleHidden(this.elements.settings.menu,!t)},toggleMenu:function(e){var t=this.elements.settings.form,i=this.elements.buttons.settings;if(u.is.element(t)&&u.is.element(i)){var n=u.is.boolean(e)?e:u.is.element(t)&&t.hasAttribute("hidden");if(u.is.event(e)){var s=u.is.element(t)&&t.contains(e.target),a=e.target===this.elements.buttons.settings;if(s||!s&&!a&&n)return;a&&e.stopPropagation()}u.is.element(i)&&i.setAttribute("aria-expanded",n),u.is.element(t)&&(u.toggleHidden(t,!n),u.toggleClass(this.elements.container,this.config.classNames.menu.open,n),n?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1))}},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.removeAttribute("hidden"),Array.from(t.querySelectorAll("input[name]")).forEach(function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(t);var i=t.scrollWidth,n=t.scrollHeight;return u.removeElement(t),{width:i,height:n}},showTab:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=this.elements.settings.menu,i=document.getElementById(e);if(u.is.element(i)&&"tabpanel"===i.getAttribute("role")){var n=t.querySelector('[role="tabpanel"]:not([hidden])'),s=n.parentNode;if(Array.from(t.querySelectorAll('[aria-controls="'+n.getAttribute("id")+'"]')).forEach(function(e){e.setAttribute("aria-expanded",!1)}),d.transitions&&!d.reducedMotion){s.style.width=n.scrollWidth+"px",s.style.height=n.scrollHeight+"px";var a=g.getTabSize.call(this,i);u.on(s,u.transitionEndEvent,function e(t){t.target===s&&["width","height"].includes(t.propertyName)&&(s.style.width="",s.style.height="",u.off(s,u.transitionEndEvent,e))}),s.style.width=a.width+"px",s.style.height=a.height+"px"}u.toggleHidden(n,!0),n.setAttribute("tabindex",-1),u.toggleHidden(i,!1);var l=u.getElements.call(this,'[aria-controls="'+e+'"]');Array.from(l).forEach(function(e){e.setAttribute("aria-expanded",!0)}),i.removeAttribute("tabindex"),i.querySelectorAll("button:not(:disabled), input:not(:disabled), [tabindex]")[0].focus()}},create:function(e){var t=this;if(u.is.empty(this.config.controls))return null;var i=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&i.appendChild(g.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&i.appendChild(g.createButton.call(this,"rewind")),this.config.controls.includes("play")&&i.appendChild(g.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&i.appendChild(g.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var n=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.progress)),s=g.createRange.call(this,"seek",{id:"plyr-seek-"+e.id});if(n.appendChild(s.label),n.appendChild(s.input),n.appendChild(g.createProgress.call(this,"buffer")),this.config.tooltips.seek){var a=u.createElement("span",{role:"tooltip",class:this.config.classNames.tooltip},"00:00");n.appendChild(a),this.elements.display.seekTooltip=a}this.elements.progress=n,i.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&i.appendChild(g.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&i.appendChild(g.createTime.call(this,"duration")),this.config.controls.includes("mute")&&i.appendChild(g.createButton.call(this,"mute")),this.config.controls.includes("volume")){var l=u.createElement("div",{class:"plyr__volume"}),r={max:1,step:.05,value:this.config.volume},o=g.createRange.call(this,"volume",u.extend(r,{id:"plyr-volume-"+e.id}));l.appendChild(o.label),l.appendChild(o.input),this.elements.volume=l,i.appendChild(l)}if(this.config.controls.includes("captions")&&i.appendChild(g.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!u.is.empty(this.config.settings)){var c=u.createElement("div",{class:"plyr__menu",hidden:""});c.appendChild(g.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var m=u.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,hidden:"","aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),f=u.createElement("div"),y=u.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),v=u.createElement("ul",{role:"tablist"});this.config.settings.forEach(function(i){var n=u.createElement("li",{role:"tab",hidden:""}),s=u.createElement("button",u.extend(u.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+i+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+i,"aria-expanded":!1}),h(i,t.config)),a=u.createElement("span",{class:t.config.classNames.menu.value});a.innerHTML=e[i],s.appendChild(a),n.appendChild(s),v.appendChild(n),t.elements.settings.tabs[i]=n}),y.appendChild(v),f.appendChild(y),this.config.settings.forEach(function(i){var n=u.createElement("div",{id:"plyr-settings-"+e.id+"-"+i,hidden:"","aria-labelled-by":"plyr-settings-"+e.id+"-"+i+"-tab",role:"tabpanel",tabindex:-1}),s=u.createElement("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},h(i,t.config));n.appendChild(s);var a=u.createElement("ul");n.appendChild(a),f.appendChild(n),t.elements.settings.panes[i]=n}),m.appendChild(f),c.appendChild(m),i.appendChild(c),this.elements.settings.form=m,this.elements.settings.menu=c}return this.config.controls.includes("pip")&&d.pip&&i.appendChild(g.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&d.airplay&&i.appendChild(g.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&i.appendChild(g.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(g.createButton.call(this,"play-large")),this.elements.controls=i,this.isHTML5&&g.setQualityMenu.call(this,p.getQualityOptions.call(this)),g.setSpeedMenu.call(this),i},inject:function(){var e=this;if(this.config.loadSprite){var t=g.getIconUrl.call(this);t.cors&&u.loadSprite(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var i=null;this.elements.controls=null;var n={id:this.id,seektime:this.config.seekTime,title:this.config.title},s=!0;u.is.string(this.config.controls)||u.is.element(this.config.controls)?i=this.config.controls:u.is.function(this.config.controls)?i=this.config.controls.call(this,n):(i=g.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:f.getLabel.call(this)}),s=!1);var a=function(e){var t=e;return Object.entries(n).forEach(function(e){var i=l(e,2),n=i[0],s=i[1];t=u.replaceAll(t,"{"+n+"}",s)}),t};s&&(u.is.string(this.config.controls)?i=a(i):u.is.element(i)&&(i.innerHTML=a(i.innerHTML)));var r=void 0;if(u.is.string(this.config.selectors.controls.container)&&(r=document.querySelector(this.config.selectors.controls.container)),u.is.element(r)||(r=this.elements.container),u.is.element(i)?r.appendChild(i):i&&r.insertAdjacentHTML("beforeend",i),u.is.element(this.elements.controls)||g.findElements.call(this),window.navigator.userAgent.includes("Edge")&&u.repaint(r),this.config.tooltips.controls){var o=u.getElements.call(this,[this.config.selectors.controls.wrapper," ",this.config.selectors.labels," .",this.config.classNames.hidden].join(""));Array.from(o).forEach(function(t){u.toggleClass(t,e.config.classNames.hidden,!1),u.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute("role","tooltip")})}}},f={setup:function(){if(this.supported.ui){var e=this.storage.get("language");if(u.is.empty(e)||(this.captions.language=e),u.is.empty(this.captions.language)&&(this.captions.language=this.config.captions.language.toLowerCase()),!u.is.boolean(this.captions.active)){var t=this.storage.get("captions");u.is.boolean(t)?this.captions.active=t:this.captions.active=this.config.captions.active}if(!this.isVideo||this.isYouTube||this.isHTML5&&!d.textTracks)u.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&g.setCaptionsMenu.call(this);else{u.is.element(this.elements.captions)||(this.elements.captions=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.captions)),u.insertAfter(this.elements.captions,this.elements.wrapper)),u.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!u.is.empty(f.getTracks.call(this)));var i=f.getTracks.call(this);if(!u.is.empty(i)){if(u.getBrowser().isIE&&window.URL){var n=this.media.querySelectorAll("track");Array.from(n).forEach(function(e){var t=e.getAttribute("src"),i=u.parseUrl(t);i.hostname!==window.location.href.hostname&&["http:","https:"].includes(i.protocol)&&u.fetch(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){u.removeElement(e)})})}f.setLanguage.call(this),f.show.call(this),u.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&g.setCaptionsMenu.call(this)}}}},setLanguage:function(){var e=this;if(this.isHTML5&&this.isVideo){f.getTracks.call(this).forEach(function(t){u.on(t,"cuechange",function(t){return f.setCue.call(e,t)}),t.mode="hidden"});var t=f.getCurrentTrack.call(this);u.is.track(t)&&Array.from(t.activeCues||[]).length&&f.setCue.call(this,t)}else this.isVimeo&&this.captions.active&&this.embed.enableTextTrack(this.language)},getTracks:function(){return u.is.nullOrUndefined(this.media)?[]:Array.from(this.media.textTracks||[]).filter(function(e){return["captions","subtitles"].includes(e.kind)})},getCurrentTrack:function(){var e=this,t=f.getTracks.call(this);if(!t.length)return null;var i=t.find(function(t){return t.language.toLowerCase()===e.language});(i||(i=u.getElement.call(this,"track[default]")),i)||(i=l(t,1)[0]);return i},getLabel:function(e){var t=e;return!u.is.track(t)&&d.textTracks&&this.captions.active&&(t=f.getCurrentTrack.call(this)),u.is.track(t)?u.is.empty(t.label)?u.is.empty(t.language)?h("enabled",this.config):e.language.toUpperCase():t.label:h("disabled",this.config)},setCue:function(e){var t=u.is.event(e)?e.target:e,i=t.activeCues,n=i.length&&i[0];t===f.getCurrentTrack.call(this)&&(u.is.cue(n)?f.setText.call(this,n.getCueAsHTML()):f.setText.call(this,null),u.dispatchEvent.call(this,this.media,"cuechange"))},setText:function(e){if(this.supported.ui)if(u.is.element(this.elements.captions)){var t=u.createElement("span");u.emptyElement(this.elements.captions);var i=u.is.nullOrUndefined(e)?"":e;u.is.string(i)?t.textContent=i.trim():t.appendChild(i),this.elements.captions.appendChild(t)}else this.debug.warn("No captions element to render to")},show:function(){var e=this.storage.get("captions");u.is.boolean(e)?this.captions.active=e:e=this.config.captions.active,e&&(u.toggleClass(this.elements.container,this.config.classNames.captions.active,!0),u.toggleState(this.elements.buttons.captions,!0))}},y=function(){},v=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];n(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return s(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):y}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):y}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):y}}]),e}(),b={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,resetOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.3.7/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240,"default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:(navigator.language||navigator.userLanguage).split("-")[0]},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime}s",play:"Play",pause:"Pause",fastForward:"Forward {seektime}s",seek:"Seek",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",normal:"Normal",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",enabled:"Enabled",advertisement:"Ad"},urls:{vimeo:{sdk:"https://player.vimeo.com/api/player.js",iframe:"https://player.vimeo.com/video/{0}?{1}",api:"https://vimeo.com/api/v2/video/{0}.json"},youtube:{sdk:"https://www.youtube.com/iframe_api",api:"https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet",poster:"https://img.youtube.com/vi/{0}/maxresdefault.jpg,https://img.youtube.com/vi/{0}/hqdefault.jpg"},googleIMA:{sdk:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","adscontentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',fastForward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress--buffer",played:".plyr__progress--played",loop:".plyr__progress--loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{type:"plyr--{0}",provider:"plyr--{0}",video:"plyr__video-wrapper",embed:"plyr__video-embed",embedContainer:"plyr__video-embed__container",poster:"plyr__poster",ads:"plyr__ads",control:"plyr__control",playing:"plyr--playing",paused:"plyr--paused",stopped:"plyr--stopped",loading:"plyr--loading",error:"plyr--has-error",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1,publisherId:""}},k=u.getBrowser();function w(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;u.is.element(e)&&u.toggleState(e,this.active),u.dispatchEvent.call(this.player,this.target,this.active?"enterfullscreen":"exitfullscreen",!0),k.isIos||u.trapFocus.call(this.player,this.target,this.active)}}function E(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",u.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),w.call(this)}var T=function(){function e(t){var i=this;n(this,e),this.player=t,this.prefix=e.prefix,this.property=e.property,this.scrollPosition={x:0,y:0},u.on(document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){w.call(i)}),u.on(this.player.elements.container,"dblclick",function(e){u.is.element(i.player.elements.controls)&&i.player.elements.controls.contains(e.target)||i.toggle()}),this.update()}return s(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),u.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(k.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?u.is.empty(this.prefix)||this.target[this.prefix+"Request"+this.property]():this.target.requestFullscreen():E.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(k.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(e.native)if(this.prefix){if(!u.is.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document[""+this.prefix+t+this.property]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document);else E.call(this,!1)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){return(e.native||this.player.config.fullscreen.fallback)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[""+this.prefix+this.property+"Element"]:document.fullscreenElement)===this.target:u.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return k.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if(u.is.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!u.is.function(document[t+"ExitFullscreen"])&&!u.is.function(document[t+"CancelFullScreen"]))&&(e=t,!0)}),e}},{key:"property",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}(),A=u.getBrowser(),C={addStyleHook:function(){u.toggleClass(this.elements.container,this.config.selectors.container.replace(".",""),!0),u.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void C.toggleNativeControls.call(this,!0);u.is.element(this.elements.controls)||(g.inject.call(this),this.listeners.controls()),C.toggleNativeControls.call(this),f.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,g.updateVolume.call(this),g.timeUpdate.call(this),C.checkPlaying.call(this),u.toggleClass(this.elements.container,this.config.classNames.pip.supported,d.pip&&this.isHTML5&&this.isVideo),u.toggleClass(this.elements.container,this.config.classNames.airplay.supported,d.airplay&&this.isHTML5),u.toggleClass(this.elements.container,this.config.classNames.isIos,A.isIos),u.toggleClass(this.elements.container,this.config.classNames.isTouch,this.touch),this.ready=!0,setTimeout(function(){u.dispatchEvent.call(e,e.media,"ready")},0),C.setTitle.call(this),C.setPoster.call(this)},setTitle:function(){var e=h("play",this.config);if(u.is.string(this.config.title)&&!u.is.empty(this.config.title)&&(e+=", "+this.config.title,this.elements.container.setAttribute("aria-label",this.config.title)),u.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=u.getElement.call(this,"iframe");if(!u.is.element(t))return;var i=u.is.empty(this.config.title)?"video":this.config.title,n=h("frameTitle",this.config);t.setAttribute("title",n.replace("{title}",i))}},setPoster:function(){if(u.is.element(this.elements.poster)&&!u.is.empty(this.poster)){var e=this.poster.split(",");this.elements.poster.style.backgroundImage=e.map(function(e){return"url('"+e+"')"}).join(",")}},checkPlaying:function(e){u.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),u.toggleClass(this.elements.container,this.config.classNames.paused,this.paused),u.toggleClass(this.elements.container,this.config.classNames.stopped,this.stopped),u.toggleState(this.elements.buttons.play,this.playing),u.is.event(e)&&"timeupdate"===e.type||this.toggleControls(!this.playing)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){u.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),t.toggleControls(t.loading)},this.loading?250:0)},checkFailed:function(){var e=this;this.failed=3===this.media.networkState,this.failed&&(u.toggleClass(this.elements.container,this.config.classNames.loading,!1),u.toggleClass(this.elements.container,this.config.classNames.error,!0)),clearTimeout(this.timers.failed),this.timers.loading=setTimeout(function(){u.toggleClass(e.elements.container,e.config.classNames.loading,e.loading),e.toggleControls(e.loading)},this.loading?250:0)}},S=u.getBrowser(),N=function(){function e(t){n(this,e),this.player=t,this.lastKey=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.firstTouch=this.firstTouch.bind(this)}return s(e,[{key:"handleKey",value:function(e){var t=this,i=e.keyCode?e.keyCode:e.which,n="keydown"===e.type,s=n&&i===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&u.is.number(i)){if(n){var a=u.getFocusElement();if(u.is.element(a)&&u.matches(a,this.player.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(i)&&(e.preventDefault(),e.stopPropagation()),i){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:s||(t.player.currentTime=t.player.duration/10*(i-48));break;case 32:case 75:s||this.player.togglePlay();break;case 38:this.player.increaseVolume(.1);break;case 40:this.player.decreaseVolume(.1);break;case 77:s||(this.player.muted=!this.player.muted);break;case 39:this.player.forward();break;case 37:this.player.rewind();break;case 70:this.player.fullscreen.toggle();break;case 67:s||this.player.toggleCaptions();break;case 76:this.player.loop=!this.player.loop}!this.player.fullscreen.enabled&&this.player.fullscreen.active&&27===i&&this.player.fullscreen.toggle(),this.lastKey=i}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){g.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){this.player.touch=!0,u.toggleClass(this.player.elements.container,this.player.config.classNames.isTouch,!0),u.off(document.body,"touchstart",this.firstTouch)}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.player.config.keyboard.global&&u.toggleListener(window,"keydown keyup",this.handleKey,e,!1),u.toggleListener(document.body,"click",this.toggleMenu,e),u.on(document.body,"touchstart",this.firstTouch)}},{key:"container",value:function(){var e=this;!this.player.config.keyboard.global&&this.player.config.keyboard.focused&&u.on(this.player.elements.container,"keydown keyup",this.handleKey,!1),u.on(this.player.elements.container,"focusout",function(t){u.toggleClass(t.target,e.player.config.classNames.tabFocus,!1)}),u.on(this.player.elements.container,"keydown",function(t){9===t.keyCode&&setTimeout(function(){u.toggleClass(u.getFocusElement(),e.player.config.classNames.tabFocus,!0)},0)}),this.player.config.hideControls&&u.on(this.player.elements.container,"mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen",function(t){e.player.toggleControls(t)})}},{key:"media",value:function(){var e=this;if(u.on(this.player.media,"timeupdate seeking",function(t){return g.timeUpdate.call(e.player,t)}),u.on(this.player.media,"durationchange loadeddata loadedmetadata",function(t){return g.durationUpdate.call(e.player,t)}),u.on(this.player.media,"loadeddata",function(){u.toggleHidden(e.player.elements.volume,!e.player.hasAudio),u.toggleHidden(e.player.elements.buttons.mute,!e.player.hasAudio)}),u.on(this.player.media,"ended",function(){e.player.isHTML5&&e.player.isVideo&&e.player.config.resetOnEnd&&e.player.restart()}),u.on(this.player.media,"progress playing",function(t){return g.updateProgress.call(e.player,t)}),u.on(this.player.media,"volumechange",function(t){return g.updateVolume.call(e.player,t)}),u.on(this.player.media,"playing play pause ended emptied timeupdate",function(t){return C.checkPlaying.call(e.player,t)}),u.on(this.player.media,"waiting canplay seeked playing",function(t){return C.checkLoading.call(e.player,t)}),u.on(this.player.media,"playing",function(){e.player.ads&&e.player.ads.enabled&&!e.player.ads.initialized&&e.player.ads.managerPromise.then(function(){return e.player.ads.play()}).catch(function(){return e.player.play()})}),this.player.supported.ui&&this.player.config.clickToPlay&&!this.player.isAudio){var t=u.getElement.call(this.player,"."+this.player.config.classNames.video);if(!u.is.element(t))return;u.on(t,"click",function(){e.player.config.hideControls&&e.player.touch&&!e.player.paused||(e.player.paused?e.player.play():e.player.ended?(e.player.restart(),e.player.play()):e.player.pause())})}this.player.supported.ui&&this.player.config.disableContextMenu&&u.on(this.player.elements.wrapper,"contextmenu",function(e){e.preventDefault()},!1),u.on(this.player.media,"volumechange",function(){e.player.storage.set({volume:e.player.volume,muted:e.player.muted})}),u.on(this.player.media,"ratechange",function(){g.updateSetting.call(e.player,"speed"),e.player.storage.set({speed:e.player.speed})}),u.on(this.player.media,"qualityrequested",function(t){e.player.storage.set({quality:t.detail.quality})}),u.on(this.player.media,"qualitychange",function(t){g.updateSetting.call(e.player,"quality",null,t.detail.quality)}),u.on(this.player.media,"languagechange",function(){g.updateSetting.call(e.player,"captions"),e.player.storage.set({language:e.player.language})}),u.on(this.player.media,"captionsenabled captionsdisabled",function(){g.updateSetting.call(e.player,"captions"),e.player.storage.set({captions:e.player.captions.active})}),u.on(this.player.media,this.player.config.events.concat(["keyup","keydown"]).join(" "),function(t){var i={};"error"===t.type&&(i=e.player.media.error),u.dispatchEvent.call(e.player,e.player.elements.container,t.type,!0,i)})}},{key:"controls",value:function(){var e=this,t=S.isIE?"change":"input",i=function(t,i,n){var s=e.player.config.listeners[n],a=!0;u.is.function(s)&&(a=s.call(e.player,t)),a&&u.is.function(i)&&i.call(e.player,t)},n=function(t,n,s,a){var l=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],r=e.player.config.listeners[a],o=u.is.function(r);u.on(t,n,function(e){return i(e,s,a)},l&&!o)};n(this.player.elements.buttons.play,"click",this.player.togglePlay,"play"),n(this.player.elements.buttons.restart,"click",this.player.restart,"restart"),n(this.player.elements.buttons.rewind,"click",this.player.rewind,"rewind"),n(this.player.elements.buttons.fastForward,"click",this.player.forward,"fastForward"),n(this.player.elements.buttons.mute,"click",function(){e.player.muted=!e.player.muted},"mute"),n(this.player.elements.buttons.captions,"click",this.player.toggleCaptions),n(this.player.elements.buttons.fullscreen,"click",function(){e.player.fullscreen.toggle()},"fullscreen"),n(this.player.elements.buttons.pip,"click",function(){e.player.pip="toggle"},"pip"),n(this.player.elements.buttons.airplay,"click",this.player.airplay,"airplay"),n(this.player.elements.buttons.settings,"click",function(t){g.toggleMenu.call(e.player,t)}),n(this.player.elements.settings.form,"click",function(t){t.stopPropagation();var n=function(){var t="plyr-settings-"+e.player.id+"-home";g.showTab.call(e.player,t)};if(u.matches(t.target,e.player.config.selectors.inputs.language))i(t,function(){e.player.language=t.target.value,n()},"language");else if(u.matches(t.target,e.player.config.selectors.inputs.quality))i(t,function(){e.player.quality=t.target.value,n()},"quality");else if(u.matches(t.target,e.player.config.selectors.inputs.speed))i(t,function(){e.player.speed=parseFloat(t.target.value),n()},"speed");else{var s=t.target;g.showTab.call(e.player,s.getAttribute("aria-controls"))}}),n(this.player.elements.inputs.seek,t,function(t){e.player.currentTime=t.target.value/t.target.max*e.player.duration},"seek"),this.player.config.toggleInvert&&!u.is.element(this.player.elements.display.duration)&&n(this.player.elements.display.currentTime,"click",function(){0!==e.player.currentTime&&(e.player.config.invertTime=!e.player.config.invertTime,g.timeUpdate.call(e.player))}),n(this.player.elements.inputs.volume,t,function(t){e.player.volume=t.target.value},"volume"),S.isWebkit&&n(u.getElements.call(this.player,'input[type="range"]'),"input",function(t){g.updateRangeFill.call(e.player,t.target)}),n(this.player.elements.progress,"mouseenter mouseleave mousemove",function(t){return g.updateSeekTooltip.call(e.player,t)}),this.player.config.hideControls&&(n(this.player.elements.controls,"mouseenter mouseleave",function(t){e.player.elements.controls.hover=!e.player.touch&&"mouseenter"===t.type}),n(this.player.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.player.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),n(this.player.elements.controls,"focusin focusout",function(t){e.player.toggleControls(t)})),n(this.player.elements.inputs.volume,"wheel",function(t){var i=t.webkitDirectionInvertedFromDevice,n=0;(t.deltaY<0||t.deltaX>0)&&(i?(e.player.decreaseVolume(.02),n=-1):(e.player.increaseVolume(.02),n=1)),(t.deltaY>0||t.deltaX<0)&&(i?(e.player.increaseVolume(.02),n=1):(e.player.decreaseVolume(.02),n=-1)),(1===n&&e.player.media.volume<1||-1===n&&e.player.media.volume>0)&&t.preventDefault()},"volume",!1)}},{key:"clear",value:function(){this.global(!1)}}]),e}(),x={setup:function(){var e=this;u.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),x.setAspectRatio.call(this),u.is.object(window.Vimeo)?x.ready.call(this):u.loadScript(this.config.urls.vimeo.sdk).then(function(){x.ready.call(e)}).catch(function(t){e.debug.warn("Vimeo API failed to load",t)})},setAspectRatio:function(e){var t=u.is.string(e)?e.split(":"):this.config.ratio.split(":"),i=100/t[0]*t[1];if(this.elements.wrapper.style.paddingBottom=i+"%",this.supported.ui){var n=(240-i)/4.8;this.media.style.transform="translateY(-"+n+"%)"}},ready:function(){var e=this,t=this,i={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media",playsinline:!this.config.fullscreen.iosNative},n=u.buildUrlParams(i),s=t.media.getAttribute("src");u.is.empty(s)&&(s=t.media.getAttribute(t.config.attributes.embed.id));var a=u.parseVimeoId(s),l=u.createElement("iframe"),r=u.format(t.config.urls.vimeo.iframe,a,n);l.setAttribute("src",r),l.setAttribute("allowfullscreen",""),l.setAttribute("allowtransparency",""),l.setAttribute("allow","autoplay");var o=u.createElement("div",{class:t.config.classNames.embedContainer});o.appendChild(l),t.media=u.replaceElement(o,t.media),u.fetch(u.format(t.config.urls.vimeo.api,a),"json").then(function(e){if(!u.is.empty(e)){var i=new URL(e[0].thumbnail_large);i.pathname=i.pathname.split("_")[0]+".jpg",t.media.setAttribute("poster",i.href),C.setPoster.call(t)}}),t.embed=new window.Vimeo.Player(l,{autopause:t.config.autopause,muted:t.muted}),t.media.paused=!0,t.media.currentTime=0,t.supported.ui&&t.embed.disableTextTrack(),t.media.play=function(){t.embed.play().then(function(){t.media.paused=!1})},t.media.pause=function(){t.embed.pause().then(function(){t.media.paused=!0})},t.media.stop=function(){t.pause(),t.currentTime=0};var c=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return c},set:function(e){var i=t.media.paused;t.media.seeking=!0,u.dispatchEvent.call(t,t.media,"seeking"),t.embed.setCurrentTime(e).catch(function(){}),i&&t.pause()}});var d=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return d},set:function(e){t.embed.setPlaybackRate(e).then(function(){d=e,u.dispatchEvent.call(t,t.media,"ratechange")}).catch(function(e){"Error"===e.name&&g.setSpeedMenu.call(t,[])})}});var p=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return p},set:function(e){t.embed.setVolume(e).then(function(){p=e,u.dispatchEvent.call(t,t.media,"volumechange")})}});var h=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return h},set:function(e){var i=!!u.is.boolean(e)&&e;t.embed.setVolume(i?0:t.config.volume).then(function(){h=i,u.dispatchEvent.call(t,t.media,"volumechange")})}});var m=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return m},set:function(e){var i=u.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(i).then(function(){m=i})}});var y=void 0;t.embed.getVideoUrl().then(function(e){y=e}).catch(function(t){e.debug.warn(t)}),Object.defineProperty(t.media,"currentSrc",{get:function(){return y}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var i=u.getAspectRatio(t[0],t[1]);x.setAspectRatio.call(e,i)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(i){t.config.title=i,C.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){c=e,u.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,u.dispatchEvent.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,f.setup.call(t)}),t.embed.on("cuechange",function(e){var i=null;e.cues.length&&(i=u.stripHTML(e.cues[0].text)),f.setText.call(t,i)}),t.embed.on("loaded",function(){u.is.element(t.embed.element)&&t.supported.ui&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){t.media.paused&&u.dispatchEvent.call(t,t.media,"play"),t.media.paused=!1,u.dispatchEvent.call(t,t.media,"playing")}),t.embed.on("pause",function(){t.media.paused=!0,u.dispatchEvent.call(t,t.media,"pause")}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,c=e.seconds,u.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,u.dispatchEvent.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&u.dispatchEvent.call(t,t.media,"canplaythrough"),t.embed.getDuration().then(function(e){e!==t.media.duration&&(t.media.duration=e,u.dispatchEvent.call(t,t.media,"durationchange"))})}),t.embed.on("seeked",function(){t.media.seeking=!1,u.dispatchEvent.call(t,t.media,"seeked"),u.dispatchEvent.call(t,t.media,"play")}),t.embed.on("ended",function(){t.media.paused=!0,u.dispatchEvent.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,u.dispatchEvent.call(t,t.media,"error")}),setTimeout(function(){return C.build.call(t)},0)}};function P(e){switch(e){case"hd2160":return 2160;case 2160:return"hd2160";case"hd1440":return 1440;case 1440:return"hd1440";case"hd1080":return 1080;case 1080:return"hd1080";case"hd720":return 720;case 720:return"hd720";case"large":return 480;case 480:return"large";case"medium":return 360;case 360:return"medium";case"small":return 240;case 240:return"small";default:return"default"}}var L={setup:function(){var e=this;u.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),L.setAspectRatio.call(this),u.is.object(window.YT)&&u.is.function(window.YT.Player)?L.ready.call(this):(u.loadScript(this.config.urls.youtube.sdk).catch(function(t){e.debug.warn("YouTube API failed to load",t)}),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){L.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(u.is.function(this.embed.getVideoData)){var i=this.embed.getVideoData().title;if(u.is.empty(i))return this.config.title=i,void C.setTitle.call(this)}var n=this.config.keys.google;if(u.is.string(n)&&!u.is.empty(n)){var s=u.format(this.config.urls.youtube.api,e,n);u.fetch(s).then(function(e){u.is.object(e)&&(t.config.title=e.items[0].snippet.title,C.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(u.is.empty(t)||!t.startsWith("youtube-")){var i=e.media.getAttribute("src");u.is.empty(i)&&(i=e.media.getAttribute(this.config.attributes.embed.id));var n=u.parseYouTubeId(i),s=u.generateId(e.provider),a=u.createElement("div",{id:s});e.media=u.replaceElement(a,e.media),e.media.setAttribute("poster",u.format(e.config.urls.youtube.poster,n)),e.embed=new window.YT.Player(s,{videoId:n,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!u.is.object(e.media.error)){var i={code:t.data};switch(t.data){case 2:i.message="The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.";break;case 5:i.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";break;case 100:i.message="The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.";break;case 101:case 150:i.message="The owner of the requested video does not allow it to be played in embedded players.";break;default:i.message="An unknown error occured"}e.media.error=i,u.dispatchEvent.call(e,e.media,"error")}},onPlaybackQualityChange:function(){u.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:e.media.quality})},onPlaybackRateChange:function(t){var i=t.target;e.media.playbackRate=i.getPlaybackRate(),u.dispatchEvent.call(e,e.media,"ratechange")},onReady:function(t){var i=t.target;L.getTitle.call(e,n),e.media.play=function(){i.playVideo()},e.media.pause=function(){i.pauseVideo()},e.media.stop=function(){i.stopVideo()},e.media.duration=i.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(i.getCurrentTime())},set:function(t){var n=e.media.paused;e.media.seeking=!0,u.dispatchEvent.call(e,e.media,"seeking"),i.seekTo(t),n&&e.pause()}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return i.getPlaybackRate()},set:function(e){i.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return P(i.getPlaybackQuality())},set:function(t){var n=t;i.setPlaybackQuality(P(n)),u.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:n})}});var s=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return s},set:function(t){s=t,i.setVolume(100*s),u.dispatchEvent.call(e,e.media,"volumechange")}});var a=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return a},set:function(t){var n=u.is.boolean(t)?t:a;a=n,i[n?"mute":"unMute"](),u.dispatchEvent.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return i.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=i.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),u.dispatchEvent.call(e,e.media,"timeupdate"),u.dispatchEvent.call(e,e.media,"durationchange"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval(function(){e.media.buffered=i.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&u.dispatchEvent.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),u.dispatchEvent.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return C.build.call(e)},50)},onStateChange:function(t){var i,n=t.target;switch(clearInterval(e.timers.playing),t.data){case-1:u.dispatchEvent.call(e,e.media,"timeupdate"),e.media.buffered=n.getVideoLoadedFraction(),u.dispatchEvent.call(e,e.media,"progress");break;case 0:e.media.paused=!0,e.media.loop?(n.stopVideo(),n.playVideo()):u.dispatchEvent.call(e,e.media,"ended");break;case 1:e.media.seeking&&u.dispatchEvent.call(e,e.media,"seeked"),e.media.seeking=!1,e.media.paused&&u.dispatchEvent.call(e,e.media,"play"),e.media.paused=!1,u.dispatchEvent.call(e,e.media,"playing"),e.timers.playing=setInterval(function(){u.dispatchEvent.call(e,e.media,"timeupdate")},50),e.media.duration!==n.getDuration()&&(e.media.duration=n.getDuration(),u.dispatchEvent.call(e,e.media,"durationchange")),g.setQualityMenu.call(e,(i=n.getAvailableQualityLevels(),u.is.empty(i)?i:u.dedupe(i.map(function(e){return P(e)}))));break;case 2:e.media.paused=!0,u.dispatchEvent.call(e,e.media,"pause")}u.dispatchEvent.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},M={setup:function(){if(this.media)if(u.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),u.toggleClass(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&u.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.isVideo&&(this.elements.wrapper=u.createElement("div",{class:this.config.classNames.video}),u.wrap(this.media,this.elements.wrapper),this.elements.poster=u.createElement("div",{class:this.config.classNames.poster}),this.elements.wrapper.appendChild(this.elements.poster)),this.isEmbed)switch(this.provider){case"youtube":L.setup.call(this);break;case"vimeo":x.setup.call(this)}else this.isHTML5&&p.extend.call(this);else this.debug.warn("No media element found!")}},I=function(){function e(t){var i=this;n(this,e),this.player=t,this.publisherId=t.config.ads.publisherId,this.playing=!1,this.initialized=!1,this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.managerPromise=new Promise(function(e,t){i.on("loaded",e),i.on("error",t)}),this.load()}return s(e,[{key:"load",value:function(){var e=this;this.enabled&&(u.is.object(window.google)&&u.is.object(window.google.ima)?this.ready():u.loadScript(this.player.config.urls.googleIMA.sdk).then(function(){e.ready()}).catch(function(){e.trigger("error",new Error("Google IMA SDK failed to load"))}))}},{key:"ready",value:function(){var e=this;this.startSafetyTimer(12e3,"ready()"),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.listeners(),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=u.createElement("div",{class:this.player.config.classNames.ads}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:"requestAds",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var i=new google.ima.AdsRequest;i.adTagUrl=this.tagUrl,i.linearAdSlotWidth=t.offsetWidth,i.linearAdSlotHeight=t.offsetHeight,i.nonLinearAdSlotWidth=t.offsetWidth,i.nonLinearAdSlotHeight=t.offsetHeight,i.forceNonLinearFullSlot=!1,i.setAdWillPlayMuted(!this.player.muted),this.loader.requestAds(i)}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=setInterval(function(){var t=u.formatTime(Math.max(e.manager.getRemainingTime(),0)),i=h("advertisement",e.player.config)+" - "+t;e.elements.container.setAttribute("data-badge-text",i)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,i=new google.ima.AdsRenderingSettings;i.restoreCustomPlaybackStateOnAdBreakComplete=!0,i.enablePreloading=!0,this.manager=e.getAdsManager(this.player,i),this.cuePoints=this.manager.getCuePoints(),u.is.empty(this.cuePoints)||this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var i=t.player.elements.progress;if(u.is.element(i)){var n=100/t.player.duration*e,s=u.createElement("span",{class:t.player.config.classNames.cues});s.style.left=n.toString()+"%",i.appendChild(s)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.trigger("loaded")}},{key:"onAdEvent",value:function(e){var t=this,i=this.player.elements.container,n=e.getAd(),s=function(e){var i="ads"+e.replace(/_/g,"").toLowerCase();u.dispatchEvent.call(t.player,t.player.media,i)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.trigger("loaded"),s(e.type),this.pollCountdown(!0),n.isLinear()||(n.width=i.offsetWidth,n.height=i.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:s(e.type),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:s(e.type),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:s(e.type),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:case google.ima.AdEvent.Type.MIDPOINT:case google.ima.AdEvent.Type.COMPLETE:case google.ima.AdEvent.Type.IMPRESSION:case google.ima.AdEvent.Type.CLICK:s(e.type)}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.warn("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,i=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return i=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;u.is.empty(e.cuePoints)||e.cuePoints.forEach(function(n,s){i<n&&n<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(s,1))})}),window.addEventListener("resize",function(){e.manager&&e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.resumeContent(),this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}}).catch(function(){})}},{key:"resumeContent",value:function(){this.elements.container.style.zIndex="",this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){this.elements.container.style.zIndex=3,this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.trigger("error"),this.loadAds()}},{key:"loadAds",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on("loaded",t),e.player.debug.log(e.manager)}),e.requestAds()}).catch(function(){})}},{key:"trigger",value:function(e){for(var t=this,i=arguments.length,n=Array(i>1?i-1:0),s=1;s<i;s++)n[s-1]=arguments[s];var a=this.events[e];u.is.array(a)&&a.forEach(function(e){u.is.function(e)&&e.apply(t,n)})}},{key:"on",value:function(e,t){return u.is.array(this.events[e])||(this.events[e]=[]),this.events[e].push(t),this}},{key:"startSafetyTimer",value:function(e,t){var i=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=setTimeout(function(){i.cancel(),i.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){u.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:"enabled",get:function(){return this.player.isVideo&&this.player.config.ads.enabled&&!u.is.empty(this.publisherId)}},{key:"tagUrl",get:function(){var e={AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId};return"https://go.aniview.com/api/adserver6/vast/?"+u.buildUrlParams(e)}}]),e}(),q={insertElements:function(e,t){var i=this;u.is.string(t)?u.insertElement(e,this.media,{src:t}):u.is.array(t)&&t.forEach(function(t){u.insertElement(e,i.media,t)})},change:function(e){var t=this;u.is.object(e)&&"sources"in e&&e.sources.length?(p.cancelRequests.call(this),this.destroy.call(this,function(){switch(t.options.quality=[],u.removeElement(t.media),t.media=null,u.is.element(t.elements.container)&&t.elements.container.removeAttribute("class"),t.type=e.type,t.provider=u.is.empty(e.sources[0].provider)?o.html5:e.sources[0].provider,t.supported=d.check(t.type,t.provider,t.config.playsinline),t.provider+":"+t.type){case"html5:video":t.media=u.createElement("video");break;case"html5:audio":t.media=u.createElement("audio");break;case"youtube:video":case"vimeo:video":t.media=u.createElement("div",{src:e.sources[0].src})}t.elements.container.appendChild(t.media),u.is.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),u.is.empty(e.poster)||(t.poster=e.poster),t.config.loop.active&&t.media.setAttribute("loop",""),t.config.muted&&t.media.setAttribute("muted",""),t.config.playsinline&&t.media.setAttribute("playsinline","")),C.addStyleHook.call(t),t.isHTML5&&q.insertElements.call(t,"source",e.sources),t.config.title=e.title,M.setup.call(t),t.isHTML5&&("tracks"in e&&q.insertElements.call(t,"track",e.tracks),t.media.load()),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&C.build.call(t),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}};return function(){function e(t,i){var s=this;if(n(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=d.touch,this.media=t,u.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||u.is.nodeList(this.media)||u.is.array(this.media))&&(this.media=this.media[0]),this.config=u.extend({},b,i||{},function(){try{return JSON.parse(s.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:null},this.fullscreen={active:!1},this.options={speed:[],quality:[],captions:[]},this.debug=new v(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",d),!u.is.nullOrUndefined(this.media)&&u.is.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(d.check().api){var a=this.media.cloneNode(!0);a.autoplay=!1,this.elements.original=a;var l=this.media.tagName.toLowerCase(),p=null,h=null,m=null;switch(l){case"div":if(p=this.media.querySelector("iframe"),u.is.element(p)){if(h=p.getAttribute("src"),this.provider=u.getProviderByUrl(h),this.elements.container=this.media,this.media=p,this.elements.container.className="",m=u.getUrlParams(h),!u.is.empty(m)){var g=["1","true"];g.includes(m.autoplay)&&(this.config.autoplay=!0),g.includes(m.loop)&&(this.config.loop.active=!0),this.isYouTube?this.config.playsinline=g.includes(m.playsinline):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(u.is.empty(this.provider)||!Object.keys(o).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=c.video;break;case"video":case"audio":this.type=l,this.provider=o.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("playsinline")&&(this.config.playsinline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=d.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.listeners=new N(this),this.storage=new r(this),this.media.plyr=this,u.is.element(this.elements.container)||(this.elements.container=u.createElement("div"),u.wrap(this.media,this.elements.container)),this.elements.container.setAttribute("tabindex",0),C.addStyleHook.call(this),M.setup.call(this),this.config.debug&&u.on(this.elements.container,this.config.events.join(" "),function(e){s.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&C.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new T(this),this.ads=new I(this),this.config.autoplay&&this.play()):this.debug.error("Setup failed: no support")}else this.debug.error("Setup failed: no support");else this.debug.error("Setup failed: disabled by config");else this.debug.error("Setup failed: no suitable element passed")}return s(e,[{key:"play",value:function(){return u.is.function(this.media.play)?this.media.play():null}},{key:"pause",value:function(){this.playing&&u.is.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){(u.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?(this.pause(),this.restart()):u.is.function(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(u.is.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(u.is.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(u.is.number(e)?e:1)}},{key:"decreaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-(u.is.number(e)?e:1)}},{key:"toggleCaptions",value:function(e){if(this.supported.ui){var t=u.is.boolean(e)?e:!this.elements.container.classList.contains(this.config.classNames.captions.active);this.captions.active!==t&&(this.captions.active=t,u.toggleState(this.elements.buttons.captions,this.captions.active),u.toggleClass(this.elements.container,this.config.classNames.captions.active,this.captions.active),u.dispatchEvent.call(this,this.media,this.captions.active?"captionsenabled":"captionsdisabled"))}}},{key:"airplay",value:function(){d.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){var t=this;if(u.is.element(this.elements.controls)&&this.supported.ui&&!this.isAudio){var i=0,n=e,s=!1;if(!u.is.boolean(e))if(u.is.event(e)){s="enterfullscreen"===e.type;n=["touchstart","touchmove","mouseenter","mousemove","focusin"].includes(e.type),["touchmove","touchend","mousemove"].includes(e.type)&&(i=2e3),this.touch||"focusin"!==e.type||(i=3e3,u.toggleClass(this.elements.controls,this.config.classNames.noTransition,!0))}else n=u.hasClass(this.elements.container,this.config.classNames.hideControls);if(clearTimeout(this.timers.controls),n||this.paused||this.loading){if(u.toggleClass(this.elements.container,this.config.classNames.hideControls,!1)&&u.dispatchEvent.call(this,this.media,"controlsshown"),this.paused||this.loading)return;this.touch&&(i=3e3)}n&&!this.playing||(this.timers.controls=setTimeout(function(){u.is.element(t.elements.controls)&&((!t.elements.controls.pressed&&!t.elements.controls.hover||s)&&(u.hasClass(t.elements.container,t.config.classNames.hideControls)||u.toggleClass(t.elements.controls,t.config.classNames.noTransition,!1),u.toggleClass(t.elements.container,t.config.classNames.hideControls,t.config.hideControls)&&(u.dispatchEvent.call(t,t.media,"controlshidden"),t.config.controls.includes("settings")&&!u.is.empty(t.config.settings)&&g.toggleMenu.call(t,!1))))},i))}}},{key:"on",value:function(e,t){u.on(this.elements.container,e,t)}},{key:"off",value:function(e,t){u.off(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var n=function(){document.body.style.overflow="",t.embed=null,i?(Object.keys(t.elements).length&&(u.removeElement(t.elements.buttons.play),u.removeElement(t.elements.captions),u.removeElement(t.elements.controls),u.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),u.is.function(e)&&e()):(t.listeners.clear(),u.replaceElement(t.elements.original,t.elements.container),u.dispatchEvent.call(t,t.elements.original,"destroyed",!0),u.is.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};switch(this.stop(),this.provider+":"+this.type){case"html5:video":case"html5:audio":clearTimeout(this.timers.loading),C.toggleNativeControls.call(this,!0),n();break;case"youtube:video":clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&u.is.function(this.embed.destroy)&&this.embed.destroy(),n();break;case"vimeo:video":null!==this.embed&&this.embed.unload().then(n),setTimeout(n,200)}}}},{key:"supports",value:function(e){return d.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===o.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===o.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===o.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===c.video)}},{key:"isAudio",get:function(){return Boolean(this.type===c.audio)}},{key:"playing",get:function(){return Boolean(this.ready&&!this.paused&&!this.ended)}},{key:"paused",get:function(){return Boolean(this.media.paused)}},{key:"stopped",get:function(){return Boolean(this.paused&&0===this.currentTime)}},{key:"ended",get:function(){return Boolean(this.media.ended)}},{key:"currentTime",set:function(e){var t=0;u.is.number(e)&&(t=e),t<0?t=0:t>this.duration&&(t=this.duration),this.media.currentTime=t,this.debug.log("Seeking to "+this.currentTime+" seconds")},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return u.is.number(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}},{key:"seeking",get:function(){return Boolean(this.media.seeking)}},{key:"duration",get:function(){var e=parseFloat(this.config.duration),t=this.media?Number(this.media.duration):0;return Number.isNaN(e)?t:e}},{key:"volume",set:function(e){var t=e;u.is.string(t)&&(t=Number(t)),u.is.number(t)||(t=this.storage.get("volume")),u.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!u.is.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;u.is.boolean(t)||(t=this.storage.get("muted")),u.is.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return Boolean(this.media.muted)}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;u.is.number(e)&&(t=e),u.is.number(t)||(t=this.storage.get("speed")),u.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=null;if(u.is.empty(e)||(t=Number(e)),u.is.number(t)&&0!==t||(t=this.storage.get("quality")),u.is.number(t)||(t=this.config.quality.selected),u.is.number(t)||(t=this.config.quality.default),this.options.quality.length){if(!this.options.quality.includes(t)){var i=u.closest(this.options.quality,t);this.debug.warn("Unsupported quality option: "+t+", using "+i+" instead"),t=i}this.config.quality.selected=t,this.media.quality=t}},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=u.is.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return Boolean(this.media.loop)}},{key:"source",set:function(e){q.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isVideo?u.is.string(e)&&(this.media.setAttribute("poster",e),C.setPoster.call(this)):this.debug.warn("Poster can only be set for video")},get:function(){return this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=u.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:"language",set:function(e){if(u.is.string(e))if(u.is.empty(e))this.toggleCaptions(!1);else{var t=e.toLowerCase();this.options.captions.includes(t)?(this.toggleCaptions(!0),"enabled"!==t&&this.language!==t&&(this.captions.language=t,f.setText.call(this,null),f.setLanguage.call(this),u.dispatchEvent.call(this,this.media,"languagechange"))):this.debug.warn("Unsupported language option: "+t)}},get:function(){return this.captions.language}},{key:"pip",set:function(e){var t="picture-in-picture",i="inline";if(d.pip){var n=u.is.boolean(e)?e:this.pip===i;this.media.webkitSetPresentationMode(n?t:i)}},get:function(){return d.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,i){return d.check(e,t,i)}},{key:"loadSprite",value:function(e,t){return u.loadSprite(e,t)}},{key:"setup",value:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=null;return u.is.string(t)?n=Array.from(document.querySelectorAll(t)):u.is.nodeList(t)?n=Array.from(t):u.is.array(t)&&(n=t.filter(function(e){return u.is.element(e)})),u.is.empty(n)?null:n.map(function(t){return new e(t,i)})}}]),e}()});
+"object"==typeof navigator&&function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var e,t,i=(function(e,t){var i;i=function(){var e=function(){},t={},i={},n={};function s(e,t){if(e){var s=n[e];if(i[e]=t,s)for(;s.length;)s[0](e,t),s.splice(0,1)}}function a(t,i){t.call&&(t={success:t}),i.length?(t.error||e)(i):(t.success||e)(t)}function r(t,i,n,s){var a,l,o=document,c=n.async,u=(n.numRetries||0)+1,d=n.before||e,p=t.replace(/^(css|img)!/,"");s=s||0,/(^css!|\.css$)/.test(t)?(a=!0,(l=o.createElement("link")).rel="stylesheet",l.href=p):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(l=o.createElement("img")).src=p:((l=o.createElement("script")).src=t,l.async=void 0===c||c),l.onload=l.onerror=l.onbeforeload=function(e){var o=e.type[0];if(a&&"hideFocus"in l)try{l.sheet.cssText.length||(o="e")}catch(e){o="e"}if("e"==o&&(s+=1)<u)return r(t,i,n,s);i(t,o,e.defaultPrevented)},!1!==d(t,l)&&o.head.appendChild(l)}function l(e,i,n){var l,o;if(i&&i.trim&&(l=i),o=(l?n:i)||{},l){if(l in t)throw"LoadJS";t[l]=!0}!function(e,t,i){var n,s,a=(e=e.push?e:[e]).length,l=a,o=[];for(n=function(e,i,n){if("e"==i&&o.push(e),"b"==i){if(!n)return;o.push(e)}--a||t(o)},s=0;s<l;s++)r(e[s],n,i)}(e,function(e){a(o,e),s(l,e)},o)}return l.ready=function(e,t){return function(e,t){e=e.push?e:[e];var s,a,r,l=[],o=e.length,c=o;for(s=function(e,i){i.length&&l.push(e),--c||t(l)};o--;)a=e[o],(r=i[a])?s(a,r):(n[a]=n[a]||[]).push(s)}(e,function(e){a(t,e)}),l},l.done=function(e){s(e,[])},l.reset=function(){t={},i={},n={}},l.isDefined=function(e){return e in t},l},e.exports=i()}(e={exports:{}},e.exports),e.exports),n=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},s=function(){function e(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t}}(),a=function(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e},r=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var i=[],n=!0,s=!1,a=void 0;try{for(var r,l=e[Symbol.iterator]();!(n=(r=l.next()).done)&&(i.push(r.value),!t||i.length!==t);n=!0);}catch(e){s=!0,a=e}finally{try{!n&&l.return&&l.return()}finally{if(s)throw a}}return i}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),l=function(){function e(t){n(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return s(e,[{key:"get",value:function(t){if(!e.supported)return null;var i=window.localStorage.getItem(this.key);if(u.is.empty(i))return null;var n=JSON.parse(i);return u.is.string(t)&&t.length?n[t]:n}},{key:"set",value:function(t){if(e.supported&&this.enabled&&u.is.object(t)){var i=this.get();u.is.empty(i)&&(i={}),u.extend(i,t),window.localStorage.setItem(this.key,JSON.stringify(i))}}}],[{key:"supported",get:function(){try{if(!("localStorage"in window))return!1;return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}(),o={html5:"html5",youtube:"youtube",vimeo:"vimeo"},c={audio:"audio",video:"video"},u={is:{object:function(e){return this.getConstructor(e)===Object},number:function(e){return this.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return this.getConstructor(e)===String},boolean:function(e){return this.getConstructor(e)===Boolean},function:function(e){return this.getConstructor(e)===Function},array:function(e){return!this.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return this.instanceof(e,WeakMap)},nodeList:function(e){return this.instanceof(e,NodeList)},element:function(e){return this.instanceof(e,Element)},textNode:function(e){return this.getConstructor(e)===Text},event:function(e){return this.instanceof(e,Event)},cue:function(e){return this.instanceof(e,TextTrackCue)||this.instanceof(e,VTTCue)},track:function(e){return this.instanceof(e,TextTrack)||!this.nullOrUndefined(e)&&this.string(e.kind)},url:function(e){return!this.nullOrUndefined(e)&&/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e)},nullOrUndefined:function(e){return null==e},empty:function(e){return this.nullOrUndefined(e)||(this.string(e)||this.array(e)||this.nodeList(e))&&!e.length||this.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)},getConstructor:function(e){return this.nullOrUndefined(e)?null:e.constructor}},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(i,n){try{var s=new XMLHttpRequest;if(!("withCredentials"in s))return;s.addEventListener("load",function(){if("text"===t)try{i(JSON.parse(s.responseText))}catch(e){i(s.responseText)}else i(s.response)}),s.addEventListener("error",function(){throw new Error(s.statusText)}),s.open("GET",e,!0),s.responseType=t,s.send()}catch(e){n(e)}})},loadImage:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new Promise(function(i,n){var s=new Image,a=function(){delete s.onload,delete s.onerror,(s.naturalWidth>=t?i:n)(s)};Object.assign(s,{onload:a,onerror:a,src:e})})},loadScript:function(e){return new Promise(function(t,n){i(e,{success:t,error:n})})},loadSprite:function(e,t){if(u.is.string(e)){var i=u.is.string(t),n=function(){return document.querySelectorAll("#"+t).length};if(!i||!n()){var s=l.supported,a=document.createElement("div");if(u.toggleHidden(a,!0),i&&a.setAttribute("id",t),s){var r=window.localStorage.getItem("cache-"+t);if(null!==r){var o=JSON.parse(r);return void c.call(a,o.content)}}u.fetch(e).then(function(e){u.is.empty(e)||(s&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),c.call(a,e))}).catch(function(){})}}function c(e){i&&n()||(this.innerHTML=e,document.body.insertBefore(this,document.body.childNodes[0]))}},generateId:function(e){return e+"-"+Math.floor(1e4*Math.random())},wrap:function(e,t){var i=e.length?e:[e];Array.from(i).reverse().forEach(function(e,i){var n=i>0?t.cloneNode(!0):t,s=e.parentNode,a=e.nextSibling;n.appendChild(e),a?s.insertBefore(n,a):s.appendChild(n)})},createElement:function(e,t,i){var n=document.createElement(e);return u.is.object(t)&&u.setAttributes(n,t),u.is.string(i)&&(n.innerText=i),n},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,i,n){t.appendChild(u.createElement(e,i,n))},removeElement:function(e){u.is.nodeList(e)||u.is.array(e)?Array.from(e).forEach(u.removeElement):u.is.element(e)&&u.is.element(e.parentNode)&&e.parentNode.removeChild(e)},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return u.is.element(t)&&u.is.element(t.parentNode)&&u.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){u.is.element(e)&&!u.is.empty(t)&&Object.entries(t).forEach(function(t){var i=r(t,2),n=i[0],s=i[1];e.setAttribute(n,s)})},getAttributesFromSelector:function(e,t){if(!u.is.string(e)||u.is.empty(e))return{};var i={},n=t;return e.split(",").forEach(function(e){var t=e.trim(),s=t.replace(".",""),a=t.replace(/[[\]]/g,"").split("="),r=a[0],l=a.length>1?a[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":u.is.object(n)&&u.is.string(n.class)&&(n.class+=" "+s),i.class=s;break;case"#":i.id=t.replace("#","");break;case"[":i[r]=l}}),i},toggleHidden:function(e,t){if(u.is.element(e)){var i=t;u.is.boolean(i)||(i=!e.hasAttribute("hidden")),i?e.setAttribute("hidden",""):e.removeAttribute("hidden")}},toggleClass:function(e,t,i){if(u.is.element(e)){var n="toggle";return void 0!==i&&(n=i?"add":"remove"),e.classList[n](t),e.classList.contains(t)}return null},hasClass:function(e,t){return u.is.element(e)&&e.classList.contains(t)},matches:function(e,t){var i={Element:Element};var n=i.matches||i.webkitMatchesSelector||i.mozMatchesSelector||i.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return n.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(u.is.element(e)){var i=u.getElements.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),n=i[0],s=i[i.length-1],a=function(e){if("Tab"===e.key&&9===e.keyCode){var t=u.getFocusElement();t!==s||e.shiftKey?t===n&&e.shiftKey&&(s.focus(),e.preventDefault()):(n.focus(),e.preventDefault())}};t?u.on(this.elements.container,"keydown",a,!1):u.off(this.elements.container,"keydown",a,!1)}},toggleListener:function(e,t,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(!u.is.empty(e)&&!u.is.empty(t)&&u.is.function(i))if(u.is.nodeList(e)||u.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&u.toggleListener.call(null,e,t,i,n,s,a)});else{var r=t.split(" "),l=a;d.passiveListeners&&(l={passive:s,capture:a}),r.forEach(function(t){e[n?"addEventListener":"removeEventListener"](t,i,l)})}},on:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];u.toggleListener(e,t,i,!0,n,s)},off:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];u.toggleListener(e,t,i,!1,n,s)},dispatchEvent:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(u.is.element(e)&&!u.is.empty(t)){var s=new CustomEvent(t,{bubbles:i,detail:Object.assign({},n,{plyr:this})});e.dispatchEvent(s)}},toggleState:function(e,t){if(u.is.array(e)||u.is.nodeList(e))Array.from(e).forEach(function(e){return u.toggleState(e,t)});else if(u.is.element(e)){var i="true"===e.getAttribute("aria-pressed"),n=u.is.boolean(t)?t:!i;e.setAttribute("aria-pressed",n)}},format:function(e){for(var t=arguments.length,i=Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];return u.is.empty(e)?e:e.toString().replace(/{(\d+)}/g,function(e,t){return u.is.string(i[t])?i[t]:""})},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!u.is.number(e))return this.formatTime(null,t,i);var n=function(e){return("0"+e).slice(-2)},s=this.getHours(e),a=this.getMinutes(e),r=this.getSeconds(e);return t||s>0?s+=":":s="",(i?"-":"")+s+n(a)+":"+n(r)},replaceAll:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1"),"g"),i.toString())},toTitleCase:function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString().replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})},toPascalCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=u.replaceAll(e,"-"," "),e=u.replaceAll(e,"_"," "),e=u.toTitleCase(e),u.replaceAll(e," ","")},toCamelCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=u.toPascalCase(e)).charAt(0).toLowerCase()+e.slice(1)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,i=Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];if(!i.length)return e;var s=i.shift();return u.is.object(s)?(Object.keys(s).forEach(function(t){u.is.object(s[t])?(Object.keys(e).includes(t)||Object.assign(e,a({},t,{})),u.extend(e[t],s[t])):Object.assign(e,a({},t,s[t]))}),u.extend.apply(u,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,i=Array(e.length);t<e.length;t++)i[t]=e[t];return i}return Array.from(e)}(i)))):e},dedupe:function(e){return u.is.array(e)?e.filter(function(t,i){return e.indexOf(t)===i}):e},cloneDeep:function(e){return JSON.parse(JSON.stringify(e))},closest:function(e,t){return u.is.array(e)&&e.length?e.reduce(function(e,i){return Math.abs(i-t)<Math.abs(e-t)?i:e}):null},getProviderByUrl:function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?o.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{0,9}(?=\b|\/)/.test(e)?o.vimeo:null},parseYouTubeId:function(e){if(u.is.empty(e))return null;return e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if(u.is.empty(e))return null;if(u.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement("a");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith("http://")||e.startsWith("https://"))&&(t=this.parseUrl(e).search);return this.is.empty(t)?null:t.slice(t.indexOf("?")+1).split("&").reduce(function(e,t){var i=t.split("="),n=r(i,2),s=n[0],l=n[1];return Object.assign(e,a({},s,decodeURIComponent(l)))},{})},buildUrlParams:function(e){return u.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&"):""},stripHTML:function(e){var t=document.createDocumentFragment(),i=document.createElement("div");return t.appendChild(i),i.innerHTML=e,t.firstChild.innerText},getAspectRatio:function(e,t){var i=function e(t,i){return 0===i?t:e(i,t%i)}(e,t);return e/i+":"+t/i},get transitionEndEvent(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},i=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!u.is.string(i)&&t[i]},repaint:function(e){setTimeout(function(){u.toggleHidden(e,!0),e.offsetHeight,u.toggleHidden(e,!1)},0)}},d={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,i){var n=!1,s=!1,a=u.getBrowser(),r=a.isIPhone&&i&&d.playsinline;switch(t+":"+e){case"html5:video":s=(n=d.video)&&d.rangeInput&&(!a.isIPhone||r);break;case"html5:audio":s=(n=d.audio)&&d.rangeInput;break;case"youtube:video":case"vimeo:video":n=!0,s=d.rangeInput&&(!a.isIPhone||r);break;default:s=(n=d.audio&&d.video)&&d.rangeInput}return{api:n,ui:s}},pip:!u.getBrowser().isIPhone&&u.is.function(u.createElement("video").webkitSetPresentationMode),airplay:u.is.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!u.is.function(t.canPlayType))return!1;if(e.includes("codecs="))return t.canPlayType(e).replace(/no/,"");if(this.isVideo)switch(e){case"video/webm":return t.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return t.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return t.canPlayType('video/ogg; codecs="theora"').replace(/no/,"");default:return!1}else if(this.isAudio)switch(e){case"audio/mpeg":return t.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return t.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return t.canPlayType('audio/wav; codecs="1"').replace(/no/,"");default:return!1}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch(e){}return e}(),rangeInput:(t=document.createElement("input"),t.type="range","range"===t.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==u.transitionEndEvent,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},p={getSources:function(){return this.isHTML5?this.media.querySelectorAll("source"):null},getQualityOptions:function(){if(!this.isHTML5)return null;var e=p.getSources.call(this);if(u.is.empty(e))return null;var t=Array.from(e).filter(function(e){return!u.is.empty(e.getAttribute("size"))});return u.is.empty(t)?null:u.dedupe(t.map(function(e){return Number(e.getAttribute("size"))}))},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,"quality",{get:function(){var t=p.getSources.call(e);if(u.is.empty(t))return null;var i=Array.from(t).filter(function(t){return t.getAttribute("src")===e.source});return u.is.empty(i)?null:Number(i[0].getAttribute("size"))},set:function(t){var i=p.getSources.call(e);if(!u.is.empty(i)){var n=Array.from(i).filter(function(e){return Number(e.getAttribute("size"))===t});if(!u.is.empty(n)){var s=n.filter(function(t){return d.mime.call(e,t.getAttribute("type"))});if(!u.is.empty(s)){u.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:t});var a=e.currentTime,r=e.playing;e.media.src=s[0].getAttribute("src"),e.media.load(),r&&e.play(),e.currentTime=a,u.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:t})}}}}})}},cancelRequests:function(){this.isHTML5&&(u.removeElement(p.getSources()),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}},h=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(u.is.empty(e)||u.is.empty(t)||!Object.keys(t.i18n).includes(e))return"";var i=t.i18n[e],n={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(n).forEach(function(e){var t=r(e,2),n=t[0],s=t[1];i=u.replaceAll(i,n,s)}),i},m=u.getBrowser(),g={getIconUrl:function(){var e=new URL(this.config.iconUrl,window.location).host!==window.location.host||m.isIE&&!window.svg4everybody;return{url:this.config.iconUrl,cors:e}},findElements:function(){try{return this.elements.controls=u.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:u.getElements.call(this,this.config.selectors.buttons.play),pause:u.getElement.call(this,this.config.selectors.buttons.pause),restart:u.getElement.call(this,this.config.selectors.buttons.restart),rewind:u.getElement.call(this,this.config.selectors.buttons.rewind),fastForward:u.getElement.call(this,this.config.selectors.buttons.fastForward),mute:u.getElement.call(this,this.config.selectors.buttons.mute),pip:u.getElement.call(this,this.config.selectors.buttons.pip),airplay:u.getElement.call(this,this.config.selectors.buttons.airplay),settings:u.getElement.call(this,this.config.selectors.buttons.settings),captions:u.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:u.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=u.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:u.getElement.call(this,this.config.selectors.inputs.seek),volume:u.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:u.getElement.call(this,this.config.selectors.display.buffer),currentTime:u.getElement.call(this,this.config.selectors.display.currentTime),duration:u.getElement.call(this,this.config.selectors.display.duration)},u.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},createIcon:function(e,t){var i=g.getIconUrl.call(this),n=(i.cors?"":i.url)+"#"+this.config.iconPrefix,s=document.createElementNS("http://www.w3.org/2000/svg","svg");u.setAttributes(s,u.extend(t,{role:"presentation",focusable:"false"}));var a=document.createElementNS("http://www.w3.org/2000/svg","use"),r=n+"-"+e;return"href"in a?a.setAttributeNS("http://www.w3.org/1999/xlink","href",r):a.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",r),s.appendChild(a),s},createLabel:function(e,t){var i=h(e,this.config),n=Object.assign({},t);switch(e){case"pip":i="PIP";break;case"airplay":i="AirPlay"}return"class"in n?n.class+=" "+this.config.classNames.hidden:n.class=this.config.classNames.hidden,u.createElement("span",n,i)},createBadge:function(e){if(u.is.empty(e))return null;var t=u.createElement("span",{class:this.config.classNames.menu.value});return t.appendChild(u.createElement("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var i=u.createElement("button"),n=Object.assign({},t),s=u.toCamelCase(e),a=!1,r=void 0,l=void 0,o=void 0,c=void 0;switch("type"in n||(n.type="button"),"class"in n?n.class.includes(this.config.classNames.control)&&(n.class+=" "+this.config.classNames.control):n.class=this.config.classNames.control,e){case"play":a=!0,r="play",o="pause",l="play",c="pause";break;case"mute":a=!0,r="mute",o="unmute",l="volume",c="muted";break;case"captions":a=!0,r="enableCaptions",o="disableCaptions",l="captions-off",c="captions-on";break;case"fullscreen":a=!0,r="enterFullscreen",o="exitFullscreen",l="enter-fullscreen",c="exit-fullscreen";break;case"play-large":n.class+=" "+this.config.classNames.control+"--overlaid",s="play",r="play",l="play";break;default:r=s,l=e}return a?(i.appendChild(g.createIcon.call(this,c,{class:"icon--pressed"})),i.appendChild(g.createIcon.call(this,l,{class:"icon--not-pressed"})),i.appendChild(g.createLabel.call(this,o,{class:"label--pressed"})),i.appendChild(g.createLabel.call(this,r,{class:"label--not-pressed"})),n["aria-pressed"]=!1):(i.appendChild(g.createIcon.call(this,l)),i.appendChild(g.createLabel.call(this,r))),u.extend(n,u.getAttributesFromSelector(this.config.selectors.buttons[s],n)),u.setAttributes(i,n),"play"===s?(u.is.array(this.elements.buttons[s])||(this.elements.buttons[s]=[]),this.elements.buttons[s].push(i)):this.elements.buttons[s]=i,i},createRange:function(e,t){var i=u.createElement("label",{for:t.id,id:t.id+"-label",class:this.config.classNames.hidden},h(e,this.config)),n=u.createElement("input",u.extend(u.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-labelledby":t.id+"-label","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=n,g.updateRangeFill.call(this,n),{label:i,input:n}},createProgress:function(e,t){var i=u.createElement("progress",u.extend(u.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"presentation","aria-hidden":!0},t));if("volume"!==e){i.appendChild(u.createElement("span",null,"0"));var n="";switch(e){case"played":n=h("played",this.config);break;case"buffer":n=h("buffered",this.config)}i.innerText="% "+n.toLowerCase()}return this.elements.display[e]=i,i},createTime:function(e){var t=u.getAttributesFromSelector(this.config.selectors.display[e]),i=u.createElement("div",u.extend(t,{class:"plyr__time "+t.class,"aria-label":h(e,this.config)}),"00:00");return this.elements.display[e]=i,i},createMenuItem:function(e,t,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,a=arguments.length>5&&void 0!==arguments[5]&&arguments[5],r=u.createElement("li"),l=u.createElement("label",{class:this.config.classNames.control}),o=u.createElement("input",u.extend(u.getAttributesFromSelector(this.config.selectors.inputs[i]),{type:"radio",name:"plyr-"+i,value:e,checked:a,class:"plyr__sr-only"})),c=u.createElement("span",{hidden:""});l.appendChild(o),l.appendChild(c),l.insertAdjacentHTML("beforeend",n),u.is.element(s)&&l.appendChild(s),r.appendChild(l),t.appendChild(r)},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(u.is.element(e)&&u.is.number(t)){var n=u.getHours(this.duration)>0;e.innerText=u.formatTime(t,n,i)}},updateVolume:function(){this.supported.ui&&(u.is.element(this.elements.inputs.volume)&&g.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),u.is.element(this.elements.buttons.mute)&&u.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;u.is.element(e)&&(e.value=t,g.updateRangeFill.call(this,e))},updateProgress:function(e){var t=this;if(this.supported.ui&&u.is.event(e)){var i=0;if(e)switch(e.type){case"timeupdate":case"seeking":case"seeked":i=u.getPercentage(this.currentTime,this.duration),"timeupdate"===e.type&&g.setRange.call(this,this.elements.inputs.seek,i);break;case"playing":case"progress":!function(e,i){var n=u.is.number(i)?i:0,s=u.is.element(e)?e:t.elements.display.buffer;if(u.is.element(s)){s.value=n;var a=s.getElementsByTagName("span")[0];u.is.element(a)&&(a.childNodes[0].nodeValue=n)}}(this.elements.display.buffer,100*this.buffered)}}},updateRangeFill:function(e){var t=u.is.event(e)?e.target:e;u.is.element(t)&&"range"===t.getAttribute("type")&&(t.setAttribute("aria-valuenow",t.value),m.isWebkit&&t.style.setProperty("--value",t.value/t.max*100+"%"))},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&u.is.element(this.elements.inputs.seek)&&u.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var i=0,n=this.elements.progress.getBoundingClientRect(),s=this.config.classNames.tooltip+"--visible",a=function(e){u.toggleClass(t.elements.display.seekTooltip,s,e)};if(this.touch)a(!1);else{if(u.is.event(e))i=100/n.width*(e.pageX-n.left);else{if(!u.hasClass(this.elements.display.seekTooltip,s))return;i=parseFloat(this.elements.display.seekTooltip.style.left,10)}i<0?i=0:i>100&&(i=100),g.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*i),this.elements.display.seekTooltip.style.left=i+"%",u.is.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&a("mouseenter"===e.type)}}},timeUpdate:function(e){var t=!u.is.element(this.elements.display.duration)&&this.config.invertTime;g.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||g.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui&&(this.config.invertTime||!this.currentTime)){var e=u.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&g.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&g.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),g.updateSeekTooltip.call(this)}},toggleTab:function(e,t){u.toggleHidden(this.elements.settings.tabs[e],!t)},setQualityMenu:function(e){var t=this;if(u.is.element(this.elements.settings.panes.quality)){var i=this.elements.settings.panes.quality.querySelector("ul");u.is.array(e)&&(this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}));var n=!u.is.empty(this.options.quality)&&this.options.quality.length>1;if(g.toggleTab.call(this,"quality",n),g.checkMenu.call(this),n){u.emptyElement(i);this.options.quality.sort(function(e,i){var n=t.config.quality.options;return n.indexOf(e)>n.indexOf(i)?1:-1}).forEach(function(e){var n=g.getLabel.call(t,"quality",e);g.createMenuItem.call(t,e,i,"quality",n,function(e){var i="";switch(e){case 2160:i="4K";break;case 1440:case 1080:case 720:i="HD";break;case 576:case 480:i="SD"}return i.length?g.createBadge.call(t,i):null}(e))}),g.updateSetting.call(this,"quality",i)}}},getLabel:function(e,t){switch(e){case"speed":return 1===t?h("normal",this.config):t+"&times;";case"quality":return u.is.number(t)?t+"p":u.toTitleCase(t);case"captions":return f.getLabel.call(this);default:return null}},updateSetting:function(e,t,i){var n=this.elements.settings.panes[e],s=null,a=t;switch(e){case"captions":s=this.captions.active?this.options.captions.length>2||!this.options.captions.some(function(e){return"enabled"===e})?this.captions.language:"enabled":"";break;default:if(s=u.is.empty(i)?this[e]:i,u.is.empty(s)&&(s=this.config[e].default),!u.is.empty(this.options[e])&&!this.options[e].includes(s))return void this.debug.warn("Unsupported value of '"+s+"' for "+e);if(!this.config[e].options.includes(s))return void this.debug.warn("Disabled value of '"+s+"' for "+e)}if(u.is.element(a)||(a=n&&n.querySelector("ul")),u.is.element(a)){this.elements.settings.tabs[e].querySelector("."+this.config.classNames.menu.value).innerHTML=g.getLabel.call(this,e,s);var r=a&&a.querySelector('input[value="'+s+'"]');u.is.element(r)&&(r.checked=!0)}},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector("ul"),i=f.getTracks.call(this).length;if(g.toggleTab.call(this,"captions",i),u.emptyElement(t),g.checkMenu.call(this),i){var n=f.getTracks.call(this).map(function(t){return{language:u.is.empty(t.language)?"enabled":t.language,label:f.getLabel.call(e,t)}});n.unshift({language:"",label:h("disabled",this.config)}),n.forEach(function(i){g.createMenuItem.call(e,i.language,t,"language",i.label,"enabled"!==i.language?g.createBadge.call(e,i.language.toUpperCase()):null,i.language.toLowerCase()===e.captions.language.toLowerCase())}),this.options.captions=n.map(function(e){return e.language}),g.updateSetting.call(this,"captions",t)}},setSpeedMenu:function(e){var t=this;if(this.config.controls.includes("settings")&&this.config.settings.includes("speed")&&u.is.element(this.elements.settings.panes.speed)){u.is.array(e)?this.options.speed=e:(this.isHTML5||this.isVimeo)&&(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(e){return t.config.speed.options.includes(e)});var i=!u.is.empty(this.options.speed)&&this.options.speed.length>1;if(g.toggleTab.call(this,"speed",i),g.checkMenu.call(this),i){var n=this.elements.settings.panes.speed.querySelector("ul");u.emptyElement(n),this.options.speed.forEach(function(e){var i=g.getLabel.call(t,"speed",e);g.createMenuItem.call(t,e,n,"speed",i)}),g.updateSetting.call(this,"speed",n)}}},checkMenu:function(){var e=this.elements.settings.tabs,t=!u.is.empty(e)&&Object.values(e).some(function(e){return!e.hidden});u.toggleHidden(this.elements.settings.menu,!t)},toggleMenu:function(e){var t=this.elements.settings.form,i=this.elements.buttons.settings;if(u.is.element(t)&&u.is.element(i)){var n=u.is.boolean(e)?e:u.is.element(t)&&t.hasAttribute("hidden");if(u.is.event(e)){var s=u.is.element(t)&&t.contains(e.target),a=e.target===this.elements.buttons.settings;if(s||!s&&!a&&n)return;a&&e.stopPropagation()}u.is.element(i)&&i.setAttribute("aria-expanded",n),u.is.element(t)&&(u.toggleHidden(t,!n),u.toggleClass(this.elements.container,this.config.classNames.menu.open,n),n?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1))}},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.removeAttribute("hidden"),Array.from(t.querySelectorAll("input[name]")).forEach(function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(t);var i=t.scrollWidth,n=t.scrollHeight;return u.removeElement(t),{width:i,height:n}},showTab:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=this.elements.settings.menu,i=document.getElementById(e);if(u.is.element(i)&&"tabpanel"===i.getAttribute("role")){var n=t.querySelector('[role="tabpanel"]:not([hidden])'),s=n.parentNode;if(Array.from(t.querySelectorAll('[aria-controls="'+n.getAttribute("id")+'"]')).forEach(function(e){e.setAttribute("aria-expanded",!1)}),d.transitions&&!d.reducedMotion){s.style.width=n.scrollWidth+"px",s.style.height=n.scrollHeight+"px";var a=g.getTabSize.call(this,i);u.on(s,u.transitionEndEvent,function e(t){t.target===s&&["width","height"].includes(t.propertyName)&&(s.style.width="",s.style.height="",u.off(s,u.transitionEndEvent,e))}),s.style.width=a.width+"px",s.style.height=a.height+"px"}u.toggleHidden(n,!0),n.setAttribute("tabindex",-1),u.toggleHidden(i,!1);var r=u.getElements.call(this,'[aria-controls="'+e+'"]');Array.from(r).forEach(function(e){e.setAttribute("aria-expanded",!0)}),i.removeAttribute("tabindex"),i.querySelectorAll("button:not(:disabled), input:not(:disabled), [tabindex]")[0].focus()}},create:function(e){var t=this;if(u.is.empty(this.config.controls))return null;var i=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&i.appendChild(g.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&i.appendChild(g.createButton.call(this,"rewind")),this.config.controls.includes("play")&&i.appendChild(g.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&i.appendChild(g.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var n=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.progress)),s=g.createRange.call(this,"seek",{id:"plyr-seek-"+e.id});if(n.appendChild(s.label),n.appendChild(s.input),n.appendChild(g.createProgress.call(this,"buffer")),this.config.tooltips.seek){var a=u.createElement("span",{class:this.config.classNames.tooltip},"00:00");n.appendChild(a),this.elements.display.seekTooltip=a}this.elements.progress=n,i.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&i.appendChild(g.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&i.appendChild(g.createTime.call(this,"duration")),this.config.controls.includes("mute")&&i.appendChild(g.createButton.call(this,"mute")),this.config.controls.includes("volume")){var r=u.createElement("div",{class:"plyr__volume"}),l={max:1,step:.05,value:this.config.volume},o=g.createRange.call(this,"volume",u.extend(l,{id:"plyr-volume-"+e.id}));r.appendChild(o.label),r.appendChild(o.input),this.elements.volume=r,i.appendChild(r)}if(this.config.controls.includes("captions")&&i.appendChild(g.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!u.is.empty(this.config.settings)){var c=u.createElement("div",{class:"plyr__menu",hidden:""});c.appendChild(g.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var m=u.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,hidden:"","aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),f=u.createElement("div"),y=u.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),v=u.createElement("ul",{role:"tablist"});this.config.settings.forEach(function(i){var n=u.createElement("li",{role:"tab",hidden:""}),s=u.createElement("button",u.extend(u.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+i+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+i,"aria-expanded":!1}),h(i,t.config)),a=u.createElement("span",{class:t.config.classNames.menu.value});a.innerHTML=e[i],s.appendChild(a),n.appendChild(s),v.appendChild(n),t.elements.settings.tabs[i]=n}),y.appendChild(v),f.appendChild(y),this.config.settings.forEach(function(i){var n=u.createElement("div",{id:"plyr-settings-"+e.id+"-"+i,hidden:"","aria-labelled-by":"plyr-settings-"+e.id+"-"+i+"-tab",role:"tabpanel",tabindex:-1}),s=u.createElement("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},h(i,t.config));n.appendChild(s);var a=u.createElement("ul");n.appendChild(a),f.appendChild(n),t.elements.settings.panes[i]=n}),m.appendChild(f),c.appendChild(m),i.appendChild(c),this.elements.settings.form=m,this.elements.settings.menu=c}return this.config.controls.includes("pip")&&d.pip&&i.appendChild(g.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&d.airplay&&i.appendChild(g.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&i.appendChild(g.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(g.createButton.call(this,"play-large")),this.elements.controls=i,this.isHTML5&&g.setQualityMenu.call(this,p.getQualityOptions.call(this)),g.setSpeedMenu.call(this),i},inject:function(){var e=this;if(this.config.loadSprite){var t=g.getIconUrl.call(this);t.cors&&u.loadSprite(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var i=null;this.elements.controls=null;var n={id:this.id,seektime:this.config.seekTime,title:this.config.title},s=!0;u.is.string(this.config.controls)||u.is.element(this.config.controls)?i=this.config.controls:u.is.function(this.config.controls)?i=this.config.controls.call(this,n):(i=g.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:f.getLabel.call(this)}),s=!1);var a=function(e){var t=e;return Object.entries(n).forEach(function(e){var i=r(e,2),n=i[0],s=i[1];t=u.replaceAll(t,"{"+n+"}",s)}),t};s&&(u.is.string(this.config.controls)?i=a(i):u.is.element(i)&&(i.innerHTML=a(i.innerHTML)));var l=void 0;if(u.is.string(this.config.selectors.controls.container)&&(l=document.querySelector(this.config.selectors.controls.container)),u.is.element(l)||(l=this.elements.container),u.is.element(i)?l.appendChild(i):i&&l.insertAdjacentHTML("beforeend",i),u.is.element(this.elements.controls)||g.findElements.call(this),window.navigator.userAgent.includes("Edge")&&u.repaint(l),this.config.tooltips.controls){var o=u.getElements.call(this,[this.config.selectors.controls.wrapper," ",this.config.selectors.labels," .",this.config.classNames.hidden].join(""));Array.from(o).forEach(function(t){u.toggleClass(t,e.config.classNames.hidden,!1),u.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute("role","tooltip")})}}},f={setup:function(){if(this.supported.ui){var e=this.storage.get("language");if(u.is.empty(e)||(this.captions.language=e),u.is.empty(this.captions.language)&&(this.captions.language=this.config.captions.language.toLowerCase()),!u.is.boolean(this.captions.active)){var t=this.storage.get("captions");u.is.boolean(t)?this.captions.active=t:this.captions.active=this.config.captions.active}if(!this.isVideo||this.isYouTube||this.isHTML5&&!d.textTracks)u.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&g.setCaptionsMenu.call(this);else{u.is.element(this.elements.captions)||(this.elements.captions=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.captions)),u.insertAfter(this.elements.captions,this.elements.wrapper)),u.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!u.is.empty(f.getTracks.call(this)));var i=f.getTracks.call(this);if(!u.is.empty(i)){if(u.getBrowser().isIE&&window.URL){var n=this.media.querySelectorAll("track");Array.from(n).forEach(function(e){var t=e.getAttribute("src"),i=u.parseUrl(t);i.hostname!==window.location.href.hostname&&["http:","https:"].includes(i.protocol)&&u.fetch(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){u.removeElement(e)})})}f.setLanguage.call(this),f.show.call(this),u.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&g.setCaptionsMenu.call(this)}}}},setLanguage:function(){var e=this;if(this.isHTML5&&this.isVideo){f.getTracks.call(this).forEach(function(t){u.on(t,"cuechange",function(t){return f.setCue.call(e,t)}),t.mode="hidden"});var t=f.getCurrentTrack.call(this);u.is.track(t)&&Array.from(t.activeCues||[]).length&&f.setCue.call(this,t)}else this.isVimeo&&this.captions.active&&this.embed.enableTextTrack(this.language)},getTracks:function(){return u.is.nullOrUndefined(this.media)?[]:Array.from(this.media.textTracks||[]).filter(function(e){return["captions","subtitles"].includes(e.kind)})},getCurrentTrack:function(){var e=this,t=f.getTracks.call(this);if(!t.length)return null;var i=t.find(function(t){return t.language.toLowerCase()===e.language});(i||(i=u.getElement.call(this,"track[default]")),i)||(i=r(t,1)[0]);return i},getLabel:function(e){var t=e;return!u.is.track(t)&&d.textTracks&&this.captions.active&&(t=f.getCurrentTrack.call(this)),u.is.track(t)?u.is.empty(t.label)?u.is.empty(t.language)?h("enabled",this.config):e.language.toUpperCase():t.label:h("disabled",this.config)},setCue:function(e){var t=u.is.event(e)?e.target:e,i=t.activeCues,n=i.length&&i[0];t===f.getCurrentTrack.call(this)&&(u.is.cue(n)?f.setText.call(this,n.getCueAsHTML()):f.setText.call(this,null),u.dispatchEvent.call(this,this.media,"cuechange"))},setText:function(e){if(this.supported.ui)if(u.is.element(this.elements.captions)){var t=u.createElement("span");u.emptyElement(this.elements.captions);var i=u.is.nullOrUndefined(e)?"":e;u.is.string(i)?t.innerText=i.trim():t.appendChild(i),this.elements.captions.appendChild(t)}else this.debug.warn("No captions element to render to")},show:function(){var e=this.storage.get("captions");u.is.boolean(e)?this.captions.active=e:e=this.config.captions.active,e&&(u.toggleClass(this.elements.container,this.config.classNames.captions.active,!0),u.toggleState(this.elements.buttons.captions,!0))}},y=function(){},v=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];n(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return s(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):y}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):y}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):y}}]),e}(),b={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,resetOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.3.8/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240,"default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:(navigator.language||navigator.userLanguage).split("-")[0]},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime}s",play:"Play",pause:"Pause",fastForward:"Forward {seektime}s",seek:"Seek",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",normal:"Normal",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",enabled:"Enabled",advertisement:"Ad"},urls:{vimeo:{sdk:"https://player.vimeo.com/api/player.js",iframe:"https://player.vimeo.com/video/{0}?{1}",api:"https://vimeo.com/api/v2/video/{0}.json"},youtube:{sdk:"https://www.youtube.com/iframe_api",api:"https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet"},googleIMA:{sdk:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","adscontentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',fastForward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress--buffer",played:".plyr__progress--played",loop:".plyr__progress--loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{type:"plyr--{0}",provider:"plyr--{0}",video:"plyr__video-wrapper",embed:"plyr__video-embed",embedContainer:"plyr__video-embed__container",poster:"plyr__poster",posterEnabled:"plyr__poster-enabled",ads:"plyr__ads",control:"plyr__control",playing:"plyr--playing",paused:"plyr--paused",stopped:"plyr--stopped",loading:"plyr--loading",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1,publisherId:""}},k=u.getBrowser();function w(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;u.is.element(e)&&u.toggleState(e,this.active),u.dispatchEvent.call(this.player,this.target,this.active?"enterfullscreen":"exitfullscreen",!0),k.isIos||u.trapFocus.call(this.player,this.target,this.active)}}function E(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",u.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),w.call(this)}var T=function(){function e(t){var i=this;n(this,e),this.player=t,this.prefix=e.prefix,this.property=e.property,this.scrollPosition={x:0,y:0},u.on(document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){w.call(i)}),u.on(this.player.elements.container,"dblclick",function(e){u.is.element(i.player.elements.controls)&&i.player.elements.controls.contains(e.target)||i.toggle()}),this.update()}return s(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),u.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(k.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?u.is.empty(this.prefix)||this.target[this.prefix+"Request"+this.property]():this.target.requestFullscreen():E.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(k.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(e.native)if(this.prefix){if(!u.is.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document[""+this.prefix+t+this.property]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document);else E.call(this,!1)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){return(e.native||this.player.config.fullscreen.fallback)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[""+this.prefix+this.property+"Element"]:document.fullscreenElement)===this.target:u.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return k.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if(u.is.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!u.is.function(document[t+"ExitFullscreen"])&&!u.is.function(document[t+"CancelFullScreen"]))&&(e=t,!0)}),e}},{key:"property",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}(),A=u.getBrowser(),C={addStyleHook:function(){u.toggleClass(this.elements.container,this.config.selectors.container.replace(".",""),!0),u.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void C.toggleNativeControls.call(this,!0);u.is.element(this.elements.controls)||(g.inject.call(this),this.listeners.controls()),C.toggleNativeControls.call(this),f.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,g.updateVolume.call(this),g.timeUpdate.call(this),C.checkPlaying.call(this),u.toggleClass(this.elements.container,this.config.classNames.pip.supported,d.pip&&this.isHTML5&&this.isVideo),u.toggleClass(this.elements.container,this.config.classNames.airplay.supported,d.airplay&&this.isHTML5),u.toggleClass(this.elements.container,this.config.classNames.isIos,A.isIos),u.toggleClass(this.elements.container,this.config.classNames.isTouch,this.touch),this.ready=!0,setTimeout(function(){u.dispatchEvent.call(e,e.media,"ready")},0),C.setTitle.call(this),this.poster&&this.elements.poster&&!this.elements.poster.style.backgroundImage&&C.setPoster.call(this,this.poster)},setTitle:function(){var e=h("play",this.config);if(u.is.string(this.config.title)&&!u.is.empty(this.config.title)&&(e+=", "+this.config.title,this.elements.container.setAttribute("aria-label",this.config.title)),u.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=u.getElement.call(this,"iframe");if(!u.is.element(t))return;var i=u.is.empty(this.config.title)?"video":this.config.title,n=h("frameTitle",this.config);t.setAttribute("title",n.replace("{title}",i))}},togglePoster:function(e){u.toggleClass(this.elements.container,this.config.classNames.posterEnabled,e)},setPoster:function(e){var t=this;if(this.media.setAttribute("poster",e),!u.is.element(this.elements.poster))return Promise.reject();var i=u.loadImage(e).then(function(){return t.elements.poster.style.backgroundImage="url('"+e+"')",Object.assign(t.elements.poster.style,{backgroundImage:"url('"+e+"')",backgroundSize:""}),C.togglePoster.call(t,!0),e});return i.catch(function(){return C.togglePoster.call(t,!1)}),i},checkPlaying:function(e){u.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),u.toggleClass(this.elements.container,this.config.classNames.paused,this.paused),u.toggleClass(this.elements.container,this.config.classNames.stopped,this.stopped),u.toggleState(this.elements.buttons.play,this.playing),u.is.event(e)&&"timeupdate"===e.type||C.toggleControls.call(this)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){u.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),C.toggleControls.call(t)},this.loading?250:0)},toggleControls:function(e){var t=this.elements.controls;t&&this.config.hideControls&&this.toggleControls(Boolean(e||this.loading||this.paused||t.pressed||t.hover))}},S=u.getBrowser(),P=function(){function e(t){n(this,e),this.player=t,this.lastKey=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.firstTouch=this.firstTouch.bind(this)}return s(e,[{key:"handleKey",value:function(e){var t=this,i=e.keyCode?e.keyCode:e.which,n="keydown"===e.type,s=n&&i===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&u.is.number(i)){if(n){var a=u.getFocusElement();if(u.is.element(a)&&u.matches(a,this.player.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(i)&&(e.preventDefault(),e.stopPropagation()),i){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:s||(t.player.currentTime=t.player.duration/10*(i-48));break;case 32:case 75:s||this.player.togglePlay();break;case 38:this.player.increaseVolume(.1);break;case 40:this.player.decreaseVolume(.1);break;case 77:s||(this.player.muted=!this.player.muted);break;case 39:this.player.forward();break;case 37:this.player.rewind();break;case 70:this.player.fullscreen.toggle();break;case 67:s||this.player.toggleCaptions();break;case 76:this.player.loop=!this.player.loop}!this.player.fullscreen.enabled&&this.player.fullscreen.active&&27===i&&this.player.fullscreen.toggle(),this.lastKey=i}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){g.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){this.player.touch=!0,u.toggleClass(this.player.elements.container,this.player.config.classNames.isTouch,!0),u.off(document.body,"touchstart",this.firstTouch)}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.player.config.keyboard.global&&u.toggleListener(window,"keydown keyup",this.handleKey,e,!1),u.toggleListener(document.body,"click",this.toggleMenu,e),u.on(document.body,"touchstart",this.firstTouch)}},{key:"container",value:function(){var e=this;!this.player.config.keyboard.global&&this.player.config.keyboard.focused&&u.on(this.player.elements.container,"keydown keyup",this.handleKey,!1),u.on(this.player.elements.container,"focusout",function(t){u.toggleClass(t.target,e.player.config.classNames.tabFocus,!1)}),u.on(this.player.elements.container,"keydown",function(t){9===t.keyCode&&setTimeout(function(){u.toggleClass(u.getFocusElement(),e.player.config.classNames.tabFocus,!0)},0)}),u.on(this.player.elements.container,"mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen",function(t){var i=e.player.elements.controls;"enterfullscreen"===t.type&&(i.pressed=!1,i.hover=!1);var n=0;["touchstart","touchmove","mousemove"].includes(t.type)&&(C.toggleControls.call(e.player,!0),n=e.player.touch?3e3:2e3),clearTimeout(e.player.timers.controls),e.player.timers.controls=setTimeout(function(){return C.toggleControls.call(e.player,!1)},n)})}},{key:"media",value:function(){var e=this;if(u.on(this.player.media,"timeupdate seeking seeked",function(t){return g.timeUpdate.call(e.player,t)}),u.on(this.player.media,"durationchange loadeddata loadedmetadata",function(t){return g.durationUpdate.call(e.player,t)}),u.on(this.player.media,"loadeddata",function(){u.toggleHidden(e.player.elements.volume,!e.player.hasAudio),u.toggleHidden(e.player.elements.buttons.mute,!e.player.hasAudio)}),u.on(this.player.media,"ended",function(){e.player.isHTML5&&e.player.isVideo&&e.player.config.resetOnEnd&&e.player.restart()}),u.on(this.player.media,"progress playing seeking seeked",function(t){return g.updateProgress.call(e.player,t)}),u.on(this.player.media,"volumechange",function(t){return g.updateVolume.call(e.player,t)}),u.on(this.player.media,"playing play pause ended emptied timeupdate",function(t){return C.checkPlaying.call(e.player,t)}),u.on(this.player.media,"waiting canplay seeked playing",function(t){return C.checkLoading.call(e.player,t)}),u.on(this.player.media,"playing",function(){e.player.ads&&e.player.ads.enabled&&!e.player.ads.initialized&&e.player.ads.managerPromise.then(function(){return e.player.ads.play()}).catch(function(){return e.player.play()})}),this.player.supported.ui&&this.player.config.clickToPlay&&!this.player.isAudio){var t=u.getElement.call(this.player,"."+this.player.config.classNames.video);if(!u.is.element(t))return;u.on(t,"click",function(){e.player.config.hideControls&&e.player.touch&&!e.player.paused||(e.player.paused?e.player.play():e.player.ended?(e.player.restart(),e.player.play()):e.player.pause())})}this.player.supported.ui&&this.player.config.disableContextMenu&&u.on(this.player.elements.wrapper,"contextmenu",function(e){e.preventDefault()},!1),u.on(this.player.media,"volumechange",function(){e.player.storage.set({volume:e.player.volume,muted:e.player.muted})}),u.on(this.player.media,"ratechange",function(){g.updateSetting.call(e.player,"speed"),e.player.storage.set({speed:e.player.speed})}),u.on(this.player.media,"qualityrequested",function(t){e.player.storage.set({quality:t.detail.quality})}),u.on(this.player.media,"qualitychange",function(t){g.updateSetting.call(e.player,"quality",null,t.detail.quality)}),u.on(this.player.media,"languagechange",function(){g.updateSetting.call(e.player,"captions"),e.player.storage.set({language:e.player.language})}),u.on(this.player.media,"captionsenabled captionsdisabled",function(){g.updateSetting.call(e.player,"captions"),e.player.storage.set({captions:e.player.captions.active})}),u.on(this.player.media,this.player.config.events.concat(["keyup","keydown"]).join(" "),function(t){var i={};"error"===t.type&&(i=e.player.media.error),u.dispatchEvent.call(e.player,e.player.elements.container,t.type,!0,i)})}},{key:"controls",value:function(){var e=this,t=S.isIE?"change":"input",i=function(t,i,n){var s=e.player.config.listeners[n],a=!0;u.is.function(s)&&(a=s.call(e.player,t)),a&&u.is.function(i)&&i.call(e.player,t)},n=function(t,n,s,a){var r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],l=e.player.config.listeners[a],o=u.is.function(l);u.on(t,n,function(e){return i(e,s,a)},r&&!o)};n(this.player.elements.buttons.play,"click",this.player.togglePlay,"play"),n(this.player.elements.buttons.restart,"click",this.player.restart,"restart"),n(this.player.elements.buttons.rewind,"click",this.player.rewind,"rewind"),n(this.player.elements.buttons.fastForward,"click",this.player.forward,"fastForward"),n(this.player.elements.buttons.mute,"click",function(){e.player.muted=!e.player.muted},"mute"),n(this.player.elements.buttons.captions,"click",this.player.toggleCaptions),n(this.player.elements.buttons.fullscreen,"click",function(){e.player.fullscreen.toggle()},"fullscreen"),n(this.player.elements.buttons.pip,"click",function(){e.player.pip="toggle"},"pip"),n(this.player.elements.buttons.airplay,"click",this.player.airplay,"airplay"),n(this.player.elements.buttons.settings,"click",function(t){g.toggleMenu.call(e.player,t)}),n(this.player.elements.settings.form,"click",function(t){t.stopPropagation();var n=function(){var t="plyr-settings-"+e.player.id+"-home";g.showTab.call(e.player,t)};if(u.matches(t.target,e.player.config.selectors.inputs.language))i(t,function(){e.player.language=t.target.value,n()},"language");else if(u.matches(t.target,e.player.config.selectors.inputs.quality))i(t,function(){e.player.quality=t.target.value,n()},"quality");else if(u.matches(t.target,e.player.config.selectors.inputs.speed))i(t,function(){e.player.speed=parseFloat(t.target.value),n()},"speed");else{var s=t.target;g.showTab.call(e.player,s.getAttribute("aria-controls"))}}),n(this.player.elements.inputs.seek,"mousedown mousemove",function(t){var i=e.player.elements.progress.getBoundingClientRect(),n=100/i.width*(t.pageX-i.left);t.currentTarget.setAttribute("seek-value",n)}),n(this.player.elements.inputs.seek,"mousedown mouseup keydown keyup touchstart touchend",function(t){var i=t.currentTarget,n=i.hasAttribute("play-on-seeked"),s=["mouseup","touchend","keyup"].includes(t.type);n&&s?(i.removeAttribute("play-on-seeked"),e.player.play()):!s&&e.player.playing&&(i.setAttribute("play-on-seeked",""),e.player.pause())}),n(this.player.elements.inputs.seek,t,function(t){var i=t.currentTarget,n=i.getAttribute("seek-value");u.is.empty(n)&&(n=i.value),i.removeAttribute("seek-value"),e.player.currentTime=n/i.max*e.player.duration},"seek"),this.player.config.toggleInvert&&!u.is.element(this.player.elements.display.duration)&&n(this.player.elements.display.currentTime,"click",function(){0!==e.player.currentTime&&(e.player.config.invertTime=!e.player.config.invertTime,g.timeUpdate.call(e.player))}),n(this.player.elements.inputs.volume,t,function(t){e.player.volume=t.target.value},"volume"),S.isWebkit&&n(u.getElements.call(this.player,'input[type="range"]'),"input",function(t){g.updateRangeFill.call(e.player,t.target)}),n(this.player.elements.progress,"mouseenter mouseleave mousemove",function(t){return g.updateSeekTooltip.call(e.player,t)}),n(this.player.elements.controls,"mouseenter mouseleave",function(t){e.player.elements.controls.hover=!e.player.touch&&"mouseenter"===t.type}),n(this.player.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.player.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),n(this.player.elements.controls,"focusin focusout",function(t){var i=e.player,n=i.config,s=i.elements,a=i.timers;if(u.toggleClass(s.controls,n.classNames.noTransition,"focusin"===t.type),C.toggleControls.call(e.player,"focusin"===t.type),"focusin"===t.type){setTimeout(function(){u.toggleClass(s.controls,n.classNames.noTransition,!1)},0);var r=e.touch?3e3:4e3;clearTimeout(a.controls),a.controls=setTimeout(function(){return C.toggleControls.call(e.player,!1)},r)}}),n(this.player.elements.inputs.volume,"wheel",function(t){var i=t.webkitDirectionInvertedFromDevice,n=0;(t.deltaY<0||t.deltaX>0)&&(i?(e.player.decreaseVolume(.02),n=-1):(e.player.increaseVolume(.02),n=1)),(t.deltaY>0||t.deltaX<0)&&(i?(e.player.increaseVolume(.02),n=1):(e.player.decreaseVolume(.02),n=-1)),(1===n&&e.player.media.volume<1||-1===n&&e.player.media.volume>0)&&t.preventDefault()},"volume",!1)}},{key:"clear",value:function(){this.global(!1)}}]),e}();function N(e){this.media.paused===e&&(this.media.paused=!e,u.dispatchEvent.call(this,this.media,e?"play":"pause"))}var x={setup:function(){var e=this;u.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),x.setAspectRatio.call(this),u.is.object(window.Vimeo)?x.ready.call(this):u.loadScript(this.config.urls.vimeo.sdk).then(function(){x.ready.call(e)}).catch(function(t){e.debug.warn("Vimeo API failed to load",t)})},setAspectRatio:function(e){var t=u.is.string(e)?e.split(":"):this.config.ratio.split(":"),i=100/t[0]*t[1];if(this.elements.wrapper.style.paddingBottom=i+"%",this.supported.ui){var n=(240-i)/4.8;this.media.style.transform="translateY(-"+n+"%)"}},ready:function(){var e=this,t=this,i={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media",playsinline:!this.config.fullscreen.iosNative},n=u.buildUrlParams(i),s=t.media.getAttribute("src");u.is.empty(s)&&(s=t.media.getAttribute(t.config.attributes.embed.id));var a=u.parseVimeoId(s),r=u.createElement("iframe"),l=u.format(t.config.urls.vimeo.iframe,a,n);r.setAttribute("src",l),r.setAttribute("allowfullscreen",""),r.setAttribute("allowtransparency",""),r.setAttribute("allow","autoplay");var o=u.createElement("div",{class:t.config.classNames.embedContainer});o.appendChild(r),t.media=u.replaceElement(o,t.media),u.fetch(u.format(t.config.urls.vimeo.api,a),"json").then(function(e){if(!u.is.empty(e)){var i=new URL(e[0].thumbnail_large);i.pathname=i.pathname.split("_")[0]+".jpg",C.setPoster.call(t,i.href)}}),t.embed=new window.Vimeo.Player(r,{autopause:t.config.autopause,muted:t.muted}),t.media.paused=!0,t.media.currentTime=0,t.supported.ui&&t.embed.disableTextTrack(),t.media.play=function(){return N.call(t,!0),t.embed.play()},t.media.pause=function(){return N.call(t,!1),t.embed.pause()},t.media.stop=function(){t.pause(),t.currentTime=0};var c=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return c},set:function(e){var i=t.embed,n=t.media,s=t.paused,a=t.volume;n.seeking=!0,u.dispatchEvent.call(t,n,"seeking"),Promise.resolve(s&&i.setVolume(0)).then(function(){return i.setCurrentTime(e)}).then(function(){return s&&i.pause()}).then(function(){return s&&i.setVolume(a)}).catch(function(){})}});var d=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return d},set:function(e){t.embed.setPlaybackRate(e).then(function(){d=e,u.dispatchEvent.call(t,t.media,"ratechange")}).catch(function(e){"Error"===e.name&&g.setSpeedMenu.call(t,[])})}});var p=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return p},set:function(e){t.embed.setVolume(e).then(function(){p=e,u.dispatchEvent.call(t,t.media,"volumechange")})}});var h=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return h},set:function(e){var i=!!u.is.boolean(e)&&e;t.embed.setVolume(i?0:t.config.volume).then(function(){h=i,u.dispatchEvent.call(t,t.media,"volumechange")})}});var m=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return m},set:function(e){var i=u.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(i).then(function(){m=i})}});var y=void 0;t.embed.getVideoUrl().then(function(e){y=e}).catch(function(t){e.debug.warn(t)}),Object.defineProperty(t.media,"currentSrc",{get:function(){return y}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var i=u.getAspectRatio(t[0],t[1]);x.setAspectRatio.call(e,i)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(i){t.config.title=i,C.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){c=e,u.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,u.dispatchEvent.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,f.setup.call(t)}),t.embed.on("cuechange",function(e){var i=null;e.cues.length&&(i=u.stripHTML(e.cues[0].text)),f.setText.call(t,i)}),t.embed.on("loaded",function(){u.is.element(t.embed.element)&&t.supported.ui&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){N.call(t,!0),u.dispatchEvent.call(t,t.media,"playing")}),t.embed.on("pause",function(){N.call(t,!1)}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,c=e.seconds,u.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,u.dispatchEvent.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&u.dispatchEvent.call(t,t.media,"canplaythrough"),t.embed.getDuration().then(function(e){e!==t.media.duration&&(t.media.duration=e,u.dispatchEvent.call(t,t.media,"durationchange"))})}),t.embed.on("seeked",function(){t.media.seeking=!1,u.dispatchEvent.call(t,t.media,"seeked")}),t.embed.on("ended",function(){t.media.paused=!0,u.dispatchEvent.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,u.dispatchEvent.call(t,t.media,"error")}),setTimeout(function(){return C.build.call(t)},0)}};function L(e){switch(e){case"hd2160":return 2160;case 2160:return"hd2160";case"hd1440":return 1440;case 1440:return"hd1440";case"hd1080":return 1080;case 1080:return"hd1080";case"hd720":return 720;case 720:return"hd720";case"large":return 480;case 480:return"large";case"medium":return 360;case 360:return"medium";case"small":return 240;case 240:return"small";default:return"default"}}function M(e){this.media.paused===e&&(this.media.paused=!e,u.dispatchEvent.call(this,this.media,e?"play":"pause"))}var I={setup:function(){var e=this;u.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),I.setAspectRatio.call(this),u.is.object(window.YT)&&u.is.function(window.YT.Player)?I.ready.call(this):(u.loadScript(this.config.urls.youtube.sdk).catch(function(t){e.debug.warn("YouTube API failed to load",t)}),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){I.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(u.is.function(this.embed.getVideoData)){var i=this.embed.getVideoData().title;if(u.is.empty(i))return this.config.title=i,void C.setTitle.call(this)}var n=this.config.keys.google;if(u.is.string(n)&&!u.is.empty(n)){var s=u.format(this.config.urls.youtube.api,e,n);u.fetch(s).then(function(e){u.is.object(e)&&(t.config.title=e.items[0].snippet.title,C.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(u.is.empty(t)||!t.startsWith("youtube-")){var i=e.media.getAttribute("src");u.is.empty(i)&&(i=e.media.getAttribute(this.config.attributes.embed.id));var n=u.parseYouTubeId(i),s=u.generateId(e.provider),a=u.createElement("div",{id:s});e.media=u.replaceElement(a,e.media);var r=function(e){return"https://img.youtube.com/vi/"+n+"/"+e+"default.jpg"};u.loadImage(r("maxres"),121).catch(function(){return u.loadImage(r("sd"),121)}).catch(function(){return u.loadImage(r("hq"))}).then(function(t){return C.setPoster.call(e,t.src)}).then(function(t){t.includes("maxres")||(e.elements.poster.style.backgroundSize="cover")}),e.embed=new window.YT.Player(s,{videoId:n,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!u.is.object(e.media.error)){var i={code:t.data};switch(t.data){case 2:i.message="The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.";break;case 5:i.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";break;case 100:i.message="The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.";break;case 101:case 150:i.message="The owner of the requested video does not allow it to be played in embedded players.";break;default:i.message="An unknown error occured"}e.media.error=i,u.dispatchEvent.call(e,e.media,"error")}},onPlaybackQualityChange:function(){u.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:e.media.quality})},onPlaybackRateChange:function(t){var i=t.target;e.media.playbackRate=i.getPlaybackRate(),u.dispatchEvent.call(e,e.media,"ratechange")},onReady:function(t){var i=t.target;I.getTitle.call(e,n),e.media.play=function(){M.call(e,!0),i.playVideo()},e.media.pause=function(){M.call(e,!1),i.pauseVideo()},e.media.stop=function(){i.stopVideo()},e.media.duration=i.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(i.getCurrentTime())},set:function(t){e.paused&&e.embed.mute(),e.media.seeking=!0,u.dispatchEvent.call(e,e.media,"seeking"),i.seekTo(t)}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return i.getPlaybackRate()},set:function(e){i.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return L(i.getPlaybackQuality())},set:function(t){var n=t;i.setPlaybackQuality(L(n)),u.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:n})}});var s=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return s},set:function(t){s=t,i.setVolume(100*s),u.dispatchEvent.call(e,e.media,"volumechange")}});var a=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return a},set:function(t){var n=u.is.boolean(t)?t:a;a=n,i[n?"mute":"unMute"](),u.dispatchEvent.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return i.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=i.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),u.dispatchEvent.call(e,e.media,"timeupdate"),u.dispatchEvent.call(e,e.media,"durationchange"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval(function(){e.media.buffered=i.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&u.dispatchEvent.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),u.dispatchEvent.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return C.build.call(e)},50)},onStateChange:function(t){var i,n=t.target;switch(clearInterval(e.timers.playing),e.media.seeking&&[1,2].includes(t.data)&&(e.media.seeking=!1,u.dispatchEvent.call(e,e.media,"seeked")),t.data){case-1:u.dispatchEvent.call(e,e.media,"timeupdate"),e.media.buffered=n.getVideoLoadedFraction(),u.dispatchEvent.call(e,e.media,"progress");break;case 0:M.call(e,!1),e.media.loop?(n.stopVideo(),n.playVideo()):u.dispatchEvent.call(e,e.media,"ended");break;case 1:e.media.paused?e.media.pause():(M.call(e,!0),u.dispatchEvent.call(e,e.media,"playing"),e.timers.playing=setInterval(function(){u.dispatchEvent.call(e,e.media,"timeupdate")},50),e.media.duration!==n.getDuration()&&(e.media.duration=n.getDuration(),u.dispatchEvent.call(e,e.media,"durationchange")),g.setQualityMenu.call(e,(i=n.getAvailableQualityLevels(),u.is.empty(i)?i:u.dedupe(i.map(function(e){return L(e)})))));break;case 2:e.muted||e.embed.unMute(),M.call(e,!1)}u.dispatchEvent.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},q={setup:function(){if(this.media)if(u.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),u.toggleClass(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&u.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.isVideo&&(this.elements.wrapper=u.createElement("div",{class:this.config.classNames.video}),u.wrap(this.media,this.elements.wrapper),this.elements.poster=u.createElement("div",{class:this.config.classNames.poster}),this.elements.wrapper.appendChild(this.elements.poster)),this.isEmbed)switch(this.provider){case"youtube":I.setup.call(this);break;case"vimeo":x.setup.call(this)}else this.isHTML5&&p.extend.call(this);else this.debug.warn("No media element found!")}},_=function(){function e(t){var i=this;n(this,e),this.player=t,this.publisherId=t.config.ads.publisherId,this.playing=!1,this.initialized=!1,this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.managerPromise=new Promise(function(e,t){i.on("loaded",e),i.on("error",t)}),this.load()}return s(e,[{key:"load",value:function(){var e=this;this.enabled&&(u.is.object(window.google)&&u.is.object(window.google.ima)?this.ready():u.loadScript(this.player.config.urls.googleIMA.sdk).then(function(){e.ready()}).catch(function(){e.trigger("error",new Error("Google IMA SDK failed to load"))}))}},{key:"ready",value:function(){var e=this;this.startSafetyTimer(12e3,"ready()"),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.listeners(),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=u.createElement("div",{class:this.player.config.classNames.ads}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:"requestAds",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var i=new google.ima.AdsRequest;i.adTagUrl=this.tagUrl,i.linearAdSlotWidth=t.offsetWidth,i.linearAdSlotHeight=t.offsetHeight,i.nonLinearAdSlotWidth=t.offsetWidth,i.nonLinearAdSlotHeight=t.offsetHeight,i.forceNonLinearFullSlot=!1,i.setAdWillPlayMuted(!this.player.muted),this.loader.requestAds(i)}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=setInterval(function(){var t=u.formatTime(Math.max(e.manager.getRemainingTime(),0)),i=h("advertisement",e.player.config)+" - "+t;e.elements.container.setAttribute("data-badge-text",i)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,i=new google.ima.AdsRenderingSettings;i.restoreCustomPlaybackStateOnAdBreakComplete=!0,i.enablePreloading=!0,this.manager=e.getAdsManager(this.player,i),this.cuePoints=this.manager.getCuePoints(),u.is.empty(this.cuePoints)||this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var i=t.player.elements.progress;if(u.is.element(i)){var n=100/t.player.duration*e,s=u.createElement("span",{class:t.player.config.classNames.cues});s.style.left=n.toString()+"%",i.appendChild(s)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.trigger("loaded")}},{key:"onAdEvent",value:function(e){var t=this,i=this.player.elements.container,n=e.getAd(),s=function(e){var i="ads"+e.replace(/_/g,"").toLowerCase();u.dispatchEvent.call(t.player,t.player.media,i)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.trigger("loaded"),s(e.type),this.pollCountdown(!0),n.isLinear()||(n.width=i.offsetWidth,n.height=i.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:s(e.type),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:s(e.type),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:s(e.type),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:case google.ima.AdEvent.Type.MIDPOINT:case google.ima.AdEvent.Type.COMPLETE:case google.ima.AdEvent.Type.IMPRESSION:case google.ima.AdEvent.Type.CLICK:s(e.type)}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.warn("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,i=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return i=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;u.is.empty(e.cuePoints)||e.cuePoints.forEach(function(n,s){i<n&&n<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(s,1))})}),window.addEventListener("resize",function(){e.manager&&e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.resumeContent(),this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}}).catch(function(){})}},{key:"resumeContent",value:function(){this.elements.container.style.zIndex="",this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){this.elements.container.style.zIndex=3,this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.trigger("error"),this.loadAds()}},{key:"loadAds",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on("loaded",t),e.player.debug.log(e.manager)}),e.requestAds()}).catch(function(){})}},{key:"trigger",value:function(e){for(var t=this,i=arguments.length,n=Array(i>1?i-1:0),s=1;s<i;s++)n[s-1]=arguments[s];var a=this.events[e];u.is.array(a)&&a.forEach(function(e){u.is.function(e)&&e.apply(t,n)})}},{key:"on",value:function(e,t){return u.is.array(this.events[e])||(this.events[e]=[]),this.events[e].push(t),this}},{key:"startSafetyTimer",value:function(e,t){var i=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=setTimeout(function(){i.cancel(),i.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){u.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:"enabled",get:function(){return this.player.isVideo&&this.player.config.ads.enabled&&!u.is.empty(this.publisherId)}},{key:"tagUrl",get:function(){var e={AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId};return"https://go.aniview.com/api/adserver6/vast/?"+u.buildUrlParams(e)}}]),e}(),O={insertElements:function(e,t){var i=this;u.is.string(t)?u.insertElement(e,this.media,{src:t}):u.is.array(t)&&t.forEach(function(t){u.insertElement(e,i.media,t)})},change:function(e){var t=this;u.is.object(e)&&"sources"in e&&e.sources.length?(p.cancelRequests.call(this),this.destroy.call(this,function(){switch(t.options.quality=[],u.removeElement(t.media),t.media=null,u.is.element(t.elements.container)&&t.elements.container.removeAttribute("class"),t.type=e.type,t.provider=u.is.empty(e.sources[0].provider)?o.html5:e.sources[0].provider,t.supported=d.check(t.type,t.provider,t.config.playsinline),t.provider+":"+t.type){case"html5:video":t.media=u.createElement("video");break;case"html5:audio":t.media=u.createElement("audio");break;case"youtube:video":case"vimeo:video":t.media=u.createElement("div",{src:e.sources[0].src})}t.elements.container.appendChild(t.media),u.is.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),u.is.empty(e.poster)||(t.poster=e.poster),t.config.loop.active&&t.media.setAttribute("loop",""),t.config.muted&&t.media.setAttribute("muted",""),t.config.playsinline&&t.media.setAttribute("playsinline","")),C.addStyleHook.call(t),t.isHTML5&&O.insertElements.call(t,"source",e.sources),t.config.title=e.title,q.setup.call(t),t.isHTML5&&("tracks"in e&&O.insertElements.call(t,"track",e.tracks),t.media.load()),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&C.build.call(t),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}},j=function(){function e(t,i){var s=this;if(n(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=d.touch,this.media=t,u.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||u.is.nodeList(this.media)||u.is.array(this.media))&&(this.media=this.media[0]),this.config=u.extend({},b,e.defaults,i||{},function(){try{return JSON.parse(s.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:null},this.fullscreen={active:!1},this.options={speed:[],quality:[],captions:[]},this.debug=new v(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",d),!u.is.nullOrUndefined(this.media)&&u.is.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(d.check().api){var a=this.media.cloneNode(!0);a.autoplay=!1,this.elements.original=a;var r=this.media.tagName.toLowerCase(),p=null,h=null,m=null;switch(r){case"div":if(p=this.media.querySelector("iframe"),u.is.element(p)){if(h=p.getAttribute("src"),this.provider=u.getProviderByUrl(h),this.elements.container=this.media,this.media=p,this.elements.container.className="",m=u.getUrlParams(h),!u.is.empty(m)){var g=["1","true"];g.includes(m.autoplay)&&(this.config.autoplay=!0),g.includes(m.loop)&&(this.config.loop.active=!0),this.isYouTube?this.config.playsinline=g.includes(m.playsinline):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(u.is.empty(this.provider)||!Object.keys(o).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=c.video;break;case"video":case"audio":this.type=r,this.provider=o.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("playsinline")&&(this.config.playsinline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=d.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.listeners=new P(this),this.storage=new l(this),this.media.plyr=this,u.is.element(this.elements.container)||(this.elements.container=u.createElement("div"),u.wrap(this.media,this.elements.container)),this.elements.container.setAttribute("tabindex",0),C.addStyleHook.call(this),q.setup.call(this),this.config.debug&&u.on(this.elements.container,this.config.events.join(" "),function(e){s.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&C.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new T(this),this.ads=new _(this),this.config.autoplay&&this.play()):this.debug.error("Setup failed: no support")}else this.debug.error("Setup failed: no support");else this.debug.error("Setup failed: disabled by config");else this.debug.error("Setup failed: no suitable element passed")}return s(e,[{key:"play",value:function(){return u.is.function(this.media.play)?this.media.play():null}},{key:"pause",value:function(){this.playing&&u.is.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){(u.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?(this.pause(),this.restart()):u.is.function(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(u.is.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(u.is.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(u.is.number(e)?e:1)}},{key:"decreaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-(u.is.number(e)?e:1)}},{key:"toggleCaptions",value:function(e){if(this.supported.ui){var t=u.is.boolean(e)?e:!this.elements.container.classList.contains(this.config.classNames.captions.active);this.captions.active!==t&&(this.captions.active=t,u.toggleState(this.elements.buttons.captions,this.captions.active),u.toggleClass(this.elements.container,this.config.classNames.captions.active,this.captions.active),u.dispatchEvent.call(this,this.media,this.captions.active?"captionsenabled":"captionsdisabled"))}}},{key:"airplay",value:function(){d.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){if(this.supported.ui&&!this.isAudio){var t=u.hasClass(this.elements.container,this.config.classNames.hideControls),i=void 0===e?void 0:!e,n=u.toggleClass(this.elements.container,this.config.classNames.hideControls,i);if(n&&this.config.controls.includes("settings")&&!u.is.empty(this.config.settings)&&g.toggleMenu.call(this,!1),n!==t){var s=n?"controlshidden":"controlsshown";u.dispatchEvent.call(this,this.media,s)}return!n}return!1}},{key:"on",value:function(e,t){u.on(this.elements.container,e,t)}},{key:"off",value:function(e,t){u.off(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var n=function(){document.body.style.overflow="",t.embed=null,i?(Object.keys(t.elements).length&&(u.removeElement(t.elements.buttons.play),u.removeElement(t.elements.captions),u.removeElement(t.elements.controls),u.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),u.is.function(e)&&e()):(t.listeners.clear(),u.replaceElement(t.elements.original,t.elements.container),u.dispatchEvent.call(t,t.elements.original,"destroyed",!0),u.is.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};switch(this.stop(),this.provider+":"+this.type){case"html5:video":case"html5:audio":clearTimeout(this.timers.loading),C.toggleNativeControls.call(this,!0),n();break;case"youtube:video":clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&u.is.function(this.embed.destroy)&&this.embed.destroy(),n();break;case"vimeo:video":null!==this.embed&&this.embed.unload().then(n),setTimeout(n,200)}}}},{key:"supports",value:function(e){return d.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===o.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===o.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===o.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===c.video)}},{key:"isAudio",get:function(){return Boolean(this.type===c.audio)}},{key:"playing",get:function(){return Boolean(this.ready&&!this.paused&&!this.ended)}},{key:"paused",get:function(){return Boolean(this.media.paused)}},{key:"stopped",get:function(){return Boolean(this.paused&&0===this.currentTime)}},{key:"ended",get:function(){return Boolean(this.media.ended)}},{key:"currentTime",set:function(e){var t=0;u.is.number(e)&&(t=e),t<0?t=0:t>this.duration&&(t=this.duration),this.media.currentTime=t,this.debug.log("Seeking to "+this.currentTime+" seconds")},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return u.is.number(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}},{key:"seeking",get:function(){return Boolean(this.media.seeking)}},{key:"duration",get:function(){var e=parseFloat(this.config.duration),t=this.media?Number(this.media.duration):0;return Number.isNaN(e)?t:e}},{key:"volume",set:function(e){var t=e;u.is.string(t)&&(t=Number(t)),u.is.number(t)||(t=this.storage.get("volume")),u.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!u.is.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;u.is.boolean(t)||(t=this.storage.get("muted")),u.is.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return Boolean(this.media.muted)}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;u.is.number(e)&&(t=e),u.is.number(t)||(t=this.storage.get("speed")),u.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=null;if(u.is.empty(e)||(t=Number(e)),u.is.number(t)&&0!==t||(t=this.storage.get("quality")),u.is.number(t)||(t=this.config.quality.selected),u.is.number(t)||(t=this.config.quality.default),this.options.quality.length){if(!this.options.quality.includes(t)){var i=u.closest(this.options.quality,t);this.debug.warn("Unsupported quality option: "+t+", using "+i+" instead"),t=i}this.config.quality.selected=t,this.media.quality=t}},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=u.is.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return Boolean(this.media.loop)}},{key:"source",set:function(e){O.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isVideo?C.setPoster.call(this,e):this.debug.warn("Poster can only be set for video")},get:function(){return this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=u.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:"language",set:function(e){if(u.is.string(e))if(u.is.empty(e))this.toggleCaptions(!1);else{var t=e.toLowerCase();this.options.captions.includes(t)?(this.toggleCaptions(!0),"enabled"!==t&&this.language!==t&&(this.captions.language=t,f.setText.call(this,null),f.setLanguage.call(this),u.dispatchEvent.call(this,this.media,"languagechange"))):this.debug.warn("Unsupported language option: "+t)}},get:function(){return this.captions.language}},{key:"pip",set:function(e){var t="picture-in-picture",i="inline";if(d.pip){var n=u.is.boolean(e)?e:this.pip===i;this.media.webkitSetPresentationMode(n?t:i)}},get:function(){return d.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,i){return d.check(e,t,i)}},{key:"loadSprite",value:function(e,t){return u.loadSprite(e,t)}},{key:"setup",value:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=null;return u.is.string(t)?n=Array.from(document.querySelectorAll(t)):u.is.nodeList(t)?n=Array.from(t):u.is.array(t)&&(n=t.filter(function(e){return u.is.element(e)})),u.is.empty(n)?null:n.map(function(t){return new e(t,i)})}}]),e}();return j.defaults=u.cloneDeep(b),j});
//# sourceMappingURL=plyr.min.js.map
diff --git a/dist/plyr.min.js.map b/dist/plyr.min.js.map
index 95da7b31..1e2ea8a1 100644
--- a/dist/plyr.min.js.map
+++ b/dist/plyr.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["support.js","../../node_modules/loadjs/dist/loadjs.umd.js","storage.js","types.js","utils.js","html5.js","i18n.js","controls.js","captions.js","console.js","defaults.js","fullscreen.js","ui.js","listeners.js","plugins/vimeo.js","plugins/youtube.js","media.js","plugins/ads.js","source.js","plyr.js"],"names":["range","factory","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","length","splice","executeCallbacks","args","depsNotFound","call","success","error","loadFile","path","callbackFn","numTries","isCss","e","doc","document","async","maxTries","numRetries","beforeCallbackFn","before","pathStripped","replace","test","createElement","rel","href","src","undefined","onload","onerror","onbeforeload","ev","result","type","sheet","cssText","x","defaultPrevented","head","appendChild","loadjs","paths","arg1","arg2","trim","fn","i","numWaiting","push","loadFiles","ready","deps","bundleIds","r","subscribe","done","reset","isDefined","module","exports","Storage","player","enabled","config","storage","key","supported","store","window","localStorage","getItem","this","utils","is","empty","json","JSON","parse","string","object","get","extend","setItem","stringify","removeItem","providers","types","input","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","instanceof","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","kind","array","nodeList","keys","constructor","documentMode","documentElement","style","navigator","userAgent","platform","url","responseType","arguments","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","responseText","response","Error","statusText","open","send","id","hasId","exists","querySelectorAll","useStorage","container","toggleHidden","setAttribute","cached","data","content","fetch","then","catch","injectSprite","innerHTML","body","insertBefore","childNodes","prefix","Math","floor","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","entries","_ref","_ref2","value","sel","existingAttributes","existing","split","s","selector","className","parts","charAt","class","hidden","hide","boolean","hasAttribute","removeAttribute","toggle","contains","classList","prototype","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","includes","querySelector","focused","activeElement","focusable","getElements","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","support","passiveListeners","bubbles","detail","CustomEvent","assign","dispatchEvent","toggleState","pressed","getAttribute","state","_len","_key","toString","match","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","_len2","_key2","source","shift","defineProperty","apply","concat","toConsumableArray","filter","item","indexOf","reduce","prev","curr","abs","youtube","vimeo","$2","parser","search","startsWith","parseUrl","params","hash","_hash$split2","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","ratio","getRatio","w","h","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","removeEventListener","transitionEndEvent","matchMedia","html5","getSources","sizes","dedupe","mime","currentTime","playing","load","play","blankVideo","debug","log","i18n","seekTime","title","controls","cors","URL","iconUrl","location","host","isIE","svg4everybody","getElement","selectors","buttons","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","classNames","tooltip","warn","toggleNativeControls","getIconUrl","iconPath","iconPrefix","icon","createElementNS","use","setAttributeNS","attr","badge","menu","buttonType","button","toCamelCase","label","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","updateRangeFill","suffix","list","checked","radio","faux","insertAdjacentHTML","forceHours","setRange","muted","getPercentage","_this","getElementsByTagName","nodeValue","buffered","isWebkit","setProperty","tooltips","percent","clientRect","getBoundingClientRect","visible","_toggle","toggleClass","_this2","touch","pageX","left","hasClass","parseFloat","updateTimeDisplay","invert","invertTime","seeking","updateProgress","hasDuration","displayDuration","paused","updateSeekTooltip","setting","tabs","panes","quality","_this3","toggleTab","checkMenu","emptyElement","sort","a","b","sorting","getLabel","createMenuItem","createBadge","getBadge","updateSetting","pane","active","some","lang","language","default","getTracks","tracks","track","_this4","unshift","speed","isVimeo","_this5","values","tab","form","show","isMenuItem","isButton","stopPropagation","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","_this6","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","update","create","findElements","repaint","labels","_this7","stored","isYouTube","textTracks","setCaptionsMenu","insertAfter","hostname","protocol","blob","createObjectURL","setLanguage","setCue","mode","currentTrack","getCurrentTrack","activeCues","embed","enableTextTrack","cue","setText","getCueAsHTML","caption","noop","Console","console","bind","defaults","userLanguage","onChange","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","y","overflow","fallback","Fullscreen","property","native","iosNative","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","exitFullscreen","exit","enter","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","uiSupported","listeners","inject","setup","loop","updateVolume","timeUpdate","checkPlaying","isTouch","setTitle","setPoster","isEmbed","iframe","poster","posters","backgroundImage","p","stopped","toggleControls","loading","timers","setTimeout","failed","networkState","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","repeat","altKey","ctrlKey","metaKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","keyboard","global","tabFocus","hideControls","durationUpdate","hasAudio","resetOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","set","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","showHomeTab","showTab","toggleInvert","hover","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","setAspectRatio","Vimeo","loadScript","urls","sdk","padding","paddingBottom","offset","transform","autoplay","buildUrlParams","parseVimeoId","embedContainer","replaceElement","thumbnail_large","pathname","Player","autopause","disableTextTrack","stop","setCurrentTime","selected","setPlaybackRate","setVolume","setLoop","currentSrc","getVideoUrl","all","getVideoWidth","getVideoHeight","dimensions","getAspectRatio","setAutopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","cues","stripHTML","seconds","build","mapQualityUnit","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","google","items","snippet","currentId","parseYouTubeId","generateId","message","instance","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","seekTo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","buffering","setInterval","getVideoLoadedFraction","lastBuffered","levels","getAvailableQualityLevels","level","wrap","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","_this8","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","_this9","init","start","adError","zIndex","_this10","destroy","handlers","handler","_this11","Date","now","base","insertElement","attribute","cancelRequests","check","crossorigin","addStyleHook","insertElements","Plyr","jQuery","plyr","original","tagName","getProviderByUrl","getUrlParams","truthy","step","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","soft","clear","unload","targetTime","end","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","webkitPresentationMode","inline","t"],"mappings":"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","file":"plyr.min.js","sourcesContent":["// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\nimport Storage from './storage';\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, NodeList);\n },\n element(input) {\n return this.instanceof(input, Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, Event);\n },\n cue(input) {\n return this.instanceof(input, TextTrackCue) || this.instanceof(input, VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n const useStorage = Storage.supported;\n\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (useStorage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (useStorage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove element(s)\n removeElement(element) {\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: this,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Format string\n format(input, ...args) {\n if (utils.is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => utils.is.string(args[i]) ? args[i] : '');\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Restore time\n player.currentTime = currentTime;\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\n });\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n\n\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const attributes = utils.getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = utils.createElement('div', utils.extend(attributes, {\n class: `plyr__time ${attributes.class}`,\n 'aria-label': i18n.get(type, this.config),\n }), '00:00');\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, forceHours, inverted);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n controls.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n controls.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n setProgress(this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n controls.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n controls.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n controls.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n utils.toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 2160:\n label = '4K';\n break;\n\n case 1440:\n case 1080:\n case 720:\n label = 'HD';\n break;\n\n case 576:\n case 480:\n label = 'SD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n const label = controls.getLabel.call(this, 'quality', quality);\n controls.createMenuItem.call(this, quality, list, type, label, getBadge(quality));\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}&times;`;\n\n case 'quality':\n if (utils.is.number(value)) {\n return `${value}p`;\n }\n\n return utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n if (this.captions.active) {\n if (this.options.captions.length > 2 || !this.options.captions.some(lang => lang === 'enabled')) {\n value = this.captions.language;\n } else {\n value = 'enabled';\n }\n } else {\n value = '';\n }\n\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const toggle = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: !utils.is.empty(track.language) ? track.language : 'enabled',\n label: captions.getLabel.call(this, track),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label,\n track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null,\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n // Store reference\n this.options.captions = tracks.map(track => track.language);\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => {\n const label = controls.getLabel.call(this, 'speed', speed);\n controls.createMenuItem.call(this, speed, list, type, label);\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.hasAttribute('hidden');\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n utils.toggleHidden(form, !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n utils.toggleHidden(current, true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n utils.toggleHidden(pane, false);\n\n const tabs = utils.getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.cors) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([\n key,\n value,\n ]) => {\n result = utils.replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (utils.is.string(this.config.controls)) {\n container = replace(container);\n } else if (utils.is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n const tracks = captions.getTracks.call(this);\n\n if (!tracks.length) {\n return null;\n }\n\n // Get track based on current language\n let track = tracks.find(track => track.language.toLowerCase() === this.language);\n\n // Get the <track> with default attribute\n if (!track) {\n track = utils.getElement.call(this, 'track[default]');\n }\n\n // Get the first track\n if (!track) {\n [track] = tracks;\n }\n\n return track;\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Reset to start when playback ended\n resetOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.3.7/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: (navigator.language || navigator.userLanguage).split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime}s',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime}s',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/v2/video/{0}.json',\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api: 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n poster: 'https://img.youtube.com/vi/{0}/maxresdefault.jpg,https://img.youtube.com/vi/{0}/hqdefault.jpg',\n },\n googleIMA: {\n sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n ads: 'plyr__ads',\n control: 'plyr__control',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.property = Fullscreen.property;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (utils.is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n controls.updateVolume.call(this);\n\n // Reset time display\n controls.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Set the poster image\n ui.setPoster.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n\n // Set the poster image\n setPoster() {\n if (!utils.is.element(this.elements.poster) || utils.is.empty(this.poster)) {\n return;\n }\n\n // Set the inline style\n const posters = this.poster.split(',');\n this.elements.poster.style.backgroundImage = posters.map(p => `url('${p}')`).join(',');\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Only update controls on non timeupdate events\n if (utils.is.event(event) && event.type === 'timeupdate') {\n return;\n }\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.player.toggleControls(event);\n });\n }\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking', event => controls.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadeddata loadedmetadata', event => controls.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing', event => controls.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => controls.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied timeupdate', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // Check if media failed to load\n // utils.on(this.player.media, 'play', event => ui.checkFailed.call(this.player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n showHomeTab();\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n this.player.currentTime = event.target.value / event.target.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n this.player.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n // muted: player.muted,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = utils.format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div', { class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Get poster image\n utils.fetch(utils.format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (utils.is.empty(response)) {\n return;\n }\n\n // Get the URL for thumbnail\n const url = new URL(response[0].thumbnail_large);\n\n // Get original image\n url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n // Set attribute\n player.media.setAttribute('poster', url.href);\n\n // Update\n ui.setPoster.call(player);\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe, {\n autopause: player.config.autopause,\n muted: player.muted,\n });\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time).catch(() => {\n // Do nothing\n });\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = utils.format(this.config.urls.youtube.api, videoId, key);\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Set poster image\n player.media.setAttribute('poster', utils.format(player.config.urls.youtube.poster, videoId));\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport utils from './utils';\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = utils.createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n html5.extend.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport i18n from '../i18n';\nimport utils from '../utils';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n get enabled() {\n return this.player.isVideo && this.player.config.ads.enabled && !utils.is.empty(this.publisherId);\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.sdk)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n // Mute based on current state\n request.setAdWillPlayMuted(!this.player.muted);\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!utils.is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (utils.is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport { providers } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if (!utils.is.empty(input.poster)) {\n this.poster = input.poster;\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.3.7\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport Console from './console';\nimport controls from './controls';\nimport defaults from './defaults';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport { providers, types } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n captions: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n const clone = this.media.cloneNode(true);\n clone.autoplay = false;\n this.elements.original = clone;\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(params.playsinline);\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended);\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get stopped state\n */\n get stopped() {\n return Boolean(this.paused && this.currentTime === 0);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (utils.is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // True duration\n const realDuration = this.media ? Number(this.media.duration) : 0;\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality) || quality === 0) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isVideo) {\n this.debug.warn('Poster can only be set for video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n ui.setPoster.call(this);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n this.toggleCaptions(false);\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // Check for support\n if (!this.options.captions.includes(language)) {\n this.debug.warn(`Unsupported language option: ${language}`);\n return;\n }\n\n // Ensure captions are enabled\n this.toggleCaptions(true);\n\n // Enabled only\n if (language === 'enabled') {\n return;\n }\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Events that show the controls\n const showEvents = [\n 'touchstart',\n 'touchmove',\n 'mouseenter',\n 'mousemove',\n 'focusin',\n ];\n\n // Events that delay hiding\n const delayEvents = [\n 'touchmove',\n 'touchend',\n 'mousemove',\n ];\n\n // Whether to show controls\n show = showEvents.includes(toggle.type);\n\n // Delay hiding on move events\n if (delayEvents.includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (!this.touch && toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (this.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Set hideControls class\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, this.config.hideControls);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (utils.is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (utils.is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (utils.is.array(selector)) {\n targets = selector.filter(i => utils.is.element(i));\n }\n\n if (utils.is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nexport default Plyr;\n"]} \ No newline at end of file
+{"version":3,"sources":["support.js","../../node_modules/loadjs/dist/loadjs.umd.js","storage.js","types.js","utils.js","html5.js","i18n.js","controls.js","captions.js","console.js","defaults.js","fullscreen.js","ui.js","listeners.js","plugins/vimeo.js","plugins/youtube.js","media.js","plugins/ads.js","source.js","plyr.js"],"names":["range","factory","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","length","splice","executeCallbacks","args","depsNotFound","call","success","error","loadFile","path","callbackFn","numTries","isCss","e","doc","document","async","maxTries","numRetries","beforeCallbackFn","before","pathStripped","replace","test","createElement","rel","href","src","undefined","onload","onerror","onbeforeload","ev","result","type","sheet","cssText","x","defaultPrevented","head","appendChild","loadjs","paths","arg1","arg2","trim","fn","i","numWaiting","push","loadFiles","ready","deps","bundleIds","r","subscribe","done","reset","isDefined","module","exports","Storage","player","enabled","config","storage","key","supported","store","window","localStorage","getItem","this","utils","is","empty","json","JSON","parse","string","object","get","extend","setItem","stringify","removeItem","providers","types","input","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","instanceof","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","kind","array","nodeList","keys","constructor","documentMode","documentElement","style","navigator","userAgent","platform","url","responseType","arguments","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","responseText","response","Error","statusText","open","send","minWidth","image","Image","handler","naturalWidth","assign","id","hasId","exists","querySelectorAll","useStorage","container","toggleHidden","setAttribute","cached","data","content","fetch","then","catch","injectSprite","innerHTML","body","insertBefore","childNodes","prefix","Math","floor","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","attributes","text","setAttributes","innerText","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","entries","_ref","_ref2","value","sel","existingAttributes","existing","split","s","selector","className","parts","charAt","class","hidden","hide","boolean","hasAttribute","removeAttribute","force","method","classList","contains","prototype","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","includes","querySelector","focused","activeElement","toggle","focusable","getElements","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","support","passiveListeners","bubbles","detail","CustomEvent","dispatchEvent","toggleState","pressed","getAttribute","state","_len","_key","toString","match","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","_len2","_key2","source","shift","defineProperty","apply","concat","toConsumableArray","filter","item","indexOf","reduce","prev","curr","abs","youtube","vimeo","$2","parser","search","startsWith","parseUrl","params","hash","_hash$split2","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","width","height","ratio","getRatio","w","h","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","removeEventListener","transitionEndEvent","matchMedia","html5","getSources","sizes","dedupe","mime","currentTime","playing","load","play","blankVideo","debug","log","i18n","seekTime","title","controls","cors","URL","iconUrl","location","host","isIE","svg4everybody","getElement","selectors","buttons","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","classNames","tooltip","warn","toggleNativeControls","getIconUrl","iconPath","iconPrefix","icon","createElementNS","use","setAttributeNS","attr","badge","menu","buttonType","button","toCamelCase","label","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","updateRangeFill","suffix","list","checked","radio","faux","insertAdjacentHTML","forceHours","setRange","muted","getPercentage","_this","getElementsByTagName","nodeValue","buffered","isWebkit","setProperty","tooltips","percent","clientRect","getBoundingClientRect","visible","_toggle","toggleClass","_this2","touch","pageX","left","hasClass","parseFloat","updateTimeDisplay","invert","invertTime","seeking","updateProgress","hasDuration","displayDuration","paused","updateSeekTooltip","setting","tabs","panes","quality","_this3","toggleTab","checkMenu","emptyElement","sort","a","b","sorting","getLabel","createMenuItem","createBadge","getBadge","updateSetting","pane","active","some","lang","language","default","getTracks","tracks","track","_this4","unshift","speed","isVimeo","_this5","values","tab","form","show","isMenuItem","isButton","stopPropagation","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","_this6","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","update","create","findElements","repaint","labels","_this7","stored","isYouTube","textTracks","setCaptionsMenu","insertAfter","hostname","protocol","blob","createObjectURL","setLanguage","setCue","mode","currentTrack","getCurrentTrack","activeCues","embed","enableTextTrack","cue","setText","getCueAsHTML","caption","noop","Console","console","bind","defaults","userLanguage","onChange","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","y","overflow","fallback","Fullscreen","property","native","iosNative","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","exitFullscreen","exit","enter","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","uiSupported","listeners","inject","setup","loop","updateVolume","timeUpdate","checkPlaying","isTouch","setTitle","poster","backgroundImage","setPoster","isEmbed","iframe","enable","posterEnabled","loadPromise","loadImage","togglePoster","stopped","toggleControls","loading","timers","setTimeout","hideControls","hover","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","repeat","altKey","ctrlKey","metaKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","keyboard","global","tabFocus","delay","durationUpdate","hasAudio","resetOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","set","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","showHomeTab","showTab","currentTarget","seekTo","toggleInvert","_player","noTransition","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","assurePlaybackState","setAspectRatio","Vimeo","loadScript","urls","sdk","padding","paddingBottom","offset","transform","autoplay","buildUrlParams","parseVimeoId","embedContainer","replaceElement","thumbnail_large","pathname","Player","autopause","disableTextTrack","stop","setVolume","setCurrentTime","selected","setPlaybackRate","setLoop","currentSrc","getVideoUrl","all","getVideoWidth","getVideoHeight","dimensions","getAspectRatio","setAutopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","cues","stripHTML","seconds","build","mapQualityUnit","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","google","items","snippet","currentId","parseYouTubeId","generateId","posterSrc","backgroundSize","message","instance","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","buffering","setInterval","getVideoLoadedFraction","lastBuffered","levels","getAvailableQualityLevels","level","unMute","wrap","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","_this8","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","_this9","init","start","adError","zIndex","_this10","destroy","handlers","_this11","Date","now","base","insertElement","attribute","cancelRequests","check","crossorigin","addStyleHook","insertElements","Plyr","failed","jQuery","plyr","original","tagName","getProviderByUrl","getUrlParams","truthy","step","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","clear","unload","targetTime","end","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","webkitPresentationMode","inline","t","cloneDeep"],"mappings":"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CF,oBACA,iBACH,eACC,iBACC,eACH,aACC,YACF,UACA,YACE,iBACG,mBACD,wBACM,uBAMN,gDACG,6CACH,wDAGA,yCACA,wHAGA,uEAMH,UACA,WACC,aACE,YACD,iBACK,UACP,YACE,cACE,gBACE,SACP,aACI,WACF,aACE,UACH,cACI,sBAQV,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,8BAIA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,sBAIA,gBACA,+BAIA,kBACA,mBACA,YACA,cACA,cACA,iBACA,gBACA,gCAMU,uDACC,4BAEI,aACF,0BAEL,4BAEE,2BACC,8BACE,+BACD,mCACK,kCACP,8BACI,oCACE,+BACP,4BACI,iCACC,8BACJ,mCAGA,4BACE,6BACD,+BACG,iCACD,8CAGI,gCACH,+BACF,iCACA,+BACF,+BACE,mCAEF,2BACA,gCAEG,mDAMP,qBACI,kBACH,4BACA,mCACS,sCACR,6BACO,2BACV,oBACI,wBACA,uBACD,uBACC,wBACA,sBACF,sBACE,qBACH,oBACE,6BACM,4BACP,uBACE,6BACI,6BACC,kCAEH,0BACA,mBACD,qCAGG,gCACD,6CAGC,oCACC,4CAGC,6BACH,uCAGG,iCACH,iCAEF,+CAMI,wBACN,oCAMA,oBAMC,cACI,KC/XfmI,EAAU7P,EAAM8P,aAEtB,SAAS4N,OACA3d,KAAKT,aAKJmV,EAAS1U,KAAKV,OAAOqG,SAAS6M,QAAQU,WACxCjT,EAAMC,GAAG+F,QAAQyO,MACX1J,YAAY0J,EAAQ1U,KAAK4Y,UAI7B7N,cAAclP,KAAKmE,KAAKV,OAAQU,KAAK6G,OAAQ7G,KAAK4Y,OAAS,kBAAoB,kBAAkB,GAGlG9I,EAAQ8N,SACHC,UAAUhiB,KAAKmE,KAAKV,OAAQU,KAAK6G,OAAQ7G,KAAK4Y,SAI5D,SAASkF,QAAe1U,EAAgBnG,UAAAzH,OAAA,QAAA4B,IAAA6F,UAAA,IAAAA,UAAA,GAEhCmG,OACK2U,kBACEle,OAAOme,SAAW,IAClB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","file":"plyr.min.js","sourcesContent":["// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\nimport Storage from './storage';\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, NodeList);\n },\n element(input) {\n return this.instanceof(input, Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, Event);\n },\n cue(input) {\n return this.instanceof(input, TextTrackCue) || this.instanceof(input, VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load image avoiding xhr/fetch CORS issues\n // Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded.\n // By default it checks if it is at least 1px, but you can add a second argument to change this.\n loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n Object.assign(image, {onload: handler, onerror: handler, src});\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n const useStorage = Storage.supported;\n\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (useStorage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (useStorage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove element(s)\n removeElement(element) {\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\n toggleClass(element, className, force) {\n if (utils.is.element(element)) {\n let method = 'toggle';\n if (typeof force !== 'undefined') {\n method = force ? 'add' : 'remove';\n }\n\n element.classList[method](className);\n return element.classList.contains(className);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: this,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Format string\n format(input, ...args) {\n if (utils.is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => (utils.is.string(args[i]) ? args[i] : ''));\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Clone nested objects\n cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Restore time\n player.currentTime = currentTime;\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\n });\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n\n\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.innerText = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const attributes = utils.getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = utils.createElement('div', utils.extend(attributes, {\n class: `plyr__time ${attributes.class}`,\n 'aria-label': i18n.get(type, this.config),\n }), '00:00');\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.innerText = utils.formatTime(time, forceHours, inverted);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n controls.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n case 'seeked':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n controls.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n setProgress(this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.progress.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n controls.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n controls.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded or durationchange events\n durationUpdate() {\n // Bail if no ui or durationchange event triggered after playing/seek when invertTime is false\n if (!this.supported.ui || (!this.config.invertTime && this.currentTime)) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n controls.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n utils.toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 2160:\n label = '4K';\n break;\n\n case 1440:\n case 1080:\n case 720:\n label = 'HD';\n break;\n\n case 576:\n case 480:\n label = 'SD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n const label = controls.getLabel.call(this, 'quality', quality);\n controls.createMenuItem.call(this, quality, list, type, label, getBadge(quality));\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}&times;`;\n\n case 'quality':\n if (utils.is.number(value)) {\n return `${value}p`;\n }\n\n return utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n if (this.captions.active) {\n if (this.options.captions.length > 2 || !this.options.captions.some(lang => lang === 'enabled')) {\n value = this.captions.language;\n } else {\n value = 'enabled';\n }\n } else {\n value = '';\n }\n\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const toggle = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: !utils.is.empty(track.language) ? track.language : 'enabled',\n label: captions.getLabel.call(this, track),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label,\n track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null,\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n // Store reference\n this.options.captions = tracks.map(track => track.language);\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => {\n const label = controls.getLabel.call(this, 'speed', speed);\n controls.createMenuItem.call(this, speed, list, type, label);\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.hasAttribute('hidden');\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n utils.toggleHidden(form, !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n utils.toggleHidden(current, true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n utils.toggleHidden(pane, false);\n\n const tabs = utils.getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.cors) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([\n key,\n value,\n ]) => {\n result = utils.replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (utils.is.string(this.config.controls)) {\n container = replace(container);\n } else if (utils.is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n const tracks = captions.getTracks.call(this);\n\n if (!tracks.length) {\n return null;\n }\n\n // Get track based on current language\n let track = tracks.find(track => track.language.toLowerCase() === this.language);\n\n // Get the <track> with default attribute\n if (!track) {\n track = utils.getElement.call(this, 'track[default]');\n }\n\n // Get the first track\n if (!track) {\n [track] = tracks;\n }\n\n return track;\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.innerText = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Reset to start when playback ended\n resetOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.3.8/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: (navigator.language || navigator.userLanguage).split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime}s',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime}s',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/v2/video/{0}.json',\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api: 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n },\n googleIMA: {\n sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.property = Fullscreen.property;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (utils.is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n controls.updateVolume.call(this);\n\n // Reset time display\n controls.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster && this.elements.poster && !this.elements.poster.style.backgroundImage) {\n ui.setPoster.call(this, this.poster);\n }\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n\n // Toggle poster\n togglePoster(enable) {\n utils.toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n\n // Set the poster image (async)\n setPoster(poster) {\n // Set property regardless of validity\n this.media.setAttribute('poster', poster);\n\n // Bail if element is missing\n if (!utils.is.element(this.elements.poster)) {\n return Promise.reject();\n }\n\n // Load the image, and set poster if successful\n const loadPromise = utils.loadImage(poster)\n .then(() => {\n this.elements.poster.style.backgroundImage = `url('${poster}')`;\n Object.assign(this.elements.poster.style, {\n backgroundImage: `url('${poster}')`,\n // Reset backgroundSize as well (since it can be set to \"cover\" for padded thumbnails for youtube)\n backgroundSize: '',\n });\n ui.togglePoster.call(this, true);\n return poster;\n });\n\n // Hide the element if the poster can't be loaded (otherwise it will just be a black element covering the video)\n loadPromise.catch(() => ui.togglePoster.call(this, false));\n\n // Return the promise so the caller can use it as well\n return loadPromise;\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Only update controls on non timeupdate events\n if (utils.is.event(event) && event.type === 'timeupdate') {\n return;\n }\n\n // Toggle controls\n ui.toggleControls.call(this);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Update progress bar loading class state\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Update controls visibility\n ui.toggleControls.call(this);\n }, this.loading ? 250 : 0);\n },\n\n // Toggle controls based on state and `force` argument\n toggleControls(force) {\n const { controls } = this.elements;\n\n if (controls && this.config.hideControls) {\n // Show controls if force, loading, paused, or button interaction, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover));\n }\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen', event => {\n const { controls } = this.player.elements;\n\n // Remove button states for fullscreen\n if (event.type === 'enterfullscreen') {\n controls.pressed = false;\n controls.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = [\n 'touchstart',\n 'touchmove',\n 'mousemove',\n ].includes(event.type);\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(this.player, true);\n // Use longer timeout for touch devices\n delay = this.player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(this.player.timers.controls);\n // Timer to prevent flicker when seeking\n this.player.timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n });\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadeddata loadedmetadata', event => controls.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing seeking seeked', event => controls.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => controls.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied timeupdate', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n showHomeTab();\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n on(this.player.elements.inputs.seek, 'mousedown mousemove', event => {\n const clientRect = this.player.elements.progress.getBoundingClientRect();\n const percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n on(this.player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n\n // Was playing before?\n const play = seek.hasAttribute('play-on-seeked');\n\n // Done seeking\n const done = [\n 'mouseup',\n 'touchend',\n 'keyup',\n ].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute('play-on-seeked');\n this.player.play();\n } else if (!done && this.player.playing) {\n seek.setAttribute('play-on-seeked', '');\n this.player.pause();\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n const seek = event.currentTarget;\n\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (utils.is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n this.player.currentTime = seekTo / seek.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n const { config, elements, timers } = this.player;\n\n // Skip transition to prevent focus from scrolling the parent element\n utils.toggleClass(elements.controls, config.classNames.noTransition, event.type === 'focusin');\n\n // Toggle\n ui.toggleControls.call(this.player, event.type === 'focusin');\n\n // If focusin, hide again after delay\n if (event.type === 'focusin') {\n // Restore transition\n setTimeout(() => {\n utils.toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for keyboard users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n // Hide\n timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n }\n });\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (this.media.paused === play) {\n this.media.paused = !play;\n utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n // muted: player.muted,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = utils.format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div', { class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Get poster image\n utils.fetch(utils.format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (utils.is.empty(response)) {\n return;\n }\n\n // Get the URL for thumbnail\n const url = new URL(response[0].thumbnail_large);\n\n // Get original image\n url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n // Set and show poster\n ui.setPoster.call(player, url.href);\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe, {\n autopause: player.config.autopause,\n muted: player.muted,\n });\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n return player.embed.play();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n return player.embed.pause();\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Vimeo will automatically play on seek if the video hasn't been played before\n\n // Get current paused state and volume etc\n const { embed, media, paused, volume } = player;\n\n // Set seeking state and trigger event\n media.seeking = true;\n utils.dispatchEvent.call(player, media, 'seeking');\n\n // If paused, mute until seek is complete\n Promise.resolve(paused && embed.setVolume(0))\n // Seek\n .then(() => embed.setCurrentTime(time))\n // Restore paused\n .then(() => paused && embed.pause())\n // Restore volume\n .then(() => paused && embed.setVolume(volume))\n .catch(() => {\n // Do nothing\n });\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n assurePlaybackState.call(player, true);\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n assurePlaybackState.call(player, false);\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (this.media.paused === play) {\n this.media.paused = !play;\n utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = utils.format(this.config.urls.youtube.api, videoId, key);\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Set poster image\n const posterSrc = format => `https://img.youtube.com/vi/${videoId}/${format}default.jpg`;\n\n // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)\n utils.loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n .catch(() => utils.loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n .catch(() => utils.loadImage(posterSrc('hq'))) // 360p padded 4:3. Always exists\n .then(image => ui.setPoster.call(player, image.src))\n .then(posterSrc => {\n // If the image is padded, use background-size \"cover\" instead (like youtube does too with their posters)\n if (!posterSrc.includes('maxres')) {\n player.elements.poster.style.backgroundSize = 'cover';\n }\n });\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n instance.playVideo();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // If paused, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n if (player.paused) {\n player.embed.mute();\n }\n\n // Set seeking state and trigger event\n player.media.seeking = true;\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n const seeked = player.media.seeking && [\n 1,\n 2,\n ].includes(event.data);\n\n if (seeked) {\n // Unset seeking and fire seeked event\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n assurePlaybackState.call(player, false);\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)\n if (player.media.paused) {\n player.media.pause();\n } else {\n assurePlaybackState.call(player, true);\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\n }\n\n break;\n\n case 2:\n // Restore audio (YouTube starts playing on seek if the video hasn't been played yet)\n if (!player.muted) {\n player.embed.unMute();\n }\n assurePlaybackState.call(player, false);\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport utils from './utils';\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = utils.createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n html5.extend.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport i18n from '../i18n';\nimport utils from '../utils';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n get enabled() {\n return this.player.isVideo && this.player.config.ads.enabled && !utils.is.empty(this.publisherId);\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.sdk)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n // Mute based on current state\n request.setAdWillPlayMuted(!this.player.muted);\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!utils.is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (utils.is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport { providers } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if (!utils.is.empty(input.poster)) {\n this.poster = input.poster;\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.3.8\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport Console from './console';\nimport controls from './controls';\nimport defaults from './defaults';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport { providers, types } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n Plyr.defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n captions: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n const clone = this.media.cloneNode(true);\n clone.autoplay = false;\n this.elements.original = clone;\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(params.playsinline);\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended);\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get stopped state\n */\n get stopped() {\n return Boolean(this.paused && this.currentTime === 0);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (utils.is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // True duration\n const realDuration = this.media ? Number(this.media.duration) : 0;\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality) || quality === 0) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isVideo) {\n this.debug.warn('Poster can only be set for video');\n return;\n }\n\n ui.setPoster.call(this, input);\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n this.toggleCaptions(false);\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // Check for support\n if (!this.options.captions.includes(language)) {\n this.debug.warn(`Unsupported language option: ${language}`);\n return;\n }\n\n // Ensure captions are enabled\n this.toggleCaptions(true);\n\n // Enabled only\n if (language === 'enabled') {\n return;\n }\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} [toggle] - Whether to show the controls\n */\n toggleControls(toggle) {\n // Don't toggle if missing UI support or if it's audio\n if (this.supported.ui && !this.isAudio) {\n // Get state before change\n const isHidden = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n\n // Negate the argument if not undefined since adding the class to hides the controls\n const force = typeof toggle === 'undefined' ? undefined : !toggle;\n\n // Apply and get updated state\n const hiding = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n // Close menu\n if (hiding && this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n utils.dispatchEvent.call(this, this.media, eventName);\n }\n return !hiding;\n }\n return false;\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (utils.is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (utils.is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (utils.is.array(selector)) {\n targets = selector.filter(i => utils.is.element(i));\n }\n\n if (utils.is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = utils.cloneDeep(defaults);\n\nexport default Plyr;\n"]} \ No newline at end of file
diff --git a/dist/plyr.polyfilled.js b/dist/plyr.polyfilled.js
index eda5833e..ea9a5afa 100644
--- a/dist/plyr.polyfilled.js
+++ b/dist/plyr.polyfilled.js
@@ -1,4 +1,4 @@
-(function (global, factory) {
+typeof navigator === "object" && (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define('Plyr', factory) :
(global.Plyr = factory());
@@ -20,7 +20,7 @@ if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef
});
var _core = createCommonjsModule(function (module) {
-var core = module.exports = { version: '2.5.3' };
+var core = module.exports = { version: '2.5.6' };
if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef
});
var _core_1 = _core.version;
@@ -333,11 +333,18 @@ var _arrayIncludes = function (IS_INCLUDES) {
};
};
+var _shared = createCommonjsModule(function (module) {
var SHARED = '__core-js_shared__';
var store = _global[SHARED] || (_global[SHARED] = {});
-var _shared = function (key) {
- return store[key] || (store[key] = {});
-};
+
+(module.exports = function (key, value) {
+ return store[key] || (store[key] = value !== undefined ? value : {});
+})('versions', []).push({
+ version: _core.version,
+ mode: _library ? 'pure' : 'global',
+ copyright: '© 2018 Denis Pushkarev (zloirock.ru)'
+});
+});
var shared = _shared('keys');
@@ -991,7 +998,7 @@ var _iterDefine = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORC
var VALUES_BUG = false;
var proto = Base.prototype;
var $native = proto[ITERATOR$2] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];
- var $default = (!BUGGY && $native) || getMethod(DEFAULT);
+ var $default = $native || getMethod(DEFAULT);
var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;
var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;
var methods, key, IteratorPrototype;
@@ -1002,7 +1009,7 @@ var _iterDefine = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORC
// Set @@toStringTag to native iterators
_setToStringTag(IteratorPrototype, TAG, true);
// fix for some old engines
- if (!_library && !_has(IteratorPrototype, ITERATOR$2)) _hide(IteratorPrototype, ITERATOR$2, returnThis);
+ if (!_library && typeof IteratorPrototype[ITERATOR$2] != 'function') _hide(IteratorPrototype, ITERATOR$2, returnThis);
}
}
// fix Array#{values, @@iterator}.name in V8 / FF
@@ -2496,9 +2503,11 @@ function set(target, propertyKey, V /* , receiver */) {
}
if (_has(ownDesc, 'value')) {
if (ownDesc.writable === false || !_isObject(receiver)) return false;
- existingDescriptor = _objectGopd.f(receiver, propertyKey) || _propertyDesc(0);
- existingDescriptor.value = V;
- _objectDp.f(receiver, propertyKey, existingDescriptor);
+ if (existingDescriptor = _objectGopd.f(receiver, propertyKey)) {
+ if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;
+ existingDescriptor.value = V;
+ _objectDp.f(receiver, propertyKey, existingDescriptor);
+ } else _objectDp.f(receiver, propertyKey, _propertyDesc(0, V));
return true;
}
return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);
@@ -2643,7 +2652,8 @@ var _microtask = function () {
};
// environments with maybe non-completely correct, but existent Promise
} else if (Promise$1 && Promise$1.resolve) {
- var promise = Promise$1.resolve();
+ // Promise.resolve without an argument throws an error in LG WebOS 2
+ var promise = Promise$1.resolve(undefined);
notify = function () {
promise.then(flush);
};
@@ -2700,6 +2710,10 @@ var _perform = function (exec) {
}
};
+var navigator$1 = _global.navigator;
+
+var _userAgent = navigator$1 && navigator$1.userAgent || '';
+
var _promiseResolve = function (C, x) {
_anObject(C);
if (_isObject(x) && x.constructor === C) return x;
@@ -2714,9 +2728,12 @@ var microtask = _microtask();
+
var PROMISE = 'Promise';
var TypeError$1 = _global.TypeError;
var process$2 = _global.process;
+var versions = process$2 && process$2.versions;
+var v8 = versions && versions.v8 || '';
var $Promise = _global[PROMISE];
var isNode$1 = _classof(process$2) == 'process';
var empty = function () { /* empty */ };
@@ -2731,7 +2748,13 @@ var USE_NATIVE = !!function () {
exec(empty, empty);
};
// unhandled rejections tracking support, NodeJS Promise without it fails @@species test
- return (isNode$1 || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;
+ return (isNode$1 || typeof PromiseRejectionEvent == 'function')
+ && promise.then(empty) instanceof FakePromise
+ // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables
+ // https://bugs.chromium.org/p/chromium/issues/detail?id=830565
+ // we can't detect it synchronously, so just check versions
+ && v8.indexOf('6.6') !== 0
+ && _userAgent.indexOf('Chrome/66') === -1;
} catch (e) { /* empty */ }
}();
@@ -2753,7 +2776,7 @@ var notify = function (promise, isReject) {
var resolve = reaction.resolve;
var reject = reaction.reject;
var domain = reaction.domain;
- var result, then;
+ var result, then, exited;
try {
if (handler) {
if (!ok) {
@@ -2763,8 +2786,11 @@ var notify = function (promise, isReject) {
if (handler === true) result = value;
else {
if (domain) domain.enter();
- result = handler(value);
- if (domain) domain.exit();
+ result = handler(value); // may throw
+ if (domain) {
+ domain.exit();
+ exited = true;
+ }
}
if (result === reaction.promise) {
reject(TypeError$1('Promise-chain cycle'));
@@ -2773,6 +2799,7 @@ var notify = function (promise, isReject) {
} else resolve(result);
} else reject(value);
} catch (e) {
+ if (domain && !exited) domain.exit();
reject(e);
}
};
@@ -4155,10 +4182,6 @@ var _stringPad = function (that, maxLength, fillString, left) {
return left ? stringFiller + S : S + stringFiller;
};
-var navigator$1 = _global.navigator;
-
-var _userAgent = navigator$1 && navigator$1.userAgent || '';
-
// https://github.com/tc39/proposal-string-pad-start-end
@@ -5044,6 +5067,355 @@ try {
window.CustomEvent = CustomEvent$1; // expose definition to window
}
+(function(global) {
+ /**
+ * Polyfill URLSearchParams
+ *
+ * Inspired from : https://github.com/WebReflection/url-search-params/blob/master/src/url-search-params.js
+ */
+
+ var checkIfIteratorIsSupported = function() {
+ try {
+ return !!Symbol.iterator;
+ } catch(error) {
+ return false;
+ }
+ };
+
+
+ var iteratorSupported = checkIfIteratorIsSupported();
+
+ var createIterator = function(items) {
+ var iterator = {
+ next: function() {
+ var value = items.shift();
+ return { done: value === void 0, value: value };
+ }
+ };
+
+ if(iteratorSupported) {
+ iterator[Symbol.iterator] = function() {
+ return iterator;
+ };
+ }
+
+ return iterator;
+ };
+
+ /**
+ * Search param name and values should be encoded according to https://url.spec.whatwg.org/#urlencoded-serializing
+ * encodeURIComponent() produces the same result except encoding spaces as `%20` instead of `+`.
+ */
+ var serializeParam = function(value) {
+ return encodeURIComponent(value).replace(/%20/g, '+');
+ };
+
+ var deserializeParam = function(value) {
+ return decodeURIComponent(value).replace(/\+/g, ' ');
+ };
+
+ var polyfillURLSearchParams= function() {
+
+ var URLSearchParams = function(searchString) {
+ Object.defineProperty(this, '_entries', { value: {} });
+
+ if(typeof searchString === 'string') {
+ if(searchString !== '') {
+ searchString = searchString.replace(/^\?/, '');
+ var attributes = searchString.split('&');
+ var attribute;
+ for(var i = 0; i < attributes.length; i++) {
+ attribute = attributes[i].split('=');
+ this.append(
+ deserializeParam(attribute[0]),
+ (attribute.length > 1) ? deserializeParam(attribute[1]) : ''
+ );
+ }
+ }
+ } else if(searchString instanceof URLSearchParams) {
+ var _this = this;
+ searchString.forEach(function(value, name) {
+ _this.append(value, name);
+ });
+ }
+ };
+
+ var proto = URLSearchParams.prototype;
+
+ proto.append = function(name, value) {
+ if(name in this._entries) {
+ this._entries[name].push(value.toString());
+ } else {
+ this._entries[name] = [value.toString()];
+ }
+ };
+
+ proto.delete = function(name) {
+ delete this._entries[name];
+ };
+
+ proto.get = function(name) {
+ return (name in this._entries) ? this._entries[name][0] : null;
+ };
+
+ proto.getAll = function(name) {
+ return (name in this._entries) ? this._entries[name].slice(0) : [];
+ };
+
+ proto.has = function(name) {
+ return (name in this._entries);
+ };
+
+ proto.set = function(name, value) {
+ this._entries[name] = [value.toString()];
+ };
+
+ proto.forEach = function(callback, thisArg) {
+ var entries;
+ for(var name in this._entries) {
+ if(this._entries.hasOwnProperty(name)) {
+ entries = this._entries[name];
+ for(var i = 0; i < entries.length; i++) {
+ callback.call(thisArg, entries[i], name, this);
+ }
+ }
+ }
+ };
+
+ proto.keys = function() {
+ var items = [];
+ this.forEach(function(value, name) { items.push(name); });
+ return createIterator(items);
+ };
+
+ proto.values = function() {
+ var items = [];
+ this.forEach(function(value) { items.push(value); });
+ return createIterator(items);
+ };
+
+ proto.entries = function() {
+ var items = [];
+ this.forEach(function(value, name) { items.push([name, value]); });
+ return createIterator(items);
+ };
+
+ if(iteratorSupported) {
+ proto[Symbol.iterator] = proto.entries;
+ }
+
+ proto.toString = function() {
+ var searchString = '';
+ this.forEach(function(value, name) {
+ if(searchString.length > 0) searchString+= '&';
+ searchString += serializeParam(name) + '=' + serializeParam(value);
+ });
+ return searchString;
+ };
+
+ global.URLSearchParams = URLSearchParams;
+ };
+
+ if(!('URLSearchParams' in global) || (new URLSearchParams('?a=1').toString() !== 'a=1')) {
+ polyfillURLSearchParams();
+ }
+
+ // HTMLAnchorElement
+
+})(
+ (typeof commonjsGlobal !== 'undefined') ? commonjsGlobal
+ : ((typeof window !== 'undefined') ? window
+ : ((typeof self !== 'undefined') ? self : commonjsGlobal))
+);
+
+(function(global) {
+ /**
+ * Polyfill URL
+ *
+ * Inspired from : https://github.com/arv/DOM-URL-Polyfill/blob/master/src/url.js
+ */
+
+ var checkIfURLIsSupported = function() {
+ try {
+ var u = new URL('b', 'http://a');
+ u.pathname = 'c%20d';
+ return (u.href === 'http://a/c%20d') && u.searchParams;
+ } catch(e) {
+ return false;
+ }
+ };
+
+
+ var polyfillURL = function() {
+ var _URL = global.URL;
+
+ var URL = function(url, base) {
+ if(typeof url !== 'string') url = String(url);
+
+ var doc = document.implementation.createHTMLDocument('');
+ window.doc = doc;
+ if(base) {
+ var baseElement = doc.createElement('base');
+ baseElement.href = base;
+ doc.head.appendChild(baseElement);
+ }
+
+ var anchorElement = doc.createElement('a');
+ anchorElement.href = url;
+ doc.body.appendChild(anchorElement);
+ anchorElement.href = anchorElement.href; // force href to refresh
+
+ if(anchorElement.protocol === ':' || !/:/.test(anchorElement.href)) {
+ throw new TypeError('Invalid URL');
+ }
+
+ Object.defineProperty(this, '_anchorElement', {
+ value: anchorElement
+ });
+ };
+
+ var proto = URL.prototype;
+
+ var linkURLWithAnchorAttribute = function(attributeName) {
+ Object.defineProperty(proto, attributeName, {
+ get: function() {
+ return this._anchorElement[attributeName];
+ },
+ set: function(value) {
+ this._anchorElement[attributeName] = value;
+ },
+ enumerable: true
+ });
+ };
+
+ ['hash', 'host', 'hostname', 'port', 'protocol', 'search']
+ .forEach(function(attributeName) {
+ linkURLWithAnchorAttribute(attributeName);
+ });
+
+ Object.defineProperties(proto, {
+
+ 'toString': {
+ get: function() {
+ var _this = this;
+ return function() {
+ return _this.href;
+ };
+ }
+ },
+
+ 'href' : {
+ get: function() {
+ return this._anchorElement.href.replace(/\?$/,'');
+ },
+ set: function(value) {
+ this._anchorElement.href = value;
+ },
+ enumerable: true
+ },
+
+ 'pathname' : {
+ get: function() {
+ return this._anchorElement.pathname.replace(/(^\/?)/,'/');
+ },
+ set: function(value) {
+ this._anchorElement.pathname = value;
+ },
+ enumerable: true
+ },
+
+ 'origin': {
+ get: function() {
+ // get expected port from protocol
+ var expectedPort = {'http:': 80, 'https:': 443, 'ftp:': 21}[this._anchorElement.protocol];
+ // add port to origin if, expected port is different than actual port
+ // and it is not empty f.e http://foo:8080
+ // 8080 != 80 && 8080 != ''
+ var addPortToOrigin = this._anchorElement.port != expectedPort &&
+ this._anchorElement.port !== '';
+
+ return this._anchorElement.protocol +
+ '//' +
+ this._anchorElement.hostname +
+ (addPortToOrigin ? (':' + this._anchorElement.port) : '');
+ },
+ enumerable: true
+ },
+
+ 'password': { // TODO
+ get: function() {
+ return '';
+ },
+ set: function(value) {
+ },
+ enumerable: true
+ },
+
+ 'username': { // TODO
+ get: function() {
+ return '';
+ },
+ set: function(value) {
+ },
+ enumerable: true
+ },
+
+ 'searchParams': {
+ get: function() {
+ var searchParams = new URLSearchParams(this.search);
+ var _this = this;
+ ['append', 'delete', 'set'].forEach(function(methodName) {
+ var method = searchParams[methodName];
+ searchParams[methodName] = function() {
+ method.apply(searchParams, arguments);
+ _this.search = searchParams.toString();
+ };
+ });
+ return searchParams;
+ },
+ enumerable: true
+ }
+ });
+
+ URL.createObjectURL = function(blob) {
+ return _URL.createObjectURL.apply(_URL, arguments);
+ };
+
+ URL.revokeObjectURL = function(url) {
+ return _URL.revokeObjectURL.apply(_URL, arguments);
+ };
+
+ global.URL = URL;
+
+ };
+
+ if(!checkIfURLIsSupported()) {
+ polyfillURL();
+ }
+
+ if((global.location !== void 0) && !('origin' in global.location)) {
+ var getOrigin = function() {
+ return global.location.protocol + '//' + global.location.hostname + (global.location.port ? (':' + global.location.port) : '');
+ };
+
+ try {
+ Object.defineProperty(global.location, 'origin', {
+ get: getOrigin,
+ enumerable: true
+ });
+ } catch(e) {
+ setInterval(function() {
+ global.location.origin = getOrigin();
+ }, 100);
+ }
+ }
+
+})(
+ (typeof commonjsGlobal !== 'undefined') ? commonjsGlobal
+ : ((typeof window !== 'undefined') ? window
+ : ((typeof self !== 'undefined') ? self : commonjsGlobal))
+);
+
var loadjs_umd = createCommonjsModule(function (module, exports) {
(function(root, factory) {
if (typeof undefined === 'function' && undefined.amd) {
@@ -5636,6 +6008,24 @@ var utils = {
},
+ // Load image avoiding xhr/fetch CORS issues
+ // Server status can't be obtained this way unfortunately, so this uses "naturalWidth" to determine if the image has loaded.
+ // By default it checks if it is at least 1px, but you can add a second argument to change this.
+ loadImage: function loadImage(src) {
+ var minWidth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
+
+ return new Promise(function (resolve, reject) {
+ var image = new Image();
+ var handler = function handler() {
+ delete image.onload;
+ delete image.onerror;
+ (image.naturalWidth >= minWidth ? resolve : reject)(image);
+ };
+ Object.assign(image, { onload: handler, onerror: handler, src: src });
+ });
+ },
+
+
// Load an external script
loadScript: function loadScript(url) {
return new Promise(function (resolve, reject) {
@@ -5764,7 +6154,7 @@ var utils = {
// Add text node
if (utils.is.string(text)) {
- element.textContent = text;
+ element.innerText = text;
}
// Return built element
@@ -5918,14 +6308,16 @@ var utils = {
},
- // Toggle class on an element
- toggleClass: function toggleClass(element, className, toggle) {
+ // Mirror Element.classList.toggle, with IE compatibility for "force" argument
+ toggleClass: function toggleClass(element, className, force) {
if (utils.is.element(element)) {
- var contains = element.classList.contains(className);
-
- element.classList[toggle ? 'add' : 'remove'](className);
+ var method = 'toggle';
+ if (typeof force !== 'undefined') {
+ method = force ? 'add' : 'remove';
+ }
- return toggle && !contains || !toggle && contains;
+ element.classList[method](className);
+ return element.classList.contains(className);
}
return null;
@@ -6308,6 +6700,12 @@ var utils = {
},
+ // Clone nested objects
+ cloneDeep: function cloneDeep(object) {
+ return JSON.parse(JSON.stringify(object));
+ },
+
+
// Get the closest value in an array
closest: function closest(array, value) {
if (!utils.is.array(array) || !array.length) {
@@ -7127,7 +7525,7 @@ var controls = {
break;
}
- progress.textContent = '% ' + suffix.toLowerCase();
+ progress.innerText = '% ' + suffix.toLowerCase();
}
this.elements.display[type] = progress;
@@ -7201,7 +7599,7 @@ var controls = {
var forceHours = utils.getHours(this.duration) > 0;
// eslint-disable-next-line no-param-reassign
- target.textContent = utils.formatTime(time, forceHours, inverted);
+ target.innerText = utils.formatTime(time, forceHours, inverted);
},
@@ -7270,6 +7668,7 @@ var controls = {
// Video playing
case 'timeupdate':
case 'seeking':
+ case 'seeked':
value = utils.getPercentage(this.currentTime, this.duration);
// Set seek range value only if it's a 'natural' time event
@@ -7327,7 +7726,7 @@ var controls = {
// Calculate percentage
var percent = 0;
- var clientRect = this.elements.inputs.seek.getBoundingClientRect();
+ var clientRect = this.elements.progress.getBoundingClientRect();
var visible = this.config.classNames.tooltip + '--visible';
var toggle = function toggle(_toggle) {
@@ -7388,9 +7787,10 @@ var controls = {
},
- // Show the duration on metadataloaded
+ // Show the duration on metadataloaded or durationchange events
durationUpdate: function durationUpdate() {
- if (!this.supported.ui) {
+ // Bail if no ui or durationchange event triggered after playing/seek when invertTime is false
+ if (!this.supported.ui || !this.config.invertTime && this.currentTime) {
return;
}
@@ -7954,7 +8354,6 @@ var controls = {
// Seek tooltip
if (this.config.tooltips.seek) {
var tooltip = utils.createElement('span', {
- role: 'tooltip',
class: this.config.classNames.tooltip
}, '00:00');
@@ -8505,7 +8904,7 @@ var captions = {
// Set the span content
if (utils.is.string(caption)) {
- content.textContent = caption.trim();
+ content.innerText = caption.trim();
} else {
content.appendChild(caption);
}
@@ -8635,7 +9034,7 @@ var defaults$1 = {
// Sprite (for icons)
loadSprite: true,
iconPrefix: 'plyr',
- iconUrl: 'https://cdn.plyr.io/3.3.7/plyr.svg',
+ iconUrl: 'https://cdn.plyr.io/3.3.8/plyr.svg',
// Blank video (used to prevent errors on source change)
blankVideo: 'https://cdn.plyr.io/static/blank.mp4',
@@ -8743,8 +9142,7 @@ var defaults$1 = {
},
youtube: {
sdk: 'https://www.youtube.com/iframe_api',
- api: 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',
- poster: 'https://img.youtube.com/vi/{0}/maxresdefault.jpg,https://img.youtube.com/vi/{0}/hqdefault.jpg'
+ api: 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet'
},
googleIMA: {
sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js'
@@ -8840,13 +9238,13 @@ var defaults$1 = {
embed: 'plyr__video-embed',
embedContainer: 'plyr__video-embed__container',
poster: 'plyr__poster',
+ posterEnabled: 'plyr__poster-enabled',
ads: 'plyr__ads',
control: 'plyr__control',
playing: 'plyr--playing',
paused: 'plyr--paused',
stopped: 'plyr--stopped',
loading: 'plyr--loading',
- error: 'plyr--has-error',
hover: 'plyr--hover',
tooltip: 'plyr__tooltip',
cues: 'plyr__cues',
@@ -9241,8 +9639,10 @@ var ui = {
// Set the title
ui.setTitle.call(this);
- // Set the poster image
- ui.setPoster.call(this);
+ // Assure the poster image is set, if the property was added before the element was created
+ if (this.poster && this.elements.poster && !this.elements.poster.style.backgroundImage) {
+ ui.setPoster.call(this, this.poster);
+ }
},
@@ -9284,17 +9684,43 @@ var ui = {
},
- // Set the poster image
- setPoster: function setPoster() {
- if (!utils.is.element(this.elements.poster) || utils.is.empty(this.poster)) {
- return;
+ // Toggle poster
+ togglePoster: function togglePoster(enable) {
+ utils.toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);
+ },
+
+
+ // Set the poster image (async)
+ setPoster: function setPoster(poster) {
+ var _this2 = this;
+
+ // Set property regardless of validity
+ this.media.setAttribute('poster', poster);
+
+ // Bail if element is missing
+ if (!utils.is.element(this.elements.poster)) {
+ return Promise.reject();
}
- // Set the inline style
- var posters = this.poster.split(',');
- this.elements.poster.style.backgroundImage = posters.map(function (p) {
- return 'url(\'' + p + '\')';
- }).join(',');
+ // Load the image, and set poster if successful
+ var loadPromise = utils.loadImage(poster).then(function () {
+ _this2.elements.poster.style.backgroundImage = 'url(\'' + poster + '\')';
+ Object.assign(_this2.elements.poster.style, {
+ backgroundImage: 'url(\'' + poster + '\')',
+ // Reset backgroundSize as well (since it can be set to "cover" for padded thumbnails for youtube)
+ backgroundSize: ''
+ });
+ ui.togglePoster.call(_this2, true);
+ return poster;
+ });
+
+ // Hide the element if the poster can't be loaded (otherwise it will just be a black element covering the video)
+ loadPromise.catch(function () {
+ return ui.togglePoster.call(_this2, false);
+ });
+
+ // Return the promise so the caller can use it as well
+ return loadPromise;
},
@@ -9314,13 +9740,13 @@ var ui = {
}
// Toggle controls
- this.toggleControls(!this.playing);
+ ui.toggleControls.call(this);
},
// Check if media is loading
checkLoading: function checkLoading(event) {
- var _this2 = this;
+ var _this3 = this;
this.loading = ['stalled', 'waiting'].includes(event.type);
@@ -9329,38 +9755,24 @@ var ui = {
// Timer to prevent flicker when seeking
this.timers.loading = setTimeout(function () {
- // Toggle container class hook
- utils.toggleClass(_this2.elements.container, _this2.config.classNames.loading, _this2.loading);
+ // Update progress bar loading class state
+ utils.toggleClass(_this3.elements.container, _this3.config.classNames.loading, _this3.loading);
- // Show controls if loading, hide if done
- _this2.toggleControls(_this2.loading);
+ // Update controls visibility
+ ui.toggleControls.call(_this3);
}, this.loading ? 250 : 0);
},
- // Check if media failed to load
- checkFailed: function checkFailed() {
- var _this3 = this;
+ // Toggle controls based on state and `force` argument
+ toggleControls: function toggleControls(force) {
+ var controls$$1 = this.elements.controls;
- // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState
- this.failed = this.media.networkState === 3;
- if (this.failed) {
- utils.toggleClass(this.elements.container, this.config.classNames.loading, false);
- utils.toggleClass(this.elements.container, this.config.classNames.error, true);
+ if (controls$$1 && this.config.hideControls) {
+ // Show controls if force, loading, paused, or button interaction, otherwise hide
+ this.toggleControls(Boolean(force || this.loading || this.paused || controls$$1.pressed || controls$$1.hover));
}
-
- // Clear timer
- clearTimeout(this.timers.failed);
-
- // Timer to prevent flicker when seeking
- this.timers.loading = setTimeout(function () {
- // Toggle container class hook
- utils.toggleClass(_this3.elements.container, _this3.config.classNames.loading, _this3.loading);
-
- // Show controls if loading, hide if done
- _this3.toggleControls(_this3.loading);
- }, this.loading ? 250 : 0);
}
};
@@ -9598,13 +10010,35 @@ var Listeners = function () {
}, 0);
});
- // Toggle controls visibility based on mouse movement
- if (this.player.config.hideControls) {
- // Toggle controls on mouse events and entering fullscreen
- utils.on(this.player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', function (event) {
- _this2.player.toggleControls(event);
- });
- }
+ // Toggle controls on mouse events and entering fullscreen
+ utils.on(this.player.elements.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen', function (event) {
+ var controls$$1 = _this2.player.elements.controls;
+
+ // Remove button states for fullscreen
+
+ if (event.type === 'enterfullscreen') {
+ controls$$1.pressed = false;
+ controls$$1.hover = false;
+ }
+
+ // Show, then hide after a timeout unless another control event occurs
+ var show = ['touchstart', 'touchmove', 'mousemove'].includes(event.type);
+
+ var delay = 0;
+
+ if (show) {
+ ui.toggleControls.call(_this2.player, true);
+ // Use longer timeout for touch devices
+ delay = _this2.player.touch ? 3000 : 2000;
+ }
+
+ // Clear timer
+ clearTimeout(_this2.player.timers.controls);
+ // Timer to prevent flicker when seeking
+ _this2.player.timers.controls = setTimeout(function () {
+ return ui.toggleControls.call(_this2.player, false);
+ }, delay);
+ });
}
// Listen for media events
@@ -9615,7 +10049,7 @@ var Listeners = function () {
var _this3 = this;
// Time change on media
- utils.on(this.player.media, 'timeupdate seeking', function (event) {
+ utils.on(this.player.media, 'timeupdate seeking seeked', function (event) {
return controls.timeUpdate.call(_this3.player, event);
});
@@ -9641,7 +10075,7 @@ var Listeners = function () {
});
// Check for buffer progress
- utils.on(this.player.media, 'progress playing', function (event) {
+ utils.on(this.player.media, 'progress playing seeking seeked', function (event) {
return controls.updateProgress.call(_this3.player, event);
});
@@ -9660,9 +10094,6 @@ var Listeners = function () {
return ui.checkLoading.call(_this3.player, event);
});
- // Check if media failed to load
- // utils.on(this.player.media, 'play', event => ui.checkFailed.call(this.player, event));
-
// If autoplay, then load advertisement if required
// TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows
utils.on(this.player.media, 'playing', function () {
@@ -9884,9 +10315,47 @@ var Listeners = function () {
}
});
+ // Set range input alternative "value", which matches the tooltip time (#954)
+ on(this.player.elements.inputs.seek, 'mousedown mousemove', function (event) {
+ var clientRect = _this4.player.elements.progress.getBoundingClientRect();
+ var percent = 100 / clientRect.width * (event.pageX - clientRect.left);
+ event.currentTarget.setAttribute('seek-value', percent);
+ });
+
+ // Pause while seeking
+ on(this.player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', function (event) {
+ var seek = event.currentTarget;
+
+ // Was playing before?
+ var play = seek.hasAttribute('play-on-seeked');
+
+ // Done seeking
+ var done = ['mouseup', 'touchend', 'keyup'].includes(event.type);
+
+ // If we're done seeking and it was playing, resume playback
+ if (play && done) {
+ seek.removeAttribute('play-on-seeked');
+ _this4.player.play();
+ } else if (!done && _this4.player.playing) {
+ seek.setAttribute('play-on-seeked', '');
+ _this4.player.pause();
+ }
+ });
+
// Seek
on(this.player.elements.inputs.seek, inputEvent, function (event) {
- _this4.player.currentTime = event.target.value / event.target.max * _this4.player.duration;
+ var seek = event.currentTarget;
+
+ // If it exists, use seek-value instead of "value" for consistency with tooltip time (#954)
+ var seekTo = seek.getAttribute('seek-value');
+
+ if (utils.is.empty(seekTo)) {
+ seekTo = seek.value;
+ }
+
+ seek.removeAttribute('seek-value');
+
+ _this4.player.currentTime = seekTo / seek.max * _this4.player.duration;
}, 'seek');
// Current time invert
@@ -9921,23 +10390,48 @@ var Listeners = function () {
return controls.updateSeekTooltip.call(_this4.player, event);
});
- // Toggle controls visibility based on mouse movement
- if (this.player.config.hideControls) {
- // Watch for cursor over controls so they don't hide when trying to interact
- on(this.player.elements.controls, 'mouseenter mouseleave', function (event) {
- _this4.player.elements.controls.hover = !_this4.player.touch && event.type === 'mouseenter';
- });
+ // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)
+ on(this.player.elements.controls, 'mouseenter mouseleave', function (event) {
+ _this4.player.elements.controls.hover = !_this4.player.touch && event.type === 'mouseenter';
+ });
- // Watch for cursor over controls so they don't hide when trying to interact
- on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', function (event) {
- _this4.player.elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);
- });
+ // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)
+ on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', function (event) {
+ _this4.player.elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);
+ });
- // Focus in/out on controls
- on(this.player.elements.controls, 'focusin focusout', function (event) {
- _this4.player.toggleControls(event);
- });
- }
+ // Focus in/out on controls
+ on(this.player.elements.controls, 'focusin focusout', function (event) {
+ var _player = _this4.player,
+ config = _player.config,
+ elements = _player.elements,
+ timers = _player.timers;
+
+ // Skip transition to prevent focus from scrolling the parent element
+
+ utils.toggleClass(elements.controls, config.classNames.noTransition, event.type === 'focusin');
+
+ // Toggle
+ ui.toggleControls.call(_this4.player, event.type === 'focusin');
+
+ // If focusin, hide again after delay
+ if (event.type === 'focusin') {
+ // Restore transition
+ setTimeout(function () {
+ utils.toggleClass(elements.controls, config.classNames.noTransition, false);
+ }, 0);
+
+ // Delay a little more for keyboard users
+ var delay = _this4.touch ? 3000 : 4000;
+
+ // Clear timer
+ clearTimeout(timers.controls);
+ // Hide
+ timers.controls = setTimeout(function () {
+ return ui.toggleControls.call(_this4.player, false);
+ }, delay);
+ }
+ });
// Mouse wheel for volume
on(this.player.elements.inputs.volume, 'wheel', function (event) {
@@ -9989,6 +10483,14 @@ var Listeners = function () {
// ==========================================================================
+// Set playback state and trigger change (only on actual change)
+function assurePlaybackState(play) {
+ if (this.media.paused === play) {
+ this.media.paused = !play;
+ utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');
+ }
+}
+
var vimeo = {
setup: function setup() {
var _this = this;
@@ -10084,11 +10586,8 @@ var vimeo = {
// Get original image
url.pathname = url.pathname.split('_')[0] + '.jpg';
- // Set attribute
- player.media.setAttribute('poster', url.href);
-
- // Update
- ui.setPoster.call(player);
+ // Set and show poster
+ ui.setPoster.call(player, url.href);
});
// Setup instance
@@ -10108,15 +10607,13 @@ var vimeo = {
// Create a faux HTML5 API using the Vimeo API
player.media.play = function () {
- player.embed.play().then(function () {
- player.media.paused = false;
- });
+ assurePlaybackState.call(player, true);
+ return player.embed.play();
};
player.media.pause = function () {
- player.embed.pause().then(function () {
- player.media.paused = true;
- });
+ assurePlaybackState.call(player, false);
+ return player.embed.pause();
};
player.media.stop = function () {
@@ -10132,26 +10629,35 @@ var vimeo = {
return currentTime;
},
set: function set(time) {
- // Get current paused state
- // Vimeo will automatically play on seek
- var paused = player.media.paused;
-
- // Set seeking flag
-
- player.media.seeking = true;
-
- // Trigger seeking
- utils.dispatchEvent.call(player, player.media, 'seeking');
-
- // Seek after events
- player.embed.setCurrentTime(time).catch(function () {
+ // Vimeo will automatically play on seek if the video hasn't been played before
+
+ // Get current paused state and volume etc
+ var embed = player.embed,
+ media = player.media,
+ paused = player.paused,
+ volume = player.volume;
+
+ // Set seeking state and trigger event
+
+ media.seeking = true;
+ utils.dispatchEvent.call(player, media, 'seeking');
+
+ // If paused, mute until seek is complete
+ Promise.resolve(paused && embed.setVolume(0))
+ // Seek
+ .then(function () {
+ return embed.setCurrentTime(time);
+ })
+ // Restore paused
+ .then(function () {
+ return paused && embed.pause();
+ })
+ // Restore volume
+ .then(function () {
+ return paused && embed.setVolume(volume);
+ }).catch(function () {
// Do nothing
});
-
- // Restore pause state
- if (paused) {
- player.pause();
- }
}
});
@@ -10299,17 +10805,12 @@ var vimeo = {
});
player.embed.on('play', function () {
- // Only fire play if paused before
- if (player.media.paused) {
- utils.dispatchEvent.call(player, player.media, 'play');
- }
- player.media.paused = false;
+ assurePlaybackState.call(player, true);
utils.dispatchEvent.call(player, player.media, 'playing');
});
player.embed.on('pause', function () {
- player.media.paused = true;
- utils.dispatchEvent.call(player, player.media, 'pause');
+ assurePlaybackState.call(player, false);
});
player.embed.on('timeupdate', function (data) {
@@ -10340,7 +10841,6 @@ var vimeo = {
player.embed.on('seeked', function () {
player.media.seeking = false;
utils.dispatchEvent.call(player, player.media, 'seeked');
- utils.dispatchEvent.call(player, player.media, 'play');
});
player.embed.on('ended', function () {
@@ -10422,6 +10922,14 @@ function mapQualityUnits(levels) {
}));
}
+// Set playback state and trigger change (only on actual change)
+function assurePlaybackState$1(play) {
+ if (this.media.paused === play) {
+ this.media.paused = !play;
+ utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');
+ }
+}
+
var youtube = {
setup: function setup() {
var _this = this;
@@ -10525,7 +11033,26 @@ var youtube = {
player.media = utils.replaceElement(container, player.media);
// Set poster image
- player.media.setAttribute('poster', utils.format(player.config.urls.youtube.poster, videoId));
+ var posterSrc = function posterSrc(format) {
+ return 'https://img.youtube.com/vi/' + videoId + '/' + format + 'default.jpg';
+ };
+
+ // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)
+ utils.loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded
+ .catch(function () {
+ return utils.loadImage(posterSrc('sd'), 121);
+ }) // 480p padded 4:3
+ .catch(function () {
+ return utils.loadImage(posterSrc('hq'));
+ }) // 360p padded 4:3. Always exists
+ .then(function (image) {
+ return ui.setPoster.call(player, image.src);
+ }).then(function (posterSrc) {
+ // If the image is padded, use background-size "cover" instead (like youtube does too with their posters)
+ if (!posterSrc.includes('maxres')) {
+ player.elements.poster.style.backgroundSize = 'cover';
+ }
+ });
// Setup instance
// https://developers.google.com/youtube/iframe_api_reference
@@ -10612,10 +11139,12 @@ var youtube = {
// Create a faux HTML5 API using the YouTube API
player.media.play = function () {
+ assurePlaybackState$1.call(player, true);
instance.playVideo();
};
player.media.pause = function () {
+ assurePlaybackState$1.call(player, false);
instance.pauseVideo();
};
@@ -10633,23 +11162,17 @@ var youtube = {
return Number(instance.getCurrentTime());
},
set: function set(time) {
- // Vimeo will automatically play on seek
- var paused = player.media.paused;
-
- // Set seeking flag
+ // If paused, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).
+ if (player.paused) {
+ player.embed.mute();
+ }
+ // Set seeking state and trigger event
player.media.seeking = true;
-
- // Trigger seeking
utils.dispatchEvent.call(player, player.media, 'seeking');
// Seek after events sent
instance.seekTo(time);
-
- // Restore pause state
- if (paused) {
- player.pause();
- }
}
});
@@ -10772,6 +11295,14 @@ var youtube = {
// Reset timer
clearInterval(player.timers.playing);
+ var seeked = player.media.seeking && [1, 2].includes(event.data);
+
+ if (seeked) {
+ // Unset seeking and fire seeked event
+ player.media.seeking = false;
+ utils.dispatchEvent.call(player, player.media, 'seeked');
+ }
+
// Handle events
// -1 Unstarted
// 0 Ended
@@ -10791,7 +11322,7 @@ var youtube = {
break;
case 0:
- player.media.paused = true;
+ assurePlaybackState$1.call(player, false);
// YouTube doesn't support loop for a single video, so mimick it.
if (player.media.loop) {
@@ -10805,42 +11336,39 @@ var youtube = {
break;
case 1:
- // If we were seeking, fire seeked event
- if (player.media.seeking) {
- utils.dispatchEvent.call(player, player.media, 'seeked');
- }
- player.media.seeking = false;
-
- // Only fire play if paused before
+ // Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)
if (player.media.paused) {
- utils.dispatchEvent.call(player, player.media, 'play');
- }
- player.media.paused = false;
+ player.media.pause();
+ } else {
+ assurePlaybackState$1.call(player, true);
- utils.dispatchEvent.call(player, player.media, 'playing');
+ utils.dispatchEvent.call(player, player.media, 'playing');
- // Poll to get playback progress
- player.timers.playing = setInterval(function () {
- utils.dispatchEvent.call(player, player.media, 'timeupdate');
- }, 50);
+ // Poll to get playback progress
+ player.timers.playing = setInterval(function () {
+ utils.dispatchEvent.call(player, player.media, 'timeupdate');
+ }, 50);
- // Check duration again due to YouTube bug
- // https://github.com/sampotts/plyr/issues/374
- // https://code.google.com/p/gdata-issues/issues/detail?id=8690
- if (player.media.duration !== instance.getDuration()) {
- player.media.duration = instance.getDuration();
- utils.dispatchEvent.call(player, player.media, 'durationchange');
- }
+ // Check duration again due to YouTube bug
+ // https://github.com/sampotts/plyr/issues/374
+ // https://code.google.com/p/gdata-issues/issues/detail?id=8690
+ if (player.media.duration !== instance.getDuration()) {
+ player.media.duration = instance.getDuration();
+ utils.dispatchEvent.call(player, player.media, 'durationchange');
+ }
- // Get quality
- controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));
+ // Get quality
+ controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));
+ }
break;
case 2:
- player.media.paused = true;
-
- utils.dispatchEvent.call(player, player.media, 'pause');
+ // Restore audio (YouTube starts playing on seek if the video hasn't been played yet)
+ if (!player.muted) {
+ player.embed.unMute();
+ }
+ assurePlaybackState$1.call(player, false);
break;
@@ -11774,7 +12302,7 @@ var Plyr = function () {
}
// Set config
- this.config = utils.extend({}, defaults$1, options || {}, function () {
+ this.config = utils.extend({}, defaults$1, Plyr.defaults, options || {}, function () {
try {
return JSON.parse(_this.media.getAttribute('data-plyr-config'));
} catch (e) {
@@ -12214,114 +12742,35 @@ var Plyr = function () {
/**
* Toggle the player controls
- * @param {boolean} toggle - Whether to show the controls
+ * @param {boolean} [toggle] - Whether to show the controls
*/
}, {
key: 'toggleControls',
value: function toggleControls(toggle) {
- var _this2 = this;
+ // Don't toggle if missing UI support or if it's audio
+ if (this.supported.ui && !this.isAudio) {
+ // Get state before change
+ var isHidden = utils.hasClass(this.elements.container, this.config.classNames.hideControls);
- // We need controls of course...
- if (!utils.is.element(this.elements.controls)) {
- return;
- }
-
- // Don't hide if no UI support or it's audio
- if (!this.supported.ui || this.isAudio) {
- return;
- }
-
- var delay = 0;
- var show = toggle;
- var isEnterFullscreen = false;
-
- // Get toggle state if not set
- if (!utils.is.boolean(toggle)) {
- if (utils.is.event(toggle)) {
- // Is the enter fullscreen event
- isEnterFullscreen = toggle.type === 'enterfullscreen';
-
- // Events that show the controls
- var showEvents = ['touchstart', 'touchmove', 'mouseenter', 'mousemove', 'focusin'];
-
- // Events that delay hiding
- var delayEvents = ['touchmove', 'touchend', 'mousemove'];
-
- // Whether to show controls
- show = showEvents.includes(toggle.type);
+ // Negate the argument if not undefined since adding the class to hides the controls
+ var force = typeof toggle === 'undefined' ? undefined : !toggle;
- // Delay hiding on move events
- if (delayEvents.includes(toggle.type)) {
- delay = 2000;
- }
-
- // Delay a little more for keyboard users
- if (!this.touch && toggle.type === 'focusin') {
- delay = 3000;
- utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);
- }
- } else {
- show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);
- }
- }
-
- // Clear timer on every call
- clearTimeout(this.timers.controls);
-
- // If the mouse is not over the controls, set a timeout to hide them
- if (show || this.paused || this.loading) {
- // Check if controls toggled
- var toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);
-
- // Trigger event
- if (toggled) {
- utils.dispatchEvent.call(this, this.media, 'controlsshown');
- }
+ // Apply and get updated state
+ var hiding = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, force);
- // Always show controls when paused or if touch
- if (this.paused || this.loading) {
- return;
+ // Close menu
+ if (hiding && this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {
+ controls.toggleMenu.call(this, false);
}
-
- // Delay for hiding on touch
- if (this.touch) {
- delay = 3000;
+ // Trigger event on change
+ if (hiding !== isHidden) {
+ var eventName = hiding ? 'controlshidden' : 'controlsshown';
+ utils.dispatchEvent.call(this, this.media, eventName);
}
+ return !hiding;
}
-
- // If toggle is false or if we're playing (regardless of toggle),
- // then set the timer to hide the controls
- if (!show || this.playing) {
- this.timers.controls = setTimeout(function () {
- // We need controls of course...
- if (!utils.is.element(_this2.elements.controls)) {
- return;
- }
-
- // If the mouse is over the controls (and not entering fullscreen), bail
- if ((_this2.elements.controls.pressed || _this2.elements.controls.hover) && !isEnterFullscreen) {
- return;
- }
-
- // Restore transition behaviour
- if (!utils.hasClass(_this2.elements.container, _this2.config.classNames.hideControls)) {
- utils.toggleClass(_this2.elements.controls, _this2.config.classNames.noTransition, false);
- }
-
- // Set hideControls class
- var toggled = utils.toggleClass(_this2.elements.container, _this2.config.classNames.hideControls, _this2.config.hideControls);
-
- // Trigger event and close menu
- if (toggled) {
- utils.dispatchEvent.call(_this2, _this2.media, 'controlshidden');
-
- if (_this2.config.controls.includes('settings') && !utils.is.empty(_this2.config.settings)) {
- controls.toggleMenu.call(_this2, false);
- }
- }
- }, delay);
- }
+ return false;
}
/**
@@ -12359,7 +12808,7 @@ var Plyr = function () {
}, {
key: 'destroy',
value: function destroy(callback) {
- var _this3 = this;
+ var _this2 = this;
var soft = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
@@ -12372,22 +12821,22 @@ var Plyr = function () {
document.body.style.overflow = '';
// GC for embed
- _this3.embed = null;
+ _this2.embed = null;
// If it's a soft destroy, make minimal changes
if (soft) {
- if (Object.keys(_this3.elements).length) {
+ if (Object.keys(_this2.elements).length) {
// Remove elements
- utils.removeElement(_this3.elements.buttons.play);
- utils.removeElement(_this3.elements.captions);
- utils.removeElement(_this3.elements.controls);
- utils.removeElement(_this3.elements.wrapper);
+ utils.removeElement(_this2.elements.buttons.play);
+ utils.removeElement(_this2.elements.captions);
+ utils.removeElement(_this2.elements.controls);
+ utils.removeElement(_this2.elements.wrapper);
// Clear for GC
- _this3.elements.buttons.play = null;
- _this3.elements.captions = null;
- _this3.elements.controls = null;
- _this3.elements.wrapper = null;
+ _this2.elements.buttons.play = null;
+ _this2.elements.captions = null;
+ _this2.elements.controls = null;
+ _this2.elements.wrapper = null;
}
// Callback
@@ -12396,26 +12845,26 @@ var Plyr = function () {
}
} else {
// Unbind listeners
- _this3.listeners.clear();
+ _this2.listeners.clear();
// Replace the container with the original element provided
- utils.replaceElement(_this3.elements.original, _this3.elements.container);
+ utils.replaceElement(_this2.elements.original, _this2.elements.container);
// Event
- utils.dispatchEvent.call(_this3, _this3.elements.original, 'destroyed', true);
+ utils.dispatchEvent.call(_this2, _this2.elements.original, 'destroyed', true);
// Callback
if (utils.is.function(callback)) {
- callback.call(_this3.elements.original);
+ callback.call(_this2.elements.original);
}
// Reset state
- _this3.ready = false;
+ _this2.ready = false;
// Clear for garbage collection
setTimeout(function () {
- _this3.elements = null;
- _this3.media = null;
+ _this2.elements = null;
+ _this2.media = null;
}, 200);
}
};
@@ -12934,10 +13383,7 @@ var Plyr = function () {
return;
}
- if (utils.is.string(input)) {
- this.media.setAttribute('poster', input);
- ui.setPoster.call(this);
- }
+ ui.setPoster.call(this, input);
}
/**
@@ -13118,6 +13564,8 @@ var Plyr = function () {
return Plyr;
}();
+Plyr.defaults = utils.cloneDeep(defaults$1);
+
// ==========================================================================
return Plyr;
diff --git a/dist/plyr.polyfilled.js.map b/dist/plyr.polyfilled.js.map
index cabf4cfd..0c601560 100644
--- a/dist/plyr.polyfilled.js.map
+++ b/dist/plyr.polyfilled.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../node_modules/core-js/modules/_global.js","../../node_modules/core-js/modules/_core.js","../../node_modules/core-js/modules/_is-object.js","../../node_modules/core-js/modules/_an-object.js","../../node_modules/core-js/modules/_fails.js","../../node_modules/core-js/modules/_descriptors.js","../../node_modules/core-js/modules/_dom-create.js","../../node_modules/core-js/modules/_ie8-dom-define.js","../../node_modules/core-js/modules/_to-primitive.js","../../node_modules/core-js/modules/_object-dp.js","../../node_modules/core-js/modules/_property-desc.js","../../node_modules/core-js/modules/_hide.js","../../node_modules/core-js/modules/_has.js","../../node_modules/core-js/modules/_uid.js","../../node_modules/core-js/modules/_redefine.js","../../node_modules/core-js/modules/_a-function.js","../../node_modules/core-js/modules/_ctx.js","../../node_modules/core-js/modules/_export.js","../../node_modules/core-js/modules/_typed.js","../../node_modules/core-js/modules/_library.js","../../node_modules/core-js/modules/_redefine-all.js","../../node_modules/core-js/modules/_an-instance.js","../../node_modules/core-js/modules/_to-integer.js","../../node_modules/core-js/modules/_to-length.js","../../node_modules/core-js/modules/_to-index.js","../../node_modules/core-js/modules/_cof.js","../../node_modules/core-js/modules/_iobject.js","../../node_modules/core-js/modules/_defined.js","../../node_modules/core-js/modules/_to-iobject.js","../../node_modules/core-js/modules/_to-absolute-index.js","../../node_modules/core-js/modules/_array-includes.js","../../node_modules/core-js/modules/_shared.js","../../node_modules/core-js/modules/_shared-key.js","../../node_modules/core-js/modules/_object-keys-internal.js","../../node_modules/core-js/modules/_enum-bug-keys.js","../../node_modules/core-js/modules/_object-gopn.js","../../node_modules/core-js/modules/_to-object.js","../../node_modules/core-js/modules/_array-fill.js","../../node_modules/core-js/modules/_wks.js","../../node_modules/core-js/modules/_set-to-string-tag.js","../../node_modules/core-js/modules/_typed-buffer.js","../../node_modules/core-js/modules/_species-constructor.js","../../node_modules/core-js/modules/_set-species.js","../../node_modules/core-js/modules/es6.typed.array-buffer.js","../../node_modules/core-js/modules/_classof.js","../../node_modules/core-js/modules/_iterators.js","../../node_modules/core-js/modules/_is-array-iter.js","../../node_modules/core-js/modules/_object-keys.js","../../node_modules/core-js/modules/_object-dps.js","../../node_modules/core-js/modules/_html.js","../../node_modules/core-js/modules/_object-create.js","../../node_modules/core-js/modules/_object-gpo.js","../../node_modules/core-js/modules/core.get-iterator-method.js","../../node_modules/core-js/modules/_is-array.js","../../node_modules/core-js/modules/_array-species-constructor.js","../../node_modules/core-js/modules/_array-species-create.js","../../node_modules/core-js/modules/_array-methods.js","../../node_modules/core-js/modules/_add-to-unscopables.js","../../node_modules/core-js/modules/_iter-step.js","../../node_modules/core-js/modules/_iter-create.js","../../node_modules/core-js/modules/_iter-define.js","../../node_modules/core-js/modules/es6.array.iterator.js","../../node_modules/core-js/modules/_iter-detect.js","../../node_modules/core-js/modules/_array-copy-within.js","../../node_modules/core-js/modules/_object-pie.js","../../node_modules/core-js/modules/_object-gopd.js","../../node_modules/core-js/modules/_typed-array.js","../../node_modules/core-js/modules/es6.typed.int8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","../../node_modules/core-js/modules/es6.typed.int16-array.js","../../node_modules/core-js/modules/es6.typed.uint16-array.js","../../node_modules/core-js/modules/es6.typed.int32-array.js","../../node_modules/core-js/modules/es6.typed.uint32-array.js","../../node_modules/core-js/modules/es6.typed.float32-array.js","../../node_modules/core-js/modules/es6.typed.float64-array.js","../../node_modules/core-js/modules/_iter-call.js","../../node_modules/core-js/modules/_for-of.js","../../node_modules/core-js/modules/_meta.js","../../node_modules/core-js/modules/_validate-collection.js","../../node_modules/core-js/modules/_collection-strong.js","../../node_modules/core-js/modules/_set-proto.js","../../node_modules/core-js/modules/_inherit-if-required.js","../../node_modules/core-js/modules/_collection.js","../../node_modules/core-js/modules/es6.map.js","../../node_modules/core-js/modules/es6.set.js","../../node_modules/core-js/modules/_object-gops.js","../../node_modules/core-js/modules/_object-assign.js","../../node_modules/core-js/modules/_collection-weak.js","../../node_modules/core-js/modules/es6.weak-map.js","../../node_modules/core-js/modules/es6.weak-set.js","../../node_modules/core-js/modules/es6.reflect.apply.js","../../node_modules/core-js/modules/_invoke.js","../../node_modules/core-js/modules/_bind.js","../../node_modules/core-js/modules/es6.reflect.construct.js","../../node_modules/core-js/modules/es6.reflect.define-property.js","../../node_modules/core-js/modules/es6.reflect.delete-property.js","../../node_modules/core-js/modules/es6.reflect.get.js","../../node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.reflect.get-prototype-of.js","../../node_modules/core-js/modules/es6.reflect.has.js","../../node_modules/core-js/modules/es6.reflect.is-extensible.js","../../node_modules/core-js/modules/_own-keys.js","../../node_modules/core-js/modules/es6.reflect.own-keys.js","../../node_modules/core-js/modules/es6.reflect.prevent-extensions.js","../../node_modules/core-js/modules/es6.reflect.set.js","../../node_modules/core-js/modules/es6.reflect.set-prototype-of.js","../../node_modules/core-js/modules/_task.js","../../node_modules/core-js/modules/_microtask.js","../../node_modules/core-js/modules/_new-promise-capability.js","../../node_modules/core-js/modules/_perform.js","../../node_modules/core-js/modules/_promise-resolve.js","../../node_modules/core-js/modules/es6.promise.js","../../node_modules/core-js/modules/_wks-ext.js","../../node_modules/core-js/modules/_wks-define.js","../../node_modules/core-js/modules/_enum-keys.js","../../node_modules/core-js/modules/_object-gopn-ext.js","../../node_modules/core-js/modules/es6.symbol.js","../../node_modules/core-js/modules/_object-sap.js","../../node_modules/core-js/modules/es6.object.freeze.js","../../node_modules/core-js/modules/es6.object.seal.js","../../node_modules/core-js/modules/es6.object.prevent-extensions.js","../../node_modules/core-js/modules/es6.object.is-frozen.js","../../node_modules/core-js/modules/es6.object.is-sealed.js","../../node_modules/core-js/modules/es6.object.is-extensible.js","../../node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.object.get-prototype-of.js","../../node_modules/core-js/modules/es6.object.keys.js","../../node_modules/core-js/modules/es6.object.get-own-property-names.js","../../node_modules/core-js/modules/es6.object.assign.js","../../node_modules/core-js/modules/_same-value.js","../../node_modules/core-js/modules/es6.object.is.js","../../node_modules/core-js/modules/es6.function.name.js","../../node_modules/core-js/modules/es6.string.raw.js","../../node_modules/core-js/modules/es6.string.from-code-point.js","../../node_modules/core-js/modules/_string-at.js","../../node_modules/core-js/modules/es6.string.code-point-at.js","../../node_modules/core-js/modules/_string-repeat.js","../../node_modules/core-js/modules/es6.string.repeat.js","../../node_modules/core-js/modules/_is-regexp.js","../../node_modules/core-js/modules/_string-context.js","../../node_modules/core-js/modules/_fails-is-regexp.js","../../node_modules/core-js/modules/es6.string.starts-with.js","../../node_modules/core-js/modules/es6.string.ends-with.js","../../node_modules/core-js/modules/es6.string.includes.js","../../node_modules/core-js/modules/_flags.js","../../node_modules/core-js/modules/es6.regexp.flags.js","../../node_modules/core-js/modules/_fix-re-wks.js","../../node_modules/core-js/modules/es6.regexp.match.js","../../node_modules/core-js/modules/es6.regexp.replace.js","../../node_modules/core-js/modules/es6.regexp.split.js","../../node_modules/core-js/modules/es6.regexp.search.js","../../node_modules/core-js/modules/_create-property.js","../../node_modules/core-js/modules/es6.array.from.js","../../node_modules/core-js/modules/es6.array.of.js","../../node_modules/core-js/modules/es6.array.copy-within.js","../../node_modules/core-js/modules/es6.array.find.js","../../node_modules/core-js/modules/es6.array.find-index.js","../../node_modules/core-js/modules/es6.array.fill.js","../../node_modules/core-js/modules/es6.number.is-finite.js","../../node_modules/core-js/modules/_is-integer.js","../../node_modules/core-js/modules/es6.number.is-integer.js","../../node_modules/core-js/modules/es6.number.is-safe-integer.js","../../node_modules/core-js/modules/es6.number.is-nan.js","../../node_modules/core-js/modules/es6.number.epsilon.js","../../node_modules/core-js/modules/es6.number.min-safe-integer.js","../../node_modules/core-js/modules/es6.number.max-safe-integer.js","../../node_modules/core-js/modules/_math-log1p.js","../../node_modules/core-js/modules/es6.math.acosh.js","../../node_modules/core-js/modules/es6.math.asinh.js","../../node_modules/core-js/modules/es6.math.atanh.js","../../node_modules/core-js/modules/_math-sign.js","../../node_modules/core-js/modules/es6.math.cbrt.js","../../node_modules/core-js/modules/es6.math.clz32.js","../../node_modules/core-js/modules/es6.math.cosh.js","../../node_modules/core-js/modules/_math-expm1.js","../../node_modules/core-js/modules/es6.math.expm1.js","../../node_modules/core-js/modules/_math-fround.js","../../node_modules/core-js/modules/es6.math.fround.js","../../node_modules/core-js/modules/es6.math.hypot.js","../../node_modules/core-js/modules/es6.math.imul.js","../../node_modules/core-js/modules/es6.math.log1p.js","../../node_modules/core-js/modules/es6.math.log10.js","../../node_modules/core-js/modules/es6.math.log2.js","../../node_modules/core-js/modules/es6.math.sign.js","../../node_modules/core-js/modules/es6.math.sinh.js","../../node_modules/core-js/modules/es6.math.tanh.js","../../node_modules/core-js/modules/es6.math.trunc.js","../../node_modules/core-js/modules/es7.array.includes.js","../../node_modules/core-js/modules/_object-to-array.js","../../node_modules/core-js/modules/es7.object.values.js","../../node_modules/core-js/modules/es7.object.entries.js","../../node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","../../node_modules/core-js/modules/_string-pad.js","../../node_modules/core-js/modules/_user-agent.js","../../node_modules/core-js/modules/es7.string.pad-start.js","../../node_modules/core-js/modules/es7.string.pad-end.js","../../node_modules/core-js/modules/web.timers.js","../../node_modules/core-js/modules/web.immediate.js","../../node_modules/core-js/modules/web.dom.iterable.js","../../node_modules/regenerator-runtime/runtime.js","../../node_modules/custom-event-polyfill/custom-event-polyfill.js","../../node_modules/loadjs/dist/loadjs.umd.js","storage.js","types.js","utils.js","support.js","html5.js","i18n.js","controls.js","captions.js","console.js","defaults.js","fullscreen.js","ui.js","listeners.js","plugins/vimeo.js","plugins/youtube.js","media.js","plugins/ads.js","source.js","plyr.js","plyr.polyfilled.js"],"names":["isObject","require$$0","document","require$$1","require$$2","anObject","toPrimitive","IE8_DOM_DEFINE","dP","createDesc","has","hide","global","aFunction","core","ctx","redefine","uid","toInteger","toLength","cof","IObject","defined","min","toIObject","toAbsoluteIndex","$keys","toObject","DESCRIPTORS","toIndex","$typed","anInstance","arrayFill","redefineAll","fails","LIBRARY","setToStringTag","SPECIES","buffer","VIEW","$export","speciesConstructor","TAG","Iterators","enumBugKeys","getKeys","IE_PROTO","PROTOTYPE","dPs","ITERATOR","classof","isArray","asc","ArrayProto","create","descriptor","$iterCreate","getPrototypeOf","step","addToUnscopables","pIE","require$$3","require$$4","require$$5","require$$6","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","require$$22","require$$23","require$$24","require$$25","require$$26","require$$27","require$$28","require$$29","require$$30","require$$31","require$$32","require$$33","require$$34","require$$35","require$$36","require$$37","require$$38","getIterFn","isArrayIter","call","forOf","validate","$iterDefine","setSpecies","meta","$iterDetect","inheritIfRequired","strong","gOPS","createArrayMethod","id","$has","weak","assign","invoke","bind","gOPD","getProto","Reflect","gOPN","setProto","cel","html","process","Promise","newPromiseCapability","TypeError","isNode","newPromiseCapabilityModule","perform","promiseResolve","wksExt","toString","$GOPD","$DP","gOPNExt","wks","shared","ObjectProto","USE_NATIVE","$fails","_create","enumKeys","wksDefine","$getOwnPropertyDescriptor","$getPrototypeOf","isRegExp","MATCH","context","$defineProperty","createProperty","$find","KEY","forced","floor","isInteger","log1p","sign","$expm1","abs","exp","expm1","isEnum","ownKeys","repeat","navigator","userAgent","$pad","wrap","$task","i","NAME","$iterators","this","CustomEvent","define","Storage","player","enabled","config","storage","key","supported","store","window","localStorage","getItem","utils","is","empty","json","JSON","parse","string","length","object","get","extend","setItem","stringify","test","removeItem","e","providers","types","input","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","instanceof","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","kind","array","nodeList","keys","constructor","documentMode","documentElement","style","platform","url","responseType","resolve","reject","request","XMLHttpRequest","addEventListener","responseText","response","Error","statusText","open","send","prefix","hasId","isCached","exists","querySelectorAll","injectSprite","data","innerHTML","body","insertBefore","childNodes","useStorage","container","createElement","toggleHidden","setAttribute","cached","content","fetch","then","result","catch","Math","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","entries","value","sel","existingAttributes","existing","split","selector","s","trim","className","replace","stripped","parts","start","charAt","class","hidden","boolean","hasAttribute","removeAttribute","toggle","contains","classList","prototype","match","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelector","focused","activeElement","focusable","getElements","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","support","passiveListeners","bubbles","detail","dispatchEvent","toggleState","pressed","getAttribute","state","args","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","source","shift","filter","item","indexOf","reduce","prev","curr","youtube","vimeo","regex","$2","parser","href","search","startsWith","parseUrl","hashes","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","getRatio","w","h","ratio","transitionEndEvent","undefined","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","defineProperty","removeEventListener","range","matchMedia","html5","getSources","sizes","dedupe","mime","currentTime","playing","src","load","play","blankVideo","debug","log","i18n","seekTime","title","controls","URL","iconUrl","location","cors","host","isIE","svg4everybody","getElement","selectors","buttons","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","duration","seekTooltip","classNames","tooltip","error","warn","toggleNativeControls","namespace","getIconUrl","iconPath","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","badge","menu","buttonType","button","toCamelCase","label","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","push","updateRangeFill","suffix","list","checked","radio","faux","insertAdjacentHTML","forceHours","setRange","muted","setProgress","getElementsByTagName","nodeValue","getPercentage","buffered","isWebkit","setProperty","tooltips","percent","clientRect","getBoundingClientRect","visible","toggleClass","touch","pageX","left","hasClass","parseFloat","updateTimeDisplay","invert","invertTime","seeking","updateProgress","hasDuration","displayDuration","paused","updateSeekTooltip","setting","tabs","panes","quality","toggleTab","checkMenu","emptyElement","getBadge","createBadge","sort","a","b","sorting","getLabel","createMenuItem","updateSetting","pane","active","some","lang","language","default","getTracks","tracks","track","unshift","speed","isVimeo","values","tab","form","show","isMenuItem","isButton","stopPropagation","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","update","findElements","repaint","labels","stored","isYouTube","textTracks","setCaptionsMenu","insertAfter","hostname","protocol","createObjectURL","blob","setLanguage","setCue","mode","currentTrack","getCurrentTrack","activeCues","embed","enableTextTrack","cue","setText","getCueAsHTML","caption","noop","Console","console","defaults","userLanguage","onChange","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","fallback","Fullscreen","property","native","iosNative","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","exitFullscreen","action","enter","exit","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","pre","uiSupported","listeners","inject","setup","loop","updateVolume","timeUpdate","checkPlaying","isTouch","ready","setTitle","setPoster","isEmbed","iframe","poster","posters","backgroundImage","p","stopped","toggleControls","loading","timers","setTimeout","failed","networkState","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","keyboard","tabFocus","hideControls","durationUpdate","hasAudio","resetOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","set","concat","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","showHomeTab","showTab","toggleInvert","hover","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","setAspectRatio","Vimeo","loadScript","urls","sdk","padding","paddingBottom","offset","transform","autoplay","buildUrlParams","parseVimeoId","embedContainer","replaceElement","thumbnail_large","pathname","Player","autopause","disableTextTrack","stop","setCurrentTime","selected","setPlaybackRate","setVolume","setLoop","currentSrc","getVideoUrl","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","cues","stripHTML","frame","seconds","build","mapQualityUnit","mapQualityUnits","levels","level","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","google","items","snippet","currentId","parseYouTubeId","generateId","message","instance","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","seekTo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","buffering","setInterval","getVideoLoadedFraction","lastBuffered","getAvailableQualityLevels","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","handlers","handler","apply","Date","now","base","insertElement","attribute","cancelRequests","check","crossorigin","addStyleHook","insertElements","Plyr","jQuery","plyr","original","tagName","getProviderByUrl","getUrlParams","truthy","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","showEvents","delayEvents","noTransition","toggled","soft","done","clear","unload","targetTime","end","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","inline","webkitPresentationMode","t"],"mappings":"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","file":"plyr.polyfilled.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","module.exports = false;\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\nimport Storage from './storage';\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, NodeList);\n },\n element(input) {\n return this.instanceof(input, Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, Event);\n },\n cue(input) {\n return this.instanceof(input, TextTrackCue) || this.instanceof(input, VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n const useStorage = Storage.supported;\n\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (useStorage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (useStorage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove element(s)\n removeElement(element) {\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: this,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Format string\n format(input, ...args) {\n if (utils.is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => utils.is.string(args[i]) ? args[i] : '');\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Restore time\n player.currentTime = currentTime;\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\n });\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n\n\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const attributes = utils.getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = utils.createElement('div', utils.extend(attributes, {\n class: `plyr__time ${attributes.class}`,\n 'aria-label': i18n.get(type, this.config),\n }), '00:00');\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, forceHours, inverted);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n controls.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n controls.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n setProgress(this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n controls.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n controls.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n controls.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n utils.toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 2160:\n label = '4K';\n break;\n\n case 1440:\n case 1080:\n case 720:\n label = 'HD';\n break;\n\n case 576:\n case 480:\n label = 'SD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n const label = controls.getLabel.call(this, 'quality', quality);\n controls.createMenuItem.call(this, quality, list, type, label, getBadge(quality));\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}&times;`;\n\n case 'quality':\n if (utils.is.number(value)) {\n return `${value}p`;\n }\n\n return utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n if (this.captions.active) {\n if (this.options.captions.length > 2 || !this.options.captions.some(lang => lang === 'enabled')) {\n value = this.captions.language;\n } else {\n value = 'enabled';\n }\n } else {\n value = '';\n }\n\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const toggle = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: !utils.is.empty(track.language) ? track.language : 'enabled',\n label: captions.getLabel.call(this, track),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label,\n track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null,\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n // Store reference\n this.options.captions = tracks.map(track => track.language);\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => {\n const label = controls.getLabel.call(this, 'speed', speed);\n controls.createMenuItem.call(this, speed, list, type, label);\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.hasAttribute('hidden');\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n utils.toggleHidden(form, !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n utils.toggleHidden(current, true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n utils.toggleHidden(pane, false);\n\n const tabs = utils.getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.cors) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([\n key,\n value,\n ]) => {\n result = utils.replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (utils.is.string(this.config.controls)) {\n container = replace(container);\n } else if (utils.is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n const tracks = captions.getTracks.call(this);\n\n if (!tracks.length) {\n return null;\n }\n\n // Get track based on current language\n let track = tracks.find(track => track.language.toLowerCase() === this.language);\n\n // Get the <track> with default attribute\n if (!track) {\n track = utils.getElement.call(this, 'track[default]');\n }\n\n // Get the first track\n if (!track) {\n [track] = tracks;\n }\n\n return track;\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Reset to start when playback ended\n resetOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.3.7/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: (navigator.language || navigator.userLanguage).split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime}s',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime}s',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/v2/video/{0}.json',\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api: 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n poster: 'https://img.youtube.com/vi/{0}/maxresdefault.jpg,https://img.youtube.com/vi/{0}/hqdefault.jpg',\n },\n googleIMA: {\n sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n ads: 'plyr__ads',\n control: 'plyr__control',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.property = Fullscreen.property;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (utils.is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n controls.updateVolume.call(this);\n\n // Reset time display\n controls.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Set the poster image\n ui.setPoster.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n\n // Set the poster image\n setPoster() {\n if (!utils.is.element(this.elements.poster) || utils.is.empty(this.poster)) {\n return;\n }\n\n // Set the inline style\n const posters = this.poster.split(',');\n this.elements.poster.style.backgroundImage = posters.map(p => `url('${p}')`).join(',');\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Only update controls on non timeupdate events\n if (utils.is.event(event) && event.type === 'timeupdate') {\n return;\n }\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.player.toggleControls(event);\n });\n }\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking', event => controls.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadeddata loadedmetadata', event => controls.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing', event => controls.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => controls.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied timeupdate', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // Check if media failed to load\n // utils.on(this.player.media, 'play', event => ui.checkFailed.call(this.player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n showHomeTab();\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n this.player.currentTime = event.target.value / event.target.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n this.player.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n // muted: player.muted,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = utils.format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div', { class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Get poster image\n utils.fetch(utils.format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (utils.is.empty(response)) {\n return;\n }\n\n // Get the URL for thumbnail\n const url = new URL(response[0].thumbnail_large);\n\n // Get original image\n url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n // Set attribute\n player.media.setAttribute('poster', url.href);\n\n // Update\n ui.setPoster.call(player);\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe, {\n autopause: player.config.autopause,\n muted: player.muted,\n });\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time).catch(() => {\n // Do nothing\n });\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = utils.format(this.config.urls.youtube.api, videoId, key);\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Set poster image\n player.media.setAttribute('poster', utils.format(player.config.urls.youtube.poster, videoId));\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport utils from './utils';\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = utils.createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n html5.extend.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport i18n from '../i18n';\nimport utils from '../utils';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n get enabled() {\n return this.player.isVideo && this.player.config.ads.enabled && !utils.is.empty(this.publisherId);\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.sdk)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n // Mute based on current state\n request.setAdWillPlayMuted(!this.player.muted);\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!utils.is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (utils.is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport { providers } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if (!utils.is.empty(input.poster)) {\n this.poster = input.poster;\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.3.7\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport Console from './console';\nimport controls from './controls';\nimport defaults from './defaults';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport { providers, types } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n captions: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n const clone = this.media.cloneNode(true);\n clone.autoplay = false;\n this.elements.original = clone;\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(params.playsinline);\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended);\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get stopped state\n */\n get stopped() {\n return Boolean(this.paused && this.currentTime === 0);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (utils.is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // True duration\n const realDuration = this.media ? Number(this.media.duration) : 0;\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality) || quality === 0) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isVideo) {\n this.debug.warn('Poster can only be set for video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n ui.setPoster.call(this);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n this.toggleCaptions(false);\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // Check for support\n if (!this.options.captions.includes(language)) {\n this.debug.warn(`Unsupported language option: ${language}`);\n return;\n }\n\n // Ensure captions are enabled\n this.toggleCaptions(true);\n\n // Enabled only\n if (language === 'enabled') {\n return;\n }\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Events that show the controls\n const showEvents = [\n 'touchstart',\n 'touchmove',\n 'mouseenter',\n 'mousemove',\n 'focusin',\n ];\n\n // Events that delay hiding\n const delayEvents = [\n 'touchmove',\n 'touchend',\n 'mousemove',\n ];\n\n // Whether to show controls\n show = showEvents.includes(toggle.type);\n\n // Delay hiding on move events\n if (delayEvents.includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (!this.touch && toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (this.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Set hideControls class\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, this.config.hideControls);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (utils.is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (utils.is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (utils.is.array(selector)) {\n targets = selector.filter(i => utils.is.element(i));\n }\n\n if (utils.is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nexport default Plyr;\n","// ==========================================================================\n// Plyr Polyfilled Build\n// plyr.js v3.3.7\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport 'babel-polyfill';\nimport 'custom-event-polyfill';\nimport Plyr from './plyr';\n\nexport default Plyr;\n"]} \ No newline at end of file
+{"version":3,"sources":["../../node_modules/core-js/modules/_global.js","../../node_modules/core-js/modules/_core.js","../../node_modules/core-js/modules/_is-object.js","../../node_modules/core-js/modules/_an-object.js","../../node_modules/core-js/modules/_fails.js","../../node_modules/core-js/modules/_descriptors.js","../../node_modules/core-js/modules/_dom-create.js","../../node_modules/core-js/modules/_ie8-dom-define.js","../../node_modules/core-js/modules/_to-primitive.js","../../node_modules/core-js/modules/_object-dp.js","../../node_modules/core-js/modules/_property-desc.js","../../node_modules/core-js/modules/_hide.js","../../node_modules/core-js/modules/_has.js","../../node_modules/core-js/modules/_uid.js","../../node_modules/core-js/modules/_redefine.js","../../node_modules/core-js/modules/_a-function.js","../../node_modules/core-js/modules/_ctx.js","../../node_modules/core-js/modules/_export.js","../../node_modules/core-js/modules/_typed.js","../../node_modules/core-js/modules/_library.js","../../node_modules/core-js/modules/_redefine-all.js","../../node_modules/core-js/modules/_an-instance.js","../../node_modules/core-js/modules/_to-integer.js","../../node_modules/core-js/modules/_to-length.js","../../node_modules/core-js/modules/_to-index.js","../../node_modules/core-js/modules/_cof.js","../../node_modules/core-js/modules/_iobject.js","../../node_modules/core-js/modules/_defined.js","../../node_modules/core-js/modules/_to-iobject.js","../../node_modules/core-js/modules/_to-absolute-index.js","../../node_modules/core-js/modules/_array-includes.js","../../node_modules/core-js/modules/_shared.js","../../node_modules/core-js/modules/_shared-key.js","../../node_modules/core-js/modules/_object-keys-internal.js","../../node_modules/core-js/modules/_enum-bug-keys.js","../../node_modules/core-js/modules/_object-gopn.js","../../node_modules/core-js/modules/_to-object.js","../../node_modules/core-js/modules/_array-fill.js","../../node_modules/core-js/modules/_wks.js","../../node_modules/core-js/modules/_set-to-string-tag.js","../../node_modules/core-js/modules/_typed-buffer.js","../../node_modules/core-js/modules/_species-constructor.js","../../node_modules/core-js/modules/_set-species.js","../../node_modules/core-js/modules/es6.typed.array-buffer.js","../../node_modules/core-js/modules/_classof.js","../../node_modules/core-js/modules/_iterators.js","../../node_modules/core-js/modules/_is-array-iter.js","../../node_modules/core-js/modules/_object-keys.js","../../node_modules/core-js/modules/_object-dps.js","../../node_modules/core-js/modules/_html.js","../../node_modules/core-js/modules/_object-create.js","../../node_modules/core-js/modules/_object-gpo.js","../../node_modules/core-js/modules/core.get-iterator-method.js","../../node_modules/core-js/modules/_is-array.js","../../node_modules/core-js/modules/_array-species-constructor.js","../../node_modules/core-js/modules/_array-species-create.js","../../node_modules/core-js/modules/_array-methods.js","../../node_modules/core-js/modules/_add-to-unscopables.js","../../node_modules/core-js/modules/_iter-step.js","../../node_modules/core-js/modules/_iter-create.js","../../node_modules/core-js/modules/_iter-define.js","../../node_modules/core-js/modules/es6.array.iterator.js","../../node_modules/core-js/modules/_iter-detect.js","../../node_modules/core-js/modules/_array-copy-within.js","../../node_modules/core-js/modules/_object-pie.js","../../node_modules/core-js/modules/_object-gopd.js","../../node_modules/core-js/modules/_typed-array.js","../../node_modules/core-js/modules/es6.typed.int8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","../../node_modules/core-js/modules/es6.typed.int16-array.js","../../node_modules/core-js/modules/es6.typed.uint16-array.js","../../node_modules/core-js/modules/es6.typed.int32-array.js","../../node_modules/core-js/modules/es6.typed.uint32-array.js","../../node_modules/core-js/modules/es6.typed.float32-array.js","../../node_modules/core-js/modules/es6.typed.float64-array.js","../../node_modules/core-js/modules/_iter-call.js","../../node_modules/core-js/modules/_for-of.js","../../node_modules/core-js/modules/_meta.js","../../node_modules/core-js/modules/_validate-collection.js","../../node_modules/core-js/modules/_collection-strong.js","../../node_modules/core-js/modules/_set-proto.js","../../node_modules/core-js/modules/_inherit-if-required.js","../../node_modules/core-js/modules/_collection.js","../../node_modules/core-js/modules/es6.map.js","../../node_modules/core-js/modules/es6.set.js","../../node_modules/core-js/modules/_object-gops.js","../../node_modules/core-js/modules/_object-assign.js","../../node_modules/core-js/modules/_collection-weak.js","../../node_modules/core-js/modules/es6.weak-map.js","../../node_modules/core-js/modules/es6.weak-set.js","../../node_modules/core-js/modules/es6.reflect.apply.js","../../node_modules/core-js/modules/_invoke.js","../../node_modules/core-js/modules/_bind.js","../../node_modules/core-js/modules/es6.reflect.construct.js","../../node_modules/core-js/modules/es6.reflect.define-property.js","../../node_modules/core-js/modules/es6.reflect.delete-property.js","../../node_modules/core-js/modules/es6.reflect.get.js","../../node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.reflect.get-prototype-of.js","../../node_modules/core-js/modules/es6.reflect.has.js","../../node_modules/core-js/modules/es6.reflect.is-extensible.js","../../node_modules/core-js/modules/_own-keys.js","../../node_modules/core-js/modules/es6.reflect.own-keys.js","../../node_modules/core-js/modules/es6.reflect.prevent-extensions.js","../../node_modules/core-js/modules/es6.reflect.set.js","../../node_modules/core-js/modules/es6.reflect.set-prototype-of.js","../../node_modules/core-js/modules/_task.js","../../node_modules/core-js/modules/_microtask.js","../../node_modules/core-js/modules/_new-promise-capability.js","../../node_modules/core-js/modules/_perform.js","../../node_modules/core-js/modules/_user-agent.js","../../node_modules/core-js/modules/_promise-resolve.js","../../node_modules/core-js/modules/es6.promise.js","../../node_modules/core-js/modules/_wks-ext.js","../../node_modules/core-js/modules/_wks-define.js","../../node_modules/core-js/modules/_enum-keys.js","../../node_modules/core-js/modules/_object-gopn-ext.js","../../node_modules/core-js/modules/es6.symbol.js","../../node_modules/core-js/modules/_object-sap.js","../../node_modules/core-js/modules/es6.object.freeze.js","../../node_modules/core-js/modules/es6.object.seal.js","../../node_modules/core-js/modules/es6.object.prevent-extensions.js","../../node_modules/core-js/modules/es6.object.is-frozen.js","../../node_modules/core-js/modules/es6.object.is-sealed.js","../../node_modules/core-js/modules/es6.object.is-extensible.js","../../node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.object.get-prototype-of.js","../../node_modules/core-js/modules/es6.object.keys.js","../../node_modules/core-js/modules/es6.object.get-own-property-names.js","../../node_modules/core-js/modules/es6.object.assign.js","../../node_modules/core-js/modules/_same-value.js","../../node_modules/core-js/modules/es6.object.is.js","../../node_modules/core-js/modules/es6.function.name.js","../../node_modules/core-js/modules/es6.string.raw.js","../../node_modules/core-js/modules/es6.string.from-code-point.js","../../node_modules/core-js/modules/_string-at.js","../../node_modules/core-js/modules/es6.string.code-point-at.js","../../node_modules/core-js/modules/_string-repeat.js","../../node_modules/core-js/modules/es6.string.repeat.js","../../node_modules/core-js/modules/_is-regexp.js","../../node_modules/core-js/modules/_string-context.js","../../node_modules/core-js/modules/_fails-is-regexp.js","../../node_modules/core-js/modules/es6.string.starts-with.js","../../node_modules/core-js/modules/es6.string.ends-with.js","../../node_modules/core-js/modules/es6.string.includes.js","../../node_modules/core-js/modules/_flags.js","../../node_modules/core-js/modules/es6.regexp.flags.js","../../node_modules/core-js/modules/_fix-re-wks.js","../../node_modules/core-js/modules/es6.regexp.match.js","../../node_modules/core-js/modules/es6.regexp.replace.js","../../node_modules/core-js/modules/es6.regexp.split.js","../../node_modules/core-js/modules/es6.regexp.search.js","../../node_modules/core-js/modules/_create-property.js","../../node_modules/core-js/modules/es6.array.from.js","../../node_modules/core-js/modules/es6.array.of.js","../../node_modules/core-js/modules/es6.array.copy-within.js","../../node_modules/core-js/modules/es6.array.find.js","../../node_modules/core-js/modules/es6.array.find-index.js","../../node_modules/core-js/modules/es6.array.fill.js","../../node_modules/core-js/modules/es6.number.is-finite.js","../../node_modules/core-js/modules/_is-integer.js","../../node_modules/core-js/modules/es6.number.is-integer.js","../../node_modules/core-js/modules/es6.number.is-safe-integer.js","../../node_modules/core-js/modules/es6.number.is-nan.js","../../node_modules/core-js/modules/es6.number.epsilon.js","../../node_modules/core-js/modules/es6.number.min-safe-integer.js","../../node_modules/core-js/modules/es6.number.max-safe-integer.js","../../node_modules/core-js/modules/_math-log1p.js","../../node_modules/core-js/modules/es6.math.acosh.js","../../node_modules/core-js/modules/es6.math.asinh.js","../../node_modules/core-js/modules/es6.math.atanh.js","../../node_modules/core-js/modules/_math-sign.js","../../node_modules/core-js/modules/es6.math.cbrt.js","../../node_modules/core-js/modules/es6.math.clz32.js","../../node_modules/core-js/modules/es6.math.cosh.js","../../node_modules/core-js/modules/_math-expm1.js","../../node_modules/core-js/modules/es6.math.expm1.js","../../node_modules/core-js/modules/_math-fround.js","../../node_modules/core-js/modules/es6.math.fround.js","../../node_modules/core-js/modules/es6.math.hypot.js","../../node_modules/core-js/modules/es6.math.imul.js","../../node_modules/core-js/modules/es6.math.log1p.js","../../node_modules/core-js/modules/es6.math.log10.js","../../node_modules/core-js/modules/es6.math.log2.js","../../node_modules/core-js/modules/es6.math.sign.js","../../node_modules/core-js/modules/es6.math.sinh.js","../../node_modules/core-js/modules/es6.math.tanh.js","../../node_modules/core-js/modules/es6.math.trunc.js","../../node_modules/core-js/modules/es7.array.includes.js","../../node_modules/core-js/modules/_object-to-array.js","../../node_modules/core-js/modules/es7.object.values.js","../../node_modules/core-js/modules/es7.object.entries.js","../../node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","../../node_modules/core-js/modules/_string-pad.js","../../node_modules/core-js/modules/es7.string.pad-start.js","../../node_modules/core-js/modules/es7.string.pad-end.js","../../node_modules/core-js/modules/web.timers.js","../../node_modules/core-js/modules/web.immediate.js","../../node_modules/core-js/modules/web.dom.iterable.js","../../node_modules/regenerator-runtime/runtime.js","../../node_modules/custom-event-polyfill/custom-event-polyfill.js","../../node_modules/url-polyfill/url-polyfill.js","../../node_modules/loadjs/dist/loadjs.umd.js","storage.js","types.js","utils.js","support.js","html5.js","i18n.js","controls.js","captions.js","console.js","defaults.js","fullscreen.js","ui.js","listeners.js","plugins/vimeo.js","plugins/youtube.js","media.js","plugins/ads.js","source.js","plyr.js","plyr.polyfilled.js"],"names":["isObject","require$$0","document","require$$1","require$$2","anObject","toPrimitive","IE8_DOM_DEFINE","dP","createDesc","has","hide","global","aFunction","core","ctx","redefine","uid","toInteger","toLength","cof","IObject","defined","min","toIObject","toAbsoluteIndex","$keys","toObject","DESCRIPTORS","toIndex","$typed","anInstance","arrayFill","redefineAll","fails","LIBRARY","setToStringTag","SPECIES","buffer","VIEW","$export","speciesConstructor","TAG","Iterators","enumBugKeys","getKeys","IE_PROTO","PROTOTYPE","dPs","ITERATOR","classof","isArray","asc","ArrayProto","create","descriptor","$iterCreate","getPrototypeOf","step","addToUnscopables","pIE","require$$3","require$$4","require$$5","require$$6","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","require$$22","require$$23","require$$24","require$$25","require$$26","require$$27","require$$28","require$$29","require$$30","require$$31","require$$32","require$$33","require$$34","require$$35","require$$36","require$$37","require$$38","getIterFn","isArrayIter","call","forOf","validate","$iterDefine","setSpecies","meta","$iterDetect","inheritIfRequired","strong","gOPS","createArrayMethod","id","$has","weak","assign","invoke","bind","gOPD","getProto","Reflect","gOPN","setProto","cel","html","process","Promise","navigator","newPromiseCapability","TypeError","isNode","newPromiseCapabilityModule","userAgent","perform","promiseResolve","wksExt","toString","$GOPD","$DP","gOPNExt","wks","shared","ObjectProto","USE_NATIVE","$fails","_create","enumKeys","wksDefine","$getOwnPropertyDescriptor","$getPrototypeOf","isRegExp","MATCH","context","$defineProperty","createProperty","$find","KEY","forced","floor","isInteger","log1p","sign","$expm1","abs","exp","expm1","isEnum","ownKeys","repeat","$pad","wrap","$task","i","NAME","$iterators","this","CustomEvent","define","Storage","player","enabled","config","storage","key","supported","store","window","localStorage","getItem","utils","is","empty","json","JSON","parse","string","length","object","get","extend","setItem","stringify","test","removeItem","e","providers","types","input","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","instanceof","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","kind","array","nodeList","keys","constructor","documentMode","documentElement","style","platform","url","responseType","resolve","reject","request","XMLHttpRequest","addEventListener","responseText","response","Error","statusText","open","send","src","minWidth","image","Image","handler","onload","onerror","naturalWidth","prefix","hasId","isCached","exists","querySelectorAll","injectSprite","data","innerHTML","body","insertBefore","childNodes","useStorage","container","createElement","toggleHidden","setAttribute","cached","content","fetch","then","result","catch","Math","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","innerText","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","entries","value","sel","existingAttributes","existing","split","selector","s","trim","className","replace","stripped","parts","start","charAt","class","hidden","boolean","hasAttribute","removeAttribute","force","method","classList","contains","prototype","match","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelector","focused","activeElement","toggle","focusable","getElements","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","support","passiveListeners","bubbles","detail","dispatchEvent","toggleState","pressed","getAttribute","state","args","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","source","shift","filter","item","indexOf","reduce","prev","curr","youtube","vimeo","regex","$2","parser","href","search","startsWith","parseUrl","hashes","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","width","height","getRatio","w","h","ratio","transitionEndEvent","undefined","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","defineProperty","removeEventListener","range","matchMedia","html5","getSources","sizes","dedupe","mime","currentTime","playing","load","play","blankVideo","debug","log","i18n","seekTime","title","controls","URL","iconUrl","location","cors","host","isIE","svg4everybody","getElement","selectors","buttons","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","duration","seekTooltip","classNames","tooltip","error","warn","toggleNativeControls","namespace","getIconUrl","iconPath","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","badge","menu","buttonType","button","toCamelCase","label","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","push","updateRangeFill","suffix","list","checked","radio","faux","insertAdjacentHTML","forceHours","setRange","muted","setProgress","getElementsByTagName","nodeValue","getPercentage","buffered","isWebkit","setProperty","tooltips","percent","clientRect","getBoundingClientRect","visible","toggleClass","touch","pageX","left","hasClass","parseFloat","updateTimeDisplay","invert","invertTime","seeking","updateProgress","hasDuration","displayDuration","paused","updateSeekTooltip","setting","tabs","panes","quality","toggleTab","checkMenu","emptyElement","getBadge","createBadge","sort","a","b","sorting","getLabel","createMenuItem","updateSetting","pane","active","some","lang","language","default","getTracks","tracks","track","unshift","speed","isVimeo","values","tab","form","show","isMenuItem","isButton","stopPropagation","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","update","findElements","repaint","labels","stored","isYouTube","textTracks","setCaptionsMenu","insertAfter","hostname","protocol","createObjectURL","blob","setLanguage","setCue","mode","currentTrack","getCurrentTrack","activeCues","embed","enableTextTrack","cue","setText","getCueAsHTML","caption","noop","Console","console","defaults","userLanguage","onChange","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","fallback","Fullscreen","property","native","iosNative","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","exitFullscreen","action","enter","exit","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","pre","uiSupported","listeners","inject","setup","loop","updateVolume","timeUpdate","checkPlaying","isTouch","ready","setTitle","poster","backgroundImage","setPoster","isEmbed","iframe","enable","posterEnabled","loadPromise","loadImage","togglePoster","stopped","toggleControls","loading","timers","setTimeout","hideControls","hover","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","keyboard","tabFocus","delay","durationUpdate","hasAudio","resetOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","set","concat","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","showHomeTab","showTab","currentTarget","done","seekTo","toggleInvert","noTransition","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","assurePlaybackState","setAspectRatio","Vimeo","loadScript","urls","sdk","padding","paddingBottom","offset","transform","autoplay","buildUrlParams","parseVimeoId","embedContainer","replaceElement","thumbnail_large","pathname","Player","autopause","disableTextTrack","stop","setVolume","setCurrentTime","selected","setPlaybackRate","setLoop","currentSrc","getVideoUrl","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","cues","stripHTML","frame","seconds","build","mapQualityUnit","mapQualityUnits","levels","level","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","google","items","snippet","currentId","parseYouTubeId","generateId","posterSrc","backgroundSize","message","instance","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","buffering","setInterval","getVideoLoadedFraction","lastBuffered","seeked","getAvailableQualityLevels","unMute","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","handlers","apply","Date","now","base","insertElement","attribute","cancelRequests","check","crossorigin","addStyleHook","insertElements","Plyr","failed","jQuery","plyr","original","tagName","getProviderByUrl","getUrlParams","truthy","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","clear","unload","targetTime","end","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","inline","webkitPresentationMode","t","cloneDeep"],"mappings":";;;;;;;;;;;;;;AACA,IAAI,MAAM,GAAG,cAAc,GAAG,OAAO,MAAM,IAAI,WAAW,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI;IAC7E,MAAM,GAAG,OAAO,IAAI,IAAI,WAAW,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI;;IAE/D,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;AAC9B,IAAI,OAAO,GAAG,IAAI,QAAQ,EAAE,GAAG,GAAG,MAAM,CAAC;;;;ACLzC,IAAI,IAAI,GAAG,cAAc,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACjD,IAAI,OAAO,GAAG,IAAI,QAAQ,EAAE,GAAG,GAAG,IAAI,CAAC;;;;ACDvC,aAAc,GAAG,UAAU,EAAE,EAAE;EAC7B,OAAO,OAAO,EAAE,KAAK,QAAQ,GAAG,EAAE,KAAK,IAAI,GAAG,OAAO,EAAE,KAAK,UAAU,CAAC;CACxE,CAAC;;ACDF,aAAc,GAAG,UAAU,EAAE,EAAE;EAC7B,IAAI,CAACA,SAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,SAAS,CAAC,EAAE,GAAG,oBAAoB,CAAC,CAAC;EAC9D,OAAO,EAAE,CAAC;CACX,CAAC;;ACJF,UAAc,GAAG,UAAU,IAAI,EAAE;EAC/B,IAAI;IACF,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;GACjB,CAAC,OAAO,CAAC,EAAE;IACV,OAAO,IAAI,CAAC;GACb;CACF,CAAC;;ACNF;AACA,gBAAc,GAAG,CAACC,MAAmB,CAAC,YAAY;EAChD,OAAO,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;CAClF,CAAC,CAAC;;ACFH,IAAIC,UAAQ,GAAGD,OAAoB,CAAC,QAAQ,CAAC;;AAE7C,IAAI,EAAE,GAAGD,SAAQ,CAACE,UAAQ,CAAC,IAAIF,SAAQ,CAACE,UAAQ,CAAC,aAAa,CAAC,CAAC;AAChE,cAAc,GAAG,UAAU,EAAE,EAAE;EAC7B,OAAO,EAAE,GAAGA,UAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;CAC7C,CAAC;;ACNF,iBAAc,GAAG,CAACD,YAAyB,IAAI,CAACE,MAAmB,CAAC,YAAY;EAC9E,OAAO,MAAM,CAAC,cAAc,CAACC,UAAwB,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;CAC/G,CAAC,CAAC;;ACFH;;;;AAIA,gBAAc,GAAG,UAAU,EAAE,EAAE,CAAC,EAAE;EAChC,IAAI,CAACJ,SAAQ,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;EAC7B,IAAI,EAAE,EAAE,GAAG,CAAC;EACZ,IAAI,CAAC,IAAI,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,UAAU,IAAI,CAACA,SAAQ,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC;EAC7F,IAAI,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,UAAU,IAAI,CAACA,SAAQ,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC;EACvF,IAAI,CAAC,CAAC,IAAI,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,UAAU,IAAI,CAACA,SAAQ,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC;EAC9F,MAAM,SAAS,CAAC,yCAAyC,CAAC,CAAC;CAC5D,CAAC;;ACRF,IAAI,EAAE,GAAG,MAAM,CAAC,cAAc,CAAC;;AAE/B,KAAS,GAAGC,YAAyB,GAAG,MAAM,CAAC,cAAc,GAAG,SAAS,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE;EACxGI,SAAQ,CAAC,CAAC,CAAC,CAAC;EACZ,CAAC,GAAGC,YAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;EACzBD,SAAQ,CAAC,UAAU,CAAC,CAAC;EACrB,IAAIE,aAAc,EAAE,IAAI;IACtB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;GAC7B,CAAC,OAAO,CAAC,EAAE,eAAe;EAC3B,IAAI,KAAK,IAAI,UAAU,IAAI,KAAK,IAAI,UAAU,EAAE,MAAM,SAAS,CAAC,0BAA0B,CAAC,CAAC;EAC5F,IAAI,OAAO,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC;EACnD,OAAO,CAAC,CAAC;CACV,CAAC;;;;;;ACfF,iBAAc,GAAG,UAAU,MAAM,EAAE,KAAK,EAAE;EACxC,OAAO;IACL,UAAU,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;IACzB,YAAY,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;IAC3B,QAAQ,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;IACvB,KAAK,EAAE,KAAK;GACb,CAAC;CACH,CAAC;;ACLF,SAAc,GAAGN,YAAyB,GAAG,UAAU,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE;EACzE,OAAOO,SAAE,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,EAAEC,aAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;CAChD,GAAG,UAAU,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE;EAChC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;EACpB,OAAO,MAAM,CAAC;CACf,CAAC;;ACPF,IAAI,cAAc,GAAG,EAAE,CAAC,cAAc,CAAC;AACvC,QAAc,GAAG,UAAU,EAAE,EAAE,GAAG,EAAE;EAClC,OAAO,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;CACrC,CAAC;;ACHF,IAAI,EAAE,GAAG,CAAC,CAAC;AACX,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AACvB,QAAc,GAAG,UAAU,GAAG,EAAE;EAC9B,OAAO,SAAS,CAAC,MAAM,CAAC,GAAG,KAAK,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;CACvF,CAAC;;;ACDF,IAAI,GAAG,GAAGR,IAAiB,CAAC,KAAK,CAAC,CAAC;AACnC,IAAI,SAAS,GAAG,UAAU,CAAC;AAC3B,IAAI,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;AACpC,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;;AAE5CE,KAAkB,CAAC,aAAa,GAAG,UAAU,EAAE,EAAE;EAC/C,OAAO,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;CAC3B,CAAC;;AAEF,CAAC,cAAc,GAAG,UAAU,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;EAC7C,IAAI,UAAU,GAAG,OAAO,GAAG,IAAI,UAAU,CAAC;EAC1C,IAAI,UAAU,EAAEO,IAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAIC,KAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;EAC3D,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,OAAO;EAC3B,IAAI,UAAU,EAAED,IAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAIC,KAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAC9F,IAAI,CAAC,KAAKC,OAAM,EAAE;IAChB,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;GACd,MAAM,IAAI,CAAC,IAAI,EAAE;IAChB,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;IACdD,KAAI,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;GACnB,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE;IACjB,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;GACd,MAAM;IACLA,KAAI,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;GACnB;;CAEF,EAAE,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,QAAQ,GAAG;EACpD,OAAO,OAAO,IAAI,IAAI,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;CACvE,CAAC,CAAC;;;AC9BH,cAAc,GAAG,UAAU,EAAE,EAAE;EAC7B,IAAI,OAAO,EAAE,IAAI,UAAU,EAAE,MAAM,SAAS,CAAC,EAAE,GAAG,qBAAqB,CAAC,CAAC;EACzE,OAAO,EAAE,CAAC;CACX,CAAC;;ACHF;;AAEA,QAAc,GAAG,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;EAC3CE,UAAS,CAAC,EAAE,CAAC,CAAC;EACd,IAAI,IAAI,KAAK,SAAS,EAAE,OAAO,EAAE,CAAC;EAClC,QAAQ,MAAM;IACZ,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,EAAE;MAC1B,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;KACzB,CAAC;IACF,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,EAAE,CAAC,EAAE;MAC7B,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KAC5B,CAAC;IACF,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;MAChC,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KAC/B,CAAC;GACH;EACD,OAAO,yBAAyB;IAC9B,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;GAClC,CAAC;CACH,CAAC;;ACdF,IAAI,SAAS,GAAG,WAAW,CAAC;;AAE5B,IAAI,OAAO,GAAG,UAAU,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE;EAC1C,IAAI,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;EACjC,IAAI,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;EACjC,IAAI,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;EACjC,IAAI,QAAQ,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;EAChC,IAAI,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;EAC/B,IAAI,MAAM,GAAG,SAAS,GAAGD,OAAM,GAAG,SAAS,GAAGA,OAAM,CAAC,IAAI,CAAC,KAAKA,OAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAACA,OAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;EACpH,IAAI,OAAO,GAAG,SAAS,GAAGE,KAAI,GAAGA,KAAI,CAAC,IAAI,CAAC,KAAKA,KAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;EACjE,IAAI,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;EAC/D,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;EACvB,IAAI,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;EAC7B,KAAK,GAAG,IAAI,MAAM,EAAE;;IAElB,GAAG,GAAG,CAAC,SAAS,IAAI,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;;IAExD,GAAG,GAAG,CAAC,GAAG,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC;;IAEnC,GAAG,GAAG,OAAO,IAAI,GAAG,GAAGC,IAAG,CAAC,GAAG,EAAEH,OAAM,CAAC,GAAG,QAAQ,IAAI,OAAO,GAAG,IAAI,UAAU,GAAGG,IAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;;IAE/G,IAAI,MAAM,EAAEC,SAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;;IAEzD,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,EAAEL,KAAI,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACjD,IAAI,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;GAC3D;CACF,CAAC;AACFC,OAAM,CAAC,IAAI,GAAGE,KAAI,CAAC;;AAEnB,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;AACd,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;AACd,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;AACd,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;AACd,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;AACf,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;AACf,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;AACf,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC;AAChB,WAAc,GAAG,OAAO,CAAC;;ACvCzB,IAAI,KAAK,GAAGG,IAAG,CAAC,aAAa,CAAC,CAAC;AAC/B,IAAI,IAAI,GAAGA,IAAG,CAAC,MAAM,CAAC,CAAC;AACvB,IAAI,GAAG,GAAG,CAAC,EAAEL,OAAM,CAAC,WAAW,IAAIA,OAAM,CAAC,QAAQ,CAAC,CAAC;AACpD,IAAI,MAAM,GAAG,GAAG,CAAC;AACjB,IAAI,CAAC,GAAG,CAAC,CAAC;AACV,IAAI,CAAC,GAAG,CAAC,CAAC;AACV,IAAI,KAAK,CAAC;;AAEV,IAAI,sBAAsB,GAAG;EAC3B,gHAAgH;EAChH,KAAK,CAAC,GAAG,CAAC,CAAC;;AAEb,OAAO,CAAC,GAAG,CAAC,EAAE;EACZ,IAAI,KAAK,GAAGA,OAAM,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;IAC/CD,KAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACnCA,KAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;GACnC,MAAM,MAAM,GAAG,KAAK,CAAC;CACvB;;AAED,UAAc,GAAG;EACf,GAAG,EAAE,GAAG;EACR,MAAM,EAAE,MAAM;EACd,KAAK,EAAE,KAAK;EACZ,IAAI,EAAE,IAAI;CACX,CAAC;;AC3BF,YAAc,GAAG,KAAK,CAAC;;ACCvB,gBAAc,GAAG,UAAU,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE;EAC5C,KAAK,IAAI,GAAG,IAAI,GAAG,EAAEK,SAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;EAC3D,OAAO,MAAM,CAAC;CACf,CAAC;;ACJF,eAAc,GAAG,UAAU,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE;EAChE,IAAI,EAAE,EAAE,YAAY,WAAW,CAAC,KAAK,cAAc,KAAK,SAAS,IAAI,cAAc,IAAI,EAAE,CAAC,EAAE;IAC1F,MAAM,SAAS,CAAC,IAAI,GAAG,yBAAyB,CAAC,CAAC;GACnD,CAAC,OAAO,EAAE,CAAC;CACb,CAAC;;ACJF;AACA,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AACrB,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACvB,cAAc,GAAG,UAAU,EAAE,EAAE;EAC7B,OAAO,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC;CAC1D,CAAC;;ACLF;;AAEA,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACnB,aAAc,GAAG,UAAU,EAAE,EAAE;EAC7B,OAAO,EAAE,GAAG,CAAC,GAAG,GAAG,CAACE,UAAS,CAAC,EAAE,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC;CAC1D,CAAC;;ACLF;;;AAGA,YAAc,GAAG,UAAU,EAAE,EAAE;EAC7B,IAAI,EAAE,KAAK,SAAS,EAAE,OAAO,CAAC,CAAC;EAC/B,IAAI,MAAM,GAAGA,UAAS,CAAC,EAAE,CAAC,CAAC;EAC3B,IAAI,MAAM,GAAGC,SAAQ,CAAC,MAAM,CAAC,CAAC;EAC9B,IAAI,MAAM,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC,eAAe,CAAC,CAAC;EACzD,OAAO,MAAM,CAAC;CACf,CAAC;;ACTF,IAAI,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC;;AAE3B,QAAc,GAAG,UAAU,EAAE,EAAE;EAC7B,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;CACvC,CAAC;;ACJF;;;AAGA,YAAc,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,UAAU,EAAE,EAAE;EAC5E,OAAOC,IAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;CACxD,CAAC;;ACLF;AACA,YAAc,GAAG,UAAU,EAAE,EAAE;EAC7B,IAAI,EAAE,IAAI,SAAS,EAAE,MAAM,SAAS,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;EACpE,OAAO,EAAE,CAAC;CACX,CAAC;;ACJF;;;AAGA,cAAc,GAAG,UAAU,EAAE,EAAE;EAC7B,OAAOC,QAAO,CAACC,QAAO,CAAC,EAAE,CAAC,CAAC,CAAC;CAC7B,CAAC;;ACJF,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACnB,IAAIC,KAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACnB,oBAAc,GAAG,UAAU,KAAK,EAAE,MAAM,EAAE;EACxC,KAAK,GAAGL,UAAS,CAAC,KAAK,CAAC,CAAC;EACzB,OAAO,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,MAAM,EAAE,CAAC,CAAC,GAAGK,KAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;CAChE,CAAC;;ACNF;;;;;AAKA,kBAAc,GAAG,UAAU,WAAW,EAAE;EACtC,OAAO,UAAU,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE;IACrC,IAAI,CAAC,GAAGC,UAAS,CAAC,KAAK,CAAC,CAAC;IACzB,IAAI,MAAM,GAAGL,SAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,KAAK,GAAGM,gBAAe,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC/C,IAAI,KAAK,CAAC;;;IAGV,IAAI,WAAW,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,MAAM,GAAG,KAAK,EAAE;MAClD,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;;MAEnB,IAAI,KAAK,IAAI,KAAK,EAAE,OAAO,IAAI,CAAC;;KAEjC,MAAM,MAAM,MAAM,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,WAAW,IAAI,KAAK,IAAI,CAAC,EAAE;MACnE,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,OAAO,WAAW,IAAI,KAAK,IAAI,CAAC,CAAC;KACvD,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;GAC7B,CAAC;CACH,CAAC;;;ACpBF,IAAI,MAAM,GAAG,oBAAoB,CAAC;AAClC,IAAI,KAAK,GAAGb,OAAM,CAAC,MAAM,CAAC,KAAKA,OAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;;AAEpD,CAAC,cAAc,GAAG,UAAU,GAAG,EAAE,KAAK,EAAE;EACtC,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,KAAK,SAAS,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC;CACtE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC;EACtB,OAAO,EAAEE,KAAI,CAAC,OAAO;EACrB,IAAI,EAAEb,QAAqB,GAAG,MAAM,GAAG,QAAQ;EAC/C,SAAS,EAAE,sCAAsC;CAClD,CAAC,CAAC;;;ACXH,IAAI,MAAM,GAAGA,OAAoB,CAAC,MAAM,CAAC,CAAC;;AAE1C,cAAc,GAAG,UAAU,GAAG,EAAE;EAC9B,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,GAAG,CAAC,GAAGgB,IAAG,CAAC,GAAG,CAAC,CAAC,CAAC;CAChD,CAAC;;ACFF,IAAI,YAAY,GAAGhB,cAA4B,CAAC,KAAK,CAAC,CAAC;AACvD,IAAI,QAAQ,GAAGE,UAAwB,CAAC,UAAU,CAAC,CAAC;;AAEpD,uBAAc,GAAG,UAAU,MAAM,EAAE,KAAK,EAAE;EACxC,IAAI,CAAC,GAAGqB,UAAS,CAAC,MAAM,CAAC,CAAC;EAC1B,IAAI,CAAC,GAAG,CAAC,CAAC;EACV,IAAI,MAAM,GAAG,EAAE,CAAC;EAChB,IAAI,GAAG,CAAC;EACR,KAAK,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,QAAQ,EAAEd,IAAG,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;EAEpE,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,IAAIA,IAAG,CAAC,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;IACrD,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;GAChD;EACD,OAAO,MAAM,CAAC;CACf,CAAC;;AChBF;AACA,gBAAc,GAAG;EACf,+FAA+F;EAC/F,KAAK,CAAC,GAAG,CAAC,CAAC;;ACHb;;AAEA,IAAI,UAAU,GAAGT,YAA2B,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;;AAE3E,OAAS,GAAG,MAAM,CAAC,mBAAmB,IAAI,SAAS,mBAAmB,CAAC,CAAC,EAAE;EACxE,OAAOyB,mBAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;CAC7B,CAAC;;;;;;ACNF;;AAEA,aAAc,GAAG,UAAU,EAAE,EAAE;EAC7B,OAAO,MAAM,CAACJ,QAAO,CAAC,EAAE,CAAC,CAAC,CAAC;CAC5B,CAAC;;ACCF,cAAc,GAAG,SAAS,IAAI,CAAC,KAAK,mCAAmC;EACrE,IAAI,CAAC,GAAGK,SAAQ,CAAC,IAAI,CAAC,CAAC;EACvB,IAAI,MAAM,GAAGR,SAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;EAChC,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC;EAC5B,IAAI,KAAK,GAAGM,gBAAe,CAAC,IAAI,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,MAAM,CAAC,CAAC;EACzE,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;EAC9C,IAAI,MAAM,GAAG,GAAG,KAAK,SAAS,GAAG,MAAM,GAAGA,gBAAe,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;EACvE,OAAO,MAAM,GAAG,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC;EAC1C,OAAO,CAAC,CAAC;CACV,CAAC;;;ACdF,IAAI,KAAK,GAAGxB,OAAoB,CAAC,KAAK,CAAC,CAAC;;AAExC,IAAI,MAAM,GAAGE,OAAoB,CAAC,MAAM,CAAC;AACzC,IAAI,UAAU,GAAG,OAAO,MAAM,IAAI,UAAU,CAAC;;AAE7C,IAAI,QAAQ,GAAG,cAAc,GAAG,UAAU,IAAI,EAAE;EAC9C,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC;IAChC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,MAAM,GAAGc,IAAG,EAAE,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC;CAChF,CAAC;;AAEF,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;;;ACVvB,IAAI,GAAG,GAAGhB,SAAuB,CAAC,CAAC,CAAC;;AAEpC,IAAI,GAAG,GAAGE,IAAiB,CAAC,aAAa,CAAC,CAAC;;AAE3C,mBAAc,GAAG,UAAU,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE;EACxC,IAAI,EAAE,IAAI,CAACO,IAAG,CAAC,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;CACtG,CAAC;;;ACNF,AACA;;;;;;;;;;;AAWA,IAAI,IAAI,GAAGT,WAAyB,CAAC,CAAC,CAAC;AACvC,IAAI,EAAE,GAAGE,SAAuB,CAAC,CAAC,CAAC;;;AAGnC,IAAI,YAAY,GAAG,aAAa,CAAC;AACjC,IAAI,SAAS,GAAG,UAAU,CAAC;AAC3B,IAAI,SAAS,GAAG,WAAW,CAAC;AAC5B,IAAI,YAAY,GAAG,eAAe,CAAC;AACnC,IAAI,WAAW,GAAG,cAAc,CAAC;AACjC,IAAI,YAAY,GAAGS,OAAM,CAAC,YAAY,CAAC,CAAC;AACxC,IAAI,SAAS,GAAGA,OAAM,CAAC,SAAS,CAAC,CAAC;AAClC,IAAI,IAAI,GAAGA,OAAM,CAAC,IAAI,CAAC;AACvB,IAAI,UAAU,GAAGA,OAAM,CAAC,UAAU,CAAC;;AAEnC,IAAI,QAAQ,GAAGA,OAAM,CAAC,QAAQ,CAAC;AAC/B,IAAI,UAAU,GAAG,YAAY,CAAC;AAC9B,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACnB,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACnB,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACvB,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACnB,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACnB,IAAI,MAAM,GAAG,QAAQ,CAAC;AACtB,IAAI,WAAW,GAAG,YAAY,CAAC;AAC/B,IAAI,WAAW,GAAG,YAAY,CAAC;AAC/B,IAAI,OAAO,GAAGgB,YAAW,GAAG,IAAI,GAAG,MAAM,CAAC;AAC1C,IAAI,OAAO,GAAGA,YAAW,GAAG,IAAI,GAAG,WAAW,CAAC;AAC/C,IAAI,OAAO,GAAGA,YAAW,GAAG,IAAI,GAAG,WAAW,CAAC;;;AAG/C,SAAS,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE;EACxC,IAAI,MAAM,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;EAC/B,IAAI,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;EACjC,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;EAC3B,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC;EACtB,IAAI,EAAE,GAAG,IAAI,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;EACrD,IAAI,CAAC,GAAG,CAAC,CAAC;EACV,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;EAC1D,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;EACZ,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;;EAEnB,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,QAAQ,EAAE;;IAExC,CAAC,GAAG,KAAK,IAAI,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,GAAG,IAAI,CAAC;GACV,MAAM;IACL,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;IAC5B,IAAI,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;MAChC,CAAC,EAAE,CAAC;MACJ,CAAC,IAAI,CAAC,CAAC;KACR;IACD,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE;MAClB,KAAK,IAAI,EAAE,GAAG,CAAC,CAAC;KACjB,MAAM;MACL,KAAK,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;KACjC;IACD,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE;MAClB,CAAC,EAAE,CAAC;MACJ,CAAC,IAAI,CAAC,CAAC;KACR;IACD,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,EAAE;MACrB,CAAC,GAAG,CAAC,CAAC;MACN,CAAC,GAAG,IAAI,CAAC;KACV,MAAM,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE;MACzB,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;MACnC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;KACf,MAAM;MACL,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;MAC7C,CAAC,GAAG,CAAC,CAAC;KACP;GACF;EACD,OAAO,IAAI,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC;EAC9D,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;EAClB,IAAI,IAAI,IAAI,CAAC;EACb,OAAO,IAAI,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC;EAC7D,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;EACvB,OAAO,MAAM,CAAC;CACf;AACD,SAAS,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;EAC3C,IAAI,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;EACjC,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;EAC3B,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC;EACtB,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC;EACrB,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;EACnB,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;EACpB,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;EAChB,IAAI,CAAC,CAAC;EACN,CAAC,KAAK,CAAC,CAAC;EACR,OAAO,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC;EAC5D,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;EAC1B,CAAC,KAAK,CAAC,KAAK,CAAC;EACb,KAAK,IAAI,IAAI,CAAC;EACd,OAAO,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC;EAC5D,IAAI,CAAC,KAAK,CAAC,EAAE;IACX,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;GACf,MAAM,IAAI,CAAC,KAAK,IAAI,EAAE;IACrB,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;GAC3C,MAAM;IACL,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACrB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;GACf,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;CAC9C;;AAED,SAAS,SAAS,CAAC,KAAK,EAAE;EACxB,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;CACnE;AACD,SAAS,MAAM,CAAC,EAAE,EAAE;EAClB,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;CACpB;AACD,SAAS,OAAO,CAAC,EAAE,EAAE;EACnB,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;CACpC;AACD,SAAS,OAAO,CAAC,EAAE,EAAE;EACnB,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;CACtE;AACD,SAAS,OAAO,CAAC,EAAE,EAAE;EACnB,OAAO,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;CAC/B;AACD,SAAS,OAAO,CAAC,EAAE,EAAE;EACnB,OAAO,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;CAC/B;;AAED,SAAS,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE;EACnC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;CACxE;;AAED,SAAS,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE;EAC/C,IAAI,QAAQ,GAAG,CAAC,KAAK,CAAC;EACtB,IAAI,QAAQ,GAAGC,QAAO,CAAC,QAAQ,CAAC,CAAC;EACjC,IAAI,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC;EACpE,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;EAC7B,IAAI,KAAK,GAAG,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;EACrC,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC;EAC7C,OAAO,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;CAC/C;AACD,SAAS,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,EAAE;EAClE,IAAI,QAAQ,GAAG,CAAC,KAAK,CAAC;EACtB,IAAI,QAAQ,GAAGA,QAAO,CAAC,QAAQ,CAAC,CAAC;EACjC,IAAI,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC;EACpE,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;EAC7B,IAAI,KAAK,GAAG,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;EACrC,IAAI,IAAI,GAAG,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC;EAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;CAC7F;;AAED,IAAI,CAACC,MAAM,CAAC,GAAG,EAAE;EACf,YAAY,GAAG,SAAS,WAAW,CAAC,MAAM,EAAE;IAC1CC,WAAU,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;IAC7C,IAAI,UAAU,GAAGF,QAAO,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,GAAGG,UAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IACnD,IAAI,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC;GAC5B,CAAC;;EAEF,SAAS,GAAG,SAAS,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE;IAC5DD,WAAU,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IACvCA,WAAU,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;IAC5C,IAAI,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,IAAI,MAAM,GAAGb,UAAS,CAAC,UAAU,CAAC,CAAC;IACnC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,YAAY,EAAE,MAAM,UAAU,CAAC,eAAe,CAAC,CAAC;IAC3E,UAAU,GAAG,UAAU,KAAK,SAAS,GAAG,YAAY,GAAG,MAAM,GAAGC,SAAQ,CAAC,UAAU,CAAC,CAAC;IACrF,IAAI,MAAM,GAAG,UAAU,GAAG,YAAY,EAAE,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC;IACvE,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;IACvB,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;IACvB,IAAI,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC;GAC5B,CAAC;;EAEF,IAAIS,YAAW,EAAE;IACf,SAAS,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;IAC3C,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACnC,SAAS,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;IACxC,SAAS,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;GACzC;;EAEDK,YAAW,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;IAChC,OAAO,EAAE,SAAS,OAAO,CAAC,UAAU,EAAE;MACpC,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;KAChD;IACD,QAAQ,EAAE,SAAS,QAAQ,CAAC,UAAU,EAAE;MACtC,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;KACpC;IACD,QAAQ,EAAE,SAAS,QAAQ,CAAC,UAAU,uBAAuB;MAC3D,IAAI,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;MACnD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;KAC/C;IACD,SAAS,EAAE,SAAS,SAAS,CAAC,UAAU,uBAAuB;MAC7D,IAAI,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;MACnD,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;KACjC;IACD,QAAQ,EAAE,SAAS,QAAQ,CAAC,UAAU,uBAAuB;MAC3D,OAAO,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAC1D;IACD,SAAS,EAAE,SAAS,SAAS,CAAC,UAAU,uBAAuB;MAC7D,OAAO,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;KAChE;IACD,UAAU,EAAE,SAAS,UAAU,CAAC,UAAU,uBAAuB;MAC/D,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;KACrE;IACD,UAAU,EAAE,SAAS,UAAU,CAAC,UAAU,uBAAuB;MAC/D,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;KACrE;IACD,OAAO,EAAE,SAAS,OAAO,CAAC,UAAU,EAAE,KAAK,EAAE;MAC3C,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;KACzC;IACD,QAAQ,EAAE,SAAS,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE;MAC7C,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;KACzC;IACD,QAAQ,EAAE,SAAS,QAAQ,CAAC,UAAU,EAAE,KAAK,uBAAuB;MAClE,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;KACxD;IACD,SAAS,EAAE,SAAS,SAAS,CAAC,UAAU,EAAE,KAAK,uBAAuB;MACpE,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;KACxD;IACD,QAAQ,EAAE,SAAS,QAAQ,CAAC,UAAU,EAAE,KAAK,uBAAuB;MAClE,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;KACxD;IACD,SAAS,EAAE,SAAS,SAAS,CAAC,UAAU,EAAE,KAAK,uBAAuB;MACpE,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;KACxD;IACD,UAAU,EAAE,SAAS,UAAU,CAAC,UAAU,EAAE,KAAK,uBAAuB;MACtE,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;KACxD;IACD,UAAU,EAAE,SAAS,UAAU,CAAC,UAAU,EAAE,KAAK,uBAAuB;MACtE,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;KACxD;GACF,CAAC,CAAC;CACJ,MAAM;EACL,IAAI,CAACC,MAAK,CAAC,YAAY;IACrB,YAAY,CAAC,CAAC,CAAC,CAAC;GACjB,CAAC,IAAI,CAACA,MAAK,CAAC,YAAY;IACvB,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;GACtB,CAAC,IAAIA,MAAK,CAAC,YAAY;IACtB,IAAI,YAAY,EAAE,CAAC;IACnB,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;IACtB,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;IACtB,OAAO,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC;GAC1C,CAAC,EAAE;IACF,YAAY,GAAG,SAAS,WAAW,CAAC,MAAM,EAAE;MAC1CH,WAAU,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;MAC/B,OAAO,IAAI,UAAU,CAACF,QAAO,CAAC,MAAM,CAAC,CAAC,CAAC;KACxC,CAAC;IACF,IAAI,gBAAgB,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACvE,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG;MAC9D,IAAI,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,YAAY,CAAC,EAAElB,KAAI,CAAC,YAAY,EAAE,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;KACpF;IACD,IAAI,CAACwB,QAAO,EAAE,gBAAgB,CAAC,WAAW,GAAG,YAAY,CAAC;GAC3D;;EAED,IAAI,IAAI,GAAG,IAAI,SAAS,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;EAC9C,IAAI,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC;EAC5C,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;EAC5B,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;EAC5B,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAEF,YAAW,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;IACzE,OAAO,EAAE,SAAS,OAAO,CAAC,UAAU,EAAE,KAAK,EAAE;MAC3C,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;KACpD;IACD,QAAQ,EAAE,SAAS,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE;MAC7C,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;KACpD;GACF,EAAE,IAAI,CAAC,CAAC;CACV;AACDG,eAAc,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;AAC3CA,eAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACrCzB,KAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAEmB,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC9C,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC;AACrC,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;;;ACnR/B;;;AAGA,IAAI,OAAO,GAAG7B,IAAiB,CAAC,SAAS,CAAC,CAAC;AAC3C,uBAAc,GAAG,UAAU,CAAC,EAAE,CAAC,EAAE;EAC/B,IAAI,CAAC,GAAGI,SAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;EAChC,IAAI,CAAC,CAAC;EACN,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,GAAGA,SAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,SAAS,GAAG,CAAC,GAAGQ,UAAS,CAAC,CAAC,CAAC,CAAC;CACtF,CAAC;;ACJF,IAAIwB,SAAO,GAAGpC,IAAiB,CAAC,SAAS,CAAC,CAAC;;AAE3C,eAAc,GAAG,UAAU,GAAG,EAAE;EAC9B,IAAI,CAAC,GAAGW,OAAM,CAAC,GAAG,CAAC,CAAC;EACpB,IAAIgB,YAAW,IAAI,CAAC,IAAI,CAAC,CAAC,CAACS,SAAO,CAAC,EAAE7B,SAAE,CAAC,CAAC,CAAC,CAAC,EAAE6B,SAAO,EAAE;IACpD,YAAY,EAAE,IAAI;IAClB,GAAG,EAAE,YAAY,EAAE,OAAO,IAAI,CAAC,EAAE;GAClC,CAAC,CAAC;CACJ,CAAC;;ACJF,IAAI,WAAW,GAAGpC,OAAoB,CAAC,WAAW,CAAC;;AAEnD,IAAI,YAAY,GAAGqC,YAAM,CAAC,WAAW,CAAC;AACtC,IAAI,SAAS,GAAGA,YAAM,CAAC,QAAQ,CAAC;AAChC,IAAI,OAAO,GAAGR,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC;AAC/C,IAAI,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC;AAC1C,IAAIS,MAAI,GAAGT,MAAM,CAAC,IAAI,CAAC;AACvB,IAAI,YAAY,GAAG,aAAa,CAAC;;AAEjCU,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,IAAI,WAAW,KAAK,YAAY,CAAC,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC;;AAE3GA,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAG,CAACV,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE;;EAE5D,MAAM,EAAE,SAAS,MAAM,CAAC,EAAE,EAAE;IAC1B,OAAO,OAAO,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI9B,SAAQ,CAAC,EAAE,CAAC,IAAIuC,MAAI,IAAI,EAAE,CAAC;GAC7D;CACF,CAAC,CAAC;;AAEHC,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAGrC,MAAmB,CAAC,YAAY;EAC1E,OAAO,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,UAAU,CAAC;CAC5D,CAAC,EAAE,YAAY,EAAE;;EAEhB,KAAK,EAAE,SAAS,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE;IAChC,IAAI,MAAM,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,EAAE,OAAO,MAAM,CAAC,IAAI,CAACE,SAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;IACzF,IAAI,GAAG,GAAGA,SAAQ,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC;IACpC,IAAI,KAAK,GAAGoB,gBAAe,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACxC,IAAI,KAAK,GAAGA,gBAAe,CAAC,GAAG,KAAK,SAAS,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;IAChE,IAAI,MAAM,GAAG,KAAKgB,mBAAkB,CAAC,IAAI,EAAE,YAAY,CAAC,EAAEtB,SAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IACnF,IAAI,KAAK,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,KAAK,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,KAAK,GAAG,KAAK,EAAE;MACpB,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;KAClD,CAAC,OAAO,MAAM,CAAC;GACjB;CACF,CAAC,CAAC;;AAEHf,WAAyB,CAAC,YAAY,CAAC,CAAC;;AC7CxC;;AAEA,IAAIsC,KAAG,GAAGzC,IAAiB,CAAC,aAAa,CAAC,CAAC;;AAE3C,IAAI,GAAG,GAAGmB,IAAG,CAAC,YAAY,EAAE,OAAO,SAAS,CAAC,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC;;;AAGlE,IAAI,MAAM,GAAG,UAAU,EAAE,EAAE,GAAG,EAAE;EAC9B,IAAI;IACF,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;GAChB,CAAC,OAAO,CAAC,EAAE,eAAe;CAC5B,CAAC;;AAEF,YAAc,GAAG,UAAU,EAAE,EAAE;EAC7B,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;EACZ,OAAO,EAAE,KAAK,SAAS,GAAG,WAAW,GAAG,EAAE,KAAK,IAAI,GAAG,MAAM;;MAExD,QAAQ,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,EAAEsB,KAAG,CAAC,CAAC,IAAI,QAAQ,GAAG,CAAC;;MAExD,GAAG,GAAGtB,IAAG,CAAC,CAAC,CAAC;;MAEZ,CAAC,CAAC,GAAGA,IAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,MAAM,IAAI,UAAU,GAAG,WAAW,GAAG,CAAC,CAAC;CACjF,CAAC;;ACtBF,cAAc,GAAG,EAAE,CAAC;;ACApB;;AAEA,IAAI,QAAQ,GAAGnB,IAAiB,CAAC,UAAU,CAAC,CAAC;AAC7C,IAAI,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC;;AAEjC,gBAAc,GAAG,UAAU,EAAE,EAAE;EAC7B,OAAO,EAAE,KAAK,SAAS,KAAK0C,UAAS,CAAC,KAAK,KAAK,EAAE,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;CACpF,CAAC;;ACPF;;;;AAIA,eAAc,GAAG,MAAM,CAAC,IAAI,IAAI,SAAS,IAAI,CAAC,CAAC,EAAE;EAC/C,OAAOjB,mBAAK,CAAC,CAAC,EAAEkB,YAAW,CAAC,CAAC;CAC9B,CAAC;;ACFF,cAAc,GAAG3C,YAAyB,GAAG,MAAM,CAAC,gBAAgB,GAAG,SAAS,gBAAgB,CAAC,CAAC,EAAE,UAAU,EAAE;EAC9GI,SAAQ,CAAC,CAAC,CAAC,CAAC;EACZ,IAAI,IAAI,GAAGwC,WAAO,CAAC,UAAU,CAAC,CAAC;EAC/B,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;EACzB,IAAI,CAAC,GAAG,CAAC,CAAC;EACV,IAAI,CAAC,CAAC;EACN,OAAO,MAAM,GAAG,CAAC,EAAErC,SAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;EACzD,OAAO,CAAC,CAAC;CACV,CAAC;;ACZF,IAAIN,UAAQ,GAAGD,OAAoB,CAAC,QAAQ,CAAC;AAC7C,SAAc,GAAGC,UAAQ,IAAIA,UAAQ,CAAC,eAAe,CAAC;;ACDtD;;;;AAIA,IAAI4C,UAAQ,GAAG7C,UAAwB,CAAC,UAAU,CAAC,CAAC;AACpD,IAAI,KAAK,GAAG,YAAY,eAAe,CAAC;AACxC,IAAI8C,WAAS,GAAG,WAAW,CAAC;;;AAG5B,IAAI,UAAU,GAAG,YAAY;;EAE3B,IAAI,MAAM,GAAG5C,UAAwB,CAAC,QAAQ,CAAC,CAAC;EAChD,IAAI,CAAC,GAAGyC,YAAW,CAAC,MAAM,CAAC;EAC3B,IAAI,EAAE,GAAG,GAAG,CAAC;EACb,IAAI,EAAE,GAAG,GAAG,CAAC;EACb,IAAI,cAAc,CAAC;EACnB,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;EAC9BxC,KAAkB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;EACvC,MAAM,CAAC,GAAG,GAAG,aAAa,CAAC;;;EAG3B,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC;EAC/C,cAAc,CAAC,IAAI,EAAE,CAAC;EACtB,cAAc,CAAC,KAAK,CAAC,EAAE,GAAG,QAAQ,GAAG,EAAE,GAAG,mBAAmB,GAAG,EAAE,GAAG,SAAS,GAAG,EAAE,CAAC,CAAC;EACrF,cAAc,CAAC,KAAK,EAAE,CAAC;EACvB,UAAU,GAAG,cAAc,CAAC,CAAC,CAAC;EAC9B,OAAO,CAAC,EAAE,EAAE,OAAO,UAAU,CAAC2C,WAAS,CAAC,CAACH,YAAW,CAAC,CAAC,CAAC,CAAC,CAAC;EACzD,OAAO,UAAU,EAAE,CAAC;CACrB,CAAC;;AAEF,iBAAc,GAAG,MAAM,CAAC,MAAM,IAAI,SAAS,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE;EAC/D,IAAI,MAAM,CAAC;EACX,IAAI,CAAC,KAAK,IAAI,EAAE;IACd,KAAK,CAACG,WAAS,CAAC,GAAG1C,SAAQ,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;IACrB,KAAK,CAAC0C,WAAS,CAAC,GAAG,IAAI,CAAC;;IAExB,MAAM,CAACD,UAAQ,CAAC,GAAG,CAAC,CAAC;GACtB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;EAC7B,OAAO,UAAU,KAAK,SAAS,GAAG,MAAM,GAAGE,UAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACpE,CAAC;;ACxCF;;;AAGA,IAAIF,UAAQ,GAAG7C,UAAwB,CAAC,UAAU,CAAC,CAAC;AACpD,IAAI,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC;;AAEnC,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,UAAU,CAAC,EAAE;EACrD,CAAC,GAAG0B,SAAQ,CAAC,CAAC,CAAC,CAAC;EAChB,IAAIjB,IAAG,CAAC,CAAC,EAAEoC,UAAQ,CAAC,EAAE,OAAO,CAAC,CAACA,UAAQ,CAAC,CAAC;EACzC,IAAI,OAAO,CAAC,CAAC,WAAW,IAAI,UAAU,IAAI,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE;IACpE,OAAO,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC;GAChC,CAAC,OAAO,CAAC,YAAY,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC;CACnD,CAAC;;ACXF,IAAIG,UAAQ,GAAGhD,IAAiB,CAAC,UAAU,CAAC,CAAC;;AAE7C,0BAAc,GAAGE,KAAkB,CAAC,iBAAiB,GAAG,UAAU,EAAE,EAAE;EACpE,IAAI,EAAE,IAAI,SAAS,EAAE,OAAO,EAAE,CAAC8C,UAAQ,CAAC;OACnC,EAAE,CAAC,YAAY,CAAC;OAChBN,UAAS,CAACO,QAAO,CAAC,EAAE,CAAC,CAAC,CAAC;CAC7B,CAAC;;ACPF;;AAEA,YAAc,GAAG,KAAK,CAAC,OAAO,IAAI,SAAS,OAAO,CAAC,GAAG,EAAE;EACtD,OAAO9B,IAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC;CAC5B,CAAC;;ACFF,IAAIiB,SAAO,GAAGpC,IAAiB,CAAC,SAAS,CAAC,CAAC;;AAE3C,4BAAc,GAAG,UAAU,QAAQ,EAAE;EACnC,IAAI,CAAC,CAAC;EACN,IAAIkD,QAAO,CAAC,QAAQ,CAAC,EAAE;IACrB,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC;;IAEzB,IAAI,OAAO,CAAC,IAAI,UAAU,KAAK,CAAC,KAAK,KAAK,IAAIA,QAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;IACnF,IAAInD,SAAQ,CAAC,CAAC,CAAC,EAAE;MACf,CAAC,GAAG,CAAC,CAACqC,SAAO,CAAC,CAAC;MACf,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC;KAC/B;GACF,CAAC,OAAO,CAAC,KAAK,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;CACtC,CAAC;;ACfF;;;AAGA,uBAAc,GAAG,UAAU,QAAQ,EAAE,MAAM,EAAE;EAC3C,OAAO,KAAKI,wBAAkB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;CACnD,CAAC;;ACLF;;;;;;;;;;;;AAYA,iBAAc,GAAG,UAAU,IAAI,EAAE,OAAO,EAAE;EACxC,IAAI,MAAM,GAAG,IAAI,IAAI,CAAC,CAAC;EACvB,IAAI,SAAS,GAAG,IAAI,IAAI,CAAC,CAAC;EAC1B,IAAI,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC;EACxB,IAAI,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC;EACzB,IAAI,aAAa,GAAG,IAAI,IAAI,CAAC,CAAC;EAC9B,IAAI,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,aAAa,CAAC;EAC1C,IAAI,MAAM,GAAG,OAAO,IAAIW,mBAAG,CAAC;EAC5B,OAAO,UAAU,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;IACxC,IAAI,CAAC,GAAGzB,SAAQ,CAAC,KAAK,CAAC,CAAC;IACxB,IAAI,IAAI,GAAGN,QAAO,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,CAAC,GAAGN,IAAG,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACjC,IAAI,MAAM,GAAGI,SAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC;IACvF,IAAI,GAAG,EAAE,GAAG,CAAC;IACb,MAAM,MAAM,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,QAAQ,IAAI,KAAK,IAAI,IAAI,EAAE;MAC5D,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;MAClB,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;MACvB,IAAI,IAAI,EAAE;QACR,IAAI,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;aAC3B,IAAI,GAAG,EAAE,QAAQ,IAAI;UACxB,KAAK,CAAC,EAAE,OAAO,IAAI,CAAC;UACpB,KAAK,CAAC,EAAE,OAAO,GAAG,CAAC;UACnB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;UACrB,KAAK,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC1B,MAAM,IAAI,QAAQ,EAAE,OAAO,KAAK,CAAC;OACnC;KACF;IACD,OAAO,aAAa,GAAG,CAAC,CAAC,GAAG,OAAO,IAAI,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;GACrE,CAAC;CACH,CAAC;;AC3CF;AACA,IAAI,WAAW,GAAGlB,IAAiB,CAAC,aAAa,CAAC,CAAC;AACnD,IAAIoD,YAAU,GAAG,KAAK,CAAC,SAAS,CAAC;AACjC,IAAIA,YAAU,CAAC,WAAW,CAAC,IAAI,SAAS,EAAElD,KAAkB,CAACkD,YAAU,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;AAC1F,qBAAc,GAAG,UAAU,GAAG,EAAE;EAC9BA,YAAU,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;CACrC,CAAC;;ACNF,aAAc,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE;EACtC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;CACvC,CAAC;;ACEF,IAAI,iBAAiB,GAAG,EAAE,CAAC;;;AAG3BpD,KAAkB,CAAC,iBAAiB,EAAEE,IAAiB,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC;;AAEnG,eAAc,GAAG,UAAU,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE;EAClD,WAAW,CAAC,SAAS,GAAGmD,aAAM,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAEC,aAAU,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;EACjFnB,eAAc,CAAC,WAAW,EAAE,IAAI,GAAG,WAAW,CAAC,CAAC;CACjD,CAAC;;ACHF,IAAIa,UAAQ,GAAGhD,IAAiB,CAAC,UAAU,CAAC,CAAC;AAC7C,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC,IAAI,IAAI,MAAM,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AAC9C,IAAI,WAAW,GAAG,YAAY,CAAC;AAC/B,IAAI,IAAI,GAAG,MAAM,CAAC;AAClB,IAAI,MAAM,GAAG,QAAQ,CAAC;;AAEtB,IAAI,UAAU,GAAG,YAAY,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;;AAE9C,eAAc,GAAG,UAAU,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE;EACjFuD,WAAW,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;EACrC,IAAI,SAAS,GAAG,UAAU,IAAI,EAAE;IAC9B,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;IAChD,QAAQ,IAAI;MACV,KAAK,IAAI,EAAE,OAAO,SAAS,IAAI,GAAG,EAAE,OAAO,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;MAC1E,KAAK,MAAM,EAAE,OAAO,SAAS,MAAM,GAAG,EAAE,OAAO,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;KAC/E,CAAC,OAAO,SAAS,OAAO,GAAG,EAAE,OAAO,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;GACrE,CAAC;EACF,IAAI,GAAG,GAAG,IAAI,GAAG,WAAW,CAAC;EAC7B,IAAI,UAAU,GAAG,OAAO,IAAI,MAAM,CAAC;EACnC,IAAI,UAAU,GAAG,KAAK,CAAC;EACvB,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;EAC3B,IAAI,OAAO,GAAG,KAAK,CAACP,UAAQ,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;EACjF,IAAI,QAAQ,GAAG,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;EAC7C,IAAI,QAAQ,GAAG,OAAO,GAAG,CAAC,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;EACnF,IAAI,UAAU,GAAG,IAAI,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,OAAO,GAAG,OAAO,CAAC;EACtE,IAAI,OAAO,EAAE,GAAG,EAAE,iBAAiB,CAAC;;EAEpC,IAAI,UAAU,EAAE;IACd,iBAAiB,GAAGQ,UAAc,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;IAChE,IAAI,iBAAiB,KAAK,MAAM,CAAC,SAAS,IAAI,iBAAiB,CAAC,IAAI,EAAE;;MAEpErB,eAAc,CAAC,iBAAiB,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;;MAE7C,IAAI,CAACD,QAAO,IAAI,OAAO,iBAAiB,CAACc,UAAQ,CAAC,IAAI,UAAU,EAAEtC,KAAI,CAAC,iBAAiB,EAAEsC,UAAQ,EAAE,UAAU,CAAC,CAAC;KACjH;GACF;;EAED,IAAI,UAAU,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;IACpD,UAAU,GAAG,IAAI,CAAC;IAClB,QAAQ,GAAG,SAAS,MAAM,GAAG,EAAE,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;GAC7D;;EAED,IAAI,CAAC,CAACd,QAAO,IAAI,MAAM,MAAM,KAAK,IAAI,UAAU,IAAI,CAAC,KAAK,CAACc,UAAQ,CAAC,CAAC,EAAE;IACrEtC,KAAI,CAAC,KAAK,EAAEsC,UAAQ,EAAE,QAAQ,CAAC,CAAC;GACjC;;EAEDN,UAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;EAC3BA,UAAS,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;EAC5B,IAAI,OAAO,EAAE;IACX,OAAO,GAAG;MACR,MAAM,EAAE,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC;MACjD,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC;MACzC,OAAO,EAAE,QAAQ;KAClB,CAAC;IACF,IAAI,MAAM,EAAE,KAAK,GAAG,IAAI,OAAO,EAAE;MAC/B,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,EAAE3B,SAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;KACzD,MAAMwB,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;GAC9E;EACD,OAAO,OAAO,CAAC;CAChB,CAAC;;;;;;AC1DF,sBAAc,GAAGvC,WAAyB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,QAAQ,EAAE,IAAI,EAAE;EACnF,IAAI,CAAC,EAAE,GAAGuB,UAAS,CAAC,QAAQ,CAAC,CAAC;EAC9B,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;EACZ,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;;CAEhB,EAAE,YAAY;EACb,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;EAChB,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;EACnB,IAAI,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;EACtB,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,MAAM,EAAE;IAC3B,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;IACpB,OAAOkC,SAAI,CAAC,CAAC,CAAC,CAAC;GAChB;EACD,IAAI,IAAI,IAAI,MAAM,EAAE,OAAOA,SAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;EAC1C,IAAI,IAAI,IAAI,QAAQ,EAAE,OAAOA,SAAI,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;EAC/C,OAAOA,SAAI,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;CACnC,EAAE,QAAQ,CAAC,CAAC;;;AAGbf,UAAS,CAAC,SAAS,GAAGA,UAAS,CAAC,KAAK,CAAC;;AAEtCgB,iBAAgB,CAAC,MAAM,CAAC,CAAC;AACzBA,iBAAgB,CAAC,QAAQ,CAAC,CAAC;AAC3BA,iBAAgB,CAAC,SAAS,CAAC,CAAC;;ACjC5B,IAAIV,UAAQ,GAAGhD,IAAiB,CAAC,UAAU,CAAC,CAAC;AAC7C,IAAI,YAAY,GAAG,KAAK,CAAC;;AAEzB,IAAI;EACF,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAACgD,UAAQ,CAAC,EAAE,CAAC;EAC5B,KAAK,CAAC,QAAQ,CAAC,GAAG,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC;CAGxD,CAAC,OAAO,CAAC,EAAE,eAAe;;AAE3B,eAAc,GAAG,UAAU,IAAI,EAAE,WAAW,EAAE;EAC5C,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY,EAAE,OAAO,KAAK,CAAC;EAChD,IAAI,IAAI,GAAG,KAAK,CAAC;EACjB,IAAI;IACF,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACd,IAAI,IAAI,GAAG,GAAG,CAACA,UAAQ,CAAC,EAAE,CAAC;IAC3B,IAAI,CAAC,IAAI,GAAG,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC;IAC1D,GAAG,CAACA,UAAQ,CAAC,GAAG,YAAY,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;IAC7C,IAAI,CAAC,GAAG,CAAC,CAAC;GACX,CAAC,OAAO,CAAC,EAAE,eAAe;EAC3B,OAAO,IAAI,CAAC;CACb,CAAC;;ACfF,oBAAc,GAAG,EAAE,CAAC,UAAU,IAAI,SAAS,UAAU,CAAC,MAAM,YAAY,KAAK,2BAA2B;EACtG,IAAI,CAAC,GAAGtB,SAAQ,CAAC,IAAI,CAAC,CAAC;EACvB,IAAI,GAAG,GAAGR,SAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;EAC7B,IAAI,EAAE,GAAGM,gBAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;EACtC,IAAI,IAAI,GAAGA,gBAAe,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;EACvC,IAAI,GAAG,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;EAC1D,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,SAAS,GAAG,GAAG,GAAGA,gBAAe,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;EAC7F,IAAI,GAAG,GAAG,CAAC,CAAC;EACZ,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,KAAK,EAAE;IAClC,GAAG,GAAG,CAAC,CAAC,CAAC;IACT,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC;IAClB,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;GACjB;EACD,OAAO,KAAK,EAAE,GAAG,CAAC,EAAE;IAClB,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;SAC1B,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAClB,EAAE,IAAI,GAAG,CAAC;IACV,IAAI,IAAI,GAAG,CAAC;GACb,CAAC,OAAO,CAAC,CAAC;CACZ,CAAC;;ACzBF,OAAS,GAAG,EAAE,CAAC,oBAAoB,CAAC;;;;;;ACMpC,IAAI,IAAI,GAAG,MAAM,CAAC,wBAAwB,CAAC;;AAE3C,OAAS,GAAGxB,YAAyB,GAAG,IAAI,GAAG,SAAS,wBAAwB,CAAC,CAAC,EAAE,CAAC,EAAE;EACrF,CAAC,GAAGuB,UAAS,CAAC,CAAC,CAAC,CAAC;EACjB,CAAC,GAAGlB,YAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;EACzB,IAAIC,aAAc,EAAE,IAAI;IACtB,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;GACnB,CAAC,OAAO,CAAC,EAAE,eAAe;EAC3B,IAAIG,IAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAOD,aAAU,CAAC,CAACmD,UAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC3D,CAAC;;;;;;;ACfF,AACA,IAAI3D,YAAyB,EAAE;EAC7B,IAAI,OAAO,GAAGE,QAAqB,CAAC;EACpC,IAAI,MAAM,GAAGC,OAAoB,CAAC;EAClC,IAAI,KAAK,GAAGyD,MAAmB,CAAC;EAChC,IAAI,OAAO,GAAGC,OAAoB,CAAC;EACnC,IAAI,MAAM,GAAGC,MAAmB,CAAC;EACjC,IAAI,OAAO,GAAGC,YAA0B,CAAC;EACzC,IAAI,GAAG,GAAGC,IAAiB,CAAC;EAC5B,IAAI,UAAU,GAAGC,WAAyB,CAAC;EAC3C,IAAI,YAAY,GAAGC,aAA2B,CAAC;EAC/C,IAAI,IAAI,GAAGC,KAAkB,CAAC;EAC9B,IAAI,WAAW,GAAGC,YAA0B,CAAC;EAC7C,IAAI,SAAS,GAAGC,UAAwB,CAAC;EACzC,IAAI,QAAQ,GAAGC,SAAuB,CAAC;EACvC,IAAI,OAAO,GAAGC,QAAsB,CAAC;EACrC,IAAI,eAAe,GAAGC,gBAA+B,CAAC;EACtD,IAAI,WAAW,GAAGC,YAA0B,CAAC;EAC7C,IAAI,GAAG,GAAGC,IAAiB,CAAC;EAC5B,IAAI,OAAO,GAAGC,QAAqB,CAAC;EACpC,IAAI,QAAQ,GAAGC,SAAuB,CAAC;EACvC,IAAI,QAAQ,GAAGC,SAAuB,CAAC;EACvC,IAAI,WAAW,GAAGC,YAA2B,CAAC;EAC9C,IAAI,MAAM,GAAGC,aAA2B,CAAC;EACzC,IAAI,cAAc,GAAGC,UAAwB,CAAC;EAC9C,IAAI,IAAI,GAAGC,WAAyB,CAAC,CAAC,CAAC;EACvC,IAAI,SAAS,GAAGC,sBAAqC,CAAC;EACtD,IAAI,GAAG,GAAGC,IAAiB,CAAC;EAC5B,IAAI,GAAG,GAAGC,IAAiB,CAAC;EAC5B,IAAI,iBAAiB,GAAGC,aAA2B,CAAC;EACpD,IAAI,mBAAmB,GAAGC,cAA4B,CAAC;EACvD,IAAI,kBAAkB,GAAGC,mBAAiC,CAAC;EAC3D,IAAI,cAAc,GAAGC,kBAA+B,CAAC;EACrD,IAAI,SAAS,GAAGC,UAAuB,CAAC;EACxC,IAAI,WAAW,GAAGC,WAAyB,CAAC;EAC5C,IAAI,UAAU,GAAGC,WAAyB,CAAC;EAC3C,IAAI,SAAS,GAAGC,UAAwB,CAAC;EACzC,IAAI,eAAe,GAAGC,gBAA+B,CAAC;EACtD,IAAI,GAAG,GAAGC,SAAuB,CAAC;EAClC,IAAI,KAAK,GAAGC,WAAyB,CAAC;EACtC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;EACf,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;EACnB,IAAI,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;EACnC,IAAI,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;EACjC,IAAI,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;EACnC,IAAI,YAAY,GAAG,aAAa,CAAC;EACjC,IAAI,aAAa,GAAG,QAAQ,GAAG,YAAY,CAAC;EAC5C,IAAI,iBAAiB,GAAG,mBAAmB,CAAC;EAC5C,IAAI,SAAS,GAAG,WAAW,CAAC;EAC5B,IAAI,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;EAClC,IAAI,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;EACvC,IAAI,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;EACjC,IAAI,YAAY,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;EACxC,IAAI,WAAW,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;EACvC,IAAI,SAAS,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;EACrC,IAAI,UAAU,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;EACtC,IAAI,SAAS,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;EACrC,IAAI,cAAc,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;EAC1C,IAAI,aAAa,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;EAC9C,IAAI,YAAY,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;EAC9C,IAAI,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC;EACxC,IAAI,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC;EACpC,IAAI,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC;EAC1C,IAAI,gBAAgB,GAAG,UAAU,CAAC,WAAW,CAAC;EAC9C,IAAI,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC;EACpC,IAAI,gBAAgB,GAAG,UAAU,CAAC,WAAW,CAAC;EAC9C,IAAI,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC;EAChC,IAAI,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC;EAChC,IAAI,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC;EAClC,IAAI,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC;EACxC,IAAI,mBAAmB,GAAG,UAAU,CAAC,cAAc,CAAC;EACpD,IAAI,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;EAC/B,IAAI,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC;EAC7B,IAAI,iBAAiB,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC;EACjD,IAAI,eAAe,GAAG,GAAG,CAAC,iBAAiB,CAAC,CAAC;EAC7C,IAAI,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC;EACrC,IAAI,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;EAC/B,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;EACvB,IAAI,YAAY,GAAG,eAAe,CAAC;;EAEnC,IAAI,IAAI,GAAG,iBAAiB,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE;IACnD,OAAO,QAAQ,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;GACpE,CAAC,CAAC;;EAEH,IAAI,aAAa,GAAG,KAAK,CAAC,YAAY;;IAEpC,OAAO,IAAI,UAAU,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;GAC7D,CAAC,CAAC;;EAEH,IAAI,UAAU,GAAG,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,YAAY;IAChF,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;GAC3B,CAAC,CAAC;;EAEH,IAAI,QAAQ,GAAG,UAAU,EAAE,EAAE,KAAK,EAAE;IAClC,IAAI,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;IAC3B,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,KAAK,EAAE,MAAM,UAAU,CAAC,eAAe,CAAC,CAAC;IACpE,OAAO,MAAM,CAAC;GACf,CAAC;;EAEF,IAAI,QAAQ,GAAG,UAAU,EAAE,EAAE;IAC3B,IAAI,QAAQ,CAAC,EAAE,CAAC,IAAI,WAAW,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC;IACjD,MAAM,SAAS,CAAC,EAAE,GAAG,wBAAwB,CAAC,CAAC;GAChD,CAAC;;EAEF,IAAI,QAAQ,GAAG,UAAU,CAAC,EAAE,MAAM,EAAE;IAClC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,iBAAiB,IAAI,CAAC,CAAC,EAAE;MAC5C,MAAM,SAAS,CAAC,sCAAsC,CAAC,CAAC;KACzD,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;GACxB,CAAC;;EAEF,IAAI,eAAe,GAAG,UAAU,CAAC,EAAE,IAAI,EAAE;IACvC,OAAO,QAAQ,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;GAClE,CAAC;;EAEF,IAAI,QAAQ,GAAG,UAAU,CAAC,EAAE,IAAI,EAAE;IAChC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACzB,IAAI,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,MAAM,GAAG,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACrD,OAAO,MAAM,CAAC;GACf,CAAC;;EAEF,IAAI,SAAS,GAAG,UAAU,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE;IAC3C,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;GACjE,CAAC;;EAEF,IAAI,KAAK,GAAG,SAAS,IAAI,CAAC,MAAM,yBAAyB;IACvD,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzB,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC;IAC5B,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAChD,IAAI,OAAO,GAAG,KAAK,KAAK,SAAS,CAAC;IAClC,IAAI,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC;IAC9C,IAAI,MAAM,IAAI,SAAS,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;MAC/C,KAAK,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;QACvF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;OACzB,CAAC,CAAC,GAAG,MAAM,CAAC;KACd;IACD,IAAI,OAAO,IAAI,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7D,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;MACzF,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KAC7C;IACD,OAAO,MAAM,CAAC;GACf,CAAC;;EAEF,IAAI,GAAG,GAAG,SAAS,EAAE,iBAAiB;IACpC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;IAC9B,IAAI,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,OAAO,MAAM,GAAG,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;IAC1D,OAAO,MAAM,CAAC;GACf,CAAC;;;EAGF,IAAI,aAAa,GAAG,CAAC,CAAC,UAAU,IAAI,KAAK,CAAC,YAAY,EAAE,mBAAmB,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;;EAExG,IAAI,eAAe,GAAG,SAAS,cAAc,GAAG;IAC9C,OAAO,mBAAmB,CAAC,KAAK,CAAC,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;GAC/G,CAAC;;EAEF,IAAI,KAAK,GAAG;IACV,UAAU,EAAE,SAAS,UAAU,CAAC,MAAM,EAAE,KAAK,cAAc;MACzD,OAAO,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;KAC7G;IACD,KAAK,EAAE,SAAS,KAAK,CAAC,UAAU,kBAAkB;MAChD,OAAO,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;KAChG;IACD,IAAI,EAAE,SAAS,IAAI,CAAC,KAAK,qBAAqB;MAC5C,OAAO,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;KACnD;IACD,MAAM,EAAE,SAAS,MAAM,CAAC,UAAU,kBAAkB;MAClD,OAAO,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU;QACjE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;KACrD;IACD,IAAI,EAAE,SAAS,IAAI,CAAC,SAAS,kBAAkB;MAC7C,OAAO,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;KAC9F;IACD,SAAS,EAAE,SAAS,SAAS,CAAC,SAAS,kBAAkB;MACvD,OAAO,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;KACnG;IACD,OAAO,EAAE,SAAS,OAAO,CAAC,UAAU,kBAAkB;MACpD,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;KAC3F;IACD,OAAO,EAAE,SAAS,OAAO,CAAC,aAAa,oBAAoB;MACzD,OAAO,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;KACrG;IACD,QAAQ,EAAE,SAAS,QAAQ,CAAC,aAAa,oBAAoB;MAC3D,OAAO,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;KACtG;IACD,IAAI,EAAE,SAAS,IAAI,CAAC,SAAS,EAAE;MAC7B,OAAO,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;KACnD;IACD,WAAW,EAAE,SAAS,WAAW,CAAC,aAAa,oBAAoB;MACjE,OAAO,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;KAC1D;IACD,GAAG,EAAE,SAAS,GAAG,CAAC,KAAK,kBAAkB;MACvC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;KACrF;IACD,MAAM,EAAE,SAAS,MAAM,CAAC,UAAU,uBAAuB;MACvD,OAAO,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;KACrD;IACD,WAAW,EAAE,SAAS,WAAW,CAAC,UAAU,uBAAuB;MACjE,OAAO,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;KAC1D;IACD,OAAO,EAAE,SAAS,OAAO,GAAG;MAC1B,IAAI,IAAI,GAAG,IAAI,CAAC;MAChB,IAAI,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;MACnC,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;MACpC,IAAI,KAAK,GAAG,CAAC,CAAC;MACd,IAAI,KAAK,CAAC;MACV,OAAO,KAAK,GAAG,MAAM,EAAE;QACrB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;OACtB,CAAC,OAAO,IAAI,CAAC;KACf;IACD,IAAI,EAAE,SAAS,IAAI,CAAC,UAAU,kBAAkB;MAC9C,OAAO,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;KAC/F;IACD,IAAI,EAAE,SAAS,IAAI,CAAC,SAAS,EAAE;MAC7B,OAAO,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;KAClD;IACD,QAAQ,EAAE,SAAS,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;MACtC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;MACvB,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;MACtB,IAAI,MAAM,GAAG,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;MAC5C,OAAO,KAAK,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC;QACnD,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,UAAU,GAAG,MAAM,GAAG,CAAC,CAAC,iBAAiB;QAC3C,QAAQ,CAAC,CAAC,GAAG,KAAK,SAAS,GAAG,MAAM,GAAG,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC;OAC/E,CAAC;KACH;GACF,CAAC;;EAEF,IAAI,MAAM,GAAG,SAAS,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE;IACtC,OAAO,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;GAC3E,CAAC;;EAEF,IAAI,IAAI,GAAG,SAAS,GAAG,CAAC,SAAS,iBAAiB;IAChD,QAAQ,CAAC,IAAI,CAAC,CAAC;IACf,IAAI,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvC,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACzB,IAAI,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC9B,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,GAAG,GAAG,MAAM,GAAG,MAAM,EAAE,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC;IAC1D,OAAO,KAAK,GAAG,GAAG,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;GACzD,CAAC;;EAEF,IAAI,UAAU,GAAG;IACf,OAAO,EAAE,SAAS,OAAO,GAAG;MAC1B,OAAO,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;KAC1C;IACD,IAAI,EAAE,SAAS,IAAI,GAAG;MACpB,OAAO,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;KACvC;IACD,MAAM,EAAE,SAAS,MAAM,GAAG;MACxB,OAAO,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;KACzC;GACF,CAAC;;EAEF,IAAI,SAAS,GAAG,UAAU,MAAM,EAAE,GAAG,EAAE;IACrC,OAAO,QAAQ,CAAC,MAAM,CAAC;SAClB,MAAM,CAAC,WAAW,CAAC;SACnB,OAAO,GAAG,IAAI,QAAQ;SACtB,GAAG,IAAI,MAAM;SACb,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;GAClC,CAAC;EACF,IAAI,QAAQ,GAAG,SAAS,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE;IAC5D,OAAO,SAAS,CAAC,MAAM,EAAE,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAClD,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;GACvB,CAAC;EACF,IAAI,QAAQ,GAAG,SAAS,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE;IACxD,IAAI,SAAS,CAAC,MAAM,EAAE,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;SAC9C,QAAQ,CAAC,IAAI,CAAC;SACd,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;SAClB,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;SACjB,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;;SAEjB,CAAC,IAAI,CAAC,YAAY;UACjB,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC;UACxC,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC;MAChD;MACA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;MACzB,OAAO,MAAM,CAAC;KACf,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;GAChC,CAAC;;EAEF,IAAI,CAAC,gBAAgB,EAAE;IACrB,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC;IACnB,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;GAClB;;EAED,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,QAAQ,EAAE;IAC3D,wBAAwB,EAAE,QAAQ;IAClC,cAAc,EAAE,QAAQ;GACzB,CAAC,CAAC;;EAEH,IAAI,KAAK,CAAC,YAAY,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE;IAClD,aAAa,GAAG,mBAAmB,GAAG,SAAS,QAAQ,GAAG;MACxD,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC7B,CAAC;GACH;;EAED,IAAI,qBAAqB,GAAG,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;EACnD,WAAW,CAAC,qBAAqB,EAAE,UAAU,CAAC,CAAC;EAC/C,IAAI,CAAC,qBAAqB,EAAE,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;EACzD,WAAW,CAAC,qBAAqB,EAAE;IACjC,KAAK,EAAE,MAAM;IACb,GAAG,EAAE,IAAI;IACT,WAAW,EAAE,YAAY,cAAc;IACvC,QAAQ,EAAE,aAAa;IACvB,cAAc,EAAE,eAAe;GAChC,CAAC,CAAC;EACH,SAAS,CAAC,qBAAqB,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;EAChD,SAAS,CAAC,qBAAqB,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;EACpD,SAAS,CAAC,qBAAqB,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;EACpD,SAAS,CAAC,qBAAqB,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;EAChD,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;IAC7B,GAAG,EAAE,YAAY,EAAE,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE;GAC/C,CAAC,CAAC;;;EAGH,cAAc,GAAG,UAAU,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE;IACvD,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;IACpB,IAAI,IAAI,GAAG,GAAG,IAAI,OAAO,GAAG,SAAS,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC;IACtD,IAAI,MAAM,GAAG,KAAK,GAAG,GAAG,CAAC;IACzB,IAAI,MAAM,GAAG,KAAK,GAAG,GAAG,CAAC;IACzB,IAAI,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,IAAI,GAAG,UAAU,IAAI,EAAE,CAAC;IAC5B,IAAI,GAAG,GAAG,UAAU,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC;IACnD,IAAI,MAAM,GAAG,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;IACxC,IAAI,CAAC,GAAG,EAAE,CAAC;IACX,IAAI,mBAAmB,GAAG,UAAU,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC;IAC9D,IAAI,MAAM,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE;MAClC,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;MACnB,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;KAC9D,CAAC;IACF,IAAI,MAAM,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;MACzC,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;MACnB,IAAI,OAAO,EAAE,KAAK,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC;MAC9F,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;KAC9D,CAAC;IACF,IAAI,UAAU,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE;MACtC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE;QACd,GAAG,EAAE,YAAY;UACf,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SAC5B;QACD,GAAG,EAAE,UAAU,KAAK,EAAE;UACpB,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;SACnC;QACD,UAAU,EAAE,IAAI;OACjB,CAAC,CAAC;KACJ,CAAC;IACF,IAAI,MAAM,EAAE;MACV,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE;QAC3D,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC;QACtC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;UACnB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;UACvB,UAAU,GAAG,MAAM,GAAG,KAAK,CAAC;UAC5B,MAAM,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC;SACvC,MAAM,IAAI,IAAI,YAAY,YAAY,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,YAAY,IAAI,KAAK,IAAI,aAAa,EAAE;UAC5G,MAAM,GAAG,IAAI,CAAC;UACd,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;UAClC,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;UAC3B,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,IAAI,IAAI,GAAG,KAAK,EAAE,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC;YACjD,UAAU,GAAG,IAAI,GAAG,MAAM,CAAC;YAC3B,IAAI,UAAU,GAAG,CAAC,EAAE,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC;WACpD,MAAM;YACL,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;YACvC,IAAI,UAAU,GAAG,MAAM,GAAG,IAAI,EAAE,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC;WAChE;UACD,MAAM,GAAG,UAAU,GAAG,KAAK,CAAC;SAC7B,MAAM,IAAI,WAAW,IAAI,IAAI,EAAE;UAC9B,OAAO,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;SACnC,MAAM;UACL,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;SACrC;QACD,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE;UACf,CAAC,EAAE,MAAM;UACT,CAAC,EAAE,MAAM;UACT,CAAC,EAAE,UAAU;UACb,CAAC,EAAE,MAAM;UACT,CAAC,EAAE,IAAI,SAAS,CAAC,MAAM,CAAC;SACzB,CAAC,CAAC;QACH,OAAO,KAAK,GAAG,MAAM,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;OAClD,CAAC,CAAC;MACH,mBAAmB,GAAG,UAAU,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;MAC5E,IAAI,CAAC,mBAAmB,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;KACtD,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;MAC5B,UAAU,CAAC,CAAC,CAAC,CAAC;KACf,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY;MACvB,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;KACpB,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,IAAI,EAAE;MACjC,IAAI,UAAU,EAAE,CAAC;MACjB,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;MACrB,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;MACpB,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;KACtB,EAAE,IAAI,CAAC,EAAE;MACR,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE;QAC3D,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC;;;QAGV,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACpD,IAAI,IAAI,YAAY,YAAY,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,YAAY,IAAI,KAAK,IAAI,aAAa,EAAE;UACrG,OAAO,OAAO,KAAK,SAAS;cACxB,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC;cACjD,OAAO,KAAK,SAAS;gBACnB,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBACxC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;SACtB;QACD,IAAI,WAAW,IAAI,IAAI,EAAE,OAAO,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC3D,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;OACrC,CAAC,CAAC;MACH,YAAY,CAAC,GAAG,KAAK,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,EAAE;QAClG,IAAI,EAAE,GAAG,IAAI,UAAU,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;OAC5D,CAAC,CAAC;MACH,UAAU,CAAC,SAAS,CAAC,GAAG,mBAAmB,CAAC;MAC5C,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,WAAW,GAAG,UAAU,CAAC;KAC5D;IACD,IAAI,eAAe,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACpD,IAAI,iBAAiB,GAAG,CAAC,CAAC,eAAe;UACnC,eAAe,CAAC,IAAI,IAAI,QAAQ,IAAI,eAAe,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC;IAC7E,IAAI,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC;IAClC,IAAI,CAAC,UAAU,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;IAC7C,IAAI,CAAC,mBAAmB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,mBAAmB,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;;IAEvD,IAAI,OAAO,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,GAAG,IAAI,mBAAmB,CAAC,EAAE;MAC5E,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,GAAG,EAAE,YAAY,EAAE,OAAO,IAAI,CAAC,EAAE;OAClC,CAAC,CAAC;KACJ;;IAED,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;;IAErB,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,UAAU,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;;IAErE,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE;MACvB,iBAAiB,EAAE,KAAK;KACzB,CAAC,CAAC;;IAEH,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE;MACzF,IAAI,EAAE,KAAK;MACX,EAAE,EAAE,GAAG;KACR,CAAC,CAAC;;IAEH,IAAI,EAAE,iBAAiB,IAAI,mBAAmB,CAAC,EAAE,IAAI,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;;IAErG,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;;IAEhC,UAAU,CAAC,IAAI,CAAC,CAAC;;IAEjB,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,UAAU,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;;IAEjE,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;;IAEtE,IAAI,CAAC,OAAO,IAAI,mBAAmB,CAAC,QAAQ,IAAI,aAAa,EAAE,mBAAmB,CAAC,QAAQ,GAAG,aAAa,CAAC;;IAE5G,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY;MAChD,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;KAC3B,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;;IAE7B,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,YAAY;MACjD,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;KAC3E,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY;MACvB,mBAAmB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KACjD,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC,CAAC;;IAEhD,SAAS,CAAC,IAAI,CAAC,GAAG,iBAAiB,GAAG,eAAe,GAAG,SAAS,CAAC;IAClE,IAAI,CAAC,OAAO,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,mBAAmB,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;GACpF,CAAC;CACH,MAAM,cAAc,GAAG,YAAY,eAAe,CAAC;;;AC/dpD/F,WAAyB,CAAC,MAAM,EAAE,CAAC,EAAE,UAAU,IAAI,EAAE;EACnD,OAAO,SAAS,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE;IAClD,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;GAC7C,CAAC;CACH,CAAC,CAAC;;ACJHA,WAAyB,CAAC,OAAO,EAAE,CAAC,EAAE,UAAU,IAAI,EAAE;EACpD,OAAO,SAAS,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE;IACnD,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;GAC7C,CAAC;CACH,CAAC,CAAC;;ACJHA,WAAyB,CAAC,OAAO,EAAE,CAAC,EAAE,UAAU,IAAI,EAAE;EACpD,OAAO,SAAS,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE;IAC1D,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;GAC7C,CAAC;CACH,EAAE,IAAI,CAAC,CAAC;;ACJTA,WAAyB,CAAC,OAAO,EAAE,CAAC,EAAE,UAAU,IAAI,EAAE;EACpD,OAAO,SAAS,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE;IACnD,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;GAC7C,CAAC;CACH,CAAC,CAAC;;ACJHA,WAAyB,CAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,IAAI,EAAE;EACrD,OAAO,SAAS,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE;IACpD,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;GAC7C,CAAC;CACH,CAAC,CAAC;;ACJHA,WAAyB,CAAC,OAAO,EAAE,CAAC,EAAE,UAAU,IAAI,EAAE;EACpD,OAAO,SAAS,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE;IACnD,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;GAC7C,CAAC;CACH,CAAC,CAAC;;ACJHA,WAAyB,CAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,IAAI,EAAE;EACrD,OAAO,SAAS,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE;IACpD,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;GAC7C,CAAC;CACH,CAAC,CAAC;;ACJHA,WAAyB,CAAC,SAAS,EAAE,CAAC,EAAE,UAAU,IAAI,EAAE;EACtD,OAAO,SAAS,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE;IACrD,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;GAC7C,CAAC;CACH,CAAC,CAAC;;ACJHA,WAAyB,CAAC,SAAS,EAAE,CAAC,EAAE,UAAU,IAAI,EAAE;EACtD,OAAO,SAAS,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE;IACrD,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;GAC7C,CAAC;CACH,CAAC,CAAC;;ACJH;;AAEA,aAAc,GAAG,UAAU,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;EACvD,IAAI;IACF,OAAO,OAAO,GAAG,EAAE,CAACI,SAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;;GAE/D,CAAC,OAAO,CAAC,EAAE;IACV,IAAI,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7B,IAAI,GAAG,KAAK,SAAS,EAAEA,SAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpD,MAAM,CAAC,CAAC;GACT;CACF,CAAC;;;ACLF,IAAI,KAAK,GAAG,EAAE,CAAC;AACf,IAAI,MAAM,GAAG,EAAE,CAAC;AAChB,IAAI,OAAO,GAAG,cAAc,GAAG,UAAU,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;EAC9E,IAAI,MAAM,GAAG,QAAQ,GAAG,YAAY,EAAE,OAAO,QAAQ,CAAC,EAAE,GAAG4F,sBAAS,CAAC,QAAQ,CAAC,CAAC;EAC/E,IAAI,CAAC,GAAGlF,IAAG,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;EACvC,IAAI,KAAK,GAAG,CAAC,CAAC;EACd,IAAI,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC;EACnC,IAAI,OAAO,MAAM,IAAI,UAAU,EAAE,MAAM,SAAS,CAAC,QAAQ,GAAG,mBAAmB,CAAC,CAAC;;EAEjF,IAAImF,YAAW,CAAC,MAAM,CAAC,EAAE,KAAK,MAAM,GAAG/E,SAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE;IACzF,MAAM,GAAG,OAAO,GAAG,CAAC,CAACd,SAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACxF,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE,OAAO,MAAM,CAAC;GAC1D,MAAM,KAAK,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,IAAI,GAAG;IAC7E,MAAM,GAAG8F,SAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAChD,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE,OAAO,MAAM,CAAC;GAC1D;CACF,CAAC;AACF,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;AACtB,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;;;;ACxBxB,IAAI,IAAI,GAAGlG,IAAiB,CAAC,MAAM,CAAC,CAAC;;;AAGrC,IAAI,OAAO,GAAGE,SAAuB,CAAC,CAAC,CAAC;AACxC,IAAI,EAAE,GAAG,CAAC,CAAC;AACX,IAAI,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,YAAY;EACpD,OAAO,IAAI,CAAC;CACb,CAAC;AACF,IAAI,MAAM,GAAG,CAACC,MAAmB,CAAC,YAAY;EAC5C,OAAO,YAAY,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;CACnD,CAAC,CAAC;AACH,IAAI,OAAO,GAAG,UAAU,EAAE,EAAE;EAC1B,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE;IACzB,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE;IACb,CAAC,EAAE,EAAE;GACN,EAAE,CAAC,CAAC;CACN,CAAC;AACF,IAAI,OAAO,GAAG,UAAU,EAAE,EAAE,MAAM,EAAE;;EAElC,IAAI,CAACJ,SAAQ,CAAC,EAAE,CAAC,EAAE,OAAO,OAAO,EAAE,IAAI,QAAQ,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,QAAQ,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC;EAChG,IAAI,CAACU,IAAG,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE;;IAElB,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,CAAC;;IAElC,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,CAAC;;IAExB,OAAO,CAAC,EAAE,CAAC,CAAC;;GAEb,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;CACrB,CAAC;AACF,IAAI,OAAO,GAAG,UAAU,EAAE,EAAE,MAAM,EAAE;EAClC,IAAI,CAACA,IAAG,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE;;IAElB,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,OAAO,IAAI,CAAC;;IAEnC,IAAI,CAAC,MAAM,EAAE,OAAO,KAAK,CAAC;;IAE1B,OAAO,CAAC,EAAE,CAAC,CAAC;;GAEb,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;CACrB,CAAC;;AAEF,IAAI,QAAQ,GAAG,UAAU,EAAE,EAAE;EAC3B,IAAI,MAAM,IAAI,IAAI,CAAC,IAAI,IAAI,YAAY,CAAC,EAAE,CAAC,IAAI,CAACA,IAAG,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;EAC3E,OAAO,EAAE,CAAC;CACX,CAAC;AACF,IAAI,IAAI,GAAG,cAAc,GAAG;EAC1B,GAAG,EAAE,IAAI;EACT,IAAI,EAAE,KAAK;EACX,OAAO,EAAE,OAAO;EAChB,OAAO,EAAE,OAAO;EAChB,QAAQ,EAAE,QAAQ;CACnB,CAAC;;;;;;;;ACnDF,uBAAc,GAAG,UAAU,EAAE,EAAE,IAAI,EAAE;EACnC,IAAI,CAACV,SAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,EAAE,MAAM,SAAS,CAAC,yBAAyB,GAAG,IAAI,GAAG,YAAY,CAAC,CAAC;EACtG,OAAO,EAAE,CAAC;CACX,CAAC;;ACHF,IAAIQ,IAAE,GAAGP,SAAuB,CAAC,CAAC,CAAC;;;;;;;;;;AAUnC,IAAI,OAAO,GAAGE,KAAkB,CAAC,OAAO,CAAC;;AAEzC,IAAI,IAAI,GAAGyB,YAAW,GAAG,IAAI,GAAG,MAAM,CAAC;;AAEvC,IAAI,QAAQ,GAAG,UAAU,IAAI,EAAE,GAAG,EAAE;;EAElC,IAAI,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;EACzB,IAAI,KAAK,CAAC;EACV,IAAI,KAAK,KAAK,GAAG,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;;EAEzC,KAAK,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC,EAAE;IAC5C,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG,EAAE,OAAO,KAAK,CAAC;GAClC;CACF,CAAC;;AAEF,qBAAc,GAAG;EACf,cAAc,EAAE,UAAU,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;IACtD,IAAI,CAAC,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,QAAQ,EAAE;MACxCG,WAAU,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;MAChC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;MACf,IAAI,CAAC,EAAE,GAAGuB,aAAM,CAAC,IAAI,CAAC,CAAC;MACvB,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;MACpB,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;MACpB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;MACf,IAAI,QAAQ,IAAI,SAAS,EAAE8C,MAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;KACvE,CAAC,CAAC;IACHnE,YAAW,CAAC,CAAC,CAAC,SAAS,EAAE;;;MAGvB,KAAK,EAAE,SAAS,KAAK,GAAG;QACtB,KAAK,IAAI,IAAI,GAAGoE,mBAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC,EAAE;UAC7F,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC;UACf,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;UAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACtB;QACD,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;OAChB;;;MAGD,QAAQ,EAAE,UAAU,GAAG,EAAE;QACvB,IAAI,IAAI,GAAGA,mBAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAChC,IAAI,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAChC,IAAI,KAAK,EAAE;UACT,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;UACnB,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;UACnB,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;UACxB,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC;UACf,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;UACxB,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;UACxB,IAAI,IAAI,CAAC,EAAE,IAAI,KAAK,EAAE,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;UACrC,IAAI,IAAI,CAAC,EAAE,IAAI,KAAK,EAAE,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;UACrC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;SACd,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC;OAClB;;;MAGD,OAAO,EAAE,SAAS,OAAO,CAAC,UAAU,2BAA2B;QAC7DA,mBAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,GAAGtF,IAAG,CAAC,UAAU,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC;QAC5E,IAAI,KAAK,CAAC;QACV,OAAO,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE;UACxC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;;UAE1B,OAAO,KAAK,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;SAC1C;OACF;;;MAGD,GAAG,EAAE,SAAS,GAAG,CAAC,GAAG,EAAE;QACrB,OAAO,CAAC,CAAC,QAAQ,CAACsF,mBAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;OAC9C;KACF,CAAC,CAAC;IACH,IAAIzE,YAAW,EAAEpB,IAAE,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE;MACvC,GAAG,EAAE,YAAY;QACf,OAAO6F,mBAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;OACnC;KACF,CAAC,CAAC;IACH,OAAO,CAAC,CAAC;GACV;EACD,GAAG,EAAE,UAAU,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE;IAC/B,IAAI,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAChC,IAAI,IAAI,EAAE,KAAK,CAAC;;IAEhB,IAAI,KAAK,EAAE;MACT,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC;;KAEjB,MAAM;MACL,IAAI,CAAC,EAAE,GAAG,KAAK,GAAG;QAChB,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC;QAC7B,CAAC,EAAE,GAAG;QACN,CAAC,EAAE,KAAK;QACR,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,EAAE;QACjB,CAAC,EAAE,SAAS;QACZ,CAAC,EAAE,KAAK;OACT,CAAC;MACF,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC;MAC9B,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;MACzB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;;MAEb,IAAI,KAAK,KAAK,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;KAC3C,CAAC,OAAO,IAAI,CAAC;GACf;EACD,QAAQ,EAAE,QAAQ;EAClB,SAAS,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE;;;IAGpCC,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,QAAQ,EAAE,IAAI,EAAE;MAC7C,IAAI,CAAC,EAAE,GAAGD,mBAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;MACnC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;MACf,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;KACrB,EAAE,YAAY;MACb,IAAI,IAAI,GAAG,IAAI,CAAC;MAChB,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;MACnB,IAAI,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC;;MAEpB,OAAO,KAAK,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;;MAEzC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;;QAEjE,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;QACpB,OAAO3C,SAAI,CAAC,CAAC,CAAC,CAAC;OAChB;;MAED,IAAI,IAAI,IAAI,MAAM,EAAE,OAAOA,SAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;MAC5C,IAAI,IAAI,IAAI,QAAQ,EAAE,OAAOA,SAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;MAC9C,OAAOA,SAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KACpC,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;;;IAGjD6C,WAAU,CAAC,IAAI,CAAC,CAAC;GAClB;CACF,CAAC;;AC/IF;;;;AAIA,IAAI,KAAK,GAAG,UAAU,CAAC,EAAE,KAAK,EAAE;EAC9BlG,SAAQ,CAAC,CAAC,CAAC,CAAC;EACZ,IAAI,CAACL,SAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,EAAE,MAAM,SAAS,CAAC,KAAK,GAAG,2BAA2B,CAAC,CAAC;CAC9F,CAAC;AACF,aAAc,GAAG;EACf,GAAG,EAAE,MAAM,CAAC,cAAc,KAAK,WAAW,IAAI,EAAE;IAC9C,UAAU,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;MAC1B,IAAI;QACF,GAAG,GAAGC,IAAiB,CAAC,QAAQ,CAAC,IAAI,EAAEE,WAAyB,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC1G,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACd,KAAK,GAAG,EAAE,IAAI,YAAY,KAAK,CAAC,CAAC;OAClC,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,GAAG,IAAI,CAAC,EAAE;MAC7B,OAAO,SAAS,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE;QACvC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAChB,IAAI,KAAK,EAAE,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC;aAC1B,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACnB,OAAO,CAAC,CAAC;OACV,CAAC;KACH,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC;EAC3B,KAAK,EAAE,KAAK;CACb,CAAC;;ACvBF,IAAI,cAAc,GAAGF,SAAuB,CAAC,GAAG,CAAC;AACjD,sBAAc,GAAG,UAAU,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE;EAC1C,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC;EAC3B,IAAI,CAAC,CAAC;EACN,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,UAAU,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,MAAM,CAAC,CAAC,SAAS,IAAID,SAAQ,CAAC,CAAC,CAAC,IAAI,cAAc,EAAE;IAC3G,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;GACzB,CAAC,OAAO,IAAI,CAAC;CACf,CAAC;;ACMF,eAAc,GAAG,UAAU,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;EAC1E,IAAI,IAAI,GAAGY,OAAM,CAAC,IAAI,CAAC,CAAC;EACxB,IAAI,CAAC,GAAG,IAAI,CAAC;EACb,IAAI,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;EACnC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;EAC7B,IAAI,CAAC,GAAG,EAAE,CAAC;EACX,IAAI,SAAS,GAAG,UAAU,GAAG,EAAE;IAC7B,IAAI,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACpBI,SAAQ,CAAC,KAAK,EAAE,GAAG;MACjB,GAAG,IAAI,QAAQ,GAAG,UAAU,CAAC,EAAE;QAC7B,OAAO,OAAO,IAAI,CAAChB,SAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;OACzE,GAAG,GAAG,IAAI,KAAK,GAAG,SAAS,GAAG,CAAC,CAAC,EAAE;QACjC,OAAO,OAAO,IAAI,CAACA,SAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;OACzE,GAAG,GAAG,IAAI,KAAK,GAAG,SAAS,GAAG,CAAC,CAAC,EAAE;QACjC,OAAO,OAAO,IAAI,CAACA,SAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;OAC7E,GAAG,GAAG,IAAI,KAAK,GAAG,SAAS,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,EAAE;UAC/E,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,EAAE;KAC3E,CAAC;GACH,CAAC;EACF,IAAI,OAAO,CAAC,IAAI,UAAU,IAAI,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,CAACkC,MAAK,CAAC,YAAY;IAC7E,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC;GAC1B,CAAC,CAAC,EAAE;;IAEH,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACxDD,YAAW,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAClCuE,KAAI,CAAC,IAAI,GAAG,IAAI,CAAC;GAClB,MAAM;IACL,IAAI,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC;;IAEvB,IAAI,cAAc,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,QAAQ,CAAC;;IAEvE,IAAI,oBAAoB,GAAGtE,MAAK,CAAC,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;;IAEnE,IAAI,gBAAgB,GAAGuE,WAAW,CAAC,UAAU,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;;IAErE,IAAI,UAAU,GAAG,CAAC,OAAO,IAAIvE,MAAK,CAAC,YAAY;;MAE7C,IAAI,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC;MACxB,IAAI,KAAK,GAAG,CAAC,CAAC;MACd,OAAO,KAAK,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;MAC/C,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KAC3B,CAAC,CAAC;IACH,IAAI,CAAC,gBAAgB,EAAE;MACrB,CAAC,GAAG,OAAO,CAAC,UAAU,MAAM,EAAE,QAAQ,EAAE;QACtCH,WAAU,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC5B,IAAI,IAAI,GAAG2E,kBAAiB,CAAC,IAAI,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QACpD,IAAI,QAAQ,IAAI,SAAS,EAAEN,MAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;QACtE,OAAO,IAAI,CAAC;OACb,CAAC,CAAC;MACH,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC;MACpB,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;KACvB;IACD,IAAI,oBAAoB,IAAI,UAAU,EAAE;MACtC,SAAS,CAAC,QAAQ,CAAC,CAAC;MACpB,SAAS,CAAC,KAAK,CAAC,CAAC;MACjB,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;KAC5B;IACD,IAAI,UAAU,IAAI,cAAc,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;;IAEnD,IAAI,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,KAAK,CAAC,KAAK,CAAC;GAChD;;EAEDhE,eAAc,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;;EAExB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EACZI,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;;EAE5D,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;;EAEhD,OAAO,CAAC,CAAC;CACV,CAAC;;ACjFF,IAAI,GAAG,GAAG,KAAK,CAAC;;;AAGhB,WAAc,GAAGvC,WAAwB,CAAC,GAAG,EAAE,UAAU,GAAG,EAAE;EAC5D,OAAO,SAAS,GAAG,GAAG,EAAE,OAAO,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC;CAC9F,EAAE;;EAED,GAAG,EAAE,SAAS,GAAG,CAAC,GAAG,EAAE;IACrB,IAAI,KAAK,GAAG0G,iBAAM,CAAC,QAAQ,CAACN,mBAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACtD,OAAO,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC;GACzB;;EAED,GAAG,EAAE,SAAS,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE;IAC5B,OAAOM,iBAAM,CAAC,GAAG,CAACN,mBAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC;GACpE;CACF,EAAEM,iBAAM,EAAE,IAAI,CAAC,CAAC;;ACfjB,IAAI,GAAG,GAAG,KAAK,CAAC;;;AAGhB,WAAc,GAAG1G,WAAwB,CAAC,GAAG,EAAE,UAAU,GAAG,EAAE;EAC5D,OAAO,SAAS,GAAG,GAAG,EAAE,OAAO,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC;CAC9F,EAAE;;EAED,GAAG,EAAE,SAAS,GAAG,CAAC,KAAK,EAAE;IACvB,OAAO0G,iBAAM,CAAC,GAAG,CAACN,mBAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC;GAChF;CACF,EAAEM,iBAAM,CAAC,CAAC;;ACbX,OAAS,GAAG,MAAM,CAAC,qBAAqB,CAAC;;;;;;;;;;;;ACOzC,IAAI,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;;;AAG5B,iBAAc,GAAG,CAAC,OAAO,IAAI1G,MAAmB,CAAC,YAAY;EAC3D,IAAI,CAAC,GAAG,EAAE,CAAC;EACX,IAAI,CAAC,GAAG,EAAE,CAAC;;EAEX,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC;EACjB,IAAI,CAAC,GAAG,sBAAsB,CAAC;EAC/B,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EACT,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;EAChD,OAAO,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;CAC5E,CAAC,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE;EACnC,IAAI,CAAC,GAAG0B,SAAQ,CAAC,MAAM,CAAC,CAAC;EACzB,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC;EAC5B,IAAI,KAAK,GAAG,CAAC,CAAC;EACd,IAAI,UAAU,GAAGiF,WAAI,CAAC,CAAC,CAAC;EACxB,IAAI,MAAM,GAAGhD,UAAG,CAAC,CAAC,CAAC;EACnB,OAAO,IAAI,GAAG,KAAK,EAAE;IACnB,IAAI,CAAC,GAAGvC,QAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACpC,IAAI,IAAI,GAAG,UAAU,GAAGwB,WAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAGA,WAAO,CAAC,CAAC,CAAC,CAAC;IACtE,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACzB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,GAAG,CAAC;IACR,OAAO,MAAM,GAAG,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;GACzE,CAAC,OAAO,CAAC,CAAC;CACZ,GAAG,OAAO,CAAC;;AC/BZ,IAAI,OAAO,GAAG5C,KAAkB,CAAC,OAAO,CAAC;;;;;;;;AAQzC,IAAI,SAAS,GAAG4G,aAAiB,CAAC,CAAC,CAAC,CAAC;AACrC,IAAI,cAAc,GAAGA,aAAiB,CAAC,CAAC,CAAC,CAAC;AAC1C,IAAIC,IAAE,GAAG,CAAC,CAAC;;;AAGX,IAAI,mBAAmB,GAAG,UAAU,IAAI,EAAE;EACxC,OAAO,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,GAAG,IAAI,mBAAmB,EAAE,CAAC,CAAC;CACzD,CAAC;AACF,IAAI,mBAAmB,GAAG,YAAY;EACpC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;CACb,CAAC;AACF,IAAI,kBAAkB,GAAG,UAAU,KAAK,EAAE,GAAG,EAAE;EAC7C,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE;IACtC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;GACtB,CAAC,CAAC;CACJ,CAAC;AACF,mBAAmB,CAAC,SAAS,GAAG;EAC9B,GAAG,EAAE,UAAU,GAAG,EAAE;IAClB,IAAI,KAAK,GAAG,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC1C,IAAI,KAAK,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;GAC5B;EACD,GAAG,EAAE,UAAU,GAAG,EAAE;IAClB,OAAO,CAAC,CAAC,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;GACxC;EACD,GAAG,EAAE,UAAU,GAAG,EAAE,KAAK,EAAE;IACzB,IAAI,KAAK,GAAG,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC1C,IAAI,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;SACvB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;GAChC;EACD,QAAQ,EAAE,UAAU,GAAG,EAAE;IACvB,IAAI,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE;MAC/C,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;KACtB,CAAC,CAAC;IACH,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACpC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;GACjB;CACF,CAAC;;AAEF,mBAAc,GAAG;EACf,cAAc,EAAE,UAAU,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;IACtD,IAAI,CAAC,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,QAAQ,EAAE;MACxC/E,WAAU,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;MAChC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;MACf,IAAI,CAAC,EAAE,GAAG+E,IAAE,EAAE,CAAC;MACf,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;MACpB,IAAI,QAAQ,IAAI,SAAS,EAAEV,MAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;KACvE,CAAC,CAAC;IACHnE,YAAW,CAAC,CAAC,CAAC,SAAS,EAAE;;;MAGvB,QAAQ,EAAE,UAAU,GAAG,EAAE;QACvB,IAAI,CAACjC,SAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK,CAAC;QACjC,IAAI,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,IAAI,KAAK,IAAI,EAAE,OAAO,mBAAmB,CAACqG,mBAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;QACnF,OAAO,IAAI,IAAIU,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;OAC5D;;;MAGD,GAAG,EAAE,SAAS,GAAG,CAAC,GAAG,EAAE;QACrB,IAAI,CAAC/G,SAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK,CAAC;QACjC,IAAI,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,IAAI,KAAK,IAAI,EAAE,OAAO,mBAAmB,CAACqG,mBAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7E,OAAO,IAAI,IAAIU,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;OACpC;KACF,CAAC,CAAC;IACH,OAAO,CAAC,CAAC;GACV;EACD,GAAG,EAAE,UAAU,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE;IAC/B,IAAI,IAAI,GAAG,OAAO,CAAC1G,SAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IACxC,IAAI,IAAI,KAAK,IAAI,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SACxD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;IAC3B,OAAO,IAAI,CAAC;GACb;EACD,OAAO,EAAE,mBAAmB;CAC7B,CAAC;;;ACpFF,AACA,IAAI,IAAI,GAAGJ,aAA2B,CAAC,CAAC,CAAC,CAAC;;;;;;;;AAQ1C,IAAI,QAAQ,GAAG,SAAS,CAAC;AACzB,IAAI,OAAO,GAAGuG,KAAI,CAAC,OAAO,CAAC;AAC3B,IAAI,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACvC,IAAI,mBAAmB,GAAGQ,eAAI,CAAC,OAAO,CAAC;AACvC,IAAI,GAAG,GAAG,EAAE,CAAC;AACb,IAAI,WAAW,CAAC;;AAEhB,IAAI,OAAO,GAAG,UAAU,GAAG,EAAE;EAC3B,OAAO,SAAS,OAAO,GAAG;IACxB,OAAO,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;GACnE,CAAC;CACH,CAAC;;AAEF,IAAI,OAAO,GAAG;;EAEZ,GAAG,EAAE,SAAS,GAAG,CAAC,GAAG,EAAE;IACrB,IAAIhH,SAAQ,CAAC,GAAG,CAAC,EAAE;MACjB,IAAI,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;MACxB,IAAI,IAAI,KAAK,IAAI,EAAE,OAAO,mBAAmB,CAACqG,mBAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;MACjF,OAAO,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;KACzC;GACF;;EAED,GAAG,EAAE,SAAS,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE;IAC5B,OAAOW,eAAI,CAAC,GAAG,CAACX,mBAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;GACvD;CACF,CAAC;;;AAGF,IAAI,QAAQ,GAAG,cAAc,GAAGlG,WAAwB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE6G,eAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;;;AAGvG,IAAI9E,MAAK,CAAC,YAAY,EAAE,OAAO,IAAI,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE;EACtG,WAAW,GAAG8E,eAAI,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;EACrDC,aAAM,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;EACvCT,KAAI,CAAC,IAAI,GAAG,IAAI,CAAC;EACjB,IAAI,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,EAAE;IACnD,IAAI,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC;IAC/B,IAAI,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACxBxF,SAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE;;MAEnC,IAAIhB,SAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACnC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,GAAG,IAAI,WAAW,EAAE,CAAC;QAC1C,IAAI,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAChC,OAAO,GAAG,IAAI,KAAK,GAAG,IAAI,GAAG,MAAM,CAAC;;OAErC,CAAC,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KAClC,CAAC,CAAC;GACJ,CAAC,CAAC;CACJ;;;ACvDD,IAAI,QAAQ,GAAG,SAAS,CAAC;;;AAGzBC,WAAwB,CAAC,QAAQ,EAAE,UAAU,GAAG,EAAE;EAChD,OAAO,SAAS,OAAO,GAAG,EAAE,OAAO,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC;CAClG,EAAE;;EAED,GAAG,EAAE,SAAS,GAAG,CAAC,KAAK,EAAE;IACvB,OAAO+G,eAAI,CAAC,GAAG,CAACX,mBAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;GACxD;CACF,EAAEW,eAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;;ACbtB;;;;AAIA,IAAI,MAAM,GAAG,CAAC/G,OAAoB,CAAC,OAAO,IAAI,EAAE,EAAE,KAAK,CAAC;AACxD,IAAI,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC;;AAE5BuC,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAG,CAACrC,MAAmB,CAAC,YAAY;EAC/D,MAAM,CAAC,YAAY,eAAe,CAAC,CAAC;CACrC,CAAC,EAAE,SAAS,EAAE;EACb,KAAK,EAAE,SAAS,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE;IACzD,IAAI,CAAC,GAAGU,UAAS,CAAC,MAAM,CAAC,CAAC;IAC1B,IAAI,CAAC,GAAGR,SAAQ,CAAC,aAAa,CAAC,CAAC;IAChC,OAAO,MAAM,GAAG,MAAM,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;GAC9E;CACF,CAAC,CAAC;;ACfH;AACA,WAAc,GAAG,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;EACzC,IAAI,EAAE,GAAG,IAAI,KAAK,SAAS,CAAC;EAC5B,QAAQ,IAAI,CAAC,MAAM;IACjB,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;wBACJ,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACX,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;wBACpB,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;wBAC7B,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;wBACtC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;GACvE,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;CAC/B,CAAC;;ACXF,IAAI,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC;AAC1B,IAAI,SAAS,GAAG,EAAE,CAAC;;AAEnB,IAAI,SAAS,GAAG,UAAU,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE;EACtC,IAAI,EAAE,GAAG,IAAI,SAAS,CAAC,EAAE;IACvB,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC;;IAE5D,SAAS,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;GACvE,CAAC,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;CAClC,CAAC;;AAEF,SAAc,GAAG,QAAQ,CAAC,IAAI,IAAI,SAAS,IAAI,CAAC,IAAI,kBAAkB;EACpE,IAAI,EAAE,GAAGQ,UAAS,CAAC,IAAI,CAAC,CAAC;EACzB,IAAI,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;EAC7C,IAAI,KAAK,GAAG,yBAAyB;IACnC,IAAI,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACvD,OAAO,IAAI,YAAY,KAAK,GAAG,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAGqG,OAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;GAC1F,CAAC;EACF,IAAIlH,SAAQ,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC;EAC3D,OAAO,KAAK,CAAC;CACd,CAAC;;ACxBF;;;;;;;;AAQA,IAAI,UAAU,GAAG,CAACC,OAAoB,CAAC,OAAO,IAAI,EAAE,EAAE,SAAS,CAAC;;;;AAIhE,IAAI,cAAc,GAAGiC,MAAK,CAAC,YAAY;EACrC,SAAS,CAAC,GAAG,eAAe;EAC5B,OAAO,EAAE,UAAU,CAAC,YAAY,eAAe,EAAE,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;CACvE,CAAC,CAAC;AACH,IAAI,QAAQ,GAAG,CAACA,MAAK,CAAC,YAAY;EAChC,UAAU,CAAC,YAAY,eAAe,CAAC,CAAC;CACzC,CAAC,CAAC;;AAEHM,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,IAAI,cAAc,IAAI,QAAQ,CAAC,EAAE,SAAS,EAAE;EACvE,SAAS,EAAE,SAAS,SAAS,CAAC,MAAM,EAAE,IAAI,oBAAoB;IAC5D3B,UAAS,CAAC,MAAM,CAAC,CAAC;IAClBR,SAAQ,CAAC,IAAI,CAAC,CAAC;IACf,IAAI,SAAS,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,GAAGQ,UAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,IAAI,QAAQ,IAAI,CAAC,cAAc,EAAE,OAAO,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAC5E,IAAI,MAAM,IAAI,SAAS,EAAE;;MAEvB,QAAQ,IAAI,CAAC,MAAM;QACjB,KAAK,CAAC,EAAE,OAAO,IAAI,MAAM,EAAE,CAAC;QAC5B,KAAK,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,KAAK,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,KAAK,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,KAAK,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;OAC/D;;MAED,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;MACnB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;MAC9B,OAAO,KAAKsG,KAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC;KAC1C;;IAED,IAAI,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC;IAChC,IAAI,QAAQ,GAAG7D,aAAM,CAACtD,SAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IAClE,IAAI,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IACzD,OAAOA,SAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,QAAQ,CAAC;GAC7C;CACF,CAAC,CAAC;;AC9CH;;;;;;;AAOAwC,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAGvC,MAAmB,CAAC,YAAY;;EAE9D,OAAO,CAAC,cAAc,CAACO,SAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;CACpE,CAAC,EAAE,SAAS,EAAE;EACb,cAAc,EAAE,SAAS,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE;IACvEH,SAAQ,CAAC,MAAM,CAAC,CAAC;IACjB,WAAW,GAAGC,YAAW,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAC7CD,SAAQ,CAAC,UAAU,CAAC,CAAC;IACrB,IAAI;MACFG,SAAE,CAAC,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;MACtC,OAAO,IAAI,CAAC;KACb,CAAC,OAAO,CAAC,EAAE;MACV,OAAO,KAAK,CAAC;KACd;GACF;CACF,CAAC,CAAC;;ACtBH;;AAEA,IAAI4G,MAAI,GAAGnH,WAAyB,CAAC,CAAC,CAAC;;;AAGvCuC,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE;EAC5B,cAAc,EAAE,SAAS,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE;IAC3D,IAAI,IAAI,GAAG4E,MAAI,CAAC/G,SAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC;IAC/C,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,KAAK,GAAG,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC;GACxE;CACF,CAAC,CAAC;;ACVH;;;;;;;;AAQA,SAAS,GAAG,CAAC,MAAM,EAAE,WAAW,mBAAmB;EACjD,IAAI,QAAQ,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;EAC5D,IAAI,IAAI,EAAE,KAAK,CAAC;EAChB,IAAIA,SAAQ,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC;EAC9D,IAAI,IAAI,GAAG+G,WAAI,CAAC,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO1G,IAAG,CAAC,IAAI,EAAE,OAAO,CAAC;MAC7D,IAAI,CAAC,KAAK;MACV,IAAI,CAAC,GAAG,KAAK,SAAS;QACpB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;QACvB,SAAS,CAAC;EAChB,IAAIV,SAAQ,CAAC,KAAK,GAAGyD,UAAc,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;CACxF;;AAEDjB,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;;ACpB5C;;;;;AAKAA,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE;EAC5B,wBAAwB,EAAE,SAAS,wBAAwB,CAAC,MAAM,EAAE,WAAW,EAAE;IAC/E,OAAO4E,WAAI,CAAC,CAAC,CAAC/G,SAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC;GAC9C;CACF,CAAC,CAAC;;ACTH;;;;;AAKAmC,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE;EAC5B,cAAc,EAAE,SAAS,cAAc,CAAC,MAAM,EAAE;IAC9C,OAAO6E,UAAQ,CAAChH,SAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;GACnC;CACF,CAAC,CAAC;;ACTH;;;AAGAmC,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE;EAC5B,GAAG,EAAE,SAAS,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE;IACrC,OAAO,WAAW,IAAI,MAAM,CAAC;GAC9B;CACF,CAAC,CAAC;;ACPH;;;AAGA,IAAI,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC;;AAExCA,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE;EAC5B,YAAY,EAAE,SAAS,YAAY,CAAC,MAAM,EAAE;IAC1CnC,SAAQ,CAAC,MAAM,CAAC,CAAC;IACjB,OAAO,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;GACrD;CACF,CAAC,CAAC;;ACVH;;;;AAIA,IAAIiH,SAAO,GAAGrH,OAAoB,CAAC,OAAO,CAAC;AAC3C,YAAc,GAAGqH,SAAO,IAAIA,SAAO,CAAC,OAAO,IAAI,SAAS,OAAO,CAAC,EAAE,EAAE;EAClE,IAAI,IAAI,GAAGC,WAAI,CAAC,CAAC,CAAClH,SAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;EAChC,IAAI,UAAU,GAAGuG,WAAI,CAAC,CAAC,CAAC;EACxB,OAAO,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;CACxD,CAAC;;ACTF;;;AAGApE,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,OAAO,EAAEvC,QAAsB,EAAE,CAAC,CAAC;;ACHnE;;;AAGA,IAAI,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAElDuC,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE;EAC5B,iBAAiB,EAAE,SAAS,iBAAiB,CAAC,MAAM,EAAE;IACpDnC,SAAQ,CAAC,MAAM,CAAC,CAAC;IACjB,IAAI;MACF,IAAI,kBAAkB,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;MACnD,OAAO,IAAI,CAAC;KACb,CAAC,OAAO,CAAC,EAAE;MACV,OAAO,KAAK,CAAC;KACd;GACF;CACF,CAAC,CAAC;;ACfH;;;;;;;;;;AAUA,SAAS,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,mBAAmB;EACpD,IAAI,QAAQ,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;EAC5D,IAAI,OAAO,GAAG+G,WAAI,CAAC,CAAC,CAAC/G,SAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC;EACpD,IAAI,kBAAkB,EAAE,KAAK,CAAC;EAC9B,IAAI,CAAC,OAAO,EAAE;IACZ,IAAIL,SAAQ,CAAC,KAAK,GAAGyD,UAAc,CAAC,MAAM,CAAC,CAAC,EAAE;MAC5C,OAAO,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;KAC7C;IACD,OAAO,GAAGhD,aAAU,CAAC,CAAC,CAAC,CAAC;GACzB;EACD,IAAIC,IAAG,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE;IACzB,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,IAAI,CAACV,SAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,KAAK,CAAC;IACpE,IAAI,kBAAkB,GAAGoH,WAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE;MACtD,IAAI,kBAAkB,CAAC,GAAG,IAAI,kBAAkB,CAAC,GAAG,IAAI,kBAAkB,CAAC,QAAQ,KAAK,KAAK,EAAE,OAAO,KAAK,CAAC;MAC5G,kBAAkB,CAAC,KAAK,GAAG,CAAC,CAAC;MAC7B5G,SAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAC;KACjD,MAAMA,SAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAEC,aAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC;GACb;EACD,OAAO,OAAO,CAAC,GAAG,KAAK,SAAS,GAAG,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;CAClF;;AAED+B,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;;AChC5C;;;;AAIA,IAAIgF,SAAQ,EAAEhF,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE;EAC1C,cAAc,EAAE,SAAS,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE;IACrDgF,SAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9B,IAAI;MACFA,SAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;MAC5B,OAAO,IAAI,CAAC;KACb,CAAC,OAAO,CAAC,EAAE;MACV,OAAO,KAAK,CAAC;KACd;GACF;CACF,CAAC,CAAC;;ACTH,IAAI,OAAO,GAAG5G,OAAM,CAAC,OAAO,CAAC;AAC7B,IAAI,OAAO,GAAGA,OAAM,CAAC,YAAY,CAAC;AAClC,IAAI,SAAS,GAAGA,OAAM,CAAC,cAAc,CAAC;AACtC,IAAI,cAAc,GAAGA,OAAM,CAAC,cAAc,CAAC;AAC3C,IAAI,QAAQ,GAAGA,OAAM,CAAC,QAAQ,CAAC;AAC/B,IAAI,OAAO,GAAG,CAAC,CAAC;AAChB,IAAI,KAAK,GAAG,EAAE,CAAC;AACf,IAAI,kBAAkB,GAAG,oBAAoB,CAAC;AAC9C,IAAI,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC;AACzB,IAAI,GAAG,GAAG,YAAY;EACpB,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC;;EAEf,IAAI,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE;IAC5B,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;IACnB,OAAO,KAAK,CAAC,EAAE,CAAC,CAAC;IACjB,EAAE,EAAE,CAAC;GACN;CACF,CAAC;AACF,IAAI,QAAQ,GAAG,UAAU,KAAK,EAAE;EAC9B,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;CACtB,CAAC;;AAEF,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,EAAE;EAC1B,OAAO,GAAG,SAAS,YAAY,CAAC,EAAE,EAAE;IAClC,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvD,KAAK,CAAC,EAAE,OAAO,CAAC,GAAG,YAAY;;MAE7BsG,OAAM,CAAC,OAAO,EAAE,IAAI,UAAU,GAAG,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;KAC3D,CAAC;IACF,KAAK,CAAC,OAAO,CAAC,CAAC;IACf,OAAO,OAAO,CAAC;GAChB,CAAC;EACF,SAAS,GAAG,SAAS,cAAc,CAAC,EAAE,EAAE;IACtC,OAAO,KAAK,CAAC,EAAE,CAAC,CAAC;GAClB,CAAC;;EAEF,IAAIjH,IAAiB,CAAC,OAAO,CAAC,IAAI,SAAS,EAAE;IAC3C,KAAK,GAAG,UAAU,EAAE,EAAE;MACpB,OAAO,CAAC,QAAQ,CAACc,IAAG,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;KACnC,CAAC;;GAEH,MAAM,IAAI,QAAQ,IAAI,QAAQ,CAAC,GAAG,EAAE;IACnC,KAAK,GAAG,UAAU,EAAE,EAAE;MACpB,QAAQ,CAAC,GAAG,CAACA,IAAG,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;KAC/B,CAAC;;GAEH,MAAM,IAAI,cAAc,EAAE;IACzB,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;IAC/B,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;IACrB,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC;IACnC,KAAK,GAAGA,IAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;;;GAGxC,MAAM,IAAIH,OAAM,CAAC,gBAAgB,IAAI,OAAO,WAAW,IAAI,UAAU,IAAI,CAACA,OAAM,CAAC,aAAa,EAAE;IAC/F,KAAK,GAAG,UAAU,EAAE,EAAE;MACpBA,OAAM,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;KAClC,CAAC;IACFA,OAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;;GAErD,MAAM,IAAI,kBAAkB,IAAI6G,UAAG,CAAC,QAAQ,CAAC,EAAE;IAC9C,KAAK,GAAG,UAAU,EAAE,EAAE;MACpBC,KAAI,CAAC,WAAW,CAACD,UAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,YAAY;QAChEC,KAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACvB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;OACd,CAAC;KACH,CAAC;;GAEH,MAAM;IACL,KAAK,GAAG,UAAU,EAAE,EAAE;MACpB,UAAU,CAAC3G,IAAG,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KAChC,CAAC;GACH;CACF;AACD,SAAc,GAAG;EACf,GAAG,EAAE,OAAO;EACZ,KAAK,EAAE,SAAS;CACjB,CAAC;;AClFF,IAAI,SAAS,GAAGd,KAAkB,CAAC,GAAG,CAAC;AACvC,IAAI,QAAQ,GAAGW,OAAM,CAAC,gBAAgB,IAAIA,OAAM,CAAC,sBAAsB,CAAC;AACxE,IAAI+G,SAAO,GAAG/G,OAAM,CAAC,OAAO,CAAC;AAC7B,IAAIgH,SAAO,GAAGhH,OAAM,CAAC,OAAO,CAAC;AAC7B,IAAI,MAAM,GAAGT,IAAiB,CAACwH,SAAO,CAAC,IAAI,SAAS,CAAC;;AAErD,cAAc,GAAG,YAAY;EAC3B,IAAI,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC;;EAEvB,IAAI,KAAK,GAAG,YAAY;IACtB,IAAI,MAAM,EAAE,EAAE,CAAC;IACf,IAAI,MAAM,KAAK,MAAM,GAAGA,SAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IACvD,OAAO,IAAI,EAAE;MACX,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;MACb,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;MACjB,IAAI;QACF,EAAE,EAAE,CAAC;OACN,CAAC,OAAO,CAAC,EAAE;QACV,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;aACd,IAAI,GAAG,SAAS,CAAC;QACtB,MAAM,CAAC,CAAC;OACT;KACF,CAAC,IAAI,GAAG,SAAS,CAAC;IACnB,IAAI,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;GAC5B,CAAC;;;EAGF,IAAI,MAAM,EAAE;IACV,MAAM,GAAG,YAAY;MACnBA,SAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KACzB,CAAC;;GAEH,MAAM,IAAI,QAAQ,IAAI,EAAE/G,OAAM,CAAC,SAAS,IAAIA,OAAM,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE;IACzE,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IACvC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,MAAM,GAAG,YAAY;MACnB,IAAI,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC;KAC9B,CAAC;;GAEH,MAAM,IAAIgH,SAAO,IAAIA,SAAO,CAAC,OAAO,EAAE;;IAErC,IAAI,OAAO,GAAGA,SAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,GAAG,YAAY;MACnB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACrB,CAAC;;;;;;;GAOH,MAAM;IACL,MAAM,GAAG,YAAY;;MAEnB,SAAS,CAAC,IAAI,CAAChH,OAAM,EAAE,KAAK,CAAC,CAAC;KAC/B,CAAC;GACH;;EAED,OAAO,UAAU,EAAE,EAAE;IACnB,IAAI,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACvC,IAAI,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAC3B,IAAI,CAAC,IAAI,EAAE;MACT,IAAI,GAAG,IAAI,CAAC;MACZ,MAAM,EAAE,CAAC;KACV,CAAC,IAAI,GAAG,IAAI,CAAC;GACf,CAAC;CACH,CAAC;;;;;AChEF,SAAS,iBAAiB,CAAC,CAAC,EAAE;EAC5B,IAAI,OAAO,EAAE,MAAM,CAAC;EACpB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,UAAU,SAAS,EAAE,QAAQ,EAAE;IAClD,IAAI,OAAO,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC,yBAAyB,CAAC,CAAC;IAC9F,OAAO,GAAG,SAAS,CAAC;IACpB,MAAM,GAAG,QAAQ,CAAC;GACnB,CAAC,CAAC;EACH,IAAI,CAAC,OAAO,GAAGC,UAAS,CAAC,OAAO,CAAC,CAAC;EAClC,IAAI,CAAC,MAAM,GAAGA,UAAS,CAAC,MAAM,CAAC,CAAC;CACjC;;AAED,OAAgB,GAAG,UAAU,CAAC,EAAE;EAC9B,OAAO,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC;CACjC,CAAC;;;;;;ACjBF,YAAc,GAAG,UAAU,IAAI,EAAE;EAC/B,IAAI;IACF,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;GAChC,CAAC,OAAO,CAAC,EAAE;IACV,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;GAC1B;CACF,CAAC;;ACLF,IAAIgH,WAAS,GAAGjH,OAAM,CAAC,SAAS,CAAC;;AAEjC,cAAc,GAAGiH,WAAS,IAAIA,WAAS,CAAC,SAAS,IAAI,EAAE,CAAC;;ACCxD,mBAAc,GAAG,UAAU,CAAC,EAAE,CAAC,EAAE;EAC/BxH,SAAQ,CAAC,CAAC,CAAC,CAAC;EACZ,IAAIL,SAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;EACjD,IAAI,iBAAiB,GAAG8H,qBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAClD,IAAI,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC;EACxC,OAAO,CAAC,CAAC,CAAC,CAAC;EACX,OAAO,iBAAiB,CAAC,OAAO,CAAC;CAClC,CAAC;;ACAF,IAAI,IAAI,GAAG7H,KAAkB,CAAC,GAAG,CAAC;AAClC,IAAI,SAAS,GAAGE,UAAuB,EAAE,CAAC;;;;;AAK1C,IAAI,OAAO,GAAG,SAAS,CAAC;AACxB,IAAI4H,WAAS,GAAGnH,OAAM,CAAC,SAAS,CAAC;AACjC,IAAI+G,SAAO,GAAG/G,OAAM,CAAC,OAAO,CAAC;AAC7B,IAAI,QAAQ,GAAG+G,SAAO,IAAIA,SAAO,CAAC,QAAQ,CAAC;AAC3C,IAAI,EAAE,GAAG,QAAQ,IAAI,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;AACvC,IAAI,QAAQ,GAAG/G,OAAM,CAAC,OAAO,CAAC,CAAC;AAC/B,IAAIoH,QAAM,GAAG9E,QAAO,CAACyE,SAAO,CAAC,IAAI,SAAS,CAAC;AAC3C,IAAI,KAAK,GAAG,YAAY,eAAe,CAAC;AACxC,IAAI,QAAQ,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,OAAO,CAAC;AACzE,IAAI,oBAAoB,GAAG,2BAA2B,GAAGM,qBAA0B,CAAC,CAAC,CAAC;;AAEtF,IAAI,UAAU,GAAG,CAAC,CAAC,YAAY;EAC7B,IAAI;;IAEF,IAAI,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAClC,IAAI,WAAW,GAAG,CAAC,OAAO,CAAC,WAAW,GAAG,EAAE,EAAE7H,IAAiB,CAAC,SAAS,CAAC,CAAC,GAAG,UAAU,IAAI,EAAE;MAC3F,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;KACpB,CAAC;;IAEF,OAAO,CAAC4H,QAAM,IAAI,OAAO,qBAAqB,IAAI,UAAU;SACvD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,WAAW;;;;SAI1C,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;SACvBE,UAAS,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;GAC5C,CAAC,OAAO,CAAC,EAAE,eAAe;CAC5B,EAAE,CAAC;;;AAGJ,IAAI,UAAU,GAAG,UAAU,EAAE,EAAE;EAC7B,IAAI,IAAI,CAAC;EACT,OAAOlI,SAAQ,CAAC,EAAE,CAAC,IAAI,QAAQ,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,UAAU,GAAG,IAAI,GAAG,KAAK,CAAC;CAC7E,CAAC;AACF,IAAI,MAAM,GAAG,UAAU,OAAO,EAAE,QAAQ,EAAE;EACxC,IAAI,OAAO,CAAC,EAAE,EAAE,OAAO;EACvB,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC;EAClB,IAAI,KAAK,GAAG,OAAO,CAAC,EAAE,CAAC;EACvB,SAAS,CAAC,YAAY;IACpB,IAAI,KAAK,GAAG,OAAO,CAAC,EAAE,CAAC;IACvB,IAAI,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;IACzB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,GAAG,GAAG,UAAU,QAAQ,EAAE;MAC5B,IAAI,OAAO,GAAG,EAAE,GAAG,QAAQ,CAAC,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC;MAC/C,IAAI,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;MAC/B,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;MAC7B,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;MAC7B,IAAI,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC;MACzB,IAAI;QACF,IAAI,OAAO,EAAE;UACX,IAAI,CAAC,EAAE,EAAE;YACP,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAChD,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;WAChB;UACD,IAAI,OAAO,KAAK,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;eAChC;YACH,IAAI,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;YAC3B,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YACxB,IAAI,MAAM,EAAE;cACV,MAAM,CAAC,IAAI,EAAE,CAAC;cACd,MAAM,GAAG,IAAI,CAAC;aACf;WACF;UACD,IAAI,MAAM,KAAK,QAAQ,CAAC,OAAO,EAAE;YAC/B,MAAM,CAAC+H,WAAS,CAAC,qBAAqB,CAAC,CAAC,CAAC;WAC1C,MAAM,IAAI,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,EAAE;YACpC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;WACpC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;SACxB,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;OACtB,CAAC,OAAO,CAAC,EAAE;QACV,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QACrC,MAAM,CAAC,CAAC,CAAC,CAAC;OACX;KACF,CAAC;IACF,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,GAAG,KAAK,CAAC;IACnB,IAAI,QAAQ,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;GACnD,CAAC,CAAC;CACJ,CAAC;AACF,IAAI,WAAW,GAAG,UAAU,OAAO,EAAE;EACnC,IAAI,CAAC,IAAI,CAACnH,OAAM,EAAE,YAAY;IAC5B,IAAI,KAAK,GAAG,OAAO,CAAC,EAAE,CAAC;IACvB,IAAI,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC;IAC7B,IAAI,SAAS,EAAE;MACb,MAAM,GAAGuH,QAAO,CAAC,YAAY;QAC3B,IAAIH,QAAM,EAAE;UACVL,SAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;SACpD,MAAM,IAAI,OAAO,GAAG/G,OAAM,CAAC,oBAAoB,EAAE;UAChD,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;SAC9C,MAAM,IAAI,CAAC,OAAO,GAAGA,OAAM,CAAC,OAAO,KAAK,OAAO,CAAC,KAAK,EAAE;UACtD,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;SACrD;OACF,CAAC,CAAC;;MAEH,OAAO,CAAC,EAAE,GAAGoH,QAAM,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KACrD,CAAC,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;IACzB,IAAI,SAAS,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,MAAM,CAAC,CAAC,CAAC;GAC3C,CAAC,CAAC;CACJ,CAAC;AACF,IAAI,WAAW,GAAG,UAAU,OAAO,EAAE;EACnC,OAAO,OAAO,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,EAAE,EAAE,MAAM,KAAK,CAAC,CAAC;CACpE,CAAC;AACF,IAAI,iBAAiB,GAAG,UAAU,OAAO,EAAE;EACzC,IAAI,CAAC,IAAI,CAACpH,OAAM,EAAE,YAAY;IAC5B,IAAI,OAAO,CAAC;IACZ,IAAIoH,QAAM,EAAE;MACVL,SAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;KAC3C,MAAM,IAAI,OAAO,GAAG/G,OAAM,CAAC,kBAAkB,EAAE;MAC9C,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;KACnD;GACF,CAAC,CAAC;CACJ,CAAC;AACF,IAAI,OAAO,GAAG,UAAU,KAAK,EAAE;EAC7B,IAAI,OAAO,GAAG,IAAI,CAAC;EACnB,IAAI,OAAO,CAAC,EAAE,EAAE,OAAO;EACvB,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC;EAClB,OAAO,GAAG,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC;EAChC,OAAO,CAAC,EAAE,GAAG,KAAK,CAAC;EACnB,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;EACf,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;EACjD,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;CACvB,CAAC;AACF,IAAI,QAAQ,GAAG,UAAU,KAAK,EAAE;EAC9B,IAAI,OAAO,GAAG,IAAI,CAAC;EACnB,IAAI,IAAI,CAAC;EACT,IAAI,OAAO,CAAC,EAAE,EAAE,OAAO;EACvB,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC;EAClB,OAAO,GAAG,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC;EAChC,IAAI;IACF,IAAI,OAAO,KAAK,KAAK,EAAE,MAAMmH,WAAS,CAAC,kCAAkC,CAAC,CAAC;IAC3E,IAAI,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE;MAC5B,SAAS,CAAC,YAAY;QACpB,IAAI,OAAO,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;QACzC,IAAI;UACF,IAAI,CAAC,IAAI,CAAC,KAAK,EAAEhH,IAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,EAAEA,IAAG,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;SACvE,CAAC,OAAO,CAAC,EAAE;UACV,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;SAC1B;OACF,CAAC,CAAC;KACJ,MAAM;MACL,OAAO,CAAC,EAAE,GAAG,KAAK,CAAC;MACnB,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;MACf,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;KACxB;GACF,CAAC,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;GAC7C;CACF,CAAC;;;AAGF,IAAI,CAAC,UAAU,EAAE;;EAEf,QAAQ,GAAG,SAAS,OAAO,CAAC,QAAQ,EAAE;IACpCgB,WAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC1ClB,UAAS,CAAC,QAAQ,CAAC,CAAC;IACpB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpB,IAAI;MACF,QAAQ,CAACE,IAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAEA,IAAG,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;KACzD,CAAC,OAAO,GAAG,EAAE;MACZ,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KACzB;GACF,CAAC;;EAEF,QAAQ,GAAG,SAAS,OAAO,CAAC,QAAQ,EAAE;IACpC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACb,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;IACpB,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IACZ,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC;IAChB,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;IACpB,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IACZ,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC;GACjB,CAAC;EACF,QAAQ,CAAC,SAAS,GAAG8C,YAA0B,CAAC,QAAQ,CAAC,SAAS,EAAE;;IAElE,IAAI,EAAE,SAAS,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE;MAC3C,IAAI,QAAQ,GAAG,oBAAoB,CAACpB,mBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;MACxE,QAAQ,CAAC,EAAE,GAAG,OAAO,WAAW,IAAI,UAAU,GAAG,WAAW,GAAG,IAAI,CAAC;MACpE,QAAQ,CAAC,IAAI,GAAG,OAAO,UAAU,IAAI,UAAU,IAAI,UAAU,CAAC;MAC9D,QAAQ,CAAC,MAAM,GAAGuF,QAAM,GAAGL,SAAO,CAAC,MAAM,GAAG,SAAS,CAAC;MACtD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;MACvB,IAAI,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;MACpC,IAAI,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;MACjC,OAAO,QAAQ,CAAC,OAAO,CAAC;KACzB;;IAED,OAAO,EAAE,UAAU,UAAU,EAAE;MAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;KACzC;GACF,CAAC,CAAC;EACH,oBAAoB,GAAG,YAAY;IACjC,IAAI,OAAO,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACvB,IAAI,CAAC,OAAO,GAAG5G,IAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,GAAGA,IAAG,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;GACxC,CAAC;EACFkH,qBAA0B,CAAC,CAAC,GAAG,oBAAoB,GAAG,UAAU,CAAC,EAAE;IACjE,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,OAAO;QAClC,IAAI,oBAAoB,CAAC,CAAC,CAAC;QAC3B,2BAA2B,CAAC,CAAC,CAAC,CAAC;GACpC,CAAC;CACH;;AAEDzF,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;AAChFsB,eAA+B,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACnDC,WAAyB,CAAC,OAAO,CAAC,CAAC;AACnC,OAAO,GAAGC,KAAkB,CAAC,OAAO,CAAC,CAAC;;;AAGtCxB,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE;;EAEpD,MAAM,EAAE,SAAS,MAAM,CAAC,CAAC,EAAE;IACzB,IAAI,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC;IACjC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACZ,OAAO,UAAU,CAAC,OAAO,CAAC;GAC3B;CACF,CAAC,CAAC;AACHA,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,IAAIL,QAAO,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE;;EAEjE,OAAO,EAAE,SAAS,OAAO,CAAC,CAAC,EAAE;IAC3B,OAAOiG,eAAc,CAACjG,QAAO,IAAI,IAAI,KAAK,OAAO,GAAG,QAAQ,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;GACzE;CACF,CAAC,CAAC;AACHK,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAG,EAAE,UAAU,IAAIyB,WAAyB,CAAC,UAAU,IAAI,EAAE;EACxF,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;CACpC,CAAC,CAAC,EAAE,OAAO,EAAE;;EAEZ,GAAG,EAAE,SAAS,GAAG,CAAC,QAAQ,EAAE;IAC1B,IAAI,CAAC,GAAG,IAAI,CAAC;IACb,IAAI,UAAU,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;IACjC,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,IAAI,MAAM,GAAGkE,QAAO,CAAC,YAAY;MAC/B,IAAI,MAAM,GAAG,EAAE,CAAC;MAChB,IAAI,KAAK,GAAG,CAAC,CAAC;MACd,IAAI,SAAS,GAAG,CAAC,CAAC;MAClB/B,MAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,OAAO,EAAE;QACxC,IAAI,MAAM,GAAG,KAAK,EAAE,CAAC;QACrB,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvB,SAAS,EAAE,CAAC;QACZ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE;UACvC,IAAI,aAAa,EAAE,OAAO;UAC1B,aAAa,GAAG,IAAI,CAAC;UACrB,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;UACvB,EAAE,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;SAChC,EAAE,MAAM,CAAC,CAAC;OACZ,CAAC,CAAC;MACH,EAAE,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;KAChC,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/B,OAAO,UAAU,CAAC,OAAO,CAAC;GAC3B;;EAED,IAAI,EAAE,SAAS,IAAI,CAAC,QAAQ,EAAE;IAC5B,IAAI,CAAC,GAAG,IAAI,CAAC;IACb,IAAI,UAAU,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,IAAI,MAAM,GAAG+B,QAAO,CAAC,YAAY;MAC/B/B,MAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,OAAO,EAAE;QACxC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;OACrD,CAAC,CAAC;KACJ,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/B,OAAO,UAAU,CAAC,OAAO,CAAC;GAC3B;CACF,CAAC,CAAC;;AC7RH,OAAS,GAAGnG,IAAiB,CAAC;;;;;;ACI9B,IAAI,cAAc,GAAGA,SAAuB,CAAC,CAAC,CAAC;AAC/C,cAAc,GAAG,UAAU,IAAI,EAAE;EAC/B,IAAI,OAAO,GAAGa,KAAI,CAAC,MAAM,KAAKA,KAAI,CAAC,MAAM,GAAGqB,QAAO,GAAG,EAAE,GAAGvB,OAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;EAChF,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI,OAAO,CAAC,EAAE,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAEyH,OAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;CAC3G,CAAC;;ACRF;;;;AAIA,aAAc,GAAG,UAAU,EAAE,EAAE;EAC7B,IAAI,MAAM,GAAGxF,WAAO,CAAC,EAAE,CAAC,CAAC;EACzB,IAAI,UAAU,GAAG+D,WAAI,CAAC,CAAC,CAAC;EACxB,IAAI,UAAU,EAAE;IACd,IAAI,OAAO,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;IAC7B,IAAI,MAAM,GAAGhD,UAAG,CAAC,CAAC,CAAC;IACnB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,GAAG,CAAC;IACR,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;GACtF,CAAC,OAAO,MAAM,CAAC;CACjB,CAAC;;ACdF;;AAEA,IAAI,IAAI,GAAG3D,WAAyB,CAAC,CAAC,CAAC;AACvC,IAAIqI,UAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC;;AAE3B,IAAI,WAAW,GAAG,OAAO,MAAM,IAAI,QAAQ,IAAI,MAAM,IAAI,MAAM,CAAC,mBAAmB;IAC/E,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;;AAE5C,IAAI,cAAc,GAAG,UAAU,EAAE,EAAE;EACjC,IAAI;IACF,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC;GACjB,CAAC,OAAO,CAAC,EAAE;IACV,OAAO,WAAW,CAAC,KAAK,EAAE,CAAC;GAC5B;CACF,CAAC;;AAEF,OAAgB,GAAG,SAAS,mBAAmB,CAAC,EAAE,EAAE;EAClD,OAAO,WAAW,IAAIA,UAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,iBAAiB,GAAG,cAAc,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC9G,UAAS,CAAC,EAAE,CAAC,CAAC,CAAC;CACzG,CAAC;;;;;;;;;;;;ACXF,IAAI,IAAI,GAAGvB,KAAkB,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;AAoBlC,IAAImH,MAAI,GAAGmB,WAAK,CAAC,CAAC,CAAC;AACnB,IAAI/H,IAAE,GAAGgI,SAAG,CAAC,CAAC,CAAC;AACf,IAAIjB,MAAI,GAAGkB,cAAO,CAAC,CAAC,CAAC;AACrB,IAAI,OAAO,GAAG7H,OAAM,CAAC,MAAM,CAAC;AAC5B,IAAI,KAAK,GAAGA,OAAM,CAAC,IAAI,CAAC;AACxB,IAAI,UAAU,GAAG,KAAK,IAAI,KAAK,CAAC,SAAS,CAAC;AAC1C,IAAImC,WAAS,GAAG,WAAW,CAAC;AAC5B,IAAI,MAAM,GAAG2F,IAAG,CAAC,SAAS,CAAC,CAAC;AAC5B,IAAI,YAAY,GAAGA,IAAG,CAAC,aAAa,CAAC,CAAC;AACtC,IAAI,MAAM,GAAG,EAAE,CAAC,oBAAoB,CAAC;AACrC,IAAI,cAAc,GAAGC,OAAM,CAAC,iBAAiB,CAAC,CAAC;AAC/C,IAAI,UAAU,GAAGA,OAAM,CAAC,SAAS,CAAC,CAAC;AACnC,IAAI,SAAS,GAAGA,OAAM,CAAC,YAAY,CAAC,CAAC;AACrC,IAAIC,aAAW,GAAG,MAAM,CAAC7F,WAAS,CAAC,CAAC;AACpC,IAAI8F,YAAU,GAAG,OAAO,OAAO,IAAI,UAAU,CAAC;AAC9C,IAAI,OAAO,GAAGjI,OAAM,CAAC,OAAO,CAAC;;AAE7B,IAAI,MAAM,GAAG,CAAC,OAAO,IAAI,CAAC,OAAO,CAACmC,WAAS,CAAC,IAAI,CAAC,OAAO,CAACA,WAAS,CAAC,CAAC,SAAS,CAAC;;;AAG9E,IAAI,aAAa,GAAGnB,YAAW,IAAIkH,MAAM,CAAC,YAAY;EACpD,OAAOC,aAAO,CAACvI,IAAE,CAAC,EAAE,EAAE,GAAG,EAAE;IACzB,GAAG,EAAE,YAAY,EAAE,OAAOA,IAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;GAC3D,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;CACZ,CAAC,GAAG,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE;EACzB,IAAI,SAAS,GAAG4G,MAAI,CAACwB,aAAW,EAAE,GAAG,CAAC,CAAC;EACvC,IAAI,SAAS,EAAE,OAAOA,aAAW,CAAC,GAAG,CAAC,CAAC;EACvCpI,IAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;EACf,IAAI,SAAS,IAAI,EAAE,KAAKoI,aAAW,EAAEpI,IAAE,CAACoI,aAAW,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;CACtE,GAAGpI,IAAE,CAAC;;AAEP,IAAI,IAAI,GAAG,UAAU,GAAG,EAAE;EACxB,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,GAAGuI,aAAO,CAAC,OAAO,CAAChG,WAAS,CAAC,CAAC,CAAC;EACxD,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC;EACb,OAAO,GAAG,CAAC;CACZ,CAAC;;AAEF,IAAI,QAAQ,GAAG8F,YAAU,IAAI,OAAO,OAAO,CAAC,QAAQ,IAAI,QAAQ,GAAG,UAAU,EAAE,EAAE;EAC/E,OAAO,OAAO,EAAE,IAAI,QAAQ,CAAC;CAC9B,GAAG,UAAU,EAAE,EAAE;EAChB,OAAO,EAAE,YAAY,OAAO,CAAC;CAC9B,CAAC;;AAEF,IAAI,eAAe,GAAG,SAAS,cAAc,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE;EACxD,IAAI,EAAE,KAAKD,aAAW,EAAE,eAAe,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;EAC3DvI,SAAQ,CAAC,EAAE,CAAC,CAAC;EACb,GAAG,GAAGC,YAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;EAC7BD,SAAQ,CAAC,CAAC,CAAC,CAAC;EACZ,IAAIK,IAAG,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE;IACxB,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE;MACjB,IAAI,CAACA,IAAG,CAAC,EAAE,EAAE,MAAM,CAAC,EAAEF,IAAE,CAAC,EAAE,EAAE,MAAM,EAAEC,aAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;MACxD,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;KACxB,MAAM;MACL,IAAIC,IAAG,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;MAChE,CAAC,GAAGqI,aAAO,CAAC,CAAC,EAAE,EAAE,UAAU,EAAEtI,aAAU,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;KACtD,CAAC,OAAO,aAAa,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;GACpC,CAAC,OAAOD,IAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;CACzB,CAAC;AACF,IAAI,iBAAiB,GAAG,SAAS,gBAAgB,CAAC,EAAE,EAAE,CAAC,EAAE;EACvDH,SAAQ,CAAC,EAAE,CAAC,CAAC;EACb,IAAI,IAAI,GAAG2I,SAAQ,CAAC,CAAC,GAAGxH,UAAS,CAAC,CAAC,CAAC,CAAC,CAAC;EACtC,IAAI,CAAC,GAAG,CAAC,CAAC;EACV,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;EACpB,IAAI,GAAG,CAAC;EACR,OAAO,CAAC,GAAG,CAAC,EAAE,eAAe,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;EAC3D,OAAO,EAAE,CAAC;CACX,CAAC;AACF,IAAI,OAAO,GAAG,SAAS,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE;EACnC,OAAO,CAAC,KAAK,SAAS,GAAGuH,aAAO,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAACA,aAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;CAC1E,CAAC;AACF,IAAI,qBAAqB,GAAG,SAAS,oBAAoB,CAAC,GAAG,EAAE;EAC7D,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,GAAGzI,YAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;EACxD,IAAI,IAAI,KAAKsI,aAAW,IAAIlI,IAAG,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,CAACA,IAAG,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,OAAO,KAAK,CAAC;EACvF,OAAO,CAAC,IAAI,CAACA,IAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAACA,IAAG,CAAC,UAAU,EAAE,GAAG,CAAC,IAAIA,IAAG,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;CAC3G,CAAC;AACF,IAAI,yBAAyB,GAAG,SAAS,wBAAwB,CAAC,EAAE,EAAE,GAAG,EAAE;EACzE,EAAE,GAAGc,UAAS,CAAC,EAAE,CAAC,CAAC;EACnB,GAAG,GAAGlB,YAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;EAC7B,IAAI,EAAE,KAAKsI,aAAW,IAAIlI,IAAG,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,CAACA,IAAG,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,OAAO;EAC/E,IAAI,CAAC,GAAG0G,MAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;EACtB,IAAI,CAAC,IAAI1G,IAAG,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,EAAEA,IAAG,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC;EAC5F,OAAO,CAAC,CAAC;CACV,CAAC;AACF,IAAI,oBAAoB,GAAG,SAAS,mBAAmB,CAAC,EAAE,EAAE;EAC1D,IAAI,KAAK,GAAG6G,MAAI,CAAC/F,UAAS,CAAC,EAAE,CAAC,CAAC,CAAC;EAChC,IAAI,MAAM,GAAG,EAAE,CAAC;EAChB,IAAI,CAAC,GAAG,CAAC,CAAC;EACV,IAAI,GAAG,CAAC;EACR,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;IACvB,IAAI,CAACd,IAAG,CAAC,UAAU,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;GAC1F,CAAC,OAAO,MAAM,CAAC;CACjB,CAAC;AACF,IAAI,sBAAsB,GAAG,SAAS,qBAAqB,CAAC,EAAE,EAAE;EAC9D,IAAI,KAAK,GAAG,EAAE,KAAKkI,aAAW,CAAC;EAC/B,IAAI,KAAK,GAAGrB,MAAI,CAAC,KAAK,GAAG,SAAS,GAAG/F,UAAS,CAAC,EAAE,CAAC,CAAC,CAAC;EACpD,IAAI,MAAM,GAAG,EAAE,CAAC;EAChB,IAAI,CAAC,GAAG,CAAC,CAAC;EACV,IAAI,GAAG,CAAC;EACR,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;IACvB,IAAId,IAAG,CAAC,UAAU,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,GAAGA,IAAG,CAACkI,aAAW,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;GAC/G,CAAC,OAAO,MAAM,CAAC;CACjB,CAAC;;;AAGF,IAAI,CAACC,YAAU,EAAE;EACf,OAAO,GAAG,SAAS,MAAM,GAAG;IAC1B,IAAI,IAAI,YAAY,OAAO,EAAE,MAAM,SAAS,CAAC,8BAA8B,CAAC,CAAC;IAC7E,IAAI,GAAG,GAAG5H,IAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC/D,IAAI,IAAI,GAAG,UAAU,KAAK,EAAE;MAC1B,IAAI,IAAI,KAAK2H,aAAW,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;MACtD,IAAIlI,IAAG,CAAC,IAAI,EAAE,MAAM,CAAC,IAAIA,IAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;MAC3E,aAAa,CAAC,IAAI,EAAE,GAAG,EAAED,aAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;KAChD,CAAC;IACF,IAAImB,YAAW,IAAI,MAAM,EAAE,aAAa,CAACgH,aAAW,EAAE,GAAG,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9F,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;GAClB,CAAC;EACF5H,SAAQ,CAAC,OAAO,CAAC+B,WAAS,CAAC,EAAE,UAAU,EAAE,SAAS,QAAQ,GAAG;IAC3D,OAAO,IAAI,CAAC,EAAE,CAAC;GAChB,CAAC,CAAC;;EAEHwF,WAAK,CAAC,CAAC,GAAG,yBAAyB,CAAC;EACpCC,SAAG,CAAC,CAAC,GAAG,eAAe,CAAC;EACxBrI,WAAyB,CAAC,CAAC,GAAGsI,cAAO,CAAC,CAAC,GAAG,oBAAoB,CAAC;EAC/DrI,UAAwB,CAAC,CAAC,GAAG,qBAAqB,CAAC;EACnDyD,WAAyB,CAAC,CAAC,GAAG,sBAAsB,CAAC;;EAErD,IAAIjC,YAAW,IAAI,CAACkC,QAAqB,EAAE;IACzC9C,SAAQ,CAAC4H,aAAW,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,IAAI,CAAC,CAAC;GAC5E;;EAEDP,OAAM,CAAC,CAAC,GAAG,UAAU,IAAI,EAAE;IACzB,OAAO,IAAI,CAACK,IAAG,CAAC,IAAI,CAAC,CAAC,CAAC;GACxB,CAAC;CACH;;AAEDlG,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAG,CAACqG,YAAU,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;;AAE9E,KAAK,IAAI,UAAU,GAAG;;EAEpB,gHAAgH;EAChH,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,EAAEH,IAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAEjE,KAAK,IAAI,gBAAgB,GAAGhH,WAAK,CAACgH,IAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,gBAAgB,CAAC,MAAM,GAAG,CAAC,GAAGO,UAAS,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAEpHzG,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAG,CAACqG,YAAU,EAAE,QAAQ,EAAE;;EAErD,KAAK,EAAE,UAAU,GAAG,EAAE;IACpB,OAAOnI,IAAG,CAAC,cAAc,EAAE,GAAG,IAAI,EAAE,CAAC;QACjC,cAAc,CAAC,GAAG,CAAC;QACnB,cAAc,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;GACxC;;EAED,MAAM,EAAE,SAAS,MAAM,CAAC,GAAG,EAAE;IAC3B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,SAAS,CAAC,GAAG,GAAG,mBAAmB,CAAC,CAAC;IAC/D,KAAK,IAAI,GAAG,IAAI,cAAc,EAAE,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,OAAO,GAAG,CAAC;GAC7E;EACD,SAAS,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC,EAAE;EACzC,SAAS,EAAE,YAAY,EAAE,MAAM,GAAG,KAAK,CAAC,EAAE;CAC3C,CAAC,CAAC;;AAEH8B,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAG,CAACqG,YAAU,EAAE,QAAQ,EAAE;;EAErD,MAAM,EAAE,OAAO;;EAEf,cAAc,EAAE,eAAe;;EAE/B,gBAAgB,EAAE,iBAAiB;;EAEnC,wBAAwB,EAAE,yBAAyB;;EAEnD,mBAAmB,EAAE,oBAAoB;;EAEzC,qBAAqB,EAAE,sBAAsB;CAC9C,CAAC,CAAC;;;AAGH,KAAK,IAAIrG,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,IAAI,CAACqG,YAAU,IAAIC,MAAM,CAAC,YAAY;EAC1E,IAAI,CAAC,GAAG,OAAO,EAAE,CAAC;;;;EAIlB,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,IAAI,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;CACrG,CAAC,CAAC,EAAE,MAAM,EAAE;EACX,SAAS,EAAE,SAAS,SAAS,CAAC,EAAE,EAAE;IAChC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,QAAQ,EAAE,SAAS,CAAC;IACxB,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvD,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,CAAC9I,SAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,SAAS,IAAI,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO;IACpE,IAAI,CAACmD,QAAO,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,EAAE,KAAK,EAAE;MACvD,IAAI,OAAO,SAAS,IAAI,UAAU,EAAE,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;MAC7E,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;KACpC,CAAC;IACF,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;IACnB,OAAO,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;GACtC;CACF,CAAC,CAAC;;;AAGH,OAAO,CAACJ,WAAS,CAAC,CAAC,YAAY,CAAC,IAAIgB,KAAkB,CAAC,OAAO,CAAChB,WAAS,CAAC,EAAE,YAAY,EAAE,OAAO,CAACA,WAAS,CAAC,CAAC,OAAO,CAAC,CAAC;;AAErHX,eAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;;AAElCA,eAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;;AAEnCA,eAAc,CAACxB,OAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;;ACzO1C;;;;AAIA,cAAc,GAAG,UAAU,GAAG,EAAE,IAAI,EAAE;EACpC,IAAI,EAAE,GAAG,CAACE,KAAI,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;EACjD,IAAI,GAAG,GAAG,EAAE,CAAC;EACb,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;EACpB0B,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAGN,MAAK,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;CAC/E,CAAC;;ACTF;;AAEA,IAAI,IAAI,GAAGjC,KAAkB,CAAC,QAAQ,CAAC;;AAEvCE,UAAwB,CAAC,QAAQ,EAAE,UAAU,OAAO,EAAE;EACpD,OAAO,SAAS,MAAM,CAAC,EAAE,EAAE;IACzB,OAAO,OAAO,IAAIH,SAAQ,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;GACzD,CAAC;CACH,CAAC,CAAC;;ACRH;;AAEA,IAAIwG,MAAI,GAAGvG,KAAkB,CAAC,QAAQ,CAAC;;AAEvCE,UAAwB,CAAC,MAAM,EAAE,UAAU,KAAK,EAAE;EAChD,OAAO,SAAS,IAAI,CAAC,EAAE,EAAE;IACvB,OAAO,KAAK,IAAIH,SAAQ,CAAC,EAAE,CAAC,GAAG,KAAK,CAACwG,MAAI,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;GACrD,CAAC;CACH,CAAC,CAAC;;ACRH;;AAEA,IAAIA,MAAI,GAAGvG,KAAkB,CAAC,QAAQ,CAAC;;AAEvCE,UAAwB,CAAC,mBAAmB,EAAE,UAAU,kBAAkB,EAAE;EAC1E,OAAO,SAAS,iBAAiB,CAAC,EAAE,EAAE;IACpC,OAAO,kBAAkB,IAAIH,SAAQ,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAACwG,MAAI,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;GAC/E,CAAC;CACH,CAAC,CAAC;;ACRH;;;AAGAvG,UAAwB,CAAC,UAAU,EAAE,UAAU,SAAS,EAAE;EACxD,OAAO,SAAS,QAAQ,CAAC,EAAE,EAAE;IAC3B,OAAOD,SAAQ,CAAC,EAAE,CAAC,GAAG,SAAS,GAAG,SAAS,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;GAChE,CAAC;CACH,CAAC,CAAC;;ACPH;;;AAGAC,UAAwB,CAAC,UAAU,EAAE,UAAU,SAAS,EAAE;EACxD,OAAO,SAAS,QAAQ,CAAC,EAAE,EAAE;IAC3B,OAAOD,SAAQ,CAAC,EAAE,CAAC,GAAG,SAAS,GAAG,SAAS,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;GAChE,CAAC;CACH,CAAC,CAAC;;ACPH;;;AAGAC,UAAwB,CAAC,cAAc,EAAE,UAAU,aAAa,EAAE;EAChE,OAAO,SAAS,YAAY,CAAC,EAAE,EAAE;IAC/B,OAAOD,SAAQ,CAAC,EAAE,CAAC,GAAG,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;GACxE,CAAC;CACH,CAAC,CAAC;;ACPH;;AAEA,IAAIkJ,2BAAyB,GAAGjJ,WAAyB,CAAC,CAAC,CAAC;;AAE5DE,UAAwB,CAAC,0BAA0B,EAAE,YAAY;EAC/D,OAAO,SAAS,wBAAwB,CAAC,EAAE,EAAE,GAAG,EAAE;IAChD,OAAO+I,2BAAyB,CAAC1H,UAAS,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;GACtD,CAAC;CACH,CAAC,CAAC;;ACRH;;;;AAIAvB,UAAwB,CAAC,gBAAgB,EAAE,YAAY;EACrD,OAAO,SAAS,cAAc,CAAC,EAAE,EAAE;IACjC,OAAOkJ,UAAe,CAACxH,SAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;GACtC,CAAC;CACH,CAAC,CAAC;;ACRH;;;;AAIA1B,UAAwB,CAAC,MAAM,EAAE,YAAY;EAC3C,OAAO,SAAS,IAAI,CAAC,EAAE,EAAE;IACvB,OAAOyB,WAAK,CAACC,SAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;GAC5B,CAAC;CACH,CAAC,CAAC;;ACRH;AACA1B,UAAwB,CAAC,qBAAqB,EAAE,YAAY;EAC1D,OAAOE,cAA6B,CAAC,CAAC,CAAC;CACxC,CAAC,CAAC;;ACHH;;;AAGAqC,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAEvC,aAA2B,EAAE,CAAC,CAAC;;ACHlF;AACA,cAAc,GAAG,MAAM,CAAC,EAAE,IAAI,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE;;EAE9C,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;CAChE,CAAC;;ACJF;;AAEAuC,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAEvC,UAAwB,EAAE,CAAC,CAAC;;ACF/D,IAAIO,IAAE,GAAGP,SAAuB,CAAC,CAAC,CAAC;AACnC,IAAI,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC;AAChC,IAAI,MAAM,GAAG,uBAAuB,CAAC;AACrC,IAAI,IAAI,GAAG,MAAM,CAAC;;;AAGlB,IAAI,IAAI,MAAM,IAAIE,YAAyB,IAAIK,IAAE,CAAC,MAAM,EAAE,IAAI,EAAE;EAC9D,YAAY,EAAE,IAAI;EAClB,GAAG,EAAE,YAAY;IACf,IAAI;MACF,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;KACrC,CAAC,OAAO,CAAC,EAAE;MACV,OAAO,EAAE,CAAC;KACX;GACF;CACF,CAAC,CAAC;;ACXHgC,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE;;EAE3B,GAAG,EAAE,SAAS,GAAG,CAAC,QAAQ,EAAE;IAC1B,IAAI,GAAG,GAAGhB,UAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,GAAG,GAAGL,SAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC;IAC5B,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,GAAG,GAAG,CAAC,EAAE;MACd,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;MAC3B,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAC9C,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;GACvB;CACF,CAAC,CAAC;;ACfH,IAAI,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACvC,IAAI,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC;;;AAG1CqB,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE;;EAE1F,aAAa,EAAE,SAAS,aAAa,CAAC,CAAC,EAAE;IACvC,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC;IAC5B,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,IAAI,CAAC;IACT,OAAO,IAAI,GAAG,CAAC,EAAE;MACf,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;MACvB,IAAIf,gBAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,IAAI,EAAE,MAAM,UAAU,CAAC,IAAI,GAAG,4BAA4B,CAAC,CAAC;MACpG,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO;UACnB,YAAY,CAAC,IAAI,CAAC;UAClB,YAAY,CAAC,CAAC,CAAC,IAAI,IAAI,OAAO,KAAK,EAAE,IAAI,MAAM,EAAE,IAAI,GAAG,KAAK,GAAG,MAAM,CAAC;OAC1E,CAAC;KACH,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;GACvB;CACF,CAAC,CAAC;;ACpBH;;AAEA,aAAc,GAAG,UAAU,SAAS,EAAE;EACpC,OAAO,UAAU,IAAI,EAAE,GAAG,EAAE;IAC1B,IAAI,CAAC,GAAG,MAAM,CAACH,QAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,GAAGJ,UAAS,CAAC,GAAG,CAAC,CAAC;IACvB,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,SAAS,GAAG,EAAE,GAAG,SAAS,CAAC;IACvD,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACpB,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,GAAG,MAAM;QAC9F,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;QAC3B,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,IAAI,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC;GACjF,CAAC;CACH,CAAC;;ACdF,IAAI,GAAG,GAAGjB,SAAuB,CAAC,KAAK,CAAC,CAAC;AACzCuC,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE;;EAE3B,WAAW,EAAE,SAAS,WAAW,CAAC,GAAG,EAAE;IACrC,OAAO,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;GACvB;CACF,CAAC,CAAC;;ACJH,iBAAc,GAAG,SAAS,MAAM,CAAC,KAAK,EAAE;EACtC,IAAI,GAAG,GAAG,MAAM,CAAClB,QAAO,CAAC,IAAI,CAAC,CAAC,CAAC;EAChC,IAAI,GAAG,GAAG,EAAE,CAAC;EACb,IAAI,CAAC,GAAGJ,UAAS,CAAC,KAAK,CAAC,CAAC;EACzB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,MAAM,UAAU,CAAC,yBAAyB,CAAC,CAAC;EACxE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC;EAC/D,OAAO,GAAG,CAAC;CACZ,CAAC;;ACTFsB,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE;;EAE3B,MAAM,EAAEvC,aAA2B;CACpC,CAAC,CAAC;;ACLH;;;AAGA,IAAI,KAAK,GAAGA,IAAiB,CAAC,OAAO,CAAC,CAAC;AACvC,aAAc,GAAG,UAAU,EAAE,EAAE;EAC7B,IAAI,QAAQ,CAAC;EACb,OAAOD,SAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,QAAQ,GAAGoB,IAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,CAAC;CAClG,CAAC;;ACPF;;;;AAIA,kBAAc,GAAG,UAAU,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE;EACnD,IAAIgI,SAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,SAAS,CAAC,SAAS,GAAG,IAAI,GAAG,wBAAwB,CAAC,CAAC;EACzF,OAAO,MAAM,CAAC9H,QAAO,CAAC,IAAI,CAAC,CAAC,CAAC;CAC9B,CAAC;;ACPF,IAAI+H,OAAK,GAAGpJ,IAAiB,CAAC,OAAO,CAAC,CAAC;AACvC,kBAAc,GAAG,UAAU,GAAG,EAAE;EAC9B,IAAI,EAAE,GAAG,GAAG,CAAC;EACb,IAAI;IACF,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;GAChB,CAAC,OAAO,CAAC,EAAE;IACV,IAAI;MACF,EAAE,CAACoJ,OAAK,CAAC,GAAG,KAAK,CAAC;MAClB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;KACxB,CAAC,OAAO,CAAC,EAAE,eAAe;GAC5B,CAAC,OAAO,IAAI,CAAC;CACf,CAAC;;ACNF,IAAI,WAAW,GAAG,YAAY,CAAC;AAC/B,IAAI,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC;;AAElC7G,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAGvC,cAA6B,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE;EACpF,UAAU,EAAE,SAAS,UAAU,CAAC,YAAY,uBAAuB;IACjE,IAAI,IAAI,GAAGqJ,cAAO,CAAC,IAAI,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IACpD,IAAI,KAAK,GAAGnI,SAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7F,IAAI,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IAClC,OAAO,WAAW;QACd,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC;GACzD;CACF,CAAC,CAAC;;ACZH,IAAI,SAAS,GAAG,UAAU,CAAC;AAC3B,IAAI,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;;AAE9BqB,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAGvC,cAA6B,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE;EAClF,QAAQ,EAAE,SAAS,QAAQ,CAAC,YAAY,gCAAgC;IACtE,IAAI,IAAI,GAAGqJ,cAAO,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;IAClD,IAAI,WAAW,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAClE,IAAI,GAAG,GAAGnI,SAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,GAAG,GAAG,WAAW,KAAK,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAACA,SAAQ,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,CAAC;IACjF,IAAI,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IAClC,OAAO,SAAS;QACZ,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC;GACrD;CACF,CAAC,CAAC;;ACfH,IAAI,QAAQ,GAAG,UAAU,CAAC;;AAE1BqB,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAGvC,cAA6B,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE;EACjF,QAAQ,EAAE,SAAS,QAAQ,CAAC,YAAY,uBAAuB;IAC7D,OAAO,CAAC,CAAC,CAACqJ,cAAO,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC;OAC5C,OAAO,CAAC,YAAY,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;GAC3E;CACF,CAAC,CAAC;;;;ACRH,UAAc,GAAG,YAAY;EAC3B,IAAI,IAAI,GAAGjJ,SAAQ,CAAC,IAAI,CAAC,CAAC;EAC1B,IAAI,MAAM,GAAG,EAAE,CAAC;EAChB,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,GAAG,CAAC;EAC/B,IAAI,IAAI,CAAC,UAAU,EAAE,MAAM,IAAI,GAAG,CAAC;EACnC,IAAI,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,GAAG,CAAC;EAClC,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,CAAC;EAChC,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,GAAG,CAAC;EAC/B,OAAO,MAAM,CAAC;CACf,CAAC;;ACZF;AACA,IAAIJ,YAAyB,IAAI,IAAI,CAAC,KAAK,IAAI,GAAG,EAAEE,SAAuB,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE;EACvG,YAAY,EAAE,IAAI;EAClB,GAAG,EAAEC,MAAmB;CACzB,CAAC,CAAC;;ACGH,aAAc,GAAG,UAAU,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;EAC5C,IAAI,MAAM,GAAGsI,IAAG,CAAC,GAAG,CAAC,CAAC;EACtB,IAAI,GAAG,GAAG,IAAI,CAACpH,QAAO,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;EACzC,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;EACnB,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;EAClB,IAAIY,MAAK,CAAC,YAAY;IACpB,IAAI,CAAC,GAAG,EAAE,CAAC;IACX,CAAC,CAAC,MAAM,CAAC,GAAG,YAAY,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;IACtC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;GACxB,CAAC,EAAE;IACFlB,SAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACvCL,KAAI,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;;;QAGtC,UAAU,MAAM,EAAE,GAAG,EAAE,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE;;;QAG/D,UAAU,MAAM,EAAE,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE;KACxD,CAAC;GACH;CACF,CAAC;;AC3BF;AACAV,SAAwB,CAAC,OAAO,EAAE,CAAC,EAAE,UAAU,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE;;EAErE,OAAO,CAAC,SAAS,KAAK,CAAC,MAAM,EAAE;IAE7B,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,IAAI,EAAE,GAAG,MAAM,IAAI,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACzD,OAAO,EAAE,KAAK,SAAS,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;GACrF,EAAE,MAAM,CAAC,CAAC;CACZ,CAAC,CAAC;;ACTH;AACAA,SAAwB,CAAC,SAAS,EAAE,CAAC,EAAE,UAAU,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE;;EAE3E,OAAO,CAAC,SAAS,OAAO,CAAC,WAAW,EAAE,YAAY,EAAE;IAElD,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,IAAI,EAAE,GAAG,WAAW,IAAI,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACrE,OAAO,EAAE,KAAK,SAAS;QACnB,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,YAAY,CAAC;QACrC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;GACzD,EAAE,QAAQ,CAAC,CAAC;CACd,CAAC,CAAC;;ACXH;AACAA,SAAwB,CAAC,OAAO,EAAE,CAAC,EAAE,UAAU,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE;EAErE,IAAI,QAAQ,GAAGE,SAAuB,CAAC;EACvC,IAAI,MAAM,GAAG,MAAM,CAAC;EACpB,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC;EACpB,IAAI,MAAM,GAAG,OAAO,CAAC;EACrB,IAAI,MAAM,GAAG,QAAQ,CAAC;EACtB,IAAI,UAAU,GAAG,WAAW,CAAC;EAC7B;IACE,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG;IAChC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;IACvC,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;IACpC,GAAG,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;IACpC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;IAC/B,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IACxB;IACA,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;;IAE5C,MAAM,GAAG,UAAU,SAAS,EAAE,KAAK,EAAE;MACnC,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;MAC1B,IAAI,SAAS,KAAK,SAAS,IAAI,KAAK,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;;MAEtD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;MACvE,IAAI,MAAM,GAAG,EAAE,CAAC;MAChB,IAAI,KAAK,GAAG,CAAC,SAAS,CAAC,UAAU,GAAG,GAAG,GAAG,EAAE;mBAC/B,SAAS,CAAC,SAAS,GAAG,GAAG,GAAG,EAAE,CAAC;mBAC/B,SAAS,CAAC,OAAO,GAAG,GAAG,GAAG,EAAE,CAAC;mBAC7B,SAAS,CAAC,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC;MAC1C,IAAI,aAAa,GAAG,CAAC,CAAC;MACtB,IAAI,UAAU,GAAG,KAAK,KAAK,SAAS,GAAG,UAAU,GAAG,KAAK,KAAK,CAAC,CAAC;;MAEhE,IAAI,aAAa,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,GAAG,GAAG,CAAC,CAAC;MAC9D,IAAI,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;;MAEhD,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,aAAa,CAAC,MAAM,GAAG,UAAU,EAAE,KAAK,CAAC,CAAC;MACnF,OAAO,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;;QAEzC,SAAS,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,SAAS,GAAG,aAAa,EAAE;UAC7B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;;;UAGtD,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY;YACvE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;WAClG,CAAC,CAAC;UACH,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;UAC3F,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;UAC9B,aAAa,GAAG,SAAS,CAAC;UAC1B,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,EAAE,MAAM;SACzC;QACD,IAAI,aAAa,CAAC,UAAU,CAAC,KAAK,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;OAC5E;MACD,IAAI,aAAa,KAAK,MAAM,CAAC,MAAM,CAAC,EAAE;QACpC,IAAI,UAAU,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;OAC5D,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;MAChD,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,MAAM,CAAC;KAC3E,CAAC;;GAEH,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;IAC5C,MAAM,GAAG,UAAU,SAAS,EAAE,KAAK,EAAE;MACnC,OAAO,SAAS,KAAK,SAAS,IAAI,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;KAC1F,CAAC;GACH;;EAED,OAAO,CAAC,SAAS,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE;IACvC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,IAAI,EAAE,GAAG,SAAS,IAAI,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/D,OAAO,EAAE,KAAK,SAAS,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;GACnG,EAAE,MAAM,CAAC,CAAC;CACZ,CAAC,CAAC;;ACtEH;AACAF,SAAwB,CAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;;EAExE,OAAO,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE;IAE9B,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,IAAI,EAAE,GAAG,MAAM,IAAI,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1D,OAAO,EAAE,KAAK,SAAS,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;GACtF,EAAE,OAAO,CAAC,CAAC;CACb,CAAC,CAAC;;ACLH,mBAAc,GAAG,UAAU,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE;EAC/C,IAAI,KAAK,IAAI,MAAM,EAAEsJ,SAAe,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE9I,aAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;OACvE,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;CAC5B,CAAC;;ACGF+B,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAG,CAACvC,WAAyB,CAAC,UAAU,IAAI,EAAE,CAAmB,EAAE,CAAC,EAAE,OAAO,EAAE;;EAE1G,IAAI,EAAE,SAAS,IAAI,CAAC,SAAS,iDAAiD;IAC5E,IAAI,CAAC,GAAG0B,SAAQ,CAAC,SAAS,CAAC,CAAC;IAC5B,IAAI,CAAC,GAAG,OAAO,IAAI,IAAI,UAAU,GAAG,IAAI,GAAG,KAAK,CAAC;IACjD,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC;IAC5B,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAChD,IAAI,OAAO,GAAG,KAAK,KAAK,SAAS,CAAC;IAClC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,MAAM,GAAGsE,sBAAS,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC;IACnC,IAAI,OAAO,EAAE,KAAK,GAAGlF,IAAG,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC;;IAExE,IAAI,MAAM,IAAI,SAAS,IAAI,EAAE,CAAC,IAAI,KAAK,IAAImF,YAAW,CAAC,MAAM,CAAC,CAAC,EAAE;MAC/D,KAAK,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACzFsD,eAAc,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,GAAGrD,SAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;OACxG;KACF,MAAM;MACL,MAAM,GAAGhF,SAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;MAC5B,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE;QACpDqI,eAAc,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;OAC5E;KACF;IACD,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,OAAO,MAAM,CAAC;GACf;CACF,CAAC,CAAC;;;AC/BHhH,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAGvC,MAAmB,CAAC,YAAY;EAC9D,SAAS,CAAC,GAAG,eAAe;EAC5B,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;CACzC,CAAC,EAAE,OAAO,EAAE;;EAEX,EAAE,EAAE,SAAS,EAAE,gBAAgB;IAC7B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC;IAC5B,IAAI,MAAM,GAAG,KAAK,OAAO,IAAI,IAAI,UAAU,GAAG,IAAI,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC;IAClE,OAAO,IAAI,GAAG,KAAK,EAAEuJ,eAAc,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACvE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,MAAM,CAAC;GACf;CACF,CAAC,CAAC;;AClBH;;;AAGAhH,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,UAAU,EAAEvC,gBAA+B,EAAE,CAAC,CAAC;;AAE7EE,iBAAgC,CAAC,YAAY,CAAC,CAAC;;;;ACF/C,IAAI,KAAK,GAAGF,aAA2B,CAAC,CAAC,CAAC,CAAC;AAC3C,IAAI,GAAG,GAAG,MAAM,CAAC;AACjB,IAAI,MAAM,GAAG,IAAI,CAAC;;AAElB,IAAI,GAAG,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;AAC9DuC,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE;EAC/C,IAAI,EAAE,SAAS,IAAI,CAAC,UAAU,2BAA2B;IACvD,OAAO,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;GACjF;CACF,CAAC,CAAC;AACHrC,iBAAgC,CAAC,GAAG,CAAC,CAAC;;;;ACVtC,IAAIsJ,OAAK,GAAGxJ,aAA2B,CAAC,CAAC,CAAC,CAAC;AAC3C,IAAIyJ,KAAG,GAAG,WAAW,CAAC;AACtB,IAAIC,QAAM,GAAG,IAAI,CAAC;;AAElB,IAAID,KAAG,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAACA,KAAG,CAAC,CAAC,YAAY,EAAEC,QAAM,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;AAC9DnH,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAGmH,QAAM,EAAE,OAAO,EAAE;EAC/C,SAAS,EAAE,SAAS,SAAS,CAAC,UAAU,2BAA2B;IACjE,OAAOF,OAAK,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;GACjF;CACF,CAAC,CAAC;AACHtJ,iBAAgC,CAACuJ,KAAG,CAAC,CAAC;;ACbtC;;;AAGAlH,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAEvC,UAAwB,EAAE,CAAC,CAAC;;AAEhEE,iBAAgC,CAAC,MAAM,CAAC,CAAC;;ACLzC;;AAEA,IAAI,SAAS,GAAGF,OAAoB,CAAC,QAAQ,CAAC;;AAE9CuC,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE;EAC3B,QAAQ,EAAE,SAAS,QAAQ,CAAC,EAAE,EAAE;IAC9B,OAAO,OAAO,EAAE,IAAI,QAAQ,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC;GAC/C;CACF,CAAC,CAAC;;ACRH;;AAEA,IAAIoH,OAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACvB,cAAc,GAAG,SAAS,SAAS,CAAC,EAAE,EAAE;EACtC,OAAO,CAAC5J,SAAQ,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,IAAI4J,OAAK,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;CAC1D,CAAC;;ACLF;;;AAGApH,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAEvC,UAAwB,EAAE,CAAC,CAAC;;ACHtE;;;AAGA,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;;AAEnBuC,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE;EAC3B,aAAa,EAAE,SAAS,aAAa,CAAC,MAAM,EAAE;IAC5C,OAAOqH,UAAS,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC;GAC7D;CACF,CAAC,CAAC;;ACTH;;;AAGArH,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE;EAC3B,KAAK,EAAE,SAAS,KAAK,CAAC,MAAM,EAAE;;IAE5B,OAAO,MAAM,IAAI,MAAM,CAAC;GACzB;CACF,CAAC,CAAC;;ACRH;;;AAGAA,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;ACH5D;;;AAGAA,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC;;ACHtE;;;AAGAA,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC,CAAC;;ACHrE;AACA,cAAc,GAAG,IAAI,CAAC,KAAK,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;EAC/C,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CACvE,CAAC;;ACHF;;;AAGA,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AACrB,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;;AAExBA,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAG,EAAE,MAAM;;KAEnC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,GAAG;;KAE3C,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ;CAChC,EAAE,MAAM,EAAE;EACT,KAAK,EAAE,SAAS,KAAK,CAAC,CAAC,EAAE;IACvB,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,iBAAiB;QAC7C,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG;QACtBsH,UAAK,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;GAC9C;CACF,CAAC,CAAC;;ACjBH;;AAEA,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;;AAExB,SAAS,KAAK,CAAC,CAAC,EAAE;EAChB,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAClG;;;AAGDtH,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAG,EAAE,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;;ACT1F;;AAEA,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;;;AAGxBA,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAG,EAAE,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE;EACvE,KAAK,EAAE,SAAS,KAAK,CAAC,CAAC,EAAE;IACvB,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;GAC5D;CACF,CAAC,CAAC;;ACTH;AACA,aAAc,GAAG,IAAI,CAAC,IAAI,IAAI,SAAS,IAAI,CAAC,CAAC,EAAE;;EAE7C,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;CACrD,CAAC;;ACJF;;;;AAIAA,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE;EACzB,IAAI,EAAE,SAAS,IAAI,CAAC,CAAC,EAAE;IACrB,OAAOuH,SAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;GACpD;CACF,CAAC,CAAC;;ACRH;;;AAGAvH,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE;EACzB,KAAK,EAAE,SAAS,KAAK,CAAC,CAAC,EAAE;IACvB,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;GAC1E;CACF,CAAC,CAAC;;ACPH;;AAEA,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;;AAEnBA,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE;EACzB,IAAI,EAAE,SAAS,IAAI,CAAC,CAAC,EAAE;IACrB,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;GACpC;CACF,CAAC,CAAC;;ACRH;AACA,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;AACxB,cAAc,GAAG,CAAC,CAAC,MAAM;;KAEpB,MAAM,CAAC,EAAE,CAAC,GAAG,kBAAkB,IAAI,MAAM,CAAC,EAAE,CAAC,GAAG,sBAAsB;;KAEtE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK;IACzB,SAAS,KAAK,CAAC,CAAC,EAAE;EACpB,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;CACpF,GAAG,MAAM,CAAC;;ACTX;;;;AAIAA,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,IAAIwH,UAAM,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAEA,UAAM,EAAE,CAAC,CAAC;;ACJnF;;AAEA,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACnB,IAAI,OAAO,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC1B,IAAI,SAAS,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5B,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;AAC1C,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;;AAEzB,IAAI,eAAe,GAAG,UAAU,CAAC,EAAE;EACjC,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC;CACtC,CAAC;;AAEF,eAAc,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,MAAM,CAAC,CAAC,EAAE;EACjD,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EACvB,IAAI,KAAK,GAAGD,SAAI,CAAC,CAAC,CAAC,CAAC;EACpB,IAAI,CAAC,EAAE,MAAM,CAAC;EACd,IAAI,IAAI,GAAG,KAAK,EAAE,OAAO,KAAK,GAAG,eAAe,CAAC,IAAI,GAAG,KAAK,GAAG,SAAS,CAAC,GAAG,KAAK,GAAG,SAAS,CAAC;EAC/F,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,GAAG,OAAO,IAAI,IAAI,CAAC;EACrC,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;;EAExB,IAAI,MAAM,GAAG,KAAK,IAAI,MAAM,IAAI,MAAM,EAAE,OAAO,KAAK,GAAG,QAAQ,CAAC;EAChE,OAAO,KAAK,GAAG,MAAM,CAAC;CACvB,CAAC;;ACtBF;;;AAGAvH,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,MAAM,EAAEvC,WAAyB,EAAE,CAAC,CAAC;;ACHlE;;AAEA,IAAIgK,KAAG,GAAG,IAAI,CAAC,GAAG,CAAC;;AAEnBzH,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE;EACzB,KAAK,EAAE,SAAS,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE;IACpC,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC;IAC5B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,GAAG,EAAE,GAAG,CAAC;IACb,OAAO,CAAC,GAAG,IAAI,EAAE;MACf,GAAG,GAAGyH,KAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;MAC1B,IAAI,IAAI,GAAG,GAAG,EAAE;QACd,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC;QACjB,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;QAC1B,IAAI,GAAG,GAAG,CAAC;OACZ,MAAM,IAAI,GAAG,GAAG,CAAC,EAAE;QAClB,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC;QACjB,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC;OAClB,MAAM,GAAG,IAAI,GAAG,CAAC;KACnB;IACD,OAAO,IAAI,KAAK,QAAQ,GAAG,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;GAC7D;CACF,CAAC,CAAC;;ACxBH;;AAEA,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;;;AAGtBzH,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAGvC,MAAmB,CAAC,YAAY;EAC9D,OAAO,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;CACxD,CAAC,EAAE,MAAM,EAAE;EACV,IAAI,EAAE,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE;IACxB,IAAI,MAAM,GAAG,MAAM,CAAC;IACpB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IACZ,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IACZ,IAAI,EAAE,GAAG,MAAM,GAAG,EAAE,CAAC;IACrB,IAAI,EAAE,GAAG,MAAM,GAAG,EAAE,CAAC;IACrB,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;GAC1F;CACF,CAAC,CAAC;;AChBH;;;AAGAuC,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAEvC,UAAwB,EAAE,CAAC,CAAC;;ACHhE;;;AAGAuC,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE;EACzB,KAAK,EAAE,SAAS,KAAK,CAAC,CAAC,EAAE;IACvB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;GAClC;CACF,CAAC,CAAC;;ACPH;;;AAGAA,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE;EACzB,IAAI,EAAE,SAAS,IAAI,CAAC,CAAC,EAAE;IACrB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;GAC/B;CACF,CAAC,CAAC;;ACPH;;;AAGAA,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAEvC,SAAuB,EAAE,CAAC,CAAC;;ACH9D;;;AAGA,IAAIiK,KAAG,GAAG,IAAI,CAAC,GAAG,CAAC;;;AAGnB1H,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAGvC,MAAmB,CAAC,YAAY;EAC9D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;CACrC,CAAC,EAAE,MAAM,EAAE;EACV,IAAI,EAAE,SAAS,IAAI,CAAC,CAAC,EAAE;IACrB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACvB,CAACkK,UAAK,CAAC,CAAC,CAAC,GAAGA,UAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1B,CAACD,KAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAGA,KAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;GAC/C;CACF,CAAC,CAAC;;ACdH;;;AAGA,IAAIA,KAAG,GAAG,IAAI,CAAC,GAAG,CAAC;;AAEnB1H,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE;EACzB,IAAI,EAAE,SAAS,IAAI,CAAC,CAAC,EAAE;IACrB,IAAI,CAAC,GAAG2H,UAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,CAAC,GAAGA,UAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAClB,OAAO,CAAC,IAAI,QAAQ,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAKD,KAAG,CAAC,CAAC,CAAC,GAAGA,KAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;GAC9E;CACF,CAAC,CAAC;;ACXH;;;AAGA1H,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE;EACzB,KAAK,EAAE,SAAS,KAAK,CAAC,EAAE,EAAE;IACxB,OAAO,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;GAC9C;CACF,CAAC,CAAC;;;;ACJH,IAAI,SAAS,GAAGvC,cAA4B,CAAC,IAAI,CAAC,CAAC;;AAEnDuC,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE;EAC1B,QAAQ,EAAE,SAAS,QAAQ,CAAC,EAAE,wBAAwB;IACpD,OAAO,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;GAC7E;CACF,CAAC,CAAC;;AAEHrC,iBAAgC,CAAC,UAAU,CAAC,CAAC;;ACT7C,IAAIiK,QAAM,GAAGnK,UAAwB,CAAC,CAAC,CAAC;AACxC,kBAAc,GAAG,UAAU,SAAS,EAAE;EACpC,OAAO,UAAU,EAAE,EAAE;IACnB,IAAI,CAAC,GAAGuB,UAAS,CAAC,EAAE,CAAC,CAAC;IACtB,IAAI,IAAI,GAAGqB,WAAO,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACzB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,GAAG,CAAC;IACR,OAAO,MAAM,GAAG,CAAC,EAAE,IAAIuH,QAAM,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;MACtD,MAAM,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;KACjD,CAAC,OAAO,MAAM,CAAC;GACjB,CAAC;CACH,CAAC;;ACfF;;AAEA,IAAI,OAAO,GAAGnK,cAA6B,CAAC,KAAK,CAAC,CAAC;;AAEnDuC,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE;EAC3B,MAAM,EAAE,SAAS,MAAM,CAAC,EAAE,EAAE;IAC1B,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC;GACpB;CACF,CAAC,CAAC;;ACRH;;AAEA,IAAI,QAAQ,GAAGvC,cAA6B,CAAC,IAAI,CAAC,CAAC;;AAEnDuC,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE;EAC3B,OAAO,EAAE,SAAS,OAAO,CAAC,EAAE,EAAE;IAC5B,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAC;GACrB;CACF,CAAC,CAAC;;ACRH;;;;;;;AAOAA,OAAO,CAACA,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE;EAC3B,yBAAyB,EAAE,SAAS,yBAAyB,CAAC,MAAM,EAAE;IACpE,IAAI,CAAC,GAAGhB,UAAS,CAAC,MAAM,CAAC,CAAC;IAC1B,IAAI,OAAO,GAAG4F,WAAI,CAAC,CAAC,CAAC;IACrB,IAAI,IAAI,GAAGiD,QAAO,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,GAAG,EAAE,IAAI,CAAC;IACd,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;MACtB,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;MACnC,IAAI,IAAI,KAAK,SAAS,EAAEb,eAAc,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;KAC3D;IACD,OAAO,MAAM,CAAC;GACf;CACF,CAAC,CAAC;;ACrBH;;;;;AAKA,cAAc,GAAG,UAAU,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE;EAC5D,IAAI,CAAC,GAAG,MAAM,CAAClI,QAAO,CAAC,IAAI,CAAC,CAAC,CAAC;EAC9B,IAAI,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;EAC5B,IAAI,OAAO,GAAG,UAAU,KAAK,SAAS,GAAG,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;EAClE,IAAI,YAAY,GAAGH,SAAQ,CAAC,SAAS,CAAC,CAAC;EACvC,IAAI,YAAY,IAAI,YAAY,IAAI,OAAO,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;EAC5D,IAAI,OAAO,GAAG,YAAY,GAAG,YAAY,CAAC;EAC1C,IAAI,YAAY,GAAGmJ,aAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;EAC7E,IAAI,YAAY,CAAC,MAAM,GAAG,OAAO,EAAE,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;EACjF,OAAO,IAAI,GAAG,YAAY,GAAG,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;CACnD,CAAC;;;;;;;;ACRF9H,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAG,mCAAmC,CAAC,IAAI,CAAC0F,UAAS,CAAC,EAAE,QAAQ,EAAE;EAC7F,QAAQ,EAAE,SAAS,QAAQ,CAAC,SAAS,2BAA2B;IAC9D,OAAOqC,UAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC,CAAC;GACrF;CACF,CAAC,CAAC;;;;;;;;ACJH/H,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAG,mCAAmC,CAAC,IAAI,CAAC0F,UAAS,CAAC,EAAE,QAAQ,EAAE;EAC7F,MAAM,EAAE,SAAS,MAAM,CAAC,SAAS,2BAA2B;IAC1D,OAAOqC,UAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,KAAK,CAAC,CAAC;GACtF;CACF,CAAC,CAAC;;ACXH;;;;AAIA,IAAI,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;AACrB,IAAI,IAAI,GAAG,UAAU,CAAC,IAAI,CAACrC,UAAS,CAAC,CAAC;AACtC,IAAIsC,MAAI,GAAG,UAAU,GAAG,EAAE;EACxB,OAAO,UAAU,EAAE,EAAE,IAAI,kBAAkB;IACzC,IAAI,SAAS,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IACrC,IAAI,IAAI,GAAG,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC;IACxD,OAAO,GAAG,CAAC,SAAS,GAAG,YAAY;;MAEjC,CAAC,OAAO,EAAE,IAAI,UAAU,GAAG,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KACjE,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;GACf,CAAC;CACH,CAAC;AACFhI,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,GAAG,IAAI,EAAE;EAChD,UAAU,EAAEgI,MAAI,CAAC5J,OAAM,CAAC,UAAU,CAAC;EACnC,WAAW,EAAE4J,MAAI,CAAC5J,OAAM,CAAC,WAAW,CAAC;CACtC,CAAC,CAAC;;ACjBH4B,OAAO,CAACA,OAAO,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,EAAE;EAC7B,YAAY,EAAEiI,KAAK,CAAC,GAAG;EACvB,cAAc,EAAEA,KAAK,CAAC,KAAK;CAC5B,CAAC,CAAC;;ACEH,IAAIxH,UAAQ,GAAGyF,IAAG,CAAC,UAAU,CAAC,CAAC;AAC/B,IAAI,aAAa,GAAGA,IAAG,CAAC,aAAa,CAAC,CAAC;AACvC,IAAI,WAAW,GAAG/F,UAAS,CAAC,KAAK,CAAC;;AAElC,IAAI,YAAY,GAAG;EACjB,WAAW,EAAE,IAAI;EACjB,mBAAmB,EAAE,KAAK;EAC1B,YAAY,EAAE,KAAK;EACnB,cAAc,EAAE,KAAK;EACrB,WAAW,EAAE,KAAK;EAClB,aAAa,EAAE,KAAK;EACpB,YAAY,EAAE,IAAI;EAClB,oBAAoB,EAAE,KAAK;EAC3B,QAAQ,EAAE,KAAK;EACf,iBAAiB,EAAE,KAAK;EACxB,cAAc,EAAE,KAAK;EACrB,eAAe,EAAE,KAAK;EACtB,iBAAiB,EAAE,KAAK;EACxB,SAAS,EAAE,IAAI;EACf,aAAa,EAAE,KAAK;EACpB,YAAY,EAAE,KAAK;EACnB,QAAQ,EAAE,IAAI;EACd,gBAAgB,EAAE,KAAK;EACvB,MAAM,EAAE,KAAK;EACb,WAAW,EAAE,KAAK;EAClB,aAAa,EAAE,KAAK;EACpB,aAAa,EAAE,KAAK;EACpB,cAAc,EAAE,KAAK;EACrB,YAAY,EAAE,KAAK;EACnB,aAAa,EAAE,KAAK;EACpB,gBAAgB,EAAE,KAAK;EACvB,gBAAgB,EAAE,KAAK;EACvB,cAAc,EAAE,IAAI;EACpB,gBAAgB,EAAE,KAAK;EACvB,aAAa,EAAE,KAAK;EACpB,SAAS,EAAE,KAAK;CACjB,CAAC;;AAEF,KAAK,IAAI,WAAW,GAAGE,WAAO,CAAC,YAAY,CAAC,EAAE6H,GAAC,GAAG,CAAC,EAAEA,GAAC,GAAG,WAAW,CAAC,MAAM,EAAEA,GAAC,EAAE,EAAE;EAChF,IAAIC,MAAI,GAAG,WAAW,CAACD,GAAC,CAAC,CAAC;EAC1B,IAAI,QAAQ,GAAG,YAAY,CAACC,MAAI,CAAC,CAAC;EAClC,IAAI,UAAU,GAAG/J,OAAM,CAAC+J,MAAI,CAAC,CAAC;EAC9B,IAAI,KAAK,GAAG,UAAU,IAAI,UAAU,CAAC,SAAS,CAAC;EAC/C,IAAI,GAAG,CAAC;EACR,IAAI,KAAK,EAAE;IACT,IAAI,CAAC,KAAK,CAAC1H,UAAQ,CAAC,EAAEtC,KAAI,CAAC,KAAK,EAAEsC,UAAQ,EAAE,WAAW,CAAC,CAAC;IACzD,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAEtC,KAAI,CAAC,KAAK,EAAE,aAAa,EAAEgK,MAAI,CAAC,CAAC;IAC5DhI,UAAS,CAACgI,MAAI,CAAC,GAAG,WAAW,CAAC;IAC9B,IAAI,QAAQ,EAAE,KAAK,GAAG,IAAIC,kBAAU,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE5J,SAAQ,CAAC,KAAK,EAAE,GAAG,EAAE4J,kBAAU,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;GACpG;CACF;;;;;;;;;;;;;AC/CD,CAAC,CAAC,SAAS,MAAM,EAAE;;EAGjB,IAAI,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC;EAC1B,IAAI,MAAM,GAAG,EAAE,CAAC,cAAc,CAAC;EAC/B,IAAI,SAAS,CAAC;EACd,IAAI,OAAO,GAAG,OAAO,MAAM,KAAK,UAAU,GAAG,MAAM,GAAG,EAAE,CAAC;EACzD,IAAI,cAAc,GAAG,OAAO,CAAC,QAAQ,IAAI,YAAY,CAAC;EACtD,IAAI,mBAAmB,GAAG,OAAO,CAAC,aAAa,IAAI,iBAAiB,CAAC;EACrE,IAAI,iBAAiB,GAAG,OAAO,CAAC,WAAW,IAAI,eAAe,CAAC;;EAE/D,IAAI,QAAQ,GAAG,QAAa,KAAK,QAAQ,CAAC;EAC1C,IAAI,OAAO,GAAG,MAAM,CAAC,kBAAkB,CAAC;EACxC,IAAI,OAAO,EAAE;IACX,IAAI,QAAQ,EAAE;;;MAGZ,cAAc,GAAG,OAAO,CAAC;KAC1B;;;IAGD,OAAO;GACR;;;;EAID,OAAO,GAAG,MAAM,CAAC,kBAAkB,GAAG,QAAQ,GAAG,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;;EAErE,SAAS,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE;;IAEjD,IAAI,cAAc,GAAG,OAAO,IAAI,OAAO,CAAC,SAAS,YAAY,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IAC7F,IAAI,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACxD,IAAI,OAAO,GAAG,IAAI,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;;;;IAI7C,SAAS,CAAC,OAAO,GAAG,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;;IAE7D,OAAO,SAAS,CAAC;GAClB;EACD,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;;;;;;;;;;;;EAYpB,SAAS,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;IAC9B,IAAI;MACF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;KACnD,CAAC,OAAO,GAAG,EAAE;MACZ,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;KACpC;GACF;;EAED,IAAI,sBAAsB,GAAG,gBAAgB,CAAC;EAC9C,IAAI,sBAAsB,GAAG,gBAAgB,CAAC;EAC9C,IAAI,iBAAiB,GAAG,WAAW,CAAC;EACpC,IAAI,iBAAiB,GAAG,WAAW,CAAC;;;;EAIpC,IAAI,gBAAgB,GAAG,EAAE,CAAC;;;;;;EAM1B,SAAS,SAAS,GAAG,EAAE;EACvB,SAAS,iBAAiB,GAAG,EAAE;EAC/B,SAAS,0BAA0B,GAAG,EAAE;;;;EAIxC,IAAI,iBAAiB,GAAG,EAAE,CAAC;EAC3B,iBAAiB,CAAC,cAAc,CAAC,GAAG,YAAY;IAC9C,OAAO,IAAI,CAAC;GACb,CAAC;;EAEF,IAAI,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC;EACrC,IAAI,uBAAuB,GAAG,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;EACzE,IAAI,uBAAuB;MACvB,uBAAuB,KAAK,EAAE;MAC9B,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,cAAc,CAAC,EAAE;;;IAGxD,iBAAiB,GAAG,uBAAuB,CAAC;GAC7C;;EAED,IAAI,EAAE,GAAG,0BAA0B,CAAC,SAAS;IAC3C,SAAS,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;EACzD,iBAAiB,CAAC,SAAS,GAAG,EAAE,CAAC,WAAW,GAAG,0BAA0B,CAAC;EAC1E,0BAA0B,CAAC,WAAW,GAAG,iBAAiB,CAAC;EAC3D,0BAA0B,CAAC,iBAAiB,CAAC;IAC3C,iBAAiB,CAAC,WAAW,GAAG,mBAAmB,CAAC;;;;EAItD,SAAS,qBAAqB,CAAC,SAAS,EAAE;IACxC,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,SAAS,MAAM,EAAE;MACnD,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,GAAG,EAAE;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;OAClC,CAAC;KACH,CAAC,CAAC;GACJ;;EAED,OAAO,CAAC,mBAAmB,GAAG,SAAS,MAAM,EAAE;IAC7C,IAAI,IAAI,GAAG,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,WAAW,CAAC;IAC9D,OAAO,IAAI;QACP,IAAI,KAAK,iBAAiB;;;QAG1B,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,MAAM,mBAAmB;QACvD,KAAK,CAAC;GACX,CAAC;;EAEF,OAAO,CAAC,IAAI,GAAG,SAAS,MAAM,EAAE;IAC9B,IAAI,MAAM,CAAC,cAAc,EAAE;MACzB,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;KAC3D,MAAM;MACL,MAAM,CAAC,SAAS,GAAG,0BAA0B,CAAC;MAC9C,IAAI,EAAE,iBAAiB,IAAI,MAAM,CAAC,EAAE;QAClC,MAAM,CAAC,iBAAiB,CAAC,GAAG,mBAAmB,CAAC;OACjD;KACF;IACD,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC;GACf,CAAC;;;;;;EAMF,OAAO,CAAC,KAAK,GAAG,SAAS,GAAG,EAAE;IAC5B,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;GACzB,CAAC;;EAEF,SAAS,aAAa,CAAC,SAAS,EAAE;IAChC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE;MAC5C,IAAI,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;MACzD,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;QAC3B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;OACpB,MAAM;QACL,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC;QACxB,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QACzB,IAAI,KAAK;YACL,OAAO,KAAK,KAAK,QAAQ;YACzB,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE;UACjC,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,EAAE;YACzD,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;WACxC,EAAE,SAAS,GAAG,EAAE;YACf,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;WACvC,CAAC,CAAC;SACJ;;QAED,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,EAAE;;;;;;;;;;;;;;;;UAgBrD,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;UACzB,OAAO,CAAC,MAAM,CAAC,CAAC;SACjB,EAAE,MAAM,CAAC,CAAC;OACZ;KACF;;IAED,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;MAC/D,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC7C;;IAED,IAAI,eAAe,CAAC;;IAEpB,SAAS,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE;MAC5B,SAAS,0BAA0B,GAAG;QACpC,OAAO,IAAI,OAAO,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE;UAC3C,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;SACtC,CAAC,CAAC;OACJ;;MAED,OAAO,eAAe;;;;;;;;;;;;;QAapB,eAAe,GAAG,eAAe,CAAC,IAAI;UACpC,0BAA0B;;;UAG1B,0BAA0B;SAC3B,GAAG,0BAA0B,EAAE,CAAC;KACpC;;;;IAID,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;GACxB;;EAED,qBAAqB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;EAC/C,aAAa,CAAC,SAAS,CAAC,mBAAmB,CAAC,GAAG,YAAY;IACzD,OAAO,IAAI,CAAC;GACb,CAAC;EACF,OAAO,CAAC,aAAa,GAAG,aAAa,CAAC;;;;;EAKtC,OAAO,CAAC,KAAK,GAAG,SAAS,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE;IAC5D,IAAI,IAAI,GAAG,IAAI,aAAa;MAC1B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC;KAC1C,CAAC;;IAEF,OAAO,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC;QACvC,IAAI;QACJ,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,MAAM,EAAE;UAChC,OAAO,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;SACjD,CAAC,CAAC;GACR,CAAC;;EAEF,SAAS,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;IAChD,IAAI,KAAK,GAAG,sBAAsB,CAAC;;IAEnC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE;MAClC,IAAI,KAAK,KAAK,iBAAiB,EAAE;QAC/B,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;OACjD;;MAED,IAAI,KAAK,KAAK,iBAAiB,EAAE;QAC/B,IAAI,MAAM,KAAK,OAAO,EAAE;UACtB,MAAM,GAAG,CAAC;SACX;;;;QAID,OAAO,UAAU,EAAE,CAAC;OACrB;;MAED,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;MACxB,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC;;MAElB,OAAO,IAAI,EAAE;QACX,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAChC,IAAI,QAAQ,EAAE;UACZ,IAAI,cAAc,GAAG,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;UAC5D,IAAI,cAAc,EAAE;YAClB,IAAI,cAAc,KAAK,gBAAgB,EAAE,SAAS;YAClD,OAAO,cAAc,CAAC;WACvB;SACF;;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE;;;UAG7B,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC;;SAE5C,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE;UACrC,IAAI,KAAK,KAAK,sBAAsB,EAAE;YACpC,KAAK,GAAG,iBAAiB,CAAC;YAC1B,MAAM,OAAO,CAAC,GAAG,CAAC;WACnB;;UAED,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;;SAExC,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE;UACtC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;SACvC;;QAED,KAAK,GAAG,iBAAiB,CAAC;;QAE1B,IAAI,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9C,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;;;UAG5B,KAAK,GAAG,OAAO,CAAC,IAAI;cAChB,iBAAiB;cACjB,sBAAsB,CAAC;;UAE3B,IAAI,MAAM,CAAC,GAAG,KAAK,gBAAgB,EAAE;YACnC,SAAS;WACV;;UAED,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,GAAG;YACjB,IAAI,EAAE,OAAO,CAAC,IAAI;WACnB,CAAC;;SAEH,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;UAClC,KAAK,GAAG,iBAAiB,CAAC;;;UAG1B,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC;UACzB,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;SAC1B;OACF;KACF,CAAC;GACH;;;;;;EAMD,SAAS,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE;IAC9C,IAAI,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,MAAM,KAAK,SAAS,EAAE;;;MAGxB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;;MAExB,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE;QAC9B,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE;;;UAG5B,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC;UAC1B,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;UACxB,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;;UAEvC,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE;;;YAG9B,OAAO,gBAAgB,CAAC;WACzB;SACF;;QAED,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC;QACzB,OAAO,CAAC,GAAG,GAAG,IAAI,SAAS;UACzB,gDAAgD,CAAC,CAAC;OACrD;;MAED,OAAO,gBAAgB,CAAC;KACzB;;IAED,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;;IAE9D,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;MAC3B,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC;MACzB,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;MACzB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;MACxB,OAAO,gBAAgB,CAAC;KACzB;;IAED,IAAI,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC;;IAEtB,IAAI,EAAE,IAAI,EAAE;MACV,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC;MACzB,OAAO,CAAC,GAAG,GAAG,IAAI,SAAS,CAAC,kCAAkC,CAAC,CAAC;MAChE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;MACxB,OAAO,gBAAgB,CAAC;KACzB;;IAED,IAAI,IAAI,CAAC,IAAI,EAAE;;;MAGb,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;;;MAG1C,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC;;;;;;;;MAQhC,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE;QAC/B,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;QACxB,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;OACzB;;KAEF,MAAM;;MAEL,OAAO,IAAI,CAAC;KACb;;;;IAID,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IACxB,OAAO,gBAAgB,CAAC;GACzB;;;;EAID,qBAAqB,CAAC,EAAE,CAAC,CAAC;;EAE1B,EAAE,CAAC,iBAAiB,CAAC,GAAG,WAAW,CAAC;;;;;;;EAOpC,EAAE,CAAC,cAAc,CAAC,GAAG,WAAW;IAC9B,OAAO,IAAI,CAAC;GACb,CAAC;;EAEF,EAAE,CAAC,QAAQ,GAAG,WAAW;IACvB,OAAO,oBAAoB,CAAC;GAC7B,CAAC;;EAEF,SAAS,YAAY,CAAC,IAAI,EAAE;IAC1B,IAAI,KAAK,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;;IAEhC,IAAI,CAAC,IAAI,IAAI,EAAE;MACb,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;KAC1B;;IAED,IAAI,CAAC,IAAI,IAAI,EAAE;MACb,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;MAC3B,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;KAC1B;;IAED,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;GAC7B;;EAED,SAAS,aAAa,CAAC,KAAK,EAAE;IAC5B,IAAI,MAAM,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC;IACpC,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;IACvB,OAAO,MAAM,CAAC,GAAG,CAAC;IAClB,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC;GAC3B;;EAED,SAAS,OAAO,CAAC,WAAW,EAAE;;;;IAI5B,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACvC,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;GAClB;;EAED,OAAO,CAAC,IAAI,GAAG,SAAS,MAAM,EAAE;IAC9B,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE;MACtB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAChB;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;;;;IAIf,OAAO,SAAS,IAAI,GAAG;MACrB,OAAO,IAAI,CAAC,MAAM,EAAE;QAClB,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACrB,IAAI,GAAG,IAAI,MAAM,EAAE;UACjB,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;UACjB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;UAClB,OAAO,IAAI,CAAC;SACb;OACF;;;;;MAKD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;MACjB,OAAO,IAAI,CAAC;KACb,CAAC;GACH,CAAC;;EAEF,SAAS,MAAM,CAAC,QAAQ,EAAE;IACxB,IAAI,QAAQ,EAAE;MACZ,IAAI,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC;MAC9C,IAAI,cAAc,EAAE;QAClB,OAAO,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;OACtC;;MAED,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE;QACvC,OAAO,QAAQ,CAAC;OACjB;;MAED,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAC3B,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,SAAS,IAAI,GAAG;UACjC,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE;YAC5B,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE;cAC5B,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;cACzB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;cAClB,OAAO,IAAI,CAAC;aACb;WACF;;UAED,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;UACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;;UAEjB,OAAO,IAAI,CAAC;SACb,CAAC;;QAEF,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;OACzB;KACF;;;IAGD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;GAC7B;EACD,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;;EAExB,SAAS,UAAU,GAAG;IACpB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;GACzC;;EAED,OAAO,CAAC,SAAS,GAAG;IAClB,WAAW,EAAE,OAAO;;IAEpB,KAAK,EAAE,SAAS,aAAa,EAAE;MAC7B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;MACd,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;;;MAGd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;MACnC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;MAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;;MAErB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;MACrB,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC;;MAErB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;;MAEvC,IAAI,CAAC,aAAa,EAAE;QAClB,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE;;UAErB,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG;cACtB,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;cACvB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;YAC1B,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;WACxB;SACF;OACF;KACF;;IAED,IAAI,EAAE,WAAW;MACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;;MAEjB,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;MACnC,IAAI,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;MACtC,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO,EAAE;QAC/B,MAAM,UAAU,CAAC,GAAG,CAAC;OACtB;;MAED,OAAO,IAAI,CAAC,IAAI,CAAC;KAClB;;IAED,iBAAiB,EAAE,SAAS,SAAS,EAAE;MACrC,IAAI,IAAI,CAAC,IAAI,EAAE;QACb,MAAM,SAAS,CAAC;OACjB;;MAED,IAAI,OAAO,GAAG,IAAI,CAAC;MACnB,SAAS,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE;QAC3B,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;QACtB,MAAM,CAAC,GAAG,GAAG,SAAS,CAAC;QACvB,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC;;QAEnB,IAAI,MAAM,EAAE;;;UAGV,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;UACxB,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;SACzB;;QAED,OAAO,CAAC,EAAE,MAAM,CAAC;OAClB;;MAED,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;QACpD,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC;;QAE9B,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;;;;UAI3B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;SACtB;;QAED,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE;UAC7B,IAAI,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;UAC9C,IAAI,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;;UAElD,IAAI,QAAQ,IAAI,UAAU,EAAE;YAC1B,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE;cAC9B,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;aACrC,MAAM,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,EAAE;cACvC,OAAO,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;aACjC;;WAEF,MAAM,IAAI,QAAQ,EAAE;YACnB,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE;cAC9B,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;aACrC;;WAEF,MAAM,IAAI,UAAU,EAAE;YACrB,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,EAAE;cAChC,OAAO,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;aACjC;;WAEF,MAAM;YACL,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;WAC3D;SACF;OACF;KACF;;IAED,MAAM,EAAE,SAAS,IAAI,EAAE,GAAG,EAAE;MAC1B,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;QACpD,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI;YACzB,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC;YAChC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,EAAE;UAChC,IAAI,YAAY,GAAG,KAAK,CAAC;UACzB,MAAM;SACP;OACF;;MAED,IAAI,YAAY;WACX,IAAI,KAAK,OAAO;WAChB,IAAI,KAAK,UAAU,CAAC;UACrB,YAAY,CAAC,MAAM,IAAI,GAAG;UAC1B,GAAG,IAAI,YAAY,CAAC,UAAU,EAAE;;;QAGlC,YAAY,GAAG,IAAI,CAAC;OACrB;;MAED,IAAI,MAAM,GAAG,YAAY,GAAG,YAAY,CAAC,UAAU,GAAG,EAAE,CAAC;MACzD,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;MACnB,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;;MAEjB,IAAI,YAAY,EAAE;QAChB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,UAAU,CAAC;QACpC,OAAO,gBAAgB,CAAC;OACzB;;MAED,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;KAC9B;;IAED,QAAQ,EAAE,SAAS,MAAM,EAAE,QAAQ,EAAE;MACnC,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;QAC3B,MAAM,MAAM,CAAC,GAAG,CAAC;OAClB;;MAED,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO;UACvB,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;QAC9B,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC;OACxB,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;OACnB,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,EAAE;QAC/C,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;OACtB;;MAED,OAAO,gBAAgB,CAAC;KACzB;;IAED,MAAM,EAAE,SAAS,UAAU,EAAE;MAC3B,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;QACpD,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,KAAK,CAAC,UAAU,KAAK,UAAU,EAAE;UACnC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;UAChD,aAAa,CAAC,KAAK,CAAC,CAAC;UACrB,OAAO,gBAAgB,CAAC;SACzB;OACF;KACF;;IAED,OAAO,EAAE,SAAS,MAAM,EAAE;MACxB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;QACpD,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;UAC3B,IAAI,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC;UAC9B,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;YAC3B,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC;YACxB,aAAa,CAAC,KAAK,CAAC,CAAC;WACtB;UACD,OAAO,MAAM,CAAC;SACf;OACF;;;;MAID,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;KAC1C;;IAED,aAAa,EAAE,SAAS,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE;MACrD,IAAI,CAAC,QAAQ,GAAG;QACd,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;QAC1B,UAAU,EAAE,UAAU;QACtB,OAAO,EAAE,OAAO;OACjB,CAAC;;MAEF,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE;;;QAG1B,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC;OACtB;;MAED,OAAO,gBAAgB,CAAC;KACzB;GACF,CAAC;CACH;;;;EAIC,OAAOhK,cAAM,KAAK,QAAQ,GAAGA,cAAM;EACnC,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM;EACnC,OAAO,IAAI,KAAK,QAAQ,GAAG,IAAI,GAAGiK,cAAI;CACvC,CAAC;;;AC/tBF;;;;;;AAMA,IAAI;IACA,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACxC,EAAE,CAAC,cAAc,EAAE,CAAC;IACpB,IAAI,EAAE,CAAC,gBAAgB,KAAK,IAAI,EAAE;;;QAG9B,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;KAChD;CACJ,CAAC,MAAM,CAAC,EAAE;EACT,IAAIC,aAAW,GAAG,SAAS,KAAK,EAAE,MAAM,EAAE;IACxC,IAAI,GAAG,EAAE,WAAW,CAAC;IACrB,MAAM,GAAG,MAAM,IAAI;MACjB,OAAO,EAAE,KAAK;MACd,UAAU,EAAE,KAAK;MACjB,MAAM,EAAE,SAAS;KAClB,CAAC;;IAEF,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IAC1C,GAAG,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7E,WAAW,GAAG,GAAG,CAAC,cAAc,CAAC;IACjC,GAAG,CAAC,cAAc,GAAG,YAAY;MAC/B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;MACvB,IAAI;QACF,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,kBAAkB,EAAE;UAC9C,GAAG,EAAE,YAAY;YACf,OAAO,IAAI,CAAC;WACb;SACF,CAAC,CAAC;OACJ,CAAC,MAAM,CAAC,EAAE;QACT,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;OAC9B;KACF,CAAC;IACF,OAAO,GAAG,CAAC;GACZ,CAAC;;EAEFA,aAAW,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;EAC/C,MAAM,CAAC,WAAW,GAAGA,aAAW,CAAC;CAClC;;AC3CD,CAAC,SAAS,MAAM,EAAE;;;;;;;EAOhB,IAAI,0BAA0B,GAAG,WAAW;IAC1C,IAAI;MACF,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;KAC1B,CAAC,MAAM,KAAK,EAAE;MACb,OAAO,KAAK,CAAC;KACd;GACF,CAAC;;;EAGF,IAAI,iBAAiB,GAAG,0BAA0B,EAAE,CAAC;;EAErD,IAAI,cAAc,GAAG,SAAS,KAAK,EAAE;IACnC,IAAI,QAAQ,GAAG;MACb,IAAI,EAAE,WAAW;QACf,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QAC1B,OAAO,EAAE,IAAI,EAAE,KAAK,KAAK,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;OACjD;KACF,CAAC;;IAEF,GAAG,iBAAiB,EAAE;MACpB,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,WAAW;QACrC,OAAO,QAAQ,CAAC;OACjB,CAAC;KACH;;IAED,OAAO,QAAQ,CAAC;GACjB,CAAC;;;;;;EAMF,IAAI,cAAc,GAAG,SAAS,KAAK,EAAE;IACnC,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;GACvD,CAAC;;EAEF,IAAI,gBAAgB,GAAG,SAAS,KAAK,EAAE;IACrC,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;GACtD,CAAC;;EAEF,IAAI,uBAAuB,EAAE,WAAW;;IAEtC,IAAI,eAAe,GAAG,SAAS,YAAY,EAAE;MAC3C,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;;MAEvD,GAAG,OAAO,YAAY,KAAK,QAAQ,EAAE;QACnC,GAAG,YAAY,KAAK,EAAE,EAAE;UACtB,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;UAC/C,IAAI,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;UACzC,IAAI,SAAS,CAAC;UACd,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACzC,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,CAAC,MAAM;cACT,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;cAC9B,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;aAC7D,CAAC;WACH;SACF;OACF,MAAM,GAAG,YAAY,YAAY,eAAe,EAAE;QACjD,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,YAAY,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE;UACzC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;SAC3B,CAAC,CAAC;OACJ;KACF,CAAC;;IAEF,IAAI,KAAK,GAAG,eAAe,CAAC,SAAS,CAAC;;IAEtC,KAAK,CAAC,MAAM,GAAG,SAAS,IAAI,EAAE,KAAK,EAAE;MACnC,GAAG,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;QACxB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;OAC5C,MAAM;QACL,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;OAC1C;KACF,CAAC;;IAEF,KAAK,CAAC,MAAM,GAAG,SAAS,IAAI,EAAE;MAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;KAC5B,CAAC;;IAEF,KAAK,CAAC,GAAG,GAAG,SAAS,IAAI,EAAE;MACzB,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;KAChE,CAAC;;IAEF,KAAK,CAAC,MAAM,GAAG,SAAS,IAAI,EAAE;MAC5B,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;KACpE,CAAC;;IAEF,KAAK,CAAC,GAAG,GAAG,SAAS,IAAI,EAAE;MACzB,QAAQ,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;KAChC,CAAC;;IAEF,KAAK,CAAC,GAAG,GAAG,SAAS,IAAI,EAAE,KAAK,EAAE;MAChC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;KAC1C,CAAC;;IAEF,KAAK,CAAC,OAAO,GAAG,SAAS,QAAQ,EAAE,OAAO,EAAE;MAC1C,IAAI,OAAO,CAAC;MACZ,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;QAC7B,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;UACrC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;UAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;WAChD;SACF;OACF;KACF,CAAC;;IAEF,KAAK,CAAC,IAAI,GAAG,WAAW;MACtB,IAAI,KAAK,GAAG,EAAE,CAAC;MACf,IAAI,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;MAC1D,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;KAC9B,CAAC;;IAEF,KAAK,CAAC,MAAM,GAAG,WAAW;MACxB,IAAI,KAAK,GAAG,EAAE,CAAC;MACf,IAAI,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;MACrD,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;KAC9B,CAAC;;IAEF,KAAK,CAAC,OAAO,GAAG,WAAW;MACzB,IAAI,KAAK,GAAG,EAAE,CAAC;MACf,IAAI,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;MACnE,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;KAC9B,CAAC;;IAEF,GAAG,iBAAiB,EAAE;MACpB,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;KACxC;;IAED,KAAK,CAAC,QAAQ,GAAG,WAAW;MAC1B,IAAI,YAAY,GAAG,EAAE,CAAC;MACtB,IAAI,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE;QACjC,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,YAAY,GAAG,GAAG,CAAC;QAC/C,YAAY,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;OACpE,CAAC,CAAC;MACH,OAAO,YAAY,CAAC;KACrB,CAAC;;IAEF,MAAM,CAAC,eAAe,GAAG,eAAe,CAAC;GAC1C,CAAC;;EAEF,GAAG,EAAE,iBAAiB,IAAI,MAAM,CAAC,KAAK,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,EAAE;IACvF,uBAAuB,EAAE,CAAC;GAC3B;;;;CAIF;EACC,CAAC,OAAOlK,cAAM,KAAK,WAAW,IAAIA,cAAM;OACnC,CAAC,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM;OACxC,CAAC,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,GAAGiK,cAAI,CAAC,CAAC;CACnD,CAAC;;AAEF,CAAC,SAAS,MAAM,EAAE;;;;;;;EAOhB,IAAI,qBAAqB,GAAG,WAAW;IACrC,IAAI;MACF,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;MACjC,CAAC,CAAC,QAAQ,GAAG,OAAO,CAAC;MACrB,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,gBAAgB,KAAK,CAAC,CAAC,YAAY,CAAC;KACxD,CAAC,MAAM,CAAC,EAAE;MACT,OAAO,KAAK,CAAC;KACd;GACF,CAAC;;;EAGF,IAAI,WAAW,GAAG,WAAW;IAC3B,IAAI,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC;;IAEtB,IAAI,GAAG,GAAG,SAAS,GAAG,EAAE,IAAI,EAAE;MAC5B,GAAG,OAAO,GAAG,KAAK,QAAQ,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;;MAE9C,IAAI,GAAG,GAAG,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;MACzD,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;MACjB,GAAG,IAAI,EAAE;QACP,IAAI,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC5C,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC;QACxB,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;OACnC;;MAED,IAAI,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;MAC3C,aAAa,CAAC,IAAI,GAAG,GAAG,CAAC;MACzB,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;MACpC,aAAa,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;;MAExC,GAAG,aAAa,CAAC,QAAQ,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;QAClE,MAAM,IAAI,SAAS,CAAC,aAAa,CAAC,CAAC;OACpC;;MAED,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,gBAAgB,EAAE;QAC5C,KAAK,EAAE,aAAa;OACrB,CAAC,CAAC;KACJ,CAAC;;IAEF,IAAI,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC;;IAE1B,IAAI,0BAA0B,GAAG,SAAS,aAAa,EAAE;MACvD,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,aAAa,EAAE;QAC1C,GAAG,EAAE,WAAW;UACd,OAAO,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;SAC3C;QACD,GAAG,EAAE,SAAS,KAAK,EAAE;UACnB,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC;SAC5C;QACD,UAAU,EAAE,IAAI;OACjB,CAAC,CAAC;KACJ,CAAC;;IAEF,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC;KACzD,OAAO,CAAC,SAAS,aAAa,EAAE;MAC/B,0BAA0B,CAAC,aAAa,CAAC,CAAC;KAC3C,CAAC,CAAC;;IAEH,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE;;MAE7B,UAAU,EAAE;QACV,GAAG,EAAE,WAAW;UACd,IAAI,KAAK,GAAG,IAAI,CAAC;UACjB,OAAO,WAAW;YAChB,OAAO,KAAK,CAAC,IAAI,CAAC;WACnB,CAAC;SACH;OACF;;MAED,MAAM,GAAG;QACP,GAAG,EAAE,WAAW;UACd,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;SACnD;QACD,GAAG,EAAE,SAAS,KAAK,EAAE;UACnB,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,KAAK,CAAC;SAClC;QACD,UAAU,EAAE,IAAI;OACjB;;MAED,UAAU,GAAG;QACX,GAAG,EAAE,WAAW;UACd,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;SAC3D;QACD,GAAG,EAAE,SAAS,KAAK,EAAE;UACnB,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,KAAK,CAAC;SACtC;QACD,UAAU,EAAE,IAAI;OACjB;;MAED,QAAQ,EAAE;QACR,GAAG,EAAE,WAAW;;UAEd,IAAI,YAAY,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;;;;UAI1F,IAAI,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI,YAAY;YAC5D,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,GAAE;;UAEjC,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ;YACjC,IAAI;YACJ,IAAI,CAAC,cAAc,CAAC,QAAQ;aAC3B,eAAe,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;SAC7D;QACD,UAAU,EAAE,IAAI;OACjB;;MAED,UAAU,EAAE;QACV,GAAG,EAAE,WAAW;UACd,OAAO,EAAE,CAAC;SACX;QACD,GAAG,EAAE,SAAS,KAAK,EAAE;SACpB;QACD,UAAU,EAAE,IAAI;OACjB;;MAED,UAAU,EAAE;QACV,GAAG,EAAE,WAAW;UACd,OAAO,EAAE,CAAC;SACX;QACD,GAAG,EAAE,SAAS,KAAK,EAAE;SACpB;QACD,UAAU,EAAE,IAAI;OACjB;;MAED,cAAc,EAAE;QACd,GAAG,EAAE,WAAW;UACd,IAAI,YAAY,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;UACpD,IAAI,KAAK,GAAG,IAAI,CAAC;UACjB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,UAAU,EAAE;YACvD,IAAI,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;YACtC,YAAY,CAAC,UAAU,CAAC,GAAG,WAAW;cACpC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;cACtC,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC;aACxC,CAAC;WACH,CAAC,CAAC;UACH,OAAO,YAAY,CAAC;SACrB;QACD,UAAU,EAAE,IAAI;OACjB;KACF,CAAC,CAAC;;IAEH,GAAG,CAAC,eAAe,GAAG,SAAS,IAAI,EAAE;MACnC,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;KACpD,CAAC;;IAEF,GAAG,CAAC,eAAe,GAAG,SAAS,GAAG,EAAE;MAClC,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;KACpD,CAAC;;IAEF,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;;GAElB,CAAC;;EAEF,GAAG,CAAC,qBAAqB,EAAE,EAAE;IAC3B,WAAW,EAAE,CAAC;GACf;;EAED,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC,KAAK,EAAE,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE;IACjE,IAAI,SAAS,GAAG,WAAW;MACzB,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;KAChI,CAAC;;IAEF,IAAI;MACF,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE;QAC/C,GAAG,EAAE,SAAS;QACd,UAAU,EAAE,IAAI;OACjB,CAAC,CAAC;KACJ,CAAC,MAAM,CAAC,EAAE;MACT,WAAW,CAAC,WAAW;QACrB,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;OACtC,EAAE,GAAG,CAAC,CAAC;KACT;GACF;;CAEF;EACC,CAAC,OAAOjK,cAAM,KAAK,WAAW,IAAIA,cAAM;OACnC,CAAC,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM;OACxC,CAAC,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,GAAGiK,cAAI,CAAC,CAAC;CACnD,CAAC;;;AC3VF,CAAC,SAAS,IAAI,EAAE,OAAO,EAAE;EACvB,IAAI,OAAOE,SAAM,KAAK,UAAU,IAAIA,SAAM,CAAC,GAAG,EAAE;IAC9CA,SAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;GACrB,MAAM,AAAiC;IACtC,cAAc,GAAG,OAAO,EAAE,CAAC;GAC5B,AAEA;CACF,CAACF,cAAI,EAAE,WAAW;;;;;;AAMnB,IAAI,OAAO,GAAG,WAAW,EAAE;IACvB,aAAa,GAAG,EAAE;IAClB,iBAAiB,GAAG,EAAE;IACtB,mBAAmB,GAAG,EAAE,CAAC;;;;;;;;AAQ7B,SAAS,SAAS,CAAC,SAAS,EAAE,UAAU,EAAE;;EAExC,SAAS,GAAG,SAAS,CAAC,IAAI,GAAG,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC;;EAErD,IAAI,YAAY,GAAG,EAAE;MACjB,CAAC,GAAG,SAAS,CAAC,MAAM;MACpB,UAAU,GAAG,CAAC;MACd,EAAE;MACF,QAAQ;MACR,CAAC;MACD,CAAC,CAAC;;;EAGN,EAAE,GAAG,UAAU,QAAQ,EAAE,aAAa,EAAE;IACtC,IAAI,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;IAEtD,UAAU,EAAE,CAAC;IACb,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;GAC3C,CAAC;;;EAGF,OAAO,CAAC,EAAE,EAAE;IACV,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;;;IAGxB,CAAC,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE;MACL,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;MAChB,SAAS;KACV;;;IAGD,CAAC,GAAG,mBAAmB,CAAC,QAAQ,CAAC,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACxE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;GACZ;CACF;;;;;;;;AAQD,SAAS,OAAO,CAAC,QAAQ,EAAE,aAAa,EAAE;;EAExC,IAAI,CAAC,QAAQ,EAAE,OAAO;;EAEtB,IAAI,CAAC,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;;;EAGtC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC;;;EAG5C,IAAI,CAAC,CAAC,EAAE,OAAO;;;EAGf,OAAO,CAAC,CAAC,MAAM,EAAE;IACf,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAC9B,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;GAChB;CACF;;;;;;;;AAQD,SAAS,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE;;EAE5C,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;;;EAGtC,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,EAAE,YAAY,CAAC,CAAC;OAC1D,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE,IAAI,CAAC,CAAC;CACtC;;;;;;;;AAQD,SAAS,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE;EAClD,IAAI,GAAG,GAAG,QAAQ;MACd,KAAK,GAAG,IAAI,CAAC,KAAK;MAClB,QAAQ,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC;MACrC,gBAAgB,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO;MACzC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;MAC9C,KAAK;MACL,CAAC,CAAC;;EAEN,QAAQ,GAAG,QAAQ,IAAI,CAAC,CAAC;;EAEzB,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;IAC/B,KAAK,GAAG,IAAI,CAAC;;;IAGb,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC;IACrB,CAAC,CAAC,IAAI,GAAG,YAAY,CAAC;GACvB,MAAM,IAAI,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;;IAEpD,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC;GACtB,MAAM;;IAEL,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC;IACb,CAAC,CAAC,KAAK,GAAG,KAAK,KAAK,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC;GAC9C;;EAED,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,YAAY,GAAG,UAAU,EAAE,EAAE;IACpD,IAAI,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;;;IAIxB,IAAI,KAAK,IAAI,WAAW,IAAI,CAAC,EAAE;MAC7B,IAAI;QACF,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC;OAC3C,CAAC,OAAO,CAAC,EAAE;;;QAGV,MAAM,GAAG,GAAG,CAAC;OACd;KACF;;;IAGD,IAAI,MAAM,IAAI,GAAG,EAAE;;MAEjB,QAAQ,IAAI,CAAC,CAAC;;;MAGd,IAAI,QAAQ,GAAG,QAAQ,EAAE;QACvB,OAAO,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;OACnD;KACF;;;IAGD,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC;GAC/C,CAAC;;;EAGF,IAAI,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;CAClE;;;;;;;;AAQD,SAAS,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;;EAE1C,KAAK,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;;EAErC,IAAI,UAAU,GAAG,KAAK,CAAC,MAAM;MACzB,CAAC,GAAG,UAAU;MACd,aAAa,GAAG,EAAE;MAClB,EAAE;MACF,CAAC,CAAC;;;EAGN,EAAE,GAAG,SAAS,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE;;IAE5C,IAAI,MAAM,IAAI,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;;;IAI5C,IAAI,MAAM,IAAI,GAAG,EAAE;MACjB,IAAI,gBAAgB,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;WAC1C,OAAO;KACb;;IAED,UAAU,EAAE,CAAC;IACb,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;GAC5C,CAAC;;;EAGF,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;CACpD;;;;;;;;;;AAUD,SAAS,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;EACjC,IAAI,QAAQ;MACR,IAAI,CAAC;;;EAGT,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;;;EAGvC,IAAI,GAAG,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;;;EAGtC,IAAI,QAAQ,EAAE;IACZ,IAAI,QAAQ,IAAI,aAAa,EAAE;MAC7B,MAAM,QAAQ,CAAC;KAChB,MAAM;MACL,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;KAChC;GACF;;;EAGD,SAAS,CAAC,KAAK,EAAE,UAAU,aAAa,EAAE;;IAExC,gBAAgB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;;;IAGtC,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;GAClC,EAAE,IAAI,CAAC,CAAC;CACV;;;;;;;;AAQD,MAAM,CAAC,KAAK,GAAG,SAAS,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE;;EAExC,SAAS,CAAC,IAAI,EAAE,UAAU,YAAY,EAAE;;IAEtC,gBAAgB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;GACtC,CAAC,CAAC;;EAEH,OAAO,MAAM,CAAC;CACf,CAAC;;;;;;;AAOF,MAAM,CAAC,IAAI,GAAG,SAAS,IAAI,CAAC,QAAQ,EAAE;EACpC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;CACvB,CAAC;;;;;;AAMF,MAAM,CAAC,KAAK,GAAG,SAAS,KAAK,GAAG;EAC9B,aAAa,GAAG,EAAE,CAAC;EACnB,iBAAiB,GAAG,EAAE,CAAC;EACvB,mBAAmB,GAAG,EAAE,CAAC;CAC1B,CAAC;;;;;;;AAOF,MAAM,CAAC,SAAS,GAAG,SAAS,SAAS,CAAC,QAAQ,EAAE;EAC9C,OAAO,QAAQ,IAAI,aAAa,CAAC;CAClC,CAAC;;;;AAIF,OAAO,MAAM,CAAC;;CAEb,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpSJ;AACA;IAKMG;qBACUC,MAAZ,EAAoB;;;aACXC,OAAL,GAAeD,OAAOE,MAAP,CAAcC,OAAd,CAAsBF,OAArC;aACKG,GAAL,GAAWJ,OAAOE,MAAP,CAAcC,OAAd,CAAsBC,GAAjC;;;;;;;;4BAuBAA,KAAK;gBACD,CAACL,QAAQM,SAAb,EAAwB;uBACb,IAAP;;;gBAGEC,QAAQC,OAAOC,YAAP,CAAoBC,OAApB,CAA4B,KAAKL,GAAjC,CAAd;;gBAEIM,MAAMC,EAAN,CAASC,KAAT,CAAeN,KAAf,CAAJ,EAA2B;uBAChB,IAAP;;;gBAGEO,OAAOC,KAAKC,KAAL,CAAWT,KAAX,CAAb;;mBAEOI,MAAMC,EAAN,CAASK,MAAT,CAAgBZ,GAAhB,KAAwBA,IAAIa,MAA5B,GAAqCJ,KAAKT,GAAL,CAArC,GAAiDS,IAAxD;;;;4BAGAK,QAAQ;;gBAEJ,CAACnB,QAAQM,SAAT,IAAsB,CAAC,KAAKJ,OAAhC,EAAyC;;;;;gBAKrC,CAACS,MAAMC,EAAN,CAASO,MAAT,CAAgBA,MAAhB,CAAL,EAA8B;;;;;gBAK1Bf,UAAU,KAAKgB,GAAL,EAAd;;;gBAGIT,MAAMC,EAAN,CAASC,KAAT,CAAeT,OAAf,CAAJ,EAA6B;0BACf,EAAV;;;;kBAIEiB,MAAN,CAAajB,OAAb,EAAsBe,MAAtB;;;mBAGOV,YAAP,CAAoBa,OAApB,CAA4B,KAAKjB,GAAjC,EAAsCU,KAAKQ,SAAL,CAAenB,OAAf,CAAtC;;;;4BA1DmB;gBACf;oBACI,EAAE,kBAAkBI,MAApB,CAAJ,EAAiC;2BACtB,KAAP;;;oBAGEgB,OAAO,SAAb;;;;uBAIOf,YAAP,CAAoBa,OAApB,CAA4BE,IAA5B,EAAkCA,IAAlC;uBACOf,YAAP,CAAoBgB,UAApB,CAA+BD,IAA/B;;uBAEO,IAAP;aAZJ,CAaE,OAAOE,CAAP,EAAU;uBACD,KAAP;;;;;;;AC5BZ;;;;AAIA,AAAO,IAAMC,YAAY;WACd,OADc;aAEZ,SAFY;WAGd;CAHJ;;AAMP,AAAO,IAAMC,QAAQ;WACV,OADU;WAEV;CAFJ;;ACVP;AACA;AAQA,IAAMjB,QAAQ;;QAEN;cAAA,kBACOkB,KADP,EACc;mBACH,KAAKC,cAAL,CAAoBD,KAApB,MAA+BE,MAAtC;SAFJ;cAAA,kBAIOF,KAJP,EAIc;mBACH,KAAKC,cAAL,CAAoBD,KAApB,MAA+BG,MAA/B,IAAyC,CAACA,OAAOC,KAAP,CAAaJ,KAAb,CAAjD;SALJ;cAAA,kBAOOA,KAPP,EAOc;mBACH,KAAKC,cAAL,CAAoBD,KAApB,MAA+BK,MAAtC;SARJ;eAAA,mBAUQL,KAVR,EAUe;mBACJ,KAAKC,cAAL,CAAoBD,KAApB,MAA+BM,OAAtC;SAXJ;gBAAA,qBAaSN,KAbT,EAagB;mBACL,KAAKC,cAAL,CAAoBD,KAApB,MAA+BO,QAAtC;SAdJ;aAAA,iBAgBMP,KAhBN,EAgBa;mBACF,CAAC,KAAKQ,eAAL,CAAqBR,KAArB,CAAD,IAAgCS,MAAMnK,OAAN,CAAc0J,KAAd,CAAvC;SAjBJ;eAAA,mBAmBQA,KAnBR,EAmBe;mBACJ,KAAKU,UAAL,CAAgBV,KAAhB,EAAuBW,OAAvB,CAAP;SApBJ;gBAAA,oBAsBSX,KAtBT,EAsBgB;mBACL,KAAKU,UAAL,CAAgBV,KAAhB,EAAuBY,QAAvB,CAAP;SAvBJ;eAAA,mBAyBQZ,KAzBR,EAyBe;mBACJ,KAAKU,UAAL,CAAgBV,KAAhB,EAAuBa,OAAvB,CAAP;SA1BJ;gBAAA,oBA4BSb,KA5BT,EA4BgB;mBACL,KAAKC,cAAL,CAAoBD,KAApB,MAA+Bc,IAAtC;SA7BJ;aAAA,iBA+BMd,KA/BN,EA+Ba;mBACF,KAAKU,UAAL,CAAgBV,KAAhB,EAAuBe,KAAvB,CAAP;SAhCJ;WAAA,eAkCIf,KAlCJ,EAkCW;mBACA,KAAKU,UAAL,CAAgBV,KAAhB,EAAuBgB,YAAvB,KAAwC,KAAKN,UAAL,CAAgBV,KAAhB,EAAuBiB,MAAvB,CAA/C;SAnCJ;aAAA,iBAqCMjB,KArCN,EAqCa;mBACF,KAAKU,UAAL,CAAgBV,KAAhB,EAAuBkB,SAAvB,KAAsC,CAAC,KAAKV,eAAL,CAAqBR,KAArB,CAAD,IAAgC,KAAKZ,MAAL,CAAYY,MAAMmB,IAAlB,CAA7E;SAtCJ;WAAA,eAwCInB,KAxCJ,EAwCW;mBACA,CAAC,KAAKQ,eAAL,CAAqBR,KAArB,CAAD,IAAgC,mFAAmFL,IAAnF,CAAwFK,KAAxF,CAAvC;SAzCJ;uBAAA,2BA2CgBA,KA3ChB,EA2CuB;mBACZA,UAAU,IAAV,IAAkB,OAAOA,KAAP,KAAiB,WAA1C;SA5CJ;aAAA,iBA8CMA,KA9CN,EA8Ca;mBAEL,KAAKQ,eAAL,CAAqBR,KAArB,KACC,CAAC,KAAKZ,MAAL,CAAYY,KAAZ,KAAsB,KAAKoB,KAAL,CAAWpB,KAAX,CAAtB,IAA2C,KAAKqB,QAAL,CAAcrB,KAAd,CAA5C,KAAqE,CAACA,MAAMX,MAD7E,IAEC,KAAKC,MAAL,CAAYU,KAAZ,KAAsB,CAACE,OAAOoB,IAAP,CAAYtB,KAAZ,EAAmBX,MAH/C;SA/CJ;kBAAA,0BAqDWW,KArDX,EAqDkBuB,WArDlB,EAqD+B;mBACpBjB,QAAQN,SAASuB,WAAT,IAAwBvB,iBAAiBuB,WAAjD,CAAP;SAtDJ;sBAAA,0BAwDevB,KAxDf,EAwDsB;mBACX,CAAC,KAAKQ,eAAL,CAAqBR,KAArB,CAAD,GAA+BA,MAAMuB,WAArC,GAAmD,IAA1D;;KA3DE;;;cAAA,wBAgEG;eACF;gCACkB,SAAS,CAAC,CAAClO,SAASmO,YADtC;sBAEO,sBAAsBnO,SAASoO,eAAT,CAAyBC,KAA/C,IAAwD,CAAC,OAAO/B,IAAP,CAAY3E,UAAUK,SAAtB,CAFhE;sBAGO,kBAAkBsE,IAAlB,CAAuB3E,UAAU2G,QAAjC,CAHP;mBAII,uBAAuBhC,IAAvB,CAA4B3E,UAAU2G,QAAtC;SAJX;KAjEM;;;;;SAAA,iBA2EJC,GA3EI,EA2EwB;YAAvBC,YAAuB,uEAAR,MAAQ;;eACvB,IAAI9G,OAAJ,CAAY,UAAC+G,OAAD,EAAUC,MAAV,EAAqB;gBAChC;oBACMC,UAAU,IAAIC,cAAJ,EAAhB;;;oBAGI,EAAE,qBAAqBD,OAAvB,CAAJ,EAAqC;;;;wBAI7BE,gBAAR,CAAyB,MAAzB,EAAiC,YAAM;wBAC/BL,iBAAiB,MAArB,EAA6B;4BACrB;oCACQ3C,KAAKC,KAAL,CAAW6C,QAAQG,YAAnB,CAAR;yBADJ,CAEE,OAAOtC,CAAP,EAAU;oCACAmC,QAAQG,YAAhB;;qBAJR,MAMO;gCACKH,QAAQI,QAAhB;;iBARR;;wBAYQF,gBAAR,CAAyB,OAAzB,EAAkC,YAAM;0BAC9B,IAAIG,KAAJ,CAAUL,QAAQM,UAAlB,CAAN;iBADJ;;wBAIQC,IAAR,CAAa,KAAb,EAAoBX,GAApB,EAAyB,IAAzB;;;wBAGQC,YAAR,GAAuBA,YAAvB;;wBAEQW,IAAR;aA7BJ,CA8BE,OAAO3C,CAAP,EAAU;uBACDA,CAAP;;SAhCD,CAAP;KA5EM;;;;;;aAAA,qBAoHA4C,GApHA,EAoHmB;YAAdC,QAAc,uEAAH,CAAG;;eAClB,IAAI3H,OAAJ,CAAY,UAAC+G,OAAD,EAAUC,MAAV,EAAqB;gBAC9BY,QAAQ,IAAIC,KAAJ,EAAd;gBACMC,UAAU,SAAVA,OAAU,GAAM;uBACXF,MAAMG,MAAb;uBACOH,MAAMI,OAAb;iBACCJ,MAAMK,YAAN,IAAsBN,QAAtB,GAAiCZ,OAAjC,GAA2CC,MAA5C,EAAoDY,KAApD;aAHJ;mBAKOvI,MAAP,CAAcuI,KAAd,EAAqB,EAACG,QAAQD,OAAT,EAAkBE,SAASF,OAA3B,EAAoCJ,QAApC,EAArB;SAPG,CAAP;KArHM;;;;cAAA,sBAiICb,GAjID,EAiIM;eACL,IAAI7G,OAAJ,CAAY,UAAC+G,OAAD,EAAUC,MAAV,EAAqB;uBAC7BH,GAAP,EAAY;yBACCE,OADD;uBAEDC;aAFX;SADG,CAAP;KAlIM;;;;cAAA,sBA2ICH,GA3ID,EA2IM3H,EA3IN,EA2IU;YACZ,CAAC6E,MAAMC,EAAN,CAASK,MAAT,CAAgBwC,GAAhB,CAAL,EAA2B;;;;YAIrBqB,SAAS,QAAf;YACMC,QAAQpE,MAAMC,EAAN,CAASK,MAAT,CAAgBnF,EAAhB,CAAd;YACIkJ,WAAW,KAAf;;YAEMC,SAAS,SAATA,MAAS;mBAAM/P,SAASgQ,gBAAT,OAA8BpJ,EAA9B,EAAoCoF,MAA1C;SAAf;;iBAESiE,YAAT,CAAsBC,IAAtB,EAA4B;;gBAEpBL,SAASE,QAAb,EAAuB;;;;;iBAKlBI,SAAL,GAAiBD,IAAjB;;;qBAGSE,IAAT,CAAcC,YAAd,CAA2B,IAA3B,EAAiCrQ,SAASoQ,IAAT,CAAcE,UAAd,CAAyB,CAAzB,CAAjC;;;;YAIA,CAACT,KAAD,IAAU,CAACE,QAAf,EAAyB;gBACfQ,aAAazF,QAAQM,SAA3B;;;gBAGMoF,YAAYxQ,SAASyQ,aAAT,CAAuB,KAAvB,CAAlB;kBACMC,YAAN,CAAmBF,SAAnB,EAA8B,IAA9B;;gBAEIX,KAAJ,EAAW;0BACGc,YAAV,CAAuB,IAAvB,EAA6B/J,EAA7B;;;;gBAIA2J,UAAJ,EAAgB;oBACNK,SAAStF,OAAOC,YAAP,CAAoBC,OAApB,CAA4BoE,SAAShJ,EAArC,CAAf;2BACWgK,WAAW,IAAtB;;oBAEId,QAAJ,EAAc;wBACJI,OAAOrE,KAAKC,KAAL,CAAW8E,MAAX,CAAb;iCACa3K,IAAb,CAAkBuK,SAAlB,EAA6BN,KAAKW,OAAlC;;;;;;kBAOHC,KADL,CACWvC,GADX,EAEKwC,IAFL,CAEU,kBAAU;oBACRtF,MAAMC,EAAN,CAASC,KAAT,CAAeqF,MAAf,CAAJ,EAA4B;;;;oBAIxBT,UAAJ,EAAgB;2BACLhF,YAAP,CAAoBa,OAApB,CACIwD,SAAShJ,EADb,EAEIiF,KAAKQ,SAAL,CAAe;iCACF2E;qBADb,CAFJ;;;6BAQS/K,IAAb,CAAkBuK,SAAlB,EAA6BQ,MAA7B;aAhBR,EAkBKC,KAlBL,CAkBW,YAAM,EAlBjB;;KA5LE;;;;cAAA,sBAmNCrB,MAnND,EAmNS;eACLA,MAAV,SAAoBsB,KAAKxH,KAAL,CAAWwH,KAAKC,MAAL,KAAgB,KAA3B,CAApB;KApNM;;;;QAAA,gBAwNLC,QAxNK,EAwNKC,OAxNL,EAwNc;;YAEdC,UAAUF,SAASpF,MAAT,GAAkBoF,QAAlB,GAA6B,CAACA,QAAD,CAA7C;;;;cAIMG,IAAN,CAAWD,OAAX,EACKE,OADL,GAEKC,OAFL,CAEa,UAACC,OAAD,EAAUC,KAAV,EAAoB;gBACnBC,QAAQD,QAAQ,CAAR,GAAYN,QAAQQ,SAAR,CAAkB,IAAlB,CAAZ,GAAsCR,OAApD;;;gBAGMS,SAASJ,QAAQK,UAAvB;gBACMC,UAAUN,QAAQO,WAAxB;;;;kBAIMC,WAAN,CAAkBR,OAAlB;;;;;gBAKIM,OAAJ,EAAa;uBACF3B,YAAP,CAAoBuB,KAApB,EAA2BI,OAA3B;aADJ,MAEO;uBACIE,WAAP,CAAmBN,KAAnB;;SAnBZ;KA9NM;;;;iBAAA,yBAuPIO,IAvPJ,EAuPUC,UAvPV,EAuPsBC,IAvPtB,EAuP4B;;YAE5BX,UAAU1R,SAASyQ,aAAT,CAAuB0B,IAAvB,CAAhB;;;YAGI1G,MAAMC,EAAN,CAASO,MAAT,CAAgBmG,UAAhB,CAAJ,EAAiC;kBACvBE,aAAN,CAAoBZ,OAApB,EAA6BU,UAA7B;;;;YAIA3G,MAAMC,EAAN,CAASK,MAAT,CAAgBsG,IAAhB,CAAJ,EAA2B;oBACfE,SAAR,GAAoBF,IAApB;;;;eAIGX,OAAP;KAtQM;;;;eAAA,uBA0QEA,OA1QF,EA0QWc,MA1QX,EA0QmB;eAClBT,UAAP,CAAkB1B,YAAlB,CAA+BqB,OAA/B,EAAwCc,OAAOP,WAA/C;KA3QM;;;;iBAAA,yBA+QIE,IA/QJ,EA+QUL,MA/QV,EA+QkBM,UA/QlB,EA+Q8BC,IA/Q9B,EA+QoC;;eAEnCH,WAAP,CAAmBzG,MAAMgF,aAAN,CAAoB0B,IAApB,EAA0BC,UAA1B,EAAsCC,IAAtC,CAAnB;KAjRM;;;;iBAAA,yBAqRIX,OArRJ,EAqRa;YACfjG,MAAMC,EAAN,CAASsC,QAAT,CAAkB0D,OAAlB,KAA8BjG,MAAMC,EAAN,CAASqC,KAAT,CAAe2D,OAAf,CAAlC,EAA2D;kBACjDH,IAAN,CAAWG,OAAX,EAAoBD,OAApB,CAA4BhG,MAAMgH,aAAlC;;;;YAIA,CAAChH,MAAMC,EAAN,CAASgG,OAAT,CAAiBA,OAAjB,CAAD,IAA8B,CAACjG,MAAMC,EAAN,CAASgG,OAAT,CAAiBA,QAAQK,UAAzB,CAAnC,EAAyE;;;;gBAIjEA,UAAR,CAAmBW,WAAnB,CAA+BhB,OAA/B;KA/RM;;;;gBAAA,wBAmSGA,OAnSH,EAmSY;YACZ1F,MADY,GACD0F,QAAQpB,UADP,CACZtE,MADY;;;eAGXA,SAAS,CAAhB,EAAmB;oBACP0G,WAAR,CAAoBhB,QAAQiB,SAA5B;sBACU,CAAV;;KAxSE;;;;kBAAA,0BA6SKC,QA7SL,EA6SeC,QA7Sf,EA6SyB;YAC3B,CAACpH,MAAMC,EAAN,CAASgG,OAAT,CAAiBmB,QAAjB,CAAD,IAA+B,CAACpH,MAAMC,EAAN,CAASgG,OAAT,CAAiBmB,SAASd,UAA1B,CAAhC,IAAyE,CAACtG,MAAMC,EAAN,CAASgG,OAAT,CAAiBkB,QAAjB,CAA9E,EAA0G;mBAC/F,IAAP;;;iBAGKb,UAAT,CAAoBe,YAApB,CAAiCF,QAAjC,EAA2CC,QAA3C;;eAEOD,QAAP;KApTM;;;;iBAAA,yBAwTIlB,OAxTJ,EAwTaU,UAxTb,EAwTyB;YAC3B,CAAC3G,MAAMC,EAAN,CAASgG,OAAT,CAAiBA,OAAjB,CAAD,IAA8BjG,MAAMC,EAAN,CAASC,KAAT,CAAeyG,UAAf,CAAlC,EAA8D;;;;eAIvDW,OAAP,CAAeX,UAAf,EAA2BX,OAA3B,CAAmC,gBAG7B;;gBAFFtG,GAEE;gBADF6H,KACE;;oBACMrC,YAAR,CAAqBxF,GAArB,EAA0B6H,KAA1B;SAJJ;KA7TM;;;;6BAAA,qCAsUgBC,GAtUhB,EAsUqBC,kBAtUrB,EAsUyC;;;;;;YAM3C,CAACzH,MAAMC,EAAN,CAASK,MAAT,CAAgBkH,GAAhB,CAAD,IAAyBxH,MAAMC,EAAN,CAASC,KAAT,CAAesH,GAAf,CAA7B,EAAkD;mBACvC,EAAP;;;YAGEb,aAAa,EAAnB;YACMe,WAAWD,kBAAjB;;YAEIE,KAAJ,CAAU,GAAV,EAAe3B,OAAf,CAAuB,aAAK;;gBAElB4B,WAAWC,EAAEC,IAAF,EAAjB;gBACMC,YAAYH,SAASI,OAAT,CAAiB,GAAjB,EAAsB,EAAtB,CAAlB;gBACMC,WAAWL,SAASI,OAAT,CAAiB,QAAjB,EAA2B,EAA3B,CAAjB;;;gBAGME,QAAQD,SAASN,KAAT,CAAe,GAAf,CAAd;gBACMjI,MAAMwI,MAAM,CAAN,CAAZ;gBACMX,QAAQW,MAAM3H,MAAN,GAAe,CAAf,GAAmB2H,MAAM,CAAN,EAASF,OAAT,CAAiB,OAAjB,EAA0B,EAA1B,CAAnB,GAAmD,EAAjE;;;gBAGMG,QAAQP,SAASQ,MAAT,CAAgB,CAAhB,CAAd;;oBAEQD,KAAR;qBACS,GAAL;;wBAEQnI,MAAMC,EAAN,CAASO,MAAT,CAAgBkH,QAAhB,KAA6B1H,MAAMC,EAAN,CAASK,MAAT,CAAgBoH,SAASW,KAAzB,CAAjC,EAAkE;iCACrDA,KAAT,UAAsBN,SAAtB;;;+BAGOM,KAAX,GAAmBN,SAAnB;;;qBAGC,GAAL;;+BAEe5M,EAAX,GAAgByM,SAASI,OAAT,CAAiB,GAAjB,EAAsB,EAAtB,CAAhB;;;qBAGC,GAAL;;+BAEetI,GAAX,IAAkB6H,KAAlB;;;;;;;SA/BZ;;eAwCOZ,UAAP;KA3XM;;;;gBAAA,wBA+XGV,OA/XH,EA+XYqC,MA/XZ,EA+XoB;YACtB,CAACtI,MAAMC,EAAN,CAASgG,OAAT,CAAiBA,OAAjB,CAAL,EAAgC;;;;YAI5BjR,OAAOsT,MAAX;;YAEI,CAACtI,MAAMC,EAAN,CAASsI,OAAT,CAAiBvT,IAAjB,CAAL,EAA6B;mBAClB,CAACiR,QAAQuC,YAAR,CAAqB,QAArB,CAAR;;;YAGAxT,IAAJ,EAAU;oBACEkQ,YAAR,CAAqB,QAArB,EAA+B,EAA/B;SADJ,MAEO;oBACKuD,eAAR,CAAwB,QAAxB;;KA7YE;;;;eAAA,uBAkZExC,OAlZF,EAkZW8B,SAlZX,EAkZsBW,KAlZtB,EAkZ6B;YAC/B1I,MAAMC,EAAN,CAASgG,OAAT,CAAiBA,OAAjB,CAAJ,EAA+B;gBACvB0C,SAAS,QAAb;gBACI,OAAOD,KAAP,KAAiB,WAArB,EAAkC;yBACrBA,QAAQ,KAAR,GAAgB,QAAzB;;;oBAGIE,SAAR,CAAkBD,MAAlB,EAA0BZ,SAA1B;mBACO9B,QAAQ2C,SAAR,CAAkBC,QAAlB,CAA2Bd,SAA3B,CAAP;;;eAGG,IAAP;KA7ZM;;;;YAAA,oBAiaD9B,OAjaC,EAiaQ8B,SAjaR,EAiamB;eAClB/H,MAAMC,EAAN,CAASgG,OAAT,CAAiBA,OAAjB,KAA6BA,QAAQ2C,SAAR,CAAkBC,QAAlB,CAA2Bd,SAA3B,CAApC;KAlaM;;;;WAAA,mBAsaF9B,OAtaE,EAsaO2B,QAtaP,EAsaiB;YACjBkB,YAAY,EAAE/G,gBAAF,EAAlB;;iBAESgH,KAAT,GAAiB;mBACNpH,MAAMmE,IAAN,CAAWvR,SAASgQ,gBAAT,CAA0BqD,QAA1B,CAAX,EAAgDoB,QAAhD,CAAyD,IAAzD,CAAP;;;YAGEC,UAAUH,UAAUG,OAAV,IAAqBH,UAAUI,qBAA/B,IAAwDJ,UAAUK,kBAAlE,IAAwFL,UAAUM,iBAAlG,IAAuHL,KAAvI;;eAEOE,QAAQzO,IAAR,CAAayL,OAAb,EAAsB2B,QAAtB,CAAP;KA/aM;;;;eAAA,uBAmbEA,QAnbF,EAmbY;eACX,KAAKjC,QAAL,CAAcZ,SAAd,CAAwBR,gBAAxB,CAAyCqD,QAAzC,CAAP;KApbM;;;;cAAA,sBAwbCA,QAxbD,EAwbW;eACV,KAAKjC,QAAL,CAAcZ,SAAd,CAAwBsE,aAAxB,CAAsCzB,QAAtC,CAAP;KAzbM;;;;mBAAA,6BA6bQ;YACV0B,UAAU/U,SAASgV,aAAvB;;YAEI,CAACD,OAAD,IAAYA,YAAY/U,SAASoQ,IAArC,EAA2C;sBAC7B,IAAV;SADJ,MAEO;sBACOpQ,SAAS8U,aAAT,CAAuB,QAAvB,CAAV;;;eAGGC,OAAP;KAtcM;;;;aAAA,uBA0cgC;YAAhCrD,OAAgC,uEAAtB,IAAsB;YAAhBuD,MAAgB,uEAAP,KAAO;;YAClC,CAACxJ,MAAMC,EAAN,CAASgG,OAAT,CAAiBA,OAAjB,CAAL,EAAgC;;;;YAI1BwD,YAAYzJ,MAAM0J,WAAN,CAAkBlP,IAAlB,CAAuB,IAAvB,EAA6B,yDAA7B,CAAlB;YACMmP,QAAQF,UAAU,CAAV,CAAd;YACMG,OAAOH,UAAUA,UAAUlJ,MAAV,GAAmB,CAA7B,CAAb;;YAEMsJ,OAAO,SAAPA,IAAO,QAAS;;gBAEdC,MAAMpK,GAAN,KAAc,KAAd,IAAuBoK,MAAMC,OAAN,KAAkB,CAA7C,EAAgD;;;;;gBAK1CT,UAAUtJ,MAAMgK,eAAN,EAAhB;;gBAEIV,YAAYM,IAAZ,IAAoB,CAACE,MAAMG,QAA/B,EAAyC;;sBAE/BC,KAAN;sBACMC,cAAN;aAHJ,MAIO,IAAIb,YAAYK,KAAZ,IAAqBG,MAAMG,QAA/B,EAAyC;;qBAEvCC,KAAL;sBACMC,cAAN;;SAhBR;;YAoBIX,MAAJ,EAAY;kBACFY,EAAN,CAAS,KAAKzE,QAAL,CAAcZ,SAAvB,EAAkC,SAAlC,EAA6C8E,IAA7C,EAAmD,KAAnD;SADJ,MAEO;kBACGQ,GAAN,CAAU,KAAK1E,QAAL,CAAcZ,SAAxB,EAAmC,SAAnC,EAA8C8E,IAA9C,EAAoD,KAApD;;KA1eE;;;;kBAAA,0BA+eKlE,QA/eL,EA+eemE,KA/ef,EA+esBQ,QA/etB,EA+eiF;YAAjDd,MAAiD,uEAAxC,KAAwC;YAAjCe,OAAiC,uEAAvB,IAAuB;YAAjBC,OAAiB,uEAAP,KAAO;;;YAEnFxK,MAAMC,EAAN,CAASC,KAAT,CAAeyF,QAAf,KAA4B3F,MAAMC,EAAN,CAASC,KAAT,CAAe4J,KAAf,CAA5B,IAAqD,CAAC9J,MAAMC,EAAN,CAASwK,QAAT,CAAkBH,QAAlB,CAA1D,EAAuF;;;;;YAKnFtK,MAAMC,EAAN,CAASsC,QAAT,CAAkBoD,QAAlB,KAA+B3F,MAAMC,EAAN,CAASqC,KAAT,CAAeqD,QAAf,CAAnC,EAA6D;;kBAEnDG,IAAN,CAAWH,QAAX,EAAqBK,OAArB,CAA6B,mBAAW;oBAChCC,mBAAmByE,IAAvB,EAA6B;0BACnBC,cAAN,CAAqBnQ,IAArB,CAA0B,IAA1B,EAAgCyL,OAAhC,EAAyC6D,KAAzC,EAAgDQ,QAAhD,EAA0Dd,MAA1D,EAAkEe,OAAlE,EAA2EC,OAA3E;;aAFR;;;;;;YAUEI,SAASd,MAAMnC,KAAN,CAAY,GAAZ,CAAf;;;;YAIIkD,UAAUL,OAAd;;;YAGIM,QAAQC,gBAAZ,EAA8B;sBAChB;;gCAAA;;;aAAV;;;;eASG/E,OAAP,CAAe,gBAAQ;qBACVwD,SAAS,kBAAT,GAA8B,qBAAvC,EAA8D9C,IAA9D,EAAoE4D,QAApE,EAA8EO,OAA9E;SADJ;KAnhBM;;;;MAAA,cAyhBP5E,OAzhBO,EAyhB0D;YAAxD2E,MAAwD,uEAA/C,EAA+C;YAA3CN,QAA2C;YAAjCC,OAAiC,uEAAvB,IAAuB;YAAjBC,OAAiB,uEAAP,KAAO;;cAC1DG,cAAN,CAAqB1E,OAArB,EAA8B2E,MAA9B,EAAsCN,QAAtC,EAAgD,IAAhD,EAAsDC,OAAtD,EAA+DC,OAA/D;KA1hBM;;;;OAAA,eA8hBNvE,OA9hBM,EA8hB2D;YAAxD2E,MAAwD,uEAA/C,EAA+C;YAA3CN,QAA2C;YAAjCC,OAAiC,uEAAvB,IAAuB;YAAjBC,OAAiB,uEAAP,KAAO;;cAC3DG,cAAN,CAAqB1E,OAArB,EAA8B2E,MAA9B,EAAsCN,QAAtC,EAAgD,KAAhD,EAAuDC,OAAvD,EAAgEC,OAAhE;KA/hBM;;;;iBAAA,yBAmiBIvE,OAniBJ,EAmiBsD;YAAzCS,IAAyC,uEAAlC,EAAkC;YAA9BsE,OAA8B,uEAApB,KAAoB;YAAbC,MAAa,uEAAJ,EAAI;;;YAExD,CAACjL,MAAMC,EAAN,CAASgG,OAAT,CAAiBA,OAAjB,CAAD,IAA8BjG,MAAMC,EAAN,CAASC,KAAT,CAAewG,IAAf,CAAlC,EAAwD;;;;;YAKlDoD,QAAQ,IAAI3K,WAAJ,CAAgBuH,IAAhB,EAAsB;4BAAA;oBAExBtF,OAAO9F,MAAP,CAAc,EAAd,EAAkB2P,MAAlB,EAA0B;sBACxB;aADF;SAFE,CAAd;;;gBAQQC,aAAR,CAAsBpB,KAAtB;KAljBM;;;;;eAAA,uBAujBE7D,OAvjBF,EAujBW/E,KAvjBX,EAujBkB;;YAEpBlB,MAAMC,EAAN,CAASqC,KAAT,CAAe2D,OAAf,KAA2BjG,MAAMC,EAAN,CAASsC,QAAT,CAAkB0D,OAAlB,CAA/B,EAA2D;kBACjDH,IAAN,CAAWG,OAAX,EAAoBD,OAApB,CAA4B;uBAAUhG,MAAMmL,WAAN,CAAkBpE,MAAlB,EAA0B7F,KAA1B,CAAV;aAA5B;;;;;YAKA,CAAClB,MAAMC,EAAN,CAASgG,OAAT,CAAiBA,OAAjB,CAAL,EAAgC;;;;;YAK1BmF,UAAUnF,QAAQoF,YAAR,CAAqB,cAArB,MAAyC,MAAzD;YACMC,QAAQtL,MAAMC,EAAN,CAASsI,OAAT,CAAiBrH,KAAjB,IAA0BA,KAA1B,GAAkC,CAACkK,OAAjD;;;gBAGQlG,YAAR,CAAqB,cAArB,EAAqCoG,KAArC;KAxkBM;;;;UAAA,kBA4kBHpK,KA5kBG,EA4kBa;0CAANqK,IAAM;gBAAA;;;YACfvL,MAAMC,EAAN,CAASC,KAAT,CAAegB,KAAf,CAAJ,EAA2B;mBAChBA,KAAP;;;eAGGA,MAAMvE,QAAN,GAAiBqL,OAAjB,CAAyB,UAAzB,EAAqC,UAACe,KAAD,EAAQhK,CAAR;mBAAeiB,MAAMC,EAAN,CAASK,MAAT,CAAgBiL,KAAKxM,CAAL,CAAhB,IAA2BwM,KAAKxM,CAAL,CAA3B,GAAqC,EAApD;SAArC,CAAP;KAjlBM;;;;iBAAA,yBAqlBIyM,OArlBJ,EAqlBaC,GArlBb,EAqlBkB;YACpBD,YAAY,CAAZ,IAAiBC,QAAQ,CAAzB,IAA8BpK,OAAOC,KAAP,CAAakK,OAAb,CAA9B,IAAuDnK,OAAOC,KAAP,CAAamK,GAAb,CAA3D,EAA8E;mBACnE,CAAP;;;eAGG,CAACD,UAAUC,GAAV,GAAgB,GAAjB,EAAsBC,OAAtB,CAA8B,CAA9B,CAAP;KA1lBM;;;;YAAA,oBA8lBDnE,KA9lBC,EA8lBM;eACLoE,SAAUpE,QAAQ,EAAR,GAAa,EAAd,GAAoB,EAA7B,EAAiC,EAAjC,CAAP;KA/lBM;cAAA,sBAimBCA,KAjmBD,EAimBQ;eACPoE,SAAUpE,QAAQ,EAAT,GAAe,EAAxB,EAA4B,EAA5B,CAAP;KAlmBM;cAAA,sBAomBCA,KApmBD,EAomBQ;eACPoE,SAASpE,QAAQ,EAAjB,EAAqB,EAArB,CAAP;KArmBM;;;;cAAA,wBAymBmD;YAAlDqE,IAAkD,uEAA3C,CAA2C;YAAxCC,YAAwC,uEAAzB,KAAyB;YAAlBC,QAAkB,uEAAP,KAAO;;;YAErD,CAAC9L,MAAMC,EAAN,CAAS8L,MAAT,CAAgBH,IAAhB,CAAL,EAA4B;mBACjB,KAAKI,UAAL,CAAgB,IAAhB,EAAsBH,YAAtB,EAAoCC,QAApC,CAAP;;;;YAIEG,SAAS,SAATA,MAAS;mBAAS,OAAI1E,KAAJ,EAAY2E,KAAZ,CAAkB,CAAC,CAAnB,CAAT;SAAf;;;YAGIC,QAAQ,KAAKC,QAAL,CAAcR,IAAd,CAAZ;YACMS,OAAO,KAAKC,UAAL,CAAgBV,IAAhB,CAAb;YACMW,OAAO,KAAKC,UAAL,CAAgBZ,IAAhB,CAAb;;;YAGIC,gBAAgBM,QAAQ,CAA5B,EAA+B;oBAChBA,KAAX;SADJ,MAEO;oBACK,EAAR;;;;qBAIML,WAAW,GAAX,GAAiB,EAA3B,IAAgCK,KAAhC,GAAwCF,OAAOI,IAAP,CAAxC,SAAwDJ,OAAOM,IAAP,CAAxD;KA/nBM;;;;cAAA,wBAmoBsC;YAArCrL,KAAqC,uEAA7B,EAA6B;YAAzBuL,IAAyB,uEAAlB,EAAkB;YAAdzE,OAAc,uEAAJ,EAAI;;eACrC9G,MAAM8G,OAAN,CAAc,IAAI0E,MAAJ,CAAWD,KAAK9P,QAAL,GAAgBqL,OAAhB,CAAwB,2BAAxB,EAAqD,MAArD,CAAX,EAAyE,GAAzE,CAAd,EAA6FA,QAAQrL,QAAR,EAA7F,CAAP;KApoBM;;;;eAAA,yBAwoBc;YAAZuE,KAAY,uEAAJ,EAAI;;eACbA,MAAMvE,QAAN,GAAiBqL,OAAjB,CAAyB,QAAzB,EAAmC;mBAAQpB,KAAKwB,MAAL,CAAY,CAAZ,EAAeuE,WAAf,KAA+B/F,KAAKgG,MAAL,CAAY,CAAZ,EAAeC,WAAf,EAAvC;SAAnC,CAAP;KAzoBM;;;;gBAAA,0BA6oBe;YAAZ3L,KAAY,uEAAJ,EAAI;;YACjBZ,SAASY,MAAMvE,QAAN,EAAb;;;iBAGSqD,MAAM8M,UAAN,CAAiBxM,MAAjB,EAAyB,GAAzB,EAA8B,GAA9B,CAAT;;;iBAGSN,MAAM8M,UAAN,CAAiBxM,MAAjB,EAAyB,GAAzB,EAA8B,GAA9B,CAAT;;;iBAGSN,MAAM+M,WAAN,CAAkBzM,MAAlB,CAAT;;;eAGON,MAAM8M,UAAN,CAAiBxM,MAAjB,EAAyB,GAAzB,EAA8B,EAA9B,CAAP;KA1pBM;;;;eAAA,yBA8pBc;YAAZY,KAAY,uEAAJ,EAAI;;YAChBZ,SAASY,MAAMvE,QAAN,EAAb;;;iBAGSqD,MAAMgN,YAAN,CAAmB1M,MAAnB,CAAT;;;eAGOA,OAAO8H,MAAP,CAAc,CAAd,EAAiByE,WAAjB,KAAiCvM,OAAO4L,KAAP,CAAa,CAAb,CAAxC;KArqBM;;;;UAAA,oBAyqBsB;YAAzBnF,MAAyB,uEAAhB,EAAgB;;2CAATkG,OAAS;mBAAA;;;YACxB,CAACA,QAAQ1M,MAAb,EAAqB;mBACVwG,MAAP;;;YAGEmG,SAASD,QAAQE,KAAR,EAAf;;YAEI,CAACnN,MAAMC,EAAN,CAASO,MAAT,CAAgB0M,MAAhB,CAAL,EAA8B;mBACnBnG,MAAP;;;eAGGvE,IAAP,CAAY0K,MAAZ,EAAoBlH,OAApB,CAA4B,eAAO;gBAC3BhG,MAAMC,EAAN,CAASO,MAAT,CAAgB0M,OAAOxN,GAAP,CAAhB,CAAJ,EAAkC;oBAC1B,CAAC0B,OAAOoB,IAAP,CAAYuE,MAAZ,EAAoBiC,QAApB,CAA6BtJ,GAA7B,CAAL,EAAwC;2BAC7BpE,MAAP,CAAcyL,MAAd,uBAAyBrH,GAAzB,EAA+B,EAA/B;;;sBAGEgB,MAAN,CAAaqG,OAAOrH,GAAP,CAAb,EAA0BwN,OAAOxN,GAAP,CAA1B;aALJ,MAMO;uBACIpE,MAAP,CAAcyL,MAAd,uBAAyBrH,GAAzB,EAA+BwN,OAAOxN,GAAP,CAA/B;;SARR;;eAYOM,MAAMU,MAAN,eAAaqG,MAAb,2BAAwBkG,OAAxB,GAAP;KAhsBM;;;;UAAA,kBAosBH3K,KApsBG,EAosBI;YACN,CAACtC,MAAMC,EAAN,CAASqC,KAAT,CAAeA,KAAf,CAAL,EAA4B;mBACjBA,KAAP;;;eAGGA,MAAM8K,MAAN,CAAa,UAACC,IAAD,EAAOnH,KAAP;mBAAiB5D,MAAMgL,OAAN,CAAcD,IAAd,MAAwBnH,KAAzC;SAAb,CAAP;KAzsBM;;;;aAAA,qBA6sBA1F,MA7sBA,EA6sBQ;eACPJ,KAAKC,KAAL,CAAWD,KAAKQ,SAAL,CAAeJ,MAAf,CAAX,CAAP;KA9sBM;;;;WAAA,mBAktBF8B,KAltBE,EAktBKiF,KAltBL,EAktBY;YACd,CAACvH,MAAMC,EAAN,CAASqC,KAAT,CAAeA,KAAf,CAAD,IAA0B,CAACA,MAAM/B,MAArC,EAA6C;mBAClC,IAAP;;;eAGG+B,MAAMiL,MAAN,CAAa,UAACC,IAAD,EAAOC,IAAP;mBAAiBhI,KAAKnH,GAAL,CAASmP,OAAOlG,KAAhB,IAAyB9B,KAAKnH,GAAL,CAASkP,OAAOjG,KAAhB,CAAzB,GAAkDkG,IAAlD,GAAyDD,IAA1E;SAAb,CAAP;KAvtBM;;;;oBAAA,4BA2tBO1K,GA3tBP,EA2tBY;;YAEd,wDAAwDjC,IAAxD,CAA6DiC,GAA7D,CAAJ,EAAuE;mBAC5D9B,UAAU0M,OAAjB;;;;YAIA,wDAAwD7M,IAAxD,CAA6DiC,GAA7D,CAAJ,EAAuE;mBAC5D9B,UAAU2M,KAAjB;;;eAGG,IAAP;KAtuBM;;;;kBAAA,0BA0uBK7K,GA1uBL,EA0uBU;YACZ9C,MAAMC,EAAN,CAASC,KAAT,CAAe4C,GAAf,CAAJ,EAAyB;mBACd,IAAP;;;YAGE8K,QAAQ,8DAAd;eACO9K,IAAIiG,KAAJ,CAAU6E,KAAV,IAAmBlB,OAAOmB,EAA1B,GAA+B/K,GAAtC;KAhvBM;;;;gBAAA,wBAovBGA,GApvBH,EAovBQ;YACV9C,MAAMC,EAAN,CAASC,KAAT,CAAe4C,GAAf,CAAJ,EAAyB;mBACd,IAAP;;;YAGA9C,MAAMC,EAAN,CAAS8L,MAAT,CAAgB1K,OAAOyB,GAAP,CAAhB,CAAJ,EAAkC;mBACvBA,GAAP;;;YAGE8K,QAAQ,iCAAd;eACO9K,IAAIiG,KAAJ,CAAU6E,KAAV,IAAmBlB,OAAOmB,EAA1B,GAA+B/K,GAAtC;KA9vBM;;;;YAAA,oBAkwBDA,GAlwBC,EAkwBI;YACJgL,SAASvZ,SAASyQ,aAAT,CAAuB,GAAvB,CAAf;eACO+I,IAAP,GAAcjL,GAAd;eACOgL,MAAP;KArwBM;;;;gBAAA,wBAywBG5M,KAzwBH,EAywBU;YACZ8M,SAAS9M,KAAb;;;YAGIA,MAAM+M,UAAN,CAAiB,SAAjB,KAA+B/M,MAAM+M,UAAN,CAAiB,UAAjB,CAAnC,EAAiE;4BAC/C,KAAKC,QAAL,CAAchN,KAAd,CAD+C;;kBAAA,aAC1D8M,MAD0D;;;YAI7D,KAAK/N,EAAL,CAAQC,KAAR,CAAc8N,MAAd,CAAJ,EAA2B;mBAChB,IAAP;;;YAGEG,SAASH,OAAO9B,KAAP,CAAa8B,OAAOV,OAAP,CAAe,GAAf,IAAsB,CAAnC,EAAsC3F,KAAtC,CAA4C,GAA5C,CAAf;;eAEOwG,OAAOZ,MAAP,CAAc,UAACa,MAAD,EAASC,IAAT,EAAkB;8BAI/BA,KAAK1G,KAAL,CAAW,GAAX,CAJ+B;;gBAE/BjI,GAF+B;gBAG/B4O,GAH+B;;mBAM5BlN,OAAO9F,MAAP,CAAc8S,MAAd,uBAAyB1O,GAAzB,EAA+B6O,mBAAmBD,GAAnB,CAA/B,EAAP;SANG,EAOJ,EAPI,CAAP;KAvxBM;;;;kBAAA,0BAkyBKpN,KAlyBL,EAkyBY;YACd,CAAClB,MAAMC,EAAN,CAASO,MAAT,CAAgBU,KAAhB,CAAL,EAA6B;mBAClB,EAAP;;;eAGGE,OAAOoB,IAAP,CAAYtB,KAAZ,EACFsN,GADE,CACE;mBAAUC,mBAAmB/O,GAAnB,CAAV,SAAqC+O,mBAAmBvN,MAAMxB,GAAN,CAAnB,CAArC;SADF,EAEFgP,IAFE,CAEG,GAFH,CAAP;KAvyBM;;;;aAAA,qBA6yBAxB,MA7yBA,EA6yBQ;YACRyB,WAAWpa,SAASqa,sBAAT,EAAjB;YACM3I,UAAU1R,SAASyQ,aAAT,CAAuB,KAAvB,CAAhB;iBACSyB,WAAT,CAAqBR,OAArB;gBACQvB,SAAR,GAAoBwI,MAApB;eACOyB,SAASE,UAAT,CAAoB/H,SAA3B;KAlzBM;;;;kBAAA,0BAszBKgI,KAtzBL,EAszBYC,MAtzBZ,EAszBoB;YACpBC,WAAW,SAAXA,QAAW,CAACC,CAAD,EAAIC,CAAJ;mBAAWA,MAAM,CAAN,GAAUD,CAAV,GAAcD,SAASE,CAAT,EAAYD,IAAIC,CAAhB,CAAzB;SAAjB;YACMC,QAAQH,SAASF,KAAT,EAAgBC,MAAhB,CAAd;eACUD,QAAQK,KAAlB,SAA2BJ,SAASI,KAApC;KAzzBM;;;;QA6zBNC,kBAAJ,GAAyB;YACfnJ,UAAU1R,SAASyQ,aAAT,CAAuB,MAAvB,CAAhB;;YAEM4F,SAAS;8BACO,qBADP;2BAEI,eAFJ;yBAGE,+BAHF;wBAIC;SAJhB;;YAOMlE,OAAOtF,OAAOoB,IAAP,CAAYoI,MAAZ,EAAoB6B,IAApB,CAAyB;mBAASxG,QAAQrD,KAAR,CAAckH,KAAd,MAAyBuF,SAAlC;SAAzB,CAAb;;eAEOrP,MAAMC,EAAN,CAASK,MAAT,CAAgBoG,IAAhB,IAAwBkE,OAAOlE,IAAP,CAAxB,GAAuC,KAA9C;KAz0BM;;;WAAA,mBA60BFT,OA70BE,EA60BO;mBACF,YAAM;kBACPhB,YAAN,CAAmBgB,OAAnB,EAA4B,IAA5B;oBACQqJ,YAAR,CAFa;kBAGPrK,YAAN,CAAmBgB,OAAnB,EAA4B,KAA5B;SAHJ,EAIG,CAJH;;CA90BR;;ACTA;AACA;;AAMA,IAAM6E,UAAU;;WAEL,iBAAiBvW,SAASyQ,aAAT,CAAuB,OAAvB,CAFZ;WAGL,iBAAiBzQ,SAASyQ,aAAT,CAAuB,OAAvB,CAHZ;;;;SAAA,iBAON0B,IAPM,EAOA6I,QAPA,EAOUC,WAPV,EAOuB;YAC3BC,MAAM,KAAV;YACIC,KAAK,KAAT;YACMC,UAAU3P,MAAM4P,UAAN,EAAhB;YACMC,gBAAgBF,QAAQG,QAAR,IAAoBN,WAApB,IAAmC1E,QAAQ0E,WAAjE;;gBAEWD,QAAX,SAAuB7I,IAAvB;iBACS,aAAL;sBACUoE,QAAQiF,KAAd;qBACKN,OAAO3E,QAAQkF,UAAf,KAA8B,CAACL,QAAQG,QAAT,IAAqBD,aAAnD,CAAL;;;iBAGC,aAAL;sBACU/E,QAAQmF,KAAd;qBACKR,OAAO3E,QAAQkF,UAApB;;;iBAGC,eAAL;iBACK,aAAL;sBACU,IAAN;qBACKlF,QAAQkF,UAAR,KAAuB,CAACL,QAAQG,QAAT,IAAqBD,aAA5C,CAAL;;;;sBAIM/E,QAAQmF,KAAR,IAAiBnF,QAAQiF,KAA/B;qBACKN,OAAO3E,QAAQkF,UAApB;;;eAGD;oBAAA;;SAAP;KAnCQ;;;;;SA2CN,YAAM;YACFL,UAAU3P,MAAM4P,UAAN,EAAhB;eACO,CAACD,QAAQG,QAAT,IAAqB9P,MAAMC,EAAN,CAASwK,QAAT,CAAkBzK,MAAMgF,aAAN,CAAoB,OAApB,EAA6BkL,yBAA/C,CAA5B;KAFC,EA3CO;;;;aAkDHlQ,MAAMC,EAAN,CAASwK,QAAT,CAAkB5K,OAAOsQ,qCAAzB,CAlDG;;;;iBAsDC,iBAAiB5b,SAASyQ,aAAT,CAAuB,OAAvB,CAtDlB;;;;;QAAA,gBA2DP0B,IA3DO,EA2DD;YACC0J,KADD,GACW,IADX,CACCA,KADD;;;YAGH;;gBAEI,CAAC,KAAKC,OAAN,IAAiB,CAACrQ,MAAMC,EAAN,CAASwK,QAAT,CAAkB2F,MAAME,WAAxB,CAAtB,EAA4D;uBACjD,KAAP;;;;gBAIA5J,KAAKsC,QAAL,CAAc,SAAd,CAAJ,EAA8B;uBACnBoH,MAAME,WAAN,CAAkB5J,IAAlB,EAAwBsB,OAAxB,CAAgC,IAAhC,EAAsC,EAAtC,CAAP;;;;gBAIA,KAAKuI,OAAT,EAAkB;wBACN7J,IAAR;yBACS,YAAL;+BACW0J,MAAME,WAAN,CAAkB,kCAAlB,EAAsDtI,OAAtD,CAA8D,IAA9D,EAAoE,EAApE,CAAP;;yBAEC,WAAL;+BACWoI,MAAME,WAAN,CAAkB,4CAAlB,EAAgEtI,OAAhE,CAAwE,IAAxE,EAA8E,EAA9E,CAAP;;yBAEC,WAAL;+BACWoI,MAAME,WAAN,CAAkB,4BAAlB,EAAgDtI,OAAhD,CAAwD,IAAxD,EAA8D,EAA9D,CAAP;;;+BAGO,KAAP;;aAZZ,MAcO,IAAI,KAAKwI,OAAT,EAAkB;wBACb9J,IAAR;yBACS,YAAL;+BACW0J,MAAME,WAAN,CAAkB,aAAlB,EAAiCtI,OAAjC,CAAyC,IAAzC,EAA+C,EAA/C,CAAP;;yBAEC,WAAL;+BACWoI,MAAME,WAAN,CAAkB,4BAAlB,EAAgDtI,OAAhD,CAAwD,IAAxD,EAA8D,EAA9D,CAAP;;yBAEC,WAAL;+BACWoI,MAAME,WAAN,CAAkB,uBAAlB,EAA2CtI,OAA3C,CAAmD,IAAnD,EAAyD,EAAzD,CAAP;;;+BAGO,KAAP;;;SAtChB,CAyCE,OAAOjH,CAAP,EAAU;mBACD,KAAP;;;;eAIG,KAAP;KA5GQ;;;;gBAgHA,gBAAgBxM,SAASyQ,aAAT,CAAuB,OAAvB,CAhHhB;;;;;sBAqHO,YAAM;;YAEjBrF,YAAY,KAAhB;YACI;gBACMkL,UAAUzJ,OAAOqP,cAAP,CAAsB,EAAtB,EAA0B,SAA1B,EAAqC;mBAAA,iBAC3C;gCACU,IAAZ;2BACO,IAAP;;aAHQ,CAAhB;mBAMOrN,gBAAP,CAAwB,MAAxB,EAAgC,IAAhC,EAAsCyH,OAAtC;mBACO6F,mBAAP,CAA2B,MAA3B,EAAmC,IAAnC,EAAyC7F,OAAzC;SARJ,CASE,OAAO9J,CAAP,EAAU;;;;eAILpB,SAAP;KAhBc,EArHN;;;gBAyIC,YAAM;YACTgR,QAAQpc,SAASyQ,aAAT,CAAuB,OAAvB,CAAd;cACM0B,IAAN,GAAa,OAAb;eACOiK,MAAMjK,IAAN,KAAe,OAAtB;KAHQ,EAzIA;;;;WAiJL,kBAAkBnS,SAASoO,eAjJtB;;;iBAoJC3C,MAAMoP,kBAAN,KAA6B,KApJ9B;;;;mBAwJG,gBAAgBvP,MAAhB,IAA0BA,OAAO+Q,UAAP,CAAkB,0BAAlB,EAA8C3H;CAxJ3F;;ACPA;AACA;AAMA,IAAM4H,QAAQ;cAAA,wBACG;YACL,CAAC,KAAKR,OAAV,EAAmB;mBACR,IAAP;;;eAGG,KAAKD,KAAL,CAAW7L,gBAAX,CAA4B,QAA5B,CAAP;KANM;;;;qBAAA,+BAUU;YACZ,CAAC,KAAK8L,OAAV,EAAmB;mBACR,IAAP;;;;YAIEpD,UAAU4D,MAAMC,UAAN,CAAiBtW,IAAjB,CAAsB,IAAtB,CAAhB;;YAEIwF,MAAMC,EAAN,CAASC,KAAT,CAAe+M,OAAf,CAAJ,EAA6B;mBAClB,IAAP;;;;YAIE8D,QAAQpP,MAAMmE,IAAN,CAAWmH,OAAX,EAAoBG,MAApB,CAA2B;mBAAU,CAACpN,MAAMC,EAAN,CAASC,KAAT,CAAegN,OAAO7B,YAAP,CAAoB,MAApB,CAAf,CAAX;SAA3B,CAAd;;;YAGIrL,MAAMC,EAAN,CAASC,KAAT,CAAe6Q,KAAf,CAAJ,EAA2B;mBAChB,IAAP;;;;eAIG/Q,MAAMgR,MAAN,CAAaD,MAAMvC,GAAN,CAAU;mBAAUnN,OAAO6L,OAAO7B,YAAP,CAAoB,MAApB,CAAP,CAAV;SAAV,CAAb,CAAP;KA/BM;UAAA,oBAkCD;YACD,CAAC,KAAKgF,OAAV,EAAmB;;;;YAIb/Q,SAAS,IAAf;;;eAGOmR,cAAP,CAAsBnR,OAAO8Q,KAA7B,EAAoC,SAApC,EAA+C;eAAA,iBACrC;;oBAEInD,UAAU4D,MAAMC,UAAN,CAAiBtW,IAAjB,CAAsB8E,MAAtB,CAAhB;;oBAEIU,MAAMC,EAAN,CAASC,KAAT,CAAe+M,OAAf,CAAJ,EAA6B;2BAClB,IAAP;;;oBAGEhE,UAAUtH,MAAMmE,IAAN,CAAWmH,OAAX,EAAoBG,MAApB,CAA2B;2BAAUF,OAAO7B,YAAP,CAAoB,KAApB,MAA+B/L,OAAO4N,MAAhD;iBAA3B,CAAhB;;oBAEIlN,MAAMC,EAAN,CAASC,KAAT,CAAe+I,OAAf,CAAJ,EAA6B;2BAClB,IAAP;;;uBAGG5H,OAAO4H,QAAQ,CAAR,EAAWoC,YAAX,CAAwB,MAAxB,CAAP,CAAP;aAfuC;eAAA,eAiBvCnK,KAjBuC,EAiBhC;;oBAED+L,UAAU4D,MAAMC,UAAN,CAAiBtW,IAAjB,CAAsB8E,MAAtB,CAAhB;;oBAEIU,MAAMC,EAAN,CAASC,KAAT,CAAe+M,OAAf,CAAJ,EAA6B;;;;;oBAKvBhE,UAAUtH,MAAMmE,IAAN,CAAWmH,OAAX,EAAoBG,MAApB,CAA2B;2BAAU/L,OAAO6L,OAAO7B,YAAP,CAAoB,MAApB,CAAP,MAAwCnK,KAAlD;iBAA3B,CAAhB;;;oBAGIlB,MAAMC,EAAN,CAASC,KAAT,CAAe+I,OAAf,CAAJ,EAA6B;;;;;oBAKvBtJ,YAAYsJ,QAAQmE,MAAR,CAAe;2BAAUtC,QAAQmG,IAAR,CAAazW,IAAb,CAAkB8E,MAAlB,EAA0B4N,OAAO7B,YAAP,CAAoB,MAApB,CAA1B,CAAV;iBAAf,CAAlB;;;oBAGIrL,MAAMC,EAAN,CAASC,KAAT,CAAeP,SAAf,CAAJ,EAA+B;;;;;sBAKzBuL,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,kBAA/C,EAAmE,KAAnE,EAA0E;6BAC7DlP;iBADb;;;oBAKQgQ,WA9BD,GA8B0B5R,MA9B1B,CA8BC4R,WA9BD;oBA8BcC,OA9Bd,GA8B0B7R,MA9B1B,CA8Bc6R,OA9Bd;;;;uBAiCAf,KAAP,CAAazM,GAAb,GAAmBhE,UAAU,CAAV,EAAa0L,YAAb,CAA0B,KAA1B,CAAnB;;;uBAGO+E,KAAP,CAAagB,IAAb;;;oBAGID,OAAJ,EAAa;2BACFE,IAAP;;;;uBAIGH,WAAP,GAAqBA,WAArB;;;sBAGMhG,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,eAA/C,EAAgE,KAAhE,EAAuE;6BAC1DlP;iBADb;;SAhER;KA1CM;;;;;kBAAA,4BAmHO;YACT,CAAC,KAAKmP,OAAV,EAAmB;;;;;cAKbrJ,aAAN,CAAoB6J,MAAMC,UAAN,EAApB;;;;;aAKKV,KAAL,CAAWlL,YAAX,CAAwB,KAAxB,EAA+B,KAAK1F,MAAL,CAAY8R,UAA3C;;;;;aAKKlB,KAAL,CAAWgB,IAAX;;;aAGKG,KAAL,CAAWC,GAAX,CAAe,4BAAf;;CAtIR;;ACPA;AACA;AAKA,IAAMC,OAAO;OAAA,iBACkB;YAAvB/R,GAAuB,uEAAjB,EAAiB;YAAbF,MAAa,uEAAJ,EAAI;;YACnBQ,MAAMC,EAAN,CAASC,KAAT,CAAeR,GAAf,KAAuBM,MAAMC,EAAN,CAASC,KAAT,CAAeV,MAAf,CAAvB,IAAiD,CAAC4B,OAAOoB,IAAP,CAAYhD,OAAOiS,IAAnB,EAAyBzI,QAAzB,CAAkCtJ,GAAlC,CAAtD,EAA8F;mBACnF,EAAP;;;YAGAY,SAASd,OAAOiS,IAAP,CAAY/R,GAAZ,CAAb;;YAEMsI,UAAU;0BACExI,OAAOkS,QADT;uBAEDlS,OAAOmS;SAFtB;;eAKOrK,OAAP,CAAeU,OAAf,EAAwBhC,OAAxB,CAAgC,gBAG1B;;gBAFFtG,GAEE;gBADF6H,KACE;;qBACOvH,MAAM8M,UAAN,CAAiBxM,MAAjB,EAAyBZ,GAAzB,EAA8B6H,KAA9B,CAAT;SAJJ;;eAOOjH,MAAP;;CApBR;;ACNA;AACA;;AAUA,IAAMqP,UAAU3P,MAAM4P,UAAN,EAAhB;;AAEA,IAAMgC,WAAW;;;cAAA,wBAIA;YACH9O,MAAM,IAAI+O,GAAJ,CAAQ,KAAKrS,MAAL,CAAYsS,OAApB,EAA6BjS,OAAOkS,QAApC,CAAZ;YACMC,OAAOlP,IAAImP,IAAJ,KAAapS,OAAOkS,QAAP,CAAgBE,IAA7B,IAAsCtC,QAAQuC,IAAR,IAAgB,CAACrS,OAAOsS,aAA3E;;eAEO;iBACE,KAAK3S,MAAL,CAAYsS,OADd;;SAAP;KARS;;;;;gBAAA,0BAgBE;YACP;iBACKnM,QAAL,CAAciM,QAAd,GAAyB5R,MAAMoS,UAAN,CAAiB5X,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAY6S,SAAZ,CAAsBT,QAAtB,CAA+BhM,OAA3D,CAAzB;;;iBAGKD,QAAL,CAAc2M,OAAd,GAAwB;sBACdtS,MAAM0J,WAAN,CAAkBlP,IAAlB,CAAuB,IAAvB,EAA6B,KAAKgF,MAAL,CAAY6S,SAAZ,CAAsBC,OAAtB,CAA8BjB,IAA3D,CADc;uBAEbrR,MAAMoS,UAAN,CAAiB5X,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAY6S,SAAZ,CAAsBC,OAAtB,CAA8BC,KAA1D,CAFa;yBAGXvS,MAAMoS,UAAN,CAAiB5X,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAY6S,SAAZ,CAAsBC,OAAtB,CAA8BE,OAA1D,CAHW;wBAIZxS,MAAMoS,UAAN,CAAiB5X,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAY6S,SAAZ,CAAsBC,OAAtB,CAA8BG,MAA1D,CAJY;6BAKPzS,MAAMoS,UAAN,CAAiB5X,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAY6S,SAAZ,CAAsBC,OAAtB,CAA8BI,WAA1D,CALO;sBAMd1S,MAAMoS,UAAN,CAAiB5X,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAY6S,SAAZ,CAAsBC,OAAtB,CAA8BK,IAA1D,CANc;qBAOf3S,MAAMoS,UAAN,CAAiB5X,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAY6S,SAAZ,CAAsBC,OAAtB,CAA8BM,GAA1D,CAPe;yBAQX5S,MAAMoS,UAAN,CAAiB5X,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAY6S,SAAZ,CAAsBC,OAAtB,CAA8BO,OAA1D,CARW;0BASV7S,MAAMoS,UAAN,CAAiB5X,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAY6S,SAAZ,CAAsBC,OAAtB,CAA8BQ,QAA1D,CATU;0BAUV9S,MAAMoS,UAAN,CAAiB5X,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAY6S,SAAZ,CAAsBC,OAAtB,CAA8BS,QAA1D,CAVU;4BAWR/S,MAAMoS,UAAN,CAAiB5X,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAY6S,SAAZ,CAAsBC,OAAtB,CAA8BU,UAA1D;aAXhB;;;iBAeKrN,QAAL,CAAcsN,QAAd,GAAyBjT,MAAMoS,UAAN,CAAiB5X,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAY6S,SAAZ,CAAsBY,QAAlD,CAAzB;;;iBAGKtN,QAAL,CAAcuN,MAAd,GAAuB;sBACblT,MAAMoS,UAAN,CAAiB5X,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAY6S,SAAZ,CAAsBa,MAAtB,CAA6BC,IAAzD,CADa;wBAEXnT,MAAMoS,UAAN,CAAiB5X,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAY6S,SAAZ,CAAsBa,MAAtB,CAA6BE,MAAzD;aAFZ;;;iBAMKzN,QAAL,CAAc0N,OAAd,GAAwB;wBACZrT,MAAMoS,UAAN,CAAiB5X,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAY6S,SAAZ,CAAsBgB,OAAtB,CAA8B1c,MAA1D,CADY;6BAEPqJ,MAAMoS,UAAN,CAAiB5X,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAY6S,SAAZ,CAAsBgB,OAAtB,CAA8BnC,WAA1D,CAFO;0BAGVlR,MAAMoS,UAAN,CAAiB5X,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgF,MAAL,CAAY6S,SAAZ,CAAsBgB,OAAtB,CAA8BC,QAA1D;aAHd;;;gBAOItT,MAAMC,EAAN,CAASgG,OAAT,CAAiB,KAAKN,QAAL,CAAcsN,QAA/B,CAAJ,EAA8C;qBACrCtN,QAAL,CAAc0N,OAAd,CAAsBE,WAAtB,GAAoC,KAAK5N,QAAL,CAAcsN,QAAd,CAAuB5J,aAAvB,OAAyC,KAAK7J,MAAL,CAAYgU,UAAZ,CAAuBC,OAAhE,CAApC;;;mBAGG,IAAP;SAvCJ,CAwCE,OAAOC,KAAP,EAAc;;iBAEPnC,KAAL,CAAWoC,IAAX,CAAgB,iEAAhB,EAAmFD,KAAnF;;;iBAGKE,oBAAL,CAA0B,IAA1B;;mBAEO,KAAP;;KAhEK;;;;cAAA,sBAqEFlN,IArEE,EAqEIC,UArEJ,EAqEgB;YACnBkN,YAAY,4BAAlB;YACM/B,UAAUF,SAASkC,UAAT,CAAoBtZ,IAApB,CAAyB,IAAzB,CAAhB;YACMuZ,YAAc,CAACjC,QAAQE,IAAT,GAAgBF,QAAQhP,GAAxB,GAA8B,EAA5C,UAAkD,KAAKtD,MAAL,CAAYwU,UAApE;;;YAGMC,OAAO1f,SAAS2f,eAAT,CAAyBL,SAAzB,EAAoC,KAApC,CAAb;cACMhN,aAAN,CACIoN,IADJ,EAEIjU,MAAMU,MAAN,CAAaiG,UAAb,EAAyB;kBACf,cADe;uBAEV;SAFf,CAFJ;;;YASMwN,MAAM5f,SAAS2f,eAAT,CAAyBL,SAAzB,EAAoC,KAApC,CAAZ;YACMO,OAAUL,QAAV,SAAsBrN,IAA5B;;;;;YAKI,UAAUyN,GAAd,EAAmB;gBACXE,cAAJ,CAAmB,8BAAnB,EAAmD,MAAnD,EAA2DD,IAA3D;SADJ,MAEO;gBACCC,cAAJ,CAAmB,8BAAnB,EAAmD,YAAnD,EAAiED,IAAjE;;;;aAIC3N,WAAL,CAAiB0N,GAAjB;;eAEOF,IAAP;KApGS;;;;eAAA,uBAwGDvN,IAxGC,EAwGK4N,IAxGL,EAwGW;YAChB1N,OAAO6K,KAAKhR,GAAL,CAASiG,IAAT,EAAe,KAAKlH,MAApB,CAAX;YACMmH,aAAavF,OAAO9F,MAAP,CAAc,EAAd,EAAkBgZ,IAAlB,CAAnB;;gBAEQ5N,IAAR;iBACS,KAAL;uBACW,KAAP;;;iBAGC,SAAL;uBACW,SAAP;;;;;;;YAOJ,WAAWC,UAAf,EAA2B;uBACZ0B,KAAX,UAAwB,KAAK7I,MAAL,CAAYgU,UAAZ,CAAuBlL,MAA/C;SADJ,MAEO;uBACQD,KAAX,GAAmB,KAAK7I,MAAL,CAAYgU,UAAZ,CAAuBlL,MAA1C;;;eAGGtI,MAAMgF,aAAN,CAAoB,MAApB,EAA4B2B,UAA5B,EAAwCC,IAAxC,CAAP;KA/HS;;;;eAAA,uBAmIDA,IAnIC,EAmIK;YACV5G,MAAMC,EAAN,CAASC,KAAT,CAAe0G,IAAf,CAAJ,EAA0B;mBACf,IAAP;;;YAGE2N,QAAQvU,MAAMgF,aAAN,CAAoB,MAApB,EAA4B;mBAC/B,KAAKxF,MAAL,CAAYgU,UAAZ,CAAuBgB,IAAvB,CAA4BjN;SADzB,CAAd;;cAIMd,WAAN,CACIzG,MAAMgF,aAAN,CACI,MADJ,EAEI;mBACW,KAAKxF,MAAL,CAAYgU,UAAZ,CAAuBgB,IAAvB,CAA4BD;SAH3C,EAKI3N,IALJ,CADJ;;eAUO2N,KAAP;KAtJS;;;;gBAAA,wBA0JAE,UA1JA,EA0JYH,IA1JZ,EA0JkB;YACrBI,SAAS1U,MAAMgF,aAAN,CAAoB,QAApB,CAAf;YACM2B,aAAavF,OAAO9F,MAAP,CAAc,EAAd,EAAkBgZ,IAAlB,CAAnB;YACI5N,OAAO1G,MAAM2U,WAAN,CAAkBF,UAAlB,CAAX;;YAEIjL,SAAS,KAAb;YACIoL,cAAJ;YACIX,aAAJ;YACIY,qBAAJ;YACIC,oBAAJ;;YAEI,EAAE,UAAUnO,UAAZ,CAAJ,EAA6B;uBACdD,IAAX,GAAkB,QAAlB;;;YAGA,WAAWC,UAAf,EAA2B;gBACnBA,WAAW0B,KAAX,CAAiBW,QAAjB,CAA0B,KAAKxJ,MAAL,CAAYgU,UAAZ,CAAuBuB,OAAjD,CAAJ,EAA+D;2BAChD1M,KAAX,UAAwB,KAAK7I,MAAL,CAAYgU,UAAZ,CAAuBuB,OAA/C;;SAFR,MAIO;uBACQ1M,KAAX,GAAmB,KAAK7I,MAAL,CAAYgU,UAAZ,CAAuBuB,OAA1C;;;;gBAIIN,UAAR;iBACS,MAAL;yBACa,IAAT;wBACQ,MAAR;+BACe,OAAf;uBACO,MAAP;8BACc,OAAd;;;iBAGC,MAAL;yBACa,IAAT;wBACQ,MAAR;+BACe,QAAf;uBACO,QAAP;8BACc,OAAd;;;iBAGC,UAAL;yBACa,IAAT;wBACQ,gBAAR;+BACe,iBAAf;uBACO,cAAP;8BACc,aAAd;;;iBAGC,YAAL;yBACa,IAAT;wBACQ,iBAAR;+BACe,gBAAf;uBACO,kBAAP;8BACc,iBAAd;;;iBAGC,YAAL;2BACepM,KAAX,UAAwB,KAAK7I,MAAL,CAAYgU,UAAZ,CAAuBuB,OAA/C;uBACO,MAAP;wBACQ,MAAR;uBACO,MAAP;;;;wBAIQrO,IAAR;uBACO+N,UAAP;;;;YAIJjL,MAAJ,EAAY;;mBAED/C,WAAP,CAAmBmL,SAASoD,UAAT,CAAoBxa,IAApB,CAAyB,IAAzB,EAA+Bsa,WAA/B,EAA4C,EAAEzM,OAAO,eAAT,EAA5C,CAAnB;mBACO5B,WAAP,CAAmBmL,SAASoD,UAAT,CAAoBxa,IAApB,CAAyB,IAAzB,EAA+ByZ,IAA/B,EAAqC,EAAE5L,OAAO,mBAAT,EAArC,CAAnB;;;mBAGO5B,WAAP,CAAmBmL,SAASqD,WAAT,CAAqBza,IAArB,CAA0B,IAA1B,EAAgCqa,YAAhC,EAA8C,EAAExM,OAAO,gBAAT,EAA9C,CAAnB;mBACO5B,WAAP,CAAmBmL,SAASqD,WAAT,CAAqBza,IAArB,CAA0B,IAA1B,EAAgCoa,KAAhC,EAAuC,EAAEvM,OAAO,oBAAT,EAAvC,CAAnB;;;uBAGW,cAAX,IAA6B,KAA7B;SAVJ,MAWO;mBACI5B,WAAP,CAAmBmL,SAASoD,UAAT,CAAoBxa,IAApB,CAAyB,IAAzB,EAA+ByZ,IAA/B,CAAnB;mBACOxN,WAAP,CAAmBmL,SAASqD,WAAT,CAAqBza,IAArB,CAA0B,IAA1B,EAAgCoa,KAAhC,CAAnB;;;;cAIElU,MAAN,CAAaiG,UAAb,EAAyB3G,MAAMkV,yBAAN,CAAgC,KAAK1V,MAAL,CAAY6S,SAAZ,CAAsBC,OAAtB,CAA8B5L,IAA9B,CAAhC,EAAqEC,UAArE,CAAzB;;cAEME,aAAN,CAAoB6N,MAApB,EAA4B/N,UAA5B;;;YAGID,SAAS,MAAb,EAAqB;gBACb,CAAC1G,MAAMC,EAAN,CAASqC,KAAT,CAAe,KAAKqD,QAAL,CAAc2M,OAAd,CAAsB5L,IAAtB,CAAf,CAAL,EAAkD;qBACzCf,QAAL,CAAc2M,OAAd,CAAsB5L,IAAtB,IAA8B,EAA9B;;;iBAGCf,QAAL,CAAc2M,OAAd,CAAsB5L,IAAtB,EAA4ByO,IAA5B,CAAiCT,MAAjC;SALJ,MAMO;iBACE/O,QAAL,CAAc2M,OAAd,CAAsB5L,IAAtB,IAA8BgO,MAA9B;;;eAGGA,MAAP;KAhQS;;;;eAAA,uBAoQDhO,IApQC,EAoQKC,UApQL,EAoQiB;;YAEpBiO,QAAQ5U,MAAMgF,aAAN,CACV,OADU,EAEV;iBACS2B,WAAWxL,EADpB;gBAEWwL,WAAWxL,EAAlB,WAFJ;mBAGW,KAAKqE,MAAL,CAAYgU,UAAZ,CAAuBlL;SALxB,EAOVmJ,KAAKhR,GAAL,CAASiG,IAAT,EAAe,KAAKlH,MAApB,CAPU,CAAd;;;YAWM0B,QAAQlB,MAAMgF,aAAN,CACV,OADU,EAEVhF,MAAMU,MAAN,CACIV,MAAMkV,yBAAN,CAAgC,KAAK1V,MAAL,CAAY6S,SAAZ,CAAsBa,MAAtB,CAA6BxM,IAA7B,CAAhC,CADJ,EAEI;kBACU,OADV;iBAES,CAFT;iBAGS,GAHT;kBAIU,IAJV;mBAKW,CALX;0BAMkB,KANlB;;kBAQU,QARV;+BAS0BC,WAAWxL,EAAjC,WATJ;6BAUqB,CAVrB;6BAWqB,GAXrB;6BAYqB;SAdzB,EAgBIwL,UAhBJ,CAFU,CAAd;;aAsBKhB,QAAL,CAAcuN,MAAd,CAAqBxM,IAArB,IAA6BxF,KAA7B;;;iBAGSkU,eAAT,CAAyB5a,IAAzB,CAA8B,IAA9B,EAAoC0G,KAApC;;eAEO;wBAAA;;SAAP;KA5SS;;;;kBAAA,0BAmTEwF,IAnTF,EAmTQC,UAnTR,EAmToB;YACvBsM,WAAWjT,MAAMgF,aAAN,CACb,UADa,EAEbhF,MAAMU,MAAN,CACIV,MAAMkV,yBAAN,CAAgC,KAAK1V,MAAL,CAAY6S,SAAZ,CAAsBgB,OAAtB,CAA8B3M,IAA9B,CAAhC,CADJ,EAEI;iBACS,CADT;iBAES,GAFT;mBAGW,CAHX;kBAIU,cAJV;2BAKmB;SAPvB,EASIC,UATJ,CAFa,CAAjB;;;YAgBID,SAAS,QAAb,EAAuB;qBACVD,WAAT,CAAqBzG,MAAMgF,aAAN,CAAoB,MAApB,EAA4B,IAA5B,EAAkC,GAAlC,CAArB;;gBAEIqQ,SAAS,EAAb;oBACQ3O,IAAR;qBACS,QAAL;6BACa+K,KAAKhR,GAAL,CAAS,QAAT,EAAmB,KAAKjB,MAAxB,CAAT;;;qBAGC,QAAL;6BACaiS,KAAKhR,GAAL,CAAS,UAAT,EAAqB,KAAKjB,MAA1B,CAAT;;;;;;;qBAOCsH,SAAT,UAA0BuO,OAAOxI,WAAP,EAA1B;;;aAGClH,QAAL,CAAc0N,OAAd,CAAsB3M,IAAtB,IAA8BuM,QAA9B;;eAEOA,QAAP;KA1VS;;;;cAAA,sBA8VFvM,IA9VE,EA8VI;YACPC,aAAa3G,MAAMkV,yBAAN,CAAgC,KAAK1V,MAAL,CAAY6S,SAAZ,CAAsBgB,OAAtB,CAA8B3M,IAA9B,CAAhC,CAAnB;;YAEM3B,YAAY/E,MAAMgF,aAAN,CAAoB,KAApB,EAA2BhF,MAAMU,MAAN,CAAaiG,UAAb,EAAyB;mCAC7CA,WAAW0B,KADkC;0BAEpDoJ,KAAKhR,GAAL,CAASiG,IAAT,EAAe,KAAKlH,MAApB;SAF2B,CAA3B,EAGd,OAHc,CAAlB;;;aAMKmG,QAAL,CAAc0N,OAAd,CAAsB3M,IAAtB,IAA8B3B,SAA9B;;eAEOA,SAAP;KAzWS;;;;kBAAA,0BA6WEwC,KA7WF,EA6WS+N,IA7WT,EA6We5O,IA7Wf,EA6WqBiL,KA7WrB,EA6W2D;YAA/B4C,KAA+B,uEAAvB,IAAuB;YAAjBgB,OAAiB,uEAAP,KAAO;;YAC9DlI,OAAOrN,MAAMgF,aAAN,CAAoB,IAApB,CAAb;;YAEM4P,QAAQ5U,MAAMgF,aAAN,CAAoB,OAApB,EAA6B;mBAChC,KAAKxF,MAAL,CAAYgU,UAAZ,CAAuBuB;SADpB,CAAd;;YAIMS,QAAQxV,MAAMgF,aAAN,CACV,OADU,EAEVhF,MAAMU,MAAN,CAAaV,MAAMkV,yBAAN,CAAgC,KAAK1V,MAAL,CAAY6S,SAAZ,CAAsBa,MAAtB,CAA6BxM,IAA7B,CAAhC,CAAb,EAAkF;kBACxE,OADwE;4BAEhEA,IAFgE;wBAAA;4BAAA;mBAKvE;SALX,CAFU,CAAd;;YAWM+O,OAAOzV,MAAMgF,aAAN,CAAoB,MAApB,EAA4B,EAAEsD,QAAQ,EAAV,EAA5B,CAAb;;cAEM7B,WAAN,CAAkB+O,KAAlB;cACM/O,WAAN,CAAkBgP,IAAlB;cACMC,kBAAN,CAAyB,WAAzB,EAAsC/D,KAAtC;;YAEI3R,MAAMC,EAAN,CAASgG,OAAT,CAAiBsO,KAAjB,CAAJ,EAA6B;kBACnB9N,WAAN,CAAkB8N,KAAlB;;;aAGC9N,WAAL,CAAiBmO,KAAjB;aACKnO,WAAL,CAAiB4G,IAAjB;KA1YS;;;;qBAAA,+BA8YgD;YAA3CtG,MAA2C,uEAAlC,IAAkC;YAA5B6E,IAA4B,uEAArB,CAAqB;YAAlBE,QAAkB,uEAAP,KAAO;;;YAErD,CAAC9L,MAAMC,EAAN,CAASgG,OAAT,CAAiBc,MAAjB,CAAD,IAA6B,CAAC/G,MAAMC,EAAN,CAAS8L,MAAT,CAAgBH,IAAhB,CAAlC,EAAyD;;;;;YAKnD+J,aAAa3V,MAAMoM,QAAN,CAAe,KAAKkH,QAApB,IAAgC,CAAnD;;;eAGOxM,SAAP,GAAmB9G,MAAMgM,UAAN,CAAiBJ,IAAjB,EAAuB+J,UAAvB,EAAmC7J,QAAnC,CAAnB;KAxZS;;;;gBAAA,0BA4ZE;YACP,CAAC,KAAKnM,SAAL,CAAe+P,EAApB,EAAwB;;;;;YAKpB1P,MAAMC,EAAN,CAASgG,OAAT,CAAiB,KAAKN,QAAL,CAAcuN,MAAd,CAAqBE,MAAtC,CAAJ,EAAmD;qBACtCwC,QAAT,CAAkBpb,IAAlB,CAAuB,IAAvB,EAA6B,KAAKmL,QAAL,CAAcuN,MAAd,CAAqBE,MAAlD,EAA0D,KAAKyC,KAAL,GAAa,CAAb,GAAiB,KAAKzC,MAAhF;;;;YAIApT,MAAMC,EAAN,CAASgG,OAAT,CAAiB,KAAKN,QAAL,CAAc2M,OAAd,CAAsBK,IAAvC,CAAJ,EAAkD;kBACxCxH,WAAN,CAAkB,KAAKxF,QAAL,CAAc2M,OAAd,CAAsBK,IAAxC,EAA8C,KAAKkD,KAAL,IAAc,KAAKzC,MAAL,KAAgB,CAA5E;;KAxaK;;;;YAAA,oBA6aJrM,MA7aI,EA6ae;YAAXQ,KAAW,uEAAH,CAAG;;YACpB,CAACvH,MAAMC,EAAN,CAASgG,OAAT,CAAiBc,MAAjB,CAAL,EAA+B;;;;;eAKxBQ,KAAP,GAAeA,KAAf;;;iBAGS6N,eAAT,CAAyB5a,IAAzB,CAA8B,IAA9B,EAAoCuM,MAApC;KAtbS;;;;kBAAA,0BA0bE+C,KA1bF,EA0bS;;;YACd,CAAC,KAAKnK,SAAL,CAAe+P,EAAhB,IAAsB,CAAC1P,MAAMC,EAAN,CAAS6J,KAAT,CAAeA,KAAf,CAA3B,EAAkD;;;;YAI9CvC,QAAQ,CAAZ;;YAEMuO,cAAc,SAAdA,WAAc,CAAC/O,MAAD,EAAS7F,KAAT,EAAmB;gBAC7BqG,QAAQvH,MAAMC,EAAN,CAAS8L,MAAT,CAAgB7K,KAAhB,IAAyBA,KAAzB,GAAiC,CAA/C;gBACM+R,WAAWjT,MAAMC,EAAN,CAASgG,OAAT,CAAiBc,MAAjB,IAA2BA,MAA3B,GAAoC,MAAKpB,QAAL,CAAc0N,OAAd,CAAsB1c,MAA3E;;;gBAGIqJ,MAAMC,EAAN,CAASgG,OAAT,CAAiBgN,QAAjB,CAAJ,EAAgC;yBACnB1L,KAAT,GAAiBA,KAAjB;;;oBAGMqN,QAAQ3B,SAAS8C,oBAAT,CAA8B,MAA9B,EAAsC,CAAtC,CAAd;oBACI/V,MAAMC,EAAN,CAASgG,OAAT,CAAiB2O,KAAjB,CAAJ,EAA6B;0BACnB/P,UAAN,CAAiB,CAAjB,EAAoBmR,SAApB,GAAgCzO,KAAhC;;;SAXZ;;YAgBIuC,KAAJ,EAAW;oBACCA,MAAMpD,IAAd;;qBAES,YAAL;qBACK,SAAL;qBACK,QAAL;4BACY1G,MAAMiW,aAAN,CAAoB,KAAK/E,WAAzB,EAAsC,KAAKoC,QAA3C,CAAR;;;wBAGIxJ,MAAMpD,IAAN,KAAe,YAAnB,EAAiC;iCACpBkP,QAAT,CAAkBpb,IAAlB,CAAuB,IAAvB,EAA6B,KAAKmL,QAAL,CAAcuN,MAAd,CAAqBC,IAAlD,EAAwD5L,KAAxD;;;;;;qBAMH,SAAL;qBACK,UAAL;gCACgB,KAAK5B,QAAL,CAAc0N,OAAd,CAAsB1c,MAAlC,EAA0C,KAAKuf,QAAL,GAAgB,GAA1D;;;;;;;;KAneH;;;;mBAAA,2BA8eGnP,MA9eH,EA8eW;;YAEd4J,QAAQ3Q,MAAMC,EAAN,CAAS6J,KAAT,CAAe/C,MAAf,IAAyBA,OAAOA,MAAhC,GAAyCA,MAAvD;;;YAGI,CAAC/G,MAAMC,EAAN,CAASgG,OAAT,CAAiB0K,KAAjB,CAAD,IAA4BA,MAAMtF,YAAN,CAAmB,MAAnB,MAA+B,OAA/D,EAAwE;;;;;cAKlEnG,YAAN,CAAmB,eAAnB,EAAoCyL,MAAMpJ,KAA1C;;;YAGI,CAACoI,QAAQwG,QAAb,EAAuB;;;;;cAKjBvT,KAAN,CAAYwT,WAAZ,CAAwB,SAAxB,EAAsCzF,MAAMpJ,KAAN,GAAcoJ,MAAMlF,GAApB,GAA0B,GAAhE;KAhgBS;;;;qBAAA,6BAogBK3B,KApgBL,EAogBY;;;;YAGjB,CAAC,KAAKtK,MAAL,CAAY6W,QAAZ,CAAqBlD,IAAtB,IACA,CAACnT,MAAMC,EAAN,CAASgG,OAAT,CAAiB,KAAKN,QAAL,CAAcuN,MAAd,CAAqBC,IAAtC,CADD,IAEA,CAACnT,MAAMC,EAAN,CAASgG,OAAT,CAAiB,KAAKN,QAAL,CAAc0N,OAAd,CAAsBE,WAAvC,CAFD,IAGA,KAAKD,QAAL,KAAkB,CAJtB,EAKE;;;;;YAKEgD,UAAU,CAAd;YACMC,aAAa,KAAK5Q,QAAL,CAAcsN,QAAd,CAAuBuD,qBAAvB,EAAnB;YACMC,UAAa,KAAKjX,MAAL,CAAYgU,UAAZ,CAAuBC,OAApC,cAAN;;YAEMjK,SAAS,yBAAU;kBACfkN,WAAN,CAAkB,OAAK/Q,QAAL,CAAc0N,OAAd,CAAsBE,WAAxC,EAAqDkD,OAArD,EAA8DjN,OAA9D;SADJ;;;YAKI,KAAKmN,KAAT,EAAgB;mBACL,KAAP;;;;;YAKA3W,MAAMC,EAAN,CAAS6J,KAAT,CAAeA,KAAf,CAAJ,EAA2B;sBACb,MAAMyM,WAAWzH,KAAjB,IAA0BhF,MAAM8M,KAAN,GAAcL,WAAWM,IAAnD,CAAV;SADJ,MAEO,IAAI7W,MAAM8W,QAAN,CAAe,KAAKnR,QAAL,CAAc0N,OAAd,CAAsBE,WAArC,EAAkDkD,OAAlD,CAAJ,EAAgE;sBACzDM,WAAW,KAAKpR,QAAL,CAAc0N,OAAd,CAAsBE,WAAtB,CAAkC3Q,KAAlC,CAAwCiU,IAAnD,EAAyD,EAAzD,CAAV;SADG,MAEA;;;;;YAKHP,UAAU,CAAd,EAAiB;sBACH,CAAV;SADJ,MAEO,IAAIA,UAAU,GAAd,EAAmB;sBACZ,GAAV;;;;iBAIKU,iBAAT,CAA2Bxc,IAA3B,CAAgC,IAAhC,EAAsC,KAAKmL,QAAL,CAAc0N,OAAd,CAAsBE,WAA5D,EAAyE,KAAKD,QAAL,GAAgB,GAAhB,GAAsBgD,OAA/F;;;aAGK3Q,QAAL,CAAc0N,OAAd,CAAsBE,WAAtB,CAAkC3Q,KAAlC,CAAwCiU,IAAxC,GAAkDP,OAAlD;;;;YAIItW,MAAMC,EAAN,CAAS6J,KAAT,CAAeA,KAAf,KAAyB,CACzB,YADyB,EAEzB,YAFyB,EAG3Bd,QAH2B,CAGlBc,MAAMpD,IAHY,CAA7B,EAGwB;mBACboD,MAAMpD,IAAN,KAAe,YAAtB;;KA1jBK;;;;cAAA,sBA+jBFoD,KA/jBE,EA+jBK;;YAERmN,SAAS,CAACjX,MAAMC,EAAN,CAASgG,OAAT,CAAiB,KAAKN,QAAL,CAAc0N,OAAd,CAAsBC,QAAvC,CAAD,IAAqD,KAAK9T,MAAL,CAAY0X,UAAhF;;;iBAGSF,iBAAT,CAA2Bxc,IAA3B,CAAgC,IAAhC,EAAsC,KAAKmL,QAAL,CAAc0N,OAAd,CAAsBnC,WAA5D,EAAyE+F,SAAS,KAAK3D,QAAL,GAAgB,KAAKpC,WAA9B,GAA4C,KAAKA,WAA1H,EAAuI+F,MAAvI;;;YAGInN,SAASA,MAAMpD,IAAN,KAAe,YAAxB,IAAwC,KAAK0J,KAAL,CAAW+G,OAAvD,EAAgE;;;;;iBAKvDC,cAAT,CAAwB5c,IAAxB,CAA6B,IAA7B,EAAmCsP,KAAnC;KA5kBS;;;;kBAAA,4BAglBI;;YAET,CAAC,KAAKnK,SAAL,CAAe+P,EAAhB,IAAuB,CAAC,KAAKlQ,MAAL,CAAY0X,UAAb,IAA2B,KAAKhG,WAA3D,EAAyE;;;;;YAKnEmG,cAAcrX,MAAMC,EAAN,CAASgG,OAAT,CAAiB,KAAKN,QAAL,CAAc0N,OAAd,CAAsBC,QAAvC,CAApB;;;YAGI,CAAC+D,WAAD,IAAgB,KAAK7X,MAAL,CAAY8X,eAA5B,IAA+C,KAAKC,MAAxD,EAAgE;qBACnDP,iBAAT,CAA2Bxc,IAA3B,CAAgC,IAAhC,EAAsC,KAAKmL,QAAL,CAAc0N,OAAd,CAAsBnC,WAA5D,EAAyE,KAAKoC,QAA9E;;;;YAIA+D,WAAJ,EAAiB;qBACJL,iBAAT,CAA2Bxc,IAA3B,CAAgC,IAAhC,EAAsC,KAAKmL,QAAL,CAAc0N,OAAd,CAAsBC,QAA5D,EAAsE,KAAKA,QAA3E;;;;iBAIKkE,iBAAT,CAA2Bhd,IAA3B,CAAgC,IAAhC;KApmBS;;;;aAAA,qBAwmBHid,OAxmBG,EAwmBMjO,MAxmBN,EAwmBc;cACjBvE,YAAN,CAAmB,KAAKU,QAAL,CAAcmN,QAAd,CAAuB4E,IAAvB,CAA4BD,OAA5B,CAAnB,EAAyD,CAACjO,MAA1D;KAzmBS;;;;;kBAAA,0BA8mBEqB,OA9mBF,EA8mBW;;;;YAEhB,CAAC7K,MAAMC,EAAN,CAASgG,OAAT,CAAiB,KAAKN,QAAL,CAAcmN,QAAd,CAAuB6E,KAAvB,CAA6BC,OAA9C,CAAL,EAA6D;;;;YAIvDlR,OAAO,SAAb;YACM4O,OAAO,KAAK3P,QAAL,CAAcmN,QAAd,CAAuB6E,KAAvB,CAA6BC,OAA7B,CAAqCvO,aAArC,CAAmD,IAAnD,CAAb;;;YAGIrJ,MAAMC,EAAN,CAASqC,KAAT,CAAeuI,OAAf,CAAJ,EAA6B;iBACpBA,OAAL,CAAa+M,OAAb,GAAuB/M,QAAQuC,MAAR,CAAe;uBAAW,OAAK5N,MAAL,CAAYoY,OAAZ,CAAoB/M,OAApB,CAA4B7B,QAA5B,CAAqC4O,OAArC,CAAX;aAAf,CAAvB;;;;YAIEpO,SAAS,CAACxJ,MAAMC,EAAN,CAASC,KAAT,CAAe,KAAK2K,OAAL,CAAa+M,OAA5B,CAAD,IAAyC,KAAK/M,OAAL,CAAa+M,OAAb,CAAqBrX,MAArB,GAA8B,CAAtF;iBACSsX,SAAT,CAAmBrd,IAAnB,CAAwB,IAAxB,EAA8BkM,IAA9B,EAAoC8C,MAApC;;;iBAGSsO,SAAT,CAAmBtd,IAAnB,CAAwB,IAAxB;;;YAGI,CAACgP,MAAL,EAAa;;;;;cAKPuO,YAAN,CAAmBzC,IAAnB;;;YAGM0C,WAAW,SAAXA,QAAW,UAAW;gBACpBpD,QAAQ,EAAZ;;oBAEQgD,OAAR;qBACS,IAAL;4BACY,IAAR;;;qBAGC,IAAL;qBACK,IAAL;qBACK,GAAL;4BACY,IAAR;;;qBAGC,GAAL;qBACK,GAAL;4BACY,IAAR;;;;;;;gBAOJ,CAAChD,MAAMrU,MAAX,EAAmB;uBACR,IAAP;;;mBAGGqR,SAASqG,WAAT,CAAqBzd,IAArB,CAA0B,MAA1B,EAAgCoa,KAAhC,CAAP;SA3BJ;;;aA+BK/J,OAAL,CAAa+M,OAAb,CACKM,IADL,CACU,UAACC,CAAD,EAAIC,CAAJ,EAAU;gBACNC,UAAU,OAAK7Y,MAAL,CAAYoY,OAAZ,CAAoB/M,OAApC;mBACOwN,QAAQ/K,OAAR,CAAgB6K,CAAhB,IAAqBE,QAAQ/K,OAAR,CAAgB8K,CAAhB,CAArB,GAA0C,CAA1C,GAA8C,CAAC,CAAtD;SAHR,EAKKpS,OALL,CAKa,mBAAW;gBACV4O,QAAQhD,SAAS0G,QAAT,CAAkB9d,IAAlB,CAAuB,MAAvB,EAA6B,SAA7B,EAAwCod,OAAxC,CAAd;qBACSW,cAAT,CAAwB/d,IAAxB,CAA6B,MAA7B,EAAmCod,OAAnC,EAA4CtC,IAA5C,EAAkD5O,IAAlD,EAAwDkO,KAAxD,EAA+DoD,SAASJ,OAAT,CAA/D;SAPR;;iBAUSY,aAAT,CAAuBhe,IAAvB,CAA4B,IAA5B,EAAkCkM,IAAlC,EAAwC4O,IAAxC;KArrBS;;;;;YAAA,oBA0rBJmC,OA1rBI,EA0rBKlQ,KA1rBL,EA0rBY;gBACbkQ,OAAR;iBACS,OAAL;uBACWlQ,UAAU,CAAV,GAAckK,KAAKhR,GAAL,CAAS,QAAT,EAAmB,KAAKjB,MAAxB,CAAd,GAAmD+H,KAAnD,YAAP;;iBAEC,SAAL;oBACQvH,MAAMC,EAAN,CAAS8L,MAAT,CAAgBxE,KAAhB,CAAJ,EAA4B;2BACdA,KAAV;;;uBAGGvH,MAAM+M,WAAN,CAAkBxF,KAAlB,CAAP;;iBAEC,UAAL;uBACWwL,SAASuF,QAAT,CAAkB9d,IAAlB,CAAuB,IAAvB,CAAP;;;uBAGO,IAAP;;KA1sBC;;;;iBAAA,yBA+sBCid,OA/sBD,EA+sBU1S,SA/sBV,EA+sBqB7D,KA/sBrB,EA+sB4B;YAC/BuX,OAAO,KAAK9S,QAAL,CAAcmN,QAAd,CAAuB6E,KAAvB,CAA6BF,OAA7B,CAAb;YACIlQ,QAAQ,IAAZ;YACI+N,OAAOvQ,SAAX;;gBAEQ0S,OAAR;iBACS,UAAL;oBACQ,KAAK1E,QAAL,CAAc2F,MAAlB,EAA0B;wBAClB,KAAK7N,OAAL,CAAakI,QAAb,CAAsBxS,MAAtB,GAA+B,CAA/B,IAAoC,CAAC,KAAKsK,OAAL,CAAakI,QAAb,CAAsB4F,IAAtB,CAA2B;+BAAQC,SAAS,SAAjB;qBAA3B,CAAzC,EAAiG;gCACrF,KAAK7F,QAAL,CAAc8F,QAAtB;qBADJ,MAEO;gCACK,SAAR;;iBAJR,MAMO;4BACK,EAAR;;;;;;wBAMI,CAAC7Y,MAAMC,EAAN,CAASC,KAAT,CAAegB,KAAf,CAAD,GAAyBA,KAAzB,GAAiC,KAAKuW,OAAL,CAAzC;;;oBAGIzX,MAAMC,EAAN,CAASC,KAAT,CAAeqH,KAAf,CAAJ,EAA2B;4BACf,KAAK/H,MAAL,CAAYiY,OAAZ,EAAqBqB,OAA7B;;;;oBAIA,CAAC9Y,MAAMC,EAAN,CAASC,KAAT,CAAe,KAAK2K,OAAL,CAAa4M,OAAb,CAAf,CAAD,IAA0C,CAAC,KAAK5M,OAAL,CAAa4M,OAAb,EAAsBzO,QAAtB,CAA+BzB,KAA/B,CAA/C,EAAsF;yBAC7EgK,KAAL,CAAWoC,IAAX,6BAAyCpM,KAAzC,eAAuDkQ,OAAvD;;;;;oBAKA,CAAC,KAAKjY,MAAL,CAAYiY,OAAZ,EAAqB5M,OAArB,CAA6B7B,QAA7B,CAAsCzB,KAAtC,CAAL,EAAmD;yBAC1CgK,KAAL,CAAWoC,IAAX,0BAAsCpM,KAAtC,eAAoDkQ,OAApD;;;;;;;;YAQR,CAACzX,MAAMC,EAAN,CAASgG,OAAT,CAAiBqP,IAAjB,CAAL,EAA6B;mBAClBmD,QAAQA,KAAKpP,aAAL,CAAmB,IAAnB,CAAf;;;;YAIA,CAACrJ,MAAMC,EAAN,CAASgG,OAAT,CAAiBqP,IAAjB,CAAL,EAA6B;;;;;YAKvBV,QAAQ,KAAKjP,QAAL,CAAcmN,QAAd,CAAuB4E,IAAvB,CAA4BD,OAA5B,EAAqCpO,aAArC,OAAuD,KAAK7J,MAAL,CAAYgU,UAAZ,CAAuBgB,IAAvB,CAA4BjN,KAAnF,CAAd;cACM7C,SAAN,GAAkBkN,SAAS0G,QAAT,CAAkB9d,IAAlB,CAAuB,IAAvB,EAA6Bid,OAA7B,EAAsClQ,KAAtC,CAAlB;;;YAGMR,SAASuO,QAAQA,KAAKjM,aAAL,mBAAmC9B,KAAnC,QAAvB;;YAEIvH,MAAMC,EAAN,CAASgG,OAAT,CAAiBc,MAAjB,CAAJ,EAA8B;mBACnBwO,OAAP,GAAiB,IAAjB;;KA3wBK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAAA,6BA+zBK;;;;YAER7O,OAAO,UAAb;YACM4O,OAAO,KAAK3P,QAAL,CAAcmN,QAAd,CAAuB6E,KAAvB,CAA6B5E,QAA7B,CAAsC1J,aAAtC,CAAoD,IAApD,CAAb;;;YAGMG,SAASuJ,SAASgG,SAAT,CAAmBve,IAAnB,CAAwB,IAAxB,EAA8B+F,MAA7C;iBACSsX,SAAT,CAAmBrd,IAAnB,CAAwB,IAAxB,EAA8BkM,IAA9B,EAAoC8C,MAApC;;;cAGMuO,YAAN,CAAmBzC,IAAnB;;;iBAGSwC,SAAT,CAAmBtd,IAAnB,CAAwB,IAAxB;;;YAGI,CAACgP,MAAL,EAAa;;;;;YAKPwP,SAASjG,SAASgG,SAAT,CAAmBve,IAAnB,CAAwB,IAAxB,EAA8BgU,GAA9B,CAAkC;mBAAU;0BAC7C,CAACxO,MAAMC,EAAN,CAASC,KAAT,CAAe+Y,MAAMJ,QAArB,CAAD,GAAkCI,MAAMJ,QAAxC,GAAmD,SADN;uBAEhD9F,SAASuF,QAAT,CAAkB9d,IAAlB,CAAuB,MAAvB,EAA6Bye,KAA7B;aAFsC;SAAlC,CAAf;;;eAMOC,OAAP,CAAe;sBACD,EADC;mBAEJzH,KAAKhR,GAAL,CAAS,UAAT,EAAqB,KAAKjB,MAA1B;SAFX;;;eAMOwG,OAAP,CAAe,iBAAS;qBACXuS,cAAT,CAAwB/d,IAAxB,CACI,MADJ,EAEIye,MAAMJ,QAFV,EAGIvD,IAHJ,EAII,UAJJ,EAKI2D,MAAMrE,KALV,EAMIqE,MAAMJ,QAAN,KAAmB,SAAnB,GAA+BjH,SAASqG,WAAT,CAAqBzd,IAArB,CAA0B,MAA1B,EAAgCye,MAAMJ,QAAN,CAAelM,WAAf,EAAhC,CAA/B,GAA+F,IANnG,EAOIsM,MAAMJ,QAAN,CAAehM,WAAf,OAAiC,OAAKkG,QAAL,CAAc8F,QAAd,CAAuBhM,WAAvB,EAPrC;SADJ;;;aAaKhC,OAAL,CAAakI,QAAb,GAAwBiG,OAAOxK,GAAP,CAAW;mBAASyK,MAAMJ,QAAf;SAAX,CAAxB;;iBAESL,aAAT,CAAuBhe,IAAvB,CAA4B,IAA5B,EAAkCkM,IAAlC,EAAwC4O,IAAxC;KA/2BS;;;;gBAAA,wBAm3BAzK,OAn3BA,EAm3BS;;;;YAEd,CAAC,KAAKrL,MAAL,CAAYoS,QAAZ,CAAqB5I,QAArB,CAA8B,UAA9B,CAAD,IAA8C,CAAC,KAAKxJ,MAAL,CAAYsT,QAAZ,CAAqB9J,QAArB,CAA8B,OAA9B,CAAnD,EAA2F;;;;;YAKvF,CAAChJ,MAAMC,EAAN,CAASgG,OAAT,CAAiB,KAAKN,QAAL,CAAcmN,QAAd,CAAuB6E,KAAvB,CAA6BwB,KAA9C,CAAL,EAA2D;;;;YAIrDzS,OAAO,OAAb;;;YAGI1G,MAAMC,EAAN,CAASqC,KAAT,CAAeuI,OAAf,CAAJ,EAA6B;iBACpBA,OAAL,CAAasO,KAAb,GAAqBtO,OAArB;SADJ,MAEO,IAAI,KAAKwF,OAAL,IAAgB,KAAK+I,OAAzB,EAAkC;iBAChCvO,OAAL,CAAasO,KAAb,GAAqB,CACjB,GADiB,EAEjB,IAFiB,EAGjB,CAHiB,EAIjB,IAJiB,EAKjB,GALiB,EAMjB,IANiB,EAOjB,CAPiB,CAArB;;;;aAYCtO,OAAL,CAAasO,KAAb,GAAqB,KAAKtO,OAAL,CAAasO,KAAb,CAAmB/L,MAAnB,CAA0B;mBAAS,OAAK5N,MAAL,CAAY2Z,KAAZ,CAAkBtO,OAAlB,CAA0B7B,QAA1B,CAAmCmQ,KAAnC,CAAT;SAA1B,CAArB;;;YAGM3P,SAAS,CAACxJ,MAAMC,EAAN,CAASC,KAAT,CAAe,KAAK2K,OAAL,CAAasO,KAA5B,CAAD,IAAuC,KAAKtO,OAAL,CAAasO,KAAb,CAAmB5Y,MAAnB,GAA4B,CAAlF;iBACSsX,SAAT,CAAmBrd,IAAnB,CAAwB,IAAxB,EAA8BkM,IAA9B,EAAoC8C,MAApC;;;iBAGSsO,SAAT,CAAmBtd,IAAnB,CAAwB,IAAxB;;;YAGI,CAACgP,MAAL,EAAa;;;;;YAKP8L,OAAO,KAAK3P,QAAL,CAAcmN,QAAd,CAAuB6E,KAAvB,CAA6BwB,KAA7B,CAAmC9P,aAAnC,CAAiD,IAAjD,CAAb;;;cAGM0O,YAAN,CAAmBzC,IAAnB;;;aAGKzK,OAAL,CAAasO,KAAb,CAAmBnT,OAAnB,CAA2B,iBAAS;gBAC1B4O,QAAQhD,SAAS0G,QAAT,CAAkB9d,IAAlB,CAAuB,MAAvB,EAA6B,OAA7B,EAAsC2e,KAAtC,CAAd;qBACSZ,cAAT,CAAwB/d,IAAxB,CAA6B,MAA7B,EAAmC2e,KAAnC,EAA0C7D,IAA1C,EAAgD5O,IAAhD,EAAsDkO,KAAtD;SAFJ;;iBAKS4D,aAAT,CAAuBhe,IAAvB,CAA4B,IAA5B,EAAkCkM,IAAlC,EAAwC4O,IAAxC;KA16BS;;;;aAAA,uBA86BD;YACAoC,IADA,GACS,KAAK/R,QAAL,CAAcmN,QADvB,CACA4E,IADA;;YAEFjB,UAAU,CAACzW,MAAMC,EAAN,CAASC,KAAT,CAAewX,IAAf,CAAD,IAAyBtW,OAAOiY,MAAP,CAAc3B,IAAd,EAAoBiB,IAApB,CAAyB;mBAAO,CAACW,IAAIhR,MAAZ;SAAzB,CAAzC;;cAEMrD,YAAN,CAAmB,KAAKU,QAAL,CAAcmN,QAAd,CAAuB0B,IAA1C,EAAgD,CAACiC,OAAjD;KAl7BS;;;;cAAA,sBAs7BF3M,KAt7BE,EAs7BK;YACNyP,IADM,GACG,KAAK5T,QAAL,CAAcmN,QADjB,CACNyG,IADM;;YAER7E,SAAS,KAAK/O,QAAL,CAAc2M,OAAd,CAAsBQ,QAArC;;;YAGI,CAAC9S,MAAMC,EAAN,CAASgG,OAAT,CAAiBsT,IAAjB,CAAD,IAA2B,CAACvZ,MAAMC,EAAN,CAASgG,OAAT,CAAiByO,MAAjB,CAAhC,EAA0D;;;;YAIpD8E,OAAOxZ,MAAMC,EAAN,CAASsI,OAAT,CAAiBuB,KAAjB,IAA0BA,KAA1B,GAAkC9J,MAAMC,EAAN,CAASgG,OAAT,CAAiBsT,IAAjB,KAA0BA,KAAK/Q,YAAL,CAAkB,QAAlB,CAAzE;;YAEIxI,MAAMC,EAAN,CAAS6J,KAAT,CAAeA,KAAf,CAAJ,EAA2B;gBACjB2P,aAAazZ,MAAMC,EAAN,CAASgG,OAAT,CAAiBsT,IAAjB,KAA0BA,KAAK1Q,QAAL,CAAciB,MAAM/C,MAApB,CAA7C;gBACM2S,WAAW5P,MAAM/C,MAAN,KAAiB,KAAKpB,QAAL,CAAc2M,OAAd,CAAsBQ,QAAxD;;;;;gBAKI2G,cAAe,CAACA,UAAD,IAAe,CAACC,QAAhB,IAA4BF,IAA/C,EAAsD;;;;;gBAKlDE,QAAJ,EAAc;sBACJC,eAAN;;;;;YAKJ3Z,MAAMC,EAAN,CAASgG,OAAT,CAAiByO,MAAjB,CAAJ,EAA8B;mBACnBxP,YAAP,CAAoB,eAApB,EAAqCsU,IAArC;;;YAGAxZ,MAAMC,EAAN,CAASgG,OAAT,CAAiBsT,IAAjB,CAAJ,EAA4B;kBAClBtU,YAAN,CAAmBsU,IAAnB,EAAyB,CAACC,IAA1B;kBACM9C,WAAN,CAAkB,KAAK/Q,QAAL,CAAcZ,SAAhC,EAA2C,KAAKvF,MAAL,CAAYgU,UAAZ,CAAuBgB,IAAvB,CAA4B/Q,IAAvE,EAA6E+V,IAA7E;;gBAEIA,IAAJ,EAAU;qBACD/Q,eAAL,CAAqB,UAArB;aADJ,MAEO;qBACEvD,YAAL,CAAkB,UAAlB,EAA8B,CAAC,CAA/B;;;KA99BC;;;;cAAA,sBAo+BFoU,GAp+BE,EAo+BG;YACNM,QAAQN,IAAIlT,SAAJ,CAAc,IAAd,CAAd;cACMxD,KAAN,CAAYiX,QAAZ,GAAuB,UAAvB;cACMjX,KAAN,CAAYkX,OAAZ,GAAsB,CAAtB;cACMrR,eAAN,CAAsB,QAAtB;;;cAGM3C,IAAN,CAAW8T,MAAMrV,gBAAN,CAAuB,aAAvB,CAAX,EAAkDyB,OAAlD,CAA0D,iBAAS;gBACzD+T,OAAO7Y,MAAMmK,YAAN,CAAmB,MAAnB,CAAb;kBACMnG,YAAN,CAAmB,MAAnB,EAA8B6U,IAA9B;SAFJ;;;YAMIzT,UAAJ,CAAeG,WAAf,CAA2BmT,KAA3B;;;YAGM9K,QAAQ8K,MAAMI,WAApB;YACMjL,SAAS6K,MAAMK,YAArB;;;cAGMjT,aAAN,CAAoB4S,KAApB;;eAEO;wBAAA;;SAAP;KA1/BS;;;;WAAA,qBAigCQ;YAAb7S,MAAa,uEAAJ,EAAI;YACTyN,IADS,GACA,KAAK7O,QAAL,CAAcmN,QADd,CACT0B,IADS;;YAEXiE,OAAOlkB,SAAS2lB,cAAT,CAAwBnT,MAAxB,CAAb;;;YAGI,CAAC/G,MAAMC,EAAN,CAASgG,OAAT,CAAiBwS,IAAjB,CAAL,EAA6B;;;;;YAKvB0B,QAAQ1B,KAAKpN,YAAL,CAAkB,MAAlB,MAA8B,UAA5C;YACI,CAAC8O,KAAL,EAAY;;;;;;YAMN3O,UAAUgJ,KAAKnL,aAAL,CAAmB,iCAAnB,CAAhB;YACMtE,YAAYyG,QAAQlF,UAA1B;;;cAGMR,IAAN,CAAW0O,KAAKjQ,gBAAL,sBAAyCiH,QAAQH,YAAR,CAAqB,IAArB,CAAzC,QAAX,EAAqFrF,OAArF,CAA6F,kBAAU;mBAC5Fd,YAAP,CAAoB,eAApB,EAAqC,KAArC;SADJ;;;YAKI4F,QAAQsP,WAAR,IAAuB,CAACtP,QAAQuP,aAApC,EAAmD;;sBAErCzX,KAAV,CAAgBkM,KAAhB,GAA2BtD,QAAQwO,WAAnC;sBACUpX,KAAV,CAAgBmM,MAAhB,GAA4BvD,QAAQyO,YAApC;;;gBAGMK,OAAO1I,SAAS2I,UAAT,CAAoB/f,IAApB,CAAyB,IAAzB,EAA+Bie,IAA/B,CAAb;;;gBAGM+B,UAAU,SAAVA,OAAU,IAAK;;oBAEbzZ,EAAEgG,MAAF,KAAahC,SAAb,IAA0B,CAAC,CAC3B,OAD2B,EAE3B,QAF2B,EAG7BiE,QAH6B,CAGpBjI,EAAE0Z,YAHkB,CAA/B,EAG4B;;;;;0BAKlB7X,KAAV,CAAgBkM,KAAhB,GAAwB,EAAxB;0BACUlM,KAAV,CAAgBmM,MAAhB,GAAyB,EAAzB;;;sBAGM1E,GAAN,CAAUtF,SAAV,EAAqB/E,MAAMoP,kBAA3B,EAA+CoL,OAA/C;aAdJ;;;kBAkBMpQ,EAAN,CAASrF,SAAT,EAAoB/E,MAAMoP,kBAA1B,EAA8CoL,OAA9C;;;sBAGU5X,KAAV,CAAgBkM,KAAhB,GAA2BwL,KAAKxL,KAAhC;sBACUlM,KAAV,CAAgBmM,MAAhB,GAA4BuL,KAAKvL,MAAjC;;;;cAIE9J,YAAN,CAAmBuG,OAAnB,EAA4B,IAA5B;gBACQtG,YAAR,CAAqB,UAArB,EAAiC,CAAC,CAAlC;;;cAGMD,YAAN,CAAmBwT,IAAnB,EAAyB,KAAzB;;YAEMf,OAAO1X,MAAM0J,WAAN,CAAkBlP,IAAlB,CAAuB,IAAvB,uBAAgDuM,MAAhD,QAAb;cACMjB,IAAN,CAAW4R,IAAX,EAAiB1R,OAAjB,CAAyB,eAAO;gBACxBd,YAAJ,CAAiB,eAAjB,EAAkC,IAAlC;SADJ;aAGKuD,eAAL,CAAqB,UAArB;;;aAGKlE,gBAAL,CAAsB,yDAAtB,EAAiF,CAAjF,EAAoF2F,KAApF;KA3kCS;;;;;UAAA,kBAglCNzF,IAhlCM,EAglCA;;;;YAELzE,MAAMC,EAAN,CAASC,KAAT,CAAe,KAAKV,MAAL,CAAYoS,QAA3B,CAAJ,EAA0C;mBAC/B,IAAP;;;;YAIE7M,YAAY/E,MAAMgF,aAAN,CAAoB,KAApB,EAA2BhF,MAAMkV,yBAAN,CAAgC,KAAK1V,MAAL,CAAY6S,SAAZ,CAAsBT,QAAtB,CAA+BhM,OAA/D,CAA3B,CAAlB;;;YAGI,KAAKpG,MAAL,CAAYoS,QAAZ,CAAqB5I,QAArB,CAA8B,SAA9B,CAAJ,EAA8C;sBAChCvC,WAAV,CAAsBmL,SAAS8I,YAAT,CAAsBlgB,IAAtB,CAA2B,IAA3B,EAAiC,SAAjC,CAAtB;;;;YAIA,KAAKgF,MAAL,CAAYoS,QAAZ,CAAqB5I,QAArB,CAA8B,QAA9B,CAAJ,EAA6C;sBAC/BvC,WAAV,CAAsBmL,SAAS8I,YAAT,CAAsBlgB,IAAtB,CAA2B,IAA3B,EAAiC,QAAjC,CAAtB;;;;YAIA,KAAKgF,MAAL,CAAYoS,QAAZ,CAAqB5I,QAArB,CAA8B,MAA9B,CAAJ,EAA2C;sBAC7BvC,WAAV,CAAsBmL,SAAS8I,YAAT,CAAsBlgB,IAAtB,CAA2B,IAA3B,EAAiC,MAAjC,CAAtB;;;;YAIA,KAAKgF,MAAL,CAAYoS,QAAZ,CAAqB5I,QAArB,CAA8B,cAA9B,CAAJ,EAAmD;sBACrCvC,WAAV,CAAsBmL,SAAS8I,YAAT,CAAsBlgB,IAAtB,CAA2B,IAA3B,EAAiC,cAAjC,CAAtB;;;;YAIA,KAAKgF,MAAL,CAAYoS,QAAZ,CAAqB5I,QAArB,CAA8B,UAA9B,CAAJ,EAA+C;gBACrCiK,WAAWjT,MAAMgF,aAAN,CAAoB,KAApB,EAA2BhF,MAAMkV,yBAAN,CAAgC,KAAK1V,MAAL,CAAY6S,SAAZ,CAAsBY,QAAtD,CAA3B,CAAjB;;;gBAGME,OAAOvB,SAAS+I,WAAT,CAAqBngB,IAArB,CAA0B,IAA1B,EAAgC,MAAhC,EAAwC;mCAChCiK,KAAKtJ;aADb,CAAb;qBAGSsL,WAAT,CAAqB0M,KAAKyB,KAA1B;qBACSnO,WAAT,CAAqB0M,KAAKjS,KAA1B;;;qBAGSuF,WAAT,CAAqBmL,SAASgJ,cAAT,CAAwBpgB,IAAxB,CAA6B,IAA7B,EAAmC,QAAnC,CAArB;;;;;gBAKI,KAAKgF,MAAL,CAAY6W,QAAZ,CAAqBlD,IAAzB,EAA+B;oBACrBM,UAAUzT,MAAMgF,aAAN,CACZ,MADY,EAEZ;2BACW,KAAKxF,MAAL,CAAYgU,UAAZ,CAAuBC;iBAHtB,EAKZ,OALY,CAAhB;;yBAQShN,WAAT,CAAqBgN,OAArB;qBACK9N,QAAL,CAAc0N,OAAd,CAAsBE,WAAtB,GAAoCE,OAApC;;;iBAGC9N,QAAL,CAAcsN,QAAd,GAAyBA,QAAzB;sBACUxM,WAAV,CAAsB,KAAKd,QAAL,CAAcsN,QAApC;;;;YAIA,KAAKzT,MAAL,CAAYoS,QAAZ,CAAqB5I,QAArB,CAA8B,cAA9B,CAAJ,EAAmD;sBACrCvC,WAAV,CAAsBmL,SAASiJ,UAAT,CAAoBrgB,IAApB,CAAyB,IAAzB,EAA+B,aAA/B,CAAtB;;;;YAIA,KAAKgF,MAAL,CAAYoS,QAAZ,CAAqB5I,QAArB,CAA8B,UAA9B,CAAJ,EAA+C;sBACjCvC,WAAV,CAAsBmL,SAASiJ,UAAT,CAAoBrgB,IAApB,CAAyB,IAAzB,EAA+B,UAA/B,CAAtB;;;;YAIA,KAAKgF,MAAL,CAAYoS,QAAZ,CAAqB5I,QAArB,CAA8B,MAA9B,CAAJ,EAA2C;sBAC7BvC,WAAV,CAAsBmL,SAAS8I,YAAT,CAAsBlgB,IAAtB,CAA2B,IAA3B,EAAiC,MAAjC,CAAtB;;;;YAIA,KAAKgF,MAAL,CAAYoS,QAAZ,CAAqB5I,QAArB,CAA8B,QAA9B,CAAJ,EAA6C;gBACnCoK,SAASpT,MAAMgF,aAAN,CAAoB,KAApB,EAA2B;uBAC/B;aADI,CAAf;;;gBAKM2B,aAAa;qBACV,CADU;sBAET,IAFS;uBAGR,KAAKnH,MAAL,CAAY4T;aAHvB;;;gBAOMzC,QAAQiB,SAAS+I,WAAT,CAAqBngB,IAArB,CACV,IADU,EAEV,QAFU,EAGVwF,MAAMU,MAAN,CAAaiG,UAAb,EAAyB;qCACFlC,KAAKtJ;aAD5B,CAHU,CAAd;mBAOOsL,WAAP,CAAmBkK,MAAMiE,KAAzB;mBACOnO,WAAP,CAAmBkK,MAAMzP,KAAzB;;iBAEKyE,QAAL,CAAcyN,MAAd,GAAuBA,MAAvB;;sBAEU3M,WAAV,CAAsB2M,MAAtB;;;;YAIA,KAAK5T,MAAL,CAAYoS,QAAZ,CAAqB5I,QAArB,CAA8B,UAA9B,CAAJ,EAA+C;sBACjCvC,WAAV,CAAsBmL,SAAS8I,YAAT,CAAsBlgB,IAAtB,CAA2B,IAA3B,EAAiC,UAAjC,CAAtB;;;;YAIA,KAAKgF,MAAL,CAAYoS,QAAZ,CAAqB5I,QAArB,CAA8B,UAA9B,KAA6C,CAAChJ,MAAMC,EAAN,CAASC,KAAT,CAAe,KAAKV,MAAL,CAAYsT,QAA3B,CAAlD,EAAwF;gBAC9E0B,OAAOxU,MAAMgF,aAAN,CAAoB,KAApB,EAA2B;uBAC7B,YAD6B;wBAE5B;aAFC,CAAb;;iBAKKyB,WAAL,CACImL,SAAS8I,YAAT,CAAsBlgB,IAAtB,CAA2B,IAA3B,EAAiC,UAAjC,EAA6C;8CACbiK,KAAKtJ,EADQ;iCAExB,IAFwB;oDAGPsJ,KAAKtJ,EAHE;iCAIxB;aAJrB,CADJ;;gBASMoe,OAAOvZ,MAAMgF,aAAN,CAAoB,MAApB,EAA4B;uBAC9B,uBAD8B;uCAEhBP,KAAKtJ,EAFW;wBAG7B,EAH6B;8DAIOsJ,KAAKtJ,EAJZ;sBAK/B,SAL+B;0BAM3B,CAAC;aANF,CAAb;;gBASM2f,QAAQ9a,MAAMgF,aAAN,CAAoB,KAApB,CAAd;;gBAEM+V,OAAO/a,MAAMgF,aAAN,CAAoB,KAApB,EAA2B;uCACfP,KAAKtJ,EAA1B,UADoC;8DAEQsJ,KAAKtJ,EAFb;sBAG9B;aAHG,CAAb;;;gBAOMuc,OAAO1X,MAAMgF,aAAN,CAAoB,IAApB,EAA0B;sBAC7B;aADG,CAAb;;;iBAKKxF,MAAL,CAAYsT,QAAZ,CAAqB9M,OAArB,CAA6B,gBAAQ;oBAC3BsT,MAAMtZ,MAAMgF,aAAN,CAAoB,IAApB,EAA0B;0BAC5B,KAD4B;4BAE1B;iBAFA,CAAZ;;oBAKM0P,SAAS1U,MAAMgF,aAAN,CACX,QADW,EAEXhF,MAAMU,MAAN,CAAaV,MAAMkV,yBAAN,CAAgC,OAAK1V,MAAL,CAAY6S,SAAZ,CAAsBC,OAAtB,CAA8BQ,QAA9D,CAAb,EAAsF;0BAC5E,QAD4E;2BAExE,OAAKtT,MAAL,CAAYgU,UAAZ,CAAuBuB,OAAjC,SAA4C,OAAKvV,MAAL,CAAYgU,UAAZ,CAAuBuB,OAAnE,cAFkF;2CAG7DtQ,KAAKtJ,EAA1B,SAAgCuL,IAAhC,SAHkF;qCAIjE,IAJiE;wDAKhDjC,KAAKtJ,EAAvC,SAA6CuL,IALqC;qCAMjE;iBANrB,CAFW,EAUX+K,KAAKhR,GAAL,CAASiG,IAAT,EAAe,OAAKlH,MAApB,CAVW,CAAf;;oBAaM+H,QAAQvH,MAAMgF,aAAN,CAAoB,MAApB,EAA4B;2BAC/B,OAAKxF,MAAL,CAAYgU,UAAZ,CAAuBgB,IAAvB,CAA4BjN;iBADzB,CAAd;;;sBAKM7C,SAAN,GAAkBD,KAAKiC,IAAL,CAAlB;;uBAEOD,WAAP,CAAmBc,KAAnB;oBACId,WAAJ,CAAgBiO,MAAhB;qBACKjO,WAAL,CAAiB6S,GAAjB;;uBAEK3T,QAAL,CAAcmN,QAAd,CAAuB4E,IAAvB,CAA4BhR,IAA5B,IAAoC4S,GAApC;aA9BJ;;iBAiCK7S,WAAL,CAAiBiR,IAAjB;kBACMjR,WAAN,CAAkBsU,IAAlB;;;iBAGKvb,MAAL,CAAYsT,QAAZ,CAAqB9M,OAArB,CAA6B,gBAAQ;oBAC3ByS,OAAOzY,MAAMgF,aAAN,CAAoB,KAApB,EAA2B;2CACfP,KAAKtJ,EAA1B,SAAgCuL,IADI;4BAE5B,EAF4B;2DAGCjC,KAAKtJ,EAA1C,SAAgDuL,IAAhD,SAHoC;0BAI9B,UAJ8B;8BAK1B,CAAC;iBALF,CAAb;;oBAQMsU,OAAOhb,MAAMgF,aAAN,CACT,QADS,EAET;0BACU,QADV;2BAEc,OAAKxF,MAAL,CAAYgU,UAAZ,CAAuBuB,OAAjC,SAA4C,OAAKvV,MAAL,CAAYgU,UAAZ,CAAuBuB,OAAnE,WAFJ;qCAGqB,IAHrB;wDAIsCtQ,KAAKtJ,EAAvC,UAJJ;qCAKqB;iBAPZ,EASTsW,KAAKhR,GAAL,CAASiG,IAAT,EAAe,OAAKlH,MAApB,CATS,CAAb;;qBAYKiH,WAAL,CAAiBuU,IAAjB;;oBAEMnQ,UAAU7K,MAAMgF,aAAN,CAAoB,IAApB,CAAhB;;qBAEKyB,WAAL,CAAiBoE,OAAjB;sBACMpE,WAAN,CAAkBgS,IAAlB;;uBAEK9S,QAAL,CAAcmN,QAAd,CAAuB6E,KAAvB,CAA6BjR,IAA7B,IAAqC+R,IAArC;aA5BJ;;iBA+BKhS,WAAL,CAAiBqU,KAAjB;iBACKrU,WAAL,CAAiB8S,IAAjB;sBACU9S,WAAV,CAAsB+N,IAAtB;;iBAEK7O,QAAL,CAAcmN,QAAd,CAAuByG,IAAvB,GAA8BA,IAA9B;iBACK5T,QAAL,CAAcmN,QAAd,CAAuB0B,IAAvB,GAA8BA,IAA9B;;;;YAIA,KAAKhV,MAAL,CAAYoS,QAAZ,CAAqB5I,QAArB,CAA8B,KAA9B,KAAwC8B,QAAQ8H,GAApD,EAAyD;sBAC3CnM,WAAV,CAAsBmL,SAAS8I,YAAT,CAAsBlgB,IAAtB,CAA2B,IAA3B,EAAiC,KAAjC,CAAtB;;;;YAIA,KAAKgF,MAAL,CAAYoS,QAAZ,CAAqB5I,QAArB,CAA8B,SAA9B,KAA4C8B,QAAQ+H,OAAxD,EAAiE;sBACnDpM,WAAV,CAAsBmL,SAAS8I,YAAT,CAAsBlgB,IAAtB,CAA2B,IAA3B,EAAiC,SAAjC,CAAtB;;;;YAIA,KAAKgF,MAAL,CAAYoS,QAAZ,CAAqB5I,QAArB,CAA8B,YAA9B,CAAJ,EAAiD;sBACnCvC,WAAV,CAAsBmL,SAAS8I,YAAT,CAAsBlgB,IAAtB,CAA2B,IAA3B,EAAiC,YAAjC,CAAtB;;;;YAIA,KAAKgF,MAAL,CAAYoS,QAAZ,CAAqB5I,QAArB,CAA8B,YAA9B,CAAJ,EAAiD;iBACxCrD,QAAL,CAAcZ,SAAd,CAAwB0B,WAAxB,CAAoCmL,SAAS8I,YAAT,CAAsBlgB,IAAtB,CAA2B,IAA3B,EAAiC,YAAjC,CAApC;;;aAGCmL,QAAL,CAAciM,QAAd,GAAyB7M,SAAzB;;YAEI,KAAKsL,OAAT,EAAkB;qBACL4K,cAAT,CAAwBzgB,IAAxB,CAA6B,IAA7B,EAAmCqW,MAAMqK,iBAAN,CAAwB1gB,IAAxB,CAA6B,IAA7B,CAAnC;;;iBAGK2gB,YAAT,CAAsB3gB,IAAtB,CAA2B,IAA3B;;eAEOuK,SAAP;KA/0CS;;;;UAAA,oBAm1CJ;;;;YAED,KAAKvF,MAAL,CAAY4b,UAAhB,EAA4B;gBAClBnH,OAAOrC,SAASkC,UAAT,CAAoBtZ,IAApB,CAAyB,IAAzB,CAAb;;;gBAGIyZ,KAAKjC,IAAT,EAAe;sBACLoJ,UAAN,CAAiBnH,KAAKnR,GAAtB,EAA2B,aAA3B;;;;;aAKH3H,EAAL,GAAUsK,KAAKxH,KAAL,CAAWwH,KAAKC,MAAL,KAAgB,KAA3B,CAAV;;;YAGIX,YAAY,IAAhB;aACKY,QAAL,CAAciM,QAAd,GAAyB,IAAzB;;;YAGMyJ,QAAQ;gBACN,KAAKlgB,EADC;sBAEA,KAAKqE,MAAL,CAAYkS,QAFZ;mBAGH,KAAKlS,MAAL,CAAYmS;SAHvB;YAKI2J,SAAS,IAAb;;YAEItb,MAAMC,EAAN,CAASK,MAAT,CAAgB,KAAKd,MAAL,CAAYoS,QAA5B,KAAyC5R,MAAMC,EAAN,CAASgG,OAAT,CAAiB,KAAKzG,MAAL,CAAYoS,QAA7B,CAA7C,EAAqF;;wBAErE,KAAKpS,MAAL,CAAYoS,QAAxB;SAFJ,MAGO,IAAI5R,MAAMC,EAAN,CAASwK,QAAT,CAAkB,KAAKjL,MAAL,CAAYoS,QAA9B,CAAJ,EAA6C;;;wBAGpC,KAAKpS,MAAL,CAAYoS,QAAZ,CAAqBpX,IAArB,CAA0B,IAA1B,EAAgC6gB,KAAhC,CAAZ;SAHG,MAIA;;wBAESzJ,SAASja,MAAT,CAAgB6C,IAAhB,CAAqB,IAArB,EAA2B;oBAC/B,KAAKW,EAD0B;0BAEzB,KAAKqE,MAAL,CAAYkS,QAFa;uBAG5B,KAAKyH,KAHuB;yBAI1B,KAAKvB,OAJqB;0BAKzB7E,SAASuF,QAAT,CAAkB9d,IAAlB,CAAuB,IAAvB;;;aALF,CAAZ;qBASS,KAAT;;;;YAIEwN,UAAU,SAAVA,OAAU,QAAS;gBACjBzC,SAASrE,KAAb;;mBAEOoG,OAAP,CAAe+T,KAAf,EAAsBrV,OAAtB,CAA8B,gBAGxB;;oBAFFtG,GAEE;oBADF6H,KACE;;yBACOvH,MAAM8M,UAAN,CAAiBvH,MAAjB,QAA6B7F,GAA7B,QAAqC6H,KAArC,CAAT;aAJJ;;mBAOOhC,MAAP;SAVJ;;;YAcI+V,MAAJ,EAAY;gBACJtb,MAAMC,EAAN,CAASK,MAAT,CAAgB,KAAKd,MAAL,CAAYoS,QAA5B,CAAJ,EAA2C;4BAC3B5J,QAAQjD,SAAR,CAAZ;aADJ,MAEO,IAAI/E,MAAMC,EAAN,CAASgG,OAAT,CAAiBlB,SAAjB,CAAJ,EAAiC;0BAC1BL,SAAV,GAAsBsD,QAAQjD,UAAUL,SAAlB,CAAtB;;;;;YAKJqC,eAAJ;;;YAGI/G,MAAMC,EAAN,CAASK,MAAT,CAAgB,KAAKd,MAAL,CAAY6S,SAAZ,CAAsBT,QAAtB,CAA+B7M,SAA/C,CAAJ,EAA+D;qBAClDxQ,SAAS8U,aAAT,CAAuB,KAAK7J,MAAL,CAAY6S,SAAZ,CAAsBT,QAAtB,CAA+B7M,SAAtD,CAAT;;;;YAIA,CAAC/E,MAAMC,EAAN,CAASgG,OAAT,CAAiBc,MAAjB,CAAL,EAA+B;qBAClB,KAAKpB,QAAL,CAAcZ,SAAvB;;;;YAIA/E,MAAMC,EAAN,CAASgG,OAAT,CAAiBlB,SAAjB,CAAJ,EAAiC;mBACtB0B,WAAP,CAAmB1B,SAAnB;SADJ,MAEO,IAAIA,SAAJ,EAAe;mBACX2Q,kBAAP,CAA0B,WAA1B,EAAuC3Q,SAAvC;;;;YAIA,CAAC/E,MAAMC,EAAN,CAASgG,OAAT,CAAiB,KAAKN,QAAL,CAAciM,QAA/B,CAAL,EAA+C;qBAClC2J,YAAT,CAAsB/gB,IAAtB,CAA2B,IAA3B;;;;YAIAqF,OAAO3D,SAAP,CAAiBK,SAAjB,CAA2ByM,QAA3B,CAAoC,MAApC,CAAJ,EAAiD;kBACvCwS,OAAN,CAAczU,MAAd;;;;YAIA,KAAKvH,MAAL,CAAY6W,QAAZ,CAAqBzE,QAAzB,EAAmC;gBACzB6J,SAASzb,MAAM0J,WAAN,CAAkBlP,IAAlB,CACX,IADW,EAEX,CACI,KAAKgF,MAAL,CAAY6S,SAAZ,CAAsBT,QAAtB,CAA+BhM,OADnC,EAEI,GAFJ,EAGI,KAAKpG,MAAL,CAAY6S,SAAZ,CAAsBoJ,MAH1B,EAII,IAJJ,EAKI,KAAKjc,MAAL,CAAYgU,UAAZ,CAAuBlL,MAL3B,EAMEoG,IANF,CAMO,EANP,CAFW,CAAf;;kBAWM5I,IAAN,CAAW2V,MAAX,EAAmBzV,OAAnB,CAA2B,iBAAS;sBAC1B0Q,WAAN,CAAkB9B,KAAlB,EAAyB,OAAKpV,MAAL,CAAYgU,UAAZ,CAAuBlL,MAAhD,EAAwD,KAAxD;sBACMoO,WAAN,CAAkB9B,KAAlB,EAAyB,OAAKpV,MAAL,CAAYgU,UAAZ,CAAuBC,OAAhD,EAAyD,IAAzD;sBACMvO,YAAN,CAAmB,MAAnB,EAA2B,SAA3B;aAHJ;;;CAp8CZ;;ACbA;AACA;AASA,IAAM6N,WAAW;;SAAA,mBAEL;;YAEA,CAAC,KAAKpT,SAAL,CAAe+P,EAApB,EAAwB;;;;;YAKlBgM,SAAS,KAAKjc,OAAL,CAAagB,GAAb,CAAiB,UAAjB,CAAf;;YAEI,CAACT,MAAMC,EAAN,CAASC,KAAT,CAAewb,MAAf,CAAL,EAA6B;iBACpB3I,QAAL,CAAc8F,QAAd,GAAyB6C,MAAzB;;;YAGA1b,MAAMC,EAAN,CAASC,KAAT,CAAe,KAAK6S,QAAL,CAAc8F,QAA7B,CAAJ,EAA4C;iBACnC9F,QAAL,CAAc8F,QAAd,GAAyB,KAAKrZ,MAAL,CAAYuT,QAAZ,CAAqB8F,QAArB,CAA8BhM,WAA9B,EAAzB;;;;YAIA,CAAC7M,MAAMC,EAAN,CAASsI,OAAT,CAAiB,KAAKwK,QAAL,CAAc2F,MAA/B,CAAL,EAA6C;gBACnCA,SAAS,KAAKjZ,OAAL,CAAagB,GAAb,CAAiB,UAAjB,CAAf;;gBAEIT,MAAMC,EAAN,CAASsI,OAAT,CAAiBmQ,MAAjB,CAAJ,EAA8B;qBACrB3F,QAAL,CAAc2F,MAAd,GAAuBA,MAAvB;aADJ,MAEO;qBACE3F,QAAL,CAAc2F,MAAd,GAAuB,KAAKlZ,MAAL,CAAYuT,QAAZ,CAAqB2F,MAA5C;;;;;YAKJ,CAAC,KAAKnI,OAAN,IAAiB,KAAKoL,SAAtB,IAAoC,KAAKtL,OAAL,IAAgB,CAACvF,QAAQ8Q,UAAjE,EAA8E;;gBAEtE5b,MAAMC,EAAN,CAASqC,KAAT,CAAe,KAAK9C,MAAL,CAAYoS,QAA3B,KAAwC,KAAKpS,MAAL,CAAYoS,QAAZ,CAAqB5I,QAArB,CAA8B,UAA9B,CAAxC,IAAqF,KAAKxJ,MAAL,CAAYsT,QAAZ,CAAqB9J,QAArB,CAA8B,UAA9B,CAAzF,EAAoI;yBACvH6S,eAAT,CAAyBrhB,IAAzB,CAA8B,IAA9B;;;;;;;YAOJ,CAACwF,MAAMC,EAAN,CAASgG,OAAT,CAAiB,KAAKN,QAAL,CAAcoN,QAA/B,CAAL,EAA+C;iBACtCpN,QAAL,CAAcoN,QAAd,GAAyB/S,MAAMgF,aAAN,CAAoB,KAApB,EAA2BhF,MAAMkV,yBAAN,CAAgC,KAAK1V,MAAL,CAAY6S,SAAZ,CAAsBU,QAAtD,CAA3B,CAAzB;;kBAEM+I,WAAN,CAAkB,KAAKnW,QAAL,CAAcoN,QAAhC,EAA0C,KAAKpN,QAAL,CAAcC,OAAxD;;;;cAIE8Q,WAAN,CAAkB,KAAK/Q,QAAL,CAAcZ,SAAhC,EAA2C,KAAKvF,MAAL,CAAYgU,UAAZ,CAAuBT,QAAvB,CAAgCxT,OAA3E,EAAoF,CAACS,MAAMC,EAAN,CAASC,KAAT,CAAe6S,SAASgG,SAAT,CAAmBve,IAAnB,CAAwB,IAAxB,CAAf,CAArF;;;YAGMwe,SAASjG,SAASgG,SAAT,CAAmBve,IAAnB,CAAwB,IAAxB,CAAf;;;YAGIwF,MAAMC,EAAN,CAASC,KAAT,CAAe8Y,MAAf,CAAJ,EAA4B;;;;;YAKtBrJ,UAAU3P,MAAM4P,UAAN,EAAhB;;;;YAIID,QAAQuC,IAAR,IAAgBrS,OAAOgS,GAA3B,EAAgC;gBACtBlM,WAAW,KAAKyK,KAAL,CAAW7L,gBAAX,CAA4B,OAA5B,CAAjB;;kBAEMuB,IAAN,CAAWH,QAAX,EAAqBK,OAArB,CAA6B,iBAAS;oBAC5BrC,MAAMsV,MAAM5N,YAAN,CAAmB,KAAnB,CAAZ;oBACM0C,OAAO/N,MAAMkO,QAAN,CAAevK,GAAf,CAAb;;oBAEIoK,KAAKgO,QAAL,KAAkBlc,OAAOkS,QAAP,CAAgBhE,IAAhB,CAAqBgO,QAAvC,IAAmD,CACnD,OADmD,EAEnD,QAFmD,EAGrD/S,QAHqD,CAG5C+E,KAAKiO,QAHuC,CAAvD,EAG2B;0BAElB3W,KADL,CACW1B,GADX,EACgB,MADhB,EAEK2B,IAFL,CAEU,gBAAQ;8BACJJ,YAAN,CAAmB,KAAnB,EAA0BrF,OAAOgS,GAAP,CAAWoK,eAAX,CAA2BC,IAA3B,CAA1B;qBAHR,EAKK1W,KALL,CAKW,YAAM;8BACHwB,aAAN,CAAoBiS,KAApB;qBANR;;aARR;;;;iBAqBKkD,WAAT,CAAqB3hB,IAArB,CAA0B,IAA1B;;;iBAGSgf,IAAT,CAAchf,IAAd,CAAmB,IAAnB;;;YAGIwF,MAAMC,EAAN,CAASqC,KAAT,CAAe,KAAK9C,MAAL,CAAYoS,QAA3B,KAAwC,KAAKpS,MAAL,CAAYoS,QAAZ,CAAqB5I,QAArB,CAA8B,UAA9B,CAAxC,IAAqF,KAAKxJ,MAAL,CAAYsT,QAAZ,CAAqB9J,QAArB,CAA8B,UAA9B,CAAzF,EAAoI;qBACvH6S,eAAT,CAAyBrhB,IAAzB,CAA8B,IAA9B;;KA9FK;;;;eAAA,yBAmGC;;;;YAEN,KAAK6V,OAAL,IAAgB,KAAKE,OAAzB,EAAkC;qBACrBwI,SAAT,CAAmBve,IAAnB,CAAwB,IAAxB,EAA8BwL,OAA9B,CAAsC,iBAAS;;sBAErCoE,EAAN,CAAS6O,KAAT,EAAgB,WAAhB,EAA6B;2BAASlG,SAASqJ,MAAT,CAAgB5hB,IAAhB,CAAqB,KAArB,EAA2BsP,KAA3B,CAAT;iBAA7B;;;;sBAIMuS,IAAN,GAAa,QAAb;aANJ;;;gBAUMC,eAAevJ,SAASwJ,eAAT,CAAyB/hB,IAAzB,CAA8B,IAA9B,CAArB;;;gBAGIwF,MAAMC,EAAN,CAASgZ,KAAT,CAAeqD,YAAf,CAAJ,EAAkC;;oBAE1B3a,MAAMmE,IAAN,CAAWwW,aAAaE,UAAb,IAA2B,EAAtC,EAA0Cjc,MAA9C,EAAsD;6BACzC6b,MAAT,CAAgB5hB,IAAhB,CAAqB,IAArB,EAA2B8hB,YAA3B;;;SAjBZ,MAoBO,IAAI,KAAKlD,OAAL,IAAgB,KAAKrG,QAAL,CAAc2F,MAAlC,EAA0C;iBACxC+D,KAAL,CAAWC,eAAX,CAA2B,KAAK7D,QAAhC;;KA1HK;;;;aAAA,uBA+HD;;YAEJ7Y,MAAMC,EAAN,CAASyB,eAAT,CAAyB,KAAK0O,KAA9B,CAAJ,EAA0C;mBAC/B,EAAP;;;;eAIGzO,MAAMmE,IAAN,CAAW,KAAKsK,KAAL,CAAWwL,UAAX,IAAyB,EAApC,EAAwCxO,MAAxC,CAA+C;mBAAS,CAC3D,UAD2D,EAE3D,WAF2D,EAG7DpE,QAH6D,CAGpDiQ,MAAM5W,IAH8C,CAAT;SAA/C,CAAP;KAtIS;;;;mBAAA,6BA6IK;;;YACR2W,SAASjG,SAASgG,SAAT,CAAmBve,IAAnB,CAAwB,IAAxB,CAAf;;YAEI,CAACwe,OAAOzY,MAAZ,EAAoB;mBACT,IAAP;;;;YAIA0Y,QAAQD,OAAOvM,IAAP,CAAY;mBAASwM,MAAMJ,QAAN,CAAehM,WAAf,OAAiC,OAAKgM,QAA/C;SAAZ,CAAZ;;;YAGI,CAACI,KAAL,EAAY;oBACAjZ,MAAMoS,UAAN,CAAiB5X,IAAjB,CAAsB,IAAtB,EAA4B,gBAA5B,CAAR;;;;YAIA,CAACye,KAAL,EAAY;wCACED,MADF;;iBAAA;;;eAILC,KAAP;KAjKS;;;;YAAA,oBAqKJA,KArKI,EAqKG;YACRqD,eAAerD,KAAnB;;YAEI,CAACjZ,MAAMC,EAAN,CAASgZ,KAAT,CAAeqD,YAAf,CAAD,IAAiCxR,QAAQ8Q,UAAzC,IAAuD,KAAK7I,QAAL,CAAc2F,MAAzE,EAAiF;2BAC9D3F,SAASwJ,eAAT,CAAyB/hB,IAAzB,CAA8B,IAA9B,CAAf;;;YAGAwF,MAAMC,EAAN,CAASgZ,KAAT,CAAeqD,YAAf,CAAJ,EAAkC;gBAC1B,CAACtc,MAAMC,EAAN,CAASC,KAAT,CAAeoc,aAAa1H,KAA5B,CAAL,EAAyC;uBAC9B0H,aAAa1H,KAApB;;;gBAGA,CAAC5U,MAAMC,EAAN,CAASC,KAAT,CAAeoc,aAAazD,QAA5B,CAAL,EAA4C;uBACjCI,MAAMJ,QAAN,CAAelM,WAAf,EAAP;;;mBAGG8E,KAAKhR,GAAL,CAAS,SAAT,EAAoB,KAAKjB,MAAzB,CAAP;;;eAGGiS,KAAKhR,GAAL,CAAS,UAAT,EAAqB,KAAKjB,MAA1B,CAAP;KAxLS;;;;UAAA,kBA4LN0B,KA5LM,EA4LC;;YAEJ+X,QAAQjZ,MAAMC,EAAN,CAAS6J,KAAT,CAAe5I,KAAf,IAAwBA,MAAM6F,MAA9B,GAAuC7F,KAArD;YACQsb,UAHE,GAGavD,KAHb,CAGFuD,UAHE;;YAIJ9D,SAAS8D,WAAWjc,MAAX,IAAqBic,WAAW,CAAX,CAApC;YACMF,eAAevJ,SAASwJ,eAAT,CAAyB/hB,IAAzB,CAA8B,IAA9B,CAArB;;;YAGIye,UAAUqD,YAAd,EAA4B;;;;;YAKxBtc,MAAMC,EAAN,CAAS0c,GAAT,CAAajE,MAAb,CAAJ,EAA0B;qBACbkE,OAAT,CAAiBpiB,IAAjB,CAAsB,IAAtB,EAA4Bke,OAAOmE,YAAP,EAA5B;SADJ,MAEO;qBACMD,OAAT,CAAiBpiB,IAAjB,CAAsB,IAAtB,EAA4B,IAA5B;;;cAGE0Q,aAAN,CAAoB1Q,IAApB,CAAyB,IAAzB,EAA+B,KAAK4V,KAApC,EAA2C,WAA3C;KA/MS;;;;WAAA,mBAmNLlP,KAnNK,EAmNE;;YAEP,CAAC,KAAKvB,SAAL,CAAe+P,EAApB,EAAwB;;;;YAIpB1P,MAAMC,EAAN,CAASgG,OAAT,CAAiB,KAAKN,QAAL,CAAcoN,QAA/B,CAAJ,EAA8C;gBACpC3N,UAAUpF,MAAMgF,aAAN,CAAoB,MAApB,CAAhB;;;kBAGM+S,YAAN,CAAmB,KAAKpS,QAAL,CAAcoN,QAAjC;;;gBAGM+J,UAAU,CAAC9c,MAAMC,EAAN,CAASyB,eAAT,CAAyBR,KAAzB,CAAD,GAAmCA,KAAnC,GAA2C,EAA3D;;;gBAGIlB,MAAMC,EAAN,CAASK,MAAT,CAAgBwc,OAAhB,CAAJ,EAA8B;wBAClBhW,SAAR,GAAoBgW,QAAQhV,IAAR,EAApB;aADJ,MAEO;wBACKrB,WAAR,CAAoBqW,OAApB;;;;iBAICnX,QAAL,CAAcoN,QAAd,CAAuBtM,WAAvB,CAAmCrB,OAAnC;SAjBJ,MAkBO;iBACEmM,KAAL,CAAWoC,IAAX,CAAgB,kCAAhB;;KA5OK;;;;QAAA,kBAiPN;;YAEC+E,SAAS,KAAKjZ,OAAL,CAAagB,GAAb,CAAiB,UAAjB,CAAb;;;YAGI,CAACT,MAAMC,EAAN,CAASsI,OAAT,CAAiBmQ,MAAjB,CAAL,EAA+B;kBAAA,GACb,KAAKlZ,MAAL,CAAYuT,QADC,CACxB2F,MADwB;SAA/B,MAEO;iBACE3F,QAAL,CAAc2F,MAAd,GAAuBA,MAAvB;;;YAGAA,MAAJ,EAAY;kBACFhC,WAAN,CAAkB,KAAK/Q,QAAL,CAAcZ,SAAhC,EAA2C,KAAKvF,MAAL,CAAYgU,UAAZ,CAAuBT,QAAvB,CAAgC2F,MAA3E,EAAmF,IAAnF;kBACMvN,WAAN,CAAkB,KAAKxF,QAAL,CAAc2M,OAAd,CAAsBS,QAAxC,EAAkD,IAAlD;;;CA9PZ;;ACVA;;;;AAIA,IAAMgK,OAAO,SAAPA,IAAO,GAAM,EAAnB;;IAEqBC;uBACY;YAAjBzd,OAAiB,uEAAP,KAAO;;;aACpBA,OAAL,GAAeM,OAAOod,OAAP,IAAkB1d,OAAjC;;YAEI,KAAKA,OAAT,EAAkB;iBACTiS,GAAL,CAAS,mBAAT;;;;;;4BAIE;;mBAEC,KAAKjS,OAAL,GAAekC,SAASqH,SAAT,CAAmBtN,IAAnB,CAAwBhB,IAAxB,CAA6ByiB,QAAQzL,GAArC,EAA0CyL,OAA1C,CAAf,GAAoEF,IAA3E;;;;4BAEO;;mBAEA,KAAKxd,OAAL,GAAekC,SAASqH,SAAT,CAAmBtN,IAAnB,CAAwBhB,IAAxB,CAA6ByiB,QAAQtJ,IAArC,EAA2CsJ,OAA3C,CAAf,GAAqEF,IAA5E;;;;4BAEQ;;mBAED,KAAKxd,OAAL,GAAekC,SAASqH,SAAT,CAAmBtN,IAAnB,CAAwBhB,IAAxB,CAA6ByiB,QAAQvJ,KAArC,EAA4CuJ,OAA5C,CAAf,GAAsEF,IAA7E;;;;;;ACzBR;;;;AAIA,IAAMG,aAAW;;aAEJ,IAFI;;;WAKN,EALM;;;WAQN,KARM;;;cAWH,KAXG;;;eAcF,IAdE;;;cAiBH,EAjBG;;;YAoBL,CApBK;WAqBN,KArBM;;;cAwBH,IAxBG;;;;qBA4BI,IA5BJ;;;gBA+BD,IA/BC;;;kBAkCC,IAlCD;;;WAqCN,MArCM;;;iBAwCA,IAxCA;;;kBA2CC,IA3CD;;;gBA8CD,KA9CC;;;wBAiDO,IAjDP;;;gBAoDD,IApDC;gBAqDD,MArDC;aAsDJ,oCAtDI;;;gBAyDD,sCAzDC;;;aA4DJ;iBACI,GADJ;iBAEI,CACL,IADK,EAEL,IAFK,EAGL,IAHK,EAIL,IAJK,EAKL,IALK,EAML,GANK,EAOL,GAPK,EAQL,GARK,EASL,GATK,EAUL,GAVK,EAWL,SAXK;KA9DA;;;UA8EP;gBACM;;;KA/EC;;;WAqFN;kBACO,CADP;iBAEM,CACL,GADK,EAEL,IAFK,EAGL,CAHK,EAIL,IAJK,EAKL,GALK,EAML,IANK,EAOL,CAPK;KAvFA;;;cAmGH;iBACG,IADH;gBAEE;KArGC;;;cAyGH;kBACI,KADJ;cAEA;KA3GG;;;cA+GH;gBACE,KADF;kBAEI,CAAChhB,UAAU2c,QAAV,IAAsB3c,UAAUihB,YAAjC,EAA+CxV,KAA/C,CAAqD,GAArD,EAA0D,CAA1D;KAjHD;;;gBAqHD;iBACC,IADD;kBAEE,IAFF;mBAGG,KAHH;KArHC;;;aA4HJ;iBACI,IADJ;aAEA;KA9HI;;;cAkIH,CACN,YADM;;;UAAA;;cAAA,EAON,cAPM,EAQN,MARM,EASN,QATM,EAUN,UAVM,EAWN,UAXM,EAYN,KAZM,EAaN,SAbM,EAcN,YAdM,CAlIG;cAkJH,CACN,UADM,EAEN,SAFM,EAGN,OAHM,CAlJG;;;UAyJP;iBACO,SADP;gBAEM,oBAFN;cAGI,MAHJ;eAIK,OAJL;qBAKW,qBALX;cAMI,MANJ;gBAOM,QAPN;kBAQQ,UARR;qBASW,cATX;kBAUQ,UAVR;gBAWM,QAXN;cAYI,MAZJ;gBAaM,QAbN;wBAcc,iBAdd;yBAee,kBAff;yBAgBe,kBAhBf;wBAiBc,iBAjBd;oBAkBU,oBAlBV;kBAmBQ,UAnBR;kBAoBQ,UApBR;eAqBK,OArBL;gBAsBM,QAtBN;iBAuBO,SAvBP;cAwBI,MAxBJ;eAyBK,OAzBL;aA0BG,KA1BH;aA2BG,KA3BH;eA4BK,OA5BL;kBA6BQ,UA7BR;iBA8BO,SA9BP;uBA+Ba;KAxLN;;;UA4LP;eACK;iBACE,wCADF;oBAEK,wCAFL;iBAGE;SAJP;iBAMO;iBACA,oCADA;iBAEA;SARP;mBAUS;iBACF;;KAvMA;;;eA4MF;cACD,IADC;cAED,IAFC;eAGA,IAHA;iBAIE,IAJF;gBAKC,IALD;qBAMM,IANN;cAOD,IAPC;gBAQC,IARD;kBASG,IATH;oBAUK,IAVL;aAWF,IAXE;iBAYE,IAZF;eAaA,IAbA;iBAcE,IAdF;cAeD,IAfC;kBAgBG;KA5ND;;;YAgOL;;;WAAA,EAIJ,UAJI,EAKJ,SALI,EAMJ,SANI,EAOJ,SAPI,EAQJ,SARI,EASJ,gBATI,EAUJ,WAVI,EAWJ,YAXI,EAYJ,gBAZI,EAaJ,YAbI,EAcJ,cAdI,EAeJ,MAfI,EAgBJ,OAhBI,EAiBJ,OAjBI,EAkBJ,SAlBI,EAmBJ,QAnBI,EAoBJ,SApBI,EAqBJ,YArBI,EAsBJ,WAtBI;;;qBAAA,EA0BJ,gBA1BI,EA2BJ,iBA3BI,EA4BJ,kBA5BI,EA6BJ,gBA7BI,EA8BJ,gBA9BI,EA+BJ,eA/BI,EAgCJ,OAhCI;;;iBAAA,EAoCJ,eApCI,EAqCJ,kBArCI;;;eAAA,EAyCJ,iBAzCI,EA0CJ,kBA1CI,EA2CJ,WA3CI,EA4CJ,aA5CI,EA6CJ,aA7CI,EA8CJ,gBA9CI,EA+CJ,eA/CI,EAgDJ,UAhDI,CAhOK;;;;eAqRF;kBACG,4CADH;mBAEI,OAFJ;kBAGG;uBACK,IADL;qBAEG;SALN;gBAOC,aAPD;iBAQE;kBACC,oBADD;mBAEE,qBAFF;qBAGI,uBAHJ;oBAIG,sBAJH;yBAKQ,4BALR;kBAMC,oBAND;sBAOK,wBAPL;wBAQO,0BARP;iBASA,mBATA;qBAUI,uBAVJ;sBAWK,wBAXL;kBAYC;SApBH;gBAsBC;kBACE,oBADF;oBAEI,sBAFJ;mBAGG,qBAHH;sBAIM,wBAJN;qBAKK;SA3BN;iBA6BE;yBACQ,sBADR;sBAEK,uBAFL;oBAGG,yBAHH;oBAIG,yBAJH;kBAKC,uBALD;oBAMG;SAnCL;kBAqCG,iBArCH;kBAsCG,iBAtCH;cAuCD;qBACO;;KA7TJ;;;gBAkUD;cACF,WADE;kBAEE,WAFF;eAGD,qBAHC;eAID,mBAJC;wBAKQ,8BALR;gBAMA,cANA;uBAOO,sBAPP;aAQH,WARG;iBASC,eATD;iBAUC,eAVD;gBAWA,cAXA;iBAYC,eAZD;iBAaC,eAbD;eAcD,aAdC;iBAeC,eAfD;cAgBF,YAhBE;gBAiBA,eAjBA;sBAkBM,qBAlBN;eAmBD,cAnBC;iBAoBC,gBApBD;qBAqBK,eArBL;sBAsBM,qBAtBN;cAuBF;mBACK,mBADL;mBAEK,aAFL;kBAGI;SA1BF;kBA4BE;qBACG,wBADH;oBAEE;SA9BJ;oBAgCI;qBACC,0BADD;sBAEE;SAlCN;aAoCH;uBACU,qBADV;oBAEO;SAtCJ;iBAwCC;uBACM,yBADN;oBAEG;SA1CJ;kBA4CE;KA9WD;;;gBAkXD;eACD;sBACO,oBADP;gBAEC;;KArXC;;;UA0XP;gBACM;KA3XC;;;;SAgYR;iBACQ,KADR;qBAEY;;CAlYrB;;ACJA;AACA;AAMA,IAAMgI,YAAU3P,MAAM4P,UAAN,EAAhB;;AAEA,SAASwN,QAAT,GAAoB;QACZ,CAAC,KAAK7d,OAAV,EAAmB;;;;;QAKbmV,SAAS,KAAKpV,MAAL,CAAYqG,QAAZ,CAAqB2M,OAArB,CAA6BU,UAA5C;QACIhT,MAAMC,EAAN,CAASgG,OAAT,CAAiByO,MAAjB,CAAJ,EAA8B;cACpBvJ,WAAN,CAAkBuJ,MAAlB,EAA0B,KAAKgE,MAA/B;;;;UAIExN,aAAN,CAAoB1Q,IAApB,CAAyB,KAAK8E,MAA9B,EAAsC,KAAKyH,MAA3C,EAAmD,KAAK2R,MAAL,GAAc,iBAAd,GAAkC,gBAArF,EAAuG,IAAvG;;;QAGI,CAAC/I,UAAQ0N,KAAb,EAAoB;cACVC,SAAN,CAAgB9iB,IAAhB,CAAqB,KAAK8E,MAA1B,EAAkC,KAAKyH,MAAvC,EAA+C,KAAK2R,MAApD;;;;AAIR,SAAS6E,cAAT,GAAwC;QAAhB/T,MAAgB,uEAAP,KAAO;;;QAEhCA,MAAJ,EAAY;aACHgU,cAAL,GAAsB;eACf3d,OAAO4d,OAAP,IAAkB,CADH;eAEf5d,OAAO6d,OAAP,IAAkB;SAFzB;KADJ,MAKO;eACIC,QAAP,CAAgB,KAAKH,cAAL,CAAoBI,CAApC,EAAuC,KAAKJ,cAAL,CAAoBK,CAA3D;;;;aAIKlZ,IAAT,CAAc/B,KAAd,CAAoBkb,QAApB,GAA+BtU,SAAS,QAAT,GAAoB,EAAnD;;;UAGMkN,WAAN,CAAkB,KAAK3P,MAAvB,EAA+B,KAAKzH,MAAL,CAAYE,MAAZ,CAAmBgU,UAAnB,CAA8BR,UAA9B,CAAyC+K,QAAxE,EAAkFvU,MAAlF;;;aAGShP,IAAT,CAAc,IAAd;;;IAGEwjB;wBACU1e,MAAZ,EAAoB;;;;;;aAEXA,MAAL,GAAcA,MAAd;;;aAGK6E,MAAL,GAAc6Z,WAAW7Z,MAAzB;aACK8Z,QAAL,GAAgBD,WAAWC,QAA3B;;;aAGKT,cAAL,GAAsB,EAAEI,GAAG,CAAL,EAAQC,GAAG,CAAX,EAAtB;;;;cAIMzT,EAAN,CAAS7V,QAAT,EAAmB,KAAK4P,MAAL,KAAgB,IAAhB,GAAuB,oBAAvB,GAAiD,KAAKA,MAAtD,qBAAnB,EAAmG,YAAM;;qBAE5F3J,IAAT,CAAc,KAAd;SAFJ;;;cAMM4P,EAAN,CAAS,KAAK9K,MAAL,CAAYqG,QAAZ,CAAqBZ,SAA9B,EAAyC,UAAzC,EAAqD,iBAAS;;gBAEtD/E,MAAMC,EAAN,CAASgG,OAAT,CAAiB,MAAK3G,MAAL,CAAYqG,QAAZ,CAAqBiM,QAAtC,KAAmD,MAAKtS,MAAL,CAAYqG,QAAZ,CAAqBiM,QAArB,CAA8B/I,QAA9B,CAAuCiB,MAAM/C,MAA7C,CAAvD,EAA6G;;;;kBAIxGyC,MAAL;SANJ;;;aAUK8R,MAAL;;;;;;;;;;;iCAuEK;gBACD,KAAK/b,OAAT,EAAkB;qBACTD,MAAL,CAAYiS,KAAZ,CAAkBC,GAAlB,EAAyBwM,WAAWE,MAAX,GAAoB,QAApB,GAA+B,UAAxD;aADJ,MAEO;qBACE5e,MAAL,CAAYiS,KAAZ,CAAkBC,GAAlB,CAAsB,gDAAtB;;;;kBAIEkF,WAAN,CAAkB,KAAKpX,MAAL,CAAYqG,QAAZ,CAAqBZ,SAAvC,EAAkD,KAAKzF,MAAL,CAAYE,MAAZ,CAAmBgU,UAAnB,CAA8BR,UAA9B,CAAyCzT,OAA3F,EAAoG,KAAKA,OAAzG;;;;;;;gCAII;gBACA,CAAC,KAAKA,OAAV,EAAmB;;;;;gBAKfoQ,UAAQ0N,KAAR,IAAiB,KAAK/d,MAAL,CAAYE,MAAZ,CAAmBwT,UAAnB,CAA8BmL,SAAnD,EAA8D;oBACtD,KAAK7e,MAAL,CAAY6R,OAAhB,EAAyB;yBAChBpK,MAAL,CAAYqX,qBAAZ;;aAFR,MAIO,IAAI,CAACJ,WAAWE,MAAhB,EAAwB;+BACZ1jB,IAAf,CAAoB,IAApB,EAA0B,IAA1B;aADG,MAEA,IAAI,CAAC,KAAK2J,MAAV,EAAkB;qBAChB4C,MAAL,CAAYsX,iBAAZ;aADG,MAEA,IAAI,CAACre,MAAMC,EAAN,CAASC,KAAT,CAAe,KAAKiE,MAApB,CAAL,EAAkC;qBAChC4C,MAAL,CAAe,KAAK5C,MAApB,eAAoC,KAAK8Z,QAAzC;;;;;;;;+BAKD;gBACC,CAAC,KAAK1e,OAAV,EAAmB;;;;;gBAKfoQ,UAAQ0N,KAAR,IAAiB,KAAK/d,MAAL,CAAYE,MAAZ,CAAmBwT,UAAnB,CAA8BmL,SAAnD,EAA8D;qBACrDpX,MAAL,CAAYuX,oBAAZ;qBACKhf,MAAL,CAAY+R,IAAZ;aAFJ,MAGO,IAAI,CAAC2M,WAAWE,MAAhB,EAAwB;+BACZ1jB,IAAf,CAAoB,IAApB,EAA0B,KAA1B;aADG,MAEA,IAAI,CAAC,KAAK2J,MAAV,EAAkB;iBACpB5P,SAASgqB,gBAAT,IAA6BhqB,SAASiqB,cAAvC,EAAuDhkB,IAAvD,CAA4DjG,QAA5D;aADG,MAEA,IAAI,CAACyL,MAAMC,EAAN,CAASC,KAAT,CAAe,KAAKiE,MAApB,CAAL,EAAkC;oBAC/Bsa,SAAS,KAAKta,MAAL,KAAgB,KAAhB,GAAwB,QAAxB,GAAmC,MAAlD;8BACY,KAAKA,MAAjB,GAA0Bsa,MAA1B,GAAmC,KAAKR,QAAxC;;;;;;;;iCAKC;gBACD,CAAC,KAAKvF,MAAV,EAAkB;qBACTgG,KAAL;aADJ,MAEO;qBACEC,IAAL;;;;;;;;4BAvFM;mBAEN,CAACX,WAAWE,MAAX,IAAqB,KAAK5e,MAAL,CAAYE,MAAZ,CAAmBwT,UAAnB,CAA8B+K,QAApD,KACA,KAAKze,MAAL,CAAYE,MAAZ,CAAmBwT,UAAnB,CAA8BzT,OAD9B,IAEA,KAAKD,MAAL,CAAYK,SAAZ,CAAsB+P,EAFtB,IAGA,KAAKpQ,MAAL,CAAYiR,OAJhB;;;;;;;4BASS;gBACL,CAAC,KAAKhR,OAAV,EAAmB;uBACR,KAAP;;;;gBAIA,CAACye,WAAWE,MAAhB,EAAwB;uBACble,MAAM8W,QAAN,CAAe,KAAK/P,MAApB,EAA4B,KAAKzH,MAAL,CAAYE,MAAZ,CAAmBgU,UAAnB,CAA8BR,UAA9B,CAAyC+K,QAArE,CAAP;;;gBAGE9X,UAAU,CAAC,KAAK9B,MAAN,GAAe5P,SAASqqB,iBAAxB,GAA4CrqB,cAAY,KAAK4P,MAAjB,GAA0B,KAAK8Z,QAA/B,aAA5D;;mBAEOhY,YAAY,KAAKc,MAAxB;;;;;;;4BAIS;mBACF4I,UAAQ0N,KAAR,IAAiB,KAAK/d,MAAL,CAAYE,MAAZ,CAAmBwT,UAAnB,CAA8BmL,SAA/C,GAA2D,KAAK7e,MAAL,CAAY8Q,KAAvE,GAA+E,KAAK9Q,MAAL,CAAYqG,QAAZ,CAAqBZ,SAA3G;;;;4BA/DgB;mBACT,CAAC,EAAExQ,SAASsqB,iBAAT,IAA8BtqB,SAASuqB,uBAAvC,IAAkEvqB,SAASwqB,oBAA3E,IAAmGxqB,SAASyqB,mBAA9G,CAAR;;;;;;;4BAIgB;;gBAEZhf,MAAMC,EAAN,CAASwK,QAAT,CAAkBlW,SAASiqB,cAA3B,CAAJ,EAAgD;uBACrC,EAAP;;;;gBAIAjX,QAAQ,EAAZ;gBACM0X,WAAW,CACb,QADa,EAEb,KAFa,EAGb,IAHa,CAAjB;;qBAMStG,IAAT,CAAc,eAAO;oBACb3Y,MAAMC,EAAN,CAASwK,QAAT,CAAkBlW,SAAY2qB,GAAZ,oBAAlB,KAAuDlf,MAAMC,EAAN,CAASwK,QAAT,CAAkBlW,SAAY2qB,GAAZ,sBAAlB,CAA3D,EAAkH;4BACtGA,GAAR;2BACO,IAAP;;;uBAGG,KAAP;aANJ;;mBASO3X,KAAP;;;;4BAGkB;mBACX,KAAKpD,MAAL,KAAgB,KAAhB,GAAwB,YAAxB,GAAuC,YAA9C;;;;;;ACpHR;AACA;;AAUA,IAAMwL,YAAU3P,MAAM4P,UAAN,EAAhB;;AAEA,IAAMF,KAAK;gBAAA,0BACQ;cACLgH,WAAN,CAAkB,KAAK/Q,QAAL,CAAcZ,SAAhC,EAA2C,KAAKvF,MAAL,CAAY6S,SAAZ,CAAsBtN,SAAtB,CAAgCiD,OAAhC,CAAwC,GAAxC,EAA6C,EAA7C,CAA3C,EAA6F,IAA7F;cACM0O,WAAN,CAAkB,KAAK/Q,QAAL,CAAcZ,SAAhC,EAA2C,KAAKvF,MAAL,CAAYgU,UAAZ,CAAuB2L,WAAlE,EAA+E,KAAKxf,SAAL,CAAe+P,EAA9F;KAHG;;;;wBAAA,kCAO8B;YAAhBlG,MAAgB,uEAAP,KAAO;;YAC7BA,UAAU,KAAK6G,OAAnB,EAA4B;iBACnBD,KAAL,CAAWlL,YAAX,CAAwB,UAAxB,EAAoC,EAApC;SADJ,MAEO;iBACEkL,KAAL,CAAW3H,eAAX,CAA2B,UAA3B;;KAXD;;;;SAAA,mBAgBC;;;;;aAGC2W,SAAL,CAAehP,KAAf;;;YAGI,CAAC,KAAKzQ,SAAL,CAAe+P,EAApB,EAAwB;iBACf6B,KAAL,CAAWoC,IAAX,6BAA0C,KAAKpE,QAA/C,SAA2D,KAAK7I,IAAhE;;;eAGGkN,oBAAH,CAAwBpZ,IAAxB,CAA6B,IAA7B,EAAmC,IAAnC;;;;;;;YAOA,CAACwF,MAAMC,EAAN,CAASgG,OAAT,CAAiB,KAAKN,QAAL,CAAciM,QAA/B,CAAL,EAA+C;;qBAElCyN,MAAT,CAAgB7kB,IAAhB,CAAqB,IAArB;;;iBAGK4kB,SAAL,CAAexN,QAAf;;;;WAIDgC,oBAAH,CAAwBpZ,IAAxB,CAA6B,IAA7B;;;iBAGS8kB,KAAT,CAAe9kB,IAAf,CAAoB,IAApB;;;aAGK4Y,MAAL,GAAc,IAAd;;;aAGKyC,KAAL,GAAa,IAAb;;;aAGKsD,KAAL,GAAa,IAAb;;;aAGKoG,IAAL,GAAY,IAAZ;;;aAGK3H,OAAL,GAAe,IAAf;;;iBAGS4H,YAAT,CAAsBhlB,IAAtB,CAA2B,IAA3B;;;iBAGSilB,UAAT,CAAoBjlB,IAApB,CAAyB,IAAzB;;;WAGGklB,YAAH,CAAgBllB,IAAhB,CAAqB,IAArB;;;cAGMkc,WAAN,CAAkB,KAAK/Q,QAAL,CAAcZ,SAAhC,EAA2C,KAAKvF,MAAL,CAAYgU,UAAZ,CAAuBZ,GAAvB,CAA2BjT,SAAtE,EAAiFmL,QAAQ8H,GAAR,IAAe,KAAKvC,OAApB,IAA+B,KAAKE,OAArH;;;cAGMmG,WAAN,CAAkB,KAAK/Q,QAAL,CAAcZ,SAAhC,EAA2C,KAAKvF,MAAL,CAAYgU,UAAZ,CAAuBX,OAAvB,CAA+BlT,SAA1E,EAAqFmL,QAAQ+H,OAAR,IAAmB,KAAKxC,OAA7G;;;cAGMqG,WAAN,CAAkB,KAAK/Q,QAAL,CAAcZ,SAAhC,EAA2C,KAAKvF,MAAL,CAAYgU,UAAZ,CAAuB6J,KAAlE,EAAyE1N,UAAQ0N,KAAjF;;;cAGM3G,WAAN,CAAkB,KAAK/Q,QAAL,CAAcZ,SAAhC,EAA2C,KAAKvF,MAAL,CAAYgU,UAAZ,CAAuBmM,OAAlE,EAA2E,KAAKhJ,KAAhF;;;aAGKiJ,KAAL,GAAa,IAAb;;;mBAGW,YAAM;kBACP1U,aAAN,CAAoB1Q,IAApB,CAAyB,KAAzB,EAA+B,MAAK4V,KAApC,EAA2C,OAA3C;SADJ,EAEG,CAFH;;;WAKGyP,QAAH,CAAYrlB,IAAZ,CAAiB,IAAjB;;;YAGI,KAAKslB,MAAL,IAAe,KAAKna,QAAL,CAAcma,MAA7B,IAAuC,CAAC,KAAKna,QAAL,CAAcma,MAAd,CAAqBld,KAArB,CAA2Bmd,eAAvE,EAAwF;eACjFC,SAAH,CAAaxlB,IAAb,CAAkB,IAAlB,EAAwB,KAAKslB,MAA7B;;KAhGD;;;;YAAA,sBAqGI;;YAEHlL,QAAQnD,KAAKhR,GAAL,CAAS,MAAT,EAAiB,KAAKjB,MAAtB,CAAZ;;;YAGIQ,MAAMC,EAAN,CAASK,MAAT,CAAgB,KAAKd,MAAL,CAAYmS,KAA5B,KAAsC,CAAC3R,MAAMC,EAAN,CAASC,KAAT,CAAe,KAAKV,MAAL,CAAYmS,KAA3B,CAA3C,EAA8E;4BAC5D,KAAKnS,MAAL,CAAYmS,KAA1B;;;iBAGKhM,QAAL,CAAcZ,SAAd,CAAwBG,YAAxB,CAAqC,YAArC,EAAmD,KAAK1F,MAAL,CAAYmS,KAA/D;;;;YAIA3R,MAAMC,EAAN,CAASsC,QAAT,CAAkB,KAAKoD,QAAL,CAAc2M,OAAd,CAAsBjB,IAAxC,CAAJ,EAAmD;kBACzCvL,IAAN,CAAW,KAAKH,QAAL,CAAc2M,OAAd,CAAsBjB,IAAjC,EAAuCrL,OAAvC,CAA+C,kBAAU;uBAC9Cd,YAAP,CAAoB,YAApB,EAAkC0P,KAAlC;aADJ;;;;;YAOA,KAAKqL,OAAT,EAAkB;gBACRC,SAASlgB,MAAMoS,UAAN,CAAiB5X,IAAjB,CAAsB,IAAtB,EAA4B,QAA5B,CAAf;;gBAEI,CAACwF,MAAMC,EAAN,CAASgG,OAAT,CAAiBia,MAAjB,CAAL,EAA+B;;;;;gBAKzBvO,QAAQ,CAAC3R,MAAMC,EAAN,CAASC,KAAT,CAAe,KAAKV,MAAL,CAAYmS,KAA3B,CAAD,GAAqC,KAAKnS,MAAL,CAAYmS,KAAjD,GAAyD,OAAvE;gBACM1F,SAASwF,KAAKhR,GAAL,CAAS,YAAT,EAAuB,KAAKjB,MAA5B,CAAf;;mBAEO0F,YAAP,CAAoB,OAApB,EAA6B+G,OAAOjE,OAAP,CAAe,SAAf,EAA0B2J,KAA1B,CAA7B;;KArID;;;;gBAAA,wBA0IMwO,MA1IN,EA0Ic;cACXzJ,WAAN,CAAkB,KAAK/Q,QAAL,CAAcZ,SAAhC,EAA2C,KAAKvF,MAAL,CAAYgU,UAAZ,CAAuB4M,aAAlE,EAAiFD,MAAjF;KA3IG;;;;aAAA,qBA+IGL,MA/IH,EA+IW;;;;aAET1P,KAAL,CAAWlL,YAAX,CAAwB,QAAxB,EAAkC4a,MAAlC;;;YAGI,CAAC9f,MAAMC,EAAN,CAASgG,OAAT,CAAiB,KAAKN,QAAL,CAAcma,MAA/B,CAAL,EAA6C;mBAClC7jB,QAAQgH,MAAR,EAAP;;;;YAIEod,cAAcrgB,MAAMsgB,SAAN,CAAgBR,MAAhB,EACfxa,IADe,CACV,YAAM;mBACHK,QAAL,CAAcma,MAAd,CAAqBld,KAArB,CAA2Bmd,eAA3B,cAAqDD,MAArD;mBACOxkB,MAAP,CAAc,OAAKqK,QAAL,CAAcma,MAAd,CAAqBld,KAAnC,EAA0C;4CACbkd,MAAzB,QADsC;;gCAGtB;aAHpB;eAKGS,YAAH,CAAgB/lB,IAAhB,CAAqB,MAArB,EAA2B,IAA3B;mBACOslB,MAAP;SATY,CAApB;;;oBAaYta,KAAZ,CAAkB;mBAAMkK,GAAG6Q,YAAH,CAAgB/lB,IAAhB,CAAqB,MAArB,EAA2B,KAA3B,CAAN;SAAlB;;;eAGO6lB,WAAP;KAzKG;;;;gBAAA,wBA6KMvW,KA7KN,EA6Ka;;cAEV4M,WAAN,CAAkB,KAAK/Q,QAAL,CAAcZ,SAAhC,EAA2C,KAAKvF,MAAL,CAAYgU,UAAZ,CAAuBrC,OAAlE,EAA2E,KAAKA,OAAhF;cACMuF,WAAN,CAAkB,KAAK/Q,QAAL,CAAcZ,SAAhC,EAA2C,KAAKvF,MAAL,CAAYgU,UAAZ,CAAuB+D,MAAlE,EAA0E,KAAKA,MAA/E;cACMb,WAAN,CAAkB,KAAK/Q,QAAL,CAAcZ,SAAhC,EAA2C,KAAKvF,MAAL,CAAYgU,UAAZ,CAAuBgN,OAAlE,EAA2E,KAAKA,OAAhF;;;cAGMrV,WAAN,CAAkB,KAAKxF,QAAL,CAAc2M,OAAd,CAAsBjB,IAAxC,EAA8C,KAAKF,OAAnD;;;YAGInR,MAAMC,EAAN,CAAS6J,KAAT,CAAeA,KAAf,KAAyBA,MAAMpD,IAAN,KAAe,YAA5C,EAA0D;;;;;WAKvD+Z,cAAH,CAAkBjmB,IAAlB,CAAuB,IAAvB;KA5LG;;;;gBAAA,wBAgMMsP,KAhMN,EAgMa;;;aACX4W,OAAL,GAAe,CACX,SADW,EAEX,SAFW,EAGb1X,QAHa,CAGJc,MAAMpD,IAHF,CAAf;;;qBAMa,KAAKia,MAAL,CAAYD,OAAzB;;;aAGKC,MAAL,CAAYD,OAAZ,GAAsBE,WAAW,YAAM;;kBAE7BlK,WAAN,CAAkB,OAAK/Q,QAAL,CAAcZ,SAAhC,EAA2C,OAAKvF,MAAL,CAAYgU,UAAZ,CAAuBkN,OAAlE,EAA2E,OAAKA,OAAhF;;;eAGGD,cAAH,CAAkBjmB,IAAlB,CAAuB,MAAvB;SALkB,EAMnB,KAAKkmB,OAAL,GAAe,GAAf,GAAqB,CANF,CAAtB;KA1MG;;;;kBAAA,0BAoNQhY,KApNR,EAoNe;YACVkJ,WADU,GACG,KAAKjM,QADR,CACViM,QADU;;;YAGdA,eAAY,KAAKpS,MAAL,CAAYqhB,YAA5B,EAA0C;;iBAEjCJ,cAAL,CAAoBjf,QAAQkH,SAAS,KAAKgY,OAAd,IAAyB,KAAKnJ,MAA9B,IAAwC3F,YAASxG,OAAjD,IAA4DwG,YAASkP,KAA7E,CAApB;;;CAzNZ;;ACbA;AACA;;AAQA,IAAMnR,YAAU3P,MAAM4P,UAAN,EAAhB;;IAEMmR;uBACUzhB,MAAZ,EAAoB;;;aACXA,MAAL,GAAcA,MAAd;aACK0hB,OAAL,GAAe,IAAf;;aAEKC,SAAL,GAAiB,KAAKA,SAAL,CAAezlB,IAAf,CAAoB,IAApB,CAAjB;aACK0lB,UAAL,GAAkB,KAAKA,UAAL,CAAgB1lB,IAAhB,CAAqB,IAArB,CAAlB;aACK2lB,UAAL,GAAkB,KAAKA,UAAL,CAAgB3lB,IAAhB,CAAqB,IAArB,CAAlB;;;;;;;;kCAIMsO,OAAO;;;gBACPsX,OAAOtX,MAAMC,OAAN,GAAgBD,MAAMC,OAAtB,GAAgCD,MAAMuX,KAAnD;gBACMjW,UAAUtB,MAAMpD,IAAN,KAAe,SAA/B;gBACM/H,SAASyM,WAAWgW,SAAS,KAAKJ,OAAxC;;;gBAGIlX,MAAMwX,MAAN,IAAgBxX,MAAMyX,OAAtB,IAAiCzX,MAAM0X,OAAvC,IAAkD1X,MAAMG,QAA5D,EAAsE;;;;;;gBAMlE,CAACjK,MAAMC,EAAN,CAAS8L,MAAT,CAAgBqV,IAAhB,CAAL,EAA4B;;;;;gBAKtBK,YAAY,SAAZA,SAAY,GAAM;;sBAEfniB,MAAL,CAAY4R,WAAZ,GAA0B,MAAK5R,MAAL,CAAYgU,QAAZ,GAAuB,EAAvB,IAA6B8N,OAAO,EAApC,CAA1B;aAFJ;;;;gBAOIhW,OAAJ,EAAa;;oBAEHjB,iBAAiB,CACnB,EADmB,EAEnB,EAFmB,EAGnB,EAHmB,EAInB,EAJmB,EAKnB,EALmB,EAMnB,EANmB,EAOnB,EAPmB,EAQnB,EARmB,EASnB,EATmB,EAUnB,EAVmB,EAWnB,EAXmB,EAYnB,EAZmB,EAanB,EAbmB,EAcnB,EAdmB,EAenB,EAfmB,EAgBnB,EAhBmB,EAiBnB,EAjBmB,EAkBnB,EAlBmB,EAmBnB,EAnBmB,EAoBnB,EApBmB,EAqBnB,EArBmB,CAAvB;;;;;oBA2BMb,UAAUtJ,MAAMgK,eAAN,EAAhB;oBACIhK,MAAMC,EAAN,CAASgG,OAAT,CAAiBqD,OAAjB,KAA6BtJ,MAAMiJ,OAAN,CAAcK,OAAd,EAAuB,KAAKhK,MAAL,CAAYE,MAAZ,CAAmB6S,SAAnB,CAA6BqP,QAApD,CAAjC,EAAgG;;;;;oBAK5FvX,eAAenB,QAAf,CAAwBoY,IAAxB,CAAJ,EAAmC;0BACzBjX,cAAN;0BACMwP,eAAN;;;wBAGIyH,IAAR;yBACS,EAAL;yBACK,EAAL;yBACK,EAAL;yBACK,EAAL;yBACK,EAAL;yBACK,EAAL;yBACK,EAAL;yBACK,EAAL;yBACK,EAAL;yBACK,EAAL;;4BAEQ,CAACziB,MAAL,EAAa;;;;;yBAKZ,EAAL;yBACK,EAAL;;4BAEQ,CAACA,MAAL,EAAa;iCACJW,MAAL,CAAYqiB,UAAZ;;;;yBAIH,EAAL;;6BAESriB,MAAL,CAAYsiB,cAAZ,CAA2B,GAA3B;;;yBAGC,EAAL;;6BAEStiB,MAAL,CAAYuiB,cAAZ,CAA2B,GAA3B;;;yBAGC,EAAL;;4BAEQ,CAACljB,MAAL,EAAa;iCACJW,MAAL,CAAYuW,KAAZ,GAAoB,CAAC,KAAKvW,MAAL,CAAYuW,KAAjC;;;;yBAIH,EAAL;;6BAESvW,MAAL,CAAYwiB,OAAZ;;;yBAGC,EAAL;;6BAESxiB,MAAL,CAAYmT,MAAZ;;;yBAGC,EAAL;;6BAESnT,MAAL,CAAY0T,UAAZ,CAAuBxJ,MAAvB;;;yBAGC,EAAL;;4BAEQ,CAAC7K,MAAL,EAAa;iCACJW,MAAL,CAAYyiB,cAAZ;;;;yBAIH,EAAL;;6BAESziB,MAAL,CAAYigB,IAAZ,GAAmB,CAAC,KAAKjgB,MAAL,CAAYigB,IAAhC;;;;;;;;;;;;;;;;;;;oBAqBJ,CAAC,KAAKjgB,MAAL,CAAY0T,UAAZ,CAAuBzT,OAAxB,IAAmC,KAAKD,MAAL,CAAY0T,UAAZ,CAAuB0F,MAA1D,IAAoE0I,SAAS,EAAjF,EAAqF;yBAC5E9hB,MAAL,CAAY0T,UAAZ,CAAuBxJ,MAAvB;;;;qBAICwX,OAAL,GAAeI,IAAf;aApIJ,MAqIO;qBACEJ,OAAL,GAAe,IAAf;;;;;;;;mCAKGlX,OAAO;qBACLoX,UAAT,CAAoB1mB,IAApB,CAAyB,KAAK8E,MAA9B,EAAsCwK,KAAtC;;;;;;;qCAIS;iBACJxK,MAAL,CAAYqX,KAAZ,GAAoB,IAApB;;;kBAGMD,WAAN,CAAkB,KAAKpX,MAAL,CAAYqG,QAAZ,CAAqBZ,SAAvC,EAAkD,KAAKzF,MAAL,CAAYE,MAAZ,CAAmBgU,UAAnB,CAA8BmM,OAAhF,EAAyF,IAAzF;;;kBAGMtV,GAAN,CAAU9V,SAASoQ,IAAnB,EAAyB,YAAzB,EAAuC,KAAKwc,UAA5C;;;;;;;iCAIkB;gBAAf3X,MAAe,uEAAN,IAAM;;;gBAEd,KAAKlK,MAAL,CAAYE,MAAZ,CAAmBwiB,QAAnB,CAA4B/sB,MAAhC,EAAwC;sBAC9B0V,cAAN,CAAqB9K,MAArB,EAA6B,eAA7B,EAA8C,KAAKohB,SAAnD,EAA8DzX,MAA9D,EAAsE,KAAtE;;;;kBAIEmB,cAAN,CAAqBpW,SAASoQ,IAA9B,EAAoC,OAApC,EAA6C,KAAKuc,UAAlD,EAA8D1X,MAA9D;;;kBAGMY,EAAN,CAAS7V,SAASoQ,IAAlB,EAAwB,YAAxB,EAAsC,KAAKwc,UAA3C;;;;;;;oCAIQ;;;;gBAEJ,CAAC,KAAK7hB,MAAL,CAAYE,MAAZ,CAAmBwiB,QAAnB,CAA4B/sB,MAA7B,IAAuC,KAAKqK,MAAL,CAAYE,MAAZ,CAAmBwiB,QAAnB,CAA4B1Y,OAAvE,EAAgF;sBACtEc,EAAN,CAAS,KAAK9K,MAAL,CAAYqG,QAAZ,CAAqBZ,SAA9B,EAAyC,eAAzC,EAA0D,KAAKkc,SAA/D,EAA0E,KAA1E;;;;;kBAKE7W,EAAN,CAAS,KAAK9K,MAAL,CAAYqG,QAAZ,CAAqBZ,SAA9B,EAAyC,UAAzC,EAAqD,iBAAS;sBACpD2R,WAAN,CAAkB5M,MAAM/C,MAAxB,EAAgC,OAAKzH,MAAL,CAAYE,MAAZ,CAAmBgU,UAAnB,CAA8ByO,QAA9D,EAAwE,KAAxE;aADJ;;;kBAKM7X,EAAN,CAAS,KAAK9K,MAAL,CAAYqG,QAAZ,CAAqBZ,SAA9B,EAAyC,SAAzC,EAAoD,iBAAS;oBACrD+E,MAAMC,OAAN,KAAkB,CAAtB,EAAyB;;;;;;2BAMd,YAAM;0BACP2M,WAAN,CAAkB1W,MAAMgK,eAAN,EAAlB,EAA2C,OAAK1K,MAAL,CAAYE,MAAZ,CAAmBgU,UAAnB,CAA8ByO,QAAzE,EAAmF,IAAnF;iBADJ,EAEG,CAFH;aAPJ;;;kBAaM7X,EAAN,CAAS,KAAK9K,MAAL,CAAYqG,QAAZ,CAAqBZ,SAA9B,EAAyC,0EAAzC,EAAqH,iBAAS;oBAClH6M,WADkH,GACrG,OAAKtS,MAAL,CAAYqG,QADyF,CAClHiM,QADkH;;;;oBAItH9H,MAAMpD,IAAN,KAAe,iBAAnB,EAAsC;gCACzB0E,OAAT,GAAmB,KAAnB;gCACS0V,KAAT,GAAiB,KAAjB;;;;oBAIEtH,OAAO,CACT,YADS,EAET,WAFS,EAGT,WAHS,EAIXxQ,QAJW,CAIFc,MAAMpD,IAJJ,CAAb;;oBAMIwb,QAAQ,CAAZ;;oBAEI1I,IAAJ,EAAU;uBACHiH,cAAH,CAAkBjmB,IAAlB,CAAuB,OAAK8E,MAA5B,EAAoC,IAApC;;4BAEQ,OAAKA,MAAL,CAAYqX,KAAZ,GAAoB,IAApB,GAA2B,IAAnC;;;;6BAIS,OAAKrX,MAAL,CAAYqhB,MAAZ,CAAmB/O,QAAhC;;uBAEKtS,MAAL,CAAYqhB,MAAZ,CAAmB/O,QAAnB,GAA8BgP,WAAW;2BAAMlR,GAAG+Q,cAAH,CAAkBjmB,IAAlB,CAAuB,OAAK8E,MAA5B,EAAoC,KAApC,CAAN;iBAAX,EAA6D4iB,KAA7D,CAA9B;aA3BJ;;;;;;;gCAgCI;;;;kBAEE9X,EAAN,CAAS,KAAK9K,MAAL,CAAY8Q,KAArB,EAA4B,2BAA5B,EAAyD;uBAASwB,SAAS6N,UAAT,CAAoBjlB,IAApB,CAAyB,OAAK8E,MAA9B,EAAsCwK,KAAtC,CAAT;aAAzD;;;kBAGMM,EAAN,CAAS,KAAK9K,MAAL,CAAY8Q,KAArB,EAA4B,0CAA5B,EAAwE;uBAASwB,SAASuQ,cAAT,CAAwB3nB,IAAxB,CAA6B,OAAK8E,MAAlC,EAA0CwK,KAA1C,CAAT;aAAxE;;;;kBAIMM,EAAN,CAAS,KAAK9K,MAAL,CAAY8Q,KAArB,EAA4B,YAA5B,EAA0C,YAAM;sBACtCnL,YAAN,CAAmB,OAAK3F,MAAL,CAAYqG,QAAZ,CAAqByN,MAAxC,EAAgD,CAAC,OAAK9T,MAAL,CAAY8iB,QAA7D;sBACMnd,YAAN,CAAmB,OAAK3F,MAAL,CAAYqG,QAAZ,CAAqB2M,OAArB,CAA6BK,IAAhD,EAAsD,CAAC,OAAKrT,MAAL,CAAY8iB,QAAnE;aAFJ;;;kBAMMhY,EAAN,CAAS,KAAK9K,MAAL,CAAY8Q,KAArB,EAA4B,OAA5B,EAAqC,YAAM;;oBAEnC,OAAK9Q,MAAL,CAAY+Q,OAAZ,IAAuB,OAAK/Q,MAAL,CAAYiR,OAAnC,IAA8C,OAAKjR,MAAL,CAAYE,MAAZ,CAAmB6iB,UAArE,EAAiF;;2BAExE/iB,MAAL,CAAYkT,OAAZ;;aAJR;;;kBASMpI,EAAN,CAAS,KAAK9K,MAAL,CAAY8Q,KAArB,EAA4B,iCAA5B,EAA+D;uBAASwB,SAASwF,cAAT,CAAwB5c,IAAxB,CAA6B,OAAK8E,MAAlC,EAA0CwK,KAA1C,CAAT;aAA/D;;;kBAGMM,EAAN,CAAS,KAAK9K,MAAL,CAAY8Q,KAArB,EAA4B,cAA5B,EAA4C;uBAASwB,SAAS4N,YAAT,CAAsBhlB,IAAtB,CAA2B,OAAK8E,MAAhC,EAAwCwK,KAAxC,CAAT;aAA5C;;;kBAGMM,EAAN,CAAS,KAAK9K,MAAL,CAAY8Q,KAArB,EAA4B,6CAA5B,EAA2E;uBAASV,GAAGgQ,YAAH,CAAgBllB,IAAhB,CAAqB,OAAK8E,MAA1B,EAAkCwK,KAAlC,CAAT;aAA3E;;;kBAGMM,EAAN,CAAS,KAAK9K,MAAL,CAAY8Q,KAArB,EAA4B,gCAA5B,EAA8D;uBAASV,GAAG4S,YAAH,CAAgB9nB,IAAhB,CAAqB,OAAK8E,MAA1B,EAAkCwK,KAAlC,CAAT;aAA9D;;;;kBAIMM,EAAN,CAAS,KAAK9K,MAAL,CAAY8Q,KAArB,EAA4B,SAA5B,EAAuC,YAAM;oBACrC,CAAC,OAAK9Q,MAAL,CAAYijB,GAAjB,EAAsB;;;;;oBAKlB,OAAKjjB,MAAL,CAAYijB,GAAZ,CAAgBhjB,OAAhB,IAA2B,CAAC,OAAKD,MAAL,CAAYijB,GAAZ,CAAgBC,WAAhD,EAA6D;;2BAEpDljB,MAAL,CAAYijB,GAAZ,CAAgBE,cAAhB,CAA+Bnd,IAA/B,CAAoC;+BAAM,OAAKhG,MAAL,CAAYijB,GAAZ,CAAgBlR,IAAhB,EAAN;qBAApC,EAAkE7L,KAAlE,CAAwE;+BAAM,OAAKlG,MAAL,CAAY+R,IAAZ,EAAN;qBAAxE;;aARR;;;gBAaI,KAAK/R,MAAL,CAAYK,SAAZ,CAAsB+P,EAAtB,IAA4B,KAAKpQ,MAAL,CAAYE,MAAZ,CAAmBkjB,WAA/C,IAA8D,CAAC,KAAKpjB,MAAL,CAAYkR,OAA/E,EAAwF;;oBAE9E5K,UAAU5F,MAAMoS,UAAN,CAAiB5X,IAAjB,CAAsB,KAAK8E,MAA3B,QAAuC,KAAKA,MAAL,CAAYE,MAAZ,CAAmBgU,UAAnB,CAA8BzD,KAArE,CAAhB;;;oBAGI,CAAC/P,MAAMC,EAAN,CAASgG,OAAT,CAAiBL,OAAjB,CAAL,EAAgC;;;;;sBAK1BwE,EAAN,CAASxE,OAAT,EAAkB,OAAlB,EAA2B,YAAM;;wBAEzB,OAAKtG,MAAL,CAAYE,MAAZ,CAAmBqhB,YAAnB,IAAmC,OAAKvhB,MAAL,CAAYqX,KAA/C,IAAwD,CAAC,OAAKrX,MAAL,CAAYiY,MAAzE,EAAiF;;;;wBAI7E,OAAKjY,MAAL,CAAYiY,MAAhB,EAAwB;+BACfjY,MAAL,CAAY+R,IAAZ;qBADJ,MAEO,IAAI,OAAK/R,MAAL,CAAYqjB,KAAhB,EAAuB;+BACrBrjB,MAAL,CAAYkT,OAAZ;+BACKlT,MAAL,CAAY+R,IAAZ;qBAFG,MAGA;+BACE/R,MAAL,CAAYiT,KAAZ;;iBAZR;;;;gBAkBA,KAAKjT,MAAL,CAAYK,SAAZ,CAAsB+P,EAAtB,IAA4B,KAAKpQ,MAAL,CAAYE,MAAZ,CAAmBojB,kBAAnD,EAAuE;sBAC7DxY,EAAN,CACI,KAAK9K,MAAL,CAAYqG,QAAZ,CAAqBC,OADzB,EAEI,aAFJ,EAGI,iBAAS;0BACCuE,cAAN;iBAJR,EAMI,KANJ;;;;kBAWEC,EAAN,CAAS,KAAK9K,MAAL,CAAY8Q,KAArB,EAA4B,cAA5B,EAA4C,YAAM;;uBAEzC9Q,MAAL,CAAYG,OAAZ,CAAoBojB,GAApB,CAAwB,EAAEzP,QAAQ,OAAK9T,MAAL,CAAY8T,MAAtB,EAA8ByC,OAAO,OAAKvW,MAAL,CAAYuW,KAAjD,EAAxB;aAFJ;;;kBAMMzL,EAAN,CAAS,KAAK9K,MAAL,CAAY8Q,KAArB,EAA4B,YAA5B,EAA0C,YAAM;;yBAEnCoI,aAAT,CAAuBhe,IAAvB,CAA4B,OAAK8E,MAAjC,EAAyC,OAAzC;;;uBAGKA,MAAL,CAAYG,OAAZ,CAAoBojB,GAApB,CAAwB,EAAE1J,OAAO,OAAK7Z,MAAL,CAAY6Z,KAArB,EAAxB;aALJ;;;kBASM/O,EAAN,CAAS,KAAK9K,MAAL,CAAY8Q,KAArB,EAA4B,kBAA5B,EAAgD,iBAAS;;uBAEhD9Q,MAAL,CAAYG,OAAZ,CAAoBojB,GAApB,CAAwB,EAAEjL,SAAS9N,MAAMmB,MAAN,CAAa2M,OAAxB,EAAxB;aAFJ;;;kBAMMxN,EAAN,CAAS,KAAK9K,MAAL,CAAY8Q,KAArB,EAA4B,eAA5B,EAA6C,iBAAS;;yBAEzCoI,aAAT,CAAuBhe,IAAvB,CAA4B,OAAK8E,MAAjC,EAAyC,SAAzC,EAAoD,IAApD,EAA0DwK,MAAMmB,MAAN,CAAa2M,OAAvE;aAFJ;;;kBAMMxN,EAAN,CAAS,KAAK9K,MAAL,CAAY8Q,KAArB,EAA4B,gBAA5B,EAA8C,YAAM;;yBAEvCoI,aAAT,CAAuBhe,IAAvB,CAA4B,OAAK8E,MAAjC,EAAyC,UAAzC;;;uBAGKA,MAAL,CAAYG,OAAZ,CAAoBojB,GAApB,CAAwB,EAAEhK,UAAU,OAAKvZ,MAAL,CAAYuZ,QAAxB,EAAxB;aALJ;;;kBASMzO,EAAN,CAAS,KAAK9K,MAAL,CAAY8Q,KAArB,EAA4B,kCAA5B,EAAgE,YAAM;;yBAEzDoI,aAAT,CAAuBhe,IAAvB,CAA4B,OAAK8E,MAAjC,EAAyC,UAAzC;;;uBAGKA,MAAL,CAAYG,OAAZ,CAAoBojB,GAApB,CAAwB,EAAE9P,UAAU,OAAKzT,MAAL,CAAYyT,QAAZ,CAAqB2F,MAAjC,EAAxB;aALJ;;;;kBAUMtO,EAAN,CAAS,KAAK9K,MAAL,CAAY8Q,KAArB,EAA4B,KAAK9Q,MAAL,CAAYE,MAAZ,CAAmBoL,MAAnB,CAA0BkY,MAA1B,CAAiC,CACzD,OADyD,EAEzD,SAFyD,CAAjC,EAGzBpU,IAHyB,CAGpB,GAHoB,CAA5B,EAGc,iBAAS;oBACfzD,SAAS,EAAb;;;oBAGInB,MAAMpD,IAAN,KAAe,OAAnB,EAA4B;6BACf,OAAKpH,MAAL,CAAY8Q,KAAZ,CAAkBsD,KAA3B;;;sBAGExI,aAAN,CAAoB1Q,IAApB,CAAyB,OAAK8E,MAA9B,EAAsC,OAAKA,MAAL,CAAYqG,QAAZ,CAAqBZ,SAA3D,EAAsE+E,MAAMpD,IAA5E,EAAkF,IAAlF,EAAwFuE,MAAxF;aAXJ;;;;;;;sCAgBO;;;;gBAED8X,aAAapT,UAAQuC,IAAR,GAAe,QAAf,GAA0B,OAA7C;;;gBAGM8Q,QAAQ,SAARA,KAAQ,CAAClZ,KAAD,EAAQmZ,cAAR,EAAwBC,gBAAxB,EAA6C;oBACjDC,gBAAgB,OAAK7jB,MAAL,CAAYE,MAAZ,CAAmB4f,SAAnB,CAA6B8D,gBAA7B,CAAtB;oBACME,mBAAmBpjB,MAAMC,EAAN,CAASwK,QAAT,CAAkB0Y,aAAlB,CAAzB;oBACIE,WAAW,IAAf;;;oBAGID,gBAAJ,EAAsB;+BACPD,cAAc3oB,IAAd,CAAmB,OAAK8E,MAAxB,EAAgCwK,KAAhC,CAAX;;;;oBAIAuZ,YAAYrjB,MAAMC,EAAN,CAASwK,QAAT,CAAkBwY,cAAlB,CAAhB,EAAmD;mCAChCzoB,IAAf,CAAoB,OAAK8E,MAAzB,EAAiCwK,KAAjC;;aAZR;;;gBAiBMM,KAAK,SAALA,EAAK,CAACnE,OAAD,EAAUS,IAAV,EAAgBuc,cAAhB,EAAgCC,gBAAhC,EAAqE;oBAAnB3Y,OAAmB,uEAAT,IAAS;;oBACtE4Y,gBAAgB,OAAK7jB,MAAL,CAAYE,MAAZ,CAAmB4f,SAAnB,CAA6B8D,gBAA7B,CAAtB;oBACME,mBAAmBpjB,MAAMC,EAAN,CAASwK,QAAT,CAAkB0Y,aAAlB,CAAzB;;sBAEM/Y,EAAN,CAASnE,OAAT,EAAkBS,IAAlB,EAAwB;2BAASsc,MAAMlZ,KAAN,EAAamZ,cAAb,EAA6BC,gBAA7B,CAAT;iBAAxB,EAAiF3Y,WAAW,CAAC6Y,gBAA7F;aAJJ;;;eAQG,KAAK9jB,MAAL,CAAYqG,QAAZ,CAAqB2M,OAArB,CAA6BjB,IAAhC,EAAsC,OAAtC,EAA+C,KAAK/R,MAAL,CAAYqiB,UAA3D,EAAuE,MAAvE;;;eAGG,KAAKriB,MAAL,CAAYqG,QAAZ,CAAqB2M,OAArB,CAA6BE,OAAhC,EAAyC,OAAzC,EAAkD,KAAKlT,MAAL,CAAYkT,OAA9D,EAAuE,SAAvE;;;eAGG,KAAKlT,MAAL,CAAYqG,QAAZ,CAAqB2M,OAArB,CAA6BG,MAAhC,EAAwC,OAAxC,EAAiD,KAAKnT,MAAL,CAAYmT,MAA7D,EAAqE,QAArE;;;eAGG,KAAKnT,MAAL,CAAYqG,QAAZ,CAAqB2M,OAArB,CAA6BI,WAAhC,EAA6C,OAA7C,EAAsD,KAAKpT,MAAL,CAAYwiB,OAAlE,EAA2E,aAA3E;;;eAII,KAAKxiB,MAAL,CAAYqG,QAAZ,CAAqB2M,OAArB,CAA6BK,IADjC,EAEI,OAFJ,EAGI,YAAM;uBACGrT,MAAL,CAAYuW,KAAZ,GAAoB,CAAC,OAAKvW,MAAL,CAAYuW,KAAjC;aAJR,EAMI,MANJ;;;eAUG,KAAKvW,MAAL,CAAYqG,QAAZ,CAAqB2M,OAArB,CAA6BS,QAAhC,EAA0C,OAA1C,EAAmD,KAAKzT,MAAL,CAAYyiB,cAA/D;;;eAII,KAAKziB,MAAL,CAAYqG,QAAZ,CAAqB2M,OAArB,CAA6BU,UADjC,EAEI,OAFJ,EAGI,YAAM;uBACG1T,MAAL,CAAY0T,UAAZ,CAAuBxJ,MAAvB;aAJR,EAMI,YANJ;;;eAWI,KAAKlK,MAAL,CAAYqG,QAAZ,CAAqB2M,OAArB,CAA6BM,GADjC,EAEI,OAFJ,EAGI,YAAM;uBACGtT,MAAL,CAAYsT,GAAZ,GAAkB,QAAlB;aAJR,EAMI,KANJ;;;eAUG,KAAKtT,MAAL,CAAYqG,QAAZ,CAAqB2M,OAArB,CAA6BO,OAAhC,EAAyC,OAAzC,EAAkD,KAAKvT,MAAL,CAAYuT,OAA9D,EAAuE,SAAvE;;;eAGG,KAAKvT,MAAL,CAAYqG,QAAZ,CAAqB2M,OAArB,CAA6BQ,QAAhC,EAA0C,OAA1C,EAAmD,iBAAS;yBAC/CoO,UAAT,CAAoB1mB,IAApB,CAAyB,OAAK8E,MAA9B,EAAsCwK,KAAtC;aADJ;;;eAKG,KAAKxK,MAAL,CAAYqG,QAAZ,CAAqBmN,QAArB,CAA8ByG,IAAjC,EAAuC,OAAvC,EAAgD,iBAAS;sBAC/CI,eAAN;;;oBAGM2J,cAAc,SAAdA,WAAc,GAAM;wBAChBnoB,wBAAsB,OAAKmE,MAAL,CAAYnE,EAAlC,UAAN;6BACSooB,OAAT,CAAiB/oB,IAAjB,CAAsB,OAAK8E,MAA3B,EAAmCnE,EAAnC;iBAFJ;;;oBAMI6E,MAAMiJ,OAAN,CAAca,MAAM/C,MAApB,EAA4B,OAAKzH,MAAL,CAAYE,MAAZ,CAAmB6S,SAAnB,CAA6Ba,MAA7B,CAAoC2F,QAAhE,CAAJ,EAA+E;0BAEvE/O,KADJ,EAEI,YAAM;+BACGxK,MAAL,CAAYuZ,QAAZ,GAAuB/O,MAAM/C,MAAN,CAAaQ,KAApC;;qBAHR,EAMI,UANJ;iBADJ,MASO,IAAIvH,MAAMiJ,OAAN,CAAca,MAAM/C,MAApB,EAA4B,OAAKzH,MAAL,CAAYE,MAAZ,CAAmB6S,SAAnB,CAA6Ba,MAA7B,CAAoC0E,OAAhE,CAAJ,EAA8E;0BAE7E9N,KADJ,EAEI,YAAM;+BACGxK,MAAL,CAAYsY,OAAZ,GAAsB9N,MAAM/C,MAAN,CAAaQ,KAAnC;;qBAHR,EAMI,SANJ;iBADG,MASA,IAAIvH,MAAMiJ,OAAN,CAAca,MAAM/C,MAApB,EAA4B,OAAKzH,MAAL,CAAYE,MAAZ,CAAmB6S,SAAnB,CAA6Ba,MAA7B,CAAoCiG,KAAhE,CAAJ,EAA4E;0BAE3ErP,KADJ,EAEI,YAAM;+BACGxK,MAAL,CAAY6Z,KAAZ,GAAoBpC,WAAWjN,MAAM/C,MAAN,CAAaQ,KAAxB,CAApB;;qBAHR,EAMI,OANJ;iBADG,MASA;wBACG+R,MAAMxP,MAAM/C,MAAlB;6BACSwc,OAAT,CAAiB/oB,IAAjB,CAAsB,OAAK8E,MAA3B,EAAmCga,IAAIjO,YAAJ,CAAiB,eAAjB,CAAnC;;aAvCR;;;eA4CG,KAAK/L,MAAL,CAAYqG,QAAZ,CAAqBuN,MAArB,CAA4BC,IAA/B,EAAqC,qBAArC,EAA4D,iBAAS;oBAC3DoD,aAAa,OAAKjX,MAAL,CAAYqG,QAAZ,CAAqBsN,QAArB,CAA8BuD,qBAA9B,EAAnB;oBACMF,UAAU,MAAMC,WAAWzH,KAAjB,IAA0BhF,MAAM8M,KAAN,GAAcL,WAAWM,IAAnD,CAAhB;sBACM2M,aAAN,CAAoBte,YAApB,CAAiC,YAAjC,EAA+CoR,OAA/C;aAHJ;;;eAOG,KAAKhX,MAAL,CAAYqG,QAAZ,CAAqBuN,MAArB,CAA4BC,IAA/B,EAAqC,qDAArC,EAA4F,iBAAS;oBAC3FA,OAAOrJ,MAAM0Z,aAAnB;;;oBAGMnS,OAAO8B,KAAK3K,YAAL,CAAkB,gBAAlB,CAAb;;;oBAGMib,OAAO,CACT,SADS,EAET,UAFS,EAGT,OAHS,EAIXza,QAJW,CAIFc,MAAMpD,IAJJ,CAAb;;;oBAOI2K,QAAQoS,IAAZ,EAAkB;yBACThb,eAAL,CAAqB,gBAArB;2BACKnJ,MAAL,CAAY+R,IAAZ;iBAFJ,MAGO,IAAI,CAACoS,IAAD,IAAS,OAAKnkB,MAAL,CAAY6R,OAAzB,EAAkC;yBAChCjM,YAAL,CAAkB,gBAAlB,EAAoC,EAApC;2BACK5F,MAAL,CAAYiT,KAAZ;;aAnBR;;;eAyBI,KAAKjT,MAAL,CAAYqG,QAAZ,CAAqBuN,MAArB,CAA4BC,IADhC,EAEI4P,UAFJ,EAGI,iBAAS;oBACC5P,OAAOrJ,MAAM0Z,aAAnB;;;oBAGIE,SAASvQ,KAAK9H,YAAL,CAAkB,YAAlB,CAAb;;oBAEIrL,MAAMC,EAAN,CAASC,KAAT,CAAewjB,MAAf,CAAJ,EAA4B;6BACfvQ,KAAK5L,KAAd;;;qBAGCkB,eAAL,CAAqB,YAArB;;uBAEKnJ,MAAL,CAAY4R,WAAZ,GAA0BwS,SAASvQ,KAAK1H,GAAd,GAAoB,OAAKnM,MAAL,CAAYgU,QAA1D;aAfR,EAiBI,MAjBJ;;;;gBAsBI,KAAKhU,MAAL,CAAYE,MAAZ,CAAmBmkB,YAAnB,IAAmC,CAAC3jB,MAAMC,EAAN,CAASgG,OAAT,CAAiB,KAAK3G,MAAL,CAAYqG,QAAZ,CAAqB0N,OAArB,CAA6BC,QAA9C,CAAxC,EAAiG;mBAC1F,KAAKhU,MAAL,CAAYqG,QAAZ,CAAqB0N,OAArB,CAA6BnC,WAAhC,EAA6C,OAA7C,EAAsD,YAAM;;wBAEpD,OAAK5R,MAAL,CAAY4R,WAAZ,KAA4B,CAAhC,EAAmC;;;;2BAI9B5R,MAAL,CAAYE,MAAZ,CAAmB0X,UAAnB,GAAgC,CAAC,OAAK5X,MAAL,CAAYE,MAAZ,CAAmB0X,UAApD;;6BAESuI,UAAT,CAAoBjlB,IAApB,CAAyB,OAAK8E,MAA9B;iBARJ;;;;eAcA,KAAKA,MAAL,CAAYqG,QAAZ,CAAqBuN,MAArB,CAA4BE,MADhC,EAEI2P,UAFJ,EAGI,iBAAS;uBACAzjB,MAAL,CAAY8T,MAAZ,GAAqBtJ,MAAM/C,MAAN,CAAaQ,KAAlC;aAJR,EAMI,QANJ;;;gBAUIoI,UAAQwG,QAAZ,EAAsB;mBACfnW,MAAM0J,WAAN,CAAkBlP,IAAlB,CAAuB,KAAK8E,MAA5B,EAAoC,qBAApC,CAAH,EAA+D,OAA/D,EAAwE,iBAAS;6BACpE8V,eAAT,CAAyB5a,IAAzB,CAA8B,OAAK8E,MAAnC,EAA2CwK,MAAM/C,MAAjD;iBADJ;;;;eAMD,KAAKzH,MAAL,CAAYqG,QAAZ,CAAqBsN,QAAxB,EAAkC,iCAAlC,EAAqE;uBAASrB,SAAS4F,iBAAT,CAA2Bhd,IAA3B,CAAgC,OAAK8E,MAArC,EAA6CwK,KAA7C,CAAT;aAArE;;;eAGG,KAAKxK,MAAL,CAAYqG,QAAZ,CAAqBiM,QAAxB,EAAkC,uBAAlC,EAA2D,iBAAS;uBAC3DtS,MAAL,CAAYqG,QAAZ,CAAqBiM,QAArB,CAA8BkP,KAA9B,GAAsC,CAAC,OAAKxhB,MAAL,CAAYqX,KAAb,IAAsB7M,MAAMpD,IAAN,KAAe,YAA3E;aADJ;;;eAKG,KAAKpH,MAAL,CAAYqG,QAAZ,CAAqBiM,QAAxB,EAAkC,mDAAlC,EAAuF,iBAAS;uBACvFtS,MAAL,CAAYqG,QAAZ,CAAqBiM,QAArB,CAA8BxG,OAA9B,GAAwC,CACpC,WADoC,EAEpC,YAFoC,EAGtCpC,QAHsC,CAG7Bc,MAAMpD,IAHuB,CAAxC;aADJ;;;eAQG,KAAKpH,MAAL,CAAYqG,QAAZ,CAAqBiM,QAAxB,EAAkC,kBAAlC,EAAsD,iBAAS;8BACtB,OAAKtS,MADiB;oBACnDE,MADmD,WACnDA,MADmD;oBAC3CmG,QAD2C,WAC3CA,QAD2C;oBACjCgb,MADiC,WACjCA,MADiC;;;;sBAIrDjK,WAAN,CAAkB/Q,SAASiM,QAA3B,EAAqCpS,OAAOgU,UAAP,CAAkBoQ,YAAvD,EAAqE9Z,MAAMpD,IAAN,KAAe,SAApF;;;mBAGG+Z,cAAH,CAAkBjmB,IAAlB,CAAuB,OAAK8E,MAA5B,EAAoCwK,MAAMpD,IAAN,KAAe,SAAnD;;;oBAGIoD,MAAMpD,IAAN,KAAe,SAAnB,EAA8B;;+BAEf,YAAM;8BACPgQ,WAAN,CAAkB/Q,SAASiM,QAA3B,EAAqCpS,OAAOgU,UAAP,CAAkBoQ,YAAvD,EAAqE,KAArE;qBADJ,EAEG,CAFH;;;wBAKM1B,QAAQ,OAAKvL,KAAL,GAAa,IAAb,GAAoB,IAAlC;;;iCAGagK,OAAO/O,QAApB;;2BAEOA,QAAP,GAAkBgP,WAAW;+BAAMlR,GAAG+Q,cAAH,CAAkBjmB,IAAlB,CAAuB,OAAK8E,MAA5B,EAAoC,KAApC,CAAN;qBAAX,EAA6D4iB,KAA7D,CAAlB;;aAtBR;;;eA4BI,KAAK5iB,MAAL,CAAYqG,QAAZ,CAAqBuN,MAArB,CAA4BE,MADhC,EAEI,OAFJ,EAGI,iBAAS;;;oBAGCtH,WAAWhC,MAAM+Z,iCAAvB;oBACM9rB,OAAO,IAAI,EAAjB;oBACI+rB,YAAY,CAAhB;;;oBAGIha,MAAMia,MAAN,GAAe,CAAf,IAAoBja,MAAMka,MAAN,GAAe,CAAvC,EAA0C;wBAClClY,QAAJ,EAAc;+BACLxM,MAAL,CAAYuiB,cAAZ,CAA2B9pB,IAA3B;oCACY,CAAC,CAAb;qBAFJ,MAGO;+BACEuH,MAAL,CAAYsiB,cAAZ,CAA2B7pB,IAA3B;oCACY,CAAZ;;;;;oBAKJ+R,MAAMia,MAAN,GAAe,CAAf,IAAoBja,MAAMka,MAAN,GAAe,CAAvC,EAA0C;wBAClClY,QAAJ,EAAc;+BACLxM,MAAL,CAAYsiB,cAAZ,CAA2B7pB,IAA3B;oCACY,CAAZ;qBAFJ,MAGO;+BACEuH,MAAL,CAAYuiB,cAAZ,CAA2B9pB,IAA3B;oCACY,CAAC,CAAb;;;;;oBAKH+rB,cAAc,CAAd,IAAmB,OAAKxkB,MAAL,CAAY8Q,KAAZ,CAAkBgD,MAAlB,GAA2B,CAA/C,IAAsD0Q,cAAc,CAAC,CAAf,IAAoB,OAAKxkB,MAAL,CAAY8Q,KAAZ,CAAkBgD,MAAlB,GAA2B,CAAzG,EAA6G;0BACnGjJ,cAAN;;aAlCZ,EAqCI,QArCJ,EAsCI,KAtCJ;;;;;;;gCA2CI;iBACClV,MAAL,CAAY,KAAZ;;;;;;ACntBR;AACA;;AASA,SAASgvB,mBAAT,CAA6B5S,IAA7B,EAAmC;QAC3B,KAAKjB,KAAL,CAAWmH,MAAX,KAAsBlG,IAA1B,EAAgC;aACvBjB,KAAL,CAAWmH,MAAX,GAAoB,CAAClG,IAArB;cACMnG,aAAN,CAAoB1Q,IAApB,CAAyB,IAAzB,EAA+B,KAAK4V,KAApC,EAA2CiB,OAAO,MAAP,GAAgB,OAA3D;;;;AAIR,IAAM1D,QAAQ;SAAA,mBACF;;;;cAEE+I,WAAN,CAAkB,KAAK/Q,QAAL,CAAcC,OAAhC,EAAyC,KAAKpG,MAAL,CAAYgU,UAAZ,CAAuBiJ,KAAhE,EAAuE,IAAvE;;;cAGMyH,cAAN,CAAqB1pB,IAArB,CAA0B,IAA1B;;;YAGI,CAACwF,MAAMC,EAAN,CAASO,MAAT,CAAgBX,OAAOskB,KAAvB,CAAL,EAAoC;kBAE3BC,UADL,CACgB,KAAK5kB,MAAL,CAAY6kB,IAAZ,CAAiB1W,KAAjB,CAAuB2W,GADvC,EAEKhf,IAFL,CAEU,YAAM;sBACFsa,KAAN,CAAYplB,IAAZ,CAAiB,KAAjB;aAHR,EAKKgL,KALL,CAKW,iBAAS;sBACP+L,KAAL,CAAWoC,IAAX,CAAgB,0BAAhB,EAA4CD,KAA5C;aANR;SADJ,MASO;kBACGkM,KAAN,CAAYplB,IAAZ,CAAiB,IAAjB;;KAnBE;;;;;kBAAA,0BAyBK0G,KAzBL,EAyBY;YACZiO,QAAQnP,MAAMC,EAAN,CAASK,MAAT,CAAgBY,KAAhB,IAAyBA,MAAMyG,KAAN,CAAY,GAAZ,CAAzB,GAA4C,KAAKnI,MAAL,CAAY2P,KAAZ,CAAkBxH,KAAlB,CAAwB,GAAxB,CAA1D;YACM4c,UAAU,MAAMpV,MAAM,CAAN,CAAN,GAAiBA,MAAM,CAAN,CAAjC;aACKxJ,QAAL,CAAcC,OAAd,CAAsBhD,KAAtB,CAA4B4hB,aAA5B,GAA+CD,OAA/C;;YAEI,KAAK5kB,SAAL,CAAe+P,EAAnB,EAAuB;gBACbX,SAAS,GAAf;gBACM0V,SAAS,CAAC1V,SAASwV,OAAV,KAAsBxV,SAAS,EAA/B,CAAf;;iBAEKqB,KAAL,CAAWxN,KAAX,CAAiB8hB,SAAjB,oBAA4CD,MAA5C;;KAlCE;;;;SAAA,mBAuCF;;;YACEnlB,SAAS,IAAf;;;YAGMuL,UAAU;kBACNvL,OAAOE,MAAP,CAAc+f,IAAd,CAAmB7G,MADb;sBAEFpZ,OAAOqlB,QAFL;;oBAIJ,KAJI;sBAKF,KALE;mBAML,KANK;mBAOL,IAPK;yBAQC,CARD;qBASH,OATG;yBAUC,CAAC,KAAKnlB,MAAL,CAAYwT,UAAZ,CAAuBmL;SAVzC;YAYM/P,SAASpO,MAAM4kB,cAAN,CAAqB/Z,OAArB,CAAf;;;YAGIqC,SAAS5N,OAAO8Q,KAAP,CAAa/E,YAAb,CAA0B,KAA1B,CAAb;;;YAGIrL,MAAMC,EAAN,CAASC,KAAT,CAAegN,MAAf,CAAJ,EAA4B;qBACf5N,OAAO8Q,KAAP,CAAa/E,YAAb,CAA0B/L,OAAOE,MAAP,CAAcmH,UAAd,CAAyB8V,KAAzB,CAA+BthB,EAAzD,CAAT;;;YAGEA,KAAK6E,MAAM6kB,YAAN,CAAmB3X,MAAnB,CAAX;;;YAGMgT,SAASlgB,MAAMgF,aAAN,CAAoB,QAApB,CAAf;YACMrB,MAAM3D,MAAMiM,MAAN,CAAa3M,OAAOE,MAAP,CAAc6kB,IAAd,CAAmB1W,KAAnB,CAAyBuS,MAAtC,EAA8C/kB,EAA9C,EAAkDiT,MAAlD,CAAZ;eACOlJ,YAAP,CAAoB,KAApB,EAA2BvB,GAA3B;eACOuB,YAAP,CAAoB,iBAApB,EAAuC,EAAvC;eACOA,YAAP,CAAoB,mBAApB,EAAyC,EAAzC;eACOA,YAAP,CAAoB,OAApB,EAA6B,UAA7B;;;YAGMU,UAAU5F,MAAMgF,aAAN,CAAoB,KAApB,EAA2B,EAAEqD,OAAO/I,OAAOE,MAAP,CAAcgU,UAAd,CAAyBsR,cAAlC,EAA3B,CAAhB;gBACQre,WAAR,CAAoByZ,MAApB;eACO9P,KAAP,GAAepQ,MAAM+kB,cAAN,CAAqBnf,OAArB,EAA8BtG,OAAO8Q,KAArC,CAAf;;;cAGM/K,KAAN,CAAYrF,MAAMiM,MAAN,CAAa3M,OAAOE,MAAP,CAAc6kB,IAAd,CAAmB1W,KAAnB,CAAyB8B,GAAtC,EAA2CtU,EAA3C,CAAZ,EAA4D,MAA5D,EAAoEmK,IAApE,CAAyE,oBAAY;gBAC7EtF,MAAMC,EAAN,CAASC,KAAT,CAAeoD,QAAf,CAAJ,EAA8B;;;;;gBAKxBR,MAAM,IAAI+O,GAAJ,CAAQvO,SAAS,CAAT,EAAY0hB,eAApB,CAAZ;;;gBAGIC,QAAJ,GAAkBniB,IAAImiB,QAAJ,CAAatd,KAAb,CAAmB,GAAnB,EAAwB,CAAxB,CAAlB;;;eAGGqY,SAAH,CAAaxlB,IAAb,CAAkB8E,MAAlB,EAA0BwD,IAAIiL,IAA9B;SAZJ;;;;eAiBO0O,KAAP,GAAe,IAAI5c,OAAOskB,KAAP,CAAae,MAAjB,CAAwBhF,MAAxB,EAAgC;uBAChC5gB,OAAOE,MAAP,CAAc2lB,SADkB;mBAEpC7lB,OAAOuW;SAFH,CAAf;;eAKOzF,KAAP,CAAamH,MAAb,GAAsB,IAAtB;eACOnH,KAAP,CAAac,WAAb,GAA2B,CAA3B;;;YAGI5R,OAAOK,SAAP,CAAiB+P,EAArB,EAAyB;mBACd+M,KAAP,CAAa2I,gBAAb;;;;eAIGhV,KAAP,CAAaiB,IAAb,GAAoB,YAAM;gCACF7W,IAApB,CAAyB8E,MAAzB,EAAiC,IAAjC;mBACOA,OAAOmd,KAAP,CAAapL,IAAb,EAAP;SAFJ;;eAKOjB,KAAP,CAAamC,KAAb,GAAqB,YAAM;gCACH/X,IAApB,CAAyB8E,MAAzB,EAAiC,KAAjC;mBACOA,OAAOmd,KAAP,CAAalK,KAAb,EAAP;SAFJ;;eAKOnC,KAAP,CAAaiV,IAAb,GAAoB,YAAM;mBACf9S,KAAP;mBACOrB,WAAP,GAAqB,CAArB;SAFJ;;;YAMMA,WAzFF,GAyFkB5R,OAAO8Q,KAzFzB,CAyFEc,WAzFF;;eA0FGT,cAAP,CAAsBnR,OAAO8Q,KAA7B,EAAoC,aAApC,EAAmD;eAAA,iBACzC;uBACKc,WAAP;aAF2C;eAAA,eAI3CtF,IAJ2C,EAIrC;;;;oBAIE6Q,KAJF,GAImCnd,MAJnC,CAIEmd,KAJF;oBAISrM,KAJT,GAImC9Q,MAJnC,CAIS8Q,KAJT;oBAIgBmH,MAJhB,GAImCjY,MAJnC,CAIgBiY,MAJhB;oBAIwBnE,MAJxB,GAImC9T,MAJnC,CAIwB8T,MAJxB;;;;sBAOA+D,OAAN,GAAgB,IAAhB;sBACMjM,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiC8Q,KAAjC,EAAwC,SAAxC;;;wBAGQpN,OAAR,CAAgBuU,UAAUkF,MAAM6I,SAAN,CAAgB,CAAhB,CAA1B;;iBAEKhgB,IAFL,CAEU;2BAAMmX,MAAM8I,cAAN,CAAqB3Z,IAArB,CAAN;iBAFV;;iBAIKtG,IAJL,CAIU;2BAAMiS,UAAUkF,MAAMlK,KAAN,EAAhB;iBAJV;;iBAMKjN,IANL,CAMU;2BAAMiS,UAAUkF,MAAM6I,SAAN,CAAgBlS,MAAhB,CAAhB;iBANV,EAOK5N,KAPL,CAOW,YAAM;;iBAPjB;;SAfR;;;YA6BI2T,QAAQ7Z,OAAOE,MAAP,CAAc2Z,KAAd,CAAoBqM,QAAhC;eACO/U,cAAP,CAAsBnR,OAAO8Q,KAA7B,EAAoC,cAApC,EAAoD;eAAA,iBAC1C;uBACK+I,KAAP;aAF4C;eAAA,eAI5CjY,KAJ4C,EAIrC;uBACAub,KAAP,CACKgJ,eADL,CACqBvkB,KADrB,EAEKoE,IAFL,CAEU,YAAM;4BACApE,KAAR;0BACMgK,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,YAA/C;iBAJR,EAMK5K,KANL,CAMW,iBAAS;;wBAERkO,MAAMqG,IAAN,KAAe,OAAnB,EAA4B;iCACfoB,YAAT,CAAsB3gB,IAAtB,CAA2B8E,MAA3B,EAAmC,EAAnC;;iBATZ;;SALR;;;YAqBM8T,MA7IF,GA6Ia9T,OAAOE,MA7IpB,CA6IE4T,MA7IF;;eA8IG3C,cAAP,CAAsBnR,OAAO8Q,KAA7B,EAAoC,QAApC,EAA8C;eAAA,iBACpC;uBACKgD,MAAP;aAFsC;eAAA,eAItClS,KAJsC,EAI/B;uBACAub,KAAP,CAAa6I,SAAb,CAAuBpkB,KAAvB,EAA8BoE,IAA9B,CAAmC,YAAM;6BAC5BpE,KAAT;0BACMgK,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,cAA/C;iBAFJ;;SALR;;;YAaMyF,KA3JF,GA2JYvW,OAAOE,MA3JnB,CA2JEqW,KA3JF;;eA4JGpF,cAAP,CAAsBnR,OAAO8Q,KAA7B,EAAoC,OAApC,EAA6C;eAAA,iBACnC;uBACKyF,KAAP;aAFqC;eAAA,eAIrC3U,KAJqC,EAI9B;oBACDsI,SAASxJ,MAAMC,EAAN,CAASsI,OAAT,CAAiBrH,KAAjB,IAA0BA,KAA1B,GAAkC,KAAjD;;uBAEOub,KAAP,CAAa6I,SAAb,CAAuB9b,SAAS,CAAT,GAAalK,OAAOE,MAAP,CAAc4T,MAAlD,EAA0D9N,IAA1D,CAA+D,YAAM;4BACzDkE,MAAR;0BACM0B,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,cAA/C;iBAFJ;;SAPR;;;YAeMmP,IA3KF,GA2KWjgB,OAAOE,MA3KlB,CA2KE+f,IA3KF;;eA4KG9O,cAAP,CAAsBnR,OAAO8Q,KAA7B,EAAoC,MAApC,EAA4C;eAAA,iBAClC;uBACKmP,IAAP;aAFoC;eAAA,eAIpCre,KAJoC,EAI7B;oBACDsI,SAASxJ,MAAMC,EAAN,CAASsI,OAAT,CAAiBrH,KAAjB,IAA0BA,KAA1B,GAAkC5B,OAAOE,MAAP,CAAc+f,IAAd,CAAmB7G,MAApE;;uBAEO+D,KAAP,CAAaiJ,OAAb,CAAqBlc,MAArB,EAA6BlE,IAA7B,CAAkC,YAAM;2BAC7BkE,MAAP;iBADJ;;SAPR;;;YAcImc,mBAAJ;eACOlJ,KAAP,CACKmJ,WADL,GAEKtgB,IAFL,CAEU,iBAAS;yBACEiC,KAAb;SAHR,EAKK/B,KALL,CAKW,iBAAS;mBACP+L,KAAL,CAAWoC,IAAX,CAAgBD,KAAhB;SANR;;eASOjD,cAAP,CAAsBnR,OAAO8Q,KAA7B,EAAoC,YAApC,EAAkD;eAAA,iBACxC;uBACKuV,UAAP;;SAFR;;;eAOOlV,cAAP,CAAsBnR,OAAO8Q,KAA7B,EAAoC,OAApC,EAA6C;eAAA,iBACnC;uBACK9Q,OAAO4R,WAAP,KAAuB5R,OAAOgU,QAArC;;SAFR;;;gBAOQuS,GAAR,CAAY,CACRvmB,OAAOmd,KAAP,CAAaqJ,aAAb,EADQ,EAERxmB,OAAOmd,KAAP,CAAasJ,cAAb,EAFQ,CAAZ,EAGGzgB,IAHH,CAGQ,sBAAc;gBACZ6J,QAAQnP,MAAMgmB,cAAN,CAAqBC,WAAW,CAAX,CAArB,EAAoCA,WAAW,CAAX,CAApC,CAAd;kBACM/B,cAAN,CAAqB1pB,IAArB,CAA0B,MAA1B,EAAgC2U,KAAhC;SALJ;;;eASOsN,KAAP,CAAayJ,YAAb,CAA0B5mB,OAAOE,MAAP,CAAc2lB,SAAxC,EAAmD7f,IAAnD,CAAwD,iBAAS;mBACtD9F,MAAP,CAAc2lB,SAAd,GAA0B7Z,KAA1B;SADJ;;;eAKOmR,KAAP,CAAa0J,aAAb,GAA6B7gB,IAA7B,CAAkC,iBAAS;mBAChC9F,MAAP,CAAcmS,KAAd,GAAsBA,KAAtB;eACGkO,QAAH,CAAYrlB,IAAZ,CAAiB,MAAjB;SAFJ;;;eAMOiiB,KAAP,CAAa2J,cAAb,GAA8B9gB,IAA9B,CAAmC,iBAAS;0BAC1BiC,KAAd;kBACM2D,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,YAA/C;SAFJ;;;eAMOqM,KAAP,CAAa4J,WAAb,GAA2B/gB,IAA3B,CAAgC,iBAAS;mBAC9B8K,KAAP,CAAakD,QAAb,GAAwB/L,KAAxB;kBACM2D,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,gBAA/C;SAFJ;;;eAMOqM,KAAP,CAAa6J,aAAb,GAA6BhhB,IAA7B,CAAkC,kBAAU;mBACjC8K,KAAP,CAAawL,UAAb,GAA0B5C,MAA1B;qBACSsG,KAAT,CAAe9kB,IAAf,CAAoB8E,MAApB;SAFJ;;eAKOmd,KAAP,CAAarS,EAAb,CAAgB,WAAhB,EAA6B,gBAAQ;gBAC7BuS,MAAM,IAAV;;gBAEIlY,KAAK8hB,IAAL,CAAUhmB,MAAd,EAAsB;sBACZP,MAAMwmB,SAAN,CAAgB/hB,KAAK8hB,IAAL,CAAU,CAAV,EAAa3f,IAA7B,CAAN;;;qBAGKgW,OAAT,CAAiBpiB,IAAjB,CAAsB8E,MAAtB,EAA8Bqd,GAA9B;SAPJ;;eAUOF,KAAP,CAAarS,EAAb,CAAgB,QAAhB,EAA0B,YAAM;gBACxBpK,MAAMC,EAAN,CAASgG,OAAT,CAAiB3G,OAAOmd,KAAP,CAAaxW,OAA9B,KAA0C3G,OAAOK,SAAP,CAAiB+P,EAA/D,EAAmE;oBACzD+W,QAAQnnB,OAAOmd,KAAP,CAAaxW,OAA3B;;;;sBAIMf,YAAN,CAAmB,UAAnB,EAA+B,CAAC,CAAhC;;SANR;;eAUOuX,KAAP,CAAarS,EAAb,CAAgB,MAAhB,EAAwB,YAAM;gCACN5P,IAApB,CAAyB8E,MAAzB,EAAiC,IAAjC;kBACM4L,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,SAA/C;SAFJ;;eAKOqM,KAAP,CAAarS,EAAb,CAAgB,OAAhB,EAAyB,YAAM;gCACP5P,IAApB,CAAyB8E,MAAzB,EAAiC,KAAjC;SADJ;;eAIOmd,KAAP,CAAarS,EAAb,CAAgB,YAAhB,EAA8B,gBAAQ;mBAC3BgG,KAAP,CAAa+G,OAAb,GAAuB,KAAvB;0BACc1S,KAAKiiB,OAAnB;kBACMxb,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,YAA/C;SAHJ;;eAMOqM,KAAP,CAAarS,EAAb,CAAgB,UAAhB,EAA4B,gBAAQ;mBACzBgG,KAAP,CAAa8F,QAAb,GAAwBzR,KAAK6R,OAA7B;kBACMpL,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,UAA/C;;;gBAGIzE,SAASlH,KAAK6R,OAAd,EAAuB,EAAvB,MAA+B,CAAnC,EAAsC;sBAC5BpL,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,gBAA/C;;;;;mBAKGqM,KAAP,CAAa4J,WAAb,GAA2B/gB,IAA3B,CAAgC,iBAAS;oBACjCiC,UAAUjI,OAAO8Q,KAAP,CAAakD,QAA3B,EAAqC;2BAC1BlD,KAAP,CAAakD,QAAb,GAAwB/L,KAAxB;0BACM2D,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,gBAA/C;;aAHR;SAXJ;;eAmBOqM,KAAP,CAAarS,EAAb,CAAgB,QAAhB,EAA0B,YAAM;mBACrBgG,KAAP,CAAa+G,OAAb,GAAuB,KAAvB;kBACMjM,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,QAA/C;SAFJ;;eAKOqM,KAAP,CAAarS,EAAb,CAAgB,OAAhB,EAAyB,YAAM;mBACpBgG,KAAP,CAAamH,MAAb,GAAsB,IAAtB;kBACMrM,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,OAA/C;SAFJ;;eAKOqM,KAAP,CAAarS,EAAb,CAAgB,OAAhB,EAAyB,kBAAU;mBACxBgG,KAAP,CAAasD,KAAb,GAAqBzI,MAArB;kBACMC,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,OAA/C;SAFJ;;;mBAMW;mBAAMV,GAAGiX,KAAH,CAASnsB,IAAT,CAAc8E,MAAd,CAAN;SAAX,EAAwC,CAAxC;;CApWR;;ACjBA;AACA;;AAQA,SAASsnB,cAAT,CAAwB1lB,KAAxB,EAA+B;YACnBA,KAAR;aACS,QAAL;mBACW,IAAP;;aAEC,IAAL;mBACW,QAAP;;aAEC,QAAL;mBACW,IAAP;;aAEC,IAAL;mBACW,QAAP;;aAEC,QAAL;mBACW,IAAP;;aAEC,IAAL;mBACW,QAAP;;aAEC,OAAL;mBACW,GAAP;;aAEC,GAAL;mBACW,OAAP;;aAEC,OAAL;mBACW,GAAP;;aAEC,GAAL;mBACW,OAAP;;aAEC,QAAL;mBACW,GAAP;;aAEC,GAAL;mBACW,QAAP;;aAEC,OAAL;mBACW,GAAP;;aAEC,GAAL;mBACW,OAAP;;;mBAGO,SAAP;;;;AAIZ,SAAS2lB,eAAT,CAAyBC,MAAzB,EAAiC;QACzB9mB,MAAMC,EAAN,CAASC,KAAT,CAAe4mB,MAAf,CAAJ,EAA4B;eACjBA,MAAP;;;WAGG9mB,MAAMgR,MAAN,CAAa8V,OAAOtY,GAAP,CAAW;eAASoY,eAAeG,KAAf,CAAT;KAAX,CAAb,CAAP;;;;AAIJ,SAAS9C,qBAAT,CAA6B5S,IAA7B,EAAmC;QAC3B,KAAKjB,KAAL,CAAWmH,MAAX,KAAsBlG,IAA1B,EAAgC;aACvBjB,KAAL,CAAWmH,MAAX,GAAoB,CAAClG,IAArB;cACMnG,aAAN,CAAoB1Q,IAApB,CAAyB,IAAzB,EAA+B,KAAK4V,KAApC,EAA2CiB,OAAO,MAAP,GAAgB,OAA3D;;;;AAIR,IAAM3D,UAAU;SAAA,mBACJ;;;;cAEEgJ,WAAN,CAAkB,KAAK/Q,QAAL,CAAcC,OAAhC,EAAyC,KAAKpG,MAAL,CAAYgU,UAAZ,CAAuBiJ,KAAhE,EAAuE,IAAvE;;;gBAGQyH,cAAR,CAAuB1pB,IAAvB,CAA4B,IAA5B;;;YAGIwF,MAAMC,EAAN,CAASO,MAAT,CAAgBX,OAAOmnB,EAAvB,KAA8BhnB,MAAMC,EAAN,CAASwK,QAAT,CAAkB5K,OAAOmnB,EAAP,CAAU9B,MAA5B,CAAlC,EAAuE;oBAC3DtF,KAAR,CAAcplB,IAAd,CAAmB,IAAnB;SADJ,MAEO;;kBAEG4pB,UAAN,CAAiB,KAAK5kB,MAAL,CAAY6kB,IAAZ,CAAiB3W,OAAjB,CAAyB4W,GAA1C,EAA+C9e,KAA/C,CAAqD,iBAAS;sBACrD+L,KAAL,CAAWoC,IAAX,CAAgB,4BAAhB,EAA8CD,KAA9C;aADJ;;;;mBAMOuT,uBAAP,GAAiCpnB,OAAOonB,uBAAP,IAAkC,EAAnE;;;mBAGOA,uBAAP,CAA+B9R,IAA/B,CAAoC,YAAM;wBAC9ByK,KAAR,CAAcplB,IAAd,CAAmB,KAAnB;aADJ;;;mBAKO0sB,uBAAP,GAAiC,YAAM;uBAC5BD,uBAAP,CAA+BjhB,OAA/B,CAAuC,oBAAY;;iBAAnD;aADJ;;KA3BI;;;;YAAA,oBAoCHmhB,OApCG,EAoCM;;;;;;YAIVnnB,MAAMC,EAAN,CAASwK,QAAT,CAAkB,KAAKgS,KAAL,CAAW2K,YAA7B,CAAJ,EAAgD;sCAC1B,KAAK3K,KAAL,CAAW2K,YAAX,EAD0B;gBACpCzV,KADoC,uBACpCA,KADoC;;gBAGxC3R,MAAMC,EAAN,CAASC,KAAT,CAAeyR,KAAf,CAAJ,EAA2B;qBAClBnS,MAAL,CAAYmS,KAAZ,GAAoBA,KAApB;mBACGkO,QAAH,CAAYrlB,IAAZ,CAAiB,IAAjB;;;;;;YAMFkF,MAAM,KAAKF,MAAL,CAAYgD,IAAZ,CAAiB6kB,MAA7B;YACIrnB,MAAMC,EAAN,CAASK,MAAT,CAAgBZ,GAAhB,KAAwB,CAACM,MAAMC,EAAN,CAASC,KAAT,CAAeR,GAAf,CAA7B,EAAkD;gBACxCoD,MAAM9C,MAAMiM,MAAN,CAAa,KAAKzM,MAAL,CAAY6kB,IAAZ,CAAiB3W,OAAjB,CAAyB+B,GAAtC,EAA2C0X,OAA3C,EAAoDznB,GAApD,CAAZ;;kBAGK2F,KADL,CACWvC,GADX,EAEKwC,IAFL,CAEU,kBAAU;oBACRtF,MAAMC,EAAN,CAASO,MAAT,CAAgB+E,MAAhB,CAAJ,EAA6B;2BACpB/F,MAAL,CAAYmS,KAAZ,GAAoBpM,OAAO+hB,KAAP,CAAa,CAAb,EAAgBC,OAAhB,CAAwB5V,KAA5C;uBACGkO,QAAH,CAAYrlB,IAAZ,CAAiB,MAAjB;;aALZ,EAQKgL,KARL,CAQW,YAAM,EARjB;;KAvDI;;;;kBAAA,4BAoEK;YACP2J,QAAQ,KAAK3P,MAAL,CAAY2P,KAAZ,CAAkBxH,KAAlB,CAAwB,GAAxB,CAAd;aACKhC,QAAL,CAAcC,OAAd,CAAsBhD,KAAtB,CAA4B4hB,aAA5B,GAA+C,MAAMrV,MAAM,CAAN,CAAN,GAAiBA,MAAM,CAAN,CAAhE;KAtEQ;;;;SAAA,mBA0EJ;YACE7P,SAAS,IAAf;;;YAGMkoB,YAAYloB,OAAO8Q,KAAP,CAAa/E,YAAb,CAA0B,IAA1B,CAAlB;YACI,CAACrL,MAAMC,EAAN,CAASC,KAAT,CAAesnB,SAAf,CAAD,IAA8BA,UAAUvZ,UAAV,CAAqB,UAArB,CAAlC,EAAoE;;;;;YAKhEf,SAAS5N,OAAO8Q,KAAP,CAAa/E,YAAb,CAA0B,KAA1B,CAAb;;;YAGIrL,MAAMC,EAAN,CAASC,KAAT,CAAegN,MAAf,CAAJ,EAA4B;qBACf5N,OAAO8Q,KAAP,CAAa/E,YAAb,CAA0B,KAAK7L,MAAL,CAAYmH,UAAZ,CAAuB8V,KAAvB,CAA6BthB,EAAvD,CAAT;;;;YAIEgsB,UAAUnnB,MAAMynB,cAAN,CAAqBva,MAArB,CAAhB;YACM/R,KAAK6E,MAAM0nB,UAAN,CAAiBpoB,OAAOiQ,QAAxB,CAAX;YACMxK,YAAY/E,MAAMgF,aAAN,CAAoB,KAApB,EAA2B,EAAE7J,MAAF,EAA3B,CAAlB;eACOiV,KAAP,GAAepQ,MAAM+kB,cAAN,CAAqBhgB,SAArB,EAAgCzF,OAAO8Q,KAAvC,CAAf;;;YAGMuX,YAAY,SAAZA,SAAY;mDAAwCR,OAAxC,SAAmDlb,MAAnD;SAAlB;;;cAGMqU,SAAN,CAAgBqH,UAAU,QAAV,CAAhB,EAAqC,GAArC;SACKniB,KADL,CACW;mBAAMxF,MAAMsgB,SAAN,CAAgBqH,UAAU,IAAV,CAAhB,EAAiC,GAAjC,CAAN;SADX;SAEKniB,KAFL,CAEW;mBAAMxF,MAAMsgB,SAAN,CAAgBqH,UAAU,IAAV,CAAhB,CAAN;SAFX;SAGKriB,IAHL,CAGU;mBAASoK,GAAGsQ,SAAH,CAAaxlB,IAAb,CAAkB8E,MAAlB,EAA0BuE,MAAMF,GAAhC,CAAT;SAHV,EAIK2B,IAJL,CAIU,qBAAa;;gBAEX,CAACqiB,UAAU3e,QAAV,CAAmB,QAAnB,CAAL,EAAmC;uBACxBrD,QAAP,CAAgBma,MAAhB,CAAuBld,KAAvB,CAA6BglB,cAA7B,GAA8C,OAA9C;;SAPZ;;;;eAaOnL,KAAP,GAAe,IAAI5c,OAAOmnB,EAAP,CAAU9B,MAAd,CAAqB/pB,EAArB,EAAyB;4BAAA;wBAExB;0BACEmE,OAAOE,MAAP,CAAcmlB,QAAd,GAAyB,CAAzB,GAA6B,CAD/B;0BAEErlB,OAAOK,SAAP,CAAiB+P,EAAjB,GAAsB,CAAtB,GAA0B,CAF5B;qBAGH,CAHG;0BAIE,CAJF;gCAKQ,CALR;gCAMQ,CANR;2BAOG,CAPH;6BAQK,CARL;;;;iCAYS7P,SAASA,OAAOkS,QAAP,CAAgBhE,IAAzB,GAAgC,IAZzC;;;gCAeQzO,OAAOyT,QAAP,CAAgB2F,MAAhB,GAAyB,CAAzB,GAA6B,CAfrC;8BAgBMpZ,OAAOE,MAAP,CAAcuT,QAAd,CAAuB8F;aAlBL;oBAoB5B;uBAAA,mBACI/O,KADJ,EACW;;;wBAGP9J,MAAMC,EAAN,CAASO,MAAT,CAAgBlB,OAAO8Q,KAAP,CAAasD,KAA7B,CAAJ,EAAyC;;;;wBAInCzI,SAAS;8BACLnB,MAAMrF;qBADhB;;;4BAKQqF,MAAMrF,IAAd;6BACS,CAAL;mCACWojB,OAAP,GACI,sOADJ;;;6BAIC,CAAL;mCACWA,OAAP,GACI,sHADJ;;;6BAIC,GAAL;mCACWA,OAAP,GACI,oIADJ;;;6BAIC,GAAL;6BACK,GAAL;mCACWA,OAAP,GAAiB,sFAAjB;;;;mCAIOA,OAAP,GAAiB,0BAAjB;;;;2BAIDzX,KAAP,CAAasD,KAAb,GAAqBzI,MAArB;;0BAEMC,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,OAA/C;iBAzCA;uCAAA,qCA2CsB;0BAChBlF,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,eAA/C,EAAgE,KAAhE,EAAuE;iCAC1D9Q,OAAO8Q,KAAP,CAAawH;qBAD1B;iBA5CA;oCAAA,gCAgDiB9N,KAhDjB,EAgDwB;;wBAElBge,WAAWhe,MAAM/C,MAAvB;;;2BAGOqJ,KAAP,CAAa2X,YAAb,GAA4BD,SAASE,eAAT,EAA5B;;0BAEM9c,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,YAA/C;iBAvDA;uBAAA,mBAyDItG,KAzDJ,EAyDW;;wBAELge,WAAWhe,MAAM/C,MAAvB;;;4BAGQkhB,QAAR,CAAiBztB,IAAjB,CAAsB8E,MAAtB,EAA8B6nB,OAA9B;;;2BAGO/W,KAAP,CAAaiB,IAAb,GAAoB,YAAM;8CACF7W,IAApB,CAAyB8E,MAAzB,EAAiC,IAAjC;iCACS4oB,SAAT;qBAFJ;;2BAKO9X,KAAP,CAAamC,KAAb,GAAqB,YAAM;8CACH/X,IAApB,CAAyB8E,MAAzB,EAAiC,KAAjC;iCACS6oB,UAAT;qBAFJ;;2BAKO/X,KAAP,CAAaiV,IAAb,GAAoB,YAAM;iCACb+C,SAAT;qBADJ;;2BAIOhY,KAAP,CAAakD,QAAb,GAAwBwU,SAASzB,WAAT,EAAxB;2BACOjW,KAAP,CAAamH,MAAb,GAAsB,IAAtB;;;2BAGOnH,KAAP,CAAac,WAAb,GAA2B,CAA3B;2BACOT,cAAP,CAAsBnR,OAAO8Q,KAA7B,EAAoC,aAApC,EAAmD;2BAAA,iBACzC;mCACK/O,OAAOymB,SAAS1B,cAAT,EAAP,CAAP;yBAF2C;2BAAA,eAI3Cxa,IAJ2C,EAIrC;;gCAEFtM,OAAOiY,MAAX,EAAmB;uCACRkF,KAAP,CAAa9J,IAAb;;;;mCAIGvC,KAAP,CAAa+G,OAAb,GAAuB,IAAvB;kCACMjM,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,SAA/C;;;qCAGSsT,MAAT,CAAgB9X,IAAhB;;qBAfR;;;2BAoBO6E,cAAP,CAAsBnR,OAAO8Q,KAA7B,EAAoC,cAApC,EAAoD;2BAAA,iBAC1C;mCACK0X,SAASE,eAAT,EAAP;yBAF4C;2BAAA,eAI5C9mB,KAJ4C,EAIrC;qCACEukB,eAAT,CAAyBvkB,KAAzB;;qBALR;;;2BAUOuP,cAAP,CAAsBnR,OAAO8Q,KAA7B,EAAoC,SAApC,EAA+C;2BAAA,iBACrC;mCACKwW,eAAekB,SAASO,kBAAT,EAAf,CAAP;yBAFuC;2BAAA,eAIvCnnB,KAJuC,EAIhC;gCACD0W,UAAU1W,KAAhB;;;qCAGSonB,kBAAT,CAA4B1B,eAAehP,OAAf,CAA5B;;;kCAGM1M,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,kBAA/C,EAAmE,KAAnE,EAA0E;;6BAA1E;;qBAXR;;;wBAkBMgD,MA3EK,GA2EM9T,OAAOE,MA3Eb,CA2EL4T,MA3EK;;2BA4EJ3C,cAAP,CAAsBnR,OAAO8Q,KAA7B,EAAoC,QAApC,EAA8C;2BAAA,iBACpC;mCACKgD,MAAP;yBAFsC;2BAAA,eAItClS,KAJsC,EAI/B;qCACEA,KAAT;qCACSokB,SAAT,CAAmBlS,SAAS,GAA5B;kCACMlI,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,cAA/C;;qBAPR;;;wBAYMyF,KAxFK,GAwFKvW,OAAOE,MAxFZ,CAwFLqW,KAxFK;;2BAyFJpF,cAAP,CAAsBnR,OAAO8Q,KAA7B,EAAoC,OAApC,EAA6C;2BAAA,iBACnC;mCACKyF,KAAP;yBAFqC;2BAAA,eAIrC3U,KAJqC,EAI9B;gCACDsI,SAASxJ,MAAMC,EAAN,CAASsI,OAAT,CAAiBrH,KAAjB,IAA0BA,KAA1B,GAAkC2U,KAAjD;oCACQrM,MAAR;qCACSA,SAAS,MAAT,GAAkB,QAA3B;kCACM0B,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,cAA/C;;qBARR;;;2BAaOK,cAAP,CAAsBnR,OAAO8Q,KAA7B,EAAoC,YAApC,EAAkD;2BAAA,iBACxC;mCACK0X,SAASlC,WAAT,EAAP;;qBAFR;;;2BAOOnV,cAAP,CAAsBnR,OAAO8Q,KAA7B,EAAoC,OAApC,EAA6C;2BAAA,iBACnC;mCACK9Q,OAAO4R,WAAP,KAAuB5R,OAAOgU,QAArC;;qBAFR;;;2BAOOzI,OAAP,CAAesO,KAAf,GAAuB2O,SAASS,yBAAT,EAAvB;;;wBAGIjpB,OAAOK,SAAP,CAAiB+P,EAArB,EAAyB;+BACdU,KAAP,CAAalL,YAAb,CAA0B,UAA1B,EAAsC,CAAC,CAAvC;;;0BAGEgG,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,YAA/C;0BACMlF,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,gBAA/C;;;kCAGc9Q,OAAOqhB,MAAP,CAAc6H,SAA5B;;;2BAGO7H,MAAP,CAAc6H,SAAd,GAA0BC,YAAY,YAAM;;+BAEjCrY,KAAP,CAAa8F,QAAb,GAAwB4R,SAASY,sBAAT,EAAxB;;;4BAGIppB,OAAO8Q,KAAP,CAAauY,YAAb,KAA8B,IAA9B,IAAsCrpB,OAAO8Q,KAAP,CAAauY,YAAb,GAA4BrpB,OAAO8Q,KAAP,CAAa8F,QAAnF,EAA6F;kCACnFhL,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,UAA/C;;;;+BAIGA,KAAP,CAAauY,YAAb,GAA4BrpB,OAAO8Q,KAAP,CAAa8F,QAAzC;;;4BAGI5W,OAAO8Q,KAAP,CAAa8F,QAAb,KAA0B,CAA9B,EAAiC;0CACf5W,OAAOqhB,MAAP,CAAc6H,SAA5B;;;kCAGMtd,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,gBAA/C;;qBAjBkB,EAmBvB,GAnBuB,CAA1B;;;+BAsBW;+BAAMV,GAAGiX,KAAH,CAASnsB,IAAT,CAAc8E,MAAd,CAAN;qBAAX,EAAwC,EAAxC;iBAjNA;6BAAA,yBAmNUwK,KAnNV,EAmNiB;;wBAEXge,WAAWhe,MAAM/C,MAAvB;;;kCAGczH,OAAOqhB,MAAP,CAAcxP,OAA5B;;wBAEMyX,SAAStpB,OAAO8Q,KAAP,CAAa+G,OAAb,IAAwB,CACnC,CADmC,EAEnC,CAFmC,EAGrCnO,QAHqC,CAG5Bc,MAAMrF,IAHsB,CAAvC;;wBAKImkB,MAAJ,EAAY;;+BAEDxY,KAAP,CAAa+G,OAAb,GAAuB,KAAvB;8BACMjM,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,QAA/C;;;;;;;;;;4BAUItG,MAAMrF,IAAd;6BACS,CAAC,CAAN;;kCAEUyG,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,YAA/C;;;mCAGOA,KAAP,CAAa8F,QAAb,GAAwB4R,SAASY,sBAAT,EAAxB;kCACMxd,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,UAA/C;;;;6BAIC,CAAL;kDACwB5V,IAApB,CAAyB8E,MAAzB,EAAiC,KAAjC;;;gCAGIA,OAAO8Q,KAAP,CAAamP,IAAjB,EAAuB;;yCAEV6I,SAAT;yCACSF,SAAT;6BAHJ,MAIO;sCACGhd,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,OAA/C;;;;;6BAKH,CAAL;;gCAEQ9Q,OAAO8Q,KAAP,CAAamH,MAAjB,EAAyB;uCACdnH,KAAP,CAAamC,KAAb;6BADJ,MAEO;sDACiB/X,IAApB,CAAyB8E,MAAzB,EAAiC,IAAjC;;sCAEM4L,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,SAA/C;;;uCAGOuQ,MAAP,CAAcxP,OAAd,GAAwBsX,YAAY,YAAM;0CAChCvd,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,YAA/C;iCADoB,EAErB,EAFqB,CAAxB;;;;;oCAOI9Q,OAAO8Q,KAAP,CAAakD,QAAb,KAA0BwU,SAASzB,WAAT,EAA9B,EAAsD;2CAC3CjW,KAAP,CAAakD,QAAb,GAAwBwU,SAASzB,WAAT,EAAxB;0CACMnb,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAO8Q,KAAxC,EAA+C,gBAA/C;;;;yCAIK6K,cAAT,CAAwBzgB,IAAxB,CAA6B8E,MAA7B,EAAqCunB,gBAAgBiB,SAASe,yBAAT,EAAhB,CAArC;;;;;6BAKH,CAAL;;gCAEQ,CAACvpB,OAAOuW,KAAZ,EAAmB;uCACR4G,KAAP,CAAaqM,MAAb;;kDAEgBtuB,IAApB,CAAyB8E,MAAzB,EAAiC,KAAjC;;;;;;;;0BAQF4L,aAAN,CAAoB1Q,IAApB,CAAyB8E,MAAzB,EAAiCA,OAAOqG,QAAP,CAAgBZ,SAAjD,EAA4D,aAA5D,EAA2E,KAA3E,EAAkF;8BACxE+E,MAAMrF;qBADhB;;;SAlUG,CAAf;;CAlHR;;AC1EA;AACA;AAQA,IAAM2L,QAAQ;;SAAA,mBAEF;;YAEA,CAAC,KAAKA,KAAV,EAAiB;iBACRmB,KAAL,CAAWoC,IAAX,CAAgB,yBAAhB;;;;;cAKE+C,WAAN,CAAkB,KAAK/Q,QAAL,CAAcZ,SAAhC,EAA2C,KAAKvF,MAAL,CAAYgU,UAAZ,CAAuB9M,IAAvB,CAA4BsB,OAA5B,CAAoC,KAApC,EAA2C,KAAKtB,IAAhD,CAA3C,EAAkG,IAAlG;;;cAGMgQ,WAAN,CAAkB,KAAK/Q,QAAL,CAAcZ,SAAhC,EAA2C,KAAKvF,MAAL,CAAYgU,UAAZ,CAAuBjE,QAAvB,CAAgCvH,OAAhC,CAAwC,KAAxC,EAA+C,KAAKuH,QAApD,CAA3C,EAA0G,IAA1G;;;;YAII,KAAK0Q,OAAT,EAAkB;kBACRvJ,WAAN,CAAkB,KAAK/Q,QAAL,CAAcZ,SAAhC,EAA2C,KAAKvF,MAAL,CAAYgU,UAAZ,CAAuB9M,IAAvB,CAA4BsB,OAA5B,CAAoC,KAApC,EAA2C,OAA3C,CAA3C,EAAgG,IAAhG;;;;YAIA,KAAKuI,OAAT,EAAkB;;iBAET5K,QAAL,CAAcC,OAAd,GAAwB5F,MAAMgF,aAAN,CAAoB,KAApB,EAA2B;uBACxC,KAAKxF,MAAL,CAAYgU,UAAZ,CAAuBzD;aADV,CAAxB;;;kBAKMlR,IAAN,CAAW,KAAKuR,KAAhB,EAAuB,KAAKzK,QAAL,CAAcC,OAArC;;;iBAGKD,QAAL,CAAcma,MAAd,GAAuB9f,MAAMgF,aAAN,CAAoB,KAApB,EAA2B;uBACvC,KAAKxF,MAAL,CAAYgU,UAAZ,CAAuBsM;aADX,CAAvB;;iBAIKna,QAAL,CAAcC,OAAd,CAAsBa,WAAtB,CAAkC,KAAKd,QAAL,CAAcma,MAAhD;;;YAGA,KAAKG,OAAT,EAAkB;oBACN,KAAK1Q,QAAb;qBACS,SAAL;4BACY+P,KAAR,CAAc9kB,IAAd,CAAmB,IAAnB;;;qBAGC,OAAL;0BACU8kB,KAAN,CAAY9kB,IAAZ,CAAiB,IAAjB;;;;;;SAPZ,MAaO,IAAI,KAAK6V,OAAT,EAAkB;kBACf3P,MAAN,CAAalG,IAAb,CAAkB,IAAlB;;;CArDZ;;ACTA;AACA;IAUMuuB;;;;;;iBAMUzpB,MAAZ,EAAoB;;;;;aACXA,MAAL,GAAcA,MAAd;aACK0pB,WAAL,GAAmB1pB,OAAOE,MAAP,CAAc+iB,GAAd,CAAkByG,WAArC;aACK7X,OAAL,GAAe,KAAf;aACKqR,WAAL,GAAmB,KAAnB;aACK7c,QAAL,GAAgB;uBACD,IADC;8BAEM;SAFtB;aAIKsjB,OAAL,GAAe,IAAf;aACKC,MAAL,GAAc,IAAd;aACKC,SAAL,GAAiB,IAAjB;aACKve,MAAL,GAAc,EAAd;aACKwe,WAAL,GAAmB,IAAnB;aACKC,cAAL,GAAsB,IAAtB;;;aAGK5G,cAAL,GAAsB,IAAIxmB,OAAJ,CAAY,UAAC+G,OAAD,EAAUC,MAAV,EAAqB;;kBAE9CmH,EAAL,CAAQ,QAAR,EAAkBpH,OAAlB;;;kBAGKoH,EAAL,CAAQ,OAAR,EAAiBnH,MAAjB;SALkB,CAAtB;;aAQKmO,IAAL;;;;;;;;;;+BAUG;;;gBACC,KAAK7R,OAAT,EAAkB;;oBAEV,CAACS,MAAMC,EAAN,CAASO,MAAT,CAAgBX,OAAOwnB,MAAvB,CAAD,IAAmC,CAACrnB,MAAMC,EAAN,CAASO,MAAT,CAAgBX,OAAOwnB,MAAP,CAAciC,GAA9B,CAAxC,EAA4E;0BAEnElF,UADL,CACgB,KAAK9kB,MAAL,CAAYE,MAAZ,CAAmB6kB,IAAnB,CAAwBkF,SAAxB,CAAkCjF,GADlD,EAEKhf,IAFL,CAEU,YAAM;+BACHsa,KAAL;qBAHR,EAKKpa,KALL,CAKW,YAAM;;+BAEJgkB,OAAL,CAAa,OAAb,EAAsB,IAAIjmB,KAAJ,CAAU,+BAAV,CAAtB;qBAPR;iBADJ,MAUO;yBACEqc,KAAL;;;;;;;;;;;gCAQJ;;;;;iBAGC6J,gBAAL,CAAsB,KAAtB,EAA6B,SAA7B;;;iBAGKhH,cAAL,CAAoBnd,IAApB,CAAyB,YAAM;uBACtBokB,gBAAL,CAAsB,sBAAtB;aADJ;;;iBAKKtK,SAAL;;;iBAGKuK,QAAL;;;;;;;;;;;;;;;;;mCA4BO;;iBAEFhkB,QAAL,CAAcZ,SAAd,GAA0B/E,MAAMgF,aAAN,CAAoB,KAApB,EAA2B;uBAC1C,KAAK1F,MAAL,CAAYE,MAAZ,CAAmBgU,UAAnB,CAA8B+O;aADf,CAA1B;iBAGKjjB,MAAL,CAAYqG,QAAZ,CAAqBZ,SAArB,CAA+B0B,WAA/B,CAA2C,KAAKd,QAAL,CAAcZ,SAAzD;;;mBAGOukB,GAAP,CAAWxW,QAAX,CAAoB8W,YAApB,CAAiCvC,OAAOiC,GAAP,CAAWO,cAAX,CAA0BC,SAA1B,CAAoCC,OAArE;;;mBAGOT,GAAP,CAAWxW,QAAX,CAAoBkX,SAApB,CAA8B,KAAK1qB,MAAL,CAAYE,MAAZ,CAAmB+iB,GAAnB,CAAuB1J,QAArD;;;;iBAIKlT,QAAL,CAAcskB,gBAAd,GAAiC,IAAI5C,OAAOiC,GAAP,CAAWY,kBAAf,CAAkC,KAAKvkB,QAAL,CAAcZ,SAAhD,CAAjC;;;iBAGKolB,UAAL;;;;;;;;;qCAMS;;;gBACDplB,SADC,GACa,KAAKzF,MAAL,CAAYqG,QADzB,CACDZ,SADC;;;gBAGL;;qBAEKmkB,MAAL,GAAc,IAAI7B,OAAOiC,GAAP,CAAWc,SAAf,CAAyB,KAAKzkB,QAAL,CAAcskB,gBAAvC,CAAd;;;qBAGKf,MAAL,CAAY9lB,gBAAZ,CAA6BikB,OAAOiC,GAAP,CAAWe,qBAAX,CAAiCC,IAAjC,CAAsCC,kBAAnE,EAAuF;2BAAS,OAAKC,kBAAL,CAAwB1gB,KAAxB,CAAT;iBAAvF,EAAgI,KAAhI;qBACKof,MAAL,CAAY9lB,gBAAZ,CAA6BikB,OAAOiC,GAAP,CAAWmB,YAAX,CAAwBH,IAAxB,CAA6BI,QAA1D,EAAoE;2BAAS,OAAKC,SAAL,CAAejX,KAAf,CAAT;iBAApE,EAAoG,KAApG;;;oBAGMxQ,UAAU,IAAImkB,OAAOiC,GAAP,CAAWsB,UAAf,EAAhB;wBACQC,QAAR,GAAmB,KAAKC,MAAxB;;;;wBAIQC,iBAAR,GAA4BhmB,UAAUimB,WAAtC;wBACQC,kBAAR,GAA6BlmB,UAAUuK,YAAvC;wBACQ4b,oBAAR,GAA+BnmB,UAAUimB,WAAzC;wBACQG,qBAAR,GAAgCpmB,UAAUuK,YAA1C;;;wBAGQ8b,sBAAR,GAAiC,KAAjC;;;wBAGQC,kBAAR,CAA2B,CAAC,KAAK/rB,MAAL,CAAYuW,KAAxC;;qBAEKqT,MAAL,CAAYiB,UAAZ,CAAuBjnB,OAAvB;aAzBJ,CA0BE,OAAOnC,CAAP,EAAU;qBACH4pB,SAAL,CAAe5pB,CAAf;;;;;;;;;;;wCAQqB;;;gBAAfoH,KAAe,uEAAP,KAAO;;gBACrB,CAACA,KAAL,EAAY;8BACM,KAAKkhB,cAAnB;qBACK1jB,QAAL,CAAcZ,SAAd,CAAwB0D,eAAxB,CAAwC,iBAAxC;;;;gBAIE6S,SAAS,SAATA,MAAS,GAAM;oBACX1P,OAAO5L,MAAMgM,UAAN,CAAiBvG,KAAKgG,GAAL,CAAS,OAAKwd,OAAL,CAAaqC,gBAAb,EAAT,EAA0C,CAA1C,CAAjB,CAAb;oBACM1W,QAAWnD,KAAKhR,GAAL,CAAS,eAAT,EAA0B,OAAKnB,MAAL,CAAYE,MAAtC,CAAX,WAA8DoM,IAApE;uBACKjG,QAAL,CAAcZ,SAAd,CAAwBG,YAAxB,CAAqC,iBAArC,EAAwD0P,KAAxD;aAHJ;;iBAMKyU,cAAL,GAAsBZ,YAAYnN,MAAZ,EAAoB,GAApB,CAAtB;;;;;;;;;;2CAOexR,OAAO;;;;gBAEhBgJ,WAAW,IAAIuU,OAAOiC,GAAP,CAAWiC,oBAAf,EAAjB;;;qBAGSC,2CAAT,GAAuD,IAAvD;qBACSC,gBAAT,GAA4B,IAA5B;;;;iBAIKxC,OAAL,GAAenf,MAAM4hB,aAAN,CAAoB,KAAKpsB,MAAzB,EAAiCwT,QAAjC,CAAf;;;iBAGKqW,SAAL,GAAiB,KAAKF,OAAL,CAAa0C,YAAb,EAAjB;;;gBAGI,CAAC3rB,MAAMC,EAAN,CAASC,KAAT,CAAe,KAAKipB,SAApB,CAAL,EAAqC;qBAC5BA,SAAL,CAAenjB,OAAf,CAAuB,oBAAY;wBAC3B4lB,aAAa,CAAb,IAAkBA,aAAa,CAAC,CAAhC,IAAqCA,WAAW,OAAKtsB,MAAL,CAAYgU,QAAhE,EAA0E;4BAChEuY,cAAc,OAAKvsB,MAAL,CAAYqG,QAAZ,CAAqBsN,QAAzC;;4BAEIjT,MAAMC,EAAN,CAASgG,OAAT,CAAiB4lB,WAAjB,CAAJ,EAAmC;gCACzBC,gBAAgB,MAAM,OAAKxsB,MAAL,CAAYgU,QAAlB,GAA6BsY,QAAnD;gCACMjP,MAAM3c,MAAMgF,aAAN,CAAoB,MAApB,EAA4B;uCAC7B,OAAK1F,MAAL,CAAYE,MAAZ,CAAmBgU,UAAnB,CAA8B+S;6BAD7B,CAAZ;;gCAII3jB,KAAJ,CAAUiU,IAAV,GAAoBiV,cAAcnvB,QAAd,EAApB;wCACY8J,WAAZ,CAAwBkW,GAAxB;;;iBAXZ;;;;;;;;iBAsBCsM,OAAL,CAAa3D,SAAb,CAAuB,KAAKhmB,MAAL,CAAY8T,MAAnC;;;;iBAIK6V,OAAL,CAAa7lB,gBAAb,CAA8BikB,OAAOiC,GAAP,CAAWmB,YAAX,CAAwBH,IAAxB,CAA6BI,QAA3D,EAAqE;uBAAS,OAAKC,SAAL,CAAejX,KAAf,CAAT;aAArE;;;mBAGOlR,IAAP,CAAY6kB,OAAOiC,GAAP,CAAWyC,OAAX,CAAmBzB,IAA/B,EAAqCtkB,OAArC,CAA6C,gBAAQ;uBAC5CijB,OAAL,CAAa7lB,gBAAb,CAA8BikB,OAAOiC,GAAP,CAAWyC,OAAX,CAAmBzB,IAAnB,CAAwB5jB,IAAxB,CAA9B,EAA6D;2BAAS,OAAKslB,SAAL,CAAeliB,KAAf,CAAT;iBAA7D;aADJ;;;iBAKK0f,OAAL,CAAa,QAAb;;;;;;;;;;;;kCASM1f,OAAO;;;gBACL/E,SADK,GACS,KAAKzF,MAAL,CAAYqG,QADrB,CACLZ,SADK;;;;;gBAKPknB,KAAKniB,MAAMoiB,KAAN,EAAX;;;gBAGMhhB,gBAAgB,SAAhBA,aAAgB,OAAQ;oBACpBpB,gBAAcpD,KAAKsB,OAAL,CAAa,IAAb,EAAmB,EAAnB,EAAuB6E,WAAvB,EAApB;sBACM3B,aAAN,CAAoB1Q,IAApB,CAAyB,OAAK8E,MAA9B,EAAsC,OAAKA,MAAL,CAAY8Q,KAAlD,EAAyDtG,KAAzD;aAFJ;;oBAKQA,MAAMpD,IAAd;qBACS2gB,OAAOiC,GAAP,CAAWyC,OAAX,CAAmBzB,IAAnB,CAAwB6B,MAA7B;;;yBAGS3C,OAAL,CAAa,QAAb;;;kCAGc1f,MAAMpD,IAApB;;;yBAGK0lB,aAAL,CAAmB,IAAnB;;wBAEI,CAACH,GAAGI,QAAH,EAAL,EAAoB;;2BAEbvd,KAAH,GAAW/J,UAAUimB,WAArB;2BACGjc,MAAH,GAAYhK,UAAUuK,YAAtB;;;;;;;qBAOH+X,OAAOiC,GAAP,CAAWyC,OAAX,CAAmBzB,IAAnB,CAAwBgC,iBAA7B;;;;;kCAKkBxiB,MAAMpD,IAApB;;;;;;;;;;;;;;;;;;;;;;;;;yBAyBK6lB,OAAL;;;qBAGClF,OAAOiC,GAAP,CAAWyC,OAAX,CAAmBzB,IAAnB,CAAwBkC,uBAA7B;;;;;kCAKkB1iB,MAAMpD,IAApB;;yBAEK+lB,YAAL;;;;qBAICpF,OAAOiC,GAAP,CAAWyC,OAAX,CAAmBzB,IAAnB,CAAwBoC,wBAA7B;;;;;;kCAMkB5iB,MAAMpD,IAApB;;yBAEK0lB,aAAL;;yBAEKO,aAAL;;;;qBAICtF,OAAOiC,GAAP,CAAWyC,OAAX,CAAmBzB,IAAnB,CAAwBsC,OAA7B;qBACKvF,OAAOiC,GAAP,CAAWyC,OAAX,CAAmBzB,IAAnB,CAAwBuC,QAA7B;qBACKxF,OAAOiC,GAAP,CAAWyC,OAAX,CAAmBzB,IAAnB,CAAwBwC,QAA7B;qBACKzF,OAAOiC,GAAP,CAAWyC,OAAX,CAAmBzB,IAAnB,CAAwByC,UAA7B;qBACK1F,OAAOiC,GAAP,CAAWyC,OAAX,CAAmBzB,IAAnB,CAAwB0C,KAA7B;kCACkBljB,MAAMpD,IAApB;;;;;;;;;;;;;;;kCAYFoD,OAAO;iBACRmjB,MAAL;iBACK3tB,MAAL,CAAYiS,KAAZ,CAAkBoC,IAAlB,CAAuB,WAAvB,EAAoC7J,KAApC;;;;;;;;;;;oCAQQ;;;gBACA/E,SADA,GACc,KAAKzF,MAAL,CAAYqG,QAD1B,CACAZ,SADA;;gBAEJ6G,aAAJ;;;iBAGKtM,MAAL,CAAY8K,EAAZ,CAAe,OAAf,EAAwB,YAAM;uBACrB8e,MAAL,CAAYgE,eAAZ;aADJ;;iBAIK5tB,MAAL,CAAY8K,EAAZ,CAAe,SAAf,EAA0B,YAAM;uBACrB,OAAK9K,MAAL,CAAY4R,WAAnB;uBACOtF,IAAP;aAFJ;;iBAKKtM,MAAL,CAAY8K,EAAZ,CAAe,QAAf,EAAyB,YAAM;oBACrB+iB,aAAa,OAAK7tB,MAAL,CAAY4R,WAA/B;;oBAEIlR,MAAMC,EAAN,CAASC,KAAT,CAAe,OAAKipB,SAApB,CAAJ,EAAoC;;;;uBAI/BA,SAAL,CAAenjB,OAAf,CAAuB,UAAC4lB,QAAD,EAAW1lB,KAAX,EAAqB;wBACpC0F,OAAOggB,QAAP,IAAmBA,WAAWuB,UAAlC,EAA8C;+BACrClE,OAAL,CAAamE,cAAb;+BACKjE,SAAL,CAAekE,MAAf,CAAsBnnB,KAAtB,EAA6B,CAA7B;;iBAHR;aAPJ;;;;mBAiBO9C,gBAAP,CAAwB,QAAxB,EAAkC,YAAM;oBAChC,OAAK6lB,OAAT,EAAkB;2BACTA,OAAL,CAAaqE,MAAb,CAAoBvoB,UAAUimB,WAA9B,EAA2CjmB,UAAUuK,YAArD,EAAmE+X,OAAOiC,GAAP,CAAWiE,QAAX,CAAoBC,MAAvF;;aAFR;;;;;;;;;+BAUG;;;gBACKzoB,SADL,GACmB,KAAKzF,MAAL,CAAYqG,QAD/B,CACKZ,SADL;;;gBAGC,CAAC,KAAK0d,cAAV,EAA0B;qBACjBkK,aAAL;;;;iBAIClK,cAAL,CACKnd,IADL,CACU,YAAM;;uBAEHK,QAAL,CAAcskB,gBAAd,CAA+BwD,UAA/B;;oBAEI;wBACI,CAAC,OAAKjL,WAAV,EAAuB;;+BAEdyG,OAAL,CAAayE,IAAb,CAAkB3oB,UAAUimB,WAA5B,EAAyCjmB,UAAUuK,YAAnD,EAAiE+X,OAAOiC,GAAP,CAAWiE,QAAX,CAAoBC,MAArF;;;;+BAIKvE,OAAL,CAAa9gB,KAAb;;;2BAGCqa,WAAL,GAAmB,IAAnB;iBAVJ,CAWE,OAAOmL,OAAP,EAAgB;;;2BAGThD,SAAL,CAAegD,OAAf;;aAnBZ,EAsBKnoB,KAtBL,CAsBW,YAAM,EAtBjB;;;;;;;;;wCA4BY;;iBAEPG,QAAL,CAAcZ,SAAd,CAAwBnC,KAAxB,CAA8BgrB,MAA9B,GAAuC,EAAvC;;;iBAGKzc,OAAL,GAAe,KAAf;;;gBAGI,KAAK7R,MAAL,CAAY4R,WAAZ,GAA0B,KAAK5R,MAAL,CAAYgU,QAA1C,EAAoD;qBAC3ChU,MAAL,CAAY+R,IAAZ;;;;;;;;;;uCAOO;;iBAEN1L,QAAL,CAAcZ,SAAd,CAAwBnC,KAAxB,CAA8BgrB,MAA9B,GAAuC,CAAvC;;;iBAGKzc,OAAL,GAAe,IAAf;;;iBAGK7R,MAAL,CAAYiT,KAAZ;;;;;;;;;;;;iCASK;;gBAED,KAAKiQ,WAAT,EAAsB;qBACbmK,aAAL;;;;iBAICnD,OAAL,CAAa,OAAb;;;iBAGK+C,OAAL;;;;;;;;;kCAMM;;;;iBAED9J,cAAL,CACKnd,IADL,CACU,YAAM;;oBAEJ,QAAK2jB,OAAT,EAAkB;4BACTA,OAAL,CAAa4E,OAAb;;;;wBAICpL,cAAL,GAAsB,IAAIxmB,OAAJ,CAAY,mBAAW;4BACpCmO,EAAL,CAAQ,QAAR,EAAkBpH,OAAlB;4BACK1D,MAAL,CAAYiS,KAAZ,CAAkBC,GAAlB,CAAsB,QAAKyX,OAA3B;iBAFkB,CAAtB;;;wBAMKkB,UAAL;aAdR,EAgBK3kB,KAhBL,CAgBW,YAAM,EAhBjB;;;;;;;;;;gCAuBIsE,OAAgB;;;8CAANyB,IAAM;oBAAA;;;gBACduiB,WAAW,KAAKljB,MAAL,CAAYd,KAAZ,CAAjB;;gBAEI9J,MAAMC,EAAN,CAASqC,KAAT,CAAewrB,QAAf,CAAJ,EAA8B;yBACjB9nB,OAAT,CAAiB,mBAAW;wBACpBhG,MAAMC,EAAN,CAASwK,QAAT,CAAkB1G,OAAlB,CAAJ,EAAgC;gCACpBgqB,KAAR,CAAc,OAAd,EAAoBxiB,IAApB;;iBAFR;;;;;;;;;;;;;2BAcLzB,OAAOQ,UAAU;gBACZ,CAACtK,MAAMC,EAAN,CAASqC,KAAT,CAAe,KAAKsI,MAAL,CAAYd,KAAZ,CAAf,CAAL,EAAyC;qBAChCc,MAAL,CAAYd,KAAZ,IAAqB,EAArB;;;iBAGCc,MAAL,CAAYd,KAAZ,EAAmBqL,IAAnB,CAAwB7K,QAAxB;;mBAEO,IAAP;;;;;;;;;;;;;;yCAWasB,MAAM9F,MAAM;;;iBACpBxG,MAAL,CAAYiS,KAAZ,CAAkBC,GAAlB,iCAAoD1L,IAApD;;iBAEKsjB,WAAL,GAAmBxI,WAAW,YAAM;wBAC3BqM,MAAL;wBACKvD,gBAAL,CAAsB,oBAAtB;aAFe,EAGhB9d,IAHgB,CAAnB;;;;;;;;;;yCAUa9F,MAAM;gBACf,CAAC9F,MAAMC,EAAN,CAASyB,eAAT,CAAyB,KAAK0nB,WAA9B,CAAL,EAAiD;qBACxC9pB,MAAL,CAAYiS,KAAZ,CAAkBC,GAAlB,iCAAoD1L,IAApD;;6BAEa,KAAKsjB,WAAlB;qBACKA,WAAL,GAAmB,IAAnB;;;;;4BA1hBM;mBACH,KAAK9pB,MAAL,CAAYiR,OAAZ,IAAuB,KAAKjR,MAAL,CAAYE,MAAZ,CAAmB+iB,GAAnB,CAAuBhjB,OAA9C,IAAyD,CAACS,MAAMC,EAAN,CAASC,KAAT,CAAe,KAAK8oB,WAApB,CAAjE;;;;4BA8CS;gBACH5a,SAAS;gCACK,0BADL;8BAEG,0BAFH;wBAGH2D,SAASgK,QAHN;oBAIPiS,KAAKC,GAAL,EAJO;0BAKD,GALC;2BAMA,GANA;0BAOD,KAAKjF;aAPnB;;gBAUMkF,OAAO,4CAAb;;mBAEUA,IAAV,SAAkBluB,MAAM4kB,cAAN,CAAqBxW,MAArB,CAAlB;;;;;;ACzGR;AACA;AAUA,IAAMlB,SAAS;;kBAAA,0BAEIxG,IAFJ,EAEUC,UAFV,EAEsB;;;YACzB3G,MAAMC,EAAN,CAASK,MAAT,CAAgBqG,UAAhB,CAAJ,EAAiC;kBACvBwnB,aAAN,CAAoBznB,IAApB,EAA0B,KAAK0J,KAA/B,EAAsC;qBAC7BzJ;aADT;SADJ,MAIO,IAAI3G,MAAMC,EAAN,CAASqC,KAAT,CAAeqE,UAAf,CAAJ,EAAgC;uBACxBX,OAAX,CAAmB,qBAAa;sBACtBmoB,aAAN,CAAoBznB,IAApB,EAA0B,MAAK0J,KAA/B,EAAsCge,SAAtC;aADJ;;KARG;;;;;UAAA,kBAgBJltB,KAhBI,EAgBG;;;YACN,CAAClB,MAAMC,EAAN,CAASO,MAAT,CAAgBU,KAAhB,CAAD,IAA2B,EAAE,aAAaA,KAAf,CAA3B,IAAoD,CAACA,MAAM+L,OAAN,CAAc1M,MAAvE,EAA+E;iBACtEgR,KAAL,CAAWoC,IAAX,CAAgB,uBAAhB;;;;;cAKE0a,cAAN,CAAqB7zB,IAArB,CAA0B,IAA1B;;;aAGKqzB,OAAL,CAAarzB,IAAb,CACI,IADJ,EAEI,YAAM;;mBAEGqQ,OAAL,CAAa+M,OAAb,GAAuB,EAAvB;;;kBAGM5Q,aAAN,CAAoB,OAAKoJ,KAAzB;mBACKA,KAAL,GAAa,IAAb;;;gBAGIpQ,MAAMC,EAAN,CAASgG,OAAT,CAAiB,OAAKN,QAAL,CAAcZ,SAA/B,CAAJ,EAA+C;uBACtCY,QAAL,CAAcZ,SAAd,CAAwB0D,eAAxB,CAAwC,OAAxC;;;;mBAIC/B,IAAL,GAAYxF,MAAMwF,IAAlB;mBACK6I,QAAL,GAAgB,CAACvP,MAAMC,EAAN,CAASC,KAAT,CAAegB,MAAM+L,OAAN,CAAc,CAAd,EAAiBsC,QAAhC,CAAD,GAA6CrO,MAAM+L,OAAN,CAAc,CAAd,EAAiBsC,QAA9D,GAAyEvO,UAAU6P,KAAnG;;;mBAGKlR,SAAL,GAAiBmL,QAAQwjB,KAAR,CAAc,OAAK5nB,IAAnB,EAAyB,OAAK6I,QAA9B,EAAwC,OAAK/P,MAAL,CAAYgQ,WAApD,CAAjB;;;oBAGW,OAAKD,QAAhB,SAA4B,OAAK7I,IAAjC;qBACS,aAAL;2BACS0J,KAAL,GAAapQ,MAAMgF,aAAN,CAAoB,OAApB,CAAb;;;qBAGC,aAAL;2BACSoL,KAAL,GAAapQ,MAAMgF,aAAN,CAAoB,OAApB,CAAb;;;qBAGC,eAAL;qBACK,aAAL;2BACSoL,KAAL,GAAapQ,MAAMgF,aAAN,CAAoB,KAApB,EAA2B;6BAC/B9D,MAAM+L,OAAN,CAAc,CAAd,EAAiBtJ;qBADb,CAAb;;;;;;;;mBAUHgC,QAAL,CAAcZ,SAAd,CAAwB0B,WAAxB,CAAoC,OAAK2J,KAAzC;;;gBAGIpQ,MAAMC,EAAN,CAASsI,OAAT,CAAiBrH,MAAMyjB,QAAvB,CAAJ,EAAsC;uBAC7BnlB,MAAL,CAAYmlB,QAAZ,GAAuBzjB,MAAMyjB,QAA7B;;;;gBAIA,OAAKtU,OAAT,EAAkB;oBACV,OAAK7Q,MAAL,CAAY+uB,WAAhB,EAA6B;2BACpBne,KAAL,CAAWlL,YAAX,CAAwB,aAAxB,EAAuC,EAAvC;;oBAEA,OAAK1F,MAAL,CAAYmlB,QAAhB,EAA0B;2BACjBvU,KAAL,CAAWlL,YAAX,CAAwB,UAAxB,EAAoC,EAApC;;oBAEA,CAAClF,MAAMC,EAAN,CAASC,KAAT,CAAegB,MAAM4e,MAArB,CAAL,EAAmC;2BAC1BA,MAAL,GAAc5e,MAAM4e,MAApB;;oBAEA,OAAKtgB,MAAL,CAAY+f,IAAZ,CAAiB7G,MAArB,EAA6B;2BACpBtI,KAAL,CAAWlL,YAAX,CAAwB,MAAxB,EAAgC,EAAhC;;oBAEA,OAAK1F,MAAL,CAAYqW,KAAhB,EAAuB;2BACdzF,KAAL,CAAWlL,YAAX,CAAwB,OAAxB,EAAiC,EAAjC;;oBAEA,OAAK1F,MAAL,CAAYgQ,WAAhB,EAA6B;2BACpBY,KAAL,CAAWlL,YAAX,CAAwB,aAAxB,EAAuC,EAAvC;;;;;eAKLspB,YAAH,CAAgBh0B,IAAhB,CAAqB,MAArB;;;gBAGI,OAAK6V,OAAT,EAAkB;uBACPoe,cAAP,CAAsBj0B,IAAtB,CAA2B,MAA3B,EAAiC,QAAjC,EAA2C0G,MAAM+L,OAAjD;;;;mBAICzN,MAAL,CAAYmS,KAAZ,GAAoBzQ,MAAMyQ,KAA1B;;;kBAGM2N,KAAN,CAAY9kB,IAAZ,CAAiB,MAAjB;;;gBAGI,OAAK6V,OAAT,EAAkB;;oBAEV,YAAYnP,KAAhB,EAAuB;2BACZutB,cAAP,CAAsBj0B,IAAtB,CAA2B,MAA3B,EAAiC,OAAjC,EAA0C0G,MAAM8X,MAAhD;;;;uBAIC5I,KAAL,CAAWgB,IAAX;;;;gBAIA,OAAKf,OAAL,IAAiB,OAAK4P,OAAL,IAAgB,CAAC,OAAKtgB,SAAL,CAAe+P,EAArD,EAA0D;;mBAEnDiX,KAAH,CAASnsB,IAAT,CAAc,MAAd;;;;mBAICwY,UAAL,CAAgBsI,MAAhB;SAzGR,EA2GI,IA3GJ;;CA1BR;;ACXA;AACA;;;;;;;IA0BMoT;kBACU3nB,MAAZ,EAAoB8D,OAApB,EAA6B;;;;;aACpB8V,MAAL,GAAc,EAAd;;;aAGKf,KAAL,GAAa,KAAb;aACKc,OAAL,GAAe,KAAf;aACKiO,MAAL,GAAc,KAAd;;;aAGKhY,KAAL,GAAa7L,QAAQ6L,KAArB;;;aAGKvG,KAAL,GAAarJ,MAAb;;;YAGI/G,MAAMC,EAAN,CAASK,MAAT,CAAgB,KAAK8P,KAArB,CAAJ,EAAiC;iBACxBA,KAAL,GAAa7b,SAASgQ,gBAAT,CAA0B,KAAK6L,KAA/B,CAAb;;;;YAICvQ,OAAO+uB,MAAP,IAAiB,KAAKxe,KAAL,YAAsBwe,MAAxC,IAAmD5uB,MAAMC,EAAN,CAASsC,QAAT,CAAkB,KAAK6N,KAAvB,CAAnD,IAAoFpQ,MAAMC,EAAN,CAASqC,KAAT,CAAe,KAAK8N,KAApB,CAAxF,EAAoH;;iBAE3GA,KAAL,GAAa,KAAKA,KAAL,CAAW,CAAX,CAAb;;;;aAIC5Q,MAAL,GAAcQ,MAAMU,MAAN,CACV,EADU,EAEVwc,UAFU,EAGVwR,KAAKxR,QAHK,EAIVrS,WAAW,EAJD,EAKT,YAAM;gBACC;uBACOzK,KAAKC,KAAL,CAAW,MAAK+P,KAAL,CAAW/E,YAAX,CAAwB,kBAAxB,CAAX,CAAP;aADJ,CAEE,OAAOtK,CAAP,EAAU;uBACD,EAAP;;SAJR,EALU,CAAd;;;aAeK4E,QAAL,GAAgB;uBACD,IADC;qBAEH,EAFG;qBAGH,EAHG;sBAIF,EAJE;oBAKJ,EALI;sBAMF;sBACA,IADA;uBAEC,EAFD;sBAGA;aATE;sBAWF;SAXd;;;aAeKoN,QAAL,GAAgB;oBACJ,IADI;0BAEE;SAFlB;;;aAMKC,UAAL,GAAkB;oBACN;SADZ;;;aAKKnI,OAAL,GAAe;mBACJ,EADI;qBAEF,EAFE;sBAGD;SAHd;;;;aAQK0G,KAAL,GAAa,IAAIyL,OAAJ,CAAY,KAAKxd,MAAL,CAAY+R,KAAxB,CAAb;;;aAGKA,KAAL,CAAWC,GAAX,CAAe,QAAf,EAAyB,KAAKhS,MAA9B;aACK+R,KAAL,CAAWC,GAAX,CAAe,SAAf,EAA0B1G,OAA1B;;;YAGI9K,MAAMC,EAAN,CAASyB,eAAT,CAAyB,KAAK0O,KAA9B,KAAwC,CAACpQ,MAAMC,EAAN,CAASgG,OAAT,CAAiB,KAAKmK,KAAtB,CAA7C,EAA2E;iBAClEmB,KAAL,CAAWmC,KAAX,CAAiB,0CAAjB;;;;;YAKA,KAAKtD,KAAL,CAAWye,IAAf,EAAqB;iBACZtd,KAAL,CAAWoC,IAAX,CAAgB,sBAAhB;;;;;YAKA,CAAC,KAAKnU,MAAL,CAAYD,OAAjB,EAA0B;iBACjBgS,KAAL,CAAWmC,KAAX,CAAiB,kCAAjB;;;;;;YAMA,CAAC5I,QAAQwjB,KAAR,GAAgB7e,GAArB,EAA0B;iBACjB8B,KAAL,CAAWmC,KAAX,CAAiB,0BAAjB;;;;;YAKEkG,QAAQ,KAAKxJ,KAAL,CAAWhK,SAAX,CAAqB,IAArB,CAAd;cACMue,QAAN,GAAiB,KAAjB;aACKhf,QAAL,CAAcmpB,QAAd,GAAyBlV,KAAzB;;;;YAIMlT,OAAO,KAAK0J,KAAL,CAAW2e,OAAX,CAAmBliB,WAAnB,EAAb;;;YAGIqT,SAAS,IAAb;YACIpd,MAAM,IAAV;YACIsL,SAAS,IAAb;;;gBAGQ1H,IAAR;iBACS,KAAL;;yBAEa,KAAK0J,KAAL,CAAW/G,aAAX,CAAyB,QAAzB,CAAT;;;oBAGIrJ,MAAMC,EAAN,CAASgG,OAAT,CAAiBia,MAAjB,CAAJ,EAA8B;;0BAEpBA,OAAO7U,YAAP,CAAoB,KAApB,CAAN;yBACKkE,QAAL,GAAgBvP,MAAMgvB,gBAAN,CAAuBlsB,GAAvB,CAAhB;;;yBAGK6C,QAAL,CAAcZ,SAAd,GAA0B,KAAKqL,KAA/B;yBACKA,KAAL,GAAa8P,MAAb;;;yBAGKva,QAAL,CAAcZ,SAAd,CAAwBgD,SAAxB,GAAoC,EAApC;;;6BAGS/H,MAAMivB,YAAN,CAAmBnsB,GAAnB,CAAT;wBACI,CAAC9C,MAAMC,EAAN,CAASC,KAAT,CAAekO,MAAf,CAAL,EAA6B;4BACnB8gB,SAAS,CACX,GADW,EAEX,MAFW,CAAf;;4BAKIA,OAAOlmB,QAAP,CAAgBoF,OAAOuW,QAAvB,CAAJ,EAAsC;iCAC7BnlB,MAAL,CAAYmlB,QAAZ,GAAuB,IAAvB;;4BAEAuK,OAAOlmB,QAAP,CAAgBoF,OAAOmR,IAAvB,CAAJ,EAAkC;iCACzB/f,MAAL,CAAY+f,IAAZ,CAAiB7G,MAAjB,GAA0B,IAA1B;;;;;4BAKA,KAAKiD,SAAT,EAAoB;iCACXnc,MAAL,CAAYgQ,WAAZ,GAA0B0f,OAAOlmB,QAAP,CAAgBoF,OAAOoB,WAAvB,CAA1B;yBADJ,MAEO;iCACEhQ,MAAL,CAAYgQ,WAAZ,GAA0B,IAA1B;;;iBAhCZ,MAmCO;;yBAEED,QAAL,GAAgB,KAAKa,KAAL,CAAW/E,YAAX,CAAwB,KAAK7L,MAAL,CAAYmH,UAAZ,CAAuB8V,KAAvB,CAA6BlN,QAArD,CAAhB;;;yBAGKa,KAAL,CAAW3H,eAAX,CAA2B,KAAKjJ,MAAL,CAAYmH,UAAZ,CAAuB8V,KAAvB,CAA6BlN,QAAxD;;;;oBAIAvP,MAAMC,EAAN,CAASC,KAAT,CAAe,KAAKqP,QAApB,KAAiC,CAACnO,OAAOoB,IAAP,CAAYxB,SAAZ,EAAuBgI,QAAvB,CAAgC,KAAKuG,QAArC,CAAtC,EAAsF;yBAC7EgC,KAAL,CAAWmC,KAAX,CAAiB,gCAAjB;;;;;qBAKChN,IAAL,GAAYzF,MAAM8O,KAAlB;;;;iBAIC,OAAL;iBACK,OAAL;qBACSrJ,IAAL,GAAYA,IAAZ;qBACK6I,QAAL,GAAgBvO,UAAU6P,KAA1B;;;oBAGI,KAAKT,KAAL,CAAW5H,YAAX,CAAwB,aAAxB,CAAJ,EAA4C;yBACnChJ,MAAL,CAAY+uB,WAAZ,GAA0B,IAA1B;;oBAEA,KAAKne,KAAL,CAAW5H,YAAX,CAAwB,UAAxB,CAAJ,EAAyC;yBAChChJ,MAAL,CAAYmlB,QAAZ,GAAuB,IAAvB;;oBAEA,KAAKvU,KAAL,CAAW5H,YAAX,CAAwB,aAAxB,CAAJ,EAA4C;yBACnChJ,MAAL,CAAYgQ,WAAZ,GAA0B,IAA1B;;oBAEA,KAAKY,KAAL,CAAW5H,YAAX,CAAwB,OAAxB,CAAJ,EAAsC;yBAC7BhJ,MAAL,CAAYqW,KAAZ,GAAoB,IAApB;;oBAEA,KAAKzF,KAAL,CAAW5H,YAAX,CAAwB,MAAxB,CAAJ,EAAqC;yBAC5BhJ,MAAL,CAAY+f,IAAZ,CAAiB7G,MAAjB,GAA0B,IAA1B;;;;;;qBAMCnH,KAAL,CAAWmC,KAAX,CAAiB,gCAAjB;;;;;aAKH/T,SAAL,GAAiBmL,QAAQwjB,KAAR,CAAc,KAAK5nB,IAAnB,EAAyB,KAAK6I,QAA9B,EAAwC,KAAK/P,MAAL,CAAYgQ,WAApD,CAAjB;;;YAGI,CAAC,KAAK7P,SAAL,CAAe8P,GAApB,EAAyB;iBAChB8B,KAAL,CAAWmC,KAAX,CAAiB,0BAAjB;;;;;aAKC0L,SAAL,GAAiB,IAAI2B,SAAJ,CAAc,IAAd,CAAjB;;;aAGKthB,OAAL,GAAe,IAAIJ,OAAJ,CAAY,IAAZ,CAAf;;;aAGK+Q,KAAL,CAAWye,IAAX,GAAkB,IAAlB;;;YAGI,CAAC7uB,MAAMC,EAAN,CAASgG,OAAT,CAAiB,KAAKN,QAAL,CAAcZ,SAA/B,CAAL,EAAgD;iBACvCY,QAAL,CAAcZ,SAAd,GAA0B/E,MAAMgF,aAAN,CAAoB,KAApB,CAA1B;kBACMnG,IAAN,CAAW,KAAKuR,KAAhB,EAAuB,KAAKzK,QAAL,CAAcZ,SAArC;;;;aAICY,QAAL,CAAcZ,SAAd,CAAwBG,YAAxB,CAAqC,UAArC,EAAiD,CAAjD;;;WAGGspB,YAAH,CAAgBh0B,IAAhB,CAAqB,IAArB;;;cAGM8kB,KAAN,CAAY9kB,IAAZ,CAAiB,IAAjB;;;YAGI,KAAKgF,MAAL,CAAY+R,KAAhB,EAAuB;kBACbnH,EAAN,CAAS,KAAKzE,QAAL,CAAcZ,SAAvB,EAAkC,KAAKvF,MAAL,CAAYoL,MAAZ,CAAmB8D,IAAnB,CAAwB,GAAxB,CAAlC,EAAgE,iBAAS;sBAChE6C,KAAL,CAAWC,GAAX,aAAyB1H,MAAMpD,IAA/B;aADJ;;;;;YAOA,KAAK2J,OAAL,IAAiB,KAAK4P,OAAL,IAAgB,CAAC,KAAKtgB,SAAL,CAAe+P,EAArD,EAA0D;eACnDiX,KAAH,CAASnsB,IAAT,CAAc,IAAd;;;;aAIC4kB,SAAL,CAAera,SAAf;;;aAGKqa,SAAL,CAAenqB,MAAf;;;aAGK+d,UAAL,GAAkB,IAAIgL,UAAJ,CAAe,IAAf,CAAlB;;;aAGKuE,GAAL,GAAW,IAAIwG,GAAJ,CAAQ,IAAR,CAAX;;;YAGI,KAAKvpB,MAAL,CAAYmlB,QAAhB,EAA0B;iBACjBtT,IAAL;;;;;;;;;;;;;;;;;;;;+BAiCD;gBACC,CAACrR,MAAMC,EAAN,CAASwK,QAAT,CAAkB,KAAK2F,KAAL,CAAWiB,IAA7B,CAAL,EAAyC;uBAC9B,IAAP;;;;mBAIG,KAAKjB,KAAL,CAAWiB,IAAX,EAAP;;;;;;;;;gCAMI;gBACA,CAAC,KAAKF,OAAN,IAAiB,CAACnR,MAAMC,EAAN,CAASwK,QAAT,CAAkB,KAAK2F,KAAL,CAAWmC,KAA7B,CAAtB,EAA2D;;;;iBAItDnC,KAAL,CAAWmC,KAAX;;;;;;;;;;;;;;;mCAmCOrR,OAAO;;gBAERsI,SAASxJ,MAAMC,EAAN,CAASsI,OAAT,CAAiBrH,KAAjB,IAA0BA,KAA1B,GAAkC,CAAC,KAAKiQ,OAAvD;;gBAEI3H,MAAJ,EAAY;qBACH6H,IAAL;aADJ,MAEO;qBACEkB,KAAL;;;;;;;;;;+BAOD;gBACC,KAAKlC,OAAT,EAAkB;qBACTkC,KAAL;qBACKC,OAAL;aAFJ,MAGO,IAAIxS,MAAMC,EAAN,CAASwK,QAAT,CAAkB,KAAK2F,KAAL,CAAWiV,IAA7B,CAAJ,EAAwC;qBACtCjV,KAAL,CAAWiV,IAAX;;;;;;;;;;kCAOE;iBACDnU,WAAL,GAAmB,CAAnB;;;;;;;;;;+BAOGQ,UAAU;iBACRR,WAAL,GAAmB,KAAKA,WAAL,IAAoBlR,MAAMC,EAAN,CAAS8L,MAAT,CAAgB2F,QAAhB,IAA4BA,QAA5B,GAAuC,KAAKlS,MAAL,CAAYkS,QAAvE,CAAnB;;;;;;;;;;gCAOIA,UAAU;iBACTR,WAAL,GAAmB,KAAKA,WAAL,IAAoBlR,MAAMC,EAAN,CAAS8L,MAAT,CAAgB2F,QAAhB,IAA4BA,QAA5B,GAAuC,KAAKlS,MAAL,CAAYkS,QAAvE,CAAnB;;;;;;;;;;;;;;;;uCAoIW3Z,MAAM;gBACXqb,SAAS,KAAKhD,KAAL,CAAWyF,KAAX,GAAmB,CAAnB,GAAuB,KAAKzC,MAA3C;iBACKA,MAAL,GAAcA,UAAUpT,MAAMC,EAAN,CAAS8L,MAAT,CAAgBhU,IAAhB,IAAwBA,IAAxB,GAA+B,CAAzC,CAAd;;;;;;;;;;uCAOWA,MAAM;gBACXqb,SAAS,KAAKhD,KAAL,CAAWyF,KAAX,GAAmB,CAAnB,GAAuB,KAAKzC,MAA3C;iBACKA,MAAL,GAAcA,UAAUpT,MAAMC,EAAN,CAAS8L,MAAT,CAAgBhU,IAAhB,IAAwBA,IAAxB,GAA+B,CAAzC,CAAd;;;;;;;;;;;;;;;;uCA6QWmJ,OAAO;;gBAEd,CAAC,KAAKvB,SAAL,CAAe+P,EAApB,EAAwB;;;;;gBAKlB8J,OAAOxZ,MAAMC,EAAN,CAASsI,OAAT,CAAiBrH,KAAjB,IAA0BA,KAA1B,GAAkC,CAAC,KAAKyE,QAAL,CAAcZ,SAAd,CAAwB6D,SAAxB,CAAkCC,QAAlC,CAA2C,KAAKrJ,MAAL,CAAYgU,UAAZ,CAAuBT,QAAvB,CAAgC2F,MAA3E,CAAhD;;;gBAGI,KAAK3F,QAAL,CAAc2F,MAAd,KAAyBc,IAA7B,EAAmC;;;;;iBAK9BzG,QAAL,CAAc2F,MAAd,GAAuBc,IAAvB;;;kBAGMrO,WAAN,CAAkB,KAAKxF,QAAL,CAAc2M,OAAd,CAAsBS,QAAxC,EAAkD,KAAKA,QAAL,CAAc2F,MAAhE;;;kBAGMhC,WAAN,CAAkB,KAAK/Q,QAAL,CAAcZ,SAAhC,EAA2C,KAAKvF,MAAL,CAAYgU,UAAZ,CAAuBT,QAAvB,CAAgC2F,MAA3E,EAAmF,KAAK3F,QAAL,CAAc2F,MAAjG;;;kBAGMxN,aAAN,CAAoB1Q,IAApB,CAAyB,IAAzB,EAA+B,KAAK4V,KAApC,EAA2C,KAAK2C,QAAL,CAAc2F,MAAd,GAAuB,iBAAvB,GAA2C,kBAAtF;;;;;;;;;;;;;;;;kCAmGM;;gBAEF5N,QAAQ+H,OAAZ,EAAqB;qBACZzC,KAAL,CAAW+e,8BAAX;;;;;;;;;;;uCAQO3lB,QAAQ;;gBAEf,KAAK7J,SAAL,CAAe+P,EAAf,IAAqB,CAAC,KAAKc,OAA/B,EAAwC;;oBAE9B4e,WAAWpvB,MAAM8W,QAAN,CAAe,KAAKnR,QAAL,CAAcZ,SAA7B,EAAwC,KAAKvF,MAAL,CAAYgU,UAAZ,CAAuBqN,YAA/D,CAAjB;;;oBAGMnY,QAAQ,OAAOc,MAAP,KAAkB,WAAlB,GAAgC6F,SAAhC,GAA4C,CAAC7F,MAA3D;;;oBAGM6lB,SAASrvB,MAAM0W,WAAN,CAAkB,KAAK/Q,QAAL,CAAcZ,SAAhC,EAA2C,KAAKvF,MAAL,CAAYgU,UAAZ,CAAuBqN,YAAlE,EAAgFnY,KAAhF,CAAf;;;oBAGI2mB,UAAU,KAAK7vB,MAAL,CAAYoS,QAAZ,CAAqB5I,QAArB,CAA8B,UAA9B,CAAV,IAAuD,CAAChJ,MAAMC,EAAN,CAASC,KAAT,CAAe,KAAKV,MAAL,CAAYsT,QAA3B,CAA5D,EAAkG;6BACrFoO,UAAT,CAAoB1mB,IAApB,CAAyB,IAAzB,EAA+B,KAA/B;;;oBAGA60B,WAAWD,QAAf,EAAyB;wBACfE,YAAYD,SAAS,gBAAT,GAA4B,eAA9C;0BACMnkB,aAAN,CAAoB1Q,IAApB,CAAyB,IAAzB,EAA+B,KAAK4V,KAApC,EAA2Ckf,SAA3C;;uBAEG,CAACD,MAAR;;mBAEG,KAAP;;;;;;;;;;;2BAQDvlB,OAAOQ,UAAU;kBACVF,EAAN,CAAS,KAAKzE,QAAL,CAAcZ,SAAvB,EAAkC+E,KAAlC,EAAyCQ,QAAzC;;;;;;;;;;;4BAQAR,OAAOQ,UAAU;kBACXD,GAAN,CAAU,KAAK1E,QAAL,CAAcZ,SAAxB,EAAmC+E,KAAnC,EAA0CQ,QAA1C;;;;;;;;;;;;;gCAUIA,UAAwB;;;gBAAdilB,IAAc,uEAAP,KAAO;;gBACxB,CAAC,KAAK3P,KAAV,EAAiB;;;;gBAIX6D,OAAO,SAAPA,IAAO,GAAM;;yBAEN9e,IAAT,CAAc/B,KAAd,CAAoBkb,QAApB,GAA+B,EAA/B;;;uBAGKrB,KAAL,GAAa,IAAb;;;oBAGI8S,IAAJ,EAAU;wBACFnuB,OAAOoB,IAAP,CAAY,OAAKmD,QAAjB,EAA2BpF,MAA/B,EAAuC;;8BAE7ByG,aAAN,CAAoB,OAAKrB,QAAL,CAAc2M,OAAd,CAAsBjB,IAA1C;8BACMrK,aAAN,CAAoB,OAAKrB,QAAL,CAAcoN,QAAlC;8BACM/L,aAAN,CAAoB,OAAKrB,QAAL,CAAciM,QAAlC;8BACM5K,aAAN,CAAoB,OAAKrB,QAAL,CAAcC,OAAlC;;;+BAGKD,QAAL,CAAc2M,OAAd,CAAsBjB,IAAtB,GAA6B,IAA7B;+BACK1L,QAAL,CAAcoN,QAAd,GAAyB,IAAzB;+BACKpN,QAAL,CAAciM,QAAd,GAAyB,IAAzB;+BACKjM,QAAL,CAAcC,OAAd,GAAwB,IAAxB;;;;wBAIA5F,MAAMC,EAAN,CAASwK,QAAT,CAAkBH,QAAlB,CAAJ,EAAiC;;;iBAhBrC,MAmBO;;2BAEE8U,SAAL,CAAeoQ,KAAf;;;0BAGMzK,cAAN,CAAqB,OAAKpf,QAAL,CAAcmpB,QAAnC,EAA6C,OAAKnpB,QAAL,CAAcZ,SAA3D;;;0BAGMmG,aAAN,CAAoB1Q,IAApB,CAAyB,MAAzB,EAA+B,OAAKmL,QAAL,CAAcmpB,QAA7C,EAAuD,WAAvD,EAAoE,IAApE;;;wBAGI9uB,MAAMC,EAAN,CAASwK,QAAT,CAAkBH,QAAlB,CAAJ,EAAiC;iCACpB9P,IAAT,CAAc,OAAKmL,QAAL,CAAcmpB,QAA5B;;;;2BAIClP,KAAL,GAAa,KAAb;;;+BAGW,YAAM;+BACRja,QAAL,GAAgB,IAAhB;+BACKyK,KAAL,GAAa,IAAb;qBAFJ,EAGG,GAHH;;aA9CR;;;iBAsDKiV,IAAL;;;oBAGW,KAAK9V,QAAhB,SAA4B,KAAK7I,IAAjC;qBACS,aAAL;qBACK,aAAL;;iCAEiB,KAAKia,MAAL,CAAYD,OAAzB;;;uBAGG9M,oBAAH,CAAwBpZ,IAAxB,CAA6B,IAA7B,EAAmC,IAAnC;;;;;;;qBAOC,eAAL;;kCAEkB,KAAKmmB,MAAL,CAAY6H,SAA1B;kCACc,KAAK7H,MAAL,CAAYxP,OAA1B;;;wBAGI,KAAKsL,KAAL,KAAe,IAAf,IAAuBzc,MAAMC,EAAN,CAASwK,QAAT,CAAkB,KAAKgS,KAAL,CAAWoR,OAA7B,CAA3B,EAAkE;6BACzDpR,KAAL,CAAWoR,OAAX;;;;;;;;qBAQH,aAAL;;;wBAGQ,KAAKpR,KAAL,KAAe,IAAnB,EAAyB;6BAChBA,KAAL,CAAWgT,MAAX,GAAoBnqB,IAApB,CAAyBme,IAAzB;;;;+BAIOA,IAAX,EAAiB,GAAjB;;;;;;;;;;;;;;;;iCAaH/c,MAAM;mBACJoE,QAAQmG,IAAR,CAAazW,IAAb,CAAkB,IAAlB,EAAwBkM,IAAxB,CAAP;;;;;;;;;;;;4BA3zBU;mBACHlF,QAAQ,KAAK+N,QAAL,KAAkBvO,UAAU6P,KAApC,CAAP;;;;4BAEU;mBACHrP,QAAQ,KAAKma,SAAL,IAAkB,KAAKvC,OAA/B,CAAP;;;;4BAEY;mBACL5X,QAAQ,KAAK+N,QAAL,KAAkBvO,UAAU0M,OAApC,CAAP;;;;4BAEU;mBACHlM,QAAQ,KAAK+N,QAAL,KAAkBvO,UAAU2M,KAApC,CAAP;;;;4BAEU;mBACHnM,QAAQ,KAAKkF,IAAL,KAAczF,MAAM8O,KAA5B,CAAP;;;;4BAEU;mBACHvO,QAAQ,KAAKkF,IAAL,KAAczF,MAAMgP,KAA5B,CAAP;;;;4BA6BU;mBACHzO,QAAQ,KAAKoe,KAAL,IAAc,CAAC,KAAKrI,MAApB,IAA8B,CAAC,KAAKoL,KAA5C,CAAP;;;;;;;;;4BAMS;mBACFnhB,QAAQ,KAAK4O,KAAL,CAAWmH,MAAnB,CAAP;;;;;;;;;4BAMU;mBACH/V,QAAQ,KAAK+V,MAAL,IAAe,KAAKrG,WAAL,KAAqB,CAA5C,CAAP;;;;;;;;;4BAMQ;mBACD1P,QAAQ,KAAK4O,KAAL,CAAWuS,KAAnB,CAAP;;;;0BAyDYzhB,OAAO;gBACfwuB,aAAa,CAAjB;;gBAEI1vB,MAAMC,EAAN,CAAS8L,MAAT,CAAgB7K,KAAhB,CAAJ,EAA4B;6BACXA,KAAb;;;;gBAIAwuB,aAAa,CAAjB,EAAoB;6BACH,CAAb;aADJ,MAEO,IAAIA,aAAa,KAAKpc,QAAtB,EAAgC;6BACtB,KAAKA,QAAlB;;;;iBAIClD,KAAL,CAAWc,WAAX,GAAyBwe,UAAzB;;;iBAGKne,KAAL,CAAWC,GAAX,iBAA6B,KAAKN,WAAlC;;;;;;;4BAMc;mBACP7P,OAAO,KAAK+O,KAAL,CAAWc,WAAlB,CAAP;;;;;;;;;4BAMW;gBACHgF,QADG,GACU,KAAK9F,KADf,CACH8F,QADG;;;;gBAIPlW,MAAMC,EAAN,CAAS8L,MAAT,CAAgBmK,QAAhB,CAAJ,EAA+B;uBACpBA,QAAP;;;;;;gBAMAA,YAAYA,SAAS3V,MAArB,IAA+B,KAAK+S,QAAL,GAAgB,CAAnD,EAAsD;uBAC3C4C,SAASyZ,GAAT,CAAa,CAAb,IAAkB,KAAKrc,QAA9B;;;mBAGG,CAAP;;;;;;;;;4BAMU;mBACH9R,QAAQ,KAAK4O,KAAL,CAAW+G,OAAnB,CAAP;;;;;;;;;4BAMW;;gBAELyY,eAAe7Y,WAAW,KAAKvX,MAAL,CAAY8T,QAAvB,CAArB;;;gBAGMuc,eAAe,KAAKzf,KAAL,GAAa/O,OAAO,KAAK+O,KAAL,CAAWkD,QAAlB,CAAb,GAA2C,CAAhE;;;mBAGO,CAACjS,OAAOC,KAAP,CAAasuB,YAAb,CAAD,GAA8BA,YAA9B,GAA6CC,YAApD;;;;;;;;;;0BAOOtoB,OAAO;gBACV6L,SAAS7L,KAAb;gBACMkE,MAAM,CAAZ;gBACM7V,MAAM,CAAZ;;gBAEIoK,MAAMC,EAAN,CAASK,MAAT,CAAgB8S,MAAhB,CAAJ,EAA6B;yBAChB/R,OAAO+R,MAAP,CAAT;;;;gBAIA,CAACpT,MAAMC,EAAN,CAAS8L,MAAT,CAAgBqH,MAAhB,CAAL,EAA8B;yBACjB,KAAK3T,OAAL,CAAagB,GAAb,CAAiB,QAAjB,CAAT;;;;gBAIA,CAACT,MAAMC,EAAN,CAAS8L,MAAT,CAAgBqH,MAAhB,CAAL,EAA8B;sBAAA,GACZ,KAAK5T,MADO,CACvB4T,MADuB;;;;gBAK1BA,SAAS3H,GAAb,EAAkB;yBACLA,GAAT;;;gBAGA2H,SAASxd,GAAb,EAAkB;yBACLA,GAAT;;;;iBAIC4J,MAAL,CAAY4T,MAAZ,GAAqBA,MAArB;;;iBAGKhD,KAAL,CAAWgD,MAAX,GAAoBA,MAApB;;;gBAGI,CAACpT,MAAMC,EAAN,CAASC,KAAT,CAAeqH,KAAf,CAAD,IAA0B,KAAKsO,KAA/B,IAAwCzC,SAAS,CAArD,EAAwD;qBAC/CyC,KAAL,GAAa,KAAb;;;;;;;;4BAOK;mBACFxU,OAAO,KAAK+O,KAAL,CAAWgD,MAAlB,CAAP;;;;0BAyBMT,MAAM;gBACRnJ,SAASmJ,IAAb;;;gBAGI,CAAC3S,MAAMC,EAAN,CAASsI,OAAT,CAAiBiB,MAAjB,CAAL,EAA+B;yBAClB,KAAK/J,OAAL,CAAagB,GAAb,CAAiB,OAAjB,CAAT;;;;gBAIA,CAACT,MAAMC,EAAN,CAASsI,OAAT,CAAiBiB,MAAjB,CAAL,EAA+B;yBAClB,KAAKhK,MAAL,CAAYqW,KAArB;;;;iBAICrW,MAAL,CAAYqW,KAAZ,GAAoBrM,MAApB;;;iBAGK4G,KAAL,CAAWyF,KAAX,GAAmBrM,MAAnB;;;;;;;4BAMQ;mBACDhI,QAAQ,KAAK4O,KAAL,CAAWyF,KAAnB,CAAP;;;;;;;;;4BAMW;;gBAEP,CAAC,KAAKxF,OAAV,EAAmB;uBACR,IAAP;;;gBAGA,KAAKG,OAAT,EAAkB;uBACP,IAAP;;;;mBAKAhP,QAAQ,KAAK4O,KAAL,CAAW0f,WAAnB,KACAtuB,QAAQ,KAAK4O,KAAL,CAAW2f,2BAAnB,CADA,IAEAvuB,QAAQ,KAAK4O,KAAL,CAAW4f,WAAX,IAA0B,KAAK5f,KAAL,CAAW4f,WAAX,CAAuBzvB,MAAzD,CAHJ;;;;;;;;;;0BAWMW,OAAO;gBACTiY,QAAQ,IAAZ;;gBAEInZ,MAAMC,EAAN,CAAS8L,MAAT,CAAgB7K,KAAhB,CAAJ,EAA4B;wBAChBA,KAAR;;;gBAGA,CAAClB,MAAMC,EAAN,CAAS8L,MAAT,CAAgBoN,KAAhB,CAAL,EAA6B;wBACjB,KAAK1Z,OAAL,CAAagB,GAAb,CAAiB,OAAjB,CAAR;;;gBAGA,CAACT,MAAMC,EAAN,CAAS8L,MAAT,CAAgBoN,KAAhB,CAAL,EAA6B;wBACjB,KAAK3Z,MAAL,CAAY2Z,KAAZ,CAAkBqM,QAA1B;;;;gBAIArM,QAAQ,GAAZ,EAAiB;wBACL,GAAR;;gBAEAA,QAAQ,GAAZ,EAAiB;wBACL,GAAR;;;gBAGA,CAAC,KAAK3Z,MAAL,CAAY2Z,KAAZ,CAAkBtO,OAAlB,CAA0B7B,QAA1B,CAAmCmQ,KAAnC,CAAL,EAAgD;qBACvC5H,KAAL,CAAWoC,IAAX,yBAAsCwF,KAAtC;;;;;iBAKC3Z,MAAL,CAAY2Z,KAAZ,CAAkBqM,QAAlB,GAA6BrM,KAA7B;;;iBAGK/I,KAAL,CAAW2X,YAAX,GAA0B5O,KAA1B;;;;;;;4BAMQ;mBACD9X,OAAO,KAAK+O,KAAL,CAAW2X,YAAlB,CAAP;;;;;;;;;;;0BAQQ7mB,OAAO;gBACX0W,UAAU,IAAd;;gBAEI,CAAC5X,MAAMC,EAAN,CAASC,KAAT,CAAegB,KAAf,CAAL,EAA4B;0BACdG,OAAOH,KAAP,CAAV;;;gBAGA,CAAClB,MAAMC,EAAN,CAAS8L,MAAT,CAAgB6L,OAAhB,CAAD,IAA6BA,YAAY,CAA7C,EAAgD;0BAClC,KAAKnY,OAAL,CAAagB,GAAb,CAAiB,SAAjB,CAAV;;;gBAGA,CAACT,MAAMC,EAAN,CAAS8L,MAAT,CAAgB6L,OAAhB,CAAL,EAA+B;0BACjB,KAAKpY,MAAL,CAAYoY,OAAZ,CAAoB4N,QAA9B;;;gBAGA,CAACxlB,MAAMC,EAAN,CAAS8L,MAAT,CAAgB6L,OAAhB,CAAL,EAA+B;0BACjB,KAAKpY,MAAL,CAAYoY,OAAZ,CAAoBkB,OAA9B;;;gBAGA,CAAC,KAAKjO,OAAL,CAAa+M,OAAb,CAAqBrX,MAA1B,EAAkC;;;;gBAI9B,CAAC,KAAKsK,OAAL,CAAa+M,OAAb,CAAqB5O,QAArB,CAA8B4O,OAA9B,CAAL,EAA6C;oBACnCqY,UAAUjwB,MAAMiwB,OAAN,CAAc,KAAKplB,OAAL,CAAa+M,OAA3B,EAAoCA,OAApC,CAAhB;qBACKrG,KAAL,CAAWoC,IAAX,kCAA+CiE,OAA/C,gBAAiEqY,OAAjE;0BACUA,OAAV;;;;iBAICzwB,MAAL,CAAYoY,OAAZ,CAAoB4N,QAApB,GAA+B5N,OAA/B;;;iBAGKxH,KAAL,CAAWwH,OAAX,GAAqBA,OAArB;;;;;;;4BAMU;mBACH,KAAKxH,KAAL,CAAWwH,OAAlB;;;;;;;;;;;0BAQK1W,OAAO;gBACNsI,SAASxJ,MAAMC,EAAN,CAASsI,OAAT,CAAiBrH,KAAjB,IAA0BA,KAA1B,GAAkC,KAAK1B,MAAL,CAAY+f,IAAZ,CAAiB7G,MAAlE;iBACKlZ,MAAL,CAAY+f,IAAZ,CAAiB7G,MAAjB,GAA0BlP,MAA1B;iBACK4G,KAAL,CAAWmP,IAAX,GAAkB/V,MAAlB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAiDO;mBACAhI,QAAQ,KAAK4O,KAAL,CAAWmP,IAAnB,CAAP;;;;;;;;;;0BAOOre,OAAO;mBACPgvB,MAAP,CAAc11B,IAAd,CAAmB,IAAnB,EAAyB0G,KAAzB;;;;;;;4BAMS;mBACF,KAAKkP,KAAL,CAAWuV,UAAlB;;;;;;;;;;0BAOOzkB,OAAO;gBACV,CAAC,KAAKqP,OAAV,EAAmB;qBACVgB,KAAL,CAAWoC,IAAX,CAAgB,kCAAhB;;;;eAIDqM,SAAH,CAAaxlB,IAAb,CAAkB,IAAlB,EAAwB0G,KAAxB;;;;;;;4BAMS;gBACL,CAAC,KAAKqP,OAAV,EAAmB;uBACR,IAAP;;;mBAGG,KAAKH,KAAL,CAAW/E,YAAX,CAAwB,QAAxB,CAAP;;;;;;;;;;0BAOSnK,OAAO;gBACVsI,SAASxJ,MAAMC,EAAN,CAASsI,OAAT,CAAiBrH,KAAjB,IAA0BA,KAA1B,GAAkC,KAAK1B,MAAL,CAAYmlB,QAA7D;iBACKnlB,MAAL,CAAYmlB,QAAZ,GAAuBnb,MAAvB;;;;;;;4BAMW;mBACJhI,QAAQ,KAAKhC,MAAL,CAAYmlB,QAApB,CAAP;;;;0BAsCSzjB,OAAO;;gBAEZ,CAAClB,MAAMC,EAAN,CAASK,MAAT,CAAgBY,KAAhB,CAAL,EAA6B;;;;;gBAKzBlB,MAAMC,EAAN,CAASC,KAAT,CAAegB,KAAf,CAAJ,EAA2B;qBAClB6gB,cAAL,CAAoB,KAApB;;;;;gBAKElJ,WAAW3X,MAAM2L,WAAN,EAAjB;;;gBAGI,CAAC,KAAKhC,OAAL,CAAakI,QAAb,CAAsB/J,QAAtB,CAA+B6P,QAA/B,CAAL,EAA+C;qBACtCtH,KAAL,CAAWoC,IAAX,mCAAgDkF,QAAhD;;;;;iBAKCkJ,cAAL,CAAoB,IAApB;;;gBAGIlJ,aAAa,SAAjB,EAA4B;;;;;gBAKxB,KAAKA,QAAL,KAAkBA,QAAtB,EAAgC;;;;;iBAK3B9F,QAAL,CAAc8F,QAAd,GAAyBA,QAAzB;;;qBAGS+D,OAAT,CAAiBpiB,IAAjB,CAAsB,IAAtB,EAA4B,IAA5B;;;qBAGS2hB,WAAT,CAAqB3hB,IAArB,CAA0B,IAA1B;;;kBAGM0Q,aAAN,CAAoB1Q,IAApB,CAAyB,IAAzB,EAA+B,KAAK4V,KAApC,EAA2C,gBAA3C;;;;;;;4BAMW;mBACJ,KAAK2C,QAAL,CAAc8F,QAArB;;;;;;;;;;;0BAQI3X,OAAO;gBACLivB,SAAS;qBACN,oBADM;wBAEH;aAFZ;;;gBAMI,CAACrlB,QAAQ8H,GAAb,EAAkB;;;;;gBAKZpJ,SAASxJ,MAAMC,EAAN,CAASsI,OAAT,CAAiBrH,KAAjB,IAA0BA,KAA1B,GAAkC,KAAK0R,GAAL,KAAaud,OAAOC,MAArE;;;iBAGKhgB,KAAL,CAAWF,yBAAX,CAAqC1G,SAAS2mB,OAAOvd,GAAhB,GAAsBud,OAAOC,MAAlE;;;;;;;4BAMM;gBACF,CAACtlB,QAAQ8H,GAAb,EAAkB;uBACP,IAAP;;;mBAGG,KAAKxC,KAAL,CAAWigB,sBAAlB;;;;kCA+La3pB,MAAM6I,UAAU6gB,QAAQ;mBAC9BtlB,QAAQwjB,KAAR,CAAc5nB,IAAd,EAAoB6I,QAApB,EAA8B6gB,MAA9B,CAAP;;;;;;;;;;;mCAQcttB,KAAK3H,IAAI;mBAChB6E,MAAMob,UAAN,CAAiBtY,GAAjB,EAAsB3H,EAAtB,CAAP;;;;;;;;;;;8BAQSyM,UAAwB;gBAAdiD,OAAc,uEAAJ,EAAI;;gBAC7BhF,UAAU,IAAd;;gBAEI7F,MAAMC,EAAN,CAASK,MAAT,CAAgBsH,QAAhB,CAAJ,EAA+B;0BACjBjG,MAAMmE,IAAN,CAAWvR,SAASgQ,gBAAT,CAA0BqD,QAA1B,CAAX,CAAV;aADJ,MAEO,IAAI5H,MAAMC,EAAN,CAASsC,QAAT,CAAkBqF,QAAlB,CAAJ,EAAiC;0BAC1BjG,MAAMmE,IAAN,CAAW8B,QAAX,CAAV;aADG,MAEA,IAAI5H,MAAMC,EAAN,CAASqC,KAAT,CAAesF,QAAf,CAAJ,EAA8B;0BACvBA,SAASwF,MAAT,CAAgB;2BAAKpN,MAAMC,EAAN,CAASgG,OAAT,CAAiBlH,CAAjB,CAAL;iBAAhB,CAAV;;;gBAGAiB,MAAMC,EAAN,CAASC,KAAT,CAAe2F,OAAf,CAAJ,EAA6B;uBAClB,IAAP;;;mBAGGA,QAAQ2I,GAAR,CAAY;uBAAK,IAAIkgB,IAAJ,CAAS4B,CAAT,EAAYzlB,OAAZ,CAAL;aAAZ,CAAP;;;;;;AAIR6jB,KAAKxR,QAAL,GAAgBld,MAAMuwB,SAAN,CAAgBrT,UAAhB,CAAhB;;AC9pCA","file":"plyr.polyfilled.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.6' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","module.exports = false;\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2018 Denis Pushkarev (zloirock.ru)'\n});\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","(function(global) {\r\n /**\r\n * Polyfill URLSearchParams\r\n *\r\n * Inspired from : https://github.com/WebReflection/url-search-params/blob/master/src/url-search-params.js\r\n */\r\n\r\n var checkIfIteratorIsSupported = function() {\r\n try {\r\n return !!Symbol.iterator;\r\n } catch(error) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var iteratorSupported = checkIfIteratorIsSupported();\r\n\r\n var createIterator = function(items) {\r\n var iterator = {\r\n next: function() {\r\n var value = items.shift();\r\n return { done: value === void 0, value: value };\r\n }\r\n };\r\n\r\n if(iteratorSupported) {\r\n iterator[Symbol.iterator] = function() {\r\n return iterator;\r\n };\r\n }\r\n\r\n return iterator;\r\n };\r\n\r\n /**\r\n * Search param name and values should be encoded according to https://url.spec.whatwg.org/#urlencoded-serializing\r\n * encodeURIComponent() produces the same result except encoding spaces as `%20` instead of `+`.\r\n */\r\n var serializeParam = function(value) {\r\n return encodeURIComponent(value).replace(/%20/g, '+');\r\n };\r\n\r\n var deserializeParam = function(value) {\r\n return decodeURIComponent(value).replace(/\\+/g, ' ');\r\n };\r\n\r\n var polyfillURLSearchParams= function() {\r\n\r\n var URLSearchParams = function(searchString) {\r\n Object.defineProperty(this, '_entries', { value: {} });\r\n\r\n if(typeof searchString === 'string') {\r\n if(searchString !== '') {\r\n searchString = searchString.replace(/^\\?/, '');\r\n var attributes = searchString.split('&');\r\n var attribute;\r\n for(var i = 0; i < attributes.length; i++) {\r\n attribute = attributes[i].split('=');\r\n this.append(\r\n deserializeParam(attribute[0]),\r\n (attribute.length > 1) ? deserializeParam(attribute[1]) : ''\r\n );\r\n }\r\n }\r\n } else if(searchString instanceof URLSearchParams) {\r\n var _this = this;\r\n searchString.forEach(function(value, name) {\r\n _this.append(value, name);\r\n });\r\n }\r\n };\r\n\r\n var proto = URLSearchParams.prototype;\r\n\r\n proto.append = function(name, value) {\r\n if(name in this._entries) {\r\n this._entries[name].push(value.toString());\r\n } else {\r\n this._entries[name] = [value.toString()];\r\n }\r\n };\r\n\r\n proto.delete = function(name) {\r\n delete this._entries[name];\r\n };\r\n\r\n proto.get = function(name) {\r\n return (name in this._entries) ? this._entries[name][0] : null;\r\n };\r\n\r\n proto.getAll = function(name) {\r\n return (name in this._entries) ? this._entries[name].slice(0) : [];\r\n };\r\n\r\n proto.has = function(name) {\r\n return (name in this._entries);\r\n };\r\n\r\n proto.set = function(name, value) {\r\n this._entries[name] = [value.toString()];\r\n };\r\n\r\n proto.forEach = function(callback, thisArg) {\r\n var entries;\r\n for(var name in this._entries) {\r\n if(this._entries.hasOwnProperty(name)) {\r\n entries = this._entries[name];\r\n for(var i = 0; i < entries.length; i++) {\r\n callback.call(thisArg, entries[i], name, this);\r\n }\r\n }\r\n }\r\n };\r\n\r\n proto.keys = function() {\r\n var items = [];\r\n this.forEach(function(value, name) { items.push(name); });\r\n return createIterator(items);\r\n };\r\n\r\n proto.values = function() {\r\n var items = [];\r\n this.forEach(function(value) { items.push(value); });\r\n return createIterator(items);\r\n };\r\n\r\n proto.entries = function() {\r\n var items = [];\r\n this.forEach(function(value, name) { items.push([name, value]); });\r\n return createIterator(items);\r\n };\r\n\r\n if(iteratorSupported) {\r\n proto[Symbol.iterator] = proto.entries;\r\n }\r\n\r\n proto.toString = function() {\r\n var searchString = '';\r\n this.forEach(function(value, name) {\r\n if(searchString.length > 0) searchString+= '&';\r\n searchString += serializeParam(name) + '=' + serializeParam(value);\r\n });\r\n return searchString;\r\n };\r\n\r\n global.URLSearchParams = URLSearchParams;\r\n };\r\n\r\n if(!('URLSearchParams' in global) || (new URLSearchParams('?a=1').toString() !== 'a=1')) {\r\n polyfillURLSearchParams();\r\n }\r\n\r\n // HTMLAnchorElement\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n\r\n(function(global) {\r\n /**\r\n * Polyfill URL\r\n *\r\n * Inspired from : https://github.com/arv/DOM-URL-Polyfill/blob/master/src/url.js\r\n */\r\n\r\n var checkIfURLIsSupported = function() {\r\n try {\r\n var u = new URL('b', 'http://a');\r\n u.pathname = 'c%20d';\r\n return (u.href === 'http://a/c%20d') && u.searchParams;\r\n } catch(e) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var polyfillURL = function() {\r\n var _URL = global.URL;\r\n\r\n var URL = function(url, base) {\r\n if(typeof url !== 'string') url = String(url);\r\n\r\n var doc = document.implementation.createHTMLDocument('');\r\n window.doc = doc;\r\n if(base) {\r\n var baseElement = doc.createElement('base');\r\n baseElement.href = base;\r\n doc.head.appendChild(baseElement);\r\n }\r\n\r\n var anchorElement = doc.createElement('a');\r\n anchorElement.href = url;\r\n doc.body.appendChild(anchorElement);\r\n anchorElement.href = anchorElement.href; // force href to refresh\r\n\r\n if(anchorElement.protocol === ':' || !/:/.test(anchorElement.href)) {\r\n throw new TypeError('Invalid URL');\r\n }\r\n\r\n Object.defineProperty(this, '_anchorElement', {\r\n value: anchorElement\r\n });\r\n };\r\n\r\n var proto = URL.prototype;\r\n\r\n var linkURLWithAnchorAttribute = function(attributeName) {\r\n Object.defineProperty(proto, attributeName, {\r\n get: function() {\r\n return this._anchorElement[attributeName];\r\n },\r\n set: function(value) {\r\n this._anchorElement[attributeName] = value;\r\n },\r\n enumerable: true\r\n });\r\n };\r\n\r\n ['hash', 'host', 'hostname', 'port', 'protocol', 'search']\r\n .forEach(function(attributeName) {\r\n linkURLWithAnchorAttribute(attributeName);\r\n });\r\n\r\n Object.defineProperties(proto, {\r\n\r\n 'toString': {\r\n get: function() {\r\n var _this = this;\r\n return function() {\r\n return _this.href;\r\n };\r\n }\r\n },\r\n\r\n 'href' : {\r\n get: function() {\r\n return this._anchorElement.href.replace(/\\?$/,'');\r\n },\r\n set: function(value) {\r\n this._anchorElement.href = value;\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'pathname' : {\r\n get: function() {\r\n return this._anchorElement.pathname.replace(/(^\\/?)/,'/');\r\n },\r\n set: function(value) {\r\n this._anchorElement.pathname = value;\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'origin': {\r\n get: function() {\r\n // get expected port from protocol\r\n var expectedPort = {'http:': 80, 'https:': 443, 'ftp:': 21}[this._anchorElement.protocol];\r\n // add port to origin if, expected port is different than actual port\r\n // and it is not empty f.e http://foo:8080\r\n // 8080 != 80 && 8080 != ''\r\n var addPortToOrigin = this._anchorElement.port != expectedPort &&\r\n this._anchorElement.port !== ''\r\n\r\n return this._anchorElement.protocol +\r\n '//' +\r\n this._anchorElement.hostname +\r\n (addPortToOrigin ? (':' + this._anchorElement.port) : '');\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'password': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'username': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'searchParams': {\r\n get: function() {\r\n var searchParams = new URLSearchParams(this.search);\r\n var _this = this;\r\n ['append', 'delete', 'set'].forEach(function(methodName) {\r\n var method = searchParams[methodName];\r\n searchParams[methodName] = function() {\r\n method.apply(searchParams, arguments);\r\n _this.search = searchParams.toString();\r\n };\r\n });\r\n return searchParams;\r\n },\r\n enumerable: true\r\n }\r\n });\r\n\r\n URL.createObjectURL = function(blob) {\r\n return _URL.createObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n URL.revokeObjectURL = function(url) {\r\n return _URL.revokeObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n global.URL = URL;\r\n\r\n };\r\n\r\n if(!checkIfURLIsSupported()) {\r\n polyfillURL();\r\n }\r\n\r\n if((global.location !== void 0) && !('origin' in global.location)) {\r\n var getOrigin = function() {\r\n return global.location.protocol + '//' + global.location.hostname + (global.location.port ? (':' + global.location.port) : '');\r\n };\r\n\r\n try {\r\n Object.defineProperty(global.location, 'origin', {\r\n get: getOrigin,\r\n enumerable: true\r\n });\r\n } catch(e) {\r\n setInterval(function() {\r\n global.location.origin = getOrigin();\r\n }, 100);\r\n }\r\n }\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\nimport Storage from './storage';\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, NodeList);\n },\n element(input) {\n return this.instanceof(input, Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, Event);\n },\n cue(input) {\n return this.instanceof(input, TextTrackCue) || this.instanceof(input, VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load image avoiding xhr/fetch CORS issues\n // Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded.\n // By default it checks if it is at least 1px, but you can add a second argument to change this.\n loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n Object.assign(image, {onload: handler, onerror: handler, src});\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n const useStorage = Storage.supported;\n\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (useStorage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (useStorage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove element(s)\n removeElement(element) {\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\n toggleClass(element, className, force) {\n if (utils.is.element(element)) {\n let method = 'toggle';\n if (typeof force !== 'undefined') {\n method = force ? 'add' : 'remove';\n }\n\n element.classList[method](className);\n return element.classList.contains(className);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: this,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Format string\n format(input, ...args) {\n if (utils.is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => (utils.is.string(args[i]) ? args[i] : ''));\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Clone nested objects\n cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Restore time\n player.currentTime = currentTime;\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\n });\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n\n\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.innerText = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const attributes = utils.getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = utils.createElement('div', utils.extend(attributes, {\n class: `plyr__time ${attributes.class}`,\n 'aria-label': i18n.get(type, this.config),\n }), '00:00');\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.innerText = utils.formatTime(time, forceHours, inverted);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n controls.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n case 'seeked':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n controls.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n setProgress(this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.progress.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n controls.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n controls.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded or durationchange events\n durationUpdate() {\n // Bail if no ui or durationchange event triggered after playing/seek when invertTime is false\n if (!this.supported.ui || (!this.config.invertTime && this.currentTime)) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n controls.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n utils.toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 2160:\n label = '4K';\n break;\n\n case 1440:\n case 1080:\n case 720:\n label = 'HD';\n break;\n\n case 576:\n case 480:\n label = 'SD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n const label = controls.getLabel.call(this, 'quality', quality);\n controls.createMenuItem.call(this, quality, list, type, label, getBadge(quality));\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}&times;`;\n\n case 'quality':\n if (utils.is.number(value)) {\n return `${value}p`;\n }\n\n return utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n if (this.captions.active) {\n if (this.options.captions.length > 2 || !this.options.captions.some(lang => lang === 'enabled')) {\n value = this.captions.language;\n } else {\n value = 'enabled';\n }\n } else {\n value = '';\n }\n\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const toggle = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: !utils.is.empty(track.language) ? track.language : 'enabled',\n label: captions.getLabel.call(this, track),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label,\n track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null,\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n // Store reference\n this.options.captions = tracks.map(track => track.language);\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => {\n const label = controls.getLabel.call(this, 'speed', speed);\n controls.createMenuItem.call(this, speed, list, type, label);\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.hasAttribute('hidden');\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n utils.toggleHidden(form, !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n utils.toggleHidden(current, true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n utils.toggleHidden(pane, false);\n\n const tabs = utils.getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.cors) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([\n key,\n value,\n ]) => {\n result = utils.replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (utils.is.string(this.config.controls)) {\n container = replace(container);\n } else if (utils.is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n const tracks = captions.getTracks.call(this);\n\n if (!tracks.length) {\n return null;\n }\n\n // Get track based on current language\n let track = tracks.find(track => track.language.toLowerCase() === this.language);\n\n // Get the <track> with default attribute\n if (!track) {\n track = utils.getElement.call(this, 'track[default]');\n }\n\n // Get the first track\n if (!track) {\n [track] = tracks;\n }\n\n return track;\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.innerText = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Reset to start when playback ended\n resetOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.3.8/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: (navigator.language || navigator.userLanguage).split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime}s',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime}s',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/v2/video/{0}.json',\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api: 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n },\n googleIMA: {\n sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.property = Fullscreen.property;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (utils.is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n controls.updateVolume.call(this);\n\n // Reset time display\n controls.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster && this.elements.poster && !this.elements.poster.style.backgroundImage) {\n ui.setPoster.call(this, this.poster);\n }\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n\n // Toggle poster\n togglePoster(enable) {\n utils.toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n\n // Set the poster image (async)\n setPoster(poster) {\n // Set property regardless of validity\n this.media.setAttribute('poster', poster);\n\n // Bail if element is missing\n if (!utils.is.element(this.elements.poster)) {\n return Promise.reject();\n }\n\n // Load the image, and set poster if successful\n const loadPromise = utils.loadImage(poster)\n .then(() => {\n this.elements.poster.style.backgroundImage = `url('${poster}')`;\n Object.assign(this.elements.poster.style, {\n backgroundImage: `url('${poster}')`,\n // Reset backgroundSize as well (since it can be set to \"cover\" for padded thumbnails for youtube)\n backgroundSize: '',\n });\n ui.togglePoster.call(this, true);\n return poster;\n });\n\n // Hide the element if the poster can't be loaded (otherwise it will just be a black element covering the video)\n loadPromise.catch(() => ui.togglePoster.call(this, false));\n\n // Return the promise so the caller can use it as well\n return loadPromise;\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Only update controls on non timeupdate events\n if (utils.is.event(event) && event.type === 'timeupdate') {\n return;\n }\n\n // Toggle controls\n ui.toggleControls.call(this);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Update progress bar loading class state\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Update controls visibility\n ui.toggleControls.call(this);\n }, this.loading ? 250 : 0);\n },\n\n // Toggle controls based on state and `force` argument\n toggleControls(force) {\n const { controls } = this.elements;\n\n if (controls && this.config.hideControls) {\n // Show controls if force, loading, paused, or button interaction, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover));\n }\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen', event => {\n const { controls } = this.player.elements;\n\n // Remove button states for fullscreen\n if (event.type === 'enterfullscreen') {\n controls.pressed = false;\n controls.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = [\n 'touchstart',\n 'touchmove',\n 'mousemove',\n ].includes(event.type);\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(this.player, true);\n // Use longer timeout for touch devices\n delay = this.player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(this.player.timers.controls);\n // Timer to prevent flicker when seeking\n this.player.timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n });\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadeddata loadedmetadata', event => controls.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing seeking seeked', event => controls.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => controls.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied timeupdate', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n showHomeTab();\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n on(this.player.elements.inputs.seek, 'mousedown mousemove', event => {\n const clientRect = this.player.elements.progress.getBoundingClientRect();\n const percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n on(this.player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n\n // Was playing before?\n const play = seek.hasAttribute('play-on-seeked');\n\n // Done seeking\n const done = [\n 'mouseup',\n 'touchend',\n 'keyup',\n ].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute('play-on-seeked');\n this.player.play();\n } else if (!done && this.player.playing) {\n seek.setAttribute('play-on-seeked', '');\n this.player.pause();\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n const seek = event.currentTarget;\n\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (utils.is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n this.player.currentTime = seekTo / seek.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n const { config, elements, timers } = this.player;\n\n // Skip transition to prevent focus from scrolling the parent element\n utils.toggleClass(elements.controls, config.classNames.noTransition, event.type === 'focusin');\n\n // Toggle\n ui.toggleControls.call(this.player, event.type === 'focusin');\n\n // If focusin, hide again after delay\n if (event.type === 'focusin') {\n // Restore transition\n setTimeout(() => {\n utils.toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for keyboard users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n // Hide\n timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n }\n });\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (this.media.paused === play) {\n this.media.paused = !play;\n utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n // muted: player.muted,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = utils.format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div', { class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Get poster image\n utils.fetch(utils.format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (utils.is.empty(response)) {\n return;\n }\n\n // Get the URL for thumbnail\n const url = new URL(response[0].thumbnail_large);\n\n // Get original image\n url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n // Set and show poster\n ui.setPoster.call(player, url.href);\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe, {\n autopause: player.config.autopause,\n muted: player.muted,\n });\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n return player.embed.play();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n return player.embed.pause();\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Vimeo will automatically play on seek if the video hasn't been played before\n\n // Get current paused state and volume etc\n const { embed, media, paused, volume } = player;\n\n // Set seeking state and trigger event\n media.seeking = true;\n utils.dispatchEvent.call(player, media, 'seeking');\n\n // If paused, mute until seek is complete\n Promise.resolve(paused && embed.setVolume(0))\n // Seek\n .then(() => embed.setCurrentTime(time))\n // Restore paused\n .then(() => paused && embed.pause())\n // Restore volume\n .then(() => paused && embed.setVolume(volume))\n .catch(() => {\n // Do nothing\n });\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n assurePlaybackState.call(player, true);\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n assurePlaybackState.call(player, false);\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (this.media.paused === play) {\n this.media.paused = !play;\n utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = utils.format(this.config.urls.youtube.api, videoId, key);\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Set poster image\n const posterSrc = format => `https://img.youtube.com/vi/${videoId}/${format}default.jpg`;\n\n // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)\n utils.loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n .catch(() => utils.loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n .catch(() => utils.loadImage(posterSrc('hq'))) // 360p padded 4:3. Always exists\n .then(image => ui.setPoster.call(player, image.src))\n .then(posterSrc => {\n // If the image is padded, use background-size \"cover\" instead (like youtube does too with their posters)\n if (!posterSrc.includes('maxres')) {\n player.elements.poster.style.backgroundSize = 'cover';\n }\n });\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n instance.playVideo();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // If paused, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n if (player.paused) {\n player.embed.mute();\n }\n\n // Set seeking state and trigger event\n player.media.seeking = true;\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n const seeked = player.media.seeking && [\n 1,\n 2,\n ].includes(event.data);\n\n if (seeked) {\n // Unset seeking and fire seeked event\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n assurePlaybackState.call(player, false);\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)\n if (player.media.paused) {\n player.media.pause();\n } else {\n assurePlaybackState.call(player, true);\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\n }\n\n break;\n\n case 2:\n // Restore audio (YouTube starts playing on seek if the video hasn't been played yet)\n if (!player.muted) {\n player.embed.unMute();\n }\n assurePlaybackState.call(player, false);\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport utils from './utils';\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = utils.createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n html5.extend.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport i18n from '../i18n';\nimport utils from '../utils';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n get enabled() {\n return this.player.isVideo && this.player.config.ads.enabled && !utils.is.empty(this.publisherId);\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.sdk)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n // Mute based on current state\n request.setAdWillPlayMuted(!this.player.muted);\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!utils.is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (utils.is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport { providers } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if (!utils.is.empty(input.poster)) {\n this.poster = input.poster;\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.3.8\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport Console from './console';\nimport controls from './controls';\nimport defaults from './defaults';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport { providers, types } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n Plyr.defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n captions: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n const clone = this.media.cloneNode(true);\n clone.autoplay = false;\n this.elements.original = clone;\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(params.playsinline);\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended);\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get stopped state\n */\n get stopped() {\n return Boolean(this.paused && this.currentTime === 0);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (utils.is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // True duration\n const realDuration = this.media ? Number(this.media.duration) : 0;\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality) || quality === 0) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isVideo) {\n this.debug.warn('Poster can only be set for video');\n return;\n }\n\n ui.setPoster.call(this, input);\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n this.toggleCaptions(false);\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // Check for support\n if (!this.options.captions.includes(language)) {\n this.debug.warn(`Unsupported language option: ${language}`);\n return;\n }\n\n // Ensure captions are enabled\n this.toggleCaptions(true);\n\n // Enabled only\n if (language === 'enabled') {\n return;\n }\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} [toggle] - Whether to show the controls\n */\n toggleControls(toggle) {\n // Don't toggle if missing UI support or if it's audio\n if (this.supported.ui && !this.isAudio) {\n // Get state before change\n const isHidden = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n\n // Negate the argument if not undefined since adding the class to hides the controls\n const force = typeof toggle === 'undefined' ? undefined : !toggle;\n\n // Apply and get updated state\n const hiding = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n // Close menu\n if (hiding && this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n utils.dispatchEvent.call(this, this.media, eventName);\n }\n return !hiding;\n }\n return false;\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (utils.is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (utils.is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (utils.is.array(selector)) {\n targets = selector.filter(i => utils.is.element(i));\n }\n\n if (utils.is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = utils.cloneDeep(defaults);\n\nexport default Plyr;\n","// ==========================================================================\n// Plyr Polyfilled Build\n// plyr.js v3.3.8\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport 'babel-polyfill';\nimport 'custom-event-polyfill';\nimport 'url-polyfill';\nimport Plyr from './plyr';\n\nexport default Plyr;\n"]} \ No newline at end of file
diff --git a/dist/plyr.polyfilled.min.js b/dist/plyr.polyfilled.min.js
index 9f938392..4f30783c 100644
--- a/dist/plyr.polyfilled.min.js
+++ b/dist/plyr.polyfilled.min.js
@@ -1,2 +1,2 @@
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)}),i=t(function(e){var t=e.exports={version:"2.5.3"};"number"==typeof __e&&(__e=t)}),r=(i.version,function(e){return"object"==typeof e?null!==e:"function"==typeof e}),s=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e},o=function(e){try{return!!e()}catch(e){return!0}},a=!o(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),l=n.document,c=r(l)&&r(l.createElement),u=function(e){return c?l.createElement(e):{}},d=!a&&!o(function(){return 7!=Object.defineProperty(u("div"),"a",{get:function(){return 7}}).a}),f=function(e,t){if(!r(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!r(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")},h=Object.defineProperty,p={f:a?Object.defineProperty:function(e,t,n){if(s(e),t=f(t,!0),s(n),d)try{return h(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},g=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},m=a?function(e,t,n){return p.f(e,t,g(1,n))}:function(e,t,n){return e[t]=n,e},y={}.hasOwnProperty,v=function(e,t){return y.call(e,t)},b=0,w=Math.random(),E=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++b+w).toString(36))},k=t(function(e){var t=E("src"),r=Function.toString,s=(""+r).split("toString");i.inspectSource=function(e){return r.call(e)},(e.exports=function(e,i,r,o){var a="function"==typeof r;a&&(v(r,"name")||m(r,"name",i)),e[i]!==r&&(a&&(v(r,t)||m(r,t,e[i]?""+e[i]:s.join(String(i)))),e===n?e[i]=r:o?e[i]?e[i]=r:m(e,i,r):(delete e[i],m(e,i,r)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[t]||r.call(this)})}),S=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e},T=function(e,t,n){if(S(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,i){return e.call(t,n,i)};case 3:return function(n,i,r){return e.call(t,n,i,r)}}return function(){return e.apply(t,arguments)}},A=function(e,t,r){var s,o,a,l,c=e&A.F,u=e&A.G,d=e&A.S,f=e&A.P,h=e&A.B,p=u?n:d?n[t]||(n[t]={}):(n[t]||{}).prototype,g=u?i:i[t]||(i[t]={}),y=g.prototype||(g.prototype={});for(s in u&&(r=t),r)a=((o=!c&&p&&void 0!==p[s])?p:r)[s],l=h&&o?T(a,n):f&&"function"==typeof a?T(Function.call,a):a,p&&k(p,s,a,e&A.U),g[s]!=a&&m(g,s,l),f&&y[s]!=a&&(y[s]=a)};n.core=i,A.F=1,A.G=2,A.S=4,A.P=8,A.B=16,A.W=32,A.U=64,A.R=128;for(var _,C=A,P=E("typed_array"),x=E("view"),M=!(!n.ArrayBuffer||!n.DataView),L=M,N=0,O="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");N<9;)(_=n[O[N++]])?(m(_.prototype,P,!0),m(_.prototype,x,!0)):L=!1;var j={ABV:M,CONSTR:L,TYPED:P,VIEW:x},I=function(e,t,n){for(var i in t)k(e,i,t[i],n);return e},F=function(e,t,n,i){if(!(e instanceof t)||void 0!==i&&i in e)throw TypeError(n+": incorrect invocation!");return e},R=Math.ceil,q=Math.floor,B=function(e){return isNaN(e=+e)?0:(e>0?q:R)(e)},V=Math.min,D=function(e){return e>0?V(B(e),9007199254740991):0},U=function(e){if(void 0===e)return 0;var t=B(e),n=D(t);if(t!==n)throw RangeError("Wrong length!");return n},H={}.toString,W=function(e){return H.call(e).slice(8,-1)},z=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==W(e)?e.split(""):Object(e)},G=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e},Y=function(e){return z(G(e))},K=Math.max,Q=Math.min,J=function(e,t){return(e=B(e))<0?K(e+t,0):Q(e,t)},$=function(e){return function(t,n,i){var r,s=Y(t),o=D(s.length),a=J(i,o);if(e&&n!=n){for(;o>a;)if((r=s[a++])!=r)return!0}else for(;o>a;a++)if((e||a in s)&&s[a]===n)return e||a||0;return!e&&-1}},X=n["__core-js_shared__"]||(n["__core-js_shared__"]={}),Z=function(e){return X[e]||(X[e]={})},ee=Z("keys"),te=function(e){return ee[e]||(ee[e]=E(e))},ne=$(!1),ie=te("IE_PROTO"),re=function(e,t){var n,i=Y(e),r=0,s=[];for(n in i)n!=ie&&v(i,n)&&s.push(n);for(;t.length>r;)v(i,n=t[r++])&&(~ne(s,n)||s.push(n));return s},se="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),oe=se.concat("length","prototype"),ae={f:Object.getOwnPropertyNames||function(e){return re(e,oe)}},le=function(e){return Object(G(e))},ce=function(e){for(var t=le(this),n=D(t.length),i=arguments.length,r=J(i>1?arguments[1]:void 0,n),s=i>2?arguments[2]:void 0,o=void 0===s?n:J(s,n);o>r;)t[r++]=e;return t},ue=t(function(e){var t=Z("wks"),i=n.Symbol,r="function"==typeof i;(e.exports=function(e){return t[e]||(t[e]=r&&i[e]||(r?i:E)("Symbol."+e))}).store=t}),de=p.f,fe=ue("toStringTag"),he=function(e,t,n){e&&!v(e=n?e:e.prototype,fe)&&de(e,fe,{configurable:!0,value:t})},pe=t(function(e,t){var i=ae.f,r=p.f,s="prototype",l="Wrong index!",c=n.ArrayBuffer,u=n.DataView,d=n.Math,f=n.RangeError,h=n.Infinity,g=c,y=d.abs,v=d.pow,b=d.floor,w=d.log,E=d.LN2,k=a?"_b":"buffer",S=a?"_l":"byteLength",T=a?"_o":"byteOffset";function A(e,t,n){var i,r,s,o=new Array(n),a=8*n-t-1,l=(1<<a)-1,c=l>>1,u=23===t?v(2,-24)-v(2,-77):0,d=0,f=e<0||0===e&&1/e<0?1:0;for((e=y(e))!=e||e===h?(r=e!=e?1:0,i=l):(i=b(w(e)/E),e*(s=v(2,-i))<1&&(i--,s*=2),(e+=i+c>=1?u/s:u*v(2,1-c))*s>=2&&(i++,s/=2),i+c>=l?(r=0,i=l):i+c>=1?(r=(e*s-1)*v(2,t),i+=c):(r=e*v(2,c-1)*v(2,t),i=0));t>=8;o[d++]=255&r,r/=256,t-=8);for(i=i<<t|r,a+=t;a>0;o[d++]=255&i,i/=256,a-=8);return o[--d]|=128*f,o}function _(e,t,n){var i,r=8*n-t-1,s=(1<<r)-1,o=s>>1,a=r-7,l=n-1,c=e[l--],u=127&c;for(c>>=7;a>0;u=256*u+e[l],l--,a-=8);for(i=u&(1<<-a)-1,u>>=-a,a+=t;a>0;i=256*i+e[l],l--,a-=8);if(0===u)u=1-o;else{if(u===s)return i?NaN:c?-h:h;i+=v(2,t),u-=o}return(c?-1:1)*i*v(2,u-t)}function C(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]}function P(e){return[255&e]}function x(e){return[255&e,e>>8&255]}function M(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]}function L(e){return A(e,52,8)}function N(e){return A(e,23,4)}function O(e,t,n){r(e[s],t,{get:function(){return this[n]}})}function R(e,t,n,i){var r=U(+n);if(r+t>e[S])throw f(l);var s=e[k]._b,o=r+e[T],a=s.slice(o,o+t);return i?a:a.reverse()}function q(e,t,n,i,r,s){var o=U(+n);if(o+t>e[S])throw f(l);for(var a=e[k]._b,c=o+e[T],u=i(+r),d=0;d<t;d++)a[c+d]=u[s?d:t-d-1]}if(j.ABV){if(!o(function(){c(1)})||!o(function(){new c(-1)})||o(function(){return new c,new c(1.5),new c(NaN),"ArrayBuffer"!=c.name})){for(var V,H=(c=function(e){return F(this,c),new g(U(e))})[s]=g[s],W=i(g),z=0;W.length>z;)(V=W[z++])in c||m(c,V,g[V]);H.constructor=c}var G=new u(new c(2)),Y=u[s].setInt8;G.setInt8(0,2147483648),G.setInt8(1,2147483649),!G.getInt8(0)&&G.getInt8(1)||I(u[s],{setInt8:function(e,t){Y.call(this,e,t<<24>>24)},setUint8:function(e,t){Y.call(this,e,t<<24>>24)}},!0)}else c=function(e){F(this,c,"ArrayBuffer");var t=U(e);this._b=ce.call(new Array(t),0),this[S]=t},u=function(e,t,n){F(this,u,"DataView"),F(e,c,"DataView");var i=e[S],r=B(t);if(r<0||r>i)throw f("Wrong offset!");if(r+(n=void 0===n?i-r:D(n))>i)throw f("Wrong length!");this[k]=e,this[T]=r,this[S]=n},a&&(O(c,"byteLength","_l"),O(u,"buffer","_b"),O(u,"byteLength","_l"),O(u,"byteOffset","_o")),I(u[s],{getInt8:function(e){return R(this,1,e)[0]<<24>>24},getUint8:function(e){return R(this,1,e)[0]},getInt16:function(e){var t=R(this,2,e,arguments[1]);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=R(this,2,e,arguments[1]);return t[1]<<8|t[0]},getInt32:function(e){return C(R(this,4,e,arguments[1]))},getUint32:function(e){return C(R(this,4,e,arguments[1]))>>>0},getFloat32:function(e){return _(R(this,4,e,arguments[1]),23,4)},getFloat64:function(e){return _(R(this,8,e,arguments[1]),52,8)},setInt8:function(e,t){q(this,1,e,P,t)},setUint8:function(e,t){q(this,1,e,P,t)},setInt16:function(e,t){q(this,2,e,x,t,arguments[2])},setUint16:function(e,t){q(this,2,e,x,t,arguments[2])},setInt32:function(e,t){q(this,4,e,M,t,arguments[2])},setUint32:function(e,t){q(this,4,e,M,t,arguments[2])},setFloat32:function(e,t){q(this,4,e,N,t,arguments[2])},setFloat64:function(e,t){q(this,8,e,L,t,arguments[2])}});he(c,"ArrayBuffer"),he(u,"DataView"),m(u[s],j.VIEW,!0),t.ArrayBuffer=c,t.DataView=u}),ge=ue("species"),me=function(e,t){var n,i=s(e).constructor;return void 0===i||void 0==(n=s(i)[ge])?t:S(n)},ye=ue("species"),ve=function(e){var t=n[e];a&&t&&!t[ye]&&p.f(t,ye,{configurable:!0,get:function(){return this}})},be=n.ArrayBuffer,we=pe.ArrayBuffer,Ee=pe.DataView,ke=j.ABV&&be.isView,Se=we.prototype.slice,Te=j.VIEW;C(C.G+C.W+C.F*(be!==we),{ArrayBuffer:we}),C(C.S+C.F*!j.CONSTR,"ArrayBuffer",{isView:function(e){return ke&&ke(e)||r(e)&&Te in e}}),C(C.P+C.U+C.F*o(function(){return!new we(2).slice(1,void 0).byteLength}),"ArrayBuffer",{slice:function(e,t){if(void 0!==Se&&void 0===t)return Se.call(s(this),e);for(var n=s(this).byteLength,i=J(e,n),r=J(void 0===t?n:t,n),o=new(me(this,we))(D(r-i)),a=new Ee(this),l=new Ee(o),c=0;i<r;)l.setUint8(c++,a.getUint8(i++));return o}}),ve("ArrayBuffer");var Ae=ue("toStringTag"),_e="Arguments"==W(function(){return arguments}()),Ce=function(e){var t,n,i;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),Ae))?n:_e?W(t):"Object"==(i=W(t))&&"function"==typeof t.callee?"Arguments":i},Pe={},xe=ue("iterator"),Me=Array.prototype,Le=function(e){return void 0!==e&&(Pe.Array===e||Me[xe]===e)},Ne=Object.keys||function(e){return re(e,se)},Oe=a?Object.defineProperties:function(e,t){s(e);for(var n,i=Ne(t),r=i.length,o=0;r>o;)p.f(e,n=i[o++],t[n]);return e},je=n.document,Ie=je&&je.documentElement,Fe=te("IE_PROTO"),Re=function(){},qe=function(){var e,t=u("iframe"),n=se.length;for(t.style.display="none",Ie.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),qe=e.F;n--;)delete qe.prototype[se[n]];return qe()},Be=Object.create||function(e,t){var n;return null!==e?(Re.prototype=s(e),n=new Re,Re.prototype=null,n[Fe]=e):n=qe(),void 0===t?n:Oe(n,t)},Ve=te("IE_PROTO"),De=Object.prototype,Ue=Object.getPrototypeOf||function(e){return e=le(e),v(e,Ve)?e[Ve]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?De:null},He=ue("iterator"),We=i.getIteratorMethod=function(e){if(void 0!=e)return e[He]||e["@@iterator"]||Pe[Ce(e)]},ze=Array.isArray||function(e){return"Array"==W(e)},Ge=ue("species"),Ye=function(e,t){return new(function(e){var t;return ze(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!ze(t.prototype)||(t=void 0),r(t)&&null===(t=t[Ge])&&(t=void 0)),void 0===t?Array:t}(e))(t)},Ke=function(e,t){var n=1==e,i=2==e,r=3==e,s=4==e,o=6==e,a=5==e||o,l=t||Ye;return function(t,c,u){for(var d,f,h=le(t),p=z(h),g=T(c,u,3),m=D(p.length),y=0,v=n?l(t,m):i?l(t,0):void 0;m>y;y++)if((a||y in p)&&(f=g(d=p[y],y,h),e))if(n)v[y]=f;else if(f)switch(e){case 3:return!0;case 5:return d;case 6:return y;case 2:v.push(d)}else if(s)return!1;return o?-1:r||s?s:v}},Qe=ue("unscopables"),Je=Array.prototype;void 0==Je[Qe]&&m(Je,Qe,{});var $e=function(e){Je[Qe][e]=!0},Xe=function(e,t){return{value:t,done:!!e}},Ze={};m(Ze,ue("iterator"),function(){return this});var et=function(e,t,n){e.prototype=Be(Ze,{next:g(1,n)}),he(e,t+" Iterator")},tt=ue("iterator"),nt=!([].keys&&"next"in[].keys()),it=function(){return this},rt=function(e,t,n,i,r,s,o){et(n,t,i);var a,l,c,u=function(e){if(!nt&&e in p)return p[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},d=t+" Iterator",f="values"==r,h=!1,p=e.prototype,g=p[tt]||p["@@iterator"]||r&&p[r],y=!nt&&g||u(r),b=r?f?u("entries"):y:void 0,w="Array"==t&&p.entries||g;if(w&&(c=Ue(w.call(new e)))!==Object.prototype&&c.next&&(he(c,d,!0),v(c,tt)||m(c,tt,it)),f&&g&&"values"!==g.name&&(h=!0,y=function(){return g.call(this)}),(nt||h||!p[tt])&&m(p,tt,y),Pe[t]=y,Pe[d]=it,r)if(a={values:f?y:u("values"),keys:s?y:u("keys"),entries:b},o)for(l in a)l in p||k(p,l,a[l]);else C(C.P+C.F*(nt||h),t,a);return a},st=rt(Array,"Array",function(e,t){this._t=Y(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,Xe(1)):Xe(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])},"values");Pe.Arguments=Pe.Array,$e("keys"),$e("values"),$e("entries");var ot=ue("iterator"),at=!1;try{[7][ot]().return=function(){at=!0}}catch(e){}var lt=function(e,t){if(!t&&!at)return!1;var n=!1;try{var i=[7],r=i[ot]();r.next=function(){return{done:n=!0}},i[ot]=function(){return r},e(i)}catch(e){}return n},ct=[].copyWithin||function(e,t){var n=le(this),i=D(n.length),r=J(e,i),s=J(t,i),o=arguments.length>2?arguments[2]:void 0,a=Math.min((void 0===o?i:J(o,i))-s,i-r),l=1;for(s<r&&r<s+a&&(l=-1,s+=a-1,r+=a-1);a-- >0;)s in n?n[r]=n[s]:delete n[r],r+=l,s+=l;return n},ut={f:{}.propertyIsEnumerable},dt=Object.getOwnPropertyDescriptor,ft={f:a?dt:function(e,t){if(e=Y(e),t=f(t,!0),d)try{return dt(e,t)}catch(e){}if(v(e,t))return g(!ut.f.call(e,t),e[t])}},ht=t(function(e){if(a){var t=n,i=o,s=C,l=j,c=pe,u=T,d=F,h=g,y=m,b=I,w=B,k=D,S=U,A=J,_=f,P=v,x=Ce,M=r,L=le,N=Le,O=Be,R=Ue,q=ae.f,V=We,H=E,W=ue,z=Ke,G=$,Y=me,K=st,Q=Pe,X=lt,Z=ve,ee=ce,te=ct,ne=p,ie=ft,re=ne.f,se=ie.f,oe=t.RangeError,de=t.TypeError,fe=t.Uint8Array,he=Array.prototype,ge=c.ArrayBuffer,ye=c.DataView,be=z(0),we=z(2),Ee=z(3),ke=z(4),Se=z(5),Te=z(6),Ae=G(!0),_e=G(!1),xe=K.values,Me=K.keys,Ne=K.entries,Oe=he.lastIndexOf,je=he.reduce,Ie=he.reduceRight,Fe=he.join,Re=he.sort,qe=he.slice,Ve=he.toString,De=he.toLocaleString,He=W("iterator"),ze=W("toStringTag"),Ge=H("typed_constructor"),Ye=H("def_constructor"),Qe=l.CONSTR,Je=l.TYPED,$e=l.VIEW,Xe=z(1,function(e,t){return it(Y(e,e[Ye]),t)}),Ze=i(function(){return 1===new fe(new Uint16Array([1]).buffer)[0]}),et=!!fe&&!!fe.prototype.set&&i(function(){new fe(1).set({})}),tt=function(e,t){var n=w(e);if(n<0||n%t)throw oe("Wrong offset!");return n},nt=function(e){if(M(e)&&Je in e)return e;throw de(e+" is not a typed array!")},it=function(e,t){if(!(M(e)&&Ge in e))throw de("It is not a typed array constructor!");return new e(t)},rt=function(e,t){return ot(Y(e,e[Ye]),t)},ot=function(e,t){for(var n=0,i=t.length,r=it(e,i);i>n;)r[n]=t[n++];return r},at=function(e,t,n){re(e,t,{get:function(){return this._d[n]}})},ut=function(e){var t,n,i,r,s,o,a=L(e),l=arguments.length,c=l>1?arguments[1]:void 0,d=void 0!==c,f=V(a);if(void 0!=f&&!N(f)){for(o=f.call(a),i=[],t=0;!(s=o.next()).done;t++)i.push(s.value);a=i}for(d&&l>2&&(c=u(c,arguments[2],2)),t=0,n=k(a.length),r=it(this,n);n>t;t++)r[t]=d?c(a[t],t):a[t];return r},dt=function(){for(var e=0,t=arguments.length,n=it(this,t);t>e;)n[e]=arguments[e++];return n},ht=!!fe&&i(function(){De.call(new fe(1))}),pt=function(){return De.apply(ht?qe.call(nt(this)):nt(this),arguments)},gt={copyWithin:function(e,t){return te.call(nt(this),e,t,arguments.length>2?arguments[2]:void 0)},every:function(e){return ke(nt(this),e,arguments.length>1?arguments[1]:void 0)},fill:function(e){return ee.apply(nt(this),arguments)},filter:function(e){return rt(this,we(nt(this),e,arguments.length>1?arguments[1]:void 0))},find:function(e){return Se(nt(this),e,arguments.length>1?arguments[1]:void 0)},findIndex:function(e){return Te(nt(this),e,arguments.length>1?arguments[1]:void 0)},forEach:function(e){be(nt(this),e,arguments.length>1?arguments[1]:void 0)},indexOf:function(e){return _e(nt(this),e,arguments.length>1?arguments[1]:void 0)},includes:function(e){return Ae(nt(this),e,arguments.length>1?arguments[1]:void 0)},join:function(e){return Fe.apply(nt(this),arguments)},lastIndexOf:function(e){return Oe.apply(nt(this),arguments)},map:function(e){return Xe(nt(this),e,arguments.length>1?arguments[1]:void 0)},reduce:function(e){return je.apply(nt(this),arguments)},reduceRight:function(e){return Ie.apply(nt(this),arguments)},reverse:function(){for(var e,t=nt(this).length,n=Math.floor(t/2),i=0;i<n;)e=this[i],this[i++]=this[--t],this[t]=e;return this},some:function(e){return Ee(nt(this),e,arguments.length>1?arguments[1]:void 0)},sort:function(e){return Re.call(nt(this),e)},subarray:function(e,t){var n=nt(this),i=n.length,r=A(e,i);return new(Y(n,n[Ye]))(n.buffer,n.byteOffset+r*n.BYTES_PER_ELEMENT,k((void 0===t?i:A(t,i))-r))}},mt=function(e,t){return rt(this,qe.call(nt(this),e,t))},yt=function(e){nt(this);var t=tt(arguments[1],1),n=this.length,i=L(e),r=k(i.length),s=0;if(r+t>n)throw oe("Wrong length!");for(;s<r;)this[t+s]=i[s++]},vt={entries:function(){return Ne.call(nt(this))},keys:function(){return Me.call(nt(this))},values:function(){return xe.call(nt(this))}},bt=function(e,t){return M(e)&&e[Je]&&"symbol"!=typeof t&&t in e&&String(+t)==String(t)},wt=function(e,t){return bt(e,t=_(t,!0))?h(2,e[t]):se(e,t)},Et=function(e,t,n){return!(bt(e,t=_(t,!0))&&M(n)&&P(n,"value"))||P(n,"get")||P(n,"set")||n.configurable||P(n,"writable")&&!n.writable||P(n,"enumerable")&&!n.enumerable?re(e,t,n):(e[t]=n.value,e)};Qe||(ie.f=wt,ne.f=Et),s(s.S+s.F*!Qe,"Object",{getOwnPropertyDescriptor:wt,defineProperty:Et}),i(function(){Ve.call({})})&&(Ve=De=function(){return Fe.call(this)});var kt=b({},gt);b(kt,vt),y(kt,He,vt.values),b(kt,{slice:mt,set:yt,constructor:function(){},toString:Ve,toLocaleString:pt}),at(kt,"buffer","b"),at(kt,"byteOffset","o"),at(kt,"byteLength","l"),at(kt,"length","e"),re(kt,ze,{get:function(){return this[Je]}}),e.exports=function(e,n,r,o){var a=e+((o=!!o)?"Clamped":"")+"Array",c="get"+e,u="set"+e,f=t[a],h=f||{},p=f&&R(f),g=!f||!l.ABV,m={},v=f&&f.prototype,b=function(e,t){re(e,t,{get:function(){return function(e,t){var i=e._d;return i.v[c](t*n+i.o,Ze)}(this,t)},set:function(e){return function(e,t,i){var r=e._d;o&&(i=(i=Math.round(i))<0?0:i>255?255:255&i),r.v[u](t*n+r.o,i,Ze)}(this,t,e)},enumerable:!0})};g?(f=r(function(e,t,i,r){d(e,f,a,"_d");var s,o,l,c,u=0,h=0;if(M(t)){if(!(t instanceof ge||"ArrayBuffer"==(c=x(t))||"SharedArrayBuffer"==c))return Je in t?ot(f,t):ut.call(f,t);s=t,h=tt(i,n);var p=t.byteLength;if(void 0===r){if(p%n)throw oe("Wrong length!");if((o=p-h)<0)throw oe("Wrong length!")}else if((o=k(r)*n)+h>p)throw oe("Wrong length!");l=o/n}else l=S(t),s=new ge(o=l*n);for(y(e,"_d",{b:s,o:h,l:o,e:l,v:new ye(s)});u<l;)b(e,u++)}),v=f.prototype=O(kt),y(v,"constructor",f)):i(function(){f(1)})&&i(function(){new f(-1)})&&X(function(e){new f,new f(null),new f(1.5),new f(e)},!0)||(f=r(function(e,t,i,r){var s;return d(e,f,a),M(t)?t instanceof ge||"ArrayBuffer"==(s=x(t))||"SharedArrayBuffer"==s?void 0!==r?new h(t,tt(i,n),r):void 0!==i?new h(t,tt(i,n)):new h(t):Je in t?ot(f,t):ut.call(f,t):new h(S(t))}),be(p!==Function.prototype?q(h).concat(q(p)):q(h),function(e){e in f||y(f,e,h[e])}),f.prototype=v,v.constructor=f);var w=v[He],E=!!w&&("values"==w.name||void 0==w.name),T=vt.values;y(f,Ge,!0),y(v,Je,a),y(v,$e,!0),y(v,Ye,f),(o?new f(1)[ze]==a:ze in v)||re(v,ze,{get:function(){return a}}),m[a]=f,s(s.G+s.W+s.F*(f!=h),m),s(s.S,a,{BYTES_PER_ELEMENT:n}),s(s.S+s.F*i(function(){h.of.call(f,1)}),a,{from:ut,of:dt}),"BYTES_PER_ELEMENT"in v||y(v,"BYTES_PER_ELEMENT",n),s(s.P,a,gt),Z(a),s(s.P+s.F*et,a,{set:yt}),s(s.P+s.F*!E,a,vt),v.toString!=Ve&&(v.toString=Ve),s(s.P+s.F*i(function(){new f(1).slice()}),a,{slice:mt}),s(s.P+s.F*(i(function(){return[1,2].toLocaleString()!=new f([1,2]).toLocaleString()})||!i(function(){v.toLocaleString.call([1,2])})),a,{toLocaleString:pt}),Q[a]=E?w:T,E||y(v,He,T)}}else e.exports=function(){}});ht("Int8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}},!0),ht("Int16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Uint16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Int32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Uint32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Float32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Float64",8,function(e){return function(t,n,i){return e(this,t,n,i)}});var pt=function(e,t,n,i){try{return i?t(s(n)[0],n[1]):t(n)}catch(t){var r=e.return;throw void 0!==r&&s(r.call(e)),t}},gt=t(function(e){var t={},n={},i=e.exports=function(e,i,r,o,a){var l,c,u,d,f=a?function(){return e}:We(e),h=T(r,o,i?2:1),p=0;if("function"!=typeof f)throw TypeError(e+" is not iterable!");if(Le(f)){for(l=D(e.length);l>p;p++)if((d=i?h(s(c=e[p])[0],c[1]):h(e[p]))===t||d===n)return d}else for(u=f.call(e);!(c=u.next()).done;)if((d=pt(u,h,c.value,i))===t||d===n)return d};i.BREAK=t,i.RETURN=n}),mt=t(function(e){var t=E("meta"),n=p.f,i=0,s=Object.isExtensible||function(){return!0},a=!o(function(){return s(Object.preventExtensions({}))}),l=function(e){n(e,t,{value:{i:"O"+ ++i,w:{}}})},c=e.exports={KEY:t,NEED:!1,fastKey:function(e,n){if(!r(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!v(e,t)){if(!s(e))return"F";if(!n)return"E";l(e)}return e[t].i},getWeak:function(e,n){if(!v(e,t)){if(!s(e))return!0;if(!n)return!1;l(e)}return e[t].w},onFreeze:function(e){return a&&c.NEED&&s(e)&&!v(e,t)&&l(e),e}}}),yt=(mt.KEY,mt.NEED,mt.fastKey,mt.getWeak,mt.onFreeze,function(e,t){if(!r(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e}),vt=p.f,bt=mt.fastKey,wt=a?"_s":"size",Et=function(e,t){var n,i=bt(t);if("F"!==i)return e._i[i];for(n=e._f;n;n=n.n)if(n.k==t)return n},kt={getConstructor:function(e,t,n,i){var r=e(function(e,s){F(e,r,t,"_i"),e._t=t,e._i=Be(null),e._f=void 0,e._l=void 0,e[wt]=0,void 0!=s&&gt(s,n,e[i],e)});return I(r.prototype,{clear:function(){for(var e=yt(this,t),n=e._i,i=e._f;i;i=i.n)i.r=!0,i.p&&(i.p=i.p.n=void 0),delete n[i.i];e._f=e._l=void 0,e[wt]=0},delete:function(e){var n=yt(this,t),i=Et(n,e);if(i){var r=i.n,s=i.p;delete n._i[i.i],i.r=!0,s&&(s.n=r),r&&(r.p=s),n._f==i&&(n._f=r),n._l==i&&(n._l=s),n[wt]--}return!!i},forEach:function(e){yt(this,t);for(var n,i=T(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(i(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!Et(yt(this,t),e)}}),a&&vt(r.prototype,"size",{get:function(){return yt(this,t)[wt]}}),r},def:function(e,t,n){var i,r,s=Et(e,t);return s?s.v=n:(e._l=s={i:r=bt(t,!0),k:t,v:n,p:i=e._l,n:void 0,r:!1},e._f||(e._f=s),i&&(i.n=s),e[wt]++,"F"!==r&&(e._i[r]=s)),e},getEntry:Et,setStrong:function(e,t,n){rt(e,t,function(e,n){this._t=yt(e,t),this._k=n,this._l=void 0},function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?Xe(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,Xe(1))},n?"entries":"values",!n,!0),ve(t)}},St=function(e,t){if(s(e),!r(t)&&null!==t)throw TypeError(t+": can't set as prototype!")},Tt={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,n){try{(n=T(Function.call,ft.f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,i){return St(e,i),t?e.__proto__=i:n(e,i),e}}({},!1):void 0),check:St},At=Tt.set,_t=function(e,t,i,s,a,l){var c=n[e],u=c,d=a?"set":"add",f=u&&u.prototype,h={},p=function(e){var t=f[e];k(f,e,"delete"==e?function(e){return!(l&&!r(e))&&t.call(this,0===e?0:e)}:"has"==e?function(e){return!(l&&!r(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return l&&!r(e)?void 0:t.call(this,0===e?0:e)}:"add"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,n){return t.call(this,0===e?0:e,n),this})};if("function"==typeof u&&(l||f.forEach&&!o(function(){(new u).entries().next()}))){var g=new u,m=g[d](l?{}:-0,1)!=g,y=o(function(){g.has(1)}),v=lt(function(e){new u(e)}),b=!l&&o(function(){for(var e=new u,t=5;t--;)e[d](t,t);return!e.has(-0)});v||((u=t(function(t,n){F(t,u,e);var i=function(e,t,n){var i,s=t.constructor;return s!==n&&"function"==typeof s&&(i=s.prototype)!==n.prototype&&r(i)&&At&&At(e,i),e}(new c,t,u);return void 0!=n&&gt(n,a,i[d],i),i})).prototype=f,f.constructor=u),(y||b)&&(p("delete"),p("has"),a&&p("get")),(b||m)&&p(d),l&&f.clear&&delete f.clear}else u=s.getConstructor(t,e,a,d),I(u.prototype,i),mt.NEED=!0;return he(u,e),h[e]=u,C(C.G+C.W+C.F*(u!=c),h),l||s.setStrong(u,e,a),u},Ct=(_t("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var t=kt.getEntry(yt(this,"Map"),e);return t&&t.v},set:function(e,t){return kt.def(yt(this,"Map"),0===e?0:e,t)}},kt,!0),_t("Set",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return kt.def(yt(this,"Set"),e=0===e?0:e,e)}},kt),{f:Object.getOwnPropertySymbols}),Pt=Object.assign,xt=!Pt||o(function(){var e={},t={},n=Symbol(),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach(function(e){t[e]=e}),7!=Pt({},e)[n]||Object.keys(Pt({},t)).join("")!=i})?function(e,t){for(var n=le(e),i=arguments.length,r=1,s=Ct.f,o=ut.f;i>r;)for(var a,l=z(arguments[r++]),c=s?Ne(l).concat(s(l)):Ne(l),u=c.length,d=0;u>d;)o.call(l,a=c[d++])&&(n[a]=l[a]);return n}:Pt,Mt=mt.getWeak,Lt=Ke(5),Nt=Ke(6),Ot=0,jt=function(e){return e._l||(e._l=new It)},It=function(){this.a=[]},Ft=function(e,t){return Lt(e.a,function(e){return e[0]===t})};It.prototype={get:function(e){var t=Ft(this,e);if(t)return t[1]},has:function(e){return!!Ft(this,e)},set:function(e,t){var n=Ft(this,e);n?n[1]=t:this.a.push([e,t])},delete:function(e){var t=Nt(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}};var Rt={getConstructor:function(e,t,n,i){var s=e(function(e,r){F(e,s,t,"_i"),e._t=t,e._i=Ot++,e._l=void 0,void 0!=r&&gt(r,n,e[i],e)});return I(s.prototype,{delete:function(e){if(!r(e))return!1;var n=Mt(e);return!0===n?jt(yt(this,t)).delete(e):n&&v(n,this._i)&&delete n[this._i]},has:function(e){if(!r(e))return!1;var n=Mt(e);return!0===n?jt(yt(this,t)).has(e):n&&v(n,this._i)}}),s},def:function(e,t,n){var i=Mt(s(t),!0);return!0===i?jt(e).set(t,n):i[e._i]=n,e},ufstore:jt};t(function(e){var t,n=Ke(0),i=mt.getWeak,s=Object.isExtensible,a=Rt.ufstore,l={},c=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},u={get:function(e){if(r(e)){var t=i(e);return!0===t?a(yt(this,"WeakMap")).get(e):t?t[this._i]:void 0}},set:function(e,t){return Rt.def(yt(this,"WeakMap"),e,t)}},d=e.exports=_t("WeakMap",c,u,Rt,!0,!0);o(function(){return 7!=(new d).set((Object.freeze||Object)(l),7).get(l)})&&(t=Rt.getConstructor(c,"WeakMap"),xt(t.prototype,u),mt.NEED=!0,n(["delete","has","get","set"],function(e){var n=d.prototype,i=n[e];k(n,e,function(n,o){if(r(n)&&!s(n)){this._f||(this._f=new t);var a=this._f[e](n,o);return"set"==e?this:a}return i.call(this,n,o)})}))});_t("WeakSet",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return Rt.def(yt(this,"WeakSet"),e,!0)}},Rt,!1,!0);var qt=(n.Reflect||{}).apply,Bt=Function.apply;C(C.S+C.F*!o(function(){qt(function(){})}),"Reflect",{apply:function(e,t,n){var i=S(e),r=s(n);return qt?qt(i,t,r):Bt.call(i,t,r)}});var Vt=function(e,t,n){var i=void 0===n;switch(t.length){case 0:return i?e():e.call(n);case 1:return i?e(t[0]):e.call(n,t[0]);case 2:return i?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return i?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return i?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)},Dt=[].slice,Ut={},Ht=Function.bind||function(e){var t=S(this),n=Dt.call(arguments,1),i=function(){var r=n.concat(Dt.call(arguments));return this instanceof i?function(e,t,n){if(!(t in Ut)){for(var i=[],r=0;r<t;r++)i[r]="a["+r+"]";Ut[t]=Function("F,a","return new F("+i.join(",")+")")}return Ut[t](e,n)}(t,r.length,r):Vt(t,r,e)};return r(t.prototype)&&(i.prototype=t.prototype),i},Wt=(n.Reflect||{}).construct,zt=o(function(){function e(){}return!(Wt(function(){},[],e)instanceof e)}),Gt=!o(function(){Wt(function(){})});C(C.S+C.F*(zt||Gt),"Reflect",{construct:function(e,t){S(e),s(t);var n=arguments.length<3?e:S(arguments[2]);if(Gt&&!zt)return Wt(e,t,n);if(e==n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var i=[null];return i.push.apply(i,t),new(Ht.apply(e,i))}var o=n.prototype,a=Be(r(o)?o:Object.prototype),l=Function.apply.call(e,a,t);return r(l)?l:a}}),C(C.S+C.F*o(function(){Reflect.defineProperty(p.f({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(e,t,n){s(e),t=f(t,!0),s(n);try{return p.f(e,t,n),!0}catch(e){return!1}}});var Yt=ft.f;C(C.S,"Reflect",{deleteProperty:function(e,t){var n=Yt(s(e),t);return!(n&&!n.configurable)&&delete e[t]}}),C(C.S,"Reflect",{get:function e(t,n){var i,o,a=arguments.length<3?t:arguments[2];return s(t)===a?t[n]:(i=ft.f(t,n))?v(i,"value")?i.value:void 0!==i.get?i.get.call(a):void 0:r(o=Ue(t))?e(o,n,a):void 0}}),C(C.S,"Reflect",{getOwnPropertyDescriptor:function(e,t){return ft.f(s(e),t)}}),C(C.S,"Reflect",{getPrototypeOf:function(e){return Ue(s(e))}}),C(C.S,"Reflect",{has:function(e,t){return t in e}});var Kt=Object.isExtensible;C(C.S,"Reflect",{isExtensible:function(e){return s(e),!Kt||Kt(e)}});var Qt=n.Reflect,Jt=Qt&&Qt.ownKeys||function(e){var t=ae.f(s(e)),n=Ct.f;return n?t.concat(n(e)):t};C(C.S,"Reflect",{ownKeys:Jt});var $t=Object.preventExtensions;C(C.S,"Reflect",{preventExtensions:function(e){s(e);try{return $t&&$t(e),!0}catch(e){return!1}}}),C(C.S,"Reflect",{set:function e(t,n,i){var o,a,l=arguments.length<4?t:arguments[3],c=ft.f(s(t),n);if(!c){if(r(a=Ue(t)))return e(a,n,i,l);c=g(0)}return v(c,"value")?!(!1===c.writable||!r(l)||((o=ft.f(l,n)||g(0)).value=i,p.f(l,n,o),0)):void 0!==c.set&&(c.set.call(l,i),!0)}}),Tt&&C(C.S,"Reflect",{setPrototypeOf:function(e,t){Tt.check(e,t);try{return Tt.set(e,t),!0}catch(e){return!1}}});var Xt,Zt,en,tn=n.process,nn=n.setImmediate,rn=n.clearImmediate,sn=n.MessageChannel,on=n.Dispatch,an=0,ln={},cn=function(){var e=+this;if(ln.hasOwnProperty(e)){var t=ln[e];delete ln[e],t()}},un=function(e){cn.call(e.data)};nn&&rn||(nn=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return ln[++an]=function(){Vt("function"==typeof e?e:Function(e),t)},Xt(an),an},rn=function(e){delete ln[e]},"process"==W(tn)?Xt=function(e){tn.nextTick(T(cn,e,1))}:on&&on.now?Xt=function(e){on.now(T(cn,e,1))}:sn?(en=(Zt=new sn).port2,Zt.port1.onmessage=un,Xt=T(en.postMessage,en,1)):n.addEventListener&&"function"==typeof postMessage&&!n.importScripts?(Xt=function(e){n.postMessage(e+"","*")},n.addEventListener("message",un,!1)):Xt="onreadystatechange"in u("script")?function(e){Ie.appendChild(u("script")).onreadystatechange=function(){Ie.removeChild(this),cn.call(e)}}:function(e){setTimeout(T(cn,e,1),0)});var dn={set:nn,clear:rn},fn=dn.set,hn=n.MutationObserver||n.WebKitMutationObserver,pn=n.process,gn=n.Promise,mn="process"==W(pn);var yn,vn,bn,wn,En={f:function(e){return new function(e){var t,n;this.promise=new e(function(e,i){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=i}),this.resolve=S(t),this.reject=S(n)}(e)}},kn=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}},Sn=dn.set,Tn=function(){var e,t,i,r=function(){var n,r;for(mn&&(n=pn.domain)&&n.exit();e;){r=e.fn,e=e.next;try{r()}catch(n){throw e?i():t=void 0,n}}t=void 0,n&&n.enter()};if(mn)i=function(){pn.nextTick(r)};else if(!hn||n.navigator&&n.navigator.standalone)if(gn&&gn.resolve){var s=gn.resolve();i=function(){s.then(r)}}else i=function(){fn.call(n,r)};else{var o=!0,a=document.createTextNode("");new hn(r).observe(a,{characterData:!0}),i=function(){a.data=o=!o}}return function(n){var r={fn:n,next:void 0};t&&(t.next=r),e||(e=r,i()),t=r}}(),An=n.TypeError,_n=n.process,Cn=n.Promise,Pn="process"==Ce(_n),xn=function(){},Mn=vn=En.f,Ln=!!function(){try{var e=Cn.resolve(1),t=(e.constructor={})[ue("species")]=function(e){e(xn,xn)};return(Pn||"function"==typeof PromiseRejectionEvent)&&e.then(xn)instanceof t}catch(e){}}(),Nn=function(e){var t;return!(!r(e)||"function"!=typeof(t=e.then))&&t},On=function(e,t){if(!e._n){e._n=!0;var n=e._c;Tn(function(){for(var i=e._v,r=1==e._s,s=0,o=function(t){var n,s,o=r?t.ok:t.fail,a=t.resolve,l=t.reject,c=t.domain;try{o?(r||(2==e._h&&Fn(e),e._h=1),!0===o?n=i:(c&&c.enter(),n=o(i),c&&c.exit()),n===t.promise?l(An("Promise-chain cycle")):(s=Nn(n))?s.call(n,a,l):a(n)):l(i)}catch(e){l(e)}};n.length>s;)o(n[s++]);e._c=[],e._n=!1,t&&!e._h&&jn(e)})}},jn=function(e){Sn.call(n,function(){var t,i,r,s=e._v,o=In(e);if(o&&(t=kn(function(){Pn?_n.emit("unhandledRejection",s,e):(i=n.onunhandledrejection)?i({promise:e,reason:s}):(r=n.console)&&r.error&&r.error("Unhandled promise rejection",s)}),e._h=Pn||In(e)?2:1),e._a=void 0,o&&t.e)throw t.v})},In=function(e){return 1!==e._h&&0===(e._a||e._c).length},Fn=function(e){Sn.call(n,function(){var t;Pn?_n.emit("rejectionHandled",e):(t=n.onrejectionhandled)&&t({promise:e,reason:e._v})})},Rn=function(e){var t=this;t._d||(t._d=!0,(t=t._w||t)._v=e,t._s=2,t._a||(t._a=t._c.slice()),On(t,!0))},qn=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw An("Promise can't be resolved itself");(t=Nn(e))?Tn(function(){var i={_w:n,_d:!1};try{t.call(e,T(qn,i,1),T(Rn,i,1))}catch(e){Rn.call(i,e)}}):(n._v=e,n._s=1,On(n,!1))}catch(e){Rn.call({_w:n,_d:!1},e)}}};Ln||(Cn=function(e){F(this,Cn,"Promise","_h"),S(e),yn.call(this);try{e(T(qn,this,1),T(Rn,this,1))}catch(e){Rn.call(this,e)}},(yn=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=I(Cn.prototype,{then:function(e,t){var n=Mn(me(this,Cn));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=Pn?_n.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&On(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),bn=function(){var e=new yn;this.promise=e,this.resolve=T(qn,e,1),this.reject=T(Rn,e,1)},En.f=Mn=function(e){return e===Cn||e===wn?new bn(e):vn(e)}),C(C.G+C.W+C.F*!Ln,{Promise:Cn}),he(Cn,"Promise"),ve("Promise"),wn=i.Promise,C(C.S+C.F*!Ln,"Promise",{reject:function(e){var t=Mn(this);return(0,t.reject)(e),t.promise}}),C(C.S+C.F*!Ln,"Promise",{resolve:function(e){return function(e,t){if(s(e),r(t)&&t.constructor===e)return t;var n=En.f(e);return(0,n.resolve)(t),n.promise}(this,e)}}),C(C.S+C.F*!(Ln&&lt(function(e){Cn.all(e).catch(xn)})),"Promise",{all:function(e){var t=this,n=Mn(t),i=n.resolve,r=n.reject,s=kn(function(){var n=[],s=0,o=1;gt(e,!1,function(e){var a=s++,l=!1;n.push(void 0),o++,t.resolve(e).then(function(e){l||(l=!0,n[a]=e,--o||i(n))},r)}),--o||i(n)});return s.e&&r(s.v),n.promise},race:function(e){var t=this,n=Mn(t),i=n.reject,r=kn(function(){gt(e,!1,function(e){t.resolve(e).then(n.resolve,i)})});return r.e&&i(r.v),n.promise}});var Bn={f:ue},Vn=p.f,Dn=function(e){var t=i.Symbol||(i.Symbol=n.Symbol||{});"_"==e.charAt(0)||e in t||Vn(t,e,{value:Bn.f(e)})},Un=ae.f,Hn={}.toString,Wn="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],zn={f:function(e){return Wn&&"[object Window]"==Hn.call(e)?function(e){try{return Un(e)}catch(e){return Wn.slice()}}(e):Un(Y(e))}},Gn=mt.KEY,Yn=ft.f,Kn=p.f,Qn=zn.f,Jn=n.Symbol,$n=n.JSON,Xn=$n&&$n.stringify,Zn=ue("_hidden"),ei=ue("toPrimitive"),ti={}.propertyIsEnumerable,ni=Z("symbol-registry"),ii=Z("symbols"),ri=Z("op-symbols"),si=Object.prototype,oi="function"==typeof Jn,ai=n.QObject,li=!ai||!ai.prototype||!ai.prototype.findChild,ci=a&&o(function(){return 7!=Be(Kn({},"a",{get:function(){return Kn(this,"a",{value:7}).a}})).a})?function(e,t,n){var i=Yn(si,t);i&&delete si[t],Kn(e,t,n),i&&e!==si&&Kn(si,t,i)}:Kn,ui=function(e){var t=ii[e]=Be(Jn.prototype);return t._k=e,t},di=oi&&"symbol"==typeof Jn.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof Jn},fi=function(e,t,n){return e===si&&fi(ri,t,n),s(e),t=f(t,!0),s(n),v(ii,t)?(n.enumerable?(v(e,Zn)&&e[Zn][t]&&(e[Zn][t]=!1),n=Be(n,{enumerable:g(0,!1)})):(v(e,Zn)||Kn(e,Zn,g(1,{})),e[Zn][t]=!0),ci(e,t,n)):Kn(e,t,n)},hi=function(e,t){s(e);for(var n,i=function(e){var t=Ne(e),n=Ct.f;if(n)for(var i,r=n(e),s=ut.f,o=0;r.length>o;)s.call(e,i=r[o++])&&t.push(i);return t}(t=Y(t)),r=0,o=i.length;o>r;)fi(e,n=i[r++],t[n]);return e},pi=function(e){var t=ti.call(this,e=f(e,!0));return!(this===si&&v(ii,e)&&!v(ri,e))&&(!(t||!v(this,e)||!v(ii,e)||v(this,Zn)&&this[Zn][e])||t)},gi=function(e,t){if(e=Y(e),t=f(t,!0),e!==si||!v(ii,t)||v(ri,t)){var n=Yn(e,t);return!n||!v(ii,t)||v(e,Zn)&&e[Zn][t]||(n.enumerable=!0),n}},mi=function(e){for(var t,n=Qn(Y(e)),i=[],r=0;n.length>r;)v(ii,t=n[r++])||t==Zn||t==Gn||i.push(t);return i},yi=function(e){for(var t,n=e===si,i=Qn(n?ri:Y(e)),r=[],s=0;i.length>s;)!v(ii,t=i[s++])||n&&!v(si,t)||r.push(ii[t]);return r};oi||(k((Jn=function(){if(this instanceof Jn)throw TypeError("Symbol is not a constructor!");var e=E(arguments.length>0?arguments[0]:void 0),t=function(n){this===si&&t.call(ri,n),v(this,Zn)&&v(this[Zn],e)&&(this[Zn][e]=!1),ci(this,e,g(1,n))};return a&&li&&ci(si,e,{configurable:!0,set:t}),ui(e)}).prototype,"toString",function(){return this._k}),ft.f=gi,p.f=fi,ae.f=zn.f=mi,ut.f=pi,Ct.f=yi,a&&k(si,"propertyIsEnumerable",pi,!0),Bn.f=function(e){return ui(ue(e))}),C(C.G+C.W+C.F*!oi,{Symbol:Jn});for(var vi="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),bi=0;vi.length>bi;)ue(vi[bi++]);for(var wi=Ne(ue.store),Ei=0;wi.length>Ei;)Dn(wi[Ei++]);C(C.S+C.F*!oi,"Symbol",{for:function(e){return v(ni,e+="")?ni[e]:ni[e]=Jn(e)},keyFor:function(e){if(!di(e))throw TypeError(e+" is not a symbol!");for(var t in ni)if(ni[t]===e)return t},useSetter:function(){li=!0},useSimple:function(){li=!1}}),C(C.S+C.F*!oi,"Object",{create:function(e,t){return void 0===t?Be(e):hi(Be(e),t)},defineProperty:fi,defineProperties:hi,getOwnPropertyDescriptor:gi,getOwnPropertyNames:mi,getOwnPropertySymbols:yi}),$n&&C(C.S+C.F*(!oi||o(function(){var e=Jn();return"[null]"!=Xn([e])||"{}"!=Xn({a:e})||"{}"!=Xn(Object(e))})),"JSON",{stringify:function(e){for(var t,n,i=[e],s=1;arguments.length>s;)i.push(arguments[s++]);if(n=t=i[1],(r(t)||void 0!==e)&&!di(e))return ze(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!di(t))return t}),i[1]=t,Xn.apply($n,i)}}),Jn.prototype[ei]||m(Jn.prototype,ei,Jn.prototype.valueOf),he(Jn,"Symbol"),he(Math,"Math",!0),he(n.JSON,"JSON",!0);var ki=function(e,t){var n=(i.Object||{})[e]||Object[e],r={};r[e]=t(n),C(C.S+C.F*o(function(){n(1)}),"Object",r)},Si=mt.onFreeze;ki("freeze",function(e){return function(t){return e&&r(t)?e(Si(t)):t}});var Ti=mt.onFreeze;ki("seal",function(e){return function(t){return e&&r(t)?e(Ti(t)):t}});var Ai=mt.onFreeze;ki("preventExtensions",function(e){return function(t){return e&&r(t)?e(Ai(t)):t}}),ki("isFrozen",function(e){return function(t){return!r(t)||!!e&&e(t)}}),ki("isSealed",function(e){return function(t){return!r(t)||!!e&&e(t)}}),ki("isExtensible",function(e){return function(t){return!!r(t)&&(!e||e(t))}});var _i=ft.f;ki("getOwnPropertyDescriptor",function(){return function(e,t){return _i(Y(e),t)}}),ki("getPrototypeOf",function(){return function(e){return Ue(le(e))}}),ki("keys",function(){return function(e){return Ne(le(e))}}),ki("getOwnPropertyNames",function(){return zn.f}),C(C.S+C.F,"Object",{assign:xt});var Ci=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t};C(C.S,"Object",{is:Ci});var Pi=p.f,xi=Function.prototype,Mi=/^\s*function ([^ (]*)/;"name"in xi||a&&Pi(xi,"name",{configurable:!0,get:function(){try{return(""+this).match(Mi)[1]}catch(e){return""}}}),C(C.S,"String",{raw:function(e){for(var t=Y(e.raw),n=D(t.length),i=arguments.length,r=[],s=0;n>s;)r.push(String(t[s++])),s<i&&r.push(String(arguments[s]));return r.join("")}});var Li=String.fromCharCode,Ni=String.fromCodePoint;C(C.S+C.F*(!!Ni&&1!=Ni.length),"String",{fromCodePoint:function(e){for(var t,n=[],i=arguments.length,r=0;i>r;){if(t=+arguments[r++],J(t,1114111)!==t)throw RangeError(t+" is not a valid code point");n.push(t<65536?Li(t):Li(55296+((t-=65536)>>10),t%1024+56320))}return n.join("")}});var Oi,ji=(Oi=!1,function(e,t){var n,i,r=String(G(e)),s=B(t),o=r.length;return s<0||s>=o?Oi?"":void 0:(n=r.charCodeAt(s))<55296||n>56319||s+1===o||(i=r.charCodeAt(s+1))<56320||i>57343?Oi?r.charAt(s):n:Oi?r.slice(s,s+2):i-56320+(n-55296<<10)+65536});C(C.P,"String",{codePointAt:function(e){return ji(this,e)}});var Ii=function(e){var t=String(G(this)),n="",i=B(e);if(i<0||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(t+=t))1&i&&(n+=t);return n};C(C.P,"String",{repeat:Ii});var Fi=ue("match"),Ri=function(e){var t;return r(e)&&(void 0!==(t=e[Fi])?!!t:"RegExp"==W(e))},qi=function(e,t,n){if(Ri(t))throw TypeError("String#"+n+" doesn't accept regex!");return String(G(e))},Bi=ue("match"),Vi=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[Bi]=!1,!"/./"[e](t)}catch(e){}}return!0},Di="".startsWith;C(C.P+C.F*Vi("startsWith"),"String",{startsWith:function(e){var t=qi(this,e,"startsWith"),n=D(Math.min(arguments.length>1?arguments[1]:void 0,t.length)),i=String(e);return Di?Di.call(t,i,n):t.slice(n,n+i.length)===i}});var Ui="".endsWith;C(C.P+C.F*Vi("endsWith"),"String",{endsWith:function(e){var t=qi(this,e,"endsWith"),n=arguments.length>1?arguments[1]:void 0,i=D(t.length),r=void 0===n?i:Math.min(D(n),i),s=String(e);return Ui?Ui.call(t,s,r):t.slice(r-s.length,r)===s}});C(C.P+C.F*Vi("includes"),"String",{includes:function(e){return!!~qi(this,e,"includes").indexOf(e,arguments.length>1?arguments[1]:void 0)}});a&&"g"!=/./g.flags&&p.f(RegExp.prototype,"flags",{configurable:!0,get:function(){var e=s(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t}});var Hi=function(e,t,n){var i=ue(e),r=n(G,i,""[e]),s=r[0],a=r[1];o(function(){var t={};return t[i]=function(){return 7},7!=""[e](t)})&&(k(String.prototype,e,s),m(RegExp.prototype,i,2==t?function(e,t){return a.call(e,this,t)}:function(e){return a.call(e,this)}))};Hi("match",1,function(e,t,n){return[function(n){var i=e(this),r=void 0==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]}),Hi("replace",2,function(e,t,n){return[function(i,r){var s=e(this),o=void 0==i?void 0:i[t];return void 0!==o?o.call(i,s,r):n.call(String(s),i,r)},n]}),Hi("split",2,function(e,t,n){var i=Ri,r=n,s=[].push;if("c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length){var o=void 0===/()??/.exec("")[1];n=function(e,t){var n=String(this);if(void 0===e&&0===t)return[];if(!i(e))return r.call(n,e,t);var a,l,c,u,d,f=[],h=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),p=0,g=void 0===t?4294967295:t>>>0,m=new RegExp(e.source,h+"g");for(o||(a=new RegExp("^"+m.source+"$(?!\\s)",h));(l=m.exec(n))&&!((c=l.index+l[0].length)>p&&(f.push(n.slice(p,l.index)),!o&&l.length>1&&l[0].replace(a,function(){for(d=1;d<arguments.length-2;d++)void 0===arguments[d]&&(l[d]=void 0)}),l.length>1&&l.index<n.length&&s.apply(f,l.slice(1)),u=l[0].length,p=c,f.length>=g));)m.lastIndex===l.index&&m.lastIndex++;return p===n.length?!u&&m.test("")||f.push(""):f.push(n.slice(p)),f.length>g?f.slice(0,g):f}}else"0".split(void 0,0).length&&(n=function(e,t){return void 0===e&&0===t?[]:r.call(this,e,t)});return[function(i,r){var s=e(this),o=void 0==i?void 0:i[t];return void 0!==o?o.call(i,s,r):n.call(String(s),i,r)},n]}),Hi("search",1,function(e,t,n){return[function(n){var i=e(this),r=void 0==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]});var Wi=function(e,t,n){t in e?p.f(e,t,g(0,n)):e[t]=n};C(C.S+C.F*!lt(function(e){}),"Array",{from:function(e){var t,n,i,r,s=le(e),o="function"==typeof this?this:Array,a=arguments.length,l=a>1?arguments[1]:void 0,c=void 0!==l,u=0,d=We(s);if(c&&(l=T(l,a>2?arguments[2]:void 0,2)),void 0==d||o==Array&&Le(d))for(n=new o(t=D(s.length));t>u;u++)Wi(n,u,c?l(s[u],u):s[u]);else for(r=d.call(s),n=new o;!(i=r.next()).done;u++)Wi(n,u,c?pt(r,l,[i.value,u],!0):i.value);return n.length=u,n}}),C(C.S+C.F*o(function(){function e(){}return!(Array.of.call(e)instanceof e)}),"Array",{of:function(){for(var e=0,t=arguments.length,n=new("function"==typeof this?this:Array)(t);t>e;)Wi(n,e,arguments[e++]);return n.length=t,n}}),C(C.P,"Array",{copyWithin:ct}),$e("copyWithin");var zi=Ke(5),Gi=!0;"find"in[]&&Array(1).find(function(){Gi=!1}),C(C.P+C.F*Gi,"Array",{find:function(e){return zi(this,e,arguments.length>1?arguments[1]:void 0)}}),$e("find");var Yi=Ke(6),Ki=!0;"findIndex"in[]&&Array(1).findIndex(function(){Ki=!1}),C(C.P+C.F*Ki,"Array",{findIndex:function(e){return Yi(this,e,arguments.length>1?arguments[1]:void 0)}}),$e("findIndex"),C(C.P,"Array",{fill:ce}),$e("fill");var Qi=n.isFinite;C(C.S,"Number",{isFinite:function(e){return"number"==typeof e&&Qi(e)}});var Ji=Math.floor,$i=function(e){return!r(e)&&isFinite(e)&&Ji(e)===e};C(C.S,"Number",{isInteger:$i});var Xi=Math.abs;C(C.S,"Number",{isSafeInteger:function(e){return $i(e)&&Xi(e)<=9007199254740991}}),C(C.S,"Number",{isNaN:function(e){return e!=e}}),C(C.S,"Number",{EPSILON:Math.pow(2,-52)}),C(C.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991}),C(C.S,"Number",{MAX_SAFE_INTEGER:9007199254740991});var Zi=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:Math.log(1+e)},er=Math.sqrt,tr=Math.acosh;C(C.S+C.F*!(tr&&710==Math.floor(tr(Number.MAX_VALUE))&&tr(1/0)==1/0),"Math",{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?Math.log(e)+Math.LN2:Zi(e-1+er(e-1)*er(e+1))}});var nr=Math.asinh;C(C.S+C.F*!(nr&&1/nr(0)>0),"Math",{asinh:function e(t){return isFinite(t=+t)&&0!=t?t<0?-e(-t):Math.log(t+Math.sqrt(t*t+1)):t}});var ir=Math.atanh;C(C.S+C.F*!(ir&&1/ir(-0)<0),"Math",{atanh:function(e){return 0==(e=+e)?e:Math.log((1+e)/(1-e))/2}});var rr=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1};C(C.S,"Math",{cbrt:function(e){return rr(e=+e)*Math.pow(Math.abs(e),1/3)}}),C(C.S,"Math",{clz32:function(e){return(e>>>=0)?31-Math.floor(Math.log(e+.5)*Math.LOG2E):32}});var sr=Math.exp;C(C.S,"Math",{cosh:function(e){return(sr(e=+e)+sr(-e))/2}});var or=Math.expm1,ar=!or||or(10)>22025.465794806718||or(10)<22025.465794806718||-2e-17!=or(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:Math.exp(e)-1}:or;C(C.S+C.F*(ar!=Math.expm1),"Math",{expm1:ar});var lr=Math.pow,cr=lr(2,-52),ur=lr(2,-23),dr=lr(2,127)*(2-ur),fr=lr(2,-126),hr=Math.fround||function(e){var t,n,i=Math.abs(e),r=rr(e);return i<fr?r*(i/fr/ur+1/cr-1/cr)*fr*ur:(n=(t=(1+ur/cr)*i)-(t-i))>dr||n!=n?r*(1/0):r*n};C(C.S,"Math",{fround:hr});var pr=Math.abs;C(C.S,"Math",{hypot:function(e,t){for(var n,i,r=0,s=0,o=arguments.length,a=0;s<o;)a<(n=pr(arguments[s++]))?(r=r*(i=a/n)*i+1,a=n):r+=n>0?(i=n/a)*i:n;return a===1/0?1/0:a*Math.sqrt(r)}});var gr=Math.imul;C(C.S+C.F*o(function(){return-5!=gr(4294967295,5)||2!=gr.length}),"Math",{imul:function(e,t){var n=+e,i=+t,r=65535&n,s=65535&i;return 0|r*s+((65535&n>>>16)*s+r*(65535&i>>>16)<<16>>>0)}}),C(C.S,"Math",{log1p:Zi}),C(C.S,"Math",{log10:function(e){return Math.log(e)*Math.LOG10E}}),C(C.S,"Math",{log2:function(e){return Math.log(e)/Math.LN2}}),C(C.S,"Math",{sign:rr});var mr=Math.exp;C(C.S+C.F*o(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(e){return Math.abs(e=+e)<1?(ar(e)-ar(-e))/2:(mr(e-1)-mr(-e-1))*(Math.E/2)}});var yr=Math.exp;C(C.S,"Math",{tanh:function(e){var t=ar(e=+e),n=ar(-e);return t==1/0?1:n==1/0?-1:(t-n)/(yr(e)+yr(-e))}}),C(C.S,"Math",{trunc:function(e){return(e>0?Math.floor:Math.ceil)(e)}});var vr=$(!0);C(C.P,"Array",{includes:function(e){return vr(this,e,arguments.length>1?arguments[1]:void 0)}}),$e("includes");var br=ut.f,wr=function(e){return function(t){for(var n,i=Y(t),r=Ne(i),s=r.length,o=0,a=[];s>o;)br.call(i,n=r[o++])&&a.push(e?[n,i[n]]:i[n]);return a}},Er=wr(!1);C(C.S,"Object",{values:function(e){return Er(e)}});var kr=wr(!0);C(C.S,"Object",{entries:function(e){return kr(e)}}),C(C.S,"Object",{getOwnPropertyDescriptors:function(e){for(var t,n,i=Y(e),r=ft.f,s=Jt(i),o={},a=0;s.length>a;)void 0!==(n=r(i,t=s[a++]))&&Wi(o,t,n);return o}});var Sr=function(e,t,n,i){var r=String(G(e)),s=r.length,o=void 0===n?" ":String(n),a=D(t);if(a<=s||""==o)return r;var l=a-s,c=Ii.call(o,Math.ceil(l/o.length));return c.length>l&&(c=c.slice(0,l)),i?c+r:r+c},Tr=n.navigator,Ar=Tr&&Tr.userAgent||"";C(C.P+C.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(Ar),"String",{padStart:function(e){return Sr(this,e,arguments.length>1?arguments[1]:void 0,!0)}}),C(C.P+C.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(Ar),"String",{padEnd:function(e){return Sr(this,e,arguments.length>1?arguments[1]:void 0,!1)}});var _r=[].slice,Cr=/MSIE .\./.test(Ar),Pr=function(e){return function(t,n){var i=arguments.length>2,r=!!i&&_r.call(arguments,2);return e(i?function(){("function"==typeof t?t:Function(t)).apply(this,r)}:t,n)}};C(C.G+C.B+C.F*Cr,{setTimeout:Pr(n.setTimeout),setInterval:Pr(n.setInterval)}),C(C.G+C.B,{setImmediate:dn.set,clearImmediate:dn.clear});for(var xr=ue("iterator"),Mr=ue("toStringTag"),Lr=Pe.Array,Nr={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},Or=Ne(Nr),jr=0;jr<Or.length;jr++){var Ir,Fr=Or[jr],Rr=Nr[Fr],qr=n[Fr],Br=qr&&qr.prototype;if(Br&&(Br[xr]||m(Br,xr,Lr),Br[Mr]||m(Br,Mr,Fr),Pe[Fr]=Lr,Rr))for(Ir in st)Br[Ir]||k(Br,Ir,st[Ir],!0)}t(function(t){!function(e){var n,i=Object.prototype,r=i.hasOwnProperty,s="function"==typeof Symbol?Symbol:{},o=s.iterator||"@@iterator",a=s.asyncIterator||"@@asyncIterator",l=s.toStringTag||"@@toStringTag",c=e.regeneratorRuntime;if(c)t.exports=c;else{(c=e.regeneratorRuntime=t.exports).wrap=b;var u="suspendedStart",d="suspendedYield",f="executing",h="completed",p={},g={};g[o]=function(){return this};var m=Object.getPrototypeOf,y=m&&m(m(M([])));y&&y!==i&&r.call(y,o)&&(g=y);var v=S.prototype=E.prototype=Object.create(g);k.prototype=v.constructor=S,S.constructor=k,S[l]=k.displayName="GeneratorFunction",c.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===k||"GeneratorFunction"===(t.displayName||t.name))},c.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,S):(e.__proto__=S,l in e||(e[l]="GeneratorFunction")),e.prototype=Object.create(v),e},c.awrap=function(e){return{__await:e}},T(A.prototype),A.prototype[a]=function(){return this},c.AsyncIterator=A,c.async=function(e,t,n,i){var r=new A(b(e,t,n,i));return c.isGeneratorFunction(t)?r:r.next().then(function(e){return e.done?e.value:r.next()})},T(v),v[l]="Generator",v[o]=function(){return this},v.toString=function(){return"[object Generator]"},c.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var i=t.pop();if(i in e)return n.value=i,n.done=!1,n}return n.done=!0,n}},c.values=M,x.prototype={constructor:x,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=n,this.done=!1,this.delegate=null,this.method="next",this.arg=n,this.tryEntries.forEach(P),!e)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=n)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function i(i,r){return a.type="throw",a.arg=e,t.next=i,r&&(t.method="next",t.arg=n),!!r}for(var s=this.tryEntries.length-1;s>=0;--s){var o=this.tryEntries[s],a=o.completion;if("root"===o.tryLoc)return i("end");if(o.tryLoc<=this.prev){var l=r.call(o,"catchLoc"),c=r.call(o,"finallyLoc");if(l&&c){if(this.prev<o.catchLoc)return i(o.catchLoc,!0);if(this.prev<o.finallyLoc)return i(o.finallyLoc)}else if(l){if(this.prev<o.catchLoc)return i(o.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<o.finallyLoc)return i(o.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var s=i;break}}s&&("break"===e||"continue"===e)&&s.tryLoc<=t&&t<=s.finallyLoc&&(s=null);var o=s?s.completion:{};return o.type=e,o.arg=t,s?(this.method="next",this.next=s.finallyLoc,p):this.complete(o)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),p},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),P(n),p}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var i=n.completion;if("throw"===i.type){var r=i.arg;P(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,i){return this.delegate={iterator:M(e),resultName:t,nextLoc:i},"next"===this.method&&(this.arg=n),p}}}function b(e,t,n,i){var r=t&&t.prototype instanceof E?t:E,s=Object.create(r.prototype),o=new x(i||[]);return s._invoke=function(e,t,n){var i=u;return function(r,s){if(i===f)throw new Error("Generator is already running");if(i===h){if("throw"===r)throw s;return L()}for(n.method=r,n.arg=s;;){var o=n.delegate;if(o){var a=_(o,n);if(a){if(a===p)continue;return a}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(i===u)throw i=h,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);i=f;var l=w(e,t,n);if("normal"===l.type){if(i=n.done?h:d,l.arg===p)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(i=h,n.method="throw",n.arg=l.arg)}}}(e,n,o),s}function w(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}function E(){}function k(){}function S(){}function T(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function A(t){function n(e,i,s,o){var a=w(t[e],t,i);if("throw"!==a.type){var l=a.arg,c=l.value;return c&&"object"==typeof c&&r.call(c,"__await")?Promise.resolve(c.__await).then(function(e){n("next",e,s,o)},function(e){n("throw",e,s,o)}):Promise.resolve(c).then(function(e){l.value=e,s(l)},o)}o(a.arg)}var i;"object"==typeof e.process&&e.process.domain&&(n=e.process.domain.bind(n)),this._invoke=function(e,t){function r(){return new Promise(function(i,r){n(e,t,i,r)})}return i=i?i.then(r,r):r()}}function _(e,t){var i=e.iterator[t.method];if(i===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=n,_(e,t),"throw"===t.method))return p;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return p}var r=w(i,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,p;var s=r.arg;return s?s.done?(t[e.resultName]=s.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=n),t.delegate=null,p):s:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,p)}function C(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function P(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function x(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(C,this),this.reset(!0)}function M(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var i=-1,s=function t(){for(;++i<e.length;)if(r.call(e,i))return t.value=e[i],t.done=!1,t;return t.value=n,t.done=!0,t};return s.next=s}}return{next:L}}function L(){return{value:n,done:!0}}}("object"==typeof e?e:"object"==typeof window?window:"object"==typeof self?self:e)});try{var Vr=new window.CustomEvent("test");if(Vr.preventDefault(),!0!==Vr.defaultPrevented)throw new Error("Could not prevent default")}catch(e){var Dr=function(e,t){var n,i;return t=t||{bubbles:!1,cancelable:!1,detail:void 0},(n=document.createEvent("CustomEvent")).initCustomEvent(e,t.bubbles,t.cancelable,t.detail),i=n.preventDefault,n.preventDefault=function(){i.call(this);try{Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})}catch(e){this.defaultPrevented=!0}},n};Dr.prototype=window.Event.prototype,window.CustomEvent=Dr}var Ur,Hr=t(function(e,t){var n;n=function(){var e=function(){},t={},n={},i={};function r(e,t){if(e){var r=i[e];if(n[e]=t,r)for(;r.length;)r[0](e,t),r.splice(0,1)}}function s(t,n){t.call&&(t={success:t}),n.length?(t.error||e)(n):(t.success||e)(t)}function o(t,n,i,r){var s,a,l=document,c=i.async,u=(i.numRetries||0)+1,d=i.before||e,f=t.replace(/^(css|img)!/,"");r=r||0,/(^css!|\.css$)/.test(t)?(s=!0,(a=l.createElement("link")).rel="stylesheet",a.href=f):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(a=l.createElement("img")).src=f:((a=l.createElement("script")).src=t,a.async=void 0===c||c),a.onload=a.onerror=a.onbeforeload=function(e){var l=e.type[0];if(s&&"hideFocus"in a)try{a.sheet.cssText.length||(l="e")}catch(e){l="e"}if("e"==l&&(r+=1)<u)return o(t,n,i,r);n(t,l,e.defaultPrevented)},!1!==d(t,a)&&l.head.appendChild(a)}function a(e,n,i){var a,l;if(n&&n.trim&&(a=n),l=(a?i:n)||{},a){if(a in t)throw"LoadJS";t[a]=!0}!function(e,t,n){var i,r,s=(e=e.push?e:[e]).length,a=s,l=[];for(i=function(e,n,i){if("e"==n&&l.push(e),"b"==n){if(!i)return;l.push(e)}--s||t(l)},r=0;r<a;r++)o(e[r],i,n)}(e,function(e){s(l,e),r(a,e)},l)}return a.ready=function(e,t){return function(e,t){var r,s,o,a=[],l=(e=e.push?e:[e]).length,c=l;for(r=function(e,n){n.length&&a.push(e),--c||t(a)};l--;)s=e[l],(o=n[s])?r(s,o):(i[s]=i[s]||[]).push(r)}(e,function(e){s(t,e)}),a},a.done=function(e){r(e,[])},a.reset=function(){t={},n={},i={}},a.isDefined=function(e){return e in t},a},e.exports=n()}),Wr=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},zr=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),Gr=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},Yr=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],i=!0,r=!1,s=void 0;try{for(var o,a=e[Symbol.iterator]();!(i=(o=a.next()).done)&&(n.push(o.value),!t||n.length!==t);i=!0);}catch(e){r=!0,s=e}finally{try{!i&&a.return&&a.return()}finally{if(r)throw s}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Kr=function(){function e(t){Wr(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return zr(e,[{key:"get",value:function(t){if(!e.supported)return null;var n=window.localStorage.getItem(this.key);if($r.is.empty(n))return null;var i=JSON.parse(n);return $r.is.string(t)&&t.length?i[t]:i}},{key:"set",value:function(t){if(e.supported&&this.enabled&&$r.is.object(t)){var n=this.get();$r.is.empty(n)&&(n={}),$r.extend(n,t),window.localStorage.setItem(this.key,JSON.stringify(n))}}}],[{key:"supported",get:function(){try{if(!("localStorage"in window))return!1;return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}(),Qr={html5:"html5",youtube:"youtube",vimeo:"vimeo"},Jr={audio:"audio",video:"video"},$r={is:{object:function(e){return this.getConstructor(e)===Object},number:function(e){return this.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return this.getConstructor(e)===String},boolean:function(e){return this.getConstructor(e)===Boolean},function:function(e){return this.getConstructor(e)===Function},array:function(e){return!this.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return this.instanceof(e,WeakMap)},nodeList:function(e){return this.instanceof(e,NodeList)},element:function(e){return this.instanceof(e,Element)},textNode:function(e){return this.getConstructor(e)===Text},event:function(e){return this.instanceof(e,Event)},cue:function(e){return this.instanceof(e,TextTrackCue)||this.instanceof(e,VTTCue)},track:function(e){return this.instanceof(e,TextTrack)||!this.nullOrUndefined(e)&&this.string(e.kind)},url:function(e){return!this.nullOrUndefined(e)&&/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e)},nullOrUndefined:function(e){return null===e||void 0===e},empty:function(e){return this.nullOrUndefined(e)||(this.string(e)||this.array(e)||this.nodeList(e))&&!e.length||this.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)},getConstructor:function(e){return this.nullOrUndefined(e)?null:e.constructor}},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(n,i){try{var r=new XMLHttpRequest;if(!("withCredentials"in r))return;r.addEventListener("load",function(){if("text"===t)try{n(JSON.parse(r.responseText))}catch(e){n(r.responseText)}else n(r.response)}),r.addEventListener("error",function(){throw new Error(r.statusText)}),r.open("GET",e,!0),r.responseType=t,r.send()}catch(e){i(e)}})},loadScript:function(e){return new Promise(function(t,n){Hr(e,{success:t,error:n})})},loadSprite:function(e,t){if($r.is.string(e)){var n=$r.is.string(t),i=function(){return document.querySelectorAll("#"+t).length};if(!n||!i()){var r=Kr.supported,s=document.createElement("div");if($r.toggleHidden(s,!0),n&&s.setAttribute("id",t),r){var o=window.localStorage.getItem("cache-"+t);if(null!==o){var a=JSON.parse(o);return void l.call(s,a.content)}}$r.fetch(e).then(function(e){$r.is.empty(e)||(r&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),l.call(s,e))}).catch(function(){})}}function l(e){n&&i()||(this.innerHTML=e,document.body.insertBefore(this,document.body.childNodes[0]))}},generateId:function(e){return e+"-"+Math.floor(1e4*Math.random())},wrap:function(e,t){var n=e.length?e:[e];Array.from(n).reverse().forEach(function(e,n){var i=n>0?t.cloneNode(!0):t,r=e.parentNode,s=e.nextSibling;i.appendChild(e),s?r.insertBefore(i,s):r.appendChild(i)})},createElement:function(e,t,n){var i=document.createElement(e);return $r.is.object(t)&&$r.setAttributes(i,t),$r.is.string(n)&&(i.textContent=n),i},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,n,i){t.appendChild($r.createElement(e,n,i))},removeElement:function(e){$r.is.nodeList(e)||$r.is.array(e)?Array.from(e).forEach($r.removeElement):$r.is.element(e)&&$r.is.element(e.parentNode)&&e.parentNode.removeChild(e)},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return $r.is.element(t)&&$r.is.element(t.parentNode)&&$r.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){$r.is.element(e)&&!$r.is.empty(t)&&Object.entries(t).forEach(function(t){var n=Yr(t,2),i=n[0],r=n[1];e.setAttribute(i,r)})},getAttributesFromSelector:function(e,t){if(!$r.is.string(e)||$r.is.empty(e))return{};var n={},i=t;return e.split(",").forEach(function(e){var t=e.trim(),r=t.replace(".",""),s=t.replace(/[[\]]/g,"").split("="),o=s[0],a=s.length>1?s[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":$r.is.object(i)&&$r.is.string(i.class)&&(i.class+=" "+r),n.class=r;break;case"#":n.id=t.replace("#","");break;case"[":n[o]=a}}),n},toggleHidden:function(e,t){if($r.is.element(e)){var n=t;$r.is.boolean(n)||(n=!e.hasAttribute("hidden")),n?e.setAttribute("hidden",""):e.removeAttribute("hidden")}},toggleClass:function(e,t,n){if($r.is.element(e)){var i=e.classList.contains(t);return e.classList[n?"add":"remove"](t),n&&!i||!n&&i}return null},hasClass:function(e,t){return $r.is.element(e)&&e.classList.contains(t)},matches:function(e,t){var n={Element:Element};var i=n.matches||n.webkitMatchesSelector||n.mozMatchesSelector||n.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return i.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if($r.is.element(e)){var n=$r.getElements.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),i=n[0],r=n[n.length-1],s=function(e){if("Tab"===e.key&&9===e.keyCode){var t=$r.getFocusElement();t!==r||e.shiftKey?t===i&&e.shiftKey&&(r.focus(),e.preventDefault()):(i.focus(),e.preventDefault())}};t?$r.on(this.elements.container,"keydown",s,!1):$r.off(this.elements.container,"keydown",s,!1)}},toggleListener:function(e,t,n){var i=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],s=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(!$r.is.empty(e)&&!$r.is.empty(t)&&$r.is.function(n))if($r.is.nodeList(e)||$r.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&$r.toggleListener.call(null,e,t,n,i,r,s)});else{var o=t.split(" "),a=s;Xr.passiveListeners&&(a={passive:r,capture:s}),o.forEach(function(t){e[i?"addEventListener":"removeEventListener"](t,n,a)})}},on:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments[2],i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];$r.toggleListener(e,t,n,!0,i,r)},off:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments[2],i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];$r.toggleListener(e,t,n,!1,i,r)},dispatchEvent:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if($r.is.element(e)&&!$r.is.empty(t)){var r=new CustomEvent(t,{bubbles:n,detail:Object.assign({},i,{plyr:this})});e.dispatchEvent(r)}},toggleState:function(e,t){if($r.is.array(e)||$r.is.nodeList(e))Array.from(e).forEach(function(e){return $r.toggleState(e,t)});else if($r.is.element(e)){var n="true"===e.getAttribute("aria-pressed"),i=$r.is.boolean(t)?t:!n;e.setAttribute("aria-pressed",i)}},format:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];return $r.is.empty(e)?e:e.toString().replace(/{(\d+)}/g,function(e,t){return $r.is.string(n[t])?n[t]:""})},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!$r.is.number(e))return this.formatTime(null,t,n);var i=function(e){return("0"+e).slice(-2)},r=this.getHours(e),s=this.getMinutes(e),o=this.getSeconds(e);return t||r>0?r+=":":r="",(n?"-":"")+r+i(s)+":"+i(o)},replaceAll:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1"),"g"),n.toString())},toTitleCase:function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString().replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})},toPascalCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=$r.replaceAll(e,"-"," "),e=$r.replaceAll(e,"_"," "),e=$r.toTitleCase(e),$r.replaceAll(e," ","")},toCamelCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=$r.toPascalCase(e)).charAt(0).toLowerCase()+e.slice(1)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];if(!n.length)return e;var r=n.shift();return $r.is.object(r)?(Object.keys(r).forEach(function(t){$r.is.object(r[t])?(Object.keys(e).includes(t)||Object.assign(e,Gr({},t,{})),$r.extend(e[t],r[t])):Object.assign(e,Gr({},t,r[t]))}),$r.extend.apply($r,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(n)))):e},dedupe:function(e){return $r.is.array(e)?e.filter(function(t,n){return e.indexOf(t)===n}):e},closest:function(e,t){return $r.is.array(e)&&e.length?e.reduce(function(e,n){return Math.abs(n-t)<Math.abs(e-t)?n:e}):null},getProviderByUrl:function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?Qr.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{0,9}(?=\b|\/)/.test(e)?Qr.vimeo:null},parseYouTubeId:function(e){if($r.is.empty(e))return null;return e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if($r.is.empty(e))return null;if($r.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement("a");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith("http://")||e.startsWith("https://"))&&(t=this.parseUrl(e).search);return this.is.empty(t)?null:t.slice(t.indexOf("?")+1).split("&").reduce(function(e,t){var n=t.split("="),i=Yr(n,2),r=i[0],s=i[1];return Object.assign(e,Gr({},r,decodeURIComponent(s)))},{})},buildUrlParams:function(e){return $r.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&"):""},stripHTML:function(e){var t=document.createDocumentFragment(),n=document.createElement("div");return t.appendChild(n),n.innerHTML=e,t.firstChild.innerText},getAspectRatio:function(e,t){var n=function e(t,n){return 0===n?t:e(n,t%n)}(e,t);return e/n+":"+t/n},get transitionEndEvent(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!$r.is.string(n)&&t[n]},repaint:function(e){setTimeout(function(){$r.toggleHidden(e,!0),e.offsetHeight,$r.toggleHidden(e,!1)},0)}},Xr={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,n){var i=!1,r=!1,s=$r.getBrowser(),o=s.isIPhone&&n&&Xr.playsinline;switch(t+":"+e){case"html5:video":r=(i=Xr.video)&&Xr.rangeInput&&(!s.isIPhone||o);break;case"html5:audio":r=(i=Xr.audio)&&Xr.rangeInput;break;case"youtube:video":case"vimeo:video":i=!0,r=Xr.rangeInput&&(!s.isIPhone||o);break;default:r=(i=Xr.audio&&Xr.video)&&Xr.rangeInput}return{api:i,ui:r}},pip:!$r.getBrowser().isIPhone&&$r.is.function($r.createElement("video").webkitSetPresentationMode),airplay:$r.is.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!$r.is.function(t.canPlayType))return!1;if(e.includes("codecs="))return t.canPlayType(e).replace(/no/,"");if(this.isVideo)switch(e){case"video/webm":return t.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return t.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return t.canPlayType('video/ogg; codecs="theora"').replace(/no/,"");default:return!1}else if(this.isAudio)switch(e){case"audio/mpeg":return t.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return t.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return t.canPlayType('audio/wav; codecs="1"').replace(/no/,"");default:return!1}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch(e){}return e}(),rangeInput:(Ur=document.createElement("input"),Ur.type="range","range"===Ur.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==$r.transitionEndEvent,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},Zr={getSources:function(){return this.isHTML5?this.media.querySelectorAll("source"):null},getQualityOptions:function(){if(!this.isHTML5)return null;var e=Zr.getSources.call(this);if($r.is.empty(e))return null;var t=Array.from(e).filter(function(e){return!$r.is.empty(e.getAttribute("size"))});return $r.is.empty(t)?null:$r.dedupe(t.map(function(e){return Number(e.getAttribute("size"))}))},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,"quality",{get:function(){var t=Zr.getSources.call(e);if($r.is.empty(t))return null;var n=Array.from(t).filter(function(t){return t.getAttribute("src")===e.source});return $r.is.empty(n)?null:Number(n[0].getAttribute("size"))},set:function(t){var n=Zr.getSources.call(e);if(!$r.is.empty(n)){var i=Array.from(n).filter(function(e){return Number(e.getAttribute("size"))===t});if(!$r.is.empty(i)){var r=i.filter(function(t){return Xr.mime.call(e,t.getAttribute("type"))});if(!$r.is.empty(r)){$r.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:t});var s=e.currentTime,o=e.playing;e.media.src=r[0].getAttribute("src"),e.media.load(),o&&e.play(),e.currentTime=s,$r.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:t})}}}}})}},cancelRequests:function(){this.isHTML5&&($r.removeElement(Zr.getSources()),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}},es=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if($r.is.empty(e)||$r.is.empty(t)||!Object.keys(t.i18n).includes(e))return"";var n=t.i18n[e],i={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(i).forEach(function(e){var t=Yr(e,2),i=t[0],r=t[1];n=$r.replaceAll(n,i,r)}),n},ts=$r.getBrowser(),ns={getIconUrl:function(){var e=new URL(this.config.iconUrl,window.location).host!==window.location.host||ts.isIE&&!window.svg4everybody;return{url:this.config.iconUrl,cors:e}},findElements:function(){try{return this.elements.controls=$r.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:$r.getElements.call(this,this.config.selectors.buttons.play),pause:$r.getElement.call(this,this.config.selectors.buttons.pause),restart:$r.getElement.call(this,this.config.selectors.buttons.restart),rewind:$r.getElement.call(this,this.config.selectors.buttons.rewind),fastForward:$r.getElement.call(this,this.config.selectors.buttons.fastForward),mute:$r.getElement.call(this,this.config.selectors.buttons.mute),pip:$r.getElement.call(this,this.config.selectors.buttons.pip),airplay:$r.getElement.call(this,this.config.selectors.buttons.airplay),settings:$r.getElement.call(this,this.config.selectors.buttons.settings),captions:$r.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:$r.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=$r.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:$r.getElement.call(this,this.config.selectors.inputs.seek),volume:$r.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:$r.getElement.call(this,this.config.selectors.display.buffer),currentTime:$r.getElement.call(this,this.config.selectors.display.currentTime),duration:$r.getElement.call(this,this.config.selectors.display.duration)},$r.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},createIcon:function(e,t){var n=ns.getIconUrl.call(this),i=(n.cors?"":n.url)+"#"+this.config.iconPrefix,r=document.createElementNS("http://www.w3.org/2000/svg","svg");$r.setAttributes(r,$r.extend(t,{role:"presentation",focusable:"false"}));var s=document.createElementNS("http://www.w3.org/2000/svg","use"),o=i+"-"+e;return"href"in s?s.setAttributeNS("http://www.w3.org/1999/xlink","href",o):s.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",o),r.appendChild(s),r},createLabel:function(e,t){var n=es(e,this.config),i=Object.assign({},t);switch(e){case"pip":n="PIP";break;case"airplay":n="AirPlay"}return"class"in i?i.class+=" "+this.config.classNames.hidden:i.class=this.config.classNames.hidden,$r.createElement("span",i,n)},createBadge:function(e){if($r.is.empty(e))return null;var t=$r.createElement("span",{class:this.config.classNames.menu.value});return t.appendChild($r.createElement("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var n=$r.createElement("button"),i=Object.assign({},t),r=$r.toCamelCase(e),s=!1,o=void 0,a=void 0,l=void 0,c=void 0;switch("type"in i||(i.type="button"),"class"in i?i.class.includes(this.config.classNames.control)&&(i.class+=" "+this.config.classNames.control):i.class=this.config.classNames.control,e){case"play":s=!0,o="play",l="pause",a="play",c="pause";break;case"mute":s=!0,o="mute",l="unmute",a="volume",c="muted";break;case"captions":s=!0,o="enableCaptions",l="disableCaptions",a="captions-off",c="captions-on";break;case"fullscreen":s=!0,o="enterFullscreen",l="exitFullscreen",a="enter-fullscreen",c="exit-fullscreen";break;case"play-large":i.class+=" "+this.config.classNames.control+"--overlaid",r="play",o="play",a="play";break;default:o=r,a=e}return s?(n.appendChild(ns.createIcon.call(this,c,{class:"icon--pressed"})),n.appendChild(ns.createIcon.call(this,a,{class:"icon--not-pressed"})),n.appendChild(ns.createLabel.call(this,l,{class:"label--pressed"})),n.appendChild(ns.createLabel.call(this,o,{class:"label--not-pressed"})),i["aria-pressed"]=!1):(n.appendChild(ns.createIcon.call(this,a)),n.appendChild(ns.createLabel.call(this,o))),$r.extend(i,$r.getAttributesFromSelector(this.config.selectors.buttons[r],i)),$r.setAttributes(n,i),"play"===r?($r.is.array(this.elements.buttons[r])||(this.elements.buttons[r]=[]),this.elements.buttons[r].push(n)):this.elements.buttons[r]=n,n},createRange:function(e,t){var n=$r.createElement("label",{for:t.id,id:t.id+"-label",class:this.config.classNames.hidden},es(e,this.config)),i=$r.createElement("input",$r.extend($r.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-labelledby":t.id+"-label","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=i,ns.updateRangeFill.call(this,i),{label:n,input:i}},createProgress:function(e,t){var n=$r.createElement("progress",$r.extend($r.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"presentation","aria-hidden":!0},t));if("volume"!==e){n.appendChild($r.createElement("span",null,"0"));var i="";switch(e){case"played":i=es("played",this.config);break;case"buffer":i=es("buffered",this.config)}n.textContent="% "+i.toLowerCase()}return this.elements.display[e]=n,n},createTime:function(e){var t=$r.getAttributesFromSelector(this.config.selectors.display[e]),n=$r.createElement("div",$r.extend(t,{class:"plyr__time "+t.class,"aria-label":es(e,this.config)}),"00:00");return this.elements.display[e]=n,n},createMenuItem:function(e,t,n,i){var r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,s=arguments.length>5&&void 0!==arguments[5]&&arguments[5],o=$r.createElement("li"),a=$r.createElement("label",{class:this.config.classNames.control}),l=$r.createElement("input",$r.extend($r.getAttributesFromSelector(this.config.selectors.inputs[n]),{type:"radio",name:"plyr-"+n,value:e,checked:s,class:"plyr__sr-only"})),c=$r.createElement("span",{hidden:""});a.appendChild(l),a.appendChild(c),a.insertAdjacentHTML("beforeend",i),$r.is.element(r)&&a.appendChild(r),o.appendChild(a),t.appendChild(o)},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if($r.is.element(e)&&$r.is.number(t)){var i=$r.getHours(this.duration)>0;e.textContent=$r.formatTime(t,i,n)}},updateVolume:function(){this.supported.ui&&($r.is.element(this.elements.inputs.volume)&&ns.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),$r.is.element(this.elements.buttons.mute)&&$r.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;$r.is.element(e)&&(e.value=t,ns.updateRangeFill.call(this,e))},updateProgress:function(e){var t=this;if(this.supported.ui&&$r.is.event(e)){var n=0;if(e)switch(e.type){case"timeupdate":case"seeking":n=$r.getPercentage(this.currentTime,this.duration),"timeupdate"===e.type&&ns.setRange.call(this,this.elements.inputs.seek,n);break;case"playing":case"progress":!function(e,n){var i=$r.is.number(n)?n:0,r=$r.is.element(e)?e:t.elements.display.buffer;if($r.is.element(r)){r.value=i;var s=r.getElementsByTagName("span")[0];$r.is.element(s)&&(s.childNodes[0].nodeValue=i)}}(this.elements.display.buffer,100*this.buffered)}}},updateRangeFill:function(e){var t=$r.is.event(e)?e.target:e;$r.is.element(t)&&"range"===t.getAttribute("type")&&(t.setAttribute("aria-valuenow",t.value),ts.isWebkit&&t.style.setProperty("--value",t.value/t.max*100+"%"))},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&$r.is.element(this.elements.inputs.seek)&&$r.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var n=0,i=this.elements.inputs.seek.getBoundingClientRect(),r=this.config.classNames.tooltip+"--visible",s=function(e){$r.toggleClass(t.elements.display.seekTooltip,r,e)};if(this.touch)s(!1);else{if($r.is.event(e))n=100/i.width*(e.pageX-i.left);else{if(!$r.hasClass(this.elements.display.seekTooltip,r))return;n=parseFloat(this.elements.display.seekTooltip.style.left,10)}n<0?n=0:n>100&&(n=100),ns.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*n),this.elements.display.seekTooltip.style.left=n+"%",$r.is.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&s("mouseenter"===e.type)}}},timeUpdate:function(e){var t=!$r.is.element(this.elements.display.duration)&&this.config.invertTime;ns.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||ns.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui){var e=$r.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&ns.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&ns.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),ns.updateSeekTooltip.call(this)}},toggleTab:function(e,t){$r.toggleHidden(this.elements.settings.tabs[e],!t)},setQualityMenu:function(e){var t=this;if($r.is.element(this.elements.settings.panes.quality)){var n=this.elements.settings.panes.quality.querySelector("ul");$r.is.array(e)&&(this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}));var i=!$r.is.empty(this.options.quality)&&this.options.quality.length>1;if(ns.toggleTab.call(this,"quality",i),ns.checkMenu.call(this),i){$r.emptyElement(n);this.options.quality.sort(function(e,n){var i=t.config.quality.options;return i.indexOf(e)>i.indexOf(n)?1:-1}).forEach(function(e){var i=ns.getLabel.call(t,"quality",e);ns.createMenuItem.call(t,e,n,"quality",i,function(e){var n="";switch(e){case 2160:n="4K";break;case 1440:case 1080:case 720:n="HD";break;case 576:case 480:n="SD"}return n.length?ns.createBadge.call(t,n):null}(e))}),ns.updateSetting.call(this,"quality",n)}}},getLabel:function(e,t){switch(e){case"speed":return 1===t?es("normal",this.config):t+"&times;";case"quality":return $r.is.number(t)?t+"p":$r.toTitleCase(t);case"captions":return is.getLabel.call(this);default:return null}},updateSetting:function(e,t,n){var i=this.elements.settings.panes[e],r=null,s=t;switch(e){case"captions":r=this.captions.active?this.options.captions.length>2||!this.options.captions.some(function(e){return"enabled"===e})?this.captions.language:"enabled":"";break;default:if(r=$r.is.empty(n)?this[e]:n,$r.is.empty(r)&&(r=this.config[e].default),!$r.is.empty(this.options[e])&&!this.options[e].includes(r))return void this.debug.warn("Unsupported value of '"+r+"' for "+e);if(!this.config[e].options.includes(r))return void this.debug.warn("Disabled value of '"+r+"' for "+e)}if($r.is.element(s)||(s=i&&i.querySelector("ul")),$r.is.element(s)){this.elements.settings.tabs[e].querySelector("."+this.config.classNames.menu.value).innerHTML=ns.getLabel.call(this,e,r);var o=s&&s.querySelector('input[value="'+r+'"]');$r.is.element(o)&&(o.checked=!0)}},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector("ul"),n=is.getTracks.call(this).length;if(ns.toggleTab.call(this,"captions",n),$r.emptyElement(t),ns.checkMenu.call(this),n){var i=is.getTracks.call(this).map(function(t){return{language:$r.is.empty(t.language)?"enabled":t.language,label:is.getLabel.call(e,t)}});i.unshift({language:"",label:es("disabled",this.config)}),i.forEach(function(n){ns.createMenuItem.call(e,n.language,t,"language",n.label,"enabled"!==n.language?ns.createBadge.call(e,n.language.toUpperCase()):null,n.language.toLowerCase()===e.captions.language.toLowerCase())}),this.options.captions=i.map(function(e){return e.language}),ns.updateSetting.call(this,"captions",t)}},setSpeedMenu:function(e){var t=this;if(this.config.controls.includes("settings")&&this.config.settings.includes("speed")&&$r.is.element(this.elements.settings.panes.speed)){$r.is.array(e)?this.options.speed=e:(this.isHTML5||this.isVimeo)&&(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(e){return t.config.speed.options.includes(e)});var n=!$r.is.empty(this.options.speed)&&this.options.speed.length>1;if(ns.toggleTab.call(this,"speed",n),ns.checkMenu.call(this),n){var i=this.elements.settings.panes.speed.querySelector("ul");$r.emptyElement(i),this.options.speed.forEach(function(e){var n=ns.getLabel.call(t,"speed",e);ns.createMenuItem.call(t,e,i,"speed",n)}),ns.updateSetting.call(this,"speed",i)}}},checkMenu:function(){var e=this.elements.settings.tabs,t=!$r.is.empty(e)&&Object.values(e).some(function(e){return!e.hidden});$r.toggleHidden(this.elements.settings.menu,!t)},toggleMenu:function(e){var t=this.elements.settings.form,n=this.elements.buttons.settings;if($r.is.element(t)&&$r.is.element(n)){var i=$r.is.boolean(e)?e:$r.is.element(t)&&t.hasAttribute("hidden");if($r.is.event(e)){var r=$r.is.element(t)&&t.contains(e.target),s=e.target===this.elements.buttons.settings;if(r||!r&&!s&&i)return;s&&e.stopPropagation()}$r.is.element(n)&&n.setAttribute("aria-expanded",i),$r.is.element(t)&&($r.toggleHidden(t,!i),$r.toggleClass(this.elements.container,this.config.classNames.menu.open,i),i?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1))}},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.removeAttribute("hidden"),Array.from(t.querySelectorAll("input[name]")).forEach(function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(t);var n=t.scrollWidth,i=t.scrollHeight;return $r.removeElement(t),{width:n,height:i}},showTab:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=this.elements.settings.menu,n=document.getElementById(e);if($r.is.element(n)&&"tabpanel"===n.getAttribute("role")){var i=t.querySelector('[role="tabpanel"]:not([hidden])'),r=i.parentNode;if(Array.from(t.querySelectorAll('[aria-controls="'+i.getAttribute("id")+'"]')).forEach(function(e){e.setAttribute("aria-expanded",!1)}),Xr.transitions&&!Xr.reducedMotion){r.style.width=i.scrollWidth+"px",r.style.height=i.scrollHeight+"px";var s=ns.getTabSize.call(this,n);$r.on(r,$r.transitionEndEvent,function e(t){t.target===r&&["width","height"].includes(t.propertyName)&&(r.style.width="",r.style.height="",$r.off(r,$r.transitionEndEvent,e))}),r.style.width=s.width+"px",r.style.height=s.height+"px"}$r.toggleHidden(i,!0),i.setAttribute("tabindex",-1),$r.toggleHidden(n,!1);var o=$r.getElements.call(this,'[aria-controls="'+e+'"]');Array.from(o).forEach(function(e){e.setAttribute("aria-expanded",!0)}),n.removeAttribute("tabindex"),n.querySelectorAll("button:not(:disabled), input:not(:disabled), [tabindex]")[0].focus()}},create:function(e){var t=this;if($r.is.empty(this.config.controls))return null;var n=$r.createElement("div",$r.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&n.appendChild(ns.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&n.appendChild(ns.createButton.call(this,"rewind")),this.config.controls.includes("play")&&n.appendChild(ns.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&n.appendChild(ns.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var i=$r.createElement("div",$r.getAttributesFromSelector(this.config.selectors.progress)),r=ns.createRange.call(this,"seek",{id:"plyr-seek-"+e.id});if(i.appendChild(r.label),i.appendChild(r.input),i.appendChild(ns.createProgress.call(this,"buffer")),this.config.tooltips.seek){var s=$r.createElement("span",{role:"tooltip",class:this.config.classNames.tooltip},"00:00");i.appendChild(s),this.elements.display.seekTooltip=s}this.elements.progress=i,n.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&n.appendChild(ns.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&n.appendChild(ns.createTime.call(this,"duration")),this.config.controls.includes("mute")&&n.appendChild(ns.createButton.call(this,"mute")),this.config.controls.includes("volume")){var o=$r.createElement("div",{class:"plyr__volume"}),a={max:1,step:.05,value:this.config.volume},l=ns.createRange.call(this,"volume",$r.extend(a,{id:"plyr-volume-"+e.id}));o.appendChild(l.label),o.appendChild(l.input),this.elements.volume=o,n.appendChild(o)}if(this.config.controls.includes("captions")&&n.appendChild(ns.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!$r.is.empty(this.config.settings)){var c=$r.createElement("div",{class:"plyr__menu",hidden:""});c.appendChild(ns.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var u=$r.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,hidden:"","aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),d=$r.createElement("div"),f=$r.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),h=$r.createElement("ul",{role:"tablist"});this.config.settings.forEach(function(n){var i=$r.createElement("li",{role:"tab",hidden:""}),r=$r.createElement("button",$r.extend($r.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+n+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+n,"aria-expanded":!1}),es(n,t.config)),s=$r.createElement("span",{class:t.config.classNames.menu.value});s.innerHTML=e[n],r.appendChild(s),i.appendChild(r),h.appendChild(i),t.elements.settings.tabs[n]=i}),f.appendChild(h),d.appendChild(f),this.config.settings.forEach(function(n){var i=$r.createElement("div",{id:"plyr-settings-"+e.id+"-"+n,hidden:"","aria-labelled-by":"plyr-settings-"+e.id+"-"+n+"-tab",role:"tabpanel",tabindex:-1}),r=$r.createElement("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},es(n,t.config));i.appendChild(r);var s=$r.createElement("ul");i.appendChild(s),d.appendChild(i),t.elements.settings.panes[n]=i}),u.appendChild(d),c.appendChild(u),n.appendChild(c),this.elements.settings.form=u,this.elements.settings.menu=c}return this.config.controls.includes("pip")&&Xr.pip&&n.appendChild(ns.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&Xr.airplay&&n.appendChild(ns.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&n.appendChild(ns.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(ns.createButton.call(this,"play-large")),this.elements.controls=n,this.isHTML5&&ns.setQualityMenu.call(this,Zr.getQualityOptions.call(this)),ns.setSpeedMenu.call(this),n},inject:function(){var e=this;if(this.config.loadSprite){var t=ns.getIconUrl.call(this);t.cors&&$r.loadSprite(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var n=null;this.elements.controls=null;var i={id:this.id,seektime:this.config.seekTime,title:this.config.title},r=!0;$r.is.string(this.config.controls)||$r.is.element(this.config.controls)?n=this.config.controls:$r.is.function(this.config.controls)?n=this.config.controls.call(this,i):(n=ns.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:is.getLabel.call(this)}),r=!1);var s=function(e){var t=e;return Object.entries(i).forEach(function(e){var n=Yr(e,2),i=n[0],r=n[1];t=$r.replaceAll(t,"{"+i+"}",r)}),t};r&&($r.is.string(this.config.controls)?n=s(n):$r.is.element(n)&&(n.innerHTML=s(n.innerHTML)));var o=void 0;if($r.is.string(this.config.selectors.controls.container)&&(o=document.querySelector(this.config.selectors.controls.container)),$r.is.element(o)||(o=this.elements.container),$r.is.element(n)?o.appendChild(n):n&&o.insertAdjacentHTML("beforeend",n),$r.is.element(this.elements.controls)||ns.findElements.call(this),window.navigator.userAgent.includes("Edge")&&$r.repaint(o),this.config.tooltips.controls){var a=$r.getElements.call(this,[this.config.selectors.controls.wrapper," ",this.config.selectors.labels," .",this.config.classNames.hidden].join(""));Array.from(a).forEach(function(t){$r.toggleClass(t,e.config.classNames.hidden,!1),$r.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute("role","tooltip")})}}},is={setup:function(){if(this.supported.ui){var e=this.storage.get("language");if($r.is.empty(e)||(this.captions.language=e),$r.is.empty(this.captions.language)&&(this.captions.language=this.config.captions.language.toLowerCase()),!$r.is.boolean(this.captions.active)){var t=this.storage.get("captions");$r.is.boolean(t)?this.captions.active=t:this.captions.active=this.config.captions.active}if(!this.isVideo||this.isYouTube||this.isHTML5&&!Xr.textTracks)$r.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&ns.setCaptionsMenu.call(this);else{$r.is.element(this.elements.captions)||(this.elements.captions=$r.createElement("div",$r.getAttributesFromSelector(this.config.selectors.captions)),$r.insertAfter(this.elements.captions,this.elements.wrapper)),$r.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!$r.is.empty(is.getTracks.call(this)));var n=is.getTracks.call(this);if(!$r.is.empty(n)){if($r.getBrowser().isIE&&window.URL){var i=this.media.querySelectorAll("track");Array.from(i).forEach(function(e){var t=e.getAttribute("src"),n=$r.parseUrl(t);n.hostname!==window.location.href.hostname&&["http:","https:"].includes(n.protocol)&&$r.fetch(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){$r.removeElement(e)})})}is.setLanguage.call(this),is.show.call(this),$r.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&ns.setCaptionsMenu.call(this)}}}},setLanguage:function(){var e=this;if(this.isHTML5&&this.isVideo){is.getTracks.call(this).forEach(function(t){$r.on(t,"cuechange",function(t){return is.setCue.call(e,t)}),t.mode="hidden"});var t=is.getCurrentTrack.call(this);$r.is.track(t)&&Array.from(t.activeCues||[]).length&&is.setCue.call(this,t)}else this.isVimeo&&this.captions.active&&this.embed.enableTextTrack(this.language)},getTracks:function(){return $r.is.nullOrUndefined(this.media)?[]:Array.from(this.media.textTracks||[]).filter(function(e){return["captions","subtitles"].includes(e.kind)})},getCurrentTrack:function(){var e=this,t=is.getTracks.call(this);if(!t.length)return null;var n=t.find(function(t){return t.language.toLowerCase()===e.language});(n||(n=$r.getElement.call(this,"track[default]")),n)||(n=Yr(t,1)[0]);return n},getLabel:function(e){var t=e;return!$r.is.track(t)&&Xr.textTracks&&this.captions.active&&(t=is.getCurrentTrack.call(this)),$r.is.track(t)?$r.is.empty(t.label)?$r.is.empty(t.language)?es("enabled",this.config):e.language.toUpperCase():t.label:es("disabled",this.config)},setCue:function(e){var t=$r.is.event(e)?e.target:e,n=t.activeCues,i=n.length&&n[0];t===is.getCurrentTrack.call(this)&&($r.is.cue(i)?is.setText.call(this,i.getCueAsHTML()):is.setText.call(this,null),$r.dispatchEvent.call(this,this.media,"cuechange"))},setText:function(e){if(this.supported.ui)if($r.is.element(this.elements.captions)){var t=$r.createElement("span");$r.emptyElement(this.elements.captions);var n=$r.is.nullOrUndefined(e)?"":e;$r.is.string(n)?t.textContent=n.trim():t.appendChild(n),this.elements.captions.appendChild(t)}else this.debug.warn("No captions element to render to")},show:function(){var e=this.storage.get("captions");$r.is.boolean(e)?this.captions.active=e:e=this.config.captions.active,e&&($r.toggleClass(this.elements.container,this.config.classNames.captions.active,!0),$r.toggleState(this.elements.buttons.captions,!0))}},rs=function(){},ss=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Wr(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return zr(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):rs}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):rs}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):rs}}]),e}(),os={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,resetOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.3.7/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240,"default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:(navigator.language||navigator.userLanguage).split("-")[0]},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime}s",play:"Play",pause:"Pause",fastForward:"Forward {seektime}s",seek:"Seek",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",normal:"Normal",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",enabled:"Enabled",advertisement:"Ad"},urls:{vimeo:{sdk:"https://player.vimeo.com/api/player.js",iframe:"https://player.vimeo.com/video/{0}?{1}",api:"https://vimeo.com/api/v2/video/{0}.json"},youtube:{sdk:"https://www.youtube.com/iframe_api",api:"https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet",poster:"https://img.youtube.com/vi/{0}/maxresdefault.jpg,https://img.youtube.com/vi/{0}/hqdefault.jpg"},googleIMA:{sdk:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","adscontentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',fastForward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress--buffer",played:".plyr__progress--played",loop:".plyr__progress--loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{type:"plyr--{0}",provider:"plyr--{0}",video:"plyr__video-wrapper",embed:"plyr__video-embed",embedContainer:"plyr__video-embed__container",poster:"plyr__poster",ads:"plyr__ads",control:"plyr__control",playing:"plyr--playing",paused:"plyr--paused",stopped:"plyr--stopped",loading:"plyr--loading",error:"plyr--has-error",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1,publisherId:""}},as=$r.getBrowser();function ls(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;$r.is.element(e)&&$r.toggleState(e,this.active),$r.dispatchEvent.call(this.player,this.target,this.active?"enterfullscreen":"exitfullscreen",!0),as.isIos||$r.trapFocus.call(this.player,this.target,this.active)}}function cs(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",$r.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),ls.call(this)}var us=function(){function e(t){var n=this;Wr(this,e),this.player=t,this.prefix=e.prefix,this.property=e.property,this.scrollPosition={x:0,y:0},$r.on(document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){ls.call(n)}),$r.on(this.player.elements.container,"dblclick",function(e){$r.is.element(n.player.elements.controls)&&n.player.elements.controls.contains(e.target)||n.toggle()}),this.update()}return zr(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),$r.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(as.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?$r.is.empty(this.prefix)||this.target[this.prefix+"Request"+this.property]():this.target.requestFullscreen():cs.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(as.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(e.native)if(this.prefix){if(!$r.is.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document[""+this.prefix+t+this.property]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document);else cs.call(this,!1)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){return(e.native||this.player.config.fullscreen.fallback)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[""+this.prefix+this.property+"Element"]:document.fullscreenElement)===this.target:$r.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return as.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if($r.is.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!$r.is.function(document[t+"ExitFullscreen"])&&!$r.is.function(document[t+"CancelFullScreen"]))&&(e=t,!0)}),e}},{key:"property",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}(),ds=$r.getBrowser(),fs={addStyleHook:function(){$r.toggleClass(this.elements.container,this.config.selectors.container.replace(".",""),!0),$r.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void fs.toggleNativeControls.call(this,!0);$r.is.element(this.elements.controls)||(ns.inject.call(this),this.listeners.controls()),fs.toggleNativeControls.call(this),is.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,ns.updateVolume.call(this),ns.timeUpdate.call(this),fs.checkPlaying.call(this),$r.toggleClass(this.elements.container,this.config.classNames.pip.supported,Xr.pip&&this.isHTML5&&this.isVideo),$r.toggleClass(this.elements.container,this.config.classNames.airplay.supported,Xr.airplay&&this.isHTML5),$r.toggleClass(this.elements.container,this.config.classNames.isIos,ds.isIos),$r.toggleClass(this.elements.container,this.config.classNames.isTouch,this.touch),this.ready=!0,setTimeout(function(){$r.dispatchEvent.call(e,e.media,"ready")},0),fs.setTitle.call(this),fs.setPoster.call(this)},setTitle:function(){var e=es("play",this.config);if($r.is.string(this.config.title)&&!$r.is.empty(this.config.title)&&(e+=", "+this.config.title,this.elements.container.setAttribute("aria-label",this.config.title)),$r.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=$r.getElement.call(this,"iframe");if(!$r.is.element(t))return;var n=$r.is.empty(this.config.title)?"video":this.config.title,i=es("frameTitle",this.config);t.setAttribute("title",i.replace("{title}",n))}},setPoster:function(){if($r.is.element(this.elements.poster)&&!$r.is.empty(this.poster)){var e=this.poster.split(",");this.elements.poster.style.backgroundImage=e.map(function(e){return"url('"+e+"')"}).join(",")}},checkPlaying:function(e){$r.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),$r.toggleClass(this.elements.container,this.config.classNames.paused,this.paused),$r.toggleClass(this.elements.container,this.config.classNames.stopped,this.stopped),$r.toggleState(this.elements.buttons.play,this.playing),$r.is.event(e)&&"timeupdate"===e.type||this.toggleControls(!this.playing)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){$r.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),t.toggleControls(t.loading)},this.loading?250:0)},checkFailed:function(){var e=this;this.failed=3===this.media.networkState,this.failed&&($r.toggleClass(this.elements.container,this.config.classNames.loading,!1),$r.toggleClass(this.elements.container,this.config.classNames.error,!0)),clearTimeout(this.timers.failed),this.timers.loading=setTimeout(function(){$r.toggleClass(e.elements.container,e.config.classNames.loading,e.loading),e.toggleControls(e.loading)},this.loading?250:0)}},hs=$r.getBrowser(),ps=function(){function e(t){Wr(this,e),this.player=t,this.lastKey=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.firstTouch=this.firstTouch.bind(this)}return zr(e,[{key:"handleKey",value:function(e){var t=this,n=e.keyCode?e.keyCode:e.which,i="keydown"===e.type,r=i&&n===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&$r.is.number(n)){if(i){var s=$r.getFocusElement();if($r.is.element(s)&&$r.matches(s,this.player.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(n)&&(e.preventDefault(),e.stopPropagation()),n){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:r||(t.player.currentTime=t.player.duration/10*(n-48));break;case 32:case 75:r||this.player.togglePlay();break;case 38:this.player.increaseVolume(.1);break;case 40:this.player.decreaseVolume(.1);break;case 77:r||(this.player.muted=!this.player.muted);break;case 39:this.player.forward();break;case 37:this.player.rewind();break;case 70:this.player.fullscreen.toggle();break;case 67:r||this.player.toggleCaptions();break;case 76:this.player.loop=!this.player.loop}!this.player.fullscreen.enabled&&this.player.fullscreen.active&&27===n&&this.player.fullscreen.toggle(),this.lastKey=n}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){ns.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){this.player.touch=!0,$r.toggleClass(this.player.elements.container,this.player.config.classNames.isTouch,!0),$r.off(document.body,"touchstart",this.firstTouch)}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.player.config.keyboard.global&&$r.toggleListener(window,"keydown keyup",this.handleKey,e,!1),$r.toggleListener(document.body,"click",this.toggleMenu,e),$r.on(document.body,"touchstart",this.firstTouch)}},{key:"container",value:function(){var e=this;!this.player.config.keyboard.global&&this.player.config.keyboard.focused&&$r.on(this.player.elements.container,"keydown keyup",this.handleKey,!1),$r.on(this.player.elements.container,"focusout",function(t){$r.toggleClass(t.target,e.player.config.classNames.tabFocus,!1)}),$r.on(this.player.elements.container,"keydown",function(t){9===t.keyCode&&setTimeout(function(){$r.toggleClass($r.getFocusElement(),e.player.config.classNames.tabFocus,!0)},0)}),this.player.config.hideControls&&$r.on(this.player.elements.container,"mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen",function(t){e.player.toggleControls(t)})}},{key:"media",value:function(){var e=this;if($r.on(this.player.media,"timeupdate seeking",function(t){return ns.timeUpdate.call(e.player,t)}),$r.on(this.player.media,"durationchange loadeddata loadedmetadata",function(t){return ns.durationUpdate.call(e.player,t)}),$r.on(this.player.media,"loadeddata",function(){$r.toggleHidden(e.player.elements.volume,!e.player.hasAudio),$r.toggleHidden(e.player.elements.buttons.mute,!e.player.hasAudio)}),$r.on(this.player.media,"ended",function(){e.player.isHTML5&&e.player.isVideo&&e.player.config.resetOnEnd&&e.player.restart()}),$r.on(this.player.media,"progress playing",function(t){return ns.updateProgress.call(e.player,t)}),$r.on(this.player.media,"volumechange",function(t){return ns.updateVolume.call(e.player,t)}),$r.on(this.player.media,"playing play pause ended emptied timeupdate",function(t){return fs.checkPlaying.call(e.player,t)}),$r.on(this.player.media,"waiting canplay seeked playing",function(t){return fs.checkLoading.call(e.player,t)}),$r.on(this.player.media,"playing",function(){e.player.ads&&e.player.ads.enabled&&!e.player.ads.initialized&&e.player.ads.managerPromise.then(function(){return e.player.ads.play()}).catch(function(){return e.player.play()})}),this.player.supported.ui&&this.player.config.clickToPlay&&!this.player.isAudio){var t=$r.getElement.call(this.player,"."+this.player.config.classNames.video);if(!$r.is.element(t))return;$r.on(t,"click",function(){e.player.config.hideControls&&e.player.touch&&!e.player.paused||(e.player.paused?e.player.play():e.player.ended?(e.player.restart(),e.player.play()):e.player.pause())})}this.player.supported.ui&&this.player.config.disableContextMenu&&$r.on(this.player.elements.wrapper,"contextmenu",function(e){e.preventDefault()},!1),$r.on(this.player.media,"volumechange",function(){e.player.storage.set({volume:e.player.volume,muted:e.player.muted})}),$r.on(this.player.media,"ratechange",function(){ns.updateSetting.call(e.player,"speed"),e.player.storage.set({speed:e.player.speed})}),$r.on(this.player.media,"qualityrequested",function(t){e.player.storage.set({quality:t.detail.quality})}),$r.on(this.player.media,"qualitychange",function(t){ns.updateSetting.call(e.player,"quality",null,t.detail.quality)}),$r.on(this.player.media,"languagechange",function(){ns.updateSetting.call(e.player,"captions"),e.player.storage.set({language:e.player.language})}),$r.on(this.player.media,"captionsenabled captionsdisabled",function(){ns.updateSetting.call(e.player,"captions"),e.player.storage.set({captions:e.player.captions.active})}),$r.on(this.player.media,this.player.config.events.concat(["keyup","keydown"]).join(" "),function(t){var n={};"error"===t.type&&(n=e.player.media.error),$r.dispatchEvent.call(e.player,e.player.elements.container,t.type,!0,n)})}},{key:"controls",value:function(){var e=this,t=hs.isIE?"change":"input",n=function(t,n,i){var r=e.player.config.listeners[i],s=!0;$r.is.function(r)&&(s=r.call(e.player,t)),s&&$r.is.function(n)&&n.call(e.player,t)},i=function(t,i,r,s){var o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=e.player.config.listeners[s],l=$r.is.function(a);$r.on(t,i,function(e){return n(e,r,s)},o&&!l)};i(this.player.elements.buttons.play,"click",this.player.togglePlay,"play"),i(this.player.elements.buttons.restart,"click",this.player.restart,"restart"),i(this.player.elements.buttons.rewind,"click",this.player.rewind,"rewind"),i(this.player.elements.buttons.fastForward,"click",this.player.forward,"fastForward"),i(this.player.elements.buttons.mute,"click",function(){e.player.muted=!e.player.muted},"mute"),i(this.player.elements.buttons.captions,"click",this.player.toggleCaptions),i(this.player.elements.buttons.fullscreen,"click",function(){e.player.fullscreen.toggle()},"fullscreen"),i(this.player.elements.buttons.pip,"click",function(){e.player.pip="toggle"},"pip"),i(this.player.elements.buttons.airplay,"click",this.player.airplay,"airplay"),i(this.player.elements.buttons.settings,"click",function(t){ns.toggleMenu.call(e.player,t)}),i(this.player.elements.settings.form,"click",function(t){t.stopPropagation();var i=function(){var t="plyr-settings-"+e.player.id+"-home";ns.showTab.call(e.player,t)};if($r.matches(t.target,e.player.config.selectors.inputs.language))n(t,function(){e.player.language=t.target.value,i()},"language");else if($r.matches(t.target,e.player.config.selectors.inputs.quality))n(t,function(){e.player.quality=t.target.value,i()},"quality");else if($r.matches(t.target,e.player.config.selectors.inputs.speed))n(t,function(){e.player.speed=parseFloat(t.target.value),i()},"speed");else{var r=t.target;ns.showTab.call(e.player,r.getAttribute("aria-controls"))}}),i(this.player.elements.inputs.seek,t,function(t){e.player.currentTime=t.target.value/t.target.max*e.player.duration},"seek"),this.player.config.toggleInvert&&!$r.is.element(this.player.elements.display.duration)&&i(this.player.elements.display.currentTime,"click",function(){0!==e.player.currentTime&&(e.player.config.invertTime=!e.player.config.invertTime,ns.timeUpdate.call(e.player))}),i(this.player.elements.inputs.volume,t,function(t){e.player.volume=t.target.value},"volume"),hs.isWebkit&&i($r.getElements.call(this.player,'input[type="range"]'),"input",function(t){ns.updateRangeFill.call(e.player,t.target)}),i(this.player.elements.progress,"mouseenter mouseleave mousemove",function(t){return ns.updateSeekTooltip.call(e.player,t)}),this.player.config.hideControls&&(i(this.player.elements.controls,"mouseenter mouseleave",function(t){e.player.elements.controls.hover=!e.player.touch&&"mouseenter"===t.type}),i(this.player.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.player.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),i(this.player.elements.controls,"focusin focusout",function(t){e.player.toggleControls(t)})),i(this.player.elements.inputs.volume,"wheel",function(t){var n=t.webkitDirectionInvertedFromDevice,i=0;(t.deltaY<0||t.deltaX>0)&&(n?(e.player.decreaseVolume(.02),i=-1):(e.player.increaseVolume(.02),i=1)),(t.deltaY>0||t.deltaX<0)&&(n?(e.player.increaseVolume(.02),i=1):(e.player.decreaseVolume(.02),i=-1)),(1===i&&e.player.media.volume<1||-1===i&&e.player.media.volume>0)&&t.preventDefault()},"volume",!1)}},{key:"clear",value:function(){this.global(!1)}}]),e}(),gs={setup:function(){var e=this;$r.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),gs.setAspectRatio.call(this),$r.is.object(window.Vimeo)?gs.ready.call(this):$r.loadScript(this.config.urls.vimeo.sdk).then(function(){gs.ready.call(e)}).catch(function(t){e.debug.warn("Vimeo API failed to load",t)})},setAspectRatio:function(e){var t=$r.is.string(e)?e.split(":"):this.config.ratio.split(":"),n=100/t[0]*t[1];if(this.elements.wrapper.style.paddingBottom=n+"%",this.supported.ui){var i=(240-n)/4.8;this.media.style.transform="translateY(-"+i+"%)"}},ready:function(){var e=this,t=this,n={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media",playsinline:!this.config.fullscreen.iosNative},i=$r.buildUrlParams(n),r=t.media.getAttribute("src");$r.is.empty(r)&&(r=t.media.getAttribute(t.config.attributes.embed.id));var s=$r.parseVimeoId(r),o=$r.createElement("iframe"),a=$r.format(t.config.urls.vimeo.iframe,s,i);o.setAttribute("src",a),o.setAttribute("allowfullscreen",""),o.setAttribute("allowtransparency",""),o.setAttribute("allow","autoplay");var l=$r.createElement("div",{class:t.config.classNames.embedContainer});l.appendChild(o),t.media=$r.replaceElement(l,t.media),$r.fetch($r.format(t.config.urls.vimeo.api,s),"json").then(function(e){if(!$r.is.empty(e)){var n=new URL(e[0].thumbnail_large);n.pathname=n.pathname.split("_")[0]+".jpg",t.media.setAttribute("poster",n.href),fs.setPoster.call(t)}}),t.embed=new window.Vimeo.Player(o,{autopause:t.config.autopause,muted:t.muted}),t.media.paused=!0,t.media.currentTime=0,t.supported.ui&&t.embed.disableTextTrack(),t.media.play=function(){t.embed.play().then(function(){t.media.paused=!1})},t.media.pause=function(){t.embed.pause().then(function(){t.media.paused=!0})},t.media.stop=function(){t.pause(),t.currentTime=0};var c=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return c},set:function(e){var n=t.media.paused;t.media.seeking=!0,$r.dispatchEvent.call(t,t.media,"seeking"),t.embed.setCurrentTime(e).catch(function(){}),n&&t.pause()}});var u=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return u},set:function(e){t.embed.setPlaybackRate(e).then(function(){u=e,$r.dispatchEvent.call(t,t.media,"ratechange")}).catch(function(e){"Error"===e.name&&ns.setSpeedMenu.call(t,[])})}});var d=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return d},set:function(e){t.embed.setVolume(e).then(function(){d=e,$r.dispatchEvent.call(t,t.media,"volumechange")})}});var f=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return f},set:function(e){var n=!!$r.is.boolean(e)&&e;t.embed.setVolume(n?0:t.config.volume).then(function(){f=n,$r.dispatchEvent.call(t,t.media,"volumechange")})}});var h=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return h},set:function(e){var n=$r.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(n).then(function(){h=n})}});var p=void 0;t.embed.getVideoUrl().then(function(e){p=e}).catch(function(t){e.debug.warn(t)}),Object.defineProperty(t.media,"currentSrc",{get:function(){return p}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var n=$r.getAspectRatio(t[0],t[1]);gs.setAspectRatio.call(e,n)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(n){t.config.title=n,fs.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){c=e,$r.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,$r.dispatchEvent.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,is.setup.call(t)}),t.embed.on("cuechange",function(e){var n=null;e.cues.length&&(n=$r.stripHTML(e.cues[0].text)),is.setText.call(t,n)}),t.embed.on("loaded",function(){$r.is.element(t.embed.element)&&t.supported.ui&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){t.media.paused&&$r.dispatchEvent.call(t,t.media,"play"),t.media.paused=!1,$r.dispatchEvent.call(t,t.media,"playing")}),t.embed.on("pause",function(){t.media.paused=!0,$r.dispatchEvent.call(t,t.media,"pause")}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,c=e.seconds,$r.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,$r.dispatchEvent.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&$r.dispatchEvent.call(t,t.media,"canplaythrough"),t.embed.getDuration().then(function(e){e!==t.media.duration&&(t.media.duration=e,$r.dispatchEvent.call(t,t.media,"durationchange"))})}),t.embed.on("seeked",function(){t.media.seeking=!1,$r.dispatchEvent.call(t,t.media,"seeked"),$r.dispatchEvent.call(t,t.media,"play")}),t.embed.on("ended",function(){t.media.paused=!0,$r.dispatchEvent.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,$r.dispatchEvent.call(t,t.media,"error")}),setTimeout(function(){return fs.build.call(t)},0)}};function ms(e){switch(e){case"hd2160":return 2160;case 2160:return"hd2160";case"hd1440":return 1440;case 1440:return"hd1440";case"hd1080":return 1080;case 1080:return"hd1080";case"hd720":return 720;case 720:return"hd720";case"large":return 480;case 480:return"large";case"medium":return 360;case 360:return"medium";case"small":return 240;case 240:return"small";default:return"default"}}var ys={setup:function(){var e=this;$r.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),ys.setAspectRatio.call(this),$r.is.object(window.YT)&&$r.is.function(window.YT.Player)?ys.ready.call(this):($r.loadScript(this.config.urls.youtube.sdk).catch(function(t){e.debug.warn("YouTube API failed to load",t)}),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){ys.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if($r.is.function(this.embed.getVideoData)){var n=this.embed.getVideoData().title;if($r.is.empty(n))return this.config.title=n,void fs.setTitle.call(this)}var i=this.config.keys.google;if($r.is.string(i)&&!$r.is.empty(i)){var r=$r.format(this.config.urls.youtube.api,e,i);$r.fetch(r).then(function(e){$r.is.object(e)&&(t.config.title=e.items[0].snippet.title,fs.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if($r.is.empty(t)||!t.startsWith("youtube-")){var n=e.media.getAttribute("src");$r.is.empty(n)&&(n=e.media.getAttribute(this.config.attributes.embed.id));var i=$r.parseYouTubeId(n),r=$r.generateId(e.provider),s=$r.createElement("div",{id:r});e.media=$r.replaceElement(s,e.media),e.media.setAttribute("poster",$r.format(e.config.urls.youtube.poster,i)),e.embed=new window.YT.Player(r,{videoId:i,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!$r.is.object(e.media.error)){var n={code:t.data};switch(t.data){case 2:n.message="The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.";break;case 5:n.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";break;case 100:n.message="The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.";break;case 101:case 150:n.message="The owner of the requested video does not allow it to be played in embedded players.";break;default:n.message="An unknown error occured"}e.media.error=n,$r.dispatchEvent.call(e,e.media,"error")}},onPlaybackQualityChange:function(){$r.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:e.media.quality})},onPlaybackRateChange:function(t){var n=t.target;e.media.playbackRate=n.getPlaybackRate(),$r.dispatchEvent.call(e,e.media,"ratechange")},onReady:function(t){var n=t.target;ys.getTitle.call(e,i),e.media.play=function(){n.playVideo()},e.media.pause=function(){n.pauseVideo()},e.media.stop=function(){n.stopVideo()},e.media.duration=n.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(n.getCurrentTime())},set:function(t){var i=e.media.paused;e.media.seeking=!0,$r.dispatchEvent.call(e,e.media,"seeking"),n.seekTo(t),i&&e.pause()}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return n.getPlaybackRate()},set:function(e){n.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return ms(n.getPlaybackQuality())},set:function(t){var i=t;n.setPlaybackQuality(ms(i)),$r.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:i})}});var r=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return r},set:function(t){r=t,n.setVolume(100*r),$r.dispatchEvent.call(e,e.media,"volumechange")}});var s=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return s},set:function(t){var i=$r.is.boolean(t)?t:s;s=i,n[i?"mute":"unMute"](),$r.dispatchEvent.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return n.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=n.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),$r.dispatchEvent.call(e,e.media,"timeupdate"),$r.dispatchEvent.call(e,e.media,"durationchange"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval(function(){e.media.buffered=n.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&$r.dispatchEvent.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),$r.dispatchEvent.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return fs.build.call(e)},50)},onStateChange:function(t){var n,i=t.target;switch(clearInterval(e.timers.playing),t.data){case-1:$r.dispatchEvent.call(e,e.media,"timeupdate"),e.media.buffered=i.getVideoLoadedFraction(),$r.dispatchEvent.call(e,e.media,"progress");break;case 0:e.media.paused=!0,e.media.loop?(i.stopVideo(),i.playVideo()):$r.dispatchEvent.call(e,e.media,"ended");break;case 1:e.media.seeking&&$r.dispatchEvent.call(e,e.media,"seeked"),e.media.seeking=!1,e.media.paused&&$r.dispatchEvent.call(e,e.media,"play"),e.media.paused=!1,$r.dispatchEvent.call(e,e.media,"playing"),e.timers.playing=setInterval(function(){$r.dispatchEvent.call(e,e.media,"timeupdate")},50),e.media.duration!==i.getDuration()&&(e.media.duration=i.getDuration(),$r.dispatchEvent.call(e,e.media,"durationchange")),ns.setQualityMenu.call(e,(n=i.getAvailableQualityLevels(),$r.is.empty(n)?n:$r.dedupe(n.map(function(e){return ms(e)}))));break;case 2:e.media.paused=!0,$r.dispatchEvent.call(e,e.media,"pause")}$r.dispatchEvent.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},vs={setup:function(){if(this.media)if($r.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),$r.toggleClass(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&$r.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.isVideo&&(this.elements.wrapper=$r.createElement("div",{class:this.config.classNames.video}),$r.wrap(this.media,this.elements.wrapper),this.elements.poster=$r.createElement("div",{class:this.config.classNames.poster}),this.elements.wrapper.appendChild(this.elements.poster)),this.isEmbed)switch(this.provider){case"youtube":ys.setup.call(this);break;case"vimeo":gs.setup.call(this)}else this.isHTML5&&Zr.extend.call(this);else this.debug.warn("No media element found!")}},bs=function(){function e(t){var n=this;Wr(this,e),this.player=t,this.publisherId=t.config.ads.publisherId,this.playing=!1,this.initialized=!1,this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.managerPromise=new Promise(function(e,t){n.on("loaded",e),n.on("error",t)}),this.load()}return zr(e,[{key:"load",value:function(){var e=this;this.enabled&&($r.is.object(window.google)&&$r.is.object(window.google.ima)?this.ready():$r.loadScript(this.player.config.urls.googleIMA.sdk).then(function(){e.ready()}).catch(function(){e.trigger("error",new Error("Google IMA SDK failed to load"))}))}},{key:"ready",value:function(){var e=this;this.startSafetyTimer(12e3,"ready()"),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.listeners(),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=$r.createElement("div",{class:this.player.config.classNames.ads}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:"requestAds",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var n=new google.ima.AdsRequest;n.adTagUrl=this.tagUrl,n.linearAdSlotWidth=t.offsetWidth,n.linearAdSlotHeight=t.offsetHeight,n.nonLinearAdSlotWidth=t.offsetWidth,n.nonLinearAdSlotHeight=t.offsetHeight,n.forceNonLinearFullSlot=!1,n.setAdWillPlayMuted(!this.player.muted),this.loader.requestAds(n)}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=setInterval(function(){var t=$r.formatTime(Math.max(e.manager.getRemainingTime(),0)),n=es("advertisement",e.player.config)+" - "+t;e.elements.container.setAttribute("data-badge-text",n)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,n=new google.ima.AdsRenderingSettings;n.restoreCustomPlaybackStateOnAdBreakComplete=!0,n.enablePreloading=!0,this.manager=e.getAdsManager(this.player,n),this.cuePoints=this.manager.getCuePoints(),$r.is.empty(this.cuePoints)||this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var n=t.player.elements.progress;if($r.is.element(n)){var i=100/t.player.duration*e,r=$r.createElement("span",{class:t.player.config.classNames.cues});r.style.left=i.toString()+"%",n.appendChild(r)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.trigger("loaded")}},{key:"onAdEvent",value:function(e){var t=this,n=this.player.elements.container,i=e.getAd(),r=function(e){var n="ads"+e.replace(/_/g,"").toLowerCase();$r.dispatchEvent.call(t.player,t.player.media,n)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.trigger("loaded"),r(e.type),this.pollCountdown(!0),i.isLinear()||(i.width=n.offsetWidth,i.height=n.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:r(e.type),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:r(e.type),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:r(e.type),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:case google.ima.AdEvent.Type.MIDPOINT:case google.ima.AdEvent.Type.COMPLETE:case google.ima.AdEvent.Type.IMPRESSION:case google.ima.AdEvent.Type.CLICK:r(e.type)}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.warn("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,n=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return n=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;$r.is.empty(e.cuePoints)||e.cuePoints.forEach(function(i,r){n<i&&i<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(r,1))})}),window.addEventListener("resize",function(){e.manager&&e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.resumeContent(),this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}}).catch(function(){})}},{key:"resumeContent",value:function(){this.elements.container.style.zIndex="",this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){this.elements.container.style.zIndex=3,this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.trigger("error"),this.loadAds()}},{key:"loadAds",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on("loaded",t),e.player.debug.log(e.manager)}),e.requestAds()}).catch(function(){})}},{key:"trigger",value:function(e){for(var t=this,n=arguments.length,i=Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];var s=this.events[e];$r.is.array(s)&&s.forEach(function(e){$r.is.function(e)&&e.apply(t,i)})}},{key:"on",value:function(e,t){return $r.is.array(this.events[e])||(this.events[e]=[]),this.events[e].push(t),this}},{key:"startSafetyTimer",value:function(e,t){var n=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=setTimeout(function(){n.cancel(),n.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){$r.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:"enabled",get:function(){return this.player.isVideo&&this.player.config.ads.enabled&&!$r.is.empty(this.publisherId)}},{key:"tagUrl",get:function(){var e={AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId};return"https://go.aniview.com/api/adserver6/vast/?"+$r.buildUrlParams(e)}}]),e}(),ws={insertElements:function(e,t){var n=this;$r.is.string(t)?$r.insertElement(e,this.media,{src:t}):$r.is.array(t)&&t.forEach(function(t){$r.insertElement(e,n.media,t)})},change:function(e){var t=this;$r.is.object(e)&&"sources"in e&&e.sources.length?(Zr.cancelRequests.call(this),this.destroy.call(this,function(){switch(t.options.quality=[],$r.removeElement(t.media),t.media=null,$r.is.element(t.elements.container)&&t.elements.container.removeAttribute("class"),t.type=e.type,t.provider=$r.is.empty(e.sources[0].provider)?Qr.html5:e.sources[0].provider,t.supported=Xr.check(t.type,t.provider,t.config.playsinline),t.provider+":"+t.type){case"html5:video":t.media=$r.createElement("video");break;case"html5:audio":t.media=$r.createElement("audio");break;case"youtube:video":case"vimeo:video":t.media=$r.createElement("div",{src:e.sources[0].src})}t.elements.container.appendChild(t.media),$r.is.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),$r.is.empty(e.poster)||(t.poster=e.poster),t.config.loop.active&&t.media.setAttribute("loop",""),t.config.muted&&t.media.setAttribute("muted",""),t.config.playsinline&&t.media.setAttribute("playsinline","")),fs.addStyleHook.call(t),t.isHTML5&&ws.insertElements.call(t,"source",e.sources),t.config.title=e.title,vs.setup.call(t),t.isHTML5&&("tracks"in e&&ws.insertElements.call(t,"track",e.tracks),t.media.load()),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&fs.build.call(t),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}};return function(){function e(t,n){var i=this;if(Wr(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=Xr.touch,this.media=t,$r.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||$r.is.nodeList(this.media)||$r.is.array(this.media))&&(this.media=this.media[0]),this.config=$r.extend({},os,n||{},function(){try{return JSON.parse(i.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:null},this.fullscreen={active:!1},this.options={speed:[],quality:[],captions:[]},this.debug=new ss(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",Xr),!$r.is.nullOrUndefined(this.media)&&$r.is.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(Xr.check().api){var r=this.media.cloneNode(!0);r.autoplay=!1,this.elements.original=r;var s=this.media.tagName.toLowerCase(),o=null,a=null,l=null;switch(s){case"div":if(o=this.media.querySelector("iframe"),$r.is.element(o)){if(a=o.getAttribute("src"),this.provider=$r.getProviderByUrl(a),this.elements.container=this.media,this.media=o,this.elements.container.className="",l=$r.getUrlParams(a),!$r.is.empty(l)){var c=["1","true"];c.includes(l.autoplay)&&(this.config.autoplay=!0),c.includes(l.loop)&&(this.config.loop.active=!0),this.isYouTube?this.config.playsinline=c.includes(l.playsinline):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if($r.is.empty(this.provider)||!Object.keys(Qr).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=Jr.video;break;case"video":case"audio":this.type=s,this.provider=Qr.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("playsinline")&&(this.config.playsinline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=Xr.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.listeners=new ps(this),this.storage=new Kr(this),this.media.plyr=this,$r.is.element(this.elements.container)||(this.elements.container=$r.createElement("div"),$r.wrap(this.media,this.elements.container)),this.elements.container.setAttribute("tabindex",0),fs.addStyleHook.call(this),vs.setup.call(this),this.config.debug&&$r.on(this.elements.container,this.config.events.join(" "),function(e){i.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&fs.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new us(this),this.ads=new bs(this),this.config.autoplay&&this.play()):this.debug.error("Setup failed: no support")}else this.debug.error("Setup failed: no support");else this.debug.error("Setup failed: disabled by config");else this.debug.error("Setup failed: no suitable element passed")}return zr(e,[{key:"play",value:function(){return $r.is.function(this.media.play)?this.media.play():null}},{key:"pause",value:function(){this.playing&&$r.is.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){($r.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?(this.pause(),this.restart()):$r.is.function(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-($r.is.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+($r.is.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+($r.is.number(e)?e:1)}},{key:"decreaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-($r.is.number(e)?e:1)}},{key:"toggleCaptions",value:function(e){if(this.supported.ui){var t=$r.is.boolean(e)?e:!this.elements.container.classList.contains(this.config.classNames.captions.active);this.captions.active!==t&&(this.captions.active=t,$r.toggleState(this.elements.buttons.captions,this.captions.active),$r.toggleClass(this.elements.container,this.config.classNames.captions.active,this.captions.active),$r.dispatchEvent.call(this,this.media,this.captions.active?"captionsenabled":"captionsdisabled"))}}},{key:"airplay",value:function(){Xr.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){var t=this;if($r.is.element(this.elements.controls)&&this.supported.ui&&!this.isAudio){var n=0,i=e,r=!1;if(!$r.is.boolean(e))if($r.is.event(e)){r="enterfullscreen"===e.type;i=["touchstart","touchmove","mouseenter","mousemove","focusin"].includes(e.type),["touchmove","touchend","mousemove"].includes(e.type)&&(n=2e3),this.touch||"focusin"!==e.type||(n=3e3,$r.toggleClass(this.elements.controls,this.config.classNames.noTransition,!0))}else i=$r.hasClass(this.elements.container,this.config.classNames.hideControls);if(clearTimeout(this.timers.controls),i||this.paused||this.loading){if($r.toggleClass(this.elements.container,this.config.classNames.hideControls,!1)&&$r.dispatchEvent.call(this,this.media,"controlsshown"),this.paused||this.loading)return;this.touch&&(n=3e3)}i&&!this.playing||(this.timers.controls=setTimeout(function(){$r.is.element(t.elements.controls)&&((!t.elements.controls.pressed&&!t.elements.controls.hover||r)&&($r.hasClass(t.elements.container,t.config.classNames.hideControls)||$r.toggleClass(t.elements.controls,t.config.classNames.noTransition,!1),$r.toggleClass(t.elements.container,t.config.classNames.hideControls,t.config.hideControls)&&($r.dispatchEvent.call(t,t.media,"controlshidden"),t.config.controls.includes("settings")&&!$r.is.empty(t.config.settings)&&ns.toggleMenu.call(t,!1))))},n))}}},{key:"on",value:function(e,t){$r.on(this.elements.container,e,t)}},{key:"off",value:function(e,t){$r.off(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var i=function(){document.body.style.overflow="",t.embed=null,n?(Object.keys(t.elements).length&&($r.removeElement(t.elements.buttons.play),$r.removeElement(t.elements.captions),$r.removeElement(t.elements.controls),$r.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),$r.is.function(e)&&e()):(t.listeners.clear(),$r.replaceElement(t.elements.original,t.elements.container),$r.dispatchEvent.call(t,t.elements.original,"destroyed",!0),$r.is.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};switch(this.stop(),this.provider+":"+this.type){case"html5:video":case"html5:audio":clearTimeout(this.timers.loading),fs.toggleNativeControls.call(this,!0),i();break;case"youtube:video":clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&$r.is.function(this.embed.destroy)&&this.embed.destroy(),i();break;case"vimeo:video":null!==this.embed&&this.embed.unload().then(i),setTimeout(i,200)}}}},{key:"supports",value:function(e){return Xr.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===Qr.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===Qr.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===Qr.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===Jr.video)}},{key:"isAudio",get:function(){return Boolean(this.type===Jr.audio)}},{key:"playing",get:function(){return Boolean(this.ready&&!this.paused&&!this.ended)}},{key:"paused",get:function(){return Boolean(this.media.paused)}},{key:"stopped",get:function(){return Boolean(this.paused&&0===this.currentTime)}},{key:"ended",get:function(){return Boolean(this.media.ended)}},{key:"currentTime",set:function(e){var t=0;$r.is.number(e)&&(t=e),t<0?t=0:t>this.duration&&(t=this.duration),this.media.currentTime=t,this.debug.log("Seeking to "+this.currentTime+" seconds")},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return $r.is.number(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}},{key:"seeking",get:function(){return Boolean(this.media.seeking)}},{key:"duration",get:function(){var e=parseFloat(this.config.duration),t=this.media?Number(this.media.duration):0;return Number.isNaN(e)?t:e}},{key:"volume",set:function(e){var t=e;$r.is.string(t)&&(t=Number(t)),$r.is.number(t)||(t=this.storage.get("volume")),$r.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!$r.is.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;$r.is.boolean(t)||(t=this.storage.get("muted")),$r.is.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return Boolean(this.media.muted)}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;$r.is.number(e)&&(t=e),$r.is.number(t)||(t=this.storage.get("speed")),$r.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=null;if($r.is.empty(e)||(t=Number(e)),$r.is.number(t)&&0!==t||(t=this.storage.get("quality")),$r.is.number(t)||(t=this.config.quality.selected),$r.is.number(t)||(t=this.config.quality.default),this.options.quality.length){if(!this.options.quality.includes(t)){var n=$r.closest(this.options.quality,t);this.debug.warn("Unsupported quality option: "+t+", using "+n+" instead"),t=n}this.config.quality.selected=t,this.media.quality=t}},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=$r.is.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return Boolean(this.media.loop)}},{key:"source",set:function(e){ws.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isVideo?$r.is.string(e)&&(this.media.setAttribute("poster",e),fs.setPoster.call(this)):this.debug.warn("Poster can only be set for video")},get:function(){return this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=$r.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:"language",set:function(e){if($r.is.string(e))if($r.is.empty(e))this.toggleCaptions(!1);else{var t=e.toLowerCase();this.options.captions.includes(t)?(this.toggleCaptions(!0),"enabled"!==t&&this.language!==t&&(this.captions.language=t,is.setText.call(this,null),is.setLanguage.call(this),$r.dispatchEvent.call(this,this.media,"languagechange"))):this.debug.warn("Unsupported language option: "+t)}},get:function(){return this.captions.language}},{key:"pip",set:function(e){var t="picture-in-picture",n="inline";if(Xr.pip){var i=$r.is.boolean(e)?e:this.pip===n;this.media.webkitSetPresentationMode(i?t:n)}},get:function(){return Xr.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,n){return Xr.check(e,t,n)}},{key:"loadSprite",value:function(e,t){return $r.loadSprite(e,t)}},{key:"setup",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=null;return $r.is.string(t)?i=Array.from(document.querySelectorAll(t)):$r.is.nodeList(t)?i=Array.from(t):$r.is.array(t)&&(i=t.filter(function(e){return $r.is.element(e)})),$r.is.empty(i)?null:i.map(function(t){return new e(t,n)})}}]),e}()});
+"object"==typeof navigator&&function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)}),i=t(function(e){var t=e.exports={version:"2.5.6"};"number"==typeof __e&&(__e=t)}),r=(i.version,function(e){return"object"==typeof e?null!==e:"function"==typeof e}),o=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e},a=function(e){try{return!!e()}catch(e){return!0}},s=!a(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),l=n.document,c=r(l)&&r(l.createElement),u=function(e){return c?l.createElement(e):{}},f=!s&&!a(function(){return 7!=Object.defineProperty(u("div"),"a",{get:function(){return 7}}).a}),h=function(e,t){if(!r(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!r(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")},d=Object.defineProperty,p={f:s?Object.defineProperty:function(e,t,n){if(o(e),t=h(t,!0),o(n),f)try{return d(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},g=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},m=s?function(e,t,n){return p.f(e,t,g(1,n))}:function(e,t,n){return e[t]=n,e},y={}.hasOwnProperty,v=function(e,t){return y.call(e,t)},b=0,w=Math.random(),E=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++b+w).toString(36))},k=t(function(e){var t=E("src"),r=Function.toString,o=(""+r).split("toString");i.inspectSource=function(e){return r.call(e)},(e.exports=function(e,i,r,a){var s="function"==typeof r;s&&(v(r,"name")||m(r,"name",i)),e[i]!==r&&(s&&(v(r,t)||m(r,t,e[i]?""+e[i]:o.join(String(i)))),e===n?e[i]=r:a?e[i]?e[i]=r:m(e,i,r):(delete e[i],m(e,i,r)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[t]||r.call(this)})}),S=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e},T=function(e,t,n){if(S(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,i){return e.call(t,n,i)};case 3:return function(n,i,r){return e.call(t,n,i,r)}}return function(){return e.apply(t,arguments)}},A=function(e,t,r){var o,a,s,l,c=e&A.F,u=e&A.G,f=e&A.S,h=e&A.P,d=e&A.B,p=u?n:f?n[t]||(n[t]={}):(n[t]||{}).prototype,g=u?i:i[t]||(i[t]={}),y=g.prototype||(g.prototype={});for(o in u&&(r=t),r)s=((a=!c&&p&&void 0!==p[o])?p:r)[o],l=d&&a?T(s,n):h&&"function"==typeof s?T(Function.call,s):s,p&&k(p,o,s,e&A.U),g[o]!=s&&m(g,o,l),h&&y[o]!=s&&(y[o]=s)};n.core=i,A.F=1,A.G=2,A.S=4,A.P=8,A.B=16,A.W=32,A.U=64,A.R=128;for(var _,C=A,P=E("typed_array"),x=E("view"),L=!(!n.ArrayBuffer||!n.DataView),M=L,O=0,N="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");O<9;)(_=n[N[O++]])?(m(_.prototype,P,!0),m(_.prototype,x,!0)):M=!1;var j={ABV:L,CONSTR:M,TYPED:P,VIEW:x},I=function(e,t,n){for(var i in t)k(e,i,t[i],n);return e},F=function(e,t,n,i){if(!(e instanceof t)||void 0!==i&&i in e)throw TypeError(n+": incorrect invocation!");return e},R=Math.ceil,q=Math.floor,U=function(e){return isNaN(e=+e)?0:(e>0?q:R)(e)},B=Math.min,V=function(e){return e>0?B(U(e),9007199254740991):0},D=function(e){if(void 0===e)return 0;var t=U(e),n=V(t);if(t!==n)throw RangeError("Wrong length!");return n},H={}.toString,W=function(e){return H.call(e).slice(8,-1)},z=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==W(e)?e.split(""):Object(e)},G=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e},Y=function(e){return z(G(e))},K=Math.max,Q=Math.min,J=function(e,t){return(e=U(e))<0?K(e+t,0):Q(e,t)},$=function(e){return function(t,n,i){var r,o=Y(t),a=V(o.length),s=J(i,a);if(e&&n!=n){for(;a>s;)if((r=o[s++])!=r)return!0}else for(;a>s;s++)if((e||s in o)&&o[s]===n)return e||s||0;return!e&&-1}},X=t(function(e){var t=n["__core-js_shared__"]||(n["__core-js_shared__"]={});(e.exports=function(e,n){return t[e]||(t[e]=void 0!==n?n:{})})("versions",[]).push({version:i.version,mode:"global",copyright:"© 2018 Denis Pushkarev (zloirock.ru)"})}),Z=X("keys"),ee=function(e){return Z[e]||(Z[e]=E(e))},te=$(!1),ne=ee("IE_PROTO"),ie=function(e,t){var n,i=Y(e),r=0,o=[];for(n in i)n!=ne&&v(i,n)&&o.push(n);for(;t.length>r;)v(i,n=t[r++])&&(~te(o,n)||o.push(n));return o},re="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),oe=re.concat("length","prototype"),ae={f:Object.getOwnPropertyNames||function(e){return ie(e,oe)}},se=function(e){return Object(G(e))},le=function(e){for(var t=se(this),n=V(t.length),i=arguments.length,r=J(i>1?arguments[1]:void 0,n),o=i>2?arguments[2]:void 0,a=void 0===o?n:J(o,n);a>r;)t[r++]=e;return t},ce=t(function(e){var t=X("wks"),i=n.Symbol,r="function"==typeof i;(e.exports=function(e){return t[e]||(t[e]=r&&i[e]||(r?i:E)("Symbol."+e))}).store=t}),ue=p.f,fe=ce("toStringTag"),he=function(e,t,n){e&&!v(e=n?e:e.prototype,fe)&&ue(e,fe,{configurable:!0,value:t})},de=t(function(e,t){var i=ae.f,r=p.f,o="prototype",l="Wrong index!",c=n.ArrayBuffer,u=n.DataView,f=n.Math,h=n.RangeError,d=n.Infinity,g=c,y=f.abs,v=f.pow,b=f.floor,w=f.log,E=f.LN2,k=s?"_b":"buffer",S=s?"_l":"byteLength",T=s?"_o":"byteOffset";function A(e,t,n){var i,r,o,a=new Array(n),s=8*n-t-1,l=(1<<s)-1,c=l>>1,u=23===t?v(2,-24)-v(2,-77):0,f=0,h=e<0||0===e&&1/e<0?1:0;for((e=y(e))!=e||e===d?(r=e!=e?1:0,i=l):(i=b(w(e)/E),e*(o=v(2,-i))<1&&(i--,o*=2),(e+=i+c>=1?u/o:u*v(2,1-c))*o>=2&&(i++,o/=2),i+c>=l?(r=0,i=l):i+c>=1?(r=(e*o-1)*v(2,t),i+=c):(r=e*v(2,c-1)*v(2,t),i=0));t>=8;a[f++]=255&r,r/=256,t-=8);for(i=i<<t|r,s+=t;s>0;a[f++]=255&i,i/=256,s-=8);return a[--f]|=128*h,a}function _(e,t,n){var i,r=8*n-t-1,o=(1<<r)-1,a=o>>1,s=r-7,l=n-1,c=e[l--],u=127&c;for(c>>=7;s>0;u=256*u+e[l],l--,s-=8);for(i=u&(1<<-s)-1,u>>=-s,s+=t;s>0;i=256*i+e[l],l--,s-=8);if(0===u)u=1-a;else{if(u===o)return i?NaN:c?-d:d;i+=v(2,t),u-=a}return(c?-1:1)*i*v(2,u-t)}function C(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]}function P(e){return[255&e]}function x(e){return[255&e,e>>8&255]}function L(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]}function M(e){return A(e,52,8)}function O(e){return A(e,23,4)}function N(e,t,n){r(e[o],t,{get:function(){return this[n]}})}function R(e,t,n,i){var r=D(+n);if(r+t>e[S])throw h(l);var o=e[k]._b,a=r+e[T],s=o.slice(a,a+t);return i?s:s.reverse()}function q(e,t,n,i,r,o){var a=D(+n);if(a+t>e[S])throw h(l);for(var s=e[k]._b,c=a+e[T],u=i(+r),f=0;f<t;f++)s[c+f]=u[o?f:t-f-1]}if(j.ABV){if(!a(function(){c(1)})||!a(function(){new c(-1)})||a(function(){return new c,new c(1.5),new c(NaN),"ArrayBuffer"!=c.name})){for(var B,H=(c=function(e){return F(this,c),new g(D(e))})[o]=g[o],W=i(g),z=0;W.length>z;)(B=W[z++])in c||m(c,B,g[B]);H.constructor=c}var G=new u(new c(2)),Y=u[o].setInt8;G.setInt8(0,2147483648),G.setInt8(1,2147483649),!G.getInt8(0)&&G.getInt8(1)||I(u[o],{setInt8:function(e,t){Y.call(this,e,t<<24>>24)},setUint8:function(e,t){Y.call(this,e,t<<24>>24)}},!0)}else c=function(e){F(this,c,"ArrayBuffer");var t=D(e);this._b=le.call(new Array(t),0),this[S]=t},u=function(e,t,n){F(this,u,"DataView"),F(e,c,"DataView");var i=e[S],r=U(t);if(r<0||r>i)throw h("Wrong offset!");if(r+(n=void 0===n?i-r:V(n))>i)throw h("Wrong length!");this[k]=e,this[T]=r,this[S]=n},s&&(N(c,"byteLength","_l"),N(u,"buffer","_b"),N(u,"byteLength","_l"),N(u,"byteOffset","_o")),I(u[o],{getInt8:function(e){return R(this,1,e)[0]<<24>>24},getUint8:function(e){return R(this,1,e)[0]},getInt16:function(e){var t=R(this,2,e,arguments[1]);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=R(this,2,e,arguments[1]);return t[1]<<8|t[0]},getInt32:function(e){return C(R(this,4,e,arguments[1]))},getUint32:function(e){return C(R(this,4,e,arguments[1]))>>>0},getFloat32:function(e){return _(R(this,4,e,arguments[1]),23,4)},getFloat64:function(e){return _(R(this,8,e,arguments[1]),52,8)},setInt8:function(e,t){q(this,1,e,P,t)},setUint8:function(e,t){q(this,1,e,P,t)},setInt16:function(e,t){q(this,2,e,x,t,arguments[2])},setUint16:function(e,t){q(this,2,e,x,t,arguments[2])},setInt32:function(e,t){q(this,4,e,L,t,arguments[2])},setUint32:function(e,t){q(this,4,e,L,t,arguments[2])},setFloat32:function(e,t){q(this,4,e,O,t,arguments[2])},setFloat64:function(e,t){q(this,8,e,M,t,arguments[2])}});he(c,"ArrayBuffer"),he(u,"DataView"),m(u[o],j.VIEW,!0),t.ArrayBuffer=c,t.DataView=u}),pe=ce("species"),ge=function(e,t){var n,i=o(e).constructor;return void 0===i||null==(n=o(i)[pe])?t:S(n)},me=ce("species"),ye=function(e){var t=n[e];s&&t&&!t[me]&&p.f(t,me,{configurable:!0,get:function(){return this}})},ve=n.ArrayBuffer,be=de.ArrayBuffer,we=de.DataView,Ee=j.ABV&&ve.isView,ke=be.prototype.slice,Se=j.VIEW;C(C.G+C.W+C.F*(ve!==be),{ArrayBuffer:be}),C(C.S+C.F*!j.CONSTR,"ArrayBuffer",{isView:function(e){return Ee&&Ee(e)||r(e)&&Se in e}}),C(C.P+C.U+C.F*a(function(){return!new be(2).slice(1,void 0).byteLength}),"ArrayBuffer",{slice:function(e,t){if(void 0!==ke&&void 0===t)return ke.call(o(this),e);for(var n=o(this).byteLength,i=J(e,n),r=J(void 0===t?n:t,n),a=new(ge(this,be))(V(r-i)),s=new we(this),l=new we(a),c=0;i<r;)l.setUint8(c++,s.getUint8(i++));return a}}),ye("ArrayBuffer");var Te=ce("toStringTag"),Ae="Arguments"==W(function(){return arguments}()),_e=function(e){var t,n,i;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),Te))?n:Ae?W(t):"Object"==(i=W(t))&&"function"==typeof t.callee?"Arguments":i},Ce={},Pe=ce("iterator"),xe=Array.prototype,Le=function(e){return void 0!==e&&(Ce.Array===e||xe[Pe]===e)},Me=Object.keys||function(e){return ie(e,re)},Oe=s?Object.defineProperties:function(e,t){o(e);for(var n,i=Me(t),r=i.length,a=0;r>a;)p.f(e,n=i[a++],t[n]);return e},Ne=n.document,je=Ne&&Ne.documentElement,Ie=ee("IE_PROTO"),Fe=function(){},Re=function(){var e,t=u("iframe"),n=re.length;for(t.style.display="none",je.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),Re=e.F;n--;)delete Re.prototype[re[n]];return Re()},qe=Object.create||function(e,t){var n;return null!==e?(Fe.prototype=o(e),n=new Fe,Fe.prototype=null,n[Ie]=e):n=Re(),void 0===t?n:Oe(n,t)},Ue=ee("IE_PROTO"),Be=Object.prototype,Ve=Object.getPrototypeOf||function(e){return e=se(e),v(e,Ue)?e[Ue]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?Be:null},De=ce("iterator"),He=i.getIteratorMethod=function(e){if(null!=e)return e[De]||e["@@iterator"]||Ce[_e(e)]},We=Array.isArray||function(e){return"Array"==W(e)},ze=ce("species"),Ge=function(e,t){return new(function(e){var t;return We(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!We(t.prototype)||(t=void 0),r(t)&&null===(t=t[ze])&&(t=void 0)),void 0===t?Array:t}(e))(t)},Ye=function(e,t){var n=1==e,i=2==e,r=3==e,o=4==e,a=6==e,s=5==e||a,l=t||Ge;return function(t,c,u){for(var f,h,d=se(t),p=z(d),g=T(c,u,3),m=V(p.length),y=0,v=n?l(t,m):i?l(t,0):void 0;m>y;y++)if((s||y in p)&&(h=g(f=p[y],y,d),e))if(n)v[y]=h;else if(h)switch(e){case 3:return!0;case 5:return f;case 6:return y;case 2:v.push(f)}else if(o)return!1;return a?-1:r||o?o:v}},Ke=ce("unscopables"),Qe=Array.prototype;null==Qe[Ke]&&m(Qe,Ke,{});var Je=function(e){Qe[Ke][e]=!0},$e=function(e,t){return{value:t,done:!!e}},Xe={};m(Xe,ce("iterator"),function(){return this});var Ze=function(e,t,n){e.prototype=qe(Xe,{next:g(1,n)}),he(e,t+" Iterator")},et=ce("iterator"),tt=!([].keys&&"next"in[].keys()),nt=function(){return this},it=function(e,t,n,i,r,o,a){Ze(n,t,i);var s,l,c,u=function(e){if(!tt&&e in p)return p[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},f=t+" Iterator",h="values"==r,d=!1,p=e.prototype,g=p[et]||p["@@iterator"]||r&&p[r],y=g||u(r),v=r?h?u("entries"):y:void 0,b="Array"==t&&p.entries||g;if(b&&(c=Ve(b.call(new e)))!==Object.prototype&&c.next&&(he(c,f,!0),"function"!=typeof c[et]&&m(c,et,nt)),h&&g&&"values"!==g.name&&(d=!0,y=function(){return g.call(this)}),(tt||d||!p[et])&&m(p,et,y),Ce[t]=y,Ce[f]=nt,r)if(s={values:h?y:u("values"),keys:o?y:u("keys"),entries:v},a)for(l in s)l in p||k(p,l,s[l]);else C(C.P+C.F*(tt||d),t,s);return s},rt=it(Array,"Array",function(e,t){this._t=Y(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,$e(1)):$e(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])},"values");Ce.Arguments=Ce.Array,Je("keys"),Je("values"),Je("entries");var ot=ce("iterator"),at=!1;try{[7][ot]().return=function(){at=!0}}catch(e){}var st=function(e,t){if(!t&&!at)return!1;var n=!1;try{var i=[7],r=i[ot]();r.next=function(){return{done:n=!0}},i[ot]=function(){return r},e(i)}catch(e){}return n},lt=[].copyWithin||function(e,t){var n=se(this),i=V(n.length),r=J(e,i),o=J(t,i),a=arguments.length>2?arguments[2]:void 0,s=Math.min((void 0===a?i:J(a,i))-o,i-r),l=1;for(o<r&&r<o+s&&(l=-1,o+=s-1,r+=s-1);s-- >0;)o in n?n[r]=n[o]:delete n[r],r+=l,o+=l;return n},ct={f:{}.propertyIsEnumerable},ut=Object.getOwnPropertyDescriptor,ft={f:s?ut:function(e,t){if(e=Y(e),t=h(t,!0),f)try{return ut(e,t)}catch(e){}if(v(e,t))return g(!ct.f.call(e,t),e[t])}},ht=t(function(e){if(s){var t=n,i=a,o=C,l=j,c=de,u=T,f=F,d=g,y=m,b=I,w=U,k=V,S=D,A=J,_=h,P=v,x=_e,L=r,M=se,O=Le,N=qe,R=Ve,q=ae.f,B=He,H=E,W=ce,z=Ye,G=$,Y=ge,K=rt,Q=Ce,X=st,Z=ye,ee=le,te=lt,ne=p,ie=ft,re=ne.f,oe=ie.f,ue=t.RangeError,fe=t.TypeError,he=t.Uint8Array,pe=Array.prototype,me=c.ArrayBuffer,ve=c.DataView,be=z(0),we=z(2),Ee=z(3),ke=z(4),Se=z(5),Te=z(6),Ae=G(!0),Pe=G(!1),xe=K.values,Me=K.keys,Oe=K.entries,Ne=pe.lastIndexOf,je=pe.reduce,Ie=pe.reduceRight,Fe=pe.join,Re=pe.sort,Ue=pe.slice,Be=pe.toString,De=pe.toLocaleString,We=W("iterator"),ze=W("toStringTag"),Ge=H("typed_constructor"),Ke=H("def_constructor"),Qe=l.CONSTR,Je=l.TYPED,$e=l.VIEW,Xe=z(1,function(e,t){return it(Y(e,e[Ke]),t)}),Ze=i(function(){return 1===new he(new Uint16Array([1]).buffer)[0]}),et=!!he&&!!he.prototype.set&&i(function(){new he(1).set({})}),tt=function(e,t){var n=w(e);if(n<0||n%t)throw ue("Wrong offset!");return n},nt=function(e){if(L(e)&&Je in e)return e;throw fe(e+" is not a typed array!")},it=function(e,t){if(!(L(e)&&Ge in e))throw fe("It is not a typed array constructor!");return new e(t)},ot=function(e,t){return at(Y(e,e[Ke]),t)},at=function(e,t){for(var n=0,i=t.length,r=it(e,i);i>n;)r[n]=t[n++];return r},ct=function(e,t,n){re(e,t,{get:function(){return this._d[n]}})},ut=function(e){var t,n,i,r,o,a,s=M(e),l=arguments.length,c=l>1?arguments[1]:void 0,f=void 0!==c,h=B(s);if(null!=h&&!O(h)){for(a=h.call(s),i=[],t=0;!(o=a.next()).done;t++)i.push(o.value);s=i}for(f&&l>2&&(c=u(c,arguments[2],2)),t=0,n=k(s.length),r=it(this,n);n>t;t++)r[t]=f?c(s[t],t):s[t];return r},ht=function(){for(var e=0,t=arguments.length,n=it(this,t);t>e;)n[e]=arguments[e++];return n},dt=!!he&&i(function(){De.call(new he(1))}),pt=function(){return De.apply(dt?Ue.call(nt(this)):nt(this),arguments)},gt={copyWithin:function(e,t){return te.call(nt(this),e,t,arguments.length>2?arguments[2]:void 0)},every:function(e){return ke(nt(this),e,arguments.length>1?arguments[1]:void 0)},fill:function(e){return ee.apply(nt(this),arguments)},filter:function(e){return ot(this,we(nt(this),e,arguments.length>1?arguments[1]:void 0))},find:function(e){return Se(nt(this),e,arguments.length>1?arguments[1]:void 0)},findIndex:function(e){return Te(nt(this),e,arguments.length>1?arguments[1]:void 0)},forEach:function(e){be(nt(this),e,arguments.length>1?arguments[1]:void 0)},indexOf:function(e){return Pe(nt(this),e,arguments.length>1?arguments[1]:void 0)},includes:function(e){return Ae(nt(this),e,arguments.length>1?arguments[1]:void 0)},join:function(e){return Fe.apply(nt(this),arguments)},lastIndexOf:function(e){return Ne.apply(nt(this),arguments)},map:function(e){return Xe(nt(this),e,arguments.length>1?arguments[1]:void 0)},reduce:function(e){return je.apply(nt(this),arguments)},reduceRight:function(e){return Ie.apply(nt(this),arguments)},reverse:function(){for(var e,t=nt(this).length,n=Math.floor(t/2),i=0;i<n;)e=this[i],this[i++]=this[--t],this[t]=e;return this},some:function(e){return Ee(nt(this),e,arguments.length>1?arguments[1]:void 0)},sort:function(e){return Re.call(nt(this),e)},subarray:function(e,t){var n=nt(this),i=n.length,r=A(e,i);return new(Y(n,n[Ke]))(n.buffer,n.byteOffset+r*n.BYTES_PER_ELEMENT,k((void 0===t?i:A(t,i))-r))}},mt=function(e,t){return ot(this,Ue.call(nt(this),e,t))},yt=function(e){nt(this);var t=tt(arguments[1],1),n=this.length,i=M(e),r=k(i.length),o=0;if(r+t>n)throw ue("Wrong length!");for(;o<r;)this[t+o]=i[o++]},vt={entries:function(){return Oe.call(nt(this))},keys:function(){return Me.call(nt(this))},values:function(){return xe.call(nt(this))}},bt=function(e,t){return L(e)&&e[Je]&&"symbol"!=typeof t&&t in e&&String(+t)==String(t)},wt=function(e,t){return bt(e,t=_(t,!0))?d(2,e[t]):oe(e,t)},Et=function(e,t,n){return!(bt(e,t=_(t,!0))&&L(n)&&P(n,"value"))||P(n,"get")||P(n,"set")||n.configurable||P(n,"writable")&&!n.writable||P(n,"enumerable")&&!n.enumerable?re(e,t,n):(e[t]=n.value,e)};Qe||(ie.f=wt,ne.f=Et),o(o.S+o.F*!Qe,"Object",{getOwnPropertyDescriptor:wt,defineProperty:Et}),i(function(){Be.call({})})&&(Be=De=function(){return Fe.call(this)});var kt=b({},gt);b(kt,vt),y(kt,We,vt.values),b(kt,{slice:mt,set:yt,constructor:function(){},toString:Be,toLocaleString:pt}),ct(kt,"buffer","b"),ct(kt,"byteOffset","o"),ct(kt,"byteLength","l"),ct(kt,"length","e"),re(kt,ze,{get:function(){return this[Je]}}),e.exports=function(e,n,r,a){var s=e+((a=!!a)?"Clamped":"")+"Array",c="get"+e,u="set"+e,h=t[s],d=h||{},p=h&&R(h),g=!h||!l.ABV,m={},v=h&&h.prototype,b=function(e,t){re(e,t,{get:function(){return function(e,t){var i=e._d;return i.v[c](t*n+i.o,Ze)}(this,t)},set:function(e){return function(e,t,i){var r=e._d;a&&(i=(i=Math.round(i))<0?0:i>255?255:255&i),r.v[u](t*n+r.o,i,Ze)}(this,t,e)},enumerable:!0})};g?(h=r(function(e,t,i,r){f(e,h,s,"_d");var o,a,l,c,u=0,d=0;if(L(t)){if(!(t instanceof me||"ArrayBuffer"==(c=x(t))||"SharedArrayBuffer"==c))return Je in t?at(h,t):ut.call(h,t);o=t,d=tt(i,n);var p=t.byteLength;if(void 0===r){if(p%n)throw ue("Wrong length!");if((a=p-d)<0)throw ue("Wrong length!")}else if((a=k(r)*n)+d>p)throw ue("Wrong length!");l=a/n}else l=S(t),o=new me(a=l*n);for(y(e,"_d",{b:o,o:d,l:a,e:l,v:new ve(o)});u<l;)b(e,u++)}),v=h.prototype=N(kt),y(v,"constructor",h)):i(function(){h(1)})&&i(function(){new h(-1)})&&X(function(e){new h,new h(null),new h(1.5),new h(e)},!0)||(h=r(function(e,t,i,r){var o;return f(e,h,s),L(t)?t instanceof me||"ArrayBuffer"==(o=x(t))||"SharedArrayBuffer"==o?void 0!==r?new d(t,tt(i,n),r):void 0!==i?new d(t,tt(i,n)):new d(t):Je in t?at(h,t):ut.call(h,t):new d(S(t))}),be(p!==Function.prototype?q(d).concat(q(p)):q(d),function(e){e in h||y(h,e,d[e])}),h.prototype=v,v.constructor=h);var w=v[We],E=!!w&&("values"==w.name||null==w.name),T=vt.values;y(h,Ge,!0),y(v,Je,s),y(v,$e,!0),y(v,Ke,h),(a?new h(1)[ze]==s:ze in v)||re(v,ze,{get:function(){return s}}),m[s]=h,o(o.G+o.W+o.F*(h!=d),m),o(o.S,s,{BYTES_PER_ELEMENT:n}),o(o.S+o.F*i(function(){d.of.call(h,1)}),s,{from:ut,of:ht}),"BYTES_PER_ELEMENT"in v||y(v,"BYTES_PER_ELEMENT",n),o(o.P,s,gt),Z(s),o(o.P+o.F*et,s,{set:yt}),o(o.P+o.F*!E,s,vt),v.toString!=Be&&(v.toString=Be),o(o.P+o.F*i(function(){new h(1).slice()}),s,{slice:mt}),o(o.P+o.F*(i(function(){return[1,2].toLocaleString()!=new h([1,2]).toLocaleString()})||!i(function(){v.toLocaleString.call([1,2])})),s,{toLocaleString:pt}),Q[s]=E?w:T,E||y(v,We,T)}}else e.exports=function(){}});ht("Int8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}},!0),ht("Int16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Uint16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Int32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Uint32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Float32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Float64",8,function(e){return function(t,n,i){return e(this,t,n,i)}});var dt=function(e,t,n,i){try{return i?t(o(n)[0],n[1]):t(n)}catch(t){var r=e.return;throw void 0!==r&&o(r.call(e)),t}},pt=t(function(e){var t={},n={},i=e.exports=function(e,i,r,a,s){var l,c,u,f,h=s?function(){return e}:He(e),d=T(r,a,i?2:1),p=0;if("function"!=typeof h)throw TypeError(e+" is not iterable!");if(Le(h)){for(l=V(e.length);l>p;p++)if((f=i?d(o(c=e[p])[0],c[1]):d(e[p]))===t||f===n)return f}else for(u=h.call(e);!(c=u.next()).done;)if((f=dt(u,d,c.value,i))===t||f===n)return f};i.BREAK=t,i.RETURN=n}),gt=t(function(e){var t=E("meta"),n=p.f,i=0,o=Object.isExtensible||function(){return!0},s=!a(function(){return o(Object.preventExtensions({}))}),l=function(e){n(e,t,{value:{i:"O"+ ++i,w:{}}})},c=e.exports={KEY:t,NEED:!1,fastKey:function(e,n){if(!r(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!v(e,t)){if(!o(e))return"F";if(!n)return"E";l(e)}return e[t].i},getWeak:function(e,n){if(!v(e,t)){if(!o(e))return!0;if(!n)return!1;l(e)}return e[t].w},onFreeze:function(e){return s&&c.NEED&&o(e)&&!v(e,t)&&l(e),e}}}),mt=(gt.KEY,gt.NEED,gt.fastKey,gt.getWeak,gt.onFreeze,function(e,t){if(!r(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e}),yt=p.f,vt=gt.fastKey,bt=s?"_s":"size",wt=function(e,t){var n,i=vt(t);if("F"!==i)return e._i[i];for(n=e._f;n;n=n.n)if(n.k==t)return n},Et={getConstructor:function(e,t,n,i){var r=e(function(e,o){F(e,r,t,"_i"),e._t=t,e._i=qe(null),e._f=void 0,e._l=void 0,e[bt]=0,null!=o&&pt(o,n,e[i],e)});return I(r.prototype,{clear:function(){for(var e=mt(this,t),n=e._i,i=e._f;i;i=i.n)i.r=!0,i.p&&(i.p=i.p.n=void 0),delete n[i.i];e._f=e._l=void 0,e[bt]=0},delete:function(e){var n=mt(this,t),i=wt(n,e);if(i){var r=i.n,o=i.p;delete n._i[i.i],i.r=!0,o&&(o.n=r),r&&(r.p=o),n._f==i&&(n._f=r),n._l==i&&(n._l=o),n[bt]--}return!!i},forEach:function(e){mt(this,t);for(var n,i=T(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(i(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!wt(mt(this,t),e)}}),s&&yt(r.prototype,"size",{get:function(){return mt(this,t)[bt]}}),r},def:function(e,t,n){var i,r,o=wt(e,t);return o?o.v=n:(e._l=o={i:r=vt(t,!0),k:t,v:n,p:i=e._l,n:void 0,r:!1},e._f||(e._f=o),i&&(i.n=o),e[bt]++,"F"!==r&&(e._i[r]=o)),e},getEntry:wt,setStrong:function(e,t,n){it(e,t,function(e,n){this._t=mt(e,t),this._k=n,this._l=void 0},function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?$e(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,$e(1))},n?"entries":"values",!n,!0),ye(t)}},kt=function(e,t){if(o(e),!r(t)&&null!==t)throw TypeError(t+": can't set as prototype!")},St={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,n){try{(n=T(Function.call,ft.f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,i){return kt(e,i),t?e.__proto__=i:n(e,i),e}}({},!1):void 0),check:kt},Tt=St.set,At=function(e,t,i,o,s,l){var c=n[e],u=c,f=s?"set":"add",h=u&&u.prototype,d={},p=function(e){var t=h[e];k(h,e,"delete"==e?function(e){return!(l&&!r(e))&&t.call(this,0===e?0:e)}:"has"==e?function(e){return!(l&&!r(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return l&&!r(e)?void 0:t.call(this,0===e?0:e)}:"add"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,n){return t.call(this,0===e?0:e,n),this})};if("function"==typeof u&&(l||h.forEach&&!a(function(){(new u).entries().next()}))){var g=new u,m=g[f](l?{}:-0,1)!=g,y=a(function(){g.has(1)}),v=st(function(e){new u(e)}),b=!l&&a(function(){for(var e=new u,t=5;t--;)e[f](t,t);return!e.has(-0)});v||((u=t(function(t,n){F(t,u,e);var i=function(e,t,n){var i,o=t.constructor;return o!==n&&"function"==typeof o&&(i=o.prototype)!==n.prototype&&r(i)&&Tt&&Tt(e,i),e}(new c,t,u);return null!=n&&pt(n,s,i[f],i),i})).prototype=h,h.constructor=u),(y||b)&&(p("delete"),p("has"),s&&p("get")),(b||m)&&p(f),l&&h.clear&&delete h.clear}else u=o.getConstructor(t,e,s,f),I(u.prototype,i),gt.NEED=!0;return he(u,e),d[e]=u,C(C.G+C.W+C.F*(u!=c),d),l||o.setStrong(u,e,s),u},_t=(At("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var t=Et.getEntry(mt(this,"Map"),e);return t&&t.v},set:function(e,t){return Et.def(mt(this,"Map"),0===e?0:e,t)}},Et,!0),At("Set",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return Et.def(mt(this,"Set"),e=0===e?0:e,e)}},Et),{f:Object.getOwnPropertySymbols}),Ct=Object.assign,Pt=!Ct||a(function(){var e={},t={},n=Symbol(),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach(function(e){t[e]=e}),7!=Ct({},e)[n]||Object.keys(Ct({},t)).join("")!=i})?function(e,t){for(var n=se(e),i=arguments.length,r=1,o=_t.f,a=ct.f;i>r;)for(var s,l=z(arguments[r++]),c=o?Me(l).concat(o(l)):Me(l),u=c.length,f=0;u>f;)a.call(l,s=c[f++])&&(n[s]=l[s]);return n}:Ct,xt=gt.getWeak,Lt=Ye(5),Mt=Ye(6),Ot=0,Nt=function(e){return e._l||(e._l=new jt)},jt=function(){this.a=[]},It=function(e,t){return Lt(e.a,function(e){return e[0]===t})};jt.prototype={get:function(e){var t=It(this,e);if(t)return t[1]},has:function(e){return!!It(this,e)},set:function(e,t){var n=It(this,e);n?n[1]=t:this.a.push([e,t])},delete:function(e){var t=Mt(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}};var Ft={getConstructor:function(e,t,n,i){var o=e(function(e,r){F(e,o,t,"_i"),e._t=t,e._i=Ot++,e._l=void 0,null!=r&&pt(r,n,e[i],e)});return I(o.prototype,{delete:function(e){if(!r(e))return!1;var n=xt(e);return!0===n?Nt(mt(this,t)).delete(e):n&&v(n,this._i)&&delete n[this._i]},has:function(e){if(!r(e))return!1;var n=xt(e);return!0===n?Nt(mt(this,t)).has(e):n&&v(n,this._i)}}),o},def:function(e,t,n){var i=xt(o(t),!0);return!0===i?Nt(e).set(t,n):i[e._i]=n,e},ufstore:Nt};t(function(e){var t,n=Ye(0),i=gt.getWeak,o=Object.isExtensible,s=Ft.ufstore,l={},c=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},u={get:function(e){if(r(e)){var t=i(e);return!0===t?s(mt(this,"WeakMap")).get(e):t?t[this._i]:void 0}},set:function(e,t){return Ft.def(mt(this,"WeakMap"),e,t)}},f=e.exports=At("WeakMap",c,u,Ft,!0,!0);a(function(){return 7!=(new f).set((Object.freeze||Object)(l),7).get(l)})&&(t=Ft.getConstructor(c,"WeakMap"),Pt(t.prototype,u),gt.NEED=!0,n(["delete","has","get","set"],function(e){var n=f.prototype,i=n[e];k(n,e,function(n,a){if(r(n)&&!o(n)){this._f||(this._f=new t);var s=this._f[e](n,a);return"set"==e?this:s}return i.call(this,n,a)})}))});At("WeakSet",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return Ft.def(mt(this,"WeakSet"),e,!0)}},Ft,!1,!0);var Rt=(n.Reflect||{}).apply,qt=Function.apply;C(C.S+C.F*!a(function(){Rt(function(){})}),"Reflect",{apply:function(e,t,n){var i=S(e),r=o(n);return Rt?Rt(i,t,r):qt.call(i,t,r)}});var Ut=function(e,t,n){var i=void 0===n;switch(t.length){case 0:return i?e():e.call(n);case 1:return i?e(t[0]):e.call(n,t[0]);case 2:return i?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return i?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return i?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)},Bt=[].slice,Vt={},Dt=Function.bind||function(e){var t=S(this),n=Bt.call(arguments,1),i=function(){var r=n.concat(Bt.call(arguments));return this instanceof i?function(e,t,n){if(!(t in Vt)){for(var i=[],r=0;r<t;r++)i[r]="a["+r+"]";Vt[t]=Function("F,a","return new F("+i.join(",")+")")}return Vt[t](e,n)}(t,r.length,r):Ut(t,r,e)};return r(t.prototype)&&(i.prototype=t.prototype),i},Ht=(n.Reflect||{}).construct,Wt=a(function(){function e(){}return!(Ht(function(){},[],e)instanceof e)}),zt=!a(function(){Ht(function(){})});C(C.S+C.F*(Wt||zt),"Reflect",{construct:function(e,t){S(e),o(t);var n=arguments.length<3?e:S(arguments[2]);if(zt&&!Wt)return Ht(e,t,n);if(e==n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var i=[null];return i.push.apply(i,t),new(Dt.apply(e,i))}var a=n.prototype,s=qe(r(a)?a:Object.prototype),l=Function.apply.call(e,s,t);return r(l)?l:s}}),C(C.S+C.F*a(function(){Reflect.defineProperty(p.f({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(e,t,n){o(e),t=h(t,!0),o(n);try{return p.f(e,t,n),!0}catch(e){return!1}}});var Gt=ft.f;C(C.S,"Reflect",{deleteProperty:function(e,t){var n=Gt(o(e),t);return!(n&&!n.configurable)&&delete e[t]}}),C(C.S,"Reflect",{get:function e(t,n){var i,a,s=arguments.length<3?t:arguments[2];return o(t)===s?t[n]:(i=ft.f(t,n))?v(i,"value")?i.value:void 0!==i.get?i.get.call(s):void 0:r(a=Ve(t))?e(a,n,s):void 0}}),C(C.S,"Reflect",{getOwnPropertyDescriptor:function(e,t){return ft.f(o(e),t)}}),C(C.S,"Reflect",{getPrototypeOf:function(e){return Ve(o(e))}}),C(C.S,"Reflect",{has:function(e,t){return t in e}});var Yt=Object.isExtensible;C(C.S,"Reflect",{isExtensible:function(e){return o(e),!Yt||Yt(e)}});var Kt=n.Reflect,Qt=Kt&&Kt.ownKeys||function(e){var t=ae.f(o(e)),n=_t.f;return n?t.concat(n(e)):t};C(C.S,"Reflect",{ownKeys:Qt});var Jt=Object.preventExtensions;C(C.S,"Reflect",{preventExtensions:function(e){o(e);try{return Jt&&Jt(e),!0}catch(e){return!1}}}),C(C.S,"Reflect",{set:function e(t,n,i){var a,s,l=arguments.length<4?t:arguments[3],c=ft.f(o(t),n);if(!c){if(r(s=Ve(t)))return e(s,n,i,l);c=g(0)}if(v(c,"value")){if(!1===c.writable||!r(l))return!1;if(a=ft.f(l,n)){if(a.get||a.set||!1===a.writable)return!1;a.value=i,p.f(l,n,a)}else p.f(l,n,g(0,i));return!0}return void 0!==c.set&&(c.set.call(l,i),!0)}}),St&&C(C.S,"Reflect",{setPrototypeOf:function(e,t){St.check(e,t);try{return St.set(e,t),!0}catch(e){return!1}}});var $t,Xt,Zt,en=n.process,tn=n.setImmediate,nn=n.clearImmediate,rn=n.MessageChannel,on=n.Dispatch,an=0,sn={},ln=function(){var e=+this;if(sn.hasOwnProperty(e)){var t=sn[e];delete sn[e],t()}},cn=function(e){ln.call(e.data)};tn&&nn||(tn=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return sn[++an]=function(){Ut("function"==typeof e?e:Function(e),t)},$t(an),an},nn=function(e){delete sn[e]},"process"==W(en)?$t=function(e){en.nextTick(T(ln,e,1))}:on&&on.now?$t=function(e){on.now(T(ln,e,1))}:rn?(Zt=(Xt=new rn).port2,Xt.port1.onmessage=cn,$t=T(Zt.postMessage,Zt,1)):n.addEventListener&&"function"==typeof postMessage&&!n.importScripts?($t=function(e){n.postMessage(e+"","*")},n.addEventListener("message",cn,!1)):$t="onreadystatechange"in u("script")?function(e){je.appendChild(u("script")).onreadystatechange=function(){je.removeChild(this),ln.call(e)}}:function(e){setTimeout(T(ln,e,1),0)});var un={set:tn,clear:nn},fn=un.set,hn=n.MutationObserver||n.WebKitMutationObserver,dn=n.process,pn=n.Promise,gn="process"==W(dn);function mn(e){var t,n;this.promise=new e(function(e,i){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=i}),this.resolve=S(t),this.reject=S(n)}var yn,vn,bn,wn,En={f:function(e){return new mn(e)}},kn=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}},Sn=n.navigator,Tn=Sn&&Sn.userAgent||"",An=un.set,_n=function(){var e,t,i,r=function(){var n,r;for(gn&&(n=dn.domain)&&n.exit();e;){r=e.fn,e=e.next;try{r()}catch(n){throw e?i():t=void 0,n}}t=void 0,n&&n.enter()};if(gn)i=function(){dn.nextTick(r)};else if(!hn||n.navigator&&n.navigator.standalone)if(pn&&pn.resolve){var o=pn.resolve(void 0);i=function(){o.then(r)}}else i=function(){fn.call(n,r)};else{var a=!0,s=document.createTextNode("");new hn(r).observe(s,{characterData:!0}),i=function(){s.data=a=!a}}return function(n){var r={fn:n,next:void 0};t&&(t.next=r),e||(e=r,i()),t=r}}(),Cn=n.TypeError,Pn=n.process,xn=Pn&&Pn.versions,Ln=xn&&xn.v8||"",Mn=n.Promise,On="process"==_e(Pn),Nn=function(){},jn=vn=En.f,In=!!function(){try{var e=Mn.resolve(1),t=(e.constructor={})[ce("species")]=function(e){e(Nn,Nn)};return(On||"function"==typeof PromiseRejectionEvent)&&e.then(Nn)instanceof t&&0!==Ln.indexOf("6.6")&&-1===Tn.indexOf("Chrome/66")}catch(e){}}(),Fn=function(e){var t;return!(!r(e)||"function"!=typeof(t=e.then))&&t},Rn=function(e,t){if(!e._n){e._n=!0;var n=e._c;_n(function(){for(var i=e._v,r=1==e._s,o=0,a=function(t){var n,o,a,s=r?t.ok:t.fail,l=t.resolve,c=t.reject,u=t.domain;try{s?(r||(2==e._h&&Bn(e),e._h=1),!0===s?n=i:(u&&u.enter(),n=s(i),u&&(u.exit(),a=!0)),n===t.promise?c(Cn("Promise-chain cycle")):(o=Fn(n))?o.call(n,l,c):l(n)):c(i)}catch(e){u&&!a&&u.exit(),c(e)}};n.length>o;)a(n[o++]);e._c=[],e._n=!1,t&&!e._h&&qn(e)})}},qn=function(e){An.call(n,function(){var t,i,r,o=e._v,a=Un(e);if(a&&(t=kn(function(){On?Pn.emit("unhandledRejection",o,e):(i=n.onunhandledrejection)?i({promise:e,reason:o}):(r=n.console)&&r.error&&r.error("Unhandled promise rejection",o)}),e._h=On||Un(e)?2:1),e._a=void 0,a&&t.e)throw t.v})},Un=function(e){return 1!==e._h&&0===(e._a||e._c).length},Bn=function(e){An.call(n,function(){var t;On?Pn.emit("rejectionHandled",e):(t=n.onrejectionhandled)&&t({promise:e,reason:e._v})})},Vn=function(e){var t=this;t._d||(t._d=!0,(t=t._w||t)._v=e,t._s=2,t._a||(t._a=t._c.slice()),Rn(t,!0))},Dn=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw Cn("Promise can't be resolved itself");(t=Fn(e))?_n(function(){var i={_w:n,_d:!1};try{t.call(e,T(Dn,i,1),T(Vn,i,1))}catch(e){Vn.call(i,e)}}):(n._v=e,n._s=1,Rn(n,!1))}catch(e){Vn.call({_w:n,_d:!1},e)}}};In||(Mn=function(e){F(this,Mn,"Promise","_h"),S(e),yn.call(this);try{e(T(Dn,this,1),T(Vn,this,1))}catch(e){Vn.call(this,e)}},(yn=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=I(Mn.prototype,{then:function(e,t){var n=jn(ge(this,Mn));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=On?Pn.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&Rn(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),bn=function(){var e=new yn;this.promise=e,this.resolve=T(Dn,e,1),this.reject=T(Vn,e,1)},En.f=jn=function(e){return e===Mn||e===wn?new bn(e):vn(e)}),C(C.G+C.W+C.F*!In,{Promise:Mn}),he(Mn,"Promise"),ye("Promise"),wn=i.Promise,C(C.S+C.F*!In,"Promise",{reject:function(e){var t=jn(this);return(0,t.reject)(e),t.promise}}),C(C.S+C.F*!In,"Promise",{resolve:function(e){return function(e,t){if(o(e),r(t)&&t.constructor===e)return t;var n=En.f(e);return(0,n.resolve)(t),n.promise}(this,e)}}),C(C.S+C.F*!(In&&st(function(e){Mn.all(e).catch(Nn)})),"Promise",{all:function(e){var t=this,n=jn(t),i=n.resolve,r=n.reject,o=kn(function(){var n=[],o=0,a=1;pt(e,!1,function(e){var s=o++,l=!1;n.push(void 0),a++,t.resolve(e).then(function(e){l||(l=!0,n[s]=e,--a||i(n))},r)}),--a||i(n)});return o.e&&r(o.v),n.promise},race:function(e){var t=this,n=jn(t),i=n.reject,r=kn(function(){pt(e,!1,function(e){t.resolve(e).then(n.resolve,i)})});return r.e&&i(r.v),n.promise}});var Hn={f:ce},Wn=p.f,zn=function(e){var t=i.Symbol||(i.Symbol=n.Symbol||{});"_"==e.charAt(0)||e in t||Wn(t,e,{value:Hn.f(e)})},Gn=ae.f,Yn={}.toString,Kn="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],Qn={f:function(e){return Kn&&"[object Window]"==Yn.call(e)?function(e){try{return Gn(e)}catch(e){return Kn.slice()}}(e):Gn(Y(e))}},Jn=gt.KEY,$n=ft.f,Xn=p.f,Zn=Qn.f,ei=n.Symbol,ti=n.JSON,ni=ti&&ti.stringify,ii=ce("_hidden"),ri=ce("toPrimitive"),oi={}.propertyIsEnumerable,ai=X("symbol-registry"),si=X("symbols"),li=X("op-symbols"),ci=Object.prototype,ui="function"==typeof ei,fi=n.QObject,hi=!fi||!fi.prototype||!fi.prototype.findChild,di=s&&a(function(){return 7!=qe(Xn({},"a",{get:function(){return Xn(this,"a",{value:7}).a}})).a})?function(e,t,n){var i=$n(ci,t);i&&delete ci[t],Xn(e,t,n),i&&e!==ci&&Xn(ci,t,i)}:Xn,pi=function(e){var t=si[e]=qe(ei.prototype);return t._k=e,t},gi=ui&&"symbol"==typeof ei.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof ei},mi=function(e,t,n){return e===ci&&mi(li,t,n),o(e),t=h(t,!0),o(n),v(si,t)?(n.enumerable?(v(e,ii)&&e[ii][t]&&(e[ii][t]=!1),n=qe(n,{enumerable:g(0,!1)})):(v(e,ii)||Xn(e,ii,g(1,{})),e[ii][t]=!0),di(e,t,n)):Xn(e,t,n)},yi=function(e,t){o(e);for(var n,i=function(e){var t=Me(e),n=_t.f;if(n)for(var i,r=n(e),o=ct.f,a=0;r.length>a;)o.call(e,i=r[a++])&&t.push(i);return t}(t=Y(t)),r=0,a=i.length;a>r;)mi(e,n=i[r++],t[n]);return e},vi=function(e){var t=oi.call(this,e=h(e,!0));return!(this===ci&&v(si,e)&&!v(li,e))&&(!(t||!v(this,e)||!v(si,e)||v(this,ii)&&this[ii][e])||t)},bi=function(e,t){if(e=Y(e),t=h(t,!0),e!==ci||!v(si,t)||v(li,t)){var n=$n(e,t);return!n||!v(si,t)||v(e,ii)&&e[ii][t]||(n.enumerable=!0),n}},wi=function(e){for(var t,n=Zn(Y(e)),i=[],r=0;n.length>r;)v(si,t=n[r++])||t==ii||t==Jn||i.push(t);return i},Ei=function(e){for(var t,n=e===ci,i=Zn(n?li:Y(e)),r=[],o=0;i.length>o;)!v(si,t=i[o++])||n&&!v(ci,t)||r.push(si[t]);return r};ui||(k((ei=function(){if(this instanceof ei)throw TypeError("Symbol is not a constructor!");var e=E(arguments.length>0?arguments[0]:void 0),t=function(n){this===ci&&t.call(li,n),v(this,ii)&&v(this[ii],e)&&(this[ii][e]=!1),di(this,e,g(1,n))};return s&&hi&&di(ci,e,{configurable:!0,set:t}),pi(e)}).prototype,"toString",function(){return this._k}),ft.f=bi,p.f=mi,ae.f=Qn.f=wi,ct.f=vi,_t.f=Ei,s&&k(ci,"propertyIsEnumerable",vi,!0),Hn.f=function(e){return pi(ce(e))}),C(C.G+C.W+C.F*!ui,{Symbol:ei});for(var ki="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),Si=0;ki.length>Si;)ce(ki[Si++]);for(var Ti=Me(ce.store),Ai=0;Ti.length>Ai;)zn(Ti[Ai++]);C(C.S+C.F*!ui,"Symbol",{for:function(e){return v(ai,e+="")?ai[e]:ai[e]=ei(e)},keyFor:function(e){if(!gi(e))throw TypeError(e+" is not a symbol!");for(var t in ai)if(ai[t]===e)return t},useSetter:function(){hi=!0},useSimple:function(){hi=!1}}),C(C.S+C.F*!ui,"Object",{create:function(e,t){return void 0===t?qe(e):yi(qe(e),t)},defineProperty:mi,defineProperties:yi,getOwnPropertyDescriptor:bi,getOwnPropertyNames:wi,getOwnPropertySymbols:Ei}),ti&&C(C.S+C.F*(!ui||a(function(){var e=ei();return"[null]"!=ni([e])||"{}"!=ni({a:e})||"{}"!=ni(Object(e))})),"JSON",{stringify:function(e){for(var t,n,i=[e],o=1;arguments.length>o;)i.push(arguments[o++]);if(n=t=i[1],(r(t)||void 0!==e)&&!gi(e))return We(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!gi(t))return t}),i[1]=t,ni.apply(ti,i)}}),ei.prototype[ri]||m(ei.prototype,ri,ei.prototype.valueOf),he(ei,"Symbol"),he(Math,"Math",!0),he(n.JSON,"JSON",!0);var _i=function(e,t){var n=(i.Object||{})[e]||Object[e],r={};r[e]=t(n),C(C.S+C.F*a(function(){n(1)}),"Object",r)},Ci=gt.onFreeze;_i("freeze",function(e){return function(t){return e&&r(t)?e(Ci(t)):t}});var Pi=gt.onFreeze;_i("seal",function(e){return function(t){return e&&r(t)?e(Pi(t)):t}});var xi=gt.onFreeze;_i("preventExtensions",function(e){return function(t){return e&&r(t)?e(xi(t)):t}}),_i("isFrozen",function(e){return function(t){return!r(t)||!!e&&e(t)}}),_i("isSealed",function(e){return function(t){return!r(t)||!!e&&e(t)}}),_i("isExtensible",function(e){return function(t){return!!r(t)&&(!e||e(t))}});var Li=ft.f;_i("getOwnPropertyDescriptor",function(){return function(e,t){return Li(Y(e),t)}}),_i("getPrototypeOf",function(){return function(e){return Ve(se(e))}}),_i("keys",function(){return function(e){return Me(se(e))}}),_i("getOwnPropertyNames",function(){return Qn.f}),C(C.S+C.F,"Object",{assign:Pt});var Mi=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t};C(C.S,"Object",{is:Mi});var Oi=p.f,Ni=Function.prototype,ji=/^\s*function ([^ (]*)/;"name"in Ni||s&&Oi(Ni,"name",{configurable:!0,get:function(){try{return(""+this).match(ji)[1]}catch(e){return""}}}),C(C.S,"String",{raw:function(e){for(var t=Y(e.raw),n=V(t.length),i=arguments.length,r=[],o=0;n>o;)r.push(String(t[o++])),o<i&&r.push(String(arguments[o]));return r.join("")}});var Ii=String.fromCharCode,Fi=String.fromCodePoint;C(C.S+C.F*(!!Fi&&1!=Fi.length),"String",{fromCodePoint:function(e){for(var t,n=[],i=arguments.length,r=0;i>r;){if(t=+arguments[r++],J(t,1114111)!==t)throw RangeError(t+" is not a valid code point");n.push(t<65536?Ii(t):Ii(55296+((t-=65536)>>10),t%1024+56320))}return n.join("")}});var Ri,qi=(Ri=!1,function(e,t){var n,i,r=String(G(e)),o=U(t),a=r.length;return o<0||o>=a?Ri?"":void 0:(n=r.charCodeAt(o))<55296||n>56319||o+1===a||(i=r.charCodeAt(o+1))<56320||i>57343?Ri?r.charAt(o):n:Ri?r.slice(o,o+2):i-56320+(n-55296<<10)+65536});C(C.P,"String",{codePointAt:function(e){return qi(this,e)}});var Ui=function(e){var t=String(G(this)),n="",i=U(e);if(i<0||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(t+=t))1&i&&(n+=t);return n};C(C.P,"String",{repeat:Ui});var Bi=ce("match"),Vi=function(e){var t;return r(e)&&(void 0!==(t=e[Bi])?!!t:"RegExp"==W(e))},Di=function(e,t,n){if(Vi(t))throw TypeError("String#"+n+" doesn't accept regex!");return String(G(e))},Hi=ce("match"),Wi=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[Hi]=!1,!"/./"[e](t)}catch(e){}}return!0},zi="".startsWith;C(C.P+C.F*Wi("startsWith"),"String",{startsWith:function(e){var t=Di(this,e,"startsWith"),n=V(Math.min(arguments.length>1?arguments[1]:void 0,t.length)),i=String(e);return zi?zi.call(t,i,n):t.slice(n,n+i.length)===i}});var Gi="".endsWith;C(C.P+C.F*Wi("endsWith"),"String",{endsWith:function(e){var t=Di(this,e,"endsWith"),n=arguments.length>1?arguments[1]:void 0,i=V(t.length),r=void 0===n?i:Math.min(V(n),i),o=String(e);return Gi?Gi.call(t,o,r):t.slice(r-o.length,r)===o}});C(C.P+C.F*Wi("includes"),"String",{includes:function(e){return!!~Di(this,e,"includes").indexOf(e,arguments.length>1?arguments[1]:void 0)}});s&&"g"!=/./g.flags&&p.f(RegExp.prototype,"flags",{configurable:!0,get:function(){var e=o(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t}});var Yi=function(e,t,n){var i=ce(e),r=n(G,i,""[e]),o=r[0],s=r[1];a(function(){var t={};return t[i]=function(){return 7},7!=""[e](t)})&&(k(String.prototype,e,o),m(RegExp.prototype,i,2==t?function(e,t){return s.call(e,this,t)}:function(e){return s.call(e,this)}))};Yi("match",1,function(e,t,n){return[function(n){var i=e(this),r=null==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]}),Yi("replace",2,function(e,t,n){return[function(i,r){var o=e(this),a=null==i?void 0:i[t];return void 0!==a?a.call(i,o,r):n.call(String(o),i,r)},n]}),Yi("split",2,function(e,t,n){var i=Vi,r=n,o=[].push;if("c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length){var a=void 0===/()??/.exec("")[1];n=function(e,t){var n=String(this);if(void 0===e&&0===t)return[];if(!i(e))return r.call(n,e,t);var s,l,c,u,f,h=[],d=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),p=0,g=void 0===t?4294967295:t>>>0,m=new RegExp(e.source,d+"g");for(a||(s=new RegExp("^"+m.source+"$(?!\\s)",d));(l=m.exec(n))&&!((c=l.index+l[0].length)>p&&(h.push(n.slice(p,l.index)),!a&&l.length>1&&l[0].replace(s,function(){for(f=1;f<arguments.length-2;f++)void 0===arguments[f]&&(l[f]=void 0)}),l.length>1&&l.index<n.length&&o.apply(h,l.slice(1)),u=l[0].length,p=c,h.length>=g));)m.lastIndex===l.index&&m.lastIndex++;return p===n.length?!u&&m.test("")||h.push(""):h.push(n.slice(p)),h.length>g?h.slice(0,g):h}}else"0".split(void 0,0).length&&(n=function(e,t){return void 0===e&&0===t?[]:r.call(this,e,t)});return[function(i,r){var o=e(this),a=null==i?void 0:i[t];return void 0!==a?a.call(i,o,r):n.call(String(o),i,r)},n]}),Yi("search",1,function(e,t,n){return[function(n){var i=e(this),r=null==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]});var Ki=function(e,t,n){t in e?p.f(e,t,g(0,n)):e[t]=n};C(C.S+C.F*!st(function(e){}),"Array",{from:function(e){var t,n,i,r,o=se(e),a="function"==typeof this?this:Array,s=arguments.length,l=s>1?arguments[1]:void 0,c=void 0!==l,u=0,f=He(o);if(c&&(l=T(l,s>2?arguments[2]:void 0,2)),null==f||a==Array&&Le(f))for(n=new a(t=V(o.length));t>u;u++)Ki(n,u,c?l(o[u],u):o[u]);else for(r=f.call(o),n=new a;!(i=r.next()).done;u++)Ki(n,u,c?dt(r,l,[i.value,u],!0):i.value);return n.length=u,n}}),C(C.S+C.F*a(function(){function e(){}return!(Array.of.call(e)instanceof e)}),"Array",{of:function(){for(var e=0,t=arguments.length,n=new("function"==typeof this?this:Array)(t);t>e;)Ki(n,e,arguments[e++]);return n.length=t,n}}),C(C.P,"Array",{copyWithin:lt}),Je("copyWithin");var Qi=Ye(5),Ji=!0;"find"in[]&&Array(1).find(function(){Ji=!1}),C(C.P+C.F*Ji,"Array",{find:function(e){return Qi(this,e,arguments.length>1?arguments[1]:void 0)}}),Je("find");var $i=Ye(6),Xi=!0;"findIndex"in[]&&Array(1).findIndex(function(){Xi=!1}),C(C.P+C.F*Xi,"Array",{findIndex:function(e){return $i(this,e,arguments.length>1?arguments[1]:void 0)}}),Je("findIndex"),C(C.P,"Array",{fill:le}),Je("fill");var Zi=n.isFinite;C(C.S,"Number",{isFinite:function(e){return"number"==typeof e&&Zi(e)}});var er=Math.floor,tr=function(e){return!r(e)&&isFinite(e)&&er(e)===e};C(C.S,"Number",{isInteger:tr});var nr=Math.abs;C(C.S,"Number",{isSafeInteger:function(e){return tr(e)&&nr(e)<=9007199254740991}}),C(C.S,"Number",{isNaN:function(e){return e!=e}}),C(C.S,"Number",{EPSILON:Math.pow(2,-52)}),C(C.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991}),C(C.S,"Number",{MAX_SAFE_INTEGER:9007199254740991});var ir=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:Math.log(1+e)},rr=Math.sqrt,or=Math.acosh;C(C.S+C.F*!(or&&710==Math.floor(or(Number.MAX_VALUE))&&or(1/0)==1/0),"Math",{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?Math.log(e)+Math.LN2:ir(e-1+rr(e-1)*rr(e+1))}});var ar=Math.asinh;C(C.S+C.F*!(ar&&1/ar(0)>0),"Math",{asinh:function e(t){return isFinite(t=+t)&&0!=t?t<0?-e(-t):Math.log(t+Math.sqrt(t*t+1)):t}});var sr=Math.atanh;C(C.S+C.F*!(sr&&1/sr(-0)<0),"Math",{atanh:function(e){return 0==(e=+e)?e:Math.log((1+e)/(1-e))/2}});var lr=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1};C(C.S,"Math",{cbrt:function(e){return lr(e=+e)*Math.pow(Math.abs(e),1/3)}}),C(C.S,"Math",{clz32:function(e){return(e>>>=0)?31-Math.floor(Math.log(e+.5)*Math.LOG2E):32}});var cr=Math.exp;C(C.S,"Math",{cosh:function(e){return(cr(e=+e)+cr(-e))/2}});var ur=Math.expm1,fr=!ur||ur(10)>22025.465794806718||ur(10)<22025.465794806718||-2e-17!=ur(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:Math.exp(e)-1}:ur;C(C.S+C.F*(fr!=Math.expm1),"Math",{expm1:fr});var hr=Math.pow,dr=hr(2,-52),pr=hr(2,-23),gr=hr(2,127)*(2-pr),mr=hr(2,-126),yr=Math.fround||function(e){var t,n,i=Math.abs(e),r=lr(e);return i<mr?r*(i/mr/pr+1/dr-1/dr)*mr*pr:(n=(t=(1+pr/dr)*i)-(t-i))>gr||n!=n?r*(1/0):r*n};C(C.S,"Math",{fround:yr});var vr=Math.abs;C(C.S,"Math",{hypot:function(e,t){for(var n,i,r=0,o=0,a=arguments.length,s=0;o<a;)s<(n=vr(arguments[o++]))?(r=r*(i=s/n)*i+1,s=n):r+=n>0?(i=n/s)*i:n;return s===1/0?1/0:s*Math.sqrt(r)}});var br=Math.imul;C(C.S+C.F*a(function(){return-5!=br(4294967295,5)||2!=br.length}),"Math",{imul:function(e,t){var n=+e,i=+t,r=65535&n,o=65535&i;return 0|r*o+((65535&n>>>16)*o+r*(65535&i>>>16)<<16>>>0)}}),C(C.S,"Math",{log1p:ir}),C(C.S,"Math",{log10:function(e){return Math.log(e)*Math.LOG10E}}),C(C.S,"Math",{log2:function(e){return Math.log(e)/Math.LN2}}),C(C.S,"Math",{sign:lr});var wr=Math.exp;C(C.S+C.F*a(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(e){return Math.abs(e=+e)<1?(fr(e)-fr(-e))/2:(wr(e-1)-wr(-e-1))*(Math.E/2)}});var Er=Math.exp;C(C.S,"Math",{tanh:function(e){var t=fr(e=+e),n=fr(-e);return t==1/0?1:n==1/0?-1:(t-n)/(Er(e)+Er(-e))}}),C(C.S,"Math",{trunc:function(e){return(e>0?Math.floor:Math.ceil)(e)}});var kr=$(!0);C(C.P,"Array",{includes:function(e){return kr(this,e,arguments.length>1?arguments[1]:void 0)}}),Je("includes");var Sr=ct.f,Tr=function(e){return function(t){for(var n,i=Y(t),r=Me(i),o=r.length,a=0,s=[];o>a;)Sr.call(i,n=r[a++])&&s.push(e?[n,i[n]]:i[n]);return s}},Ar=Tr(!1);C(C.S,"Object",{values:function(e){return Ar(e)}});var _r=Tr(!0);C(C.S,"Object",{entries:function(e){return _r(e)}}),C(C.S,"Object",{getOwnPropertyDescriptors:function(e){for(var t,n,i=Y(e),r=ft.f,o=Qt(i),a={},s=0;o.length>s;)void 0!==(n=r(i,t=o[s++]))&&Ki(a,t,n);return a}});var Cr=function(e,t,n,i){var r=String(G(e)),o=r.length,a=void 0===n?" ":String(n),s=V(t);if(s<=o||""==a)return r;var l=s-o,c=Ui.call(a,Math.ceil(l/a.length));return c.length>l&&(c=c.slice(0,l)),i?c+r:r+c};C(C.P+C.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(Tn),"String",{padStart:function(e){return Cr(this,e,arguments.length>1?arguments[1]:void 0,!0)}}),C(C.P+C.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(Tn),"String",{padEnd:function(e){return Cr(this,e,arguments.length>1?arguments[1]:void 0,!1)}});var Pr=[].slice,xr=/MSIE .\./.test(Tn),Lr=function(e){return function(t,n){var i=arguments.length>2,r=!!i&&Pr.call(arguments,2);return e(i?function(){("function"==typeof t?t:Function(t)).apply(this,r)}:t,n)}};C(C.G+C.B+C.F*xr,{setTimeout:Lr(n.setTimeout),setInterval:Lr(n.setInterval)}),C(C.G+C.B,{setImmediate:un.set,clearImmediate:un.clear});for(var Mr=ce("iterator"),Or=ce("toStringTag"),Nr=Ce.Array,jr={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},Ir=Me(jr),Fr=0;Fr<Ir.length;Fr++){var Rr,qr=Ir[Fr],Ur=jr[qr],Br=n[qr],Vr=Br&&Br.prototype;if(Vr&&(Vr[Mr]||m(Vr,Mr,Nr),Vr[Or]||m(Vr,Or,qr),Ce[qr]=Nr,Ur))for(Rr in rt)Vr[Rr]||k(Vr,Rr,rt[Rr],!0)}t(function(t){!function(e){var n,i=Object.prototype,r=i.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},a=o.iterator||"@@iterator",s=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag",c=e.regeneratorRuntime;if(c)t.exports=c;else{(c=e.regeneratorRuntime=t.exports).wrap=b;var u="suspendedStart",f="suspendedYield",h="executing",d="completed",p={},g={};g[a]=function(){return this};var m=Object.getPrototypeOf,y=m&&m(m(L([])));y&&y!==i&&r.call(y,a)&&(g=y);var v=S.prototype=E.prototype=Object.create(g);k.prototype=v.constructor=S,S.constructor=k,S[l]=k.displayName="GeneratorFunction",c.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===k||"GeneratorFunction"===(t.displayName||t.name))},c.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,S):(e.__proto__=S,l in e||(e[l]="GeneratorFunction")),e.prototype=Object.create(v),e},c.awrap=function(e){return{__await:e}},T(A.prototype),A.prototype[s]=function(){return this},c.AsyncIterator=A,c.async=function(e,t,n,i){var r=new A(b(e,t,n,i));return c.isGeneratorFunction(t)?r:r.next().then(function(e){return e.done?e.value:r.next()})},T(v),v[l]="Generator",v[a]=function(){return this},v.toString=function(){return"[object Generator]"},c.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var i=t.pop();if(i in e)return n.value=i,n.done=!1,n}return n.done=!0,n}},c.values=L,x.prototype={constructor:x,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=n,this.done=!1,this.delegate=null,this.method="next",this.arg=n,this.tryEntries.forEach(P),!e)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=n)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function i(i,r){return s.type="throw",s.arg=e,t.next=i,r&&(t.method="next",t.arg=n),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var a=this.tryEntries[o],s=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var l=r.call(a,"catchLoc"),c=r.call(a,"finallyLoc");if(l&&c){if(this.prev<a.catchLoc)return i(a.catchLoc,!0);if(this.prev<a.finallyLoc)return i(a.finallyLoc)}else if(l){if(this.prev<a.catchLoc)return i(a.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return i(a.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var o=i;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var a=o?o.completion:{};return a.type=e,a.arg=t,o?(this.method="next",this.next=o.finallyLoc,p):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),p},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),P(n),p}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var i=n.completion;if("throw"===i.type){var r=i.arg;P(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,i){return this.delegate={iterator:L(e),resultName:t,nextLoc:i},"next"===this.method&&(this.arg=n),p}}}function b(e,t,n,i){var r=t&&t.prototype instanceof E?t:E,o=Object.create(r.prototype),a=new x(i||[]);return o._invoke=function(e,t,n){var i=u;return function(r,o){if(i===h)throw new Error("Generator is already running");if(i===d){if("throw"===r)throw o;return M()}for(n.method=r,n.arg=o;;){var a=n.delegate;if(a){var s=_(a,n);if(s){if(s===p)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(i===u)throw i=d,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);i=h;var l=w(e,t,n);if("normal"===l.type){if(i=n.done?d:f,l.arg===p)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(i=d,n.method="throw",n.arg=l.arg)}}}(e,n,a),o}function w(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}function E(){}function k(){}function S(){}function T(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function A(t){function n(e,i,o,a){var s=w(t[e],t,i);if("throw"!==s.type){var l=s.arg,c=l.value;return c&&"object"==typeof c&&r.call(c,"__await")?Promise.resolve(c.__await).then(function(e){n("next",e,o,a)},function(e){n("throw",e,o,a)}):Promise.resolve(c).then(function(e){l.value=e,o(l)},a)}a(s.arg)}var i;"object"==typeof e.process&&e.process.domain&&(n=e.process.domain.bind(n)),this._invoke=function(e,t){function r(){return new Promise(function(i,r){n(e,t,i,r)})}return i=i?i.then(r,r):r()}}function _(e,t){var i=e.iterator[t.method];if(i===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=n,_(e,t),"throw"===t.method))return p;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return p}var r=w(i,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,p;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=n),t.delegate=null,p):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,p)}function C(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function P(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function x(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(C,this),this.reset(!0)}function L(e){if(e){var t=e[a];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var i=-1,o=function t(){for(;++i<e.length;)if(r.call(e,i))return t.value=e[i],t.done=!1,t;return t.value=n,t.done=!0,t};return o.next=o}}return{next:M}}function M(){return{value:n,done:!0}}}("object"==typeof e?e:"object"==typeof window?window:"object"==typeof self?self:e)});try{var Dr=new window.CustomEvent("test");if(Dr.preventDefault(),!0!==Dr.defaultPrevented)throw new Error("Could not prevent default")}catch(e){var Hr=function(e,t){var n,i;return t=t||{bubbles:!1,cancelable:!1,detail:void 0},(n=document.createEvent("CustomEvent")).initCustomEvent(e,t.bubbles,t.cancelable,t.detail),i=n.preventDefault,n.preventDefault=function(){i.call(this);try{Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})}catch(e){this.defaultPrevented=!0}},n};Hr.prototype=window.Event.prototype,window.CustomEvent=Hr}!function(e){var t=function(){try{return!!Symbol.iterator}catch(e){return!1}}(),n=function(e){var n={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return t&&(n[Symbol.iterator]=function(){return n}),n},i=function(e){return encodeURIComponent(e).replace(/%20/g,"+")},r=function(e){return decodeURIComponent(e).replace(/\+/g," ")};"URLSearchParams"in e&&"a=1"===new URLSearchParams("?a=1").toString()||function(){var o=function(e){if(Object.defineProperty(this,"_entries",{value:{}}),"string"==typeof e){if(""!==e)for(var t,n=(e=e.replace(/^\?/,"")).split("&"),i=0;i<n.length;i++)t=n[i].split("="),this.append(r(t[0]),t.length>1?r(t[1]):"")}else if(e instanceof o){var a=this;e.forEach(function(e,t){a.append(e,t)})}},a=o.prototype;a.append=function(e,t){e in this._entries?this._entries[e].push(t.toString()):this._entries[e]=[t.toString()]},a.delete=function(e){delete this._entries[e]},a.get=function(e){return e in this._entries?this._entries[e][0]:null},a.getAll=function(e){return e in this._entries?this._entries[e].slice(0):[]},a.has=function(e){return e in this._entries},a.set=function(e,t){this._entries[e]=[t.toString()]},a.forEach=function(e,t){var n;for(var i in this._entries)if(this._entries.hasOwnProperty(i)){n=this._entries[i];for(var r=0;r<n.length;r++)e.call(t,n[r],i,this)}},a.keys=function(){var e=[];return this.forEach(function(t,n){e.push(n)}),n(e)},a.values=function(){var e=[];return this.forEach(function(t){e.push(t)}),n(e)},a.entries=function(){var e=[];return this.forEach(function(t,n){e.push([n,t])}),n(e)},t&&(a[Symbol.iterator]=a.entries),a.toString=function(){var e="";return this.forEach(function(t,n){e.length>0&&(e+="&"),e+=i(n)+"="+i(t)}),e},e.URLSearchParams=o}()}(void 0!==e?e:"undefined"!=typeof window?window:"undefined"!=typeof self?self:e),function(e){if(function(){try{var e=new URL("b","http://a");return e.pathname="c%20d","http://a/c%20d"===e.href&&e.searchParams}catch(e){return!1}}()||function(){var t=e.URL,n=function(e,t){"string"!=typeof e&&(e=String(e));var n=document.implementation.createHTMLDocument("");if(window.doc=n,t){var i=n.createElement("base");i.href=t,n.head.appendChild(i)}var r=n.createElement("a");if(r.href=e,n.body.appendChild(r),r.href=r.href,":"===r.protocol||!/:/.test(r.href))throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:r})},i=n.prototype;["hash","host","hostname","port","protocol","search"].forEach(function(e){!function(e){Object.defineProperty(i,e,{get:function(){return this._anchorElement[e]},set:function(t){this._anchorElement[e]=t},enumerable:!0})}(e)}),Object.defineProperties(i,{toString:{get:function(){var e=this;return function(){return e.href}}},href:{get:function(){return this._anchorElement.href.replace(/\?$/,"")},set:function(e){this._anchorElement.href=e},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\/?)/,"/")},set:function(e){this._anchorElement.pathname=e},enumerable:!0},origin:{get:function(){var e={"http:":80,"https:":443,"ftp:":21}[this._anchorElement.protocol],t=this._anchorElement.port!=e&&""!==this._anchorElement.port;return this._anchorElement.protocol+"//"+this._anchorElement.hostname+(t?":"+this._anchorElement.port:"")},enumerable:!0},password:{get:function(){return""},set:function(e){},enumerable:!0},username:{get:function(){return""},set:function(e){},enumerable:!0},searchParams:{get:function(){var e=new URLSearchParams(this.search),t=this;return["append","delete","set"].forEach(function(n){var i=e[n];e[n]=function(){i.apply(e,arguments),t.search=e.toString()}}),e},enumerable:!0}}),n.createObjectURL=function(e){return t.createObjectURL.apply(t,arguments)},n.revokeObjectURL=function(e){return t.revokeObjectURL.apply(t,arguments)},e.URL=n}(),void 0!==e.location&&!("origin"in e.location)){var t=function(){return e.location.protocol+"//"+e.location.hostname+(e.location.port?":"+e.location.port:"")};try{Object.defineProperty(e.location,"origin",{get:t,enumerable:!0})}catch(n){setInterval(function(){e.location.origin=t()},100)}}}(void 0!==e?e:"undefined"!=typeof window?window:"undefined"!=typeof self?self:e);var Wr,zr=t(function(e,t){var n;n=function(){var e=function(){},t={},n={},i={};function r(e,t){if(e){var r=i[e];if(n[e]=t,r)for(;r.length;)r[0](e,t),r.splice(0,1)}}function o(t,n){t.call&&(t={success:t}),n.length?(t.error||e)(n):(t.success||e)(t)}function a(t,n,i,r){var o,s,l=document,c=i.async,u=(i.numRetries||0)+1,f=i.before||e,h=t.replace(/^(css|img)!/,"");r=r||0,/(^css!|\.css$)/.test(t)?(o=!0,(s=l.createElement("link")).rel="stylesheet",s.href=h):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(s=l.createElement("img")).src=h:((s=l.createElement("script")).src=t,s.async=void 0===c||c),s.onload=s.onerror=s.onbeforeload=function(e){var l=e.type[0];if(o&&"hideFocus"in s)try{s.sheet.cssText.length||(l="e")}catch(e){l="e"}if("e"==l&&(r+=1)<u)return a(t,n,i,r);n(t,l,e.defaultPrevented)},!1!==f(t,s)&&l.head.appendChild(s)}function s(e,n,i){var s,l;if(n&&n.trim&&(s=n),l=(s?i:n)||{},s){if(s in t)throw"LoadJS";t[s]=!0}!function(e,t,n){var i,r,o=(e=e.push?e:[e]).length,s=o,l=[];for(i=function(e,n,i){if("e"==n&&l.push(e),"b"==n){if(!i)return;l.push(e)}--o||t(l)},r=0;r<s;r++)a(e[r],i,n)}(e,function(e){o(l,e),r(s,e)},l)}return s.ready=function(e,t){return function(e,t){e=e.push?e:[e];var r,o,a,s=[],l=e.length,c=l;for(r=function(e,n){n.length&&s.push(e),--c||t(s)};l--;)o=e[l],(a=n[o])?r(o,a):(i[o]=i[o]||[]).push(r)}(e,function(e){o(t,e)}),s},s.done=function(e){r(e,[])},s.reset=function(){t={},n={},i={}},s.isDefined=function(e){return e in t},s},e.exports=n()}),Gr=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},Yr=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),Kr=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},Qr=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],i=!0,r=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(i=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);i=!0);}catch(e){r=!0,o=e}finally{try{!i&&s.return&&s.return()}finally{if(r)throw o}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Jr=function(){function e(t){Gr(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return Yr(e,[{key:"get",value:function(t){if(!e.supported)return null;var n=window.localStorage.getItem(this.key);if(Zr.is.empty(n))return null;var i=JSON.parse(n);return Zr.is.string(t)&&t.length?i[t]:i}},{key:"set",value:function(t){if(e.supported&&this.enabled&&Zr.is.object(t)){var n=this.get();Zr.is.empty(n)&&(n={}),Zr.extend(n,t),window.localStorage.setItem(this.key,JSON.stringify(n))}}}],[{key:"supported",get:function(){try{if(!("localStorage"in window))return!1;return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}(),$r={html5:"html5",youtube:"youtube",vimeo:"vimeo"},Xr={audio:"audio",video:"video"},Zr={is:{object:function(e){return this.getConstructor(e)===Object},number:function(e){return this.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return this.getConstructor(e)===String},boolean:function(e){return this.getConstructor(e)===Boolean},function:function(e){return this.getConstructor(e)===Function},array:function(e){return!this.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return this.instanceof(e,WeakMap)},nodeList:function(e){return this.instanceof(e,NodeList)},element:function(e){return this.instanceof(e,Element)},textNode:function(e){return this.getConstructor(e)===Text},event:function(e){return this.instanceof(e,Event)},cue:function(e){return this.instanceof(e,TextTrackCue)||this.instanceof(e,VTTCue)},track:function(e){return this.instanceof(e,TextTrack)||!this.nullOrUndefined(e)&&this.string(e.kind)},url:function(e){return!this.nullOrUndefined(e)&&/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e)},nullOrUndefined:function(e){return null==e},empty:function(e){return this.nullOrUndefined(e)||(this.string(e)||this.array(e)||this.nodeList(e))&&!e.length||this.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)},getConstructor:function(e){return this.nullOrUndefined(e)?null:e.constructor}},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(n,i){try{var r=new XMLHttpRequest;if(!("withCredentials"in r))return;r.addEventListener("load",function(){if("text"===t)try{n(JSON.parse(r.responseText))}catch(e){n(r.responseText)}else n(r.response)}),r.addEventListener("error",function(){throw new Error(r.statusText)}),r.open("GET",e,!0),r.responseType=t,r.send()}catch(e){i(e)}})},loadImage:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new Promise(function(n,i){var r=new Image,o=function(){delete r.onload,delete r.onerror,(r.naturalWidth>=t?n:i)(r)};Object.assign(r,{onload:o,onerror:o,src:e})})},loadScript:function(e){return new Promise(function(t,n){zr(e,{success:t,error:n})})},loadSprite:function(e,t){if(Zr.is.string(e)){var n=Zr.is.string(t),i=function(){return document.querySelectorAll("#"+t).length};if(!n||!i()){var r=Jr.supported,o=document.createElement("div");if(Zr.toggleHidden(o,!0),n&&o.setAttribute("id",t),r){var a=window.localStorage.getItem("cache-"+t);if(null!==a){var s=JSON.parse(a);return void l.call(o,s.content)}}Zr.fetch(e).then(function(e){Zr.is.empty(e)||(r&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),l.call(o,e))}).catch(function(){})}}function l(e){n&&i()||(this.innerHTML=e,document.body.insertBefore(this,document.body.childNodes[0]))}},generateId:function(e){return e+"-"+Math.floor(1e4*Math.random())},wrap:function(e,t){var n=e.length?e:[e];Array.from(n).reverse().forEach(function(e,n){var i=n>0?t.cloneNode(!0):t,r=e.parentNode,o=e.nextSibling;i.appendChild(e),o?r.insertBefore(i,o):r.appendChild(i)})},createElement:function(e,t,n){var i=document.createElement(e);return Zr.is.object(t)&&Zr.setAttributes(i,t),Zr.is.string(n)&&(i.innerText=n),i},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,n,i){t.appendChild(Zr.createElement(e,n,i))},removeElement:function(e){Zr.is.nodeList(e)||Zr.is.array(e)?Array.from(e).forEach(Zr.removeElement):Zr.is.element(e)&&Zr.is.element(e.parentNode)&&e.parentNode.removeChild(e)},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return Zr.is.element(t)&&Zr.is.element(t.parentNode)&&Zr.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){Zr.is.element(e)&&!Zr.is.empty(t)&&Object.entries(t).forEach(function(t){var n=Qr(t,2),i=n[0],r=n[1];e.setAttribute(i,r)})},getAttributesFromSelector:function(e,t){if(!Zr.is.string(e)||Zr.is.empty(e))return{};var n={},i=t;return e.split(",").forEach(function(e){var t=e.trim(),r=t.replace(".",""),o=t.replace(/[[\]]/g,"").split("="),a=o[0],s=o.length>1?o[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":Zr.is.object(i)&&Zr.is.string(i.class)&&(i.class+=" "+r),n.class=r;break;case"#":n.id=t.replace("#","");break;case"[":n[a]=s}}),n},toggleHidden:function(e,t){if(Zr.is.element(e)){var n=t;Zr.is.boolean(n)||(n=!e.hasAttribute("hidden")),n?e.setAttribute("hidden",""):e.removeAttribute("hidden")}},toggleClass:function(e,t,n){if(Zr.is.element(e)){var i="toggle";return void 0!==n&&(i=n?"add":"remove"),e.classList[i](t),e.classList.contains(t)}return null},hasClass:function(e,t){return Zr.is.element(e)&&e.classList.contains(t)},matches:function(e,t){var n={Element:Element};var i=n.matches||n.webkitMatchesSelector||n.mozMatchesSelector||n.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return i.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(Zr.is.element(e)){var n=Zr.getElements.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),i=n[0],r=n[n.length-1],o=function(e){if("Tab"===e.key&&9===e.keyCode){var t=Zr.getFocusElement();t!==r||e.shiftKey?t===i&&e.shiftKey&&(r.focus(),e.preventDefault()):(i.focus(),e.preventDefault())}};t?Zr.on(this.elements.container,"keydown",o,!1):Zr.off(this.elements.container,"keydown",o,!1)}},toggleListener:function(e,t,n){var i=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(!Zr.is.empty(e)&&!Zr.is.empty(t)&&Zr.is.function(n))if(Zr.is.nodeList(e)||Zr.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&Zr.toggleListener.call(null,e,t,n,i,r,o)});else{var a=t.split(" "),s=o;eo.passiveListeners&&(s={passive:r,capture:o}),a.forEach(function(t){e[i?"addEventListener":"removeEventListener"](t,n,s)})}},on:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments[2],i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];Zr.toggleListener(e,t,n,!0,i,r)},off:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments[2],i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];Zr.toggleListener(e,t,n,!1,i,r)},dispatchEvent:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(Zr.is.element(e)&&!Zr.is.empty(t)){var r=new CustomEvent(t,{bubbles:n,detail:Object.assign({},i,{plyr:this})});e.dispatchEvent(r)}},toggleState:function(e,t){if(Zr.is.array(e)||Zr.is.nodeList(e))Array.from(e).forEach(function(e){return Zr.toggleState(e,t)});else if(Zr.is.element(e)){var n="true"===e.getAttribute("aria-pressed"),i=Zr.is.boolean(t)?t:!n;e.setAttribute("aria-pressed",i)}},format:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];return Zr.is.empty(e)?e:e.toString().replace(/{(\d+)}/g,function(e,t){return Zr.is.string(n[t])?n[t]:""})},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!Zr.is.number(e))return this.formatTime(null,t,n);var i=function(e){return("0"+e).slice(-2)},r=this.getHours(e),o=this.getMinutes(e),a=this.getSeconds(e);return t||r>0?r+=":":r="",(n?"-":"")+r+i(o)+":"+i(a)},replaceAll:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1"),"g"),n.toString())},toTitleCase:function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString().replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})},toPascalCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=Zr.replaceAll(e,"-"," "),e=Zr.replaceAll(e,"_"," "),e=Zr.toTitleCase(e),Zr.replaceAll(e," ","")},toCamelCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=Zr.toPascalCase(e)).charAt(0).toLowerCase()+e.slice(1)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];if(!n.length)return e;var r=n.shift();return Zr.is.object(r)?(Object.keys(r).forEach(function(t){Zr.is.object(r[t])?(Object.keys(e).includes(t)||Object.assign(e,Kr({},t,{})),Zr.extend(e[t],r[t])):Object.assign(e,Kr({},t,r[t]))}),Zr.extend.apply(Zr,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(n)))):e},dedupe:function(e){return Zr.is.array(e)?e.filter(function(t,n){return e.indexOf(t)===n}):e},cloneDeep:function(e){return JSON.parse(JSON.stringify(e))},closest:function(e,t){return Zr.is.array(e)&&e.length?e.reduce(function(e,n){return Math.abs(n-t)<Math.abs(e-t)?n:e}):null},getProviderByUrl:function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?$r.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{0,9}(?=\b|\/)/.test(e)?$r.vimeo:null},parseYouTubeId:function(e){if(Zr.is.empty(e))return null;return e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if(Zr.is.empty(e))return null;if(Zr.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement("a");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith("http://")||e.startsWith("https://"))&&(t=this.parseUrl(e).search);return this.is.empty(t)?null:t.slice(t.indexOf("?")+1).split("&").reduce(function(e,t){var n=t.split("="),i=Qr(n,2),r=i[0],o=i[1];return Object.assign(e,Kr({},r,decodeURIComponent(o)))},{})},buildUrlParams:function(e){return Zr.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&"):""},stripHTML:function(e){var t=document.createDocumentFragment(),n=document.createElement("div");return t.appendChild(n),n.innerHTML=e,t.firstChild.innerText},getAspectRatio:function(e,t){var n=function e(t,n){return 0===n?t:e(n,t%n)}(e,t);return e/n+":"+t/n},get transitionEndEvent(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!Zr.is.string(n)&&t[n]},repaint:function(e){setTimeout(function(){Zr.toggleHidden(e,!0),e.offsetHeight,Zr.toggleHidden(e,!1)},0)}},eo={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,n){var i=!1,r=!1,o=Zr.getBrowser(),a=o.isIPhone&&n&&eo.playsinline;switch(t+":"+e){case"html5:video":r=(i=eo.video)&&eo.rangeInput&&(!o.isIPhone||a);break;case"html5:audio":r=(i=eo.audio)&&eo.rangeInput;break;case"youtube:video":case"vimeo:video":i=!0,r=eo.rangeInput&&(!o.isIPhone||a);break;default:r=(i=eo.audio&&eo.video)&&eo.rangeInput}return{api:i,ui:r}},pip:!Zr.getBrowser().isIPhone&&Zr.is.function(Zr.createElement("video").webkitSetPresentationMode),airplay:Zr.is.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!Zr.is.function(t.canPlayType))return!1;if(e.includes("codecs="))return t.canPlayType(e).replace(/no/,"");if(this.isVideo)switch(e){case"video/webm":return t.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return t.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return t.canPlayType('video/ogg; codecs="theora"').replace(/no/,"");default:return!1}else if(this.isAudio)switch(e){case"audio/mpeg":return t.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return t.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return t.canPlayType('audio/wav; codecs="1"').replace(/no/,"");default:return!1}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch(e){}return e}(),rangeInput:(Wr=document.createElement("input"),Wr.type="range","range"===Wr.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==Zr.transitionEndEvent,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},to={getSources:function(){return this.isHTML5?this.media.querySelectorAll("source"):null},getQualityOptions:function(){if(!this.isHTML5)return null;var e=to.getSources.call(this);if(Zr.is.empty(e))return null;var t=Array.from(e).filter(function(e){return!Zr.is.empty(e.getAttribute("size"))});return Zr.is.empty(t)?null:Zr.dedupe(t.map(function(e){return Number(e.getAttribute("size"))}))},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,"quality",{get:function(){var t=to.getSources.call(e);if(Zr.is.empty(t))return null;var n=Array.from(t).filter(function(t){return t.getAttribute("src")===e.source});return Zr.is.empty(n)?null:Number(n[0].getAttribute("size"))},set:function(t){var n=to.getSources.call(e);if(!Zr.is.empty(n)){var i=Array.from(n).filter(function(e){return Number(e.getAttribute("size"))===t});if(!Zr.is.empty(i)){var r=i.filter(function(t){return eo.mime.call(e,t.getAttribute("type"))});if(!Zr.is.empty(r)){Zr.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:t});var o=e.currentTime,a=e.playing;e.media.src=r[0].getAttribute("src"),e.media.load(),a&&e.play(),e.currentTime=o,Zr.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:t})}}}}})}},cancelRequests:function(){this.isHTML5&&(Zr.removeElement(to.getSources()),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}},no=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(Zr.is.empty(e)||Zr.is.empty(t)||!Object.keys(t.i18n).includes(e))return"";var n=t.i18n[e],i={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(i).forEach(function(e){var t=Qr(e,2),i=t[0],r=t[1];n=Zr.replaceAll(n,i,r)}),n},io=Zr.getBrowser(),ro={getIconUrl:function(){var e=new URL(this.config.iconUrl,window.location).host!==window.location.host||io.isIE&&!window.svg4everybody;return{url:this.config.iconUrl,cors:e}},findElements:function(){try{return this.elements.controls=Zr.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:Zr.getElements.call(this,this.config.selectors.buttons.play),pause:Zr.getElement.call(this,this.config.selectors.buttons.pause),restart:Zr.getElement.call(this,this.config.selectors.buttons.restart),rewind:Zr.getElement.call(this,this.config.selectors.buttons.rewind),fastForward:Zr.getElement.call(this,this.config.selectors.buttons.fastForward),mute:Zr.getElement.call(this,this.config.selectors.buttons.mute),pip:Zr.getElement.call(this,this.config.selectors.buttons.pip),airplay:Zr.getElement.call(this,this.config.selectors.buttons.airplay),settings:Zr.getElement.call(this,this.config.selectors.buttons.settings),captions:Zr.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:Zr.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=Zr.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:Zr.getElement.call(this,this.config.selectors.inputs.seek),volume:Zr.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:Zr.getElement.call(this,this.config.selectors.display.buffer),currentTime:Zr.getElement.call(this,this.config.selectors.display.currentTime),duration:Zr.getElement.call(this,this.config.selectors.display.duration)},Zr.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},createIcon:function(e,t){var n=ro.getIconUrl.call(this),i=(n.cors?"":n.url)+"#"+this.config.iconPrefix,r=document.createElementNS("http://www.w3.org/2000/svg","svg");Zr.setAttributes(r,Zr.extend(t,{role:"presentation",focusable:"false"}));var o=document.createElementNS("http://www.w3.org/2000/svg","use"),a=i+"-"+e;return"href"in o?o.setAttributeNS("http://www.w3.org/1999/xlink","href",a):o.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",a),r.appendChild(o),r},createLabel:function(e,t){var n=no(e,this.config),i=Object.assign({},t);switch(e){case"pip":n="PIP";break;case"airplay":n="AirPlay"}return"class"in i?i.class+=" "+this.config.classNames.hidden:i.class=this.config.classNames.hidden,Zr.createElement("span",i,n)},createBadge:function(e){if(Zr.is.empty(e))return null;var t=Zr.createElement("span",{class:this.config.classNames.menu.value});return t.appendChild(Zr.createElement("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var n=Zr.createElement("button"),i=Object.assign({},t),r=Zr.toCamelCase(e),o=!1,a=void 0,s=void 0,l=void 0,c=void 0;switch("type"in i||(i.type="button"),"class"in i?i.class.includes(this.config.classNames.control)&&(i.class+=" "+this.config.classNames.control):i.class=this.config.classNames.control,e){case"play":o=!0,a="play",l="pause",s="play",c="pause";break;case"mute":o=!0,a="mute",l="unmute",s="volume",c="muted";break;case"captions":o=!0,a="enableCaptions",l="disableCaptions",s="captions-off",c="captions-on";break;case"fullscreen":o=!0,a="enterFullscreen",l="exitFullscreen",s="enter-fullscreen",c="exit-fullscreen";break;case"play-large":i.class+=" "+this.config.classNames.control+"--overlaid",r="play",a="play",s="play";break;default:a=r,s=e}return o?(n.appendChild(ro.createIcon.call(this,c,{class:"icon--pressed"})),n.appendChild(ro.createIcon.call(this,s,{class:"icon--not-pressed"})),n.appendChild(ro.createLabel.call(this,l,{class:"label--pressed"})),n.appendChild(ro.createLabel.call(this,a,{class:"label--not-pressed"})),i["aria-pressed"]=!1):(n.appendChild(ro.createIcon.call(this,s)),n.appendChild(ro.createLabel.call(this,a))),Zr.extend(i,Zr.getAttributesFromSelector(this.config.selectors.buttons[r],i)),Zr.setAttributes(n,i),"play"===r?(Zr.is.array(this.elements.buttons[r])||(this.elements.buttons[r]=[]),this.elements.buttons[r].push(n)):this.elements.buttons[r]=n,n},createRange:function(e,t){var n=Zr.createElement("label",{for:t.id,id:t.id+"-label",class:this.config.classNames.hidden},no(e,this.config)),i=Zr.createElement("input",Zr.extend(Zr.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-labelledby":t.id+"-label","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=i,ro.updateRangeFill.call(this,i),{label:n,input:i}},createProgress:function(e,t){var n=Zr.createElement("progress",Zr.extend(Zr.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"presentation","aria-hidden":!0},t));if("volume"!==e){n.appendChild(Zr.createElement("span",null,"0"));var i="";switch(e){case"played":i=no("played",this.config);break;case"buffer":i=no("buffered",this.config)}n.innerText="% "+i.toLowerCase()}return this.elements.display[e]=n,n},createTime:function(e){var t=Zr.getAttributesFromSelector(this.config.selectors.display[e]),n=Zr.createElement("div",Zr.extend(t,{class:"plyr__time "+t.class,"aria-label":no(e,this.config)}),"00:00");return this.elements.display[e]=n,n},createMenuItem:function(e,t,n,i){var r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,o=arguments.length>5&&void 0!==arguments[5]&&arguments[5],a=Zr.createElement("li"),s=Zr.createElement("label",{class:this.config.classNames.control}),l=Zr.createElement("input",Zr.extend(Zr.getAttributesFromSelector(this.config.selectors.inputs[n]),{type:"radio",name:"plyr-"+n,value:e,checked:o,class:"plyr__sr-only"})),c=Zr.createElement("span",{hidden:""});s.appendChild(l),s.appendChild(c),s.insertAdjacentHTML("beforeend",i),Zr.is.element(r)&&s.appendChild(r),a.appendChild(s),t.appendChild(a)},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(Zr.is.element(e)&&Zr.is.number(t)){var i=Zr.getHours(this.duration)>0;e.innerText=Zr.formatTime(t,i,n)}},updateVolume:function(){this.supported.ui&&(Zr.is.element(this.elements.inputs.volume)&&ro.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),Zr.is.element(this.elements.buttons.mute)&&Zr.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;Zr.is.element(e)&&(e.value=t,ro.updateRangeFill.call(this,e))},updateProgress:function(e){var t=this;if(this.supported.ui&&Zr.is.event(e)){var n=0;if(e)switch(e.type){case"timeupdate":case"seeking":case"seeked":n=Zr.getPercentage(this.currentTime,this.duration),"timeupdate"===e.type&&ro.setRange.call(this,this.elements.inputs.seek,n);break;case"playing":case"progress":!function(e,n){var i=Zr.is.number(n)?n:0,r=Zr.is.element(e)?e:t.elements.display.buffer;if(Zr.is.element(r)){r.value=i;var o=r.getElementsByTagName("span")[0];Zr.is.element(o)&&(o.childNodes[0].nodeValue=i)}}(this.elements.display.buffer,100*this.buffered)}}},updateRangeFill:function(e){var t=Zr.is.event(e)?e.target:e;Zr.is.element(t)&&"range"===t.getAttribute("type")&&(t.setAttribute("aria-valuenow",t.value),io.isWebkit&&t.style.setProperty("--value",t.value/t.max*100+"%"))},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&Zr.is.element(this.elements.inputs.seek)&&Zr.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var n=0,i=this.elements.progress.getBoundingClientRect(),r=this.config.classNames.tooltip+"--visible",o=function(e){Zr.toggleClass(t.elements.display.seekTooltip,r,e)};if(this.touch)o(!1);else{if(Zr.is.event(e))n=100/i.width*(e.pageX-i.left);else{if(!Zr.hasClass(this.elements.display.seekTooltip,r))return;n=parseFloat(this.elements.display.seekTooltip.style.left,10)}n<0?n=0:n>100&&(n=100),ro.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*n),this.elements.display.seekTooltip.style.left=n+"%",Zr.is.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&o("mouseenter"===e.type)}}},timeUpdate:function(e){var t=!Zr.is.element(this.elements.display.duration)&&this.config.invertTime;ro.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||ro.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui&&(this.config.invertTime||!this.currentTime)){var e=Zr.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&ro.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&ro.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),ro.updateSeekTooltip.call(this)}},toggleTab:function(e,t){Zr.toggleHidden(this.elements.settings.tabs[e],!t)},setQualityMenu:function(e){var t=this;if(Zr.is.element(this.elements.settings.panes.quality)){var n=this.elements.settings.panes.quality.querySelector("ul");Zr.is.array(e)&&(this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}));var i=!Zr.is.empty(this.options.quality)&&this.options.quality.length>1;if(ro.toggleTab.call(this,"quality",i),ro.checkMenu.call(this),i){Zr.emptyElement(n);this.options.quality.sort(function(e,n){var i=t.config.quality.options;return i.indexOf(e)>i.indexOf(n)?1:-1}).forEach(function(e){var i=ro.getLabel.call(t,"quality",e);ro.createMenuItem.call(t,e,n,"quality",i,function(e){var n="";switch(e){case 2160:n="4K";break;case 1440:case 1080:case 720:n="HD";break;case 576:case 480:n="SD"}return n.length?ro.createBadge.call(t,n):null}(e))}),ro.updateSetting.call(this,"quality",n)}}},getLabel:function(e,t){switch(e){case"speed":return 1===t?no("normal",this.config):t+"&times;";case"quality":return Zr.is.number(t)?t+"p":Zr.toTitleCase(t);case"captions":return oo.getLabel.call(this);default:return null}},updateSetting:function(e,t,n){var i=this.elements.settings.panes[e],r=null,o=t;switch(e){case"captions":r=this.captions.active?this.options.captions.length>2||!this.options.captions.some(function(e){return"enabled"===e})?this.captions.language:"enabled":"";break;default:if(r=Zr.is.empty(n)?this[e]:n,Zr.is.empty(r)&&(r=this.config[e].default),!Zr.is.empty(this.options[e])&&!this.options[e].includes(r))return void this.debug.warn("Unsupported value of '"+r+"' for "+e);if(!this.config[e].options.includes(r))return void this.debug.warn("Disabled value of '"+r+"' for "+e)}if(Zr.is.element(o)||(o=i&&i.querySelector("ul")),Zr.is.element(o)){this.elements.settings.tabs[e].querySelector("."+this.config.classNames.menu.value).innerHTML=ro.getLabel.call(this,e,r);var a=o&&o.querySelector('input[value="'+r+'"]');Zr.is.element(a)&&(a.checked=!0)}},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector("ul"),n=oo.getTracks.call(this).length;if(ro.toggleTab.call(this,"captions",n),Zr.emptyElement(t),ro.checkMenu.call(this),n){var i=oo.getTracks.call(this).map(function(t){return{language:Zr.is.empty(t.language)?"enabled":t.language,label:oo.getLabel.call(e,t)}});i.unshift({language:"",label:no("disabled",this.config)}),i.forEach(function(n){ro.createMenuItem.call(e,n.language,t,"language",n.label,"enabled"!==n.language?ro.createBadge.call(e,n.language.toUpperCase()):null,n.language.toLowerCase()===e.captions.language.toLowerCase())}),this.options.captions=i.map(function(e){return e.language}),ro.updateSetting.call(this,"captions",t)}},setSpeedMenu:function(e){var t=this;if(this.config.controls.includes("settings")&&this.config.settings.includes("speed")&&Zr.is.element(this.elements.settings.panes.speed)){Zr.is.array(e)?this.options.speed=e:(this.isHTML5||this.isVimeo)&&(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(e){return t.config.speed.options.includes(e)});var n=!Zr.is.empty(this.options.speed)&&this.options.speed.length>1;if(ro.toggleTab.call(this,"speed",n),ro.checkMenu.call(this),n){var i=this.elements.settings.panes.speed.querySelector("ul");Zr.emptyElement(i),this.options.speed.forEach(function(e){var n=ro.getLabel.call(t,"speed",e);ro.createMenuItem.call(t,e,i,"speed",n)}),ro.updateSetting.call(this,"speed",i)}}},checkMenu:function(){var e=this.elements.settings.tabs,t=!Zr.is.empty(e)&&Object.values(e).some(function(e){return!e.hidden});Zr.toggleHidden(this.elements.settings.menu,!t)},toggleMenu:function(e){var t=this.elements.settings.form,n=this.elements.buttons.settings;if(Zr.is.element(t)&&Zr.is.element(n)){var i=Zr.is.boolean(e)?e:Zr.is.element(t)&&t.hasAttribute("hidden");if(Zr.is.event(e)){var r=Zr.is.element(t)&&t.contains(e.target),o=e.target===this.elements.buttons.settings;if(r||!r&&!o&&i)return;o&&e.stopPropagation()}Zr.is.element(n)&&n.setAttribute("aria-expanded",i),Zr.is.element(t)&&(Zr.toggleHidden(t,!i),Zr.toggleClass(this.elements.container,this.config.classNames.menu.open,i),i?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1))}},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.removeAttribute("hidden"),Array.from(t.querySelectorAll("input[name]")).forEach(function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(t);var n=t.scrollWidth,i=t.scrollHeight;return Zr.removeElement(t),{width:n,height:i}},showTab:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=this.elements.settings.menu,n=document.getElementById(e);if(Zr.is.element(n)&&"tabpanel"===n.getAttribute("role")){var i=t.querySelector('[role="tabpanel"]:not([hidden])'),r=i.parentNode;if(Array.from(t.querySelectorAll('[aria-controls="'+i.getAttribute("id")+'"]')).forEach(function(e){e.setAttribute("aria-expanded",!1)}),eo.transitions&&!eo.reducedMotion){r.style.width=i.scrollWidth+"px",r.style.height=i.scrollHeight+"px";var o=ro.getTabSize.call(this,n);Zr.on(r,Zr.transitionEndEvent,function e(t){t.target===r&&["width","height"].includes(t.propertyName)&&(r.style.width="",r.style.height="",Zr.off(r,Zr.transitionEndEvent,e))}),r.style.width=o.width+"px",r.style.height=o.height+"px"}Zr.toggleHidden(i,!0),i.setAttribute("tabindex",-1),Zr.toggleHidden(n,!1);var a=Zr.getElements.call(this,'[aria-controls="'+e+'"]');Array.from(a).forEach(function(e){e.setAttribute("aria-expanded",!0)}),n.removeAttribute("tabindex"),n.querySelectorAll("button:not(:disabled), input:not(:disabled), [tabindex]")[0].focus()}},create:function(e){var t=this;if(Zr.is.empty(this.config.controls))return null;var n=Zr.createElement("div",Zr.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&n.appendChild(ro.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&n.appendChild(ro.createButton.call(this,"rewind")),this.config.controls.includes("play")&&n.appendChild(ro.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&n.appendChild(ro.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var i=Zr.createElement("div",Zr.getAttributesFromSelector(this.config.selectors.progress)),r=ro.createRange.call(this,"seek",{id:"plyr-seek-"+e.id});if(i.appendChild(r.label),i.appendChild(r.input),i.appendChild(ro.createProgress.call(this,"buffer")),this.config.tooltips.seek){var o=Zr.createElement("span",{class:this.config.classNames.tooltip},"00:00");i.appendChild(o),this.elements.display.seekTooltip=o}this.elements.progress=i,n.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&n.appendChild(ro.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&n.appendChild(ro.createTime.call(this,"duration")),this.config.controls.includes("mute")&&n.appendChild(ro.createButton.call(this,"mute")),this.config.controls.includes("volume")){var a=Zr.createElement("div",{class:"plyr__volume"}),s={max:1,step:.05,value:this.config.volume},l=ro.createRange.call(this,"volume",Zr.extend(s,{id:"plyr-volume-"+e.id}));a.appendChild(l.label),a.appendChild(l.input),this.elements.volume=a,n.appendChild(a)}if(this.config.controls.includes("captions")&&n.appendChild(ro.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!Zr.is.empty(this.config.settings)){var c=Zr.createElement("div",{class:"plyr__menu",hidden:""});c.appendChild(ro.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var u=Zr.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,hidden:"","aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),f=Zr.createElement("div"),h=Zr.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),d=Zr.createElement("ul",{role:"tablist"});this.config.settings.forEach(function(n){var i=Zr.createElement("li",{role:"tab",hidden:""}),r=Zr.createElement("button",Zr.extend(Zr.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+n+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+n,"aria-expanded":!1}),no(n,t.config)),o=Zr.createElement("span",{class:t.config.classNames.menu.value});o.innerHTML=e[n],r.appendChild(o),i.appendChild(r),d.appendChild(i),t.elements.settings.tabs[n]=i}),h.appendChild(d),f.appendChild(h),this.config.settings.forEach(function(n){var i=Zr.createElement("div",{id:"plyr-settings-"+e.id+"-"+n,hidden:"","aria-labelled-by":"plyr-settings-"+e.id+"-"+n+"-tab",role:"tabpanel",tabindex:-1}),r=Zr.createElement("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},no(n,t.config));i.appendChild(r);var o=Zr.createElement("ul");i.appendChild(o),f.appendChild(i),t.elements.settings.panes[n]=i}),u.appendChild(f),c.appendChild(u),n.appendChild(c),this.elements.settings.form=u,this.elements.settings.menu=c}return this.config.controls.includes("pip")&&eo.pip&&n.appendChild(ro.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&eo.airplay&&n.appendChild(ro.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&n.appendChild(ro.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(ro.createButton.call(this,"play-large")),this.elements.controls=n,this.isHTML5&&ro.setQualityMenu.call(this,to.getQualityOptions.call(this)),ro.setSpeedMenu.call(this),n},inject:function(){var e=this;if(this.config.loadSprite){var t=ro.getIconUrl.call(this);t.cors&&Zr.loadSprite(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var n=null;this.elements.controls=null;var i={id:this.id,seektime:this.config.seekTime,title:this.config.title},r=!0;Zr.is.string(this.config.controls)||Zr.is.element(this.config.controls)?n=this.config.controls:Zr.is.function(this.config.controls)?n=this.config.controls.call(this,i):(n=ro.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:oo.getLabel.call(this)}),r=!1);var o=function(e){var t=e;return Object.entries(i).forEach(function(e){var n=Qr(e,2),i=n[0],r=n[1];t=Zr.replaceAll(t,"{"+i+"}",r)}),t};r&&(Zr.is.string(this.config.controls)?n=o(n):Zr.is.element(n)&&(n.innerHTML=o(n.innerHTML)));var a=void 0;if(Zr.is.string(this.config.selectors.controls.container)&&(a=document.querySelector(this.config.selectors.controls.container)),Zr.is.element(a)||(a=this.elements.container),Zr.is.element(n)?a.appendChild(n):n&&a.insertAdjacentHTML("beforeend",n),Zr.is.element(this.elements.controls)||ro.findElements.call(this),window.navigator.userAgent.includes("Edge")&&Zr.repaint(a),this.config.tooltips.controls){var s=Zr.getElements.call(this,[this.config.selectors.controls.wrapper," ",this.config.selectors.labels," .",this.config.classNames.hidden].join(""));Array.from(s).forEach(function(t){Zr.toggleClass(t,e.config.classNames.hidden,!1),Zr.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute("role","tooltip")})}}},oo={setup:function(){if(this.supported.ui){var e=this.storage.get("language");if(Zr.is.empty(e)||(this.captions.language=e),Zr.is.empty(this.captions.language)&&(this.captions.language=this.config.captions.language.toLowerCase()),!Zr.is.boolean(this.captions.active)){var t=this.storage.get("captions");Zr.is.boolean(t)?this.captions.active=t:this.captions.active=this.config.captions.active}if(!this.isVideo||this.isYouTube||this.isHTML5&&!eo.textTracks)Zr.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&ro.setCaptionsMenu.call(this);else{Zr.is.element(this.elements.captions)||(this.elements.captions=Zr.createElement("div",Zr.getAttributesFromSelector(this.config.selectors.captions)),Zr.insertAfter(this.elements.captions,this.elements.wrapper)),Zr.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!Zr.is.empty(oo.getTracks.call(this)));var n=oo.getTracks.call(this);if(!Zr.is.empty(n)){if(Zr.getBrowser().isIE&&window.URL){var i=this.media.querySelectorAll("track");Array.from(i).forEach(function(e){var t=e.getAttribute("src"),n=Zr.parseUrl(t);n.hostname!==window.location.href.hostname&&["http:","https:"].includes(n.protocol)&&Zr.fetch(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){Zr.removeElement(e)})})}oo.setLanguage.call(this),oo.show.call(this),Zr.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&ro.setCaptionsMenu.call(this)}}}},setLanguage:function(){var e=this;if(this.isHTML5&&this.isVideo){oo.getTracks.call(this).forEach(function(t){Zr.on(t,"cuechange",function(t){return oo.setCue.call(e,t)}),t.mode="hidden"});var t=oo.getCurrentTrack.call(this);Zr.is.track(t)&&Array.from(t.activeCues||[]).length&&oo.setCue.call(this,t)}else this.isVimeo&&this.captions.active&&this.embed.enableTextTrack(this.language)},getTracks:function(){return Zr.is.nullOrUndefined(this.media)?[]:Array.from(this.media.textTracks||[]).filter(function(e){return["captions","subtitles"].includes(e.kind)})},getCurrentTrack:function(){var e=this,t=oo.getTracks.call(this);if(!t.length)return null;var n=t.find(function(t){return t.language.toLowerCase()===e.language});(n||(n=Zr.getElement.call(this,"track[default]")),n)||(n=Qr(t,1)[0]);return n},getLabel:function(e){var t=e;return!Zr.is.track(t)&&eo.textTracks&&this.captions.active&&(t=oo.getCurrentTrack.call(this)),Zr.is.track(t)?Zr.is.empty(t.label)?Zr.is.empty(t.language)?no("enabled",this.config):e.language.toUpperCase():t.label:no("disabled",this.config)},setCue:function(e){var t=Zr.is.event(e)?e.target:e,n=t.activeCues,i=n.length&&n[0];t===oo.getCurrentTrack.call(this)&&(Zr.is.cue(i)?oo.setText.call(this,i.getCueAsHTML()):oo.setText.call(this,null),Zr.dispatchEvent.call(this,this.media,"cuechange"))},setText:function(e){if(this.supported.ui)if(Zr.is.element(this.elements.captions)){var t=Zr.createElement("span");Zr.emptyElement(this.elements.captions);var n=Zr.is.nullOrUndefined(e)?"":e;Zr.is.string(n)?t.innerText=n.trim():t.appendChild(n),this.elements.captions.appendChild(t)}else this.debug.warn("No captions element to render to")},show:function(){var e=this.storage.get("captions");Zr.is.boolean(e)?this.captions.active=e:e=this.config.captions.active,e&&(Zr.toggleClass(this.elements.container,this.config.classNames.captions.active,!0),Zr.toggleState(this.elements.buttons.captions,!0))}},ao=function(){},so=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Gr(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return Yr(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):ao}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):ao}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):ao}}]),e}(),lo={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,resetOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.3.8/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240,"default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:(navigator.language||navigator.userLanguage).split("-")[0]},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime}s",play:"Play",pause:"Pause",fastForward:"Forward {seektime}s",seek:"Seek",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",normal:"Normal",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",enabled:"Enabled",advertisement:"Ad"},urls:{vimeo:{sdk:"https://player.vimeo.com/api/player.js",iframe:"https://player.vimeo.com/video/{0}?{1}",api:"https://vimeo.com/api/v2/video/{0}.json"},youtube:{sdk:"https://www.youtube.com/iframe_api",api:"https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet"},googleIMA:{sdk:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","adscontentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',fastForward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress--buffer",played:".plyr__progress--played",loop:".plyr__progress--loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{type:"plyr--{0}",provider:"plyr--{0}",video:"plyr__video-wrapper",embed:"plyr__video-embed",embedContainer:"plyr__video-embed__container",poster:"plyr__poster",posterEnabled:"plyr__poster-enabled",ads:"plyr__ads",control:"plyr__control",playing:"plyr--playing",paused:"plyr--paused",stopped:"plyr--stopped",loading:"plyr--loading",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1,publisherId:""}},co=Zr.getBrowser();function uo(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;Zr.is.element(e)&&Zr.toggleState(e,this.active),Zr.dispatchEvent.call(this.player,this.target,this.active?"enterfullscreen":"exitfullscreen",!0),co.isIos||Zr.trapFocus.call(this.player,this.target,this.active)}}function fo(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",Zr.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),uo.call(this)}var ho=function(){function e(t){var n=this;Gr(this,e),this.player=t,this.prefix=e.prefix,this.property=e.property,this.scrollPosition={x:0,y:0},Zr.on(document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){uo.call(n)}),Zr.on(this.player.elements.container,"dblclick",function(e){Zr.is.element(n.player.elements.controls)&&n.player.elements.controls.contains(e.target)||n.toggle()}),this.update()}return Yr(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),Zr.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(co.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?Zr.is.empty(this.prefix)||this.target[this.prefix+"Request"+this.property]():this.target.requestFullscreen():fo.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(co.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(e.native)if(this.prefix){if(!Zr.is.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document[""+this.prefix+t+this.property]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document);else fo.call(this,!1)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){return(e.native||this.player.config.fullscreen.fallback)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[""+this.prefix+this.property+"Element"]:document.fullscreenElement)===this.target:Zr.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return co.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if(Zr.is.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!Zr.is.function(document[t+"ExitFullscreen"])&&!Zr.is.function(document[t+"CancelFullScreen"]))&&(e=t,!0)}),e}},{key:"property",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}(),po=Zr.getBrowser(),go={addStyleHook:function(){Zr.toggleClass(this.elements.container,this.config.selectors.container.replace(".",""),!0),Zr.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void go.toggleNativeControls.call(this,!0);Zr.is.element(this.elements.controls)||(ro.inject.call(this),this.listeners.controls()),go.toggleNativeControls.call(this),oo.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,ro.updateVolume.call(this),ro.timeUpdate.call(this),go.checkPlaying.call(this),Zr.toggleClass(this.elements.container,this.config.classNames.pip.supported,eo.pip&&this.isHTML5&&this.isVideo),Zr.toggleClass(this.elements.container,this.config.classNames.airplay.supported,eo.airplay&&this.isHTML5),Zr.toggleClass(this.elements.container,this.config.classNames.isIos,po.isIos),Zr.toggleClass(this.elements.container,this.config.classNames.isTouch,this.touch),this.ready=!0,setTimeout(function(){Zr.dispatchEvent.call(e,e.media,"ready")},0),go.setTitle.call(this),this.poster&&this.elements.poster&&!this.elements.poster.style.backgroundImage&&go.setPoster.call(this,this.poster)},setTitle:function(){var e=no("play",this.config);if(Zr.is.string(this.config.title)&&!Zr.is.empty(this.config.title)&&(e+=", "+this.config.title,this.elements.container.setAttribute("aria-label",this.config.title)),Zr.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=Zr.getElement.call(this,"iframe");if(!Zr.is.element(t))return;var n=Zr.is.empty(this.config.title)?"video":this.config.title,i=no("frameTitle",this.config);t.setAttribute("title",i.replace("{title}",n))}},togglePoster:function(e){Zr.toggleClass(this.elements.container,this.config.classNames.posterEnabled,e)},setPoster:function(e){var t=this;if(this.media.setAttribute("poster",e),!Zr.is.element(this.elements.poster))return Promise.reject();var n=Zr.loadImage(e).then(function(){return t.elements.poster.style.backgroundImage="url('"+e+"')",Object.assign(t.elements.poster.style,{backgroundImage:"url('"+e+"')",backgroundSize:""}),go.togglePoster.call(t,!0),e});return n.catch(function(){return go.togglePoster.call(t,!1)}),n},checkPlaying:function(e){Zr.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),Zr.toggleClass(this.elements.container,this.config.classNames.paused,this.paused),Zr.toggleClass(this.elements.container,this.config.classNames.stopped,this.stopped),Zr.toggleState(this.elements.buttons.play,this.playing),Zr.is.event(e)&&"timeupdate"===e.type||go.toggleControls.call(this)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){Zr.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),go.toggleControls.call(t)},this.loading?250:0)},toggleControls:function(e){var t=this.elements.controls;t&&this.config.hideControls&&this.toggleControls(Boolean(e||this.loading||this.paused||t.pressed||t.hover))}},mo=Zr.getBrowser(),yo=function(){function e(t){Gr(this,e),this.player=t,this.lastKey=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.firstTouch=this.firstTouch.bind(this)}return Yr(e,[{key:"handleKey",value:function(e){var t=this,n=e.keyCode?e.keyCode:e.which,i="keydown"===e.type,r=i&&n===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&Zr.is.number(n)){if(i){var o=Zr.getFocusElement();if(Zr.is.element(o)&&Zr.matches(o,this.player.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(n)&&(e.preventDefault(),e.stopPropagation()),n){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:r||(t.player.currentTime=t.player.duration/10*(n-48));break;case 32:case 75:r||this.player.togglePlay();break;case 38:this.player.increaseVolume(.1);break;case 40:this.player.decreaseVolume(.1);break;case 77:r||(this.player.muted=!this.player.muted);break;case 39:this.player.forward();break;case 37:this.player.rewind();break;case 70:this.player.fullscreen.toggle();break;case 67:r||this.player.toggleCaptions();break;case 76:this.player.loop=!this.player.loop}!this.player.fullscreen.enabled&&this.player.fullscreen.active&&27===n&&this.player.fullscreen.toggle(),this.lastKey=n}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){ro.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){this.player.touch=!0,Zr.toggleClass(this.player.elements.container,this.player.config.classNames.isTouch,!0),Zr.off(document.body,"touchstart",this.firstTouch)}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.player.config.keyboard.global&&Zr.toggleListener(window,"keydown keyup",this.handleKey,e,!1),Zr.toggleListener(document.body,"click",this.toggleMenu,e),Zr.on(document.body,"touchstart",this.firstTouch)}},{key:"container",value:function(){var e=this;!this.player.config.keyboard.global&&this.player.config.keyboard.focused&&Zr.on(this.player.elements.container,"keydown keyup",this.handleKey,!1),Zr.on(this.player.elements.container,"focusout",function(t){Zr.toggleClass(t.target,e.player.config.classNames.tabFocus,!1)}),Zr.on(this.player.elements.container,"keydown",function(t){9===t.keyCode&&setTimeout(function(){Zr.toggleClass(Zr.getFocusElement(),e.player.config.classNames.tabFocus,!0)},0)}),Zr.on(this.player.elements.container,"mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen",function(t){var n=e.player.elements.controls;"enterfullscreen"===t.type&&(n.pressed=!1,n.hover=!1);var i=0;["touchstart","touchmove","mousemove"].includes(t.type)&&(go.toggleControls.call(e.player,!0),i=e.player.touch?3e3:2e3),clearTimeout(e.player.timers.controls),e.player.timers.controls=setTimeout(function(){return go.toggleControls.call(e.player,!1)},i)})}},{key:"media",value:function(){var e=this;if(Zr.on(this.player.media,"timeupdate seeking seeked",function(t){return ro.timeUpdate.call(e.player,t)}),Zr.on(this.player.media,"durationchange loadeddata loadedmetadata",function(t){return ro.durationUpdate.call(e.player,t)}),Zr.on(this.player.media,"loadeddata",function(){Zr.toggleHidden(e.player.elements.volume,!e.player.hasAudio),Zr.toggleHidden(e.player.elements.buttons.mute,!e.player.hasAudio)}),Zr.on(this.player.media,"ended",function(){e.player.isHTML5&&e.player.isVideo&&e.player.config.resetOnEnd&&e.player.restart()}),Zr.on(this.player.media,"progress playing seeking seeked",function(t){return ro.updateProgress.call(e.player,t)}),Zr.on(this.player.media,"volumechange",function(t){return ro.updateVolume.call(e.player,t)}),Zr.on(this.player.media,"playing play pause ended emptied timeupdate",function(t){return go.checkPlaying.call(e.player,t)}),Zr.on(this.player.media,"waiting canplay seeked playing",function(t){return go.checkLoading.call(e.player,t)}),Zr.on(this.player.media,"playing",function(){e.player.ads&&e.player.ads.enabled&&!e.player.ads.initialized&&e.player.ads.managerPromise.then(function(){return e.player.ads.play()}).catch(function(){return e.player.play()})}),this.player.supported.ui&&this.player.config.clickToPlay&&!this.player.isAudio){var t=Zr.getElement.call(this.player,"."+this.player.config.classNames.video);if(!Zr.is.element(t))return;Zr.on(t,"click",function(){e.player.config.hideControls&&e.player.touch&&!e.player.paused||(e.player.paused?e.player.play():e.player.ended?(e.player.restart(),e.player.play()):e.player.pause())})}this.player.supported.ui&&this.player.config.disableContextMenu&&Zr.on(this.player.elements.wrapper,"contextmenu",function(e){e.preventDefault()},!1),Zr.on(this.player.media,"volumechange",function(){e.player.storage.set({volume:e.player.volume,muted:e.player.muted})}),Zr.on(this.player.media,"ratechange",function(){ro.updateSetting.call(e.player,"speed"),e.player.storage.set({speed:e.player.speed})}),Zr.on(this.player.media,"qualityrequested",function(t){e.player.storage.set({quality:t.detail.quality})}),Zr.on(this.player.media,"qualitychange",function(t){ro.updateSetting.call(e.player,"quality",null,t.detail.quality)}),Zr.on(this.player.media,"languagechange",function(){ro.updateSetting.call(e.player,"captions"),e.player.storage.set({language:e.player.language})}),Zr.on(this.player.media,"captionsenabled captionsdisabled",function(){ro.updateSetting.call(e.player,"captions"),e.player.storage.set({captions:e.player.captions.active})}),Zr.on(this.player.media,this.player.config.events.concat(["keyup","keydown"]).join(" "),function(t){var n={};"error"===t.type&&(n=e.player.media.error),Zr.dispatchEvent.call(e.player,e.player.elements.container,t.type,!0,n)})}},{key:"controls",value:function(){var e=this,t=mo.isIE?"change":"input",n=function(t,n,i){var r=e.player.config.listeners[i],o=!0;Zr.is.function(r)&&(o=r.call(e.player,t)),o&&Zr.is.function(n)&&n.call(e.player,t)},i=function(t,i,r,o){var a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],s=e.player.config.listeners[o],l=Zr.is.function(s);Zr.on(t,i,function(e){return n(e,r,o)},a&&!l)};i(this.player.elements.buttons.play,"click",this.player.togglePlay,"play"),i(this.player.elements.buttons.restart,"click",this.player.restart,"restart"),i(this.player.elements.buttons.rewind,"click",this.player.rewind,"rewind"),i(this.player.elements.buttons.fastForward,"click",this.player.forward,"fastForward"),i(this.player.elements.buttons.mute,"click",function(){e.player.muted=!e.player.muted},"mute"),i(this.player.elements.buttons.captions,"click",this.player.toggleCaptions),i(this.player.elements.buttons.fullscreen,"click",function(){e.player.fullscreen.toggle()},"fullscreen"),i(this.player.elements.buttons.pip,"click",function(){e.player.pip="toggle"},"pip"),i(this.player.elements.buttons.airplay,"click",this.player.airplay,"airplay"),i(this.player.elements.buttons.settings,"click",function(t){ro.toggleMenu.call(e.player,t)}),i(this.player.elements.settings.form,"click",function(t){t.stopPropagation();var i=function(){var t="plyr-settings-"+e.player.id+"-home";ro.showTab.call(e.player,t)};if(Zr.matches(t.target,e.player.config.selectors.inputs.language))n(t,function(){e.player.language=t.target.value,i()},"language");else if(Zr.matches(t.target,e.player.config.selectors.inputs.quality))n(t,function(){e.player.quality=t.target.value,i()},"quality");else if(Zr.matches(t.target,e.player.config.selectors.inputs.speed))n(t,function(){e.player.speed=parseFloat(t.target.value),i()},"speed");else{var r=t.target;ro.showTab.call(e.player,r.getAttribute("aria-controls"))}}),i(this.player.elements.inputs.seek,"mousedown mousemove",function(t){var n=e.player.elements.progress.getBoundingClientRect(),i=100/n.width*(t.pageX-n.left);t.currentTarget.setAttribute("seek-value",i)}),i(this.player.elements.inputs.seek,"mousedown mouseup keydown keyup touchstart touchend",function(t){var n=t.currentTarget,i=n.hasAttribute("play-on-seeked"),r=["mouseup","touchend","keyup"].includes(t.type);i&&r?(n.removeAttribute("play-on-seeked"),e.player.play()):!r&&e.player.playing&&(n.setAttribute("play-on-seeked",""),e.player.pause())}),i(this.player.elements.inputs.seek,t,function(t){var n=t.currentTarget,i=n.getAttribute("seek-value");Zr.is.empty(i)&&(i=n.value),n.removeAttribute("seek-value"),e.player.currentTime=i/n.max*e.player.duration},"seek"),this.player.config.toggleInvert&&!Zr.is.element(this.player.elements.display.duration)&&i(this.player.elements.display.currentTime,"click",function(){0!==e.player.currentTime&&(e.player.config.invertTime=!e.player.config.invertTime,ro.timeUpdate.call(e.player))}),i(this.player.elements.inputs.volume,t,function(t){e.player.volume=t.target.value},"volume"),mo.isWebkit&&i(Zr.getElements.call(this.player,'input[type="range"]'),"input",function(t){ro.updateRangeFill.call(e.player,t.target)}),i(this.player.elements.progress,"mouseenter mouseleave mousemove",function(t){return ro.updateSeekTooltip.call(e.player,t)}),i(this.player.elements.controls,"mouseenter mouseleave",function(t){e.player.elements.controls.hover=!e.player.touch&&"mouseenter"===t.type}),i(this.player.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.player.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),i(this.player.elements.controls,"focusin focusout",function(t){var n=e.player,i=n.config,r=n.elements,o=n.timers;if(Zr.toggleClass(r.controls,i.classNames.noTransition,"focusin"===t.type),go.toggleControls.call(e.player,"focusin"===t.type),"focusin"===t.type){setTimeout(function(){Zr.toggleClass(r.controls,i.classNames.noTransition,!1)},0);var a=e.touch?3e3:4e3;clearTimeout(o.controls),o.controls=setTimeout(function(){return go.toggleControls.call(e.player,!1)},a)}}),i(this.player.elements.inputs.volume,"wheel",function(t){var n=t.webkitDirectionInvertedFromDevice,i=0;(t.deltaY<0||t.deltaX>0)&&(n?(e.player.decreaseVolume(.02),i=-1):(e.player.increaseVolume(.02),i=1)),(t.deltaY>0||t.deltaX<0)&&(n?(e.player.increaseVolume(.02),i=1):(e.player.decreaseVolume(.02),i=-1)),(1===i&&e.player.media.volume<1||-1===i&&e.player.media.volume>0)&&t.preventDefault()},"volume",!1)}},{key:"clear",value:function(){this.global(!1)}}]),e}();function vo(e){this.media.paused===e&&(this.media.paused=!e,Zr.dispatchEvent.call(this,this.media,e?"play":"pause"))}var bo={setup:function(){var e=this;Zr.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),bo.setAspectRatio.call(this),Zr.is.object(window.Vimeo)?bo.ready.call(this):Zr.loadScript(this.config.urls.vimeo.sdk).then(function(){bo.ready.call(e)}).catch(function(t){e.debug.warn("Vimeo API failed to load",t)})},setAspectRatio:function(e){var t=Zr.is.string(e)?e.split(":"):this.config.ratio.split(":"),n=100/t[0]*t[1];if(this.elements.wrapper.style.paddingBottom=n+"%",this.supported.ui){var i=(240-n)/4.8;this.media.style.transform="translateY(-"+i+"%)"}},ready:function(){var e=this,t=this,n={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media",playsinline:!this.config.fullscreen.iosNative},i=Zr.buildUrlParams(n),r=t.media.getAttribute("src");Zr.is.empty(r)&&(r=t.media.getAttribute(t.config.attributes.embed.id));var o=Zr.parseVimeoId(r),a=Zr.createElement("iframe"),s=Zr.format(t.config.urls.vimeo.iframe,o,i);a.setAttribute("src",s),a.setAttribute("allowfullscreen",""),a.setAttribute("allowtransparency",""),a.setAttribute("allow","autoplay");var l=Zr.createElement("div",{class:t.config.classNames.embedContainer});l.appendChild(a),t.media=Zr.replaceElement(l,t.media),Zr.fetch(Zr.format(t.config.urls.vimeo.api,o),"json").then(function(e){if(!Zr.is.empty(e)){var n=new URL(e[0].thumbnail_large);n.pathname=n.pathname.split("_")[0]+".jpg",go.setPoster.call(t,n.href)}}),t.embed=new window.Vimeo.Player(a,{autopause:t.config.autopause,muted:t.muted}),t.media.paused=!0,t.media.currentTime=0,t.supported.ui&&t.embed.disableTextTrack(),t.media.play=function(){return vo.call(t,!0),t.embed.play()},t.media.pause=function(){return vo.call(t,!1),t.embed.pause()},t.media.stop=function(){t.pause(),t.currentTime=0};var c=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return c},set:function(e){var n=t.embed,i=t.media,r=t.paused,o=t.volume;i.seeking=!0,Zr.dispatchEvent.call(t,i,"seeking"),Promise.resolve(r&&n.setVolume(0)).then(function(){return n.setCurrentTime(e)}).then(function(){return r&&n.pause()}).then(function(){return r&&n.setVolume(o)}).catch(function(){})}});var u=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return u},set:function(e){t.embed.setPlaybackRate(e).then(function(){u=e,Zr.dispatchEvent.call(t,t.media,"ratechange")}).catch(function(e){"Error"===e.name&&ro.setSpeedMenu.call(t,[])})}});var f=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return f},set:function(e){t.embed.setVolume(e).then(function(){f=e,Zr.dispatchEvent.call(t,t.media,"volumechange")})}});var h=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return h},set:function(e){var n=!!Zr.is.boolean(e)&&e;t.embed.setVolume(n?0:t.config.volume).then(function(){h=n,Zr.dispatchEvent.call(t,t.media,"volumechange")})}});var d=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return d},set:function(e){var n=Zr.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(n).then(function(){d=n})}});var p=void 0;t.embed.getVideoUrl().then(function(e){p=e}).catch(function(t){e.debug.warn(t)}),Object.defineProperty(t.media,"currentSrc",{get:function(){return p}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var n=Zr.getAspectRatio(t[0],t[1]);bo.setAspectRatio.call(e,n)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(n){t.config.title=n,go.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){c=e,Zr.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,Zr.dispatchEvent.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,oo.setup.call(t)}),t.embed.on("cuechange",function(e){var n=null;e.cues.length&&(n=Zr.stripHTML(e.cues[0].text)),oo.setText.call(t,n)}),t.embed.on("loaded",function(){Zr.is.element(t.embed.element)&&t.supported.ui&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){vo.call(t,!0),Zr.dispatchEvent.call(t,t.media,"playing")}),t.embed.on("pause",function(){vo.call(t,!1)}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,c=e.seconds,Zr.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,Zr.dispatchEvent.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&Zr.dispatchEvent.call(t,t.media,"canplaythrough"),t.embed.getDuration().then(function(e){e!==t.media.duration&&(t.media.duration=e,Zr.dispatchEvent.call(t,t.media,"durationchange"))})}),t.embed.on("seeked",function(){t.media.seeking=!1,Zr.dispatchEvent.call(t,t.media,"seeked")}),t.embed.on("ended",function(){t.media.paused=!0,Zr.dispatchEvent.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,Zr.dispatchEvent.call(t,t.media,"error")}),setTimeout(function(){return go.build.call(t)},0)}};function wo(e){switch(e){case"hd2160":return 2160;case 2160:return"hd2160";case"hd1440":return 1440;case 1440:return"hd1440";case"hd1080":return 1080;case 1080:return"hd1080";case"hd720":return 720;case 720:return"hd720";case"large":return 480;case 480:return"large";case"medium":return 360;case 360:return"medium";case"small":return 240;case 240:return"small";default:return"default"}}function Eo(e){this.media.paused===e&&(this.media.paused=!e,Zr.dispatchEvent.call(this,this.media,e?"play":"pause"))}var ko={setup:function(){var e=this;Zr.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),ko.setAspectRatio.call(this),Zr.is.object(window.YT)&&Zr.is.function(window.YT.Player)?ko.ready.call(this):(Zr.loadScript(this.config.urls.youtube.sdk).catch(function(t){e.debug.warn("YouTube API failed to load",t)}),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){ko.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(Zr.is.function(this.embed.getVideoData)){var n=this.embed.getVideoData().title;if(Zr.is.empty(n))return this.config.title=n,void go.setTitle.call(this)}var i=this.config.keys.google;if(Zr.is.string(i)&&!Zr.is.empty(i)){var r=Zr.format(this.config.urls.youtube.api,e,i);Zr.fetch(r).then(function(e){Zr.is.object(e)&&(t.config.title=e.items[0].snippet.title,go.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(Zr.is.empty(t)||!t.startsWith("youtube-")){var n=e.media.getAttribute("src");Zr.is.empty(n)&&(n=e.media.getAttribute(this.config.attributes.embed.id));var i=Zr.parseYouTubeId(n),r=Zr.generateId(e.provider),o=Zr.createElement("div",{id:r});e.media=Zr.replaceElement(o,e.media);var a=function(e){return"https://img.youtube.com/vi/"+i+"/"+e+"default.jpg"};Zr.loadImage(a("maxres"),121).catch(function(){return Zr.loadImage(a("sd"),121)}).catch(function(){return Zr.loadImage(a("hq"))}).then(function(t){return go.setPoster.call(e,t.src)}).then(function(t){t.includes("maxres")||(e.elements.poster.style.backgroundSize="cover")}),e.embed=new window.YT.Player(r,{videoId:i,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!Zr.is.object(e.media.error)){var n={code:t.data};switch(t.data){case 2:n.message="The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.";break;case 5:n.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";break;case 100:n.message="The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.";break;case 101:case 150:n.message="The owner of the requested video does not allow it to be played in embedded players.";break;default:n.message="An unknown error occured"}e.media.error=n,Zr.dispatchEvent.call(e,e.media,"error")}},onPlaybackQualityChange:function(){Zr.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:e.media.quality})},onPlaybackRateChange:function(t){var n=t.target;e.media.playbackRate=n.getPlaybackRate(),Zr.dispatchEvent.call(e,e.media,"ratechange")},onReady:function(t){var n=t.target;ko.getTitle.call(e,i),e.media.play=function(){Eo.call(e,!0),n.playVideo()},e.media.pause=function(){Eo.call(e,!1),n.pauseVideo()},e.media.stop=function(){n.stopVideo()},e.media.duration=n.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(n.getCurrentTime())},set:function(t){e.paused&&e.embed.mute(),e.media.seeking=!0,Zr.dispatchEvent.call(e,e.media,"seeking"),n.seekTo(t)}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return n.getPlaybackRate()},set:function(e){n.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return wo(n.getPlaybackQuality())},set:function(t){var i=t;n.setPlaybackQuality(wo(i)),Zr.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:i})}});var r=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return r},set:function(t){r=t,n.setVolume(100*r),Zr.dispatchEvent.call(e,e.media,"volumechange")}});var o=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return o},set:function(t){var i=Zr.is.boolean(t)?t:o;o=i,n[i?"mute":"unMute"](),Zr.dispatchEvent.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return n.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=n.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),Zr.dispatchEvent.call(e,e.media,"timeupdate"),Zr.dispatchEvent.call(e,e.media,"durationchange"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval(function(){e.media.buffered=n.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&Zr.dispatchEvent.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),Zr.dispatchEvent.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return go.build.call(e)},50)},onStateChange:function(t){var n,i=t.target;switch(clearInterval(e.timers.playing),e.media.seeking&&[1,2].includes(t.data)&&(e.media.seeking=!1,Zr.dispatchEvent.call(e,e.media,"seeked")),t.data){case-1:Zr.dispatchEvent.call(e,e.media,"timeupdate"),e.media.buffered=i.getVideoLoadedFraction(),Zr.dispatchEvent.call(e,e.media,"progress");break;case 0:Eo.call(e,!1),e.media.loop?(i.stopVideo(),i.playVideo()):Zr.dispatchEvent.call(e,e.media,"ended");break;case 1:e.media.paused?e.media.pause():(Eo.call(e,!0),Zr.dispatchEvent.call(e,e.media,"playing"),e.timers.playing=setInterval(function(){Zr.dispatchEvent.call(e,e.media,"timeupdate")},50),e.media.duration!==i.getDuration()&&(e.media.duration=i.getDuration(),Zr.dispatchEvent.call(e,e.media,"durationchange")),ro.setQualityMenu.call(e,(n=i.getAvailableQualityLevels(),Zr.is.empty(n)?n:Zr.dedupe(n.map(function(e){return wo(e)})))));break;case 2:e.muted||e.embed.unMute(),Eo.call(e,!1)}Zr.dispatchEvent.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},So={setup:function(){if(this.media)if(Zr.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),Zr.toggleClass(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&Zr.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.isVideo&&(this.elements.wrapper=Zr.createElement("div",{class:this.config.classNames.video}),Zr.wrap(this.media,this.elements.wrapper),this.elements.poster=Zr.createElement("div",{class:this.config.classNames.poster}),this.elements.wrapper.appendChild(this.elements.poster)),this.isEmbed)switch(this.provider){case"youtube":ko.setup.call(this);break;case"vimeo":bo.setup.call(this)}else this.isHTML5&&to.extend.call(this);else this.debug.warn("No media element found!")}},To=function(){function e(t){var n=this;Gr(this,e),this.player=t,this.publisherId=t.config.ads.publisherId,this.playing=!1,this.initialized=!1,this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.managerPromise=new Promise(function(e,t){n.on("loaded",e),n.on("error",t)}),this.load()}return Yr(e,[{key:"load",value:function(){var e=this;this.enabled&&(Zr.is.object(window.google)&&Zr.is.object(window.google.ima)?this.ready():Zr.loadScript(this.player.config.urls.googleIMA.sdk).then(function(){e.ready()}).catch(function(){e.trigger("error",new Error("Google IMA SDK failed to load"))}))}},{key:"ready",value:function(){var e=this;this.startSafetyTimer(12e3,"ready()"),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.listeners(),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=Zr.createElement("div",{class:this.player.config.classNames.ads}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:"requestAds",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var n=new google.ima.AdsRequest;n.adTagUrl=this.tagUrl,n.linearAdSlotWidth=t.offsetWidth,n.linearAdSlotHeight=t.offsetHeight,n.nonLinearAdSlotWidth=t.offsetWidth,n.nonLinearAdSlotHeight=t.offsetHeight,n.forceNonLinearFullSlot=!1,n.setAdWillPlayMuted(!this.player.muted),this.loader.requestAds(n)}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=setInterval(function(){var t=Zr.formatTime(Math.max(e.manager.getRemainingTime(),0)),n=no("advertisement",e.player.config)+" - "+t;e.elements.container.setAttribute("data-badge-text",n)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,n=new google.ima.AdsRenderingSettings;n.restoreCustomPlaybackStateOnAdBreakComplete=!0,n.enablePreloading=!0,this.manager=e.getAdsManager(this.player,n),this.cuePoints=this.manager.getCuePoints(),Zr.is.empty(this.cuePoints)||this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var n=t.player.elements.progress;if(Zr.is.element(n)){var i=100/t.player.duration*e,r=Zr.createElement("span",{class:t.player.config.classNames.cues});r.style.left=i.toString()+"%",n.appendChild(r)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.trigger("loaded")}},{key:"onAdEvent",value:function(e){var t=this,n=this.player.elements.container,i=e.getAd(),r=function(e){var n="ads"+e.replace(/_/g,"").toLowerCase();Zr.dispatchEvent.call(t.player,t.player.media,n)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.trigger("loaded"),r(e.type),this.pollCountdown(!0),i.isLinear()||(i.width=n.offsetWidth,i.height=n.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:r(e.type),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:r(e.type),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:r(e.type),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:case google.ima.AdEvent.Type.MIDPOINT:case google.ima.AdEvent.Type.COMPLETE:case google.ima.AdEvent.Type.IMPRESSION:case google.ima.AdEvent.Type.CLICK:r(e.type)}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.warn("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,n=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return n=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;Zr.is.empty(e.cuePoints)||e.cuePoints.forEach(function(i,r){n<i&&i<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(r,1))})}),window.addEventListener("resize",function(){e.manager&&e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.resumeContent(),this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}}).catch(function(){})}},{key:"resumeContent",value:function(){this.elements.container.style.zIndex="",this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){this.elements.container.style.zIndex=3,this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.trigger("error"),this.loadAds()}},{key:"loadAds",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on("loaded",t),e.player.debug.log(e.manager)}),e.requestAds()}).catch(function(){})}},{key:"trigger",value:function(e){for(var t=this,n=arguments.length,i=Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];var o=this.events[e];Zr.is.array(o)&&o.forEach(function(e){Zr.is.function(e)&&e.apply(t,i)})}},{key:"on",value:function(e,t){return Zr.is.array(this.events[e])||(this.events[e]=[]),this.events[e].push(t),this}},{key:"startSafetyTimer",value:function(e,t){var n=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=setTimeout(function(){n.cancel(),n.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){Zr.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:"enabled",get:function(){return this.player.isVideo&&this.player.config.ads.enabled&&!Zr.is.empty(this.publisherId)}},{key:"tagUrl",get:function(){var e={AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId};return"https://go.aniview.com/api/adserver6/vast/?"+Zr.buildUrlParams(e)}}]),e}(),Ao={insertElements:function(e,t){var n=this;Zr.is.string(t)?Zr.insertElement(e,this.media,{src:t}):Zr.is.array(t)&&t.forEach(function(t){Zr.insertElement(e,n.media,t)})},change:function(e){var t=this;Zr.is.object(e)&&"sources"in e&&e.sources.length?(to.cancelRequests.call(this),this.destroy.call(this,function(){switch(t.options.quality=[],Zr.removeElement(t.media),t.media=null,Zr.is.element(t.elements.container)&&t.elements.container.removeAttribute("class"),t.type=e.type,t.provider=Zr.is.empty(e.sources[0].provider)?$r.html5:e.sources[0].provider,t.supported=eo.check(t.type,t.provider,t.config.playsinline),t.provider+":"+t.type){case"html5:video":t.media=Zr.createElement("video");break;case"html5:audio":t.media=Zr.createElement("audio");break;case"youtube:video":case"vimeo:video":t.media=Zr.createElement("div",{src:e.sources[0].src})}t.elements.container.appendChild(t.media),Zr.is.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),Zr.is.empty(e.poster)||(t.poster=e.poster),t.config.loop.active&&t.media.setAttribute("loop",""),t.config.muted&&t.media.setAttribute("muted",""),t.config.playsinline&&t.media.setAttribute("playsinline","")),go.addStyleHook.call(t),t.isHTML5&&Ao.insertElements.call(t,"source",e.sources),t.config.title=e.title,So.setup.call(t),t.isHTML5&&("tracks"in e&&Ao.insertElements.call(t,"track",e.tracks),t.media.load()),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&go.build.call(t),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}},_o=function(){function e(t,n){var i=this;if(Gr(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=eo.touch,this.media=t,Zr.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||Zr.is.nodeList(this.media)||Zr.is.array(this.media))&&(this.media=this.media[0]),this.config=Zr.extend({},lo,e.defaults,n||{},function(){try{return JSON.parse(i.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:null},this.fullscreen={active:!1},this.options={speed:[],quality:[],captions:[]},this.debug=new so(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",eo),!Zr.is.nullOrUndefined(this.media)&&Zr.is.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(eo.check().api){var r=this.media.cloneNode(!0);r.autoplay=!1,this.elements.original=r;var o=this.media.tagName.toLowerCase(),a=null,s=null,l=null;switch(o){case"div":if(a=this.media.querySelector("iframe"),Zr.is.element(a)){if(s=a.getAttribute("src"),this.provider=Zr.getProviderByUrl(s),this.elements.container=this.media,this.media=a,this.elements.container.className="",l=Zr.getUrlParams(s),!Zr.is.empty(l)){var c=["1","true"];c.includes(l.autoplay)&&(this.config.autoplay=!0),c.includes(l.loop)&&(this.config.loop.active=!0),this.isYouTube?this.config.playsinline=c.includes(l.playsinline):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(Zr.is.empty(this.provider)||!Object.keys($r).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=Xr.video;break;case"video":case"audio":this.type=o,this.provider=$r.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("playsinline")&&(this.config.playsinline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=eo.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.listeners=new yo(this),this.storage=new Jr(this),this.media.plyr=this,Zr.is.element(this.elements.container)||(this.elements.container=Zr.createElement("div"),Zr.wrap(this.media,this.elements.container)),this.elements.container.setAttribute("tabindex",0),go.addStyleHook.call(this),So.setup.call(this),this.config.debug&&Zr.on(this.elements.container,this.config.events.join(" "),function(e){i.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&go.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new ho(this),this.ads=new To(this),this.config.autoplay&&this.play()):this.debug.error("Setup failed: no support")}else this.debug.error("Setup failed: no support");else this.debug.error("Setup failed: disabled by config");else this.debug.error("Setup failed: no suitable element passed")}return Yr(e,[{key:"play",value:function(){return Zr.is.function(this.media.play)?this.media.play():null}},{key:"pause",value:function(){this.playing&&Zr.is.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){(Zr.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?(this.pause(),this.restart()):Zr.is.function(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(Zr.is.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(Zr.is.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(Zr.is.number(e)?e:1)}},{key:"decreaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-(Zr.is.number(e)?e:1)}},{key:"toggleCaptions",value:function(e){if(this.supported.ui){var t=Zr.is.boolean(e)?e:!this.elements.container.classList.contains(this.config.classNames.captions.active);this.captions.active!==t&&(this.captions.active=t,Zr.toggleState(this.elements.buttons.captions,this.captions.active),Zr.toggleClass(this.elements.container,this.config.classNames.captions.active,this.captions.active),Zr.dispatchEvent.call(this,this.media,this.captions.active?"captionsenabled":"captionsdisabled"))}}},{key:"airplay",value:function(){eo.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){if(this.supported.ui&&!this.isAudio){var t=Zr.hasClass(this.elements.container,this.config.classNames.hideControls),n=void 0===e?void 0:!e,i=Zr.toggleClass(this.elements.container,this.config.classNames.hideControls,n);if(i&&this.config.controls.includes("settings")&&!Zr.is.empty(this.config.settings)&&ro.toggleMenu.call(this,!1),i!==t){var r=i?"controlshidden":"controlsshown";Zr.dispatchEvent.call(this,this.media,r)}return!i}return!1}},{key:"on",value:function(e,t){Zr.on(this.elements.container,e,t)}},{key:"off",value:function(e,t){Zr.off(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var i=function(){document.body.style.overflow="",t.embed=null,n?(Object.keys(t.elements).length&&(Zr.removeElement(t.elements.buttons.play),Zr.removeElement(t.elements.captions),Zr.removeElement(t.elements.controls),Zr.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),Zr.is.function(e)&&e()):(t.listeners.clear(),Zr.replaceElement(t.elements.original,t.elements.container),Zr.dispatchEvent.call(t,t.elements.original,"destroyed",!0),Zr.is.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};switch(this.stop(),this.provider+":"+this.type){case"html5:video":case"html5:audio":clearTimeout(this.timers.loading),go.toggleNativeControls.call(this,!0),i();break;case"youtube:video":clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&Zr.is.function(this.embed.destroy)&&this.embed.destroy(),i();break;case"vimeo:video":null!==this.embed&&this.embed.unload().then(i),setTimeout(i,200)}}}},{key:"supports",value:function(e){return eo.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===$r.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===$r.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===$r.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===Xr.video)}},{key:"isAudio",get:function(){return Boolean(this.type===Xr.audio)}},{key:"playing",get:function(){return Boolean(this.ready&&!this.paused&&!this.ended)}},{key:"paused",get:function(){return Boolean(this.media.paused)}},{key:"stopped",get:function(){return Boolean(this.paused&&0===this.currentTime)}},{key:"ended",get:function(){return Boolean(this.media.ended)}},{key:"currentTime",set:function(e){var t=0;Zr.is.number(e)&&(t=e),t<0?t=0:t>this.duration&&(t=this.duration),this.media.currentTime=t,this.debug.log("Seeking to "+this.currentTime+" seconds")},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return Zr.is.number(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}},{key:"seeking",get:function(){return Boolean(this.media.seeking)}},{key:"duration",get:function(){var e=parseFloat(this.config.duration),t=this.media?Number(this.media.duration):0;return Number.isNaN(e)?t:e}},{key:"volume",set:function(e){var t=e;Zr.is.string(t)&&(t=Number(t)),Zr.is.number(t)||(t=this.storage.get("volume")),Zr.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!Zr.is.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;Zr.is.boolean(t)||(t=this.storage.get("muted")),Zr.is.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return Boolean(this.media.muted)}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;Zr.is.number(e)&&(t=e),Zr.is.number(t)||(t=this.storage.get("speed")),Zr.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=null;if(Zr.is.empty(e)||(t=Number(e)),Zr.is.number(t)&&0!==t||(t=this.storage.get("quality")),Zr.is.number(t)||(t=this.config.quality.selected),Zr.is.number(t)||(t=this.config.quality.default),this.options.quality.length){if(!this.options.quality.includes(t)){var n=Zr.closest(this.options.quality,t);this.debug.warn("Unsupported quality option: "+t+", using "+n+" instead"),t=n}this.config.quality.selected=t,this.media.quality=t}},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=Zr.is.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return Boolean(this.media.loop)}},{key:"source",set:function(e){Ao.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isVideo?go.setPoster.call(this,e):this.debug.warn("Poster can only be set for video")},get:function(){return this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=Zr.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:"language",set:function(e){if(Zr.is.string(e))if(Zr.is.empty(e))this.toggleCaptions(!1);else{var t=e.toLowerCase();this.options.captions.includes(t)?(this.toggleCaptions(!0),"enabled"!==t&&this.language!==t&&(this.captions.language=t,oo.setText.call(this,null),oo.setLanguage.call(this),Zr.dispatchEvent.call(this,this.media,"languagechange"))):this.debug.warn("Unsupported language option: "+t)}},get:function(){return this.captions.language}},{key:"pip",set:function(e){var t="picture-in-picture",n="inline";if(eo.pip){var i=Zr.is.boolean(e)?e:this.pip===n;this.media.webkitSetPresentationMode(i?t:n)}},get:function(){return eo.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,n){return eo.check(e,t,n)}},{key:"loadSprite",value:function(e,t){return Zr.loadSprite(e,t)}},{key:"setup",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=null;return Zr.is.string(t)?i=Array.from(document.querySelectorAll(t)):Zr.is.nodeList(t)?i=Array.from(t):Zr.is.array(t)&&(i=t.filter(function(e){return Zr.is.element(e)})),Zr.is.empty(i)?null:i.map(function(t){return new e(t,n)})}}]),e}();return _o.defaults=Zr.cloneDeep(lo),_o});
//# sourceMappingURL=plyr.polyfilled.min.js.map
diff --git a/dist/plyr.polyfilled.min.js.map b/dist/plyr.polyfilled.min.js.map
index f9a62cdf..b40c7497 100644
--- a/dist/plyr.polyfilled.min.js.map
+++ b/dist/plyr.polyfilled.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../node_modules/core-js/modules/_global.js","../../node_modules/core-js/modules/_core.js","../../node_modules/core-js/modules/_is-object.js","../../node_modules/core-js/modules/_an-object.js","../../node_modules/core-js/modules/_fails.js","../../node_modules/core-js/modules/_descriptors.js","../../node_modules/core-js/modules/_dom-create.js","../../node_modules/core-js/modules/_ie8-dom-define.js","../../node_modules/core-js/modules/_to-primitive.js","../../node_modules/core-js/modules/_object-dp.js","../../node_modules/core-js/modules/_property-desc.js","../../node_modules/core-js/modules/_hide.js","../../node_modules/core-js/modules/_has.js","../../node_modules/core-js/modules/_uid.js","../../node_modules/core-js/modules/_redefine.js","../../node_modules/core-js/modules/_a-function.js","../../node_modules/core-js/modules/_ctx.js","../../node_modules/core-js/modules/_export.js","../../node_modules/core-js/modules/_typed.js","../../node_modules/core-js/modules/_redefine-all.js","../../node_modules/core-js/modules/_an-instance.js","../../node_modules/core-js/modules/_to-integer.js","../../node_modules/core-js/modules/_to-length.js","../../node_modules/core-js/modules/_to-index.js","../../node_modules/core-js/modules/_cof.js","../../node_modules/core-js/modules/_iobject.js","../../node_modules/core-js/modules/_defined.js","../../node_modules/core-js/modules/_to-iobject.js","../../node_modules/core-js/modules/_to-absolute-index.js","../../node_modules/core-js/modules/_array-includes.js","../../node_modules/core-js/modules/_shared.js","../../node_modules/core-js/modules/_shared-key.js","../../node_modules/core-js/modules/_object-keys-internal.js","../../node_modules/core-js/modules/_enum-bug-keys.js","../../node_modules/core-js/modules/_object-gopn.js","../../node_modules/core-js/modules/_to-object.js","../../node_modules/core-js/modules/_array-fill.js","../../node_modules/core-js/modules/_wks.js","../../node_modules/core-js/modules/_set-to-string-tag.js","../../node_modules/core-js/modules/_typed-buffer.js","../../node_modules/core-js/modules/_species-constructor.js","../../node_modules/core-js/modules/_set-species.js","../../node_modules/core-js/modules/es6.typed.array-buffer.js","../../node_modules/core-js/modules/_classof.js","../../node_modules/core-js/modules/_iterators.js","../../node_modules/core-js/modules/_is-array-iter.js","../../node_modules/core-js/modules/_object-keys.js","../../node_modules/core-js/modules/_object-dps.js","../../node_modules/core-js/modules/_html.js","../../node_modules/core-js/modules/_object-create.js","../../node_modules/core-js/modules/_object-gpo.js","../../node_modules/core-js/modules/core.get-iterator-method.js","../../node_modules/core-js/modules/_is-array.js","../../node_modules/core-js/modules/_array-species-constructor.js","../../node_modules/core-js/modules/_array-species-create.js","../../node_modules/core-js/modules/_array-methods.js","../../node_modules/core-js/modules/_add-to-unscopables.js","../../node_modules/core-js/modules/_iter-step.js","../../node_modules/core-js/modules/_iter-create.js","../../node_modules/core-js/modules/_iter-define.js","../../node_modules/core-js/modules/es6.array.iterator.js","../../node_modules/core-js/modules/_iter-detect.js","../../node_modules/core-js/modules/_array-copy-within.js","../../node_modules/core-js/modules/_object-pie.js","../../node_modules/core-js/modules/_object-gopd.js","../../node_modules/core-js/modules/_typed-array.js","../../node_modules/core-js/modules/es6.typed.int8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","../../node_modules/core-js/modules/es6.typed.int16-array.js","../../node_modules/core-js/modules/es6.typed.uint16-array.js","../../node_modules/core-js/modules/es6.typed.int32-array.js","../../node_modules/core-js/modules/es6.typed.uint32-array.js","../../node_modules/core-js/modules/es6.typed.float32-array.js","../../node_modules/core-js/modules/es6.typed.float64-array.js","../../node_modules/core-js/modules/_iter-call.js","../../node_modules/core-js/modules/_for-of.js","../../node_modules/core-js/modules/_meta.js","../../node_modules/core-js/modules/_validate-collection.js","../../node_modules/core-js/modules/_collection-strong.js","../../node_modules/core-js/modules/_set-proto.js","../../node_modules/core-js/modules/_inherit-if-required.js","../../node_modules/core-js/modules/_collection.js","../../node_modules/core-js/modules/es6.map.js","../../node_modules/core-js/modules/es6.set.js","../../node_modules/core-js/modules/_object-gops.js","../../node_modules/core-js/modules/_object-assign.js","../../node_modules/core-js/modules/_collection-weak.js","../../node_modules/core-js/modules/es6.weak-map.js","../../node_modules/core-js/modules/es6.weak-set.js","../../node_modules/core-js/modules/es6.reflect.apply.js","../../node_modules/core-js/modules/_invoke.js","../../node_modules/core-js/modules/_bind.js","../../node_modules/core-js/modules/es6.reflect.construct.js","../../node_modules/core-js/modules/es6.reflect.define-property.js","../../node_modules/core-js/modules/es6.reflect.delete-property.js","../../node_modules/core-js/modules/es6.reflect.get.js","../../node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.reflect.get-prototype-of.js","../../node_modules/core-js/modules/es6.reflect.has.js","../../node_modules/core-js/modules/es6.reflect.is-extensible.js","../../node_modules/core-js/modules/_own-keys.js","../../node_modules/core-js/modules/es6.reflect.own-keys.js","../../node_modules/core-js/modules/es6.reflect.prevent-extensions.js","../../node_modules/core-js/modules/es6.reflect.set.js","../../node_modules/core-js/modules/es6.reflect.set-prototype-of.js","../../node_modules/core-js/modules/_task.js","../../node_modules/core-js/modules/_microtask.js","../../node_modules/core-js/modules/_new-promise-capability.js","../../node_modules/core-js/modules/es6.promise.js","../../node_modules/core-js/modules/_perform.js","../../node_modules/core-js/modules/_promise-resolve.js","../../node_modules/core-js/modules/_wks-ext.js","../../node_modules/core-js/modules/_wks-define.js","../../node_modules/core-js/modules/_object-gopn-ext.js","../../node_modules/core-js/modules/es6.symbol.js","../../node_modules/core-js/modules/_enum-keys.js","../../node_modules/core-js/modules/_object-sap.js","../../node_modules/core-js/modules/es6.object.freeze.js","../../node_modules/core-js/modules/es6.object.seal.js","../../node_modules/core-js/modules/es6.object.prevent-extensions.js","../../node_modules/core-js/modules/es6.object.is-frozen.js","../../node_modules/core-js/modules/es6.object.is-sealed.js","../../node_modules/core-js/modules/es6.object.is-extensible.js","../../node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.object.get-prototype-of.js","../../node_modules/core-js/modules/es6.object.keys.js","../../node_modules/core-js/modules/es6.object.get-own-property-names.js","../../node_modules/core-js/modules/es6.object.assign.js","../../node_modules/core-js/modules/_same-value.js","../../node_modules/core-js/modules/es6.object.is.js","../../node_modules/core-js/modules/es6.function.name.js","../../node_modules/core-js/modules/es6.string.raw.js","../../node_modules/core-js/modules/es6.string.from-code-point.js","../../node_modules/core-js/modules/_string-at.js","../../node_modules/core-js/modules/es6.string.code-point-at.js","../../node_modules/core-js/modules/_string-repeat.js","../../node_modules/core-js/modules/es6.string.repeat.js","../../node_modules/core-js/modules/_is-regexp.js","../../node_modules/core-js/modules/_string-context.js","../../node_modules/core-js/modules/_fails-is-regexp.js","../../node_modules/core-js/modules/es6.string.starts-with.js","../../node_modules/core-js/modules/es6.string.ends-with.js","../../node_modules/core-js/modules/es6.string.includes.js","../../node_modules/core-js/modules/es6.regexp.flags.js","../../node_modules/core-js/modules/_flags.js","../../node_modules/core-js/modules/_fix-re-wks.js","../../node_modules/core-js/modules/es6.regexp.match.js","../../node_modules/core-js/modules/es6.regexp.replace.js","../../node_modules/core-js/modules/es6.regexp.split.js","../../node_modules/core-js/modules/es6.regexp.search.js","../../node_modules/core-js/modules/_create-property.js","../../node_modules/core-js/modules/es6.array.from.js","../../node_modules/core-js/modules/es6.array.of.js","../../node_modules/core-js/modules/es6.array.copy-within.js","../../node_modules/core-js/modules/es6.array.find.js","../../node_modules/core-js/modules/es6.array.find-index.js","../../node_modules/core-js/modules/es6.array.fill.js","../../node_modules/core-js/modules/es6.number.is-finite.js","../../node_modules/core-js/modules/_is-integer.js","../../node_modules/core-js/modules/es6.number.is-integer.js","../../node_modules/core-js/modules/es6.number.is-safe-integer.js","../../node_modules/core-js/modules/es6.number.is-nan.js","../../node_modules/core-js/modules/es6.number.epsilon.js","../../node_modules/core-js/modules/es6.number.min-safe-integer.js","../../node_modules/core-js/modules/es6.number.max-safe-integer.js","../../node_modules/core-js/modules/_math-log1p.js","../../node_modules/core-js/modules/es6.math.acosh.js","../../node_modules/core-js/modules/es6.math.asinh.js","../../node_modules/core-js/modules/es6.math.atanh.js","../../node_modules/core-js/modules/_math-sign.js","../../node_modules/core-js/modules/es6.math.cbrt.js","../../node_modules/core-js/modules/es6.math.clz32.js","../../node_modules/core-js/modules/es6.math.cosh.js","../../node_modules/core-js/modules/_math-expm1.js","../../node_modules/core-js/modules/es6.math.expm1.js","../../node_modules/core-js/modules/_math-fround.js","../../node_modules/core-js/modules/es6.math.fround.js","../../node_modules/core-js/modules/es6.math.hypot.js","../../node_modules/core-js/modules/es6.math.imul.js","../../node_modules/core-js/modules/es6.math.log1p.js","../../node_modules/core-js/modules/es6.math.log10.js","../../node_modules/core-js/modules/es6.math.log2.js","../../node_modules/core-js/modules/es6.math.sign.js","../../node_modules/core-js/modules/es6.math.sinh.js","../../node_modules/core-js/modules/es6.math.tanh.js","../../node_modules/core-js/modules/es6.math.trunc.js","../../node_modules/core-js/modules/es7.array.includes.js","../../node_modules/core-js/modules/_object-to-array.js","../../node_modules/core-js/modules/es7.object.values.js","../../node_modules/core-js/modules/es7.object.entries.js","../../node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","../../node_modules/core-js/modules/_string-pad.js","../../node_modules/core-js/modules/_user-agent.js","../../node_modules/core-js/modules/es7.string.pad-start.js","../../node_modules/core-js/modules/es7.string.pad-end.js","../../node_modules/core-js/modules/web.timers.js","../../node_modules/core-js/modules/web.immediate.js","../../node_modules/core-js/modules/web.dom.iterable.js","../../node_modules/regenerator-runtime/runtime.js","../../node_modules/custom-event-polyfill/custom-event-polyfill.js","support.js","../../node_modules/loadjs/dist/loadjs.umd.js","storage.js","types.js","utils.js","html5.js","i18n.js","controls.js","captions.js","console.js","defaults.js","fullscreen.js","ui.js","listeners.js","plugins/vimeo.js","plugins/youtube.js","media.js","plugins/ads.js","source.js","plyr.js"],"names":["global","module","exports","window","Math","self","Function","__g","core","version","__e","_isObject","it","_anObject","isObject","TypeError","_fails","exec","e","_descriptors","require$$0","Object","defineProperty","get","a","document","is","createElement","_domCreate","_ie8DomDefine","require$$1","require$$2","_toPrimitive","S","fn","val","toString","call","valueOf","dP","O","P","Attributes","anObject","toPrimitive","IE8_DOM_DEFINE","value","_propertyDesc","bitmap","enumerable","configurable","writable","_hide","object","key","f","createDesc","hasOwnProperty","_has","id","px","random","_uid","concat","undefined","SRC","$toString","TPL","split","inspectSource","safe","isFunction","has","hide","join","String","prototype","this","_aFunction","_ctx","that","length","aFunction","b","c","apply","arguments","$export","type","name","source","own","out","exp","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","IS_PROTO","IS_BIND","B","target","expProto","ctx","redefine","U","W","R","Typed","_export","TYPED","uid","VIEW","ABV","ArrayBuffer","DataView","CONSTR","i","TypedArrayConstructors","_typed","_redefineAll","src","_anInstance","Constructor","forbiddenField","ceil","floor","_toInteger","isNaN","min","_toLength","toInteger","_toIndex","number","toLength","RangeError","_cof","slice","_iobject","propertyIsEnumerable","cof","_defined","_toIobject","IObject","defined","max","_toAbsoluteIndex","index","_arrayIncludes","IS_INCLUDES","$this","el","fromIndex","toIObject","toAbsoluteIndex","store","_shared","shared","_sharedKey","arrayIndexOf","IE_PROTO","_objectKeysInternal","names","result","push","_enumBugKeys","hiddenKeys","getOwnPropertyNames","$keys","_toObject","_arrayFill","toObject","aLen","end","endPos","Symbol","USE_SYMBOL","def","TAG","_setToStringTag","tag","stat","gOPN","PROTOTYPE","WRONG_INDEX","$ArrayBuffer","$DataView","Infinity","BaseBuffer","abs","pow","log","LN2","$BUFFER","DESCRIPTORS","$LENGTH","$OFFSET","packIEEE754","mLen","nBytes","m","buffer","Array","eLen","eMax","eBias","rt","s","unpackIEEE754","nBits","NaN","unpackI32","bytes","packI8","packI16","packI32","packF64","packF32","addGetter","C","internal","view","isLittleEndian","intIndex","toIndex","_b","start","pack","reverse","set","conversion","$typed","fails","ArrayBufferProto","anInstance","keys","j","constructor","$setInt8","setInt8","getInt8","redefineAll","byteOffset","setUint8","byteLength","arrayFill","bufferLength","offset","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","setToStringTag","SPECIES","_speciesConstructor","D","_setSpecies","KEY","$isView","isView","$slice","len","first","final","speciesConstructor","viewS","viewT","ARG","_classof","T","tryGet","callee","_iterators","ITERATOR","ArrayProto","_isArrayIter","Iterators","_objectKeys","enumBugKeys","_objectDps","defineProperties","Properties","getKeys","_html","documentElement","Empty","createDict","iframeDocument","iframe","style","display","appendChild","contentWindow","open","write","lt","close","_objectCreate","create","dPs","ObjectProto","_objectGpo","getPrototypeOf","core_getIteratorMethod","getIteratorMethod","classof","_isArray","isArray","arg","_arraySpeciesCreate","original","_arrayMethods","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","asc","callbackfn","res","UNSCOPABLES","_addToUnscopables","_iterStep","done","IteratorPrototype","_iterCreate","NAME","next","descriptor","BUGGY","returnThis","_iterDefine","Base","DEFAULT","IS_SET","FORCED","$iterCreate","methods","getMethod","kind","proto","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","values","es6_array_iterator","iterated","_t","_i","_k","step","Arguments","addToUnscopables","SAFE_CLOSING","_iterDetect","skipClosing","arr","iter","_arrayCopyWithin","copyWithin","to","from","count","inc","gOPD","getOwnPropertyDescriptor","pIE","require$$3","require$$4","require$$5","$buffer","require$$6","require$$7","require$$8","propertyDesc","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","isArrayIter","require$$21","require$$22","require$$23","require$$24","getIterFn","require$$25","require$$26","wks","require$$27","createArrayMethod","require$$28","createArrayIncludes","require$$29","require$$30","ArrayIterators","require$$31","require$$32","$iterDetect","require$$33","setSpecies","require$$34","require$$35","arrayCopyWithin","require$$36","$DP","require$$37","$GOPD","require$$38","Uint8Array","arrayForEach","arrayFilter","arraySome","arrayEvery","arrayFind","arrayFindIndex","arrayIncludes","arrayValues","arrayKeys","arrayEntries","arrayLastIndexOf","lastIndexOf","arrayReduce","reduce","arrayReduceRight","reduceRight","arrayJoin","arraySort","sort","arraySlice","arrayToString","arrayToLocaleString","toLocaleString","TYPED_CONSTRUCTOR","DEF_CONSTRUCTOR","ALL_CONSTRUCTORS","TYPED_ARRAY","$map","allocate","LITTLE_ENDIAN","Uint16Array","FORCED_SET","toOffset","BYTES","validate","speciesFromList","list","fromList","_d","$from","iterator","mapfn","mapping","iterFn","$of","TO_LOCALE_BUG","$toLocaleString","every","fill","filter","find","predicate","findIndex","forEach","indexOf","searchElement","includes","separator","map","middle","some","comparefn","subarray","begin","$begin","BYTES_PER_ELEMENT","$set","arrayLike","$iterators","isTAIndex","$getDesc","$setDesc","desc","$TypedArrayPrototype$","wrapper","CLAMPED","GETTER","SETTER","TypedArray","TAC","TypedArrayPrototype","addElement","data","v","o","getter","round","setter","$offset","$length","klass","$len","l","$nativeIterator","CORRECT_ITER_NAME","$iterator","of","init","_iterCall","ret","BREAK","RETURN","iterable","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","meta","NEED","fastKey","getWeak","onFreeze","_validateCollection","SIZE","getEntry","entry","_f","n","k","_collectionStrong","getConstructor","ADDER","_l","forOf","clear","r","p","delete","prev","setStrong","$iterDefine","check","_setProto","setPrototypeOf","test","buggy","__proto__","_collection","common","IS_WEAK","fixMethod","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","inheritIfRequired","strong","add","getOwnPropertySymbols","$assign","assign","_objectAssign","A","K","getSymbols","gOPS","isEnum","uncaughtFrozenStore","UncaughtFrozenStore","findUncaughtFrozen","splice","_collectionWeak","$has","ufstore","InternalMap","each","weak","tmp","$WeakMap","freeze","method","rApply","Reflect","fApply","thisArgument","argumentsList","L","_invoke","args","un","factories","_bind","bind","partArgs","bound","construct","invoke","rConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","propertyKey","attributes","deleteProperty","receiver","getProto","$isExtensible","_ownKeys","ownKeys","$preventExtensions","V","existingDescriptor","ownDesc","setProto","defer","channel","port","process","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","queue","run","listener","event","nextTick","now","port2","port1","onmessage","postMessage","addEventListener","importScripts","cel","html","removeChild","setTimeout","_task","macrotask","Observer","MutationObserver","WebKitMutationObserver","Promise","isNode","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","resolve","reject","promise","$$resolve","$$reject","_perform","task","microtask","head","last","notify","flush","parent","domain","exit","enter","navigator","standalone","then","toggle","node","createTextNode","observe","characterData","$Promise","empty","newPromiseCapability","newPromiseCapabilityModule","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","isReject","_n","chain","_c","_v","ok","_s","reaction","handler","fail","_h","onHandleUnhandled","onUnhandled","console","unhandled","isUnhandled","perform","emit","onunhandledrejection","reason","error","_a","onrejectionhandled","$reject","_w","$resolve","executor","err","onFulfilled","onRejected","catch","capability","x","promiseCapability","promiseResolve","all","remaining","$index","alreadyCalled","race","_wksDefine","$Symbol","charAt","wksExt","windowNames","getWindowNames","gOPNExt","$JSON","JSON","_stringify","stringify","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","QObject","findChild","setSymbolDesc","$fails","_create","protoDesc","wrap","sym","isSymbol","$defineProperty","$defineProperties","symbols","enumKeys","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","es6Symbols","wellKnownSymbols","wksDefine","for","keyFor","useSetter","useSimple","replacer","$replacer","_objectSap","$freeze","$seal","$isFrozen","$isSealed","$getPrototypeOf","_sameValue","y","FProto","nameRE","match","raw","callSite","tpl","fromCharCode","$fromCodePoint","fromCodePoint","code","TO_STRING","$at","pos","charCodeAt","codePointAt","_stringRepeat","str","repeat","MATCH","_isRegexp","isRegExp","_stringContext","searchString","_failsIsRegexp","re","$startsWith","startsWith","context","search","$endsWith","endsWith","endPosition","flags","RegExp","ignoreCase","multiline","unicode","sticky","_fixReWks","SYMBOL","fns","strfn","rxfn","string","$match","regexp","REPLACE","$replace","searchValue","replaceValue","SPLIT","$split","_split","$push","NPCG","limit","separator2","lastIndex","lastLength","output","lastLastIndex","splitLimit","separatorCopy","replace","SEARCH","$search","_createProperty","createProperty","$find","forced","_isFinite","isFinite","_isInteger","isInteger","isSafeInteger","EPSILON","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","_mathLog1p","log1p","sqrt","$acosh","acosh","Number","MAX_VALUE","$asinh","asinh","$atanh","atanh","_mathSign","sign","cbrt","clz32","LOG2E","cosh","$expm1","expm1","_mathExpm1","EPSILON32","MAX32","MIN32","_mathFround","fround","$abs","$sign","hypot","value1","value2","div","sum","larg","$imul","imul","xn","yn","xl","yl","log10","LOG10E","log2","sinh","tanh","trunc","$includes","_objectToArray","isEntries","$values","getOwnPropertyDescriptors","getDesc","_stringPad","maxLength","fillString","left","stringLength","fillStr","intMaxLength","fillLen","stringFiller","_userAgent","userAgent","padStart","$pad","padEnd","MSIE","time","boundArgs","setInterval","$task","TO_STRING_TAG","ArrayValues","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","collections","explicit","Collection","Op","hasOwn","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","runtime","regeneratorRuntime","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","NativeIteratorPrototype","Gp","GeneratorFunctionPrototype","Generator","GeneratorFunction","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","__await","defineIteratorMethods","AsyncIterator","async","innerFn","outerFn","tryLocsList","pop","Context","reset","skipTempReset","sent","_sent","delegate","tryEntries","resetTryEntry","stop","rootRecord","completion","rval","dispatchException","exception","handle","loc","caught","record","tryLoc","hasCatch","hasFinally","catchLoc","finallyLoc","Error","abrupt","finallyEntry","complete","afterLoc","finish","thrown","delegateYield","resultName","nextLoc","protoGenerator","generator","state","doneResult","delegateResult","maybeInvokeDelegate","tryCatch","makeInvokeMethod","obj","unwrapped","previousPromise","callInvokeWithMethodAndArg","return","info","pushTryEntry","locs","iteratorMethod","ce","CustomEvent","preventDefault","defaultPrevented","params","evt","origPrevent","bubbles","cancelable","detail","createEvent","initCustomEvent","Event","range","factory","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","executeCallbacks","depsNotFound","success","loadFile","path","callbackFn","numTries","isCss","doc","maxTries","numRetries","beforeCallbackFn","before","pathStripped","rel","href","onload","onerror","onbeforeload","ev","sheet","cssText","loadjs","paths","arg1","arg2","trim","numWaiting","loadFiles","ready","deps","bundleIds","subscribe","isDefined","Storage","player","enabled","config","storage","supported","localStorage","getItem","utils","json","parse","extend","setItem","removeItem","providers","types","input","Boolean","nullOrUndefined","instanceof","WeakMap","Element","Text","TextTrackCue","VTTCue","TextTrack","array","nodeList","documentMode","platform","url","responseType","request","XMLHttpRequest","responseText","response","statusText","send","hasId","exists","querySelectorAll","useStorage","container","toggleHidden","setAttribute","cached","content","fetch","injectSprite","innerHTML","body","insertBefore","childNodes","prefix","elements","targets","element","child","cloneNode","parentNode","sibling","nextSibling","text","setAttributes","textContent","removeElement","lastChild","newChild","oldChild","replaceChild","_ref","_ref2","sel","existingAttributes","existing","selector","className","parts","class","hidden","boolean","hasAttribute","removeAttribute","contains","classList","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelector","focused","activeElement","focusable","getElements","trap","keyCode","getFocusElement","shiftKey","focus","on","off","callback","passive","capture","function","Node","toggleListener","events","options","support","passiveListeners","dispatchEvent","toggleState","pressed","getAttribute","_len","_key","current","toFixed","parseInt","displayHours","inverted","formatTime","format","hours","getHours","mins","getMinutes","secs","getSeconds","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","_len2","_key2","shift","defineProperty$1","toConsumableArray","item","curr","youtube","vimeo","$2","parser","parseUrl","hash","_hash$split2","decodeURIComponent","encodeURIComponent","fragment","createDocumentFragment","firstChild","innerText","width","height","ratio","getRatio","h","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","removeEventListener","transitionEndEvent","matchMedia","html5","getSources","sizes","dedupe","mime","currentTime","playing","load","play","blankVideo","debug","i18n","seekTime","title","controls","cors","URL","iconUrl","location","host","isIE","svg4everybody","getElement","selectors","buttons","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","duration","seekTooltip","classNames","tooltip","warn","toggleNativeControls","getIconUrl","iconPath","iconPrefix","icon","createElementNS","use","setAttributeNS","attr","badge","menu","buttonType","button","toCamelCase","label","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","updateRangeFill","suffix","checked","radio","faux","insertAdjacentHTML","forceHours","setRange","muted","getPercentage","_this","getElementsByTagName","nodeValue","buffered","isWebkit","setProperty","tooltips","percent","clientRect","getBoundingClientRect","visible","_toggle","toggleClass","_this2","touch","pageX","hasClass","parseFloat","updateTimeDisplay","invert","invertTime","seeking","updateProgress","hasDuration","displayDuration","paused","updateSeekTooltip","setting","tabs","panes","quality","_this3","toggleTab","checkMenu","emptyElement","sorting","getLabel","createMenuItem","createBadge","getBadge","updateSetting","pane","active","lang","language","default","getTracks","tracks","track","_this4","unshift","speed","isVimeo","_this5","tab","form","show","isMenuItem","isButton","stopPropagation","clone","position","opacity","scrollWidth","scrollHeight","getElementById","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","_this6","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","update","findElements","repaint","labels","_this7","stored","isYouTube","textTracks","setCaptionsMenu","insertAfter","hostname","protocol","blob","createObjectURL","setLanguage","setCue","mode","currentTrack","getCurrentTrack","activeCues","embed","enableTextTrack","cue","setText","getCueAsHTML","caption","noop","Console","defaults","userLanguage","onChange","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","overflow","fallback","Fullscreen","property","native","iosNative","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","exitFullscreen","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","uiSupported","listeners","inject","setup","loop","updateVolume","timeUpdate","checkPlaying","isTouch","setTitle","setPoster","isEmbed","poster","posters","backgroundImage","stopped","toggleControls","loading","timers","failed","networkState","Listeners","lastKey","handleKey","toggleMenu","firstTouch","which","altKey","ctrlKey","metaKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","keyboard","tabFocus","hideControls","durationUpdate","hasAudio","resetOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","showHomeTab","showTab","toggleInvert","hover","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","setAspectRatio","Vimeo","loadScript","urls","sdk","padding","paddingBottom","transform","autoplay","buildUrlParams","parseVimeoId","embedContainer","replaceElement","thumbnail_large","pathname","Player","autopause","disableTextTrack","setCurrentTime","selected","setPlaybackRate","setVolume","setLoop","currentSrc","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","getAspectRatio","setAutopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","cues","stripHTML","seconds","build","mapQualityUnit","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","google","items","snippet","currentId","parseYouTubeId","generateId","message","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","seekTo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","levels","getAvailableQualityLevels","level","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","_this8","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","_this9","adError","zIndex","_this10","destroy","handlers","_this11","Date","base","insertElement","attribute","cancelRequests","crossorigin","addStyleHook","insertElements","Plyr","jQuery","plyr","tagName","getProviderByUrl","getUrlParams","truthy","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","soft","unload","targetTime","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","webkitPresentationMode","inline","t"],"mappings":"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ACH,wDAGA,yCACA,+GACG,gHAGH,uEAMH,UACA,WACC,aACE,YACD,iBACK,UACP,YACE,cACE,gBACE,SACP,aACI,WACF,aACE,UACH,cACI,sBAQV,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,8BAIA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,sBAIA,gBACA,+BAIA,kBACA,mBACA,YACA,cACA,cACA,iBACA,gBACA,gCAMU,uDACC,4BAEI,aACF,0BAEL,4BAEE,2BACC,8BACE,+BACD,mCACK,kCACP,8BACI,oCACE,+BACP,4BACI,iCACC,8BACJ,mCAGA,4BACE,6BACD,+BACG,iCACD,8CAGI,gCACH,+BACF,iCACA,+BACF,+BACE,mCAEF,2BACA,gCAEG,mDAMP,qBACI,kBACH,4BACA,mCACS,sCACR,mBACH,oBACI,wBACA,uBACD,uBACC,wBACA,sBACF,wBACA,sBACE,qBACH,oBACE,6BACM,4BACP,uBACE,6BACI,6BACC,kCAEH,0BACA,mBACD,qCAGG,gCACD,6CAGC,oCACC,4CAGC,6BACH,uCAGG,iCACH,iCAEF,+CAMI,wBACN,oCAMA,oBAMC,cACI,KChYf+sC,GAAU/J,GAAMgK,aAEtB,SAAS8M,QACAr5C,KAAKiiC,aAKJ8O,EAAS/wC,KAAKgiC,OAAOqD,SAAS0J,QAAQU,WACxClN,GAAM1lC,GAAG0oC,QAAQwL,OACXhI,YAAYgI,EAAQ/wC,KAAK40C,WAI7B9L,cAActrC,KAAKwC,KAAKgiC,OAAQhiC,KAAKyB,OAAQzB,KAAK40C,OAAS,kBAAoB,kBAAkB,GAGlGtI,GAAQgN,UACHC,UAAU/7C,KAAKwC,KAAKgiC,OAAQhiC,KAAKyB,OAAQzB,KAAK40C,SAI5D,SAAS4E,SAAevyB,EAAgBxmB,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,IAAAA,UAAA,GAEhCwmB,OACKwyB,kBACEn+C,OAAOo+C,SAAW,IAClBp+C,OAAOq+C,SAAW,UAGlBC,SAAS55C,KAAKy5C,eAAe3vB,E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","file":"plyr.polyfilled.min.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\nimport Storage from './storage';\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, NodeList);\n },\n element(input) {\n return this.instanceof(input, Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, Event);\n },\n cue(input) {\n return this.instanceof(input, TextTrackCue) || this.instanceof(input, VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n const useStorage = Storage.supported;\n\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (useStorage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (useStorage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove element(s)\n removeElement(element) {\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: this,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Format string\n format(input, ...args) {\n if (utils.is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => utils.is.string(args[i]) ? args[i] : '');\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Restore time\n player.currentTime = currentTime;\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\n });\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n\n\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const attributes = utils.getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = utils.createElement('div', utils.extend(attributes, {\n class: `plyr__time ${attributes.class}`,\n 'aria-label': i18n.get(type, this.config),\n }), '00:00');\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, forceHours, inverted);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n controls.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n controls.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n setProgress(this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n controls.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n controls.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n controls.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n utils.toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 2160:\n label = '4K';\n break;\n\n case 1440:\n case 1080:\n case 720:\n label = 'HD';\n break;\n\n case 576:\n case 480:\n label = 'SD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n const label = controls.getLabel.call(this, 'quality', quality);\n controls.createMenuItem.call(this, quality, list, type, label, getBadge(quality));\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}&times;`;\n\n case 'quality':\n if (utils.is.number(value)) {\n return `${value}p`;\n }\n\n return utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n if (this.captions.active) {\n if (this.options.captions.length > 2 || !this.options.captions.some(lang => lang === 'enabled')) {\n value = this.captions.language;\n } else {\n value = 'enabled';\n }\n } else {\n value = '';\n }\n\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const toggle = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: !utils.is.empty(track.language) ? track.language : 'enabled',\n label: captions.getLabel.call(this, track),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label,\n track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null,\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n // Store reference\n this.options.captions = tracks.map(track => track.language);\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => {\n const label = controls.getLabel.call(this, 'speed', speed);\n controls.createMenuItem.call(this, speed, list, type, label);\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.hasAttribute('hidden');\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n utils.toggleHidden(form, !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n utils.toggleHidden(current, true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n utils.toggleHidden(pane, false);\n\n const tabs = utils.getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.cors) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([\n key,\n value,\n ]) => {\n result = utils.replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (utils.is.string(this.config.controls)) {\n container = replace(container);\n } else if (utils.is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n const tracks = captions.getTracks.call(this);\n\n if (!tracks.length) {\n return null;\n }\n\n // Get track based on current language\n let track = tracks.find(track => track.language.toLowerCase() === this.language);\n\n // Get the <track> with default attribute\n if (!track) {\n track = utils.getElement.call(this, 'track[default]');\n }\n\n // Get the first track\n if (!track) {\n [track] = tracks;\n }\n\n return track;\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Reset to start when playback ended\n resetOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.3.7/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: (navigator.language || navigator.userLanguage).split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime}s',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime}s',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/v2/video/{0}.json',\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api: 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n poster: 'https://img.youtube.com/vi/{0}/maxresdefault.jpg,https://img.youtube.com/vi/{0}/hqdefault.jpg',\n },\n googleIMA: {\n sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n ads: 'plyr__ads',\n control: 'plyr__control',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.property = Fullscreen.property;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (utils.is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n controls.updateVolume.call(this);\n\n // Reset time display\n controls.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Set the poster image\n ui.setPoster.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n\n // Set the poster image\n setPoster() {\n if (!utils.is.element(this.elements.poster) || utils.is.empty(this.poster)) {\n return;\n }\n\n // Set the inline style\n const posters = this.poster.split(',');\n this.elements.poster.style.backgroundImage = posters.map(p => `url('${p}')`).join(',');\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Only update controls on non timeupdate events\n if (utils.is.event(event) && event.type === 'timeupdate') {\n return;\n }\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.player.toggleControls(event);\n });\n }\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking', event => controls.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadeddata loadedmetadata', event => controls.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing', event => controls.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => controls.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied timeupdate', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // Check if media failed to load\n // utils.on(this.player.media, 'play', event => ui.checkFailed.call(this.player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n showHomeTab();\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n this.player.currentTime = event.target.value / event.target.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n this.player.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n // muted: player.muted,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = utils.format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div', { class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Get poster image\n utils.fetch(utils.format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (utils.is.empty(response)) {\n return;\n }\n\n // Get the URL for thumbnail\n const url = new URL(response[0].thumbnail_large);\n\n // Get original image\n url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n // Set attribute\n player.media.setAttribute('poster', url.href);\n\n // Update\n ui.setPoster.call(player);\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe, {\n autopause: player.config.autopause,\n muted: player.muted,\n });\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time).catch(() => {\n // Do nothing\n });\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = utils.format(this.config.urls.youtube.api, videoId, key);\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Set poster image\n player.media.setAttribute('poster', utils.format(player.config.urls.youtube.poster, videoId));\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport utils from './utils';\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = utils.createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n html5.extend.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport i18n from '../i18n';\nimport utils from '../utils';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n get enabled() {\n return this.player.isVideo && this.player.config.ads.enabled && !utils.is.empty(this.publisherId);\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.sdk)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n // Mute based on current state\n request.setAdWillPlayMuted(!this.player.muted);\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!utils.is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (utils.is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport { providers } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if (!utils.is.empty(input.poster)) {\n this.poster = input.poster;\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.3.7\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport Console from './console';\nimport controls from './controls';\nimport defaults from './defaults';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport { providers, types } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n captions: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n const clone = this.media.cloneNode(true);\n clone.autoplay = false;\n this.elements.original = clone;\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(params.playsinline);\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended);\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get stopped state\n */\n get stopped() {\n return Boolean(this.paused && this.currentTime === 0);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (utils.is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // True duration\n const realDuration = this.media ? Number(this.media.duration) : 0;\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality) || quality === 0) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isVideo) {\n this.debug.warn('Poster can only be set for video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n ui.setPoster.call(this);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n this.toggleCaptions(false);\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // Check for support\n if (!this.options.captions.includes(language)) {\n this.debug.warn(`Unsupported language option: ${language}`);\n return;\n }\n\n // Ensure captions are enabled\n this.toggleCaptions(true);\n\n // Enabled only\n if (language === 'enabled') {\n return;\n }\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Events that show the controls\n const showEvents = [\n 'touchstart',\n 'touchmove',\n 'mouseenter',\n 'mousemove',\n 'focusin',\n ];\n\n // Events that delay hiding\n const delayEvents = [\n 'touchmove',\n 'touchend',\n 'mousemove',\n ];\n\n // Whether to show controls\n show = showEvents.includes(toggle.type);\n\n // Delay hiding on move events\n if (delayEvents.includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (!this.touch && toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (this.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Set hideControls class\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, this.config.hideControls);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (utils.is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (utils.is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (utils.is.array(selector)) {\n targets = selector.filter(i => utils.is.element(i));\n }\n\n if (utils.is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nexport default Plyr;\n"]} \ No newline at end of file
+{"version":3,"sources":["../../node_modules/core-js/modules/_global.js","../../node_modules/core-js/modules/_core.js","../../node_modules/core-js/modules/_is-object.js","../../node_modules/core-js/modules/_an-object.js","../../node_modules/core-js/modules/_fails.js","../../node_modules/core-js/modules/_descriptors.js","../../node_modules/core-js/modules/_dom-create.js","../../node_modules/core-js/modules/_ie8-dom-define.js","../../node_modules/core-js/modules/_to-primitive.js","../../node_modules/core-js/modules/_object-dp.js","../../node_modules/core-js/modules/_property-desc.js","../../node_modules/core-js/modules/_hide.js","../../node_modules/core-js/modules/_has.js","../../node_modules/core-js/modules/_uid.js","../../node_modules/core-js/modules/_redefine.js","../../node_modules/core-js/modules/_a-function.js","../../node_modules/core-js/modules/_ctx.js","../../node_modules/core-js/modules/_export.js","../../node_modules/core-js/modules/_typed.js","../../node_modules/core-js/modules/_redefine-all.js","../../node_modules/core-js/modules/_an-instance.js","../../node_modules/core-js/modules/_to-integer.js","../../node_modules/core-js/modules/_to-length.js","../../node_modules/core-js/modules/_to-index.js","../../node_modules/core-js/modules/_cof.js","../../node_modules/core-js/modules/_iobject.js","../../node_modules/core-js/modules/_defined.js","../../node_modules/core-js/modules/_to-iobject.js","../../node_modules/core-js/modules/_to-absolute-index.js","../../node_modules/core-js/modules/_array-includes.js","../../node_modules/core-js/modules/_shared.js","../../node_modules/core-js/modules/_shared-key.js","../../node_modules/core-js/modules/_object-keys-internal.js","../../node_modules/core-js/modules/_enum-bug-keys.js","../../node_modules/core-js/modules/_object-gopn.js","../../node_modules/core-js/modules/_to-object.js","../../node_modules/core-js/modules/_array-fill.js","../../node_modules/core-js/modules/_wks.js","../../node_modules/core-js/modules/_set-to-string-tag.js","../../node_modules/core-js/modules/_typed-buffer.js","../../node_modules/core-js/modules/_species-constructor.js","../../node_modules/core-js/modules/_set-species.js","../../node_modules/core-js/modules/es6.typed.array-buffer.js","../../node_modules/core-js/modules/_classof.js","../../node_modules/core-js/modules/_iterators.js","../../node_modules/core-js/modules/_is-array-iter.js","../../node_modules/core-js/modules/_object-keys.js","../../node_modules/core-js/modules/_object-dps.js","../../node_modules/core-js/modules/_html.js","../../node_modules/core-js/modules/_object-create.js","../../node_modules/core-js/modules/_object-gpo.js","../../node_modules/core-js/modules/core.get-iterator-method.js","../../node_modules/core-js/modules/_is-array.js","../../node_modules/core-js/modules/_array-species-constructor.js","../../node_modules/core-js/modules/_array-species-create.js","../../node_modules/core-js/modules/_array-methods.js","../../node_modules/core-js/modules/_add-to-unscopables.js","../../node_modules/core-js/modules/_iter-step.js","../../node_modules/core-js/modules/_iter-create.js","../../node_modules/core-js/modules/_iter-define.js","../../node_modules/core-js/modules/es6.array.iterator.js","../../node_modules/core-js/modules/_iter-detect.js","../../node_modules/core-js/modules/_array-copy-within.js","../../node_modules/core-js/modules/_object-pie.js","../../node_modules/core-js/modules/_object-gopd.js","../../node_modules/core-js/modules/_typed-array.js","../../node_modules/core-js/modules/es6.typed.int8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","../../node_modules/core-js/modules/es6.typed.int16-array.js","../../node_modules/core-js/modules/es6.typed.uint16-array.js","../../node_modules/core-js/modules/es6.typed.int32-array.js","../../node_modules/core-js/modules/es6.typed.uint32-array.js","../../node_modules/core-js/modules/es6.typed.float32-array.js","../../node_modules/core-js/modules/es6.typed.float64-array.js","../../node_modules/core-js/modules/_iter-call.js","../../node_modules/core-js/modules/_for-of.js","../../node_modules/core-js/modules/_meta.js","../../node_modules/core-js/modules/_validate-collection.js","../../node_modules/core-js/modules/_collection-strong.js","../../node_modules/core-js/modules/_set-proto.js","../../node_modules/core-js/modules/_inherit-if-required.js","../../node_modules/core-js/modules/_collection.js","../../node_modules/core-js/modules/es6.map.js","../../node_modules/core-js/modules/es6.set.js","../../node_modules/core-js/modules/_object-gops.js","../../node_modules/core-js/modules/_object-assign.js","../../node_modules/core-js/modules/_collection-weak.js","../../node_modules/core-js/modules/es6.weak-map.js","../../node_modules/core-js/modules/es6.weak-set.js","../../node_modules/core-js/modules/es6.reflect.apply.js","../../node_modules/core-js/modules/_invoke.js","../../node_modules/core-js/modules/_bind.js","../../node_modules/core-js/modules/es6.reflect.construct.js","../../node_modules/core-js/modules/es6.reflect.define-property.js","../../node_modules/core-js/modules/es6.reflect.delete-property.js","../../node_modules/core-js/modules/es6.reflect.get.js","../../node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.reflect.get-prototype-of.js","../../node_modules/core-js/modules/es6.reflect.has.js","../../node_modules/core-js/modules/es6.reflect.is-extensible.js","../../node_modules/core-js/modules/_own-keys.js","../../node_modules/core-js/modules/es6.reflect.own-keys.js","../../node_modules/core-js/modules/es6.reflect.prevent-extensions.js","../../node_modules/core-js/modules/es6.reflect.set.js","../../node_modules/core-js/modules/es6.reflect.set-prototype-of.js","../../node_modules/core-js/modules/_task.js","../../node_modules/core-js/modules/_microtask.js","../../node_modules/core-js/modules/_new-promise-capability.js","../../node_modules/core-js/modules/es6.promise.js","../../node_modules/core-js/modules/_perform.js","../../node_modules/core-js/modules/_user-agent.js","../../node_modules/core-js/modules/_promise-resolve.js","../../node_modules/core-js/modules/_wks-ext.js","../../node_modules/core-js/modules/_wks-define.js","../../node_modules/core-js/modules/_object-gopn-ext.js","../../node_modules/core-js/modules/es6.symbol.js","../../node_modules/core-js/modules/_enum-keys.js","../../node_modules/core-js/modules/_object-sap.js","../../node_modules/core-js/modules/es6.object.freeze.js","../../node_modules/core-js/modules/es6.object.seal.js","../../node_modules/core-js/modules/es6.object.prevent-extensions.js","../../node_modules/core-js/modules/es6.object.is-frozen.js","../../node_modules/core-js/modules/es6.object.is-sealed.js","../../node_modules/core-js/modules/es6.object.is-extensible.js","../../node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.object.get-prototype-of.js","../../node_modules/core-js/modules/es6.object.keys.js","../../node_modules/core-js/modules/es6.object.get-own-property-names.js","../../node_modules/core-js/modules/es6.object.assign.js","../../node_modules/core-js/modules/_same-value.js","../../node_modules/core-js/modules/es6.object.is.js","../../node_modules/core-js/modules/es6.function.name.js","../../node_modules/core-js/modules/es6.string.raw.js","../../node_modules/core-js/modules/es6.string.from-code-point.js","../../node_modules/core-js/modules/_string-at.js","../../node_modules/core-js/modules/es6.string.code-point-at.js","../../node_modules/core-js/modules/_string-repeat.js","../../node_modules/core-js/modules/es6.string.repeat.js","../../node_modules/core-js/modules/_is-regexp.js","../../node_modules/core-js/modules/_string-context.js","../../node_modules/core-js/modules/_fails-is-regexp.js","../../node_modules/core-js/modules/es6.string.starts-with.js","../../node_modules/core-js/modules/es6.string.ends-with.js","../../node_modules/core-js/modules/es6.string.includes.js","../../node_modules/core-js/modules/es6.regexp.flags.js","../../node_modules/core-js/modules/_flags.js","../../node_modules/core-js/modules/_fix-re-wks.js","../../node_modules/core-js/modules/es6.regexp.match.js","../../node_modules/core-js/modules/es6.regexp.replace.js","../../node_modules/core-js/modules/es6.regexp.split.js","../../node_modules/core-js/modules/es6.regexp.search.js","../../node_modules/core-js/modules/_create-property.js","../../node_modules/core-js/modules/es6.array.from.js","../../node_modules/core-js/modules/es6.array.of.js","../../node_modules/core-js/modules/es6.array.copy-within.js","../../node_modules/core-js/modules/es6.array.find.js","../../node_modules/core-js/modules/es6.array.find-index.js","../../node_modules/core-js/modules/es6.array.fill.js","../../node_modules/core-js/modules/es6.number.is-finite.js","../../node_modules/core-js/modules/_is-integer.js","../../node_modules/core-js/modules/es6.number.is-integer.js","../../node_modules/core-js/modules/es6.number.is-safe-integer.js","../../node_modules/core-js/modules/es6.number.is-nan.js","../../node_modules/core-js/modules/es6.number.epsilon.js","../../node_modules/core-js/modules/es6.number.min-safe-integer.js","../../node_modules/core-js/modules/es6.number.max-safe-integer.js","../../node_modules/core-js/modules/_math-log1p.js","../../node_modules/core-js/modules/es6.math.acosh.js","../../node_modules/core-js/modules/es6.math.asinh.js","../../node_modules/core-js/modules/es6.math.atanh.js","../../node_modules/core-js/modules/_math-sign.js","../../node_modules/core-js/modules/es6.math.cbrt.js","../../node_modules/core-js/modules/es6.math.clz32.js","../../node_modules/core-js/modules/es6.math.cosh.js","../../node_modules/core-js/modules/_math-expm1.js","../../node_modules/core-js/modules/es6.math.expm1.js","../../node_modules/core-js/modules/_math-fround.js","../../node_modules/core-js/modules/es6.math.fround.js","../../node_modules/core-js/modules/es6.math.hypot.js","../../node_modules/core-js/modules/es6.math.imul.js","../../node_modules/core-js/modules/es6.math.log1p.js","../../node_modules/core-js/modules/es6.math.log10.js","../../node_modules/core-js/modules/es6.math.log2.js","../../node_modules/core-js/modules/es6.math.sign.js","../../node_modules/core-js/modules/es6.math.sinh.js","../../node_modules/core-js/modules/es6.math.tanh.js","../../node_modules/core-js/modules/es6.math.trunc.js","../../node_modules/core-js/modules/es7.array.includes.js","../../node_modules/core-js/modules/_object-to-array.js","../../node_modules/core-js/modules/es7.object.values.js","../../node_modules/core-js/modules/es7.object.entries.js","../../node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","../../node_modules/core-js/modules/_string-pad.js","../../node_modules/core-js/modules/es7.string.pad-start.js","../../node_modules/core-js/modules/es7.string.pad-end.js","../../node_modules/core-js/modules/web.timers.js","../../node_modules/core-js/modules/web.immediate.js","../../node_modules/core-js/modules/web.dom.iterable.js","../../node_modules/regenerator-runtime/runtime.js","../../node_modules/custom-event-polyfill/custom-event-polyfill.js","../../node_modules/url-polyfill/url-polyfill.js","support.js","../../node_modules/loadjs/dist/loadjs.umd.js","storage.js","types.js","utils.js","html5.js","i18n.js","controls.js","captions.js","console.js","defaults.js","fullscreen.js","ui.js","listeners.js","plugins/vimeo.js","plugins/youtube.js","media.js","plugins/ads.js","source.js","plyr.js"],"names":["global","module","exports","window","Math","self","Function","__g","core","version","__e","_isObject","it","_anObject","isObject","TypeError","_fails","exec","e","_descriptors","require$$0","Object","defineProperty","get","a","document","is","createElement","_domCreate","_ie8DomDefine","require$$1","require$$2","_toPrimitive","S","fn","val","toString","call","valueOf","dP","O","P","Attributes","anObject","toPrimitive","IE8_DOM_DEFINE","value","_propertyDesc","bitmap","enumerable","configurable","writable","_hide","object","key","f","createDesc","hasOwnProperty","_has","id","px","random","_uid","concat","undefined","SRC","$toString","TPL","split","inspectSource","safe","isFunction","has","hide","join","String","prototype","this","_aFunction","_ctx","that","length","aFunction","b","c","apply","arguments","$export","type","name","source","own","out","exp","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","IS_PROTO","IS_BIND","B","target","expProto","ctx","redefine","U","W","R","Typed","_export","TYPED","uid","VIEW","ABV","ArrayBuffer","DataView","CONSTR","i","TypedArrayConstructors","_typed","_redefineAll","src","_anInstance","Constructor","forbiddenField","ceil","floor","_toInteger","isNaN","min","_toLength","toInteger","_toIndex","number","toLength","RangeError","_cof","slice","_iobject","propertyIsEnumerable","cof","_defined","_toIobject","IObject","defined","max","_toAbsoluteIndex","index","_arrayIncludes","IS_INCLUDES","$this","el","fromIndex","toIObject","toAbsoluteIndex","store","push","mode","copyright","shared","_sharedKey","arrayIndexOf","IE_PROTO","_objectKeysInternal","names","result","_enumBugKeys","hiddenKeys","getOwnPropertyNames","$keys","_toObject","_arrayFill","toObject","aLen","end","endPos","Symbol","USE_SYMBOL","def","TAG","_setToStringTag","tag","stat","gOPN","PROTOTYPE","WRONG_INDEX","$ArrayBuffer","$DataView","Infinity","BaseBuffer","abs","pow","log","LN2","$BUFFER","DESCRIPTORS","$LENGTH","$OFFSET","packIEEE754","mLen","nBytes","m","buffer","Array","eLen","eMax","eBias","rt","s","unpackIEEE754","nBits","NaN","unpackI32","bytes","packI8","packI16","packI32","packF64","packF32","addGetter","C","internal","view","isLittleEndian","intIndex","toIndex","_b","start","pack","reverse","set","conversion","$typed","fails","ArrayBufferProto","anInstance","keys","j","constructor","$setInt8","setInt8","getInt8","redefineAll","byteOffset","setUint8","byteLength","arrayFill","bufferLength","offset","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","setToStringTag","SPECIES","_speciesConstructor","D","_setSpecies","KEY","$isView","isView","$slice","len","first","final","speciesConstructor","viewS","viewT","ARG","_classof","T","tryGet","callee","_iterators","ITERATOR","ArrayProto","_isArrayIter","Iterators","_objectKeys","enumBugKeys","_objectDps","defineProperties","Properties","getKeys","_html","documentElement","Empty","createDict","iframeDocument","iframe","style","display","appendChild","contentWindow","open","write","lt","close","_objectCreate","create","dPs","ObjectProto","_objectGpo","getPrototypeOf","core_getIteratorMethod","getIteratorMethod","classof","_isArray","isArray","arg","_arraySpeciesCreate","original","_arrayMethods","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","asc","callbackfn","res","UNSCOPABLES","_addToUnscopables","_iterStep","done","IteratorPrototype","_iterCreate","NAME","next","descriptor","BUGGY","returnThis","_iterDefine","Base","DEFAULT","IS_SET","FORCED","$iterCreate","methods","getMethod","kind","proto","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","values","es6_array_iterator","iterated","_t","_i","_k","step","Arguments","addToUnscopables","SAFE_CLOSING","_iterDetect","skipClosing","arr","iter","_arrayCopyWithin","copyWithin","to","from","count","inc","gOPD","getOwnPropertyDescriptor","pIE","require$$3","require$$4","require$$5","$buffer","require$$6","require$$7","require$$8","propertyDesc","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","isArrayIter","require$$21","require$$22","require$$23","require$$24","getIterFn","require$$25","require$$26","wks","require$$27","createArrayMethod","require$$28","createArrayIncludes","require$$29","require$$30","ArrayIterators","require$$31","require$$32","$iterDetect","require$$33","setSpecies","require$$34","require$$35","arrayCopyWithin","require$$36","$DP","require$$37","$GOPD","require$$38","Uint8Array","arrayForEach","arrayFilter","arraySome","arrayEvery","arrayFind","arrayFindIndex","arrayIncludes","arrayValues","arrayKeys","arrayEntries","arrayLastIndexOf","lastIndexOf","arrayReduce","reduce","arrayReduceRight","reduceRight","arrayJoin","arraySort","sort","arraySlice","arrayToString","arrayToLocaleString","toLocaleString","TYPED_CONSTRUCTOR","DEF_CONSTRUCTOR","ALL_CONSTRUCTORS","TYPED_ARRAY","$map","allocate","LITTLE_ENDIAN","Uint16Array","FORCED_SET","toOffset","BYTES","validate","speciesFromList","list","fromList","_d","$from","iterator","mapfn","mapping","iterFn","$of","TO_LOCALE_BUG","$toLocaleString","every","fill","filter","find","predicate","findIndex","forEach","indexOf","searchElement","includes","separator","map","middle","some","comparefn","subarray","begin","$begin","BYTES_PER_ELEMENT","$set","arrayLike","$iterators","isTAIndex","$getDesc","$setDesc","desc","$TypedArrayPrototype$","wrapper","CLAMPED","GETTER","SETTER","TypedArray","TAC","TypedArrayPrototype","addElement","data","v","o","getter","round","setter","$offset","$length","klass","$len","l","$nativeIterator","CORRECT_ITER_NAME","$iterator","of","init","_iterCall","ret","BREAK","RETURN","iterable","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","meta","NEED","fastKey","getWeak","onFreeze","_validateCollection","SIZE","getEntry","entry","_f","n","k","_collectionStrong","getConstructor","ADDER","_l","forOf","clear","r","p","delete","prev","setStrong","$iterDefine","check","_setProto","setPrototypeOf","test","buggy","__proto__","_collection","common","IS_WEAK","fixMethod","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","inheritIfRequired","strong","add","getOwnPropertySymbols","$assign","assign","_objectAssign","A","K","getSymbols","gOPS","isEnum","uncaughtFrozenStore","UncaughtFrozenStore","findUncaughtFrozen","splice","_collectionWeak","$has","ufstore","InternalMap","each","weak","tmp","$WeakMap","freeze","method","rApply","Reflect","fApply","thisArgument","argumentsList","L","_invoke","args","un","factories","_bind","bind","partArgs","bound","construct","invoke","rConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","propertyKey","attributes","deleteProperty","receiver","getProto","$isExtensible","_ownKeys","ownKeys","$preventExtensions","V","existingDescriptor","ownDesc","setProto","defer","channel","port","process","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","queue","run","listener","event","nextTick","now","port2","port1","onmessage","postMessage","addEventListener","importScripts","cel","html","removeChild","setTimeout","_task","macrotask","Observer","MutationObserver","WebKitMutationObserver","Promise","isNode","PromiseCapability","resolve","reject","promise","$$resolve","$$reject","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","_perform","navigator","_userAgent","userAgent","task","microtask","head","last","notify","flush","parent","domain","exit","enter","standalone","then","toggle","node","createTextNode","observe","characterData","versions","v8","$Promise","empty","newPromiseCapability","newPromiseCapabilityModule","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","isReject","_n","chain","_c","_v","ok","_s","reaction","exited","handler","fail","_h","onHandleUnhandled","onUnhandled","console","unhandled","isUnhandled","perform","emit","onunhandledrejection","reason","error","_a","onrejectionhandled","$reject","_w","$resolve","executor","err","onFulfilled","onRejected","catch","capability","x","promiseCapability","promiseResolve","all","remaining","$index","alreadyCalled","race","_wksDefine","$Symbol","charAt","wksExt","windowNames","getWindowNames","gOPNExt","$JSON","JSON","_stringify","stringify","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","QObject","findChild","setSymbolDesc","$fails","_create","protoDesc","wrap","sym","isSymbol","$defineProperty","$defineProperties","symbols","enumKeys","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","es6Symbols","wellKnownSymbols","wksDefine","for","keyFor","useSetter","useSimple","replacer","$replacer","_objectSap","$freeze","$seal","$isFrozen","$isSealed","$getPrototypeOf","_sameValue","y","FProto","nameRE","match","raw","callSite","tpl","fromCharCode","$fromCodePoint","fromCodePoint","code","TO_STRING","$at","pos","charCodeAt","codePointAt","_stringRepeat","str","repeat","MATCH","_isRegexp","isRegExp","_stringContext","searchString","_failsIsRegexp","re","$startsWith","startsWith","context","search","$endsWith","endsWith","endPosition","flags","RegExp","ignoreCase","multiline","unicode","sticky","_fixReWks","SYMBOL","fns","strfn","rxfn","string","$match","regexp","REPLACE","$replace","searchValue","replaceValue","SPLIT","$split","_split","$push","NPCG","limit","separator2","lastIndex","lastLength","output","lastLastIndex","splitLimit","separatorCopy","replace","SEARCH","$search","_createProperty","createProperty","$find","forced","_isFinite","isFinite","_isInteger","isInteger","isSafeInteger","EPSILON","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","_mathLog1p","log1p","sqrt","$acosh","acosh","Number","MAX_VALUE","$asinh","asinh","$atanh","atanh","_mathSign","sign","cbrt","clz32","LOG2E","cosh","$expm1","expm1","_mathExpm1","EPSILON32","MAX32","MIN32","_mathFround","fround","$abs","$sign","hypot","value1","value2","div","sum","larg","$imul","imul","xn","yn","xl","yl","log10","LOG10E","log2","sinh","tanh","trunc","$includes","_objectToArray","isEntries","$values","getOwnPropertyDescriptors","getDesc","_stringPad","maxLength","fillString","left","stringLength","fillStr","intMaxLength","fillLen","stringFiller","padStart","$pad","padEnd","MSIE","time","boundArgs","setInterval","$task","TO_STRING_TAG","ArrayValues","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","collections","explicit","Collection","Op","hasOwn","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","runtime","regeneratorRuntime","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","NativeIteratorPrototype","Gp","GeneratorFunctionPrototype","Generator","GeneratorFunction","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","__await","defineIteratorMethods","AsyncIterator","async","innerFn","outerFn","tryLocsList","pop","Context","reset","skipTempReset","sent","_sent","delegate","tryEntries","resetTryEntry","stop","rootRecord","completion","rval","dispatchException","exception","handle","loc","caught","record","tryLoc","hasCatch","hasFinally","catchLoc","finallyLoc","Error","abrupt","finallyEntry","complete","afterLoc","finish","thrown","delegateYield","resultName","nextLoc","protoGenerator","generator","state","doneResult","delegateResult","maybeInvokeDelegate","tryCatch","makeInvokeMethod","obj","unwrapped","previousPromise","callInvokeWithMethodAndArg","return","info","pushTryEntry","locs","iteratorMethod","ce","CustomEvent","preventDefault","defaultPrevented","params","evt","origPrevent","bubbles","cancelable","detail","createEvent","initCustomEvent","Event","iteratorSupported","checkIfIteratorIsSupported","createIterator","items","shift","serializeParam","encodeURIComponent","deserializeParam","decodeURIComponent","URLSearchParams","attribute","append","_this","_entries","getAll","callback","thisArg","polyfillURLSearchParams","u","URL","pathname","href","searchParams","checkIfURLIsSupported","_URL","url","base","doc","implementation","createHTMLDocument","baseElement","anchorElement","body","protocol","attributeName","_anchorElement","linkURLWithAnchorAttribute","origin","expectedPort","http:","https:","ftp:","addPortToOrigin","hostname","password","username","methodName","createObjectURL","blob","revokeObjectURL","polyfillURL","location","getOrigin","range","factory","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","executeCallbacks","depsNotFound","success","loadFile","path","callbackFn","numTries","isCss","maxTries","numRetries","beforeCallbackFn","before","pathStripped","rel","onload","onerror","onbeforeload","ev","sheet","cssText","loadjs","paths","arg1","arg2","trim","numWaiting","loadFiles","ready","deps","bundleIds","subscribe","isDefined","Storage","player","enabled","config","storage","supported","localStorage","getItem","utils","json","parse","extend","setItem","removeItem","providers","types","input","Boolean","nullOrUndefined","instanceof","WeakMap","Element","Text","TextTrackCue","VTTCue","TextTrack","array","nodeList","documentMode","platform","responseType","request","XMLHttpRequest","responseText","response","statusText","send","minWidth","image","Image","naturalWidth","hasId","exists","querySelectorAll","useStorage","container","toggleHidden","setAttribute","cached","content","fetch","injectSprite","innerHTML","insertBefore","childNodes","prefix","elements","targets","element","child","cloneNode","parentNode","sibling","nextSibling","text","setAttributes","innerText","removeElement","lastChild","newChild","oldChild","replaceChild","_ref","_ref2","sel","existingAttributes","existing","selector","className","parts","class","hidden","boolean","hasAttribute","removeAttribute","force","classList","contains","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelector","focused","activeElement","focusable","getElements","trap","keyCode","getFocusElement","shiftKey","focus","on","off","passive","capture","function","Node","toggleListener","events","options","support","passiveListeners","dispatchEvent","toggleState","pressed","getAttribute","_len","_key","current","toFixed","parseInt","displayHours","inverted","formatTime","format","hours","getHours","mins","getMinutes","secs","getSeconds","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","_len2","_key2","defineProperty$1","toConsumableArray","item","curr","youtube","vimeo","$2","parser","parseUrl","hash","_hash$split2","fragment","createDocumentFragment","firstChild","width","height","ratio","getRatio","h","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","removeEventListener","transitionEndEvent","matchMedia","html5","getSources","sizes","dedupe","mime","currentTime","playing","load","play","blankVideo","debug","i18n","seekTime","title","controls","cors","iconUrl","host","isIE","svg4everybody","getElement","selectors","buttons","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","duration","seekTooltip","classNames","tooltip","warn","toggleNativeControls","getIconUrl","iconPath","iconPrefix","icon","createElementNS","use","setAttributeNS","attr","badge","menu","buttonType","button","toCamelCase","label","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","updateRangeFill","suffix","checked","radio","faux","insertAdjacentHTML","forceHours","setRange","muted","getPercentage","getElementsByTagName","nodeValue","buffered","isWebkit","setProperty","tooltips","percent","clientRect","getBoundingClientRect","visible","_toggle","toggleClass","_this2","touch","pageX","hasClass","parseFloat","updateTimeDisplay","invert","invertTime","seeking","updateProgress","hasDuration","displayDuration","paused","updateSeekTooltip","setting","tabs","panes","quality","_this3","toggleTab","checkMenu","emptyElement","sorting","getLabel","createMenuItem","createBadge","getBadge","updateSetting","pane","active","lang","language","default","getTracks","tracks","track","_this4","unshift","speed","isVimeo","_this5","tab","form","show","isMenuItem","isButton","stopPropagation","clone","position","opacity","scrollWidth","scrollHeight","getElementById","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","_this6","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","update","findElements","repaint","labels","_this7","stored","isYouTube","textTracks","setCaptionsMenu","insertAfter","setLanguage","setCue","currentTrack","getCurrentTrack","activeCues","embed","enableTextTrack","cue","setText","getCueAsHTML","caption","noop","Console","defaults","userLanguage","onChange","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","overflow","fallback","Fullscreen","property","native","iosNative","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","exitFullscreen","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","uiSupported","listeners","inject","setup","loop","updateVolume","timeUpdate","checkPlaying","isTouch","setTitle","poster","backgroundImage","setPoster","isEmbed","enable","posterEnabled","loadPromise","loadImage","togglePoster","stopped","toggleControls","loading","timers","hideControls","hover","Listeners","lastKey","handleKey","toggleMenu","firstTouch","which","altKey","ctrlKey","metaKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","keyboard","tabFocus","delay","durationUpdate","hasAudio","resetOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","showHomeTab","showTab","currentTarget","seekTo","toggleInvert","_player","noTransition","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","assurePlaybackState","setAspectRatio","Vimeo","loadScript","urls","sdk","padding","paddingBottom","transform","autoplay","buildUrlParams","parseVimeoId","embedContainer","replaceElement","thumbnail_large","Player","autopause","disableTextTrack","setVolume","setCurrentTime","selected","setPlaybackRate","setLoop","currentSrc","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","getAspectRatio","setAutopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","cues","stripHTML","seconds","build","mapQualityUnit","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","google","snippet","currentId","parseYouTubeId","generateId","posterSrc","backgroundSize","message","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","levels","getAvailableQualityLevels","level","unMute","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","_this8","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","_this9","adError","zIndex","_this10","destroy","handlers","_this11","Date","insertElement","cancelRequests","crossorigin","addStyleHook","insertElements","Plyr","failed","jQuery","plyr","tagName","getProviderByUrl","getUrlParams","truthy","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","unload","targetTime","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","webkitPresentationMode","inline","t","cloneDeep"],"mappings":"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Q9hB,IAAK8hB,SAAW6yB,uCAIpE/7C,KAAKylC,QAAUhqC,SAASsE,UAAUkiB,KAAKzkB,KAAK0rB,QAAQoqB,KAAMpqB,SAAW6yB,wCAIrE/7C,KAAKylC,QAAUhqC,SAASsE,UAAUkiB,KAAKzkB,KAAK0rB,QAAQO,MAAOP,SAAW6yB,SAnBhEC,GCFfC,aAEO,QAGF,UAGA,YAGG,aAGC,WAGD,UAGF,SACD,WAGG,sBAIO,cAGL,gBAGE,QAGP,oBAGM,gBAGC,cAGF,sBAGQ,cAGR,aACA,eACH,gDAGG,wDAIC,aAEL,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,0BAMI,mBAOE,WAEN,GACA,IACA,EACA,KACA,IACA,KACA,uBAMK,UACD,uBAKE,QACJ,qBAKE,YACG31B,UAAU2xB,UAAY3xB,UAAU41B,cAAc38C,MAAM,KAAK,yBAK3D,YACC,aACC,qBAKF,MACJ,kBAKL,+BAMA,eACA,OACA,SACA,WACA,WACA,MACA,UACA,wBAGA,WACA,UACA,uBAKS,iBACD,0BACF,aACC,oBACM,2BACP,cACE,kBACE,uBACG,wBACH,kBACF,cACF,cACE,wBACQ,kCACC,mCACA,kCACD,6BACJ,8BACF,oBACA,iBACH,eACC,iBACC,eACH,aACC,YACF,UACA,YACE,iBACG,mBACD,wBACM,uBAMN,gDACG,6CACH,wDAGA,yCACA,wHAGA,uEAMH,UACA,WACC,aACE,YACD,iBACK,UACP,YACE,cACE,gBACE,SACP,aACI,WACF,aACE,UACH,cACI,sBAQV,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,8BAIA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,sBAIA,gBACA,+BAIA,kBACA,mBACA,YACA,cACA,cACA,iBACA,gBACA,gCAMU,uDACC,4BAEI,aACF,0BAEL,4BAEE,2BACC,8BACE,+BACD,mCACK,kCACP,8BACI,oCACE,+BACP,4BACI,iCACC,8BACJ,mCAGA,4BACE,6BACD,+BACG,iC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","file":"plyr.polyfilled.min.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.6' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2018 Denis Pushkarev (zloirock.ru)'\n});\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","(function(global) {\r\n /**\r\n * Polyfill URLSearchParams\r\n *\r\n * Inspired from : https://github.com/WebReflection/url-search-params/blob/master/src/url-search-params.js\r\n */\r\n\r\n var checkIfIteratorIsSupported = function() {\r\n try {\r\n return !!Symbol.iterator;\r\n } catch(error) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var iteratorSupported = checkIfIteratorIsSupported();\r\n\r\n var createIterator = function(items) {\r\n var iterator = {\r\n next: function() {\r\n var value = items.shift();\r\n return { done: value === void 0, value: value };\r\n }\r\n };\r\n\r\n if(iteratorSupported) {\r\n iterator[Symbol.iterator] = function() {\r\n return iterator;\r\n };\r\n }\r\n\r\n return iterator;\r\n };\r\n\r\n /**\r\n * Search param name and values should be encoded according to https://url.spec.whatwg.org/#urlencoded-serializing\r\n * encodeURIComponent() produces the same result except encoding spaces as `%20` instead of `+`.\r\n */\r\n var serializeParam = function(value) {\r\n return encodeURIComponent(value).replace(/%20/g, '+');\r\n };\r\n\r\n var deserializeParam = function(value) {\r\n return decodeURIComponent(value).replace(/\\+/g, ' ');\r\n };\r\n\r\n var polyfillURLSearchParams= function() {\r\n\r\n var URLSearchParams = function(searchString) {\r\n Object.defineProperty(this, '_entries', { value: {} });\r\n\r\n if(typeof searchString === 'string') {\r\n if(searchString !== '') {\r\n searchString = searchString.replace(/^\\?/, '');\r\n var attributes = searchString.split('&');\r\n var attribute;\r\n for(var i = 0; i < attributes.length; i++) {\r\n attribute = attributes[i].split('=');\r\n this.append(\r\n deserializeParam(attribute[0]),\r\n (attribute.length > 1) ? deserializeParam(attribute[1]) : ''\r\n );\r\n }\r\n }\r\n } else if(searchString instanceof URLSearchParams) {\r\n var _this = this;\r\n searchString.forEach(function(value, name) {\r\n _this.append(value, name);\r\n });\r\n }\r\n };\r\n\r\n var proto = URLSearchParams.prototype;\r\n\r\n proto.append = function(name, value) {\r\n if(name in this._entries) {\r\n this._entries[name].push(value.toString());\r\n } else {\r\n this._entries[name] = [value.toString()];\r\n }\r\n };\r\n\r\n proto.delete = function(name) {\r\n delete this._entries[name];\r\n };\r\n\r\n proto.get = function(name) {\r\n return (name in this._entries) ? this._entries[name][0] : null;\r\n };\r\n\r\n proto.getAll = function(name) {\r\n return (name in this._entries) ? this._entries[name].slice(0) : [];\r\n };\r\n\r\n proto.has = function(name) {\r\n return (name in this._entries);\r\n };\r\n\r\n proto.set = function(name, value) {\r\n this._entries[name] = [value.toString()];\r\n };\r\n\r\n proto.forEach = function(callback, thisArg) {\r\n var entries;\r\n for(var name in this._entries) {\r\n if(this._entries.hasOwnProperty(name)) {\r\n entries = this._entries[name];\r\n for(var i = 0; i < entries.length; i++) {\r\n callback.call(thisArg, entries[i], name, this);\r\n }\r\n }\r\n }\r\n };\r\n\r\n proto.keys = function() {\r\n var items = [];\r\n this.forEach(function(value, name) { items.push(name); });\r\n return createIterator(items);\r\n };\r\n\r\n proto.values = function() {\r\n var items = [];\r\n this.forEach(function(value) { items.push(value); });\r\n return createIterator(items);\r\n };\r\n\r\n proto.entries = function() {\r\n var items = [];\r\n this.forEach(function(value, name) { items.push([name, value]); });\r\n return createIterator(items);\r\n };\r\n\r\n if(iteratorSupported) {\r\n proto[Symbol.iterator] = proto.entries;\r\n }\r\n\r\n proto.toString = function() {\r\n var searchString = '';\r\n this.forEach(function(value, name) {\r\n if(searchString.length > 0) searchString+= '&';\r\n searchString += serializeParam(name) + '=' + serializeParam(value);\r\n });\r\n return searchString;\r\n };\r\n\r\n global.URLSearchParams = URLSearchParams;\r\n };\r\n\r\n if(!('URLSearchParams' in global) || (new URLSearchParams('?a=1').toString() !== 'a=1')) {\r\n polyfillURLSearchParams();\r\n }\r\n\r\n // HTMLAnchorElement\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n\r\n(function(global) {\r\n /**\r\n * Polyfill URL\r\n *\r\n * Inspired from : https://github.com/arv/DOM-URL-Polyfill/blob/master/src/url.js\r\n */\r\n\r\n var checkIfURLIsSupported = function() {\r\n try {\r\n var u = new URL('b', 'http://a');\r\n u.pathname = 'c%20d';\r\n return (u.href === 'http://a/c%20d') && u.searchParams;\r\n } catch(e) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var polyfillURL = function() {\r\n var _URL = global.URL;\r\n\r\n var URL = function(url, base) {\r\n if(typeof url !== 'string') url = String(url);\r\n\r\n var doc = document.implementation.createHTMLDocument('');\r\n window.doc = doc;\r\n if(base) {\r\n var baseElement = doc.createElement('base');\r\n baseElement.href = base;\r\n doc.head.appendChild(baseElement);\r\n }\r\n\r\n var anchorElement = doc.createElement('a');\r\n anchorElement.href = url;\r\n doc.body.appendChild(anchorElement);\r\n anchorElement.href = anchorElement.href; // force href to refresh\r\n\r\n if(anchorElement.protocol === ':' || !/:/.test(anchorElement.href)) {\r\n throw new TypeError('Invalid URL');\r\n }\r\n\r\n Object.defineProperty(this, '_anchorElement', {\r\n value: anchorElement\r\n });\r\n };\r\n\r\n var proto = URL.prototype;\r\n\r\n var linkURLWithAnchorAttribute = function(attributeName) {\r\n Object.defineProperty(proto, attributeName, {\r\n get: function() {\r\n return this._anchorElement[attributeName];\r\n },\r\n set: function(value) {\r\n this._anchorElement[attributeName] = value;\r\n },\r\n enumerable: true\r\n });\r\n };\r\n\r\n ['hash', 'host', 'hostname', 'port', 'protocol', 'search']\r\n .forEach(function(attributeName) {\r\n linkURLWithAnchorAttribute(attributeName);\r\n });\r\n\r\n Object.defineProperties(proto, {\r\n\r\n 'toString': {\r\n get: function() {\r\n var _this = this;\r\n return function() {\r\n return _this.href;\r\n };\r\n }\r\n },\r\n\r\n 'href' : {\r\n get: function() {\r\n return this._anchorElement.href.replace(/\\?$/,'');\r\n },\r\n set: function(value) {\r\n this._anchorElement.href = value;\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'pathname' : {\r\n get: function() {\r\n return this._anchorElement.pathname.replace(/(^\\/?)/,'/');\r\n },\r\n set: function(value) {\r\n this._anchorElement.pathname = value;\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'origin': {\r\n get: function() {\r\n // get expected port from protocol\r\n var expectedPort = {'http:': 80, 'https:': 443, 'ftp:': 21}[this._anchorElement.protocol];\r\n // add port to origin if, expected port is different than actual port\r\n // and it is not empty f.e http://foo:8080\r\n // 8080 != 80 && 8080 != ''\r\n var addPortToOrigin = this._anchorElement.port != expectedPort &&\r\n this._anchorElement.port !== ''\r\n\r\n return this._anchorElement.protocol +\r\n '//' +\r\n this._anchorElement.hostname +\r\n (addPortToOrigin ? (':' + this._anchorElement.port) : '');\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'password': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'username': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'searchParams': {\r\n get: function() {\r\n var searchParams = new URLSearchParams(this.search);\r\n var _this = this;\r\n ['append', 'delete', 'set'].forEach(function(methodName) {\r\n var method = searchParams[methodName];\r\n searchParams[methodName] = function() {\r\n method.apply(searchParams, arguments);\r\n _this.search = searchParams.toString();\r\n };\r\n });\r\n return searchParams;\r\n },\r\n enumerable: true\r\n }\r\n });\r\n\r\n URL.createObjectURL = function(blob) {\r\n return _URL.createObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n URL.revokeObjectURL = function(url) {\r\n return _URL.revokeObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n global.URL = URL;\r\n\r\n };\r\n\r\n if(!checkIfURLIsSupported()) {\r\n polyfillURL();\r\n }\r\n\r\n if((global.location !== void 0) && !('origin' in global.location)) {\r\n var getOrigin = function() {\r\n return global.location.protocol + '//' + global.location.hostname + (global.location.port ? (':' + global.location.port) : '');\r\n };\r\n\r\n try {\r\n Object.defineProperty(global.location, 'origin', {\r\n get: getOrigin,\r\n enumerable: true\r\n });\r\n } catch(e) {\r\n setInterval(function() {\r\n global.location.origin = getOrigin();\r\n }, 100);\r\n }\r\n }\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\nimport Storage from './storage';\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, NodeList);\n },\n element(input) {\n return this.instanceof(input, Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, Event);\n },\n cue(input) {\n return this.instanceof(input, TextTrackCue) || this.instanceof(input, VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load image avoiding xhr/fetch CORS issues\n // Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded.\n // By default it checks if it is at least 1px, but you can add a second argument to change this.\n loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n Object.assign(image, {onload: handler, onerror: handler, src});\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n const useStorage = Storage.supported;\n\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (useStorage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (useStorage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove element(s)\n removeElement(element) {\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\n toggleClass(element, className, force) {\n if (utils.is.element(element)) {\n let method = 'toggle';\n if (typeof force !== 'undefined') {\n method = force ? 'add' : 'remove';\n }\n\n element.classList[method](className);\n return element.classList.contains(className);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: this,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Format string\n format(input, ...args) {\n if (utils.is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => (utils.is.string(args[i]) ? args[i] : ''));\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Clone nested objects\n cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Restore time\n player.currentTime = currentTime;\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\n });\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n\n\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.innerText = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const attributes = utils.getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = utils.createElement('div', utils.extend(attributes, {\n class: `plyr__time ${attributes.class}`,\n 'aria-label': i18n.get(type, this.config),\n }), '00:00');\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.innerText = utils.formatTime(time, forceHours, inverted);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n controls.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n const setProgress = (target, input) => {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n };\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n case 'seeked':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n controls.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n setProgress(this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.progress.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n controls.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n controls.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded or durationchange events\n durationUpdate() {\n // Bail if no ui or durationchange event triggered after playing/seek when invertTime is false\n if (!this.supported.ui || (!this.config.invertTime && this.currentTime)) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n controls.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n utils.toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 2160:\n label = '4K';\n break;\n\n case 1440:\n case 1080:\n case 720:\n label = 'HD';\n break;\n\n case 576:\n case 480:\n label = 'SD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n const label = controls.getLabel.call(this, 'quality', quality);\n controls.createMenuItem.call(this, quality, list, type, label, getBadge(quality));\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}&times;`;\n\n case 'quality':\n if (utils.is.number(value)) {\n return `${value}p`;\n }\n\n return utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n if (this.captions.active) {\n if (this.options.captions.length > 2 || !this.options.captions.some(lang => lang === 'enabled')) {\n value = this.captions.language;\n } else {\n value = 'enabled';\n }\n } else {\n value = '';\n }\n\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const toggle = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: !utils.is.empty(track.language) ? track.language : 'enabled',\n label: captions.getLabel.call(this, track),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label,\n track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null,\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n // Store reference\n this.options.captions = tracks.map(track => track.language);\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => {\n const label = controls.getLabel.call(this, 'speed', speed);\n controls.createMenuItem.call(this, speed, list, type, label);\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.hasAttribute('hidden');\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n utils.toggleHidden(form, !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n utils.toggleHidden(current, true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n utils.toggleHidden(pane, false);\n\n const tabs = utils.getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.cors) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([\n key,\n value,\n ]) => {\n result = utils.replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (utils.is.string(this.config.controls)) {\n container = replace(container);\n } else if (utils.is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n const tracks = captions.getTracks.call(this);\n\n if (!tracks.length) {\n return null;\n }\n\n // Get track based on current language\n let track = tracks.find(track => track.language.toLowerCase() === this.language);\n\n // Get the <track> with default attribute\n if (!track) {\n track = utils.getElement.call(this, 'track[default]');\n }\n\n // Get the first track\n if (!track) {\n [track] = tracks;\n }\n\n return track;\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.innerText = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Reset to start when playback ended\n resetOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.3.8/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: (navigator.language || navigator.userLanguage).split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime}s',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime}s',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/v2/video/{0}.json',\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api: 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n },\n googleIMA: {\n sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.property = Fullscreen.property;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (utils.is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n controls.updateVolume.call(this);\n\n // Reset time display\n controls.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster && this.elements.poster && !this.elements.poster.style.backgroundImage) {\n ui.setPoster.call(this, this.poster);\n }\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n\n // Toggle poster\n togglePoster(enable) {\n utils.toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n\n // Set the poster image (async)\n setPoster(poster) {\n // Set property regardless of validity\n this.media.setAttribute('poster', poster);\n\n // Bail if element is missing\n if (!utils.is.element(this.elements.poster)) {\n return Promise.reject();\n }\n\n // Load the image, and set poster if successful\n const loadPromise = utils.loadImage(poster)\n .then(() => {\n this.elements.poster.style.backgroundImage = `url('${poster}')`;\n Object.assign(this.elements.poster.style, {\n backgroundImage: `url('${poster}')`,\n // Reset backgroundSize as well (since it can be set to \"cover\" for padded thumbnails for youtube)\n backgroundSize: '',\n });\n ui.togglePoster.call(this, true);\n return poster;\n });\n\n // Hide the element if the poster can't be loaded (otherwise it will just be a black element covering the video)\n loadPromise.catch(() => ui.togglePoster.call(this, false));\n\n // Return the promise so the caller can use it as well\n return loadPromise;\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Only update controls on non timeupdate events\n if (utils.is.event(event) && event.type === 'timeupdate') {\n return;\n }\n\n // Toggle controls\n ui.toggleControls.call(this);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Update progress bar loading class state\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Update controls visibility\n ui.toggleControls.call(this);\n }, this.loading ? 250 : 0);\n },\n\n // Toggle controls based on state and `force` argument\n toggleControls(force) {\n const { controls } = this.elements;\n\n if (controls && this.config.hideControls) {\n // Show controls if force, loading, paused, or button interaction, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover));\n }\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen', event => {\n const { controls } = this.player.elements;\n\n // Remove button states for fullscreen\n if (event.type === 'enterfullscreen') {\n controls.pressed = false;\n controls.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = [\n 'touchstart',\n 'touchmove',\n 'mousemove',\n ].includes(event.type);\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(this.player, true);\n // Use longer timeout for touch devices\n delay = this.player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(this.player.timers.controls);\n // Timer to prevent flicker when seeking\n this.player.timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n });\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadeddata loadedmetadata', event => controls.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing seeking seeked', event => controls.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => controls.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied timeupdate', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n showHomeTab();\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n on(this.player.elements.inputs.seek, 'mousedown mousemove', event => {\n const clientRect = this.player.elements.progress.getBoundingClientRect();\n const percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n on(this.player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n\n // Was playing before?\n const play = seek.hasAttribute('play-on-seeked');\n\n // Done seeking\n const done = [\n 'mouseup',\n 'touchend',\n 'keyup',\n ].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute('play-on-seeked');\n this.player.play();\n } else if (!done && this.player.playing) {\n seek.setAttribute('play-on-seeked', '');\n this.player.pause();\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n const seek = event.currentTarget;\n\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (utils.is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n this.player.currentTime = seekTo / seek.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n const { config, elements, timers } = this.player;\n\n // Skip transition to prevent focus from scrolling the parent element\n utils.toggleClass(elements.controls, config.classNames.noTransition, event.type === 'focusin');\n\n // Toggle\n ui.toggleControls.call(this.player, event.type === 'focusin');\n\n // If focusin, hide again after delay\n if (event.type === 'focusin') {\n // Restore transition\n setTimeout(() => {\n utils.toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for keyboard users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n // Hide\n timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n }\n });\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (this.media.paused === play) {\n this.media.paused = !play;\n utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n // muted: player.muted,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = utils.format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div', { class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Get poster image\n utils.fetch(utils.format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (utils.is.empty(response)) {\n return;\n }\n\n // Get the URL for thumbnail\n const url = new URL(response[0].thumbnail_large);\n\n // Get original image\n url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n // Set and show poster\n ui.setPoster.call(player, url.href);\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe, {\n autopause: player.config.autopause,\n muted: player.muted,\n });\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n return player.embed.play();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n return player.embed.pause();\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Vimeo will automatically play on seek if the video hasn't been played before\n\n // Get current paused state and volume etc\n const { embed, media, paused, volume } = player;\n\n // Set seeking state and trigger event\n media.seeking = true;\n utils.dispatchEvent.call(player, media, 'seeking');\n\n // If paused, mute until seek is complete\n Promise.resolve(paused && embed.setVolume(0))\n // Seek\n .then(() => embed.setCurrentTime(time))\n // Restore paused\n .then(() => paused && embed.pause())\n // Restore volume\n .then(() => paused && embed.setVolume(volume))\n .catch(() => {\n // Do nothing\n });\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n assurePlaybackState.call(player, true);\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n assurePlaybackState.call(player, false);\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (this.media.paused === play) {\n this.media.paused = !play;\n utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = utils.format(this.config.urls.youtube.api, videoId, key);\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Set poster image\n const posterSrc = format => `https://img.youtube.com/vi/${videoId}/${format}default.jpg`;\n\n // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)\n utils.loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n .catch(() => utils.loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n .catch(() => utils.loadImage(posterSrc('hq'))) // 360p padded 4:3. Always exists\n .then(image => ui.setPoster.call(player, image.src))\n .then(posterSrc => {\n // If the image is padded, use background-size \"cover\" instead (like youtube does too with their posters)\n if (!posterSrc.includes('maxres')) {\n player.elements.poster.style.backgroundSize = 'cover';\n }\n });\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n instance.playVideo();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // If paused, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n if (player.paused) {\n player.embed.mute();\n }\n\n // Set seeking state and trigger event\n player.media.seeking = true;\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n const seeked = player.media.seeking && [\n 1,\n 2,\n ].includes(event.data);\n\n if (seeked) {\n // Unset seeking and fire seeked event\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n assurePlaybackState.call(player, false);\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)\n if (player.media.paused) {\n player.media.pause();\n } else {\n assurePlaybackState.call(player, true);\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\n }\n\n break;\n\n case 2:\n // Restore audio (YouTube starts playing on seek if the video hasn't been played yet)\n if (!player.muted) {\n player.embed.unMute();\n }\n assurePlaybackState.call(player, false);\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport utils from './utils';\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = utils.createElement('div', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n html5.extend.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport i18n from '../i18n';\nimport utils from '../utils';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n get enabled() {\n return this.player.isVideo && this.player.config.ads.enabled && !utils.is.empty(this.publisherId);\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.sdk)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n // Mute based on current state\n request.setAdWillPlayMuted(!this.player.muted);\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!utils.is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (utils.is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport { providers } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if (!utils.is.empty(input.poster)) {\n this.poster = input.poster;\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.3.8\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport Console from './console';\nimport controls from './controls';\nimport defaults from './defaults';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport { providers, types } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n Plyr.defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n captions: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n const clone = this.media.cloneNode(true);\n clone.autoplay = false;\n this.elements.original = clone;\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(params.playsinline);\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended);\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get stopped state\n */\n get stopped() {\n return Boolean(this.paused && this.currentTime === 0);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.pause();\n this.restart();\n } else if (utils.is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // True duration\n const realDuration = this.media ? Number(this.media.duration) : 0;\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality) || quality === 0) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isVideo) {\n this.debug.warn('Poster can only be set for video');\n return;\n }\n\n ui.setPoster.call(this, input);\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n this.toggleCaptions(false);\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // Check for support\n if (!this.options.captions.includes(language)) {\n this.debug.warn(`Unsupported language option: ${language}`);\n return;\n }\n\n // Ensure captions are enabled\n this.toggleCaptions(true);\n\n // Enabled only\n if (language === 'enabled') {\n return;\n }\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} [toggle] - Whether to show the controls\n */\n toggleControls(toggle) {\n // Don't toggle if missing UI support or if it's audio\n if (this.supported.ui && !this.isAudio) {\n // Get state before change\n const isHidden = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n\n // Negate the argument if not undefined since adding the class to hides the controls\n const force = typeof toggle === 'undefined' ? undefined : !toggle;\n\n // Apply and get updated state\n const hiding = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n // Close menu\n if (hiding && this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n utils.dispatchEvent.call(this, this.media, eventName);\n }\n return !hiding;\n }\n return false;\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (utils.is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (utils.is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (utils.is.array(selector)) {\n targets = selector.filter(i => utils.is.element(i));\n }\n\n if (utils.is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = utils.cloneDeep(defaults);\n\nexport default Plyr;\n"]} \ No newline at end of file
diff --git a/gulpfile.js b/gulpfile.js
index 262fa2d2..9a6da95f 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -241,11 +241,11 @@ if (Object.keys(aws).includes('cdn') && Object.keys(aws).includes('demo')) {
const branch = {
current: gitbranch.sync(),
master: 'master',
- beta: 'beta',
+ develop: 'develop',
};
const allowed = [
branch.master,
- branch.beta,
+ branch.develop,
];
const maxAge = 31536000; // 1 year
@@ -257,7 +257,7 @@ if (Object.keys(aws).includes('cdn') && Object.keys(aws).includes('demo')) {
},
},
demo: {
- uploadPath: branch.current === branch.beta ? 'beta/' : null,
+ uploadPath: branch.current === branch.develop ? 'beta/' : null,
headers: {
'Cache-Control': 'no-cache, no-store, must-revalidate, max-age=0',
Vary: 'Accept-Encoding',
diff --git a/package.json b/package.json
index 5470a48b..f813860b 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "plyr",
- "version": "3.3.7",
+ "version": "3.3.8",
"description": "A simple, accessible and customizable HTML5, YouTube and Vimeo media player",
"homepage": "https://plyr.io",
"main": "./dist/plyr.js",
@@ -52,15 +52,7 @@
"stylelint-scss": "^3.1.0",
"stylelint-selector-bem-pattern": "^2.0.0"
},
- "keywords": [
- "HTML5 Video",
- "HTML5 Audio",
- "Media Player",
- "DASH",
- "Shaka",
- "WordPress",
- "HLS"
- ],
+ "keywords": ["HTML5 Video", "HTML5 Audio", "Media Player", "DASH", "Shaka", "WordPress", "HLS"],
"repository": {
"type": "git",
"url": "git://github.com/sampotts/plyr.git"
diff --git a/readme.md b/readme.md
index fbd3e36d..89a459b6 100644
--- a/readme.md
+++ b/readme.md
@@ -128,13 +128,13 @@ See [initialising](#initialising) for more information on advanced setups.
You can use our CDN (provided by [Fastly](https://www.fastly.com/)) for the JavaScript. There's 2 versions; one with and one without [polyfills](#polyfills). My recommendation would be to manage polyfills seperately as part of your application but to make life easier you can use the polyfilled build.
```html
-<script src="https://cdn.plyr.io/3.3.7/plyr.js"></script>
+<script src="https://cdn.plyr.io/3.3.8/plyr.js"></script>
```
...or...
```html
-<script src="https://cdn.plyr.io/3.3.7/plyr.polyfilled.js"></script>
+<script src="https://cdn.plyr.io/3.3.8/plyr.polyfilled.js"></script>
```
### CSS
@@ -148,13 +148,13 @@ Include the `plyr.css` stylsheet into your `<head>`
If you want to use our CDN (provided by [Fastly](https://www.fastly.com/)) for the default CSS, you can use the following:
```html
-<link rel="stylesheet" href="https://cdn.plyr.io/3.3.7/plyr.css">
+<link rel="stylesheet" href="https://cdn.plyr.io/3.3.8/plyr.css">
```
### SVG Sprite
The SVG sprite is loaded automatically from our CDN (provided by [Fastly](https://www.fastly.com/)). To change this, see the [options](#options) below. For
-reference, the CDN hosted SVG sprite can be found at `https://cdn.plyr.io/3.3.7/plyr.svg`.
+reference, the CDN hosted SVG sprite can be found at `https://cdn.plyr.io/3.3.8/plyr.svg`.
## Ads
diff --git a/src/js/controls.js b/src/js/controls.js
index d266ed6b..c76bd66b 100644
--- a/src/js/controls.js
+++ b/src/js/controls.js
@@ -1165,7 +1165,6 @@ const controls = {
const tooltip = utils.createElement(
'span',
{
- role: 'tooltip',
class: this.config.classNames.tooltip,
},
'00:00',
diff --git a/src/js/defaults.js b/src/js/defaults.js
index f66a7c2f..5b1a4dd3 100644
--- a/src/js/defaults.js
+++ b/src/js/defaults.js
@@ -56,7 +56,7 @@ const defaults = {
// Sprite (for icons)
loadSprite: true,
iconPrefix: 'plyr',
- iconUrl: 'https://cdn.plyr.io/3.3.7/plyr.svg',
+ iconUrl: 'https://cdn.plyr.io/3.3.8/plyr.svg',
// Blank video (used to prevent errors on source change)
blankVideo: 'https://cdn.plyr.io/static/blank.mp4',
diff --git a/src/js/plyr.js b/src/js/plyr.js
index 4c569fec..4c984fd7 100644
--- a/src/js/plyr.js
+++ b/src/js/plyr.js
@@ -1,6 +1,6 @@
// ==========================================================================
// Plyr
-// plyr.js v3.3.7
+// plyr.js v3.3.8
// https://github.com/sampotts/plyr
// License: The MIT License (MIT)
// ==========================================================================
diff --git a/src/js/plyr.polyfilled.js b/src/js/plyr.polyfilled.js
index 27b13dfd..9570d753 100644
--- a/src/js/plyr.polyfilled.js
+++ b/src/js/plyr.polyfilled.js
@@ -1,6 +1,6 @@
// ==========================================================================
// Plyr Polyfilled Build
-// plyr.js v3.3.7
+// plyr.js v3.3.8
// https://github.com/sampotts/plyr
// License: The MIT License (MIT)
// ==========================================================================