1(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){ 2"use strict"; 3 4var _initiateAnalytics = require("./initiateAnalytics"); 5function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; } 6function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } 7function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } 8var popup = document.querySelector(".cookie-popup"); 9 10//Define functions available for popup and initial use 11var getCookie = function getCookie(name) { 12 return document.cookie.split("; ").reduce(function (r, v) { 13 var parts = v.split("="); 14 return parts[0] === name ? decodeURIComponent(parts[1]) : r; 15 }, ""); 16}; 17(0, _initiateAnalytics.initiateMatomo)(); 18var addStatisticsCookies = function addStatisticsCookies() { 19 (0, _initiateAnalytics.initiateGoogleAnalytics)(); 20}; 21var addMarketingCookies = function addMarketingCookies() { 22 // Google Tag Manager 23 (0, _initiateAnalytics.initialteGoogleTagManager)(); 24}; 25if (popup) { 26 var overlay = document.querySelector(".cookie-overlay"); 27 var modals = document.querySelectorAll(".cookie-popup-content"); 28 var modalLinks = document.querySelectorAll(".modal-link"); 29 var acceptAllBtn = document.querySelector("#set-all-cookies"); 30 var acceptNecessaryBtn = document.querySelector("#set-necessary-cookies"); 31 var acceptSelectionBtn = document.querySelector("#confirm-choice"); 32 var documentBody = document.body; 33 var cookieOptionSelect = document.querySelectorAll(".cookie-page-option"); 34 documentBody.style.overflow = "visible"; 35 var setCookie = function setCookie(name, value) { 36 var days = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 7; 37 var path = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "/"; 38 removePopup(); 39 var expires = new Date(Date.now() + days * 864e5).toUTCString(); 40 document.cookie = name + "=" + encodeURIComponent(value) + "; expires=" + expires + "; path=" + path; 41 switch (name) { 42 case "statistics_cookies": 43 addStatisticsCookies(); 44 if (days === 7) { 45 autoCheckSetting("statistics"); 46 } 47 break; 48 case "marketing_cookies": 49 addMarketingCookies(); 50 if (days === 7) { 51 autoCheckSetting("marketing"); 52 } 53 break; 54 default: 55 break; 56 } 57 }; 58 var deleteCookie = function deleteCookie(name) { 59 var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "/"; 60 setCookie(name, "", -1, path); 61 }; 62 var autoCheckSetting = function autoCheckSetting(name) { 63 cookieOptionSelect.forEach(function (option) { 64 if (name == option.value) { 65 option.checked = true; 66 } 67 }); 68 }; 69 var scrollToModalTop = function scrollToModalTop() { 70 var _iterator = _createForOfIteratorHelper(modals), 71 _step; 72 try { 73 for (_iterator.s();
73 !(_step = _iterator.n()).done;) { 74 var m = _step.value; 75 m.scrollTo(0, 0); 76 } 77 } catch (err) { 78 _iterator.e(err); 79 } finally { 80 _iterator.f(); 81 } 82 }; 83 var isOverlayHidden = function isOverlayHidden() { 84 overlay.classList.contains("cookie-overlay--active") ? documentBody.style.overflow = "hidden" : documentBody.style.overflow = "visible"; 85 }; 86 var showPopup = function showPopup() { 87 var h1Text = popup.querySelector("h1").innerText; 88 if (h1Text.length > 1) { 89 console.log("here"); 90 overlay.classList.add("cookie-overlay--active"); 91 popup.classList.add("cookie-popup--active"); 92 isOverlayHidden(); 93 } 94 }; 95 var removePopup = function removePopup() { 96 overlay.classList.remove("cookie-overlay--active"); 97 popup.classList.remove("cookie-popup--active"); 98 isOverlayHidden(); 99 }; 100 if (!getCookie("necessary_cookies")) { 101 showPopup(); 102 } 103 var _iterator2 = _createForOfIteratorHelper(modalLinks), 104 _step2; 105 try { 106 for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { 107 var link = _step2.value; 108 link.addEventListener("click", scrollToModalTop); 109 } 110 } catch (err) { 111 _iterator2.e(err); 112 } finally { 113 _iterator2.f(); 114 } 115 acceptAllBtn.addEventListener("click", function () { 116 setCookie("necessary_cookies", "true"); 117 setCookie("statistics_cookies", "true"); 118 setCookie("marketing_cookies", "true"); 119 window.location.reload(); 120 }); 121 acceptNecessaryBtn.addEventListener("click", function () { 122 setCookie("necessary_cookies", "true"); 123 }); 124 var confirmChoice = function confirmChoice() { 125 var checkBoxes = document.querySelectorAll("input[type=checkbox]"); 126 var cookieName; 127 var cookieChecked; 128 for (var i = 0; i < checkBoxes.length; i++) { 129 cookieName = "".concat(checkBoxes[i].value, "_cookies"); 130 cookieChecked = checkBoxes[i].checked; 131 if (cookieChecked) { 132 setCookie(cookieName, cookieChecked); 133 } 134 } 135 setCookie("necessary_cookies", "true"); 136 window.location.reload(); 137 }; 138 acceptSelectionBtn.addEventListener("click", confirmChoice); 139 140 // Retrieve and edit user's previous choice 141 cookieOptionSelect.forEach(function (option) { 142 option.value === "marketing" ? option.checked = getCookie("marketing_cookies") : option.checked = getCookie("statistics_cookies"); 143 option.addEventListener("change", function () { 144 if (option.checked) { 145 setCookie("".concat(option.value, "_cookies"), "true"); 146 } else { 147 deleteCookie("".concat(option.value, "_cookies")); 148 } 149 }); 150 }); 151} 152var setInitialCookies = function setInitialCookies() { 153 if (getCookie("statistics_cookies")) { 154 addStatisticsCookies(); 155 } 156 if (getCookie("marketing_cookies")) { 157 addMarketingCookies(); 158 } 159}; 160setInitialCookies(); 161 162},{"./initiateAnalytics":4}],2:[function(require,module,exports){ 163"use strict"; 164 165Object.defineProperty(exports, "__esModule", { 166 value: true 167}); 168exports.filter = void 0; 169var filter = exports.filter = function filter() { 170 var triggers = document.querySelector('.filters'); 171 var targets = document.querySelector('.mix-container'); 172 var filters = []; 173 var items = targets && targets.querySelectorAll('.mix'); 174 var intersect = function intersect(arr1, arr2) { 175 return arr1.filter(function (x) { 176 return arr2.indexOf(x) >= 0; 177 }).length > 0; 178 }; 179 var updateTargets = function updateTargets() { 180 if (filters.length) { 181 items.forEach(function (item) { 182 if (intersect(filters, Array.from(item.classList))) { 183 item.classList.remove('mix-hide'); 184 } else { 185 item.classList.add('mix-hide'); 186 } 187 }); 188 } else { 189 items.forEach(function (item) { 190 item.classList.remove('mix-hide'); 191 }); 192 } 193 }; 194 var updateFilters = function updateFilters(value) { 195 if (filters.includes(value)) { 196 filters = filters.filter(function (v) { 197 return v !== value; 198 }); 199 } else { 200 filters.push(value); 201 } 202 updateTargets(); 203 }; 204 if (triggers) { 205 triggers.addEventListener('click', function (e) { 206 if (e.target.parentElement.classList.contains('filter')) { 207 console.log('CLICK:FITLER'); 208 var value = e.target.value.split('.')[1]; 209 updateFilters(value); 210 } 211 }); 212 } 213}; 214 215},{}],3:[function(require,module,exports){ 216"use strict"; 217 218Object.defineProperty(exports, "__esModule", { 219 value: true 220}); 221exports.googleMaps = googleMaps; 222/* global google */ 223function googleMaps($) { 224 /* 225 * new_map 226 * 227 * This function will render a Google Map onto the selected jQuery element 228 * 229 * @type function 230 * @date 8/11/2013 231 * @since 4.3.0 232 * 233 * @param $el (jQuery element) 234 * @return n/a 235 */ 236 237 function new_map($el) { 238 // var 239 var $markers = $el.find('.marker'); 240 241 // vars 242 var args = { 243 zoom: 16, 244 center: new google.maps.LatLng(0, 0), 245 mapTypeId: google.maps.MapTypeId.ROADMAP 246 }; 247 248 // create map 249 var map = new google.maps.Map($el[0], args); 250 251 // add a markers reference 252 map.markers = []; 253 254 // add markers 255 $markers.each(function () { 256 add_marker($(this), map); 257 }); 258 259 // center map 260 center_map(map); 261 262 // return 263 return map; 264 } 265 266 /* 267 * add_marker 268 * 269 * This function will add a marker to the selected Google Map 270 * 271 * @type function 272 * @date 8/11/2013 273 * @since 4.3.0 274 * 275 * @param $marker (jQuery element) 276 * @param map (Google Map object) 277 * @return n/a 278 */ 279 280 function add_marker($marker, map) { 281 // var 282 var latlng = new google.maps.LatLng($marker.attr('data-lat'), $marker.attr('data-lng')); 283 284 // create marker 285 var marker = new google.maps.Marker({ 286 position: latlng, 287 map: map 288 }); 289 290 // add to array 291 map.markers.push(marker); 292 293 // if marker contains HTML, add it to an infoWindow 294 if ($marker.html()) {
295 // create info window 296 var infowindow = new google.maps.InfoWindow({ 297 content: $marker.html() 298 }); 299 300 // show info window when marker is clicked 301 google.maps.event.addListener(marker, 'click', function () { 302 infowindow.open(map, marker); 303 }); 304 } 305 } 306 307 /* 308 * center_map 309 * 310 * This function will center the map, showing all markers attached to this map 311 * 312 * @type function 313 * @date 8/11/2013 314 * @since 4.3.0 315 * 316 * @param map (Google Map object) 317 * @return n/a 318 */ 319 320 function center_map(map) { 321 // vars 322 var bounds = new google.maps.LatLngBounds(); 323 324 // loop through all markers and create bounds 325 $.each(map.markers, function (i, marker) { 326 var latlng = new google.maps.LatLng(marker.position.lat(), marker.position.lng()); 327 bounds.extend(latlng); 328 }); 329 330 // only 1 marker? 331 if (map.markers.length == 1) { 332 // set center of map 333 map.setCenter(bounds.getCenter()); 334 map.setZoom(16); 335 } else { 336 // fit to bounds 337 map.fitBounds(bounds); 338 } 339 } 340 341 /* 342 * document ready 343 * 344 * This function will render each map when the document is ready (page has loaded) 345 * 346 * @type function 347 * @date 8/11/2013 348 * @since 5.0.0 349 * 350 * @param n/a 351 * @return n/a 352 */ 353 // global var
354 355 var map = null; 356 $(document).ready(function () { 357 $('.acf-map').each(function () { 358 // create map 359 map = new_map($(this)); 360 }); 361 }); 362} 363 364},{}],4:[function(require,module,exports){ 365"use strict"; 366 367Object.defineProperty(exports, "__esModule", { 368 value: true 369}); 370exports.initiateMatomo = exports.initiateGoogleAnalytics = exports.initialteGoogleTagManager = void 0; 371var initiateGoogleAnalytics = exports.initiateGoogleAnalytics = function initiateGoogleAnalytics() { 372 console.log("initiating google analytics"); 373 (function (i, s, o, g, r, a, m) { 374 i["GoogleAnalyticsObject"] = r; 375 i[r] = i[r] || function () { 376 (i[r].q = i[r].q || []).push(arguments); 377 }, i[r].l = 1 * new Date(); 378 a = s.createElement(o), m = s.getElementsByTagName(o)[0]; 379 a.async = 1; 380 a.src = g; 381 m.parentNode.insertBefore(a, m); 382 })(window, document, "script", "//www.google-analytics.com/analytics.js", "ga"); 383 ga("create", "UA-75141647-3", { 384 cookieExpires: 60 * 60 * 24 * (365 / 2) // Time in seconds. 385 }); 386 ga("send", "pageview"); 387}; 388var initialteGoogleTagManager = exports.initialteGoogleTagManager = function initialteGoogleTagManager() { 389 console.log("initiating google tag manager");
vendor: 431 bytes, lines 389-402
389 390 (function (w, d, s, l, i) { 391 w[l] = w[l] || []; 392 w[l].push({ 393 "gtm.start": new Date().getTime(), 394 event: "gtm.js" 395 }); 396 var f = d.getElementsByTagName(s)[0], 397 j = d.createElement(s), 398 dl = l != "dataLayer" ? "&l=" + l : ""; 399 j.async = true; 400 j.src = "https://www.googletagmanager.com/gtm.js?id=" + i + dl; 401 f.parentNode.insertBefore(j, f); 402 })(window, document, "script", "dataLayer", "
402GTM-N7WK534
vendor: 4 bytes, line 402
402");
403}; 404var initiateMatomo = exports.initiateMatomo = function initiateMatomo() { 405 console.log("initiating Matomo"); 406 var _paq = window._paq = window._paq || []; 407 /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ 408 _paq.push(["trackPageView"]); 409 _paq.push(["enableLinkTracking"]); 410 (function () { 411 var u = "https://matomo.goteborgco.se/"; 412 _paq.push(["setTrackerUrl", u + "matomo.php"]); 413 _paq.push(["setSiteId", "10"]); 414 var d = document, 415 g = d.createElement("script"), 416 s = d.getElementsByTagName("script")[0]; 417 g.async = true; 418 g.src = u + "matomo.js"; 419 s.parentNode.insertBefore(g, s); 420 })(); 421}; 422 423},{}],5:[function(require,module,exports){ 424"use strict"; 425 426Object.defineProperty(exports, "__esModule", { 427 value: true 428}); 429exports.navigation = void 0; 430var e = function e(selector) { 431 return document.querySelector(selector); 432}; 433var toggleDrawer = function toggleDrawer() { 434 e('body').classList.toggle('has-open-drawer'); 435}; 436var toggleLanguage = function toggleLanguage() { 437 e('body').classList.toggle('has-open-language'); 438}; 439var searchListener = function searchListener(e) { 440 if (e.key === 'Escape') { 441 toggleSearch(); 442 } 443}; 444var toggleSearch = function toggleSearch(event) { 445 e('body').classList.toggle('has-open-search'); 446 if (e('body').classList.contains('has-open-search')) { 447 e('.nav-list-actions-search input[type="search"]').focus(); 448 document.body.addEventListener('keydown', searchListener, true); 449 } else { 450 document.body.removeEventListener('keydown', searchListener, true); 451 } 452}; 453var getPageY = function getPageY() { 454 return window.pageYOffset || document.body.scrollTop || window.scrollY; 455}; 456var logPageY = function logPageY() { 457 console.log('Page Y'); 458 if (window.pageYOffset) { 459 console.log('window.pageYOffset', window.pageYOffset); 460 } 461 if (document.body.pageYOffset) { 462 console.log('docuemnt.body.pageYOffset', document.body.pageYOffset); 463 } 464 if (window.scrollY) { 465 console.log('window.scrollY', window.scrollY); 466 } 467 console.log(''); 468}; 469var setFixed = function setFixed(y) { 470 var isFixed = e('.nav-list').classList.contains('is-fixed'); 471 472 // user is scrolled more than 10 pixels and nav isn't fixed, add the fixed class 473 if (y > 10 && !isFixed) { 474 e('.nav-list').classList.add('is-fixed'); 475 // user isn't scrolled at all or less than 10 pixels and the nav is fixed, remove the fixed class 476 } else if (y < 10 && isFixed) { 477 e('.nav-list').classList.remove('is-fixed'); 478 } 479}; 480var setScrollingDown = function setScrollingDown(y, prevY) { 481 var isScrollingDown = e('.nav-list').classList.contains('is-scrolling-down'); 482 483 // user is scrolling futher down from previous position and scrolling down class isn't added, add it 484 if (y > 100 && y > prevY && !isScrollingDown) { 485 e('.nav-list').classList.add('is-scrolling-down'); 486 // user is scrolling up (less than previous position) and scrolling down class is added, remove it 487 } else if (y < prevY && isScrollingDown) { 488 e('.nav-list').classList.remove('is-scrolling-down'); 489 } 490}; 491var navigation = exports.navigation = function navigation() { 492 var openDrawer = e('.nav-list-actions-open-drawer'); 493 var closeDrawer = e('.nav-drawer-actions-close-drawer'); 494 var toggleLangBtn = e('.nav-list-actions-toggle-language'); 495 var toggleSearchBtn = e('.nav-list-actions-toggle-search'); 496 if (openDrawer && closeDrawer) { 497 openDrawer.addEventListener('click', toggleDrawer); 498 closeDrawer.addEventListener('click', toggleDrawer); 499 } 500 if (toggleLangBtn) { 501 toggleLangBtn.addEventListener('click', toggleLanguage); 502 } 503 if (toggleSearchBtn) { 504 toggleSearchBtn.addEventListener('click', toggleSearch); 505 } 506 var y = getPageY(); 507 var prevY = 0; 508 var timer; 509 setFixed(y); 510 window.addEventListener('scroll', function () { 511 if (timer) { 512 window.clearTimeout(timer); 513 } 514 timer = setTimeout(function () { 515 y = getPageY(); 516 517 // logPageY() 518 setFixed(y); 519 setScrollingDown(y, prevY); 520 prevY = getPageY(); 521 }, 100); 522 }); 523}; 524 525},{}],6:[function(require,module,exports){ 526"use strict"; 527 528Object.defineProperty(exports, "__esModule", { 529 value: true 530}); 531exports.responsiveVideo = void 0; 532var getCookie = function getCookie(name) { 533 return document.cookie.split("; ").reduce(function (r, v) { 534 var parts = v.split("="); 535 return parts[0] === name ? decodeURIComponent(parts[1]) : r; 536 }, ""); 537}; 538var wrapElement = function wrapElement(element) { 539 return function (wrapper) { 540 element.parentNode.insertBefore(wrapper, element); 541 wrapper.appendChild(element); 542 }; 543}; 544var createVideoWrapper = function createVideoWrapper(parentType, parentClass) { 545 return function (childElement) { 546 var parentElement = document.createElement(parentType); 547 parentElement.style.cssText = "padding-bottom: ".concat(childElement.height / childElement.width * 100, "%;"); 548 parentElement.setAttribute('class', parentClass); 549 return parentElement; 550 }; 551}; 552var responsiveVideo = exports.responsiveVideo = function responsiveVideo() { 553 var videos = document.querySelectorAll('iframe[src*="youtube.com"]'); 554 videos.forEach(function (video) { 555 if (!getCookie("marketing_cookies")) { 556 video.parentElement.removeChild(video); 557 } else { 558 var wrapper = createVideoWrapper('div', 'responsive-video')(video); 559 wrapElement(video)(wrapper); 560 } 561 }); 562}; 563 564},{}],7:[function(require,module,exports){ 565"use strict"; 566 567var _nav = require("./nav"); 568var _filter = require("./filter"); 569var _googleMaps = require("./google-maps"); 570var _responsiveVideo = require("./responsive-video"); 571require("./cookie-popup"); 572require("./widget-goteborgcom"); 573/* global NodeList, Cookies, jQuery */ 574 575// import "./programme-load-more"; 576 577/* IE 11 fix */ 578if (window.NodeList && !NodeList.prototype.forEach) { 579 NodeList.prototype.forEach = Array.prototype.forEach; 580} 581(0, _nav.navigation)(); 582(0, _filter.filter)(); 583(0, _responsiveVideo.responsiveVideo)(); 584(0, _googleMaps.googleMaps)(jQuery); 585 586// has user already accepted cookies? proceed if not 587// if (!Cookies.get("cookie_agreement")) { 588// // show cookies notice 589// document.body.classList.add("has-open-cookie-notice"); 590// // listen for clicks on the close cookie notice button 591// document.querySelector(".cookie-notice").addEventListener("click", (e) => { 592// if (e.target.classList.contains("close-cookie-notice")) { 593// // if close cookies notice button is clicked 594// // set the cookie and remove the notice. 595// Cookies.set("cookie_agreement", true, { expires: 365 }); 596// document.body.classList.remove("has-open-cookie-notice"); 597// } 598// }); 599// } 600 601},{"./cookie-popup":1,"./filter":2,"./google-maps":3,"./nav":5,"./responsive-video":6,"./widget-goteborgcom":8}],8:[function(require,module,exports){ 602"use strict"; 603 604window.addEventListener("message", function (e) { 605 var _e$data, _e$data2, _e$data3; 606 if ((_e$data = e.data) !== null && _e$data !== void 0 && _e$data.widgetHeight && (_e$data2 = e.data) !== null && _e$data2 !== void 0 && _e$data2.widgetId) document.getElementById((_e$data3 = e.data) === null || _e$data3 === void 0 ? void 0 : _e$data3.widgetId).style.height = e.data.widgetHeight + "px"; 607}); 608 609},{}]},{},[7]) 610//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJhc3NldHMvanMvY29va2llLXBvcHVwLmpzIiwiYXNzZXRzL2pzL2ZpbHRlci5qcyIsImFzc2V0cy9qcy9nb29nbGUtbWFwcy5qcyIsImFzc2V0cy9qcy9pbml0aWF0ZUFuYWx5dGljcy5qcyIsImFzc2V0cy9qcy9uYXYuanMiLCJhc3NldHMvanMvcmVzcG9uc2l2ZS12aWRlby5qcyIsImFzc2V0cy9qcy9zY3JpcHQuanMiLCJhc3NldHMvanMvd2lkZ2V0LWdvdGVib3JnY29tLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7QUNBQSxJQUFBLGtCQUFBLEdBQUEsT0FBQTtBQUk2QixTQUFBLDJCQUFBLENBQUEsRUFBQSxDQUFBLFFBQUEsQ0FBQSx5QkFBQSxNQUFBLElBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxRQUFBLEtBQUEsQ0FBQSxxQkFBQSxDQUFBLFFBQUEsS0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxHQUFBLDJCQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsSUFBQSxDQUFBLHVCQUFBLENBQUEsQ0FBQSxNQUFBLElBQUEsQ0FBQSxLQUFBLENBQUEsR0FBQSxDQUFBLE9BQUEsRUFBQSxNQUFBLENBQUEsWUFBQSxFQUFBLGVBQUEsQ0FBQSxFQUFBLENBQUEsRUFBQSxDQUFBLFdBQUEsRUFBQSxXQUFBLEVBQUEsSUFBQSxDQUFBLENBQUEsTUFBQSxLQUFBLElBQUEsV0FBQSxJQUFBLE1BQUEsS0FBQSxFQUFBLENBQUEsQ0FBQSxFQUFBLFVBQUEsQ0FBQSxXQUFBLEVBQUEsQ0FBQSxVQUFBLENBQUEsS0FBQSxDQUFBLEVBQUEsQ0FBQSxnQkFBQSxTQUFBLGlKQUFBLENBQUEsRUFBQSxDQUFBLE9BQUEsQ0FBQSxnQkFBQSxDQUFBLFdBQUEsRUFBQSxJQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsTUFBQSxDQUFBLFdBQUEsRUFB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QUksY0FBQSxRQUFBLHVCQUFOLFFBQUEsQ0FBUSxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFDLElBQUk7QUFBQSxDQUFDLENBQUMiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCJpbXBvcnQge1xyXG4gIGluaXRpYWx0ZUdvb2dsZVRhZ01hbmFnZXIsXHJcbiAgaW5pdGlhdGVNYXRvbW8sXHJcbiAgaW5pdGlhdGVHb29nbGVBbmFseXRpY3MsXHJcbn0gZnJvbSBcIi4vaW5pdGlhdGVBbmFseXRpY3NcIjtcclxuXHJcbmNvbnN0IHBvcHVwID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5jb29raWUtcG9wdXBcIik7XHJcblxyXG4vL0RlZmluZSBmdW5jdGlvbnMgYXZhaWxhYmxlIGZvciBwb3B1cCBhbmQgaW5pdGlhbCB1c2VcclxuY29uc3QgZ2V0Q29va2llID0gKG5hbWUpID0+IHtcclxuICByZXR1cm4gZG9jdW1lbnQuY29va2llLnNwbGl0KFwiOyBcIikucmVkdWNlKChyLCB2KSA9PiB7XHJcbiAgICBjb25zdCBwYXJ0cyA9IHYuc3BsaXQoXCI9XCIpO1xyXG4gICAgcmV0dXJuIHBhcnRzWzBdID09PSBuYW1lID8gZGVjb2RlVVJJQ29tcG9uZW50KHBhcnRzWzFdKSA6
610IHI7XHJcbiAgfSwgXCJcIik7XHJcbn07XHJcblxyXG5pbml0aWF0ZU1hdG9tbygpO1xyXG5cclxuY29uc3QgYWRkU3RhdGlzdGljc0Nvb2tpZXMgPSAoKSA9PiB7XHJcbiAgaW5pdGlhdGVHb29nbGVBbmFseXRpY3MoKTtcclxufTtcclxuXHJcbmNvbnN0IGFkZE1hcmtldGluZ0Nvb2tpZXMgPSAoKSA9PiB7XHJcbiAgLy8gR29vZ2xlIFRhZyBNYW5hZ2VyXHJcbiAgaW5pdGlhbHRlR29vZ2xlVGFnTWFuYWdlcigpO1xyXG59O1xyXG5cclxuaWYgKHBvcHVwKSB7XHJcbiAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuY29va2llLW92ZXJsYXlcIik7XHJcbiAgY29uc3QgbW9kYWxzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5jb29raWUtcG9wdXAtY29udGVudFwiKTtcclxuICBjb25zdCBtb2RhbExpbmtzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5tb2RhbC1saW5rXCIpO1xyXG4gIGNvbnN0IGFjY2VwdEFsbEJ0biA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjc2V0LWFsbC1jb29raWVzXCIpO1xyXG4gIGNvbnN0IGFjY2VwdE5lY2Vzc2FyeUJ0biA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjc2V0LW5lY2Vzc2FyeS1jb29raWVzXCIpO1xyXG4gIGNvbnN0IGFjY2VwdFNlbGVjdGlvbkJ0biA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjY29uZmlybS1jaG9pY2VcIik7XHJcbiAgY29uc3QgZG9jdW1lbnRCb2R5ID0gZG9jdW1lbnQuYm9keTtcclxuICBjb25zdCBjb29raWVPcHRpb25TZWxlY3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmNvb2tpZS1wYWdl
610LW9wdGlvblwiKTtcclxuXHJcbiAgZG9jdW1lbnRCb2R5LnN0eWxlLm92ZXJmbG93ID0gXCJ2aXNpYmxlXCI7XHJcblxyXG4gIGNvbnN0IHNldENvb2tpZSA9IChuYW1lLCB2YWx1ZSwgZGF5cyA9IDcsIHBhdGggPSBcIi9cIikgPT4ge1xyXG4gICAgcmVtb3ZlUG9wdXAoKTtcclxuXHJcbiAgICBjb25zdCBleHBpcmVzID0gbmV3IERhdGUoRGF0ZS5ub3coKSArIGRheXMgKiA4NjRlNSkudG9VVENTdHJpbmcoKTtcclxuICAgIGRvY3VtZW50LmNvb2tpZSA9XHJcbiAgICAgIG5hbWUgK1xyXG4gICAgICBcIj1cIiArXHJcbiAgICAgIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkgK1xyXG4gICAgICBcIjsgZXhwaXJlcz1cIiArXHJcbiAgICAgIGV4cGlyZXMgK1xyXG4gICAgICBcIjsgcGF0aD1cIiArXHJcbiAgICAgIHBhdGg7XHJcblxyXG4gICAgc3dpdGNoIChuYW1lKSB7XHJcbiAgICAgIGNhc2UgXCJzdGF0aXN0aWNzX2Nvb2tpZXNcIjpcclxuICAgICAgICBhZGRTdGF0aXN0aWNzQ29va2llcygpO1xyXG5cclxuICAgICAgICBpZiAoZGF5cyA9PT0gNykge1xyXG4gICAgICAgICAgYXV0b0NoZWNrU2V0dGluZyhcInN0YXRpc3RpY3NcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIm1hcmtldGluZ19jb29raWVzXCI6XHJcbiAgICAgICAgYWRkTWFya2V0aW5nQ29va2llcygpO1xyXG5cclxuICAgICAgICBpZiAoZGF5cyA9PT0gNykge1xyXG4gICAgICAgICAgYXV0b0NoZWNrU2V0dGluZyhcIm1hcmtldGluZ1wiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IGRlbGV0ZUNvb2tpZSA9IChuYW1lLCBwYXRoID0gXCIvXCIpID0+IHtcclxuICAgIHNldENvb2tpZShuYW1lLCBcIlwiLCAtMSwgcGF0aCk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgYXV0b0NoZWNrU2V0dGluZyA9IChuYW1lKSA9PiB7XHJcbiAgICBjb29raWVPcHRpb25TZWxlY3QuZm9yRWFjaCgob3B0aW9uKSA9PiB7XHJcbiAgICAgIGlmIChuYW1lID09IG9wdGlvbi52YWx1ZSkge1xyXG4gICAgICAgIG9wdGlvbi5jaGVja2VkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3Qgc2Nyb2xsVG9Nb2RhbFRvcCA9ICgpID0+IHtcclxuICAgIGZvciAoY29uc3QgbSBvZiBtb2RhbHMpIHtcclxuICAgICAgbS5zY3JvbGxUbygwLCAwKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb25zdCBpc092ZXJsYXlIaWRkZW4gPSAoKSA9PiB7XHJcbiAgICBvdmVybGF5LmNsYXNzTGlzdC5jb250YWlucyhcImNvb2tpZS1vdmVybGF5LS1hY3RpdmVcIilcclxuICAgICAgPyAoZG9jdW1lbnRCb2R5LnN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIilcclxuICAgICAgOiAoZG9jdW1lbnRCb2R5LnN0eWxlLm92ZXJmbG93ID0gXCJ2aXNpYmxlXCIpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IHNob3dQb3B1cCA9ICgpID0+IHtcclxuICAgIGNvbnN0IGgxVGV4dCA9IHBvcHVwLnF1ZXJ5U2VsZWN0b3IoXCJoMVwiKS5pbm5lclRleHQ7XHJcbiAgICBpZiAoaDFUZXh0Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgY29uc29sZS5sb2coXCJoZXJlXCIpO1xyXG4gICAgICBvdmVybGF5LmNsYXNzTGlzdC5hZGQoXCJjb29raWUtb3ZlcmxheS0tYWN0aXZlXCIpO1xyXG4gICAgICBwb3B1cC5jbGFzc0xpc3QuYWRkKFwiY29va2llLXBvcHVwLS1hY3RpdmVcIik7XHJcbiAgICAgIGlzT3ZlcmxheUhpZGRlbigpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IHJlbW92ZVBvcHVwID0gKCkgPT4ge1xyXG4gICAgb3ZlcmxheS5jbGFzc0xpc3QucmVtb3ZlKFwiY29va2llLW92ZXJsYXktLWFjdGl2ZVwiKTtcclxuICAgIHBvcHVwLmNsYXNzTGlzdC5yZW1vdmUoXCJjb29raWUtcG9wdXAtLWFjdGl2ZVwiKTtcclxuICAgIGlzT3ZlcmxheUhpZGRlbigpO1xyXG4gIH07XHJcblxyXG4gIGlmICghZ2V0Q29va2llKFwibmVjZXNzYXJ5X2Nvb2tpZXNcIikpIHtcclxuICAgIHNob3dQb3B1cCgpO1xyXG4gIH1cclxuXHJcbiAgZm9yIChjb25zdCBsaW5rIG9mIG1vZGFsTGlua3MpIHtcclxuICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHNjcm9sbFRvTW9kYWxUb3ApO1xyXG4gIH1cclxuXHJcbiAgYWNjZXB0QWxsQnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICBzZXRDb29raWUoXCJuZWNlc3NhcnlfY29va2llc1wiLCBcInRydWVcIik7XHJcbiAgICBzZXRDb29raWUoXCJzdGF0aXN0aWNzX2Nvb2tpZXNcIiwgXCJ0cnVlXCIpO1xyXG4gICAgc2V0Q29va2llKFwibWFya2V0aW5nX2Nvb2tpZXNcIiwgXCJ0cnVlXCIpO1xyXG4gICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gIH0pO1xyXG5cclxuICBhY2NlcHROZWNlc3NhcnlCdG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgIHNldENvb2tpZShcIm5lY2Vzc2FyeV9jb29raWVzXCIsIFwidHJ1ZVwiKTtcclxuICB9KTtcclxuXHJcbiAgY29uc3QgY29uZmlybUNob2ljZSA9ICgpID0+IHtcclxuICAgIGNvbnN0IGNoZWNrQm94ZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiaW5wdXRbdHlwZT1jaGVja2JveF1cIik7XHJcbiAgICBsZXQgY29va2llTmFtZTtcclxuICAgIGxldCBjb29raWVDaGVja2VkO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGVja0JveGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvb2tpZU5hbWUgPSBgJHtjaGVja0JveGVzW2ldLnZhbHVlfV9jb29raWVzYDtcclxuICAgICAgY29va2llQ2hlY2tlZCA9IGNoZWNrQm94ZXNbaV0uY2hlY2tlZDtcclxuICAgICAgaWYgKGNvb2tpZUNoZWNrZWQpIHtcclxuICAgICAgICBzZXRDb29raWUoY29va2llTmFtZSwgY29va2llQ2hlY2tlZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHNldENvb2tpZShcIm5lY2Vzc2FyeV9jb29raWVzXCIsIFwidHJ1ZVwiKTtcclxuICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICB9O1xyXG5cclxuICBhY2NlcHRTZWxlY3Rpb25CdG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGNvbmZpcm1DaG9pY2UpO1xyXG5cclxuICAvLyBSZXRyaWV2ZSBhbmQgZWRpdCB1c2VyJ3MgcHJldmlvdXMgY2hvaWNlXHJcbiAgY29va2llT3B0aW9uU2VsZWN0LmZvckVhY2goKG9wdGlvbikgPT4ge1xyXG4gICAgb3B0aW9uLnZhbHVlID09PSBcIm1hcmtldGluZ1wiXHJcbiAgICAgID8gKG9wdGlvbi5jaGVja2VkID0gZ2V0Q29va2llKFwibWFya2V0aW5nX2Nvb2tpZXNcIikpXHJcbiAgICAgIDogKG9wdGlvbi5jaGVja2VkID0gZ2V0Q29va2llKFwic3RhdGlzdGljc19jb29raWVzXCIpKTtcclxuXHJcbiAgICBvcHRpb24uYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgIGlmIChvcHRpb24uY2hlY2tlZCkge1xyXG4gICAgICAgI
610HNldENvb2tpZShgJHtvcHRpb24udmFsdWV9X2Nvb2tpZXNgLCBcInRydWVcIik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZGVsZXRlQ29va2llKGAke29wdGlvbi52YWx1ZX1fY29va2llc2ApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9KTtcclxufVxyXG5cclxuY29uc3Qgc2V0SW5pdGlhbENvb2tpZXMgPSAoKSA9PiB7XHJcbiAgaWYgKGdldENvb2tpZShcInN0YXRpc3RpY3NfY29va2llc1wiKSkge1xyXG4gICAgYWRkU3RhdGlzdGljc0Nvb2tpZXMoKTtcclxuICB9XHJcbiAgaWYgKGdldENvb2tpZShcIm1hcmtldGluZ19jb29raWVzXCIpKSB7XHJcbiAgICBhZGRNYXJrZXRpbmdDb29raWVzKCk7XHJcbiAgfVxyXG59O1xyXG5zZXRJbml0aWFsQ29va2llcygpO1xyXG4iLCJcclxuZXhwb3J0IGNvbnN0IGZpbHRlciA9ICgpID0+IHtcclxuICBjb25zdCB0cmlnZ2VycyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5maWx0ZXJzJylcclxuICBjb25zdCB0YXJnZXRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1peC1jb250YWluZXInKVxyXG5cclxuICBsZXQgZmlsdGVycyA9IFtdXHJcbiAgY29uc3QgaXRlbXMgPSB0YXJnZXRzICYmIHRhcmdldHMucXVlcnlTZWxlY3RvckFsbCgnLm1peCcpXHJcblxyXG4gIGNvbnN0IGludGVyc2VjdCA9IChhcnIxLCBhcnIyKSA9PiB7XHJcbiAgICByZXR1cm4gYXJyMS5maWx0ZXIoeCA9PiBhcnIyLmluZGV4T2YoeCkgPj0gMCkubGVuZ3RoID4gMFxyXG4gIH1cclxuXHJcbiAgY29uc3QgdXBkYXRlVGFyZ2V0cyA9ICgpID0+IHtcclxuICAgIGlmIChmaWx0ZXJzLmxlbmd0aCkge1xyXG4gICAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGlmIChpbnRlcnNlY3QoZmlsdGVycywgQXJyYXkuZnJvbShpdGVtLmNsYXNzTGlzdCkpKSB7XHJcbiAgICAgICAgICBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ21peC1oaWRlJylcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKCdtaXgtaGlkZScpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ21peC1oaWRlJylcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0IHVwZGF0ZUZpbHRlcnMgPSB2YWx1ZSA9PiB7XHJcbiAgICBpZiAoZmlsdGVycy5pbmNsdWRlcyh2YWx1ZSkpIHtcclxuICAgICAgZmlsdGVycyA9IGZpbHRlcnMuZmlsdGVyKHYgPT4gdiAhPT0gdmFsdWUpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmaWx0ZXJzLnB1c2godmFsdWUpXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlVGFyZ2V0cygpXHJcbiAgfVxyXG5cclxuICBpZiAodHJpZ2dlcnMpIHtcclxuICAgIHRyaWdnZXJzLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZSA9PiB7XHJcbiAgICAgIGlmIChlLnRhcmdldC5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnZmlsdGVyJykpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnQ0xJQ0s6RklUTEVSJylcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGUudGFyZ2V0LnZhbHVlLnNwbGl0KCcuJylbMV1cclxuICAgICAgICB1cGRhdGVGaWx0ZXJzKHZhbHVlKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxufVxyXG4iLCIvKiBnbG9iYWwgZ29vZ2xlICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnb29nbGVNYXBzICgkKSB7XHJcbiAgLypcclxuICAgKiAgbmV3X21hcFxyXG4gICAqXHJcbiAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCByZW5kZXIgYSBHb29nbGUgTWFwIG9udG8gdGhlIHNlbGVjdGVkIGpRdWVyeSBlbGVtZW50XHJcbiAgICpcclxuICAgKiAgQHR5cGVcdGZ1bmN0aW9uXHJcbiAgICogIEBkYXRlXHQ4LzExLzIwMTNcclxuICAgKiAgQHNpbmNlXHQ0LjMuMFxyXG4gICAqXHJcbiAgICogIEBwYXJhbVx0JGVsIChqUXVlcnkgZWxlbWVudClcclxuICAgKiAgQHJldHVyblx0bi9hXHJcbiAgICovXHJcblxyXG4gIGZ1bmN0aW9uIG5ld19tYXAgKCRlbCkge1xyXG4gICAgLy8gdmFyXHJcbiAgICB2YXIgJG1hcmtlcnMgPSAkZWwuZmluZCgnLm1hcmtlcicpXHJcblxyXG4gICAgLy8gdmFyc1xyXG4gICAgdmFyIGFyZ3MgPSB7XHJcbiAgICAgIHpvb206IDE2LFxyXG4gICAgICBjZW50ZXI6IG5ldyBnb29nbGUubWFwcy5MYXRMbmcoMCwgMCksXHJcbiAgICAgIG1hcFR5cGVJZDogZ29vZ2xlLm1hcHMuTWFwVHlwZUlkLlJPQURNQVBcclxuICAgIH1cclxuXHJcbiAgICAvLyBjcmVhdGUgbWFwXHJcbiAgICB2YXIgbWFwID0gbmV3IGdvb2dsZS5tYXBzLk1hcCgkZWxbMF0sIGFyZ3MpXHJcblxyXG4gICAgLy8gYWRkIGEgbWFya2VycyByZWZlcmVuY2VcclxuICAgIG1hcC5tYXJrZXJzID0gW11cclxuXHJcbiAgICAvLyBhZGQgbWFya2Vyc1xyXG4gICAgJG1hcmtlcnMuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGFkZF9tYXJrZXIoJCh0aGlzKSwgbWFwKVxyXG4gICAgfSlcclxuXHJcbiAgICAvLyBjZW50ZXIgbWFwXHJcbiAgICBjZW50ZXJfbWFwKG1hcClcclxuXHJcbiAgICAvLyByZXR1cm5cclxuICAgIHJldHVybiBtYXBcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogIGFkZF9tYXJrZXJcclxuICAgKlxyXG4gICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgYWRkIGEgbWFya2VyIHRvIHRoZSBzZWxlY3RlZCBHb29nbGUgTWFwXHJcbiAgICpcclxuICAgKiAgQHR5cGVcdGZ1bmN0aW9uXHJcbiAgICogIEBkYXRlXHQ4LzExLzIwMTNcclxuICAgKiAgQHNpbmNlXHQ0LjMuMFxyXG4gICAqXHJcbiAgICogIEBwYXJhbVx0JG1hcmtlciAoalF1ZXJ5IGVsZW1lbnQpXHJcbiAgICogIEBwYXJhbVx0bWFwIChHb29nbGUgTWFwIG9iamVjdClcclxuICAgKiAgQHJldHVyblx0bi9hXHJcbiAgICovXHJcblxyXG4gIGZ1bmN0aW9uIGFkZF9tYXJrZXIgKCRtYXJrZXIsIG1hcCkge1xyXG4gICAgLy8gdmFyXHJcbiAgICB2YXIgbGF0bG5nID0gbmV3IGdvb2dsZS5tYXBzLkxhdExuZygkbWFya2VyLmF0dHIoJ2RhdGEtbGF0JyksICRtYXJrZXIuYXR0cignZGF0YS1sbmcnKSlcclxuXHJcbiAgICAvLyBjcmVhdGUgbWFya2VyXHJcbiAgICB2YXIgbWFya2VyID0gbmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7XHJcbiAgICAgIHBvc2l0aW9uOiBsYXRsbmcsXHJcbiAgICAgIG1hcDogbWFwXHJcbiAgICB9KVxyXG5cclxuICAgIC8vIGFkZCB0byBhcnJheVxyXG4gICAgbWFwLm1hcmtlcnMucHVzaChtYXJrZXIpXHJcblxyXG4gICAgLy8gaWYgbWFya2VyIGNvbnRhaW5zIEhUTUwsIGFkZCBpdCB0byBhbiBpbmZvV2luZG93XHJcbiAgICBpZiAoJG1hcmtlci5odG1sKCkpIHtcclxuICAgICAgLy8gY3JlYXRlIGluZm8gd2luZG93XHJcbiAgICAgIHZhciBpbmZvd2luZG93ID0gbmV3IGdvb2dsZS5tYXBzLkluZm9XaW5kb3coe1xyXG4gICAgICAgIGNvbnRlbnQ6ICRtYXJrZXIuaHRtbCgpXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICAvLyBzaG93IGluZm8gd2luZG93IHdoZW4gbWFya2VyIGlzIGNsaWNrZWRcclxuICAgICAgZ29vZ2xlLm1hcHMuZXZlbnQuYWRkTGlzdGVuZXIobWFya2VyLCAnY2xpY2snLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaW5mb3dpbmRvdy5vcGVuKG1hcCwgbWFya2VyKVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiAgY2VudGVyX21hcFxyXG4gICAqXHJcbiAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBjZW50ZXIgdGhlIG1hcCwgc2hvd2luZyBhbGwgbWFya2VycyBhdHRhY2hlZCB0byB0aGlzIG1hcFxyXG4gICAqXHJcbiAgICogIEB0eXBlXHRmdW5jdGlvblxyXG4gICAqICBAZGF0ZVx0OC8xMS8yMDEzXHJcbiAgICogIEBzaW5jZVx0NC4zLjBcclxuICAgKlxyXG4gICAqICBAcGFyYW1cdG1hcCAoR29vZ2xlIE1hcCBvYmplY3QpXHJcbiAgICogIEByZXR1cm5cdG4vYVxyXG4gICAqL1xyXG5cclxuICBmdW5jdGlvbiBjZW50ZXJfbWFwIChtYXApIHtcclxuICAgIC8vIHZhcnNcclxuICAgIHZhciBib3VuZHMgPSBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nQm91bmRzKClcclxuXHJcbiAgICAvLyBsb29wIHRocm91Z2ggYWxsIG1hcmtlcnMgYW5kIGNyZWF0ZSBib3VuZHNcclxuICAgICQuZWFjaChtYXAubWFya2VycywgZnVuY3Rpb24gKGksIG1hcmtlcikge1xyXG4gICAgICB2Y
610XIgbGF0bG5nID0gbmV3IGdvb2dsZS5tYXBzLkxhdExuZyhtYXJrZXIucG9zaXRpb24ubGF0KCksIG1hcmtlci5wb3NpdGlvbi5sbmcoKSlcclxuXHJcbiAgICAgIGJvdW5kcy5leHRlbmQobGF0bG5nKVxyXG4gICAgfSlcclxuXHJcbiAgICAvLyBvbmx5IDEgbWFya2VyP1xyXG4gICAgaWYgKG1hcC5tYXJrZXJzLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgIC8vIHNldCBjZW50ZXIgb2YgbWFwXHJcbiAgICAgIG1hcC5zZXRDZW50ZXIoYm91bmRzLmdldENlbnRlcigpKVxyXG4gICAgICBtYXAuc2V0Wm9vbSgxNilcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGZpdCB0byBib3VuZHNcclxuICAgICAgbWFwLmZpdEJvdW5kcyhib3VuZHMpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqICBkb2N1bWVudCByZWFkeVxyXG4gICAqXHJcbiAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCByZW5kZXIgZWFjaCBtYXAgd2hlbiB0aGUgZG9jdW1lbnQgaXMgcmVhZHkgKHBhZ2UgaGFzIGxvYWRlZClcclxuICAgKlxyXG4gICAqICBAdHlwZVx0ZnVuY3Rpb25cclxuICAgKiAgQGRhdGVcdDgvMTEvMjAxM1xyXG4gICAqICBAc2luY2VcdDUuMC4wXHJcbiAgICpcclxuICAgKiAgQHBhcmFtXHRuL2FcclxuICAgKiAgQHJldHVyblx0bi9hXHJcbiAgICovXHJcbiAgLy8gZ2xvYmFsIHZhclxyXG4gIFxyXG4gIHZhciBtYXAgPSBudWxsXHJcblxyXG4gICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHtcclxuICAgICQoJy5hY2YtbWFwJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIC8vIGNyZWF0ZSBtYXBcclxuICAgICAgbWFwID0gbmV3X21hcCgkKHRoaXMpKVxyXG4gICAgfSlcclxuICB9KVxyXG59XHJcbiIsImV4cG9ydCBjb25zdCBpbml0aWF0ZUdvb2dsZUFuYWx5dGljcyA9ICgpID0+IHtcclxuICBjb25zb2xlLmxvZyhcImluaXRpYXRpbmcgZ29vZ2xlIGFuYWx5dGljc1wiKTtcclxuICAoZnVuY3Rpb24gKGksIHMsIG8sIGcsIHIsIGEsIG0pIHtcclxuICAgIGlbXCJHb29nbGVBbmFseXRpY3NPYmplY3RcIl0gPSByO1xyXG4gICAgKGlbcl0gPVxyXG4gICAgICBpW3JdIHx8XHJcbiAgICAgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAoaVtyXS5xID0gaVtyXS5xIHx8IFtdKS5wdXNoKGFyZ3VtZW50cyk7XHJcbiAgICAgIH0pLFxyXG4gICAgICAoaVtyXS5sID0gMSAqIG5ldyBEYXRlKCkpO1xyXG4gICAgKGEgPSBzLmNyZWF0ZUVsZW1lbnQobykpLCAobSA9IHMuZ2V0RWxlbWVudHNCeVRhZ05hbWUobylbMF0pO1xyXG4gICAgYS5hc3luYyA9IDE7XHJcbiAgICBhLnNyYyA9IGc7XHJcbiAgICBtLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsIG0pO1xyXG4gIH0pKFxyXG4gICAgd2luZG93LFxyXG4gICAgZG9jdW1lbnQsXHJcbiAgICBcInNjcmlwdFwiLFxyXG4gICAgXCIvL3d3dy5nb29nbGUtYW5hbHl0aWNzLmNvbS9hbmFseXRpY3MuanNcIixcclxuICAgIFwiZ2FcIlxyXG4gICk7XHJcblxyXG4gIGdhKFwiY3JlYXRlXCIsIFwiVUEtNzUxNDE2NDctM1wiLCB7XHJcbiAgICBjb29raWVFeHBpcmVzOiA2MCAqIDYwICogMjQgKiAoMzY1IC8gMiksIC8vIFRpbWUgaW4gc2Vjb25kcy5cclxuICB9KTtcclxuICBnYShcInNlbmRcIiwgXCJwYWdldmlld1wiKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpbml0aWFsdGVHb29nbGVUYWdNYW5hZ2VyID0gKCkgPT4ge1xyXG4gIGNvbnNvbGUubG9nKFwiaW5pdGlhdGluZyBnb29nbGUgdGFnIG1hbmFnZXJcIik7XHJcbiAgKGZ1bmN0aW9uICh3LCBkLCBzLCBsLCBpKSB7XHJcbiAgICB3W2xdID0gd1tsXSB8fCBbXTtcclxuICAgIHdbbF0ucHVzaCh7IFwiZ3RtLnN0YXJ0XCI6IG5ldyBEYXRlKCkuZ2V0VGltZSgpLCBldmVudDogXCJndG0uanNcIiB9KTtcclxuICAgIHZhciBmID0gZC5nZXRFbGVtZW50c0J5VGFnTmFtZShzKVswXSxcclxuICAgICAgaiA9IGQuY3JlYXRlRWxlbWVudChzKSxcclxuICAgICAgZGwgPSBsICE9IFwiZGF0YUxheWVyXCIgPyBcIiZsPVwiICsgbCA6IFwiXCI7XHJcbiAgICBqLmFzeW5jID0gdHJ1ZTtcclxuICAgIGouc3JjID0gXCJodHRwczovL3d3dy5nb29nbGV0YWdtYW5hZ2VyLmNvbS9ndG0uanM/aWQ9XCIgKyBpICsgZGw7XHJcbiAgICBmLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGosIGYpO1xyXG4gIH0pKHdpbmRvdywgZG9jdW1lbnQsIFwic2NyaXB0XCIsIFwiZGF0YUxheWVyXCIsIFwiR1RNLU43V0s1MzRcIik7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgaW5pdGlhdGVNYXRvbW8gPSAoKSA9PiB7XHJcbiAgY29uc29sZS5sb2coXCJpbml0aWF0aW5nIE1hdG9tb1wiKTtcclxuICB2YXIgX3BhcSA9ICh3aW5kb3cuX3BhcSA9IHdpbmRvdy5fcGFxIHx8IFtdKTtcclxuICAvKiB0cmFja2VyIG1ldGhvZHMgbGlrZSBcInNldEN1c3RvbURpbWVuc2lvblwiIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIFwidHJhY2tQYWdlVmlld1wiICovXHJcbiAgX3BhcS5wdXNoKFtcInRyYWNrUGFnZVZpZXdcIl0pO1xyXG4gIF9wYXEucHVzaChbXCJlbmFibGVMaW5rVHJhY2tpbmdcIl0pO1xyXG4gIChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgdSA9IFwiaHR0cHM6Ly9tYXRvbW8uZ290ZWJvcmdjby5zZS9cIjtcclxuICAgIF9wYXEucHVzaChbXCJzZXRUcmFja2VyVXJsXCIsIHUgKyBcIm1hdG9tby5waHBcIl0pO1xyXG4gICAgX3BhcS5wdXNoKFtcInNldFNpdGVJZFwiLCBcIjEwXCJdKTtcclxuICAgIHZhciBkID0gZG9jdW1lbnQsXHJcbiAgICAgIGcgPSBkLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIiksXHJcbiAgICAgIHMgPSBkLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2NyaXB0XCIpWzBdO1xyXG4gICAgZy5hc3luYyA9IHRydWU7XHJcbiAgICBnLnNyYyA9IHUgKyBcIm1hdG9tby5qc1wiO1xyXG4gICAgcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShnLCBzKTtcclxuICB9KSgpO1xyXG59O1xyXG4iLCJjb25zdCBlID0gc2VsZWN0b3IgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcilcclxuXHJcbmNvbnN0IHRvZ2dsZURyYXdlciA9ICgpID0+IHtcclxuICBlKCdib2R5JykuY2xhc3NMaXN0LnRvZ2dsZSgnaGFzLW9wZW4tZHJhd2VyJylcclxufVxyXG5cclxuY29uc3QgdG9nZ2xlTGFuZ3VhZ2UgPSAoKSA9PiB7XHJcbiAgZSgnYm9keScpLmNsYXNzTGlzdC50b2dnbGUoJ2hhcy1vcGVuLWxhbmd1YWdlJylcclxufVxyXG5cclxuY29uc3Qgc2VhcmNoTGlzdGVuZXIgPSAoZSkgPT4ge1xyXG4gIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIHtcclxuICAgIHRvZ2dsZVNlYXJjaCgpXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCB0b2dnbGVTZWFyY2ggPSAoZXZlbnQpID0+IHtcclxuICBlKCdib2R5JykuY2xhc3NMaXN0LnRvZ2dsZSgnaGFzLW9wZW4tc2VhcmNoJylcclxuXHJcbiAgaWYgKGUoJ2JvZHknKS5jbGFzc0xpc3QuY29udGFpbnMoJ2hhcy1vcGVuLXNlYXJjaCcpKSB7XHJcbiAgICBlKCcubmF2LWxpc3QtYWN0aW9ucy1zZWFyY2ggaW5wdXRbdHlwZT1cInNlYXJjaFwiXScpLmZvY3VzKClcclxuXHJcbiAgICBkb2
610N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBzZWFyY2hMaXN0ZW5lciwgdHJ1ZSlcclxuICB9IGVsc2Uge1xyXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgc2VhcmNoTGlzdGVuZXIsIHRydWUpXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBnZXRQYWdlWSA9ICgpID0+ICh3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgfHwgd2luZG93LnNjcm9sbFkpXHJcblxyXG5jb25zdCBsb2dQYWdlWSA9ICgpID0+IHtcclxuICBjb25zb2xlLmxvZygnUGFnZSBZJylcclxuICBpZiAod2luZG93LnBhZ2VZT2Zmc2V0KSB7IGNvbnNvbGUubG9nKCd3aW5kb3cucGFnZVlPZmZzZXQnLCB3aW5kb3cucGFnZVlPZmZzZXQpIH1cclxuICBpZiAoZG9jdW1lbnQuYm9keS5wYWdlWU9mZnNldCkgeyBjb25zb2xlLmxvZygnZG9jdWVtbnQuYm9keS5wYWdlWU9mZnNldCcsIGRvY3VtZW50LmJvZHkucGFnZVlPZmZzZXQpIH1cclxuICBpZiAod2luZG93LnNjcm9sbFkpIHsgY29uc29sZS5sb2coJ3dpbmRvdy5zY3JvbGxZJywgd2luZG93LnNjcm9sbFkpIH1cclxuICBjb25zb2xlLmxvZygnJylcclxufVxyXG5cclxuY29uc3Qgc2V0Rml4ZWQgPSB5ID0+IHtcclxuICBjb25zdCBpc0ZpeGVkID0gZSgnLm5hdi1saXN0JykuY2xhc3NMaXN0LmNvbnRhaW5zKCdpcy1maXhlZCcpXHJcblxyXG4gIC8vIHVzZXIgaXMgc2Nyb2xsZWQgbW9yZSB0aGFuIDEwIHBpeGVscyBhbmQgbmF2IGlzbid0IGZpeGVkLCBhZGQgdGhlIGZpeGVkIGNsYXNzXHJcbiAgaWYgKHkgPiAxMCAmJiAhaXNGaXhlZCkge1xyXG4gICAgZSgnLm5hdi1saXN0JykuY2xhc3NMaXN0LmFkZCgnaXMtZml4ZWQnKVxyXG4gICAgLy8gdXNlciBpc24ndCBzY3JvbGxlZCBhdCBhbGwgb3IgbGVzcyB0aGFuIDEwIHBpeGVscyBhbmQgdGhlIG5hdiBpcyBmaXhlZCwgcmVtb3ZlIHRoZSBmaXhlZCBjbGFzc1xyXG4gIH0gZWxzZSBpZiAoeSA8IDEwICYmIGlzRml4ZWQpIHtcclxuICAgIGUoJy5uYXYtbGlzdCcpLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWZpeGVkJylcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IHNldFNjcm9sbGluZ0Rvd24gPSAoeSwgcHJldlkpID0+IHtcclxuICBjb25zdCBpc1Njcm9sbGluZ0Rvd24gPSBlKCcubmF2LWxpc3QnKS5jbGFzc0xpc3QuY29udGFpbnMoJ2lzLXNjcm9sbGluZy1kb3duJylcclxuXHJcbiAgLy8gdXNlciBpcyBzY3JvbGxpbmcgZnV0aGVyIGRvd24gZnJvbSBwcmV2aW91cyBwb3NpdGlvbiBhbmQgc2Nyb2xsaW5nIGRvd24gY2xhc3MgaXNuJ3QgYWRkZWQsIGFkZCBpdFxyXG4gIGlmICh5ID4gMTAwICYmIHkgPiBwcmV2WSAmJiAhaXNTY3JvbGxpbmdEb3duKSB7XHJcbiAgICBlKCcubmF2LWxpc3QnKS5jbGFzc0xpc3QuYWRkKCdpcy1zY3JvbGxpbmctZG93bicpXHJcbiAgICAvLyB1c2VyIGlzIHNjcm9sbGluZyB1cCAobGVzcyB0aGFuIHByZXZpb3VzIHBvc2l0aW9uKSBhbmQgc2Nyb2xsaW5nIGRvd24gY2xhc3MgaXMgYWRkZWQsIHJlbW92ZSBpdFxyXG4gIH0gZWxzZSBpZiAoeSA8IHByZXZZICYmIGlzU2Nyb2xsaW5nRG93bikge1xyXG4gICAgZSgnLm5hdi1saXN0JykuY2xhc3NMaXN0LnJlbW92ZSgnaXMtc2Nyb2xsaW5nLWRvd24nKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IG5hdmlnYXRpb24gPSAoKSA9PiB7XHJcbiAgY29uc3Qgb3BlbkRyYXdlciA9IGUoJy5uYXYtbGlzdC1hY3Rpb25zLW9wZW4tZHJhd2VyJylcclxuICBjb25zdCBjbG9zZURyYXdlciA9IGUoJy5uYXYtZHJhd2VyLWFjdGlvbnMtY2xvc2UtZHJhd2VyJylcclxuICBjb25zdCB0b2dnbGVMYW5nQnRuID0gZSgnLm5hdi1saXN0LWFjdGlvbnMtdG9nZ2xlLWxhbmd1YWdlJylcclxuICBjb25zdCB0b2dnbGVTZWFyY2hCdG4gPSBlKCcubmF2LWxpc3QtYWN0aW9ucy10b2dnbGUtc2VhcmNoJylcclxuXHJcbiAgaWYgKG9wZW5EcmF3ZXIgJiYgY2xvc2VEcmF3ZXIpIHtcclxuICAgIG9wZW5EcmF3ZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0b2dnbGVEcmF3ZXIpXHJcbiAgICBjbG9zZURyYXdlci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRvZ2dsZURyYXdlcilcclxuICB9XHJcblxyXG4gIGlmICh0b2dnbGVMYW5nQnRuKSB7XHJcbiAgICB0b2dnbGVMYW5nQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdG9nZ2xlTGFuZ3VhZ2UpXHJcbiAgfVxyXG5cclxuICBpZiAodG9nZ2xlU2VhcmNoQnRuKSB7XHJcbiAgICB0b2dnbGVTZWFyY2hCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0b2dnbGVTZWFyY2gpXHJcbiAgfVxyXG5cclxuICBsZXQgeSA9IGdldFBhZ2VZKClcclxuICBsZXQgcHJldlkgPSAwXHJcbiAgbGV0IHRpbWVyXHJcblxyXG4gIHNldEZpeGVkKHkpXHJcblxyXG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCAoKSA9PiB7XHJcbiAgICBpZiAodGltZXIpIHtcclxuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aW1lcilcclxuICAgIH1cclxuXHJcbiAgICB0aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICB5ID0gZ2V0UGFnZVkoKVxyXG5cclxuICAgICAgLy8gbG9nUGFnZVkoKVxyXG4gICAgICBzZXRGaXhlZCh5KVxyXG4gICAgICBzZXRTY3JvbGxpbmdEb3duKHksIHByZXZZKVxyXG5cclxuICAgICAgcHJldlkgPSBnZXRQYWdlWSgpXHJcbiAgICB9LCAxMDApXHJcbiAgfSlcclxufVxyXG4iLCJjb25zdCBnZXRDb29raWUgPSAobmFtZSkgPT4ge1xyXG4gIHJldHVybiBkb2N1bWVudC5jb29raWUuc3BsaXQoXCI7IFwiKS5yZWR1Y2UoKHIsIHYpID0+IHtcclxuICAgIGNvbnN0IHBhcnRzID0gdi5zcGxpdChcIj1cIik7XHJcbiAgICByZXR1cm4gcGFydHNbMF0gPT09IG5hbWUgPyBkZWNvZGVVUklDb21wb25lbnQocGFydHNbMV0pIDogcjtcclxuICB9LCBcIlwiKTtcclxufTtcclxuXHJcbmNvbnN0IHdyYXBFbGVtZW50ID0gZWxlbWVudCA9PiB3cmFwcGVyID0+IHtcclxuICBlbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHdyYXBwZXIsIGVsZW1lbnQpXHJcbiAgd3JhcHBlci5hcHBlbmRDaGlsZChlbGVtZW50KVxyXG59XHJcblxyXG5jb25zdCBjcmVhdGVWaWRlb1dyYXBwZXIgPSAocGFyZW50VHlwZSwgcGFyZW50Q2xhc3MpID0+IGNoaWxkRWxlbWVudCA9PiB7XHJcbiAgY29uc3QgcGFyZW50RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocGFyZW50VHlwZSlcclxuXHJcbiAgcGFyZW50RWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gYHBhZGRpbmctYm90dG9tOiAkeyhjaGlsZEVsZW1lbnQuaGVpZ2h0IC8gY2hpbGRFbGVtZW50LndpZHR
610oKSAqIDEwMH0lO2BcclxuICBwYXJlbnRFbGVtZW50LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBwYXJlbnRDbGFzcylcclxuXHJcbiAgcmV0dXJuIHBhcmVudEVsZW1lbnRcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHJlc3BvbnNpdmVWaWRlbyA9ICgpID0+IHtcclxuICBjb25zdCB2aWRlb3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpZnJhbWVbc3JjKj1cInlvdXR1YmUuY29tXCJdJylcclxuXHJcbiAgdmlkZW9zLmZvckVhY2godmlkZW8gPT4ge1xyXG4gICAgaWYgKCFnZXRDb29raWUoXCJtYXJrZXRpbmdfY29va2llc1wiKSkge1xyXG4gICAgICB2aWRlby5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHZpZGVvKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHdyYXBwZXIgPSBjcmVhdGVWaWRlb1dyYXBwZXIoJ2RpdicsICdyZXNwb25zaXZlLXZpZGVvJykodmlkZW8pXHJcbiAgXHJcbiAgICAgIHdyYXBFbGVtZW50KHZpZGVvKSh3cmFwcGVyKVxyXG4gICAgfVxyXG4gIH0pXHJcbn1cclxuIiwiLyogZ2xvYmFsIE5vZGVMaXN0LCBDb29raWVzLCBqUXVlcnkgKi9cclxuXHJcbmltcG9ydCB7IG5hdmlnYXRpb24gfSBmcm9tIFwiLi9uYXZcIjtcclxuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSBcIi4vZmlsdGVyXCI7XHJcbmltcG9ydCB7IGdvb2dsZU1hcHMgfSBmcm9tIFwiLi9nb29nbGUtbWFwc1wiO1xyXG5pbXBvcnQgeyByZXNwb25zaXZlVmlkZW8gfSBmcm9tIFwiLi9yZXNwb25zaXZlLXZpZGVvXCI7XHJcbmltcG9ydCBcIi4vY29va2llLXBvcHVwXCI7XHJcbi8vIGltcG9ydCBcIi4vcHJvZ3JhbW1lLWxvYWQtbW9yZVwiO1xyXG5pbXBvcnQgXCIuL3dpZGdldC1nb3RlYm9yZ2NvbVwiO1xyXG5cclxuXHJcbi8qIElFIDExIGZpeCAqL1xyXG5pZiAod2luZG93Lk5vZGVMaXN0ICYmICFOb2RlTGlzdC5wcm90b3R5cGUuZm9yRWFjaCkge1xyXG4gIE5vZGVMaXN0LnByb3RvdHlwZS5mb3JFYWNoID0gQXJyYXkucHJvdG90eXBlLmZvckVhY2g7XHJcbn1cclxuXHJcbm5hdmlnYXRpb24oKTtcclxuZmlsdGVyKCk7XHJcbnJlc3BvbnNpdmVWaWRlbygpO1xyXG5nb29nbGVNYXBzKGpRdWVyeSk7XHJcblxyXG4vLyBoYXMgdXNlciBhbHJlYWR5IGFjY2VwdGVkIGNvb2tpZXM/IHByb2NlZWQgaWYgbm90XHJcbi8vIGlmICghQ29va2llcy5nZXQoXCJjb29raWVfYWdyZWVtZW50XCIpKSB7XHJcbi8vICAgLy8gc2hvdyBjb29raWVzIG5vdGljZVxyXG4vLyAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcImhhcy1vcGVuLWNvb2tpZS1ub3RpY2VcIik7XHJcbi8vICAgLy8gbGlzdGVuIGZvciBjbGlja3Mgb24gdGhlIGNsb3NlIGNvb2tpZSBub3RpY2UgYnV0dG9uXHJcbi8vICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5jb29raWUtbm90aWNlXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xyXG4vLyAgICAgaWYgKGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcImNsb3NlLWNvb2tpZS1ub3RpY2VcIikpIHtcclxuLy8gICAgICAgLy8gaWYgY2xvc2UgY29va2llcyBub3RpY2UgYnV0dG9uIGlzIGNsaWNrZWRcclxuLy8gICAgICAgLy8gc2V0IHRoZSBjb29raWUgYW5kIHJlbW92ZSB0aGUgbm90aWNlLlxyXG4vLyAgICAgICBDb29raWVzLnNldChcImNvb2tpZV9hZ3JlZW1lbnRcIiwgdHJ1ZSwgeyBleHBpcmVzOiAzNjUgfSk7XHJcbi8vICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShcImhhcy1vcGVuLWNvb2tpZS1ub3RpY2VcIik7XHJcbi8vICAgICB9XHJcbi8vICAgfSk7XHJcbi8vIH1cclxuIiwid2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsZT0+e2lmKGUuZGF0YT8ud2lkZ2V0SGVpZ2h0ICYmIGUuZGF0YT8ud2lkZ2V0SWQpZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZS5kYXRhPy53aWRnZXRJZCkuc3R5bGUuaGVpZ2h0PWUuZGF0YS53aWRnZXRIZWlnaHQrXCJweFwifSk7Il19
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.