(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } ready(function () { console.log('jsbridge ready'); }); function ready(callback) { if (window.AlipayJSBridge) { callback && callback(); } else { document.addEventListener('AlipayJSBridgeReady', callback, false); } } function alertMsg(message, button) { // alert('alertMsg') AlipayJSBridge.call('alert', { title: '', message: message, button: button }); } function _push(url) { if (typeof AlipayJSBridge != "undefined") { AlipayJSBridge.call('pushWindow', { url: url }); } else { window.location.href = url; } } function _setTitle(title) { if (typeof AlipayJSBridge != "undefined") { AlipayJSBridge.call('setTitle', { title: title }); } } function matomoEvent(tracking_name) { // _paq.push(['trackEvent', 'Actions', tracking_name]); _paq.push(['trackEvent', tracking_name]); } Vue.use(VueAwesomeSwiper); var app = new Vue({ el: '#index', data: { env: _env["default"], lang: window.location.href.indexOf('/en/') != -1 ? 'en' : 'tc', notInAlipay: false, activeTab: 'tab1', promoTab: '', promoTabIndex: 1, hotTab: '', merchantTab: '', messages: null, hotProductList1: [], hotProductList2: [], hotProductList2Tab: [], promoListTab: [], promoList: [], hotMerchantList: [], merchantListTab: [], merchantList: [], filterHotList2: 'new', filterMerchantList: 'name', search: { value: '' }, swiperHotProductOptions: { slidesPerView: 3, slidesPerGroup: 3, swipeToSlide: true, autoplay: { delay: 5000, disableOnInteraction: false }, // pagination: '.swiper-pagination1', // paginationClickable: true pagination: { el: '.swiper-pagination1', clickable: true } }, swiperhotProductList2Buttonptions: { slidesPerView: 'auto', spaceBetween: 30, // width: 'auto', freeMode: true // slideToClickedSlide: true, // on: { // activeIndexChange: function (swiper) { // console.log(swiper); // }, // click: function (swiper) { // console.log(swiper); // }, // } }, swiperhotProductList2Contentptions: { slidesPerView: 3, freeMode: false }, swiperPromoListContentptions: { spaceBetween: 30, slidesPerView: 'auto', swipeToSlide: true }, swiperHotMerchantListptions: { spaceBetween: 10, slidesPerView: '2.3', swipeToSlide: true }, swiperMerchantListButtonptions: { slidesPerView: 'auto', spaceBetween: 30, // width: 'auto', freeMode: true }, originalHeight: '', bottomBarVisible: true }, created: function created() { var _this2 = this; var userAgent = window.navigator.userAgent || navigator.userAgent; if (userAgent.indexOf('APHK') == -1 && userAgent.indexOf('aphk') == -1) { //not in alipayhk app this.notInAlipay = true; window.location.href = decodeURIComponent('alipayhk://platformapi/startApp?appId=20000067&url=https%3A%2F%2Feshop.codpayment.com%2Fstatic%2Fdyn%2Fv1%2Fapp-service%2Festamp%2Ftc%2Findex.html'); } else { if (window.location.href.indexOf('/tc/') != -1) { // tc link now if (userAgent.indexOf('Language/en') != -1) { // useragent = english // alert(`${env.pageDomain}${env.currentMode}/dyn/v1/app-service/estamp/en/index.html`) location.replace("".concat(_env["default"].pageDomain).concat(_env["default"].currentMode, "/dyn/v1/app-service/estamp/en/index.html")); return; } } } if (window.location.href.indexOf('/enquiry-form.html') != -1 || window.location.href.indexOf('/tnc.html') != -1) { return; } axios.get('json/messages.json') // .then(response => (this.messages = response.data)) .then(function (response) { _this2.messages = response.data; _this2.setTitle(); _this2.originalHeight = window.innerHeight; })["catch"](function (error) { console.log(error); }); this.getProductList(); this.getMerchantList(); }, mounted: function mounted() { this.$nextTick(function () { this.onResize(); }); window.addEventListener('resize', this.onResize); }, updated: function updated() {}, computed: { filteredMerchantList: function filteredMerchantList() { var _this3 = this; if (this.search.value) { var updatedList; if (this.filterMerchantList == 'name') { updatedList = this.sortList(this.merchantList, 'name_i18n', true); } else if (this.filterMerchantList == 'new') { updatedList = this.sortList(this.merchantList, 'time', false); } return updatedList.filter(function (post) { return post.name_i18n[_this3.lang].toLowerCase().includes(_this3.search.value.toLowerCase().trim()); }); } else { if (this.filterMerchantList == 'name') { return this.sortList(this.merchantList, 'name_i18n', true); } else if (this.filterMerchantList == 'new') { return this.sortList(this.merchantList, 'time', false); } } }, filteredHotProductList2: function filteredHotProductList2() { if (this.filterHotList2 == 'lowest') { return this.sortList(this.hotProductList2, 'unit_price', true); } else if (this.filterHotList2 == 'biggest_discount') { return this.sortList(this.hotProductList2, 'discount', false); } else { return this.sortList(this.hotProductList2, 'time', false); } } }, methods: { changeTab: function changeTab(currentTab) { if (currentTab != this.activeTab) { this.activeTab = currentTab; if (this.activeTab == 'tab1') { _paq.push(['setDocumentTitle', 'Shopping-RewardBuy']); _paq.push(['trackPageView']); } else if (this.activeTab == 'tab2') { _paq.push(['setDocumentTitle', 'Merchant-RewardBuy']); _paq.push(['trackPageView']); } } // if(currentTab == "tab2"){ // let hotMerchantListSwiper = this.$refs.hotMerchantListSwiper.swiper // hotMerchantListSwiper.update() // } }, getProductList: function getProductList() { var _this4 = this; axios // .get('sample/promotion_1_hot_list_1.json') //local .get(_env["default"].apiList.hotProductList1).then(function (response) { return _this4.hotProductList1 = _this4.sortList(response.data.product_list, 'order', true); })["catch"](function (error) { console.log(error); }); axios // .get('sample/promotion_1_promo_list.json') //local .get(_env["default"].apiList.promoList).then(function (response) { _this4.promoListTab = _this4.sortList(response.data.promo_list, 'order', true); if (_this4.promoListTab.length > 0) { _this4.promoTab = _this4.promoListTab[0].promo_list_id; if (_this4.promoListTab[0].promo_list_order) { _this4.promoList = _this4.sortList(response.data.product_list, _this4.promoListTab[0].promo_list_order, true); } } })["catch"](function (error) { console.log(error); }); axios // .get('sample/promotion_1_hot_list_2.json') //local .get(_env["default"].apiList.hotProductList2).then(function (response) { _this4.hotProductList2Tab = _this4.sortList(response.data.hot_list_2, 'order', true); if (_this4.hotProductList2Tab.length > 0) { var product_list = response.data.product_list; product_list = _this4.changeCreateTime(product_list, 'updated_at'); if (_this4.hotProductList2Tab[0].hot_list_2_order) { _this4.hotProductList2 = _this4.sortList(product_list, 'time', false); } } })["catch"](function (error) { console.log(error); }); }, getMerchantList: function getMerchantList() { var _this5 = this; axios.get(_env["default"].apiList.hotMerchantList).then(function (response) { return _this5.hotMerchantList = _this5.sortList(response.data.shop_list, 'BSC_order', true); })["catch"](function (error) { console.log(error); }); axios.get(_env["default"].apiList.merchantList).then(function (response) { _this5.merchantListTab = _this5.sortList(response.data.shop_category_list, 'order', true); if (_this5.merchantListTab.length > 0) { var shop_list = response.data.shop_list; if (_this5.merchantListTab[0].shop_category_order) { shop_list = _this5.changeCreateTime(shop_list, 'created_at'); _this5.merchantList = _this5.sortList(shop_list, 'name_i18n', true); } } })["catch"](function (error) { console.log(error); }); }, sortList: function sortList(productList, key, ascending) { var _this6 = this; if (key == 'name_i18n') { // return productList.sort((a, b) => a[key][this.lang].localeCompare(b[key][this.lang])) return productList.sort(function (a, b) { return a[key][_this6.lang].localeCompare(b[key][_this6.lang], "zh-Hant"); }); // ary.sort(function(a,b) { return a.localeCompare(b, "zh-Hant"); }); // return productList.sort((a,b) => (a[key][this.lang] > b[key][this.lang]) ? 1 : ((b[key][this.lang] > a[key][this.lang]) ? -1 : 0)) } if (ascending) { return productList.sort(function (a, b) { return a[key] > b[key] ? 1 : b[key] > a[key] ? -1 : 0; }); } else { return productList.sort(function (a, b) { return b[key] > a[key] ? 1 : a[key] > b[key] ? -1 : 0; }); } }, onPromoTab: function onPromoTab(key, index) { // console.log('Swiper click slide!', index + 1) this.promoTab = key; this.promoTabIndex = index + 1; var promoListSwiper = this.$refs.promoList.swiper; promoListSwiper.slideTo(0, 500, false); }, onHotList2Tab: function onHotList2Tab(key) { // console.log('Swiper click slide!', key) this.hotTab = key; }, onMerchantListTab: function onMerchantListTab(key) { // console.log('Swiper click slide!', key) this.merchantTab = key; }, goToOtherPage: function goToOtherPage(url) { console.log('URL: ', url); }, push: function push(e) { var url = e.currentTarget.getAttribute('data-url'); var eventName = e.currentTarget.getAttribute('data-eventName'); if (eventName) { matomoEvent(eventName); } // alert(url) // const url = 'alipayhk://platformapi/startApp?appId=2160020059747688&page=pages/login/login?&query=market_id%3DM012-HERCZ' if (url) { _push(decodeURIComponent(url)); } }, changeCreateTime: function changeCreateTime(list, timeItem) { for (var _i = 0, _Object$entries = Object.entries(list); _i < _Object$entries.length; _i++) { var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2), index = _Object$entries$_i[0], item = _Object$entries$_i[1]; if (timeItem == 'updated_at') { if (item.updated_at) { var updated_at = item.updated_at; updated_at = updated_at.replace(/[.,\/#!$%\^&\*;:{}=\-_`~()T]/g, ""); item.time = parseInt(updated_at); } else { item.time = 0; } } else { if (item.created_at) { var created_at = item.created_at; created_at = created_at.replace(/[.,\/#!$%\^&\*;:{}=\-_`~()T]/g, ""); item.time = parseInt(created_at); } else { item.time = 0; } } } return list; }, setTitle: function setTitle() { var _this = this; _setTitle(this.messages.pagetitle.index); if (typeof AlipayJSBridge != "undefined") { AlipayJSBridge.call('showOptionMenu'); AlipayJSBridge.call('setOptionMenu', { title: this.messages.share }); } document.addEventListener('optionMenu', function (e) { _this.share(); }, false); }, onResize: function onResize() { var originalHeight = this.originalHeight; //1100 var currentHeight = window.innerHeight; //1109 var heightMax = originalHeight + 10; //1110 var heightMin = originalHeight - 10; //1090 if (originalHeight != '') { //1109 <= 1110 && 1109 >=1090 if (currentHeight <= heightMax && currentHeight >= heightMin) { this.bottomBarVisible = true; } else { this.bottomBarVisible = false; } } }, numberWithCommas: function numberWithCommas(val) { return val.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); }, share: function share() { var _this7 = this; var getShareUrl = function getShareUrl(pagelink) { // var alipayScheme = "https://render.alipay.hk/p/s/hkwallet/landing?scheme=" // var startAppUrl = "alipayhk://platformapi/startapp?appId=20000067&url=" // var pagelink = encodeURIComponent(this.messages.share_url) // return alipayScheme + encodeURIComponent(startAppUrl + pagelink); return _this7.messages.share_url; }; var shareUrl = getShareUrl(); console.log(shareUrl); // const shareType = isAlipayHK() && compareVersion('2.8.0') >= 0 ? 'systemShare' : 'p2pshare' var shareType = 'systemShare'; var customPopupParams = { title: { background: '#1B82D2', content: this.messages.pagetitle.index, textColor: '#ffffff', // 客户端不支持缩写 textSize: '12' }, source: 'estamp', apps: ['whatsapp', 'messenger', 'facebook', 'more'] }; AlipayJSBridge.call('SocialShare', { shareContent: this.messages.pagetitle.index, extend: JSON.stringify(customPopupParams), shareUrl: shareUrl, shareType: shareType }); spmClick('share'); }, clearSearchInput: function clearSearchInput() { this.search.value = ""; } } }); var enquiryFormItem = new Vue({ el: '#enquiryForm', data: { processing: false, messages: null, label: { company_name: false, full_name: false, phone: false, email: false, product_category: false }, apiList: _env["default"].apiList || '', originalHeight: '', bottomBarVisible: true }, created: function created() { var _this8 = this; if (window.location.href.indexOf('/enquiry-form.html') == -1) { return; } axios.get('json/messages.json') // .then(response => (this.messages = response.data)) .then(function (response) { _this8.messages = response.data; _this8.setTitle(); _this8.enquiryForm = response.data.enquiryForm; _this8.originalHeight = window.innerHeight; })["catch"](function (error) { console.log(error); }); }, mounted: function mounted() { this.$nextTick(function () { this.onResize(); }); window.addEventListener('resize', this.onResize); }, updated: function updated() {}, methods: { changeTab: function changeTab(currentTab) { if (currentTab != this.activeTab) { this.activeTab = currentTab; } }, submitForm: function submitForm(e) { if (this.processing === true) { return; } this.processing = true; this.validFormData(this.enquiryForm.data); }, validFormData: function validFormData(data) { // console.log(data) var company_name = data.company_name; var full_name = data.full_name; var phone = data.phone; var email = data.email; var product_category = data.product_category; var http_or_app_name = data.http_or_app_name; if (company_name && full_name && this.validatePhone(phone) && this.validateEmail(email) && product_category) { for (var key in this.label) { this.label[key] = false; } if (typeof AlipayJSBridge != "undefined") { AlipayJSBridge.call('showLoading', { text: this.messages.enquiryForm.popup.loading }); } this.getAuthorization(data); // alertMsg(this.enquiryForm.popup.thankyou, this.enquiryForm.popup.confirm) } else { for (var key in this.label) { this.label[key] = false; } if (!company_name) { this.label.company_name = true; } if (!full_name) { this.label.full_name = true; } if (!this.validatePhone(phone)) { this.label.phone = true; } if (!this.validateEmail(email)) { this.label.email = true; } if (!product_category) { this.label.product_category = true; } this.processing = false; } }, validatePhone: function validatePhone(phone) { var re = /^[0-9]{8}$/; return re.test(phone); }, validateEmail: function validateEmail(email) { var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; return re.test(email.toLowerCase()); }, getAuthorization: function getAuthorization(data) { var _this9 = this; var headers = { 'Content-Type': 'application/json', 'API-Key': 'rI4jiJJ1z33QRRLa5hTaLy2Ndiysb0LEP6v2IPKt' }; axios.post(this.apiList.authorization, data, { headers: headers }).then(function (response) { return _this9.enquiryFormSubmit(data, response.data.token); })["catch"](function (error) { if (typeof AlipayJSBridge != "undefined") { AlipayJSBridge.call('hideLoading'); } console.log(error); _this9.processing = false; alertMsg(_this9.messages.error["default"]); }); }, enquiryFormSubmit: function enquiryFormSubmit(data, token) { var _this10 = this; var headers = { 'Content-Type': 'application/json', 'authorization': token }; axios.post(this.apiList.enquiryForm, data, { headers: headers }).then(function (response) { if (typeof AlipayJSBridge != "undefined") { AlipayJSBridge.call('hideLoading'); } alertMsg(_this10.enquiryForm.popup.thankyou, _this10.enquiryForm.popup.confirm); _this10.enquiryForm.data.company_name = ""; _this10.enquiryForm.data.full_name = ""; _this10.enquiryForm.data.phone = ""; _this10.enquiryForm.data.email = ""; _this10.enquiryForm.data.product_category = ""; _this10.enquiryForm.data.http_or_app_name = ""; _this10.processing = false; })["catch"](function (error) { if (typeof AlipayJSBridge != "undefined") { AlipayJSBridge.call('hideLoading'); } _this10.processing = false; var errorData = error.response.data; var responseJSON = errorData.errors; if (error.response.status === 422) { if (errorData.status_code === 422) { var errormsg = ''; for (var _error in responseJSON) { errormsg = errormsg + responseJSON[_error]; } alertMsg(errormsg, _this10.enquiryForm.popup.confirm); } } }); }, setTitle: function setTitle() { _setTitle(this.messages.pagetitle.enquiry); }, onResize: function onResize() { var originalHeight = this.originalHeight; //1100 var currentHeight = window.innerHeight; //1109 var heightMax = originalHeight + 10; //1110 var heightMin = originalHeight - 10; //1090 if (originalHeight != '') { //1109 <= 1110 && 1109 >=1090 if (currentHeight <= heightMax && currentHeight >= heightMin) { this.bottomBarVisible = true; } else { this.bottomBarVisible = false; } } } } }); var tncItem = new Vue({ el: '#tnc', data: { messages: null, tnc: null, apiList: _env["default"].apiList || '' }, created: function created() { var _this11 = this; if (window.location.href.indexOf('/tnc.html') == -1) { return; } axios.get('json/messages.json') // .then(response => (this.messages = response.data)) .then(function (response) { _this11.messages = response.data; _this11.setTitle(); _this11.tnc = response.data.tnc; })["catch"](function (error) { console.log(error); }); }, mounted: function mounted() {}, updated: function updated() {}, methods: { setTitle: function setTitle() { _setTitle(this.messages.pagetitle.tnc); } } }); },{"utils/env.js":2}],2:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; // const currentENV = 'sandbox'; var currentENV = 'prod'; // const currentMode = 'debug'; var currentMode = 'static'; var version = '1.0.5'; var prodPageDomain = 'https://eshop.codpayment.com/'; var sandboxPageDomain = 'https://eshop.sandbox-codpayment.com/'; var prodPath = 'https://eshop.codpayment.com/static/'; var sandboxPath = 'https://eshop.sandbox-codpayment.com/static/'; // const sandboxPath = ''; //local //shopid = appid // let shop_id = 'EAPP001478523698' //prod // if(currentENV == 'sandbox'){ // shop_id = '4G00000180000003' //sandbox // } var prodJSONPath = "https://eshop.codpayment.com/".concat(currentMode, "/dyn/v1/app-service/estamp/json/promotions"); var sandJSONboxPath = "https://eshop.sandbox-codpayment.com/".concat(currentMode, "/dyn/v1/app-service/estamp/json/promotions"); // const sandJSONboxPath = 'sample/'; //local var prodCodPaymentPath = 'https://www.codpayment.com'; var sandboxCodPaymentboxPath = 'https://codpayment.webssup.com'; var domainPath = prodPath; var enquiryFormDomainPath = prodCodPaymentPath; var jsonPath = prodJSONPath; var pageDomain = prodPageDomain; if (currentENV == 'sandbox') { domainPath = sandboxPath; enquiryFormDomainPath = sandboxCodPaymentboxPath; jsonPath = sandJSONboxPath; pageDomain = sandboxPageDomain; } var apiList = { authorization: "".concat(enquiryFormDomainPath, "/api/authorization"), enquiryForm: "".concat(enquiryFormDomainPath, "/api/merchants"), hotProductList1: "".concat(jsonPath, "/promotion_1_hot_list_1.json"), promoList: "".concat(jsonPath, "/promotion_1_promo_list.json"), hotProductList2: "".concat(jsonPath, "/promotion_1_hot_list_2.json"), hotMerchantList: "".concat(jsonPath, "/promotion_1_best_shop_list.json"), merchantList: "".concat(jsonPath, "/promotion_1_shop_category_list.json") }; console.log('current env is ' + currentENV); var _default = { currentENV: currentENV, domainPath: domainPath, jsonPath: jsonPath, apiList: apiList, version: version, currentMode: currentMode, pageDomain: pageDomain }; exports["default"] = _default; },{}]},{},[1]) //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvc2NyaXB0cy9zY3JpcHQuanMiLCJzcmMvc2NyaXB0cy91dGlscy9lbnYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztBQ2NBOzs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsS0FBSyxDQUFDLFlBQVc7QUFDZixFQUFBLE9BQU8sQ0FBQyxHQUFSLENBQVksZ0JBQVo7QUFDRCxDQUZJLENBQUw7O0FBR0EsU0FBUyxLQUFULENBQWUsUUFBZixFQUF5QjtBQUN2QixNQUFJLE1BQU0sQ0FBQyxjQUFYLEVBQTJCO0FBQ3pCLElBQUEsUUFBUSxJQUFJLFFBQVEsRUFBcEI7QUFDRCxHQUZELE1BRU87QUFDTCxJQUFBLFFBQVEsQ0FBQyxnQkFBVCxDQUEwQixxQkFBMUIsRUFBaUQsUUFBakQsRUFBMkQsS0FBM0Q7QUFDRDtBQUNGOztBQUNELFNBQVMsUUFBVCxDQUFrQixPQUFsQixFQUEyQixNQUEzQixFQUFtQztBQUNqQztBQUNBLEVBQUEsY0FBYyxDQUFDLElBQWYsQ0FBb0IsT0FBcEIsRUFBNkI7QUFDM0IsSUFBQSxLQUFLLEVBQUUsRUFEb0I7QUFFM0IsSUFBQSxPQUFPLEVBQUUsT0FGa0I7QUFHM0IsSUFBQSxNQUFNLEVBQUU7QUFIbUIsR0FBN0I7QUFLRDs7QUFFRCxTQUFTLEtBQVQsQ0FBYyxHQUFkLEVBQW1CO0FBQ2pCLE1BQUcsT0FBTyxjQUFQLElBQXlCLFdBQTVCLEVBQXdDO0FBQ3RDLElBQUEsY0FBYyxDQUFDLElBQWYsQ0FBb0IsWUFBcEIsRUFBa0M7QUFDaEMsTUFBQSxHQUFHLEVBQUU7QUFEMkIsS0FBbEM7QUFHRCxHQUpELE1BSU87QUFDTCxJQUFBLE1BQU0sQ0FBQyxRQUFQLENBQWdCLElBQWhCLEdBQXVCLEdBQXZCO0FBQ0Q7QUFDRjs7QUFFRCxTQUFTLFNBQVQsQ0FBa0IsS0FBbEIsRUFBd0I7QUFDdEIsTUFBRyxPQUFPLGNBQVAsSUFBeUIsV0FBNUIsRUFB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R0FBRztBQUNkLEVBQUEsYUFBYSxZQUFLLHFCQUFMLHVCQURDO0FBRWQsRUFBQSxXQUFXLFlBQUsscUJBQUwsbUJBRkc7QUFHZCxFQUFBLGVBQWUsWUFBSyxRQUFMLGlDQUhEO0FBSWQsRUFBQSxTQUFTLFlBQUssUUFBTCxpQ0FKSztBQUtkLEVBQUEsZUFBZSxZQUFLLFFBQUwsaUNBTEQ7QUFNZCxFQUFBLGVBQWUsWUFBSyxRQUFMLHFDQU5EO0FBT2QsRUFBQSxZQUFZLFlBQUssUUFBTDtBQVBFLENBQWhCO0FBVUEsT0FBTyxDQUFDLEdBQVIsQ0FBWSxvQkFBa0IsVUFBOUI7ZUFFZTtBQUNiLEVBQUEsVUFBVSxFQUFFLFVBREM7QUFFYixFQUFBLFVBQVUsRUFBRSxVQUZDO0FBR2IsRUFBQSxRQUFRLEVBQUUsUUFIRztBQUliLEVBQUEsT0FBTyxFQUFFLE9BSkk7QUFLYixFQUFBLE9BQU8sRUFBRSxPQUxJO0FBTWIsRUFBQSxXQUFXLEVBQUUsV0FOQTtBQU9iLEVBQUEsVUFBVSxFQUFFO0FBUEMsQyIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIi8vIGltcG9ydCBWdWUgZnJvbSAndnVlJ1xyXG4vLyBpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnXHJcbi8vIGltcG9ydCBWdWVBeGlvcyBmcm9tICd2dWUtYXhpb3MnXHJcblxyXG4vLyBWdWUudXNlKFZ1ZUF4aW9zLCBheGlvcylcclxuLy8gaW1wb3J0IFZ1ZUF3ZXNvbWVTd2lwZXIgZnJvbSAndnVlLWF3ZXNvbWUtc3dpcGVyJ1xyXG5cclxuLy8gLy8gaW1wb3J0IHN0eWxlICg+PSBTd2lwZXIgNi54KVxyXG4vLyBpbXBvcnQgJ3N3aXBlci9zd2lwZXItYnVuZGxlLmNzcydcclxuXHJcbi8vIC8vIGltcG9ydCBzdHlsZSAoPD0gU3dpcGVyIDUueClcclxuLy8gaW1wb3J0ICdzd2lwZXIvY3NzL3N3aXBlci5jc3MnXHJcblxyXG4vLyBWdWUudXNlKFZ1ZUF3ZXNvbWVTd2lwZXIpXHJcbmltcG9ydCBlbnYgZnJvbSAndXRpbHMvZW52LmpzJ1xyXG5cclxucmVhZHkoZnVuY3Rpb24oKSB7XHJcbiAgY29uc29sZS5sb2coJ2pzYnJpZGdlIHJlYWR5JylcclxufSlcclxuZnVuY3Rpb24gcmVhZHkoY2FsbGJhY2spIHtcclxuICBpZiAod2luZG93LkFsaXBheUpTQnJpZGdlKSB7XHJcbiAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdBbGlwYXlKU0JyaWRnZVJlYWR5JywgY2FsbGJhY2ssIGZhbHNlKTtcclxuICB9XHJcbn1cclxuZnVuY3Rpb24gYWxlcnRNc2cobWVzc2FnZSwgYnV0dG9uKSB7XHJcbiAgLy8gYWxlcnQoJ2FsZXJ0TXNnJylcclxuICBBbGlwYXlKU0JyaWRnZS5jYWxsKCdhbGVydCcsIHtcclxuICAgIHRpdGxlOiAnJyxcclxuICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXHJcbiAgICBidXR0b246IGJ1dHRvblxyXG4gIH0pXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHB1c2godXJsKSB7XHJcbiAgaWYodHlwZW9mIEFsaXBheUpTQnJpZGdlICE9IFwidW5kZWZpbmVkXCIpe1xyXG4gICAgQWxpcGF5SlNCcmlkZ2UuY2FsbCgncHVzaFdpbmRvdycsIHtcclxuICAgICAgdXJsOiB1cmxcclxuICAgIH0pXHJcbiAgfSBlbHNlIHtcclxuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBzZXRUaXRsZSh0aXRsZSl7XHJcbiAgaWYodHlwZW9mIEFsaXBheUpTQnJpZGdlICE9IFwidW5kZWZpbmVkXCIpe1xyXG4gICAgQWxpcGF5SlNCcmlkZ2UuY2FsbCgnc2V0VGl0bGUnLCB7XHJcbiAgICAgIHRpdGxlOiB0aXRsZVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1hdG9tb0V2ZW50KHRyYWNraW5nX25hbWUpe1xyXG4gIC8vIF9wYXEucHVzaChbJ3RyYWNrRXZlbnQnLCAnQWN0aW9ucycsIHRyYWNraW5nX25hbWVdKTtcclxuICBfcGFxLnB1c2goWyd0cmFja0V2ZW50JywgdHJhY2tpbmdfbmFtZV0pO1xyXG59XHJcblZ1ZS51c2UoVnVlQXdlc29tZVN3aXBlcilcclxuY29uc3QgYXBwID0gbmV3IFZ1ZSh7XHJcbiAgZWw6ICcjaW5kZXgnLFxyXG4gIGRhdGE6IHtcclxuICAgIGVudjogZW52LFxyXG4gICAgbGFuZzogKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoJy9lbi8nKSAhPSAtMSkgPyAnZW4nOiAndGMnLFxyXG4gICAgbm90SW5BbGlwYXk6IGZhbHNlLFxyXG4gICAgYWN0aXZlVGFiOiAndGFiMScsXHJcbiAgICBwcm9tb1RhYjogJycsXHJcbiAgICBwcm9tb1RhYkluZGV4OiAxLFxyXG4gICAgaG90VGFiOiAnJyxcclxuICAgIG1lcmNoYW50VGFiOiAnJyxcclxuICAgIG1lc3NhZ2VzOiBudWxsLFxyXG4gICAgaG90UHJvZHVjdExpc3QxOiBbXSxcclxuICAgIGhvdFByb2R1Y3RMaXN0MjogW10sXHJcbiAgICBob3RQcm9kdWN0TGlzdDJUYWI6IFtdLFxyXG4gICAgcHJvbW9MaXN0VGFiOiBbXSxcclxuICAgIHByb21vTGlzdDogW10sXHJcbiAgICBob3RNZXJjaGFudExpc3Q6IFtdLFxyXG4gICAgbWVyY2hhbnRMaXN0VGFiOiBbXSxcclxuICAgIG1lcmNoYW50TGlzdDogW10sXHJcbiAgICBmaWx0ZXJIb3RMaXN0MjogJ25ldycsXHJcbiAgICBmaWx0ZXJNZXJjaGFudExpc3Q6ICduYW1lJyxcclxuICAgIHNlYXJjaDoge1xyXG4gICAgICB2YWx1ZTogJycsXHJcbiAgICB9LFxyXG4gICAgc3dpcGVySG90UHJvZHVjdE9wdGlvbnM6IHtcclxuICAgICAgc2xpZGVzUGVyVmlldzogMyxcclxuICAgICAgc2xpZGVzUGVyR3JvdXA6IDMsXHJcbiAgICAgIHN3aXBlVG9TbGlkZTogdHJ1ZSxcclxuICAgICAgYXV0b3BsYXk6IHtcclxuICAgICAgICBkZWxheTogNTAwMCxcclxuICAgICAgICBkaXNhYmxlT25JbnRlcmFjdGlvbjogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICAgIC8vIHBhZ2luYXRpb246ICcuc3dpcGVyLXBhZ2luYXRpb24xJyxcclxuICAgICAgLy8gcGFnaW5hdGlvbkNsaWNrYWJsZTogdHJ1ZVxyXG4gICAgICBwYWdpbmF0aW9uOiB7XHJcbiAgICAgICAgZWw6ICcuc3dpcGVyLXBhZ2luYXRpb24xJyxcclxuICAgICAgICBjbGlja2FibGU6IHRydWVcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIHN3aXBlcmhvdFByb2R1Y3RMaXN0MkJ1dHRvbnB0aW9uczoge1xyXG4gICAgICBzbGlkZXNQZXJWaWV3OiAnYXV0bycsXHJcbiAgICAgIHNwYWNlQmV0d2VlbjogMzAsXHJcbiAgICAgIC8vIHdpZHRoOiAnYXV0bycsXHJcbiAgICAgIGZyZWVNb2RlOiB0cnVlLFxyXG4gICAgICAvLyBzbGlkZVRvQ2xpY2tlZFNsaWRlOiB0cnVlLFxyXG4gICAgICAvLyBvbjoge1xyXG4gICAgICAvLyAgIGFjdGl2ZUluZGV4Q2hhbmdlOiBmdW5jdGlvbiAoc3dpcGVyKSB7XHJcbiAgICAgIC8vICAgICBjb25zb2xlLmxvZyhzd2lwZXIpO1xyXG4gICAgICAvLyAgIH0sXHJcbiAgICAgIC8vICAgY2xpY2s6IGZ1bmN0aW9uIChzd2lwZXIpIHtcclxuICAgICAgLy8gICAgIGNvbnNvbGUubG9nKHN3aXBlcik7XHJcbiAgICAgIC8vICAgfSxcclxuICAgICAgLy8gfVxyXG4gICAgfSxcclxuICAgIHN3aXBlcmhvdFByb2R1Y3RMaXN0MkNvbnRlbnRwdGlvbnM6IHtcclxuICAgICAgc2xpZGVzUGVyVmlldzogMyxcclxuICAgICAgZnJlZU1vZGU6IGZhbHNlLFxyXG4gICAgfSxcclxuICAgIHN3aXBlclByb21vTGlzdENvbnRlbnRwdGlvbnM6IHtcclxuICAgICAgc3BhY2VCZXR3ZWVuOiAzMCxcclxuICAgICAgc2xpZGVzUGVyVmlldzogJ2F1dG8nLFxyXG4gICAgICBzd2lwZVRvU2xpZGU6IHRydWVcclxuICAgIH0sXHJcbiAgICBzd2lwZXJIb3RNZXJjaGFudExpc3RwdGlvbnM6IHtcclxuICAgICAgc3BhY2VCZXR3ZWVuOiAxMCxcclxuICAgICAgc2xpZGVzUGVyVmlldzogJzIuMycsXHJcbiAgICAgIHN3aXBlVG9TbGlkZTogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHN3aXBlck1lcmNoYW50TGlzdEJ1dHRvbnB0aW9uczoge1xyXG4gICAgICBzbGlkZXNQZXJWaWV3OiAnYXV0bycsXHJcbiAgICAgIHNwYWNlQmV0d2VlbjogMzAsXHJcbiAgICAgIC8vIHdpZHRoOiAnYXV0bycsXHJcbiAgICAgIGZyZWVNb2RlOiB0cnVlXHJcbiAgICB9LFxyXG4gICAgb3JpZ2luYWxIZWlnaHQ6ICcnLFxyXG4gICAgYm90dG9tQmFyVmlzaWJsZTogdHJ1ZVxyXG4gIH0sXHJcbiAgY3JlYXRlZCgpIHtcclxuICAgIFxyXG4gICAgdmFyIHVzZXJBZ2VudCA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50IHx8IG5hdmlnYXRvci51c2VyQWdlbnRcclxuICAgIFxyXG4gICAgaWYodXNlckFnZW50LmluZGV4T2YoJ0FQSEsnKSA9PSAtMSAmJiB1c2VyQWdlbnQuaW5kZXhPZignYXBoaycpID09IC0xKXsgLy9ub3QgaW4gYWxpcGF5aGsgYXBwXHJcbiAgICAgIHRoaXMubm90SW5BbGlwYXkgPSB0cnVlXHJcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gZGVjb2RlVVJJQ29tcG9uZW50KCdhbGlwYXloazovL3BsYXRmb3JtYXBpL3N0YXJ0QXBwP2FwcElkPTIwMDAwMDY3JnVybD1odHRwcyUzQSUyRiUyRmVzaG9wLmNvZHBheW1lbnQuY29tJTJGc3RhdGljJTJGZHluJTJGdjElMkZhcHAtc2VydmljZSUyRmVzdGFtcCUyRnRjJTJGaW5kZXguaHRtbCcpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZigod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZignL3RjLycpICE9IC0xKSl7IC8vIHRjIGxpbmsgbm93XHJcbiAgICAgICAgaWYodXNlckFnZW50LmluZGV4T2YoJ0xhbmd1YWdlL2VuJykgIT0gLTEpeyAvLyB1c2VyYWdlbnQgPSBlbmdsaXNoXHJcbiAgICAgICAgICAvLyBhbGVydChgJHtlbnYucGFnZURvbWFpbn0ke2Vudi5jdXJyZW50TW9kZX0vZHluL3YxL2FwcC1zZXJ2aWNlL2VzdGFtcC9lbi9pbmRleC5odG1sYClcclxuICAgICAgICAgIGxvY2F0aW9uLnJlcGxhY2UoYCR7ZW52LnBhZ2VEb21haW59JHtlbnYuY3VycmVudE1vZGV9L2R5bi92MS9hcHAtc2VydmljZS9lc3RhbXAvZW4vaW5kZXguaHRtbGApXHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoJy9lbnF1aXJ5LWZvcm0uaHRtbCcpICE9IC0xIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoJy90bmMuaHRtbCcpICE9IC0xKXtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBheGlvc1xyXG4gICAgICAuZ2V0KCdqc29uL21lc3NhZ2VzLmpzb24nKVxyXG4gICAgICAvLyAudGhlbihyZXNwb25zZSA9PiAodGhpcy5tZXNzYWdlcyA9IHJlc3BvbnNlLmRhdGEpKVxyXG4gICAgICAudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlcyA9IHJlc3BvbnNlLmRhdGFcclxuICAgICAgICB0aGlzLnNldFRpdGxlKClcclxuICAgICAgICB0aGlzLm9yaWdpbmFsSGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlcnJvcilcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLmdldFByb2R1Y3RMaXN0KClcclxuICAgIHRoaXMuZ2V0TWVyY2hhbnRMaXN0KClcclxuICAgICAgICBcclxuICB9LFxyXG4gIG1vdW50ZWQoKSB7XHJcbiAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHRoaXMub25SZXNpemUoKTtcclxuICAgIH0pXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5vblJlc2l6ZSlcclxuICB9LFxyXG4gIHVwZGF0ZWQoKSB7XHJcbiAgICBcclxuICB9LFxyXG4gIGNvbXB1dGVkOiB7XHJcbiAgICBmaWx0ZXJlZE1lcmNoYW50TGlzdCgpIHtcclxuICAgICAgaWYodGhpcy5zZWFyY2gudmFsdWUpe1xyXG4gICAgICAgIGxldCB1cGRhdGVkTGlzdFxyXG4gICAgICAgIGlmKHRoaXMuZmlsdGVyTWVyY2hhbnRMaXN0ID09ICduYW1lJyl7XHJcbiAgICAgICAgICB1cGRhdGVkTGlzdCA9IHRoaXMuc29ydExpc3QodGhpcy5tZXJjaGFudExpc3QsICduYW1lX2kxOG4nLCB0cnVlKVxyXG4gICAgICAgIH0gZWxzZSBpZih0aGlzLmZpbHRlck1lcmNoYW50TGlzdCA9PSAnbmV3Jyl7XHJcbiAgICAgICAgICB1cGRhdGVkTGlzdCA9ICB0aGlzLnNvcnRMaXN0KHRoaXMubWVyY2hhbnRMaXN0LCAndGltZScsIGZhbHNlKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdXBkYXRlZExpc3QuZmlsdGVyKHBvc3QgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHBvc3QubmFtZV9pMThuW3RoaXMubGFuZ10udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnNlYXJjaC52YWx1ZS50b0xvd2VyQ2FzZSgpLnRyaW0oKSlcclxuICAgICAgICB9KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmKHRoaXMuZmlsdGVyTWVyY2hhbnRMaXN0ID09ICduYW1lJyl7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5zb3J0TGlzdCh0aGlzLm1lcmNoYW50TGlzdCwgJ25hbWVfaTE4bicsIHRydWUpXHJcbiAgICAgICAgfSBlbHNlIGlmKHRoaXMuZmlsdGVyTWVyY2hhbnRMaXN0ID09ICduZXcnKXtcclxuICAgICAgICAgIHJldHVybiB0aGlzLnNvcnRMaXN0KHRoaXMubWVyY2hhbnRMaXN0LCAndGltZScsIGZhbHNlKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGZpbHRlcmVkSG90UHJvZHVjdExpc3QyKCl7XHJcbiAgICAgIGlmKHRoaXMuZmlsdGVySG90TGlzdDIgPT0gJ2xvd2VzdCcpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNvcnRMaXN0KHRoaXMuaG90UHJvZHVjdExpc3QyLCAndW5pdF9wcmljZScsIHRydWUpXHJcbiAgICAgIH0gZWxzZSBpZih0aGlzLmZpbHRlckhvdExpc3QyID09ICdiaWdnZXN0X2Rpc2NvdW50Jyl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc29ydExpc3QodGhpcy5ob3RQcm9kdWN0TGlzdDIsICdkaXNjb3VudCcsIGZhbHNlKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNvcnRMaXN0KHRoaXMuaG90UHJvZHVjdExpc3QyLCAndGltZScsIGZhbHNlKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuICBtZXRob2RzOntcclxuICAgIGNoYW5nZVRhYihjdXJyZW50VGFiKSB7XHJcbiAgICAgIGlmKGN1cnJlbnRUYWIgIT0gdGhpcy5hY3RpdmVUYWIpe1xyXG4gICAgICAgIHRoaXMuYWN0aXZlVGFiID0gY3VycmVudFRhYlxyXG4gICAgICAgIGlmKHRoaXMuYWN0aXZlVGFiID09ICd0YWIxJyl7XHJcbiAgICAgICAgICBfcGFxLnB1c2goWydzZXREb2N1bWVudFRpdGxlJywgJ1Nob3BwaW5nLVJld2FyZEJ1eSddKTtcclxuICAgICAgICAgIF9wYXEucHVzaChbJ3RyYWNrUGFnZVZpZXcnXSk7XHJcbiAgICAgICAgfSBlbHNlIGlmKHRoaXMuYWN0aXZlVGFiID09ICd0YWIyJyl7XHJcbiAgICAgICAgICBfcGFxLnB1c2goWydzZXREb2N1bWVudFRpdGxlJywgJ01lcmNoYW50LVJld2FyZEJ1eSddKTtcclxuICAgICAgICAgIF9wYXEucHVzaChbJ3RyYWNrUGFnZVZpZXcnXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIGlmKGN1cnJlbnRUYWIgPT0gXCJ0YWIyXCIpe1xyXG4gICAgICAvLyAgIGxldCBob3RNZXJjaGFudExpc3RTd2lwZXIgPSB0aGlzLiRyZWZzLmhvdE1lcmNoYW50TGlzdFN3aXBlci5zd2lwZXJcclxuICAgICAgLy8gICBob3RNZXJjaGFudExpc3RTd2lwZXIudXBkYXRlKClcclxuICAgICAgLy8gfVxyXG4gICAgfSxcclxuICAgIGdldFByb2R1Y3RMaXN0KCl7XHJcbiAgICAgIGF4aW9zXHJcbiAgICAgICAgLy8gLmdldCgnc2FtcGxlL3Byb21vdGlvbl8xX2hvdF9saXN0XzEuanNvbicpIC8vbG9jYWxcclxuICAgICAgICAuZ2V0KGVudi5hcGlMaXN0LmhvdFByb2R1Y3RMaXN0MSlcclxuICAgICAgICAudGhlbihyZXNwb25zZSA9PiAodGhpcy5ob3RQcm9kdWN0TGlzdDEgPSB0aGlzLnNvcnRMaXN0KHJlc3BvbnNlLmRhdGEucHJvZHVjdF9saXN0LCAnb3JkZXInLCB0cnVlKSkpXHJcbiAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIFxyXG4gICAgICBheGlvc1xyXG4gICAgICAgIC8vIC5nZXQoJ3NhbXBsZS9wcm9tb3Rpb25fMV9wcm9tb19saXN0Lmpzb24nKSAvL2xvY2FsXHJcbiAgICAgICAgLmdldChlbnYuYXBpTGlzdC5wcm9tb0xpc3QpXHJcbiAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wcm9tb0xpc3RUYWIgPSB0aGlzLnNvcnRMaXN0KHJlc3BvbnNlLmRhdGEucHJvbW9fbGlzdCwgJ29yZGVyJywgdHJ1ZSlcclxuICAgICAgICAgIGlmKHRoaXMucHJvbW9MaXN0VGFiLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICB0aGlzLnByb21vVGFiID0gIHRoaXMucHJvbW9MaXN0VGFiWzBdLnByb21vX2xpc3RfaWRcclxuICAgICAgICAgICAgaWYodGhpcy5wcm9tb0xpc3RUYWJbMF0ucHJvbW9fbGlzdF9vcmRlcil7XHJcbiAgICAgICAgICAgICAgdGhpcy5wcm9tb0xpc3QgPSB0aGlzLnNvcnRMaXN0KHJlc3BvbnNlLmRhdGEucHJvZHVjdF9saXN0LCB0aGlzLnByb21vTGlzdFRhYlswXS5wcm9tb19saXN0X29yZGVyLCB0cnVlKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcilcclxuICAgICAgICB9KTtcclxuICAgICAgICBcclxuICAgICAgYXhpb3NcclxuICAgICAgICAvLyAuZ2V0KCdzYW1wbGUvcHJvbW90aW9uXzFfaG90X2xpc3RfMi5qc29uJykgLy9sb2NhbFxyXG4gICAgICAgIC5nZXQoZW52LmFwaUxpc3QuaG90UHJvZHVjdExpc3QyKVxyXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgIHRoaXMuaG90UHJvZHVjdExpc3QyVGFiID0gdGhpcy5zb3J0TGlzdChyZXNwb25zZS5kYXRhLmhvdF9saXN0XzIsICdvcmRlcicsIHRydWUpXHJcbiAgICAgICAgICBpZih0aGlzLmhvdFByb2R1Y3RMaXN0MlRhYi5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgbGV0IHByb2R1Y3RfbGlzdCA9IHJlc3BvbnNlLmRhdGEucHJvZHVjdF9saXN0XHJcbiAgICAgICAgICAgIHByb2R1Y3RfbGlzdCA9IHRoaXMuY2hhbmdlQ3JlYXRlVGltZShwcm9kdWN0X2xpc3QsICd1cGRhdGVkX2F0JylcclxuICAgICAgICAgICAgaWYodGhpcy5ob3RQcm9kdWN0TGlzdDJUYWJbMF0uaG90X2xpc3RfMl9vcmRlcil7XHJcbiAgICAgICAgICAgICAgdGhpcy5ob3RQcm9kdWN0TGlzdDIgPSB0aGlzLnNvcnRMaXN0KHByb2R1Y3RfbGlzdCwgJ3RpbWUnLCBmYWxzZSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgZ2V0TWVyY2hhbnRMaXN0KCl7XHJcbiAgICAgIGF4aW9zXHJcbiAgICAgICAgLmdldChlbnYuYXBpTGlzdC5ob3RNZXJjaGFudExpc3QpXHJcbiAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gKHRoaXMuaG90TWVyY2hhbnRMaXN0ID0gdGhpcy5zb3J0TGlzdChyZXNwb25zZS5kYXRhLnNob3BfbGlzdCwgJ0JTQ19vcmRlcicsIHRydWUpKSlcclxuICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcilcclxuICAgICAgICB9KTtcclxuICAgICAgYXhpb3NcclxuICAgICAgICAuZ2V0KGVudi5hcGlMaXN0Lm1lcmNoYW50TGlzdClcclxuICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm1lcmNoYW50TGlzdFRhYiA9IHRoaXMuc29ydExpc3QocmVzcG9uc2UuZGF0YS5zaG9wX2NhdGVnb3J5X2xpc3QsICdvcmRlcicsIHRydWUpXHJcbiAgICAgICAgICBpZih0aGlzLm1lcmNoYW50TGlzdFRhYi5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgbGV0IHNob3BfbGlzdCA9IHJlc3BvbnNlLmRhdGEuc2hvcF9saXN0XHJcbiAgICAgICAgICAgIGlmKHRoaXMubWVyY2hhbnRMaXN0VGFiWzBdLnNob3BfY2F0ZWdvcnlfb3JkZXIpe1xyXG4gICAgICAgICAgICAgIHNob3BfbGlzdCA9IHRoaXMuY2hhbmdlQ3JlYXRlVGltZShzaG9wX2xpc3QsICdjcmVhdGVkX2F0JylcclxuICAgICAgICAgICAgICB0aGlzLm1lcmNoYW50TGlzdCA9IHRoaXMuc29ydExpc3Qoc2hvcF9saXN0LCAnbmFtZV9pMThuJywgdHJ1ZSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgc29ydExpc3QocHJvZHVjdExpc3QgLGtleSwgYXNjZW5kaW5nICl7XHJcbiAgICAgIGlmKGtleSA9PSAnbmFtZV9pMThuJyl7XHJcbiAgICAgICAgLy8gcmV0dXJuIHByb2R1Y3RMaXN0LnNvcnQoKGEsIGIpID0+IGFba2V5XVt0aGlzLmxhbmddLmxvY2FsZUNvbXBhcmUoYltrZXldW3RoaXMubGFuZ10pKVxyXG4gICAgICAgIHJldHVybiBwcm9kdWN0TGlzdC5zb3J0KChhLCBiKSA9PiB7IHJldHVybiBhW2tleV1bdGhpcy5sYW5nXS5sb2NhbGVDb21wYXJlKGJba2V5XVt0aGlzLmxhbmddLCBcInpoLUhhbnRcIik7IH0pOyAgXHJcbiAgICAgICAgLy8gYXJ5LnNvcnQoZnVuY3Rpb24oYSxiKSB7IHJldHVybiBhLmxvY2FsZUNvbXBhcmUoYiwgXCJ6aC1IYW50XCIpOyB9KTsgIFxyXG4gICAgICAgIC8vIHJldHVybiBwcm9kdWN0TGlzdC5zb3J0KChhLGIpID0+IChhW2tleV1bdGhpcy5sYW5nXSA+IGJba2V5XVt0aGlzLmxhbmddKSA/IDEgOiAoKGJba2V5XVt0aGlzLmxhbmddID4gYVtrZXldW3RoaXMubGFuZ10pID8gLTEgOiAwKSlcclxuICAgICAgfVxyXG4gICAgICBpZihhc2NlbmRpbmcpe1xyXG4gICAgICAgIHJldHVybiBwcm9kdWN0TGlzdC5zb3J0KChhLGIpID0+IChhW2tleV0gPiBiW2tleV0pID8gMSA6ICgoYltrZXldID4gYVtrZXldKSA/IC0xIDogMCkpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHByb2R1Y3RMaXN0LnNvcnQoKGEsYikgPT4gKGJba2V5XSA+IGFba2V5XSkgPyAxIDogKChhW2tleV0gPiBiW2tleV0pID8gLTEgOiAwKSlcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgIH0sXHJcbiAgICBvblByb21vVGFiKGtleSwgaW5kZXgpIHtcclxuICAgICAgLy8gY29uc29sZS5sb2coJ1N3aXBlciBjbGljayBzbGlkZSEnLCBpbmRleCArIDEpXHJcbiAgICAgIHRoaXMucHJvbW9UYWIgPSBrZXlcclxuICAgICAgdGhpcy5wcm9tb1RhYkluZGV4ID0gaW5kZXggKyAxXHJcbiAgICAgIGxldCBwcm9tb0xpc3RTd2lwZXIgPSB0aGlzLiRyZWZzLnByb21vTGlzdC5zd2lwZXJcclxuICAgICAgcHJvbW9MaXN0U3dpcGVyLnNsaWRlVG8oMCwgNTAwLCBmYWxzZSlcclxuICAgIH0sXHJcbiAgICBvbkhvdExpc3QyVGFiKGtleSkge1xyXG4gICAgICAvLyBjb25zb2xlLmxvZygnU3dpcGVyIGNsaWNrIHNsaWRlIScsIGtleSlcclxuICAgICAgdGhpcy5ob3RUYWIgPSBrZXlcclxuICAgIH0sXHJcbiAgICBvbk1lcmNoYW50TGlzdFRhYihrZXkpIHtcclxuICAgICAgLy8gY29uc29sZS5sb2coJ1N3aXBlciBjbGljayBzbGlkZSEnLCBrZXkpXHJcbiAgICAgIHRoaXMubWVyY2hhbnRUYWIgPSBrZXlcclxuICAgIH0sXHJcbiAgICBnb1RvT3RoZXJQYWdlKHVybCl7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdVUkw6ICcsIHVybClcclxuICAgIH0sXHJcbiAgICBwdXNoKGUpe1xyXG4gICAgICBjb25zdCB1cmwgPSBlLmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXVybCcpXHJcbiAgICAgIGNvbnN0IGV2ZW50TmFtZSA9IGUuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZXZlbnROYW1lJylcclxuICAgICAgaWYoZXZlbnROYW1lKXtcclxuICAgICAgICBtYXRvbW9FdmVudChldmVudE5hbWUpXHJcbiAgICAgIH1cclxuICAgICAgLy8gYWxlcnQodXJsKVxyXG4gICAgICAvLyBjb25zdCB1cmwgPSAnYWxpcGF5aGs6Ly9wbGF0Zm9ybWFwaS9zdGFydEFwcD9hcHBJZD0yMTYwMDIwMDU5NzQ3Njg4JnBhZ2U9cGFnZXMvbG9naW4vbG9naW4/JnF1ZXJ5PW1hcmtldF9pZCUzRE0wMTItSEVSQ1onXHJcbiAgICAgIGlmKHVybCl7XHJcbiAgICAgICAgcHVzaChkZWNvZGVVUklDb21wb25lbnQodXJsKSlcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGNoYW5nZUNyZWF0ZVRpbWUobGlzdCwgdGltZUl0ZW0pe1xyXG4gICAgICBmb3IgKGNvbnN0IFtpbmRleCwgaXRlbV0gb2YgT2JqZWN0LmVudHJpZXMobGlzdCkpe1xyXG4gICAgICAgIGlmKHRpbWVJdGVtID09ICd1cGRhdGVkX2F0Jyl7XHJcbiAgICAgICAgICBpZihpdGVtLnVwZGF0ZWRfYXQpe1xyXG4gICAgICAgICAgICBsZXQgdXBkYXRlZF9hdCA9IGl0ZW0udXBkYXRlZF9hdFxyXG4gICAgICAgICAgICB1cGRhdGVkX2F0ID0gdXBkYXRlZF9hdC5yZXBsYWNlKC9bLixcXC8jISQlXFxeJlxcKjs6e309XFwtX2B+KClUXS9nLFwiXCIpXHJcbiAgICAgICAgICAgIGl0ZW0udGltZSA9IHBhcnNlSW50KHVwZGF0ZWRfYXQpXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpdGVtLnRpbWUgPSAwXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmKGl0ZW0uY3JlYXRlZF9hdCl7XHJcbiAgICAgICAgICAgIGxldCBjcmVhdGVkX2F0ID0gaXRlbS5jcmVhdGVkX2F0XHJcbiAgICAgICAgICAgIGNyZWF0ZWRfYXQgPSBjcmVhdGVkX2F0LnJlcGxhY2UoL1suLFxcLyMhJCVcXF4mXFwqOzp7fT1cXC1fYH4oKVRdL2csXCJcIilcclxuICAgICAgICAgICAgaXRlbS50aW1lID0gcGFyc2VJbnQoY3JlYXRlZF9hdClcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGl0ZW0udGltZSA9IDBcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGxpc3Q7XHJcbiAgICB9LFxyXG4gICAgc2V0VGl0bGUoKXtcclxuICAgICAgY29uc3QgX3RoaXMgPSB0aGlzXHJcbiAgICAgIHNldFRpdGxlKHRoaXMubWVzc2FnZXMucGFnZXRpdGxlLmluZGV4KVxyXG4gICAgICBpZih0eXBlb2YgQWxpcGF5SlNCcmlkZ2UgIT0gXCJ1bmRlZmluZWRcIil7XHJcbiAgICAgICAgQWxpcGF5SlNCcmlkZ2UuY2FsbCgnc2hvd09wdGlvbk1lbnUnKVxyXG4gICAgICAgIEFsaXBheUpTQnJpZGdlLmNhbGwoJ3NldE9wdGlvbk1lbnUnLCB7XHJcbiAgICAgICAgICB0aXRsZSA6IHRoaXMubWVzc2FnZXMuc2hhcmUsXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdvcHRpb25NZW51JywgZnVuY3Rpb24oZSkge1xyXG4gICAgICAgIF90aGlzLnNoYXJlKCk7XHJcbiAgICAgIH0sIGZhbHNlKTtcclxuICAgIH0sXHJcbiAgICBvblJlc2l6ZSgpe1xyXG4gICAgICBjb25zdCBvcmlnaW5hbEhlaWdodCA9IHRoaXMub3JpZ2luYWxIZWlnaHQgLy8xMTAwXHJcbiAgICAgIGNvbnN0IGN1cnJlbnRIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLy8xMTA5XHJcbiAgICAgIGNvbnN0IGhlaWdodE1heCA9IG9yaWdpbmFsSGVpZ2h0ICsgMTAgLy8xMTEwXHJcbiAgICAgIGNvbnN0IGhlaWdodE1pbiA9IG9yaWdpbmFsSGVpZ2h0IC0gMTAgLy8xMDkwXHJcbiAgICAgIGlmKG9yaWdpbmFsSGVpZ2h0ICE9ICcnKXtcclxuICAgICAgICAvLzExMDkgPD0gMTExMCAmJiAxMTA5ID49MTA5MFxyXG4gICAgICAgIGlmKGN1cnJlbnRIZWlnaHQgPD0gaGVpZ2h0TWF4ICYmIGN1cnJlbnRIZWlnaHQgPj0gaGVpZ2h0TWluKXtcclxuICAgICAgICAgIHRoaXMuYm90dG9tQmFyVmlzaWJsZSA9IHRydWVcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5ib3R0b21CYXJWaXNpYmxlID0gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBudW1iZXJXaXRoQ29tbWFzKHZhbCl7XHJcbiAgICAgIHJldHVybiB2YWwudG9TdHJpbmcoKS5yZXBsYWNlKC9cXEIoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCBcIixcIik7XHJcbiAgICB9LFxyXG4gICAgc2hhcmUoKXtcclxuICAgICAgXHJcbiAgICAgIGNvbnN0IGdldFNoYXJlVXJsID0gKHBhZ2VsaW5rKSA9PiB7XHJcbiAgICAgICAgLy8gdmFyIGFsaXBheVNjaGVtZSA9IFwiaHR0cHM6Ly9yZW5kZXIuYWxpcGF5LmhrL3Avcy9oa3dhbGxldC9sYW5kaW5nP3NjaGVtZT1cIlxyXG4gICAgICAgIC8vIHZhciBzdGFydEFwcFVybCA9IFwiYWxpcGF5aGs6Ly9wbGF0Zm9ybWFwaS9zdGFydGFwcD9hcHBJZD0yMDAwMDA2NyZ1cmw9XCJcclxuICAgICAgICAvLyB2YXIgcGFnZWxpbmsgPSBlbmNvZGVVUklDb21wb25lbnQodGhpcy5tZXNzYWdlcy5zaGFyZV91cmwpXHJcbiAgICAgICAgLy8gcmV0dXJuIGFsaXBheVNjaGVtZSArIGVuY29kZVVSSUNvbXBvbmVudChzdGFydEFwcFVybCArIHBhZ2VsaW5rKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlcy5zaGFyZV91cmxcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3Qgc2hhcmVVcmwgPSBnZXRTaGFyZVVybCgpXHJcbiAgICAgIGNvbnNvbGUubG9nKHNoYXJlVXJsKTtcclxuICAgICAgLy8gY29uc3Qgc2hhcmVUeXBlID0gaXNBbGlwYXlISygpICYmIGNvbXBhcmVWZXJzaW9uKCcyLjguMCcpID49IDAgPyAnc3lzdGVtU2hhcmUnIDogJ3AycHNoYXJlJ1xyXG4gICAgICBjb25zdCBzaGFyZVR5cGUgPSAnc3lzdGVtU2hhcmUnXHJcbiAgICAgIGNvbnN0IGN1c3RvbVBvcHVwUGFyYW1zID0ge1xyXG4gICAgICAgIHRpdGxlOiB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAnIzFCODJEMicsXHJcbiAgICAgICAgICBjb250ZW50OiB0aGlzLm1lc3NhZ2VzLnBhZ2V0aXRsZS5pbmRleCxcclxuICAgICAgICAgIHRleHRDb2xvcjogJyNmZmZmZmYnLCAvLyDlrqLmiLfnq6/kuI3mlK/mjIHnvKnlhplcclxuICAgICAgICAgIHRleHRTaXplOiAnMTInLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc291cmNlOiAnZXN0YW1wJyxcclxuICAgICAgICBhcHBzOiBbJ3doYXRzYXBwJywgJ21lc3NlbmdlcicsICdmYWNlYm9vaycsICdtb3JlJ10sXHJcbiAgICAgIH1cclxuICAgICAgQWxpcGF5SlNCcmlkZ2UuY2FsbCgnU29jaWFsU2hhcmUnLCB7XHJcbiAgICAgICAgc2hhcmVDb250ZW50OiB0aGlzLm1lc3NhZ2VzLnBhZ2V0aXRsZS5pbmRleCxcclxuICAgICAgICBleHRlbmQ6IEpTT04uc3RyaW5naWZ5KGN1c3RvbVBvcHVwUGFyYW1zKSxcclxuICAgICAgICBzaGFyZVVybCxcclxuICAgICAgICBzaGFyZVR5cGUsXHJcbiAgICAgIH0pXHJcbiAgICAgIHNwbUNsaWNrKCdzaGFyZScpXHJcbiAgICB9LFxyXG4gICAgY2xlYXJTZWFyY2hJbnB1dCgpe1xyXG4gICAgICB0aGlzLnNlYXJjaC52YWx1ZSA9IFwiXCJcclxuICAgIH1cclxuICB9LFxyXG59KVxyXG5cclxuY29uc3QgZW5xdWlyeUZvcm1JdGVtID0gbmV3IFZ1ZSh7XHJcbiAgZWw6ICcjZW5xdWlyeUZvcm0nLFxyXG4gIGRhdGE6IHtcclxuICAgIHByb2Nlc3Npbmc6IGZhbHNlLFxyXG4gICAgbWVzc2FnZXM6IG51bGwsXHJcbiAgICBsYWJlbDoge1xyXG4gICAgICBjb21wYW55X25hbWU6IGZhbHNlLFxyXG4gICAgICBmdWxsX25hbWU6IGZhbHNlLFxyXG4gICAgICBwaG9uZTogZmFsc2UsXHJcbiAgICAgIGVtYWlsOiBmYWxzZSxcclxuICAgICAgcHJvZHVjdF9jYXRlZ29yeTogZmFsc2VcclxuICAgIH0sXHJcbiAgICBhcGlMaXN0OiBlbnYuYXBpTGlzdCB8fCAnJyxcclxuICAgIG9yaWdpbmFsSGVpZ2h0OiAnJyxcclxuICAgIGJvdHRvbUJhclZpc2libGU6IHRydWVcclxuICB9LFxyXG4gIGNyZWF0ZWQoKSB7XHJcbiAgICBpZih3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKCcvZW5xdWlyeS1mb3JtLmh0bWwnKSA9PSAtMSl7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgYXhpb3NcclxuICAgICAgLmdldCgnanNvbi9tZXNzYWdlcy5qc29uJylcclxuICAgICAgLy8gLnRoZW4ocmVzcG9uc2UgPT4gKHRoaXMubWVzc2FnZXMgPSByZXNwb25zZS5kYXRhKSlcclxuICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZXMgPSByZXNwb25zZS5kYXRhXHJcbiAgICAgICAgdGhpcy5zZXRUaXRsZSgpXHJcbiAgICAgICAgdGhpcy5lbnF1aXJ5Rm9ybSA9IHJlc3BvbnNlLmRhdGEuZW5xdWlyeUZvcm1cclxuICAgICAgICB0aGlzLm9yaWdpbmFsSGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlcnJvcilcclxuICAgICAgfSk7XHJcbiAgfSxcclxuICBtb3VudGVkKCkge1xyXG4gICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xyXG4gICAgICB0aGlzLm9uUmVzaXplKCk7XHJcbiAgICB9KVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMub25SZXNpemUpXHJcbiAgfSxcclxuICB1cGRhdGVkKCkge1xyXG4gIH0sXHJcbiAgbWV0aG9kczp7XHJcbiAgICBjaGFuZ2VUYWI6IGZ1bmN0aW9uIChjdXJyZW50VGFiKSB7XHJcbiAgICAgIGlmKGN1cnJlbnRUYWIgIT0gdGhpcy5hY3RpdmVUYWIpe1xyXG4gICAgICAgIHRoaXMuYWN0aXZlVGFiID0gY3VycmVudFRhYlxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgc3VibWl0Rm9ybTogZnVuY3Rpb24oZSkge1xyXG4gICAgICBpZiAodGhpcy5wcm9jZXNzaW5nID09PSB0cnVlKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH0gXHJcbiAgICAgIHRoaXMucHJvY2Vzc2luZyA9IHRydWVcclxuICAgICAgdGhpcy52YWxpZEZvcm1EYXRhKHRoaXMuZW5xdWlyeUZvcm0uZGF0YSlcclxuICAgIH0sXHJcbiAgICB2YWxpZEZvcm1EYXRhOiBmdW5jdGlvbihkYXRhKXtcclxuICAgICAgLy8gY29uc29sZS5sb2coZGF0YSlcclxuICAgICAgY29uc3QgY29tcGFueV9uYW1lID0gZGF0YS5jb21wYW55X25hbWVcclxuICAgICAgY29uc3QgZnVsbF9uYW1lID0gZGF0YS5mdWxsX25hbWVcclxuICAgICAgY29uc3QgcGhvbmUgPSBkYXRhLnBob25lXHJcbiAgICAgIGNvbnN0IGVtYWlsID0gZGF0YS5lbWFpbFxyXG4gICAgICBjb25zdCBwcm9kdWN0X2NhdGVnb3J5ID0gZGF0YS5wcm9kdWN0X2NhdGVnb3J5XHJcbiAgICAgIGNvbnN0IGh0dHBfb3JfYXBwX25hbWUgPSBkYXRhLmh0dHBfb3JfYXBwX25hbWVcclxuICAgICAgXHJcbiAgICAgIGlmKGNvbXBhbnlfbmFtZSAmJiBmdWxsX25hbWUgJiYgdGhpcy52YWxpZGF0ZVBob25lKHBob25lKSAmJiB0aGlzLnZhbGlkYXRlRW1haWwoZW1haWwpICYmIHByb2R1Y3RfY2F0ZWdvcnkpe1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmxhYmVsKSB7XHJcbiAgICAgICAgICB0aGlzLmxhYmVsW2tleV0gPSBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0eXBlb2YgQWxpcGF5SlNCcmlkZ2UgIT0gXCJ1bmRlZmluZWRcIil7XHJcbiAgICAgICAgICBBbGlwYXlKU0JyaWRnZS5jYWxsKCdzaG93TG9hZGluZycsIHtcclxuICAgICAgICAgICAgdGV4dDogdGhpcy5tZXNzYWdlcy5lbnF1aXJ5Rm9ybS5wb3B1cC5sb2FkaW5nXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdldEF1dGhvcml6YXRpb24oZGF0YSlcclxuICAgICAgICAvLyBhbGVydE1zZyh0aGlzLmVucXVpcnlGb3JtLnBvcHVwLnRoYW5reW91LCB0aGlzLmVucXVpcnlGb3JtLnBvcHVwLmNvbmZpcm0pXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMubGFiZWwpIHtcclxuICAgICAgICAgIHRoaXMubGFiZWxba2V5XSA9IGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjb21wYW55X25hbWUpe1xyXG4gICAgICAgICAgdGhpcy5sYWJlbC5jb21wYW55X25hbWUgPSB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFmdWxsX25hbWUpe1xyXG4gICAgICAgICAgdGhpcy5sYWJlbC5mdWxsX25hbWUgPSB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCF0aGlzLnZhbGlkYXRlUGhvbmUocGhvbmUpKXtcclxuICAgICAgICAgIHRoaXMubGFiZWwucGhvbmUgPSB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCF0aGlzLnZhbGlkYXRlRW1haWwoZW1haWwpKXtcclxuICAgICAgICAgIHRoaXMubGFiZWwuZW1haWwgPSB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFwcm9kdWN0X2NhdGVnb3J5KXtcclxuICAgICAgICAgIHRoaXMubGFiZWwucHJvZHVjdF9jYXRlZ29yeSA9IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzaW5nID0gZmFsc2VcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIHZhbGlkYXRlUGhvbmU6IGZ1bmN0aW9uKHBob25lKXtcclxuICAgICAgdmFyIHJlID0gL15bMC05XXs4fSQvXHJcbiAgICAgIHJldHVybiByZS50ZXN0KHBob25lKVxyXG4gICAgfSxcclxuICAgIHZhbGlkYXRlRW1haWw6IGZ1bmN0aW9uKGVtYWlsKSB7XHJcbiAgICAgIHZhciByZSA9IC9eKChbXjw+KClcXFtcXF1cXFxcLiw7Olxcc0BcIl0rKFxcLltePD4oKVxcW1xcXVxcXFwuLDs6XFxzQFwiXSspKil8KFwiLitcIikpQCgoXFxbWzAtOV17MSwzfVxcLlswLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcXSl8KChbYS16QS1aXFwtMC05XStcXC4pK1thLXpBLVpdezIsfSkpJC9cclxuICAgICAgcmV0dXJuIHJlLnRlc3QoKGVtYWlsKS50b0xvd2VyQ2FzZSgpKVxyXG4gICAgfSxcclxuICAgIGdldEF1dGhvcml6YXRpb246IGZ1bmN0aW9uKGRhdGEpe1xyXG4gICAgICBjb25zdCBoZWFkZXJzID0ge1xyXG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICAgJ0FQSS1LZXknOiAnckk0amlKSjF6MzNRUlJMYTVoVGFMeTJOZGl5c2IwTEVQNnYySVBLdCdcclxuICAgICAgfVxyXG4gICAgICBheGlvcy5wb3N0KHRoaXMuYXBpTGlzdC5hdXRob3JpemF0aW9uLCBkYXRhLCB7aGVhZGVyc30pXHJcbiAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gKHRoaXMuZW5xdWlyeUZvcm1TdWJtaXQoZGF0YSwgcmVzcG9uc2UuZGF0YS50b2tlbikpKVxyXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XHJcbiAgICAgICAgICBpZih0eXBlb2YgQWxpcGF5SlNCcmlkZ2UgIT0gXCJ1bmRlZmluZWRcIil7XHJcbiAgICAgICAgICAgIEFsaXBheUpTQnJpZGdlLmNhbGwoJ2hpZGVMb2FkaW5nJylcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKVxyXG4gICAgICAgICAgdGhpcy5wcm9jZXNzaW5nID0gZmFsc2VcclxuICAgICAgICAgIGFsZXJ0TXNnKHRoaXMubWVzc2FnZXMuZXJyb3IuZGVmYXVsdClcclxuICAgICAgICB9KVxyXG4gICAgfSxcclxuICAgIGVucXVpcnlGb3JtU3VibWl0OiBmdW5jdGlvbihkYXRhLCB0b2tlbil7XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCBoZWFkZXJzID0ge1xyXG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICAgJ2F1dGhvcml6YXRpb24nOiB0b2tlblxyXG4gICAgICB9XHJcbiAgICAgIGF4aW9zLnBvc3QodGhpcy5hcGlMaXN0LmVucXVpcnlGb3JtLCBkYXRhLCB7aGVhZGVyc30pXHJcbiAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4geyBcclxuICAgICAgICAgIGlmKHR5cGVvZiBBbGlwYXlKU0JyaWRnZSAhPSBcInVuZGVmaW5lZFwiKXtcclxuICAgICAgICAgICAgQWxpcGF5SlNCcmlkZ2UuY2FsbCgnaGlkZUxvYWRpbmcnKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYWxlcnRNc2codGhpcy5lbnF1aXJ5Rm9ybS5wb3B1cC50aGFua3lvdSwgdGhpcy5lbnF1aXJ5Rm9ybS5wb3B1cC5jb25maXJtKSBcclxuICAgICAgICAgIHRoaXMuZW5xdWlyeUZvcm0uZGF0YS5jb21wYW55X25hbWUgPSBcIlwiXHJcbiAgICAgICAgICB0aGlzLmVucXVpcnlGb3JtLmRhdGEuZnVsbF9uYW1lID0gXCJcIlxyXG4gICAgICAgICAgdGhpcy5lbnF1aXJ5Rm9ybS5kYXRhLnBob25lID0gXCJcIlxyXG4gICAgICAgICAgdGhpcy5lbnF1aXJ5Rm9ybS5kYXRhLmVtYWlsID0gXCJcIlxyXG4gICAgICAgICAgdGhpcy5lbnF1aXJ5Rm9ybS5kYXRhLnByb2R1Y3RfY2F0ZWdvcnkgPSBcIlwiXHJcbiAgICAgICAgICB0aGlzLmVucXVpcnlGb3JtLmRhdGEuaHR0cF9vcl9hcHBfbmFtZSA9IFwiXCJcclxuICAgICAgICAgIHRoaXMucHJvY2Vzc2luZyA9IGZhbHNlXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xyXG4gICAgICAgICAgaWYodHlwZW9mIEFsaXBheUpTQnJpZGdlICE9IFwidW5kZWZpbmVkXCIpe1xyXG4gICAgICAgICAgICBBbGlwYXlKU0JyaWRnZS5jYWxsKCdoaWRlTG9hZGluZycpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnByb2Nlc3NpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgY29uc3QgZXJyb3JEYXRhID0gZXJyb3IucmVzcG9uc2UuZGF0YVxyXG4gICAgICAgICAgY29uc3QgcmVzcG9uc2VKU09OID0gZXJyb3JEYXRhLmVycm9yc1xyXG4gICAgICAgICAgaWYoZXJyb3IucmVzcG9uc2Uuc3RhdHVzID09PSA0MjIpe1xyXG4gICAgICAgICAgICBpZihlcnJvckRhdGEuc3RhdHVzX2NvZGUgPT09IDQyMil7XHJcbiAgICAgICAgICAgICAgbGV0IGVycm9ybXNnID0gJydcclxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGVycm9yIGluIHJlc3BvbnNlSlNPTikge1xyXG4gICAgICAgICAgICAgICAgZXJyb3Jtc2cgPSBlcnJvcm1zZyArIHJlc3BvbnNlSlNPTltlcnJvcl1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgYWxlcnRNc2coZXJyb3Jtc2csIHRoaXMuZW5xdWlyeUZvcm0ucG9wdXAuY29uZmlybSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuICAgIHNldFRpdGxlKCl7XHJcbiAgICAgIHNldFRpdGxlKHRoaXMubWVzc2FnZXMucGFnZXRpdGxlLmVucXVpcnkpXHJcbiAgICB9LFxyXG4gICAgb25SZXNpemUoKXtcclxuICAgICAgY29uc3Qgb3JpZ2luYWxIZWlnaHQgPSB0aGlzLm9yaWdpbmFsSGVpZ2h0IC8vMTEwMFxyXG4gICAgICBjb25zdCBjdXJyZW50SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IC8vMTEwOVxyXG4gICAgICBjb25zdCBoZWlnaHRNYXggPSBvcmlnaW5hbEhlaWdodCArIDEwIC8vMTExMFxyXG4gICAgICBjb25zdCBoZWlnaHRNaW4gPSBvcmlnaW5hbEhlaWdodCAtIDEwIC8vMTA5MFxyXG4gICAgICBpZihvcmlnaW5hbEhlaWdodCAhPSAnJyl7XHJcbiAgICAgICAgLy8xMTA5IDw9IDExMTAgJiYgMTEwOSA+PTEwOTBcclxuICAgICAgICBpZihjdXJyZW50SGVpZ2h0IDw9IGhlaWdodE1heCAmJiBjdXJyZW50SGVpZ2h0ID49IGhlaWdodE1pbil7XHJcbiAgICAgICAgICB0aGlzLmJvdHRvbUJhclZpc2libGUgPSB0cnVlXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYm90dG9tQmFyVmlzaWJsZSA9IGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59KVxyXG5cclxuXHJcblxyXG5jb25zdCB0bmNJdGVtID0gbmV3IFZ1ZSh7XHJcbiAgZWw6ICcjdG5jJyxcclxuICBkYXRhOiB7XHJcbiAgICBtZXNzYWdlczogbnVsbCxcclxuICAgIHRuYzogbnVsbCxcclxuICAgIGFwaUxpc3Q6IGVudi5hcGlMaXN0IHx8ICcnXHJcbiAgfSxcclxuICBjcmVhdGVkKCkge1xyXG4gICAgaWYod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZignL3RuYy5odG1sJykgPT0gLTEpe1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGF4aW9zXHJcbiAgICAgIC5nZXQoJ2pzb24vbWVzc2FnZXMuanNvbicpXHJcbiAgICAgIC8vIC50aGVuKHJlc3BvbnNlID0+ICh0aGlzLm1lc3NhZ2VzID0gcmVzcG9uc2UuZGF0YSkpXHJcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VzID0gcmVzcG9uc2UuZGF0YVxyXG4gICAgICAgIHRoaXMuc2V0VGl0bGUoKVxyXG4gICAgICAgIHRoaXMudG5jID0gcmVzcG9uc2UuZGF0YS50bmNcclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycm9yKVxyXG4gICAgICB9KTtcclxuICB9LFxyXG4gIG1vdW50ZWQoKSB7XHJcbiAgfSxcclxuICB1cGRhdGVkKCkge1xyXG4gIH0sXHJcbiAgbWV0aG9kczp7XHJcbiAgICBzZXRUaXRsZSgpe1xyXG4gICAgICBzZXRUaXRsZSh0aGlzLm1lc3NhZ2VzLnBhZ2V0aXRsZS50bmMpXHJcbiAgICB9XHJcbiAgfVxyXG59KVxyXG5cclxuIiwiLy8gY29uc3QgY3VycmVudEVOViAgPSAnc2FuZGJveCc7XHJcbmNvbnN0IGN1cnJlbnRFTlYgID0gJ3Byb2QnO1xyXG5cclxuLy8gY29uc3QgY3VycmVudE1vZGUgID0gJ2RlYnVnJztcclxuY29uc3QgY3VycmVudE1vZGUgID0gJ3N0YXRpYyc7XHJcblxyXG5jb25zdCB2ZXJzaW9uID0gJzEuMC41JztcclxuXHJcbmNvbnN0IHByb2RQYWdlRG9tYWluID0gJ2h0dHBzOi8vZXNob3AuY29kcGF5bWVudC5jb20vJztcclxuY29uc3Qgc2FuZGJveFBhZ2VEb21haW4gPSAnaHR0cHM6Ly9lc2hvcC5zYW5kYm94LWNvZHBheW1lbnQuY29tLyc7XHJcblxyXG5jb25zdCBwcm9kUGF0aCA9ICdodHRwczovL2VzaG9wLmNvZHBheW1lbnQuY29tL3N0YXRpYy8nO1xyXG5jb25zdCBzYW5kYm94UGF0aCA9ICdodHRwczovL2VzaG9wLnNhbmRib3gtY29kcGF5bWVudC5jb20vc3RhdGljLyc7XHJcbi8vIGNvbnN0IHNhbmRib3hQYXRoID0gJyc7IC8vbG9jYWxcclxuXHJcbi8vc2hvcGlkID0gYXBwaWRcclxuLy8gbGV0IHNob3BfaWQgPSAnRUFQUDAwMTQ3ODUyMzY5OCcgLy9wcm9kXHJcbi8vIGlmKGN1cnJlbnRFTlYgPT0gJ3NhbmRib3gnKXtcclxuLy8gICBzaG9wX2lkID0gJzRHMDAwMDAxODAwMDAwMDMnIC8vc2FuZGJveFxyXG4vLyB9XHJcblxyXG5cclxuY29uc3QgcHJvZEpTT05QYXRoID0gYGh0dHBzOi8vZXNob3AuY29kcGF5bWVudC5jb20vJHtjdXJyZW50TW9kZX0vZHluL3YxL2FwcC1zZXJ2aWNlL2VzdGFtcC9qc29uL3Byb21vdGlvbnNgO1xyXG5jb25zdCBzYW5kSlNPTmJveFBhdGggPSBgaHR0cHM6Ly9lc2hvcC5zYW5kYm94LWNvZHBheW1lbnQuY29tLyR7Y3VycmVudE1vZGV9L2R5bi92MS9hcHAtc2VydmljZS9lc3RhbXAvanNvbi9wcm9tb3Rpb25zYDtcclxuLy8gY29uc3Qgc2FuZEpTT05ib3hQYXRoID0gJ3NhbXBsZS8nOyAvL2xvY2FsXHJcblxyXG5cclxuY29uc3QgcHJvZENvZFBheW1lbnRQYXRoID0gJ2h0dHBzOi8vd3d3LmNvZHBheW1lbnQuY29tJztcclxuY29uc3Qgc2FuZGJveENvZFBheW1lbnRib3hQYXRoID0gJ2h0dHBzOi8vY29kcGF5bWVudC53ZWJzc3VwLmNvbSc7XHJcblxyXG5sZXQgZG9tYWluUGF0aCA9IHByb2RQYXRoO1xyXG5sZXQgZW5xdWlyeUZvcm1Eb21haW5QYXRoID0gcHJvZENvZFBheW1lbnRQYXRoO1xyXG5sZXQganNvblBhdGggPSBwcm9kSlNPTlBhdGg7XHJcbmxldCBwYWdlRG9tYWluID0gcHJvZFBhZ2VEb21haW47XHJcbmlmKGN1cnJlbnRFTlYgPT0gJ3NhbmRib3gnKXtcclxuICBkb21haW5QYXRoID0gc2FuZGJveFBhdGg7XHJcbiAgZW5xdWlyeUZvcm1Eb21haW5QYXRoID0gc2FuZGJveENvZFBheW1lbnRib3hQYXRoO1xyXG4gIGpzb25QYXRoID0gc2FuZEpTT05ib3hQYXRoO1xyXG4gIHBhZ2VEb21haW4gPSBzYW5kYm94UGFnZURvbWFpbjtcclxufVxyXG5cclxuY29uc3QgYXBpTGlzdCA9IHtcclxuICBhdXRob3JpemF0aW9uOiBgJHtlbnF1aXJ5Rm9ybURvbWFpblBhdGh9L2FwaS9hdXRob3JpemF0aW9uYCxcclxuICBlbnF1aXJ5Rm9ybTogYCR7ZW5xdWlyeUZvcm1Eb21haW5QYXRofS9hcGkvbWVyY2hhbnRzYCxcclxuICBob3RQcm9kdWN0TGlzdDE6IGAke2pzb25QYXRofS9wcm9tb3Rpb25fMV9ob3RfbGlzdF8xLmpzb25gLFxyXG4gIHByb21vTGlzdDogYCR7anNvblBhdGh9L3Byb21vdGlvbl8xX3Byb21vX2xpc3QuanNvbmAsXHJcbiAgaG90UHJvZHVjdExpc3QyOiBgJHtqc29uUGF0aH0vcHJvbW90aW9uXzFfaG90X2xpc3RfMi5qc29uYCxcclxuICBob3RNZXJjaGFudExpc3Q6IGAke2pzb25QYXRofS9wcm9tb3Rpb25fMV9iZXN0X3Nob3BfbGlzdC5qc29uYCxcclxuICBtZXJjaGFudExpc3Q6IGAke2pzb25QYXRofS9wcm9tb3Rpb25fMV9zaG9wX2NhdGVnb3J5X2xpc3QuanNvbmAsXHJcbn1cclxuXHJcbmNvbnNvbGUubG9nKCdjdXJyZW50IGVudiBpcyAnK2N1cnJlbnRFTlYpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIGN1cnJlbnRFTlY6IGN1cnJlbnRFTlYsXHJcbiAgZG9tYWluUGF0aDogZG9tYWluUGF0aCxcclxuICBqc29uUGF0aDoganNvblBhdGgsXHJcbiAgYXBpTGlzdDogYXBpTGlzdCxcclxuICB2ZXJzaW9uOiB2ZXJzaW9uLFxyXG4gIGN1cnJlbnRNb2RlOiBjdXJyZW50TW9kZSxcclxuICBwYWdlRG9tYWluOiBwYWdlRG9tYWluXHJcbn1cclxuIl19