diff --git a/README.md b/README.md index 99a5706..1ffeedc 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,12 @@ # 📗 Table of Contents - [📗 Table of Contents](#-table-of-contents) -- [📖 Capston-javascript ](#-capston-javascript-) +- [📖 ShowTime ](#-showtime-) - [🛠 Built With ](#-built-with-) - [Tech Stack ](#tech-stack-) - [Key Features ](#key-features-) - [🚀 Live Demo ](#-live-demo-) + - [� Presentation Video ](#-presentation-video-) - [💻 Getting Started ](#-getting-started-) - [Setup](#setup) - [Install](#install) @@ -17,8 +18,10 @@ - [⭐️ Show your support ](#️-show-your-support-) - [📝 License ](#-license-) -# 📖 Capston-javascript -This is a project done during the microverse program +# 📖 ShowTime +**ShowTime** is Movie Streaming Website that use TV maze API to display a list of movies with detail. Users can leave comments and likes about their prefered movies. + +[video of presentation](https://www.loom.com/share/99aaffee950643ba895293ae357802c2) ## 🛠 Built With @@ -31,13 +34,17 @@ This is a project done during the microverse program ### Key Features - **Use ES6** +- **Show Popup detail** - **Use Api [tvmaze](https://www.tvmaze.com/api)**

(back to top)

## 🚀 Live Demo -- [Live Demo Link](https://yourdeployedapplicationlink.com) +[Live Demo Link](https://trast00.github.io/Capston-javascript/dist/index.html) + +## 📺 Presentation Video +[Presentation video](https://www.loom.com/share/99aaffee950643ba895293ae357802c2)

(back to top)

