/******/ (function() { // webpackBootstrap
/******/ "use strict";
/******/ var __webpack_modules__ = ({
/***/ "./blog/blog-filter.js":
/*!*****************************!*\
!*** ./blog/blog-filter.js ***!
\*****************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": function() { return /* binding */ blogFilter; }
/* harmony export */ });
/* provided dependency */ var jQuery = __webpack_require__(/*! jquery */ "jquery");
function blogFilter() {
(function ($) {
// jQuery(document).on('init_filter', (e, module) => {
// DSInitFilter(module);
// });
var DSInitFilter = function DSInitFilter(module) {
var filter = {
module: null,
action: null,
form: '',
moreBtn: $(),
results: null,
doing_ajax: null,
timeout: null,
query: {
post_type: null,
per_page: 9,
page: 1
},
component_styles: {},
ajax_url: ds.ajax_url,
preloader: '
',
init: function init(module) {
var ajaxModule = $(module);
if (ajaxModule) {
filter.module = ajaxModule;
filter.action = ajaxModule.data('action');
filter.query.post_type = ajaxModule.data('post-type');
filter.query.posts_per_page = ajaxModule.data('per-page');
filter.initElementsActions();
}
},
initElementsActions: function initElementsActions() {
var results = filter.module.find('div[data-container="ajax-result"]');
if (results) {
filter.results = results;
var moreBtn = filter.module.find('.ajax-load-more');
if (moreBtn) {
filter.moreBtn = moreBtn;
filter.morePosts();
}
var form = filter.module.find('form[data-form="ajax"]');
if (form) {
filter.form = form;
filter.changeForm();
}
}
var compClass = filter.module.data('class');
if (compClass) {
filter.component_styles.class = compClass;
}
var compStyles = filter.module.data('styles');
if (compStyles) {
filter.component_styles.styles = compStyles;
}
var compImage = filter.module.data('image');
if (compImage) {
filter.component_styles.image = compImage;
}
},
morePosts: function morePosts() {
filter.moreBtn.on('click', function (e) {
e.preventDefault();
filter.sendAjax(filter.query.page);
});
},
changeForm: function changeForm() {
var $input_text = filter.form.find('input[type="text"], textarea');
$input_text.unbind('keyup');
$input_text.not('[data-ajax="false"]').keyup(function () {
if (filter.timeout != null) {
clearTimeout(filter.timeout);
}
filter.timeout = setTimeout(function () {
filter.timeout = null;
filter.sendAjax();
$input_submit.parent().addClass('is-filter-active');
}, 500);
});
var $input_submit = filter.form.find('button[type="submit"]');
$input_submit.unbind('click');
$input_submit.not('[data-ajax="false"]').click(function (e) {
e.preventDefault();
filter.sendAjax();
$input_submit.parent().addClass('is-filter-active');
});
var $select = filter.form.find('select');
$select.unbind('change');
$select.not('[data-ajax="false"]').change(function () {
filter.sendAjax();
});
filter.form.unbind('keydown');
filter.form.on('keydown', function (event) {
if (event.keyCode == 13) {
event.preventDefault();
filter.sendAjax();
}
});
},
sendAjax: function sendAjax() {
var page = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
if (filter.doing_ajax != null) {
filter.doing_ajax.abort();
filter.doing_ajax = null;
filter.module.find('.loader').remove();
}
var data = {
action: filter.action,
query: {
post_type: filter.query.post_type,
posts_per_page: filter.query.posts_per_page,
paged: page
},
component: filter.component_styles,
device: $(window).width() <= 768 ? 'mobile' : 'desktop'
};
if (filter.form.length > 0) {
data.form = filter.form.serialize();
}
filter.doing_ajax = $.ajax({
url: filter.ajax_url,
type: 'POST',
data: data,
beforeSend: function beforeSend(xhr) {
filter.module.append(filter.preloader);
},
success: function success(data) {
if (data) {
if (data.page === 1) filter.results.html('');
filter.results.append(data.posts);
if (data.max_pages === data.page) {
filter.moreBtn.hide();
} else {
filter.moreBtn.show();
}
if (data.total_posts_showing == 0) {
filter.module.find('.js-blog-counter-wrapper').hide();
} else {
filter.module.find('.js-blog-counter-wrapper').show();
}
if (data.total_posts_showing) {
filter.module.find('.js-blog-counter-showing').text(data.total_posts_showing);
}
if (data.total_posts) {
filter.module.find('.js-blog-counter-total').text(data.total_posts);
}
filter.query.page = data.page;
filter.module.find('.loader').remove();
} else {
filter.moreBtn.hide();
}
filter.doing_ajax = null;
}
});
}
};
filter.init(module);
};
var doInit = function doInit() {
$('.js-ajax-block').each(function (i) {
// console.log(i);
// console.log($('.js-ajax-block')[i]);
// console.log($(this));
DSInitFilter($('.js-ajax-block')[i]);
});
};
doInit();
/* jQuery(document).trigger('init_filter', 'ajax-posts');
jQuery(document).trigger('init_filter', 'ajax-content-1'); */
})(jQuery);
}
/***/ }),
/***/ "./blog/data-layers.js":
/*!*****************************!*\
!*** ./blog/data-layers.js ***!
\*****************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ dataLayers: function() { return /* binding */ dataLayers; }
/* harmony export */ });
function dataLayers() {
// sidebar CTA link
var sideCta = document.querySelector('.m-rel-float .box-cta__wrap');
if (sideCta) {
// send the data layer
var sendDataLayer = function sendDataLayer() {
// Your code to push the data layer goes here
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'event': 'sidebarctaclick'
});
};
// get the click
sideCta.addEventListener('click', function (event) {
// stop default reload
event.preventDefault();
// push data layer
sendDataLayer();
// get back on track with the link
setTimeout(function () {
window.location.href = sideCta.href;
}, 100); // Delay , give the data layer more chance to get trough
});
}
}
/***/ }),
/***/ "./blog/dt-subscribe.js":
/*!******************************!*\
!*** ./blog/dt-subscribe.js ***!
\******************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ subscribeSlideIn: function() { return /* binding */ subscribeSlideIn; }
/* harmony export */ });
/* provided dependency */ var $ = __webpack_require__(/*! jquery */ "jquery");
function subscribeSlideIn() {
if ($('.dt-subscribe')) {
var hide = false;
if (localStorage.getItem('subsSlide')) hide = true; // if user already subscribe do not show it
$(window).on('scroll', function () {
if ($(window).scrollTop() >= 3000 && !hide) {
$('.dt-subscribe').addClass('active');
} else {
if (!hide) {
$('.dt-subscribe').removeClass('active');
}
}
});
$('.dt-subscribe-close').on('click', function () {
$('.dt-subscribe').removeClass('active');
hide = true;
});
}
}
/***/ }),
/***/ "./blog/toc-mobile.js":
/*!****************************!*\
!*** ./blog/toc-mobile.js ***!
\****************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ tocMobile: function() { return /* binding */ tocMobile; }
/* harmony export */ });
function tocMobile() {
// Function to handle TOC display for mobile
function handleMobileTOC() {
if (window.innerWidth < 1112) {
var toc_container = document.getElementById("ez-toc-container");
if (!toc_container) {
return;
} else {
toc_container.classList.add("toc_close");
}
document.querySelector('.ez-toc-list').style = 'display: none';
// Event delegation for dynamically generated .ez-toc-link elements
document.querySelector('.ez-toc-toggle').addEventListener('click', function (e) {
// Prevent TOC handling if the click occurred within the dark mode component
if (e.target.closest('.dark-mode')) return;
var tocToggle = document.querySelector('.ez-toc-toggle');
// Check if .ez-toc-link is clicked
if (e.target.matches('.ez-toc-link')) {
if (tocToggle) {
tocToggle.click(); // Open TOC
}
}
// Close TOC if clicked outside the TOC container
else if (!e.target.closest('#ez-toc-container')) {
var closeToggle = document.querySelector('.toc_close .ez-toc-toggle');
if (closeToggle) {
closeToggle.click();
}
}
});
} else {
// Reset the TOC display style when above the threshold
var tocList = document.querySelector('.ez-toc-list');
if (tocList) {
tocList.style = '';
}
}
}
// Initial call to set up TOC visibility on load
handleMobileTOC();
// Resize event listener to handle TOC visibility on screen resize
window.addEventListener('resize', handleMobileTOC);
}
/***/ }),
/***/ "./blog/toc-sticky.js":
/*!****************************!*\
!*** ./blog/toc-sticky.js ***!
\****************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": function() { return /* binding */ tocSticky; }
/* harmony export */ });
/* harmony import */ var _utils_u_el_in_viewport_detect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/u_el-in-viewport-detect */ "./utils/u_el-in-viewport-detect.js");
/* provided dependency */ var $ = __webpack_require__(/*! jquery */ "jquery");
// eslint-disable-next-line camelcase
function tocSticky() {
window.addEventListener('scroll', function () {
// u_elementFromTop(document.querySelectorAll('#ez-toc-container + *'), '.counter-hierarchy', 'is-float', -1000, 'pixels'); // as top of element hits top of viewport
(0,_utils_u_el_in_viewport_detect__WEBPACK_IMPORTED_MODULE_0__.u_elementFromTop)(document.querySelectorAll('#ez-toc-container + *'), '.m-rel-float', 'rev-m', -1000, 'pixels'); // as top of element hits top of viewport
}, false);
window.addEventListener('resize', function () {
// u_elementFromTop(document.querySelectorAll('#ez-toc-container + *'), '.counter-hierarchy', 'is-float', -1000, 'pixels'); // as top of element hits top of viewport
(0,_utils_u_el_in_viewport_detect__WEBPACK_IMPORTED_MODULE_0__.u_elementFromTop)(document.querySelectorAll('#ez-toc-container + *'), '.m-rel-float', 'rev-m', -1000, 'pixels'); // as top of element hits top of viewport
}, false);
function tocToggleClasses() {
var tocCollapser = document.querySelector('.ez-toc-toggle');
var tocContainer = document.querySelector('.ez-toc-title-toggle');
var target = document.querySelector('.ez-toc-list');
if (window.getComputedStyle(target).display === 'block') {
tocCollapser.classList.add('active');
}
tocCollapser.addEventListener('click', function (event) {
function mesure() {
if (window.getComputedStyle(target).display === 'none') {
tocCollapser.classList.remove('active');
tocContainer.classList.remove('is-shown');
tocContainer.classList.add('is-hide');
} else {
tocCollapser.classList.add('active');
tocContainer.classList.add('is-shown');
tocContainer.classList.remove('is-hide');
}
}
setTimeout(mesure, 300);
});
if ($('#ez-toc-container').hasClass('is-shown')) {
$('.ez-toc-toggle').addClass('active');
}
}
// tocToggleClasses();
}
/***/ }),
/***/ "./components/dark-mode.js":
/*!*********************************!*\
!*** ./components/dark-mode.js ***!
\*********************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": function() { return /* binding */ darkMode; }
/* harmony export */ });
/* provided dependency */ var $ = __webpack_require__(/*! jquery */ "jquery");
/* eslint-disable linebreak-style */
/* eslint-disable eqeqeq */
/* eslint-disable no-undef */
/**
* Dark Mode
*/
function darkMode() {
var mode = localStorage.getItem('dark-mode');
if (mode === 'on') {
$('.dark-mode').addClass('on');
$('body').addClass('dark-on');
$('.dark-mode').attr('aria-pressed', true);
}
$('.dark-mode').click(function functionName() {
if ($(this).hasClass('on')) {
$(this).removeClass('on');
$('body').removeClass('dark-on');
$(this).attr('aria-pressed', false);
localStorage.setItem('dark-mode', 'off');
} else {
$(this).addClass('on');
$('body').addClass('dark-on');
$(this).attr('aria-pressed', true);
localStorage.setItem('dark-mode', 'on');
}
});
}
/***/ }),
/***/ "./js-blog.js":
/*!********************!*\
!*** ./js-blog.js ***!
\********************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _components_dark_mode__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./components/dark-mode */ "./components/dark-mode.js");
/* harmony import */ var _blog_toc_sticky__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./blog/toc-sticky */ "./blog/toc-sticky.js");
/* harmony import */ var _blog_toc_mobile__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blog/toc-mobile */ "./blog/toc-mobile.js");
/* harmony import */ var _blog_blog_filter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./blog/blog-filter */ "./blog/blog-filter.js");
/* harmony import */ var _blog_dt_subscribe__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./blog/dt-subscribe */ "./blog/dt-subscribe.js");
/* harmony import */ var _blog_data_layers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./blog/data-layers */ "./blog/data-layers.js");
// Blog
// import { toggleDarkMode } from './blog/darkmode';
// import tableOfContents from './blog/toc-highlight';
// import {relatedResources} from "./blog/blog-resources";
document.addEventListener('DOMContentLoaded', function () {
(0,_components_dark_mode__WEBPACK_IMPORTED_MODULE_0__["default"])();
// toggleDarkMode('.js-dark-mode');
if (document.querySelector('.ez-toc-toggle')) {
(0,_blog_toc_sticky__WEBPACK_IMPORTED_MODULE_1__["default"])();
// tableOfContents();
}
(0,_blog_toc_mobile__WEBPACK_IMPORTED_MODULE_2__.tocMobile)();
if (document.querySelector('.single-post')) {
(0,_blog_data_layers__WEBPACK_IMPORTED_MODULE_5__.dataLayers)();
}
if (document.querySelector('.js-ajax-block')) {
(0,_blog_blog_filter__WEBPACK_IMPORTED_MODULE_3__["default"])();
}
if (document.querySelector('.poll_module')) {
/* Simple stupid but works lol */
setTimeout(function () {
var polls = document.querySelectorAll('.poll_module');
var buttons = document.querySelectorAll('.basic-vote-button');
polls.forEach(function (poll) {
var pollBtn = poll.querySelector('.basic-vote-button');
var pollMsg = poll.querySelector('.basic-message');
pollBtn.addEventListener('click', function (event) {
poll.classList.add('is-submitted');
});
if (pollMsg.classList.contains('basic-success')) {
poll.classList.add('is-submitted');
}
});
}, 100);
}
(0,_blog_dt_subscribe__WEBPACK_IMPORTED_MODULE_4__.subscribeSlideIn)();
// relatedResources();
});
/***/ }),
/***/ "./utils/u_classlist-add-remove.js":
/*!*****************************************!*\
!*** ./utils/u_classlist-add-remove.js ***!
\*****************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ u_addClass: function() { return /* binding */ u_addClass; },
/* harmony export */ u_delClass: function() { return /* binding */ u_delClass; },
/* harmony export */ u_hasClass: function() { return /* binding */ u_hasClass; }
/* harmony export */ });
var u_hasClass = function u_hasClass(el, cls) {
if (el.className.match('(?:^|\\s)' + cls + '(?!\\S)')) {
return true;
}
};
var u_addClass = function u_addClass(el, cls) {
if (!el.className.match('(?:^|\\s)' + cls + '(?!\\S)')) {
el.className += ' ' + cls;
}
};
var u_delClass = function u_delClass(el, cls) {
el.className = el.className.replace(new RegExp('(?:^|\\s)' + cls + '(?!\\S)'), '');
};
/***/ }),
/***/ "./utils/u_el-in-viewport-detect.js":
/*!******************************************!*\
!*** ./utils/u_el-in-viewport-detect.js ***!
\******************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ u_elementFromTop: function() { return /* binding */ u_elementFromTop; },
/* harmony export */ u_isElementIsInView: function() { return /* binding */ u_isElementIsInView; }
/* harmony export */ });
/* harmony import */ var _u_classlist_add_remove__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./u_classlist-add-remove */ "./utils/u_classlist-add-remove.js");
/**
* params: trigger element, target element class, classes to add to target element, trigger element distance from top, unit ('percent' or 'pixels')
* usage: elementFromTop(elemTrigger, elemTarget, classToAdd, distanceFromTop, unit);
*
* http://blog.fofwebdesign.co.uk/41-add-classes-to-an-element-when-scrolled-into-viewport
*/
var u_elementFromTop = function u_elementFromTop(elemTrigger, elemTarget, classToAdd, distanceFromTop, unit) {
var winY = window.innerHeight || document.documentElement.clientHeight,
elTriggerLength = elemTrigger.length,
elTargetLength,
distTop,
distPercent,
distPixels,
distUnit,
elTarget,
i,
j;
for (i = 0; i < elTriggerLength; ++i) {
elTarget = document.querySelectorAll(elemTarget);
elTargetLength = elTarget.length;
distTop = elemTrigger[i].getBoundingClientRect().top;
distPercent = Math.round(distTop / winY * 100);
distPixels = Math.round(distTop);
distUnit = unit == 'percent' ? distPercent : distPixels;
if (distUnit <= distanceFromTop) {
if (!(0,_u_classlist_add_remove__WEBPACK_IMPORTED_MODULE_0__.u_hasClass)(elemTrigger[i], elemTarget)) {
for (j = 0; j < elTargetLength; ++j) {
if (!(0,_u_classlist_add_remove__WEBPACK_IMPORTED_MODULE_0__.u_hasClass)(elTarget[j], classToAdd)) {
(0,_u_classlist_add_remove__WEBPACK_IMPORTED_MODULE_0__.u_addClass)(elTarget[j], classToAdd);
}
}
} else {
if (!(0,_u_classlist_add_remove__WEBPACK_IMPORTED_MODULE_0__.u_hasClass)(elemTrigger[i], classToAdd)) {
(0,_u_classlist_add_remove__WEBPACK_IMPORTED_MODULE_0__.u_addClass)(elemTrigger[i], classToAdd);
}
}
} else {
(0,_u_classlist_add_remove__WEBPACK_IMPORTED_MODULE_0__.u_delClass)(elemTrigger[i], classToAdd);
if (!(0,_u_classlist_add_remove__WEBPACK_IMPORTED_MODULE_0__.u_hasClass)(elemTrigger[i], elemTarget)) {
for (j = 0; j < elTargetLength; ++j) {
(0,_u_classlist_add_remove__WEBPACK_IMPORTED_MODULE_0__.u_delClass)(elTarget[j], classToAdd);
}
}
}
}
};
var u_isElementIsInView = function u_isElementIsInView(el) {
var scroll = window.scrollY || window.pageYOffset;
var boundsTop = el.getBoundingClientRect().top + scroll;
var viewport = {
top: scroll,
bottom: scroll + window.innerHeight
};
var bounds = {
top: boundsTop,
bottom: boundsTop + el.clientHeight
};
return bounds.bottom >= viewport.top && bounds.bottom <= viewport.bottom || bounds.top <= viewport.bottom && bounds.top >= viewport.top;
};
/***/ }),
/***/ "jquery":
/*!*************************!*\
!*** external "jQuery" ***!
\*************************/
/***/ (function(module) {
module.exports = jQuery;
/***/ })
/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ if (cachedModule.error !== undefined) throw cachedModule.error;
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ try {
/******/ var execOptions = { id: moduleId, module: module, factory: __webpack_modules__[moduleId], require: __webpack_require__ };
/******/ __webpack_require__.i.forEach(function(handler) { handler(execOptions); });
/******/ module = execOptions.module;
/******/ execOptions.factory.call(module.exports, module, module.exports, execOptions.require);
/******/ } catch(e) {
/******/ module.error = e;
/******/ throw e;
/******/ }
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = __webpack_modules__;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = __webpack_module_cache__;
/******/
/******/ // expose the module execution interceptor
/******/ __webpack_require__.i = [];
/******/
/************************************************************************/
/******/ /* webpack/runtime/define property getters */
/******/ !function() {
/******/ // define getter functions for harmony exports
/******/ __webpack_require__.d = function(exports, definition) {
/******/ for(var key in definition) {
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ }
/******/ }
/******/ };
/******/ }();
/******/
/******/ /* webpack/runtime/get javascript update chunk filename */
/******/ !function() {
/******/ // This function allow to reference all chunks
/******/ __webpack_require__.hu = function(chunkId) {
/******/ // return url for filenames based on template
/******/ return "" + chunkId + "." + __webpack_require__.h() + ".hot-update.js";
/******/ };
/******/ }();
/******/
/******/ /* webpack/runtime/get update manifest filename */
/******/ !function() {
/******/ __webpack_require__.hmrF = function() { return "app_blog." + __webpack_require__.h() + ".hot-update.json"; };
/******/ }();
/******/
/******/ /* webpack/runtime/getFullHash */
/******/ !function() {
/******/ __webpack_require__.h = function() { return "b9bbc6303f71f232fb77"; }
/******/ }();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ !function() {
/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
/******/ }();
/******/
/******/ /* webpack/runtime/load script */
/******/ !function() {
/******/ var inProgress = {};
/******/ // data-webpack is not used as build has no uniqueName
/******/ // loadScript function to load a script via script tag
/******/ __webpack_require__.l = function(url, done, key, chunkId) {
/******/ if(inProgress[url]) { inProgress[url].push(done); return; }
/******/ var script, needAttach;
/******/ if(key !== undefined) {
/******/ var scripts = document.getElementsByTagName("script");
/******/ for(var i = 0; i < scripts.length; i++) {
/******/ var s = scripts[i];
/******/ if(s.getAttribute("src") == url) { script = s; break; }
/******/ }
/******/ }
/******/ if(!script) {
/******/ needAttach = true;
/******/ script = document.createElement('script');
/******/
/******/ script.charset = 'utf-8';
/******/ script.timeout = 120;
/******/ if (__webpack_require__.nc) {
/******/ script.setAttribute("nonce", __webpack_require__.nc);
/******/ }
/******/
/******/
/******/ script.src = url;
/******/ }
/******/ inProgress[url] = [done];
/******/ var onScriptComplete = function(prev, event) {
/******/ // avoid mem leaks in IE.
/******/ script.onerror = script.onload = null;
/******/ clearTimeout(timeout);
/******/ var doneFns = inProgress[url];
/******/ delete inProgress[url];
/******/ script.parentNode && script.parentNode.removeChild(script);
/******/ doneFns && doneFns.forEach(function(fn) { return fn(event); });
/******/ if(prev) return prev(event);
/******/ }
/******/ var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);
/******/ script.onerror = onScriptComplete.bind(null, script.onerror);
/******/ script.onload = onScriptComplete.bind(null, script.onload);
/******/ needAttach && document.head.appendChild(script);
/******/ };
/******/ }();
/******/
/******/ /* webpack/runtime/make namespace object */
/******/ !function() {
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/ }();
/******/
/******/ /* webpack/runtime/hot module replacement */
/******/ !function() {
/******/ var currentModuleData = {};
/******/ var installedModules = __webpack_require__.c;
/******/
/******/ // module and require creation
/******/ var currentChildModule;
/******/ var currentParents = [];
/******/
/******/ // status
/******/ var registeredStatusHandlers = [];
/******/ var currentStatus = "idle";
/******/
/******/ // while downloading
/******/ var blockingPromises = 0;
/******/ var blockingPromisesWaiting = [];
/******/
/******/ // The update info
/******/ var currentUpdateApplyHandlers;
/******/ var queuedInvalidatedModules;
/******/
/******/ __webpack_require__.hmrD = currentModuleData;
/******/
/******/ __webpack_require__.i.push(function (options) {
/******/ var module = options.module;
/******/ var require = createRequire(options.require, options.id);
/******/ module.hot = createModuleHotObject(options.id, module);
/******/ module.parents = currentParents;
/******/ module.children = [];
/******/ currentParents = [];
/******/ options.require = require;
/******/ });
/******/
/******/ __webpack_require__.hmrC = {};
/******/ __webpack_require__.hmrI = {};
/******/
/******/ function createRequire(require, moduleId) {
/******/ var me = installedModules[moduleId];
/******/ if (!me) return require;
/******/ var fn = function (request) {
/******/ if (me.hot.active) {
/******/ if (installedModules[request]) {
/******/ var parents = installedModules[request].parents;
/******/ if (parents.indexOf(moduleId) === -1) {
/******/ parents.push(moduleId);
/******/ }
/******/ } else {
/******/ currentParents = [moduleId];
/******/ currentChildModule = request;
/******/ }
/******/ if (me.children.indexOf(request) === -1) {
/******/ me.children.push(request);
/******/ }
/******/ } else {
/******/ console.warn(
/******/ "[HMR] unexpected require(" +
/******/ request +
/******/ ") from disposed module " +
/******/ moduleId
/******/ );
/******/ currentParents = [];
/******/ }
/******/ return require(request);
/******/ };
/******/ var createPropertyDescriptor = function (name) {
/******/ return {
/******/ configurable: true,
/******/ enumerable: true,
/******/ get: function () {
/******/ return require[name];
/******/ },
/******/ set: function (value) {
/******/ require[name] = value;
/******/ }
/******/ };
/******/ };
/******/ for (var name in require) {
/******/ if (Object.prototype.hasOwnProperty.call(require, name) && name !== "e") {
/******/ Object.defineProperty(fn, name, createPropertyDescriptor(name));
/******/ }
/******/ }
/******/ fn.e = function (chunkId, fetchPriority) {
/******/ return trackBlockingPromise(require.e(chunkId, fetchPriority));
/******/ };
/******/ return fn;
/******/ }
/******/
/******/ function createModuleHotObject(moduleId, me) {
/******/ var _main = currentChildModule !== moduleId;
/******/ var hot = {
/******/ // private stuff
/******/ _acceptedDependencies: {},
/******/ _acceptedErrorHandlers: {},
/******/ _declinedDependencies: {},
/******/ _selfAccepted: false,
/******/ _selfDeclined: false,
/******/ _selfInvalidated: false,
/******/ _disposeHandlers: [],
/******/ _main: _main,
/******/ _requireSelf: function () {
/******/ currentParents = me.parents.slice();
/******/ currentChildModule = _main ? undefined : moduleId;
/******/ __webpack_require__(moduleId);
/******/ },
/******/
/******/ // Module API
/******/ active: true,
/******/ accept: function (dep, callback, errorHandler) {
/******/ if (dep === undefined) hot._selfAccepted = true;
/******/ else if (typeof dep === "function") hot._selfAccepted = dep;
/******/ else if (typeof dep === "object" && dep !== null) {
/******/ for (var i = 0; i < dep.length; i++) {
/******/ hot._acceptedDependencies[dep[i]] = callback || function () {};
/******/ hot._acceptedErrorHandlers[dep[i]] = errorHandler;
/******/ }
/******/ } else {
/******/ hot._acceptedDependencies[dep] = callback || function () {};
/******/ hot._acceptedErrorHandlers[dep] = errorHandler;
/******/ }
/******/ },
/******/ decline: function (dep) {
/******/ if (dep === undefined) hot._selfDeclined = true;
/******/ else if (typeof dep === "object" && dep !== null)
/******/ for (var i = 0; i < dep.length; i++)
/******/ hot._declinedDependencies[dep[i]] = true;
/******/ else hot._declinedDependencies[dep] = true;
/******/ },
/******/ dispose: function (callback) {
/******/ hot._disposeHandlers.push(callback);
/******/ },
/******/ addDisposeHandler: function (callback) {
/******/ hot._disposeHandlers.push(callback);
/******/ },
/******/ removeDisposeHandler: function (callback) {
/******/ var idx = hot._disposeHandlers.indexOf(callback);
/******/ if (idx >= 0) hot._disposeHandlers.splice(idx, 1);
/******/ },
/******/ invalidate: function () {
/******/ this._selfInvalidated = true;
/******/ switch (currentStatus) {
/******/ case "idle":
/******/ currentUpdateApplyHandlers = [];
/******/ Object.keys(__webpack_require__.hmrI).forEach(function (key) {
/******/ __webpack_require__.hmrI[key](
/******/ moduleId,
/******/ currentUpdateApplyHandlers
/******/ );
/******/ });
/******/ setStatus("ready");
/******/ break;
/******/ case "ready":
/******/ Object.keys(__webpack_require__.hmrI).forEach(function (key) {
/******/ __webpack_require__.hmrI[key](
/******/ moduleId,
/******/ currentUpdateApplyHandlers
/******/ );
/******/ });
/******/ break;
/******/ case "prepare":
/******/ case "check":
/******/ case "dispose":
/******/ case "apply":
/******/ (queuedInvalidatedModules = queuedInvalidatedModules || []).push(
/******/ moduleId
/******/ );
/******/ break;
/******/ default:
/******/ // ignore requests in error states
/******/ break;
/******/ }
/******/ },
/******/
/******/ // Management API
/******/ check: hotCheck,
/******/ apply: hotApply,
/******/ status: function (l) {
/******/ if (!l) return currentStatus;
/******/ registeredStatusHandlers.push(l);
/******/ },
/******/ addStatusHandler: function (l) {
/******/ registeredStatusHandlers.push(l);
/******/ },
/******/ removeStatusHandler: function (l) {
/******/ var idx = registeredStatusHandlers.indexOf(l);
/******/ if (idx >= 0) registeredStatusHandlers.splice(idx, 1);
/******/ },
/******/
/******/ //inherit from previous dispose call
/******/ data: currentModuleData[moduleId]
/******/ };
/******/ currentChildModule = undefined;
/******/ return hot;
/******/ }
/******/
/******/ function setStatus(newStatus) {
/******/ currentStatus = newStatus;
/******/ var results = [];
/******/
/******/ for (var i = 0; i < registeredStatusHandlers.length; i++)
/******/ results[i] = registeredStatusHandlers[i].call(null, newStatus);
/******/
/******/ return Promise.all(results).then(function () {});
/******/ }
/******/
/******/ function unblock() {
/******/ if (--blockingPromises === 0) {
/******/ setStatus("ready").then(function () {
/******/ if (blockingPromises === 0) {
/******/ var list = blockingPromisesWaiting;
/******/ blockingPromisesWaiting = [];
/******/ for (var i = 0; i < list.length; i++) {
/******/ list[i]();
/******/ }
/******/ }
/******/ });
/******/ }
/******/ }
/******/
/******/ function trackBlockingPromise(promise) {
/******/ switch (currentStatus) {
/******/ case "ready":
/******/ setStatus("prepare");
/******/ /* fallthrough */
/******/ case "prepare":
/******/ blockingPromises++;
/******/ promise.then(unblock, unblock);
/******/ return promise;
/******/ default:
/******/ return promise;
/******/ }
/******/ }
/******/
/******/ function waitForBlockingPromises(fn) {
/******/ if (blockingPromises === 0) return fn();
/******/ return new Promise(function (resolve) {
/******/ blockingPromisesWaiting.push(function () {
/******/ resolve(fn());
/******/ });
/******/ });
/******/ }
/******/
/******/ function hotCheck(applyOnUpdate) {
/******/ if (currentStatus !== "idle") {
/******/ throw new Error("check() is only allowed in idle status");
/******/ }
/******/ return setStatus("check")
/******/ .then(__webpack_require__.hmrM)
/******/ .then(function (update) {
/******/ if (!update) {
/******/ return setStatus(applyInvalidatedModules() ? "ready" : "idle").then(
/******/ function () {
/******/ return null;
/******/ }
/******/ );
/******/ }
/******/
/******/ return setStatus("prepare").then(function () {
/******/ var updatedModules = [];
/******/ currentUpdateApplyHandlers = [];
/******/
/******/ return Promise.all(
/******/ Object.keys(__webpack_require__.hmrC).reduce(function (
/******/ promises,
/******/ key
/******/ ) {
/******/ __webpack_require__.hmrC[key](
/******/ update.c,
/******/ update.r,
/******/ update.m,
/******/ promises,
/******/ currentUpdateApplyHandlers,
/******/ updatedModules
/******/ );
/******/ return promises;
/******/ }, [])
/******/ ).then(function () {
/******/ return waitForBlockingPromises(function () {
/******/ if (applyOnUpdate) {
/******/ return internalApply(applyOnUpdate);
/******/ } else {
/******/ return setStatus("ready").then(function () {
/******/ return updatedModules;
/******/ });
/******/ }
/******/ });
/******/ });
/******/ });
/******/ });
/******/ }
/******/
/******/ function hotApply(options) {
/******/ if (currentStatus !== "ready") {
/******/ return Promise.resolve().then(function () {
/******/ throw new Error(
/******/ "apply() is only allowed in ready status (state: " +
/******/ currentStatus +
/******/ ")"
/******/ );
/******/ });
/******/ }
/******/ return internalApply(options);
/******/ }
/******/
/******/ function internalApply(options) {
/******/ options = options || {};
/******/
/******/ applyInvalidatedModules();
/******/
/******/ var results = currentUpdateApplyHandlers.map(function (handler) {
/******/ return handler(options);
/******/ });
/******/ currentUpdateApplyHandlers = undefined;
/******/
/******/ var errors = results
/******/ .map(function (r) {
/******/ return r.error;
/******/ })
/******/ .filter(Boolean);
/******/
/******/ if (errors.length > 0) {
/******/ return setStatus("abort").then(function () {
/******/ throw errors[0];
/******/ });
/******/ }
/******/
/******/ // Now in "dispose" phase
/******/ var disposePromise = setStatus("dispose");
/******/
/******/ results.forEach(function (result) {
/******/ if (result.dispose) result.dispose();
/******/ });
/******/
/******/ // Now in "apply" phase
/******/ var applyPromise = setStatus("apply");
/******/
/******/ var error;
/******/ var reportError = function (err) {
/******/ if (!error) error = err;
/******/ };
/******/
/******/ var outdatedModules = [];
/******/ results.forEach(function (result) {
/******/ if (result.apply) {
/******/ var modules = result.apply(reportError);
/******/ if (modules) {
/******/ for (var i = 0; i < modules.length; i++) {
/******/ outdatedModules.push(modules[i]);
/******/ }
/******/ }
/******/ }
/******/ });
/******/
/******/ return Promise.all([disposePromise, applyPromise]).then(function () {
/******/ // handle errors in accept handlers and self accepted module load
/******/ if (error) {
/******/ return setStatus("fail").then(function () {
/******/ throw error;
/******/ });
/******/ }
/******/
/******/ if (queuedInvalidatedModules) {
/******/ return internalApply(options).then(function (list) {
/******/ outdatedModules.forEach(function (moduleId) {
/******/ if (list.indexOf(moduleId) < 0) list.push(moduleId);
/******/ });
/******/ return list;
/******/ });
/******/ }
/******/
/******/ return setStatus("idle").then(function () {
/******/ return outdatedModules;
/******/ });
/******/ });
/******/ }
/******/
/******/ function applyInvalidatedModules() {
/******/ if (queuedInvalidatedModules) {
/******/ if (!currentUpdateApplyHandlers) currentUpdateApplyHandlers = [];
/******/ Object.keys(__webpack_require__.hmrI).forEach(function (key) {
/******/ queuedInvalidatedModules.forEach(function (moduleId) {
/******/ __webpack_require__.hmrI[key](
/******/ moduleId,
/******/ currentUpdateApplyHandlers
/******/ );
/******/ });
/******/ });
/******/ queuedInvalidatedModules = undefined;
/******/ return true;
/******/ }
/******/ }
/******/ }();
/******/
/******/ /* webpack/runtime/publicPath */
/******/ !function() {
/******/ __webpack_require__.p = "https://digitalsilknew:8888/wp-content/themes/digitalsilk/assets/js/";
/******/ }();
/******/
/******/ /* webpack/runtime/jsonp chunk loading */
/******/ !function() {
/******/ // no baseURI
/******/
/******/ // object to store loaded and loading chunks
/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
/******/ var installedChunks = __webpack_require__.hmrS_jsonp = __webpack_require__.hmrS_jsonp || {
/******/ "app_blog": 0
/******/ };
/******/
/******/ // no chunk on demand loading
/******/
/******/ // no prefetching
/******/
/******/ // no preloaded
/******/
/******/ var currentUpdatedModulesList;
/******/ var waitingUpdateResolves = {};
/******/ function loadUpdateChunk(chunkId, updatedModulesList) {
/******/ currentUpdatedModulesList = updatedModulesList;
/******/ return new Promise(function(resolve, reject) {
/******/ waitingUpdateResolves[chunkId] = resolve;
/******/ // start update chunk loading
/******/ var url = __webpack_require__.p + __webpack_require__.hu(chunkId);
/******/ // create error before stack unwound to get useful stacktrace later
/******/ var error = new Error();
/******/ var loadingEnded = function(event) {
/******/ if(waitingUpdateResolves[chunkId]) {
/******/ waitingUpdateResolves[chunkId] = undefined
/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type);
/******/ var realSrc = event && event.target && event.target.src;
/******/ error.message = 'Loading hot update chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')';
/******/ error.name = 'ChunkLoadError';
/******/ error.type = errorType;
/******/ error.request = realSrc;
/******/ reject(error);
/******/ }
/******/ };
/******/ __webpack_require__.l(url, loadingEnded);
/******/ });
/******/ }
/******/
/******/ self["webpackHotUpdate"] = function(chunkId, moreModules, runtime) {
/******/ for(var moduleId in moreModules) {
/******/ if(__webpack_require__.o(moreModules, moduleId)) {
/******/ currentUpdate[moduleId] = moreModules[moduleId];
/******/ if(currentUpdatedModulesList) currentUpdatedModulesList.push(moduleId);
/******/ }
/******/ }
/******/ if(runtime) currentUpdateRuntime.push(runtime);
/******/ if(waitingUpdateResolves[chunkId]) {
/******/ waitingUpdateResolves[chunkId]();
/******/ waitingUpdateResolves[chunkId] = undefined;
/******/ }
/******/ };
/******/
/******/ var currentUpdateChunks;
/******/ var currentUpdate;
/******/ var currentUpdateRemovedChunks;
/******/ var currentUpdateRuntime;
/******/ function applyHandler(options) {
/******/ if (__webpack_require__.f) delete __webpack_require__.f.jsonpHmr;
/******/ currentUpdateChunks = undefined;
/******/ function getAffectedModuleEffects(updateModuleId) {
/******/ var outdatedModules = [updateModuleId];
/******/ var outdatedDependencies = {};
/******/
/******/ var queue = outdatedModules.map(function (id) {
/******/ return {
/******/ chain: [id],
/******/ id: id
/******/ };
/******/ });
/******/ while (queue.length > 0) {
/******/ var queueItem = queue.pop();
/******/ var moduleId = queueItem.id;
/******/ var chain = queueItem.chain;
/******/ var module = __webpack_require__.c[moduleId];
/******/ if (
/******/ !module ||
/******/ (module.hot._selfAccepted && !module.hot._selfInvalidated)
/******/ )
/******/ continue;
/******/ if (module.hot._selfDeclined) {
/******/ return {
/******/ type: "self-declined",
/******/ chain: chain,
/******/ moduleId: moduleId
/******/ };
/******/ }
/******/ if (module.hot._main) {
/******/ return {
/******/ type: "unaccepted",
/******/ chain: chain,
/******/ moduleId: moduleId
/******/ };
/******/ }
/******/ for (var i = 0; i < module.parents.length; i++) {
/******/ var parentId = module.parents[i];
/******/ var parent = __webpack_require__.c[parentId];
/******/ if (!parent) continue;
/******/ if (parent.hot._declinedDependencies[moduleId]) {
/******/ return {
/******/ type: "declined",
/******/ chain: chain.concat([parentId]),
/******/ moduleId: moduleId,
/******/ parentId: parentId
/******/ };
/******/ }
/******/ if (outdatedModules.indexOf(parentId) !== -1) continue;
/******/ if (parent.hot._acceptedDependencies[moduleId]) {
/******/ if (!outdatedDependencies[parentId])
/******/ outdatedDependencies[parentId] = [];
/******/ addAllToSet(outdatedDependencies[parentId], [moduleId]);
/******/ continue;
/******/ }
/******/ delete outdatedDependencies[parentId];
/******/ outdatedModules.push(parentId);
/******/ queue.push({
/******/ chain: chain.concat([parentId]),
/******/ id: parentId
/******/ });
/******/ }
/******/ }
/******/
/******/ return {
/******/ type: "accepted",
/******/ moduleId: updateModuleId,
/******/ outdatedModules: outdatedModules,
/******/ outdatedDependencies: outdatedDependencies
/******/ };
/******/ }
/******/
/******/ function addAllToSet(a, b) {
/******/ for (var i = 0; i < b.length; i++) {
/******/ var item = b[i];
/******/ if (a.indexOf(item) === -1) a.push(item);
/******/ }
/******/ }
/******/
/******/ // at begin all updates modules are outdated
/******/ // the "outdated" status can propagate to parents if they don't accept the children
/******/ var outdatedDependencies = {};
/******/ var outdatedModules = [];
/******/ var appliedUpdate = {};
/******/
/******/ var warnUnexpectedRequire = function warnUnexpectedRequire(module) {
/******/ console.warn(
/******/ "[HMR] unexpected require(" + module.id + ") to disposed module"
/******/ );
/******/ };
/******/
/******/ for (var moduleId in currentUpdate) {
/******/ if (__webpack_require__.o(currentUpdate, moduleId)) {
/******/ var newModuleFactory = currentUpdate[moduleId];
/******/ /** @type {TODO} */
/******/ var result;
/******/ if (newModuleFactory) {
/******/ result = getAffectedModuleEffects(moduleId);
/******/ } else {
/******/ result = {
/******/ type: "disposed",
/******/ moduleId: moduleId
/******/ };
/******/ }
/******/ /** @type {Error|false} */
/******/ var abortError = false;
/******/ var doApply = false;
/******/ var doDispose = false;
/******/ var chainInfo = "";
/******/ if (result.chain) {
/******/ chainInfo = "\nUpdate propagation: " + result.chain.join(" -> ");
/******/ }
/******/ switch (result.type) {
/******/ case "self-declined":
/******/ if (options.onDeclined) options.onDeclined(result);
/******/ if (!options.ignoreDeclined)
/******/ abortError = new Error(
/******/ "Aborted because of self decline: " +
/******/ result.moduleId +
/******/ chainInfo
/******/ );
/******/ break;
/******/ case "declined":
/******/ if (options.onDeclined) options.onDeclined(result);
/******/ if (!options.ignoreDeclined)
/******/ abortError = new Error(
/******/ "Aborted because of declined dependency: " +
/******/ result.moduleId +
/******/ " in " +
/******/ result.parentId +
/******/ chainInfo
/******/ );
/******/ break;
/******/ case "unaccepted":
/******/ if (options.onUnaccepted) options.onUnaccepted(result);
/******/ if (!options.ignoreUnaccepted)
/******/ abortError = new Error(
/******/ "Aborted because " + moduleId + " is not accepted" + chainInfo
/******/ );
/******/ break;
/******/ case "accepted":
/******/ if (options.onAccepted) options.onAccepted(result);
/******/ doApply = true;
/******/ break;
/******/ case "disposed":
/******/ if (options.onDisposed) options.onDisposed(result);
/******/ doDispose = true;
/******/ break;
/******/ default:
/******/ throw new Error("Unexception type " + result.type);
/******/ }
/******/ if (abortError) {
/******/ return {
/******/ error: abortError
/******/ };
/******/ }
/******/ if (doApply) {
/******/ appliedUpdate[moduleId] = newModuleFactory;
/******/ addAllToSet(outdatedModules, result.outdatedModules);
/******/ for (moduleId in result.outdatedDependencies) {
/******/ if (__webpack_require__.o(result.outdatedDependencies, moduleId)) {
/******/ if (!outdatedDependencies[moduleId])
/******/ outdatedDependencies[moduleId] = [];
/******/ addAllToSet(
/******/ outdatedDependencies[moduleId],
/******/ result.outdatedDependencies[moduleId]
/******/ );
/******/ }
/******/ }
/******/ }
/******/ if (doDispose) {
/******/ addAllToSet(outdatedModules, [result.moduleId]);
/******/ appliedUpdate[moduleId] = warnUnexpectedRequire;
/******/ }
/******/ }
/******/ }
/******/ currentUpdate = undefined;
/******/
/******/ // Store self accepted outdated modules to require them later by the module system
/******/ var outdatedSelfAcceptedModules = [];
/******/ for (var j = 0; j < outdatedModules.length; j++) {
/******/ var outdatedModuleId = outdatedModules[j];
/******/ var module = __webpack_require__.c[outdatedModuleId];
/******/ if (
/******/ module &&
/******/ (module.hot._selfAccepted || module.hot._main) &&
/******/ // removed self-accepted modules should not be required
/******/ appliedUpdate[outdatedModuleId] !== warnUnexpectedRequire &&
/******/ // when called invalidate self-accepting is not possible
/******/ !module.hot._selfInvalidated
/******/ ) {
/******/ outdatedSelfAcceptedModules.push({
/******/ module: outdatedModuleId,
/******/ require: module.hot._requireSelf,
/******/ errorHandler: module.hot._selfAccepted
/******/ });
/******/ }
/******/ }
/******/
/******/ var moduleOutdatedDependencies;
/******/
/******/ return {
/******/ dispose: function () {
/******/ currentUpdateRemovedChunks.forEach(function (chunkId) {
/******/ delete installedChunks[chunkId];
/******/ });
/******/ currentUpdateRemovedChunks = undefined;
/******/
/******/ var idx;
/******/ var queue = outdatedModules.slice();
/******/ while (queue.length > 0) {
/******/ var moduleId = queue.pop();
/******/ var module = __webpack_require__.c[moduleId];
/******/ if (!module) continue;
/******/
/******/ var data = {};
/******/
/******/ // Call dispose handlers
/******/ var disposeHandlers = module.hot._disposeHandlers;
/******/ for (j = 0; j < disposeHandlers.length; j++) {
/******/ disposeHandlers[j].call(null, data);
/******/ }
/******/ __webpack_require__.hmrD[moduleId] = data;
/******/
/******/ // disable module (this disables requires from this module)
/******/ module.hot.active = false;
/******/
/******/ // remove module from cache
/******/ delete __webpack_require__.c[moduleId];
/******/
/******/ // when disposing there is no need to call dispose handler
/******/ delete outdatedDependencies[moduleId];
/******/
/******/ // remove "parents" references from all children
/******/ for (j = 0; j < module.children.length; j++) {
/******/ var child = __webpack_require__.c[module.children[j]];
/******/ if (!child) continue;
/******/ idx = child.parents.indexOf(moduleId);
/******/ if (idx >= 0) {
/******/ child.parents.splice(idx, 1);
/******/ }
/******/ }
/******/ }
/******/
/******/ // remove outdated dependency from module children
/******/ var dependency;
/******/ for (var outdatedModuleId in outdatedDependencies) {
/******/ if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) {
/******/ module = __webpack_require__.c[outdatedModuleId];
/******/ if (module) {
/******/ moduleOutdatedDependencies =
/******/ outdatedDependencies[outdatedModuleId];
/******/ for (j = 0; j < moduleOutdatedDependencies.length; j++) {
/******/ dependency = moduleOutdatedDependencies[j];
/******/ idx = module.children.indexOf(dependency);
/******/ if (idx >= 0) module.children.splice(idx, 1);
/******/ }
/******/ }
/******/ }
/******/ }
/******/ },
/******/ apply: function (reportError) {
/******/ // insert new code
/******/ for (var updateModuleId in appliedUpdate) {
/******/ if (__webpack_require__.o(appliedUpdate, updateModuleId)) {
/******/ __webpack_require__.m[updateModuleId] = appliedUpdate[updateModuleId];
/******/ }
/******/ }
/******/
/******/ // run new runtime modules
/******/ for (var i = 0; i < currentUpdateRuntime.length; i++) {
/******/ currentUpdateRuntime[i](__webpack_require__);
/******/ }
/******/
/******/ // call accept handlers
/******/ for (var outdatedModuleId in outdatedDependencies) {
/******/ if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) {
/******/ var module = __webpack_require__.c[outdatedModuleId];
/******/ if (module) {
/******/ moduleOutdatedDependencies =
/******/ outdatedDependencies[outdatedModuleId];
/******/ var callbacks = [];
/******/ var errorHandlers = [];
/******/ var dependenciesForCallbacks = [];
/******/ for (var j = 0; j < moduleOutdatedDependencies.length; j++) {
/******/ var dependency = moduleOutdatedDependencies[j];
/******/ var acceptCallback =
/******/ module.hot._acceptedDependencies[dependency];
/******/ var errorHandler =
/******/ module.hot._acceptedErrorHandlers[dependency];
/******/ if (acceptCallback) {
/******/ if (callbacks.indexOf(acceptCallback) !== -1) continue;
/******/ callbacks.push(acceptCallback);
/******/ errorHandlers.push(errorHandler);
/******/ dependenciesForCallbacks.push(dependency);
/******/ }
/******/ }
/******/ for (var k = 0; k < callbacks.length; k++) {
/******/ try {
/******/ callbacks[k].call(null, moduleOutdatedDependencies);
/******/ } catch (err) {
/******/ if (typeof errorHandlers[k] === "function") {
/******/ try {
/******/ errorHandlers[k](err, {
/******/ moduleId: outdatedModuleId,
/******/ dependencyId: dependenciesForCallbacks[k]
/******/ });
/******/ } catch (err2) {
/******/ if (options.onErrored) {
/******/ options.onErrored({
/******/ type: "accept-error-handler-errored",
/******/ moduleId: outdatedModuleId,
/******/ dependencyId: dependenciesForCallbacks[k],
/******/ error: err2,
/******/ originalError: err
/******/ });
/******/ }
/******/ if (!options.ignoreErrored) {
/******/ reportError(err2);
/******/ reportError(err);
/******/ }
/******/ }
/******/ } else {
/******/ if (options.onErrored) {
/******/ options.onErrored({
/******/ type: "accept-errored",
/******/ moduleId: outdatedModuleId,
/******/ dependencyId: dependenciesForCallbacks[k],
/******/ error: err
/******/ });
/******/ }
/******/ if (!options.ignoreErrored) {
/******/ reportError(err);
/******/ }
/******/ }
/******/ }
/******/ }
/******/ }
/******/ }
/******/ }
/******/
/******/ // Load self accepted modules
/******/ for (var o = 0; o < outdatedSelfAcceptedModules.length; o++) {
/******/ var item = outdatedSelfAcceptedModules[o];
/******/ var moduleId = item.module;
/******/ try {
/******/ item.require(moduleId);
/******/ } catch (err) {
/******/ if (typeof item.errorHandler === "function") {
/******/ try {
/******/ item.errorHandler(err, {
/******/ moduleId: moduleId,
/******/ module: __webpack_require__.c[moduleId]
/******/ });
/******/ } catch (err2) {
/******/ if (options.onErrored) {
/******/ options.onErrored({
/******/ type: "self-accept-error-handler-errored",
/******/ moduleId: moduleId,
/******/ error: err2,
/******/ originalError: err
/******/ });
/******/ }
/******/ if (!options.ignoreErrored) {
/******/ reportError(err2);
/******/ reportError(err);
/******/ }
/******/ }
/******/ } else {
/******/ if (options.onErrored) {
/******/ options.onErrored({
/******/ type: "self-accept-errored",
/******/ moduleId: moduleId,
/******/ error: err
/******/ });
/******/ }
/******/ if (!options.ignoreErrored) {
/******/ reportError(err);
/******/ }
/******/ }
/******/ }
/******/ }
/******/
/******/ return outdatedModules;
/******/ }
/******/ };
/******/ }
/******/ __webpack_require__.hmrI.jsonp = function (moduleId, applyHandlers) {
/******/ if (!currentUpdate) {
/******/ currentUpdate = {};
/******/ currentUpdateRuntime = [];
/******/ currentUpdateRemovedChunks = [];
/******/ applyHandlers.push(applyHandler);
/******/ }
/******/ if (!__webpack_require__.o(currentUpdate, moduleId)) {
/******/ currentUpdate[moduleId] = __webpack_require__.m[moduleId];
/******/ }
/******/ };
/******/ __webpack_require__.hmrC.jsonp = function (
/******/ chunkIds,
/******/ removedChunks,
/******/ removedModules,
/******/ promises,
/******/ applyHandlers,
/******/ updatedModulesList
/******/ ) {
/******/ applyHandlers.push(applyHandler);
/******/ currentUpdateChunks = {};
/******/ currentUpdateRemovedChunks = removedChunks;
/******/ currentUpdate = removedModules.reduce(function (obj, key) {
/******/ obj[key] = false;
/******/ return obj;
/******/ }, {});
/******/ currentUpdateRuntime = [];
/******/ chunkIds.forEach(function (chunkId) {
/******/ if (
/******/ __webpack_require__.o(installedChunks, chunkId) &&
/******/ installedChunks[chunkId] !== undefined
/******/ ) {
/******/ promises.push(loadUpdateChunk(chunkId, updatedModulesList));
/******/ currentUpdateChunks[chunkId] = true;
/******/ } else {
/******/ currentUpdateChunks[chunkId] = false;
/******/ }
/******/ });
/******/ if (__webpack_require__.f) {
/******/ __webpack_require__.f.jsonpHmr = function (chunkId, promises) {
/******/ if (
/******/ currentUpdateChunks &&
/******/ __webpack_require__.o(currentUpdateChunks, chunkId) &&
/******/ !currentUpdateChunks[chunkId]
/******/ ) {
/******/ promises.push(loadUpdateChunk(chunkId));
/******/ currentUpdateChunks[chunkId] = true;
/******/ }
/******/ };
/******/ }
/******/ };
/******/
/******/ __webpack_require__.hmrM = function() {
/******/ if (typeof fetch === "undefined") throw new Error("No browser support: need fetch API");
/******/ return fetch(__webpack_require__.p + __webpack_require__.hmrF()).then(function(response) {
/******/ if(response.status === 404) return; // no update available
/******/ if(!response.ok) throw new Error("Failed to fetch update manifest " + response.statusText);
/******/ return response.json();
/******/ });
/******/ };
/******/
/******/ // no on chunks loaded
/******/
/******/ // no jsonp function
/******/ }();
/******/
/************************************************************************/
/******/
/******/ // module cache are used so entry inlining is disabled
/******/ // startup
/******/ // Load entry module and return exports
/******/ var __webpack_exports__ = __webpack_require__("./js-blog.js");
/******/
/******/ })()
;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QTtXQUNBO1dBQ0EsRUFBRTs7V0FFRjtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsSUFBSTtXQUNKOztXQUVBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsS0FBSztXQUNMO1dBQ0EsSUFBSTtXQUNKOztXQUVBO1dBQ0E7V0FDQSxHQUFHO1dBQ0gsRUFBRTtXQUNGOztXQUVBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLElBQUk7V0FDSixHQUFHO1dBQ0g7V0FDQTtXQUNBO1dBQ0E7Ozs7O1dDbllBOzs7OztXQ0FBOztXQUVBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTs7V0FFQTs7V0FFQTs7V0FFQTs7V0FFQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsRUFBRTtXQUNGOztXQUVBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBOztXQUVBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBOztXQUVBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxHQUFHO1dBQ0g7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsbUJBQW1CLDJCQUEyQjtXQUM5QztXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsS0FBSztXQUNMO1dBQ0E7O1dBRUE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7O1dBRUE7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Q0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsRUFBRSxJQUFJO1dBQ047V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLElBQUk7V0FDSjtXQUNBO1dBQ0EsRUFBRTtXQUNGO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBOztXQUVBO1dBQ0E7V0FDQTtXQUNBLHNDQUFzQztXQUN0QztXQUNBO1dBQ0EsRUFBRTtXQUNGOztXQUVBOztXQUVBOzs7OztVRTlmQTtVQUNBO1VBQ0E7VUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2Jsb2cvYmxvZy1maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vYmxvZy9kYXRhLWxheWVycy5qcyIsIndlYnBhY2s6Ly8vLi9ibG9nL2R0LXN1YnNjcmliZS5qcyIsIndlYnBhY2s6Ly8vLi9ibG9nL3RvYy1tb2JpbGUuanMiLCJ3ZWJwYWNrOi8vLy4vYmxvZy90b2Mtc3RpY2t5LmpzIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvZGFyay1tb2RlLmpzIiwid2VicGFjazovLy8uL2pzLWJsb2cuanMiLCJ3ZWJwYWNrOi8vLy4vdXRpbHMvdV9jbGFzc2xpc3QtYWRkLXJlbW92ZS5qcyIsIndlYnBhY2s6Ly8vLi91dGlscy91X2VsLWluLXZpZXdwb3J0LWRldGVjdC5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgdmFyIFwialF1ZXJ5XCIiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9nZXQgamF2YXNjcmlwdCB1cGRhdGUgY2h1bmsgZmlsZW5hbWUiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9nZXQgdXBkYXRlIG1hbmlmZXN0IGZpbGVuYW1lIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvZ2V0RnVsbEhhc2giLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9sb2FkIHNjcmlwdCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2hvdCBtb2R1bGUgcmVwbGFjZW1lbnQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9wdWJsaWNQYXRoIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvanNvbnAgY2h1bmsgbG9hZGluZyIsIndlYnBhY2s6Ly8vd2VicGFjay9iZWZvcmUtc3RhcnR1cCIsIndlYnBhY2s6Ly8vd2VicGFjay9zdGFydHVwIiwid2VicGFjazovLy93ZWJwYWNrL2FmdGVyLXN0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYmxvZ0ZpbHRlcigpIHtcblxuICAgIChmdW5jdGlvbiAoJCkge1xuXG4gICAgICAgIC8vIGpRdWVyeShkb2N1bWVudCkub24oJ2luaXRfZmlsdGVyJywgKGUsIG1vZHVsZSkgPT4ge1xuICAgICAgICAvLyAgICAgRFNJbml0RmlsdGVyKG1vZHVsZSk7XG4gICAgICAgIC8vIH0pO1xuXG4gICAgICAgIGxldCBEU0luaXRGaWx0ZXIgPSBmdW5jdGlvbiAobW9kdWxlKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSB7XG4gICAgICAgICAgICAgICAgbW9kdWxlOiBudWxsLFxuICAgICAgICAgICAgICAgIGFjdGlvbjogbnVsbCxcbiAgICAgICAgICAgICAgICBmb3JtOiAnJyxcbiAgICAgICAgICAgICAgICBtb3JlQnRuOiAkKCksXG4gICAgICAgICAgICAgICAgcmVzdWx0czogbnVsbCxcbiAgICAgICAgICAgICAgICBkb2luZ19hamF4OiBudWxsLFxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IG51bGwsXG4gICAgICAgICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgICAgICAgICAgcG9zdF90eXBlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBwZXJfcGFnZTogOSxcbiAgICAgICAgICAgICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbXBvbmVudF9zdHlsZXM6IHt9LFxuICAgICAgICAgICAgICAgIGFqYXhfdXJsOiBkcy5hamF4X3VybCxcbiAgICAgICAgICAgICAgICBwcmVsb2FkZXI6ICc8ZGl2IGNsYXNzPVwiZmlsdGVyLWxvYWRlciBsb2FkZXJcIj48ZGl2IGNsYXNzPVwic3Bpbm5lclwiPjxkaXYgY2xhc3M9XCJkb3VibGUtYm91bmNlMVwiPjwvZGl2PjxkaXYgY2xhc3M9XCJkb3VibGUtYm91bmNlMlwiPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9XCJsb2FkZXItYmdcIj48L2Rpdj48L2Rpdj4nLFxuICAgICAgICAgICAgICAgIGluaXQobW9kdWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFqYXhNb2R1bGUgPSAkKG1vZHVsZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGFqYXhNb2R1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5tb2R1bGUgPSBhamF4TW9kdWxlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIuYWN0aW9uID0gYWpheE1vZHVsZS5kYXRhKCdhY3Rpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5xdWVyeS5wb3N0X3R5cGUgPSBhamF4TW9kdWxlLmRhdGEoJ3Bvc3QtdHlwZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLnF1ZXJ5LnBvc3RzX3Blcl9wYWdlID0gYWpheE1vZHVsZS5kYXRhKCdwZXItcGFnZScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIuaW5pdEVsZW1lbnRzQWN0aW9ucygpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGluaXRFbGVtZW50c0FjdGlvbnMoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBmaWx0ZXIubW9kdWxlLmZpbmQoJ2RpdltkYXRhLWNvbnRhaW5lcj1cImFqYXgtcmVzdWx0XCJdJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5yZXN1bHRzID0gcmVzdWx0cztcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9yZUJ0biA9IGZpbHRlci5tb2R1bGUuZmluZCgnLmFqYXgtbG9hZC1tb3JlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9yZUJ0bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5tb3JlQnRuID0gbW9yZUJ0bjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIubW9yZVBvc3RzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm0gPSBmaWx0ZXIubW9kdWxlLmZpbmQoJ2Zvcm1bZGF0YS1mb3JtPVwiYWpheFwiXScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIuZm9ybSA9IGZvcm07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmNoYW5nZUZvcm0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBDbGFzcyA9IGZpbHRlci5tb2R1bGUuZGF0YSgnY2xhc3MnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBDbGFzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmNvbXBvbmVudF9zdHlsZXMuY2xhc3MgPSBjb21wQ2xhc3M7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wU3R5bGVzID0gZmlsdGVyLm1vZHVsZS5kYXRhKCdzdHlsZXMnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBTdHlsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5jb21wb25lbnRfc3R5bGVzLnN0eWxlcyA9IGNvbXBTdHlsZXM7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wSW1hZ2UgPSBmaWx0ZXIubW9kdWxlLmRhdGEoJ2ltYWdlJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wSW1hZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5jb21wb25lbnRfc3R5bGVzLmltYWdlID0gY29tcEltYWdlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtb3JlUG9zdHMoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlci5tb3JlQnRuLm9uKCdjbGljaycsIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5zZW5kQWpheChmaWx0ZXIucXVlcnkucGFnZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2hhbmdlRm9ybSgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgJGlucHV0X3RleHQgPSBmaWx0ZXIuZm9ybS5maW5kKCdpbnB1dFt0eXBlPVwidGV4dFwiXSwgdGV4dGFyZWEnKTtcbiAgICAgICAgICAgICAgICAgICAgJGlucHV0X3RleHQudW5iaW5kKCdrZXl1cCcpO1xuICAgICAgICAgICAgICAgICAgICAkaW5wdXRfdGV4dC5ub3QoJ1tkYXRhLWFqYXg9XCJmYWxzZVwiXScpLmtleXVwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIudGltZW91dCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGZpbHRlci50aW1lb3V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci50aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLnRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5zZW5kQWpheCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbnB1dF9zdWJtaXQucGFyZW50KCkuYWRkQ2xhc3MoJ2lzLWZpbHRlci1hY3RpdmUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCAkaW5wdXRfc3VibWl0ID0gZmlsdGVyLmZvcm0uZmluZCgnYnV0dG9uW3R5cGU9XCJzdWJtaXRcIl0nKTtcbiAgICAgICAgICAgICAgICAgICAgJGlucHV0X3N1Ym1pdC51bmJpbmQoJ2NsaWNrJyk7XG4gICAgICAgICAgICAgICAgICAgICRpbnB1dF9zdWJtaXQubm90KCdbZGF0YS1hamF4PVwiZmFsc2VcIl0nKS5jbGljaygoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLnNlbmRBamF4KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXRfc3VibWl0LnBhcmVudCgpLmFkZENsYXNzKCdpcy1maWx0ZXItYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0ICRzZWxlY3QgPSBmaWx0ZXIuZm9ybS5maW5kKCdzZWxlY3QnKTtcbiAgICAgICAgICAgICAgICAgICAgJHNlbGVjdC51bmJpbmQoJ2NoYW5nZScpO1xuICAgICAgICAgICAgICAgICAgICAkc2VsZWN0Lm5vdCgnW2RhdGEtYWpheD1cImZhbHNlXCJdJykuY2hhbmdlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5zZW5kQWpheCgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIuZm9ybS51bmJpbmQoJ2tleWRvd24nKTtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmZvcm0ub24oJ2tleWRvd24nLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09IDEzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIuc2VuZEFqYXgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZW5kQWpheChwYWdlID0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyLmRvaW5nX2FqYXggIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmRvaW5nX2FqYXguYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5kb2luZ19hamF4ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5tb2R1bGUuZmluZCgnLmxvYWRlcicpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogZmlsdGVyLmFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdF90eXBlOiBmaWx0ZXIucXVlcnkucG9zdF90eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RzX3Blcl9wYWdlOiBmaWx0ZXIucXVlcnkucG9zdHNfcGVyX3BhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZWQ6IHBhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50OiBmaWx0ZXIuY29tcG9uZW50X3N0eWxlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZTogJCh3aW5kb3cpLndpZHRoKCkgPD0gNzY4ID8gJ21vYmlsZScgOiAnZGVza3RvcCcsXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlci5mb3JtLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZm9ybSA9IGZpbHRlci5mb3JtLnNlcmlhbGl6ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmRvaW5nX2FqYXggPSAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBmaWx0ZXIuYWpheF91cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlU2VuZCh4aHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIubW9kdWxlLmFwcGVuZChmaWx0ZXIucHJlbG9hZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnBhZ2UgPT09IDEpIGZpbHRlci5yZXN1bHRzLmh0bWwoJycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5yZXN1bHRzLmFwcGVuZChkYXRhLnBvc3RzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5tYXhfcGFnZXMgPT09IGRhdGEucGFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLm1vcmVCdG4uaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLm1vcmVCdG4uc2hvdygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEudG90YWxfcG9zdHNfc2hvd2luZyA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIubW9kdWxlLmZpbmQoJy5qcy1ibG9nLWNvdW50ZXItd3JhcHBlcicpLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5tb2R1bGUuZmluZCgnLmpzLWJsb2ctY291bnRlci13cmFwcGVyJykuc2hvdygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEudG90YWxfcG9zdHNfc2hvd2luZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLm1vZHVsZS5maW5kKCcuanMtYmxvZy1jb3VudGVyLXNob3dpbmcnKS50ZXh0KGRhdGEudG90YWxfcG9zdHNfc2hvd2luZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS50b3RhbF9wb3N0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLm1vZHVsZS5maW5kKCcuanMtYmxvZy1jb3VudGVyLXRvdGFsJykudGV4dChkYXRhLnRvdGFsX3Bvc3RzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5xdWVyeS5wYWdlID0gZGF0YS5wYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIubW9kdWxlLmZpbmQoJy5sb2FkZXInKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIubW9yZUJ0bi5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmRvaW5nX2FqYXggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGZpbHRlci5pbml0KG1vZHVsZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZG9Jbml0ID0gKCkgPT4ge1xuXG4gICAgICAgICAgICAkKCcuanMtYWpheC1ibG9jaycpLmVhY2goZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhpKTtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygkKCcuanMtYWpheC1ibG9jaycpW2ldKTtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygkKHRoaXMpKTtcbiAgICAgICAgICAgICAgICBEU0luaXRGaWx0ZXIoJCgnLmpzLWFqYXgtYmxvY2snKVtpXSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9O1xuXG4gICAgICAgIGRvSW5pdCgpO1xuXG4gICAgICAgIC8qIGpRdWVyeShkb2N1bWVudCkudHJpZ2dlcignaW5pdF9maWx0ZXInLCAnYWpheC1wb3N0cycpO1xuICAgICAgICBqUXVlcnkoZG9jdW1lbnQpLnRyaWdnZXIoJ2luaXRfZmlsdGVyJywgJ2FqYXgtY29udGVudC0xJyk7ICovXG5cbiAgICB9KGpRdWVyeSkpO1xuXG59XG4iLCJleHBvcnQgZnVuY3Rpb24gZGF0YUxheWVycygpe1xuICAgIC8vIHNpZGViYXIgQ1RBIGxpbmtcbiAgICBjb25zdCBzaWRlQ3RhID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm0tcmVsLWZsb2F0IC5ib3gtY3RhX193cmFwJyk7XG5cbiAgICBpZiAoc2lkZUN0YSkge1xuXG4gICAgICAgIC8vIGdldCB0aGUgY2xpY2tcbiAgICAgICAgc2lkZUN0YS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgLy8gc3RvcCBkZWZhdWx0IHJlbG9hZFxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgLy8gcHVzaCBkYXRhIGxheWVyXG4gICAgICAgICAgICBzZW5kRGF0YUxheWVyKCk7XG5cbiAgICAgICAgICAgLy8gZ2V0IGJhY2sgb24gdHJhY2sgd2l0aCB0aGUgbGlua1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHNpZGVDdGEuaHJlZjtcbiAgICAgICAgICAgIH0sIDEwMCk7IC8vIERlbGF5ICwgZ2l2ZSB0aGUgZGF0YSBsYXllciBtb3JlIGNoYW5jZSB0byBnZXQgdHJvdWdoXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vICBzZW5kIHRoZSBkYXRhIGxheWVyXG4gICAgICAgIGZ1bmN0aW9uIHNlbmREYXRhTGF5ZXIoKSB7XG4gICAgICAgICAgICAvLyBZb3VyIGNvZGUgdG8gcHVzaCB0aGUgZGF0YSBsYXllciBnb2VzIGhlcmVcbiAgICAgICAgICAgIHdpbmRvdy5kYXRhTGF5ZXIgPSB3aW5kb3cuZGF0YUxheWVyIHx8IFtdO1xuICAgICAgICAgICAgd2luZG93LmRhdGFMYXllci5wdXNoKHtcbiAgICAgICAgICAgICAgICAnZXZlbnQnOiAnc2lkZWJhcmN0YWNsaWNrJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbn0iLCJleHBvcnQgZnVuY3Rpb24gc3Vic2NyaWJlU2xpZGVJbigpIHtcblxuICAgIGlmICgkKCcuZHQtc3Vic2NyaWJlJykpIHtcbiAgICAgICAgdmFyIGhpZGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzdWJzU2xpZGUnKSkgaGlkZSA9IHRydWU7IC8vIGlmIHVzZXIgYWxyZWFkeSBzdWJzY3JpYmUgZG8gbm90IHNob3cgaXRcblxuICAgICAgICAkKHdpbmRvdykub24oJ3Njcm9sbCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKCQod2luZG93KS5zY3JvbGxUb3AoKSA+PSAzMDAwICYmICFoaWRlKSB7XG4gICAgICAgICAgICAgICAgJCgnLmR0LXN1YnNjcmliZScpLmFkZENsYXNzKCdhY3RpdmUnKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIWhpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgJCgnLmR0LXN1YnNjcmliZScpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cblxuICAgICAgICAkKCcuZHQtc3Vic2NyaWJlLWNsb3NlJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAkKCcuZHQtc3Vic2NyaWJlJykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICAgICAgICAgaGlkZSA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgIH1cblxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIHRvY01vYmlsZSgpIHtcbiAgICAvLyBGdW5jdGlvbiB0byBoYW5kbGUgVE9DIGRpc3BsYXkgZm9yIG1vYmlsZVxuICAgIGZ1bmN0aW9uIGhhbmRsZU1vYmlsZVRPQygpIHtcbiAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgMTExMikge1xuICAgICAgICAgICAgY29uc3QgdG9jX2NvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZXotdG9jLWNvbnRhaW5lclwiKTtcbiAgICAgICAgICAgIGlmICghdG9jX2NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdG9jX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwidG9jX2Nsb3NlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmV6LXRvYy1saXN0Jykuc3R5bGUgPSAnZGlzcGxheTogbm9uZSc7XG5cbiAgICAgICAgICAgIC8vIEV2ZW50IGRlbGVnYXRpb24gZm9yIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCAuZXotdG9jLWxpbmsgZWxlbWVudHNcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lei10b2MtdG9nZ2xlJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgLy8gUHJldmVudCBUT0MgaGFuZGxpbmcgaWYgdGhlIGNsaWNrIG9jY3VycmVkIHdpdGhpbiB0aGUgZGFyayBtb2RlIGNvbXBvbmVudFxuICAgICAgICAgICAgICAgIGlmIChlLnRhcmdldC5jbG9zZXN0KCcuZGFyay1tb2RlJykpIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHRvY1RvZ2dsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lei10b2MtdG9nZ2xlJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiAuZXotdG9jLWxpbmsgaXMgY2xpY2tlZFxuICAgICAgICAgICAgICAgIGlmIChlLnRhcmdldC5tYXRjaGVzKCcuZXotdG9jLWxpbmsnKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9jVG9nZ2xlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2NUb2dnbGUuY2xpY2soKTsgLy8gT3BlbiBUT0NcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIENsb3NlIFRPQyBpZiBjbGlja2VkIG91dHNpZGUgdGhlIFRPQyBjb250YWluZXJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICghZS50YXJnZXQuY2xvc2VzdCgnI2V6LXRvYy1jb250YWluZXInKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjbG9zZVRvZ2dsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy50b2NfY2xvc2UgLmV6LXRvYy10b2dnbGUnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNsb3NlVG9nZ2xlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9zZVRvZ2dsZS5jbGljaygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBSZXNldCB0aGUgVE9DIGRpc3BsYXkgc3R5bGUgd2hlbiBhYm92ZSB0aGUgdGhyZXNob2xkXG4gICAgICAgICAgICBjb25zdCB0b2NMaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmV6LXRvYy1saXN0Jyk7XG4gICAgICAgICAgICBpZiAodG9jTGlzdCkge1xuICAgICAgICAgICAgICAgIHRvY0xpc3Quc3R5bGUgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEluaXRpYWwgY2FsbCB0byBzZXQgdXAgVE9DIHZpc2liaWxpdHkgb24gbG9hZFxuICAgIGhhbmRsZU1vYmlsZVRPQygpO1xuXG4gICAgLy8gUmVzaXplIGV2ZW50IGxpc3RlbmVyIHRvIGhhbmRsZSBUT0MgdmlzaWJpbGl0eSBvbiBzY3JlZW4gcmVzaXplXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZU1vYmlsZVRPQyk7XG59IiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZVxuaW1wb3J0IHsgdV9lbGVtZW50RnJvbVRvcCB9IGZyb20gJy4uL3V0aWxzL3VfZWwtaW4tdmlld3BvcnQtZGV0ZWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9jU3RpY2t5KCkge1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsICgpID0+IHtcbiAgICAgICAgLy8gdV9lbGVtZW50RnJvbVRvcChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjZXotdG9jLWNvbnRhaW5lciArIConKSwgJy5jb3VudGVyLWhpZXJhcmNoeScsICdpcy1mbG9hdCcsIC0xMDAwLCAncGl4ZWxzJyk7IC8vIGFzIHRvcCBvZiBlbGVtZW50IGhpdHMgdG9wIG9mIHZpZXdwb3J0XG4gICAgICAgIHVfZWxlbWVudEZyb21Ub3AoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI2V6LXRvYy1jb250YWluZXIgKyAqJyksICcubS1yZWwtZmxvYXQnLCAncmV2LW0nLCAtMTAwMCwgJ3BpeGVscycpOyAvLyBhcyB0b3Agb2YgZWxlbWVudCBoaXRzIHRvcCBvZiB2aWV3cG9ydFxuICAgIH0sIGZhbHNlKTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB7XG4gICAgICAgIC8vIHVfZWxlbWVudEZyb21Ub3AoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI2V6LXRvYy1jb250YWluZXIgKyAqJyksICcuY291bnRlci1oaWVyYXJjaHknLCAnaXMtZmxvYXQnLCAtMTAwMCwgJ3BpeGVscycpOyAvLyBhcyB0b3Agb2YgZWxlbWVudCBoaXRzIHRvcCBvZiB2aWV3cG9ydFxuICAgICAgICB1X2VsZW1lbnRGcm9tVG9wKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNlei10b2MtY29udGFpbmVyICsgKicpLCAnLm0tcmVsLWZsb2F0JywgJ3Jldi1tJywgLTEwMDAsICdwaXhlbHMnKTsgLy8gYXMgdG9wIG9mIGVsZW1lbnQgaGl0cyB0b3Agb2Ygdmlld3BvcnRcbiAgICB9LCBmYWxzZSk7XG5cbiAgICBmdW5jdGlvbiB0b2NUb2dnbGVDbGFzc2VzKCkge1xuICAgICAgICBjb25zdCB0b2NDb2xsYXBzZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZXotdG9jLXRvZ2dsZScpO1xuICAgICAgICBjb25zdCB0b2NDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZXotdG9jLXRpdGxlLXRvZ2dsZScpO1xuXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lei10b2MtbGlzdCcpO1xuXG4gICAgICAgIGlmICh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLmRpc3BsYXkgPT09ICdibG9jaycpIHtcbiAgICAgICAgICAgIHRvY0NvbGxhcHNlci5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRvY0NvbGxhcHNlci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudCkgPT4ge1xuXG4gICAgICAgICAgICBmdW5jdGlvbiBtZXN1cmUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRhcmdldCkuZGlzcGxheSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvY0NvbGxhcHNlci5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcbiAgICAgICAgICAgICAgICAgICAgdG9jQ29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLXNob3duJyk7XG4gICAgICAgICAgICAgICAgICAgIHRvY0NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdpcy1oaWRlJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdG9jQ29sbGFwc2VyLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xuICAgICAgICAgICAgICAgICAgICB0b2NDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnaXMtc2hvd24nKTtcbiAgICAgICAgICAgICAgICAgICAgdG9jQ29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWhpZGUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQobWVzdXJlLCAzMDApO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoJCgnI2V6LXRvYy1jb250YWluZXInKS5oYXNDbGFzcygnaXMtc2hvd24nKSkge1xuICAgICAgICAgICAgJCgnLmV6LXRvYy10b2dnbGUnKS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB0b2NUb2dnbGVDbGFzc2VzKCk7XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBsaW5lYnJlYWstc3R5bGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIGVxZXFlcSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cbi8qKlxuICogRGFyayBNb2RlXG4qL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGFya01vZGUoKSB7XG5cbiAgICBjb25zdCBtb2RlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2RhcmstbW9kZScpO1xuICAgIGlmIChtb2RlID09PSAnb24nKSB7XG4gICAgICAkKCcuZGFyay1tb2RlJykuYWRkQ2xhc3MoJ29uJyk7XG4gICAgICAkKCdib2R5JykuYWRkQ2xhc3MoJ2Rhcmstb24nKTtcbiAgICAgICQoJy5kYXJrLW1vZGUnKS5hdHRyKCdhcmlhLXByZXNzZWQnLCB0cnVlKTtcbiAgICB9XG4gICAgJCgnLmRhcmstbW9kZScpLmNsaWNrKGZ1bmN0aW9uIGZ1bmN0aW9uTmFtZSgpIHtcbiAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKCdvbicpKSB7XG4gICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ29uJyk7XG4gICAgICAgICQoJ2JvZHknKS5yZW1vdmVDbGFzcygnZGFyay1vbicpO1xuICAgICAgICAkKHRoaXMpLmF0dHIoJ2FyaWEtcHJlc3NlZCcsIGZhbHNlKTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2RhcmstbW9kZScsICdvZmYnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ29uJyk7XG4gICAgICAgICQoJ2JvZHknKS5hZGRDbGFzcygnZGFyay1vbicpO1xuICAgICAgICAkKHRoaXMpLmF0dHIoJ2FyaWEtcHJlc3NlZCcsIHRydWUpO1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZGFyay1tb2RlJywgJ29uJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbn1cbiIsIi8vIEJsb2dcbi8vIGltcG9ydCB7IHRvZ2dsZURhcmtNb2RlIH0gZnJvbSAnLi9ibG9nL2Rhcmttb2RlJztcbmltcG9ydCBkYXJrTW9kZSBmcm9tICcuL2NvbXBvbmVudHMvZGFyay1tb2RlJztcbi8vIGltcG9ydCB0YWJsZU9mQ29udGVudHMgZnJvbSAnLi9ibG9nL3RvYy1oaWdobGlnaHQnO1xuaW1wb3J0IHRvY1N0aWNreSBmcm9tICcuL2Jsb2cvdG9jLXN0aWNreSc7XG5pbXBvcnQge3RvY01vYmlsZX0gZnJvbSAnLi9ibG9nL3RvYy1tb2JpbGUnO1xuaW1wb3J0IGJsb2dGaWx0ZXIgZnJvbSBcIi4vYmxvZy9ibG9nLWZpbHRlclwiO1xuLy8gaW1wb3J0IHtyZWxhdGVkUmVzb3VyY2VzfSBmcm9tIFwiLi9ibG9nL2Jsb2ctcmVzb3VyY2VzXCI7XG5pbXBvcnQgeyBzdWJzY3JpYmVTbGlkZUluIH0gZnJvbSBcIi4vYmxvZy9kdC1zdWJzY3JpYmVcIjtcbmltcG9ydCB7ZGF0YUxheWVyc30gZnJvbSBcIi4vYmxvZy9kYXRhLWxheWVyc1wiO1xuXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgKCkgPT4ge1xuXG5cblxuICAgIGRhcmtNb2RlKCk7XG5cbiAgICAvLyB0b2dnbGVEYXJrTW9kZSgnLmpzLWRhcmstbW9kZScpO1xuXG4gICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lei10b2MtdG9nZ2xlJykpIHtcbiAgICAgICAgdG9jU3RpY2t5KCk7XG4gICAgICAgIC8vIHRhYmxlT2ZDb250ZW50cygpO1xuICAgICAgICBcbiAgICB9XG4gICAgdG9jTW9iaWxlKCk7XG4gICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zaW5nbGUtcG9zdCcpKSB7XG4gICAgICAgIGRhdGFMYXllcnMoKTtcbiAgICB9XG5cbiAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLWFqYXgtYmxvY2snKSkge1xuICAgICAgICBibG9nRmlsdGVyKCk7XG4gICAgfVxuXG4gICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wb2xsX21vZHVsZScpKSB7XG5cbiAgICAgICAgLyogU2ltcGxlIHN0dXBpZCBidXQgd29ya3MgbG9sICovXG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwb2xscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5wb2xsX21vZHVsZScpO1xuICAgICAgICAgICAgY29uc3QgYnV0dG9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5iYXNpYy12b3RlLWJ1dHRvbicpO1xuXG4gICAgICAgICAgICBwb2xscy5mb3JFYWNoKChwb2xsKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBsZXQgcG9sbEJ0biA9IHBvbGwucXVlcnlTZWxlY3RvcignLmJhc2ljLXZvdGUtYnV0dG9uJyk7XG4gICAgICAgICAgICAgICAgbGV0IHBvbGxNc2cgPSBwb2xsLnF1ZXJ5U2VsZWN0b3IoJy5iYXNpYy1tZXNzYWdlJyk7XG5cbiAgICAgICAgICAgICAgICBwb2xsQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHBvbGwuY2xhc3NMaXN0LmFkZCgnaXMtc3VibWl0dGVkJyk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocG9sbE1zZy5jbGFzc0xpc3QuY29udGFpbnMoJ2Jhc2ljLXN1Y2Nlc3MnKSkge1xuICAgICAgICAgICAgICAgICAgICBwb2xsLmNsYXNzTGlzdC5hZGQoJ2lzLXN1Ym1pdHRlZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCAxMDApO1xuICAgIH1cblxuICAgIHN1YnNjcmliZVNsaWRlSW4oKTtcblxuICAgIC8vIHJlbGF0ZWRSZXNvdXJjZXMoKTtcblxuXG5cbn0pO1xuIiwiXG5jb25zdCB1X2hhc0NsYXNzID0gKGVsLCBjbHMpID0+IHtcbiAgICBpZiAoZWwuY2xhc3NOYW1lLm1hdGNoKCcoPzpefFxcXFxzKScgKyBjbHMgKyAnKD8hXFxcXFMpJykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuXG5jb25zdCB1X2FkZENsYXNzID0gKGVsLCBjbHMpID0+IHtcbiAgICBpZiAoIWVsLmNsYXNzTmFtZS5tYXRjaCgnKD86XnxcXFxccyknICsgY2xzICsgJyg/IVxcXFxTKScpKSB7XG4gICAgICAgIGVsLmNsYXNzTmFtZSArPSAnICcgKyBjbHM7XG4gICAgfVxufVxuXG5jb25zdCB1X2RlbENsYXNzID0gKGVsLCBjbHMpID0+IHtcbiAgICBlbC5jbGFzc05hbWUgPSBlbC5jbGFzc05hbWUucmVwbGFjZShuZXcgUmVnRXhwKCcoPzpefFxcXFxzKScgKyBjbHMgKyAnKD8hXFxcXFMpJyksICcnKTtcbn1cblxuZXhwb3J0IHtcbiAgICB1X2hhc0NsYXNzLFxuICAgIHVfYWRkQ2xhc3MsXG4gICAgdV9kZWxDbGFzc1xufSIsIi8qKlxuICogcGFyYW1zOiAgdHJpZ2dlciBlbGVtZW50LCB0YXJnZXQgZWxlbWVudCBjbGFzcywgY2xhc3NlcyB0byBhZGQgdG8gdGFyZ2V0IGVsZW1lbnQsIHRyaWdnZXIgZWxlbWVudCBkaXN0YW5jZSBmcm9tIHRvcCwgdW5pdCAoJ3BlcmNlbnQnIG9yICdwaXhlbHMnKVxuICogdXNhZ2U6ICAgZWxlbWVudEZyb21Ub3AoZWxlbVRyaWdnZXIsIGVsZW1UYXJnZXQsIGNsYXNzVG9BZGQsIGRpc3RhbmNlRnJvbVRvcCwgdW5pdCk7XG4gKlxuICogaHR0cDovL2Jsb2cuZm9md2ViZGVzaWduLmNvLnVrLzQxLWFkZC1jbGFzc2VzLXRvLWFuLWVsZW1lbnQtd2hlbi1zY3JvbGxlZC1pbnRvLXZpZXdwb3J0XG4gKi9cbmltcG9ydCB7XG4gICAgdV9hZGRDbGFzcyxcbiAgICB1X2hhc0NsYXNzLFxuICAgIHVfZGVsQ2xhc3Ncbn0gZnJvbSBcIi4vdV9jbGFzc2xpc3QtYWRkLXJlbW92ZVwiO1xuXG5jb25zdCB1X2VsZW1lbnRGcm9tVG9wID0gKGVsZW1UcmlnZ2VyLCBlbGVtVGFyZ2V0LCBjbGFzc1RvQWRkLCBkaXN0YW5jZUZyb21Ub3AsIHVuaXQpID0+IHtcbiAgICBsZXQgd2luWSA9IHdpbmRvdy5pbm5lckhlaWdodCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LFxuICAgICAgICBlbFRyaWdnZXJMZW5ndGggPSBlbGVtVHJpZ2dlci5sZW5ndGgsXG4gICAgICAgIGVsVGFyZ2V0TGVuZ3RoLCBkaXN0VG9wLCBkaXN0UGVyY2VudCwgZGlzdFBpeGVscywgZGlzdFVuaXQsIGVsVGFyZ2V0LCBpLCBqO1xuICAgIGZvciAoaSA9IDA7IGkgPCBlbFRyaWdnZXJMZW5ndGg7ICsraSkge1xuICAgICAgICBlbFRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZWxlbVRhcmdldCk7XG4gICAgICAgIGVsVGFyZ2V0TGVuZ3RoID0gZWxUYXJnZXQubGVuZ3RoO1xuICAgICAgICBkaXN0VG9wID0gZWxlbVRyaWdnZXJbaV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgICAgICBkaXN0UGVyY2VudCA9IE1hdGgucm91bmQoKGRpc3RUb3AgLyB3aW5ZKSAqIDEwMCk7XG4gICAgICAgIGRpc3RQaXhlbHMgPSBNYXRoLnJvdW5kKGRpc3RUb3ApO1xuICAgICAgICBkaXN0VW5pdCA9IHVuaXQgPT0gJ3BlcmNlbnQnID8gZGlzdFBlcmNlbnQgOiBkaXN0UGl4ZWxzO1xuICAgICAgICBpZiAoZGlzdFVuaXQgPD0gZGlzdGFuY2VGcm9tVG9wKSB7XG4gICAgICAgICAgICBpZiAoIXVfaGFzQ2xhc3MoZWxlbVRyaWdnZXJbaV0sIGVsZW1UYXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGVsVGFyZ2V0TGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF1X2hhc0NsYXNzKGVsVGFyZ2V0W2pdLCBjbGFzc1RvQWRkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdV9hZGRDbGFzcyhlbFRhcmdldFtqXSwgY2xhc3NUb0FkZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghdV9oYXNDbGFzcyhlbGVtVHJpZ2dlcltpXSwgY2xhc3NUb0FkZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdV9hZGRDbGFzcyhlbGVtVHJpZ2dlcltpXSwgY2xhc3NUb0FkZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdV9kZWxDbGFzcyhlbGVtVHJpZ2dlcltpXSwgY2xhc3NUb0FkZCk7XG4gICAgICAgICAgICBpZiAoIXVfaGFzQ2xhc3MoZWxlbVRyaWdnZXJbaV0sIGVsZW1UYXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGVsVGFyZ2V0TGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgdV9kZWxDbGFzcyhlbFRhcmdldFtqXSwgY2xhc3NUb0FkZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5jb25zdCB1X2lzRWxlbWVudElzSW5WaWV3ID0gKGVsKSA9PiB7XG4gICAgY29uc3Qgc2Nyb2xsID0gd2luZG93LnNjcm9sbFkgfHwgd2luZG93LnBhZ2VZT2Zmc2V0XG4gICAgY29uc3QgYm91bmRzVG9wID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgc2Nyb2xsXG5cbiAgICBjb25zdCB2aWV3cG9ydCA9IHtcbiAgICAgICAgdG9wOiBzY3JvbGwsXG4gICAgICAgIGJvdHRvbTogc2Nyb2xsICsgd2luZG93LmlubmVySGVpZ2h0LFxuICAgIH1cblxuICAgIGNvbnN0IGJvdW5kcyA9IHtcbiAgICAgICAgdG9wOiBib3VuZHNUb3AsXG4gICAgICAgIGJvdHRvbTogYm91bmRzVG9wICsgZWwuY2xpZW50SGVpZ2h0LFxuICAgIH1cblxuICAgIHJldHVybiAoIGJvdW5kcy5ib3R0b20gPj0gdmlld3BvcnQudG9wICYmIGJvdW5kcy5ib3R0b20gPD0gdmlld3BvcnQuYm90dG9tIClcbiAgICAgICAgfHwgKCBib3VuZHMudG9wIDw9IHZpZXdwb3J0LmJvdHRvbSAmJiBib3VuZHMudG9wID49IHZpZXdwb3J0LnRvcCApO1xufVxuXG5leHBvcnQge1xuICAgIHVfZWxlbWVudEZyb21Ub3AsXG4gICAgdV9pc0VsZW1lbnRJc0luVmlld1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBqUXVlcnk7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGlmIChjYWNoZWRNb2R1bGUuZXJyb3IgIT09IHVuZGVmaW5lZCkgdGhyb3cgY2FjaGVkTW9kdWxlLmVycm9yO1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHR0cnkge1xuXHRcdHZhciBleGVjT3B0aW9ucyA9IHsgaWQ6IG1vZHVsZUlkLCBtb2R1bGU6IG1vZHVsZSwgZmFjdG9yeTogX193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0sIHJlcXVpcmU6IF9fd2VicGFja19yZXF1aXJlX18gfTtcblx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkuZm9yRWFjaChmdW5jdGlvbihoYW5kbGVyKSB7IGhhbmRsZXIoZXhlY09wdGlvbnMpOyB9KTtcblx0XHRtb2R1bGUgPSBleGVjT3B0aW9ucy5tb2R1bGU7XG5cdFx0ZXhlY09wdGlvbnMuZmFjdG9yeS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBleGVjT3B0aW9ucy5yZXF1aXJlKTtcblx0fSBjYXRjaChlKSB7XG5cdFx0bW9kdWxlLmVycm9yID0gZTtcblx0XHR0aHJvdyBlO1xuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4vLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuX193ZWJwYWNrX3JlcXVpcmVfXy5tID0gX193ZWJwYWNrX21vZHVsZXNfXztcblxuLy8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbl9fd2VicGFja19yZXF1aXJlX18uYyA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfXztcblxuLy8gZXhwb3NlIHRoZSBtb2R1bGUgZXhlY3V0aW9uIGludGVyY2VwdG9yXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBbXTtcblxuIiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgZGVmaW5pdGlvbikge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCIvLyBUaGlzIGZ1bmN0aW9uIGFsbG93IHRvIHJlZmVyZW5jZSBhbGwgY2h1bmtzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmh1ID0gZnVuY3Rpb24oY2h1bmtJZCkge1xuXHQvLyByZXR1cm4gdXJsIGZvciBmaWxlbmFtZXMgYmFzZWQgb24gdGVtcGxhdGVcblx0cmV0dXJuIFwiXCIgKyBjaHVua0lkICsgXCIuXCIgKyBfX3dlYnBhY2tfcmVxdWlyZV9fLmgoKSArIFwiLmhvdC11cGRhdGUuanNcIjtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5obXJGID0gZnVuY3Rpb24oKSB7IHJldHVybiBcImFwcF9ibG9nLlwiICsgX193ZWJwYWNrX3JlcXVpcmVfXy5oKCkgKyBcIi5ob3QtdXBkYXRlLmpzb25cIjsgfTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmggPSBmdW5jdGlvbigpIHsgcmV0dXJuIFwiYjliYmM2MzAzZjcxZjIzMmZiNzdcIjsgfSIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iaiwgcHJvcCkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7IH0iLCJ2YXIgaW5Qcm9ncmVzcyA9IHt9O1xuLy8gZGF0YS13ZWJwYWNrIGlzIG5vdCB1c2VkIGFzIGJ1aWxkIGhhcyBubyB1bmlxdWVOYW1lXG4vLyBsb2FkU2NyaXB0IGZ1bmN0aW9uIHRvIGxvYWQgYSBzY3JpcHQgdmlhIHNjcmlwdCB0YWdcbl9fd2VicGFja19yZXF1aXJlX18ubCA9IGZ1bmN0aW9uKHVybCwgZG9uZSwga2V5LCBjaHVua0lkKSB7XG5cdGlmKGluUHJvZ3Jlc3NbdXJsXSkgeyBpblByb2dyZXNzW3VybF0ucHVzaChkb25lKTsgcmV0dXJuOyB9XG5cdHZhciBzY3JpcHQsIG5lZWRBdHRhY2g7XG5cdGlmKGtleSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKTtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgc2NyaXB0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIHMgPSBzY3JpcHRzW2ldO1xuXHRcdFx0aWYocy5nZXRBdHRyaWJ1dGUoXCJzcmNcIikgPT0gdXJsKSB7IHNjcmlwdCA9IHM7IGJyZWFrOyB9XG5cdFx0fVxuXHR9XG5cdGlmKCFzY3JpcHQpIHtcblx0XHRuZWVkQXR0YWNoID0gdHJ1ZTtcblx0XHRzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcblxuXHRcdHNjcmlwdC5jaGFyc2V0ID0gJ3V0Zi04Jztcblx0XHRzY3JpcHQudGltZW91dCA9IDEyMDtcblx0XHRpZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5uYykge1xuXHRcdFx0c2NyaXB0LnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsIF9fd2VicGFja19yZXF1aXJlX18ubmMpO1xuXHRcdH1cblxuXG5cdFx0c2NyaXB0LnNyYyA9IHVybDtcblx0fVxuXHRpblByb2dyZXNzW3VybF0gPSBbZG9uZV07XG5cdHZhciBvblNjcmlwdENvbXBsZXRlID0gZnVuY3Rpb24ocHJldiwgZXZlbnQpIHtcblx0XHQvLyBhdm9pZCBtZW0gbGVha3MgaW4gSUUuXG5cdFx0c2NyaXB0Lm9uZXJyb3IgPSBzY3JpcHQub25sb2FkID0gbnVsbDtcblx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0dmFyIGRvbmVGbnMgPSBpblByb2dyZXNzW3VybF07XG5cdFx0ZGVsZXRlIGluUHJvZ3Jlc3NbdXJsXTtcblx0XHRzY3JpcHQucGFyZW50Tm9kZSAmJiBzY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHQpO1xuXHRcdGRvbmVGbnMgJiYgZG9uZUZucy5mb3JFYWNoKGZ1bmN0aW9uKGZuKSB7IHJldHVybiBmbihldmVudCk7IH0pO1xuXHRcdGlmKHByZXYpIHJldHVybiBwcmV2KGV2ZW50KTtcblx0fVxuXHR2YXIgdGltZW91dCA9IHNldFRpbWVvdXQob25TY3JpcHRDb21wbGV0ZS5iaW5kKG51bGwsIHVuZGVmaW5lZCwgeyB0eXBlOiAndGltZW91dCcsIHRhcmdldDogc2NyaXB0IH0pLCAxMjAwMDApO1xuXHRzY3JpcHQub25lcnJvciA9IG9uU2NyaXB0Q29tcGxldGUuYmluZChudWxsLCBzY3JpcHQub25lcnJvcik7XG5cdHNjcmlwdC5vbmxvYWQgPSBvblNjcmlwdENvbXBsZXRlLmJpbmQobnVsbCwgc2NyaXB0Lm9ubG9hZCk7XG5cdG5lZWRBdHRhY2ggJiYgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xufTsiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsInZhciBjdXJyZW50TW9kdWxlRGF0YSA9IHt9O1xudmFyIGluc3RhbGxlZE1vZHVsZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmM7XG5cbi8vIG1vZHVsZSBhbmQgcmVxdWlyZSBjcmVhdGlvblxudmFyIGN1cnJlbnRDaGlsZE1vZHVsZTtcbnZhciBjdXJyZW50UGFyZW50cyA9IFtdO1xuXG4vLyBzdGF0dXNcbnZhciByZWdpc3RlcmVkU3RhdHVzSGFuZGxlcnMgPSBbXTtcbnZhciBjdXJyZW50U3RhdHVzID0gXCJpZGxlXCI7XG5cbi8vIHdoaWxlIGRvd25sb2FkaW5nXG52YXIgYmxvY2tpbmdQcm9taXNlcyA9IDA7XG52YXIgYmxvY2tpbmdQcm9taXNlc1dhaXRpbmcgPSBbXTtcblxuLy8gVGhlIHVwZGF0ZSBpbmZvXG52YXIgY3VycmVudFVwZGF0ZUFwcGx5SGFuZGxlcnM7XG52YXIgcXVldWVkSW52YWxpZGF0ZWRNb2R1bGVzO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmhtckQgPSBjdXJyZW50TW9kdWxlRGF0YTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXy5pLnB1c2goZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0dmFyIG1vZHVsZSA9IG9wdGlvbnMubW9kdWxlO1xuXHR2YXIgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUob3B0aW9ucy5yZXF1aXJlLCBvcHRpb25zLmlkKTtcblx0bW9kdWxlLmhvdCA9IGNyZWF0ZU1vZHVsZUhvdE9iamVjdChvcHRpb25zLmlkLCBtb2R1bGUpO1xuXHRtb2R1bGUucGFyZW50cyA9IGN1cnJlbnRQYXJlbnRzO1xuXHRtb2R1bGUuY2hpbGRyZW4gPSBbXTtcblx0Y3VycmVudFBhcmVudHMgPSBbXTtcblx0b3B0aW9ucy5yZXF1aXJlID0gcmVxdWlyZTtcbn0pO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmhtckMgPSB7fTtcbl9fd2VicGFja19yZXF1aXJlX18uaG1ySSA9IHt9O1xuXG5mdW5jdGlvbiBjcmVhdGVSZXF1aXJlKHJlcXVpcmUsIG1vZHVsZUlkKSB7XG5cdHZhciBtZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdO1xuXHRpZiAoIW1lKSByZXR1cm4gcmVxdWlyZTtcblx0dmFyIGZuID0gZnVuY3Rpb24gKHJlcXVlc3QpIHtcblx0XHRpZiAobWUuaG90LmFjdGl2ZSkge1xuXHRcdFx0aWYgKGluc3RhbGxlZE1vZHVsZXNbcmVxdWVzdF0pIHtcblx0XHRcdFx0dmFyIHBhcmVudHMgPSBpbnN0YWxsZWRNb2R1bGVzW3JlcXVlc3RdLnBhcmVudHM7XG5cdFx0XHRcdGlmIChwYXJlbnRzLmluZGV4T2YobW9kdWxlSWQpID09PSAtMSkge1xuXHRcdFx0XHRcdHBhcmVudHMucHVzaChtb2R1bGVJZCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGN1cnJlbnRQYXJlbnRzID0gW21vZHVsZUlkXTtcblx0XHRcdFx0Y3VycmVudENoaWxkTW9kdWxlID0gcmVxdWVzdDtcblx0XHRcdH1cblx0XHRcdGlmIChtZS5jaGlsZHJlbi5pbmRleE9mKHJlcXVlc3QpID09PSAtMSkge1xuXHRcdFx0XHRtZS5jaGlsZHJlbi5wdXNoKHJlcXVlc3QpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zb2xlLndhcm4oXG5cdFx0XHRcdFwiW0hNUl0gdW5leHBlY3RlZCByZXF1aXJlKFwiICtcblx0XHRcdFx0XHRyZXF1ZXN0ICtcblx0XHRcdFx0XHRcIikgZnJvbSBkaXNwb3NlZCBtb2R1bGUgXCIgK1xuXHRcdFx0XHRcdG1vZHVsZUlkXG5cdFx0XHQpO1xuXHRcdFx0Y3VycmVudFBhcmVudHMgPSBbXTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlcXVpcmUocmVxdWVzdCk7XG5cdH07XG5cdHZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiAobmFtZSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiByZXF1aXJlW25hbWVdO1xuXHRcdFx0fSxcblx0XHRcdHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRcdHJlcXVpcmVbbmFtZV0gPSB2YWx1ZTtcblx0XHRcdH1cblx0XHR9O1xuXHR9O1xuXHRmb3IgKHZhciBuYW1lIGluIHJlcXVpcmUpIHtcblx0XHRpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlcXVpcmUsIG5hbWUpICYmIG5hbWUgIT09IFwiZVwiKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sIG5hbWUsIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcihuYW1lKSk7XG5cdFx0fVxuXHR9XG5cdGZuLmUgPSBmdW5jdGlvbiAoY2h1bmtJZCwgZmV0Y2hQcmlvcml0eSkge1xuXHRcdHJldHVybiB0cmFja0Jsb2NraW5nUHJvbWlzZShyZXF1aXJlLmUoY2h1bmtJZCwgZmV0Y2hQcmlvcml0eSkpO1xuXHR9O1xuXHRyZXR1cm4gZm47XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU1vZHVsZUhvdE9iamVjdChtb2R1bGVJZCwgbWUpIHtcblx0dmFyIF9tYWluID0gY3VycmVudENoaWxkTW9kdWxlICE9PSBtb2R1bGVJZDtcblx0dmFyIGhvdCA9IHtcblx0XHQvLyBwcml2YXRlIHN0dWZmXG5cdFx0X2FjY2VwdGVkRGVwZW5kZW5jaWVzOiB7fSxcblx0XHRfYWNjZXB0ZWRFcnJvckhhbmRsZXJzOiB7fSxcblx0XHRfZGVjbGluZWREZXBlbmRlbmNpZXM6IHt9LFxuXHRcdF9zZWxmQWNjZXB0ZWQ6IGZhbHNlLFxuXHRcdF9zZWxmRGVjbGluZWQ6IGZhbHNlLFxuXHRcdF9zZWxmSW52YWxpZGF0ZWQ6IGZhbHNlLFxuXHRcdF9kaXNwb3NlSGFuZGxlcnM6IFtdLFxuXHRcdF9tYWluOiBfbWFpbixcblx0XHRfcmVxdWlyZVNlbGY6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGN1cnJlbnRQYXJlbnRzID0gbWUucGFyZW50cy5zbGljZSgpO1xuXHRcdFx0Y3VycmVudENoaWxkTW9kdWxlID0gX21haW4gPyB1bmRlZmluZWQgOiBtb2R1bGVJZDtcblx0XHRcdF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpO1xuXHRcdH0sXG5cblx0XHQvLyBNb2R1bGUgQVBJXG5cdFx0YWN0aXZlOiB0cnVlLFxuXHRcdGFjY2VwdDogZnVuY3Rpb24gKGRlcCwgY2FsbGJhY2ssIGVycm9ySGFuZGxlcikge1xuXHRcdFx0aWYgKGRlcCA9PT0gdW5kZWZpbmVkKSBob3QuX3NlbGZBY2NlcHRlZCA9IHRydWU7XG5cdFx0XHRlbHNlIGlmICh0eXBlb2YgZGVwID09PSBcImZ1bmN0aW9uXCIpIGhvdC5fc2VsZkFjY2VwdGVkID0gZGVwO1xuXHRcdFx0ZWxzZSBpZiAodHlwZW9mIGRlcCA9PT0gXCJvYmplY3RcIiAmJiBkZXAgIT09IG51bGwpIHtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkZXAubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRob3QuX2FjY2VwdGVkRGVwZW5kZW5jaWVzW2RlcFtpXV0gPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcblx0XHRcdFx0XHRob3QuX2FjY2VwdGVkRXJyb3JIYW5kbGVyc1tkZXBbaV1dID0gZXJyb3JIYW5kbGVyO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRob3QuX2FjY2VwdGVkRGVwZW5kZW5jaWVzW2RlcF0gPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcblx0XHRcdFx0aG90Ll9hY2NlcHRlZEVycm9ySGFuZGxlcnNbZGVwXSA9IGVycm9ySGFuZGxlcjtcblx0XHRcdH1cblx0XHR9LFxuXHRcdGRlY2xpbmU6IGZ1bmN0aW9uIChkZXApIHtcblx0XHRcdGlmIChkZXAgPT09IHVuZGVmaW5lZCkgaG90Ll9zZWxmRGVjbGluZWQgPSB0cnVlO1xuXHRcdFx0ZWxzZSBpZiAodHlwZW9mIGRlcCA9PT0gXCJvYmplY3RcIiAmJiBkZXAgIT09IG51bGwpXG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZGVwLmxlbmd0aDsgaSsrKVxuXHRcdFx0XHRcdGhvdC5fZGVjbGluZWREZXBlbmRlbmNpZXNbZGVwW2ldXSA9IHRydWU7XG5cdFx0XHRlbHNlIGhvdC5fZGVjbGluZWREZXBlbmRlbmNpZXNbZGVwXSA9IHRydWU7XG5cdFx0fSxcblx0XHRkaXNwb3NlOiBmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0XHRcdGhvdC5fZGlzcG9zZUhhbmRsZXJzLnB1c2goY2FsbGJhY2spO1xuXHRcdH0sXG5cdFx0YWRkRGlzcG9zZUhhbmRsZXI6IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHRcdFx0aG90Ll9kaXNwb3NlSGFuZGxlcnMucHVzaChjYWxsYmFjayk7XG5cdFx0fSxcblx0XHRyZW1vdmVEaXNwb3NlSGFuZGxlcjogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdFx0XHR2YXIgaWR4ID0gaG90Ll9kaXNwb3NlSGFuZGxlcnMuaW5kZXhPZihjYWxsYmFjayk7XG5cdFx0XHRpZiAoaWR4ID49IDApIGhvdC5fZGlzcG9zZUhhbmRsZXJzLnNwbGljZShpZHgsIDEpO1xuXHRcdH0sXG5cdFx0aW52YWxpZGF0ZTogZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhpcy5fc2VsZkludmFsaWRhdGVkID0gdHJ1ZTtcblx0XHRcdHN3aXRjaCAoY3VycmVudFN0YXR1cykge1xuXHRcdFx0XHRjYXNlIFwiaWRsZVwiOlxuXHRcdFx0XHRcdGN1cnJlbnRVcGRhdGVBcHBseUhhbmRsZXJzID0gW107XG5cdFx0XHRcdFx0T2JqZWN0LmtleXMoX193ZWJwYWNrX3JlcXVpcmVfXy5obXJJKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18uaG1ySVtrZXldKFxuXHRcdFx0XHRcdFx0XHRtb2R1bGVJZCxcblx0XHRcdFx0XHRcdFx0Y3VycmVudFVwZGF0ZUFwcGx5SGFuZGxlcnNcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0c2V0U3RhdHVzKFwicmVhZHlcIik7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJyZWFkeVwiOlxuXHRcdFx0XHRcdE9iamVjdC5rZXlzKF9fd2VicGFja19yZXF1aXJlX18uaG1ySSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0XHRcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmhtcklba2V5XShcblx0XHRcdFx0XHRcdFx0bW9kdWxlSWQsXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRVcGRhdGVBcHBseUhhbmRsZXJzXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwicHJlcGFyZVwiOlxuXHRcdFx0XHRjYXNlIFwiY2hlY2tcIjpcblx0XHRcdFx0Y2FzZSBcImRpc3Bvc2VcIjpcblx0XHRcdFx0Y2FzZSBcImFwcGx5XCI6XG5cdFx0XHRcdFx0KHF1ZXVlZEludmFsaWRhdGVkTW9kdWxlcyA9IHF1ZXVlZEludmFsaWRhdGVkTW9kdWxlcyB8fCBbXSkucHVzaChcblx0XHRcdFx0XHRcdG1vZHVsZUlkXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHQvLyBpZ25vcmUgcmVxdWVzdHMgaW4gZXJyb3Igc3RhdGVzXG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8vIE1hbmFnZW1lbnQgQVBJXG5cdFx0Y2hlY2s6IGhvdENoZWNrLFxuXHRcdGFwcGx5OiBob3RBcHBseSxcblx0XHRzdGF0dXM6IGZ1bmN0aW9uIChsKSB7XG5cdFx0XHRpZiAoIWwpIHJldHVybiBjdXJyZW50U3RhdHVzO1xuXHRcdFx0cmVnaXN0ZXJlZFN0YXR1c0hhbmRsZXJzLnB1c2gobCk7XG5cdFx0fSxcblx0XHRhZGRTdGF0dXNIYW5kbGVyOiBmdW5jdGlvbiAobCkge1xuXHRcdFx0cmVnaXN0ZXJlZFN0YXR1c0hhbmRsZXJzLnB1c2gobCk7XG5cdFx0fSxcblx0XHRyZW1vdmVTdGF0dXNIYW5kbGVyOiBmdW5jdGlvbiAobCkge1xuXHRcdFx0dmFyIGlkeCA9IHJlZ2lzdGVyZWRTdGF0dXNIYW5kbGVycy5pbmRleE9mKGwpO1xuXHRcdFx0aWYgKGlkeCA+PSAwKSByZWdpc3RlcmVkU3RhdHVzSGFuZGxlcnMuc3BsaWNlKGlkeCwgMSk7XG5cdFx0fSxcblxuXHRcdC8vaW5oZXJpdCBmcm9tIHByZXZpb3VzIGRpc3Bvc2UgY2FsbFxuXHRcdGRhdGE6IGN1cnJlbnRNb2R1bGVEYXRhW21vZHVsZUlkXVxuXHR9O1xuXHRjdXJyZW50Q2hpbGRNb2R1bGUgPSB1bmRlZmluZWQ7XG5cdHJldHVybiBob3Q7XG59XG5cbmZ1bmN0aW9uIHNldFN0YXR1cyhuZXdTdGF0dXMpIHtcblx0Y3VycmVudFN0YXR1cyA9IG5ld1N0YXR1cztcblx0dmFyIHJlc3VsdHMgPSBbXTtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHJlZ2lzdGVyZWRTdGF0dXNIYW5kbGVycy5sZW5ndGg7IGkrKylcblx0XHRyZXN1bHRzW2ldID0gcmVnaXN0ZXJlZFN0YXR1c0hhbmRsZXJzW2ldLmNhbGwobnVsbCwgbmV3U3RhdHVzKTtcblxuXHRyZXR1cm4gUHJvbWlzZS5hbGwocmVzdWx0cykudGhlbihmdW5jdGlvbiAoKSB7fSk7XG59XG5cbmZ1bmN0aW9uIHVuYmxvY2soKSB7XG5cdGlmICgtLWJsb2NraW5nUHJvbWlzZXMgPT09IDApIHtcblx0XHRzZXRTdGF0dXMoXCJyZWFkeVwiKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdGlmIChibG9ja2luZ1Byb21pc2VzID09PSAwKSB7XG5cdFx0XHRcdHZhciBsaXN0ID0gYmxvY2tpbmdQcm9taXNlc1dhaXRpbmc7XG5cdFx0XHRcdGJsb2NraW5nUHJvbWlzZXNXYWl0aW5nID0gW107XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGxpc3RbaV0oKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHRyYWNrQmxvY2tpbmdQcm9taXNlKHByb21pc2UpIHtcblx0c3dpdGNoIChjdXJyZW50U3RhdHVzKSB7XG5cdFx0Y2FzZSBcInJlYWR5XCI6XG5cdFx0XHRzZXRTdGF0dXMoXCJwcmVwYXJlXCIpO1xuXHRcdC8qIGZhbGx0aHJvdWdoICovXG5cdFx0Y2FzZSBcInByZXBhcmVcIjpcblx0XHRcdGJsb2NraW5nUHJvbWlzZXMrKztcblx0XHRcdHByb21pc2UudGhlbih1bmJsb2NrLCB1bmJsb2NrKTtcblx0XHRcdHJldHVybiBwcm9taXNlO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gcHJvbWlzZTtcblx0fVxufVxuXG5mdW5jdGlvbiB3YWl0Rm9yQmxvY2tpbmdQcm9taXNlcyhmbikge1xuXHRpZiAoYmxvY2tpbmdQcm9taXNlcyA9PT0gMCkgcmV0dXJuIGZuKCk7XG5cdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdGJsb2NraW5nUHJvbWlzZXNXYWl0aW5nLnB1c2goZnVuY3Rpb24gKCkge1xuXHRcdFx0cmVzb2x2ZShmbigpKTtcblx0XHR9KTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGhvdENoZWNrKGFwcGx5T25VcGRhdGUpIHtcblx0aWYgKGN1cnJlbnRTdGF0dXMgIT09IFwiaWRsZVwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiY2hlY2soKSBpcyBvbmx5IGFsbG93ZWQgaW4gaWRsZSBzdGF0dXNcIik7XG5cdH1cblx0cmV0dXJuIHNldFN0YXR1cyhcImNoZWNrXCIpXG5cdFx0LnRoZW4oX193ZWJwYWNrX3JlcXVpcmVfXy5obXJNKVxuXHRcdC50aGVuKGZ1bmN0aW9uICh1cGRhdGUpIHtcblx0XHRcdGlmICghdXBkYXRlKSB7XG5cdFx0XHRcdHJldHVybiBzZXRTdGF0dXMoYXBwbHlJbnZhbGlkYXRlZE1vZHVsZXMoKSA/IFwicmVhZHlcIiA6IFwiaWRsZVwiKS50aGVuKFxuXHRcdFx0XHRcdGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNldFN0YXR1cyhcInByZXBhcmVcIikudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHZhciB1cGRhdGVkTW9kdWxlcyA9IFtdO1xuXHRcdFx0XHRjdXJyZW50VXBkYXRlQXBwbHlIYW5kbGVycyA9IFtdO1xuXG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbChcblx0XHRcdFx0XHRPYmplY3Qua2V5cyhfX3dlYnBhY2tfcmVxdWlyZV9fLmhtckMpLnJlZHVjZShmdW5jdGlvbiAoXG5cdFx0XHRcdFx0XHRwcm9taXNlcyxcblx0XHRcdFx0XHRcdGtleVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5obXJDW2tleV0oXG5cdFx0XHRcdFx0XHRcdHVwZGF0ZS5jLFxuXHRcdFx0XHRcdFx0XHR1cGRhdGUucixcblx0XHRcdFx0XHRcdFx0dXBkYXRlLm0sXG5cdFx0XHRcdFx0XHRcdHByb21pc2VzLFxuXHRcdFx0XHRcdFx0XHRjdXJyZW50VXBkYXRlQXBwbHlIYW5kbGVycyxcblx0XHRcdFx0XHRcdFx0dXBkYXRlZE1vZHVsZXNcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcHJvbWlzZXM7XG5cdFx0XHRcdFx0fSwgW10pXG5cdFx0XHRcdCkudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHdhaXRGb3JCbG9ja2luZ1Byb21pc2VzKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGlmIChhcHBseU9uVXBkYXRlKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBpbnRlcm5hbEFwcGx5KGFwcGx5T25VcGRhdGUpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHNldFN0YXR1cyhcInJlYWR5XCIpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB1cGRhdGVkTW9kdWxlcztcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG59XG5cbmZ1bmN0aW9uIGhvdEFwcGx5KG9wdGlvbnMpIHtcblx0aWYgKGN1cnJlbnRTdGF0dXMgIT09IFwicmVhZHlcIikge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XCJhcHBseSgpIGlzIG9ubHkgYWxsb3dlZCBpbiByZWFkeSBzdGF0dXMgKHN0YXRlOiBcIiArXG5cdFx0XHRcdFx0Y3VycmVudFN0YXR1cyArXG5cdFx0XHRcdFx0XCIpXCJcblx0XHRcdCk7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGludGVybmFsQXBwbHkob3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIGludGVybmFsQXBwbHkob3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRhcHBseUludmFsaWRhdGVkTW9kdWxlcygpO1xuXG5cdHZhciByZXN1bHRzID0gY3VycmVudFVwZGF0ZUFwcGx5SGFuZGxlcnMubWFwKGZ1bmN0aW9uIChoYW5kbGVyKSB7XG5cdFx0cmV0dXJuIGhhbmRsZXIob3B0aW9ucyk7XG5cdH0pO1xuXHRjdXJyZW50VXBkYXRlQXBwbHlIYW5kbGVycyA9IHVuZGVmaW5lZDtcblxuXHR2YXIgZXJyb3JzID0gcmVzdWx0c1xuXHRcdC5tYXAoZnVuY3Rpb24gKHIpIHtcblx0XHRcdHJldHVybiByLmVycm9yO1xuXHRcdH0pXG5cdFx0LmZpbHRlcihCb29sZWFuKTtcblxuXHRpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gc2V0U3RhdHVzKFwiYWJvcnRcIikudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHR0aHJvdyBlcnJvcnNbMF07XG5cdFx0fSk7XG5cdH1cblxuXHQvLyBOb3cgaW4gXCJkaXNwb3NlXCIgcGhhc2Vcblx0dmFyIGRpc3Bvc2VQcm9taXNlID0gc2V0U3RhdHVzKFwiZGlzcG9zZVwiKTtcblxuXHRyZXN1bHRzLmZvckVhY2goZnVuY3Rpb24gKHJlc3VsdCkge1xuXHRcdGlmIChyZXN1bHQuZGlzcG9zZSkgcmVzdWx0LmRpc3Bvc2UoKTtcblx0fSk7XG5cblx0Ly8gTm93IGluIFwiYXBwbHlcIiBwaGFzZVxuXHR2YXIgYXBwbHlQcm9taXNlID0gc2V0U3RhdHVzKFwiYXBwbHlcIik7XG5cblx0dmFyIGVycm9yO1xuXHR2YXIgcmVwb3J0RXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG5cdFx0aWYgKCFlcnJvcikgZXJyb3IgPSBlcnI7XG5cdH07XG5cblx0dmFyIG91dGRhdGVkTW9kdWxlcyA9IFtdO1xuXHRyZXN1bHRzLmZvckVhY2goZnVuY3Rpb24gKHJlc3VsdCkge1xuXHRcdGlmIChyZXN1bHQuYXBwbHkpIHtcblx0XHRcdHZhciBtb2R1bGVzID0gcmVzdWx0LmFwcGx5KHJlcG9ydEVycm9yKTtcblx0XHRcdGlmIChtb2R1bGVzKSB7XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbW9kdWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdG91dGRhdGVkTW9kdWxlcy5wdXNoKG1vZHVsZXNbaV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gUHJvbWlzZS5hbGwoW2Rpc3Bvc2VQcm9taXNlLCBhcHBseVByb21pc2VdKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHQvLyBoYW5kbGUgZXJyb3JzIGluIGFjY2VwdCBoYW5kbGVycyBhbmQgc2VsZiBhY2NlcHRlZCBtb2R1bGUgbG9hZFxuXHRcdGlmIChlcnJvcikge1xuXHRcdFx0cmV0dXJuIHNldFN0YXR1cyhcImZhaWxcIikudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHRocm93IGVycm9yO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKHF1ZXVlZEludmFsaWRhdGVkTW9kdWxlcykge1xuXHRcdFx0cmV0dXJuIGludGVybmFsQXBwbHkob3B0aW9ucykudGhlbihmdW5jdGlvbiAobGlzdCkge1xuXHRcdFx0XHRvdXRkYXRlZE1vZHVsZXMuZm9yRWFjaChmdW5jdGlvbiAobW9kdWxlSWQpIHtcblx0XHRcdFx0XHRpZiAobGlzdC5pbmRleE9mKG1vZHVsZUlkKSA8IDApIGxpc3QucHVzaChtb2R1bGVJZCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gbGlzdDtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBzZXRTdGF0dXMoXCJpZGxlXCIpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIG91dGRhdGVkTW9kdWxlcztcblx0XHR9KTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGFwcGx5SW52YWxpZGF0ZWRNb2R1bGVzKCkge1xuXHRpZiAocXVldWVkSW52YWxpZGF0ZWRNb2R1bGVzKSB7XG5cdFx0aWYgKCFjdXJyZW50VXBkYXRlQXBwbHlIYW5kbGVycykgY3VycmVudFVwZGF0ZUFwcGx5SGFuZGxlcnMgPSBbXTtcblx0XHRPYmplY3Qua2V5cyhfX3dlYnBhY2tfcmVxdWlyZV9fLmhtckkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0cXVldWVkSW52YWxpZGF0ZWRNb2R1bGVzLmZvckVhY2goZnVuY3Rpb24gKG1vZHVsZUlkKSB7XG5cdFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18uaG1ySVtrZXldKFxuXHRcdFx0XHRcdG1vZHVsZUlkLFxuXHRcdFx0XHRcdGN1cnJlbnRVcGRhdGVBcHBseUhhbmRsZXJzXG5cdFx0XHRcdCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHRxdWV1ZWRJbnZhbGlkYXRlZE1vZHVsZXMgPSB1bmRlZmluZWQ7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn0iLCJfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcImh0dHBzOi8vZGlnaXRhbHNpbGtuZXc6ODg4OC93cC1jb250ZW50L3RoZW1lcy9kaWdpdGFsc2lsay9hc3NldHMvanMvXCI7IiwiLy8gbm8gYmFzZVVSSVxuXG4vLyBvYmplY3QgdG8gc3RvcmUgbG9hZGVkIGFuZCBsb2FkaW5nIGNodW5rc1xuLy8gdW5kZWZpbmVkID0gY2h1bmsgbm90IGxvYWRlZCwgbnVsbCA9IGNodW5rIHByZWxvYWRlZC9wcmVmZXRjaGVkXG4vLyBbcmVzb2x2ZSwgcmVqZWN0LCBQcm9taXNlXSA9IGNodW5rIGxvYWRpbmcsIDAgPSBjaHVuayBsb2FkZWRcbnZhciBpbnN0YWxsZWRDaHVua3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmhtclNfanNvbnAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmhtclNfanNvbnAgfHwge1xuXHRcImFwcF9ibG9nXCI6IDBcbn07XG5cbi8vIG5vIGNodW5rIG9uIGRlbWFuZCBsb2FkaW5nXG5cbi8vIG5vIHByZWZldGNoaW5nXG5cbi8vIG5vIHByZWxvYWRlZFxuXG52YXIgY3VycmVudFVwZGF0ZWRNb2R1bGVzTGlzdDtcbnZhciB3YWl0aW5nVXBkYXRlUmVzb2x2ZXMgPSB7fTtcbmZ1bmN0aW9uIGxvYWRVcGRhdGVDaHVuayhjaHVua0lkLCB1cGRhdGVkTW9kdWxlc0xpc3QpIHtcblx0Y3VycmVudFVwZGF0ZWRNb2R1bGVzTGlzdCA9IHVwZGF0ZWRNb2R1bGVzTGlzdDtcblx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdHdhaXRpbmdVcGRhdGVSZXNvbHZlc1tjaHVua0lkXSA9IHJlc29sdmU7XG5cdFx0Ly8gc3RhcnQgdXBkYXRlIGNodW5rIGxvYWRpbmdcblx0XHR2YXIgdXJsID0gX193ZWJwYWNrX3JlcXVpcmVfXy5wICsgX193ZWJwYWNrX3JlcXVpcmVfXy5odShjaHVua0lkKTtcblx0XHQvLyBjcmVhdGUgZXJyb3IgYmVmb3JlIHN0YWNrIHVud291bmQgdG8gZ2V0IHVzZWZ1bCBzdGFja3RyYWNlIGxhdGVyXG5cdFx0dmFyIGVycm9yID0gbmV3IEVycm9yKCk7XG5cdFx0dmFyIGxvYWRpbmdFbmRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7XG5cdFx0XHRpZih3YWl0aW5nVXBkYXRlUmVzb2x2ZXNbY2h1bmtJZF0pIHtcblx0XHRcdFx0d2FpdGluZ1VwZGF0ZVJlc29sdmVzW2NodW5rSWRdID0gdW5kZWZpbmVkXG5cdFx0XHRcdHZhciBlcnJvclR5cGUgPSBldmVudCAmJiAoZXZlbnQudHlwZSA9PT0gJ2xvYWQnID8gJ21pc3NpbmcnIDogZXZlbnQudHlwZSk7XG5cdFx0XHRcdHZhciByZWFsU3JjID0gZXZlbnQgJiYgZXZlbnQudGFyZ2V0ICYmIGV2ZW50LnRhcmdldC5zcmM7XG5cdFx0XHRcdGVycm9yLm1lc3NhZ2UgPSAnTG9hZGluZyBob3QgdXBkYXRlIGNodW5rICcgKyBjaHVua0lkICsgJyBmYWlsZWQuXFxuKCcgKyBlcnJvclR5cGUgKyAnOiAnICsgcmVhbFNyYyArICcpJztcblx0XHRcdFx0ZXJyb3IubmFtZSA9ICdDaHVua0xvYWRFcnJvcic7XG5cdFx0XHRcdGVycm9yLnR5cGUgPSBlcnJvclR5cGU7XG5cdFx0XHRcdGVycm9yLnJlcXVlc3QgPSByZWFsU3JjO1xuXHRcdFx0XHRyZWplY3QoZXJyb3IpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5sKHVybCwgbG9hZGluZ0VuZGVkKTtcblx0fSk7XG59XG5cbnNlbGZbXCJ3ZWJwYWNrSG90VXBkYXRlXCJdID0gZnVuY3Rpb24oY2h1bmtJZCwgbW9yZU1vZHVsZXMsIHJ1bnRpbWUpIHtcblx0Zm9yKHZhciBtb2R1bGVJZCBpbiBtb3JlTW9kdWxlcykge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhtb3JlTW9kdWxlcywgbW9kdWxlSWQpKSB7XG5cdFx0XHRjdXJyZW50VXBkYXRlW21vZHVsZUlkXSA9IG1vcmVNb2R1bGVzW21vZHVsZUlkXTtcblx0XHRcdGlmKGN1cnJlbnRVcGRhdGVkTW9kdWxlc0xpc3QpIGN1cnJlbnRVcGRhdGVkTW9kdWxlc0xpc3QucHVzaChtb2R1bGVJZCk7XG5cdFx0fVxuXHR9XG5cdGlmKHJ1bnRpbWUpIGN1cnJlbnRVcGRhdGVSdW50aW1lLnB1c2gocnVudGltZSk7XG5cdGlmKHdhaXRpbmdVcGRhdGVSZXNvbHZlc1tjaHVua0lkXSkge1xuXHRcdHdhaXRpbmdVcGRhdGVSZXNvbHZlc1tjaHVua0lkXSgpO1xuXHRcdHdhaXRpbmdVcGRhdGVSZXNvbHZlc1tjaHVua0lkXSA9IHVuZGVmaW5lZDtcblx0fVxufTtcblxudmFyIGN1cnJlbnRVcGRhdGVDaHVua3M7XG52YXIgY3VycmVudFVwZGF0ZTtcbnZhciBjdXJyZW50VXBkYXRlUmVtb3ZlZENodW5rcztcbnZhciBjdXJyZW50VXBkYXRlUnVudGltZTtcbmZ1bmN0aW9uIGFwcGx5SGFuZGxlcihvcHRpb25zKSB7XG5cdGlmIChfX3dlYnBhY2tfcmVxdWlyZV9fLmYpIGRlbGV0ZSBfX3dlYnBhY2tfcmVxdWlyZV9fLmYuanNvbnBIbXI7XG5cdGN1cnJlbnRVcGRhdGVDaHVua3MgPSB1bmRlZmluZWQ7XG5cdGZ1bmN0aW9uIGdldEFmZmVjdGVkTW9kdWxlRWZmZWN0cyh1cGRhdGVNb2R1bGVJZCkge1xuXHRcdHZhciBvdXRkYXRlZE1vZHVsZXMgPSBbdXBkYXRlTW9kdWxlSWRdO1xuXHRcdHZhciBvdXRkYXRlZERlcGVuZGVuY2llcyA9IHt9O1xuXG5cdFx0dmFyIHF1ZXVlID0gb3V0ZGF0ZWRNb2R1bGVzLm1hcChmdW5jdGlvbiAoaWQpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGNoYWluOiBbaWRdLFxuXHRcdFx0XHRpZDogaWRcblx0XHRcdH07XG5cdFx0fSk7XG5cdFx0d2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcblx0XHRcdHZhciBxdWV1ZUl0ZW0gPSBxdWV1ZS5wb3AoKTtcblx0XHRcdHZhciBtb2R1bGVJZCA9IHF1ZXVlSXRlbS5pZDtcblx0XHRcdHZhciBjaGFpbiA9IHF1ZXVlSXRlbS5jaGFpbjtcblx0XHRcdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmNbbW9kdWxlSWRdO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQhbW9kdWxlIHx8XG5cdFx0XHRcdChtb2R1bGUuaG90Ll9zZWxmQWNjZXB0ZWQgJiYgIW1vZHVsZS5ob3QuX3NlbGZJbnZhbGlkYXRlZClcblx0XHRcdClcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRpZiAobW9kdWxlLmhvdC5fc2VsZkRlY2xpbmVkKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0dHlwZTogXCJzZWxmLWRlY2xpbmVkXCIsXG5cdFx0XHRcdFx0Y2hhaW46IGNoYWluLFxuXHRcdFx0XHRcdG1vZHVsZUlkOiBtb2R1bGVJZFxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0aWYgKG1vZHVsZS5ob3QuX21haW4pIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHR0eXBlOiBcInVuYWNjZXB0ZWRcIixcblx0XHRcdFx0XHRjaGFpbjogY2hhaW4sXG5cdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG1vZHVsZS5wYXJlbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHZhciBwYXJlbnRJZCA9IG1vZHVsZS5wYXJlbnRzW2ldO1xuXHRcdFx0XHR2YXIgcGFyZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5jW3BhcmVudElkXTtcblx0XHRcdFx0aWYgKCFwYXJlbnQpIGNvbnRpbnVlO1xuXHRcdFx0XHRpZiAocGFyZW50LmhvdC5fZGVjbGluZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdHR5cGU6IFwiZGVjbGluZWRcIixcblx0XHRcdFx0XHRcdGNoYWluOiBjaGFpbi5jb25jYXQoW3BhcmVudElkXSksXG5cdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWQsXG5cdFx0XHRcdFx0XHRwYXJlbnRJZDogcGFyZW50SWRcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvdXRkYXRlZE1vZHVsZXMuaW5kZXhPZihwYXJlbnRJZCkgIT09IC0xKSBjb250aW51ZTtcblx0XHRcdFx0aWYgKHBhcmVudC5ob3QuX2FjY2VwdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXSkge1xuXHRcdFx0XHRcdGlmICghb3V0ZGF0ZWREZXBlbmRlbmNpZXNbcGFyZW50SWRdKVxuXHRcdFx0XHRcdFx0b3V0ZGF0ZWREZXBlbmRlbmNpZXNbcGFyZW50SWRdID0gW107XG5cdFx0XHRcdFx0YWRkQWxsVG9TZXQob3V0ZGF0ZWREZXBlbmRlbmNpZXNbcGFyZW50SWRdLCBbbW9kdWxlSWRdKTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkZWxldGUgb3V0ZGF0ZWREZXBlbmRlbmNpZXNbcGFyZW50SWRdO1xuXHRcdFx0XHRvdXRkYXRlZE1vZHVsZXMucHVzaChwYXJlbnRJZCk7XG5cdFx0XHRcdHF1ZXVlLnB1c2goe1xuXHRcdFx0XHRcdGNoYWluOiBjaGFpbi5jb25jYXQoW3BhcmVudElkXSksXG5cdFx0XHRcdFx0aWQ6IHBhcmVudElkXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHR0eXBlOiBcImFjY2VwdGVkXCIsXG5cdFx0XHRtb2R1bGVJZDogdXBkYXRlTW9kdWxlSWQsXG5cdFx0XHRvdXRkYXRlZE1vZHVsZXM6IG91dGRhdGVkTW9kdWxlcyxcblx0XHRcdG91dGRhdGVkRGVwZW5kZW5jaWVzOiBvdXRkYXRlZERlcGVuZGVuY2llc1xuXHRcdH07XG5cdH1cblxuXHRmdW5jdGlvbiBhZGRBbGxUb1NldChhLCBiKSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBiLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgaXRlbSA9IGJbaV07XG5cdFx0XHRpZiAoYS5pbmRleE9mKGl0ZW0pID09PSAtMSkgYS5wdXNoKGl0ZW0pO1xuXHRcdH1cblx0fVxuXG5cdC8vIGF0IGJlZ2luIGFsbCB1cGRhdGVzIG1vZHVsZXMgYXJlIG91dGRhdGVkXG5cdC8vIHRoZSBcIm91dGRhdGVkXCIgc3RhdHVzIGNhbiBwcm9wYWdhdGUgdG8gcGFyZW50cyBpZiB0aGV5IGRvbid0IGFjY2VwdCB0aGUgY2hpbGRyZW5cblx0dmFyIG91dGRhdGVkRGVwZW5kZW5jaWVzID0ge307XG5cdHZhciBvdXRkYXRlZE1vZHVsZXMgPSBbXTtcblx0dmFyIGFwcGxpZWRVcGRhdGUgPSB7fTtcblxuXHR2YXIgd2FyblVuZXhwZWN0ZWRSZXF1aXJlID0gZnVuY3Rpb24gd2FyblVuZXhwZWN0ZWRSZXF1aXJlKG1vZHVsZSkge1xuXHRcdGNvbnNvbGUud2Fybihcblx0XHRcdFwiW0hNUl0gdW5leHBlY3RlZCByZXF1aXJlKFwiICsgbW9kdWxlLmlkICsgXCIpIHRvIGRpc3Bvc2VkIG1vZHVsZVwiXG5cdFx0KTtcblx0fTtcblxuXHRmb3IgKHZhciBtb2R1bGVJZCBpbiBjdXJyZW50VXBkYXRlKSB7XG5cdFx0aWYgKF9fd2VicGFja19yZXF1aXJlX18ubyhjdXJyZW50VXBkYXRlLCBtb2R1bGVJZCkpIHtcblx0XHRcdHZhciBuZXdNb2R1bGVGYWN0b3J5ID0gY3VycmVudFVwZGF0ZVttb2R1bGVJZF07XG5cdFx0XHQvKiogQHR5cGUge1RPRE99ICovXG5cdFx0XHR2YXIgcmVzdWx0O1xuXHRcdFx0aWYgKG5ld01vZHVsZUZhY3RvcnkpIHtcblx0XHRcdFx0cmVzdWx0ID0gZ2V0QWZmZWN0ZWRNb2R1bGVFZmZlY3RzKG1vZHVsZUlkKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdCA9IHtcblx0XHRcdFx0XHR0eXBlOiBcImRpc3Bvc2VkXCIsXG5cdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHQvKiogQHR5cGUge0Vycm9yfGZhbHNlfSAqL1xuXHRcdFx0dmFyIGFib3J0RXJyb3IgPSBmYWxzZTtcblx0XHRcdHZhciBkb0FwcGx5ID0gZmFsc2U7XG5cdFx0XHR2YXIgZG9EaXNwb3NlID0gZmFsc2U7XG5cdFx0XHR2YXIgY2hhaW5JbmZvID0gXCJcIjtcblx0XHRcdGlmIChyZXN1bHQuY2hhaW4pIHtcblx0XHRcdFx0Y2hhaW5JbmZvID0gXCJcXG5VcGRhdGUgcHJvcGFnYXRpb246IFwiICsgcmVzdWx0LmNoYWluLmpvaW4oXCIgLT4gXCIpO1xuXHRcdFx0fVxuXHRcdFx0c3dpdGNoIChyZXN1bHQudHlwZSkge1xuXHRcdFx0XHRjYXNlIFwic2VsZi1kZWNsaW5lZFwiOlxuXHRcdFx0XHRcdGlmIChvcHRpb25zLm9uRGVjbGluZWQpIG9wdGlvbnMub25EZWNsaW5lZChyZXN1bHQpO1xuXHRcdFx0XHRcdGlmICghb3B0aW9ucy5pZ25vcmVEZWNsaW5lZClcblx0XHRcdFx0XHRcdGFib3J0RXJyb3IgPSBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0XHRcdFwiQWJvcnRlZCBiZWNhdXNlIG9mIHNlbGYgZGVjbGluZTogXCIgK1xuXHRcdFx0XHRcdFx0XHRcdHJlc3VsdC5tb2R1bGVJZCArXG5cdFx0XHRcdFx0XHRcdFx0Y2hhaW5JbmZvXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiZGVjbGluZWRcIjpcblx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkRlY2xpbmVkKSBvcHRpb25zLm9uRGVjbGluZWQocmVzdWx0KTtcblx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuaWdub3JlRGVjbGluZWQpXG5cdFx0XHRcdFx0XHRhYm9ydEVycm9yID0gbmV3IEVycm9yKFxuXHRcdFx0XHRcdFx0XHRcIkFib3J0ZWQgYmVjYXVzZSBvZiBkZWNsaW5lZCBkZXBlbmRlbmN5OiBcIiArXG5cdFx0XHRcdFx0XHRcdFx0cmVzdWx0Lm1vZHVsZUlkICtcblx0XHRcdFx0XHRcdFx0XHRcIiBpbiBcIiArXG5cdFx0XHRcdFx0XHRcdFx0cmVzdWx0LnBhcmVudElkICtcblx0XHRcdFx0XHRcdFx0XHRjaGFpbkluZm9cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJ1bmFjY2VwdGVkXCI6XG5cdFx0XHRcdFx0aWYgKG9wdGlvbnMub25VbmFjY2VwdGVkKSBvcHRpb25zLm9uVW5hY2NlcHRlZChyZXN1bHQpO1xuXHRcdFx0XHRcdGlmICghb3B0aW9ucy5pZ25vcmVVbmFjY2VwdGVkKVxuXHRcdFx0XHRcdFx0YWJvcnRFcnJvciA9IG5ldyBFcnJvcihcblx0XHRcdFx0XHRcdFx0XCJBYm9ydGVkIGJlY2F1c2UgXCIgKyBtb2R1bGVJZCArIFwiIGlzIG5vdCBhY2NlcHRlZFwiICsgY2hhaW5JbmZvXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiYWNjZXB0ZWRcIjpcblx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkFjY2VwdGVkKSBvcHRpb25zLm9uQWNjZXB0ZWQocmVzdWx0KTtcblx0XHRcdFx0XHRkb0FwcGx5ID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImRpc3Bvc2VkXCI6XG5cdFx0XHRcdFx0aWYgKG9wdGlvbnMub25EaXNwb3NlZCkgb3B0aW9ucy5vbkRpc3Bvc2VkKHJlc3VsdCk7XG5cdFx0XHRcdFx0ZG9EaXNwb3NlID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmV4Y2VwdGlvbiB0eXBlIFwiICsgcmVzdWx0LnR5cGUpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGFib3J0RXJyb3IpIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRlcnJvcjogYWJvcnRFcnJvclxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0aWYgKGRvQXBwbHkpIHtcblx0XHRcdFx0YXBwbGllZFVwZGF0ZVttb2R1bGVJZF0gPSBuZXdNb2R1bGVGYWN0b3J5O1xuXHRcdFx0XHRhZGRBbGxUb1NldChvdXRkYXRlZE1vZHVsZXMsIHJlc3VsdC5vdXRkYXRlZE1vZHVsZXMpO1xuXHRcdFx0XHRmb3IgKG1vZHVsZUlkIGluIHJlc3VsdC5vdXRkYXRlZERlcGVuZGVuY2llcykge1xuXHRcdFx0XHRcdGlmIChfX3dlYnBhY2tfcmVxdWlyZV9fLm8ocmVzdWx0Lm91dGRhdGVkRGVwZW5kZW5jaWVzLCBtb2R1bGVJZCkpIHtcblx0XHRcdFx0XHRcdGlmICghb3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdKVxuXHRcdFx0XHRcdFx0XHRvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF0gPSBbXTtcblx0XHRcdFx0XHRcdGFkZEFsbFRvU2V0KFxuXHRcdFx0XHRcdFx0XHRvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF0sXG5cdFx0XHRcdFx0XHRcdHJlc3VsdC5vdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoZG9EaXNwb3NlKSB7XG5cdFx0XHRcdGFkZEFsbFRvU2V0KG91dGRhdGVkTW9kdWxlcywgW3Jlc3VsdC5tb2R1bGVJZF0pO1xuXHRcdFx0XHRhcHBsaWVkVXBkYXRlW21vZHVsZUlkXSA9IHdhcm5VbmV4cGVjdGVkUmVxdWlyZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Y3VycmVudFVwZGF0ZSA9IHVuZGVmaW5lZDtcblxuXHQvLyBTdG9yZSBzZWxmIGFjY2VwdGVkIG91dGRhdGVkIG1vZHVsZXMgdG8gcmVxdWlyZSB0aGVtIGxhdGVyIGJ5IHRoZSBtb2R1bGUgc3lzdGVtXG5cdHZhciBvdXRkYXRlZFNlbGZBY2NlcHRlZE1vZHVsZXMgPSBbXTtcblx0Zm9yICh2YXIgaiA9IDA7IGogPCBvdXRkYXRlZE1vZHVsZXMubGVuZ3RoOyBqKyspIHtcblx0XHR2YXIgb3V0ZGF0ZWRNb2R1bGVJZCA9IG91dGRhdGVkTW9kdWxlc1tqXTtcblx0XHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXy5jW291dGRhdGVkTW9kdWxlSWRdO1xuXHRcdGlmIChcblx0XHRcdG1vZHVsZSAmJlxuXHRcdFx0KG1vZHVsZS5ob3QuX3NlbGZBY2NlcHRlZCB8fCBtb2R1bGUuaG90Ll9tYWluKSAmJlxuXHRcdFx0Ly8gcmVtb3ZlZCBzZWxmLWFjY2VwdGVkIG1vZHVsZXMgc2hvdWxkIG5vdCBiZSByZXF1aXJlZFxuXHRcdFx0YXBwbGllZFVwZGF0ZVtvdXRkYXRlZE1vZHVsZUlkXSAhPT0gd2FyblVuZXhwZWN0ZWRSZXF1aXJlICYmXG5cdFx0XHQvLyB3aGVuIGNhbGxlZCBpbnZhbGlkYXRlIHNlbGYtYWNjZXB0aW5nIGlzIG5vdCBwb3NzaWJsZVxuXHRcdFx0IW1vZHVsZS5ob3QuX3NlbGZJbnZhbGlkYXRlZFxuXHRcdCkge1xuXHRcdFx0b3V0ZGF0ZWRTZWxmQWNjZXB0ZWRNb2R1bGVzLnB1c2goe1xuXHRcdFx0XHRtb2R1bGU6IG91dGRhdGVkTW9kdWxlSWQsXG5cdFx0XHRcdHJlcXVpcmU6IG1vZHVsZS5ob3QuX3JlcXVpcmVTZWxmLFxuXHRcdFx0XHRlcnJvckhhbmRsZXI6IG1vZHVsZS5ob3QuX3NlbGZBY2NlcHRlZFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0dmFyIG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzO1xuXG5cdHJldHVybiB7XG5cdFx0ZGlzcG9zZTogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y3VycmVudFVwZGF0ZVJlbW92ZWRDaHVua3MuZm9yRWFjaChmdW5jdGlvbiAoY2h1bmtJZCkge1xuXHRcdFx0XHRkZWxldGUgaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdO1xuXHRcdFx0fSk7XG5cdFx0XHRjdXJyZW50VXBkYXRlUmVtb3ZlZENodW5rcyA9IHVuZGVmaW5lZDtcblxuXHRcdFx0dmFyIGlkeDtcblx0XHRcdHZhciBxdWV1ZSA9IG91dGRhdGVkTW9kdWxlcy5zbGljZSgpO1xuXHRcdFx0d2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0dmFyIG1vZHVsZUlkID0gcXVldWUucG9wKCk7XG5cdFx0XHRcdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmNbbW9kdWxlSWRdO1xuXHRcdFx0XHRpZiAoIW1vZHVsZSkgY29udGludWU7XG5cblx0XHRcdFx0dmFyIGRhdGEgPSB7fTtcblxuXHRcdFx0XHQvLyBDYWxsIGRpc3Bvc2UgaGFuZGxlcnNcblx0XHRcdFx0dmFyIGRpc3Bvc2VIYW5kbGVycyA9IG1vZHVsZS5ob3QuX2Rpc3Bvc2VIYW5kbGVycztcblx0XHRcdFx0Zm9yIChqID0gMDsgaiA8IGRpc3Bvc2VIYW5kbGVycy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdGRpc3Bvc2VIYW5kbGVyc1tqXS5jYWxsKG51bGwsIGRhdGEpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18uaG1yRFttb2R1bGVJZF0gPSBkYXRhO1xuXG5cdFx0XHRcdC8vIGRpc2FibGUgbW9kdWxlICh0aGlzIGRpc2FibGVzIHJlcXVpcmVzIGZyb20gdGhpcyBtb2R1bGUpXG5cdFx0XHRcdG1vZHVsZS5ob3QuYWN0aXZlID0gZmFsc2U7XG5cblx0XHRcdFx0Ly8gcmVtb3ZlIG1vZHVsZSBmcm9tIGNhY2hlXG5cdFx0XHRcdGRlbGV0ZSBfX3dlYnBhY2tfcmVxdWlyZV9fLmNbbW9kdWxlSWRdO1xuXG5cdFx0XHRcdC8vIHdoZW4gZGlzcG9zaW5nIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2FsbCBkaXNwb3NlIGhhbmRsZXJcblx0XHRcdFx0ZGVsZXRlIG91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXTtcblxuXHRcdFx0XHQvLyByZW1vdmUgXCJwYXJlbnRzXCIgcmVmZXJlbmNlcyBmcm9tIGFsbCBjaGlsZHJlblxuXHRcdFx0XHRmb3IgKGogPSAwOyBqIDwgbW9kdWxlLmNoaWxkcmVuLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0dmFyIGNoaWxkID0gX193ZWJwYWNrX3JlcXVpcmVfXy5jW21vZHVsZS5jaGlsZHJlbltqXV07XG5cdFx0XHRcdFx0aWYgKCFjaGlsZCkgY29udGludWU7XG5cdFx0XHRcdFx0aWR4ID0gY2hpbGQucGFyZW50cy5pbmRleE9mKG1vZHVsZUlkKTtcblx0XHRcdFx0XHRpZiAoaWR4ID49IDApIHtcblx0XHRcdFx0XHRcdGNoaWxkLnBhcmVudHMuc3BsaWNlKGlkeCwgMSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIHJlbW92ZSBvdXRkYXRlZCBkZXBlbmRlbmN5IGZyb20gbW9kdWxlIGNoaWxkcmVuXG5cdFx0XHR2YXIgZGVwZW5kZW5jeTtcblx0XHRcdGZvciAodmFyIG91dGRhdGVkTW9kdWxlSWQgaW4gb3V0ZGF0ZWREZXBlbmRlbmNpZXMpIHtcblx0XHRcdFx0aWYgKF9fd2VicGFja19yZXF1aXJlX18ubyhvdXRkYXRlZERlcGVuZGVuY2llcywgb3V0ZGF0ZWRNb2R1bGVJZCkpIHtcblx0XHRcdFx0XHRtb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmNbb3V0ZGF0ZWRNb2R1bGVJZF07XG5cdFx0XHRcdFx0aWYgKG1vZHVsZSkge1xuXHRcdFx0XHRcdFx0bW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMgPVxuXHRcdFx0XHRcdFx0XHRvdXRkYXRlZERlcGVuZGVuY2llc1tvdXRkYXRlZE1vZHVsZUlkXTtcblx0XHRcdFx0XHRcdGZvciAoaiA9IDA7IGogPCBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRkZXBlbmRlbmN5ID0gbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXNbal07XG5cdFx0XHRcdFx0XHRcdGlkeCA9IG1vZHVsZS5jaGlsZHJlbi5pbmRleE9mKGRlcGVuZGVuY3kpO1xuXHRcdFx0XHRcdFx0XHRpZiAoaWR4ID49IDApIG1vZHVsZS5jaGlsZHJlbi5zcGxpY2UoaWR4LCAxKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGFwcGx5OiBmdW5jdGlvbiAocmVwb3J0RXJyb3IpIHtcblx0XHRcdC8vIGluc2VydCBuZXcgY29kZVxuXHRcdFx0Zm9yICh2YXIgdXBkYXRlTW9kdWxlSWQgaW4gYXBwbGllZFVwZGF0ZSkge1xuXHRcdFx0XHRpZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGFwcGxpZWRVcGRhdGUsIHVwZGF0ZU1vZHVsZUlkKSkge1xuXHRcdFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18ubVt1cGRhdGVNb2R1bGVJZF0gPSBhcHBsaWVkVXBkYXRlW3VwZGF0ZU1vZHVsZUlkXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBydW4gbmV3IHJ1bnRpbWUgbW9kdWxlc1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjdXJyZW50VXBkYXRlUnVudGltZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjdXJyZW50VXBkYXRlUnVudGltZVtpXShfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gY2FsbCBhY2NlcHQgaGFuZGxlcnNcblx0XHRcdGZvciAodmFyIG91dGRhdGVkTW9kdWxlSWQgaW4gb3V0ZGF0ZWREZXBlbmRlbmNpZXMpIHtcblx0XHRcdFx0aWYgKF9fd2VicGFja19yZXF1aXJlX18ubyhvdXRkYXRlZERlcGVuZGVuY2llcywgb3V0ZGF0ZWRNb2R1bGVJZCkpIHtcblx0XHRcdFx0XHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXy5jW291dGRhdGVkTW9kdWxlSWRdO1xuXHRcdFx0XHRcdGlmIChtb2R1bGUpIHtcblx0XHRcdFx0XHRcdG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzID1cblx0XHRcdFx0XHRcdFx0b3V0ZGF0ZWREZXBlbmRlbmNpZXNbb3V0ZGF0ZWRNb2R1bGVJZF07XG5cdFx0XHRcdFx0XHR2YXIgY2FsbGJhY2tzID0gW107XG5cdFx0XHRcdFx0XHR2YXIgZXJyb3JIYW5kbGVycyA9IFtdO1xuXHRcdFx0XHRcdFx0dmFyIGRlcGVuZGVuY2llc0ZvckNhbGxiYWNrcyA9IFtdO1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHR2YXIgZGVwZW5kZW5jeSA9IG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzW2pdO1xuXHRcdFx0XHRcdFx0XHR2YXIgYWNjZXB0Q2FsbGJhY2sgPVxuXHRcdFx0XHRcdFx0XHRcdG1vZHVsZS5ob3QuX2FjY2VwdGVkRGVwZW5kZW5jaWVzW2RlcGVuZGVuY3ldO1xuXHRcdFx0XHRcdFx0XHR2YXIgZXJyb3JIYW5kbGVyID1cblx0XHRcdFx0XHRcdFx0XHRtb2R1bGUuaG90Ll9hY2NlcHRlZEVycm9ySGFuZGxlcnNbZGVwZW5kZW5jeV07XG5cdFx0XHRcdFx0XHRcdGlmIChhY2NlcHRDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChjYWxsYmFja3MuaW5kZXhPZihhY2NlcHRDYWxsYmFjaykgIT09IC0xKSBjb250aW51ZTtcblx0XHRcdFx0XHRcdFx0XHRjYWxsYmFja3MucHVzaChhY2NlcHRDYWxsYmFjayk7XG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3JIYW5kbGVycy5wdXNoKGVycm9ySGFuZGxlcik7XG5cdFx0XHRcdFx0XHRcdFx0ZGVwZW5kZW5jaWVzRm9yQ2FsbGJhY2tzLnB1c2goZGVwZW5kZW5jeSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGZvciAodmFyIGsgPSAwOyBrIDwgY2FsbGJhY2tzLmxlbmd0aDsgaysrKSB7XG5cdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FsbGJhY2tzW2tdLmNhbGwobnVsbCwgbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMpO1xuXHRcdFx0XHRcdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAodHlwZW9mIGVycm9ySGFuZGxlcnNba10gPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JIYW5kbGVyc1trXShlcnIsIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtb2R1bGVJZDogb3V0ZGF0ZWRNb2R1bGVJZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZXBlbmRlbmN5SWQ6IGRlcGVuZGVuY2llc0ZvckNhbGxiYWNrc1trXVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGVycjIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25FcnJvcmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5vbkVycm9yZWQoe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJhY2NlcHQtZXJyb3ItaGFuZGxlci1lcnJvcmVkXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtb2R1bGVJZDogb3V0ZGF0ZWRNb2R1bGVJZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlcGVuZGVuY3lJZDogZGVwZW5kZW5jaWVzRm9yQ2FsbGJhY2tzW2tdLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGVycjIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvcmlnaW5hbEVycm9yOiBlcnJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuaWdub3JlRXJyb3JlZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlcG9ydEVycm9yKGVycjIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlcG9ydEVycm9yKGVycik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25FcnJvcmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9wdGlvbnMub25FcnJvcmVkKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcImFjY2VwdC1lcnJvcmVkXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG91dGRhdGVkTW9kdWxlSWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVwZW5kZW5jeUlkOiBkZXBlbmRlbmNpZXNGb3JDYWxsYmFja3Nba10sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGVyclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGlmICghb3B0aW9ucy5pZ25vcmVFcnJvcmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlcG9ydEVycm9yKGVycik7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvYWQgc2VsZiBhY2NlcHRlZCBtb2R1bGVzXG5cdFx0XHRmb3IgKHZhciBvID0gMDsgbyA8IG91dGRhdGVkU2VsZkFjY2VwdGVkTW9kdWxlcy5sZW5ndGg7IG8rKykge1xuXHRcdFx0XHR2YXIgaXRlbSA9IG91dGRhdGVkU2VsZkFjY2VwdGVkTW9kdWxlc1tvXTtcblx0XHRcdFx0dmFyIG1vZHVsZUlkID0gaXRlbS5tb2R1bGU7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0aXRlbS5yZXF1aXJlKG1vZHVsZUlkKTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBpdGVtLmVycm9ySGFuZGxlciA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRpdGVtLmVycm9ySGFuZGxlcihlcnIsIHtcblx0XHRcdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWQsXG5cdFx0XHRcdFx0XHRcdFx0bW9kdWxlOiBfX3dlYnBhY2tfcmVxdWlyZV9fLmNbbW9kdWxlSWRdXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyMikge1xuXHRcdFx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkVycm9yZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRvcHRpb25zLm9uRXJyb3JlZCh7XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcInNlbGYtYWNjZXB0LWVycm9yLWhhbmRsZXItZXJyb3JlZFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGVycjIsXG5cdFx0XHRcdFx0XHRcdFx0XHRvcmlnaW5hbEVycm9yOiBlcnJcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuaWdub3JlRXJyb3JlZCkge1xuXHRcdFx0XHRcdFx0XHRcdHJlcG9ydEVycm9yKGVycjIpO1xuXHRcdFx0XHRcdFx0XHRcdHJlcG9ydEVycm9yKGVycik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25FcnJvcmVkKSB7XG5cdFx0XHRcdFx0XHRcdG9wdGlvbnMub25FcnJvcmVkKHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcInNlbGYtYWNjZXB0LWVycm9yZWRcIixcblx0XHRcdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWQsXG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGVyclxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmICghb3B0aW9ucy5pZ25vcmVFcnJvcmVkKSB7XG5cdFx0XHRcdFx0XHRcdHJlcG9ydEVycm9yKGVycik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBvdXRkYXRlZE1vZHVsZXM7XG5cdFx0fVxuXHR9O1xufVxuX193ZWJwYWNrX3JlcXVpcmVfXy5obXJJLmpzb25wID0gZnVuY3Rpb24gKG1vZHVsZUlkLCBhcHBseUhhbmRsZXJzKSB7XG5cdGlmICghY3VycmVudFVwZGF0ZSkge1xuXHRcdGN1cnJlbnRVcGRhdGUgPSB7fTtcblx0XHRjdXJyZW50VXBkYXRlUnVudGltZSA9IFtdO1xuXHRcdGN1cnJlbnRVcGRhdGVSZW1vdmVkQ2h1bmtzID0gW107XG5cdFx0YXBwbHlIYW5kbGVycy5wdXNoKGFwcGx5SGFuZGxlcik7XG5cdH1cblx0aWYgKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oY3VycmVudFVwZGF0ZSwgbW9kdWxlSWQpKSB7XG5cdFx0Y3VycmVudFVwZGF0ZVttb2R1bGVJZF0gPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm1bbW9kdWxlSWRdO1xuXHR9XG59O1xuX193ZWJwYWNrX3JlcXVpcmVfXy5obXJDLmpzb25wID0gZnVuY3Rpb24gKFxuXHRjaHVua0lkcyxcblx0cmVtb3ZlZENodW5rcyxcblx0cmVtb3ZlZE1vZHVsZXMsXG5cdHByb21pc2VzLFxuXHRhcHBseUhhbmRsZXJzLFxuXHR1cGRhdGVkTW9kdWxlc0xpc3Rcbikge1xuXHRhcHBseUhhbmRsZXJzLnB1c2goYXBwbHlIYW5kbGVyKTtcblx0Y3VycmVudFVwZGF0ZUNodW5rcyA9IHt9O1xuXHRjdXJyZW50VXBkYXRlUmVtb3ZlZENodW5rcyA9IHJlbW92ZWRDaHVua3M7XG5cdGN1cnJlbnRVcGRhdGUgPSByZW1vdmVkTW9kdWxlcy5yZWR1Y2UoZnVuY3Rpb24gKG9iaiwga2V5KSB7XG5cdFx0b2JqW2tleV0gPSBmYWxzZTtcblx0XHRyZXR1cm4gb2JqO1xuXHR9LCB7fSk7XG5cdGN1cnJlbnRVcGRhdGVSdW50aW1lID0gW107XG5cdGNodW5rSWRzLmZvckVhY2goZnVuY3Rpb24gKGNodW5rSWQpIHtcblx0XHRpZiAoXG5cdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8oaW5zdGFsbGVkQ2h1bmtzLCBjaHVua0lkKSAmJlxuXHRcdFx0aW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdICE9PSB1bmRlZmluZWRcblx0XHQpIHtcblx0XHRcdHByb21pc2VzLnB1c2gobG9hZFVwZGF0ZUNodW5rKGNodW5rSWQsIHVwZGF0ZWRNb2R1bGVzTGlzdCkpO1xuXHRcdFx0Y3VycmVudFVwZGF0ZUNodW5rc1tjaHVua0lkXSA9IHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1cnJlbnRVcGRhdGVDaHVua3NbY2h1bmtJZF0gPSBmYWxzZTtcblx0XHR9XG5cdH0pO1xuXHRpZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5mKSB7XG5cdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5mLmpzb25wSG1yID0gZnVuY3Rpb24gKGNodW5rSWQsIHByb21pc2VzKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGN1cnJlbnRVcGRhdGVDaHVua3MgJiZcblx0XHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vKGN1cnJlbnRVcGRhdGVDaHVua3MsIGNodW5rSWQpICYmXG5cdFx0XHRcdCFjdXJyZW50VXBkYXRlQ2h1bmtzW2NodW5rSWRdXG5cdFx0XHQpIHtcblx0XHRcdFx0cHJvbWlzZXMucHVzaChsb2FkVXBkYXRlQ2h1bmsoY2h1bmtJZCkpO1xuXHRcdFx0XHRjdXJyZW50VXBkYXRlQ2h1bmtzW2NodW5rSWRdID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG59O1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmhtck0gPSBmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBmZXRjaCA9PT0gXCJ1bmRlZmluZWRcIikgdGhyb3cgbmV3IEVycm9yKFwiTm8gYnJvd3NlciBzdXBwb3J0OiBuZWVkIGZldGNoIEFQSVwiKTtcblx0cmV0dXJuIGZldGNoKF9fd2VicGFja19yZXF1aXJlX18ucCArIF9fd2VicGFja19yZXF1aXJlX18uaG1yRigpKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG5cdFx0aWYocmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHJldHVybjsgLy8gbm8gdXBkYXRlIGF2YWlsYWJsZVxuXHRcdGlmKCFyZXNwb25zZS5vaykgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGZldGNoIHVwZGF0ZSBtYW5pZmVzdCBcIiArIHJlc3BvbnNlLnN0YXR1c1RleHQpO1xuXHRcdHJldHVybiByZXNwb25zZS5qc29uKCk7XG5cdH0pO1xufTtcblxuLy8gbm8gb24gY2h1bmtzIGxvYWRlZFxuXG4vLyBubyBqc29ucCBmdW5jdGlvbiIsIiIsIi8vIG1vZHVsZSBjYWNoZSBhcmUgdXNlZCBzbyBlbnRyeSBpbmxpbmluZyBpcyBkaXNhYmxlZFxuLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oXCIuL2pzLWJsb2cuanNcIik7XG4iLCIiXSwibmFtZXMiOlsiYmxvZ0ZpbHRlciIsIiQiLCJEU0luaXRGaWx0ZXIiLCJtb2R1bGUiLCJmaWx0ZXIiLCJhY3Rpb24iLCJmb3JtIiwibW9yZUJ0biIsInJlc3VsdHMiLCJkb2luZ19hamF4IiwidGltZW91dCIsInF1ZXJ5IiwicG9zdF90eXBlIiwicGVyX3BhZ2UiLCJwYWdlIiwiY29tcG9uZW50X3N0eWxlcyIsImFqYXhfdXJsIiwiZHMiLCJwcmVsb2FkZXIiLCJpbml0IiwiYWpheE1vZHVsZSIsImRhdGEiLCJwb3N0c19wZXJfcGFnZSIsImluaXRFbGVtZW50c0FjdGlvbnMiLCJmaW5kIiwibW9yZVBvc3RzIiwiY2hhbmdlRm9ybSIsImNvbXBDbGFzcyIsImNsYXNzIiwiY29tcFN0eWxlcyIsInN0eWxlcyIsImNvbXBJbWFnZSIsImltYWdlIiwib24iLCJlIiwicHJldmVudERlZmF1bHQiLCJzZW5kQWpheCIsIiRpbnB1dF90ZXh0IiwidW5iaW5kIiwibm90Iiwia2V5dXAiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiJGlucHV0X3N1Ym1pdCIsInBhcmVudCIsImFkZENsYXNzIiwiY2xpY2siLCIkc2VsZWN0IiwiY2hhbmdlIiwiZXZlbnQiLCJrZXlDb2RlIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiYWJvcnQiLCJyZW1vdmUiLCJwYWdlZCIsImNvbXBvbmVudCIsImRldmljZSIsIndpbmRvdyIsIndpZHRoIiwic2VyaWFsaXplIiwiYWpheCIsInVybCIsInR5cGUiLCJiZWZvcmVTZW5kIiwieGhyIiwiYXBwZW5kIiwic3VjY2VzcyIsImh0bWwiLCJwb3N0cyIsIm1heF9wYWdlcyIsImhpZGUiLCJzaG93IiwidG90YWxfcG9zdHNfc2hvd2luZyIsInRleHQiLCJ0b3RhbF9wb3N0cyIsImRvSW5pdCIsImVhY2giLCJpIiwialF1ZXJ5IiwiZGF0YUxheWVycyIsInNpZGVDdGEiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJzZW5kRGF0YUxheWVyIiwiZGF0YUxheWVyIiwicHVzaCIsImFkZEV2ZW50TGlzdGVuZXIiLCJsb2NhdGlvbiIsImhyZWYiLCJzdWJzY3JpYmVTbGlkZUluIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsInNjcm9sbFRvcCIsInJlbW92ZUNsYXNzIiwidG9jTW9iaWxlIiwiaGFuZGxlTW9iaWxlVE9DIiwiaW5uZXJXaWR0aCIsInRvY19jb250YWluZXIiLCJnZXRFbGVtZW50QnlJZCIsImNsYXNzTGlzdCIsImFkZCIsInN0eWxlIiwidGFyZ2V0IiwiY2xvc2VzdCIsInRvY1RvZ2dsZSIsIm1hdGNoZXMiLCJjbG9zZVRvZ2dsZSIsInRvY0xpc3QiLCJ1X2VsZW1lbnRGcm9tVG9wIiwidG9jU3RpY2t5IiwicXVlcnlTZWxlY3RvckFsbCIsInRvY1RvZ2dsZUNsYXNzZXMiLCJ0b2NDb2xsYXBzZXIiLCJ0b2NDb250YWluZXIiLCJnZXRDb21wdXRlZFN0eWxlIiwiZGlzcGxheSIsIm1lc3VyZSIsImhhc0NsYXNzIiwiZGFya01vZGUiLCJtb2RlIiwiYXR0ciIsImZ1bmN0aW9uTmFtZSIsInNldEl0ZW0iLCJwb2xscyIsImJ1dHRvbnMiLCJmb3JFYWNoIiwicG9sbCIsInBvbGxCdG4iLCJwb2xsTXNnIiwiY29udGFpbnMiLCJ1X2hhc0NsYXNzIiwiZWwiLCJjbHMiLCJjbGFzc05hbWUiLCJtYXRjaCIsInVfYWRkQ2xhc3MiLCJ1X2RlbENsYXNzIiwicmVwbGFjZSIsIlJlZ0V4cCIsImVsZW1UcmlnZ2VyIiwiZWxlbVRhcmdldCIsImNsYXNzVG9BZGQiLCJkaXN0YW5jZUZyb21Ub3AiLCJ1bml0Iiwid2luWSIsImlubmVySGVpZ2h0IiwiZG9jdW1lbnRFbGVtZW50IiwiY2xpZW50SGVpZ2h0IiwiZWxUcmlnZ2VyTGVuZ3RoIiwiZWxUYXJnZXRMZW5ndGgiLCJkaXN0VG9wIiwiZGlzdFBlcmNlbnQiLCJkaXN0UGl4ZWxzIiwiZGlzdFVuaXQiLCJlbFRhcmdldCIsImoiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ0b3AiLCJNYXRoIiwicm91bmQiLCJ1X2lzRWxlbWVudElzSW5WaWV3Iiwic2Nyb2xsIiwic2Nyb2xsWSIsInBhZ2VZT2Zmc2V0IiwiYm91bmRzVG9wIiwidmlld3BvcnQiLCJib3R0b20iLCJib3VuZHMiXSwic291cmNlUm9vdCI6IiJ9