From 229cdcf6a5662feb5fcc68c7966f9bb2cd0f5aad Mon Sep 17 00:00:00 2001 From: Quique Fdez Guerra Date: Mon, 6 Mar 2017 19:34:31 +0100 Subject: [PATCH] merge configs --- package.json | 5 +++-- static/css/webslides.css | 1 - static/js/webslides.js | 33 +++++++++++++++++---------------- static/js/webslides.min.js | 3 ++- webpack.config.babel.js | 3 ++- webpack.config.prod.babel.js | 24 ++++++++++++++++++++++++ 6 files changed, 48 insertions(+), 21 deletions(-) delete mode 100644 static/css/webslides.css create mode 100644 webpack.config.prod.babel.js diff --git a/package.json b/package.json index 14c90fc..3496ae8 100644 --- a/package.json +++ b/package.json @@ -41,13 +41,14 @@ "sass-loader": "^6.0.2", "style-loader": "^0.13.2", "webpack": "^2.2.1", - "webpack-dev-server": "^2.4.1" + "webpack-dev-server": "^2.4.1", + "webpack-merge": "^4.0.0" }, "scripts": { "prebuild": "rimraf static/js/webslide*", "build": "npm-run-all --parallel build:*", "build:main": "webpack", - "build:main.min": "webpack --output-filename [name].min.js -p", + "build:main.min": "webpack --output-filename [name].min.js -p --config ./webpack.config.prod.babel.js", "dev": "webpack-dev-server" }, "babel": { diff --git a/static/css/webslides.css b/static/css/webslides.css deleted file mode 100644 index 4218f71..0000000 --- a/static/css/webslides.css +++ /dev/null @@ -1 +0,0 @@ -a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{border:0;font-size:100%;font:inherit;vertical-align:baseline;margin:0;padding:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}body{line-height:1}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:none}html{-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;box-sizing:border-box}*,:after,:before{box-sizing:inherit}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}embed,iframe,object{max-width:100%}audio:not([controls]){display:none;height:0}[hidden],template{display:none}ul{list-style:square;text-indent:inherit}ol{list-style:decimal}b,strong{font-weight:600}a{background-color:transparent}a:active,a:hover{outline:0}sub,sup{font-size:.75em;line-height:2.2em;height:0;line-height:0;position:relative;vertical-align:baseline}sup{bottom:1ex}sub{top:.5ex}small{font-size:.75em;line-height:1.72}big{font-size:1.25em}hr{border:none;clear:both;display:block;height:1px;width:100%;text-align:center;margin:3.2rem auto}h2+hr,h3+hr{margin-bottom:4.8rem}p+hr{margin-bottom:4rem}cite,dfn,em,i{font-style:italic}abbr,acronym{cursor:help}ins,mark{text-decoration:none;padding:0 4px;text-shadow:none}::-moz-selection{text-shadow:none}::-webkit-selection{text-shadow:none}::selection{text-shadow:none}img{border:0;height:auto;max-width:100%}img:hover{opacity:.9;filter:alpha(opacity=90)}svg:not(:root){overflow:hidden}figure{position:relative;margin:0;line-height:0}optgroup{font-weight:700}table{width:100%;border-collapse:collapse;border-spacing:0;margin-bottom:24px}td,th{padding:0}blockquote:after,blockquote:before,q:after,q:before{content:""}blockquote,q{quotes:"" ""}dt{font-weight:700}dd{margin:0}.clear:after,.clear:before,.wrap:after,.wrap:before,aside:after,aside:before,footer:after,footer:before,group:after,group:before,header:after,header:before,main:after,main:before,section:after,section:before{content:"";display:table}.clear:after,.wrap:after,aside:after,footer:after,group:after,header:after,main:after,section:after{clear:both}body,html{width:100%;height:100%;overflow:hidden}#webslides{height:100vh;overflow-x:hidden;overflow-y:scroll;-webkit-overflow-scrolling:touch;-ms-overflow-style:none}#webslides::-webkit-scrollbar{display:none}body.baseline{background:url(../images/baseline.png) left top .8rem/.8rem}li li{margin-left:1.6rem}a,a:active,a:focus,a:visited,button,input:focus,textarea:focus{text-decoration:none;transition:all .3s ease-out}p a:active{position:relative;top:2px}.hidden,nav a[rel=external] em{clip:rect(1px,1px,1px,1px);position:absolute!important;height:1px;width:1px;overflow:hidden}.shadow{position:relative}.shadow:after,.shadow:before{z-index:-1;position:absolute;content:"";bottom:1.6rem;left:2.4rem;width:50%;top:80%;max-width:300px;transform:rotate(-3deg)}.shadow:after{transform:rotate(3deg);right:2.4rem;left:auto}.wrap,footer nav,header nav{position:relative;width:1200px;max-width:100%;margin-right:auto;margin-left:auto;z-index:2}.frame,.shadow{padding:2.4rem}.radius{border-radius:.4rem}.alignright{float:right}.alignleft{float:left}.aligncenter{margin-right:auto;margin-left:auto;text-align:center}img.aligncenter{display:block}img.aligncenter,img.alignleft,img.alignright{margin-top:2.4rem;margin-bottom:2.4rem}@media (min-width:768px){img.aligncenter{margin-top:.8rem;margin-bottom:.8rem}img.alignright,svg.alignright{margin:.8rem 0 .8rem 4.8rem}img.alignleft,svg.alignright{margin:.8rem 4.8rem .8rem 0}}@media (min-width:1024px){.size-80{width:80%}.size-70{width:70%}.size-60{width:60%}.size-50{width:50%}.size-40{width:40%}.size-30{width:30%}.size-20{width:20%}}code,pre{font-family:Cousine,monospace}pre{font-size:1.6rem;line-height:2.4rem;white-space:pre-wrap;word-wrap:break-word;text-align:left;padding:2.4rem;overflow:auto;width:100%}pre+p{margin-top:3.2rem}code{padding:.4rem}pre code{padding:0}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.fadeIn{animation:fadeIn 1s}@keyframes fadeInUp{0%{opacity:0;transform:translate3d(0,100%,0)}to{opacity:1;transform:none}}.fadeInUp{animation:fadeInUp 1s}@keyframes zoomIn{0%{opacity:0;transform:scale3d(.3,.3,.3)}50%{opacity:1}}.zoomIn{animation:zoomIn 1s}@keyframes slideInLeft{0%{transform:translate3d(-100%,0,0);visibility:visible}to{transform:translateZ(0)}}.slideInLeft{animation:slideInLeft 1s}@keyframes slideInRight{0%{transform:translate3d(100%,0,0);visibility:visible}to{transform:translateZ(0)}}.slideInRight{animation:slideInRight 1s}@keyframes anim{0%{transform:translateY(0)}to{transform:translateY(-1200px)}}.slow{animation-duration:4s}.slow+.slow{animation-duration:5s}#navigation,footer,header{transition:all .4s ease-in-out}.embed{position:relative;height:0;overflow:hidden;padding-bottom:56.6%}.embed embed,.embed iframe,.embed object{position:absolute;top:0;left:0;width:100%;height:100%;margin:0}h1+.browser,h2+.browser,p+.browser{margin-top:4.8rem}.browser{overflow:hidden;border-radius:.3rem;max-width:1024px;margin:0 auto 3.2rem}.browser figcaption{padding:2.4rem}li .browser{margin-bottom:0}.browser:before{position:absolute;top:0;left:0;text-align:left;font-size:.8rem;padding:1.6rem;width:100%;line-height:0;content:"\25CF \25CF \25CF"}@media (min-width:768px){.browser:before{font-size:1.6rem}}.browser img{width:100%;margin-top:3.2rem}.grid{margin-right:auto;margin-left:auto;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;clear:both}.grid:before{content:"";display:table}.grid:after{clear:both}.grid>.column{position:relative;width:100%;display:-ms-flexbox;display:flex;-ms-flex:auto;flex:auto;-ms-flex-direction:column;flex-direction:column;transition:.3s;padding:2.4rem}.grid.vertical-align .column{-ms-flex-pack:center;justify-content:center}@media (min-width:768px){.grid>.column{width:25%}.grid.sm .column:first-child{width:30%}.grid.ms .column:first-child,.grid.sm .column:nth-child(2){width:70%}.grid.ms .column:nth-child(2){width:30%}.grid.sms .column:nth-child(2){width:50%}}body,html{line-height:1;text-rendering:optimizeLegibility;font-weight:300}body,html,input,select,textarea{font-family:Roboto,San Francisco,helvetica,arial,sans-serif;font-size:62.5%}body,textarea{font-size:1.8rem}big,label,li,p,table,textarea,time{line-height:3.2rem;margin-bottom:3.2rem}li,p:last-child{margin-bottom:0}ol>li,ul>li{margin-left:3.2rem}li li{font-size:100%}ul.description{padding:0}.description+p{margin-top:3.2rem}.description li{position:relative;padding-top:.8rem;padding-bottom:.8rem;transition:.3s}.description li:hover{padding-left:.4rem}.column ul li,ul.description li{list-style:none;margin-left:0}.column ol>li{margin-left:1.6rem}h1 svg,h2 svg,h3 svg,h4 svg{margin-top:-.8rem}.text-intro svg,.try svg,.wall p svg{margin-top:-.4rem}.flexblock li h2 svg,.flexblock li h3 svg{margin-top:0}h1{font-size:4rem;line-height:5.6rem}h1 span{font-style:italic}h2{font-size:3.2rem;line-height:4.8rem}h3{font-size:2.4rem}h3,h4{line-height:4rem}h4{font-size:2.2rem}h5{font-size:2rem}h5,h6{font-weight:600;line-height:3.2rem}h6{font-size:1.8rem}h2.alignleft+p.alignright{margin-top:1.2rem;margin-bottom:0}h3.alignleft+p.alignright{margin-top:.4rem;margin-bottom:0}@media (min-width:768px){h1{font-size:5.6rem;line-height:7.2rem}h2{font-size:4.8rem;line-height:6.4rem}h3{font-size:4rem;line-height:5.6rem}h4{font-size:3.2rem;line-height:4.8rem}}h1+h1,h1+h2,h1+h3,h1+h4,h1+h5,h1+h6,h2+h1,h2+h2,h2+h3,h2+h4,h2+h5,h2+h6,h3+h1,h3+h2,h3+h3,h3+h4,h3+h5,h3+h6,h4+h1,h4+h2,h4+h3,h4+h4,h4+h5,h4+h6,h5+h1,h5+h2,h5+h3,h5+h4,h5+h5,h5+h6,h6+h1,h6+h2,h6+h3,h6+h4,h6+h5,h6+h6{margin-top:.8rem}h1+img,h2+img,h3+img{margin-top:4.8rem;margin-bottom:4.8rem}[class*=content-]>[class*=content-] h2,[class*=content-]>[class*=content-] h3,[class*=content-]>[class*=content-] h4{font-size:2.4rem;line-height:4rem}h1[class*=bg-],h2[class*=bg-],h3[class*=bg-],h4[class*=bg-],h5[class*=bg-],h6[class*=bg-],li[class*=bg-],ol[class*=bg-],p[class*=bg-],ul[class*=bg-]{padding:2.4rem}h1 [class*=bg-],h2 [class*=bg-],h3 [class*=bg-]{padding:.4rem .8rem}.text-intro,[class*=content-] p{font-size:2.4rem;line-height:4rem}.text-serif,h1 span{font-family:Maitree,times,serif}.text-landing{letter-spacing:.4rem;text-transform:uppercase}@media (min-width:768px){.text-landing{letter-spacing:1.6rem}}p.text-subtitle{font-size:1.6rem}p.text-subtitle svg{vertical-align:text-top}.text-subtitle{text-transform:uppercase;letter-spacing:.2rem;margin-bottom:0}.text-subtitle+p{margin-top:3.2rem}.text-uppercase{text-transform:uppercase}.text-lowercase{text-transform:lowercase}.text-data{font-size:6.4rem;line-height:8rem;margin-bottom:.8rem}@media (min-width:768px){.text-data{font-size:15.2rem;line-height:16.8rem}}.text-label{font-weight:600;display:inline-block;width:12.8rem;text-transform:uppercase}@media (min-width:768px){.text-cols{-moz-column-count:2;column-count:2;-moz-column-gap:4.8rem;column-gap:4.8rem;text-align:left}.text-landing+.text-cols{margin-top:3.2rem}}.text-cols p:first-child:first-letter{font-size:11rem;font-weight:600;text-transform:uppercase;float:left;padding:0;margin:-.4rem 1.6rem 0 0;line-height:1}.text-context{position:relative}.text-context.text-uppercase{letter-spacing:.1rem}.text-context:before{content:"";display:block;width:12rem;height:.2rem;margin-bottom:.6rem}.column .text-context:before{width:100%}.text-symbols{font-weight:600;letter-spacing:.8rem;text-align:center}.text-separator{margin-top:2.4rem}.text-separator:before{position:absolute;width:16%;height:.4rem;content:"";margin-top:-1.6rem;left:0}@media (min-width:568px){.text-separator{width:80%;margin-top:0;margin-left:20%}.text-separator:before{margin-top:1.2rem}}[class*=text-pull]{position:relative;font-size:2.4rem;line-height:4rem;font-weight:400;margin-right:2.4rem;margin-left:2.4rem}[class*=text-pull-]{padding-top:1.4rem;margin-top:.8rem}@media (min-width:1024px){[class*=text-pull]{margin-right:-4rem;margin-left:-4rem}}@media (min-width:568px){[class*=text-pull-]{width:32rem}.text-pull-right{float:right;margin-right:-2.4rem;margin-left:2.4rem}.text-pull-left{float:left;margin-left:-2.4rem;margin-right:2.4rem}}.text-info{font-size:1.6rem;line-height:2.4rem}.bg-apple,.text-apple{font-family:San Francisco,helvetica,arial,sans-serif}@font-face{font-family:San Francisco;font-weight:100;src:url("https://applesocial.s3.amazonaws.com/assets/styles/fonts/sanfrancisco/sanfranciscodisplay-ultralight-webfont.woff2")}@font-face{font-family:San Francisco;font-weight:200;src:url("https://applesocial.s3.amazonaws.com/assets/styles/fonts/sanfrancisco/sanfranciscodisplay-thin-webfont.woff2")}@font-face{font-family:San Francisco;font-weight:400;src:url("https://applesocial.s3.amazonaws.com/assets/styles/fonts/sanfrancisco/sanfranciscodisplay-regular-webfont.woff2")}@font-face{font-family:San Francisco;font-weight:700;src:url("https://applesocial.s3.amazonaws.com/assets/styles/fonts/sanfrancisco/sanfranciscodisplay-bold-webfont.woff2")}#navigation,footer,header{width:100%;padding:2.4rem}footer p,header p{line-height:4.8rem;margin-bottom:0}footer img,header[role=banner] img{height:4rem;vertical-align:middle}header,section footer{position:absolute;top:0;left:0;z-index:3}section footer{top:auto;bottom:0}header[role=banner]{opacity:0}header[role=banner]:hover{opacity:1}@media (max-width:767px){footer .alignleft,footer .alignright{float:none;display:block}}.logo{text-transform:lowercase}.logo a{background:url(../images/logos/logo.svg) no-repeat 0 0;background-size:4.8rem;width:4.8rem;height:4.8rem;vertical-align:middle;float:left;text-indent:-4000px}nav ul{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}nav ul li{position:relative;float:left;list-style:none}nav[role=navigation] ul li,nav ul li:first-child{margin-left:0}nav[role=navigation] li a{position:relative;padding:0 1.6rem;line-height:4.8rem;text-decoration:none;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;max-width:100%}nav[role=navigation] li a svg{margin:1.5rem .4rem 1.5rem 0}header nav ul{margin:0;-ms-flex-pack:end;justify-content:flex-end}.aligncenter nav ul,nav.aligncenter ul{-ms-flex-pack:center;justify-content:center}nav.navbar ul li{-ms-flex:1 1 auto;flex:1 1 auto}@media (max-width:568px){nav.navbar ul{-ms-flex-flow:column wrap;flex-flow:column wrap;padding:0}nav.navbar li a{-ms-flex-pack:start;justify-content:flex-start}}section *{animation:fadeIn .3s ease-in-out}[class*=background-].dark,[class*=background-].light,section .background,section .background-video{animation-duration:0s}.slide,section{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;padding:2.4rem;word-wrap:break-word;page-break-after:always;min-height:100vh}@media (min-width:1024px){.slide,section{padding-top:12rem;padding-bottom:12rem}}.fullscreen{padding:0}.slide-top{-ms-flex-pack:start;justify-content:flex-start}.slide-bottom{-ms-flex-pack:end;justify-content:flex-end}[class*=content-]{position:relative;text-align:left}.wrap.frame,.wrap[class*=bg-],[class*=align][class*=bg-],[class*=content-].frame,[class*=content-][class*=bg-]{padding:4.8rem}[class*=content-]>[class*=content-] p{font-size:1.8rem;line-height:3.2rem}.content-center{margin:0 auto;text-align:center}@media (min-width:768px){[class*=content-]{width:50%}.content-left{float:left}.content-right{float:right}[class*=content-]+[class*=content-]{padding-left:2.4rem;margin-bottom:4.8rem}[class*=content-]+[class*=size-]{margin-top:6.4rem;clear:both}[class*=content-]:after,[class*=content-]:before{content:"";display:table}[class*=content-]:after{clear:both}}#navigation{position:fixed;width:24.4rem;margin-right:auto;margin-left:auto;right:0;bottom:0;left:0;z-index:3;animation:fadeIn 16s;opacity:0}#navigation:hover{opacity:1}#counter{position:relative;display:block;width:10rem;margin-right:auto;margin-left:auto;text-align:center;line-height:4.8rem}#navigation p{margin-bottom:0}#navigation a{position:absolute;width:4rem;height:4rem;border-radius:.4rem;text-align:center;font-size:2.4rem;padding:.8rem;cursor:pointer}a#next{right:3.2rem}a#previous{left:3.2rem}@media (max-width:1024px){#navigation{background:url("../images/swipe.svg") no-repeat top;background-size:4.8rem;animation:fadeIn 6s}#counter,#navigation a{display:none}}.background,[class*=background-]{position:absolute;top:0;right:0;bottom:0;left:0;background-repeat:no-repeat}.background{background-position:50%;background-size:cover}.background-top{background-position:top;background-size:cover}.background-bottom{background-position:bottom;background-size:cover}.background-video{width:100%;height:100%;object-fit:fill}.background-center{background-position:50%}.background-center-top{background-position:top}.background-right-top{background-position:100% 0}.background-left-top{background-position:0 0}.background-center-bottom,.background-left,.background-left-bottom,.background-right,.background-right-bottom{background-position:bottom}@media (min-width:1024px){.background-left-bottom{background-position:0 100%}.background-right-bottom{background-position:100% 100%}.background-right{background-position:100%}.background-left{background-position:0}}[class*=bg-] .background.light,[class*=bg-] [class*=background-].light{filter:alpha(opacity=8000);opacity:.8;filter:alpha(opacity=8)}[class*=bg-] .background.dark,[class*=bg-] [class*=background-].dark{filter:alpha(opacity=2000);opacity:.2;filter:alpha(opacity=2)}[class*=bg-] .background-video.dark{filter:alpha(opacity=5000);opacity:.5;filter:alpha(opacity=5)}@media (max-width:1023px){[class*=background-]{opacity:.2;animation:fadeIn ease-in .2}.background-video{opacity:.8}}.background.anim{height:200%;background-size:100%;background-repeat:repeat;background-position:top;animation:anim 80s linear infinite}.flexblock{margin-right:auto;margin-left:auto;padding:0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;clear:both}.flexblock:before{content:"";display:table}.flexblock:after{clear:both}.flexblock.blink li>a,.flexblock li{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;margin:0;padding:2.4rem}.flexblock li{-ms-flex:auto;flex:auto;text-align:left;width:100%;transition:.3s}.flexblock li:hover{transform:translateY(-.2rem)}.flexblock.aligncenter li{text-align:center}.flexblock.vertical-align li{-ms-flex-pack:center;justify-content:center}.flexblock.blink li{padding:0}@media (min-width:600px){.flexblock li{width:50%}}@media (min-width:1024px){.flexblock li{width:25%}}div+ol,div+ul,h1+.flexblock,h2+.flexblock,h3+.flexblock{margin-top:3.2rem}.flexblock li h2,.flexblock li h3,footer .column h2,footer .column h3{margin-bottom:0;font-size:1.8rem;font-weight:600;line-height:3.2rem}.flexblock.features>li{width:100%;border-radius:.4rem;margin-bottom:4.8rem}@media (min-width:768px){.flexblock.features{margin-right:-2%;margin-left:-2%}.flexblock.features>li{margin-right:2%;margin-left:2%;width:29%}.size-50 .flexblock.features>li{width:46%}.column .flexblock.features>li{width:100%}footer .flexblock.features>li{margin-bottom:0}}.features li h2{text-transform:uppercase}.features li span{font-weight:300}.features li p{margin:0}.features li p em{display:block}.features li span,.features li svg{font-size:6.4rem;line-height:1;display:block;margin:0}.features li img{width:6.4rem}.features li span sup{font-size:3rem}@media (min-width:1200px){.features li img,.features li span,.features li svg{float:left;margin-right:.8rem}}.flexblock.clients.blink li>a,.flexblock.clients li{padding:0}.flexblock.clients li figcaption{padding:0 2.4rem 2.4rem}.flexblock.clients.border li figcaption{padding-top:2.4rem}.clients.blink li>a,.clients li{-ms-flex-pack:inherit;justify-content:inherit}.clients li img,.clients li svg{display:block;padding:2.4rem}.clients.border li img,.clients.border li svg{margin-right:auto;margin-left:auto;display:block}.clients li:hover{z-index:1}.steps li{width:100%}.steps li img,.steps li span{margin:0 auto .8rem;display:block}.steps li span{font-size:6.4rem}@media (min-width:768px){.steps li{width:50%}}@media (min-width:1024px){.steps li{width:25%}.process{position:absolute;top:60px;left:0;width:0;height:0;border-left-style:solid;border-left-width:15px}}.metrics li{text-align:center;width:100%}.metrics li strong{display:block}.metrics li span,.metrics li svg{font-size:6.4rem;line-height:7.2rem;display:block;margin:0 auto}@media (min-width:568px){.metrics li{width:50%}}@media (min-width:1024px){.metrics li{width:25%}}.card-50 .metrics li{width:50%}.specs li{width:100%;text-align:left}.specs li:after{content:"";height:1px;display:block;position:relative;bottom:-2.4rem}.specs li:hover{transform:translateX(.2rem)}.specs li span,.specs li svg{font-size:6.4rem;line-height:1;display:block;margin:0}.specs li img{width:6.4rem}.specs li span{font-weight:300}.specs li span sup{font-size:3rem}@media (min-width:1024px){.specs li img,.specs li span,.specs li svg{float:left;margin-right:2.4rem}}.flexblock.reasons li{text-align:left;width:100%;counter-increment:list}.reasons li:hover{transform:translateY(-.2rem)}.reasons li:before{content:counter(list) ".";font-size:6.4rem;line-height:1}.reasons li:after{position:relative;bottom:-2.4rem;content:"";height:1px;display:block}@media (min-width:768px){.reasons li{padding-left:8.8rem}.reasons li:before{position:absolute;left:2.4rem}}.flexblock.gallery li{margin-bottom:4.8rem}.flexblock.gallery.blink li>a,.flexblock.gallery li{padding:0}.gallery h2{text-transform:uppercase}.gallery h2+p,.gallery h3+p{margin-top:.8rem}.gallery p{font-size:1.6rem;line-height:2.4rem;margin-bottom:0}.flexblock.gallery li figcaption{position:relative;padding:1.6rem}.gallery li figcaption:before{content:"";position:absolute;width:0;height:0;margin-left:-.5em;top:.4rem;left:20%;transform-origin:0 0;transform:rotate(135deg);transition:.1s}.gallery li:hover figcaption:before{top:.3rem}.aligncenter .gallery li figcaption:before{margin-left:0;left:55%}.gallery li footer{position:relative;padding:1.2rem 0 0;margin-top:.8rem}@media (min-width:600px){.flexblock.gallery{margin-right:-2%;margin-left:-2%}.flexblock.gallery li{margin-right:2%;margin-left:2%;width:46%}}@media (min-width:1024px){.flexblock.gallery li{width:21%}.grid.ms .flexblock.gallery li,.grid.sm .flexblock.gallery li{width:29%}.grid.sms .flexblock.gallery li{width:46%}}.gallery li img{margin-right:auto;margin-left:auto;display:block}.overlay{position:absolute;top:0;right:0;bottom:0;left:0;opacity:1;z-index:2;width:100%;height:100%;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;transition:all .3s linear}li .overlay{-ms-flex-align:center;align-items:center}li .overlay h2{text-transform:uppercase;margin:0;padding:0 2.4rem;letter-spacing:.2rem;width:100%;text-align:center}.overlay p,.overlay time{margin-bottom:0}li:hover .overlay{cursor:pointer}.flexblock.plans>li{text-align:center;border-radius:3px;z-index:1;margin-bottom:4.8rem}.plans.blink li>a,.plans li{padding:0}.plans.blink li>a div,.plans li div{padding-bottom:3.2rem}.plans li h2,.plans li p{padding:.8rem 3.2rem}.plans li h2{float:left;width:100%;text-transform:uppercase;letter-spacing:.1rem;font-weight:400}.plans .price{font-size:4.8rem;line-height:6.2rem;padding:2.4rem;font-weight:400;display:block;clear:both}.price sup{font-size:1.8rem;margin-right:.4rem}.plans li ul{margin-bottom:2.4rem}.flexblock.plans li ul li{width:100%;padding:.8rem 3.2rem;text-align:left;display:block}@media (min-width:1024px){.flexblock.plans{margin-right:-2%;margin-left:-2%}.flexblock.plans>li{margin-right:2%;margin-left:2%;width:29%}.plans>li:hover,.plans>li:nth-child(2){position:relative;z-index:2;transform:scale(1.08)}.plans:hover li:nth-child(2):not(:hover){position:relative;z-index:1;transform:scale(1)}}.flexblock.activity{-ms-flex-direction:column;flex-direction:column}.activity li{position:relative;-ms-flex:1;flex:1;width:auto}.activity p{vertical-align:top;margin-bottom:0}.activity img{display:block}.activity .title,.activity .year{display:inline;font-weight:600}.activity .summary{width:100%}.activity .title{margin-left:1rem}@media (min-width:768px){.activity p{float:left}.activity .year{width:15%}.activity .title{width:27%;margin-right:4%;margin-left:4%}.activity .summary{width:50%}}.flexblock.blink li li,.flexblock li li{padding:0;width:100%}[class*=content-] .flexblock li p{font-size:1.8rem;line-height:3.2rem}.content-left .flexblock.features li,.content-right .flexblock.features li{width:46%}.cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.cta,.cta .benefit,.number{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.cta .benefit,.number{padding:.8rem;max-width:100%;-ms-flex-direction:column;flex-direction:column}.cta .benefit,.number{text-align:center}.cta .benefit{max-width:100%}.number span{font-size:8rem;line-height:8rem;display:block}.number span sup{font-size:4rem}.cta p{margin-bottom:0}@media (min-width:768px){.cta .benefit,.number{padding:4.8rem;max-width:50%}.cta .benefit{text-align:left}.number span{font-size:16rem;line-height:16rem}.number span sup{font-size:6rem;vertical-align:middle}}.cta-cover{display:table;width:100%}.cta-cover h1 strong{font-weight:400}@media (min-width:1024px){.cta-cover h1{max-width:80%;float:left}.cta-cover h1 strong{display:block}.cta-cover .button{margin-top:1.2rem}.cta-cover .try{text-align:center}}@media (max-width:1023px){.cta-cover .alignright{float:none}}h1+.work,h2+.work,h3+.work,p+.work{margin-top:4.8rem}.work{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;clear:both;text-align:left}.work li{position:relative;-ms-flex:1;flex:1;list-style:none;margin:0}.work-label{float:left;width:100%;padding:0 0 2.4rem;font-weight:600}.work p{margin-bottom:0}.work li a{display:block;float:left;width:100%;height:100%;padding:2.4rem 0}.work-title{display:block;width:75%;padding-right:1.2rem}.work li:first-child a:hover p:first-child,.work li a p{transition:.3s}.work li p{padding-left:1.2rem}.work li.work-label p{padding-left:0}.work li a:hover p:first-child{padding-left:1.6rem}.work li p:last-child{position:absolute;top:2.4rem;right:1.2rem}.work li.work-label p:last-child{top:0;right:0}@media (min-width:768px){.work-label p,.work li p{width:25%;margin-right:2%;float:left}.work li.work-label p:last-child,.work li p:last-child{position:relative;float:right;top:auto;right:auto;margin-right:0;text-align:right;padding-right:1.2rem}.work li p.work-date{width:120px}}@media (max-width:768px){.work-client,.work-label .work-services{clip:rect(1px,1px,1px,1px);position:absolute!important;height:1px;width:1px;overflow:hidden}}.chapter,.toc,.toc ol>li:before{position:relative;z-index:2}.toc ol{position:relative;counter-reset:item}.toc ol>li:before{content:counters(item,".") ". ";display:table-cell;width:2.4rem;padding-right:.8rem}.toc ol li li:before{content:counters(item,".") " "}.toc li{width:100%;display:table;counter-increment:item;font-weight:400;margin-bottom:.8rem;margin-left:0;transition:.3s}.toc li li{font-weight:300;margin-left:0;margin-bottom:0}.chapter{display:inline-block;font-size:1.8rem;line-height:3.2rem;padding-right:.8rem}.toc-page{float:right}.toc li .toc-page:before{position:absolute;right:4rem;left:0;margin-top:1.8rem;content:"";display:block}.toc li>a{display:inline-block;width:100%}.toc li a:hover span{font-weight:600}.toc li a:hover .toc-page:before{border-bottom-width:2px}[class*=card-],[class*=card-]>a{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;clear:both}.fullscreen [class*=card-],.fullscreen [class*=card-]>a{min-height:100vh}[class*=card-] figure img{margin:0 auto;display:block}@media (min-width:768px){.fullscreen [class*=card-] figure,[class*=card-][class*=bg-] figure{vertical-align:middle;text-align:center;min-width:380px;max-height:100%}.fullscreen [class*=card-] figure img,[class*=card-][class*=bg-] figure img{position:absolute;z-index:1;top:0;left:0;width:100%;height:100%;object-fit:cover}}.flex-content,[class*=card-] blockquote{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;padding:2.4rem}.flex-content p{position:relative}@media (min-width:768px){.card-50 .flex-content,.card-50 blockquote,.card-50 figure{width:50%}.card-30 figure,.card-70 .flex-content,.card-70 blockquote{width:30%}.card-40 figure,.card-60 .flex-content,.card-60 blockquote{width:40%}.card-40 .flex-content,.card-40 blockquote,.card-60 figure{width:60%}.card-30 .flex-content,.card-30 blockquote,.card-70 figure{width:70%}[class*=card-]:nth-child(odd) figure{-ms-flex-order:0;order:0}[class*=card-]:nth-child(2n) figure{-ms-flex-order:1;order:1}.flex-content,[class*=card-] blockquote{padding:4.8rem}.fullscreen [class*=card-] .flex-content,.fullscreen [class*=card-] blockquote{padding:6.4rem}}@media (max-width:767px){[class*=card-],[class*=card-]>a{-ms-flex-flow:column;flex-flow:column}.card figure,.card header{width:100%}}[class*=card-] figure figcaption{position:absolute;bottom:0;left:0;padding:.8rem 2.4rem;font-size:1.4rem;line-height:2.4rem;z-index:2}[class*=card-] figure figcaption.cover{top:0;right:0;width:100%;height:100%;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}[class*=card-] figure figcaption svg{font-size:1rem}blockquote{position:relative;display:inline-block}blockquote p{font-size:2.4rem;line-height:4rem}.bg-apple blockquote p{font-family:San Francisco,Roboto,helvetica,arial,sans-serif;font-weight:300}cite{text-align:center}cite,cite span{display:block}cite:before{content:"\2014 \2009";margin-right:6px}blockquote.wall:before{position:absolute;top:-6.4rem;left:-.8rem;content:"\201C";font-family:arial,sans-serif;width:6.4rem;height:6.4rem;font-size:16rem;line-height:1;text-align:center}@media (min-width:768px){blockquote.wall{padding-left:8rem}blockquote.wall p{font-size:3.2rem;line-height:4.8rem}blockquote.wall:before{top:-3.2rem;left:.8rem}}cite img,img[class*=avatar-]{display:inline-block;vertical-align:middle;margin-right:6px}img[class*=avatar-]{border-radius:50%}img.avatar-80{width:80px;height:80px}img.avatar-72{width:72px;height:72px}img.avatar-64{width:64px;height:64px}img.avatar-56{width:56px;height:56px}img.avatar-48{width:48px;height:48px}img.avatar-40{width:40px;height:40px}table{margin-top:3.2rem;margin-bottom:3.2rem}table td,th,thead{border-spacing:0;padding:.7rem 2.4rem}th,thead th{text-align:left;cursor:default;white-space:nowrap;font-weight:600;text-transform:uppercase}td.goals,thead{font-weight:600;text-shadow:none}tr>td{font-weight:400}form{text-align:left}form+p,input+p,textarea+p{margin-top:.8rem}input[type=email],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=url]{appearance:none;-moz-appearance:none;-webkit-appearance:none;border-radius:0;-moz-border-radius:0;-webkit-border-radius:0}button,input,select{position:relative;display:inline-block;margin:0;width:100%;height:4.8rem;padding:.7rem;font-weight:400;font-size:1.6rem}input[type=checkbox],input[type=radio]{width:auto;height:auto;padding:4px}button[type=submit],textarea{width:100%}textarea{padding:.7rem}button{width:auto}.button,button{text-align:center;cursor:pointer}.button{display:inline-block;line-height:4.8rem;font-size:1.8rem;font-weight:400;min-width:16rem;padding:0 1.6rem}.button.radius,button.radius,input.radius{border-radius:2.4rem}button,input[type=submit]{text-transform:uppercase;font-weight:400;letter-spacing:.1rem}.button svg{font-size:2.4rem}.plans .button{width:50%;margin-right:auto;margin-left:auto}.try{display:block;font-size:1.6rem;margin-top:1.6rem}fieldset{padding:2.4rem}legend{padding:1.6rem 2.4rem;border:none;width:100%;text-align:center;text-transform:uppercase;letter-spacing:.1rem;font-weight:400}input:focus,select:focus,textarea:focus{border-width:1px}[class*=badge-]{width:135px;height:40px;line-height:4rem;background-size:cover;background-repeat:no-repeat;display:inline-block;text-indent:-4000px;border-radius:.6rem}@media (min-width:1024px){[class*=badge-]{width:162px;height:48px;line-height:4.8rem}}.badge-ios{background-image:url("../images/bt-appstore.png")}.badge-android{background-image:url("../images/bt-playstore.png")}a.button:hover,button[type=submit]:hover,input[type=submit]:hover{transform:scale(1.01)}[class*=badge-]:hover{opacity:.7}.user input{margin-bottom:0}.user input[type=email],.user input[type=search],.user input[type=text]{width:100%}.user button,.user input[type=submit]{left:0;width:100%}@media (min-width:500px){.user input[type=email],.user input[type=search],.user input[type=text]{width:70%;float:left}.user button,.user input[type=submit]{width:30%;cursor:pointer}[class*=badge]+[class*=badge],[class*=button]+[class*=button]{margin-left:1.8rem}}@media (max-width:499px){[class*=badge]+[class*=badge],[class*=button]+[class*=button]{margin-top:.8rem}}:disabled,button:disabled:hover{cursor:not-allowed}.cta:after,.cta:before,.flexblock:after,.flexblock:before,.grid:after,.grid:before{width:0}@media print{.slide,section{position:relative;display:block!important}#counter,#navigation{display:none}}body{color:#333;background-color:#f7f9fb}:focus{box-shadow:0 0 2px #96bbee}svg{fill:currentColor}[class*=bg-] a,[class*=bg-gradient-] a{color:#bce}.bg-brown a{color:#c23}.bg-gradient-white a,.bg-light a,.bg-white a,a{color:#44d}a:hover{color:#3af}.flexblock li>a,[class*=bg-] li>a,[class*=bg-gradient-] li>a,article header a{color:inherit}hr{background:rgba(0,20,80,.2);background:radial-gradient(ellipse at center,rgba(0,20,80,.2) 0,hsla(0,0%,100%,0) 75%)}hr:after{background-color:hsla(0,0%,100%,.8);color:#333}abbr,acronym{border-bottom:1px dotted #333}ins,mark{background-color:rgba(221,238,255,.8);color:inherit}::-moz-selection{background-color:rgba(221,238,255,.8)}::-webkit-selection{background-color:rgba(221,238,255,.8)}::selection{background-color:rgba(221,238,255,.8)}pre{border:1px solid rgba(0,20,80,.1);box-shadow:0 8px 16px rgba(0,20,80,.04),0 4px 16px rgba(0,0,0,.08);background:#fff}pre:hover{box-shadow:0 8px 16px rgba(0,40,160,.08),0 8px 24px rgba(0,0,0,.08)}[class*=bg-] pre,code{background-color:hsla(0,0%,100%,.09)}.bg-white code{background:rgba(0,20,80,.03)}.bg-primary{background-color:#44d}.bg-secondary{background-color:#67d}.bg-light{background-color:#edf2f7}.bg-black{background-color:#111}.bg-black-blue{background-color:#123}.bg-blue{background-color:#346}.bg-brown{background-color:#f8f8f9}.bg-gray{background-color:#d5d9e2}.bg-green{background-color:#077}.bg-purple{background-color:#62b}.bg-red{background-color:#c23}.bg-white{background-color:#fff}[class*=bg-] .bg-white{text-shadow:none;color:#333}.bg-apple{background:linear-gradient(180deg,#000 0,#1a2028 50%,#293845)}.bg-facebook{background:#3b5998}.bg-apple,.bg-blue,.bg-facebook,.bg-green,.bg-primary,.bg-purple,.bg-red,.bg-secondary,.bg-trans-dark,.bg-trans-gradient,[class*=bg-black],[class*=bg-gradient-]{color:#fff;text-shadow:0 1px 0 #013}.bg-light p{color:#456}.bg-brown p{color:#666}.bg-trans-dark{background:rgba(0,0,0,.8)}.bg-trans-light{background:rgba(0,0,0,.2)}.bg-trans-gradient{background:linear-gradient(0deg,rgba(0,0,0,.8) 0,transparent)}.bg-gradient-h{background:linear-gradient(134deg,#32b,#62b)}.bg-gradient-v{background:linear-gradient(0deg,#62b 0,#32b)}.bg-gradient-r{background:radial-gradient(ellipse at center,#62b 0,#32b 100%)}.bg-gradient-white{background:linear-gradient(180deg,#f2f4f6,#fff);color:#333;text-shadow:none}.bg-gradient-gray{background:linear-gradient(90deg,#f7f9fb,#dee2e6);color:#333;text-shadow:none}.frame{border:.8rem solid #fff}.pre,.shadow{position:relative}.shadow:after,.shadow:before{box-shadow:0 16px 24px rgba(0,20,80,.3)}.text-separator:before{background-color:rgba(170,0,0,.8)}[class*=text-pull-]{border-top:4px solid rgba(0,0,0,.5)}[class*=bg-] .text-context:before{background-color:#fff}.bg-white .text-context:before,.text-context:before{background-color:rgba(0,20,80,.2)}.text-shadow{text-shadow:0 0 40px rgba(0,0,0,.5)}[class*=card-] time,h1 span{color:#abd}.code-comment{color:rgba(70,170,130,.9);text-shadow:none}header[role=banner]{background-color:#fff}.logo a{color:inherit}nav[role=navigation] li a{background-color:rgba(50,50,50,.9)}nav[role=navigation] li a:hover{background-color:rgba(50,50,50,.7)}nav[role=navigation] li a,nav[role=navigation] li a:hover{color:#fff}nav[role=navigation] li.active a{background-color:#555;color:#fff}nav li.twitter a:hover{background-color:#1da1f3}nav li.facebook a:hover{background-color:#3b5998}nav li.linkedin a:hover{background-color:#1683bb}nav li.dribbble a:hover{background-color:#ea4c89}nav li.github a:hover{background-color:#60b044}nav li.email a:hover{background:#dd4b39}.flexblock li.active a,.metrics li:hover,.reasons li:hover,.specs li:hover{background-color:rgba(0,20,80,.03)}.clients li,.features li{background-color:hsla(0,0%,100%,.9)}[class*=bg-] .clients li,[class*=bg-] .features li{background-color:hsla(0,0%,100%,.1)}.clients li:hover,.features li:hover{box-shadow:0 8px 16px rgba(0,20,80,.02),0 4px 16px rgba(0,0,0,.08)}.border{border-right:1px solid rgba(0,20,80,.1);border-bottom:1px solid rgba(0,20,80,.1)}.border li{border-top:1px solid rgba(0,20,80,.1);border-left:1px solid rgba(0,20,80,.1)}.flexblock.border li li{border:none}.steps li:first-child{background-color:#e8eef7}.steps li:nth-child(2){background-color:#dde5f3}.steps li:nth-child(3){background-color:#cdd8ec}.steps li:nth-child(4){background-color:#bbcdec}.process{border-top:15px solid transparent;border-bottom:15px solid transparent}.steps.blink li:hover>a,.steps li:hover{background-color:#b8cef7}@media (min-width:1024px){.process.step-2{border-left-color:#e8eef7}.process.step-3{border-left-color:#dde5f3}.process.step-4{border-left-color:#cdd8ec}.steps li:hover+li [class*=step-]{border-left-color:#b8cef7}}.specs li:after{background:linear-gradient(90deg,rgba(0,20,80,0) 0,rgba(0,20,80,.2) 50%,rgba(0,20,80,0))}.specs li:last-child:after{background:none}.reasons li:after{background:linear-gradient(90deg,rgba(0,20,80,0) 0,rgba(0,20,80,.2) 50%,rgba(0,20,80,0))}.reasons li:last-child:after{background:none}.overlay{background-color:rgba(0,0,0,.2)}li:hover .overlay{background-color:rgba(0,0,0,.1)}.overlay,.overlay a{color:#fff;text-shadow:0 1px 0 #111}.gallery li{background-color:rgba(0,20,80,.06);box-shadow:0 1px 1px rgba(0,0,0,.2),0 4px 8px rgba(0,0,0,.03)}.gallery li figcaption{background-color:#fff}.flexblock.gallery li:hover{box-shadow:0 1px 1px rgba(0,0,0,.2),0 4px 8px rgba(0,0,0,.08)}.gallery li footer{border-top:1px solid rgba(0,20,80,.1)}.gallery li a{color:#333;text-shadow:none}.flesblock.gallery li a footer{color:#aaa}.gallery li figcaption:before{border:.8rem solid #000;border-color:transparent transparent #fff #fff}.flexblock.plans li:hover div,.plans>li div{background-color:#fff}.plans>li:hover,.plans>li:nth-child(2){box-shadow:0 1px 1px rgba(0,0,0,.1),0 8px 16px rgba(0,0,0,.1)}.plans:hover li:nth-child(2):not(:hover){box-shadow:none}.plans li h2{background-color:rgba(0,20,80,.5);color:#fff}.plans ul li{border-bottom:1px solid rgba(0,20,80,.1)}.plans ul li:last-child{border-bottom:none}.plans>li>a{color:inherit;color:#333;text-shadow:none}.activity li{border-top:.1rem solid rgba(0,20,80,.1)}.activity li:hover{background-color:rgba(0,20,80,.02)}.work-label,.work li a{border-bottom:1px solid rgba(0,20,80,.1)}.work li:nth-child(odd)>a{background-color:rgba(0,20,80,.03)}.work li a:hover{background-color:rgba(0,20,80,.04)}.clients.border figcaption{border-top:1px solid rgba(0,20,80,.1)}img.blacklogo{background:none;filter:grayscale(100%) brightness(10%) contrast(100%)}img.graylogo{filter:grayscale(100%) brightness(10%) contrast(10%)}img.whitelogo{filter:brightness(0) invert(1)}img.blacklogo:hover,img.graylogo:hover,li:hover img.blacklogo,li:hover img.graylogo{background:none;filter:grayscale(0);filter:none;transition:all .6s ease}[class*=card-]>a{color:inherit}.description>li{border-bottom:1px solid rgba(0,20,80,.1)}.description>li:last-child{border-bottom:none}[class*=card-][class*=bg-] figure{background-color:rgba(0,20,80,.06)}[class*=card-] figcaption,[class*=card-] figcaption a{color:#fff;background:linear-gradient(180deg,transparent 0,rgba(0,0,0,.2))}@media (min-width:768px){.cta .benefit{border-left-width:1px;border-style:solid;border-image:linear-gradient(90deg,transparent,rgba(0,0,0,.4) 50%,transparent) 1 100%;-moz-border-image:-moz-linear-gradient(90deg,transparent,rgba(0,0,0,.4) 50%,transparent) 1 100%}}table td,th,thead{border:1px solid rgba(0,0,0,.5)}thead{background-color:rgba(0,0,0,.3)}tr:nth-child(2n)>td{background:rgba(0,0,0,.1)}tr>td{border-top:1px solid rgba(0,0,0,.5)}td:hover,tr:nth-child(2n)>td:hover{background-color:hsla(0,0%,100%,.5)}.browser{border:1px solid rgba(0,20,80,.1)}.browser:hover{box-shadow:0 1px 1px rgba(0,0,0,.1),0 8px 16px rgba(0,0,0,.1)}.browser:before{background-color:rgba(0,20,80,.1);color:hsla(0,0%,100%,.9);border-bottom:1px solid rgba(0,20,80,.2)}.browser:hover:before{background-color:rgba(0,20,80,.12);color:#fff}input,textarea{background-color:#fafbfc}input:focus,textarea:focus{background-color:#fff;box-shadow:0 0 5px #51cbee}input:focus::-moz-placeholder{color:#ddd}input:focus::-webkit-input-placeholder{color:#ddd}[class*=badge-],a.button,button[type=submit],input{box-shadow:0 10px 16px -8px rgba(0,20,80,.3)}.button,.button:hover,button,button[type=submit],button[type=submit]:hover,input,input[type=submit],input[type=submit]:hover,select,textarea{border:1px solid #44d}.button,.button:hover,button[type=submit],button[type=submit]:hover,input[type=submit],input[type=submit]:hover{color:#fff;background-color:#44d;text-shadow:0 1px 0 #123}.button:active,button[type=submit]:active,input[type=submit]:active{background-color:#17d}.ghost,.ghost:hover{background:none;color:inherit;text-shadow:none}.bg-primary .button,.bg-primary button,.bg-primary button:hover,.bg-primary input,.bg-primary select,.bg-primary textarea,[class*=bg-] a.button.ghost,[class*=bg-gradient-] .button{border-color:#fff}[class*=bg-] a.button{color:#fff}.bg-gradient-white a.button.ghost,.bg-white a.button.ghost{color:#333;border:1px solid #44d}:disabled,button:disabled:hover{background-color:#eee;border-color:#eee;color:#ccc}fieldset{border:1px solid #44d;background-color:rgba(0,20,80,.2)}legend{background-color:rgba(0,0,0,.6);color:#fff}input:hover,select:hover{box-shadow:0 0 8px rgba(0,0,0,.3)}[class*=badge-]{border:1px solid #345;background-color:#000}form .flexblock li:hover{background-color:rgba(0,0,0,.05)}.chapter,.toc,.toc ol>li:before{background-color:#f7f9fb}.toc li .toc-page:before{border-bottom:1px dotted rgba(0,0,0,.9)}#counter,#navigation a{color:#abc}#webslides:hover #navigation a:hover{color:#fff;background-color:rgba(0,0,0,.9)}footer[role=contentinfo]{background-color:#fff} \ No newline at end of file diff --git a/static/js/webslides.js b/static/js/webslides.js index b4aa2d3..a96fc36 100644 --- a/static/js/webslides.js +++ b/static/js/webslides.js @@ -1,41 +1,41 @@ /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; - +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { - +/******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) /******/ return installedModules[moduleId].exports; - +/******/ /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; - +/******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); - +/******/ /******/ // Flag the module as loaded /******/ module.l = true; - +/******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } - - +/******/ +/******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; - +/******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; - +/******/ /******/ // identity function for calling harmony imports with the correct context /******/ __webpack_require__.i = function(value) { return value; }; - +/******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { @@ -46,7 +46,7 @@ /******/ }); /******/ } /******/ }; - +/******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? @@ -55,13 +55,13 @@ /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; - +/******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; - +/******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = "/static/js/"; - +/******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 17); /******/ }) @@ -1803,4 +1803,5 @@ __webpack_require__(4); window.WebSlides = __WEBPACK_IMPORTED_MODULE_0__modules_webslides__["a" /* default */]; /***/ }) -/******/ ]); \ No newline at end of file +/******/ ]); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgODNhNzllYzQ1N2Y2OWEwOTY5MDUiLCJ3ZWJwYWNrOi8vLy4vanMvdXRpbHMvZG9tLmpzIiwid2VicGFjazovLy8uL2pzL3V0aWxzL2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vanMvdXRpbHMvbW9iaWxlLWRldGVjdG9yLmpzIiwid2VicGFjazovLy8uL2pzL21vZHVsZXMvd2Vic2xpZGVzLmpzIiwid2VicGFjazovLy8uL3Njc3MvZnVsbC5zY3NzIiwid2VicGFjazovLy8uL2pzL21vZHVsZXMvc2xpZGUuanMiLCJ3ZWJwYWNrOi8vLy4vanMvcGx1Z2lucy9jbGljay1uYXYuanMiLCJ3ZWJwYWNrOi8vLy4vanMvcGx1Z2lucy9ncmlkLmpzIiwid2VicGFjazovLy8uL2pzL3BsdWdpbnMvaGFzaC5qcyIsIndlYnBhY2s6Ly8vLi9qcy9wbHVnaW5zL2tleWJvYXJkLmpzIiwid2VicGFjazovLy8uL2pzL3BsdWdpbnMvbmF2aWdhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9qcy9wbHVnaW5zL3BsdWdpbnMuanMiLCJ3ZWJwYWNrOi8vLy4vanMvcGx1Z2lucy9zY3JvbGwuanMiLCJ3ZWJwYWNrOi8vLy4vanMvcGx1Z2lucy90b3VjaC5qcyIsIndlYnBhY2s6Ly8vLi9qcy91dGlscy9jdXN0b20tZXZlbnQuanMiLCJ3ZWJwYWNrOi8vLy4vanMvdXRpbHMvZWFzaW5nLmpzIiwid2VicGFjazovLy8uL2pzL3V0aWxzL3Njcm9sbC10by5qcyIsIndlYnBhY2s6Ly8vLi9qcy9mdWxsLmpzIl0sIm5hbWVzIjpbIkRPTSIsInRhZyIsImlkIiwidGV4dCIsIm5vZGUiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJ0ZXh0Q29udGVudCIsImVsIiwic3R5bGUiLCJkaXNwbGF5IiwidGFyZ2V0IiwiZXZlbnRUeXBlIiwiZXZlbnRJbmZvIiwiZXZlbnQiLCJkZXRhaWwiLCJkaXNwYXRjaEV2ZW50IiwiaXRlcmFibGUiLCJzbGljZSIsImNhbGwiLCJLZXlzIiwiRU5URVIiLCJTUEFDRSIsIlJFX1BBR0UiLCJBVl9QQUdFIiwiRU5EIiwiSE9NRSIsIkxFRlQiLCJVUCIsIlJJR0hUIiwiRE9XTiIsIlVBIiwid2luZG93IiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiTW9iaWxlRGV0ZWN0b3IiLCJtYXRjaCIsImlzQW5kcm9pZCIsImlzQmxhY2tCZXJyeSIsImlzaU9TIiwiaXNPcGVyYSIsImlzV2luZG93cyIsImlzV2luZG93c1Bob25lIiwiQ0xBU1NFUyIsIlZFUlRJQ0FMIiwiUExVR0lOUyIsIlBsdWdpbnMiLCJDbGlja05hdiIsIkdyaWQiLCJIYXNoIiwiS2V5Ym9hcmQiLCJOYXZpZ2F0aW9uIiwiU2Nyb2xsIiwiVG91Y2giLCJXZWJTbGlkZXMiLCJhdXRvc2xpZGUiLCJjaGFuZ2VPbkNsaWNrIiwibWluV2hlZWxEZWx0YSIsInNjcm9sbFdhaXQiLCJzbGlkZU9mZnNldCIsImdldEVsZW1lbnRCeUlkIiwiaXNNb3ZpbmciLCJzbGlkZXMiLCJjdXJyZW50U2xpZGVJXyIsImN1cnJlbnRTbGlkZV8iLCJtYXhTbGlkZV8iLCJpc1ZlcnRpY2FsIiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJwbHVnaW5zIiwiaW50ZXJ2YWxfIiwib3B0aW9ucyIsIkVycm9yIiwicmVtb3ZlQ2hpbGRyZW5fIiwiZ3JhYlNsaWRlc18iLCJjcmVhdGVQbHVnaW5zXyIsImluaXRTbGlkZXNfIiwicGxheSIsIm9uSW5pdF8iLCJub2RlcyIsImNoaWxkTm9kZXMiLCJpIiwibGVuZ3RoIiwiU2xpZGUiLCJpc0NhbmRpZGF0ZSIsInJlbW92ZUNoaWxkIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJwbHVnaW5DdG8iLCJwbHVnaW5OYW1lIiwiZmlyZUV2ZW50IiwidG9BcnJheSIsIm1hcCIsInNsaWRlIiwic2xpZGVJIiwiZm9yd2FyZCIsImlzVmFsaWRJbmRleFNsaWRlXyIsImlzTW92aW5nRm9yd2FyZCIsIm5leHRTbGlkZSIsInRvdWNoIiwiaXNFbmFibGVkIiwic2Nyb2xsVHJhbnNpdGlvblRvU2xpZGVfIiwib25TbGlkZUNoYW5nZV8iLCJ0cmFuc2l0aW9uVG9TbGlkZV8iLCJjYWxsYmFjayIsIm92ZXJmbG93IiwibW92ZUJlZm9yZUZpcnN0Iiwic2hvdyIsInNjcm9sbFRvIiwib2Zmc2V0VG9wIiwiaGlkZSIsIm1vdmVBZnRlckxhc3QiLCJzZXRUaW1lb3V0IiwiY3VycmVudFNsaWRlMCIsImN1cnJlbnRTbGlkZSIsIm5leHRJbmRleCIsImdvVG9TbGlkZSIsInByZXZJbmRleCIsInNsaWRlTnVtYmVyIiwiaGFzaCIsImNvbnN0cnVjdG9yIiwiZ2V0U2xpZGVOdW1iZXIiLCJ0aW1lIiwic2V0SW50ZXJ2YWwiLCJnb05leHQiLCJiaW5kIiwiY2xlYXJJbnRlcnZhbCIsImtleSIsImN0byIsIlNMSURFIiwiQ1VSUkVOVCIsInBhcmVudCIsInBhcmVudE5vZGUiLCJhZGQiLCJyZW1vdmUiLCJsYXN0IiwiY2hpbGRFbGVtZW50Q291bnQiLCJpbnNlcnRCZWZvcmUiLCJuZXh0U2libGluZyIsImZpcnN0Iiwibm9kZVR5cGUiLCJ0YWdOYW1lIiwiQ0xJQ0tBQkxFX0VMUyIsIndzSW5zdGFuY2UiLCJ3c18iLCJhZGRFdmVudExpc3RlbmVyIiwib25DbGlja18iLCJpbmRleE9mIiwiZGF0YXNldCIsInByZXZlbnROYXYiLCJDU1MiLCJoZWFkIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJ0eXBlIiwic3R5bGVTaGVldCIsImNzc1RleHQiLCJhcHBlbmRDaGlsZCIsImNyZWF0ZVRleHROb2RlIiwib25LZXlQcmVzc18iLCJ3aGljaCIsImJvZHkiLCJ0b2dnbGVDbGFzcyIsIkhBU0giLCJzbGlkZVJlZ2V4Iiwib25IYXNoQ2hhbmdlXyIsIm5ld1NsaWRlSW5kZXgiLCJzZXRTbGlkZU51bWJlciIsInJlc3VsdHMiLCJsb2NhdGlvbiIsIkFycmF5IiwiaXNBcnJheSIsInBhcnNlSW50IiwibnVtYmVyIiwiaGlzdG9yeSIsInB1c2hTdGF0ZSIsIm1ldGhvZCIsImFyZ3VtZW50IiwiYWN0aXZlRWxlbWVudCIsImlzQ29udGVudEVkaXRhYmxlIiwiY29udGVudEVkaXRhYmxlIiwiaXNJbnB1dCIsImdvUHJldiIsIkVMRU1FTlRfSUQiLCJOQVYiLCJORVhUIiwiUFJFViIsIkNPVU5URVIiLCJMQUJFTFMiLCJIT1JJWk9OVEFMIiwiYXJyb3dMYWJlbHMiLCJjcmVhdGVOb2RlIiwibmV4dCIsImNyZWF0ZUFycm93IiwicHJldiIsImNvdW50ZXIiLCJiaW5kRXZlbnRzXyIsIm9uU2xpZGVDaGFuZ2VkXyIsIm9uQnV0dG9uQ2xpY2tlZF8iLCJjdXJyZW50IiwibWF4IiwidXBkYXRlQ291bnRlciIsInByZXZlbnREZWZhdWx0IiwiYXJyb3ciLCJocmVmIiwidGl0bGUiLCJzY3JvbGxDb250YWluZXJfIiwiaXNHb2luZ1VwXyIsImlzR29pbmdMZWZ0XyIsInRpbWVvdXRfIiwiaXNBbnkiLCJvbk1vdXNlV2hlZWxfIiwid2hlZWxEZWx0YVkiLCJkZWx0YVkiLCJ3aGVlbERlbHRhWCIsImRlbHRhWCIsImlzSG9yaXpvbnRhbE1vdmVtZW50IiwiTWF0aCIsImFicyIsIkVWRU5UUyIsIlNUQVJUIiwiTU9WRSIsInBvaW50ZXIiLCJzdGFydFhfIiwic3RhcnRZXyIsImVuZFhfIiwiZW5kWV8iLCJldmVudHMiLCJQb2ludGVyRXZlbnQiLCJvblN0YXJ0XyIsIm9uTW92ZV8iLCJvblN0b3BfIiwiaW5mbyIsIm5vcm1hbGl6ZUV2ZW50SW5mbyIsIngiLCJ5IiwiZGlmZlgiLCJkaWZmWSIsInRvdWNoRXZlbnQiLCJwYWdlWCIsInBhZ2VZIiwiY2hhbmdlZFRvdWNoZXMiLCJvcmlnaW5hbEV2ZW50Iiwib2Zmc2V0WCIsImxheWVyWCIsIm9mZnNldFkiLCJsYXllclkiLCJOYXRpdmVDdXN0b21FdmVudCIsIkN1c3RvbUV2ZW50IiwiY2FuSXVzZU5hdGl2ZUN1c3RvbSIsInAiLCJhIiwiZSIsIklFQ3VzdG9tRXZlbnQiLCJwYXJhbXMiLCJjcmVhdGVFdmVudCIsImluaXRDdXN0b21FdmVudCIsImJ1YmJsZXMiLCJjYW5jZWxhYmxlIiwidW5kZWZpbmVkIiwiV1NDdXN0b21FdmVudCIsInN3aW5nIiwiY29zIiwiUEkiLCJsaW5lYXIiLCJTQ1JPTExBQkxFX0NPTlRBSU5FUiIsImR1cmF0aW9uIiwiY2IiLCJkZWx0YSIsInNjcm9sbFRvcCIsInN0YXJ0TG9jYXRpb24iLCJpbmNyZW1lbnQiLCJhbmltYXRlU2Nyb2xsIiwiZWxhcHNlZFRpbWUiLCJwZXJjZW50IiwibWluIiwiZWFzaW5nUCIsIkVhc2luZ3MiLCJmbG9vciIsInJlcXVpcmUiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxtREFBMkMsY0FBYzs7QUFFekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDaEVBOztBQUdBOzs7O0lBR3FCQSxHOzs7Ozs7OztBQUNuQjs7Ozs7Ozs7OytCQVNrQkMsRyxFQUF5QjtBQUFBLFVBQXBCQyxFQUFvQix1RUFBZixFQUFlO0FBQUEsVUFBWEMsSUFBVyx1RUFBSixFQUFJOztBQUN6QyxVQUFNQyxPQUFPQyxTQUFTQyxhQUFULENBQXVCTCxHQUF2QixDQUFiO0FBQ0FHLFdBQUtGLEVBQUwsR0FBVUEsRUFBVjs7QUFFQSxVQUFJQyxJQUFKLEVBQVU7QUFDUkMsYUFBS0csV0FBTCxHQUFtQkosSUFBbkI7QUFDRDs7QUFFRCxhQUFPQyxJQUFQO0FBQ0Q7O0FBRUQ7Ozs7Ozs7eUJBSVlJ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QUNiRCx5QkFBcUJJLFNBQXJCLEdBQWlDbEMsQ0FBakM7QUFDQWdDO0FBQ0E7QUFDRDs7QUFFRCxNQUFNSyxnQkFBZ0IsU0FBaEJBLGFBQWdCLGNBQWU7QUFDbkNDLG1CQUFlRixTQUFmO0FBQ0EsUUFBTUcsVUFBVXpELEtBQUswRCxHQUFMLENBQVMsQ0FBVCxFQUFZRixjQUFjUCxRQUExQixDQUFoQjtBQUNBLFFBQU1VLFVBQVUsd0RBQUFDLENBQVFoQixLQUFSLENBQ2RhLE9BRGMsRUFFZEQsY0FBY0MsT0FGQSxFQUdkdkMsQ0FIYyxFQUlkaUMsS0FKYyxFQUtkRixRQUxjLENBQWhCOztBQU9BRCx5QkFBcUJJLFNBQXJCLEdBQWlDcEQsS0FBSzZELEtBQUwsQ0FBV1IsZ0JBQ3ZDTSxVQUFVUixLQURrQixDQUFqQzs7QUFHQSxRQUFJSyxjQUFjUCxRQUFsQixFQUE0QjtBQUMxQnpKLGlCQUFXO0FBQUEsZUFBTStKLGNBQWNDLFdBQWQsQ0FBTjtBQUFBLE9BQVgsRUFBNkNGLFNBQTdDO0FBQ0QsS0FGRCxNQUVPO0FBQ0xKO0FBQ0Q7QUFDRixHQWxCRDs7QUFvQkFLLGdCQUFjLENBQWQ7QUFDRCxDOzs7Ozs7Ozs7QUMzQ0Q7QUFDQSxtQkFBQU8sQ0FBUSxDQUFSOztBQUVBdlAsT0FBT3NCLFNBQVAsR0FBbUIsbUVBQW5CLEMiLCJmaWxlIjoid2Vic2xpZGVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG5cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbiBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiL3N0YXRpYy9qcy9cIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxNyk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgODNhNzllYzQ1N2Y2OWEwOTY5MDUiLCJpbXBvcnQgV1NDdXN0b21FdmVudCBmcm9tICcuL2N1c3RvbS1ldmVudCc7XHJcblxyXG5cclxuLyoqXHJcbiAqIFN0YXRpYyBjbGFzcyBmb3IgRE9NIGhlbHBlci5cclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERPTSB7XHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIG5vZGUgd2l0aCBvcHRpb25hbCBwYXJhbWV0ZXJzLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIG5hbWUgb2YgdGhlIHRhZyBvZiB0aGUgbmVlZGVkIGVsZW1lbnQuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBkZXNpcmVkIGlkIGZvciB0aGUgZWxlbWVudC4gSXQgZGVmYXVsdHMgdG8gYW5cclxuICAgKiBlbXB0eSBzdHJpbmcuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgVGhlIGRlc2lyZWQgdGV4dCB0byBnbyBpbnNpZGUgb2YgdGhlIGVsZW1lbnQuIEl0IGRlZmF1bHRzXHJcbiAgICogdG8gYW4gZW1wdHkgc3RyaW5nLlxyXG4gICAqIEByZXR1cm4ge0VsZW1lbnR9XHJcbiAgICovXHJcbiAgc3RhdGljIGNyZWF0ZU5vZGUodGFnLCBpZCA9ICcnLCB0ZXh0ID0gJycpIHtcclxuICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XHJcbiAgICBub2RlLmlkID0gaWQ7XHJcblxyXG4gICAgaWYgKHRleHQpIHtcclxuICAgICAgbm9kZS50ZXh0Q29udGVudCA9IHRleHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5vZGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIaWRlcyBhbiBlbGVtZW50IHNldHRpbmcgdGhlIGRpc3BsYXkgdG8gbm9uZS5cclxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsIEVsZW1lbnQgdG8gYmUgaGlkZGVuLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBoaWRlKGVsKSB7XHJcbiAgICBlbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2hvd3MgYW4gZWxlbWVudCBieSByZW1vdmluZyB0aGUgZGlzcGxheSBwcm9wZXJ0eS4gVGhpcyBpcyBvbmx5IGludGVuZGVkXHJcbiAgICogdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIERPTS5oaWRlLlxyXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWwgRWxlbWVudCB0byBiZSBzaG93bi5cclxuICAgKi9cclxuICBzdGF0aWMgc2hvdyhlbCkge1xyXG4gICAgZWwuc3R5bGUuZGlzcGxheSA9ICcnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmlyZXMgYSBjdXN0b20gZXZlbnQgb24gdGhlIGdpdmVuIHRhcmdldC5cclxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHRhcmdldCBUaGUgdGFyZ2V0IG9mIHRoZSBldmVudC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRUeXBlIFRoZSBldmVudCB0eXBlLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldmVudEluZm8gT3B0aW9uYWwgcGFyYW1ldGVyIHRvIHByb3ZpZGUgYWRkaXRpb25hbCBkYXRhXHJcbiAgICogdG8gdGhlIGV2ZW50LlxyXG4gICAqL1xyXG4gIHN0YXRpYyBmaXJlRXZlbnQodGFyZ2V0LCBldmVudFR5cGUsIGV2ZW50SW5mbyA9IHt9KSB7XHJcbiAgICBjb25zdCBldmVudCA9IG5ldyBXU0N1c3RvbUV2ZW50KGV2ZW50VHlwZSwge1xyXG4gICAgICBkZXRhaWw6IGV2ZW50SW5mb1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGFyZ2V0LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29udmVydHMgYW4gaXRlcmFibGUgdG8gYW4gYXJyYXkuXHJcbiAgICogQHBhcmFtIHsqfSBpdGVyYWJsZSBFbGVtZW50IHRvIGNvbnZlcnQgdG8gYXJyYXlcclxuICAgKiBAcmV0dXJuIHtBcnJheX0gdGhlIGVsZW1lbnQgY2FzdGVkIHRvIGFuIGFycmF5LlxyXG4gICAqL1xyXG4gIHN0YXRpYyB0b0FycmF5KGl0ZXJhYmxlKSB7XHJcbiAgICByZXR1cm4gW10uc2xpY2UuY2FsbChpdGVyYWJsZSk7XHJcbiAgfVxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2pzL3V0aWxzL2RvbS5qcyIsImNvbnN0IEtleXMgPSB7XHJcbiAgRU5URVI6IDEzLFxyXG4gIFNQQUNFOiAzMixcclxuICBSRV9QQUdFOiAzMyxcclxuICBBVl9QQUdFOiAzNCxcclxuICBFTkQ6IDM1LFxyXG4gIEhPTUU6IDM2LFxyXG4gIExFRlQ6IDM3LFxyXG4gIFVQOiAzOCxcclxuICBSSUdIVDogMzksXHJcbiAgRE9XTjogNDBcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEtleXM7XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2pzL3V0aWxzL2tleXMuanMiLCJjb25zdCBVQSA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW9iaWxlRGV0ZWN0b3Ige1xyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdGhlIGRldmljZSBpcyBBbmRyb2lkIG9yIG5vdC5cclxuICAgKiBAcmV0dXJuIHtCb29sZWFufVxyXG4gICAqL1xyXG4gIHN0YXRpYyBpc0FuZHJvaWQoKSB7XHJcbiAgICByZXR1cm4gISFVQS5tYXRjaCgvQW5kcm9pZC9pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdGhlIGRldmljZSBpcyBCbGFja0JlcnJ5IG9yIG5vdC5cclxuICAgKiBAcmV0dXJuIHtCb29sZWFufVxyXG4gICAqL1xyXG4gIHN0YXRpYyBpc0JsYWNrQmVycnkoKSB7XHJcbiAgICByZXR1cm4gISFVQS5tYXRjaCgvQmxhY2tCZXJyeS9pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdGhlIGRldmljZSBpcyBpT1Mgb3Igbm90LlxyXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XHJcbiAgICovXHJcbiAgc3RhdGljIGlzaU9TKCkge1xyXG4gICAgcmV0dXJuICEhVUEubWF0Y2goL2lQaG9uZS9pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdGhlIGRldmljZSBpcyBPcGVyYSBvciBub3QuXHJcbiAgICogQHJldHVybiB7Qm9vbGVhbn1cclxuICAgKi9cclxuICBzdGF0aWMgaXNPcGVyYSgpIHtcclxuICAgIHJldHVybiAhIVVBLm1hdGNoKC9PcGVyYSBNaW5pL2kpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciB0aGUgZGV2aWNlIGlzIFdpbmRvd3Mgb3Igbm90LlxyXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XHJcbiAgICovXHJcbiAgc3RhdGljIGlzV2luZG93cygpIHtcclxuICAgIHJldHVybiAhIVVBLm1hdGNoKC9JRU1vYmlsZS9pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdGhlIGRldmljZSBpcyBXaW5kb3dzIFBob25lIG9yIG5vdC5cclxuICAgKiBAcmV0dXJuIHtCb29sZWFufVxyXG4gICAqL1xyXG4gIHN0YXRpYyBpc1dpbmRvd3NQaG9uZSgpIHtcclxuICAgIHJldHVybiAhIVVBLm1hdGNoKC9XaW5kb3dzIFBob25lL2kpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciB0aGUgZGV2aWNlIGlzIGFueSBtb2JpbGUgZGV2aWNlIG9yIG5vdC5cclxuICAgKiBAcmV0dXJuIHtCb29sZWFufVxyXG4gICAqL1xyXG4gIHN0YXRpYyBpc0FueSgpIHtcclxuICAgIHJldHVybiBNb2JpbGVEZXRlY3Rvci5pc0FuZHJvaWQoKSB8fFxyXG4gICAgTW9iaWxlRGV0ZWN0b3IuaXNCbGFja0JlcnJ5KCkgfHxcclxuICAgIE1vYmlsZURldGVjdG9yLmlzaU9TKCkgfHxcclxuICAgIE1vYmlsZURldGVjdG9yLmlzT3BlcmEoKSB8fFxyXG4gICAgTW9iaWxlRGV0ZWN0b3IuaXNXaW5kb3dzKCkgfHxcclxuICAgIE1vYmlsZURldGVjdG9yLmlzV2luZG93c1Bob25lKCk7XHJcbiAgfVxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2pzL3V0aWxzL21vYmlsZS1kZXRlY3Rvci5qcyIsImltcG9ydCBQbHVnaW5zIGZyb20gJy4uL3BsdWdpbnMvcGx1Z2lucyc7XHJcbmltcG9ydCBTbGlkZSBmcm9tICcuL3NsaWRlJztcclxuaW1wb3J0IERPTSBmcm9tICcuLi91dGlscy9kb20nO1xyXG5pbXBvcnQgc2Nyb2xsVG8gZnJvbSAnLi4vdXRpbHMvc2Nyb2xsLXRvJztcclxuXHJcbmNvbnN0IENMQVNTRVMgPSB7XHJcbiAgVkVSVElDQUw6ICd2ZXJ0aWNhbCdcclxufTtcclxuXHJcbi8vIERlZmF1bHQgcGx1Z2luc1xyXG5jb25zdCBQTFVHSU5TID0ge1xyXG4gICdjbGlja05hdic6IFBsdWdpbnMuQ2xpY2tOYXYsXHJcbiAgJ2dyaWQnOiBQbHVnaW5zLkdyaWQsXHJcbiAgJ2hhc2gnOiBQbHVnaW5zLkhhc2gsXHJcbiAgJ2tleWJvYXJkJzogUGx1Z2lucy5LZXlib2FyZCxcclxuICAnbmF2JzogUGx1Z2lucy5OYXZpZ2F0aW9uLFxyXG4gICdzY3JvbGwnOiBQbHVnaW5zLlNjcm9sbCxcclxuICAndG91Y2gnOiBQbHVnaW5zLlRvdWNoXHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXZWJTbGlkZXMge1xyXG4gIC8qKlxyXG4gICAqIE9wdGlvbnMgZm9yIFdlYlNsaWRlc1xyXG4gICAqIEBwYXJhbSB7bnVtYmVyfGJvb2xlYW59IGF1dG9zbGlkZSBJZiBhIG51bWJlciBpcyBwcm92aWRlZCwgaXQgd2lsbCBhbGxvd1xyXG4gICAqIGF1dG9zbGlkaW5nIGJ5IHNhaWQgYW1vdW50IG9mIG1pbGlzZWNvbmRzLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gY2hhbmdlT25DbGljayBJZiB0cnVlLCBpdCB3aWxsIGFsbG93XHJcbiAgICogY2xpY2tpbmcgb24gYW55IHBsYWNlIHRvIGNoYW5nZSB0aGUgc2xpZGUuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1pbldoZWVsRGVsdGEgQ29udHJvbHMgdGhlIGFtb3VudCBvZiBuZWVkZWQgc2Nyb2xsIHRvXHJcbiAgICogdHJpZ2dlciBuYXZpZ2F0aW9uLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzY3JvbGxXYWl0IENvbnRyb2xzIHRoZSBhbW91bnQgb2YgdGltZSB0byB3YWl0IHRpbGxcclxuICAgKiBuYXZpZ2F0aW9uIGNhbiBvY2N1ciBhZ2FpbiB3aXRoIHNjcm9sbC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gc2xpZGVPZmZzZXQgQ29udHJvbHMgdGhlIGFtb3VudCBvZiBuZWVkZWQgdG91Y2ggZGVsdGEgdG9cclxuICAgKiB0cmlnZ2VyIG5hdmlnYXRpb24uXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3Ioe1xyXG4gICAgYXV0b3NsaWRlID0gZmFsc2UsXHJcbiAgICBjaGFuZ2VPbkNsaWNrID0gZmFsc2UsXHJcbiAgICBtaW5XaGVlbERlbHRhID0gNDAsXHJcbiAgICBzY3JvbGxXYWl0ID0gNDUwLFxyXG4gICAgc2xpZGVPZmZzZXQgPSA1MFxyXG4gIH0gPSB7fSkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBXZWJTbGlkZSBlbGVtZW50LlxyXG4gICAgICogQHR5cGUge0VsZW1lbnR9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd2Vic2xpZGVzJyk7XHJcbiAgICAvKipcclxuICAgICAqIE1vdmluZyBmbGFnLlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIHRoaXMuaXNNb3ZpbmcgPSBmYWxzZTtcclxuICAgIC8qKlxyXG4gICAgICogU2xpZGUncyBhcnJheS5cclxuICAgICAqIEB0eXBlIHs/QXJyYXk8U2xpZGU+fVxyXG4gICAgICovXHJcbiAgICB0aGlzLnNsaWRlcyA9IG51bGw7XHJcbiAgICAvKipcclxuICAgICAqIEN1cnJlbnQgc2xpZGUncyBpbmRleC5cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICB0aGlzLmN1cnJlbnRTbGlkZUlfID0gLTE7XHJcbiAgICAvKipcclxuICAgICAqIEN1cnJlbnQgc2xpZGUgcmVmZXJlbmNlLlxyXG4gICAgICogQHR5cGUgez9TbGlkZX1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIHRoaXMuY3VycmVudFNsaWRlXyA9IG51bGw7XHJcbiAgICAvKipcclxuICAgICAqIE1heCBzbGlkZSBpbmRleC5cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICB0aGlzLm1heFNsaWRlXyA9IDA7XHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgdGhlIGxheW91dCBpcyBnb2luZyB0byBiZSB2ZXJ0aWNhbCBvciBob3Jpem9udGFsLlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIHRoaXMuaXNWZXJ0aWNhbCA9IHRoaXMuZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTRVMuVkVSVElDQUwpO1xyXG4gICAgLyoqXHJcbiAgICAgKiBQbHVnaW4ncyBkaWN0aW9uYXJ5LlxyXG4gICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAqL1xyXG4gICAgdGhpcy5wbHVnaW5zID0ge307XHJcbiAgICAvKipcclxuICAgICAqIEludGVydmFsIElEIHJlZmVyZW5jZSBmb3IgdGhlIGF1dG9zbGlkZS5cclxuICAgICAqIEB0eXBlIHs/bnVtYmVyfVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgdGhpcy5pbnRlcnZhbF8gPSBudWxsO1xyXG4gICAgLyoqXHJcbiAgICAgKiBPcHRpb25zIGRpY3Rpb25hcnkuXHJcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICovXHJcbiAgICB0aGlzLm9wdGlvbnMgPSB7XHJcbiAgICAgIGF1dG9zbGlkZSxcclxuICAgICAgY2hhbmdlT25DbGljayxcclxuICAgICAgbWluV2hlZWxEZWx0YSxcclxuICAgICAgc2Nyb2xsV2FpdCxcclxuICAgICAgc2xpZGVPZmZzZXRcclxuICAgIH07XHJcblxyXG4gICAgaWYgKCF0aGlzLmVsKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGRuXFwndCBmaW5kIHRoZSB3ZWJzbGlkZXMgY29udGFpbmVyIScpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEJvb3RzdHJhcHBpbmdcclxuICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW5fKCk7XHJcbiAgICB0aGlzLmdyYWJTbGlkZXNfKCk7XHJcbiAgICB0aGlzLmNyZWF0ZVBsdWdpbnNfKCk7XHJcbiAgICB0aGlzLmluaXRTbGlkZXNfKCk7XHJcbiAgICB0aGlzLnBsYXkoKTtcclxuICAgIC8vIEZpbmlzaGVkXHJcbiAgICB0aGlzLm9uSW5pdF8oKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZXMgYWxsIGNoaWxkcmVuIGVsZW1lbnRzIGluc2lkZSBvZiB0aGUgbWFpbiBjb250YWluZXIgdGhhdCBhcmUgbm90XHJcbiAgICogZWxpZ2libGUgdG8gYmUgYSBTbGlkZSBFbGVtZW50LlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcmVtb3ZlQ2hpbGRyZW5fKCkge1xyXG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmVsLmNoaWxkTm9kZXM7XHJcbiAgICBsZXQgaSA9IG5vZGVzLmxlbmd0aDtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tpXTtcclxuXHJcbiAgICAgIGlmICghU2xpZGUuaXNDYW5kaWRhdGUobm9kZSkpIHtcclxuICAgICAgICB0aGlzLmVsLnJlbW92ZUNoaWxkKG5vZGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGFsbCB0aGUgcmVnaXN0ZXJlZCBwbHVnaW5zIGFuZCBzdG9yZSB0aGUgaW5zdGFuY2VzIGluc2lkZSBvZiB0aGVcclxuICAgKiB0aGUgd2Vic2xpZGUgaW5zdGFuY2UuXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBjcmVhdGVQbHVnaW5zXygpIHtcclxuICAgIE9iamVjdC5rZXlzKFBMVUdJTlMpLmZvckVhY2gocGx1Z2luTmFtZSA9PiB7XHJcbiAgICAgIGNvbnN0IHBsdWdpbkN0byA9IFBMVUdJTlNbcGx1Z2luTmFtZV07XHJcbiAgICAgIHRoaXMucGx1Z2luc1twbHVnaW5OYW1lXSA9IG5ldyBwbHVnaW5DdG8odGhpcyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGxlZCBvbmNlIHRoZSBXZWJTbGlkZSBpbnN0YW5jZSBoYXMgZmluaXNoZWQgaW5pdGlhbGlzaW5nLlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQGZpcmVzIFdlYlNsaWRlI3dzOmluaXRcclxuICAgKi9cclxuICBvbkluaXRfKCkge1xyXG4gICAgRE9NLmZpcmVFdmVudCh0aGlzLmVsLCAnd3M6aW5pdCcpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR3JhYnMgdGhlIHNsaWRlcyBmcm9tIHRoZSBET00gYW5kIGNyZWF0ZXMgYWxsIHRoZSBTbGlkZXMgbW9kdWxlcy5cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIGdyYWJTbGlkZXNfKCkge1xyXG4gICAgdGhpcy5zbGlkZXMgPSBET00udG9BcnJheSh0aGlzLmVsLmNoaWxkTm9kZXMpXHJcbiAgICAgICAgLm1hcCgoc2xpZGUsIGkpID0+IG5ldyBTbGlkZShzbGlkZSwgaSkpO1xyXG5cclxuICAgIHRoaXMubWF4U2xpZGVfID0gdGhpcy5zbGlkZXMubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR29lcyB0byBhIGdpdmVuIHNsaWRlLlxyXG4gICAqIEBwYXJhbSB7IW51bWJlcn0gc2xpZGVJIFRoZSBzbGlkZSBpbmRleC5cclxuICAgKiBAcGFyYW0gez9ib29sZWFufSBmb3J3YXJkIFdoZXRoZXIgd2UncmUgZm9yY2luZyBtb3ZpbmcgZm9yd2FyZC9iYWNrd2FyZHMuXHJcbiAgICogVGhpcyBwYXJhbWV0ZXIgaXMgdXNlZCBvbmx5IGZyb20gdGhlIGdvTmV4dCwgZ29QcmV2IGZ1bmN0aW9ucyB0byBhZGp1c3QgdGhlXHJcbiAgICogc2Nyb2xsIGFuaW1hdGlvbnMuXHJcbiAgICovXHJcbiAgZ29Ub1NsaWRlKHNsaWRlSSwgZm9yd2FyZCA9IG51bGwpIHtcclxuICAgIGlmICh0aGlzLmlzVmFsaWRJbmRleFNsaWRlXyhzbGlkZUkpICYmXHJcbiAgICAgICAgIXRoaXMuaXNNb3ZpbmcgJiZcclxuICAgICAgICB0aGlzLmN1cnJlbnRTbGlkZUlfICE9PSBzbGlkZUkpIHtcclxuICAgICAgdGhpcy5pc01vdmluZyA9IHRydWU7XHJcbiAgICAgIGxldCBpc01vdmluZ0ZvcndhcmQgPSBmYWxzZTtcclxuXHJcbiAgICAgIGlmIChmb3J3YXJkICE9PSBudWxsKSB7XHJcbiAgICAgICAgaXNNb3ZpbmdGb3J3YXJkID0gZm9yd2FyZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U2xpZGVJXyA+PSAwKSB7XHJcbiAgICAgICAgICBpc01vdmluZ0ZvcndhcmQgPSBzbGlkZUkgPiB0aGlzLmN1cnJlbnRTbGlkZUlfO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjb25zdCBuZXh0U2xpZGUgPSB0aGlzLnNsaWRlc1tzbGlkZUldO1xyXG5cclxuICAgICAgaWYgKHRoaXMuY3VycmVudFNsaWRlXyAhPT0gbnVsbCAmJiB0aGlzLmlzVmVydGljYWwgJiZcclxuICAgICAgICAoIXRoaXMucGx1Z2lucy50b3VjaCB8fCAhdGhpcy5wbHVnaW5zLnRvdWNoLmlzRW5hYmxlZCkpIHtcclxuICAgICAgICB0aGlzLnNjcm9sbFRyYW5zaXRpb25Ub1NsaWRlXyhcclxuICAgICAgICAgICAgaXNNb3ZpbmdGb3J3YXJkLCBuZXh0U2xpZGUsIHRoaXMub25TbGlkZUNoYW5nZV8pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudHJhbnNpdGlvblRvU2xpZGVfKFxyXG4gICAgICAgICAgICBpc01vdmluZ0ZvcndhcmQsIG5leHRTbGlkZSwgdGhpcy5vblNsaWRlQ2hhbmdlXyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyYW5zaXRpb25zIHRvIGEgc2xpZGUsIGRvaW5nIHRoZSBzY3JvbGwgYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNNb3ZpbmdGb3J3YXJkIFdoZXRoZXIgd2UncmUgZ29pbmcgZm9yd2FyZCBvciBiYWNrd2FyZHMuXHJcbiAgICogQHBhcmFtIHtTbGlkZX0gbmV4dFNsaWRlIE5leHQgc2xpZGUuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgdG8gYmUgY2FsbGVkIHVwb24gZmluaXNoaW5nLiBUaGlzIGlzIGFuXHJcbiAgICogYXN5bmMgZnVuY3Rpb24gc28gaXQnbGwgaGFwcGVuIG9uY2UgdGhlIHNjcm9sbCBhbmltYXRpb24gZmluaXNoZXMuXHJcbiAgICogQHByaXZhdGVcclxuICAgKiBAc2VlIHNjcm9sbFRvXHJcbiAgICovXHJcbiAgc2Nyb2xsVHJhbnNpdGlvblRvU2xpZGVfKGlzTW92aW5nRm9yd2FyZCwgbmV4dFNsaWRlLCBjYWxsYmFjaykge1xyXG4gICAgdGhpcy5lbC5zdHlsZS5vdmVyZmxvdyA9ICdub25lJztcclxuXHJcbiAgICBpZiAoIWlzTW92aW5nRm9yd2FyZCkge1xyXG4gICAgICBuZXh0U2xpZGUubW92ZUJlZm9yZUZpcnN0KCk7XHJcbiAgICAgIG5leHRTbGlkZS5zaG93KCk7XHJcbiAgICAgIHNjcm9sbFRvKHRoaXMuY3VycmVudFNsaWRlXy5lbC5vZmZzZXRUb3AsIDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbmV4dFNsaWRlLnNob3coKTtcclxuICAgIH1cclxuXHJcbiAgICBzY3JvbGxUbyhuZXh0U2xpZGUuZWwub2Zmc2V0VG9wLCA1MDAsICgpID0+IHtcclxuICAgICAgdGhpcy5jdXJyZW50U2xpZGVfLmhpZGUoKTtcclxuXHJcbiAgICAgIGlmIChpc01vdmluZ0ZvcndhcmQpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTbGlkZV8ubW92ZUFmdGVyTGFzdCgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmVsLnN0eWxlLm92ZXJmbG93ID0gJ2F1dG8nO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHsgY2FsbGJhY2suY2FsbCh0aGlzLCBuZXh0U2xpZGUpOyB9LCAxNTApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcmFuc2l0aW9ucyB0byBhIHNsaWRlLCB3aXRob3V0IGRvaW5nIHRoZSBzY3JvbGwgYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNNb3ZpbmdGb3J3YXJkIFdoZXRoZXIgd2UncmUgZ29pbmcgZm9yd2FyZCBvciBiYWNrd2FyZHMuXHJcbiAgICogQHBhcmFtIHtTbGlkZX0gbmV4dFNsaWRlIE5leHQgc2xpZGUuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgdG8gYmUgY2FsbGVkIHVwb24gZmluaXNoaW5nLiBUaGlzIGlzIGFcclxuICAgKiBzeW5jIGZ1bmN0aW9uIHNvIGl0J2xsIGhhcHBlbiBvbiBydW4gdGltZS5cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHRyYW5zaXRpb25Ub1NsaWRlXyhpc01vdmluZ0ZvcndhcmQsIG5leHRTbGlkZSwgY2FsbGJhY2spIHtcclxuICAgIHNjcm9sbFRvKDAsIDApO1xyXG5cclxuICAgIGlmICghaXNNb3ZpbmdGb3J3YXJkKSB7XHJcbiAgICAgIG5leHRTbGlkZS5tb3ZlQmVmb3JlRmlyc3QoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jdXJyZW50U2xpZGVfKSB7XHJcbiAgICAgIGlmIChpc01vdmluZ0ZvcndhcmQpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTbGlkZV8ubW92ZUFmdGVyTGFzdCgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmN1cnJlbnRTbGlkZV8uaGlkZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIG5leHRTbGlkZS5zaG93KCk7XHJcbiAgICBjYWxsYmFjay5jYWxsKHRoaXMsIG5leHRTbGlkZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGVuZXZlciBhIHNsaWRlIGlzIGNoYW5nZWQsIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQuIEl0IHVwZGF0ZXMgdGhlXHJcbiAgICogcmVmZXJlbmNlcyB0byB0aGUgY3VycmVudCBzbGlkZSwgZGlzYWJsZXMgdGhlIG1vdmluZyBmbGFnIGFuZCBmaXJlc1xyXG4gICAqIGEgY3VzdG9tIGV2ZW50LlxyXG4gICAqIEBwYXJhbSB7U2xpZGV9IHNsaWRlIFRoZSBzbGlkZSB3ZSdyZSB0cmFuc2l0aW9uaW5nIHRvLlxyXG4gICAqIEBmaXJlcyBXZWJTbGlkZSN3czpzbGlkZS1jaGFuZ2VcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIG9uU2xpZGVDaGFuZ2VfKHNsaWRlKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRTbGlkZV8gPSBzbGlkZTtcclxuICAgIHRoaXMuY3VycmVudFNsaWRlSV8gPSBzbGlkZS5pO1xyXG4gICAgdGhpcy5pc01vdmluZyA9IGZhbHNlO1xyXG5cclxuICAgIERPTS5maXJlRXZlbnQodGhpcy5lbCwgJ3dzOnNsaWRlLWNoYW5nZScsIHtcclxuICAgICAgc2xpZGVzOiB0aGlzLm1heFNsaWRlXyxcclxuICAgICAgY3VycmVudFNsaWRlMDogdGhpcy5jdXJyZW50U2xpZGVJXyxcclxuICAgICAgY3VycmVudFNsaWRlOiB0aGlzLmN1cnJlbnRTbGlkZUlfICsgMVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHb2VzIHRvIHRoZSBuZXh0IHNsaWRlLlxyXG4gICAqL1xyXG4gIGdvTmV4dCgpIHtcclxuICAgIGxldCBuZXh0SW5kZXggPSB0aGlzLmN1cnJlbnRTbGlkZUlfICsgMTtcclxuXHJcbiAgICBpZiAobmV4dEluZGV4ID49IHRoaXMubWF4U2xpZGVfKSB7XHJcbiAgICAgIG5leHRJbmRleCA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5nb1RvU2xpZGUobmV4dEluZGV4LCB0cnVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdvZXMgdG8gdGhlIHByZXZpb3VzIHNsaWRlLlxyXG4gICAqL1xyXG4gIGdvUHJldigpIHtcclxuICAgIGxldCBwcmV2SW5kZXggPSB0aGlzLmN1cnJlbnRTbGlkZUlfIC0gMTtcclxuXHJcbiAgICBpZiAocHJldkluZGV4IDwgMCkge1xyXG4gICAgICBwcmV2SW5kZXggPSB0aGlzLm1heFNsaWRlXyAtIDE7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5nb1RvU2xpZGUocHJldkluZGV4LCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gbnVtYmVyIGlzIGEgdmFsaWQgaW5kZXggdG8gZ28gdG8uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGkgVGhlIGluZGV4IHRvIGNoZWNrLlxyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgeW91IGNhbiBtb3ZlIHRvIHRoYXQgc2xpZGUgb3Igbm90LlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgaXNWYWxpZEluZGV4U2xpZGVfKGkpIHtcclxuICAgIHJldHVybiBpID49IDAgJiYgaSA8IHRoaXMubWF4U2xpZGVfO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdCB0aGUgc2hvd24gc2xpZGUgb24gbG9hZC4gSXQnbGwgZmV0Y2ggaXQgZnJvbSB0aGUgSGFzaCBpZiBwcmVzZW50XHJcbiAgICogYW5kLCBvdGhlcndpc2UsIGl0J2xsIGRlZmF1bHQgdG8gdGhlIGZpcnN0IG9uZS5cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIEBzZWUgSGFzaC5nZXRTbGlkZU51bWJlclxyXG4gICAqL1xyXG4gIGluaXRTbGlkZXNfKCkge1xyXG4gICAgbGV0IHNsaWRlTnVtYmVyID0gdGhpcy5wbHVnaW5zLmhhc2guY29uc3RydWN0b3IuZ2V0U2xpZGVOdW1iZXIoKTtcclxuXHJcbiAgICAvLyBOb3QgdmFsaWRcclxuICAgIGlmIChzbGlkZU51bWJlciA9PT0gbnVsbCB8fFxyXG4gICAgICAgIHNsaWRlTnVtYmVyID49IHRoaXMubWF4U2xpZGVfKSB7XHJcbiAgICAgIHNsaWRlTnVtYmVyID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBLZWVwaW5nIHRoZSBvcmRlclxyXG4gICAgaWYgKHNsaWRlTnVtYmVyICE9PSAwKSB7XHJcbiAgICAgIGxldCBpID0gMDtcclxuICAgICAgd2hpbGUoaSA8IHNsaWRlTnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5zbGlkZXNbaV0ubW92ZUFmdGVyTGFzdCgpO1xyXG4gICAgICAgIGkrKztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ29Ub1NsaWRlKHNsaWRlTnVtYmVyKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZ2lzdGVycyBhIHBsdWdpbiB0byBiZSBsb2FkZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgY3JlYXRlZC4gSXQgYWxsb3dzXHJcbiAgICogKG9uIHB1cnBvc2UpIHRvIHJlcGxhY2UgZGVmYXVsdCBwbHVnaW5zLlxyXG4gICAqIFRob3NlIGJlaW5nOlxyXG4gICAqICAtIE5hdmlnYXRpb25cclxuICAgKiAgLSBIYXNoXHJcbiAgICogIC0gS2V5Ym9hcmRcclxuICAgKiBAcGFyYW0geyFzdHJpbmd9IGtleSBUaGV5IGtleSB1bmRlciB3aGljaCBpdCdsbCBiZSBzdG9yZWQgaW5zaWRlIG9mIHRoZVxyXG4gICAqIGluc3RhbmNlLCBpbnNpZGUgdGhlIHBsdWdpbnMgZGljdC5cclxuICAgKiBAcGFyYW0geyFGdW5jdGlvbn0gY3RvIFBsdWdpbiBjb25zdHJ1Y3Rvci5cclxuICAgKi9cclxuICBzdGF0aWMgcmVnaXN0ZXJQbHVnaW4oa2V5LCBjdG8pIHtcclxuICAgIFBMVUdJTlNba2V5XSA9IGN0bztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0YXJ0cyBhdXRvc2xpZGluZyBhbGwgdGhlIHNsaWRlcyBpZiBpdCdzIG5vdCBjdXJyZW50bHkgZG9pbmcgaXQgYW5kIHRoZVxyXG4gICAqIGF1dG9zbGlkZSBvcHRpb24gd2FzIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiAwLlxyXG4gICAqIEBwYXJhbSB7P251bWJlcn0gdGltZSBBbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgdG8gZ28gdG8gbmV4dCBzbGlkZVxyXG4gICAqIGF1dG9tYXRpY2FsbHkuXHJcbiAgICovXHJcbiAgcGxheSh0aW1lKSB7XHJcbiAgICB0aW1lID0gdGltZSB8fCB0aGlzLm9wdGlvbnMuYXV0b3NsaWRlO1xyXG5cclxuICAgIGlmICghdGhpcy5pbnRlcnZhbF8gJiYgdHlwZW9mIHRpbWUgPT09ICdudW1iZXInICYmIHRpbWUgPiAwKSB7XHJcbiAgICAgIHRoaXMuaW50ZXJ2YWxfID0gc2V0SW50ZXJ2YWwodGhpcy5nb05leHQuYmluZCh0aGlzKSwgdGltZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wcyBhdXRvc2xpZGluZyBhbGwgdGhlIHNsaWRlcy5cclxuICAgKi9cclxuICBzdG9wKCkge1xyXG4gICAgaWYgKHRoaXMuaW50ZXJ2YWxfKSB7XHJcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbF8pO1xyXG4gICAgICB0aGlzLmludGVydmFsXyA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2pzL21vZHVsZXMvd2Vic2xpZGVzLmpzIiwiLy8gcmVtb3ZlZCBieSBleHRyYWN0LXRleHQtd2VicGFjay1wbHVnaW5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3Njc3MvZnVsbC5zY3NzXG4vLyBtb2R1bGUgaWQgPSA0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImltcG9ydCBET00gZnJvbSAnLi4vdXRpbHMvZG9tJztcclxuXHJcbmNvbnN0IENMQVNTRVMgPSB7XHJcbiAgU0xJREU6ICdzbGlkZScsXHJcbiAgQ1VSUkVOVDogJ2N1cnJlbnQnXHJcbn07XHJcblxyXG4vKipcclxuICogV3JhcHBlciBmb3IgdGhlIFNsaWRlIHNlY3Rpb24uXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTbGlkZSB7XHJcbiAgLyoqXHJcbiAgICogQm9vdHN0cmFwcyB0aGUgc2xpZGUgYnkgc2F2aW5nIHNvbWUgZGF0YSwgYWRkaW5nIGEgY2xhc3MgYW5kIGhpZGluZyBpdC5cclxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsIFNlY3Rpb24gZWxlbWVudC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gaSBaZXJvIGJhc2VkIGluZGV4IG9mIHRoZSBzbGlkZS5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihlbCwgaSkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7RWxlbWVudH1cclxuICAgICAqL1xyXG4gICAgdGhpcy5lbCA9IGVsO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc2VjdGlvbidzIHBhcmVudC5cclxuICAgICAqIEB0eXBlIHtOb2RlfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnBhcmVudCA9IGVsLnBhcmVudE5vZGU7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuaSA9IGk7XHJcblxyXG4gICAgdGhpcy5lbC5pZCA9ICdzZWN0aW9uLScgKyAoaSArIDEpO1xyXG4gICAgdGhpcy5lbC5jbGFzc0xpc3QuYWRkKENMQVNTRVMuU0xJREUpO1xyXG5cclxuICAgIC8vIEhpZGUgc2xpZGVzIGJ5IGRlZmF1bHRcclxuICAgIHRoaXMuaGlkZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGlkZXMgdGhlIG5vZGUgYW5kIHJlbW92ZXMgdGhlIGNsYXNzIHRoYXQgbWFrZXMgaXQgXCJhY3RpdmVcIi5cclxuICAgKi9cclxuICBoaWRlKCkge1xyXG4gICAgRE9NLmhpZGUodGhpcy5lbCk7XHJcbiAgICB0aGlzLmVsLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NFUy5DVVJSRU5UKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3dzIHRoZSBub2RlIGFuZCBhZGRzIHRoZSBjbGFzcyB0aGF0IG1ha2VzIGl0IFwiYWN0aXZlXCIuXHJcbiAgICovXHJcbiAgc2hvdygpIHtcclxuICAgIERPTS5zaG93KHRoaXMuZWwpO1xyXG4gICAgdGhpcy5lbC5jbGFzc0xpc3QuYWRkKENMQVNTRVMuQ1VSUkVOVCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNb3ZlcyB0aGUgc2VjdGlvbiB0byB0aGUgYm90dG9tIG9mIHRoZSBzZWN0aW9uJ3MgbGlzdC5cclxuICAgKi9cclxuICBtb3ZlQWZ0ZXJMYXN0KCkge1xyXG4gICAgY29uc3QgbGFzdCA9IHRoaXMucGFyZW50LmNoaWxkTm9kZXNbdGhpcy5wYXJlbnQuY2hpbGRFbGVtZW50Q291bnQgLSAxXTtcclxuXHJcbiAgICB0aGlzLnBhcmVudC5pbnNlcnRCZWZvcmUodGhpcy5lbCwgbGFzdC5uZXh0U2libGluZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNb3ZlcyB0aGUgc2VjdGlvbiB0byB0aGUgdG9wIG9mIHRoZSBzZWN0aW9uJ3MgbGlzdC5cclxuICAgKi9cclxuICBtb3ZlQmVmb3JlRmlyc3QoKSB7XHJcbiAgICBjb25zdCBmaXJzdCA9IHRoaXMucGFyZW50LmNoaWxkTm9kZXNbMF07XHJcblxyXG4gICAgdGhpcy5wYXJlbnQuaW5zZXJ0QmVmb3JlKHRoaXMuZWwsIGZpcnN0KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyB3aGV0aGVyIGFuIGVsZW1lbnQgaXMgYSB2YWxpZCBjYW5kaWRhdGUgdG8gYmUgYSBzbGlkZSBieSBlbnN1cmluZ1xyXG4gICAqIGl0J3MgYSBcInNlY3Rpb25cIiBlbGVtZW50LlxyXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWwgRWxlbWVudCB0byBiZSBjaGVja2VkLlxyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgaXMgY2FuZGlkYXRlIG9yIG5vdC5cclxuICAgKi9cclxuICBzdGF0aWMgaXNDYW5kaWRhdGUoZWwpIHtcclxuICAgIHJldHVybiBlbC5ub2RlVHlwZSA9PT0gMSAmJiBlbC50YWdOYW1lID09PSAnU0VDVElPTic7XHJcbiAgfVxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2pzL21vZHVsZXMvc2xpZGUuanMiLCJjb25zdCBDTElDS0FCTEVfRUxTID0gW1xyXG4gICdJTlBVVCcsXHJcbiAgJ1NFTEVDVCcsXHJcbiAgJ09QVElPTicsXHJcbiAgJ0JVVFRPTicsXHJcbiAgJ0EnLFxyXG4gICdURVhUQVJFQSdcclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENsaWNrTmF2IHtcclxuICAvKipcclxuICAgKiBDbGlja05hdiBwbHVnaW4gdGhhdCBhbGxvd3MgdG8gY2xpY2sgb24gdGhlIHBhZ2UgdG8gZ2V0IHRvIHRoZSBuZXh0IHNsaWRlLlxyXG4gICAqIEBwYXJhbSB7V2ViU2xpZGVzfSB3c0luc3RhbmNlIFRoZSBXZWJTbGlkZXMgaW5zdGFuY2VcclxuICAgKi9cclxuICBjb25zdHJ1Y3Rvcih3c0luc3RhbmNlKSB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtXZWJTbGlkZXN9XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICB0aGlzLndzXyA9IHdzSW5zdGFuY2U7XHJcblxyXG4gICAgaWYgKHdzSW5zdGFuY2Uub3B0aW9ucy5jaGFuZ2VPbkNsaWNrKSB7XHJcbiAgICAgIHRoaXMud3NfLmVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkNsaWNrXy5iaW5kKHRoaXMpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlYWN0cyB0byB0aGUgY2xpY2sgZXZlbnQuIEl0IHdpbGwgZ28gdG8gdGhlIG5leHQgc2xpZGUgdW5sZXNzIHRoZSBlbGVtZW50XHJcbiAgICogaGFzIGEgZGF0YS1wcmV2ZW50LW5hdiBhdHRyaWJ1dGUgb3IgaXMgb24gdGhlIGxpc3Qgb2YgQ0xJQ0tBQkxFX0VMUy5cclxuICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50IFRoZSBjbGljayBldmVudC5cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIG9uQ2xpY2tfKGV2ZW50KSB7XHJcbiAgICBpZiAoQ0xJQ0tBQkxFX0VMUy5pbmRleE9mKGV2ZW50LnRhcmdldC50YWdOYW1lKSA8IDAgJiZcclxuICAgICAgdHlwZW9mIGV2ZW50LnRhcmdldC5kYXRhc2V0LnByZXZlbnROYXYgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIHRoaXMud3NfLmdvTmV4dCgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9qcy9wbHVnaW5zL2NsaWNrLW5hdi5qcyIsImltcG9ydCBLZXlzIGZyb20gJy4uL3V0aWxzL2tleXMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR3JpZCB7XHJcbiAgLyoqXHJcbiAgICogR3JpZCBwbHVnaW4gdGhhdCBzaG93cyBhIGdyaWQgb24gdG9wIG9mIHRoZSBXZWJTbGlkZXMgZm9yIGVhc3kgcHJvdG90eXBpbmcuXHJcbiAgICogQHBhcmFtIHtXZWJTbGlkZXN9IHdzSW5zdGFuY2UgVGhlIFdlYlNsaWRlcyBpbnN0YW5jZVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHdzSW5zdGFuY2UpIHtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge1dlYlNsaWRlc31cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIHRoaXMud3NfID0gd3NJbnN0YW5jZTtcclxuXHJcbiAgICBjb25zdCBDU1MgPSBgYm9keS5iYXNlbGluZSB7XHJcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHVybCguLi9pbWFnZXMvYmFzZWxpbmUucG5nKSBsZWZ0IHRvcCAuOHJlbS8uOHJlbTtcclxuICAgICAgICAgICAgICAgIH1gO1xyXG4gICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcclxuICAgIGNvbnN0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcclxuXHJcbiAgICBzdHlsZS50eXBlID0gJ3RleHQvY3NzJztcclxuXHJcbiAgICBpZiAoc3R5bGUuc3R5bGVTaGVldCl7XHJcbiAgICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IENTUztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKENTUykpO1xyXG4gICAgfVxyXG5cclxuICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xyXG5cclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLm9uS2V5UHJlc3NfLmJpbmQodGhpcyksIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlYWN0cyB0byB0aGUga2V5ZG93biBldmVudC4gSXQgcmVhY3RzIHRvIEVOVEVSIGtleSB0byB0b2dnbGUgdGhlIGNsYXNzLlxyXG4gICAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZXZlbnQgVGhlIGtleSBldmVudC5cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIG9uS2V5UHJlc3NfKGV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQud2hpY2ggPT09IEtleXMuRU5URVIpIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS50b2dnbGVDbGFzcygnYmFzZWxpbmUnKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vanMvcGx1Z2lucy9ncmlkLmpzIiwiY29uc3QgSEFTSCA9ICcjc2xpZGUnO1xyXG5jb25zdCBzbGlkZVJlZ2V4ID0gLyNzbGlkZT0oXFxkKykvO1xyXG5cclxuLyoqXHJcbiAqIFN0YXRpYyBjbGFzcyB3aXRoIG1ldGhvZHMgdG8gbWFuaXB1bGF0ZSBhbmQgZXh0cmFjdCBpbmZvIGZyb20gdGhlIGhhc2ggb2ZcclxuICogdGhlIFVSTC5cclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhhc2gge1xyXG4gIC8qKlxyXG4gICAqIExpc3RlbnMgdG8gdGhlIHNsaWRlIGNoYW5nZSBldmVudCBhbmQgdGhlIGhhc2ggY2hhbmdlIGV2ZW50cy5cclxuICAgKiBAcGFyYW0gd3NJbnN0YW5jZVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHdzSW5zdGFuY2UpIHtcclxuICAgIHRoaXMud3NfID0gd3NJbnN0YW5jZTtcclxuXHJcbiAgICB3c0luc3RhbmNlLmVsLmFkZEV2ZW50TGlzdGVuZXIoJ3dzOnNsaWRlLWNoYW5nZScsIEhhc2gub25TbGlkZUNoYW5nZV8pO1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2hhc2hjaGFuZ2UnLCB0aGlzLm9uSGFzaENoYW5nZV8uYmluZCh0aGlzKSwgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogaGFzaGNoYW5nZSBldmVudCBoYW5kbGVyLCBtYWtlcyB0aGUgV2ViU2xpZGUgaW5zdGFuY2UgbmF2aWdhdGUgdG8gdGhlXHJcbiAgICogbmVlZGVkIHNsaWRlLlxyXG4gICAqL1xyXG4gIG9uSGFzaENoYW5nZV8oKSB7XHJcbiAgICBjb25zdCBuZXdTbGlkZUluZGV4ID0gSGFzaC5nZXRTbGlkZU51bWJlcigpO1xyXG5cclxuICAgIGlmIChuZXdTbGlkZUluZGV4ICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMud3NfLmdvVG9TbGlkZShuZXdTbGlkZUluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBvblNsaWRlQ2hhbmdlXyhldmVudCkge1xyXG4gICAgSGFzaC5zZXRTbGlkZU51bWJlcihldmVudC5kZXRhaWwuY3VycmVudFNsaWRlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHNsaWRlIG51bWJlciBmcm9tIHRoZSBoYXNoIGJ5IGEgcmVnZXggbWF0Y2hpbmcgYCNzbGlkZT1gIGFuZCBnZXRzXHJcbiAgICogdGhlIG51bWJlciBhZnRlciBpdC4gSWYgdGhlIG51bWJlciBpcyBpbnZhbGlkIG9yIGxlc3MgdGhhbiAwLCBpdCB3aWxsXHJcbiAgICogcmV0dXJuIG51bGwgYXMgYW4gaW52YWxpZCB2YWx1ZS5cclxuICAgKiBAcmV0dXJuIHs/bnVtYmVyfVxyXG4gICAqL1xyXG4gIHN0YXRpYyBnZXRTbGlkZU51bWJlcigpIHtcclxuICAgIGxldCByZXN1bHRzID0gZG9jdW1lbnQubG9jYXRpb24uaGFzaC5tYXRjaChzbGlkZVJlZ2V4KTtcclxuICAgIGxldCBzbGlkZSA9IDA7XHJcblxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0cykpIHtcclxuICAgICAgc2xpZGUgPSBwYXJzZUludChyZXN1bHRzWzFdLCAxMCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBzbGlkZSAhPT0gJ251bWJlcicgfHwgc2xpZGUgPCAwIHx8ICFBcnJheS5pc0FycmF5KHJlc3VsdHMpKSB7XHJcbiAgICAgIHNsaWRlID0gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNsaWRlLS07IC8vIENvbnZlcnQgdG8gMCBpbmRleFxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzbGlkZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEl0IHdpbGwgdXBkYXRlIHRoZSBoYXNoIChpZiBpdCdzIGRpZmZlcmVudCkgc28gaXQgcmVmbGVjdHMgdGhlIHNsaWRlXHJcbiAgICogbnVtYmVyIGJlaW5nIHZpc2libGUuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIG9mIHRoZSBzbGlkZSB3ZSdyZSB0cmFuc2l0aW9uaW5nIHRvLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBzZXRTbGlkZU51bWJlcihudW1iZXIpIHtcclxuICAgIGlmIChIYXNoLmdldFNsaWRlTnVtYmVyKCkgIT09IChudW1iZXIgLSAxKSkge1xyXG4gICAgICBoaXN0b3J5LnB1c2hTdGF0ZSh7XHJcbiAgICAgICAgc2xpZGVJOiBudW1iZXIgLSAxXHJcbiAgICAgIH0sIGBTbGlkZSAke251bWJlcn1gLCBgJHtIQVNIfT0ke251bWJlcn1gKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vanMvcGx1Z2lucy9oYXNoLmpzIiwiaW1wb3J0IEtleXMgZnJvbSAnLi4vdXRpbHMva2V5cyc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBLZXlib2FyZCB7XHJcbiAgLyoqXHJcbiAgICogS2V5Ym9hcmQgaW50ZXJhY3Rpb24gcGx1Z2luLlxyXG4gICAqIEBwYXJhbSB7V2ViU2xpZGVzfSB3c0luc3RhbmNlIFRoZSBXZWJTbGlkZXMgaW5zdGFuY2VcclxuICAgKi9cclxuICBjb25zdHJ1Y3Rvcih3c0luc3RhbmNlKSB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtXZWJTbGlkZXN9XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICB0aGlzLndzXyA9IHdzSW5zdGFuY2U7XHJcblxyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25LZXlQcmVzc18uYmluZCh0aGlzKSwgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVhY3RzIHRvIHRoZSBrZXlkb3duIGV2ZW50LiBJdCByZWFjdHMgdG8gdGhlIGFycm93cyBhbmQgc3BhY2Uga2V5XHJcbiAgICogZGVwZW5kaW5nIG9uIHRoZSBsYXlvdXQgb2YgdGhlIHBhZ2UuXHJcbiAgICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBldmVudCBUaGUga2V5IGV2ZW50LlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgb25LZXlQcmVzc18oZXZlbnQpIHtcclxuICAgIGxldCBtZXRob2Q7XHJcbiAgICBsZXQgYXJndW1lbnQ7XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgdGhlcmUncyBhIGZvY3VzZWQgZWxlbWVudCB0aGF0IG1pZ2h0IHVzZSB0aGUga2V5Ym9hcmQuXHJcbiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICBjb25zdCBpc0NvbnRlbnRFZGl0YWJsZSA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnRcclxuICAgICAgICAgICAgLmNvbnRlbnRFZGl0YWJsZSAhPT0gJ2luaGVyaXQnO1xyXG4gICAgICBjb25zdCBpc0lucHV0ID0gWydJTlBVVCcsICdTRUxFQ1QnLCAnT1BUSU9OJywgJ1RFWFRBUkVBJ11cclxuICAgICAgICAgICAgLmluZGV4T2YoZG9jdW1lbnQuYWN0aXZlRWxlbWVudC50YWdOYW1lKSA+IC0xO1xyXG5cclxuICAgICAgaWYgKGlzSW5wdXQgfHwgaXNDb250ZW50RWRpdGFibGUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2ggKGV2ZW50LndoaWNoKSB7XHJcbiAgICAgIGNhc2UgS2V5cy5BVl9QQUdFOlxyXG4gICAgICBjYXNlIEtleXMuU1BBQ0U6XHJcbiAgICAgICAgbWV0aG9kID0gdGhpcy53c18uZ29OZXh0O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEtleXMuUkVfUEFHRTpcclxuICAgICAgICBtZXRob2QgPSB0aGlzLndzXy5nb1ByZXY7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgS2V5cy5IT01FOlxyXG4gICAgICAgIG1ldGhvZCA9IHRoaXMud3NfLmdvVG9TbGlkZTtcclxuICAgICAgICBhcmd1bWVudCA9IDA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgS2V5cy5FTkQ6XHJcbiAgICAgICAgbWV0aG9kID0gdGhpcy53c18uZ29Ub1NsaWRlO1xyXG4gICAgICAgIGFyZ3VtZW50ID0gdGhpcy53c18ubWF4U2xpZGVfIC0gMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBLZXlzLkRPV046XHJcbiAgICAgICAgbWV0aG9kID0gdGhpcy53c18uaXNWZXJ0aWNhbCA/IHRoaXMud3NfLmdvTmV4dCA6IG51bGw7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgS2V5cy5VUDpcclxuICAgICAgICBtZXRob2QgPSB0aGlzLndzXy5pc1ZlcnRpY2FsID8gdGhpcy53c18uZ29QcmV2IDogbnVsbDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBLZXlzLkxFRlQ6XHJcbiAgICAgICAgbWV0aG9kID0gIXRoaXMud3NfLmlzVmVydGljYWwgPyB0aGlzLndzXy5nb1ByZXYgOiBudWxsO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEtleXMuUklHSFQ6XHJcbiAgICAgICAgbWV0aG9kID0gIXRoaXMud3NfLmlzVmVydGljYWwgPyB0aGlzLndzXy5nb05leHQgOiBudWxsO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChtZXRob2QpIHtcclxuICAgICAgbWV0aG9kLmNhbGwodGhpcy53c18sIGFyZ3VtZW50KTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vanMvcGx1Z2lucy9rZXlib2FyZC5qcyIsImltcG9ydCBET00gZnJvbSAnLi4vdXRpbHMvZG9tJztcclxuXHJcbmNvbnN0IEVMRU1FTlRfSUQgPSB7XHJcbiAgTkFWOiAnbmF2aWdhdGlvbicsXHJcbiAgTkVYVDogJ25leHQnLFxyXG4gIFBSRVY6ICdwcmV2aW91cycsXHJcbiAgQ09VTlRFUjogJ2NvdW50ZXInXHJcbn07XHJcblxyXG5jb25zdCBMQUJFTFMgPSB7XHJcbiAgVkVSVElDQUw6IHtcclxuICAgIE5FWFQ6ICfihpMnLFxyXG4gICAgUFJFVjogJ+KGkSdcclxuICB9LFxyXG4gIEhPUklaT05UQUw6IHtcclxuICAgIE5FWFQ6ICfihpInLFxyXG4gICAgUFJFVjogJ+KGkCdcclxuICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOYXZpZ2F0aW9uIHtcclxuICAvKipcclxuICAgKiBUaGUgTmF2aWdhdGlvbiBjb25zdHJ1Y3Rvci4gSXQnbGwgY3JlYXRlIGFsbCB0aGUgbm9kZXMgbmVlZGVkIGZvciB0aGVcclxuICAgKiBuYXZpZ2F0aW9uIHN1Y2ggYXMgdGhlIGFycm93cyBhbmQgdGhlIGNvdW50ZXIuXHJcbiAgICogQHBhcmFtIHtXZWJTbGlkZXN9IHdzSW5zdGFuY2UgVGhlIFdlYlNsaWRlcyBpbnN0YW5jZVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHdzSW5zdGFuY2UpIHtcclxuICAgIGNvbnN0IGFycm93TGFiZWxzID0gd3NJbnN0YW5jZS5pc1ZlcnRpY2FsID9cclxuICAgICAgICBMQUJFTFMuVkVSVElDQUwgOiBMQUJFTFMuSE9SSVpPTlRBTDtcclxuICAgIC8qKlxyXG4gICAgICogTmF2aWdhdGlvbiBlbGVtZW50LlxyXG4gICAgICogQHR5cGUge0VsZW1lbnR9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZWwgPSBET00uY3JlYXRlTm9kZSgnZGl2JywgJ25hdmlnYXRpb24nKTtcclxuICAgIC8qKlxyXG4gICAgICogTmV4dCBidXR0b24uXHJcbiAgICAgKiBAdHlwZSB7RWxlbWVudH1cclxuICAgICAqL1xyXG4gICAgdGhpcy5uZXh0ID0gTmF2aWdhdGlvbi5jcmVhdGVBcnJvdyhFTEVNRU5UX0lELk5FWFQsIGFycm93TGFiZWxzLk5FWFQpO1xyXG4gICAgLyoqXHJcbiAgICAgKiBQcmV2IGJ1dHRvbi5cclxuICAgICAqIEB0eXBlIHtFbGVtZW50fVxyXG4gICAgICovXHJcbiAgICB0aGlzLnByZXYgPSBOYXZpZ2F0aW9uLmNyZWF0ZUFycm93KEVMRU1FTlRfSUQuUFJFViwgYXJyb3dMYWJlbHMuUFJFVik7XHJcbiAgICAvKipcclxuICAgICAqIENvdW50ZXIgRWxlbWVudC5cclxuICAgICAqIEB0eXBlIHtFbGVtZW50fVxyXG4gICAgICovXHJcbiAgICB0aGlzLmNvdW50ZXIgPSBET00uY3JlYXRlTm9kZSgnc3BhbicsIEVMRU1FTlRfSUQuQ09VTlRFUik7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtXZWJTbGlkZXN9XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICB0aGlzLndzXyA9IHdzSW5zdGFuY2U7XHJcblxyXG4gICAgdGhpcy5lbC5hcHBlbmRDaGlsZCh0aGlzLm5leHQpO1xyXG4gICAgdGhpcy5lbC5hcHBlbmRDaGlsZCh0aGlzLnByZXYpO1xyXG4gICAgdGhpcy5lbC5hcHBlbmRDaGlsZCh0aGlzLmNvdW50ZXIpO1xyXG5cclxuICAgIHRoaXMud3NfLmVsLmFwcGVuZENoaWxkKHRoaXMuZWwpO1xyXG4gICAgdGhpcy5iaW5kRXZlbnRzXygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQmluZCBhbGwgZXZlbnRzIGZvciB0aGUgbmF2aWdhdGlvbi5cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIGJpbmRFdmVudHNfKCkge1xyXG4gICAgdGhpcy53c18uZWwuYWRkRXZlbnRMaXN0ZW5lcihcclxuICAgICAgJ3dzOnNsaWRlLWNoYW5nZScsIHRoaXMub25TbGlkZUNoYW5nZWRfLmJpbmQodGhpcykpO1xyXG4gICAgdGhpcy5uZXh0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkJ1dHRvbkNsaWNrZWRfLmJpbmQodGhpcykpO1xyXG4gICAgdGhpcy5wcmV2LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkJ1dHRvbkNsaWNrZWRfLmJpbmQodGhpcykpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgY291bnRlciBpbnNpZGUgdGhlIG5hdmlnYXRpb24uXHJcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBjdXJyZW50IEN1cnJlbnQgc2xpZGUgbnVtYmVyLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gbWF4IE1heCBzbGlkZSBudW1iZXIuXHJcbiAgICovXHJcbiAgdXBkYXRlQ291bnRlcihjdXJyZW50LCBtYXgpIHtcclxuICAgIHRoaXMuY291bnRlci50ZXh0Q29udGVudCA9IGAke2N1cnJlbnR9IC8gJHttYXh9YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYW4gYXJyb3cgdG8gbmF2aWdhdGUuXHJcbiAgICogQHBhcmFtIHshU3RyaW5nfSBpZCBEZXNpcmVkIElEIGZvciB0aGUgYXJyb3cuXHJcbiAgICogQHBhcmFtIHshU3RyaW5nfSB0ZXh0IERlc2lyZWQgdGV4dCBmb3IgdGhlIGFycm93LlxyXG4gICAqIEByZXR1cm4ge0VsZW1lbnR9IFRoZSBhcnJvdyBlbGVtZW50LlxyXG4gICAqL1xyXG4gIHN0YXRpYyBjcmVhdGVBcnJvdyhpZCwgdGV4dCkge1xyXG4gICAgY29uc3QgYXJyb3cgPSBET00uY3JlYXRlTm9kZSgnYScsIGlkLCB0ZXh0KTtcclxuICAgIGFycm93LmhyZWYgPSAnIyc7XHJcbiAgICBhcnJvdy50aXRsZSA9ICdBcnJvdyBLZXlzJztcclxuXHJcbiAgICByZXR1cm4gYXJyb3c7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTbGlkZSBDaGFuZ2UgZXZlbnQgaGFuZGxlci4gV2lsbCB1cGRhdGUgdGhlIHRleHQgb24gdGhlIG5hdmlnYXRpb24uXHJcbiAgICogQHBhcmFtIHtDdXN0b21FdmVudH0gZXZlbnRcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIG9uU2xpZGVDaGFuZ2VkXyhldmVudCkge1xyXG4gICAgdGhpcy51cGRhdGVDb3VudGVyKGV2ZW50LmRldGFpbC5jdXJyZW50U2xpZGUsIGV2ZW50LmRldGFpbC5zbGlkZXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBjbGlja3Mgb24gdGhlIG5leHQvcHJldiBidXR0b25zLlxyXG4gICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnRcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIG9uQnV0dG9uQ2xpY2tlZF8oZXZlbnQpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSB0aGlzLm5leHQpIHtcclxuICAgICAgdGhpcy53c18uZ29OZXh0KCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLndzXy5nb1ByZXYoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vanMvcGx1Z2lucy9uYXZpZ2F0aW9uLmpzIiwiaW1wb3J0IENsaWNrTmF2IGZyb20gJy4vY2xpY2stbmF2JztcclxuaW1wb3J0IEdyaWQgZnJvbSAnLi9ncmlkJztcclxuaW1wb3J0IEhhc2ggZnJvbSAnLi9oYXNoJztcclxuaW1wb3J0IEtleWJvYXJkIGZyb20gJy4va2V5Ym9hcmQnO1xyXG5pbXBvcnQgTmF2aWdhdGlvbiBmcm9tICcuL25hdmlnYXRpb24nO1xyXG5pbXBvcnQgU2Nyb2xsIGZyb20gJy4vc2Nyb2xsJztcclxuaW1wb3J0IFRvdWNoIGZyb20gJy4vdG91Y2gnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIENsaWNrTmF2LFxyXG4gIEdyaWQsXHJcbiAgSGFzaCxcclxuICBLZXlib2FyZCxcclxuICBOYXZpZ2F0aW9uLFxyXG4gIFNjcm9sbCxcclxuICBUb3VjaFxyXG59O1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9qcy9wbHVnaW5zL3BsdWdpbnMuanMiLCJpbXBvcnQgTW9iaWxlRGV0ZWN0b3IgZnJvbSAnLi4vdXRpbHMvbW9iaWxlLWRldGVjdG9yJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjcm9sbCB7XHJcbiAgLyoqXHJcbiAgICogU2Nyb2xsIGhhbmRsZXIgZm9yIHRoZSBXZWJTbGlkZXMuXHJcbiAgICogQHBhcmFtIHtXZWJTbGlkZXN9IHdzSW5zdGFuY2UgVGhlIFdlYlNsaWRlcyBpbnN0YW5jZVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHdzSW5zdGFuY2UpIHtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge1dlYlNsaWRlc31cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIHRoaXMud3NfID0gd3NJbnN0YW5jZTtcclxuICAgIC8qKlxyXG4gICAgICogV2hlcmUgdGhlIHNjcm9sbCBpcyBnb2luZyB0byBoYXBwZW4uIFRoZSBXZWJTbGlkZXMgZWxlbWVudC5cclxuICAgICAqIEB0eXBlIHtFbGVtZW50fVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgdGhpcy5zY3JvbGxDb250YWluZXJfID0gd3NJbnN0YW5jZS5lbDtcclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciBtb3ZlbWVudCBpcyBoYXBwZW5pbmcgdXAgb3IgZG93bi5cclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgdGhpcy5pc0dvaW5nVXBfID0gZmFsc2U7XHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgbW92ZW1lbnQgaXMgaGFwcGVuaW5nIGxlZnQgb3IgcmlnaHQuXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIHRoaXMuaXNHb2luZ0xlZnRfID0gZmFsc2U7XHJcbiAgICAvKipcclxuICAgICAqIFRpbWVvdXQgaWQgaG9sZGVyLlxyXG4gICAgICogQHR5cGUgez9udW1iZXJ9XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICB0aGlzLnRpbWVvdXRfID0gbnVsbDtcclxuXHJcbiAgICBpZiAoIU1vYmlsZURldGVjdG9yLmlzQW55KCkpIHtcclxuICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lcl8uYWRkRXZlbnRMaXN0ZW5lcihcclxuICAgICAgICAgICAgJ3doZWVsJywgdGhpcy5vbk1vdXNlV2hlZWxfLmJpbmQodGhpcykpO1xyXG5cclxuICAgICAgICBpZiAoIXdzSW5zdGFuY2UuaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgICAgd3NJbnN0YW5jZS5lbC5hZGRFdmVudExpc3RlbmVyKFxyXG4gICAgICAgICAgICAgICd3czpzbGlkZS1jaGFuZ2UnLCB0aGlzLm9uU2xpZGVDaGFuZ2VfLmJpbmQodGhpcykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gdGhlIHNsaWRlcyBjaGFuZ2UsIHNldCBhbiBpbm5lciB0aW1lb3V0IHRvIGF2b2lkIHByZW1hdHVyZWx5XHJcbiAgICogY2hhbmdpbmcgdG8gdGhlIG5leHQgc2xpZGUgYWdhaW4uXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBvblNsaWRlQ2hhbmdlXygpIHtcclxuICAgIHRoaXMudGltZW91dF8gPSBzZXRUaW1lb3V0KFxyXG4gICAgICAgICgpID0+IHsgdGhpcy50aW1lb3V0XyA9IG51bGw7IH0sXHJcbiAgICAgICAgdGhpcy53c18ub3B0aW9ucy5zY3JvbGxXYWl0KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlYWN0cyB0byB0aGUgd2hlZWwgZXZlbnQuIERldGVjdHMgd2hldGhlciBpcyBnb2luZyB1cCBvciBkb3duIGFuZCBkZWNpZGVzXHJcbiAgICogaWYgaXQgbmVlZHMgdG8gbW92ZSB0aGUgc2xpZGUgYmFzZWQgb24gdGhlIGFtb3VudCBvZiBkZWx0YS5cclxuICAgKiBAcGFyYW0ge1doZWVsRXZlbnR9IGV2ZW50IFRoZSBXaGVlbCBFdmVudC5cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIG9uTW91c2VXaGVlbF8oZXZlbnQpIHtcclxuICAgIGlmICh0aGlzLndzXy5pc01vdmluZyB8fCB0aGlzLnRpbWVvdXRfKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB7IGRlbHRhWTogd2hlZWxEZWx0YVksIGRlbHRhWDogd2hlZWxEZWx0YVggfSA9IGV2ZW50O1xyXG4gICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMud3NfLmlzVmVydGljYWw7XHJcbiAgICBjb25zdCBpc0hvcml6b250YWxNb3ZlbWVudCA9IE1hdGguYWJzKHdoZWVsRGVsdGFYKSA+IE1hdGguYWJzKHdoZWVsRGVsdGFZKTtcclxuICAgIHRoaXMuaXNHb2luZ1VwXyA9IHdoZWVsRGVsdGFZIDwgMDtcclxuICAgIHRoaXMuaXNHb2luZ0xlZnRfID0gd2hlZWxEZWx0YVggPCAwO1xyXG5cclxuXHJcbiAgICAvLyBJZiB3ZSdyZSBtYWlubHkgbW92aW5nIGhvcml6b250YWxseSwgcHJldmVudCBkZWZhdWx0XHJcbiAgICBpZiAoaXNIb3Jpem9udGFsTW92ZW1lbnQpIHtcclxuICAgICAgaWYgKCFpc1ZlcnRpY2FsKSB7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBJZiB3ZSdyZSBtb3ZpbmcgaG9yaXpvbnRhbGx5IGJ1dCB0aGlzIGlzIHZlcnRpY2FsLCByZXR1cm4gdG8gYXZvaWRcclxuICAgICAgICAvLyB1bndhbnRlZCBuYXZpZ2F0aW9uLlxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChNYXRoLmFicyh3aGVlbERlbHRhWSkgPj0gdGhpcy53c18ub3B0aW9ucy5taW5XaGVlbERlbHRhIHx8XHJcbiAgICAgICAgTWF0aC5hYnMod2hlZWxEZWx0YVgpID49IHRoaXMud3NfLm9wdGlvbnMubWluV2hlZWxEZWx0YSkge1xyXG4gICAgICBpZiAoKGlzSG9yaXpvbnRhbE1vdmVtZW50ICYmIHRoaXMuaXNHb2luZ0xlZnRfKSB8fFxyXG4gICAgICAgICAgKCFpc0hvcml6b250YWxNb3ZlbWVudCAmJiB0aGlzLmlzR29pbmdVcF8pKSB7XHJcbiAgICAgICAgdGhpcy53c18uZ29QcmV2KCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy53c18uZ29OZXh0KCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG59O1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9qcy9wbHVnaW5zL3Njcm9sbC5qcyIsImltcG9ydCBNb2JpbGVEZXRlY3RvciBmcm9tICcuLi91dGlscy9tb2JpbGUtZGV0ZWN0b3InO1xyXG5cclxuY29uc3QgRVZFTlRTID0ge1xyXG4gIHRvdWNoOiB7XHJcbiAgICBTVEFSVDogJ3RvdWNoc3RhcnQnLFxyXG4gICAgTU9WRTogJ3RvdWNobW92ZScsXHJcbiAgICBFTkQ6ICd0b3VjaGVuZCdcclxuICB9LFxyXG4gIHBvaW50ZXI6IHtcclxuICAgIFNUQVJUOiAncG9pbnRlcmRvd24nLFxyXG4gICAgTU9WRTogJ3BvaW50ZXJtb3ZlJyxcclxuICAgIEVORDogJ3BvaW50ZXJ1cCdcclxuICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb3VjaCB7XHJcbiAgLyoqXHJcbiAgICogQHBhcmFtIHtXZWJTbGlkZXN9IHdzSW5zdGFuY2UgVGhlIFdlYlNsaWRlcyBpbnN0YW5jZVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHdzSW5zdGFuY2UpIHtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge1dlYlNsaWRlc31cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIHRoaXMud3NfID0gd3NJbnN0YW5jZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0YXJ0IHBvc2l0aW9uIGZvciB0aGUgWCBjb29yZC5cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICB0aGlzLnN0YXJ0WF8gPSAwO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RhcnQgcG9zaXRpb24gZm9yIHRoZSBZIGNvb3JkLlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIHRoaXMuc3RhcnRZXyA9IDA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdGFydCBwb3NpdGlvbiBmb3IgdGhlIFggY29vcmQuXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgdGhpcy5lbmRYXyA9IDA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdGFydCBwb3NpdGlvbiBmb3IgdGhlIFkgY29vcmQuXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgdGhpcy5lbmRZXyA9IDA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGV0aGVyIGlzIGVuYWJsZWQgb3Igbm90LiBPbmx5IGVuYWJsZWQgZm9yIHRvdWNoIGRldmljZXMuXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIHRoaXMuaXNFbmFibGVkID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGV2ZW50cztcclxuXHJcbiAgICBpZiAoTW9iaWxlRGV0ZWN0b3IuaXNBbnkoKSkge1xyXG4gICAgICAvLyBMaWtlbHkgSUVcclxuICAgICAgaWYgKHdpbmRvdy5Qb2ludGVyRXZlbnQgJiYgKFxyXG4gICAgICAgICAgTW9iaWxlRGV0ZWN0b3IuaXNXaW5kb3dzKCkgfHwgTW9iaWxlRGV0ZWN0b3IuaXNXaW5kb3dzUGhvbmUoKSkpIHtcclxuICAgICAgICBldmVudHMgPSBFVkVOVFMucG9pbnRlcjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBldmVudHMgPSBFVkVOVFMudG91Y2g7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuaXNFbmFibGVkID0gdHJ1ZTtcclxuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudHMuU1RBUlQsIHRoaXMub25TdGFydF8uYmluZCh0aGlzKSwgZmFsc2UpO1xyXG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50cy5NT1ZFLCB0aGlzLm9uTW92ZV8uYmluZCh0aGlzKSwgZmFsc2UpO1xyXG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50cy5NT1ZFLCB0aGlzLm9uTW92ZV8uYmluZCh0aGlzKSwgZmFsc2UpO1xyXG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50cy5FTkQsIHRoaXMub25TdG9wXy5iaW5kKHRoaXMpLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdGFydCB0b3VjaCBoYW5kbGVyLiBTYXZlcyBzdGFydGluZyBwb2ludHMuXHJcbiAgICogQHBhcmFtIGV2ZW50XHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBvblN0YXJ0XyhldmVudCkge1xyXG4gICAgY29uc3QgaW5mbyA9IFRvdWNoLm5vcm1hbGl6ZUV2ZW50SW5mbyhldmVudCk7XHJcblxyXG4gICAgdGhpcy5zdGFydFhfID0gaW5mby54O1xyXG4gICAgdGhpcy5zdGFydFlfID0gaW5mby55O1xyXG4gICAgdGhpcy5lbmRYXyA9IGluZm8ueDtcclxuICAgIHRoaXMuZW5kWV8gPSBpbmZvLnk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNb3ZlIHRvdWNoIGhhbmRsZXIuIFNhdmVzIGVuZCBwb2ludHMuXHJcbiAgICogQHBhcmFtIGV2ZW50XHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBvbk1vdmVfKGV2ZW50KSB7XHJcbiAgICBjb25zdCBpbmZvID0gVG91Y2gubm9ybWFsaXplRXZlbnRJbmZvKGV2ZW50KTtcclxuXHJcbiAgICB0aGlzLmVuZFhfID0gaW5mby54O1xyXG4gICAgdGhpcy5lbmRZXyA9IGluZm8ueTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgdG91Y2ggaGFuZGxlci4gQ2hlY2tzIGlmIGl0IG5lZWRzIHRvIG1ha2UgYW55IGFjdGlvbnMuXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBvblN0b3BfKCkge1xyXG4gICAgY29uc3QgZGlmZlggPSB0aGlzLnN0YXJ0WF8gLSB0aGlzLmVuZFhfO1xyXG4gICAgY29uc3QgZGlmZlkgPSB0aGlzLnN0YXJ0WV8gLSB0aGlzLmVuZFlfO1xyXG5cclxuICAgIC8vIEl0J3MgYW4gaG9yaXpvbnRhbCBkcmFnXHJcbiAgICBpZiAoTWF0aC5hYnMoZGlmZlgpID4gTWF0aC5hYnMoZGlmZlkpKSB7XHJcbiAgICAgIGlmIChkaWZmWCA8IC10aGlzLndzXy5vcHRpb25zLnNsaWRlT2Zmc2V0KSB7XHJcbiAgICAgICAgdGhpcy53c18uZ29QcmV2KCk7XHJcbiAgICAgIH0gZWxzZSBpZihkaWZmWCA+IHRoaXMud3NfLm9wdGlvbnMuc2xpZGVPZmZzZXQpIHtcclxuICAgICAgICB0aGlzLndzXy5nb05leHQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTm9ybWFsaXplcyBhbiBldmVudCB0byBkZWFsIHdpdGggZGlmZmVyZW5jZXMgYmV0d2VlbiBQb2ludGVyRXZlbnQgYW5kXHJcbiAgICogVG91Y2hFdmVudC5cclxuICAgKiBAcGFyYW0gZXZlbnRcclxuICAgKiBAcmV0dXJuIHsqfVxyXG4gICAqL1xyXG4gIHN0YXRpYyBub3JtYWxpemVFdmVudEluZm8oZXZlbnQpIHtcclxuICAgIGxldCB4O1xyXG4gICAgbGV0IHk7XHJcbiAgICBsZXQgdG91Y2hFdmVudCA9IHsgcGFnZVggOiAwLCBwYWdlWSA6IDB9O1xyXG5cclxuICAgIGlmICh0eXBlb2YgZXZlbnQuY2hhbmdlZFRvdWNoZXMgIT09ICd1bmRlZmluZWQnKXtcclxuICAgICAgdG91Y2hFdmVudCA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIGV2ZW50Lm9yaWdpbmFsRXZlbnQgIT09ICd1bmRlZmluZWQnICYmXHJcbiAgICAgICAgdHlwZW9mIGV2ZW50Lm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXMgIT09ICd1bmRlZmluZWQnKXtcclxuICAgICAgdG91Y2hFdmVudCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF07XHJcbiAgICB9XHJcblxyXG4gICAgeCA9IGV2ZW50Lm9mZnNldFggfHwgZXZlbnQubGF5ZXJYIHx8IHRvdWNoRXZlbnQucGFnZVg7XHJcbiAgICB5ID0gZXZlbnQub2Zmc2V0WSB8fCBldmVudC5sYXllclkgfHwgdG91Y2hFdmVudC5wYWdlWTtcclxuXHJcbiAgICByZXR1cm4geyB4LCB5IH07XHJcbiAgfVxyXG59O1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9qcy9wbHVnaW5zL3RvdWNoLmpzIiwiY29uc3QgTmF0aXZlQ3VzdG9tRXZlbnQgPSB3aW5kb3cuQ3VzdG9tRXZlbnQ7XHJcblxyXG4vKipcclxuICogQ2hlY2sgZm9yIHRoZSB1c2FnZSBvZiBuYXRpdmUgc3VwcG9ydCBmb3IgQ3VzdG9tRXZlbnRzIHdoaWNoIGlzIGxhY2tpbmdcclxuICogY29tcGxldGVseSBvbiBJRS5cclxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciBpdCBjYW4gYmUgdXNlZCBvciBub3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBjYW5JdXNlTmF0aXZlQ3VzdG9tICgpIHtcclxuICB0cnkge1xyXG4gICAgY29uc3QgcCA9IG5ldyBOYXRpdmVDdXN0b21FdmVudCgndCcsIHsgZGV0YWlsOiB7IGE6ICdiJyB9IH0pO1xyXG4gICAgcmV0dXJuICAndCcgPT09IHAudHlwZSAmJiAnYicgPT09IHAuZGV0YWlsLmE7XHJcbiAgfSBjYXRjaCAoZSkge1xyXG4gIH1cclxuICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBMb3VzeSBwb2x5ZmlsbCBmb3IgdGhlIEN1c3RvbSBFdmVudCBjb25zdHJ1Y3RvciBmb3IgSUUuXHJcbiAqIEBwYXJhbSB7IXN0cmluZ30gdHlwZSBUaGUgdHlwZSBvZiB0aGUgZXZlbnQuXHJcbiAqIEBwYXJhbSB7P09iamVjdH0gcGFyYW1zIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZm9yIHRoZSBldmVudC5cclxuICogQHJldHVybiB7RXZlbnR9XHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKi9cclxuY29uc3QgSUVDdXN0b21FdmVudCA9IGZ1bmN0aW9uIEN1c3RvbUV2ZW50KHR5cGUsIHBhcmFtcykge1xyXG4gIGNvbnN0IGUgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnQ3VzdG9tRXZlbnQnKTtcclxuXHJcbiAgaWYgKHBhcmFtcykge1xyXG4gICAgZS5pbml0Q3VzdG9tRXZlbnQodHlwZSwgcGFyYW1zLmJ1YmJsZXMsIHBhcmFtcy5jYW5jZWxhYmxlLCBwYXJhbXMuZGV0YWlsKTtcclxuICB9IGVsc2Uge1xyXG4gICAgZS5pbml0Q3VzdG9tRXZlbnQodHlwZSwgZmFsc2UsIGZhbHNlLCB1bmRlZmluZWQpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGU7XHJcbn07XHJcblxyXG5jb25zdCBXU0N1c3RvbUV2ZW50ID0gY2FuSXVzZU5hdGl2ZUN1c3RvbSgpID8gTmF0aXZlQ3VzdG9tRXZlbnQgOiBJRUN1c3RvbUV2ZW50O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgV1NDdXN0b21FdmVudDtcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vanMvdXRpbHMvY3VzdG9tLWV2ZW50LmpzIiwiLyoqXHJcbiAqIFN3aW5nIGVhc2luZyBmdW5jdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IHAgVGhlIHBlcmNlbnRhZ2Ugb2YgdGltZSB0aGF0IGhhcyBwYXNzZWQuXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcbmZ1bmN0aW9uIHN3aW5nIChwKSB7XHJcbiAgcmV0dXJuIDAuNSAtIE1hdGguY29zKHAgKiBNYXRoLlBJKSAvIDI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBMaW5lYXIgZWFzaW5nIGZ1bmN0aW9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gcCBUaGUgcGVyY2VudGFnZSBvZiB0aW1lIHRoYXQgaGFzIHBhc3NlZC5cclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuZnVuY3Rpb24gbGluZWFyKHApIHtcclxuICByZXR1cm4gcDtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgeyBzd2luZywgbGluZWFyIH07XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2pzL3V0aWxzL2Vhc2luZy5qcyIsImltcG9ydCBFYXNpbmdzIGZyb20gJy4vZWFzaW5nJztcclxuXHJcbmxldCBTQ1JPTExBQkxFX0NPTlRBSU5FUiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3ZWJzbGlkZXMnKTtcclxuXHJcbi8qKlxyXG4gKiBTbW9vdGhseSBzY3JvbGxzIHRvIGEgZ2l2ZW4gWSBwb3NpdGlvbiB1c2luZyBFYXNpbmcuU3dpbmcuIEl0J2xsIHJ1biBhXHJcbiAqIGNhbGxiYWNrIHVwb24gZmluaXNoaW5nLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSBPZmZzZXQgb2YgdGhlIHBhZ2UgdG8gc2Nyb2xsIHRvLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZHVyYXRpb24gRHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbi4gNTAwbXMgYnkgZGVmYXVsdC5cclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2IgQ2FsbGJhY2sgZnVuY3Rpb24gdG8gY2FsbCB1cG9uIGNvbXBsZXRpb24uXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzY3JvbGxUbyh5LCBkdXJhdGlvbiA9IDUwMCwgY2IgPSAoKSA9PiB7fSkge1xyXG4gIGNvbnN0IGRlbHRhID0geSAtIFNDUk9MTEFCTEVfQ09OVEFJTkVSLnNjcm9sbFRvcDtcclxuICBjb25zdCBzdGFydExvY2F0aW9uID0gU0NST0xMQUJMRV9DT05UQUlORVIuc2Nyb2xsVG9wO1xyXG4gIGNvbnN0IGluY3JlbWVudCA9IDE2O1xyXG5cclxuICBpZiAoIWR1cmF0aW9uKSB7XHJcbiAgICBTQ1JPTExBQkxFX0NPTlRBSU5FUi5zY3JvbGxUb3AgPSB5O1xyXG4gICAgY2IoKTtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGNvbnN0IGFuaW1hdGVTY3JvbGwgPSBlbGFwc2VkVGltZSA9PiB7XHJcbiAgICBlbGFwc2VkVGltZSArPSBpbmNyZW1lbnQ7XHJcbiAgICBjb25zdCBwZXJjZW50ID0gTWF0aC5taW4oMSwgZWxhcHNlZFRpbWUgLyBkdXJhdGlvbik7XHJcbiAgICBjb25zdCBlYXNpbmdQID0gRWFzaW5ncy5zd2luZyhcclxuICAgICAgcGVyY2VudCxcclxuICAgICAgZWxhcHNlZFRpbWUgKiBwZXJjZW50LFxyXG4gICAgICB5LFxyXG4gICAgICBkZWx0YSxcclxuICAgICAgZHVyYXRpb24pO1xyXG5cclxuICAgIFNDUk9MTEFCTEVfQ09OVEFJTkVSLnNjcm9sbFRvcCA9IE1hdGguZmxvb3Ioc3RhcnRMb2NhdGlvbiArXHJcbiAgICAgICAgKGVhc2luZ1AgKiBkZWx0YSkpO1xyXG5cclxuICAgIGlmIChlbGFwc2VkVGltZSA8IGR1cmF0aW9uKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gYW5pbWF0ZVNjcm9sbChlbGFwc2VkVGltZSksIGluY3JlbWVudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjYigpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGFuaW1hdGVTY3JvbGwoMCk7XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vanMvdXRpbHMvc2Nyb2xsLXRvLmpzIiwiaW1wb3J0IFdlYlNsaWRlcyBmcm9tICcuL21vZHVsZXMvd2Vic2xpZGVzJztcclxucmVxdWlyZSgnLi4vc2Nzcy9mdWxsLnNjc3MnKTtcclxuXHJcbndpbmRvdy5XZWJTbGlkZXMgPSBXZWJTbGlkZXM7XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2pzL2Z1bGwuanMiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/static/js/webslides.min.js b/static/js/webslides.min.js index cd55e8b..0cd81cc 100644 --- a/static/js/webslides.min.js +++ b/static/js/webslides.min.js @@ -1 +1,2 @@ -!function(e){function t(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,i){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:i})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="/static/js/",t(t.s=17)}([function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=n(14),s=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",i=document.createElement(e);return i.id=t,n&&(i.textContent=n),i}},{key:"hide",value:function(e){e.style.display="none"}},{key:"show",value:function(e){e.style.display=""}},{key:"fireEvent",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=new r.a(t,{detail:n});e.dispatchEvent(i)}},{key:"toArray",value:function(e){return[].slice.call(e)}}]),e}();t.a=a},function(e,t,n){"use strict";var i={ENTER:13,SPACE:32,RE_PAGE:33,AV_PAGE:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40};t.a=i},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{},n=t.autoslide,r=void 0!==n&&n,s=t.changeOnClick,a=void 0!==s&&s,o=t.minWheelDelta,l=void 0===o?40:o,c=t.scrollWait,h=void 0===c?450:c,d=t.slideOffset,f=void 0===d?50:d;if(i(this,e),this.el=document.getElementById("webslides"),this.isMoving=!1,this.slides=null,this.currentSlideI_=-1,this.currentSlide_=null,this.maxSlide_=0,this.isVertical=this.el.classList.contains(u.VERTICAL),this.plugins={},this.interval_=null,this.options={autoslide:r,changeOnClick:a,minWheelDelta:l,scrollWait:h,slideOffset:f},!this.el)throw new Error("Couldn't find the webslides container!");this.removeChildren_(),this.grabSlides_(),this.createPlugins_(),this.initSlides_(),this.play(),this.onInit_()}return l(e,[{key:"removeChildren_",value:function(){for(var e=this.el.childNodes,t=e.length;t--;){var n=e[t];s.a.isCandidate(n)||this.el.removeChild(n)}}},{key:"createPlugins_",value:function(){var e=this;Object.keys(c).forEach(function(t){var n=c[t];e.plugins[t]=new n(e)})}},{key:"onInit_",value:function(){a.a.fireEvent(this.el,"ws:init")}},{key:"grabSlides_",value:function(){this.slides=a.a.toArray(this.el.childNodes).map(function(e,t){return new s.a(e,t)}),this.maxSlide_=this.slides.length}},{key:"goToSlide",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(this.isValidIndexSlide_(e)&&!this.isMoving&&this.currentSlideI_!==e){this.isMoving=!0;var n=!1;null!==t?n=t:this.currentSlideI_>=0&&(n=e>this.currentSlideI_);var i=this.slides[e];null===this.currentSlide_||!this.isVertical||this.plugins.touch&&this.plugins.touch.isEnabled?this.transitionToSlide_(n,i,this.onSlideChange_):this.scrollTransitionToSlide_(n,i,this.onSlideChange_)}}},{key:"scrollTransitionToSlide_",value:function(e,t,i){var r=this;this.el.style.overflow="none",e?t.show():(t.moveBeforeFirst(),t.show(),n.i(o.a)(this.currentSlide_.el.offsetTop,0)),n.i(o.a)(t.el.offsetTop,500,function(){r.currentSlide_.hide(),e&&r.currentSlide_.moveAfterLast(),r.el.style.overflow="auto",setTimeout(function(){i.call(r,t)},150)})}},{key:"transitionToSlide_",value:function(e,t,i){n.i(o.a)(0,0),e||t.moveBeforeFirst(),this.currentSlide_&&(e&&this.currentSlide_.moveAfterLast(),this.currentSlide_.hide()),t.show(),i.call(this,t)}},{key:"onSlideChange_",value:function(e){this.currentSlide_=e,this.currentSlideI_=e.i,this.isMoving=!1,a.a.fireEvent(this.el,"ws:slide-change",{slides:this.maxSlide_,currentSlide0:this.currentSlideI_,currentSlide:this.currentSlideI_+1})}},{key:"goNext",value:function(){var e=this.currentSlideI_+1;e>=this.maxSlide_&&(e=0),this.goToSlide(e,!0)}},{key:"goPrev",value:function(){var e=this.currentSlideI_-1;e<0&&(e=this.maxSlide_-1),this.goToSlide(e,!1)}},{key:"isValidIndexSlide_",value:function(e){return e>=0&&e=this.maxSlide_)&&(e=0),0!==e)for(var t=0;t0&&(this.interval_=setInterval(this.goNext.bind(this),e))}},{key:"stop",value:function(){this.interval_&&(clearInterval(this.interval_),this.interval_=null)}}],[{key:"registerPlugin",value:function(e,t){c[e]=t}}]),e}();t.a=h},function(e,t){},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=n(0),s=function(){function e(e,t){for(var n=0;n-1||i)return}switch(e.which){case r.a.AV_PAGE:case r.a.SPACE:t=this.ws_.goNext;break;case r.a.RE_PAGE:t=this.ws_.goPrev;break;case r.a.HOME:t=this.ws_.goToSlide,n=0;break;case r.a.END:t=this.ws_.goToSlide,n=this.ws_.maxSlide_-1;break;case r.a.DOWN:t=this.ws_.isVertical?this.ws_.goNext:null;break;case r.a.UP:t=this.ws_.isVertical?this.ws_.goPrev:null;break;case r.a.LEFT:t=this.ws_.isVertical?null:this.ws_.goPrev;break;case r.a.RIGHT:t=this.ws_.isVertical?null:this.ws_.goNext}t&&t.call(this.ws_,n)}}]),e}();t.a=a},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=n(0),s=function(){function e(e,t){for(var n=0;nMath.abs(t);if(this.isGoingUp_=t<0,this.isGoingLeft_=n<0,r){if(i)return;e.preventDefault()}(Math.abs(t)>=this.ws_.options.minWheelDelta||Math.abs(n)>=this.ws_.options.minWheelDelta)&&(r&&this.isGoingLeft_||!r&&this.isGoingUp_?this.ws_.goPrev():this.ws_.goNext(),e.preventDefault())}}]),e}();t.a=a},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=n(2),s=function(){function e(e,t){for(var n=0;nMath.abs(t)&&(e<-this.ws_.options.slideOffset?this.ws_.goPrev():e>this.ws_.options.slideOffset&&this.ws_.goNext())}}],[{key:"normalizeEventInfo",value:function(e){var t=void 0,n=void 0,i={pageX:0,pageY:0};return void 0!==e.changedTouches?i=e.changedTouches[0]:void 0!==e.originalEvent&&void 0!==e.originalEvent.changedTouches&&(i=e.originalEvent.changedTouches[0]),t=e.offsetX||e.layerX||i.pageX,n=e.offsetY||e.layerY||i.pageY,{x:t,y:n}}}]),e}();t.a=o},function(e,t,n){"use strict";function i(){try{var e=new r("t",{detail:{a:"b"}});return"t"===e.type&&"b"===e.detail.a}catch(e){}return!1}var r=window.CustomEvent,s=function(e,t){var n=document.createEvent("CustomEvent");return t?n.initCustomEvent(e,t.bubbles,t.cancelable,t.detail):n.initCustomEvent(e,!1,!1,void 0),n},a=i()?r:s;t.a=a},function(e,t,n){"use strict";function i(e){return.5-Math.cos(e*Math.PI)/2}function r(e){return e}t.a={swing:i,linear:r}},function(e,t,n){"use strict";function i(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:500,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},i=e-s.scrollTop,a=s.scrollTop,o=16;if(!t)return s.scrollTop=e,void n();!function l(u){u+=o;var c=Math.min(1,u/t),h=r.a.swing(c,u*c,e,i,t);s.scrollTop=Math.floor(a+h*i),u1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",i=document.createElement(e);return i.id=t,n&&(i.textContent=n),i}},{key:"hide",value:function(e){e.style.display="none"}},{key:"show",value:function(e){e.style.display=""}},{key:"fireEvent",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=new s.a(t,{detail:n});e.dispatchEvent(i)}},{key:"toArray",value:function(e){return[].slice.call(e)}}]),e}();t.a=o},function(e,t,n){"use strict";var i={ENTER:13,SPACE:32,RE_PAGE:33,AV_PAGE:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40};t.a=i},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var s=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{},n=t.autoslide,s=void 0!==n&&n,r=t.changeOnClick,o=void 0!==r&&r,a=t.minWheelDelta,l=void 0===a?40:a,c=t.scrollWait,d=void 0===c?450:c,h=t.slideOffset,f=void 0===h?50:h;if(i(this,e),this.el=document.getElementById("webslides"),this.isMoving=!1,this.slides=null,this.currentSlideI_=-1,this.currentSlide_=null,this.maxSlide_=0,this.isVertical=this.el.classList.contains(u.VERTICAL),this.plugins={},this.interval_=null,this.options={autoslide:s,changeOnClick:o,minWheelDelta:l,scrollWait:d,slideOffset:f},!this.el)throw new Error("Couldn't find the webslides container!");this.removeChildren_(),this.grabSlides_(),this.createPlugins_(),this.initSlides_(),this.play(),this.onInit_()}return l(e,[{key:"removeChildren_",value:function(){for(var e=this.el.childNodes,t=e.length;t--;){var n=e[t];r.a.isCandidate(n)||this.el.removeChild(n)}}},{key:"createPlugins_",value:function(){var e=this;Object.keys(c).forEach(function(t){var n=c[t];e.plugins[t]=new n(e)})}},{key:"onInit_",value:function(){o.a.fireEvent(this.el,"ws:init")}},{key:"grabSlides_",value:function(){this.slides=o.a.toArray(this.el.childNodes).map(function(e,t){return new r.a(e,t)}),this.maxSlide_=this.slides.length}},{key:"goToSlide",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(this.isValidIndexSlide_(e)&&!this.isMoving&&this.currentSlideI_!==e){this.isMoving=!0;var n=!1;null!==t?n=t:this.currentSlideI_>=0&&(n=e>this.currentSlideI_);var i=this.slides[e];null===this.currentSlide_||!this.isVertical||this.plugins.touch&&this.plugins.touch.isEnabled?this.transitionToSlide_(n,i,this.onSlideChange_):this.scrollTransitionToSlide_(n,i,this.onSlideChange_)}}},{key:"scrollTransitionToSlide_",value:function(e,t,i){var s=this;this.el.style.overflow="none",e?t.show():(t.moveBeforeFirst(),t.show(),n.i(a.a)(this.currentSlide_.el.offsetTop,0)),n.i(a.a)(t.el.offsetTop,500,function(){s.currentSlide_.hide(),e&&s.currentSlide_.moveAfterLast(),s.el.style.overflow="auto",setTimeout(function(){i.call(s,t)},150)})}},{key:"transitionToSlide_",value:function(e,t,i){n.i(a.a)(0,0),e||t.moveBeforeFirst(),this.currentSlide_&&(e&&this.currentSlide_.moveAfterLast(),this.currentSlide_.hide()),t.show(),i.call(this,t)}},{key:"onSlideChange_",value:function(e){this.currentSlide_=e,this.currentSlideI_=e.i,this.isMoving=!1,o.a.fireEvent(this.el,"ws:slide-change",{slides:this.maxSlide_,currentSlide0:this.currentSlideI_,currentSlide:this.currentSlideI_+1})}},{key:"goNext",value:function(){var e=this.currentSlideI_+1;e>=this.maxSlide_&&(e=0),this.goToSlide(e,!0)}},{key:"goPrev",value:function(){var e=this.currentSlideI_-1;e<0&&(e=this.maxSlide_-1),this.goToSlide(e,!1)}},{key:"isValidIndexSlide_",value:function(e){return e>=0&&e=this.maxSlide_)&&(e=0),0!==e)for(var t=0;t0&&(this.interval_=setInterval(this.goNext.bind(this),e))}},{key:"stop",value:function(){this.interval_&&(clearInterval(this.interval_),this.interval_=null)}}],[{key:"registerPlugin",value:function(e,t){c[e]=t}}]),e}();t.a=d},function(e,t){throw new Error("Module build failed: ModuleBuildError: Module build failed: No input specified: provide a file name or a source string to process\n at C:\\Projects\\Github\\webslides\\node_modules\\webpack\\lib\\NormalModule.js:141:35\n at C:\\Projects\\Github\\webslides\\node_modules\\loader-runner\\lib\\LoaderRunner.js:364:11\n at C:\\Projects\\Github\\webslides\\node_modules\\loader-runner\\lib\\LoaderRunner.js:230:18\n at context.callback (C:\\Projects\\Github\\webslides\\node_modules\\loader-runner\\lib\\LoaderRunner.js:111:13)\n at Object.asyncSassJobQueue.push [as callback] (C:\\Projects\\Github\\webslides\\node_modules\\sass-loader\\lib\\loader.js:51:13)\n at C:\\Projects\\Github\\webslides\\node_modules\\async\\dist\\async.js:2237:31\n at apply (C:\\Projects\\Github\\webslides\\node_modules\\async\\dist\\async.js:20:25)\n at C:\\Projects\\Github\\webslides\\node_modules\\async\\dist\\async.js:56:12\n at C:\\Projects\\Github\\webslides\\node_modules\\async\\dist\\async.js:843:16\n at module.exports.render (C:\\Projects\\Github\\webslides\\node_modules\\node-sass\\lib\\index.js:375:5)\n at C:\\Projects\\Github\\webslides\\node_modules\\async\\dist\\async.js:3894:5\n at process (C:\\Projects\\Github\\webslides\\node_modules\\async\\dist\\async.js:2309:17)\n at Immediate. (C:\\Projects\\Github\\webslides\\node_modules\\async\\dist\\async.js:2115:16)\n at runCallback (timers.js:649:20)\n at tryOnImmediate (timers.js:622:5)\n at processImmediate [as _immediateCallback] (timers.js:594:5)")},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var s=n(0),r=function(){function e(e,t){for(var n=0;n-1||i)return}switch(e.which){case s.a.AV_PAGE:case s.a.SPACE:t=this.ws_.goNext;break;case s.a.RE_PAGE:t=this.ws_.goPrev;break;case s.a.HOME:t=this.ws_.goToSlide,n=0;break;case s.a.END:t=this.ws_.goToSlide,n=this.ws_.maxSlide_-1;break;case s.a.DOWN:t=this.ws_.isVertical?this.ws_.goNext:null;break;case s.a.UP:t=this.ws_.isVertical?this.ws_.goPrev:null;break;case s.a.LEFT:t=this.ws_.isVertical?null:this.ws_.goPrev;break;case s.a.RIGHT:t=this.ws_.isVertical?null:this.ws_.goNext}t&&t.call(this.ws_,n)}}]),e}();t.a=o},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var s=n(0),r=function(){function e(e,t){for(var n=0;nMath.abs(t);if(this.isGoingUp_=t<0,this.isGoingLeft_=n<0,s){if(i)return;e.preventDefault()}(Math.abs(t)>=this.ws_.options.minWheelDelta||Math.abs(n)>=this.ws_.options.minWheelDelta)&&(s&&this.isGoingLeft_||!s&&this.isGoingUp_?this.ws_.goPrev():this.ws_.goNext(),e.preventDefault())}}]),e}();t.a=o},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var s=n(2),r=function(){function e(e,t){for(var n=0;nMath.abs(t)&&(e<-this.ws_.options.slideOffset?this.ws_.goPrev():e>this.ws_.options.slideOffset&&this.ws_.goNext())}}],[{key:"normalizeEventInfo",value:function(e){var t=void 0,n=void 0,i={pageX:0,pageY:0};return void 0!==e.changedTouches?i=e.changedTouches[0]:void 0!==e.originalEvent&&void 0!==e.originalEvent.changedTouches&&(i=e.originalEvent.changedTouches[0]),t=e.offsetX||e.layerX||i.pageX,n=e.offsetY||e.layerY||i.pageY,{x:t,y:n}}}]),e}();t.a=a},function(e,t,n){"use strict";function i(){try{var e=new s("t",{detail:{a:"b"}});return"t"===e.type&&"b"===e.detail.a}catch(e){}return!1}var s=window.CustomEvent,r=function(e,t){var n=document.createEvent("CustomEvent");return t?n.initCustomEvent(e,t.bubbles,t.cancelable,t.detail):n.initCustomEvent(e,!1,!1,void 0),n},o=i()?s:r;t.a=o},function(e,t,n){"use strict";function i(e){return.5-Math.cos(e*Math.PI)/2}function s(e){return e}t.a={swing:i,linear:s}},function(e,t,n){"use strict";function i(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:500,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},i=e-r.scrollTop,o=r.scrollTop,a=16;if(!t)return r.scrollTop=e,void n();!function l(u){u+=a;var c=Math.min(1,u/t),d=s.a.swing(c,u*c,e,i,t);r.scrollTop=Math.floor(o+d*i),u