@@ -98,8 +105,10 @@ To run tests, run the following command: ## 🔭 Future Features -- [ ] **Comment section** -- [ ] **More Personnalized UI** +- [x] **Comment section** +- [ ] **Search bar** +- [ ] **List of episodes** +- [x] **More Personnalized UI** ## ⭐️ Show your support diff --git a/dist/0f9e753baa7f7d16f0cc.png b/dist/0f9e753baa7f7d16f0cc.png new file mode 100644 index 0000000..6276695 Binary files /dev/null and b/dist/0f9e753baa7f7d16f0cc.png differ diff --git a/dist/240fad889811518e0b5b.png b/dist/240fad889811518e0b5b.png deleted file mode 100644 index 6485aac..0000000 Binary files a/dist/240fad889811518e0b5b.png and /dev/null differ diff --git a/dist/index.html b/dist/index.html index 4f54e89..e050534 100644 --- a/dist/index.html +++ b/dist/index.html @@ -1 +1 @@ -Show Time
\ No newline at end of file +Show Time
\ No newline at end of file diff --git a/dist/main.js b/dist/main.js index eb40648..2d32f80 100644 --- a/dist/main.js +++ b/dist/main.js @@ -1,7 +1 @@ -<<<<<<< HEAD -"use strict";(self.webpackChunkcapston_javascript=self.webpackChunkcapston_javascript||[]).push([[179],{426:(n,e,r)=>{r.d(e,{Z:()=>o});var t=r(537),i=r.n(t),a=r(645),s=r.n(a)()(i());s.push([n.id,"@import url(https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap);"]),s.push([n.id,'* {\r\n margin: 0;\r\n padding: 0;\r\n box-sizing: border-box;\r\n font-family: "Popins", sans-serif;\r\n}\r\n\r\n.flex-center {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n}\r\n\r\n.header {\r\n width: 100%;\r\n}\r\n\r\n.nav-bar {\r\n width: 90%;\r\n padding: 20px 50px;\r\n}\r\n\r\n.nav-bar ul {\r\n justify-content: space-evenly;\r\n width: 100%;\r\n}\r\n\r\n.nav-bar ul li {\r\n list-style-type: none;\r\n font-size: 20px;\r\n font-weight: 400;\r\n}\r\n\r\n.nav-bar img {\r\n width: 150px;\r\n}\r\n\r\n.nav-bar ul li:nth-child(2) {\r\n text-decoration: underline;\r\n}\r\n\r\n.main-container {\r\n flex-direction: column;\r\n min-height: 600px;\r\n padding-top: 20px;\r\n padding-bottom: 20px;\r\n}\r\n\r\n.list-movies {\r\n width: 90%;\r\n list-style: none;\r\n flex-wrap: wrap;\r\n justify-content: space-evenly;\r\n}\r\n\r\n.movie {\r\n width: 266px;\r\n height: 400px;\r\n flex-direction: column;\r\n justify-content: space-between;\r\n padding: 8px;\r\n border: 1px solid #d3d3d3;\r\n border-radius: 4px;\r\n margin-top: 12px;\r\n}\r\n\r\n.movie img {\r\n width: 250px;\r\n height: 250px;\r\n border-radius: 4px;\r\n}\r\n\r\n.movie-content {\r\n flex-wrap: wrap;\r\n justify-content: space-between;\r\n}\r\n\r\n.movie-content .likes {\r\n margin-left: 8px;\r\n}\r\n\r\n.movie-content .likes i {\r\n margin-right: 8px;\r\n}\r\n\r\n.btn-show-comment {\r\n width: 100%;\r\n height: 40px;\r\n justify-self: flex-end;\r\n margin-top: 12px;\r\n}\r\n\r\n.pages {\r\n width: 90%;\r\n padding: 8px;\r\n justify-content: space-between;\r\n}\r\n\r\nbutton,\r\ntextarea,\r\n.form input {\r\n border: 2px solid;\r\n width: 250px;\r\n height: 40px;\r\n border-radius: 8px;\r\n margin: 10px 0;\r\n}\r\n\r\n.pages button {\r\n width: 120px;\r\n height: 40px;\r\n}\r\n\r\n.pages button:disabled {\r\n opacity: 0.7;\r\n}\r\n\r\n.popup {\r\n display: none;\r\n position: absolute;\r\n inset: 0 0 -20px 0;\r\n background: #fff;\r\n flex-direction: column;\r\n}\r\n\r\n.close {\r\n height: 300px;\r\n}\r\n\r\n.image-close .fa-solid {\r\n padding-top: 0;\r\n font-size: 40px;\r\n}\r\n\r\n.modal-image img {\r\n width: 70vw;\r\n padding-top: 10px;\r\n max-height: 350px;\r\n object-fit: contain;\r\n}\r\n\r\n.description {\r\n margin: 20px 0;\r\n}\r\n\r\n.start-end p,\r\n.movie-for p {\r\n padding: 10px 10px;\r\n}\r\n\r\n.comment-modal {\r\n flex-direction: column;\r\n}\r\n\r\n.form {\r\n flex-direction: column;\r\n align-items: flex-start;\r\n}\r\n\r\n.textarea,\r\n#name,\r\n.commnet-btn {\r\n background: #fff;\r\n font-size: 17px;\r\n}\r\n\r\n#name {\r\n padding: 0 10px;\r\n}\r\n\r\n.textarea {\r\n padding: 10px;\r\n margin: 10px 0;\r\n width: 300px;\r\n height: 120px;\r\n}\r\n\r\n.foot {\r\n justify-content: flex-start;\r\n padding: 30px;\r\n border-top: 2px solid #000;\r\n}\r\n',"",{version:3,sources:["webpack://./src/style.css"],names:[],mappings:"AAEA;EACE,SAAS;EACT,UAAU;EACV,sBAAsB;EACtB,iCAAiC;AACnC;;AAEA;EACE,aAAa;EACb,uBAAuB;EACvB,mBAAmB;AACrB;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,UAAU;EACV,kBAAkB;AACpB;;AAEA;EACE,6BAA6B;EAC7B,WAAW;AACb;;AAEA;EACE,qBAAqB;EACrB,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,sBAAsB;EACtB,iBAAiB;EACjB,iBAAiB;EACjB,oBAAoB;AACtB;;AAEA;EACE,UAAU;EACV,gBAAgB;EAChB,eAAe;EACf,6BAA6B;AAC/B;;AAEA;EACE,YAAY;EACZ,aAAa;EACb,sBAAsB;EACtB,8BAA8B;EAC9B,YAAY;EACZ,yBAAyB;EACzB,kBAAkB;EAClB,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,aAAa;EACb,kBAAkB;AACpB;;AAEA;EACE,eAAe;EACf,8BAA8B;AAChC;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,sBAAsB;EACtB,gBAAgB;AAClB;;AAEA;EACE,UAAU;EACV,YAAY;EACZ,8BAA8B;AAChC;;AAEA;;;EAGE,iBAAiB;EACjB,YAAY;EACZ,YAAY;EACZ,kBAAkB;EAClB,cAAc;AAChB;;AAEA;EACE,YAAY;EACZ,YAAY;AACd;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,aAAa;EACb,kBAAkB;EAClB,kBAAkB;EAClB,gBAAgB;EAChB,sBAAsB;AACxB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,cAAc;EACd,eAAe;AACjB;;AAEA;EACE,WAAW;EACX,iBAAiB;EACjB,iBAAiB;EACjB,mBAAmB;AACrB;;AAEA;EACE,cAAc;AAChB;;AAEA;;EAEE,kBAAkB;AACpB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,sBAAsB;EACtB,uBAAuB;AACzB;;AAEA;;;EAGE,gBAAgB;EAChB,eAAe;AACjB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,aAAa;EACb,cAAc;EACd,YAAY;EACZ,aAAa;AACf;;AAEA;EACE,2BAA2B;EAC3B,aAAa;EACb,0BAA0B;AAC5B",sourcesContent:["@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap');\r\n\r\n* {\r\n margin: 0;\r\n padding: 0;\r\n box-sizing: border-box;\r\n font-family: \"Popins\", sans-serif;\r\n}\r\n\r\n.flex-center {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n}\r\n\r\n.header {\r\n width: 100%;\r\n}\r\n\r\n.nav-bar {\r\n width: 90%;\r\n padding: 20px 50px;\r\n}\r\n\r\n.nav-bar ul {\r\n justify-content: space-evenly;\r\n width: 100%;\r\n}\r\n\r\n.nav-bar ul li {\r\n list-style-type: none;\r\n font-size: 20px;\r\n font-weight: 400;\r\n}\r\n\r\n.nav-bar img {\r\n width: 150px;\r\n}\r\n\r\n.nav-bar ul li:nth-child(2) {\r\n text-decoration: underline;\r\n}\r\n\r\n.main-container {\r\n flex-direction: column;\r\n min-height: 600px;\r\n padding-top: 20px;\r\n padding-bottom: 20px;\r\n}\r\n\r\n.list-movies {\r\n width: 90%;\r\n list-style: none;\r\n flex-wrap: wrap;\r\n justify-content: space-evenly;\r\n}\r\n\r\n.movie {\r\n width: 266px;\r\n height: 400px;\r\n flex-direction: column;\r\n justify-content: space-between;\r\n padding: 8px;\r\n border: 1px solid #d3d3d3;\r\n border-radius: 4px;\r\n margin-top: 12px;\r\n}\r\n\r\n.movie img {\r\n width: 250px;\r\n height: 250px;\r\n border-radius: 4px;\r\n}\r\n\r\n.movie-content {\r\n flex-wrap: wrap;\r\n justify-content: space-between;\r\n}\r\n\r\n.movie-content .likes {\r\n margin-left: 8px;\r\n}\r\n\r\n.movie-content .likes i {\r\n margin-right: 8px;\r\n}\r\n\r\n.btn-show-comment {\r\n width: 100%;\r\n height: 40px;\r\n justify-self: flex-end;\r\n margin-top: 12px;\r\n}\r\n\r\n.pages {\r\n width: 90%;\r\n padding: 8px;\r\n justify-content: space-between;\r\n}\r\n\r\nbutton,\r\ntextarea,\r\n.form input {\r\n border: 2px solid;\r\n width: 250px;\r\n height: 40px;\r\n border-radius: 8px;\r\n margin: 10px 0;\r\n}\r\n\r\n.pages button {\r\n width: 120px;\r\n height: 40px;\r\n}\r\n\r\n.pages button:disabled {\r\n opacity: 0.7;\r\n}\r\n\r\n.popup {\r\n display: none;\r\n position: absolute;\r\n inset: 0 0 -20px 0;\r\n background: #fff;\r\n flex-direction: column;\r\n}\r\n\r\n.close {\r\n height: 300px;\r\n}\r\n\r\n.image-close .fa-solid {\r\n padding-top: 0;\r\n font-size: 40px;\r\n}\r\n\r\n.modal-image img {\r\n width: 70vw;\r\n padding-top: 10px;\r\n max-height: 350px;\r\n object-fit: contain;\r\n}\r\n\r\n.description {\r\n margin: 20px 0;\r\n}\r\n\r\n.start-end p,\r\n.movie-for p {\r\n padding: 10px 10px;\r\n}\r\n\r\n.comment-modal {\r\n flex-direction: column;\r\n}\r\n\r\n.form {\r\n flex-direction: column;\r\n align-items: flex-start;\r\n}\r\n\r\n.textarea,\r\n#name,\r\n.commnet-btn {\r\n background: #fff;\r\n font-size: 17px;\r\n}\r\n\r\n#name {\r\n padding: 0 10px;\r\n}\r\n\r\n.textarea {\r\n padding: 10px;\r\n margin: 10px 0;\r\n width: 300px;\r\n height: 120px;\r\n}\r\n\r\n.foot {\r\n justify-content: flex-start;\r\n padding: 30px;\r\n border-top: 2px solid #000;\r\n}\r\n"],sourceRoot:""}]);const o=s},645:n=>{n.exports=function(n){var e=[];return e.toString=function(){return this.map((function(e){var r="",t=void 0!==e[5];return e[4]&&(r+="@supports (".concat(e[4],") {")),e[2]&&(r+="@media ".concat(e[2]," {")),t&&(r+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),r+=n(e),t&&(r+="}"),e[2]&&(r+="}"),e[4]&&(r+="}"),r})).join("")},e.i=function(n,r,t,i,a){"string"==typeof n&&(n=[[null,n,void 0]]);var s={};if(t)for(var o=0;o0?" ".concat(p[5]):""," {").concat(p[1],"}")),p[5]=a),r&&(p[2]?(p[1]="@media ".concat(p[2]," {").concat(p[1],"}"),p[2]=r):p[2]=r),i&&(p[4]?(p[1]="@supports (".concat(p[4],") {").concat(p[1],"}"),p[4]=i):p[4]="".concat(i)),e.push(p))}},e}},537:n=>{n.exports=function(n){var e=n[1],r=n[3];if(!r)return e;if("function"==typeof btoa){var t=btoa(unescape(encodeURIComponent(JSON.stringify(r)))),i="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(t),a="/*# ".concat(i," */");return[e].concat([a]).join("\n")}return[e].join("\n")}},379:n=>{var e=[];function r(n){for(var r=-1,t=0;t{var e={};n.exports=function(n,r){var t=function(n){if(void 0===e[n]){var r=document.querySelector(n);if(window.HTMLIFrameElement&&r instanceof window.HTMLIFrameElement)try{r=r.contentDocument.head}catch(n){r=null}e[n]=r}return e[n]}(n);if(!t)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");t.appendChild(r)}},216:n=>{n.exports=function(n){var e=document.createElement("style");return n.setAttributes(e,n.attributes),n.insert(e,n.options),e}},565:(n,e,r)=>{n.exports=function(n){var e=r.nc;e&&n.setAttribute("nonce",e)}},795:n=>{n.exports=function(n){var e=n.insertStyleElement(n);return{update:function(r){!function(n,e,r){var t="";r.supports&&(t+="@supports (".concat(r.supports,") {")),r.media&&(t+="@media ".concat(r.media," {"));var i=void 0!==r.layer;i&&(t+="@layer".concat(r.layer.length>0?" ".concat(r.layer):""," {")),t+=r.css,i&&(t+="}"),r.media&&(t+="}"),r.supports&&(t+="}");var a=r.sourceMap;a&&"undefined"!=typeof btoa&&(t+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(a))))," */")),e.styleTagTransform(t,n,e.options)}(e,n,r)},remove:function(){!function(n){if(null===n.parentNode)return!1;n.parentNode.removeChild(n)}(e)}}}},589:n=>{n.exports=function(n,e){if(e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}},246:(n,e,r)=>{let t=-1;var i=r(379),a=r.n(i),s=r(795),o=r.n(s),A=r(569),c=r.n(A),p=r(565),d=r.n(p),l=r(216),m=r.n(l),u=r(589),f=r.n(u),h=r(426),E={};E.styleTagTransform=f(),E.setAttributes=d(),E.insert=c().bind(null,"head"),E.domAPI=o(),E.insertStyleElement=m(),a()(h.Z,E),h.Z&&h.Z.locals&&h.Z.locals;const g=new class{constructor(){this.list=[],this.listLikedMovies=[],this.currentPage=1,this.urlApi="https://api.tvmaze.com/shows",this.urlInvolvementAPI="https://us-central1-involvement-api.cloudfunctions.net/capstoneApi",this.appID="JJFDApwrWpJNeY3nWzvU"}display=()=>{this.list.forEach((n=>{const e=document.createElement("li");e.classList.add("flex-center","movie"),e.id=`movie-${n.id}`;const r=document.createElement("div"),i=document.createElement("img");i.src=n.image.medium,i.alt=`Movies ${n.name} image`;const a=document.createElement("div");a.classList.add("flex-center","movie-content");const s=document.createElement("h3");s.textContent=n.name;const o=document.createElement("div");o.classList.add("flex-center","likes");const A=document.createElement("i");A.classList.add("fa-regular","fa-heart");const c=document.createElement("p");this.listLikedMovies.containt&&(c.textContent="3 Like");const p=document.createElement("button");p.classList.add("btn-show-comment"),p.textContent="Comments",p.addEventListener("click",(()=>{(n=>{t=n.id;const e=document.querySelector(".popup"),r=document.querySelector("body");e.style.display="block";const i=`\n `;r.style.position="fixed",e.innerHTML=i;const a=document.getElementsByClassName("close");for(let n=0;n{e.style.display="none",r.style.position="relative"}));(()=>{const n=document.querySelector("#name"),e=document.querySelector("#comment");document.querySelector(".commnet-btn").addEventListener("click",(r=>{r.preventDefault(),(async r=>{const t=await fetch("https://us-central1-involvement-api.cloudfunctions.net/capstoneApi/apps/JJFDApwrWpJNeY3nWzvU/comments",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({item_id:r,username:n.value,comment:e.value})});await t.json()})(t),console.log(n.value,e.value),n.value="",e.value=""}))})()})(n)})),o.append(A,c),a.append(s,o),r.append(i,a),e.append(r,p),document.getElementById("list-movies").append(e),A.addEventListener("click",(n=>{const{id:r}=e;let t=0,i=-1;this.listLikedMovies.filter(((n,e)=>(n.item_id===r&&(t=n.likes,i=e),n))),n.currentTarget.classList.contains("fa-regular")?(t+=1,n.currentTarget.classList.remove("fa-regular","fa-heart"),n.currentTarget.classList.add("fa-solid","fa-heart")):(t-=1,n.currentTarget.classList.remove("fa-solid","fa-heart"),n.currentTarget.classList.add("fa-regular","fa-heart")),n.currentTarget.nextSibling.textContent=`${t} like`,-1===i?this.listLikedMovies.push({item_id:r,likes:t}):this.listLikedMovies[i].likes=t,this.saveLike(r,t)})),this.listLikedMovies.filter((n=>(n.item_id===e.id&&(c.textContent=`${n.likes} like`),n)))}))};getListMovies=async()=>{const n=await fetch(`${this.urlApi}?page=${this.currentPage}`);await n.json().then((n=>{this.list=n}))};getListLikes=async()=>{const n=await fetch(`${this.urlInvolvementAPI}/apps/${this.appID}/likes/`);await n.json().then((n=>{this.listLikedMovies=n}))};saveLike=async(n,e)=>(await fetch(`${this.urlInvolvementAPI}/apps/${this.appID}/likes/`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({item_id:n,likes:e})})).ok;createApp=async()=>await fetch(`${this.urlInvolvementAPI}/apps/`,{method:"POST",headers:{"Content-Type":"application/json"}})};window.addEventListener("load",(async()=>{await g.getListLikes(),await g.getListMovies(),g.display()})),(async()=>{try{const n=await fetch("https://us-central1-involvement-api.cloudfunctions.net/capstoneApi/apps/JJFDApwrWpJNeY3nWzvU/comments");await n.json()}catch(n){return n}})()}},n=>{n(n.s=246)}]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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M0MsRUFBV21FLHFCQUNYbkUsRUFBV2lFLGdCQUNqQmpFLEVBQVdPLFNBQVMsSUdUSG9DLFdBQ2pCLElBQ0UsTUFBTTJCLFFBQWtCekIsTUFBTSwrR0FDUHlCLEVBQVVuQixNQUluQyxDQUZFLE1BQU9vQixHQUNQLE9BQU9BLENBQ1QsR0hLRixFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY2Fwc3Rvbi1qYXZhc2NyaXB0Ly4vc3JjL3N0eWxlLmNzcyIsIndlYnBhY2s6Ly9jYXBzdG9uLWphdmFzY3JpcHQvLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzIiwid2VicGFjazovL2NhcHN0b24tamF2YXNjcmlwdC8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzIiwid2VicGFjazovL2NhcHN0b24tamF2YXNjcmlwdC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qcyIsIndlYnBhY2s6Ly9jYXBzdG9uLWphdmFzY3JpcHQvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzIiwid2VicGFjazovL2NhcHN0b24tamF2YXNjcmlwdC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qcyIsIndlYnBhY2s6Ly9jYXBzdG9uLWphdmFzY3JpcHQvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanMiLCJ3ZWJwYWNrOi8vY2Fwc3Rvbi1qYXZhc2NyaXB0Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanMiLCJ3ZWJwYWNrOi8vY2Fwc3Rvbi1qYXZhc2NyaXB0Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanMiLCJ3ZWJwYWNrOi8vY2Fwc3Rvbi1qYXZhc2NyaXB0Ly4vc3JjL21vZHVsZXMvcG9wdXAuanMiLCJ3ZWJwYWNrOi8vY2Fwc3Rvbi1qYXZhc2NyaXB0Ly4vc3JjL3N0eWxlLmNzcz83MTYzIiwid2VicGFjazovL2NhcHN0b24tamF2YXNjcmlwdC8uL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9jYXBzdG9uLWphdmFzY3JpcHQvLi9zcmMvbW9kdWxlcy9MaXN0TW92aWVzLmpzIiwid2VicGFjazovL2NhcHN0b24tamF2YXNjcmlwdC8uL3NyYy9tb2R1bGVzL0NvbW1lbnQuanMiLCJ3ZWJwYWNrOi8vY2Fwc3Rvbi1qYXZhc2NyaXB0Ly4vc3JjL21vZHVsZXMvZ2V0Q29tbWVudHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiQGltcG9ydCB1cmwoaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1Qb3BwaW5zOndnaHRAMzAwOzQwMDs1MDA7NjAwJmRpc3BsYXk9c3dhcCk7XCJdKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIioge1xcclxcbiAgbWFyZ2luOiAwO1xcclxcbiAgcGFkZGluZzogMDtcXHJcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxyXFxuICBmb250LWZhbWlseTogXFxcIlBvcGluc1xcXCIsIHNhbnMtc2VyaWY7XFxyXFxufVxcclxcblxcclxcbi5mbGV4LWNlbnRlciB7XFxyXFxuICBkaXNwbGF5OiBmbGV4O1xcclxcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxyXFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcclxcbn1cXHJcXG5cXHJcXG4uaGVhZGVyIHtcXHJcXG4gIHdpZHRoOiAxMDAlO1xcclxcbn1cXHJcXG5cXHJcXG4ubmF2LWJhciB7XFxyXFxuICB3aWR0aDogOTAlO1xcclxcbiAgcGFkZGluZzogMjBweCA1MHB4O1xcclxcbn1cXHJcXG5cXHJcXG4ubmF2LWJhciB1bCB7XFxyXFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWV2ZW5seTtcXHJcXG4gIHdpZHRoOiAxMDAlO1xcclxcbn1cXHJcXG5cXHJcXG4ubmF2LWJhciB1bCBsaSB7XFxyXFxuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XFxyXFxuICBmb250LXNpemU6IDIwcHg7XFxyXFxuICBmb250LXdlaWdodDogNDAwO1xcclxcbn1cXHJcXG5cXHJcXG4ubmF2LWJhciBpbWcge1xcclxcbiAgd2lkdGg6IDE1MHB4O1xcclxcbn1cXHJcXG5cXHJcXG4ubmF2LWJhciB1bCBsaTpudGgtY2hpbGQoMikge1xcclxcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxyXFxufVxcclxcblxcclxcbi5tYWluLWNvbnRhaW5lciB7XFxyXFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcclxcbiAgbWluLWhlaWdodDogNjAwcHg7XFxyXFxuICBwYWRkaW5nLXRvcDogMjBweDtcXHJcXG4gIHBhZGRpbmctYm90dG9tOiAyMHB4O1xcclxcbn1cXHJcXG5cXHJcXG4ubGlzdC1tb3ZpZXMge1xcclxcbiAgd2lkdGg6IDkwJTtcXHJcXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XFxyXFxuICBmbGV4LXdyYXA6IHdyYXA7XFxyXFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWV2ZW5seTtcXHJcXG59XFxyXFxuXFxyXFxuLm1vdmllIHtcXHJcXG4gIHdpZHRoOiAyNjZweDtcXHJcXG4gIGhlaWdodDogNDAwcHg7XFxyXFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcclxcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcclxcbiAgcGFkZGluZzogOHB4O1xcclxcbiAgYm9yZGVyOiAxcHggc29saWQgI2QzZDNkMztcXHJcXG4gIGJvcmRlci1yYWRpdXM6IDRweDtcXHJcXG4gIG1hcmdpbi10b3A6IDEycHg7XFxyXFxufVxcclxcblxcclxcbi5tb3ZpZSBpbWcge1xcclxcbiAgd2lkdGg6IDI1MHB4O1xcclxcbiAgaGVpZ2h0OiAyNTBweDtcXHJcXG4gIGJvcmRlci1yYWRpdXM6IDRweDtcXHJcXG59XFxyXFxuXFxyXFxuLm1vdmllLWNvbnRlbnQge1xcclxcbiAgZmxleC13cmFwOiB3cmFwO1xcclxcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcclxcbn1cXHJcXG5cXHJcXG4ubW92aWUtY29udGVudCAubGlrZXMge1xcclxcbiAgbWFyZ2luLWxlZnQ6IDhweDtcXHJcXG59XFxyXFxuXFxyXFxuLm1vdmllLWNvbnRlbnQgLmxpa2VzIGkge1xcclxcbiAgbWFyZ2luLXJpZ2h0OiA4cHg7XFxyXFxufVxcclxcblxcclxcbi5idG4tc2hvdy1jb21tZW50IHtcXHJcXG4gIHdpZHRoOiAxMDAlO1xcclxcbiAgaGVpZ2h0OiA0MHB4O1xcclxcbiAganVzdGlmeS1zZWxmOiBmbGV4LWVuZDtcXHJcXG4gIG1hcmdpbi10b3A6IDEycHg7XFxyXFxufVxcclxcblxcclxcbi5wYWdlcyB7XFxyXFxuICB3aWR0aDogOTAlO1xcclxcbiAgcGFkZGluZzogOHB4O1xcclxcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcclxcbn1cXHJcXG5cXHJcXG5idXR0b24sXFxyXFxudGV4dGFyZWEsXFxyXFxuLmZvcm0gaW5wdXQge1xcclxcbiAgYm9yZGVyOiAycHggc29saWQ7XFxyXFxuICB3aWR0aDogMjUwcHg7XFxyXFxuICBoZWlnaHQ6IDQwcHg7XFxyXFxuICBib3JkZXItcmFkaXVzOiA4cHg7XFxyXFxuICBtYXJnaW46IDEwcHggMDtcXHJcXG59XFxyXFxuXFxyXFxuLnBhZ2VzIGJ1dHRvbiB7XFxyXFxuICB3aWR0aDogMTIwcHg7XFxyXFxuICBoZWlnaHQ6IDQwcHg7XFxyXFxufVxcclxcblxcclxcbi5wYWdlcyBidXR0b246ZGlzYWJsZWQge1xcclxcbiAgb3BhY2l0eTogMC43O1xcclxcbn1cXHJcXG5cXHJcXG4ucG9wdXAge1xcclxcbiAgZGlzcGxheTogbm9uZTtcXHJcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG4gIGluc2V0OiAwIDAgLTIwcHggMDtcXHJcXG4gIGJhY2tncm91bmQ6ICNmZmY7XFxyXFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcclxcbn1cXHJcXG5cXHJcXG4uY2xvc2Uge1xcclxcbiAgaGVpZ2h0OiAzMDBweDtcXHJcXG59XFxyXFxuXFxyXFxuLmltYWdlLWNsb3NlIC5mYS1zb2xpZCB7XFxyXFxuICBwYWRkaW5nLXRvcDogMDtcXHJcXG4gIGZvbnQtc2l6ZTogNDBweDtcXHJcXG59XFxyXFxuXFxyXFxuLm1vZGFsLWltYWdlIGltZyB7XFxyXFxuICB3aWR0aDogNzB2dztcXHJcXG4gIHBhZGRpbmctdG9wOiAxMHB4O1xcclxcbiAgbWF4LWhlaWdodDogMzUwcHg7XFxyXFxuICBvYmplY3QtZml0OiBjb250YWluO1xcclxcbn1cXHJcXG5cXHJcXG4uZGVzY3JpcHRpb24ge1xcclxcbiAgbWFyZ2luOiAyMHB4IDA7XFxyXFxufVxcclxcblxcclxcbi5zdGFydC1lbmQgcCxcXHJcXG4ubW92aWUtZm9yIHAge1xcclxcbiAgcGFkZGluZzogMTBweCAxMHB4O1xcclxcbn1cXHJcXG5cXHJcXG4uY29tbWVudC1tb2RhbCB7XFxyXFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcclxcbn1cXHJcXG5cXHJcXG4uZm9ybSB7XFxyXFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcclxcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxyXFxufVxcclxcblxcclxcbi50ZXh0YXJlYSxcXHJcXG4jbmFtZSxcXHJcXG4uY29tbW5ldC1idG4ge1xcclxcbiAgYmFja2dyb3VuZDogI2ZmZjtcXHJcXG4gIGZvbnQtc2l6ZTogMTdweDtcXHJcXG59XFxyXFxuXFxyXFxuI25hbWUge1xcclxcbiAgcGFkZGluZzogMCAxMHB4O1xcclxcbn1cXHJcXG5cXHJcXG4udGV4dGFyZWEge1xcclxcbiAgcGFkZGluZzogMTBweDtcXHJcXG4gIG1hcmdpbjogMTBweCAwO1xcclxcbiAgd2lkdGg6IDMwMHB4O1xcclxcbiAgaGVpZ2h0OiAxMjBweDtcXHJcXG59XFxyXFxuXFxyXFxuLmZvb3Qge1xcclxcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xcclxcbiAgcGFkZGluZzogMzBweDtcXHJcXG4gIGJvcmRlci10b3A6IDJweCBzb2xpZCAjMDAwO1xcclxcbn1cXHJcXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9zcmMvc3R5bGUuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUVBO0VBQ0UsU0FBUztFQUNULFVBQVU7RUFDVixzQkFBc0I7RUFDdEIsaUNBQWlDO0FBQ25DOztBQUVBO0VBQ0UsYUFBYTtFQUNiLHVCQUF1QjtFQUN2QixtQkFBbUI7QUFDckI7O0FBRUE7RUFDRSxXQUFXO0FBQ2I7O0FBRUE7RUFDRSxVQUFVO0VBQ1Ysa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0UsNkJBQTZCO0VBQzdCLFdBQVc7QUFDYjs7QUFFQTtFQUNFLHFCQUFxQjtFQUNyQixlQUFlO0VBQ2YsZ0JBQWdCO0FBQ2xCOztBQUVBO0VBQ0UsWUFBWTtBQUNkOztBQUVBO0VBQ0UsMEJBQTBCO0FBQzVCOztBQUVBO0VBQ0Usc0JBQXNCO0VBQ3RCLGlCQUFpQjtFQUNqQixpQkFBaUI7RUFDakIsb0JBQW9CO0FBQ3RCOztBQUVBO0VBQ0UsVUFBVTtFQUNWLGdCQUFnQjtFQUNoQixlQUFlO0VBQ2YsNkJBQTZCO0FBQy9COztBQUVBO0VBQ0UsWUFBWTtFQUNaLGFBQWE7RUFDYixzQkFBc0I7RUFDdEIsOEJBQThCO0VBQzlCLFlBQVk7RUFDWix5QkFBeUI7RUFDekIsa0JBQWtCO0VBQ2xCLGdCQUFnQjtBQUNsQjs7QUFFQTtFQUNFLFlBQVk7RUFDWixhQUFhO0VBQ2Isa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0UsZUFBZTtFQUNmLDhCQUE4QjtBQUNoQzs7QUFFQTtFQUNFLGdCQUFnQjtBQUNsQjs7QUFFQTtFQUNFLGlCQUFpQjtBQUNuQjs7QUFFQTtFQUNFLFdBQVc7RUFDWCxZQUFZO0VBQ1osc0JBQXNCO0VBQ3RCLGdCQUFnQjtBQUNsQjs7QUFFQTtFQUNFLFVBQVU7RUFDVixZQUFZO0VBQ1osOEJBQThCO0FBQ2hDOztBQUVBOzs7RUFHRSxpQkFBaUI7RUFDakIsWUFBWTtFQUNaLFlBQVk7RUFDWixrQkFBa0I7RUFDbEIsY0FBYztBQUNoQjs7QUFFQTtFQUNFLFlBQVk7RUFDWixZQUFZO0FBQ2Q7O0FBRUE7RUFDRSxZQUFZO0FBQ2Q7O0FBRUE7RUFDRSxhQUFhO0VBQ2Isa0JBQWtCO0VBQ2xCLGtCQUFrQjtFQUNsQixnQkFBZ0I7RUFDaEIsc0JBQXNCO0FBQ3hCOztBQUVBO0VBQ0UsYUFBYTtBQUNmOztBQUVBO0VBQ0UsY0FBYztFQUNkLGVBQWU7QUFDakI7O0FBRUE7RUFDRSxXQUFXO0VBQ1gsaUJBQWlCO0VBQ2pCLGlCQUFpQjtFQUNqQixtQkFBbUI7QUFDckI7O0FBRUE7RUFDRSxjQUFjO0FBQ2hCOztBQUVBOztFQUVFLGtCQUFrQjtBQUNwQjs7QUFFQTtFQUNFLHNCQUFzQjtBQUN4Qjs7QUFFQTtFQUNFLHNCQUFzQjtFQUN0Qix1QkFBdUI7QUFDekI7O0FBRUE7OztFQUdFLGdCQUFnQjtFQUNoQixlQUFlO0FBQ2pCOztBQUVBO0VBQ0UsZUFBZTtBQUNqQjs7QUFFQTtFQUNFLGFBQWE7RUFDYixjQUFjO0VBQ2QsWUFBWTtFQUNaLGFBQWE7QUFDZjs7QUFFQTtFQUNFLDJCQUEyQjtFQUMzQixhQUFhO0VBQ2IsMEJBQTBCO0FBQzVCXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIkBpbXBvcnQgdXJsKCdodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PVBvcHBpbnM6d2dodEAzMDA7NDAwOzUwMDs2MDAmZGlzcGxheT1zd2FwJyk7XFxyXFxuXFxyXFxuKiB7XFxyXFxuICBtYXJnaW46IDA7XFxyXFxuICBwYWRkaW5nOiAwO1xcclxcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXHJcXG4gIGZvbnQtZmFtaWx5OiBcXFwiUG9waW5zXFxcIiwgc2Fucy1zZXJpZjtcXHJcXG59XFxyXFxuXFxyXFxuLmZsZXgtY2VudGVyIHtcXHJcXG4gIGRpc3BsYXk6IGZsZXg7XFxyXFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXHJcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxyXFxufVxcclxcblxcclxcbi5oZWFkZXIge1xcclxcbiAgd2lkdGg6IDEwMCU7XFxyXFxufVxcclxcblxcclxcbi5uYXYtYmFyIHtcXHJcXG4gIHdpZHRoOiA5MCU7XFxyXFxuICBwYWRkaW5nOiAyMHB4IDUwcHg7XFxyXFxufVxcclxcblxcclxcbi5uYXYtYmFyIHVsIHtcXHJcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtZXZlbmx5O1xcclxcbiAgd2lkdGg6IDEwMCU7XFxyXFxufVxcclxcblxcclxcbi5uYXYtYmFyIHVsIGxpIHtcXHJcXG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcXHJcXG4gIGZvbnQtc2l6ZTogMjBweDtcXHJcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxyXFxufVxcclxcblxcclxcbi5uYXYtYmFyIGltZyB7XFxyXFxuICB3aWR0aDogMTUwcHg7XFxyXFxufVxcclxcblxcclxcbi5uYXYtYmFyIHVsIGxpOm50aC1jaGlsZCgyKSB7XFxyXFxuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcXHJcXG59XFxyXFxuXFxyXFxuLm1haW4tY29udGFpbmVyIHtcXHJcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxyXFxuICBtaW4taGVpZ2h0OiA2MDBweDtcXHJcXG4gIHBhZGRpbmctdG9wOiAyMHB4O1xcclxcbiAgcGFkZGluZy1ib3R0b206IDIwcHg7XFxyXFxufVxcclxcblxcclxcbi5saXN0LW1vdmllcyB7XFxyXFxuICB3aWR0aDogOTAlO1xcclxcbiAgbGlzdC1zdHlsZTogbm9uZTtcXHJcXG4gIGZsZXgtd3JhcDogd3JhcDtcXHJcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtZXZlbmx5O1xcclxcbn1cXHJcXG5cXHJcXG4ubW92aWUge1xcclxcbiAgd2lkdGg6IDI2NnB4O1xcclxcbiAgaGVpZ2h0OiA0MDBweDtcXHJcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxyXFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxyXFxuICBwYWRkaW5nOiA4cHg7XFxyXFxuICBib3JkZXI6IDFweCBzb2xpZCAjZDNkM2QzO1xcclxcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xcclxcbiAgbWFyZ2luLXRvcDogMTJweDtcXHJcXG59XFxyXFxuXFxyXFxuLm1vdmllIGltZyB7XFxyXFxuICB3aWR0aDogMjUwcHg7XFxyXFxuICBoZWlnaHQ6IDI1MHB4O1xcclxcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xcclxcbn1cXHJcXG5cXHJcXG4ubW92aWUtY29udGVudCB7XFxyXFxuICBmbGV4LXdyYXA6IHdyYXA7XFxyXFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxyXFxufVxcclxcblxcclxcbi5tb3ZpZS1jb250ZW50IC5saWtlcyB7XFxyXFxuICBtYXJnaW4tbGVmdDogOHB4O1xcclxcbn1cXHJcXG5cXHJcXG4ubW92aWUtY29udGVudCAubGlrZXMgaSB7XFxyXFxuICBtYXJnaW4tcmlnaHQ6IDhweDtcXHJcXG59XFxyXFxuXFxyXFxuLmJ0bi1zaG93LWNvbW1lbnQge1xcclxcbiAgd2lkdGg6IDEwMCU7XFxyXFxuICBoZWlnaHQ6IDQwcHg7XFxyXFxuICBqdXN0aWZ5LXNlbGY6IGZsZXgtZW5kO1xcclxcbiAgbWFyZ2luLXRvcDogMTJweDtcXHJcXG59XFxyXFxuXFxyXFxuLnBhZ2VzIHtcXHJcXG4gIHdpZHRoOiA5MCU7XFxyXFxuICBwYWRkaW5nOiA4cHg7XFxyXFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxyXFxufVxcclxcblxcclxcbmJ1dHRvbixcXHJcXG50ZXh0YXJlYSxcXHJcXG4uZm9ybSBpbnB1dCB7XFxyXFxuICBib3JkZXI6IDJweCBzb2xpZDtcXHJcXG4gIHdpZHRoOiAyNTBweDtcXHJcXG4gIGhlaWdodDogNDBweDtcXHJcXG4gIGJvcmRlci1yYWRpdXM6IDhweDtcXHJcXG4gIG1hcmdpbjogMTBweCAwO1xcclxcbn1cXHJcXG5cXHJcXG4ucGFnZXMgYnV0dG9uIHtcXHJcXG4gIHdpZHRoOiAxMjBweDtcXHJcXG4gIGhlaWdodDogNDBweDtcXHJcXG59XFxyXFxuXFxyXFxuLnBhZ2VzIGJ1dHRvbjpkaXNhYmxlZCB7XFxyXFxuICBvcGFjaXR5OiAwLjc7XFxyXFxufVxcclxcblxcclxcbi5wb3B1cCB7XFxyXFxuICBkaXNwbGF5OiBub25lO1xcclxcbiAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgaW5zZXQ6IDAgMCAtMjBweCAwO1xcclxcbiAgYmFja2dyb3VuZDogI2ZmZjtcXHJcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxyXFxufVxcclxcblxcclxcbi5jbG9zZSB7XFxyXFxuICBoZWlnaHQ6IDMwMHB4O1xcclxcbn1cXHJcXG5cXHJcXG4uaW1hZ2UtY2xvc2UgLmZhLXNvbGlkIHtcXHJcXG4gIHBhZGRpbmctdG9wOiAwO1xcclxcbiAgZm9udC1zaXplOiA0MHB4O1xcclxcbn1cXHJcXG5cXHJcXG4ubW9kYWwtaW1hZ2UgaW1nIHtcXHJcXG4gIHdpZHRoOiA3MHZ3O1xcclxcbiAgcGFkZGluZy10b3A6IDEwcHg7XFxyXFxuICBtYXgtaGVpZ2h0OiAzNTBweDtcXHJcXG4gIG9iamVjdC1maXQ6IGNvbnRhaW47XFxyXFxufVxcclxcblxcclxcbi5kZXNjcmlwdGlvbiB7XFxyXFxuICBtYXJnaW46IDIwcHggMDtcXHJcXG59XFxyXFxuXFxyXFxuLnN0YXJ0LWVuZCBwLFxcclxcbi5tb3ZpZS1mb3IgcCB7XFxyXFxuICBwYWRkaW5nOiAxMHB4IDEwcHg7XFxyXFxufVxcclxcblxcclxcbi5jb21tZW50LW1vZGFsIHtcXHJcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxyXFxufVxcclxcblxcclxcbi5mb3JtIHtcXHJcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxyXFxuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcXHJcXG59XFxyXFxuXFxyXFxuLnRleHRhcmVhLFxcclxcbiNuYW1lLFxcclxcbi5jb21tbmV0LWJ0biB7XFxyXFxuICBiYWNrZ3JvdW5kOiAjZmZmO1xcclxcbiAgZm9udC1zaXplOiAxN3B4O1xcclxcbn1cXHJcXG5cXHJcXG4jbmFtZSB7XFxyXFxuICBwYWRkaW5nOiAwIDEwcHg7XFxyXFxufVxcclxcblxcclxcbi50ZXh0YXJlYSB7XFxyXFxuICBwYWRkaW5nOiAxMHB4O1xcclxcbiAgbWFyZ2luOiAxMHB4IDA7XFxyXFxuICB3aWR0aDogMzAwcHg7XFxyXFxuICBoZWlnaHQ6IDEyMHB4O1xcclxcbn1cXHJcXG5cXHJcXG4uZm9vdCB7XFxyXFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxyXFxuICBwYWRkaW5nOiAzMHB4O1xcclxcbiAgYm9yZGVyLXRvcDogMnB4IHNvbGlkICMwMDA7XFxyXFxufVxcclxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcpIHtcbiAgdmFyIGxpc3QgPSBbXTtcblxuICAvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gXCJcIjtcbiAgICAgIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2YgaXRlbVs1XSAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIik7XG4gICAgICB9XG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKTtcbiAgICAgIH1cbiAgICAgIGNvbnRlbnQgKz0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKTtcbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfSkuam9pbihcIlwiKTtcbiAgfTtcblxuICAvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuICBsaXN0LmkgPSBmdW5jdGlvbiBpKG1vZHVsZXMsIG1lZGlhLCBkZWR1cGUsIHN1cHBvcnRzLCBsYXllcikge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgbW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgdW5kZWZpbmVkXV07XG4gICAgfVxuICAgIHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG4gICAgaWYgKGRlZHVwZSkge1xuICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0aGlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIHZhciBpZCA9IHRoaXNba11bMF07XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIF9rID0gMDsgX2sgPCBtb2R1bGVzLmxlbmd0aDsgX2srKykge1xuICAgICAgdmFyIGl0ZW0gPSBbXS5jb25jYXQobW9kdWxlc1tfa10pO1xuICAgICAgaWYgKGRlZHVwZSAmJiBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBsYXllciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW1bNV0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChtZWRpYSkge1xuICAgICAgICBpZiAoIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3VwcG9ydHMpIHtcbiAgICAgICAgaWYgKCFpdGVtWzRdKSB7XG4gICAgICAgICAgaXRlbVs0XSA9IFwiXCIuY29uY2F0KHN1cHBvcnRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNF0gPSBzdXBwb3J0cztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGxpc3Q7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gIHZhciBjb250ZW50ID0gaXRlbVsxXTtcbiAgdmFyIGNzc01hcHBpbmcgPSBpdGVtWzNdO1xuICBpZiAoIWNzc01hcHBpbmcpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuICBpZiAodHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjc3NNYXBwaW5nKSkpKTtcbiAgICB2YXIgZGF0YSA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCk7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBcIi8qIyBcIi5jb25jYXQoZGF0YSwgXCIgKi9cIik7XG4gICAgcmV0dXJuIFtjb250ZW50XS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKFwiXFxuXCIpO1xuICB9XG4gIHJldHVybiBbY29udGVudF0uam9pbihcIlxcblwiKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBzdHlsZXNJbkRPTSA9IFtdO1xuXG5mdW5jdGlvbiBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKSB7XG4gIHZhciByZXN1bHQgPSAtMTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlc0luRE9NLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN0eWxlc0luRE9NW2ldLmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpIHtcbiAgICAgIHJlc3VsdCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBtb2R1bGVzVG9Eb20obGlzdCwgb3B0aW9ucykge1xuICB2YXIgaWRDb3VudE1hcCA9IHt9O1xuICB2YXIgaWRlbnRpZmllcnMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaXRlbSA9IGxpc3RbaV07XG4gICAgdmFyIGlkID0gb3B0aW9ucy5iYXNlID8gaXRlbVswXSArIG9wdGlvbnMuYmFzZSA6IGl0ZW1bMF07XG4gICAgdmFyIGNvdW50ID0gaWRDb3VudE1hcFtpZF0gfHwgMDtcbiAgICB2YXIgaWRlbnRpZmllciA9IFwiXCIuY29uY2F0KGlkLCBcIiBcIikuY29uY2F0KGNvdW50KTtcbiAgICBpZENvdW50TWFwW2lkXSA9IGNvdW50ICsgMTtcbiAgICB2YXIgaW5kZXhCeUlkZW50aWZpZXIgPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICB2YXIgb2JqID0ge1xuICAgICAgY3NzOiBpdGVtWzFdLFxuICAgICAgbWVkaWE6IGl0ZW1bMl0sXG4gICAgICBzb3VyY2VNYXA6IGl0ZW1bM10sXG4gICAgICBzdXBwb3J0czogaXRlbVs0XSxcbiAgICAgIGxheWVyOiBpdGVtWzVdXG4gICAgfTtcblxuICAgIGlmIChpbmRleEJ5SWRlbnRpZmllciAhPT0gLTEpIHtcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4QnlJZGVudGlmaWVyXS5yZWZlcmVuY2VzKys7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0udXBkYXRlcihvYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdXBkYXRlciA9IGFkZEVsZW1lbnRTdHlsZShvYmosIG9wdGlvbnMpO1xuICAgICAgb3B0aW9ucy5ieUluZGV4ID0gaTtcbiAgICAgIHN0eWxlc0luRE9NLnNwbGljZShpLCAwLCB7XG4gICAgICAgIGlkZW50aWZpZXI6IGlkZW50aWZpZXIsXG4gICAgICAgIHVwZGF0ZXI6IHVwZGF0ZXIsXG4gICAgICAgIHJlZmVyZW5jZXM6IDFcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlkZW50aWZpZXJzLnB1c2goaWRlbnRpZmllcik7XG4gIH1cblxuICByZXR1cm4gaWRlbnRpZmllcnM7XG59XG5cbmZ1bmN0aW9uIGFkZEVsZW1lbnRTdHlsZShvYmosIG9wdGlvbnMpIHtcbiAgdmFyIGFwaSA9IG9wdGlvbnMuZG9tQVBJKG9wdGlvbnMpO1xuICBhcGkudXBkYXRlKG9iaik7XG5cbiAgdmFyIHVwZGF0ZXIgPSBmdW5jdGlvbiB1cGRhdGVyKG5ld09iaikge1xuICAgIGlmIChuZXdPYmopIHtcbiAgICAgIGlmIChuZXdPYmouY3NzID09PSBvYmouY3NzICYmIG5ld09iai5tZWRpYSA9PT0gb2JqLm1lZGlhICYmIG5ld09iai5zb3VyY2VNYXAgPT09IG9iai5zb3VyY2VNYXAgJiYgbmV3T2JqLnN1cHBvcnRzID09PSBvYmouc3VwcG9ydHMgJiYgbmV3T2JqLmxheWVyID09PSBvYmoubGF5ZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBhcGkudXBkYXRlKG9iaiA9IG5ld09iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZW1vdmUoKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHVwZGF0ZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGxpc3QsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGxpc3QgPSBsaXN0IHx8IFtdO1xuICB2YXIgbGFzdElkZW50aWZpZXJzID0gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpO1xuICByZXR1cm4gZnVuY3Rpb24gdXBkYXRlKG5ld0xpc3QpIHtcbiAgICBuZXdMaXN0ID0gbmV3TGlzdCB8fCBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaWRlbnRpZmllciA9IGxhc3RJZGVudGlmaWVyc1tpXTtcbiAgICAgIHZhciBpbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhdLnJlZmVyZW5jZXMtLTtcbiAgICB9XG5cbiAgICB2YXIgbmV3TGFzdElkZW50aWZpZXJzID0gbW9kdWxlc1RvRG9tKG5ld0xpc3QsIG9wdGlvbnMpO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGxhc3RJZGVudGlmaWVycy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBfaWRlbnRpZmllciA9IGxhc3RJZGVudGlmaWVyc1tfaV07XG5cbiAgICAgIHZhciBfaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihfaWRlbnRpZmllcik7XG5cbiAgICAgIGlmIChzdHlsZXNJbkRPTVtfaW5kZXhdLnJlZmVyZW5jZXMgPT09IDApIHtcbiAgICAgICAgc3R5bGVzSW5ET01bX2luZGV4XS51cGRhdGVyKCk7XG5cbiAgICAgICAgc3R5bGVzSW5ET00uc3BsaWNlKF9pbmRleCwgMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGFzdElkZW50aWZpZXJzID0gbmV3TGFzdElkZW50aWZpZXJzO1xuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIG1lbW8gPSB7fTtcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuXG5mdW5jdGlvbiBnZXRUYXJnZXQodGFyZ2V0KSB7XG4gIGlmICh0eXBlb2YgbWVtb1t0YXJnZXRdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgdmFyIHN0eWxlVGFyZ2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXQpOyAvLyBTcGVjaWFsIGNhc2UgdG8gcmV0dXJuIGhlYWQgb2YgaWZyYW1lIGluc3RlYWQgb2YgaWZyYW1lIGl0c2VsZlxuXG4gICAgaWYgKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCAmJiBzdHlsZVRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVGhpcyB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhY2Nlc3MgdG8gaWZyYW1lIGlzIGJsb2NrZWRcbiAgICAgICAgLy8gZHVlIHRvIGNyb3NzLW9yaWdpbiByZXN0cmljdGlvbnNcbiAgICAgICAgc3R5bGVUYXJnZXQgPSBzdHlsZVRhcmdldC5jb250ZW50RG9jdW1lbnQuaGVhZDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgc3R5bGVUYXJnZXQgPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIG1lbW9bdGFyZ2V0XSA9IHN0eWxlVGFyZ2V0O1xuICB9XG5cbiAgcmV0dXJuIG1lbW9bdGFyZ2V0XTtcbn1cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuXG5cbmZ1bmN0aW9uIGluc2VydEJ5U2VsZWN0b3IoaW5zZXJ0LCBzdHlsZSkge1xuICB2YXIgdGFyZ2V0ID0gZ2V0VGFyZ2V0KGluc2VydCk7XG5cbiAgaWYgKCF0YXJnZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGEgc3R5bGUgdGFyZ2V0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGZvciB0aGUgJ2luc2VydCcgcGFyYW1ldGVyIGlzIGludmFsaWQuXCIpO1xuICB9XG5cbiAgdGFyZ2V0LmFwcGVuZENoaWxkKHN0eWxlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRCeVNlbGVjdG9yOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKSB7XG4gIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICBvcHRpb25zLnNldEF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucy5hdHRyaWJ1dGVzKTtcbiAgb3B0aW9ucy5pbnNlcnQoZWxlbWVudCwgb3B0aW9ucy5vcHRpb25zKTtcbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0U3R5bGVFbGVtZW50OyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcyhzdHlsZUVsZW1lbnQpIHtcbiAgdmFyIG5vbmNlID0gdHlwZW9mIF9fd2VicGFja19ub25jZV9fICE9PSBcInVuZGVmaW5lZFwiID8gX193ZWJwYWNrX25vbmNlX18gOiBudWxsO1xuXG4gIGlmIChub25jZSkge1xuICAgIHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLCBub25jZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gYXBwbHkoc3R5bGVFbGVtZW50LCBvcHRpb25zLCBvYmopIHtcbiAgdmFyIGNzcyA9IFwiXCI7XG5cbiAgaWYgKG9iai5zdXBwb3J0cykge1xuICAgIGNzcyArPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KG9iai5zdXBwb3J0cywgXCIpIHtcIik7XG4gIH1cblxuICBpZiAob2JqLm1lZGlhKSB7XG4gICAgY3NzICs9IFwiQG1lZGlhIFwiLmNvbmNhdChvYmoubWVkaWEsIFwiIHtcIik7XG4gIH1cblxuICB2YXIgbmVlZExheWVyID0gdHlwZW9mIG9iai5sYXllciAhPT0gXCJ1bmRlZmluZWRcIjtcblxuICBpZiAobmVlZExheWVyKSB7XG4gICAgY3NzICs9IFwiQGxheWVyXCIuY29uY2F0KG9iai5sYXllci5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KG9iai5sYXllcikgOiBcIlwiLCBcIiB7XCIpO1xuICB9XG5cbiAgY3NzICs9IG9iai5jc3M7XG5cbiAgaWYgKG5lZWRMYXllcikge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuXG4gIGlmIChvYmoubWVkaWEpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cblxuICBpZiAob2JqLnN1cHBvcnRzKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG5cbiAgdmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXA7XG5cbiAgaWYgKHNvdXJjZU1hcCAmJiB0eXBlb2YgYnRvYSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGNzcyArPSBcIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIuY29uY2F0KGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSksIFwiICovXCIpO1xuICB9IC8vIEZvciBvbGQgSUVcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgICovXG5cblxuICBvcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtKGNzcywgc3R5bGVFbGVtZW50LCBvcHRpb25zLm9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGVFbGVtZW50KSB7XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBpZlxuICBpZiAoc3R5bGVFbGVtZW50LnBhcmVudE5vZGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzdHlsZUVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQpO1xufVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cblxuZnVuY3Rpb24gZG9tQVBJKG9wdGlvbnMpIHtcbiAgdmFyIHN0eWxlRWxlbWVudCA9IG9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpO1xuICByZXR1cm4ge1xuICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKG9iaikge1xuICAgICAgYXBwbHkoc3R5bGVFbGVtZW50LCBvcHRpb25zLCBvYmopO1xuICAgIH0sXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgICByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGVFbGVtZW50KTtcbiAgICB9XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZG9tQVBJOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIHN0eWxlVGFnVHJhbnNmb3JtKGNzcywgc3R5bGVFbGVtZW50KSB7XG4gIGlmIChzdHlsZUVsZW1lbnQuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKSB7XG4gICAgICBzdHlsZUVsZW1lbnQucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpO1xuICAgIH1cblxuICAgIHN0eWxlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0eWxlVGFnVHJhbnNmb3JtOyIsImltcG9ydCBzZW5kQ29tbWVudCBmcm9tICcuL0NvbW1lbnQuanMnO1xuXG5sZXQgY3VycmVudElkID0gLTE7XG5cbmNvbnN0IHNob3dQb3B1cCA9IChtb3ZpZSkgPT4ge1xuICBjdXJyZW50SWQgPSBtb3ZpZS5pZDtcbiAgY29uc3QgcHJvamVjdE1vZGFsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnBvcHVwJyk7XG4gIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5Jyk7XG4gIHByb2plY3RNb2RhbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgY29uc3QgbW9kYWxWaXNpYmxlID0gYFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtbW9kYWxcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlLWNsb3NlIGZsZXgtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaW1hZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIiR7bW92aWUuaW1hZ2UubWVkaXVtfVwiIGFsdD1cIlwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cImZsZXgtY2VudGVyIG1vdmllLXRpdGxlXCI+JHttb3ZpZS5uYW1lfTwvaDM+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbG9zZVwiPiA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLXhtYXJrXCI+PC9pPjwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtY2VudGVyIGRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGFydC1lbmRcIj5cbiAgICAgICAgICAgICAgPHA+IFByZW1pZXJlZDogPHNwYW4+JHttb3ZpZS5wcmVtaWVyZWR9PC9zcGFuPjwvcD5cbiAgICAgICAgICAgICAgPHA+RW5kZWQ6IDxzcGFuPiR7bW92aWUuZW5kZWR9PC9zcGFuPjwvcD5cbiAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW92aWUtZm9yXCI+XG4gICAgICAgICAgICAgIDxwPkdlbnJlczogPHNwYW4+JHttb3ZpZS5nZW5yZXN9PC9zcGFuPjwvcD5cbiAgICAgICAgICAgICAgPHA+bGFuZ3VhZ2U6IDxzcGFuPiR7bW92aWUubGFuZ3VhZ2V9PC9zcGFuPjwvcD5cbiAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxoNCBjbGFzcz1cImZsZXgtY2VudGVyXCI+IGNvbW1lbnRzKDxzcGFuPjI8L3NwYW4+KTwvaDQ+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWNlbnRlciBjb21tZW50LW1vZGFsXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tbWVudC1jb250YWluZXIgZmxleC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImRhdGVcIj4wMy8xMS8yMDIxPC9wPlxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiY29tbWVudG9yXCI+QWxleDogPC9wPlxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiY29tbWVudFwiPm5pY2UgbW92aWU8L3A+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWNlbnRlciB0eXBlLWNvbW1lbnQtbW9kYWxcIj5cbiAgICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybSBmbGV4LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJuYW1lXCIgaWQ9XCJuYW1lXCIgcGxhY2Vob2xkZXI9XCJZb3VyIG5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJ0ZXh0YXJlYVwiIG5hbWU9XCJjb21tZW50XCIgaWQ9XCJjb21tZW50XCIgY29scz1cIjMwXCIgcm93cz1cIjEwXCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29tbW5ldC1idG5cIj5jb21tZW50PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Zvcm0+XG4gIFxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgXG4gICAgICAgICAgPC9kaXY+YDtcbiAgYm9keS5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gIHByb2plY3RNb2RhbC5pbm5lckhUTUwgPSBtb2RhbFZpc2libGU7XG5cbiAgY29uc3QgY2xvc2VNb2RhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2Nsb3NlJyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY2xvc2VNb2RhbC5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGNsb3NlTW9kYWxbaV0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICBwcm9qZWN0TW9kYWwuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIGJvZHkuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xuICAgIH0pO1xuICB9XG4gIHNlbmRDb21tZW50KCk7XG59O1xuXG5leHBvcnQgeyBzaG93UG9wdXAsIGN1cnJlbnRJZCB9OyIsIlxuICAgICAgaW1wb3J0IEFQSSBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0Rm4gZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzXCI7XG4gICAgICBpbXBvcnQgc2V0QXR0cmlidXRlcyBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiO1xuICAgICAgaW1wb3J0IHN0eWxlVGFnVHJhbnNmb3JtRm4gZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiO1xuICAgICAgaW1wb3J0IGNvbnRlbnQsICogYXMgbmFtZWRFeHBvcnQgZnJvbSBcIiEhLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5jc3NcIjtcbiAgICAgIFxuICAgICAgXG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0gPSBzdHlsZVRhZ1RyYW5zZm9ybUZuO1xub3B0aW9ucy5zZXRBdHRyaWJ1dGVzID0gc2V0QXR0cmlidXRlcztcblxuICAgICAgb3B0aW9ucy5pbnNlcnQgPSBpbnNlcnRGbi5iaW5kKG51bGwsIFwiaGVhZFwiKTtcbiAgICBcbm9wdGlvbnMuZG9tQVBJID0gZG9tQVBJO1xub3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7XG5cbnZhciB1cGRhdGUgPSBBUEkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgKiBmcm9tIFwiISEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLmNzc1wiO1xuICAgICAgIGV4cG9ydCBkZWZhdWx0IGNvbnRlbnQgJiYgY29udGVudC5sb2NhbHMgPyBjb250ZW50LmxvY2FscyA6IHVuZGVmaW5lZDtcbiIsImltcG9ydCBMaXN0TW92aWVzIGZyb20gJy4vbW9kdWxlcy9MaXN0TW92aWVzLmpzJztcbmltcG9ydCBnZXRDb21tZW50IGZyb20gJy4vbW9kdWxlcy9nZXRDb21tZW50cy5qcyc7XG5pbXBvcnQgJy4vc3R5bGUuY3NzJztcblxuY29uc3QgbGlzdE1vdmllcyA9IG5ldyBMaXN0TW92aWVzKCk7XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgYXN5bmMgKCkgPT4ge1xuICBhd2FpdCBsaXN0TW92aWVzLmdldExpc3RMaWtlcygpO1xuICBhd2FpdCBsaXN0TW92aWVzLmdldExpc3RNb3ZpZXMoKTtcbiAgbGlzdE1vdmllcy5kaXNwbGF5KCk7XG59KTtcblxuZ2V0Q29tbWVudCgpOyIsImltcG9ydCB7IHNob3dQb3B1cCB9IGZyb20gJy4vcG9wdXAuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMaXN0TW92aWVzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5saXN0ID0gW107XG4gICAgdGhpcy5saXN0TGlrZWRNb3ZpZXMgPSBbXTtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcbiAgICB0aGlzLnVybEFwaSA9ICdodHRwczovL2FwaS50dm1hemUuY29tL3Nob3dzJztcbiAgICB0aGlzLnVybEludm9sdmVtZW50QVBJID0gJ2h0dHBzOi8vdXMtY2VudHJhbDEtaW52b2x2ZW1lbnQtYXBpLmNsb3VkZnVuY3Rpb25zLm5ldC9jYXBzdG9uZUFwaSc7XG4gICAgdGhpcy5hcHBJRCA9ICdKSkZEQXB3cldwSk5lWTNuV3p2VSc7XG4gIH1cblxuICAvKiBEaXNwbGF5IChMb2FkIGR5bm5hbWljYWxseSkgYSBsaW1pdGVkIG51bWJlciBvZiBtb3ZpZXMgKi9cbiAgZGlzcGxheSA9ICgpID0+IHtcbiAgICB0aGlzLmxpc3QuZm9yRWFjaCgobW92aWUpID0+IHtcbiAgICAgIC8vIGR5bmFtaWMgbG9hZCBvZiBsaXN0IG9mIG1vdmllc1xuICAgICAgY29uc3QgbGlNb3ZpZXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpO1xuICAgICAgbGlNb3ZpZXMuY2xhc3NMaXN0LmFkZCgnZmxleC1jZW50ZXInLCAnbW92aWUnKTtcbiAgICAgIGxpTW92aWVzLmlkID0gYG1vdmllLSR7bW92aWUuaWR9YDtcblxuICAgICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgY29uc3QgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgICBpbWcuc3JjID0gbW92aWUuaW1hZ2UubWVkaXVtO1xuICAgICAgaW1nLmFsdCA9IGBNb3ZpZXMgJHttb3ZpZS5uYW1lfSBpbWFnZWA7XG5cbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGNvbnRlbnQuY2xhc3NMaXN0LmFkZCgnZmxleC1jZW50ZXInLCAnbW92aWUtY29udGVudCcpO1xuICAgICAgY29uc3QgaDMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdoMycpO1xuICAgICAgaDMudGV4dENvbnRlbnQgPSBtb3ZpZS5uYW1lO1xuICAgICAgY29uc3QgZGl2TGlrZXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGRpdkxpa2VzLmNsYXNzTGlzdC5hZGQoJ2ZsZXgtY2VudGVyJywgJ2xpa2VzJyk7XG4gICAgICBjb25zdCBpY29uTGlrZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2knKTtcbiAgICAgIGljb25MaWtlLmNsYXNzTGlzdC5hZGQoJ2ZhLXJlZ3VsYXInLCAnZmEtaGVhcnQnKTtcbiAgICAgIGNvbnN0IHBMaWtlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpO1xuICAgICAgaWYgKHRoaXMubGlzdExpa2VkTW92aWVzLmNvbnRhaW50KSB7IHBMaWtlLnRleHRDb250ZW50ID0gJzMgTGlrZSc7IH1cblxuICAgICAgY29uc3QgYnRuU2hvd0NvbW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgIGJ0blNob3dDb21tZW50LmNsYXNzTGlzdC5hZGQoJ2J0bi1zaG93LWNvbW1lbnQnKTtcbiAgICAgIGJ0blNob3dDb21tZW50LnRleHRDb250ZW50ID0gJ0NvbW1lbnRzJztcblxuICAgICAgLyogRXZlbnQgTGlzdG5lciAqL1xuICAgICAgYnRuU2hvd0NvbW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgIHNob3dQb3B1cChtb3ZpZSk7XG4gICAgICB9KTtcbiAgICAgIC8qIExpc3Qgb2YgYXBwZW5kICovXG4gICAgICBkaXZMaWtlcy5hcHBlbmQoaWNvbkxpa2UsIHBMaWtlKTtcbiAgICAgIGNvbnRlbnQuYXBwZW5kKGgzLCBkaXZMaWtlcyk7XG4gICAgICB3cmFwcGVyLmFwcGVuZChpbWcsIGNvbnRlbnQpO1xuICAgICAgbGlNb3ZpZXMuYXBwZW5kKHdyYXBwZXIsIGJ0blNob3dDb21tZW50KTtcblxuICAgICAgY29uc3QgdWxMaXN0TW92aWVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpc3QtbW92aWVzJyk7XG4gICAgICB1bExpc3RNb3ZpZXMuYXBwZW5kKGxpTW92aWVzKTtcblxuICAgICAgaWNvbkxpa2UuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgeyBpZCB9ID0gbGlNb3ZpZXM7XG4gICAgICAgIGxldCBsaWtlcyA9IDA7XG4gICAgICAgIGxldCBsaWtlSW5kZXggPSAtMTtcbiAgICAgICAgLy8gZmluZCB0aGUgY29ycmVudCBudW1iZXIgb2YgbGlrZVxuICAgICAgICB0aGlzLmxpc3RMaWtlZE1vdmllcy5maWx0ZXIoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgaWYgKGl0ZW0uaXRlbV9pZCA9PT0gaWQpIHtcbiAgICAgICAgICAgIGxpa2VzID0gaXRlbS5saWtlcztcbiAgICAgICAgICAgIGxpa2VJbmRleCA9IGluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gYWRkIGEgbGlrZSBhbmQgZGlzcGxheVxuICAgICAgICBjb25zdCBpc0xpa2luZyA9IGV2ZW50LmN1cnJlbnRUYXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdmYS1yZWd1bGFyJyk7XG4gICAgICAgIGlmIChpc0xpa2luZykge1xuICAgICAgICAgIGxpa2VzICs9IDE7XG4gICAgICAgICAgZXZlbnQuY3VycmVudFRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKCdmYS1yZWd1bGFyJywgJ2ZhLWhlYXJ0Jyk7XG4gICAgICAgICAgZXZlbnQuY3VycmVudFRhcmdldC5jbGFzc0xpc3QuYWRkKCdmYS1zb2xpZCcsICdmYS1oZWFydCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpa2VzIC09IDE7XG4gICAgICAgICAgZXZlbnQuY3VycmVudFRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKCdmYS1zb2xpZCcsICdmYS1oZWFydCcpO1xuICAgICAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQuY2xhc3NMaXN0LmFkZCgnZmEtcmVndWxhcicsICdmYS1oZWFydCcpO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQubmV4dFNpYmxpbmcudGV4dENvbnRlbnQgPSBgJHtsaWtlc30gbGlrZWA7XG5cbiAgICAgICAgLy8gc2F2ZSBsaWtlIG9uIHRoZSBsaXN0XG4gICAgICAgIGlmIChsaWtlSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgdGhpcy5saXN0TGlrZWRNb3ZpZXMucHVzaCh7IGl0ZW1faWQ6IGlkLCBsaWtlcyB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxpc3RMaWtlZE1vdmllc1tsaWtlSW5kZXhdLmxpa2VzID0gbGlrZXM7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzYXZlIGxpa2Ugb24gdGhlIEFQSVxuICAgICAgICB0aGlzLnNhdmVMaWtlKGlkLCBsaWtlcyk7XG4gICAgICB9KTtcblxuICAgICAgLy8gZmluZCB0aGUgY29ycmVudCBudW1iZXIgb2YgbGlrZVxuICAgICAgdGhpcy5saXN0TGlrZWRNb3ZpZXMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgIGlmIChpdGVtLml0ZW1faWQgPT09IGxpTW92aWVzLmlkKSB7XG4gICAgICAgICAgcExpa2UudGV4dENvbnRlbnQgPSBgJHtpdGVtLmxpa2VzfSBsaWtlYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyogR2V0IGxpc3Qgb2YgbW92aWVzIHdpdGggYSBHRVQgcmVxdWVzdCB0byB0aGUgQVBJOiAgKi9cbiAgZ2V0TGlzdE1vdmllcyA9IGFzeW5jICgpID0+IHtcbiAgICAvLyBBUEkgUmVxdWVzdFxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaChgJHt0aGlzLnVybEFwaX0/cGFnZT0ke3RoaXMuY3VycmVudFBhZ2V9YCk7XG4gICAgYXdhaXQgZGF0YS5qc29uKCkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5saXN0ID0gZGF0YTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldExpc3RMaWtlcyA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2goYCR7dGhpcy51cmxJbnZvbHZlbWVudEFQSX0vYXBwcy8ke3RoaXMuYXBwSUR9L2xpa2VzL2ApO1xuICAgIGF3YWl0IGRhdGEuanNvbigpLnRoZW4oKGxpc3RMaWtlZE1vdmllcykgPT4ge1xuICAgICAgdGhpcy5saXN0TGlrZWRNb3ZpZXMgPSBsaXN0TGlrZWRNb3ZpZXM7XG4gICAgfSk7XG4gIH1cblxuICBzYXZlTGlrZSA9IGFzeW5jIChpZCwgbGlrZXMpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaChgJHt0aGlzLnVybEludm9sdmVtZW50QVBJfS9hcHBzLyR7dGhpcy5hcHBJRH0vbGlrZXMvYCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgaXRlbV9pZDogaWQsIGxpa2VzIH0pLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5vaztcbiAgfVxuXG4gIC8qIGludm9sdmVtZW50IEFQSTogY3JlYXRlIGEgbmV3IEFQUCAqL1xuICBjcmVhdGVBcHAgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoKGAke3RoaXMudXJsSW52b2x2ZW1lbnRBUEl9L2FwcHMvYCxcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbn0iLCJpbXBvcnQgeyBjdXJyZW50SWQgfSBmcm9tICcuL3BvcHVwLmpzJztcblxuY29uc3Qgc2VuZENvbW1lbnQgPSAoKSA9PiB7XG4gIGNvbnN0IHVzZXJOYW1lID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI25hbWUnKTtcbiAgY29uc3QgY29tbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNjb21tZW50Jyk7XG4gIGNvbnN0IFN1Ym1pdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jb21tbmV0LWJ0bicpO1xuXG4gIGNvbnN0IHBvc3RDb21tZW50ID0gYXN5bmMgKGlkKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnaHR0cHM6Ly91cy1jZW50cmFsMS1pbnZvbHZlbWVudC1hcGkuY2xvdWRmdW5jdGlvbnMubmV0L2NhcHN0b25lQXBpL2FwcHMvSkpGREFwd3JXcEpOZVkzbld6dlUvY29tbWVudHMnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGl0ZW1faWQ6IGlkLFxuICAgICAgICB1c2VybmFtZTogdXNlck5hbWUudmFsdWUsXG4gICAgICAgIGNvbW1lbnQ6IGNvbW1lbnQudmFsdWUsXG4gICAgICB9KSxcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgIHJldHVybiBkYXRhO1xuICB9O1xuICBTdWJtaXQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHBvc3RDb21tZW50KGN1cnJlbnRJZCk7XG4gICAgY29uc29sZS5sb2codXNlck5hbWUudmFsdWUsIGNvbW1lbnQudmFsdWUpO1xuICAgIHVzZXJOYW1lLnZhbHVlID0gJyc7XG4gICAgY29tbWVudC52YWx1ZSA9ICcnO1xuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHNlbmRDb21tZW50OyIsImNvbnN0IGdldENvbW1lbnQgPSBhc3luYyAoKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgQXZhdGFyVVJMID0gYXdhaXQgZmV0Y2goJ2h0dHBzOi8vdXMtY2VudHJhbDEtaW52b2x2ZW1lbnQtYXBpLmNsb3VkZnVuY3Rpb25zLm5ldC9jYXBzdG9uZUFwaS9hcHBzL0pKRkRBcHdyV3BKTmVZM25XenZVL2NvbW1lbnRzJyk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBBdmF0YXJVUkwuanNvbigpO1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3I7XG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBnZXRDb21tZW50OyJdLCJuYW1lcyI6WyJfX19DU1NfTE9BREVSX0VYUE9SVF9fXyIsInB1c2giLCJtb2R1bGUiLCJpZCIsImV4cG9ydHMiLCJjc3NXaXRoTWFwcGluZ1RvU3RyaW5nIiwibGlzdCIsInRvU3RyaW5nIiwidGhpcyIsIm1hcCIsIml0ZW0iLCJjb250ZW50IiwibmVlZExheWVyIiwiY29uY2F0IiwibGVuZ3RoIiwiam9pbiIsImkiLCJtb2R1bGVzIiwibWVkaWEiLCJkZWR1cGUiLCJzdXBwb3J0cyIsImxheWVyIiwidW5kZWZpbmVkIiwiYWxyZWFkeUltcG9ydGVkTW9kdWxlcyIsImsiLCJfayIsImNzc01hcHBpbmciLCJidG9hIiwiYmFzZTY0IiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJKU09OIiwic3RyaW5naWZ5IiwiZGF0YSIsInNvdXJjZU1hcHBpbmciLCJzdHlsZXNJbkRPTSIsImdldEluZGV4QnlJZGVudGlmaWVyIiwiaWRlbnRpZmllciIsInJlc3VsdCIsIm1vZHVsZXNUb0RvbSIsIm9wdGlvbnMiLCJpZENvdW50TWFwIiwiaWRlbnRpZmllcnMiLCJiYXNlIiwiY291bnQiLCJpbmRleEJ5SWRlbnRpZmllciIsIm9iaiIsImNzcyIsInNvdXJjZU1hcCIsInJlZmVyZW5jZXMiLCJ1cGRhdGVyIiwiYWRkRWxlbWVudFN0eWxlIiwiYnlJbmRleCIsInNwbGljZSIsImFwaSIsImRvbUFQSSIsInVwZGF0ZSIsIm5ld09iaiIsInJlbW92ZSIsImxhc3RJZGVudGlmaWVycyIsIm5ld0xpc3QiLCJpbmRleCIsIm5ld0xhc3RJZGVudGlmaWVycyIsIl9pIiwiX2luZGV4IiwibWVtbyIsImluc2VydCIsInN0eWxlIiwidGFyZ2V0Iiwic3R5bGVUYXJnZXQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJ3aW5kb3ciLCJIVE1MSUZyYW1lRWxlbWVudCIsImNvbnRlbnREb2N1bWVudCIsImhlYWQiLCJlIiwiZ2V0VGFyZ2V0IiwiRXJyb3IiLCJhcHBlbmRDaGlsZCIsImVsZW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic2V0QXR0cmlidXRlcyIsImF0dHJpYnV0ZXMiLCJzdHlsZUVsZW1lbnQiLCJub25jZSIsInNldEF0dHJpYnV0ZSIsImluc2VydFN0eWxlRWxlbWVudCIsInN0eWxlVGFnVHJhbnNmb3JtIiwiYXBwbHkiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJyZW1vdmVTdHlsZUVsZW1lbnQiLCJzdHlsZVNoZWV0IiwiY3NzVGV4dCIsImZpcnN0Q2hpbGQiLCJjcmVhdGVUZXh0Tm9kZSIsImN1cnJlbnRJZCIsImxpc3RNb3ZpZXMiLCJjb25zdHJ1Y3RvciIsImxpc3RMaWtlZE1vdmllcyIsImN1cnJlbnRQYWdlIiwidXJsQXBpIiwidXJsSW52b2x2ZW1lbnRBUEkiLCJhcHBJRCIsImRpc3BsYXkiLCJmb3JFYWNoIiwibW92aWUiLCJsaU1vdmllcyIsImNsYXNzTGlzdCIsImFkZCIsIndyYXBwZXIiLCJpbWciLCJzcmMiLCJpbWFnZSIsIm1lZGl1bSIsImFsdCIsIm5hbWUiLCJoMyIsInRleHRDb250ZW50IiwiZGl2TGlrZXMiLCJpY29uTGlrZSIsInBMaWtlIiwiY29udGFpbnQiLCJidG5TaG93Q29tbWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJwcm9qZWN0TW9kYWwiLCJib2R5IiwibW9kYWxWaXNpYmxlIiwicHJlbWllcmVkIiwiZW5kZWQiLCJnZW5yZXMiLCJsYW5ndWFnZSIsInBvc2l0aW9uIiwiaW5uZXJIVE1MIiwiY2xvc2VNb2RhbCIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJ1c2VyTmFtZSIsImNvbW1lbnQiLCJldmVudCIsInByZXZlbnREZWZhdWx0IiwiYXN5bmMiLCJyZXNwb25zZSIsImZldGNoIiwibWV0aG9kIiwiaGVhZGVycyIsIml0ZW1faWQiLCJ1c2VybmFtZSIsInZhbHVlIiwianNvbiIsInBvc3RDb21tZW50IiwiY29uc29sZSIsImxvZyIsInNob3dQb3B1cCIsImFwcGVuZCIsImdldEVsZW1lbnRCeUlkIiwibGlrZXMiLCJsaWtlSW5kZXgiLCJmaWx0ZXIiLCJjdXJyZW50VGFyZ2V0IiwiY29udGFpbnMiLCJuZXh0U2libGluZyIsInNhdmVMaWtlIiwiZ2V0TGlzdE1vdmllcyIsInRoZW4iLCJnZXRMaXN0TGlrZXMiLCJvayIsImNyZWF0ZUFwcCIsIkF2YXRhclVSTCIsImVycm9yIl0sInNvdXJjZVJvb3QiOiIifQ== -======= -"use strict";(self.webpackChunkcapston_javascript=self.webpackChunkcapston_javascript||[]).push([[179],{426:(n,e,r)=>{r.d(e,{Z:()=>o});var t=r(537),i=r.n(t),a=r(645),s=r.n(a)()(i());s.push([n.id,"@import url(https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap);"]),s.push([n.id,'* {\r\n margin: 0;\r\n padding: 0;\r\n box-sizing: border-box;\r\n font-family: "Popins", sans-serif;\r\n}\r\n\r\n.flex-center {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n}\r\n\r\n.header {\r\n width: 100%;\r\n}\r\n\r\n.nav-bar {\r\n width: 90%;\r\n padding: 20px 50px;\r\n}\r\n\r\n.nav-bar ul {\r\n justify-content: space-evenly;\r\n width: 100%;\r\n}\r\n\r\n.nav-bar ul li {\r\n list-style-type: none;\r\n font-size: 20px;\r\n font-weight: 400;\r\n}\r\n\r\n.nav-bar img {\r\n width: 150px;\r\n}\r\n\r\n.nav-bar ul li:nth-child(2) {\r\n text-decoration: underline;\r\n}\r\n\r\n.main-container {\r\n flex-direction: column;\r\n min-height: 600px;\r\n padding-top: 20px;\r\n padding-bottom: 20px;\r\n}\r\n\r\n.list-movies {\r\n width: 90%;\r\n list-style: none;\r\n flex-wrap: wrap;\r\n justify-content: space-evenly;\r\n}\r\n\r\n.movie {\r\n width: 266px;\r\n height: 400px;\r\n flex-direction: column;\r\n justify-content: space-between;\r\n padding: 8px;\r\n border: 1px solid #d3d3d3;\r\n border-radius: 4px;\r\n margin-top: 12px;\r\n}\r\n\r\n.movie img {\r\n width: 250px;\r\n height: 250px;\r\n border-radius: 4px;\r\n}\r\n\r\n.movie-content {\r\n flex-wrap: wrap;\r\n justify-content: space-between;\r\n}\r\n\r\n.movie-content .likes {\r\n margin-left: 8px;\r\n}\r\n\r\n.movie-content .likes i {\r\n margin-right: 8px;\r\n}\r\n\r\n.btn-show-comment {\r\n width: 100%;\r\n height: 40px;\r\n justify-self: flex-end;\r\n margin-top: 12px;\r\n}\r\n\r\n.pages {\r\n width: 90%;\r\n padding: 8px;\r\n justify-content: space-between;\r\n}\r\n\r\nbutton,\r\ntextarea,\r\n.form input {\r\n border: 2px solid;\r\n width: 250px;\r\n height: 40px;\r\n border-radius: 8px;\r\n margin: 10px 0;\r\n}\r\n\r\n.pages button {\r\n width: 120px;\r\n height: 40px;\r\n}\r\n\r\n.pages button:disabled {\r\n opacity: 0.7;\r\n}\r\n\r\n.popup {\r\n display: none;\r\n position: absolute;\r\n inset: 0 0 -20px 0;\r\n background: #fff;\r\n flex-direction: column;\r\n}\r\n\r\n.close {\r\n height: 300px;\r\n}\r\n\r\n.image-close .fa-solid {\r\n padding-top: 0;\r\n font-size: 40px;\r\n}\r\n\r\n.modal-image img {\r\n width: 70vw;\r\n padding-top: 10px;\r\n max-height: 350px;\r\n object-fit: contain;\r\n}\r\n\r\n.description {\r\n margin: 20px 0;\r\n}\r\n\r\n.start-end p,\r\n.movie-for p {\r\n padding: 10px 10px;\r\n}\r\n\r\n.comment-modal {\r\n flex-direction: column;\r\n}\r\n\r\n.form {\r\n flex-direction: column;\r\n align-items: flex-start;\r\n}\r\n\r\n.textarea,\r\n#name,\r\n.commnet-btn {\r\n background: #fff;\r\n font-size: 17px;\r\n}\r\n\r\n#name {\r\n padding: 0 10px;\r\n}\r\n\r\n.textarea {\r\n padding: 10px;\r\n margin: 10px 0;\r\n width: 300px;\r\n height: 120px;\r\n}\r\n\r\n.foot {\r\n justify-content: flex-start;\r\n padding: 30px;\r\n border-top: 2px solid #000;\r\n}\r\n',"",{version:3,sources:["webpack://./src/style.css"],names:[],mappings:"AAEA;EACE,SAAS;EACT,UAAU;EACV,sBAAsB;EACtB,iCAAiC;AACnC;;AAEA;EACE,aAAa;EACb,uBAAuB;EACvB,mBAAmB;AACrB;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,UAAU;EACV,kBAAkB;AACpB;;AAEA;EACE,6BAA6B;EAC7B,WAAW;AACb;;AAEA;EACE,qBAAqB;EACrB,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,sBAAsB;EACtB,iBAAiB;EACjB,iBAAiB;EACjB,oBAAoB;AACtB;;AAEA;EACE,UAAU;EACV,gBAAgB;EAChB,eAAe;EACf,6BAA6B;AAC/B;;AAEA;EACE,YAAY;EACZ,aAAa;EACb,sBAAsB;EACtB,8BAA8B;EAC9B,YAAY;EACZ,yBAAyB;EACzB,kBAAkB;EAClB,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,aAAa;EACb,kBAAkB;AACpB;;AAEA;EACE,eAAe;EACf,8BAA8B;AAChC;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,sBAAsB;EACtB,gBAAgB;AAClB;;AAEA;EACE,UAAU;EACV,YAAY;EACZ,8BAA8B;AAChC;;AAEA;;;EAGE,iBAAiB;EACjB,YAAY;EACZ,YAAY;EACZ,kBAAkB;EAClB,cAAc;AAChB;;AAEA;EACE,YAAY;EACZ,YAAY;AACd;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,aAAa;EACb,kBAAkB;EAClB,kBAAkB;EAClB,gBAAgB;EAChB,sBAAsB;AACxB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,cAAc;EACd,eAAe;AACjB;;AAEA;EACE,WAAW;EACX,iBAAiB;EACjB,iBAAiB;EACjB,mBAAmB;AACrB;;AAEA;EACE,cAAc;AAChB;;AAEA;;EAEE,kBAAkB;AACpB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,sBAAsB;EACtB,uBAAuB;AACzB;;AAEA;;;EAGE,gBAAgB;EAChB,eAAe;AACjB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,aAAa;EACb,cAAc;EACd,YAAY;EACZ,aAAa;AACf;;AAEA;EACE,2BAA2B;EAC3B,aAAa;EACb,0BAA0B;AAC5B",sourcesContent:["@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap');\r\n\r\n* {\r\n margin: 0;\r\n padding: 0;\r\n box-sizing: border-box;\r\n font-family: \"Popins\", sans-serif;\r\n}\r\n\r\n.flex-center {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n}\r\n\r\n.header {\r\n width: 100%;\r\n}\r\n\r\n.nav-bar {\r\n width: 90%;\r\n padding: 20px 50px;\r\n}\r\n\r\n.nav-bar ul {\r\n justify-content: space-evenly;\r\n width: 100%;\r\n}\r\n\r\n.nav-bar ul li {\r\n list-style-type: none;\r\n font-size: 20px;\r\n font-weight: 400;\r\n}\r\n\r\n.nav-bar img {\r\n width: 150px;\r\n}\r\n\r\n.nav-bar ul li:nth-child(2) {\r\n text-decoration: underline;\r\n}\r\n\r\n.main-container {\r\n flex-direction: column;\r\n min-height: 600px;\r\n padding-top: 20px;\r\n padding-bottom: 20px;\r\n}\r\n\r\n.list-movies {\r\n width: 90%;\r\n list-style: none;\r\n flex-wrap: wrap;\r\n justify-content: space-evenly;\r\n}\r\n\r\n.movie {\r\n width: 266px;\r\n height: 400px;\r\n flex-direction: column;\r\n justify-content: space-between;\r\n padding: 8px;\r\n border: 1px solid #d3d3d3;\r\n border-radius: 4px;\r\n margin-top: 12px;\r\n}\r\n\r\n.movie img {\r\n width: 250px;\r\n height: 250px;\r\n border-radius: 4px;\r\n}\r\n\r\n.movie-content {\r\n flex-wrap: wrap;\r\n justify-content: space-between;\r\n}\r\n\r\n.movie-content .likes {\r\n margin-left: 8px;\r\n}\r\n\r\n.movie-content .likes i {\r\n margin-right: 8px;\r\n}\r\n\r\n.btn-show-comment {\r\n width: 100%;\r\n height: 40px;\r\n justify-self: flex-end;\r\n margin-top: 12px;\r\n}\r\n\r\n.pages {\r\n width: 90%;\r\n padding: 8px;\r\n justify-content: space-between;\r\n}\r\n\r\nbutton,\r\ntextarea,\r\n.form input {\r\n border: 2px solid;\r\n width: 250px;\r\n height: 40px;\r\n border-radius: 8px;\r\n margin: 10px 0;\r\n}\r\n\r\n.pages button {\r\n width: 120px;\r\n height: 40px;\r\n}\r\n\r\n.pages button:disabled {\r\n opacity: 0.7;\r\n}\r\n\r\n.popup {\r\n display: none;\r\n position: absolute;\r\n inset: 0 0 -20px 0;\r\n background: #fff;\r\n flex-direction: column;\r\n}\r\n\r\n.close {\r\n height: 300px;\r\n}\r\n\r\n.image-close .fa-solid {\r\n padding-top: 0;\r\n font-size: 40px;\r\n}\r\n\r\n.modal-image img {\r\n width: 70vw;\r\n padding-top: 10px;\r\n max-height: 350px;\r\n object-fit: contain;\r\n}\r\n\r\n.description {\r\n margin: 20px 0;\r\n}\r\n\r\n.start-end p,\r\n.movie-for p {\r\n padding: 10px 10px;\r\n}\r\n\r\n.comment-modal {\r\n flex-direction: column;\r\n}\r\n\r\n.form {\r\n flex-direction: column;\r\n align-items: flex-start;\r\n}\r\n\r\n.textarea,\r\n#name,\r\n.commnet-btn {\r\n background: #fff;\r\n font-size: 17px;\r\n}\r\n\r\n#name {\r\n padding: 0 10px;\r\n}\r\n\r\n.textarea {\r\n padding: 10px;\r\n margin: 10px 0;\r\n width: 300px;\r\n height: 120px;\r\n}\r\n\r\n.foot {\r\n justify-content: flex-start;\r\n padding: 30px;\r\n border-top: 2px solid #000;\r\n}\r\n"],sourceRoot:""}]);const o=s},645:n=>{n.exports=function(n){var e=[];return e.toString=function(){return this.map((function(e){var r="",t=void 0!==e[5];return e[4]&&(r+="@supports (".concat(e[4],") {")),e[2]&&(r+="@media ".concat(e[2]," {")),t&&(r+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),r+=n(e),t&&(r+="}"),e[2]&&(r+="}"),e[4]&&(r+="}"),r})).join("")},e.i=function(n,r,t,i,a){"string"==typeof n&&(n=[[null,n,void 0]]);var s={};if(t)for(var o=0;o0?" ".concat(c[5]):""," {").concat(c[1],"}")),c[5]=a),r&&(c[2]?(c[1]="@media ".concat(c[2]," {").concat(c[1],"}"),c[2]=r):c[2]=r),i&&(c[4]?(c[1]="@supports (".concat(c[4],") {").concat(c[1],"}"),c[4]=i):c[4]="".concat(i)),e.push(c))}},e}},537:n=>{n.exports=function(n){var e=n[1],r=n[3];if(!r)return e;if("function"==typeof btoa){var t=btoa(unescape(encodeURIComponent(JSON.stringify(r)))),i="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(t),a="/*# ".concat(i," */");return[e].concat([a]).join("\n")}return[e].join("\n")}},379:n=>{var e=[];function r(n){for(var r=-1,t=0;t{var e={};n.exports=function(n,r){var t=function(n){if(void 0===e[n]){var r=document.querySelector(n);if(window.HTMLIFrameElement&&r instanceof window.HTMLIFrameElement)try{r=r.contentDocument.head}catch(n){r=null}e[n]=r}return e[n]}(n);if(!t)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");t.appendChild(r)}},216:n=>{n.exports=function(n){var e=document.createElement("style");return n.setAttributes(e,n.attributes),n.insert(e,n.options),e}},565:(n,e,r)=>{n.exports=function(n){var e=r.nc;e&&n.setAttribute("nonce",e)}},795:n=>{n.exports=function(n){var e=n.insertStyleElement(n);return{update:function(r){!function(n,e,r){var t="";r.supports&&(t+="@supports (".concat(r.supports,") {")),r.media&&(t+="@media ".concat(r.media," {"));var i=void 0!==r.layer;i&&(t+="@layer".concat(r.layer.length>0?" ".concat(r.layer):""," {")),t+=r.css,i&&(t+="}"),r.media&&(t+="}"),r.supports&&(t+="}");var a=r.sourceMap;a&&"undefined"!=typeof btoa&&(t+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(a))))," */")),e.styleTagTransform(t,n,e.options)}(e,n,r)},remove:function(){!function(n){if(null===n.parentNode)return!1;n.parentNode.removeChild(n)}(e)}}}},589:n=>{n.exports=function(n,e){if(e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}},666:(n,e,r)=>{var t=r(379),i=r.n(t),a=r(795),s=r.n(a),o=r(569),A=r.n(o),p=r(565),c=r.n(p),d=r(216),l=r.n(d),m=r(589),u=r.n(m),f=r(426),h={};h.styleTagTransform=u(),h.setAttributes=c(),h.insert=A().bind(null,"head"),h.domAPI=s(),h.insertStyleElement=l(),i()(f.Z,h),f.Z&&f.Z.locals&&f.Z.locals;const E=new class{constructor(){this.list=[],this.listLikedMovies=[],this.currentPage=1,this.urlApi="https://api.tvmaze.com/shows",this.urlInvolvementAPI="https://us-central1-involvement-api.cloudfunctions.net/capstoneApi",this.appID="JJFDApwrWpJNeY3nWzvU"}addMovie=n=>{this.list.push(n),this.display(n)};display=n=>{const e=document.createElement("li");e.classList.add("flex-center","movie"),e.id=`movie-${n.id}`;const r=document.createElement("div"),t=document.createElement("img");t.src=n.image.medium,t.alt=`Movies ${n.name} image`;const i=document.createElement("div");i.classList.add("flex-center","movie-content");const a=document.createElement("h3");a.textContent=n.name;const s=document.createElement("div");s.classList.add("flex-center","likes");const o=document.createElement("i");o.classList.add("fa-regular","fa-heart");const A=document.createElement("p");this.listLikedMovies.containt&&(A.textContent="3 Like");const p=document.createElement("button");p.classList.add("btn-show-comment"),p.textContent="Comments",p.addEventListener("click",(()=>{(n=>{const e=document.querySelector(".popup"),r=document.querySelector("body");e.style.display="block";const t=`\n `;r.style.position="fixed",e.innerHTML=t;const i=document.getElementsByClassName("close");for(let n=0;n{e.style.display="none",r.style.position="relative"}))})(n)})),s.append(o,A),i.append(a,s),r.append(t,i),e.append(r,p),document.getElementById("list-movies").append(e),o.addEventListener("click",(n=>{const{id:r}=e;let t=0,i=-1;this.listLikedMovies.filter(((n,e)=>(n.item_id===r&&(t=n.likes,i=e),n))),t+=1;const a=n.currentTarget;a.classList.remove("fa-regular","fa-heart"),a.classList.add("fa-solid","fa-heart"),a.nextSibling.textContent=`${t} like`,setTimeout((()=>{a.classList.remove("fa-solid","fa-heart"),a.classList.add("fa-regular","fa-heart")}),400),-1===i?this.listLikedMovies.push({item_id:r,likes:t}):this.listLikedMovies[i].likes=t,this.saveLike(r,t)})),this.listLikedMovies.filter((n=>(n.item_id===e.id&&(A.textContent=`${n.likes} like`),n))),document.getElementById("count-movies").textContent=document.querySelectorAll(".movie").length};getListMovies=async()=>{const n=await fetch(`${this.urlApi}?page=${this.currentPage}`);await n.json().then((n=>{this.list=n,this.list.forEach((n=>{void 0!==n&&this.addMovie(n)}))}))};getListLikes=async()=>{const n=await fetch(`${this.urlInvolvementAPI}/apps/${this.appID}/likes/`);await n.json().then((n=>{this.listLikedMovies=n}))};saveLike=async(n,e)=>{const r={item_id:n,likes:e};return(await fetch(`${this.urlInvolvementAPI}/apps/${this.appID}/likes/`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})).ok};createApp=async()=>await fetch(`${this.urlInvolvementAPI}/apps/`,{method:"POST",headers:{"Content-Type":"application/json"}})};window.addEventListener("load",(async()=>{await E.getListLikes(),await E.getListMovies()}))}},n=>{n(n.s=666)}]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFhc0gsTUFBTSxHQUFHL0ksS0FBSzZGLGVBQWU3RixLQUFLNEYscUJBQy9DbkUsRUFBS3VILE9BQU9DLE1BQU14SCxJQUN0QnpCLEtBQUtGLEtBQU8yQixFQUNaekIsS0FBS0YsS0FBS29KLFNBQVNqRCxTQUNIbkYsSUFBVm1GLEdBQ0ZqRyxLQUFLZ0csU0FBU0MsRUFDaEIsR0FDQSxHQUNGLEVBR0prRCxhQUFlTCxVQUNiLE1BQU1ySCxRQUFhc0gsTUFBTSxHQUFHL0ksS0FBSzhGLDBCQUEwQjlGLEtBQUsrRixzQkFDMUR0RSxFQUFLdUgsT0FBT0MsTUFBTXRELElBQ3RCM0YsS0FBSzJGLGdCQUFrQkEsQ0FBZSxHQUN0QyxFQUdKZ0QsU0FBV0csTUFBT25KLEVBQUl5SixLQUNwQixNQUFNQyxFQUFRLENBQUVmLFFBQVMzSSxFQUFJd0ksTUFBT2lCLEdBTXBDLGFBTHFCTCxNQUFNLEdBQUcvSSxLQUFLOEYsMEJBQTBCOUYsS0FBSytGLGVBQWdCLENBQ2hGdUQsT0FBUSxPQUNSQyxRQUFTLENBQUUsZUFBZ0Isb0JBQzNCakMsS0FBTS9GLEtBQUtDLFVBQVU2SCxNQUVURyxFQUFFLEVBSWxCQyxVQUFZWCxlQUNTQyxNQUFNLEdBQUcvSSxLQUFLOEYsMEJBQy9CLENBQ0V3RCxPQUFRLE9BQ1JDLFFBQVMsQ0FBRSxlQUFnQix1QkR4SW5DdkYsT0FBT29ELGlCQUFpQixRQUFRMEIsZ0JBQ3hCckQsRUFBVzBELHFCQUNYMUQsRUFBV29ELGVBQWUsRyIsInNvdXJjZXMiOlsid2VicGFjazovL2NhcHN0b24tamF2YXNjcmlwdC8uL3NyYy9zdHlsZS5jc3MiLCJ3ZWJwYWNrOi8vY2Fwc3Rvbi1qYXZhc2NyaXB0Ly4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qcyIsIndlYnBhY2s6Ly9jYXBzdG9uLWphdmFzY3JpcHQvLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qcyIsIndlYnBhY2s6Ly9jYXBzdG9uLWphdmFzY3JpcHQvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanMiLCJ3ZWJwYWNrOi8vY2Fwc3Rvbi1qYXZhc2NyaXB0Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qcyIsIndlYnBhY2s6Ly9jYXBzdG9uLWphdmFzY3JpcHQvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vY2Fwc3Rvbi1qYXZhc2NyaXB0Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzIiwid2VicGFjazovL2NhcHN0b24tamF2YXNjcmlwdC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzIiwid2VicGFjazovL2NhcHN0b24tamF2YXNjcmlwdC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzIiwid2VicGFjazovL2NhcHN0b24tamF2YXNjcmlwdC8uL3NyYy9zdHlsZS5jc3M/NzE2MyIsIndlYnBhY2s6Ly9jYXBzdG9uLWphdmFzY3JpcHQvLi9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vY2Fwc3Rvbi1qYXZhc2NyaXB0Ly4vc3JjL21vZHVsZXMvTGlzdE1vdmllcy5qcyIsIndlYnBhY2s6Ly9jYXBzdG9uLWphdmFzY3JpcHQvLi9zcmMvbW9kdWxlcy9wb3B1cC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCJAaW1wb3J0IHVybChodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PVBvcHBpbnM6d2dodEAzMDA7NDAwOzUwMDs2MDAmZGlzcGxheT1zd2FwKTtcIl0pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiKiB7XFxyXFxuICBtYXJnaW46IDA7XFxyXFxuICBwYWRkaW5nOiAwO1xcclxcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXHJcXG4gIGZvbnQtZmFtaWx5OiBcXFwiUG9waW5zXFxcIiwgc2Fucy1zZXJpZjtcXHJcXG59XFxyXFxuXFxyXFxuLmZsZXgtY2VudGVyIHtcXHJcXG4gIGRpc3BsYXk6IGZsZXg7XFxyXFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXHJcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxyXFxufVxcclxcblxcclxcbi5oZWFkZXIge1xcclxcbiAgd2lkdGg6IDEwMCU7XFxyXFxufVxcclxcblxcclxcbi5uYXYtYmFyIHtcXHJcXG4gIHdpZHRoOiA5MCU7XFxyXFxuICBwYWRkaW5nOiAyMHB4IDUwcHg7XFxyXFxufVxcclxcblxcclxcbi5uYXYtYmFyIHVsIHtcXHJcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtZXZlbmx5O1xcclxcbiAgd2lkdGg6IDEwMCU7XFxyXFxufVxcclxcblxcclxcbi5uYXYtYmFyIHVsIGxpIHtcXHJcXG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcXHJcXG4gIGZvbnQtc2l6ZTogMjBweDtcXHJcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxyXFxufVxcclxcblxcclxcbi5uYXYtYmFyIGltZyB7XFxyXFxuICB3aWR0aDogMTUwcHg7XFxyXFxufVxcclxcblxcclxcbi5uYXYtYmFyIHVsIGxpOm50aC1jaGlsZCgyKSB7XFxyXFxuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcXHJcXG59XFxyXFxuXFxyXFxuLm1haW4tY29udGFpbmVyIHtcXHJcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxyXFxuICBtaW4taGVpZ2h0OiA2MDBweDtcXHJcXG4gIHBhZGRpbmctdG9wOiAyMHB4O1xcclxcbiAgcGFkZGluZy1ib3R0b206IDIwcHg7XFxyXFxufVxcclxcblxcclxcbi5saXN0LW1vdmllcyB7XFxyXFxuICB3aWR0aDogOTAlO1xcclxcbiAgbGlzdC1zdHlsZTogbm9uZTtcXHJcXG4gIGZsZXgtd3JhcDogd3JhcDtcXHJcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtZXZlbmx5O1xcclxcbn1cXHJcXG5cXHJcXG4ubW92aWUge1xcclxcbiAgd2lkdGg6IDI2NnB4O1xcclxcbiAgaGVpZ2h0OiA0MDBweDtcXHJcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxyXFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxyXFxuICBwYWRkaW5nOiA4cHg7XFxyXFxuICBib3JkZXI6IDFweCBzb2xpZCAjZDNkM2QzO1xcclxcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xcclxcbiAgbWFyZ2luLXRvcDogMTJweDtcXHJcXG59XFxyXFxuXFxyXFxuLm1vdmllIGltZyB7XFxyXFxuICB3aWR0aDogMjUwcHg7XFxyXFxuICBoZWlnaHQ6IDI1MHB4O1xcclxcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xcclxcbn1cXHJcXG5cXHJcXG4ubW92aWUtY29udGVudCB7XFxyXFxuICBmbGV4LXdyYXA6IHdyYXA7XFxyXFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxyXFxufVxcclxcblxcclxcbi5tb3ZpZS1jb250ZW50IC5saWtlcyB7XFxyXFxuICBtYXJnaW4tbGVmdDogOHB4O1xcclxcbn1cXHJcXG5cXHJcXG4ubW92aWUtY29udGVudCAubGlrZXMgaSB7XFxyXFxuICBtYXJnaW4tcmlnaHQ6IDhweDtcXHJcXG59XFxyXFxuXFxyXFxuLmJ0bi1zaG93LWNvbW1lbnQge1xcclxcbiAgd2lkdGg6IDEwMCU7XFxyXFxuICBoZWlnaHQ6IDQwcHg7XFxyXFxuICBqdXN0aWZ5LXNlbGY6IGZsZXgtZW5kO1xcclxcbiAgbWFyZ2luLXRvcDogMTJweDtcXHJcXG59XFxyXFxuXFxyXFxuLnBhZ2VzIHtcXHJcXG4gIHdpZHRoOiA5MCU7XFxyXFxuICBwYWRkaW5nOiA4cHg7XFxyXFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxyXFxufVxcclxcblxcclxcbmJ1dHRvbixcXHJcXG50ZXh0YXJlYSxcXHJcXG4uZm9ybSBpbnB1dCB7XFxyXFxuICBib3JkZXI6IDJweCBzb2xpZDtcXHJcXG4gIHdpZHRoOiAyNTBweDtcXHJcXG4gIGhlaWdodDogNDBweDtcXHJcXG4gIGJvcmRlci1yYWRpdXM6IDhweDtcXHJcXG4gIG1hcmdpbjogMTBweCAwO1xcclxcbn1cXHJcXG5cXHJcXG4ucGFnZXMgYnV0dG9uIHtcXHJcXG4gIHdpZHRoOiAxMjBweDtcXHJcXG4gIGhlaWdodDogNDBweDtcXHJcXG59XFxyXFxuXFxyXFxuLnBhZ2VzIGJ1dHRvbjpkaXNhYmxlZCB7XFxyXFxuICBvcGFjaXR5OiAwLjc7XFxyXFxufVxcclxcblxcclxcbi5wb3B1cCB7XFxyXFxuICBkaXNwbGF5OiBub25lO1xcclxcbiAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgaW5zZXQ6IDAgMCAtMjBweCAwO1xcclxcbiAgYmFja2dyb3VuZDogI2ZmZjtcXHJcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxyXFxufVxcclxcblxcclxcbi5jbG9zZSB7XFxyXFxuICBoZWlnaHQ6IDMwMHB4O1xcclxcbn1cXHJcXG5cXHJcXG4uaW1hZ2UtY2xvc2UgLmZhLXNvbGlkIHtcXHJcXG4gIHBhZGRpbmctdG9wOiAwO1xcclxcbiAgZm9udC1zaXplOiA0MHB4O1xcclxcbn1cXHJcXG5cXHJcXG4ubW9kYWwtaW1hZ2UgaW1nIHtcXHJcXG4gIHdpZHRoOiA3MHZ3O1xcclxcbiAgcGFkZGluZy10b3A6IDEwcHg7XFxyXFxuICBtYXgtaGVpZ2h0OiAzNTBweDtcXHJcXG4gIG9iamVjdC1maXQ6IGNvbnRhaW47XFxyXFxufVxcclxcblxcclxcbi5kZXNjcmlwdGlvbiB7XFxyXFxuICBtYXJnaW46IDIwcHggMDtcXHJcXG59XFxyXFxuXFxyXFxuLnN0YXJ0LWVuZCBwLFxcclxcbi5tb3ZpZS1mb3IgcCB7XFxyXFxuICBwYWRkaW5nOiAxMHB4IDEwcHg7XFxyXFxufVxcclxcblxcclxcbi5jb21tZW50LW1vZGFsIHtcXHJcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxyXFxufVxcclxcblxcclxcbi5mb3JtIHtcXHJcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxyXFxuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcXHJcXG59XFxyXFxuXFxyXFxuLnRleHRhcmVhLFxcclxcbiNuYW1lLFxcclxcbi5jb21tbmV0LWJ0biB7XFxyXFxuICBiYWNrZ3JvdW5kOiAjZmZmO1xcclxcbiAgZm9udC1zaXplOiAxN3B4O1xcclxcbn1cXHJcXG5cXHJcXG4jbmFtZSB7XFxyXFxuICBwYWRkaW5nOiAwIDEwcHg7XFxyXFxufVxcclxcblxcclxcbi50ZXh0YXJlYSB7XFxyXFxuICBwYWRkaW5nOiAxMHB4O1xcclxcbiAgbWFyZ2luOiAxMHB4IDA7XFxyXFxuICB3aWR0aDogMzAwcHg7XFxyXFxuICBoZWlnaHQ6IDEyMHB4O1xcclxcbn1cXHJcXG5cXHJcXG4uZm9vdCB7XFxyXFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxyXFxuICBwYWRkaW5nOiAzMHB4O1xcclxcbiAgYm9yZGVyLXRvcDogMnB4IHNvbGlkICMwMDA7XFxyXFxufVxcclxcblwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3NyYy9zdHlsZS5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBRUE7RUFDRSxTQUFTO0VBQ1QsVUFBVTtFQUNWLHNCQUFzQjtFQUN0QixpQ0FBaUM7QUFDbkM7O0FBRUE7RUFDRSxhQUFhO0VBQ2IsdUJBQXVCO0VBQ3ZCLG1CQUFtQjtBQUNyQjs7QUFFQTtFQUNFLFdBQVc7QUFDYjs7QUFFQTtFQUNFLFVBQVU7RUFDVixrQkFBa0I7QUFDcEI7O0FBRUE7RUFDRSw2QkFBNkI7RUFDN0IsV0FBVztBQUNiOztBQUVBO0VBQ0UscUJBQXFCO0VBQ3JCLGVBQWU7RUFDZixnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSxZQUFZO0FBQ2Q7O0FBRUE7RUFDRSwwQkFBMEI7QUFDNUI7O0FBRUE7RUFDRSxzQkFBc0I7RUFDdEIsaUJBQWlCO0VBQ2pCLGlCQUFpQjtFQUNqQixvQkFBb0I7QUFDdEI7O0FBRUE7RUFDRSxVQUFVO0VBQ1YsZ0JBQWdCO0VBQ2hCLGVBQWU7RUFDZiw2QkFBNkI7QUFDL0I7O0FBRUE7RUFDRSxZQUFZO0VBQ1osYUFBYTtFQUNiLHNCQUFzQjtFQUN0Qiw4QkFBOEI7RUFDOUIsWUFBWTtFQUNaLHlCQUF5QjtFQUN6QixrQkFBa0I7RUFDbEIsZ0JBQWdCO0FBQ2xCOztBQUVBO0VBQ0UsWUFBWTtFQUNaLGFBQWE7RUFDYixrQkFBa0I7QUFDcEI7O0FBRUE7RUFDRSxlQUFlO0VBQ2YsOEJBQThCO0FBQ2hDOztBQUVBO0VBQ0UsZ0JBQWdCO0FBQ2xCOztBQUVBO0VBQ0UsaUJBQWlCO0FBQ25COztBQUVBO0VBQ0UsV0FBVztFQUNYLFlBQVk7RUFDWixzQkFBc0I7RUFDdEIsZ0JBQWdCO0FBQ2xCOztBQUVBO0VBQ0UsVUFBVTtFQUNWLFlBQVk7RUFDWiw4QkFBOEI7QUFDaEM7O0FBRUE7OztFQUdFLGlCQUFpQjtFQUNqQixZQUFZO0VBQ1osWUFBWTtFQUNaLGtCQUFrQjtFQUNsQixjQUFjO0FBQ2hCOztBQUVBO0VBQ0UsWUFBWTtFQUNaLFlBQVk7QUFDZDs7QUFFQTtFQUNFLFlBQVk7QUFDZDs7QUFFQTtFQUNFLGFBQWE7RUFDYixrQkFBa0I7RUFDbEIsa0JBQWtCO0VBQ2xCLGdCQUFnQjtFQUNoQixzQkFBc0I7QUFDeEI7O0FBRUE7RUFDRSxhQUFhO0FBQ2Y7O0FBRUE7RUFDRSxjQUFjO0VBQ2QsZUFBZTtBQUNqQjs7QUFFQTtFQUNFLFdBQVc7RUFDWCxpQkFBaUI7RUFDakIsaUJBQWlCO0VBQ2pCLG1CQUFtQjtBQUNyQjs7QUFFQTtFQUNFLGNBQWM7QUFDaEI7O0FBRUE7O0VBRUUsa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0Usc0JBQXNCO0FBQ3hCOztBQUVBO0VBQ0Usc0JBQXNCO0VBQ3RCLHVCQUF1QjtBQUN6Qjs7QUFFQTs7O0VBR0UsZ0JBQWdCO0VBQ2hCLGVBQWU7QUFDakI7O0FBRUE7RUFDRSxlQUFlO0FBQ2pCOztBQUVBO0VBQ0UsYUFBYTtFQUNiLGNBQWM7RUFDZCxZQUFZO0VBQ1osYUFBYTtBQUNmOztBQUVBO0VBQ0UsMkJBQTJCO0VBQzNCLGFBQWE7RUFDYiwwQkFBMEI7QUFDNUJcIixcInNvdXJjZXNDb250ZW50XCI6W1wiQGltcG9ydCB1cmwoJ2h0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9UG9wcGluczp3Z2h0QDMwMDs0MDA7NTAwOzYwMCZkaXNwbGF5PXN3YXAnKTtcXHJcXG5cXHJcXG4qIHtcXHJcXG4gIG1hcmdpbjogMDtcXHJcXG4gIHBhZGRpbmc6IDA7XFxyXFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcclxcbiAgZm9udC1mYW1pbHk6IFxcXCJQb3BpbnNcXFwiLCBzYW5zLXNlcmlmO1xcclxcbn1cXHJcXG5cXHJcXG4uZmxleC1jZW50ZXIge1xcclxcbiAgZGlzcGxheTogZmxleDtcXHJcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcclxcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXHJcXG59XFxyXFxuXFxyXFxuLmhlYWRlciB7XFxyXFxuICB3aWR0aDogMTAwJTtcXHJcXG59XFxyXFxuXFxyXFxuLm5hdi1iYXIge1xcclxcbiAgd2lkdGg6IDkwJTtcXHJcXG4gIHBhZGRpbmc6IDIwcHggNTBweDtcXHJcXG59XFxyXFxuXFxyXFxuLm5hdi1iYXIgdWwge1xcclxcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1ldmVubHk7XFxyXFxuICB3aWR0aDogMTAwJTtcXHJcXG59XFxyXFxuXFxyXFxuLm5hdi1iYXIgdWwgbGkge1xcclxcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xcclxcbiAgZm9udC1zaXplOiAyMHB4O1xcclxcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXHJcXG59XFxyXFxuXFxyXFxuLm5hdi1iYXIgaW1nIHtcXHJcXG4gIHdpZHRoOiAxNTBweDtcXHJcXG59XFxyXFxuXFxyXFxuLm5hdi1iYXIgdWwgbGk6bnRoLWNoaWxkKDIpIHtcXHJcXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcclxcbn1cXHJcXG5cXHJcXG4ubWFpbi1jb250YWluZXIge1xcclxcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXHJcXG4gIG1pbi1oZWlnaHQ6IDYwMHB4O1xcclxcbiAgcGFkZGluZy10b3A6IDIwcHg7XFxyXFxuICBwYWRkaW5nLWJvdHRvbTogMjBweDtcXHJcXG59XFxyXFxuXFxyXFxuLmxpc3QtbW92aWVzIHtcXHJcXG4gIHdpZHRoOiA5MCU7XFxyXFxuICBsaXN0LXN0eWxlOiBub25lO1xcclxcbiAgZmxleC13cmFwOiB3cmFwO1xcclxcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1ldmVubHk7XFxyXFxufVxcclxcblxcclxcbi5tb3ZpZSB7XFxyXFxuICB3aWR0aDogMjY2cHg7XFxyXFxuICBoZWlnaHQ6IDQwMHB4O1xcclxcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXHJcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXHJcXG4gIHBhZGRpbmc6IDhweDtcXHJcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNkM2QzZDM7XFxyXFxuICBib3JkZXItcmFkaXVzOiA0cHg7XFxyXFxuICBtYXJnaW4tdG9wOiAxMnB4O1xcclxcbn1cXHJcXG5cXHJcXG4ubW92aWUgaW1nIHtcXHJcXG4gIHdpZHRoOiAyNTBweDtcXHJcXG4gIGhlaWdodDogMjUwcHg7XFxyXFxuICBib3JkZXItcmFkaXVzOiA0cHg7XFxyXFxufVxcclxcblxcclxcbi5tb3ZpZS1jb250ZW50IHtcXHJcXG4gIGZsZXgtd3JhcDogd3JhcDtcXHJcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXHJcXG59XFxyXFxuXFxyXFxuLm1vdmllLWNvbnRlbnQgLmxpa2VzIHtcXHJcXG4gIG1hcmdpbi1sZWZ0OiA4cHg7XFxyXFxufVxcclxcblxcclxcbi5tb3ZpZS1jb250ZW50IC5saWtlcyBpIHtcXHJcXG4gIG1hcmdpbi1yaWdodDogOHB4O1xcclxcbn1cXHJcXG5cXHJcXG4uYnRuLXNob3ctY29tbWVudCB7XFxyXFxuICB3aWR0aDogMTAwJTtcXHJcXG4gIGhlaWdodDogNDBweDtcXHJcXG4gIGp1c3RpZnktc2VsZjogZmxleC1lbmQ7XFxyXFxuICBtYXJnaW4tdG9wOiAxMnB4O1xcclxcbn1cXHJcXG5cXHJcXG4ucGFnZXMge1xcclxcbiAgd2lkdGg6IDkwJTtcXHJcXG4gIHBhZGRpbmc6IDhweDtcXHJcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXHJcXG59XFxyXFxuXFxyXFxuYnV0dG9uLFxcclxcbnRleHRhcmVhLFxcclxcbi5mb3JtIGlucHV0IHtcXHJcXG4gIGJvcmRlcjogMnB4IHNvbGlkO1xcclxcbiAgd2lkdGg6IDI1MHB4O1xcclxcbiAgaGVpZ2h0OiA0MHB4O1xcclxcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xcclxcbiAgbWFyZ2luOiAxMHB4IDA7XFxyXFxufVxcclxcblxcclxcbi5wYWdlcyBidXR0b24ge1xcclxcbiAgd2lkdGg6IDEyMHB4O1xcclxcbiAgaGVpZ2h0OiA0MHB4O1xcclxcbn1cXHJcXG5cXHJcXG4ucGFnZXMgYnV0dG9uOmRpc2FibGVkIHtcXHJcXG4gIG9wYWNpdHk6IDAuNztcXHJcXG59XFxyXFxuXFxyXFxuLnBvcHVwIHtcXHJcXG4gIGRpc3BsYXk6IG5vbmU7XFxyXFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICBpbnNldDogMCAwIC0yMHB4IDA7XFxyXFxuICBiYWNrZ3JvdW5kOiAjZmZmO1xcclxcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXHJcXG59XFxyXFxuXFxyXFxuLmNsb3NlIHtcXHJcXG4gIGhlaWdodDogMzAwcHg7XFxyXFxufVxcclxcblxcclxcbi5pbWFnZS1jbG9zZSAuZmEtc29saWQge1xcclxcbiAgcGFkZGluZy10b3A6IDA7XFxyXFxuICBmb250LXNpemU6IDQwcHg7XFxyXFxufVxcclxcblxcclxcbi5tb2RhbC1pbWFnZSBpbWcge1xcclxcbiAgd2lkdGg6IDcwdnc7XFxyXFxuICBwYWRkaW5nLXRvcDogMTBweDtcXHJcXG4gIG1heC1oZWlnaHQ6IDM1MHB4O1xcclxcbiAgb2JqZWN0LWZpdDogY29udGFpbjtcXHJcXG59XFxyXFxuXFxyXFxuLmRlc2NyaXB0aW9uIHtcXHJcXG4gIG1hcmdpbjogMjBweCAwO1xcclxcbn1cXHJcXG5cXHJcXG4uc3RhcnQtZW5kIHAsXFxyXFxuLm1vdmllLWZvciBwIHtcXHJcXG4gIHBhZGRpbmc6IDEwcHggMTBweDtcXHJcXG59XFxyXFxuXFxyXFxuLmNvbW1lbnQtbW9kYWwge1xcclxcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXHJcXG59XFxyXFxuXFxyXFxuLmZvcm0ge1xcclxcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXHJcXG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcclxcbn1cXHJcXG5cXHJcXG4udGV4dGFyZWEsXFxyXFxuI25hbWUsXFxyXFxuLmNvbW1uZXQtYnRuIHtcXHJcXG4gIGJhY2tncm91bmQ6ICNmZmY7XFxyXFxuICBmb250LXNpemU6IDE3cHg7XFxyXFxufVxcclxcblxcclxcbiNuYW1lIHtcXHJcXG4gIHBhZGRpbmc6IDAgMTBweDtcXHJcXG59XFxyXFxuXFxyXFxuLnRleHRhcmVhIHtcXHJcXG4gIHBhZGRpbmc6IDEwcHg7XFxyXFxuICBtYXJnaW46IDEwcHggMDtcXHJcXG4gIHdpZHRoOiAzMDBweDtcXHJcXG4gIGhlaWdodDogMTIwcHg7XFxyXFxufVxcclxcblxcclxcbi5mb290IHtcXHJcXG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcXHJcXG4gIHBhZGRpbmc6IDMwcHg7XFxyXFxuICBib3JkZXItdG9wOiAycHggc29saWQgIzAwMDtcXHJcXG59XFxyXFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKlxuICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICBBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY3NzV2l0aE1hcHBpbmdUb1N0cmluZykge1xuICB2YXIgbGlzdCA9IFtdO1xuXG4gIC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcbiAgbGlzdC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgdmFyIGNvbnRlbnQgPSBcIlwiO1xuICAgICAgdmFyIG5lZWRMYXllciA9IHR5cGVvZiBpdGVtWzVdICE9PSBcInVuZGVmaW5lZFwiO1xuICAgICAgaWYgKGl0ZW1bNF0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKTtcbiAgICAgIH1cbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIkBsYXllclwiLmNvbmNhdChpdGVtWzVdLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQoaXRlbVs1XSkgOiBcIlwiLCBcIiB7XCIpO1xuICAgICAgfVxuICAgICAgY29udGVudCArPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0pO1xuICAgICAgaWYgKG5lZWRMYXllcikge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICB9O1xuXG4gIC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG4gIGxpc3QuaSA9IGZ1bmN0aW9uIGkobW9kdWxlcywgbWVkaWEsIGRlZHVwZSwgc3VwcG9ydHMsIGxheWVyKSB7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGVzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBtb2R1bGVzID0gW1tudWxsLCBtb2R1bGVzLCB1bmRlZmluZWRdXTtcbiAgICB9XG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcbiAgICBpZiAoZGVkdXBlKSB7XG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IHRoaXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgdmFyIGlkID0gdGhpc1trXVswXTtcbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICh2YXIgX2sgPSAwOyBfayA8IG1vZHVsZXMubGVuZ3RoOyBfaysrKSB7XG4gICAgICB2YXIgaXRlbSA9IFtdLmNvbmNhdChtb2R1bGVzW19rXSk7XG4gICAgICBpZiAoZGVkdXBlICYmIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGxheWVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbVs1XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIGl0ZW1bNV0gPSBsYXllcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNV0gPSBsYXllcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG1lZGlhKSB7XG4gICAgICAgIGlmICghaXRlbVsyXSkge1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzdXBwb3J0cykge1xuICAgICAgICBpZiAoIWl0ZW1bNF0pIHtcbiAgICAgICAgICBpdGVtWzRdID0gXCJcIi5jb25jYXQoc3VwcG9ydHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVs0XSA9IHN1cHBvcnRzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsaXN0LnB1c2goaXRlbSk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gbGlzdDtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgdmFyIGNvbnRlbnQgPSBpdGVtWzFdO1xuICB2YXIgY3NzTWFwcGluZyA9IGl0ZW1bM107XG4gIGlmICghY3NzTWFwcGluZykge1xuICAgIHJldHVybiBjb250ZW50O1xuICB9XG4gIGlmICh0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGNzc01hcHBpbmcpKSkpO1xuICAgIHZhciBkYXRhID0gXCJzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxcIi5jb25jYXQoYmFzZTY0KTtcbiAgICB2YXIgc291cmNlTWFwcGluZyA9IFwiLyojIFwiLmNvbmNhdChkYXRhLCBcIiAqL1wiKTtcbiAgICByZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oXCJcXG5cIik7XG4gIH1cbiAgcmV0dXJuIFtjb250ZW50XS5qb2luKFwiXFxuXCIpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIHN0eWxlc0luRE9NID0gW107XG5cbmZ1bmN0aW9uIGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgdmFyIHJlc3VsdCA9IC0xO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzSW5ET00ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3R5bGVzSW5ET01baV0uaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xuICAgICAgcmVzdWx0ID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKSB7XG4gIHZhciBpZENvdW50TWFwID0ge307XG4gIHZhciBpZGVudGlmaWVycyA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXTtcbiAgICB2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcbiAgICB2YXIgY291bnQgPSBpZENvdW50TWFwW2lkXSB8fCAwO1xuICAgIHZhciBpZGVudGlmaWVyID0gXCJcIi5jb25jYXQoaWQsIFwiIFwiKS5jb25jYXQoY291bnQpO1xuICAgIGlkQ291bnRNYXBbaWRdID0gY291bnQgKyAxO1xuICAgIHZhciBpbmRleEJ5SWRlbnRpZmllciA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgIHZhciBvYmogPSB7XG4gICAgICBjc3M6IGl0ZW1bMV0sXG4gICAgICBtZWRpYTogaXRlbVsyXSxcbiAgICAgIHNvdXJjZU1hcDogaXRlbVszXSxcbiAgICAgIHN1cHBvcnRzOiBpdGVtWzRdLFxuICAgICAgbGF5ZXI6IGl0ZW1bNV1cbiAgICB9O1xuXG4gICAgaWYgKGluZGV4QnlJZGVudGlmaWVyICE9PSAtMSkge1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhCeUlkZW50aWZpZXJdLnJlZmVyZW5jZXMrKztcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4QnlJZGVudGlmaWVyXS51cGRhdGVyKG9iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB1cGRhdGVyID0gYWRkRWxlbWVudFN0eWxlKG9iaiwgb3B0aW9ucyk7XG4gICAgICBvcHRpb25zLmJ5SW5kZXggPSBpO1xuICAgICAgc3R5bGVzSW5ET00uc3BsaWNlKGksIDAsIHtcbiAgICAgICAgaWRlbnRpZmllcjogaWRlbnRpZmllcixcbiAgICAgICAgdXBkYXRlcjogdXBkYXRlcixcbiAgICAgICAgcmVmZXJlbmNlczogMVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWRlbnRpZmllcnMucHVzaChpZGVudGlmaWVyKTtcbiAgfVxuXG4gIHJldHVybiBpZGVudGlmaWVycztcbn1cblxuZnVuY3Rpb24gYWRkRWxlbWVudFN0eWxlKG9iaiwgb3B0aW9ucykge1xuICB2YXIgYXBpID0gb3B0aW9ucy5kb21BUEkob3B0aW9ucyk7XG4gIGFwaS51cGRhdGUob2JqKTtcblxuICB2YXIgdXBkYXRlciA9IGZ1bmN0aW9uIHVwZGF0ZXIobmV3T2JqKSB7XG4gICAgaWYgKG5ld09iaikge1xuICAgICAgaWYgKG5ld09iai5jc3MgPT09IG9iai5jc3MgJiYgbmV3T2JqLm1lZGlhID09PSBvYmoubWVkaWEgJiYgbmV3T2JqLnNvdXJjZU1hcCA9PT0gb2JqLnNvdXJjZU1hcCAmJiBuZXdPYmouc3VwcG9ydHMgPT09IG9iai5zdXBwb3J0cyAmJiBuZXdPYmoubGF5ZXIgPT09IG9iai5sYXllcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGFwaS51cGRhdGUob2JqID0gbmV3T2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbW92ZSgpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gdXBkYXRlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobGlzdCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgbGlzdCA9IGxpc3QgfHwgW107XG4gIHZhciBsYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obGlzdCwgb3B0aW9ucyk7XG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGUobmV3TGlzdCkge1xuICAgIG5ld0xpc3QgPSBuZXdMaXN0IHx8IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW2ldO1xuICAgICAgdmFyIGluZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleF0ucmVmZXJlbmNlcy0tO1xuICAgIH1cblxuICAgIHZhciBuZXdMYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obmV3TGlzdCwgb3B0aW9ucyk7XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9pZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW19pXTtcblxuICAgICAgdmFyIF9pbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKF9pZGVudGlmaWVyKTtcblxuICAgICAgaWYgKHN0eWxlc0luRE9NW19pbmRleF0ucmVmZXJlbmNlcyA9PT0gMCkge1xuICAgICAgICBzdHlsZXNJbkRPTVtfaW5kZXhdLnVwZGF0ZXIoKTtcblxuICAgICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoX2luZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsYXN0SWRlbnRpZmllcnMgPSBuZXdMYXN0SWRlbnRpZmllcnM7XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgbWVtbyA9IHt9O1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cbmZ1bmN0aW9uIGdldFRhcmdldCh0YXJnZXQpIHtcbiAgaWYgKHR5cGVvZiBtZW1vW3RhcmdldF0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB2YXIgc3R5bGVUYXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7IC8vIFNwZWNpYWwgY2FzZSB0byByZXR1cm4gaGVhZCBvZiBpZnJhbWUgaW5zdGVhZCBvZiBpZnJhbWUgaXRzZWxmXG5cbiAgICBpZiAod2luZG93LkhUTUxJRnJhbWVFbGVtZW50ICYmIHN0eWxlVGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LkhUTUxJRnJhbWVFbGVtZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuICAgICAgICAvLyBkdWUgdG8gY3Jvc3Mtb3JpZ2luIHJlc3RyaWN0aW9uc1xuICAgICAgICBzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICBzdHlsZVRhcmdldCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbWVtb1t0YXJnZXRdID0gc3R5bGVUYXJnZXQ7XG4gIH1cblxuICByZXR1cm4gbWVtb1t0YXJnZXRdO1xufVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cblxuZnVuY3Rpb24gaW5zZXJ0QnlTZWxlY3RvcihpbnNlcnQsIHN0eWxlKSB7XG4gIHZhciB0YXJnZXQgPSBnZXRUYXJnZXQoaW5zZXJ0KTtcblxuICBpZiAoIXRhcmdldCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0JyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG4gIH1cblxuICB0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydEJ5U2VsZWN0b3I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gIG9wdGlvbnMuc2V0QXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLmF0dHJpYnV0ZXMpO1xuICBvcHRpb25zLmluc2VydChlbGVtZW50LCBvcHRpb25zLm9wdGlvbnMpO1xuICByZXR1cm4gZWxlbWVudDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzKHN0eWxlRWxlbWVudCkge1xuICB2YXIgbm9uY2UgPSB0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gIT09IFwidW5kZWZpbmVkXCIgPyBfX3dlYnBhY2tfbm9uY2VfXyA6IG51bGw7XG5cbiAgaWYgKG5vbmNlKSB7XG4gICAgc3R5bGVFbGVtZW50LnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsIG5vbmNlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlczsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaikge1xuICB2YXIgY3NzID0gXCJcIjtcblxuICBpZiAob2JqLnN1cHBvcnRzKSB7XG4gICAgY3NzICs9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQob2JqLnN1cHBvcnRzLCBcIikge1wiKTtcbiAgfVxuXG4gIGlmIChvYmoubWVkaWEpIHtcbiAgICBjc3MgKz0gXCJAbWVkaWEgXCIuY29uY2F0KG9iai5tZWRpYSwgXCIge1wiKTtcbiAgfVxuXG4gIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2Ygb2JqLmxheWVyICE9PSBcInVuZGVmaW5lZFwiO1xuXG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJAbGF5ZXJcIi5jb25jYXQob2JqLmxheWVyLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQob2JqLmxheWVyKSA6IFwiXCIsIFwiIHtcIik7XG4gIH1cblxuICBjc3MgKz0gb2JqLmNzcztcblxuICBpZiAobmVlZExheWVyKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG5cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuXG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cblxuICB2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcDtcblxuICBpZiAoc291cmNlTWFwICYmIHR5cGVvZiBidG9hICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgY3NzICs9IFwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIi5jb25jYXQoYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSwgXCIgKi9cIik7XG4gIH0gLy8gRm9yIG9sZCBJRVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAgKi9cblxuXG4gIG9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpIHtcbiAgLy8gaXN0YW5idWwgaWdub3JlIGlmXG4gIGlmIChzdHlsZUVsZW1lbnQucGFyZW50Tm9kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0eWxlRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudCk7XG59XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuXG5mdW5jdGlvbiBkb21BUEkob3B0aW9ucykge1xuICB2YXIgc3R5bGVFbGVtZW50ID0gb3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucyk7XG4gIHJldHVybiB7XG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUob2JqKSB7XG4gICAgICBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaik7XG4gICAgfSxcbiAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICAgIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpO1xuICAgIH1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkb21BUEk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQpIHtcbiAgaWYgKHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCk7XG4gICAgfVxuXG4gICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R5bGVUYWdUcmFuc2Zvcm07IiwiXG4gICAgICBpbXBvcnQgQVBJIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICBpbXBvcnQgZG9tQVBJIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRGbiBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanNcIjtcbiAgICAgIGltcG9ydCBzZXRBdHRyaWJ1dGVzIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0U3R5bGVFbGVtZW50IGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzXCI7XG4gICAgICBpbXBvcnQgc3R5bGVUYWdUcmFuc2Zvcm1GbiBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzXCI7XG4gICAgICBpbXBvcnQgY29udGVudCwgKiBhcyBuYW1lZEV4cG9ydCBmcm9tIFwiISEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLmNzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xuXG4gICAgICBvcHRpb25zLmluc2VydCA9IGluc2VydEZuLmJpbmQobnVsbCwgXCJoZWFkXCIpO1xuICAgIFxub3B0aW9ucy5kb21BUEkgPSBkb21BUEk7XG5vcHRpb25zLmluc2VydFN0eWxlRWxlbWVudCA9IGluc2VydFN0eWxlRWxlbWVudDtcblxudmFyIHVwZGF0ZSA9IEFQSShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCAqIGZyb20gXCIhIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuY3NzXCI7XG4gICAgICAgZXhwb3J0IGRlZmF1bHQgY29udGVudCAmJiBjb250ZW50LmxvY2FscyA/IGNvbnRlbnQubG9jYWxzIDogdW5kZWZpbmVkO1xuIiwiaW1wb3J0IExpc3RNb3ZpZXMgZnJvbSAnLi9tb2R1bGVzL0xpc3RNb3ZpZXMuanMnO1xuaW1wb3J0ICcuL3N0eWxlLmNzcyc7XG5cbmNvbnN0IGxpc3RNb3ZpZXMgPSBuZXcgTGlzdE1vdmllcygpO1xuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGFzeW5jICgpID0+IHtcbiAgYXdhaXQgbGlzdE1vdmllcy5nZXRMaXN0TGlrZXMoKTtcbiAgYXdhaXQgbGlzdE1vdmllcy5nZXRMaXN0TW92aWVzKCk7XG4gIC8vIGxpc3RNb3ZpZXMuZGlzcGxheSgpO1xufSk7XG4iLCJpbXBvcnQgc2hvd1BvcHVwIGZyb20gJy4vcG9wdXAuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMaXN0TW92aWVzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5saXN0ID0gW107XG4gICAgdGhpcy5saXN0TGlrZWRNb3ZpZXMgPSBbXTtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcbiAgICB0aGlzLnVybEFwaSA9ICdodHRwczovL2FwaS50dm1hemUuY29tL3Nob3dzJztcbiAgICB0aGlzLnVybEludm9sdmVtZW50QVBJID0gJ2h0dHBzOi8vdXMtY2VudHJhbDEtaW52b2x2ZW1lbnQtYXBpLmNsb3VkZnVuY3Rpb25zLm5ldC9jYXBzdG9uZUFwaSc7XG4gICAgdGhpcy5hcHBJRCA9ICdKSkZEQXB3cldwSk5lWTNuV3p2VSc7XG4gIH1cblxuICAvKiBhZGQgYSBtb3ZpZSB0byB0aGUgbGlzdCBvZiBtb3ZpZXMgKi9cbiAgYWRkTW92aWUgPSAobW92aWUpID0+IHtcbiAgICB0aGlzLmxpc3QucHVzaChtb3ZpZSk7XG4gICAgdGhpcy5kaXNwbGF5KG1vdmllKTtcbiAgfVxuXG4gIC8qIERpc3BsYXkgKExvYWQgZHlubmFtaWNhbGx5KSBhIGxpbWl0ZWQgbnVtYmVyIG9mIG1vdmllcyAqL1xuICBkaXNwbGF5ID0gKG1vdmllKSA9PiB7XG4gICAgLy8gZHluYW1pYyBsb2FkIG9mIGxpc3Qgb2YgbW92aWVzXG4gICAgY29uc3QgbGlNb3ZpZXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpO1xuICAgIGxpTW92aWVzLmNsYXNzTGlzdC5hZGQoJ2ZsZXgtY2VudGVyJywgJ21vdmllJyk7XG4gICAgbGlNb3ZpZXMuaWQgPSBgbW92aWUtJHttb3ZpZS5pZH1gO1xuXG4gICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnN0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgIGltZy5zcmMgPSBtb3ZpZS5pbWFnZS5tZWRpdW07XG4gICAgaW1nLmFsdCA9IGBNb3ZpZXMgJHttb3ZpZS5uYW1lfSBpbWFnZWA7XG5cbiAgICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29udGVudC5jbGFzc0xpc3QuYWRkKCdmbGV4LWNlbnRlcicsICdtb3ZpZS1jb250ZW50Jyk7XG4gICAgY29uc3QgaDMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdoMycpO1xuICAgIGgzLnRleHRDb250ZW50ID0gbW92aWUubmFtZTtcbiAgICBjb25zdCBkaXZMaWtlcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGRpdkxpa2VzLmNsYXNzTGlzdC5hZGQoJ2ZsZXgtY2VudGVyJywgJ2xpa2VzJyk7XG4gICAgY29uc3QgaWNvbkxpa2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpJyk7XG4gICAgaWNvbkxpa2UuY2xhc3NMaXN0LmFkZCgnZmEtcmVndWxhcicsICdmYS1oZWFydCcpO1xuICAgIGNvbnN0IHBMaWtlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpO1xuICAgIGlmICh0aGlzLmxpc3RMaWtlZE1vdmllcy5jb250YWludCkgeyBwTGlrZS50ZXh0Q29udGVudCA9ICczIExpa2UnOyB9XG5cbiAgICBjb25zdCBidG5TaG93Q29tbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgIGJ0blNob3dDb21tZW50LmNsYXNzTGlzdC5hZGQoJ2J0bi1zaG93LWNvbW1lbnQnKTtcbiAgICBidG5TaG93Q29tbWVudC50ZXh0Q29udGVudCA9ICdDb21tZW50cyc7XG5cbiAgICAvKiBFdmVudCBMaXN0bmVyICovXG4gICAgYnRuU2hvd0NvbW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICBzaG93UG9wdXAobW92aWUpO1xuICAgIH0pO1xuICAgIC8qIExpc3Qgb2YgYXBwZW5kICovXG4gICAgZGl2TGlrZXMuYXBwZW5kKGljb25MaWtlLCBwTGlrZSk7XG4gICAgY29udGVudC5hcHBlbmQoaDMsIGRpdkxpa2VzKTtcbiAgICB3cmFwcGVyLmFwcGVuZChpbWcsIGNvbnRlbnQpO1xuICAgIGxpTW92aWVzLmFwcGVuZCh3cmFwcGVyLCBidG5TaG93Q29tbWVudCk7XG5cbiAgICBjb25zdCB1bExpc3RNb3ZpZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGlzdC1tb3ZpZXMnKTtcbiAgICB1bExpc3RNb3ZpZXMuYXBwZW5kKGxpTW92aWVzKTtcblxuICAgIGljb25MaWtlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IGlkIH0gPSBsaU1vdmllcztcbiAgICAgIGxldCBsaWtlcyA9IDA7XG4gICAgICBsZXQgbGlrZUluZGV4ID0gLTE7XG4gICAgICAvLyBmaW5kIHRoZSBjb3JyZW50IG51bWJlciBvZiBsaWtlXG4gICAgICB0aGlzLmxpc3RMaWtlZE1vdmllcy5maWx0ZXIoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChpdGVtLml0ZW1faWQgPT09IGlkKSB7XG4gICAgICAgICAgbGlrZXMgPSBpdGVtLmxpa2VzO1xuICAgICAgICAgIGxpa2VJbmRleCA9IGluZGV4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIGFkZCBhIGxpa2UgYW5kIGRpc3BsYXlcbiAgICAgIGxpa2VzICs9IDE7XG4gICAgICBjb25zdCBpY29ucyA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgICBpY29ucy5jbGFzc0xpc3QucmVtb3ZlKCdmYS1yZWd1bGFyJywgJ2ZhLWhlYXJ0Jyk7XG4gICAgICBpY29ucy5jbGFzc0xpc3QuYWRkKCdmYS1zb2xpZCcsICdmYS1oZWFydCcpO1xuICAgICAgaWNvbnMubmV4dFNpYmxpbmcudGV4dENvbnRlbnQgPSBgJHtsaWtlc30gbGlrZWA7XG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpY29ucy5jbGFzc0xpc3QucmVtb3ZlKCdmYS1zb2xpZCcsICdmYS1oZWFydCcpO1xuICAgICAgICBpY29ucy5jbGFzc0xpc3QuYWRkKCdmYS1yZWd1bGFyJywgJ2ZhLWhlYXJ0Jyk7XG4gICAgICB9LCA0MDApO1xuXG4gICAgICAvLyBzYXZlIGxpa2Ugb24gdGhlIGxpc3RcbiAgICAgIGlmIChsaWtlSW5kZXggPT09IC0xKSB7XG4gICAgICAgIHRoaXMubGlzdExpa2VkTW92aWVzLnB1c2goeyBpdGVtX2lkOiBpZCwgbGlrZXMgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxpc3RMaWtlZE1vdmllc1tsaWtlSW5kZXhdLmxpa2VzID0gbGlrZXM7XG4gICAgICB9XG4gICAgICAvLyBzYXZlIGxpa2Ugb24gdGhlIEFQSVxuICAgICAgdGhpcy5zYXZlTGlrZShpZCwgbGlrZXMpO1xuICAgIH0pO1xuXG4gICAgLy8gZmluZCB0aGUgY29ycmVudCBudW1iZXIgb2YgbGlrZVxuICAgIHRoaXMubGlzdExpa2VkTW92aWVzLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgaWYgKGl0ZW0uaXRlbV9pZCA9PT0gbGlNb3ZpZXMuaWQpIHtcbiAgICAgICAgcExpa2UudGV4dENvbnRlbnQgPSBgJHtpdGVtLmxpa2VzfSBsaWtlYDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH0pO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBjb3VudFxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb3VudC1tb3ZpZXMnKS50ZXh0Q29udGVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5tb3ZpZScpLmxlbmd0aDtcbiAgfVxuXG4gIC8qIEdldCBsaXN0IG9mIG1vdmllcyB3aXRoIGEgR0VUIHJlcXVlc3QgdG8gdGhlIEFQSTogICovXG4gIGdldExpc3RNb3ZpZXMgPSBhc3luYyAoKSA9PiB7XG4gICAgLy8gQVBJIFJlcXVlc3RcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2goYCR7dGhpcy51cmxBcGl9P3BhZ2U9JHt0aGlzLmN1cnJlbnRQYWdlfWApO1xuICAgIGF3YWl0IGRhdGEuanNvbigpLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgIHRoaXMubGlzdCA9IGRhdGE7XG4gICAgICB0aGlzLmxpc3QuZm9yRWFjaCgobW92aWUpID0+IHtcbiAgICAgICAgaWYgKG1vdmllICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmFkZE1vdmllKG1vdmllKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRMaXN0TGlrZXMgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoKGAke3RoaXMudXJsSW52b2x2ZW1lbnRBUEl9L2FwcHMvJHt0aGlzLmFwcElEfS9saWtlcy9gKTtcbiAgICBhd2FpdCBkYXRhLmpzb24oKS50aGVuKChsaXN0TGlrZWRNb3ZpZXMpID0+IHtcbiAgICAgIHRoaXMubGlzdExpa2VkTW92aWVzID0gbGlzdExpa2VkTW92aWVzO1xuICAgIH0pO1xuICB9XG5cbiAgc2F2ZUxpa2UgPSBhc3luYyAoaWQsIGxpa2UpID0+IHtcbiAgICBjb25zdCBsaWtlZCA9IHsgaXRlbV9pZDogaWQsIGxpa2VzOiBsaWtlIH07XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2goYCR7dGhpcy51cmxJbnZvbHZlbWVudEFQSX0vYXBwcy8ke3RoaXMuYXBwSUR9L2xpa2VzL2AsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShsaWtlZCksXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdC5vaztcbiAgfVxuXG4gIC8qIGludm9sdmVtZW50IEFQSTogY3JlYXRlIGEgbmV3IEFQUCAqL1xuICBjcmVhdGVBcHAgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoKGAke3RoaXMudXJsSW52b2x2ZW1lbnRBUEl9L2FwcHMvYCxcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbn0iLCJjb25zdCBzaG93UG9wdXAgPSAobW92aWUpID0+IHtcbiAgY29uc3QgcHJvamVjdE1vZGFsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnBvcHVwJyk7XG4gIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5Jyk7XG4gIHByb2plY3RNb2RhbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgY29uc3QgbW9kYWxWaXNpYmxlID0gYFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtbW9kYWxcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlLWNsb3NlIGZsZXgtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaW1hZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIiR7bW92aWUuaW1hZ2UubWVkaXVtfVwiIGFsdD1cIlwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cImZsZXgtY2VudGVyIG1vdmllLXRpdGxlXCI+JHttb3ZpZS5uYW1lfTwvaDM+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbG9zZVwiPiA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLXhtYXJrXCI+PC9pPjwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtY2VudGVyIGRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGFydC1lbmRcIj5cbiAgICAgICAgICAgICAgPHA+IFByZW1pZXJlZDogPHNwYW4+JHttb3ZpZS5wcmVtaWVyZWR9PC9zcGFuPjwvcD5cbiAgICAgICAgICAgICAgPHA+RW5kZWQ6IDxzcGFuPiR7bW92aWUuZW5kZWR9PC9zcGFuPjwvcD5cbiAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW92aWUtZm9yXCI+XG4gICAgICAgICAgICAgIDxwPkdlbnJlczogPHNwYW4+JHttb3ZpZS5nZW5yZXN9PC9zcGFuPjwvcD5cbiAgICAgICAgICAgICAgPHA+bGFuZ3VhZ2U6IDxzcGFuPiR7bW92aWUubGFuZ3VhZ2V9PC9zcGFuPjwvcD5cbiAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxoNCBjbGFzcz1cImZsZXgtY2VudGVyXCI+IGNvbW1lbnRzKDxzcGFuPjI8L3NwYW4+KTwvaDQ+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWNlbnRlciBjb21tZW50LW1vZGFsXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tbWVudC1jb250YWluZXIgZmxleC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImRhdGVcIj4wMy8xMS8yMDIxPC9wPlxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiY29tbWVudG9yXCI+QWxleDogPC9wPlxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiY29tbWVudFwiPm5pY2UgbW92aWU8L3A+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWNlbnRlciB0eXBlLWNvbW1lbnQtbW9kYWxcIj5cbiAgICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybSBmbGV4LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJuYW1lXCIgaWQ9XCJuYW1lXCIgcGxhY2Vob2xkZXI9XCJZb3VyIG5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJ0ZXh0YXJlYVwiIG5hbWU9XCJjb21tbmV0XCIgaWQ9XCJjb21tZW50XCIgY29scz1cIjMwXCIgcm93cz1cIjEwXCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29tbW5ldC1idG5cIiB0eXBlPVwic3VibWl0XCI+Y29tbWVudDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9mb3JtPlxuICBcbiAgICAgICAgICAgICAgPC9kaXY+XG4gIFxuICAgICAgICAgIDwvZGl2PmA7XG4gIGJvZHkuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuICBwcm9qZWN0TW9kYWwuaW5uZXJIVE1MID0gbW9kYWxWaXNpYmxlO1xuXG4gIGNvbnN0IGNsb3NlTW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjbG9zZScpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGNsb3NlTW9kYWwubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjbG9zZU1vZGFsW2ldLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgcHJvamVjdE1vZGFsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICBib2R5LnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcbiAgICB9KTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgc2hvd1BvcHVwOyJdLCJuYW1lcyI6WyJfX19DU1NfTE9BREVSX0VYUE9SVF9fXyIsInB1c2giLCJtb2R1bGUiLCJpZCIsImV4cG9ydHMiLCJjc3NXaXRoTWFwcGluZ1RvU3RyaW5nIiwibGlzdCIsInRvU3RyaW5nIiwidGhpcyIsIm1hcCIsIml0ZW0iLCJjb250ZW50IiwibmVlZExheWVyIiwiY29uY2F0IiwibGVuZ3RoIiwiam9pbiIsImkiLCJtb2R1bGVzIiwibWVkaWEiLCJkZWR1cGUiLCJzdXBwb3J0cyIsImxheWVyIiwidW5kZWZpbmVkIiwiYWxyZWFkeUltcG9ydGVkTW9kdWxlcyIsImsiLCJfayIsImNzc01hcHBpbmciLCJidG9hIiwiYmFzZTY0IiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJKU09OIiwic3RyaW5naWZ5IiwiZGF0YSIsInNvdXJjZU1hcHBpbmciLCJzdHlsZXNJbkRPTSIsImdldEluZGV4QnlJZGVudGlmaWVyIiwiaWRlbnRpZmllciIsInJlc3VsdCIsIm1vZHVsZXNUb0RvbSIsIm9wdGlvbnMiLCJpZENvdW50TWFwIiwiaWRlbnRpZmllcnMiLCJiYXNlIiwiY291bnQiLCJpbmRleEJ5SWRlbnRpZmllciIsIm9iaiIsImNzcyIsInNvdXJjZU1hcCIsInJlZmVyZW5jZXMiLCJ1cGRhdGVyIiwiYWRkRWxlbWVudFN0eWxlIiwiYnlJbmRleCIsInNwbGljZSIsImFwaSIsImRvbUFQSSIsInVwZGF0ZSIsIm5ld09iaiIsInJlbW92ZSIsImxhc3RJZGVudGlmaWVycyIsIm5ld0xpc3QiLCJpbmRleCIsIm5ld0xhc3RJZGVudGlmaWVycyIsIl9pIiwiX2luZGV4IiwibWVtbyIsImluc2VydCIsInN0eWxlIiwidGFyZ2V0Iiwic3R5bGVUYXJnZXQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJ3aW5kb3ciLCJIVE1MSUZyYW1lRWxlbWVudCIsImNvbnRlbnREb2N1bWVudCIsImhlYWQiLCJlIiwiZ2V0VGFyZ2V0IiwiRXJyb3IiLCJhcHBlbmRDaGlsZCIsImVsZW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic2V0QXR0cmlidXRlcyIsImF0dHJpYnV0ZXMiLCJzdHlsZUVsZW1lbnQiLCJub25jZSIsInNldEF0dHJpYnV0ZSIsImluc2VydFN0eWxlRWxlbWVudCIsInN0eWxlVGFnVHJhbnNmb3JtIiwiYXBwbHkiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJyZW1vdmVTdHlsZUVsZW1lbnQiLCJzdHlsZVNoZWV0IiwiY3NzVGV4dCIsImZpcnN0Q2hpbGQiLCJjcmVhdGVUZXh0Tm9kZSIsImxpc3RNb3ZpZXMiLCJjb25zdHJ1Y3RvciIsImxpc3RMaWtlZE1vdmllcyIsImN1cnJlbnRQYWdlIiwidXJsQXBpIiwidXJsSW52b2x2ZW1lbnRBUEkiLCJhcHBJRCIsImFkZE1vdmllIiwibW92aWUiLCJkaXNwbGF5IiwibGlNb3ZpZXMiLCJjbGFzc0xpc3QiLCJhZGQiLCJ3cmFwcGVyIiwiaW1nIiwic3JjIiwiaW1hZ2UiLCJtZWRpdW0iLCJhbHQiLCJuYW1lIiwiaDMiLCJ0ZXh0Q29udGVudCIsImRpdkxpa2VzIiwiaWNvbkxpa2UiLCJwTGlrZSIsImNvbnRhaW50IiwiYnRuU2hvd0NvbW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicHJvamVjdE1vZGFsIiwiYm9keSIsIm1vZGFsVmlzaWJsZSIsInByZW1pZXJlZCIsImVuZGVkIiwiZ2VucmVzIiwibGFuZ3VhZ2UiLCJwb3NpdGlvbiIsImlubmVySFRNTCIsImNsb3NlTW9kYWwiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwiYXBwZW5kIiwiZ2V0RWxlbWVudEJ5SWQiLCJldmVudCIsImxpa2VzIiwibGlrZUluZGV4IiwiZmlsdGVyIiwiaXRlbV9pZCIsImljb25zIiwiY3VycmVudFRhcmdldCIsIm5leHRTaWJsaW5nIiwic2V0VGltZW91dCIsInNhdmVMaWtlIiwicXVlcnlTZWxlY3RvckFsbCIsImdldExpc3RNb3ZpZXMiLCJhc3luYyIsImZldGNoIiwianNvbiIsInRoZW4iLCJmb3JFYWNoIiwiZ2V0TGlzdExpa2VzIiwibGlrZSIsImxpa2VkIiwibWV0aG9kIiwiaGVhZGVycyIsIm9rIiwiY3JlYXRlQXBwIl0sInNvdXJjZVJvb3QiOiIifQ== ->>>>>>> 5aef8d73b2fa8443888a110524e9477a385ea0e4 +(self.webpackChunkcapston_javascript=self.webpackChunkcapston_javascript||[]).push([[179],{426:(n,e,t)=>{"use strict";t.d(e,{Z:()=>s});var r=t(81),i=t.n(r),o=t(645),a=t.n(o)()(i());a.push([n.id,"@import url(https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap);"]),a.push([n.id,'* {\r\n margin: 0;\r\n padding: 0;\r\n box-sizing: border-box;\r\n font-family: "Popins", sans-serif;\r\n\r\n --color-primary: #fa0437;\r\n --color-secondary: #272a31;\r\n --color-tertiar: #d3d3d3;\r\n --color-text-color: #4a4d54;\r\n --color-background: #181b1f;\r\n --color-background-ligth: #202125;\r\n}\r\n\r\nbody {\r\n color: white;\r\n background-color: var(--color-background);\r\n}\r\n\r\n.flex-center {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n}\r\n\r\n.hidden {\r\n display: none;\r\n}\r\n\r\n.header {\r\n width: 100%;\r\n}\r\n\r\n.nav-bar {\r\n width: 90%;\r\n padding: 20px 50px;\r\n}\r\n\r\n.nav-bar ul {\r\n justify-content: space-evenly;\r\n width: 100%;\r\n}\r\n\r\n.nav-bar ul li {\r\n list-style-type: none;\r\n font-size: 1.25rem;\r\n font-weight: 400;\r\n}\r\n\r\n.nav-bar img {\r\n width: 150px;\r\n}\r\n\r\n.nav-bar ul li:nth-child(2) {\r\n border-bottom: 2px solid var(--color-primary);\r\n}\r\n\r\n.main-container {\r\n flex-direction: column;\r\n min-height: 600px;\r\n padding-top: 20px;\r\n padding-bottom: 20px;\r\n}\r\n\r\n.list-movies {\r\n width: 90%;\r\n list-style: none;\r\n flex-wrap: wrap;\r\n justify-content: space-evenly;\r\n}\r\n\r\n.movie {\r\n width: 250px;\r\n flex-direction: column;\r\n justify-content: space-between;\r\n border-radius: 4px;\r\n margin-top: 12px;\r\n background-color: var(--color-background-ligth);\r\n transition-duration: 200ms;\r\n}\r\n\r\n.movie img {\r\n width: 250px;\r\n height: 250px;\r\n border-radius: 4px;\r\n margin-bottom: 6px;\r\n}\r\n\r\n.movie:hover {\r\n transform: scale(1.05);\r\n}\r\n\r\n.movie-date {\r\n font-size: 0.75rem;\r\n margin-left: 6px;\r\n color: var(--color-text-color);\r\n}\r\n\r\n.movie-content {\r\n align-items: flex-start;\r\n justify-content: space-between;\r\n margin-top: 8px;\r\n margin-left: 6px;\r\n}\r\n\r\n.movie-content h3 {\r\n min-height: 44px;\r\n}\r\n\r\n.movie-content .likes {\r\n margin-left: 8px;\r\n margin-right: 6px;\r\n min-width: 40px;\r\n}\r\n\r\n.date i {\r\n padding: 8px;\r\n border-radius: 50%;\r\n background-color: #fa0437;\r\n margin-right: 8px;\r\n}\r\n\r\n.movie-content .likes i {\r\n margin-right: 8px;\r\n}\r\n\r\n.list-genres {\r\n height: 26px;\r\n overflow: hidden;\r\n margin-top: 8px;\r\n margin-left: 6px;\r\n list-style: none;\r\n flex-wrap: wrap;\r\n justify-content: flex-start;\r\n}\r\n\r\n.genre {\r\n font-size: 0.75rem;\r\n font-weight: 600;\r\n margin-right: 6px;\r\n padding: 6px;\r\n border-radius: 4px;\r\n color: var(--color-text-color);\r\n background-color: #090a0c;\r\n}\r\n\r\n.btn-show-comment {\r\n width: 100%;\r\n height: 40px;\r\n color: white;\r\n font-weight: 500;\r\n border: none;\r\n border-radius: 2px;\r\n background-color: #fa0437;\r\n justify-self: flex-end;\r\n margin-top: 10px;\r\n margin-bottom: 0;\r\n}\r\n\r\n.btn-show-comment:hover {\r\n background-color: #c90028;\r\n}\r\n\r\n.pages {\r\n width: 90%;\r\n padding: 8px;\r\n justify-content: space-between;\r\n}\r\n\r\nbutton,\r\ntextarea,\r\n.form input {\r\n outline: none;\r\n color: #fff;\r\n border: none;\r\n height: 40px;\r\n border-radius: 4px;\r\n margin: 10px 0;\r\n background-color: #515253;\r\n}\r\n\r\n.pages button {\r\n width: 120px;\r\n height: 40px;\r\n}\r\n\r\n.pages button:disabled {\r\n opacity: 0.7;\r\n}\r\n\r\n.popup {\r\n display: none;\r\n position: absolute;\r\n top: 12px;\r\n left: 0;\r\n right: 0;\r\n padding: 10px;\r\n overflow-y: scroll;\r\n background-color: rgba(24, 27, 31, 0.7);\r\n flex-direction: column;\r\n}\r\n\r\n.popup-modal {\r\n flex-direction: column;\r\n max-width: 500px;\r\n border-radius: 10px;\r\n background-color: var(--color-background);\r\n}\r\n\r\n.close {\r\n margin-right: 11px;\r\n align-self: flex-end;\r\n}\r\n\r\n.image-close {\r\n flex-direction: column-reverse;\r\n}\r\n\r\n.image-close .fa-solid {\r\n padding-top: 0;\r\n font-size: 1.563rem;\r\n opacity: 0.7;\r\n}\r\n\r\n.modal-image {\r\n flex-direction: column;\r\n width: 100%;\r\n}\r\n\r\n.modal-image img {\r\n min-width: 350px;\r\n max-width: 95%;\r\n max-height: 550px;\r\n object-fit: contain;\r\n border-radius: 8px;\r\n}\r\n\r\n.movie-title {\r\n padding-top: 8px;\r\n font-size: 1.563rem;\r\n width: 95%;\r\n}\r\n\r\n.description {\r\n margin: 20px 0;\r\n width: 95%;\r\n flex-direction: column;\r\n align-items: flex-start;\r\n color: #565758;\r\n font-weight: 600;\r\n}\r\n\r\n.start-end p,\r\n.movie-for p {\r\n padding: 2.5px 2.5px;\r\n}\r\n\r\n.comment-modal {\r\n flex-direction: column;\r\n align-items: flex-start;\r\n width: 95%;\r\n margin: 20px 0;\r\n}\r\n\r\n.comment-container {\r\n font-size: 0.875rem;\r\n padding: 10px;\r\n flex-direction: column;\r\n width: 100%;\r\n border-radius: 8px;\r\n justify-content: space-between;\r\n}\r\n\r\n.comment-container:nth-child(odd) {\r\n background-color: var(--color-text-color);\r\n}\r\n\r\n.date {\r\n width: 100%;\r\n display: flex;\r\n justify-content: space-between;\r\n}\r\n\r\n.comment {\r\n width: 100%;\r\n display: flex;\r\n align-items: flex-start;\r\n padding: 10px;\r\n}\r\n\r\n.type-comment-modal {\r\n width: 100%;\r\n}\r\n\r\n.form {\r\n width: 95%;\r\n flex-direction: column;\r\n align-items: flex-start;\r\n}\r\n\r\n.textarea,\r\n#name,\r\n.commnet-btn {\r\n font-size: 1.063rem;\r\n width: 100%;\r\n}\r\n\r\n#name {\r\n padding: 0 10px;\r\n}\r\n\r\n.textarea {\r\n padding: 10px;\r\n margin: 10px 0;\r\n height: 120px;\r\n}\r\n\r\n.foot {\r\n justify-content: flex-start;\r\n padding: 30px;\r\n border-top: 2px solid #000;\r\n}\r\n',""]);const s=a},645:n=>{"use strict";n.exports=function(n){var e=[];return e.toString=function(){return this.map((function(e){var t="",r=void 0!==e[5];return e[4]&&(t+="@supports (".concat(e[4],") {")),e[2]&&(t+="@media ".concat(e[2]," {")),r&&(t+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),t+=n(e),r&&(t+="}"),e[2]&&(t+="}"),e[4]&&(t+="}"),t})).join("")},e.i=function(n,t,r,i,o){"string"==typeof n&&(n=[[null,n,void 0]]);var a={};if(r)for(var s=0;s0?" ".concat(d[5]):""," {").concat(d[1],"}")),d[5]=o),t&&(d[2]?(d[1]="@media ".concat(d[2]," {").concat(d[1],"}"),d[2]=t):d[2]=t),i&&(d[4]?(d[1]="@supports (".concat(d[4],") {").concat(d[1],"}"),d[4]=i):d[4]="".concat(i)),e.push(d))}},e}},81:n=>{"use strict";n.exports=function(n){return n[1]}},379:n=>{"use strict";var e=[];function t(n){for(var t=-1,r=0;r{"use strict";var e={};n.exports=function(n,t){var r=function(n){if(void 0===e[n]){var t=document.querySelector(n);if(window.HTMLIFrameElement&&t instanceof window.HTMLIFrameElement)try{t=t.contentDocument.head}catch(n){t=null}e[n]=t}return e[n]}(n);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(t)}},216:n=>{"use strict";n.exports=function(n){var e=document.createElement("style");return n.setAttributes(e,n.attributes),n.insert(e,n.options),e}},565:(n,e,t)=>{"use strict";n.exports=function(n){var e=t.nc;e&&n.setAttribute("nonce",e)}},795:n=>{"use strict";n.exports=function(n){var e=n.insertStyleElement(n);return{update:function(t){!function(n,e,t){var r="";t.supports&&(r+="@supports (".concat(t.supports,") {")),t.media&&(r+="@media ".concat(t.media," {"));var i=void 0!==t.layer;i&&(r+="@layer".concat(t.layer.length>0?" ".concat(t.layer):""," {")),r+=t.css,i&&(r+="}"),t.media&&(r+="}"),t.supports&&(r+="}");var o=t.sourceMap;o&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),e.styleTagTransform(r,n,e.options)}(e,n,t)},remove:function(){!function(n){if(null===n.parentNode)return!1;n.parentNode.removeChild(n)}(e)}}}},589:n=>{"use strict";n.exports=function(n,e){if(e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}},987:(n,e,t)=>{"use strict";var r=t(230),i=t.n(r),o=t(379),a=t.n(o),s=t(795),c=t.n(s),l=t(569),d=t.n(l),p=t(565),m=t.n(p),u=t(216),f=t.n(u),h=t(589),v=t.n(h),g=t(426),x={};x.styleTagTransform=v(),x.setAttributes=m(),x.insert=d().bind(null,"head"),x.domAPI=c(),x.insertStyleElement=f(),a()(g.Z,x),g.Z&&g.Z.locals&&g.Z.locals;const y=new(i()),b=n=>{const e=document.querySelector(".main-container");if(n){const n='\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
';e.innerHTML+=n}else e.querySelector(".loader").classList.add("hidden")};window.addEventListener("load",(async()=>{b(!0),await y.getListLikes(),await y.getListMovies(),b(!1)}))},230:(n,e,t)=>{const r=t(448);n.exports=class{constructor(){this.list=[],this.listLikedMovies=[],this.currentPage=1,this.urlApi="https://api.tvmaze.com/shows",this.urlInvolvementAPI="https://us-central1-involvement-api.cloudfunctions.net/capstoneApi",this.appID="JJFDApwrWpJNeY3nWzvU"}addMovie=n=>{this.list.push(n),this.display(n)};display=n=>{const e=document.createElement("li");e.classList.add("flex-center","movie"),e.id=`movie-${n.id}`;const t=document.createElement("div"),i=document.createElement("img");i.src=n.image.medium,i.alt=`Movies ${n.name} image`;const o=document.createElement("p");o.classList.add("movie-date"),o.textContent=n.premiered;const a=document.createElement("div");a.classList.add("flex-center","movie-content");const s=document.createElement("h3");s.textContent=n.name;const c=document.createElement("div");c.classList.add("flex-center","likes");const l=document.createElement("i");l.classList.add("fa-regular","fa-heart");const d=document.createElement("p");this.listLikedMovies.containt&&(d.textContent="3 Like");const p=document.createElement("ul");p.classList.add("flex-center","list-genres"),n.genres.forEach((n=>{const e=document.createElement("li");e.classList.add("genre"),e.textContent=n,p.append(e)}));const m=document.createElement("button");m.classList.add("btn-show-comment"),m.textContent="Comments",m.addEventListener("click",(()=>{const e=new r;e.showPopup(n),e.displayAllComment(),e.getComment()})),c.append(l,d),a.append(s,c),t.append(i,o,a,p),e.append(t,m),document.getElementById("list-movies").append(e),l.addEventListener("click",(n=>{const t=n.currentTarget;if(t.classList.contains("fa-solid"))return;const{id:r}=e;let i=0,o=-1;this.listLikedMovies.filter(((n,e)=>(n.item_id===r&&(i=n.likes,o=e),n))),i+=1,t.classList.remove("fa-regular","fa-heart"),t.classList.add("fa-solid","fa-heart"),t.nextSibling.textContent=`${i}`,-1===o?this.listLikedMovies.push({item_id:r,likes:i}):this.listLikedMovies[o].likes=i,this.saveLike(r,i)})),this.listLikedMovies.filter((n=>(n.item_id===e.id&&(d.textContent=`${n.likes}`),n))),document.getElementById("count-movies").textContent=document.querySelectorAll(".movie").length};getListMovies=async()=>{const n=await fetch(`${this.urlApi}?page=${this.currentPage}`);await n.json().then((n=>{this.list=n,this.list.forEach((n=>{void 0!==n&&this.addMovie(n)}))}))};getListLikes=async()=>{const n=await fetch(`${this.urlInvolvementAPI}/apps/${this.appID}/likes/`);await n.json().then((n=>{this.listLikedMovies=n}))};saveLike=async(n,e)=>{const t={item_id:n,likes:e};return(await fetch(`${this.urlInvolvementAPI}/apps/${this.appID}/likes/`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})).ok};createApp=async()=>await fetch(`${this.urlInvolvementAPI}/apps/`,{method:"POST",headers:{"Content-Type":"application/json"}})}},448:n=>{n.exports=class{constructor(){this.currentMoviesID=void 0,this.listComent=[],this.API="https://us-central1-involvement-api.cloudfunctions.net/capstoneApi/apps/SfXJVXbXl4mhQfF5BbuY/comments"}getComment=async()=>{try{const n=await fetch(`https://us-central1-involvement-api.cloudfunctions.net/capstoneApi/apps/SfXJVXbXl4mhQfF5BbuY/comments?item_id=${this.currentMoviesID}`),e=await n.json();return void 0!==e.error||void 0===e?[]:e}catch(n){return[]}};showPopup=async n=>{this.currentMoviesID=n.id;const e=document.querySelector(".popup"),t=document.querySelector("main");e.style.display="flex";let r=`${n.ended}`;null===n.ended&&(r="In progress");const i=`\n `;t.style.position="fixed",e.innerHTML=i,document.querySelector(".commnet-btn").addEventListener("click",(async e=>{e.preventDefault();const t=document.querySelector("#name"),r=document.querySelector("#comment");await this.postComment(n.id),this.displayAllComment(),t.value="",r.value=""})),document.querySelector(".close").addEventListener("click",(()=>{e.style.display="none",t.style.position="relative"}))};postComment=async n=>{const e=document.querySelector("#name"),t=document.querySelector("#comment");return(await fetch("https://us-central1-involvement-api.cloudfunctions.net/capstoneApi/apps/SfXJVXbXl4mhQfF5BbuY/comments",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({item_id:n,username:e.value,comment:t.value})})).ok};displayAllComment=async()=>{const n=await this.getComment(),e=document.querySelector(".comment-modal");document.querySelector(".count").textContent=n.length,e.innerHTML="",n.forEach((n=>{e.innerHTML+=`\n
\n

${n.username} ${n.creation_date}

\n

${n.comment}

\n
\n `}))}}}},n=>{n(n.s=987)}]); \ No newline at end of file diff --git a/dist/runtime.js b/dist/runtime.js index b5511a3..cb56c33 100644 --- a/dist/runtime.js +++ b/dist/runtime.js @@ -1,2 +1 @@ -(()=>{"use strict";var r,e={},t={};function o(r){var a=t[r];if(void 0!==a)return a.exports;var n=t[r]={id:r,exports:{}};return e[r](n,n.exports,o),n.exports}o.m=e,r=[],o.O=(e,t,a,n)=>{if(!t){var i=1/0;for(f=0;f=n)&&Object.keys(o.O).every((r=>o.O[r](t[v])))?t.splice(v--,1):(s=!1,n0&&r[f-1][2]>n;f--)r[f]=r[f-1];r[f]=[t,a,n]},o.n=r=>{var e=r&&r.__esModule?()=>r.default:()=>r;return o.d(e,{a:e}),e},o.d=(r,e)=>{for(var t in e)o.o(e,t)&&!o.o(r,t)&&Object.defineProperty(r,t,{enumerable:!0,get:e[t]})},o.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={666:0};o.O.j=e=>0===r[e];var e=(e,t)=>{var a,n,[i,s,v]=t,p=0;if(i.some((e=>0!==r[e]))){for(a in s)o.o(s,a)&&(o.m[a]=s[a]);if(v)var f=v(o)}for(e&&e(t);p{"use strict";var r,e={},t={};function o(r){var a=t[r];if(void 0!==a)return a.exports;var n=t[r]={id:r,exports:{}};return e[r](n,n.exports,o),n.exports}o.m=e,r=[],o.O=(e,t,a,n)=>{if(!t){var i=1/0;for(f=0;f=n)&&Object.keys(o.O).every((r=>o.O[r](t[v])))?t.splice(v--,1):(s=!1,n0&&r[f-1][2]>n;f--)r[f]=r[f-1];r[f]=[t,a,n]},o.n=r=>{var e=r&&r.__esModule?()=>r.default:()=>r;return o.d(e,{a:e}),e},o.d=(r,e)=>{for(var t in e)o.o(e,t)&&!o.o(r,t)&&Object.defineProperty(r,t,{enumerable:!0,get:e[t]})},o.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={666:0};o.O.j=e=>0===r[e];var e=(e,t)=>{var a,n,[i,s,v]=t,p=0;if(i.some((e=>0!==r[e]))){for(a in s)o.o(s,a)&&(o.m[a]=s[a]);if(v)var f=v(o)}for(e&&e(t);p + Show Time @@ -12,21 +13,16 @@
    -
    - +