From 95ce3b9e3665583e3144dd7d2643bf8645a0c296 Mon Sep 17 00:00:00 2001 From: Quique Fdez Guerra Date: Mon, 6 Mar 2017 18:45:23 +0100 Subject: [PATCH 1/7] Init sass configuration #52 --- index.html | 7 +- package.json | 6 + postcss.config.js | 7 + src/js/full.js | 1 + static/css/base.css => src/scss/_base.scss | 0 .../css/colors.css => src/scss/_colors.scss | 0 src/scss/full.scss | 2 + static/css/webslides.css | 1 + static/js/webslides.js | 173 +++++++++++------- static/js/webslides.min.js | 2 +- webpack.config.babel.js | 13 +- 11 files changed, 139 insertions(+), 73 deletions(-) create mode 100644 postcss.config.js rename static/css/base.css => src/scss/_base.scss (100%) rename static/css/colors.css => src/scss/_colors.scss (100%) create mode 100644 src/scss/full.scss create mode 100644 static/css/webslides.css diff --git a/index.html b/index.html index bd29b9c..2bfd772 100644 --- a/index.html +++ b/index.html @@ -25,11 +25,8 @@ - - - - - + + diff --git a/package.json b/package.json index c193c58..14c90fc 100644 --- a/package.json +++ b/package.json @@ -28,12 +28,18 @@ }, "homepage": "https://github.com/jlantunez/webslides#readme", "devDependencies": { + "autoprefixer": "^6.7.6", "babel-cli": "^6.23.0", "babel-core": "^6.23.1", "babel-loader": "^6.3.2", "babel-preset-es2015": "^6.22.0", + "css-loader": "^0.26.2", + "extract-text-webpack-plugin": "^2.1.0", "npm-run-all": "^4.0.2", + "postcss-loader": "^1.3.3", "rimraf": "^2.6.0", + "sass-loader": "^6.0.2", + "style-loader": "^0.13.2", "webpack": "^2.2.1", "webpack-dev-server": "^2.4.1" }, diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..ab1ee60 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,7 @@ +module.exports = { + plugins: [ + require('autoprefixer')({ + browsers: ['last 2 versions'], + }) + ] +}; \ No newline at end of file diff --git a/src/js/full.js b/src/js/full.js index ad71d64..14b3b2a 100644 --- a/src/js/full.js +++ b/src/js/full.js @@ -1,3 +1,4 @@ import WebSlides from './modules/webslides'; +require('../scss/full.scss'); window.WebSlides = WebSlides; diff --git a/static/css/base.css b/src/scss/_base.scss similarity index 100% rename from static/css/base.css rename to src/scss/_base.scss diff --git a/static/css/colors.css b/src/scss/_colors.scss similarity index 100% rename from static/css/colors.css rename to src/scss/_colors.scss diff --git a/src/scss/full.scss b/src/scss/full.scss new file mode 100644 index 0000000..a7262d9 --- /dev/null +++ b/src/scss/full.scss @@ -0,0 +1,2 @@ +@import 'base'; +@import 'colors'; \ No newline at end of file diff --git a/static/css/webslides.css b/static/css/webslides.css new file mode 100644 index 0000000..4218f71 --- /dev/null +++ b/static/css/webslides.css @@ -0,0 +1 @@ +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 0a46daa..b4aa2d3 100644 --- a/static/js/webslides.js +++ b/static/js/webslides.js @@ -63,7 +63,7 @@ /******/ __webpack_require__.p = "/static/js/"; /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 16); +/******/ return __webpack_require__(__webpack_require__.s = 17); /******/ }) /************************************************************************/ /******/ ([ @@ -71,7 +71,7 @@ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__custom_event__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__custom_event__ = __webpack_require__(14); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -182,6 +182,10 @@ var DOM = function () { var Keys = { ENTER: 13, SPACE: 32, + RE_PAGE: 33, + AV_PAGE: 34, + END: 35, + HOME: 36, LEFT: 37, UP: 38, RIGHT: 39, @@ -294,10 +298,10 @@ var MobileDetector = function () { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__plugins_plugins__ = __webpack_require__(10); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__slide__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__plugins_plugins__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__slide__ = __webpack_require__(5); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils_dom__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__utils_scroll_to__ = __webpack_require__(15); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__utils_scroll_to__ = __webpack_require__(16); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -325,16 +329,29 @@ var PLUGINS = { var WebSlides = function () { /** * Options for WebSlides - * @param {number|boolean} autoslide Is false by default. If a number is - * @param {boolean} changeOnClick Is false by default. If true, it will allow + * @param {number|boolean} autoslide If a number is provided, it will allow + * autosliding by said amount of miliseconds. + * @param {boolean} changeOnClick If true, it will allow * clicking on any place to change the slide. + * @param {number} minWheelDelta Controls the amount of needed scroll to + * trigger navigation. + * @param {number} scrollWait Controls the amount of time to wait till + * navigation can occur again with scroll. + * @param {number} slideOffset Controls the amount of needed touch delta to + * trigger navigation. */ function WebSlides() { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref$autoslide = _ref.autoslide, autoslide = _ref$autoslide === undefined ? false : _ref$autoslide, _ref$changeOnClick = _ref.changeOnClick, - changeOnClick = _ref$changeOnClick === undefined ? false : _ref$changeOnClick; + changeOnClick = _ref$changeOnClick === undefined ? false : _ref$changeOnClick, + _ref$minWheelDelta = _ref.minWheelDelta, + minWheelDelta = _ref$minWheelDelta === undefined ? 40 : _ref$minWheelDelta, + _ref$scrollWait = _ref.scrollWait, + scrollWait = _ref$scrollWait === undefined ? 450 : _ref$scrollWait, + _ref$slideOffset = _ref.slideOffset, + slideOffset = _ref$slideOffset === undefined ? 50 : _ref$slideOffset; _classCallCheck(this, WebSlides); @@ -388,18 +405,16 @@ var WebSlides = function () { */ this.interval_ = null; /** - * Amount of time to wait to go to next slide automatically or false to - * disable the feature. - * @type {boolean|number} - * @private + * Options dictionary. + * @type {Object} */ - this.autoslide_ = autoslide; - /** - * Whether navigation should initiate on click or not. - * @type {boolean} - * @private - */ - this.changeOnClick_ = changeOnClick; + this.options = { + autoslide: autoslide, + changeOnClick: changeOnClick, + minWheelDelta: minWheelDelta, + scrollWait: scrollWait, + slideOffset: slideOffset + }; if (!this.el) { throw new Error('Couldn\'t find the webslides container!'); @@ -494,7 +509,7 @@ var WebSlides = function () { value: function goToSlide(slideI) { var forward = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - if (this.isValidIndexSlide_(slideI) && !this.isMoving) { + if (this.isValidIndexSlide_(slideI) && !this.isMoving && this.currentSlideI_ !== slideI) { this.isMoving = true; var isMovingForward = false; @@ -704,7 +719,7 @@ var WebSlides = function () { * automatically. */ value: function play(time) { - time = time || this.autoslide_; + time = time || this.options.autoslide; if (!this.interval_ && typeof time === 'number' && time > 0) { this.interval_ = setInterval(this.goNext.bind(this), time); @@ -737,6 +752,12 @@ var WebSlides = function () { /***/ }), /* 4 */ +/***/ (function(module, exports) { + +// removed by extract-text-webpack-plugin + +/***/ }), +/* 5 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -853,7 +874,7 @@ var Slide = function () { /* harmony default export */ __webpack_exports__["a"] = Slide; /***/ }), -/* 5 */ +/* 6 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -877,7 +898,7 @@ var ClickNav = function () { */ this.ws_ = wsInstance; - if (wsInstance.changeOnClick_) { + if (wsInstance.options.changeOnClick) { this.ws_.el.addEventListener('click', this.onClick_.bind(this)); } } @@ -905,7 +926,7 @@ var ClickNav = function () { /* harmony default export */ __webpack_exports__["a"] = ClickNav; /***/ }), -/* 6 */ +/* 7 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -969,7 +990,7 @@ var Grid = function () { /* harmony default export */ __webpack_exports__["a"] = Grid; /***/ }), -/* 7 */ +/* 8 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1069,7 +1090,7 @@ var Hash = function () { /* harmony default export */ __webpack_exports__["a"] = Hash; /***/ }), -/* 8 */ +/* 9 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1109,27 +1130,50 @@ var Keyboard = function () { key: 'onKeyPress_', value: function onKeyPress_(event) { var method = void 0; + var argument = void 0; - if (event.which === __WEBPACK_IMPORTED_MODULE_0__utils_keys__["a" /* default */].SPACE) { - method = this.ws_.goNext; - } else { - if (this.ws_.isVertical) { - if (event.which === __WEBPACK_IMPORTED_MODULE_0__utils_keys__["a" /* default */].DOWN) { - method = this.ws_.goNext; - } else if (event.which === __WEBPACK_IMPORTED_MODULE_0__utils_keys__["a" /* default */].UP) { - method = this.ws_.goPrev; - } - } else { - if (event.which === __WEBPACK_IMPORTED_MODULE_0__utils_keys__["a" /* default */].RIGHT) { - method = this.ws_.goNext; - } else if (event.which === __WEBPACK_IMPORTED_MODULE_0__utils_keys__["a" /* default */].LEFT) { - method = this.ws_.goPrev; - } + // Check if there's a focused element that might use the keyboard. + if (document.activeElement) { + var isContentEditable = document.activeElement.contentEditable !== 'inherit'; + var isInput = ['INPUT', 'SELECT', 'OPTION', 'TEXTAREA'].indexOf(document.activeElement.tagName) > -1; + + if (isInput || isContentEditable) { + return; } } + switch (event.which) { + case __WEBPACK_IMPORTED_MODULE_0__utils_keys__["a" /* default */].AV_PAGE: + case __WEBPACK_IMPORTED_MODULE_0__utils_keys__["a" /* default */].SPACE: + method = this.ws_.goNext; + break; + case __WEBPACK_IMPORTED_MODULE_0__utils_keys__["a" /* default */].RE_PAGE: + method = this.ws_.goPrev; + break; + case __WEBPACK_IMPORTED_MODULE_0__utils_keys__["a" /* default */].HOME: + method = this.ws_.goToSlide; + argument = 0; + break; + case __WEBPACK_IMPORTED_MODULE_0__utils_keys__["a" /* default */].END: + method = this.ws_.goToSlide; + argument = this.ws_.maxSlide_ - 1; + break; + case __WEBPACK_IMPORTED_MODULE_0__utils_keys__["a" /* default */].DOWN: + method = this.ws_.isVertical ? this.ws_.goNext : null; + break; + case __WEBPACK_IMPORTED_MODULE_0__utils_keys__["a" /* default */].UP: + method = this.ws_.isVertical ? this.ws_.goPrev : null; + break; + case __WEBPACK_IMPORTED_MODULE_0__utils_keys__["a" /* default */].LEFT: + method = !this.ws_.isVertical ? this.ws_.goPrev : null; + break; + case __WEBPACK_IMPORTED_MODULE_0__utils_keys__["a" /* default */].RIGHT: + method = !this.ws_.isVertical ? this.ws_.goNext : null; + break; + } + if (method) { - method.call(this.ws_); + method.call(this.ws_, argument); } } }]); @@ -1140,7 +1184,7 @@ var Keyboard = function () { /* harmony default export */ __webpack_exports__["a"] = Keyboard; /***/ }), -/* 9 */ +/* 10 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1292,17 +1336,17 @@ var Navigation = function () { /* harmony default export */ __webpack_exports__["a"] = Navigation; /***/ }), -/* 10 */ +/* 11 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__click_nav__ = __webpack_require__(5); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__grid__ = __webpack_require__(6); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__hash__ = __webpack_require__(7); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__keyboard__ = __webpack_require__(8); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__navigation__ = __webpack_require__(9); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__scroll__ = __webpack_require__(11); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__touch__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__click_nav__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__grid__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__hash__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__keyboard__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__navigation__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__scroll__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__touch__ = __webpack_require__(13); @@ -1322,7 +1366,7 @@ var Navigation = function () { }; /***/ }), -/* 11 */ +/* 12 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1333,8 +1377,6 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons -var MIN_WHEEL_DELTA = 40; - var Scroll = function () { /** * Scroll handler for the WebSlides. @@ -1396,7 +1438,7 @@ var Scroll = function () { this.timeout_ = setTimeout(function () { _this.timeout_ = null; - }, 450); + }, this.ws_.options.scrollWait); } /** @@ -1433,7 +1475,7 @@ var Scroll = function () { } } - if (Math.abs(wheelDeltaY) >= MIN_WHEEL_DELTA || Math.abs(wheelDeltaX) >= MIN_WHEEL_DELTA) { + if (Math.abs(wheelDeltaY) >= this.ws_.options.minWheelDelta || Math.abs(wheelDeltaX) >= this.ws_.options.minWheelDelta) { if (isHorizontalMovement && this.isGoingLeft_ || !isHorizontalMovement && this.isGoingUp_) { this.ws_.goPrev(); } else { @@ -1452,7 +1494,7 @@ var Scroll = function () { ; /***/ }), -/* 12 */ +/* 13 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1476,8 +1518,6 @@ var EVENTS = { } }; -var SLIDE_OFFSET = 50; - var Touch = function () { /** * @param {WebSlides} wsInstance The WebSlides instance @@ -1590,9 +1630,9 @@ var Touch = function () { // It's an horizontal drag if (Math.abs(diffX) > Math.abs(diffY)) { - if (diffX < -SLIDE_OFFSET) { + if (diffX < -this.ws_.options.slideOffset) { this.ws_.goPrev(); - } else if (diffX > SLIDE_OFFSET) { + } else if (diffX > this.ws_.options.slideOffset) { this.ws_.goNext(); } } @@ -1632,7 +1672,7 @@ var Touch = function () { ; /***/ }), -/* 13 */ +/* 14 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1675,7 +1715,7 @@ var WSCustomEvent = canIuseNativeCustom() ? NativeCustomEvent : IECustomEvent; /* harmony default export */ __webpack_exports__["a"] = WSCustomEvent; /***/ }), -/* 14 */ +/* 15 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1700,11 +1740,11 @@ function linear(p) { /* harmony default export */ __webpack_exports__["a"] = { swing: swing, linear: linear }; /***/ }), -/* 15 */ +/* 16 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__easing__ = __webpack_require__(14); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__easing__ = __webpack_require__(15); /* harmony export (immutable) */ __webpack_exports__["a"] = scrollTo; @@ -1751,13 +1791,14 @@ function scrollTo(y) { } /***/ }), -/* 16 */ +/* 17 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__modules_webslides__ = __webpack_require__(3); +__webpack_require__(4); window.WebSlides = __WEBPACK_IMPORTED_MODULE_0__modules_webslides__["a" /* default */]; diff --git a/static/js/webslides.min.js b/static/js/webslides.min.js index 46766d3..cd55e8b 100644 --- a/static/js/webslides.min.js +++ b/static/js/webslides.min.js @@ -1 +1 @@ -!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={};return 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=16)}([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(13),a=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=o},function(e,t,n){"use strict";var i={ENTER:13,SPACE:32,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,a=t.changeOnClick,o=void 0!==a&&a;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(l.VERTICAL),this.plugins={},this.interval_=null,this.autoslide_=r,this.changeOnClick_=o,!this.el)throw new Error("Couldn't find the webslides container!");this.removeChildren_(),this.grabSlides_(),this.createPlugins_(),this.initSlides_(),this.play(),this.onInit_()}return u(e,[{key:"removeChildren_",value:function(){for(var e=this.el.childNodes,t=e.length;t--;){var n=e[t];a.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 a.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.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(s.a)(this.currentSlide_.el.offsetTop,0)),n.i(s.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(s.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=h},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),a=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)>=o||Math.abs(n)>=o)&&(r&&this.isGoingLeft_||!r&&this.isGoingUp_?this.ws_.goPrev():this.ws_.goNext(),e.preventDefault())}}]),e}();t.a=s},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),a=function(){function e(e,t){for(var n=0;nMath.abs(t)&&(e<-s?this.ws_.goPrev():e>s&&this.ws_.goNext())}}],[{key:"normalizeEventInfo",value:function(e){var t=void 0,n=void 0,i={pageX:0,pageY:0};return"undefined"!=typeof e.changedTouches?i=e.changedTouches[0]:"undefined"!=typeof e.originalEvent&&"undefined"!=typeof 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=u},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,a=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()?r:a;t.a=o},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-a.scrollTop,o=a.scrollTop,s=16;if(!t)return a.scrollTop=e,void n();var u=function u(l){l+=s;var c=Math.min(1,l/t),h=r.a.swing(c,l*c,e,i,t);a.scrollTop=Math.floor(o+h*i),l1&&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),u Date: Mon, 6 Mar 2017 19:34:31 +0100 Subject: [PATCH 2/7] 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 Date: Mon, 6 Mar 2017 21:13:35 +0100 Subject: [PATCH 3/7] =?UTF-8?q?Refactor=20web=20pack=20configuration=20and?= =?UTF-8?q?=20remove=20webpack.config.babel=20because=20you=20are=20not=20?= =?UTF-8?q?using=20import=20A=20form=20=E2=80=98b=E2=80=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 5 +- static/css/webslides.css | 3268 +++++++++++++++++ static/css/webslides.min.css | 1 + static/js/webslides.js | 2 +- static/js/webslides.min.js | 3 +- ...onfig.babel.js => webpack.config.common.js | 14 +- webpack.config.dev.js | 22 + ...ig.prod.babel.js => webpack.config.prod.js | 9 +- 8 files changed, 3300 insertions(+), 24 deletions(-) create mode 100644 static/css/webslides.css create mode 100644 static/css/webslides.min.css rename webpack.config.babel.js => webpack.config.common.js (55%) create mode 100644 webpack.config.dev.js rename webpack.config.prod.babel.js => webpack.config.prod.js (72%) diff --git a/package.json b/package.json index 3496ae8..a7583e4 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "babel-preset-es2015": "^6.22.0", "css-loader": "^0.26.2", "extract-text-webpack-plugin": "^2.1.0", + "node-sass": "^4.5.0", "npm-run-all": "^4.0.2", "postcss-loader": "^1.3.3", "rimraf": "^2.6.0", @@ -47,8 +48,8 @@ "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 --config ./webpack.config.prod.babel.js", + "build:main": "webpack --config ./webpack.config.dev.js", + "build:main.min": "webpack --output-filename [name].min.js -p --config ./webpack.config.prod.js", "dev": "webpack-dev-server" }, "babel": { diff --git a/static/css/webslides.css b/static/css/webslides.css new file mode 100644 index 0000000..bed166a --- /dev/null +++ b/static/css/webslides.css @@ -0,0 +1,3268 @@ +@charset "UTF-8"; +/*--------------------------------------------------------------------------------- + + App: WebSlides + Version: 1.0.0 + Date: 2017-02-11 + Description: A simple and versatile framework for building HTML presentations, landings, and portfolios. + Author: José Luis Antúnez + Author URI: http://twitter.com/jlantunez + License: The MIT License (MIT) + License URI: https://opensource.org/licenses/MIT + +----------------------------------------------------------------------------------- + + 0. CSS Reset & Normalize + 1. Base + 1.1 Wrap/Container + 1.2 Animations + 1.3 Responsive Media (videos, iframe, screenshots...) + 1.4 Basic Grid (2,3,4 columns) + 2. Typography & Lists + 2.1 Headings with background + 2.2 Classes: .text- + 2.3 San Francisco Font (Apple) + 3. Header & Footer + 3.1 Logo + 4. Navigation + 4.1 Navbars + 5. SLIDES (vertically and horizontally centered) + 5.1 Mini container & Alignment + 5.2 Counter / Navigation Slides + 5.3 Background Images/Video + 6. Magic blocks = .flexblock (Flexible blocks with auto-fill and equal height). + 6.1 .flexblock.features + 6.2 .flexblock.clients + 6.3 .flexblock.steps + 6.4 .flexblock.metrics + 6.5 .flexblock.specs + 6.6 .flexblock.reasons + 6.7 .flexblock.gallery + 6.8 .flexblock.plans + 6.9. flexblock.activity + 7. Promos/Offers (pricing, tagline, CTA...) + 8. Work / Resume / CV + 9. Table of contents + 10. Cards + 11. Quotes + 12. Avatars + 13. Tables + 14. Forms + 15. Safari Bug (flex-wrap) + 16. Print + +----------------------------------------------------------------------------------- */ +/*========================================= +0. CSS Reset & Normalize +=========================================== */ +html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, 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:before, +blockquote:after, +q:before, +q:after { + content: none; } + +table { + border-collapse: collapse; + border-spacing: 0; } + +html { + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; + box-sizing: border-box; } + +*, +*::before, +*::after { + 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; } + +sup, +sub { + font-size: 0.75em; + line-height: 2.2em; + height: 0; + line-height: 0; + position: relative; + vertical-align: baseline; } + +sup { + bottom: 1ex; } + +sub { + top: 0.5ex; } + +small { + font-size: 0.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; } + +/* +hr::after { + position: relative; + top: -2.4rem; + font-size: 2.4rem; + content: "\00A7"; + display: inline-block; + border-radius: 50%; + width: 4.8rem; + height: 4.8rem; + line-height: 4.8rem; +}*/ +dfn, +cite, +em, +i { + font-style: italic; } + +abbr, +acronym { + cursor: help; } + +mark, +ins { + text-decoration: none; + padding: 0 4px; + text-shadow: none; } + +::-moz-selection { + text-shadow: none; } + +::-webkit-selection { + text-shadow: none; } + +::selection { + text-shadow: none; } + +img { + /* Make sure images are scaled correctly. */ + border: 0; + height: auto; + max-width: 100%; } + +img:hover { + opacity: 0.90; + filter: alpha(opacity=90); } + +svg:not(:root) { + overflow: hidden; } + +figure { + position: relative; + margin: 0; + line-height: 0; } + +optgroup { + font-weight: bold; } + +table { + width: 100%; + border-collapse: collapse; + border-spacing: 0; + margin-bottom: 24px; } + +td, +th { + padding: 0; } + +blockquote:before, +blockquote:after, +q:before, +q:after { + content: ""; } + +blockquote, +q { + quotes: "" ""; } + +dt { + font-weight: bold; } + +dd { + margin: 0; } + +/*=== Clearing === */ +.clear:before, .clear:after, header:before, header:after, main:before, main:after, .wrap:before, .wrap:after, group:before, group:after, section:before, section:after, aside:before, aside:after, footer:before, footer:after { + content: ""; + display: table; } + +.clear:after, header:after, main:after, .wrap:after, group:after, section:after, aside:after, footer:after { + clear: both; } + +/*========================================= +1. Base --> Baseline: 8px = .8rem +=========================================== */ +/* -- Disable elastic scrolling/bounce -- */ +html, +body { + width: 100%; + height: 100%; + overflow: hidden; } + +#webslides { + height: 100vh; + overflow-x: hidden; + overflow-y: scroll; + -webkit-overflow-scrolling: touch; } + +/* -- Hide scrollbar, but still being able to scroll -- */ +#webslides { + -ms-overflow-style: none; + /* IE 10+ */ } + +#webslides::-webkit-scrollbar { + display: none; + /* Safari and Chrome */ } + +/* -- Prototype faster - Vertical rhythm -- */ +body.baseline { + background: url(../images/baseline.png) left top 0.8rem/0.8rem; } + +/* +#webslides.vertical {cursor: s-resize; } +*/ +li li { + margin-left: 1.6rem; } + +a, +a:active, +a:focus, +a:visited, +input:focus, +textarea:focus, +button { + text-decoration: none; + transition: all .3s ease-out; } + +p a:active { + position: relative; + top: 2px; } + +nav a[rel="external"] em, +.hidden { + clip: rect(1px, 1px, 1px, 1px); + position: absolute !important; + height: 1px; + width: 1px; + overflow: hidden; } + +/*Layer/Box Shadow*/ +.shadow { + position: relative; } + +.shadow:before, .shadow:after { + 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; } + +/*=== 1.1 WRAP/CONTAINER === */ +.wrap, header nav, footer 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.alignleft, +img.alignright, +img.aligncenter { + 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) { + /*=== div.size-60, img.size-50, h1.size-40, p.size-30... === */ + .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%; } } + +pre, +code { + 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; } + +/*=== 1.2 Animations ================ +Just 5 basic animations: +.fadeIn, .fadeInUp, .zoomIn, .slideInLeft, slideInRight +https://github.com/daneden/animate.css*/ +/*-- fadeIn -- */ + +@keyframes fadeIn { + from { + opacity: 0; } + to { + opacity: 1; } } + +.fadeIn { + animation: fadeIn 1s; } + +/*-- fadeInUp -- */ + +@keyframes fadeInUp { + from { + opacity: 0; + transform: translate3d(0, 100%, 0); } + to { + opacity: 1; + transform: none; } } + +.fadeInUp { + animation: fadeInUp 1s; } + +/*-- zoomIn -- */ + +@keyframes zoomIn { + from { + opacity: 0; + transform: scale3d(0.3, 0.3, 0.3); } + 50% { + opacity: 1; } } + +.zoomIn { + animation: zoomIn 1s; } + +/*-- slideInLeft -- */ +@keyframes slideInLeft { + from { + transform: translate3d(-100%, 0, 0); + visibility: visible; } + to { + transform: translate3d(0, 0, 0); } } + +.slideInLeft { + animation: slideInLeft 1s; } + +/*-- slideInRight -- */ +@keyframes slideInRight { + from { + transform: translate3d(100%, 0, 0); + visibility: visible; } + to { + transform: translate3d(0, 0, 0); } } + +.slideInRight { + animation: slideInRight 1s; } + +/* Animated Background (Matrix) */ + +@keyframes anim { + 0% { + transform: translateY(0); } + 100% { + transform: translateY(-1200px); } } + +/* Duration */ +.slow { + animation-duration: 4s; } + +.slow + .slow { + animation-duration: 5s; } + +/* Transitions */ +header, +footer, +#navigation { + transition: all 0.4s ease-in-out; } + +/*=== 1.3 Responsive Media (videos, iframe...) === */ +.embed { + position: relative; + height: 0; + overflow: hidden; + /*aspect ratio:16:9*/ + padding-bottom: 56.6%; + /*aspect ratio: 4:3*/ + /*padding-bottom: 75%;*/ } + +.embed iframe, +.embed object, +.embed embed { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + margin: 0; } + +/*=== Browser (Screenshots) ================ */ +h1 + .browser, +h2 + .browser, +p + .browser { + margin-top: 4.8rem; } + +/*
img
*/ +.browser { + overflow: hidden; + border-radius: .3rem; + max-width: 1024px; + margin: 0 auto 3.2rem; } + +.browser figcaption { + padding: 2.4rem; } + +li .browser { + margin-bottom: 0; } + +/*=== Topbar === */ +.browser:before { + position: absolute; + top: 0; + left: 0; + text-align: left; + font-size: .8rem; + padding: 1.6rem; + width: 100%; + line-height: 0; + /*copypastecharacter.com/graphic-shapes */ + content: "\25CF \25CF \25CF"; } + +@media (min-width: 768px) { + .browser:before { + font-size: 1.6rem; } } + +.browser img { + width: 100%; + margin-top: 3.2rem; } + +/*=== 1.4. Basic Grid (Flexible blocks) +Auto-fill & Equal height === */ +.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 (Sidebar + Main) .grid.sm */ + .grid.sm .column:nth-child(1) { + width: 30%; } + .grid.sm .column:nth-child(2) { + width: 70%; } + /* Grid (Main + Sidebar) .grid.ms */ + .grid.ms .column:nth-child(1) { + width: 70%; } + .grid.ms .column:nth-child(2) { + width: 30%; } + /* Grid (Sidebar + Main + Sidebar) .grid.sms */ + .grid.sms .column:nth-child(2) { + width: 50%; } } + +/*============================ +2. TYPOGRAPHY & LISTS +============================== */ +html, +body { + line-height: 1; + /*Sometimes fonts don't display optimally on all devices*/ + /*-moz-osx-font-smoothing: grayscale;*/ + /*-webkit-font-smoothing: antialiased;*/ + text-rendering: optimizeLegibility; + font-weight: 300; } + +html, +body, +input, +select, +textarea { + font-family: "Roboto", "San Francisco", helvetica, arial, sans-serif; + font-size: 62.5%; } + +body, +textarea { + font-size: 1.8rem; } + +p, +li, +time, +table, +big, +textarea, +label { + line-height: 3.2rem; + margin-bottom: 3.2rem; } + +li, p:last-child { + margin-bottom: 0; } + +ul > li, ol > li { + margin-left: 3.2rem; } + +li li { + font-size: 100%; } + +/*== List .description (Product/Specs) === */ +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; } + +ul.description li, .column ul 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, .wall p svg, .try 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; + line-height: 4rem; } + +h4 { + font-size: 2.2rem; + line-height: 4rem; } + +h5 { + font-size: 2rem; + font-weight: 600; + line-height: 3.2rem; } + +h6 { + font-size: 1.8rem; + line-height: 3.2rem; + font-weight: 600; } + +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; } + +/*========================================= +2.1. Headings with background +=========================================== */ +h1[class*="bg-"], h2[class*="bg-"], h3[class*="bg-"], h4[class*="bg-"], +h5[class*="bg-"], h6[class*="bg-"], ul[class*="bg-"], ol[class*="bg-"], +li[class*="bg-"], p[class*="bg-"] { + padding: 2.4rem; } + +h1 [class*="bg-"], h2 [class*="bg-"], h3 [class*="bg-"] { + padding: .4rem .8rem; } + +/*========================================= +2.2. Typography Classes = .text- +=========================================== */ +.text-intro, [class*="content-"] p { + font-size: 2.4rem; + line-height: 4rem; } + +/* -- Serif -- */ +.text-serif, h1 span { + font-family: "Maitree", times, serif; } + +/* -- h1,h2... Promo/Landings -- */ +.text-landing { + /*font-weight: 600;*/ + letter-spacing: .4rem; + text-transform: uppercase; } + +@media (min-width: 768px) { + .text-landing { + letter-spacing: 1.6rem; } } + +/* -- Subtitle (Before h1, h2) -- +p.subtitle + h1/h2 */ +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; } + +/* -- Numbers (results, sales... 23,478,289 iphones) -- */ +.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; } + +/* -- Magazine Two Columns -- */ +@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; } + +/* -- Heading with border -- */ +.text-context { + position: relative; + /*letter-spacing: .1rem;*/ } + +.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%; } + +/* -- Separator/Symbols (stars ***...) -- */ +.text-symbols { + font-weight: 600; + letter-spacing: .8rem; + text-align: center; } + +/* -- Separator -- */ +.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; } } + +/* -- Pull Quote (Right/Left) -- */ +[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; } } + +/* -- Info Messages (error, warning, success... -- */ +.text-info { + font-size: 1.6rem; + line-height: 2.4rem; } + +/*========================================= +2.1. San Francisco Font (Apple's new font) +=========================================== */ +.text-apple, .bg-apple { + font-family: "San Francisco", helvetica, arial, sans-serif; } + +/* Ultra Light */ +@font-face { + font-family: "San Francisco"; + font-weight: 100; + src: url("https://applesocial.s3.amazonaws.com/assets/styles/fonts/sanfrancisco/sanfranciscodisplay-ultralight-webfont.woff2"); } + +/* Thin */ +@font-face { + font-family: "San Francisco"; + font-weight: 200; + src: url("https://applesocial.s3.amazonaws.com/assets/styles/fonts/sanfrancisco/sanfranciscodisplay-thin-webfont.woff2"); } + +/* Regular */ +@font-face { + font-family: "San Francisco"; + font-weight: 400; + src: url("https://applesocial.s3.amazonaws.com/assets/styles/fonts/sanfrancisco/sanfranciscodisplay-regular-webfont.woff2"); } + +/* Bold */ +@font-face { + font-family: "San Francisco"; + font-weight: bold; + src: url("https://applesocial.s3.amazonaws.com/assets/styles/fonts/sanfrancisco/sanfranciscodisplay-bold-webfont.woff2"); } + +/*========================================= +3. Header & Footer +=========================================== */ +header, +footer, +#navigation { + width: 100%; + padding: 2.4rem; } + +header p, +footer p { + line-height: 4.8rem; + margin-bottom: 0; } + +header[role=banner] img, +footer img { + height: 4rem; + vertical-align: middle; } + +header, +section footer { + position: absolute; + top: 0; + left: 0; + /* hover/visibility */ + z-index: 3; } + +section footer { + top: auto; + bottom: 0; } + +/*=== Hide header[role=banner] === */ +/*desktop only? Add @media (min-width: 1025px)*/ +header[role=banner] { + opacity: 0; } + +/*=== Show Header[role=banner] === */ +header[role=banner]:hover { + opacity: 1; } + +@media (max-width: 767px) { + footer .alignleft, footer .alignright { + float: none; + display: block; } } + +/*=== 3.1. Logo === */ +.logo { + text-transform: lowercase; + /*float: left; + font-size: 4.8rem;*/ } + +.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; + /*If you remove text-indent */ + /*padding-left: 6rem;*/ } + +/*@media (max-width: 600px){ +.logo a {text-indent: -4000px; + } +}*/ +/*========================================= +4. Navigation +=========================================== */ +/*=== 4.1. Navbars === */ +nav ul { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + /*====align left====*/ + -ms-flex-pack: start; + justify-content: flex-start; + /* ==== align center ====*/ + /*justify-content: center; */ + /*====align right====*/ + /* justify-content: flex-end; */ + /*====separated columns li a====*/ + /* justify-content: space-between; */ + /*====separated columns centered li a====*/ + /*justify-content: space-around;*/ } + +nav ul li { + position: relative; + float: left; + list-style: none; } + +nav ul li:first-child, +nav[role=navigation] ul li { + 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%; + /*full li>a when you decide*/ } + +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; } + +nav.aligncenter ul, .aligncenter nav ul { + /* ==== align center ====*/ + -ms-flex-pack: center; + justify-content: center; } + +nav.navbar ul li { + /*====full float li a ====*/ + -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; } } + +/*============================================ +5. SLIDES (Full Screen) +Vertically and horizontally centered +============================================== */ +/* Fade transition to all slides. +* = All HTML elements will have those styles.*/ +section * { + animation: fadeIn 0.3s ease-in-out; } + +section .background, section .background-video, +[class*="background-"].light, [class*="background-"].dark { + animation-duration: 0s; } + +/*=== Section = Slide === */ +section, .slide { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + -ms-flex-pack: center; + justify-content: center; + /*Fixed/Visible header? padding-top: 12rem; */ + padding: 2.4rem; + word-wrap: break-word; + page-break-after: always; + min-height: 100vh; + /*Fullscreen*/ + /* Prototyping? min-height: 720px (Baseline: 8px = .8rem)*/ } + +@media (min-width: 1024px) { + section, .slide { + padding-top: 12rem; + padding-bottom: 12rem; } } + +/*slide no padding (full card, .embed> youtube video...) */ +.fullscreen { + padding: 0; + /* Fixed/Visible header? + padding:8.2rem 0 0 0; + */ } + +/* slide alignment - top */ +.slide-top { + -ms-flex-pack: start; + justify-content: flex-start; } + +/* slide alignment - bottom */ +.slide-bottom { + -ms-flex-pack: end; + justify-content: flex-end; } + +/*== 5.1. Mini container width:50% (600px) +.wrap:1200px; / Aligned items [class*="content-"]=== */ +[class*="content-"] { + position: relative; + /*display: table;*/ + text-align: left; } + +.wrap[class*="bg-"], .wrap.frame, +[class*="content-"][class*="bg-"], +[class*="content-"].frame, [class*="align"][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-"]:before, + [class*="content-"]:after { + content: ""; + display: table; } + [class*="content-"]:after { + clear: both; } } + +/* === 5.2 Counter / Navigation Slides === */ +#navigation { + position: fixed; + width: 24.4rem; + margin-right: auto; + margin-left: auto; + right: 0; + bottom: 0; + left: 0; + /* hover/visibility */ + z-index: 3; } + +#navigation { + animation: fadeIn 16s; + opacity: 0; } + +#navigation:hover { + opacity: 1; } + +/* -- navigation arrow always visible? -- */ +/* +#webslides:hover #navigation { +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; + text-align: center; + 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 center top; + background-size: 4.8rem; + animation: fadeIn 6s; } + #navigation a, #counter { + display: none; } } + +/*=== 5.3 Slides - Background Images === */ +.background, +[class*="background-"] { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + background-repeat: no-repeat; } + +.background { + background-position: center; + background-size: cover; } + +.background-top { + background-position: top; + background-size: cover; } + +.background-bottom { + background-position: bottom; + background-size: cover; } + +/*fullscreen video +