{"version":3,"sources":["src/_scripts/node_modules/browser-pack/_prelude.js","src/_scripts/src/_modules/accordion/accordion.js","src/_scripts/src/_modules/applications/applications.js","src/_scripts/src/_modules/card/card.js","src/_scripts/src/_modules/links/links.js","src/_scripts/src/_modules/main_nav/main_nav.js","src/_scripts/src/_modules/toolbar/toolbar.js","src/_scripts/src/_scripts/main.js"],"names":[],"mappings":"AAAA;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"main.js","sourcesContent":["(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= 0 || url.indexOf(\"dxau.digital\") >= 0){\r\n\t\t\t$('.links_item_link_internal', this).css('display','block');\r\n\t\t}\r\n\t\telse{\r\n\t\t\t$('.links_item_link_external', this).css('display','block');\r\n\t\t\t$('.links_item_link_url', this).css('display','block');\r\n\t\t\t$('a', this).attr(\"target\",\"_blank\");\r\n\t\t}\r\n\t});\r\n}\r\n\r\nmodule.exports = Links;","'use strict';\r\n\r\n\r\n// Constructor\r\nvar Menu = function() {\r\n\r\n\tvar isDragging = false;\r\n\tvar isTouching = (\"ontouchstart\" in document.documentElement);\r\n\r\n\t//Navigation\r\n\t// if(!isTouching){\r\n\t\t$('.first-level-item.haschild').on('mouseenter', function(e){\r\n\t\t\t$(this).addClass('active');\r\n\t\t\t$('.overlay').addClass('active');\r\n\t\t});\r\n\r\n\t\t$('.first-level-item.haschild').on('mouseleave', function(e){\r\n\t\t\t\t$(this).removeClass('active');\r\n\t\t\t\t$('.overlay').removeClass('active');\r\n\t\t});\r\n\t// }\r\n\r\n\t$('body').on('touchstart', function(e){\r\n\t\tisDragging = false;\r\n\t\tisTouching = true;\r\n\t\tvar x = $(e.target).is('.toolbarsearch, .toolbarsearch *');\r\n\t\tvar y = $(e.target).is('.profile, .profile *');\r\n\t\tif(!x){\r\n\t\t\t$('.toolbarsearch .search').removeClass('active');\r\n\t\t\t$('.toolbarsearch').removeClass('active');\r\n\t\t}\r\n\t\tif(!y){\r\n\t\t\t$('.mycevn').removeClass('active');\r\n\t\t}\r\n\t});\r\n\r\n\t$('body').on('touchmove', function(e){\r\n\t\tisDragging = true;\r\n\t});\r\n\r\n\t$('body').on('touchend', function(e){\r\n\t\tisTouching = false;\r\n\t\tif($('.search').hasClass('.active')){\r\n\t\t}\r\n\t\tvar x = $(e.target).is('.first-level li.haschild');\r\n\t\tvar y = $(e.target).is('.first-level li.haschild.active');\r\n\t\tif(x && !isDragging){\r\n\t\t\t$('.first-level li.haschild').removeClass('active');\r\n\t\t\t$('.dismiss').addClass('active');\r\n\t\t\t$(e.target).addClass('active');\r\n\t\t\t$('.overlay').addClass('active');\r\n\t\t\tvar left = $(e.target).offset().left\r\n\t\t\tvar width = $('.first-level').width();\r\n\t\tvar diff = left - width/3;\r\n\t\t\t$('.first-level').animate({\r\n\t\t\tscrollLeft: $('.first-level').scrollLeft()+diff\r\n\t\t}, 500);\r\n\t\t}\r\n\t\tif(y && !isDragging){\r\n\t\t\t$('.first-level li.haschild.active').addClass('touch');\r\n\t\t}\r\n\t});\r\n\r\n\t//Expand third level\r\n\tif ( $(window).width() <= 1024 ){\r\n\t\t$('.third-level').slideUp();\r\n\t}\r\n\t$('.second-level-item .expand-child').on('click', function(){\r\n\t\t$('.third-level').slideUp();\r\n\t\t//$('.second-level-item').removeClass('isExpanded');\r\n\t\tif( $(this).parent('.second-level-item').hasClass('isExpanded')){\r\n\t\t\t$('.second-level-item').removeClass('isExpanded');\r\n\t\t\t//$(this).parent('.second-level-item').removeClass('isExpanded');\r\n\t\t\t$(this).next('.third-level').slideUp();\r\n\t\t}\r\n\t\telse{\r\n\t\t\t$('.second-level-item').removeClass('isExpanded');\r\n\t\t\t$(this).parent('.second-level-item').addClass('isExpanded');\r\n\t\t\t$(this).next('.third-level').slideDown();\r\n\t\t}\r\n\t\t$('html, body').animate({\r\n\t\t\tscrollTop: $(this).offset().top\r\n\t\t}, 300);\r\n\t});\r\n\r\n\t$('.dismiss').on('click', function(e){\r\n\t\t$('.first-level-item.haschild').removeClass('active');\r\n\t\t$('.overlay').removeClass('active');\r\n\t\t$(this).removeClass('active');\r\n\t\t$('.third-level').slideUp();\r\n\t\t$('.second-level-item').removeClass('isExpanded');\r\n//\t\t$('html, body').animate({\r\n//\t\t\tscrollTop: $('#header').offset().top\r\n//\t\t}, 500);\r\n\t});\r\n\t$('.overlay').on('click', function(e){\r\n\t\t$('.first-level-item.haschild').removeClass('active');\r\n\t\t$('.dismiss').removeClass('active');\r\n\t\t$(this).removeClass('active');\r\n\t\t$('.third-level').slideUp();\r\n\t\t$('.second-level-item').removeClass('isExpanded');\r\n\t});\r\n\r\n\t$('.sitemapList >ul > li > a').wrap('

');\r\n\r\n\t//Interior article navigation hash\r\n\tvar currentHash = '#';\r\n\tif ($('.page_article h2').length > 1){\r\n\t\t$('.page_article h2').each(function(index){\r\n\t\t\tvar title = $(this).text();\r\n\t\t\tvar id = title.replace(/\\s+/g, '-').toLowerCase();\r\n\t\t\tvar link = '#'+id;\r\n\t\t\tvar navItem = '
  • '+title+'
  • ';\r\n\t\t\t$(this).attr('id', id);\r\n\t\t\t$('.sticky .page_nav ul').append(navItem);\r\n\t\t\t$('.sticky').show();\r\n\t\t});\r\n\r\n\t\t$(document).scroll(function () {\r\n\t\t\t$('main article').each(function () {\r\n\t\t\t\tvar top = window.pageYOffset;\r\n\t\t\t\tvar distance = top - $(this).offset().top;\r\n\t\t\t\tvar hash = $('h2', this).attr('id');\r\n\t\t\t\tif (distance < 30 && distance > -30 && currentHash != hash) {\r\n\t\t\t\t\twindow.location.hash = (hash);\r\n\t\t\t\t\tcurrentHash = hash;\r\n\t\t\t\t\t$('.sticky a').removeClass('active');\r\n\t\t\t\t\t$('a[href$=\"'+currentHash+'\"]').toggleClass('active');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\t//Smooth scrolling for hash # links\r\n\t\t$('.sticky a[href*=\"#\"]').not('[href=\"#\"]').click(function(event) {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tvar target = $(this.hash);\r\n\t\t\t$('html, body').animate({\r\n\t\t\tscrollTop: target.offset().top\r\n\t\t\t}, 500);\r\n\t\t});\r\n\t}\r\n\telse{\r\n\t\t$('.sticky .page_nav').css('display','none');\r\n\t}\r\n\r\n};\r\n\r\nmodule.exports = Menu;\r\n","'use strict';\r\n\r\n// Constructor\r\nvar Toolbar = function() {\r\n\r\n\t$('body').on('click', function(e){\r\n\t\tvar x = $(e.target).is('.profile, .profile *');\r\n\t\tif(!x){\r\n\t\t\t$('.mycevn').removeClass('active');\r\n\t\t}\r\n\t});\r\n\r\n\t//Toolbar search\r\n\t$('.toolbarsearch > div.icomoon-search').on('click', function(e){\r\n\t\t$('.toolbarsearch .search').toggleClass('active');\r\n\t\t$('.toolbarsearch').toggleClass('active');\r\n\t});\r\n\r\n\t//Toolbar profile\r\n\t$('.profile .icomoon-profile').on('click', function(e){\r\n\t\t\t$('.mycevn').toggleClass('active');\r\n\t\t\tconsole.log('click');\r\n\t\t\te.preventDefault;\r\n \t});\r\n\r\n\t// //Keep option selected\r\n\t// var url = new URL(document.location);\r\n // \tvar params = url.searchParams;\r\n\t// var current = params.get('code');\r\n\t// $('option[code*='+current+']').attr('selected','selected');\r\n\t// //Change homepage to diocese\r\n\t// $('.zones select').on('change', function(e){\r\n\t// \tconsole.log(params.get('code'));\r\n\t// \tvar code = $('option:selected', this).attr('code');\r\n\t// \twindow.location.href = \"/\"+e.target.value+\"?code=\"+code;\r\n\t//\r\n\t// });\r\n}\r\n\r\nmodule.exports = Toolbar;\r\n","// Main javascript entry point\r\n// Should handle bootstrapping/starting application\r\n\r\n'use strict';\r\n\r\n//var $ = require('jquery');\r\nvar Menu = require('../_modules/main_nav/main_nav');\r\nvar Toolbar = require('../_modules/toolbar/toolbar');\r\nvar Card = require('../_modules/card/card');\r\nvar Apps = require('../_modules/applications/applications');\r\nvar Accordions = require('../_modules/accordion/accordion');\r\nvar Links = require('../_modules/links/links');\r\n\r\n$(function () {\r\n\r\n\tnew Menu();\r\n\tnew Toolbar();\r\n\tnew Card();\r\n\tnew Apps();\r\n\tnew Accordions();\r\n\tnew Links();\r\n\r\n\t//selectbox in upload file page, remove the checkbox\r\n\t$(document).ready(function() {\r\n\t\tvar selectValue = $('#p_lt_ctl01_pageplaceholder_p_lt_ctl01_pageplaceholder_p_lt_ctl01_CevnTwoColumnLayout_CevnTwoColumnLayout_Center_WebPartZone_WebPartZone_zone_CevnFileUploadUtility_DocumentTypes').val();\r\n\t\tif(\tselectValue != \"1\"){\r\n\t\t\t$('.card_item.checkbox').hide();\r\n\t\t}\r\n\t\t\r\n\t\tvar hash = window.location.hash;\r\n\t\tif(hash != \"\") {\r\n\t\t\tvar id = hash.substr(1);\r\n\t\t\tif ( document.getElementById(id) && document.getElementById(id).parentElement.parentElement.className == 'accordion-content-area')\r\n\t\t\t{\r\n\t\t\t\tdocument.getElementById(id).parentElement.nextElementSibling.style.display = 'block'\t\t\t\r\n\t\t\t}\r\n\t\t}\r\n\t})\r\n\r\n\t//var $base = 'http://cevn.local'; \t\t// TEST\r\n\tvar $base = window.location.origin;\t// LIVE\r\n\r\n\t// favourites\r\n\tvar $favURL = $base + \"/API/widgets/tilesFavourites\";\r\n\r\n\t$('html').removeClass('no-js');\r\n\r\n\tif ($('.card_favourites').length > 0) {\r\n\r\n\t\tvar $favIDs = [];\r\n\r\n\t\t$('.my_favourites_delete').on('click', function () {\r\n\t\t\tvar $id = Number($(this).attr('id'));\r\n\t\t\t$(this).parent('li').remove();\r\n\t\t\t$favIDs.push($id);\r\n\t\t})\r\n\r\n\t\t$('.my_favourites_edit').on('click', function () {\r\n\t\t\tvar edit = $(this).hasClass('edit');\r\n\r\n\t\t\tif (edit == true) {\r\n\t\t\t\t$(this).removeClass(\"edit\").addClass(\"done\");\r\n\t\t\t\t$(this).find('a').attr('class', 'icomoon-done');\r\n\t\t\t\t$(this).find('span').text('Done');\r\n\t\t\t\t$('.my_favourites_items li').addClass('edit');\r\n\t\t\t} else {\r\n\t\t\t\t$.ajax({\r\n\t\t\t\t\turl: $favURL,\r\n\t\t\t\t\ttype: 'DELETE',\r\n\t\t\t\t\tdataType: 'json',\r\n\t\t\t\t\tdata: JSON.stringify($favIDs),\r\n\t\t\t\t\tcontentType: \"application/json; charset=utf-8\",\r\n\t\t\t\t\tsuccess: function (data) {\r\n\t\t\t\t\t\t$('.my_favourites_edit').removeClass(\"done\").addClass(\"edit\");\r\n\t\t\t\t\t\t$('.my_favourites_edit').find('a').attr('class', 'icomoon-edit');\r\n\t\t\t\t\t\t$('.my_favourites_edit').find('span').text('Edit');\r\n\t\t\t\t\t\t$('.my_favourites_items li').removeClass('edit');\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\t$('.addfav').on('click', function () {\r\n\t\tvar $this = $(this);\r\n\t\tvar $pageTitle = $this.parent().data('title');\r\n\r\n\t\tvar $html = '';\r\n\r\n\t\t$.ajax({\r\n\t\t\tmethod: \"GET\",\r\n\t\t\turl: $favURL,\r\n\t\t\tsuccess: function (data) {\r\n\t\t\t\tvar $noFav = data.favourites.length\r\n\r\n\t\t\t\tif ($noFav < 12) {\r\n\r\n\t\t\t\t\t$html = '
    ' +\r\n\t\t\t\t\t\t'
    ' +\r\n\t\t\t\t\t\t'

    ' +\r\n\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t'

    ' +\r\n\t\t\t\t\t\t'

    ' +\r\n\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t'

    ' +\r\n\t\t\t\t\t\t'
    ' +\r\n\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t'
    ' +\r\n\t\t\t\t\t\t'
    ' +\r\n\t\t\t\t\t\t'
    '\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$html = '
    ' +\r\n\t\t\t\t\t\t'
    ' +\r\n\t\t\t\t\t\t'

    Your favourites list is full

    ' +\r\n\t\t\t\t\t\t'
    ' +\r\n\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t'
    ' +\r\n\t\t\t\t\t\t'
    ' +\r\n\t\t\t\t\t\t'
    '\r\n\t\t\t\t}\r\n\t\t\t\t$this.append($html);\r\n\t\t\t}\r\n\t\t});\r\n\t})\r\n\r\n\t$('.addfav').on('click', '#cancel-btn', function (e) {\r\n\t\t$(this).parents(':eq(4)').find('.addfav_modal').remove();\r\n\t\te.stopPropagation();\r\n\t});\r\n\r\n\t$('.addfav').on('click', '#save-btn', function (e) {\r\n\t\tvar $details = $(this).parents(':eq(4)'),\r\n\t\t\t$title = $details.parents(':eq(2)').find('#title').val(),\r\n\t\t\t$link = $details.data('url'),\r\n\t\t\t$icon = $(this).parents(':eq(2)').find('select').val();\r\n\r\n\t\tvar $data = '{\"title\":\"' + $title + '\",\"icon\":\"' + $icon + '\",\"link\":\"' + $link + '\"}';\r\n\r\n\t\t$.ajax({ // GET all saved forms and put them into a list\r\n\t\t\tmethod: \"POST\",\r\n\t\t\turl: $favURL,\r\n\t\t\tdata: $data,\r\n\t\t\tcontentType: \"application/json; charset=utf-8\",\r\n\t\t\tsuccess: function () {\r\n\t\t\t\t$(this).parents(':eq(4)').find('.addfav_modal').remove();\r\n\t\t\t}\r\n\t\t});\r\n\t\te.stopPropagation();\r\n\t});\r\n\r\n\t$('.addfav').on('click', '#title', function (e) {\r\n\t\t$(this).val('').focus();\r\n\t\te.stopPropagation();\r\n\t});\r\n\r\n\t$('.addfav').on('click', 'select', function (e) {\r\n\t\t$(this).focus();\r\n\t\te.stopPropagation();\r\n\t});\r\n\r\n\tif ($('.card_data').length > 0) {\r\n\r\n\t\tif ($('.card_selector option').length == 1) {\r\n\t\t\t$('.card_selector').attr(\"disabled\", \"disabled\");\r\n\t\t};\r\n\r\n\t\tvar $btnURL = $('.card_data .btn-red.viewall').attr('href');\r\n\t\tvar $newURL = $btnURL + '?eNum=' + $('.card_selector').val();\r\n\t\t$('.card_data .btn-red.viewall').attr('href', $newURL)\r\n\r\n\t\t//console.log($newURL)\r\n\r\n\t\t$('.card_selector').change(function () {\r\n\t\t\tvar $eNum = $(this).val(),\r\n\t\t\t\t$url = $base + '/api/widgets/tilesdataandsurvey?take=5&eNumber=' + $eNum;\r\n\r\n\t\t\t$newURL = $btnURL + '?eNum=' + $('.card_selector').val();\r\n\t\t\t$('.card_data .btn-red.viewall').attr('href', $newURL)\r\n\r\n\t\t\t//console.log($newURL)\r\n\t\t\tloadCard($url);\r\n\t\t\t//loadCard('/api/esample.json');\r\n\t\t})\r\n\r\n\t\tfunction loadCard($url) {\r\n\t\t\t$.ajax({\r\n\t\t\t\tmethod: \"GET\",\r\n\t\t\t\turl: $url,\r\n\t\t\t\tsuccess: function (data) {\r\n\t\t\t\t\tvar $html = \"\";\r\n\r\n\t\t\t\t\tfor (var i = 0; (i < data.SchoolDataAndSurvey.length) && (i < 5); i++) {\r\n\r\n\t\t\t\t\t\tvar section = data.SchoolDataAndSurvey[i]\r\n\t\t\t\t\t\t$html += '
    ' +\r\n\t\t\t\t\t\t\t'
    ' +\r\n\t\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t\t'
    ' +\r\n\t\t\t\t\t\t\t'
    ' +\r\n\t\t\t\t\t\t\t'' + section.StatusDescription + '' +\r\n\t\t\t\t\t\t\t'' + section.DateDueFormatted + '' +\r\n\t\t\t\t\t\t\t'
    ' +\r\n\t\t\t\t\t\t\t'
    ' +\r\n\t\t\t\t\t\t\t'
    ' +\r\n\t\t\t\t\t\t\t'
    '\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t$('.card_data .container').html($html);\r\n\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tif ($('#dataNotification').length > 0) {\r\n\t\t// data and survey subscription\r\n\r\n\t\tvar $notificationStatus = false;\r\n\t\tvar $noticeOn = $('#dataNotification').data('notification-true');\r\n\t\tvar $noticeOff = $('#dataNotification').data('notification-false');\r\n\r\n\t\tvar $dataNotificationURL = $base + '/api/widgets/tilesdataandsurvey/subscribe';\r\n\r\n\t\t$.ajax({ // GET all saved forms and put them into a list\r\n\t\t\tmethod: \"POST\",\r\n\t\t\turl: $dataNotificationURL,\r\n\t\t\tsuccess: function (data) {\r\n\t\t\t\t//var $data = $('#dataNotification').data('subscription');\r\n\t\t\t\t//console.log(data);\r\n\r\n\t\t\t\tif (data == true) {\r\n\t\t\t\t\t$('#dataNotification').text($noticeOn);\r\n\t\t\t\t\t$notificationStatus = true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$('#dataNotification').text($noticeOff);\r\n\t\t\t\t\t$notificationStatus = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t$(\"#dataNotification\").on('click', function () {\r\n\r\n\t\t\tif ($notificationStatus == true) {\r\n\r\n\t\t\t\t$.ajax({\r\n\t\t\t\t\t\"async\": true,\r\n\t\t\t\t\t\"crossDomain\": true,\r\n\t\t\t\t\t\"url\": $dataNotificationURL,\r\n\t\t\t\t\t\"method\": \"POST\",\r\n\t\t\t\t\t\"headers\": {\r\n\t\t\t\t\t\t\"content-type\": \"application/json\",\r\n\t\t\t\t\t\t\"cache-control\": \"no-cache\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t\"processData\": false,\r\n\t\t\t\t\t\"data\": \"false\"\r\n\t\t\t\t}).done(function (response) {\r\n\t\t\t\t\t// if(response){\r\n\t\t\t\t\t// \t console.log('You are subscribed');\r\n\t\t\t\t\t// } else {\r\n\t\t\t\t\t// \tconsole.log('You are NOT subscribed');\r\n\t\t\t\t\t// }\r\n\t\t\t\t});\r\n\r\n\t\t\t\t$notificationStatus = false\r\n\t\t\t\t$('#dataNotification').text($noticeOff);\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t$.ajax({\r\n\t\t\t\t\t\"async\": true,\r\n\t\t\t\t\t\"crossDomain\": true,\r\n\t\t\t\t\t\"url\": $dataNotificationURL,\r\n\t\t\t\t\t\"method\": \"POST\",\r\n\t\t\t\t\t\"headers\": {\r\n\t\t\t\t\t\t\"content-type\": \"application/json\",\r\n\t\t\t\t\t\t\"cache-control\": \"no-cache\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t\"processData\": false,\r\n\t\t\t\t\t\"data\": \"true\"\r\n\t\t\t\t}).done(function (response) {\r\n\r\n\t\t\t\t});\r\n\r\n\t\t\t\t$notificationStatus = true\r\n\t\t\t\t$('#dataNotification').text($noticeOn);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tif ($('#data-survey').length > 0) {\r\n\r\n\t\tvar $url,\r\n\t\t\t$skip = 0,\r\n\t\t\t$take = 10,\r\n\t\t\t$status = ($('.data_filters input[type=radio]:checked').val() == \"null\") ? '' : '&StatusID=' + $('.data_filters input[type=radio]:checked').val(),\r\n\t\t\t$date = $('#date-picker').val(),\r\n\t\t\t$daterange = ($('#date-picker').val() == ('No range set' || '')) ? '' : '&dateDue=' + $('#date-picker').val().replace(/[/]/g, \"%2F\"),\r\n\t\t\t$eNum = (getParameterByName(\"eNum\") == null) ? '' : '&eNumber=' + getParameterByName(\"eNum\"),\r\n\t\t\t$title = '',\r\n\t\t\t$url = $base + '/api/widgets/tilesdataandsurvey' + '?skip=' + $skip + '&take=' + $take + $eNum + $status + $daterange;\r\n\r\n\t\tconsole.log($url);\r\n\r\n\t\tif ($date == '') {\r\n\t\t\t$('#date-picker').val('No range set');\r\n\t\t}\r\n\r\n\t\t// Load first page of data and survey\r\n\t\tloadData(0, 10, $url);\r\n\r\n\t\t$(\"input[type=radio]\").on('click', function () {\r\n\t\t\t$status = $(this).val();\r\n\t\t\t$title = $(this).attr('id') + ' ';\r\n\t\t})\r\n\r\n\t\t// Do a new search for data and survey\r\n\t\t$('.data_filters .search_submit').on('click', function (e) {\r\n\t\t\t// reset to first page\r\n\t\t\t$skip = 0;\r\n\t\t\t$take = 10;\r\n\t\t\t$date = $('#date-picker').val();\r\n\t\t\t$status = ($('.data_filters input[type=radio]:checked').val() == \"null\") ? '' : '&StatusID=' + $('.data_filters input[type=radio]:checked').val(),\r\n\t\t\t\t$daterange = ($('#date-picker').val() == ('No range set' || '')) ? '' : '&dateDue=' + $('#date-picker').val().replace(/[/]/g, \"%2F\"),\r\n\t\t\t\t$eNum = ($('#school_eNum').val() == '') ? '' : '&eNumber=' + $('#school_eNum').val(),\r\n\t\t\t\t$url = $base + '/api/widgets/tilesdataandsurvey' + '?skip=' + $skip + '&take=' + $take + $eNum + $status + $daterange;\r\n\t\t\t//console.log($daterange);\r\n\t\t\tloadData($skip, $take, $url);\r\n\t\t\te.preventDefault;\r\n\t\t})\r\n\r\n\t\t// Create data and survey list\r\n\t\tfunction loadData($skip, $take, $url) {\r\n\r\n\t\t\t$.ajax({\r\n\t\t\t\tmethod: \"GET\",\r\n\t\t\t\turl: $url,\r\n\t\t\t\tsuccess: function (data) {\r\n\t\t\t\t\tvar $html = \"\", $results;\r\n\t\t\t\t\tvar $current = 1 + Math.round($skip / 10),\r\n\t\t\t\t\t\t$last = Math.ceil(data.CountPostFilter / 10);\r\n\r\n\r\n\t\t\t\t\t// update results found text\r\n\t\t\t\t\tif (data.CountPostFilter > 10) {\r\n\t\t\t\t\t\tif ((Number($skip) + Number($take)) > data.CountPostFilter) {\r\n\t\t\t\t\t\t\t$results = 'Showing ' + (Number($skip) + 1) + '-' + data.CountPostFilter + ' of ' + data.CountPostFilter + ' results';\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t$results = 'Showing ' + (Number($skip) + 1) + '-' + (Number($skip) + Number($take)) + ' of ' + data.CountPostFilter + ' results';\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t} else if (data.CountPostFilter > 0) {\r\n\t\t\t\t\t\t$results = 'Showing ' + data.CountPostFilter + ' result(s)';\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$results = 'No results found. Try a wider search by adjusting the filters.';\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t$('#data-survey h3').text('You are viewing all ' + $title + 'Data and Surveys listed');\r\n\r\n\t\t\t\t\t$('.results').text($results);\r\n\r\n\t\t\t\t\tif ($('.data-list').html() != '') { $('.data-list').html('') }\r\n\r\n\t\t\t\t\t$('span.pagination_page').text('Page ' + $current + ' of ' + $last);\r\n\t\t\t\t\t//$('.card_pagination .current').text($current);\r\n\t\t\t\t\t//$('.card_pagination .last').text($last);\r\n\t\t\t\t\t$('.card_pagination .last_item').text($last);\r\n\r\n\t\t\t\t\tpag($current, $last);\r\n\r\n\t\t\t\t\tfor (var i = 0; (i < data.SchoolDataAndSurvey.length) && (i < 10); i++) {\r\n\r\n\t\t\t\t\t\tvar section = data.SchoolDataAndSurvey[i]\r\n\r\n\t\t\t\t\t\t$html = '
    ' +\r\n\t\t\t\t\t\t\t'
    ' +\r\n\t\t\t\t\t\t\t'
    ' +\r\n\t\t\t\t\t\t\t'
    ' +\r\n\t\t\t\t\t\t\t'
    ' + section.Title + '' + section.URL + '
    ' +\r\n\t\t\t\t\t\t\t'
    ' +\r\n\t\t\t\t\t\t\t'
    Due ' + section.DateDueFormatted + '' +\r\n\t\t\t\t\t\t\t'

    ' + section.Message + '

    ' +\r\n\t\t\t\t\t\t\t'
    ' +\r\n\t\t\t\t\t\t\t'
    '\r\n\r\n\t\t\t\t\t\t$('.data-list').append($html);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t$('.pagination').on('click', '.pagination_item', function () {\r\n\t\t\t$('html,body').scrollTop(0);\r\n\t\t\tvar $skip = $(this).data('skip');\r\n\t\t\tvar $take = '10';\r\n\t\t\tvar $status = $('.data_filters input[type=radio]:checked').val();\r\n\r\n\t\t\tvar $url = $base + '/api/widgets/tilesdataandsurvey' + '?skip=' + $skip + '&take=' + $take + '&StatusID=' + $status;\r\n\r\n\t\t\tloadData($skip, $take, $url);\r\n\t\t})\r\n\r\n\t\tfunction pag(current, pages) {\r\n\t\t\tvar $html = '';\r\n\r\n\t\t\tif (pages <= 1) {\r\n\t\t\t\t$('.card_pagination').hide();\r\n\t\t\t\treturn false;\r\n\t\t\t} else if (pages < 7) { //(0)\r\n\t\t\t\t$('.card_pagination').show();\r\n\t\t\t\t// If there are less than 7 pages - pagination style 1 to 7\r\n\t\t\t\tfor (var i = 0; i < pages; i++) {\r\n\r\n\t\t\t\t\tif (i == (current - 1)) { // hightlight the current page Number\r\n\t\t\t\t\t\t$html += '' + (i + 1) + '';\r\n\t\t\t\t\t} else { // skip the next 10 results with each page forward\r\n\t\t\t\t\t\t$html += '' + (i + 1) + '';\r\n\t\t\t\t\t}\r\n\t\t\t\t}// build pagination\r\n\t\t\t\t$('.pagination').html($html);\r\n\t\t\t} else if (current >= 5) { //(2)\r\n\t\t\t\t$('.card_pagination').show();\r\n\t\t\t\t// If more than 7 pages AND\r\n\t\t\t\t// when the user clicks on page 5 OR above,\r\n\t\t\t\t// example pagination style 1 ... 3 to 7 ... 50\r\n\r\n\t\t\t\t$html += '' + 1 + ' ... ';\r\n\r\n\t\t\t\tif (current > (pages - 4)) { //(4)\r\n\t\t\t\t\t// Once the user has reached the last 7\r\n\t\t\t\t\t// pagination style - first ... num num num num last\r\n\t\t\t\t\tfor (var i = (pages - 5); i < pages; i++) {\r\n\t\t\t\t\t\tif (i == (current - 1)) {\r\n\t\t\t\t\t\t\t$html += '' + (i + 1) + '';\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t$html += '' + (i + 1) + '';\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t} else { //(3)\r\n\t\t\t\t\t// Somewhere in the middle - more than first 5 and less than last 5\r\n\t\t\t\t\t// pagination style - first ... num num current num num ... last\r\n\t\t\t\t\tfor (var i = (current - 2); i < (current + 3); i++) {\r\n\t\t\t\t\t\tif (i == current) {\r\n\t\t\t\t\t\t\t$html += '' + i + '';\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t$html += '' + i + '';\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t$html += ' ... '\r\n\t\t\t\t\t$html += '' + pages + '';\r\n\t\t\t\t}\r\n\t\t\t\t$('.pagination').html($html);\r\n\r\n\t\t\t} else { // (1)\r\n\t\t\t\t$('.card_pagination').show();\r\n\t\t\t\t// If more than 7 pages AND\r\n\t\t\t\t// the user is below page 5\r\n\t\t\t\t// pagination 1 to 5 ... last\r\n\t\t\t\tfor (var i = 1; i < 6; i++) {\r\n\t\t\t\t\tif (i == current) {\r\n\t\t\t\t\t\t$html += '' + i + '';\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$html += '' + i + '';\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t$html += ' ... ' + pages + '';\r\n\t\t\t\t$('.pagination').html($html);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction paginationButtons() {\r\n\r\n\t\tvar query_string = location.search;\r\n\t\tfunction getURLParameter(name) {\r\n\t\t\treturn decodeURIComponent(\r\n\t\t\t\t(RegExp('[?|&]'+name + '=' + '(.+?)(&|$)').exec(location.search)||[null,null])[1]\r\n\t\t\t);\r\n\t\t}\r\n\t\tvar page = getURLParameter(\"page\");\r\n\t\tvar oldPara = \"page=\" + page;\r\n\t\tvar previousPage = +page - 1;\r\n\t\tvar nextPage = +page + 1;\r\n\r\n\r\n\t\tif (page == 1 || page==\"null\") {\r\n\t\t\t$('.pagination_item.previous').hide();\r\n\t\t}\r\n\r\n\t\t$('.pagination_item.previous').on('click', function () {\r\n\t\t\tvar newPara = \"page=\" + previousPage;\r\n\t\t\tlocation.search = query_string.replace(oldPara, newPara);\r\n\t\t})\r\n\t\t\r\n\t\t$('.pagination_item.next').on('click', function () {\r\n\t\t\tif (page==\"null\") {\r\n\t\t\t\tlocation.search = query_string + \"&page=2\";\r\n\t\t\t } else {\r\n\t\t\t\tvar newPara = \"page=\" + nextPage;\r\n\t\t\t\tlocation.search = query_string.replace(oldPara, newPara);\r\n\t\t\t}\r\n\t\t})\r\n\t} paginationButtons()\r\n\r\n\t$('input[required]').on('focus', function () {\r\n\t\t$(this).prev('.error_message').text('')\r\n\t})\r\n\r\n\t$('input[required]').on('blur', function () {\r\n\t\tvar $this = $(this).val();\r\n\r\n\t\tif ($this == '') {\r\n\t\t\t$(this).addClass('empty');\r\n\t\t\t$(this).prev('.error_message').text('This field can not be empty.')\r\n\t\t} else {\r\n\t\t\t$(this).removeClass('empty');\r\n\t\t}\r\n\t})\r\n\t$('.icomoon-uploadfile').on('click', function () {\r\n\t\t$(this).prev('input').click();\r\n\t})\r\n\t$('.inputfile').each(function () {\r\n\t\tvar $input = $(this),\r\n\t\t\t$label = $input.parent().find('label.fileName');\r\n\r\n\t\t$input.on('change', function (e) {\r\n\t\t\tvar fileName = '';\r\n\t\t\tvar fileTypeSelector = $('#p_lt_ctl01_pageplaceholder_p_lt_ctl01_pageplaceholder_p_lt_ctl01_CevnTwoColumnLayout_CevnTwoColumnLayout_Center_WebPartZone_WebPartZone_zone_CevnFileUploadUtility_FileTypes')\r\n\r\n\r\n\t\t\tif (this.files && this.files.length > 1)\r\n\t\t\t\tfileName = (this.getAttribute('data-multiple-caption') || '').replace('{count}', this.files.length);\r\n\t\t\telse if (e.target.value)\r\n\t\t\t\tfileName = e.target.value.split('\\\\').pop();\r\n\r\n\t\t\tif (fileName)\r\n\t\t\t\t$label.html(fileName);\r\n\t\t\telse\r\n\t\t\t\t$label.html('No file selcted');\r\n\r\n\t\t\tif ($('.success_message') != null) {\r\n\t\t\t\t$('.success_message').html('');\r\n\t\t\t\t$('.success_message').removeClass('success_message');\r\n\t\t\t\t$('.icomoon-uploadfile').removeClass('error');\r\n\t\t\t}\r\n\t\t\tif ($('.error_message') != null) {\r\n\t\t\t\t$('.error_message').html('');\r\n\t\t\t\t$('.error_message').removeClass('error_message');\r\n\t\t\t\t$('.icomoon-uploadfile').removeClass('error');\r\n\t\t\t\t$(fileTypeSelector).parents('.two-third').removeClass('error-icon')\r\n\t\t\t}\r\n\t\t});\r\n\t\tvar fileIcon = '';\r\n\t\tvar errorLabel = $('#p_lt_ctl01_pageplaceholder_p_lt_ctl01_pageplaceholder_p_lt_ctl01_CevnTwoColumnLayout_CevnTwoColumnLayout_Center_WebPartZone_WebPartZone_zone_CevnFileUploadUtility_Message')\r\n\t\tvar fileTypeSelector = $('#p_lt_ctl01_pageplaceholder_p_lt_ctl01_pageplaceholder_p_lt_ctl01_CevnTwoColumnLayout_CevnTwoColumnLayout_Center_WebPartZone_WebPartZone_zone_CevnFileUploadUtility_FileTypes')\r\n\r\n\t\t$('.icomoon-uploadfile').append(fileIcon)\r\n\r\n\t\tif (!$(errorLabel).is(':empty')) {\r\n\t\t\t$('.icomoon-uploadfile').addClass('error');\r\n\t\t} \r\n\t\tif ($(errorLabel).html() === \"Incorrect File Type Selected\") {\r\n\t\t\t$(fileTypeSelector).parents('.two-third').addClass('error-icon')\r\n\t\t} \r\n\t\tif ($('.success_message').html() === \"File Successfully Uploaded.\") {\r\n\t\t\t$('.icomoon-uploadfile').removeClass('error');\r\n\t\t}\r\n\r\n\t\t// Firefox bug fix\r\n\t\t$input\r\n\t\t\t.on('focus', function () { $input.addClass('has-focus'); })\r\n\t\t\t.on('blur', function () { $input.removeClass('has-focus'); });\r\n\t});\r\n\r\n\t// For prototype demo ONLY - remove for build\r\n\tvar $page = $('.page_breadcrumbs li:nth-child(2) a').text();\r\n\r\n\tswitch ($page) {\r\n\t\tcase 'Finance':\r\n\t\t\t$('.finance').addClass('current');\r\n\t\t\tbreak;\r\n\t\tcase 'Curriculum':\r\n\t\t\t$('.curriculum').addClass('current');\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tbreak;\r\n\t}\r\n\r\n var $dismiss_cookie_name = window.location.pathname.replaceAll('/', '_');\r\n\t// 10 years in seconds (60*60*24*365*10)\r\n\t// var $dismiss_cookie = $dismiss_cookie_name + '=1; Max-age=315360000';\r\n\t// Dismiss time of one day\r\n\tvar $dismiss_cookie = $dismiss_cookie_name + '=1; Max-age=86400';\r\n\r\n var disclaimerReuse = ['Critical-Incident-Management'];\r\n\r\n disclaimerReuse.every(element => {\r\n\r\n if ($dismiss_cookie_name.includes(element)) {\r\n if (document.cookie.includes(element)) {\r\n $('.modal').hide();\n return false;\r\n }\r\n else {\r\n $('.modal').show();\r\n return false;\r\n }\r\n\r\n }\r\n else {\r\n if (document.cookie.indexOf($dismiss_cookie_name) == -1) {\r\n $('.modal').show();\n return false;\r\n } else {\r\n $('.modal').hide();\n return false;\r\n }\r\n }\r\n\r\n\r\n });\r\n\r\n\t// disclaimer cookie\r\n\t// if (document.cookie.indexOf($dismiss_cookie_name) == -1) {\r\n\t\t// $('.modal').show();\r\n\t// } else {\r\n\t\t// $('.modal').hide();\r\n\t// }\r\n\r\n\t//modal\r\n\t$('.agree').on('click', function () {\r\n\t\tdocument.cookie = $dismiss_cookie;\r\n\t\t$('.modal').hide();\r\n\t})\r\n\r\n\t$('main.page .page_article a').on('click', function () {\r\n\t\t$(this).addClass('visited')\r\n\t})\r\n\r\n\t// ---------------------------------//\r\n\t// SEARCH START //\r\n\t//---------------------------------//\r\n\t$('.advance-filters').on('click', function () {\r\n\t\t$('.hide').removeClass('hide');\r\n\t\t$(this).addClass('hide');\r\n\t})\r\n\r\n\t// Quick basic search\r\n\t$('.basic-search .search_submit').on('click', function (e) {\r\n\t\tvar $keyword = $(this).prev('input[name=\"keyword\"]').val(),\r\n\t\t\t$url = $(this).parent().data('url');\r\n\t\tvar $diocese = $(this).parent().data('diocese');\r\n\r\n\t\tif ($keyword != undefined) {\r\n\t\t\twindow.location = $url + \"keyword=\" + $keyword + \"&category=All\" + \"&sort=Relevance\" + \"&type=0\" + \"&diocese=\" + $diocese + \"&page=1\";\r\n\t\t} else {\r\n\t\t\twindow.location = $url;\r\n\t\t}\r\n\t\te.preventDefault();\r\n\t});\r\n\r\n\t$('.basic-search input, .full-search input').on('keydown', function (e) {\r\n\t\tif (e.keyCode === 13) {\r\n\t\t\t$(this).next().trigger('click');\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\t});\r\n\r\n\t// full search\r\n\t$('.full-search .search_submit').on('click', function (e) {\r\n\t\t$('.search_filters .search_submit').trigger('click');\r\n\t\te.preventDefault();\r\n\t})\r\n\r\n\t// Full Search\r\n\t$('.search_filters .search_submit').on('click', function (e) {\r\n\r\n\t\tvar $searchString = $('.search_filters').data('url'),\r\n\t\t\t$keyword = $('.full-search .search_submit').prev('#keyword').val(),\r\n\t\t\t$category = $('input[type=\"radio\"]:checked').val(),\r\n\t\t\t$school = $('#school').val(),\r\n\t\t\t$sort = $('#sort').val(),\r\n\t\t\t$type = $('#type').val(),\r\n\t\t\t$diocese = $('#diocese').val(),\r\n\t\t\t$date = $('#date-picker').val(),\r\n\t\t\t$daterange = $('#date-picker').val().replace(/[/]/g, \"%2F\");\r\n\r\n\t\tif ($keyword != undefined) {\r\n\t\t\t$searchString += \"keyword=\" + $keyword\r\n\t\t}\r\n\t\tif ($category != undefined) {\r\n\t\t\t$searchString += \"&category=\" + $category\r\n\t\t}\r\n\t\tif ($school != undefined) {\r\n\t\t\t$searchString += \"&school=\" + $school\r\n\t\t}\r\n\t\tif ($sort != undefined) {\r\n\t\t\t$searchString += \"&sort=\" + $sort\r\n\t\t}\r\n\t\tif ($type != undefined) {\r\n\t\t\t$searchString += \"&type=\" + $type\r\n\t\t}\r\n\t\tif ($diocese != undefined) {\r\n\t\t\t$searchString += \"&diocese=\" + $diocese\r\n\t\t}\r\n\t\tif ($daterange != 'No range set') {\r\n\t\t\t$searchString += \"&date=\" + $daterange\r\n\t\t}\r\n\r\n\t\t//console.log($searchString);\r\n\t\twindow.location = $searchString;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t});\r\n\r\n\t// Add basic search value to input\r\n\tif ($('.search_filters').length != 0) {\r\n\r\n\t\tvar $school = getParameterByName(\"school\"),\r\n\t\t\t$sort = getParameterByName(\"sort\"),\r\n\t\t\t$type = getParameterByName(\"type\"),\r\n\t\t\t$diocese = getParameterByName(\"diocese\"),\r\n\t\t\t$date = getParameterByName(\"date\");\r\n\r\n\t\t$('.full-search input').val(getParameterByName(\"keyword\"));\r\n\t\t$('input:radio[value=\"' + getParameterByName(\"category\") + '\"]').prop('checked', true);\r\n\r\n\t\tif ($school != null) { $('#school').val($school) }\r\n\t\tif ($sort != null) { $('#sort').val($sort) }\r\n\t\tif ($type != null) { $('#type').val($type) }\r\n\t\tif ($diocese != null) { $('#diocese').val($diocese) }\r\n\t\tif ($date == null) {\r\n\t\t\t$('#date-picker').val('No range set');\r\n\t\t} else {\r\n\t\t\t$('#date-picker').val($date);\r\n\t\t}\r\n\r\n\t\t//highlight search result\r\n\t\tvar text = $('.search_dark input').val();\r\n\t\tif (text.length > 0) {\r\n\t\t\tvar re = new RegExp('(' + text + ')', 'gi');\r\n\t\t\t$(\"a.item_list_link\").each(function () {\r\n\t\t\t\t$(this).html($(this).html().replace(re, '$1'));\r\n\t\t\t});\r\n\r\n\t\t\t$(\"p.item_list_blurb\").each(function () {\r\n\t\t\t\t$(this).html($(this).html().replace(re, '$1'));\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getParameterByName(name, url) {\r\n\t\tif (!url) url = window.location.href;\r\n\t\tname = name.replace(/[\\[\\]]/g, '\\\\$&');\r\n\t\tvar regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\r\n\t\t\tresults = regex.exec(url);\r\n\t\tif (!results) return null;\r\n\t\tif (!results[2]) return '';\r\n\t\treturn decodeURIComponent(results[2].replace(/\\+/g, ' '));\r\n\t}\r\n\r\n\t// clear filters button\r\n\t$('.clear-filters').on(\"click\", function () {\r\n\t\t$('input:checkbox').prop('checked', false);\r\n\t\t$('input:radio').prop('checked', false);\r\n\t\t$('input:radio[value=\"null\"]').prop('checked', true);\r\n\t\t$('input:radio[value=\"all\"]').prop('checked', true);\r\n\t\t$('select').prop('selectedIndex', 0);\r\n\t\t$('#date-picker').val('No range set');\r\n\t})\r\n\r\n\t$('#date-picker').daterangepicker({\r\n\t\t// \"startDate\": moment().subtract(30, 'days'),\r\n\t\t// \"endDate\": moment(),\r\n\t\t\"autoUpdateInput\": false,\r\n\t\t\"locale\": {\r\n\t\t\t\"format\": \"DD/MM/YYYY\",\r\n\t\t\t\"cancelLabel\": \"Clear\"\r\n\t\t}\r\n\t});\r\n\r\n\t$('#date-picker').on('apply.daterangepicker', function (ev, picker) {\r\n\t\t$(this).val(picker.startDate.format('DD/MM/YYYY') + ' - ' + picker.endDate.format('DD/MM/YYYY'));\r\n\r\n\t});\r\n\t$('#date-picker').on('cancel.daterangepicker', function (ev, picker) {\r\n\t\t$(this).val('No range set');\r\n\t});\r\n\r\n\t//Check if mobile\r\n\tvar isMobile = false; //initiate as false\r\n\t// device detection\r\n\tif (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent)\r\n\t\t|| /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(navigator.userAgent.substr(0, 4))) {\r\n\t\tisMobile = true;\r\n\t}\r\n\t//make search filters collapsible on mobile\r\n\tif ($(window).width() < 767) {\r\n\t\tvar $filterArrow = $('.search_filters .card_header'),\r\n\t\t\t$filterCards = $('.search_filters .card_item');\r\n\r\n\t\t$('.search_filters').addClass('collapse');\r\n\t\t$filterArrow.addClass('active');\r\n\t\t$filterCards.addClass('hide-me');\r\n\r\n\t\t$filterArrow.on('click', function () {\r\n\t\t\tif ($filterArrow.hasClass('active')) {\r\n\t\t\t\t$(this).removeClass('active');\r\n\t\t\t\t$filterCards.removeClass('hide-me');\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t$(this).addClass('active');\r\n\t\t\t\t$filterCards.addClass('hide-me');\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\t// ---------------------------------//\r\n\t// SEARCH END //\r\n\t//---------------------------------//\r\n\r\n\t//Sticky polyfill\r\n\tvar stickyElm = $(document).find('.sticky');\r\n\tif (stickyElm.length > 0) {\r\n\t\tvar elements = $('.sticky');\r\n\t\tStickyfill.add(elements);\r\n\t}\r\n\r\n\r\n\t$('.page_nav_title').on('click', function () {\r\n\t\tvar isOpen = $(this).parent().hasClass('active');\r\n\t\tisOpen === true ? $(this).parent().removeClass('active') : $(this).parent().addClass('active');\r\n\t});\r\n\r\n\t$('.page_nav.collapsible > ul').addClass('level-2')\r\n\t$('.page_nav.collapsible > ul > li > ul').addClass('level-3')\r\n\t$('.page_nav.collapsible > ul > li > ul > li > ul').addClass('level-4');\r\n\t$('.Highlighted').parent('ul').parent('nav').addClass('active');\r\n\t$('.Highlighted').parent('ul').parent('li').addClass('active');\r\n\r\n\r\n\t$('.level-3, .level-4').each(function () {\r\n\t\t$(this).parent().addClass('haschild').append('Open sub-menu');\r\n\t})\r\n\r\n\t$(document).on('click', '.level-2 > li > .menu_toggle', function () {\r\n\t\tvar isOpen = $(this).parent().hasClass('active');\r\n\r\n\t\tif (isOpen === true) {\r\n\t\t\t$(this).parent().removeClass('active')\r\n\t\t} else {\r\n\t\t\t$('.level-2 > .active').removeClass('active');\r\n\t\t\t$(this).parent().addClass('active');\r\n\t\t}\r\n\t});\r\n\r\n\t$(document).on('click', '.level-3 li .menu_toggle', function () {\r\n\t\tvar isOpen = $(this).parent().hasClass('active');\r\n\t\tisOpen === true ? $(this).parent().removeClass('active') : $(this).parent().addClass('active');\r\n\t});\r\n\r\n\t//make side menu parent item expand when clicking it to the landing page\r\n\t$('.page_nav.collapsible li').each(function () {\r\n\t\tif ($(this).hasClass('Highlighted') && $(this).hasClass('haschild')) {\r\n\t\t\t$(this).addClass('active')\r\n\t\t}\r\n\t})\r\n\r\n\t// New accordion\r\n\t$('.new-accordion a').on('click', function(){\r\n\t\t$(this).next('.body').slideToggle()\r\n\t\tif($(this).attr('aria-expanded') === 'true'){\r\n\t\t\t$(this).attr('aria-expanded', 'false')\t\r\n\t\t}else{\r\n\t\t\t$(this).attr('aria-expanded', 'true')\r\n\t\t}\r\n\t})\r\n\r\n\t$('.accordion-group .collapse-button').on('click', function(){\r\n\t\tif($(this).attr('aria-expanded') === 'true'){\r\n\t\t\t$(this).attr('aria-expanded', 'false')\r\n\t\t\t$('.new-accordion a').attr('aria-expanded', 'false')\r\n\t\t\t$('.new-accordion .body').slideUp()\r\n\t\t\t$(this).text('Expand All')\r\n\t\t}else{\r\n\t\t\t$(this).attr('aria-expanded', 'true')\r\n\t\t\t$('.new-accordion a').attr('aria-expanded', 'true')\r\n\t\t\t$('.new-accordion .body').slideDown()\r\n\t\t\t$(this).text('Collapse All')\r\n\t\t}\r\n\t})\r\n});\r\n"],"preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvX21vZHVsZXMvYWNjb3JkaW9uL2FjY29yZGlvbi5qcyIsInNyYy9fbW9kdWxlcy9hcHBsaWNhdGlvbnMvYXBwbGljYXRpb25zLmpzIiwic3JjL19tb2R1bGVzL2NhcmQvY2FyZC5qcyIsInNyYy9fbW9kdWxlcy9saW5rcy9saW5rcy5qcyIsInNyYy9fbW9kdWxlcy9tYWluX25hdi9tYWluX25hdi5qcyIsInNyYy9fbW9kdWxlcy90b29sYmFyL3Rvb2xiYXIuanMiLCJzcmMvX3NjcmlwdHMvbWFpbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCIndXNlIHN0cmljdCc7XHJcblxyXG4vLyBDb25zdHJ1Y3RvclxyXG52YXIgQWNjb3JkaW9ucyA9IGZ1bmN0aW9uKCkge1xyXG5cdC8vQWNjb3JkaW9uc1xyXG5cdCQoJy5hY2NvcmRpb24tdGl0bGUnKS5vbignY2xpY2snLCBmdW5jdGlvbigpe1xyXG5cdFx0JCh0aGlzKS5maW5kKCcudG9nZ2xlJykudG9nZ2xlQ2xhc3MoJ2FjdGl2ZScpXHJcblx0fSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQWNjb3JkaW9ucztcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxuLy8gQ29uc3RydWN0b3JcclxudmFyIEFwcHMgPSBmdW5jdGlvbigpIHtcclxuXHJcblx0Ly8gQXBwcyB0b2dnbGUgZnJvbSA1IGRlZmF1bHQgZWxlbWVudHMgZGlzcGxheWVkIHRvIGNvbXBsZXRlIGxpc3RcclxuXHQkKCcuYWxsYXBwcywuY2FyZF9hcHBsaWNhdGlvbnMgLnZpZXdhbGwnKS5vbignY2xpY2snLCBmdW5jdGlvbihlKXtcclxuXHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdCQoJy5jYXJkX2FwcGxpY2F0aW9ucycpLnRvZ2dsZUNsYXNzKCdleHBhbmRlZCcpO1xyXG5cclxuXHRcdGlmKCQoJy5jYXJkX2FwcGxpY2F0aW9ucycpLmhhc0NsYXNzKCdleHBhbmRlZCcpKXtcclxuXHRcdFx0Ly8kKCcuYWxsYXBwcycpLnRleHQoJ0NvbGxhcHNlIEFwcGxpY2F0aW9ucycpO1xyXG5cdFx0XHQkKCcuYWxsYXBwcywgLmNhcmRfYXBwbGljYXRpb25zIC52aWV3YWxsJykudGV4dCgnSGlkZScpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8kKCcuYWxsYXBwcycpLnRleHQoJ1ZpZXcgYWxsIEFwcGxpY2F0aW9ucycpO1xyXG5cdFx0XHQkKCcuYWxsYXBwcywgLmNhcmRfYXBwbGljYXRpb25zIC52aWV3YWxsJykudGV4dCgnVmlldyBNb3JlJyk7XHJcblx0XHRcdCQoJ2h0bWwsIGJvZHknKS5hbmltYXRlKHtcclxuXHRcdFx0XHRzY3JvbGxUb3A6ICQoJy5jYXJkX2FwcGxpY2F0aW9ucycpLm9mZnNldCgpLnRvcFxyXG5cdFx0XHR9LCA1MDApO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG5cclxuXHQvL1Rvb2x0aXBcclxuXHQkKCcudG9vbHRpcCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpe1xyXG5cdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdH0pO1xyXG5cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBBcHBzO1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG4vLyBDb25zdHJ1Y3RvclxyXG52YXIgQ2FyZCA9IGZ1bmN0aW9uKCkge1xyXG5cclxuXHQvL2Fzc2lnbiB0b3RhbCB2YWx1ZSB0byBoZWFkaW5nIGVsZW1lbnRcclxuICAgICQoXCJbZGF0YS1pZD0nUmVtaW5kZXInXSAuYmFkZ2VcIikuaHRtbCgkKCcjUmVtaW5kZXJDb3VudCcpLnZhbCgpKTtcclxuICAgICQoXCJbZGF0YS1pZD0nQ2lyY3VsYXJzJ10gLmJhZGdlXCIpLmh0bWwoJCgnI0NpcmN1bGFyQ291bnQnKS52YWwoKSk7XHJcbiAgICAkKFwiW2RhdGEtaWQ9J05ld3NsZXR0ZXInXSAuYmFkZ2VcIikuaHRtbCgkKCcjTmV3c0xldHRlckNvdW50JykudmFsKCkpO1xyXG4gICAgJChcIltkYXRhLWlkPSdQb3NpdGlvbnNWYWNhbnQnXSAuYmFkZ2VcIikuaHRtbCgkKCcjUG9zaXRpb25WYWNhbnRDb3VudCcpLnZhbCgpKTtcclxuICAgICQoXCJbZGF0YS1pZD0nUHJvZmVzc2lvbmFsTGVhcm5pbmcnXSAuYmFkZ2VcIikuaHRtbCgkKCcjUHJvZmVzc2lvbmFsTGVhcm5pbmdDb3VudCcpLnZhbCgpKTtcclxuICAgICQoXCJbZGF0YS1pZD0nT3RoZXJzJ10gLmJhZGdlXCIpLmh0bWwoJCgnI090aGVyc0NvdW50JykudmFsKCkpO1xyXG5cclxuXHQvL0NhcmQgZXhwYW5kIGJ1dHRvbiBldmVudFxyXG5cdCQoJy5leHBhbmQnKS5vbignY2xpY2snLCBmdW5jdGlvbihlKXtcclxuXHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdGlmKCQodGhpcykucGFyZW50cygnLmNhcmQnKS5oYXNDbGFzcygnaGlkZS1tZScpKXtcclxuXHRcdFx0JCh0aGlzKS5wYXJlbnRzKCcuY2FyZCcpLnJlbW92ZUNsYXNzKCdoaWRlLW1lJyk7XHJcbiAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ2ljb21vb24tZXhwYW5kJykuYWRkQ2xhc3MoJ2ljb21vb24tY29sbGFwc2UnKTtcclxuXHRcdH1cclxuXHRcdGVsc2V7XHJcblx0XHRcdCQodGhpcykucGFyZW50cygnLmNhcmQnKS5hZGRDbGFzcygnaGlkZS1tZScpO1xyXG4gICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdpY29tb29uLWNvbGxhcHNlJykuYWRkQ2xhc3MoJ2ljb21vb24tZXhwYW5kJyk7XHJcblx0XHR9XHJcblx0fSk7XHJcblxyXG4gICAgLy9DYXJkIHRhYiBuYXZpZ2F0aW9uXHJcbiAgICAgICAgJCgnLmNhcmRfdGFiX25hdiBsaScpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpe1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgY3VycmVudENhcmQgPSAkKHRoaXMpLnBhcmVudHMoJy5jYXJkJyk7XHJcbiAgICAgICAgICAgIHZhciBuYXZJZCA9ICQodGhpcykuZmluZChcImFcIikuYXR0cihcImRhdGEtaWRcIik7XHJcbiAgICAgICAgICAgIHZhciBzZWxlY3RvciA9IFwiW2RhdGEtaWQ9XFxcIlwiICsgbmF2SWQgKyBcIl9Db250YWluZXJcIiArIFwiXFxcIl1cIjtcclxuICAgICAgICAgICAgJCgnLnRhYl9uYXZfYm9keScsIGN1cnJlbnRDYXJkKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICQoc2VsZWN0b3IpLmFkZENsYXNzKCdhY3RpdmUnKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCQodGhpcykuaGFzQ2xhc3MoJ2FjdGl2ZScpKXtcclxuICAgICAgICAgICAgICAgICQodGhpcykucGFyZW50cygndWwnKS50b2dnbGVDbGFzcygnc2VsZWN0Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgICQoJy5jYXJkX3RhYl9uYXYgbGknLCBjdXJyZW50Q2FyZCkucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5wYXJlbnRzKCd1bCcpLnRvZ2dsZUNsYXNzKCdzZWxlY3QnKTtcclxuICAgICAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ2FyZDtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxuLy8gQ29uc3RydWN0b3JcclxudmFyIExpbmtzID0gZnVuY3Rpb24oKSB7XHJcblx0Ly9MaW5rc1xyXG5cdCQoJy5saW5rc19pdGVtJykuZWFjaChmdW5jdGlvbigpe1xyXG5cdFx0dmFyIGxpbmsgPSAkKCdhJywgdGhpcyk7XHJcbi8vXHRcdGNvbnNvbGUubG9nKGxpbmspO1xyXG5cdFx0dmFyIHVybCA9IGxpbmtbMF0uaG9zdG5hbWU7XHJcblx0XHQvL2NvbnNvbGUubG9nKGxvY2F0aW9uLmhvc3RuYW1lLCB1cmwpXHJcblx0XHRpZihsb2NhdGlvbi5ob3N0bmFtZS5pbmRleE9mKHVybCkgPj0gMCB8fCB1cmwuaW5kZXhPZihcImR4YXUuZGlnaXRhbFwiKSA+PSAwKXtcclxuXHRcdFx0JCgnLmxpbmtzX2l0ZW1fbGlua19pbnRlcm5hbCcsIHRoaXMpLmNzcygnZGlzcGxheScsJ2Jsb2NrJyk7XHJcblx0XHR9XHJcblx0XHRlbHNle1xyXG5cdFx0XHQkKCcubGlua3NfaXRlbV9saW5rX2V4dGVybmFsJywgdGhpcykuY3NzKCdkaXNwbGF5JywnYmxvY2snKTtcclxuXHRcdFx0JCgnLmxpbmtzX2l0ZW1fbGlua191cmwnLCB0aGlzKS5jc3MoJ2Rpc3BsYXknLCdibG9jaycpO1xyXG5cdFx0XHQkKCdhJywgdGhpcykuYXR0cihcInRhcmdldFwiLFwiX2JsYW5rXCIpO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IExpbmtzOyIsIid1c2Ugc3RyaWN0JztcclxuXHJcblxyXG4vLyBDb25zdHJ1Y3RvclxyXG52YXIgTWVudSA9IGZ1bmN0aW9uKCkge1xyXG5cclxuXHR2YXIgaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG5cdHZhciBpc1RvdWNoaW5nID0gKFwib250b3VjaHN0YXJ0XCIgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTtcclxuXHJcblx0Ly9OYXZpZ2F0aW9uXHJcblx0Ly8gaWYoIWlzVG91Y2hpbmcpe1xyXG5cdFx0JCgnLmZpcnN0LWxldmVsLWl0ZW0uaGFzY2hpbGQnKS5vbignbW91c2VlbnRlcicsIGZ1bmN0aW9uKGUpe1xyXG5cdFx0XHQkKHRoaXMpLmFkZENsYXNzKCdhY3RpdmUnKTtcclxuXHRcdFx0JCgnLm92ZXJsYXknKS5hZGRDbGFzcygnYWN0aXZlJyk7XHJcblx0XHR9KTtcclxuXHJcblx0XHQkKCcuZmlyc3QtbGV2ZWwtaXRlbS5oYXNjaGlsZCcpLm9uKCdtb3VzZWxlYXZlJywgZnVuY3Rpb24oZSl7XHJcblx0XHRcdFx0JCh0aGlzKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XHJcblx0XHRcdFx0JCgnLm92ZXJsYXknKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XHJcblx0XHR9KTtcclxuXHQvLyB9XHJcblxyXG5cdCQoJ2JvZHknKS5vbigndG91Y2hzdGFydCcsIGZ1bmN0aW9uKGUpe1xyXG5cdFx0aXNEcmFnZ2luZyA9IGZhbHNlO1xyXG5cdFx0aXNUb3VjaGluZyA9IHRydWU7XHJcblx0XHR2YXIgeCA9ICQoZS50YXJnZXQpLmlzKCcudG9vbGJhcnNlYXJjaCwgLnRvb2xiYXJzZWFyY2ggKicpO1xyXG5cdFx0dmFyIHkgPSAkKGUudGFyZ2V0KS5pcygnLnByb2ZpbGUsIC5wcm9maWxlIConKTtcclxuXHRcdGlmKCF4KXtcclxuXHRcdFx0JCgnLnRvb2xiYXJzZWFyY2ggLnNlYXJjaCcpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcclxuXHRcdFx0JCgnLnRvb2xiYXJzZWFyY2gnKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XHJcblx0XHR9XHJcblx0XHRpZigheSl7XHJcblx0XHRcdCQoJy5teWNldm4nKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XHJcblx0XHR9XHJcblx0fSk7XHJcblxyXG5cdCQoJ2JvZHknKS5vbigndG91Y2htb3ZlJywgZnVuY3Rpb24oZSl7XHJcblx0XHRpc0RyYWdnaW5nID0gdHJ1ZTtcclxuXHR9KTtcclxuXHJcblx0JCgnYm9keScpLm9uKCd0b3VjaGVuZCcsIGZ1bmN0aW9uKGUpe1xyXG5cdFx0aXNUb3VjaGluZyA9IGZhbHNlO1xyXG5cdFx0aWYoJCgnLnNlYXJjaCcpLmhhc0NsYXNzKCcuYWN0aXZlJykpe1xyXG5cdFx0fVxyXG5cdFx0dmFyIHggPSAkKGUudGFyZ2V0KS5pcygnLmZpcnN0LWxldmVsIGxpLmhhc2NoaWxkJyk7XHJcblx0XHR2YXIgeSA9ICQoZS50YXJnZXQpLmlzKCcuZmlyc3QtbGV2ZWwgbGkuaGFzY2hpbGQuYWN0aXZlJyk7XHJcblx0XHRpZih4ICYmICFpc0RyYWdnaW5nKXtcclxuXHRcdFx0JCgnLmZpcnN0LWxldmVsIGxpLmhhc2NoaWxkJykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xyXG5cdFx0XHQkKCcuZGlzbWlzcycpLmFkZENsYXNzKCdhY3RpdmUnKTtcclxuXHRcdFx0JChlLnRhcmdldCkuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xyXG5cdFx0XHQkKCcub3ZlcmxheScpLmFkZENsYXNzKCdhY3RpdmUnKTtcclxuXHRcdFx0dmFyIGxlZnQgPSAkKGUudGFyZ2V0KS5vZmZzZXQoKS5sZWZ0XHJcblx0XHRcdHZhciB3aWR0aCA9ICQoJy5maXJzdC1sZXZlbCcpLndpZHRoKCk7XHJcblx0XHR2YXIgZGlmZiA9IGxlZnQgLSB3aWR0aC8zO1xyXG5cdFx0XHQkKCcuZmlyc3QtbGV2ZWwnKS5hbmltYXRlKHtcclxuXHRcdFx0c2Nyb2xsTGVmdDogJCgnLmZpcnN0LWxldmVsJykuc2Nyb2xsTGVmdCgpK2RpZmZcclxuXHRcdH0sIDUwMCk7XHJcblx0XHR9XHJcblx0XHRpZih5ICYmICFpc0RyYWdnaW5nKXtcclxuXHRcdFx0JCgnLmZpcnN0LWxldmVsIGxpLmhhc2NoaWxkLmFjdGl2ZScpLmFkZENsYXNzKCd0b3VjaCcpO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG5cclxuXHQvL0V4cGFuZCB0aGlyZCBsZXZlbFxyXG5cdGlmICggJCh3aW5kb3cpLndpZHRoKCkgPD0gMTAyNCApe1xyXG5cdFx0JCgnLnRoaXJkLWxldmVsJykuc2xpZGVVcCgpO1xyXG5cdH1cclxuXHQkKCcuc2Vjb25kLWxldmVsLWl0ZW0gLmV4cGFuZC1jaGlsZCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCl7XHJcblx0XHQkKCcudGhpcmQtbGV2ZWwnKS5zbGlkZVVwKCk7XHJcblx0XHQvLyQoJy5zZWNvbmQtbGV2ZWwtaXRlbScpLnJlbW92ZUNsYXNzKCdpc0V4cGFuZGVkJyk7XHJcblx0XHRpZiggJCh0aGlzKS5wYXJlbnQoJy5zZWNvbmQtbGV2ZWwtaXRlbScpLmhhc0NsYXNzKCdpc0V4cGFuZGVkJykpe1xyXG5cdFx0XHQkKCcuc2Vjb25kLWxldmVsLWl0ZW0nKS5yZW1vdmVDbGFzcygnaXNFeHBhbmRlZCcpO1xyXG5cdFx0XHQvLyQodGhpcykucGFyZW50KCcuc2Vjb25kLWxldmVsLWl0ZW0nKS5yZW1vdmVDbGFzcygnaXNFeHBhbmRlZCcpO1xyXG5cdFx0XHQkKHRoaXMpLm5leHQoJy50aGlyZC1sZXZlbCcpLnNsaWRlVXAoKTtcclxuXHRcdH1cclxuXHRcdGVsc2V7XHJcblx0XHRcdCQoJy5zZWNvbmQtbGV2ZWwtaXRlbScpLnJlbW92ZUNsYXNzKCdpc0V4cGFuZGVkJyk7XHJcblx0XHRcdCQodGhpcykucGFyZW50KCcuc2Vjb25kLWxldmVsLWl0ZW0nKS5hZGRDbGFzcygnaXNFeHBhbmRlZCcpO1xyXG5cdFx0XHQkKHRoaXMpLm5leHQoJy50aGlyZC1sZXZlbCcpLnNsaWRlRG93bigpO1xyXG5cdFx0fVxyXG5cdFx0JCgnaHRtbCwgYm9keScpLmFuaW1hdGUoe1xyXG5cdFx0XHRzY3JvbGxUb3A6ICQodGhpcykub2Zmc2V0KCkudG9wXHJcblx0XHR9LCAzMDApO1xyXG5cdH0pO1xyXG5cclxuXHQkKCcuZGlzbWlzcycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpe1xyXG5cdFx0JCgnLmZpcnN0LWxldmVsLWl0ZW0uaGFzY2hpbGQnKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XHJcblx0XHQkKCcub3ZlcmxheScpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcclxuXHRcdCQodGhpcykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xyXG5cdFx0JCgnLnRoaXJkLWxldmVsJykuc2xpZGVVcCgpO1xyXG5cdFx0JCgnLnNlY29uZC1sZXZlbC1pdGVtJykucmVtb3ZlQ2xhc3MoJ2lzRXhwYW5kZWQnKTtcclxuLy9cdFx0JCgnaHRtbCwgYm9keScpLmFuaW1hdGUoe1xyXG4vL1x0XHRcdHNjcm9sbFRvcDogJCgnI2hlYWRlcicpLm9mZnNldCgpLnRvcFxyXG4vL1x0XHR9LCA1MDApO1xyXG5cdH0pO1xyXG5cdCQoJy5vdmVybGF5Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7XHJcblx0XHQkKCcuZmlyc3QtbGV2ZWwtaXRlbS5oYXNjaGlsZCcpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcclxuXHRcdCQoJy5kaXNtaXNzJykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xyXG5cdFx0JCh0aGlzKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XHJcblx0XHQkKCcudGhpcmQtbGV2ZWwnKS5zbGlkZVVwKCk7XHJcblx0XHQkKCcuc2Vjb25kLWxldmVsLWl0ZW0nKS5yZW1vdmVDbGFzcygnaXNFeHBhbmRlZCcpO1xyXG5cdH0pO1xyXG5cclxuXHQkKCcuc2l0ZW1hcExpc3QgPnVsID4gbGkgPiBhJykud3JhcCgnPGgyPjwvaDI+Jyk7XHJcblxyXG5cdC8vSW50ZXJpb3IgYXJ0aWNsZSBuYXZpZ2F0aW9uIGhhc2hcclxuXHR2YXIgY3VycmVudEhhc2ggPSAnIyc7XHJcblx0aWYgKCQoJy5wYWdlX2FydGljbGUgaDInKS5sZW5ndGggPiAxKXtcclxuXHRcdCQoJy5wYWdlX2FydGljbGUgaDInKS5lYWNoKGZ1bmN0aW9uKGluZGV4KXtcclxuXHRcdFx0dmFyIHRpdGxlID0gJCh0aGlzKS50ZXh0KCk7XHJcblx0XHRcdHZhciBpZCA9IHRpdGxlLnJlcGxhY2UoL1xccysvZywgJy0nKS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHR2YXIgbGluayA9ICcjJytpZDtcclxuXHRcdFx0dmFyIG5hdkl0ZW0gPSAnPGxpPjxhIGhyZWY9XCInK2xpbmsrJ1wiPicrdGl0bGUrJzwvYT48bGk+JztcclxuXHRcdFx0JCh0aGlzKS5hdHRyKCdpZCcsIGlkKTtcclxuXHRcdFx0JCgnLnN0aWNreSAucGFnZV9uYXYgdWwnKS5hcHBlbmQobmF2SXRlbSk7XHJcblx0XHRcdCQoJy5zdGlja3knKS5zaG93KCk7XHJcblx0XHR9KTtcclxuXHJcblx0XHQkKGRvY3VtZW50KS5zY3JvbGwoZnVuY3Rpb24gKCkge1xyXG5cdFx0XHQkKCdtYWluIGFydGljbGUnKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHR2YXIgdG9wID0gd2luZG93LnBhZ2VZT2Zmc2V0O1xyXG5cdFx0XHRcdHZhciBkaXN0YW5jZSA9IHRvcCAtICQodGhpcykub2Zmc2V0KCkudG9wO1xyXG5cdFx0XHRcdHZhciBoYXNoID0gJCgnaDInLCB0aGlzKS5hdHRyKCdpZCcpO1xyXG5cdFx0XHRcdGlmIChkaXN0YW5jZSA8IDMwICYmIGRpc3RhbmNlID4gLTMwICYmIGN1cnJlbnRIYXNoICE9IGhhc2gpIHtcclxuXHRcdFx0XHRcdHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gKGhhc2gpO1xyXG5cdFx0XHRcdFx0Y3VycmVudEhhc2ggPSBoYXNoO1xyXG5cdFx0XHRcdFx0JCgnLnN0aWNreSBhJykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xyXG5cdFx0XHRcdFx0JCgnYVtocmVmJD1cIicrY3VycmVudEhhc2grJ1wiXScpLnRvZ2dsZUNsYXNzKCdhY3RpdmUnKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly9TbW9vdGggc2Nyb2xsaW5nIGZvciBoYXNoICMgbGlua3NcclxuXHRcdCQoJy5zdGlja3kgYVtocmVmKj1cIiNcIl0nKS5ub3QoJ1tocmVmPVwiI1wiXScpLmNsaWNrKGZ1bmN0aW9uKGV2ZW50KSB7XHJcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdHZhciB0YXJnZXQgPSAkKHRoaXMuaGFzaCk7XHJcblx0XHRcdCQoJ2h0bWwsIGJvZHknKS5hbmltYXRlKHtcclxuXHRcdFx0c2Nyb2xsVG9wOiB0YXJnZXQub2Zmc2V0KCkudG9wXHJcblx0XHRcdH0sIDUwMCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblx0ZWxzZXtcclxuXHRcdCQoJy5zdGlja3kgLnBhZ2VfbmF2JykuY3NzKCdkaXNwbGF5Jywnbm9uZScpO1xyXG5cdH1cclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE1lbnU7XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbi8vIENvbnN0cnVjdG9yXHJcbnZhciBUb29sYmFyID0gZnVuY3Rpb24oKSB7XHJcblxyXG5cdCQoJ2JvZHknKS5vbignY2xpY2snLCBmdW5jdGlvbihlKXtcclxuXHRcdHZhciB4ID0gJChlLnRhcmdldCkuaXMoJy5wcm9maWxlLCAucHJvZmlsZSAqJyk7XHJcblx0XHRpZigheCl7XHJcblx0XHRcdCQoJy5teWNldm4nKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XHJcblx0XHR9XHJcblx0fSk7XHJcblxyXG5cdC8vVG9vbGJhciBzZWFyY2hcclxuXHQkKCcudG9vbGJhcnNlYXJjaCA+IGRpdi5pY29tb29uLXNlYXJjaCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpe1xyXG5cdFx0JCgnLnRvb2xiYXJzZWFyY2ggLnNlYXJjaCcpLnRvZ2dsZUNsYXNzKCdhY3RpdmUnKTtcclxuXHRcdCQoJy50b29sYmFyc2VhcmNoJykudG9nZ2xlQ2xhc3MoJ2FjdGl2ZScpO1xyXG5cdH0pO1xyXG5cclxuXHQvL1Rvb2xiYXIgcHJvZmlsZVxyXG5cdCQoJy5wcm9maWxlIC5pY29tb29uLXByb2ZpbGUnKS5vbignY2xpY2snLCBmdW5jdGlvbihlKXtcclxuXHRcdFx0JCgnLm15Y2V2bicpLnRvZ2dsZUNsYXNzKCdhY3RpdmUnKTtcclxuXHRcdFx0Y29uc29sZS5sb2coJ2NsaWNrJyk7XHJcblx0XHRcdGUucHJldmVudERlZmF1bHQ7XHJcbiBcdH0pO1xyXG5cclxuXHQvLyAvL0tlZXAgb3B0aW9uIHNlbGVjdGVkXHJcblx0Ly8gdmFyIHVybCA9IG5ldyBVUkwoZG9jdW1lbnQubG9jYXRpb24pO1xyXG4gIC8vIFx0dmFyIHBhcmFtcyA9IHVybC5zZWFyY2hQYXJhbXM7XHJcblx0Ly8gdmFyIGN1cnJlbnQgPSBwYXJhbXMuZ2V0KCdjb2RlJyk7XHJcblx0Ly8gJCgnb3B0aW9uW2NvZGUqPScrY3VycmVudCsnXScpLmF0dHIoJ3NlbGVjdGVkJywnc2VsZWN0ZWQnKTtcclxuXHQvLyAvL0NoYW5nZSBob21lcGFnZSB0byBkaW9jZXNlXHJcblx0Ly8gJCgnLnpvbmVzIHNlbGVjdCcpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbihlKXtcclxuXHQvLyBcdGNvbnNvbGUubG9nKHBhcmFtcy5nZXQoJ2NvZGUnKSk7XHJcblx0Ly8gXHR2YXIgY29kZSA9ICQoJ29wdGlvbjpzZWxlY3RlZCcsIHRoaXMpLmF0dHIoJ2NvZGUnKTtcclxuXHQvLyBcdHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gXCIvXCIrZS50YXJnZXQudmFsdWUrXCI/Y29kZT1cIitjb2RlO1xyXG5cdC8vXHJcblx0Ly8gfSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVG9vbGJhcjtcclxuIiwiLy8gTWFpbiBqYXZhc2NyaXB0IGVudHJ5IHBvaW50XHJcbi8vIFNob3VsZCBoYW5kbGUgYm9vdHN0cmFwcGluZy9zdGFydGluZyBhcHBsaWNhdGlvblxyXG5cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuLy92YXIgJCA9IHJlcXVpcmUoJ2pxdWVyeScpO1xyXG52YXIgTWVudSA9IHJlcXVpcmUoJy4uL19tb2R1bGVzL21haW5fbmF2L21haW5fbmF2Jyk7XHJcbnZhciBUb29sYmFyID0gcmVxdWlyZSgnLi4vX21vZHVsZXMvdG9vbGJhci90b29sYmFyJyk7XHJcbnZhciBDYXJkID0gcmVxdWlyZSgnLi4vX21vZHVsZXMvY2FyZC9jYXJkJyk7XHJcbnZhciBBcHBzID0gcmVxdWlyZSgnLi4vX21vZHVsZXMvYXBwbGljYXRpb25zL2FwcGxpY2F0aW9ucycpO1xyXG52YXIgQWNjb3JkaW9ucyA9IHJlcXVpcmUoJy4uL19tb2R1bGVzL2FjY29yZGlvbi9hY2NvcmRpb24nKTtcclxudmFyIExpbmtzID0gcmVxdWlyZSgnLi4vX21vZHVsZXMvbGlua3MvbGlua3MnKTtcclxuXHJcbiQoZnVuY3Rpb24gKCkge1xyXG5cclxuXHRuZXcgTWVudSgpO1xyXG5cdG5ldyBUb29sYmFyKCk7XHJcblx0bmV3IENhcmQoKTtcclxuXHRuZXcgQXBwcygpO1xyXG5cdG5ldyBBY2NvcmRpb25zKCk7XHJcblx0bmV3IExpbmtzKCk7XHJcblxyXG5cdC8vc2VsZWN0Ym94IGluIHVwbG9hZCBmaWxlIHBhZ2UsIHJlbW92ZSB0aGUgY2hlY2tib3hcclxuXHQkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHtcclxuXHRcdHZhciBzZWxlY3RWYWx1ZSA9ICQoJyNwX2x0X2N0bDAxX3BhZ2VwbGFjZWhvbGRlcl9wX2x0X2N0bDAxX3BhZ2VwbGFjZWhvbGRlcl9wX2x0X2N0bDAxX0Nldm5Ud29Db2x1bW5MYXlvdXRfQ2V2blR3b0NvbHVtbkxheW91dF9DZW50ZXJfV2ViUGFydFpvbmVfV2ViUGFydFpvbmVfem9uZV9DZXZuRmlsZVVwbG9hZFV0aWxpdHlfRG9jdW1lbnRUeXBlcycpLnZhbCgpO1xyXG5cdFx0aWYoXHRzZWxlY3RWYWx1ZSAhPSBcIjFcIil7XHJcblx0XHRcdCQoJy5jYXJkX2l0ZW0uY2hlY2tib3gnKS5oaWRlKCk7XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uLmhhc2g7XHJcblx0XHRpZihoYXNoICE9IFwiXCIpIHtcclxuXHRcdFx0dmFyIGlkID0gaGFzaC5zdWJzdHIoMSk7XHJcblx0XHRcdGlmICggZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpICYmIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQuY2xhc3NOYW1lID09ICdhY2NvcmRpb24tY29udGVudC1hcmVhJylcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5wYXJlbnRFbGVtZW50Lm5leHRFbGVtZW50U2libGluZy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1x0XHRcdFxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fSlcclxuXHJcblx0Ly92YXIgJGJhc2UgPSAnaHR0cDovL2Nldm4ubG9jYWwnOyBcdFx0Ly8gVEVTVFxyXG5cdHZhciAkYmFzZSA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XHQvLyBMSVZFXHJcblxyXG5cdC8vIGZhdm91cml0ZXNcclxuXHR2YXIgJGZhdlVSTCA9ICRiYXNlICsgXCIvQVBJL3dpZGdldHMvdGlsZXNGYXZvdXJpdGVzXCI7XHJcblxyXG5cdCQoJ2h0bWwnKS5yZW1vdmVDbGFzcygnbm8tanMnKTtcclxuXHJcblx0aWYgKCQoJy5jYXJkX2Zhdm91cml0ZXMnKS5sZW5ndGggPiAwKSB7XHJcblxyXG5cdFx0dmFyICRmYXZJRHMgPSBbXTtcclxuXHJcblx0XHQkKCcubXlfZmF2b3VyaXRlc19kZWxldGUnKS5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdHZhciAkaWQgPSBOdW1iZXIoJCh0aGlzKS5hdHRyKCdpZCcpKTtcclxuXHRcdFx0JCh0aGlzKS5wYXJlbnQoJ2xpJykucmVtb3ZlKCk7XHJcblx0XHRcdCRmYXZJRHMucHVzaCgkaWQpO1xyXG5cdFx0fSlcclxuXHJcblx0XHQkKCcubXlfZmF2b3VyaXRlc19lZGl0Jykub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xyXG5cdFx0XHR2YXIgZWRpdCA9ICQodGhpcykuaGFzQ2xhc3MoJ2VkaXQnKTtcclxuXHJcblx0XHRcdGlmIChlZGl0ID09IHRydWUpIHtcclxuXHRcdFx0XHQkKHRoaXMpLnJlbW92ZUNsYXNzKFwiZWRpdFwiKS5hZGRDbGFzcyhcImRvbmVcIik7XHJcblx0XHRcdFx0JCh0aGlzKS5maW5kKCdhJykuYXR0cignY2xhc3MnLCAnaWNvbW9vbi1kb25lJyk7XHJcblx0XHRcdFx0JCh0aGlzKS5maW5kKCdzcGFuJykudGV4dCgnRG9uZScpO1xyXG5cdFx0XHRcdCQoJy5teV9mYXZvdXJpdGVzX2l0ZW1zIGxpJykuYWRkQ2xhc3MoJ2VkaXQnKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQkLmFqYXgoe1xyXG5cdFx0XHRcdFx0dXJsOiAkZmF2VVJMLFxyXG5cdFx0XHRcdFx0dHlwZTogJ0RFTEVURScsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTogJ2pzb24nLFxyXG5cdFx0XHRcdFx0ZGF0YTogSlNPTi5zdHJpbmdpZnkoJGZhdklEcyksXHJcblx0XHRcdFx0XHRjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCIsXHJcblx0XHRcdFx0XHRzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG5cdFx0XHRcdFx0XHQkKCcubXlfZmF2b3VyaXRlc19lZGl0JykucmVtb3ZlQ2xhc3MoXCJkb25lXCIpLmFkZENsYXNzKFwiZWRpdFwiKTtcclxuXHRcdFx0XHRcdFx0JCgnLm15X2Zhdm91cml0ZXNfZWRpdCcpLmZpbmQoJ2EnKS5hdHRyKCdjbGFzcycsICdpY29tb29uLWVkaXQnKTtcclxuXHRcdFx0XHRcdFx0JCgnLm15X2Zhdm91cml0ZXNfZWRpdCcpLmZpbmQoJ3NwYW4nKS50ZXh0KCdFZGl0Jyk7XHJcblx0XHRcdFx0XHRcdCQoJy5teV9mYXZvdXJpdGVzX2l0ZW1zIGxpJykucmVtb3ZlQ2xhc3MoJ2VkaXQnKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSlcclxuXHR9XHJcblxyXG5cdCQoJy5hZGRmYXYnKS5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7XHJcblx0XHR2YXIgJHRoaXMgPSAkKHRoaXMpO1xyXG5cdFx0dmFyICRwYWdlVGl0bGUgPSAkdGhpcy5wYXJlbnQoKS5kYXRhKCd0aXRsZScpO1xyXG5cclxuXHRcdHZhciAkaHRtbCA9ICcnO1xyXG5cclxuXHRcdCQuYWpheCh7XHJcblx0XHRcdG1ldGhvZDogXCJHRVRcIixcclxuXHRcdFx0dXJsOiAkZmF2VVJMLFxyXG5cdFx0XHRzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG5cdFx0XHRcdHZhciAkbm9GYXYgPSBkYXRhLmZhdm91cml0ZXMubGVuZ3RoXHJcblxyXG5cdFx0XHRcdGlmICgkbm9GYXYgPCAxMikge1xyXG5cclxuXHRcdFx0XHRcdCRodG1sID0gJzxkaXYgY2xhc3M9XCJhZGRmYXZfbW9kYWxcIj4nICtcclxuXHRcdFx0XHRcdFx0JzxkaXY+JyArXHJcblx0XHRcdFx0XHRcdCc8cD4nICtcclxuXHRcdFx0XHRcdFx0JzxsYWJlbD5UaXRsZTwvbGFiZWw+JyArXHJcblx0XHRcdFx0XHRcdCc8aW5wdXQgaWQ9XCJ0aXRsZVwiIHR5cGU9XCJ0ZXh0XCIgdmFsdWU9XCInICsgJHBhZ2VUaXRsZSArICdcIj4nICtcclxuXHRcdFx0XHRcdFx0JzwvcD4nICtcclxuXHRcdFx0XHRcdFx0JzxwPicgK1xyXG5cdFx0XHRcdFx0XHQnPGxhYmVsPkljb248L2xhYmVsPicgK1xyXG5cdFx0XHRcdFx0XHQnPHNlbGVjdD4nICtcclxuXHRcdFx0XHRcdFx0JzxvcHRpb24gdmFsdWU9XCJpY29tb29uLXRvZG9cIj5UbyBkbzwvb3B0aW9uPicgK1xyXG5cdFx0XHRcdFx0XHQnPG9wdGlvbiB2YWx1ZT1cImljb21vb24tbGVnYWxcIj5MZWdhbDwvb3B0aW9uPicgK1xyXG5cdFx0XHRcdFx0XHQnPG9wdGlvbiB2YWx1ZT1cImljb21vb24tc3lzXCI+U3lzdGVtPC9vcHRpb24+JyArXHJcblx0XHRcdFx0XHRcdCc8b3B0aW9uIHZhbHVlPVwiaWNvbW9vbi1kYXRhXCI+RGF0YWJhc2U8L29wdGlvbj4nICtcclxuXHRcdFx0XHRcdFx0JzxvcHRpb24gdmFsdWU9XCJpY29tb29uLWZvbGRlclwiPkZvbGRlcjwvb3B0aW9uPicgK1xyXG5cdFx0XHRcdFx0XHQnPG9wdGlvbiB2YWx1ZT1cImljb21vb24taW5mb1wiPkluZm9ybWF0aW9uPC9vcHRpb24+JyArXHJcblx0XHRcdFx0XHRcdCc8b3B0aW9uIHZhbHVlPVwiaWNvbW9vbi1hcHBzXCI+QnJvd3NlciB3aW5kb3c8L29wdGlvbj4nICtcclxuXHRcdFx0XHRcdFx0Jzwvc2VsZWN0PicgK1xyXG5cdFx0XHRcdFx0XHQnPC9wPicgK1xyXG5cdFx0XHRcdFx0XHQnPGRpdiBjbGFzcz1cImFkZGZhdl9idXR0b25zXCI+JyArXHJcblx0XHRcdFx0XHRcdCc8YnV0dG9uIGlkPVwic2F2ZS1idG5cIiBjbGFzcz1cImJ0bi1ncmVlblwiPlNhdmU8L2J1dHRvbj4nICtcclxuXHRcdFx0XHRcdFx0JzxidXR0b24gaWQ9XCJjYW5jZWwtYnRuXCIgY2xhc3M9XCJidG4tcmVkXCI+Q2FuY2VsPC9idXR0b24+JyArXHJcblx0XHRcdFx0XHRcdCc8L2Rpdj4nICtcclxuXHRcdFx0XHRcdFx0JzwvZGl2PicgK1xyXG5cdFx0XHRcdFx0XHQnPC9kaXY+J1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHQkaHRtbCA9ICc8ZGl2IGNsYXNzPVwiYWRkZmF2X21vZGFsXCI+JyArXHJcblx0XHRcdFx0XHRcdCc8ZGl2PicgK1xyXG5cdFx0XHRcdFx0XHQnPHAgY2xhc3M9XCJlcnJvcl9tc2dcIj5Zb3VyIGZhdm91cml0ZXMgbGlzdCBpcyBmdWxsPC9wPicgK1xyXG5cdFx0XHRcdFx0XHQnPGRpdiBjbGFzcz1cImFkZGZhdl9idXR0b25zXCI+JyArXHJcblx0XHRcdFx0XHRcdCc8YnV0dG9uIGlkPVwiY2FuY2VsLWJ0blwiIGNsYXNzPVwiYnRuLXJlZFwiPk9LPC9idXR0b24+JyArXHJcblx0XHRcdFx0XHRcdCc8L2Rpdj4nICtcclxuXHRcdFx0XHRcdFx0JzwvZGl2PicgK1xyXG5cdFx0XHRcdFx0XHQnPC9kaXY+J1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQkdGhpcy5hcHBlbmQoJGh0bWwpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9KVxyXG5cclxuXHQkKCcuYWRkZmF2Jykub24oJ2NsaWNrJywgJyNjYW5jZWwtYnRuJywgZnVuY3Rpb24gKGUpIHtcclxuXHRcdCQodGhpcykucGFyZW50cygnOmVxKDQpJykuZmluZCgnLmFkZGZhdl9tb2RhbCcpLnJlbW92ZSgpO1xyXG5cdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHR9KTtcclxuXHJcblx0JCgnLmFkZGZhdicpLm9uKCdjbGljaycsICcjc2F2ZS1idG4nLCBmdW5jdGlvbiAoZSkge1xyXG5cdFx0dmFyICRkZXRhaWxzID0gJCh0aGlzKS5wYXJlbnRzKCc6ZXEoNCknKSxcclxuXHRcdFx0JHRpdGxlID0gJGRldGFpbHMucGFyZW50cygnOmVxKDIpJykuZmluZCgnI3RpdGxlJykudmFsKCksXHJcblx0XHRcdCRsaW5rID0gJGRldGFpbHMuZGF0YSgndXJsJyksXHJcblx0XHRcdCRpY29uID0gJCh0aGlzKS5wYXJlbnRzKCc6ZXEoMiknKS5maW5kKCdzZWxlY3QnKS52YWwoKTtcclxuXHJcblx0XHR2YXIgJGRhdGEgPSAne1widGl0bGVcIjpcIicgKyAkdGl0bGUgKyAnXCIsXCJpY29uXCI6XCInICsgJGljb24gKyAnXCIsXCJsaW5rXCI6XCInICsgJGxpbmsgKyAnXCJ9JztcclxuXHJcblx0XHQkLmFqYXgoeyAvLyBHRVQgYWxsIHNhdmVkIGZvcm1zIGFuZCBwdXQgdGhlbSBpbnRvIGEgbGlzdFxyXG5cdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxyXG5cdFx0XHR1cmw6ICRmYXZVUkwsXHJcblx0XHRcdGRhdGE6ICRkYXRhLFxyXG5cdFx0XHRjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCIsXHJcblx0XHRcdHN1Y2Nlc3M6IGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHQkKHRoaXMpLnBhcmVudHMoJzplcSg0KScpLmZpbmQoJy5hZGRmYXZfbW9kYWwnKS5yZW1vdmUoKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cdH0pO1xyXG5cclxuXHQkKCcuYWRkZmF2Jykub24oJ2NsaWNrJywgJyN0aXRsZScsIGZ1bmN0aW9uIChlKSB7XHJcblx0XHQkKHRoaXMpLnZhbCgnJykuZm9jdXMoKTtcclxuXHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblx0fSk7XHJcblxyXG5cdCQoJy5hZGRmYXYnKS5vbignY2xpY2snLCAnc2VsZWN0JywgZnVuY3Rpb24gKGUpIHtcclxuXHRcdCQodGhpcykuZm9jdXMoKTtcclxuXHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblx0fSk7XHJcblxyXG5cdGlmICgkKCcuY2FyZF9kYXRhJykubGVuZ3RoID4gMCkge1xyXG5cclxuXHRcdGlmICgkKCcuY2FyZF9zZWxlY3RvciBvcHRpb24nKS5sZW5ndGggPT0gMSkge1xyXG5cdFx0XHQkKCcuY2FyZF9zZWxlY3RvcicpLmF0dHIoXCJkaXNhYmxlZFwiLCBcImRpc2FibGVkXCIpO1xyXG5cdFx0fTtcclxuXHJcblx0XHR2YXIgJGJ0blVSTCA9ICQoJy5jYXJkX2RhdGEgLmJ0bi1yZWQudmlld2FsbCcpLmF0dHIoJ2hyZWYnKTtcclxuXHRcdHZhciAkbmV3VVJMID0gJGJ0blVSTCArICc/ZU51bT0nICsgJCgnLmNhcmRfc2VsZWN0b3InKS52YWwoKTtcclxuXHRcdCQoJy5jYXJkX2RhdGEgLmJ0bi1yZWQudmlld2FsbCcpLmF0dHIoJ2hyZWYnLCAkbmV3VVJMKVxyXG5cclxuXHRcdC8vY29uc29sZS5sb2coJG5ld1VSTClcclxuXHJcblx0XHQkKCcuY2FyZF9zZWxlY3RvcicpLmNoYW5nZShmdW5jdGlvbiAoKSB7XHJcblx0XHRcdHZhciAkZU51bSA9ICQodGhpcykudmFsKCksXHJcblx0XHRcdFx0JHVybCA9ICRiYXNlICsgJy9hcGkvd2lkZ2V0cy90aWxlc2RhdGFhbmRzdXJ2ZXk/dGFrZT01JmVOdW1iZXI9JyArICRlTnVtO1xyXG5cclxuXHRcdFx0JG5ld1VSTCA9ICRidG5VUkwgKyAnP2VOdW09JyArICQoJy5jYXJkX3NlbGVjdG9yJykudmFsKCk7XHJcblx0XHRcdCQoJy5jYXJkX2RhdGEgLmJ0bi1yZWQudmlld2FsbCcpLmF0dHIoJ2hyZWYnLCAkbmV3VVJMKVxyXG5cclxuXHRcdFx0Ly9jb25zb2xlLmxvZygkbmV3VVJMKVxyXG5cdFx0XHRsb2FkQ2FyZCgkdXJsKTtcclxuXHRcdFx0Ly9sb2FkQ2FyZCgnL2FwaS9lc2FtcGxlLmpzb24nKTtcclxuXHRcdH0pXHJcblxyXG5cdFx0ZnVuY3Rpb24gbG9hZENhcmQoJHVybCkge1xyXG5cdFx0XHQkLmFqYXgoe1xyXG5cdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcclxuXHRcdFx0XHR1cmw6ICR1cmwsXHJcblx0XHRcdFx0c3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuXHRcdFx0XHRcdHZhciAkaHRtbCA9IFwiXCI7XHJcblxyXG5cdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IChpIDwgZGF0YS5TY2hvb2xEYXRhQW5kU3VydmV5Lmxlbmd0aCkgJiYgKGkgPCA1KTsgaSsrKSB7XHJcblxyXG5cdFx0XHRcdFx0XHR2YXIgc2VjdGlvbiA9IGRhdGEuU2Nob29sRGF0YUFuZFN1cnZleVtpXVxyXG5cdFx0XHRcdFx0XHQkaHRtbCArPSAnPGRpdiBjbGFzcz1cImNhcmRfaXRlbSBjYXJkX2l0ZW0tJyArIHNlY3Rpb24uU3RhdHVzRGVzY3JpcHRpb24gKyAnIGRhdGEtY29sb3VyPVwiJyArIHNlY3Rpb24uU3RhdHVzQ29sb3VySGV4ICsgJ1wiPicgK1xyXG5cdFx0XHRcdFx0XHRcdCc8ZGl2IGNsYXNzPVwicm93XCI+JyArXHJcblx0XHRcdFx0XHRcdFx0JzxkaXYgY2xhc3M9XCJ0d28tdGhpcmRcIj4nICtcclxuXHRcdFx0XHRcdFx0XHQnPGEgY2xhc3M9XCJjYXJkX2l0ZW1fbGlua1wiIGhyZWY9XCInICsgc2VjdGlvbi5VUkwgKyAnXCI+JyArXHJcblx0XHRcdFx0XHRcdFx0JzxwPicgKyBzZWN0aW9uLlRpdGxlICsgJzwvcD4nICtcclxuXHRcdFx0XHRcdFx0XHQnPHNwYW4gY2xhc3M9XCJtZXNzYWdlXCI+JyArIHNlY3Rpb24uTWVzc2FnZSArICc8L3NwYW4+JyArXHJcblx0XHRcdFx0XHRcdFx0JzwvYT4nICtcclxuXHRcdFx0XHRcdFx0XHQnPC9kaXY+JyArXHJcblx0XHRcdFx0XHRcdFx0JzxkaXYgY2xhc3M9XCJ0aGlyZFwiPicgK1xyXG5cdFx0XHRcdFx0XHRcdCc8ZGl2IGNsYXNzPVwiY2FyZF9yb3dcIj4nICtcclxuXHRcdFx0XHRcdFx0XHQnPHNwYW4gY2xhc3M9XCJzdGF0dXMgaGFsZlwiPicgKyBzZWN0aW9uLlN0YXR1c0Rlc2NyaXB0aW9uICsgJzwvc3Bhbj4nICtcclxuXHRcdFx0XHRcdFx0XHQnPHNwYW4gY2xhc3M9XCJkdWUgaGFsZlwiPicgKyBzZWN0aW9uLkRhdGVEdWVGb3JtYXR0ZWQgKyAnPC9zcGFuPicgK1xyXG5cdFx0XHRcdFx0XHRcdCc8L2Rpdj4nICtcclxuXHRcdFx0XHRcdFx0XHQnPC9kaXY+JyArXHJcblx0XHRcdFx0XHRcdFx0JzwvZGl2PicgK1xyXG5cdFx0XHRcdFx0XHRcdCc8L2Rpdj4nXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0JCgnLmNhcmRfZGF0YSAuY29udGFpbmVyJykuaHRtbCgkaHRtbCk7XHJcblxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpZiAoJCgnI2RhdGFOb3RpZmljYXRpb24nKS5sZW5ndGggPiAwKSB7XHJcblx0XHQvLyBkYXRhIGFuZCBzdXJ2ZXkgc3Vic2NyaXB0aW9uXHJcblxyXG5cdFx0dmFyICRub3RpZmljYXRpb25TdGF0dXMgPSBmYWxzZTtcclxuXHRcdHZhciAkbm90aWNlT24gPSAkKCcjZGF0YU5vdGlmaWNhdGlvbicpLmRhdGEoJ25vdGlmaWNhdGlvbi10cnVlJyk7XHJcblx0XHR2YXIgJG5vdGljZU9mZiA9ICQoJyNkYXRhTm90aWZpY2F0aW9uJykuZGF0YSgnbm90aWZpY2F0aW9uLWZhbHNlJyk7XHJcblxyXG5cdFx0dmFyICRkYXRhTm90aWZpY2F0aW9uVVJMID0gJGJhc2UgKyAnL2FwaS93aWRnZXRzL3RpbGVzZGF0YWFuZHN1cnZleS9zdWJzY3JpYmUnO1xyXG5cclxuXHRcdCQuYWpheCh7IC8vIEdFVCBhbGwgc2F2ZWQgZm9ybXMgYW5kIHB1dCB0aGVtIGludG8gYSBsaXN0XHJcblx0XHRcdG1ldGhvZDogXCJQT1NUXCIsXHJcblx0XHRcdHVybDogJGRhdGFOb3RpZmljYXRpb25VUkwsXHJcblx0XHRcdHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XHJcblx0XHRcdFx0Ly92YXIgJGRhdGEgPSAkKCcjZGF0YU5vdGlmaWNhdGlvbicpLmRhdGEoJ3N1YnNjcmlwdGlvbicpO1xyXG5cdFx0XHRcdC8vY29uc29sZS5sb2coZGF0YSk7XHJcblxyXG5cdFx0XHRcdGlmIChkYXRhID09IHRydWUpIHtcclxuXHRcdFx0XHRcdCQoJyNkYXRhTm90aWZpY2F0aW9uJykudGV4dCgkbm90aWNlT24pO1xyXG5cdFx0XHRcdFx0JG5vdGlmaWNhdGlvblN0YXR1cyA9IHRydWU7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdCQoJyNkYXRhTm90aWZpY2F0aW9uJykudGV4dCgkbm90aWNlT2ZmKTtcclxuXHRcdFx0XHRcdCRub3RpZmljYXRpb25TdGF0dXMgPSBmYWxzZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdCQoXCIjZGF0YU5vdGlmaWNhdGlvblwiKS5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7XHJcblxyXG5cdFx0XHRpZiAoJG5vdGlmaWNhdGlvblN0YXR1cyA9PSB0cnVlKSB7XHJcblxyXG5cdFx0XHRcdCQuYWpheCh7XHJcblx0XHRcdFx0XHRcImFzeW5jXCI6IHRydWUsXHJcblx0XHRcdFx0XHRcImNyb3NzRG9tYWluXCI6IHRydWUsXHJcblx0XHRcdFx0XHRcInVybFwiOiAkZGF0YU5vdGlmaWNhdGlvblVSTCxcclxuXHRcdFx0XHRcdFwibWV0aG9kXCI6IFwiUE9TVFwiLFxyXG5cdFx0XHRcdFx0XCJoZWFkZXJzXCI6IHtcclxuXHRcdFx0XHRcdFx0XCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcblx0XHRcdFx0XHRcdFwiY2FjaGUtY29udHJvbFwiOiBcIm5vLWNhY2hlXCJcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcInByb2Nlc3NEYXRhXCI6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XCJkYXRhXCI6IFwiZmFsc2VcIlxyXG5cdFx0XHRcdH0pLmRvbmUoZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcblx0XHRcdFx0XHQvLyBpZihyZXNwb25zZSl7XHJcblx0XHRcdFx0XHQvLyBcdCBjb25zb2xlLmxvZygnWW91IGFyZSBzdWJzY3JpYmVkJyk7XHJcblx0XHRcdFx0XHQvLyB9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Ly8gXHRjb25zb2xlLmxvZygnWW91IGFyZSBOT1Qgc3Vic2NyaWJlZCcpO1xyXG5cdFx0XHRcdFx0Ly8gfVxyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHQkbm90aWZpY2F0aW9uU3RhdHVzID0gZmFsc2VcclxuXHRcdFx0XHQkKCcjZGF0YU5vdGlmaWNhdGlvbicpLnRleHQoJG5vdGljZU9mZik7XHJcblxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0XHQkLmFqYXgoe1xyXG5cdFx0XHRcdFx0XCJhc3luY1wiOiB0cnVlLFxyXG5cdFx0XHRcdFx0XCJjcm9zc0RvbWFpblwiOiB0cnVlLFxyXG5cdFx0XHRcdFx0XCJ1cmxcIjogJGRhdGFOb3RpZmljYXRpb25VUkwsXHJcblx0XHRcdFx0XHRcIm1ldGhvZFwiOiBcIlBPU1RcIixcclxuXHRcdFx0XHRcdFwiaGVhZGVyc1wiOiB7XHJcblx0XHRcdFx0XHRcdFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG5cdFx0XHRcdFx0XHRcImNhY2hlLWNvbnRyb2xcIjogXCJuby1jYWNoZVwiXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XCJwcm9jZXNzRGF0YVwiOiBmYWxzZSxcclxuXHRcdFx0XHRcdFwiZGF0YVwiOiBcInRydWVcIlxyXG5cdFx0XHRcdH0pLmRvbmUoZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcblxyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHQkbm90aWZpY2F0aW9uU3RhdHVzID0gdHJ1ZVxyXG5cdFx0XHRcdCQoJyNkYXRhTm90aWZpY2F0aW9uJykudGV4dCgkbm90aWNlT24pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGlmICgkKCcjZGF0YS1zdXJ2ZXknKS5sZW5ndGggPiAwKSB7XHJcblxyXG5cdFx0dmFyICR1cmwsXHJcblx0XHRcdCRza2lwID0gMCxcclxuXHRcdFx0JHRha2UgPSAxMCxcclxuXHRcdFx0JHN0YXR1cyA9ICgkKCcuZGF0YV9maWx0ZXJzIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQnKS52YWwoKSA9PSBcIm51bGxcIikgPyAnJyA6ICcmU3RhdHVzSUQ9JyArICQoJy5kYXRhX2ZpbHRlcnMgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCcpLnZhbCgpLFxyXG5cdFx0XHQkZGF0ZSA9ICQoJyNkYXRlLXBpY2tlcicpLnZhbCgpLFxyXG5cdFx0XHQkZGF0ZXJhbmdlID0gKCQoJyNkYXRlLXBpY2tlcicpLnZhbCgpID09ICgnTm8gcmFuZ2Ugc2V0JyB8fCAnJykpID8gJycgOiAnJmRhdGVEdWU9JyArICQoJyNkYXRlLXBpY2tlcicpLnZhbCgpLnJlcGxhY2UoL1svXS9nLCBcIiUyRlwiKSxcclxuXHRcdFx0JGVOdW0gPSAoZ2V0UGFyYW1ldGVyQnlOYW1lKFwiZU51bVwiKSA9PSBudWxsKSA/ICcnIDogJyZlTnVtYmVyPScgKyBnZXRQYXJhbWV0ZXJCeU5hbWUoXCJlTnVtXCIpLFxyXG5cdFx0XHQkdGl0bGUgPSAnJyxcclxuXHRcdFx0JHVybCA9ICRiYXNlICsgJy9hcGkvd2lkZ2V0cy90aWxlc2RhdGFhbmRzdXJ2ZXknICsgJz9za2lwPScgKyAkc2tpcCArICcmdGFrZT0nICsgJHRha2UgKyAkZU51bSArICRzdGF0dXMgKyAkZGF0ZXJhbmdlO1xyXG5cclxuXHRcdGNvbnNvbGUubG9nKCR1cmwpO1xyXG5cclxuXHRcdGlmICgkZGF0ZSA9PSAnJykge1xyXG5cdFx0XHQkKCcjZGF0ZS1waWNrZXInKS52YWwoJ05vIHJhbmdlIHNldCcpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIExvYWQgZmlyc3QgcGFnZSBvZiBkYXRhIGFuZCBzdXJ2ZXlcclxuXHRcdGxvYWREYXRhKDAsIDEwLCAkdXJsKTtcclxuXHJcblx0XHQkKFwiaW5wdXRbdHlwZT1yYWRpb11cIikub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xyXG5cdFx0XHQkc3RhdHVzID0gJCh0aGlzKS52YWwoKTtcclxuXHRcdFx0JHRpdGxlID0gJCh0aGlzKS5hdHRyKCdpZCcpICsgJyAnO1xyXG5cdFx0fSlcclxuXHJcblx0XHQvLyBEbyBhIG5ldyBzZWFyY2ggZm9yIGRhdGEgYW5kIHN1cnZleVxyXG5cdFx0JCgnLmRhdGFfZmlsdGVycyAuc2VhcmNoX3N1Ym1pdCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XHJcblx0XHRcdC8vIHJlc2V0IHRvIGZpcnN0IHBhZ2VcclxuXHRcdFx0JHNraXAgPSAwO1xyXG5cdFx0XHQkdGFrZSA9IDEwO1xyXG5cdFx0XHQkZGF0ZSA9ICQoJyNkYXRlLXBpY2tlcicpLnZhbCgpO1xyXG5cdFx0XHQkc3RhdHVzID0gKCQoJy5kYXRhX2ZpbHRlcnMgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCcpLnZhbCgpID09IFwibnVsbFwiKSA/ICcnIDogJyZTdGF0dXNJRD0nICsgJCgnLmRhdGFfZmlsdGVycyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkJykudmFsKCksXHJcblx0XHRcdFx0JGRhdGVyYW5nZSA9ICgkKCcjZGF0ZS1waWNrZXInKS52YWwoKSA9PSAoJ05vIHJhbmdlIHNldCcgfHwgJycpKSA/ICcnIDogJyZkYXRlRHVlPScgKyAkKCcjZGF0ZS1waWNrZXInKS52YWwoKS5yZXBsYWNlKC9bL10vZywgXCIlMkZcIiksXHJcblx0XHRcdFx0JGVOdW0gPSAoJCgnI3NjaG9vbF9lTnVtJykudmFsKCkgPT0gJycpID8gJycgOiAnJmVOdW1iZXI9JyArICQoJyNzY2hvb2xfZU51bScpLnZhbCgpLFxyXG5cdFx0XHRcdCR1cmwgPSAkYmFzZSArICcvYXBpL3dpZGdldHMvdGlsZXNkYXRhYW5kc3VydmV5JyArICc/c2tpcD0nICsgJHNraXAgKyAnJnRha2U9JyArICR0YWtlICsgJGVOdW0gKyAkc3RhdHVzICsgJGRhdGVyYW5nZTtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZygkZGF0ZXJhbmdlKTtcclxuXHRcdFx0bG9hZERhdGEoJHNraXAsICR0YWtlLCAkdXJsKTtcclxuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdDtcclxuXHRcdH0pXHJcblxyXG5cdFx0Ly8gQ3JlYXRlIGRhdGEgYW5kIHN1cnZleSBsaXN0XHJcblx0XHRmdW5jdGlvbiBsb2FkRGF0YSgkc2tpcCwgJHRha2UsICR1cmwpIHtcclxuXHJcblx0XHRcdCQuYWpheCh7XHJcblx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLFxyXG5cdFx0XHRcdHVybDogJHVybCxcclxuXHRcdFx0XHRzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG5cdFx0XHRcdFx0dmFyICRodG1sID0gXCJcIiwgJHJlc3VsdHM7XHJcblx0XHRcdFx0XHR2YXIgJGN1cnJlbnQgPSAxICsgTWF0aC5yb3VuZCgkc2tpcCAvIDEwKSxcclxuXHRcdFx0XHRcdFx0JGxhc3QgPSBNYXRoLmNlaWwoZGF0YS5Db3VudFBvc3RGaWx0ZXIgLyAxMCk7XHJcblxyXG5cclxuXHRcdFx0XHRcdC8vIHVwZGF0ZSByZXN1bHRzIGZvdW5kIHRleHRcclxuXHRcdFx0XHRcdGlmIChkYXRhLkNvdW50UG9zdEZpbHRlciA+IDEwKSB7XHJcblx0XHRcdFx0XHRcdGlmICgoTnVtYmVyKCRza2lwKSArIE51bWJlcigkdGFrZSkpID4gZGF0YS5Db3VudFBvc3RGaWx0ZXIpIHtcclxuXHRcdFx0XHRcdFx0XHQkcmVzdWx0cyA9ICdTaG93aW5nICcgKyAoTnVtYmVyKCRza2lwKSArIDEpICsgJy0nICsgZGF0YS5Db3VudFBvc3RGaWx0ZXIgKyAnIG9mICcgKyBkYXRhLkNvdW50UG9zdEZpbHRlciArICcgcmVzdWx0cyc7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0JHJlc3VsdHMgPSAnU2hvd2luZyAnICsgKE51bWJlcigkc2tpcCkgKyAxKSArICctJyArIChOdW1iZXIoJHNraXApICsgTnVtYmVyKCR0YWtlKSkgKyAnIG9mICcgKyBkYXRhLkNvdW50UG9zdEZpbHRlciArICcgcmVzdWx0cyc7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGRhdGEuQ291bnRQb3N0RmlsdGVyID4gMCkge1xyXG5cdFx0XHRcdFx0XHQkcmVzdWx0cyA9ICdTaG93aW5nICcgKyBkYXRhLkNvdW50UG9zdEZpbHRlciArICcgcmVzdWx0KHMpJztcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdCRyZXN1bHRzID0gJ05vIHJlc3VsdHMgZm91bmQuIFRyeSBhIHdpZGVyIHNlYXJjaCBieSBhZGp1c3RpbmcgdGhlIGZpbHRlcnMuJztcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQkKCcjZGF0YS1zdXJ2ZXkgaDMnKS50ZXh0KCdZb3UgYXJlIHZpZXdpbmcgYWxsICcgKyAkdGl0bGUgKyAnRGF0YSBhbmQgU3VydmV5cyBsaXN0ZWQnKTtcclxuXHJcblx0XHRcdFx0XHQkKCcucmVzdWx0cycpLnRleHQoJHJlc3VsdHMpO1xyXG5cclxuXHRcdFx0XHRcdGlmICgkKCcuZGF0YS1saXN0JykuaHRtbCgpICE9ICcnKSB7ICQoJy5kYXRhLWxpc3QnKS5odG1sKCcnKSB9XHJcblxyXG5cdFx0XHRcdFx0JCgnc3Bhbi5wYWdpbmF0aW9uX3BhZ2UnKS50ZXh0KCdQYWdlICcgKyAkY3VycmVudCArICcgb2YgJyArICRsYXN0KTtcclxuXHRcdFx0XHRcdC8vJCgnLmNhcmRfcGFnaW5hdGlvbiAuY3VycmVudCcpLnRleHQoJGN1cnJlbnQpO1xyXG5cdFx0XHRcdFx0Ly8kKCcuY2FyZF9wYWdpbmF0aW9uIC5sYXN0JykudGV4dCgkbGFzdCk7XHJcblx0XHRcdFx0XHQkKCcuY2FyZF9wYWdpbmF0aW9uIC5sYXN0X2l0ZW0nKS50ZXh0KCRsYXN0KTtcclxuXHJcblx0XHRcdFx0XHRwYWcoJGN1cnJlbnQsICRsYXN0KTtcclxuXHJcblx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgKGkgPCBkYXRhLlNjaG9vbERhdGFBbmRTdXJ2ZXkubGVuZ3RoKSAmJiAoaSA8IDEwKTsgaSsrKSB7XHJcblxyXG5cdFx0XHRcdFx0XHR2YXIgc2VjdGlvbiA9IGRhdGEuU2Nob29sRGF0YUFuZFN1cnZleVtpXVxyXG5cclxuXHRcdFx0XHRcdFx0JGh0bWwgPSAnPGRpdiBjbGFzcz1cImNhcmRfaXRlbSBpdGVtX2xpc3QgJyArIHNlY3Rpb24uU3RhdHVzRGVzY3JpcHRpb24gKyAnXCI+JyArXHJcblx0XHRcdFx0XHRcdFx0JzxkaXYgY2xhc3M9XCJ0aXRsZS1yb3dcIj4nICtcclxuXHRcdFx0XHRcdFx0XHQnPGRpdj4nICtcclxuXHRcdFx0XHRcdFx0XHQnPC9kaXY+JyArXHJcblx0XHRcdFx0XHRcdFx0JzxkaXY+PGEgaHJlZj1cIicgKyBzZWN0aW9uLlVSTCArICdcIiBjbGFzcz1cIml0ZW1fbGlzdF9saW5rXCI+JyArIHNlY3Rpb24uVGl0bGUgKyAnPC9hPjxhIGhyZWY9XCInICsgc2VjdGlvbi5VUkwgKyAnXCIgY2xhc3M9XCJpdGVtX2xpc3RfbGlua1wiPicgKyBzZWN0aW9uLlVSTCArICc8L2E+PC9kaXY+JyArXHJcblx0XHRcdFx0XHRcdFx0JzwvZGl2PicgK1xyXG5cdFx0XHRcdFx0XHRcdCc8ZGl2IGNsYXNzPVwicm93XCI+PHNwYW4gY2xhc3M9XCJpdGVtX2xpc3RfcHVibGlzaGVkXCI+RHVlIDxzcGFuPicgKyBzZWN0aW9uLkRhdGVEdWVGb3JtYXR0ZWQgKyAnPC9zcGFuPjwvc3Bhbj4nICtcclxuXHRcdFx0XHRcdFx0XHQnPHAgY2xhc3M9XCJpdGVtX2xpc3RfYmx1cmJcIj4nICsgc2VjdGlvbi5NZXNzYWdlICsgJzwvcD4nICtcclxuXHRcdFx0XHRcdFx0XHQnPC9kaXY+JyArXHJcblx0XHRcdFx0XHRcdFx0JzwvZGl2PidcclxuXHJcblx0XHRcdFx0XHRcdCQoJy5kYXRhLWxpc3QnKS5hcHBlbmQoJGh0bWwpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0JCgnLnBhZ2luYXRpb24nKS5vbignY2xpY2snLCAnLnBhZ2luYXRpb25faXRlbScsIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0JCgnaHRtbCxib2R5Jykuc2Nyb2xsVG9wKDApO1xyXG5cdFx0XHR2YXIgJHNraXAgPSAkKHRoaXMpLmRhdGEoJ3NraXAnKTtcclxuXHRcdFx0dmFyICR0YWtlID0gJzEwJztcclxuXHRcdFx0dmFyICRzdGF0dXMgPSAkKCcuZGF0YV9maWx0ZXJzIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQnKS52YWwoKTtcclxuXHJcblx0XHRcdHZhciAkdXJsID0gJGJhc2UgKyAnL2FwaS93aWRnZXRzL3RpbGVzZGF0YWFuZHN1cnZleScgKyAnP3NraXA9JyArICRza2lwICsgJyZ0YWtlPScgKyAkdGFrZSArICcmU3RhdHVzSUQ9JyArICRzdGF0dXM7XHJcblxyXG5cdFx0XHRsb2FkRGF0YSgkc2tpcCwgJHRha2UsICR1cmwpO1xyXG5cdFx0fSlcclxuXHJcblx0XHRmdW5jdGlvbiBwYWcoY3VycmVudCwgcGFnZXMpIHtcclxuXHRcdFx0dmFyICRodG1sID0gJyc7XHJcblxyXG5cdFx0XHRpZiAocGFnZXMgPD0gMSkge1xyXG5cdFx0XHRcdCQoJy5jYXJkX3BhZ2luYXRpb24nKS5oaWRlKCk7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9IGVsc2UgaWYgKHBhZ2VzIDwgNykgeyAvLygwKVxyXG5cdFx0XHRcdCQoJy5jYXJkX3BhZ2luYXRpb24nKS5zaG93KCk7XHJcblx0XHRcdFx0Ly8gSWYgdGhlcmUgYXJlIGxlc3MgdGhhbiA3IHBhZ2VzIC0gcGFnaW5hdGlvbiBzdHlsZSAxIHRvIDdcclxuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHBhZ2VzOyBpKyspIHtcclxuXHJcblx0XHRcdFx0XHRpZiAoaSA9PSAoY3VycmVudCAtIDEpKSB7IC8vIGhpZ2h0bGlnaHQgdGhlIGN1cnJlbnQgcGFnZSBOdW1iZXJcclxuXHRcdFx0XHRcdFx0JGh0bWwgKz0gJzxzcGFuIGNsYXNzPVwicGFnaW5hdGlvbl9pdGVtIGN1cnJlbnRcIiBkYXRhLXNraXA9XCInICsgKGkgKiAxMCkgKyAnXCI+JyArIChpICsgMSkgKyAnPC9zcGFuPic7XHJcblx0XHRcdFx0XHR9IGVsc2UgeyAvLyBza2lwIHRoZSBuZXh0IDEwIHJlc3VsdHMgd2l0aCBlYWNoIHBhZ2UgZm9yd2FyZFxyXG5cdFx0XHRcdFx0XHQkaHRtbCArPSAnPGEgY2xhc3M9XCJwYWdpbmF0aW9uX2l0ZW1cIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgZGF0YS1za2lwPVwiJyArIChpICogMTApICsgJ1wiPicgKyAoaSArIDEpICsgJzwvYT4nO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0vLyBidWlsZCBwYWdpbmF0aW9uXHJcblx0XHRcdFx0JCgnLnBhZ2luYXRpb24nKS5odG1sKCRodG1sKTtcclxuXHRcdFx0fSBlbHNlIGlmIChjdXJyZW50ID49IDUpIHsgLy8oMilcclxuXHRcdFx0XHQkKCcuY2FyZF9wYWdpbmF0aW9uJykuc2hvdygpO1xyXG5cdFx0XHRcdC8vIElmIG1vcmUgdGhhbiA3IHBhZ2VzIEFORFxyXG5cdFx0XHRcdC8vIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIHBhZ2UgNSBPUiBhYm92ZSxcclxuXHRcdFx0XHQvLyBleGFtcGxlIHBhZ2luYXRpb24gc3R5bGUgMSAuLi4gMyB0byA3IC4uLiA1MFxyXG5cclxuXHRcdFx0XHQkaHRtbCArPSAnPGEgY2xhc3M9XCJwYWdpbmF0aW9uX2l0ZW1cIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgZGF0YS1za2lwPVwiMFwiPicgKyAxICsgJzwvYT48c3BhbiBjbGFzcz1cInBhZ2luYXRpb25faXRlbVwiPiAuLi4gPC9zcGFuPic7XHJcblxyXG5cdFx0XHRcdGlmIChjdXJyZW50ID4gKHBhZ2VzIC0gNCkpIHsgLy8oNClcclxuXHRcdFx0XHRcdC8vIE9uY2UgdGhlIHVzZXIgaGFzIHJlYWNoZWQgdGhlIGxhc3QgN1xyXG5cdFx0XHRcdFx0Ly8gcGFnaW5hdGlvbiBzdHlsZSAtIGZpcnN0IC4uLiBudW0gbnVtIG51bSBudW0gbGFzdFxyXG5cdFx0XHRcdFx0Zm9yICh2YXIgaSA9IChwYWdlcyAtIDUpOyBpIDwgcGFnZXM7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRpZiAoaSA9PSAoY3VycmVudCAtIDEpKSB7XHJcblx0XHRcdFx0XHRcdFx0JGh0bWwgKz0gJzxzcGFuIGNsYXNzPVwicGFnaW5hdGlvbl9pdGVtIGN1cnJlbnRcIiBkYXRhLXNraXA9XCInICsgKGkgKiAxMCkgKyAnXCI+JyArIChpICsgMSkgKyAnPC9zcGFuPic7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0JGh0bWwgKz0gJzxhIGNsYXNzPVwicGFnaW5hdGlvbl9pdGVtXCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGRhdGEtc2tpcD1cIicgKyAoaSAqIDEwKSArICdcIj4nICsgKGkgKyAxKSArICc8L2E+JztcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gZWxzZSB7IC8vKDMpXHJcblx0XHRcdFx0XHQvLyBTb21ld2hlcmUgaW4gdGhlIG1pZGRsZSAtIG1vcmUgdGhhbiBmaXJzdCA1IGFuZCBsZXNzIHRoYW4gbGFzdCA1XHJcblx0XHRcdFx0XHQvLyBwYWdpbmF0aW9uIHN0eWxlIC0gZmlyc3QgLi4uIG51bSBudW0gY3VycmVudCBudW0gbnVtIC4uLiBsYXN0XHJcblx0XHRcdFx0XHRmb3IgKHZhciBpID0gKGN1cnJlbnQgLSAyKTsgaSA8IChjdXJyZW50ICsgMyk7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRpZiAoaSA9PSBjdXJyZW50KSB7XHJcblx0XHRcdFx0XHRcdFx0JGh0bWwgKz0gJzxzcGFuIGNsYXNzPVwicGFnaW5hdGlvbl9pdGVtIGN1cnJlbnRcIiBkYXRhLXNraXA9XCInICsgKChpIC0gMSkgKiAxMCkgKyAnXCI+JyArIGkgKyAnPC9zcGFuPic7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0JGh0bWwgKz0gJzxhIGNsYXNzPVwicGFnaW5hdGlvbl9pdGVtXCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGRhdGEtc2tpcD1cIicgKyAoKGkgLSAxKSAqIDEwKSArICdcIj4nICsgaSArICc8L2E+JztcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0JGh0bWwgKz0gJzxzcGFuIGNsYXNzPVwicGFnaW5hdGlvbl9pdGVtXCI+IC4uLiA8L3NwYW4+J1xyXG5cdFx0XHRcdFx0JGh0bWwgKz0gJzxhIGNsYXNzPVwicGFnaW5hdGlvbl9pdGVtXCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGRhdGEtc2tpcD1cIicgKyAoKHBhZ2VzIC0gMSkgKiAxMCkgKyAnXCI+JyArIHBhZ2VzICsgJzwvYT4nO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQkKCcucGFnaW5hdGlvbicpLmh0bWwoJGh0bWwpO1xyXG5cclxuXHRcdFx0fSBlbHNlIHsgLy8gKDEpXHJcblx0XHRcdFx0JCgnLmNhcmRfcGFnaW5hdGlvbicpLnNob3coKTtcclxuXHRcdFx0XHQvLyBJZiBtb3JlIHRoYW4gNyBwYWdlcyBBTkRcclxuXHRcdFx0XHQvLyB0aGUgdXNlciBpcyBiZWxvdyBwYWdlIDVcclxuXHRcdFx0XHQvLyBwYWdpbmF0aW9uIDEgdG8gNSAuLi4gbGFzdFxyXG5cdFx0XHRcdGZvciAodmFyIGkgPSAxOyBpIDwgNjsgaSsrKSB7XHJcblx0XHRcdFx0XHRpZiAoaSA9PSBjdXJyZW50KSB7XHJcblx0XHRcdFx0XHRcdCRodG1sICs9ICc8c3BhbiBjbGFzcz1cInBhZ2luYXRpb25faXRlbSBjdXJyZW50XCIgZGF0YS1za2lwPVwiJyArICgoaSAtIDEpICogMTApICsgJ1wiPicgKyBpICsgJzwvc3Bhbj4nO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0JGh0bWwgKz0gJzxhIGNsYXNzPVwicGFnaW5hdGlvbl9pdGVtXCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGRhdGEtc2tpcD1cIicgKyAoKGkgLSAxKSAqIDEwKSArICdcIj4nICsgaSArICc8L2E+JztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0JGh0bWwgKz0gJzxzcGFuIGNsYXNzPVwicGFnaW5hdGlvbl9pdGVtXCI+IC4uLiA8L3NwYW4+PGEgY2xhc3M9XCJwYWdpbmF0aW9uX2l0ZW1cIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgZGF0YS1za2lwPVwiJyArICgocGFnZXMgLSAxKSAqIDEwKSArICdcIj4nICsgcGFnZXMgKyAnPC9hPic7XHJcblx0XHRcdFx0JCgnLnBhZ2luYXRpb24nKS5odG1sKCRodG1sKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gcGFnaW5hdGlvbkJ1dHRvbnMoKSB7XHJcblxyXG5cdFx0dmFyIHF1ZXJ5X3N0cmluZyA9IGxvY2F0aW9uLnNlYXJjaDtcclxuXHRcdGZ1bmN0aW9uIGdldFVSTFBhcmFtZXRlcihuYW1lKSB7XHJcblx0XHRcdHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoXHJcblx0XHRcdFx0KFJlZ0V4cCgnWz98Jl0nK25hbWUgKyAnPScgKyAnKC4rPykoJnwkKScpLmV4ZWMobG9jYXRpb24uc2VhcmNoKXx8W251bGwsbnVsbF0pWzFdXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblx0XHR2YXIgcGFnZSA9IGdldFVSTFBhcmFtZXRlcihcInBhZ2VcIik7XHJcblx0XHR2YXIgb2xkUGFyYSA9IFwicGFnZT1cIiArIHBhZ2U7XHJcblx0XHR2YXIgcHJldmlvdXNQYWdlID0gK3BhZ2UgLSAxO1xyXG5cdFx0dmFyIG5leHRQYWdlID0gK3BhZ2UgKyAxO1xyXG5cclxuXHJcblx0XHRpZiAocGFnZSA9PSAxIHx8IHBhZ2U9PVwibnVsbFwiKSB7XHJcblx0XHRcdCQoJy5wYWdpbmF0aW9uX2l0ZW0ucHJldmlvdXMnKS5oaWRlKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0JCgnLnBhZ2luYXRpb25faXRlbS5wcmV2aW91cycpLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0dmFyIG5ld1BhcmEgPSBcInBhZ2U9XCIgKyBwcmV2aW91c1BhZ2U7XHJcblx0XHRcdGxvY2F0aW9uLnNlYXJjaCA9IHF1ZXJ5X3N0cmluZy5yZXBsYWNlKG9sZFBhcmEsIG5ld1BhcmEpO1xyXG5cdFx0fSlcclxuXHRcdFxyXG5cdFx0JCgnLnBhZ2luYXRpb25faXRlbS5uZXh0Jykub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRpZiAocGFnZT09XCJudWxsXCIpIHtcclxuXHRcdFx0XHRsb2NhdGlvbi5zZWFyY2ggPSBxdWVyeV9zdHJpbmcgKyBcIiZwYWdlPTJcIjtcclxuXHRcdFx0ICB9IGVsc2Uge1xyXG5cdFx0XHRcdHZhciBuZXdQYXJhID0gXCJwYWdlPVwiICsgbmV4dFBhZ2U7XHJcblx0XHRcdFx0bG9jYXRpb24uc2VhcmNoID0gcXVlcnlfc3RyaW5nLnJlcGxhY2Uob2xkUGFyYSwgbmV3UGFyYSk7XHJcblx0XHRcdH1cclxuXHRcdH0pXHJcblx0fSBwYWdpbmF0aW9uQnV0dG9ucygpXHJcblxyXG5cdCQoJ2lucHV0W3JlcXVpcmVkXScpLm9uKCdmb2N1cycsIGZ1bmN0aW9uICgpIHtcclxuXHRcdCQodGhpcykucHJldignLmVycm9yX21lc3NhZ2UnKS50ZXh0KCcnKVxyXG5cdH0pXHJcblxyXG5cdCQoJ2lucHV0W3JlcXVpcmVkXScpLm9uKCdibHVyJywgZnVuY3Rpb24gKCkge1xyXG5cdFx0dmFyICR0aGlzID0gJCh0aGlzKS52YWwoKTtcclxuXHJcblx0XHRpZiAoJHRoaXMgPT0gJycpIHtcclxuXHRcdFx0JCh0aGlzKS5hZGRDbGFzcygnZW1wdHknKTtcclxuXHRcdFx0JCh0aGlzKS5wcmV2KCcuZXJyb3JfbWVzc2FnZScpLnRleHQoJ1RoaXMgZmllbGQgY2FuIG5vdCBiZSBlbXB0eS4nKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0JCh0aGlzKS5yZW1vdmVDbGFzcygnZW1wdHknKTtcclxuXHRcdH1cclxuXHR9KVxyXG5cdCQoJy5pY29tb29uLXVwbG9hZGZpbGUnKS5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7XHJcblx0XHQkKHRoaXMpLnByZXYoJ2lucHV0JykuY2xpY2soKTtcclxuXHR9KVxyXG5cdCQoJy5pbnB1dGZpbGUnKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuXHRcdHZhciAkaW5wdXQgPSAkKHRoaXMpLFxyXG5cdFx0XHQkbGFiZWwgPSAkaW5wdXQucGFyZW50KCkuZmluZCgnbGFiZWwuZmlsZU5hbWUnKTtcclxuXHJcblx0XHQkaW5wdXQub24oJ2NoYW5nZScsIGZ1bmN0aW9uIChlKSB7XHJcblx0XHRcdHZhciBmaWxlTmFtZSA9ICcnO1xyXG5cdFx0XHR2YXIgZmlsZVR5cGVTZWxlY3RvciA9ICQoJyNwX2x0X2N0bDAxX3BhZ2VwbGFjZWhvbGRlcl9wX2x0X2N0bDAxX3BhZ2VwbGFjZWhvbGRlcl9wX2x0X2N0bDAxX0Nldm5Ud29Db2x1bW5MYXlvdXRfQ2V2blR3b0NvbHVtbkxheW91dF9DZW50ZXJfV2ViUGFydFpvbmVfV2ViUGFydFpvbmVfem9uZV9DZXZuRmlsZVVwbG9hZFV0aWxpdHlfRmlsZVR5cGVzJylcclxuXHJcblxyXG5cdFx0XHRpZiAodGhpcy5maWxlcyAmJiB0aGlzLmZpbGVzLmxlbmd0aCA+IDEpXHJcblx0XHRcdFx0ZmlsZU5hbWUgPSAodGhpcy5nZXRBdHRyaWJ1dGUoJ2RhdGEtbXVsdGlwbGUtY2FwdGlvbicpIHx8ICcnKS5yZXBsYWNlKCd7Y291bnR9JywgdGhpcy5maWxlcy5sZW5ndGgpO1xyXG5cdFx0XHRlbHNlIGlmIChlLnRhcmdldC52YWx1ZSlcclxuXHRcdFx0XHRmaWxlTmFtZSA9IGUudGFyZ2V0LnZhbHVlLnNwbGl0KCdcXFxcJykucG9wKCk7XHJcblxyXG5cdFx0XHRpZiAoZmlsZU5hbWUpXHJcblx0XHRcdFx0JGxhYmVsLmh0bWwoZmlsZU5hbWUpO1xyXG5cdFx0XHRlbHNlXHJcblx0XHRcdFx0JGxhYmVsLmh0bWwoJ05vIGZpbGUgc2VsY3RlZCcpO1xyXG5cclxuXHRcdFx0aWYgKCQoJy5zdWNjZXNzX21lc3NhZ2UnKSAhPSBudWxsKSB7XHJcblx0XHRcdFx0JCgnLnN1Y2Nlc3NfbWVzc2FnZScpLmh0bWwoJycpO1xyXG5cdFx0XHRcdCQoJy5zdWNjZXNzX21lc3NhZ2UnKS5yZW1vdmVDbGFzcygnc3VjY2Vzc19tZXNzYWdlJyk7XHJcblx0XHRcdFx0JCgnLmljb21vb24tdXBsb2FkZmlsZScpLnJlbW92ZUNsYXNzKCdlcnJvcicpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICgkKCcuZXJyb3JfbWVzc2FnZScpICE9IG51bGwpIHtcclxuXHRcdFx0XHQkKCcuZXJyb3JfbWVzc2FnZScpLmh0bWwoJycpO1xyXG5cdFx0XHRcdCQoJy5lcnJvcl9tZXNzYWdlJykucmVtb3ZlQ2xhc3MoJ2Vycm9yX21lc3NhZ2UnKTtcclxuXHRcdFx0XHQkKCcuaWNvbW9vbi11cGxvYWRmaWxlJykucmVtb3ZlQ2xhc3MoJ2Vycm9yJyk7XHJcblx0XHRcdFx0JChmaWxlVHlwZVNlbGVjdG9yKS5wYXJlbnRzKCcudHdvLXRoaXJkJykucmVtb3ZlQ2xhc3MoJ2Vycm9yLWljb24nKVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHZhciBmaWxlSWNvbiA9ICc8c3BhbiBjbGFzcz1cImZpbGUtaWNvblwiPjwvc3Bhbj4nO1xyXG5cdFx0dmFyIGVycm9yTGFiZWwgPSAkKCcjcF9sdF9jdGwwMV9wYWdlcGxhY2Vob2xkZXJfcF9sdF9jdGwwMV9wYWdlcGxhY2Vob2xkZXJfcF9sdF9jdGwwMV9DZXZuVHdvQ29sdW1uTGF5b3V0X0Nldm5Ud29Db2x1bW5MYXlvdXRfQ2VudGVyX1dlYlBhcnRab25lX1dlYlBhcnRab25lX3pvbmVfQ2V2bkZpbGVVcGxvYWRVdGlsaXR5X01lc3NhZ2UnKVxyXG5cdFx0dmFyIGZpbGVUeXBlU2VsZWN0b3IgPSAkKCcjcF9sdF9jdGwwMV9wYWdlcGxhY2Vob2xkZXJfcF9sdF9jdGwwMV9wYWdlcGxhY2Vob2xkZXJfcF9sdF9jdGwwMV9DZXZuVHdvQ29sdW1uTGF5b3V0X0Nldm5Ud29Db2x1bW5MYXlvdXRfQ2VudGVyX1dlYlBhcnRab25lX1dlYlBhcnRab25lX3pvbmVfQ2V2bkZpbGVVcGxvYWRVdGlsaXR5X0ZpbGVUeXBlcycpXHJcblxyXG5cdFx0JCgnLmljb21vb24tdXBsb2FkZmlsZScpLmFwcGVuZChmaWxlSWNvbilcclxuXHJcblx0XHRpZiAoISQoZXJyb3JMYWJlbCkuaXMoJzplbXB0eScpKSB7XHJcblx0XHRcdCQoJy5pY29tb29uLXVwbG9hZGZpbGUnKS5hZGRDbGFzcygnZXJyb3InKTtcclxuXHRcdH0gXHJcblx0XHRpZiAoJChlcnJvckxhYmVsKS5odG1sKCkgPT09IFwiSW5jb3JyZWN0IEZpbGUgVHlwZSBTZWxlY3RlZFwiKSB7XHJcblx0XHRcdCQoZmlsZVR5cGVTZWxlY3RvcikucGFyZW50cygnLnR3by10aGlyZCcpLmFkZENsYXNzKCdlcnJvci1pY29uJylcclxuXHRcdH0gXHJcblx0XHRpZiAoJCgnLnN1Y2Nlc3NfbWVzc2FnZScpLmh0bWwoKSA9PT0gXCJGaWxlIFN1Y2Nlc3NmdWxseSBVcGxvYWRlZC5cIikge1xyXG5cdFx0XHQkKCcuaWNvbW9vbi11cGxvYWRmaWxlJykucmVtb3ZlQ2xhc3MoJ2Vycm9yJyk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRmlyZWZveCBidWcgZml4XHJcblx0XHQkaW5wdXRcclxuXHRcdFx0Lm9uKCdmb2N1cycsIGZ1bmN0aW9uICgpIHsgJGlucHV0LmFkZENsYXNzKCdoYXMtZm9jdXMnKTsgfSlcclxuXHRcdFx0Lm9uKCdibHVyJywgZnVuY3Rpb24gKCkgeyAkaW5wdXQucmVtb3ZlQ2xhc3MoJ2hhcy1mb2N1cycpOyB9KTtcclxuXHR9KTtcclxuXHJcblx0Ly8gRm9yIHByb3RvdHlwZSBkZW1vIE9OTFkgLSByZW1vdmUgZm9yIGJ1aWxkXHJcblx0dmFyICRwYWdlID0gJCgnLnBhZ2VfYnJlYWRjcnVtYnMgbGk6bnRoLWNoaWxkKDIpIGEnKS50ZXh0KCk7XHJcblxyXG5cdHN3aXRjaCAoJHBhZ2UpIHtcclxuXHRcdGNhc2UgJ0ZpbmFuY2UnOlxyXG5cdFx0XHQkKCcuZmluYW5jZScpLmFkZENsYXNzKCdjdXJyZW50Jyk7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0Y2FzZSAnQ3VycmljdWx1bSc6XHJcblx0XHRcdCQoJy5jdXJyaWN1bHVtJykuYWRkQ2xhc3MoJ2N1cnJlbnQnKTtcclxuXHRcdFx0YnJlYWs7XHJcblx0XHRkZWZhdWx0OlxyXG5cdFx0XHRicmVhaztcclxuXHR9XHJcblxyXG4gIHZhciAkZGlzbWlzc19jb29raWVfbmFtZSA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlQWxsKCcvJywgJ18nKTtcclxuXHQvLyAxMCB5ZWFycyBpbiBzZWNvbmRzICg2MCo2MCoyNCozNjUqMTApXHJcblx0Ly8gdmFyICRkaXNtaXNzX2Nvb2tpZSA9ICRkaXNtaXNzX2Nvb2tpZV9uYW1lICsgJz0xOyBNYXgtYWdlPTMxNTM2MDAwMCc7XHJcblx0Ly8gRGlzbWlzcyB0aW1lIG9mIG9uZSBkYXlcclxuXHR2YXIgJGRpc21pc3NfY29va2llID0gJGRpc21pc3NfY29va2llX25hbWUgKyAnPTE7IE1heC1hZ2U9ODY0MDAnO1xyXG5cclxuICB2YXIgZGlzY2xhaW1lclJldXNlID0gWydDU09HJywgJ0NyaXRpY2FsLUluY2lkZW50LU1hbmFnZW1lbnQnXTtcclxuXHJcbiAgZGlzY2xhaW1lclJldXNlLmV2ZXJ5KGVsZW1lbnQgPT4ge1xyXG5cclxuICAgIGlmICgkZGlzbWlzc19jb29raWVfbmFtZS5pbmNsdWRlcyhlbGVtZW50KSkge1xyXG4gICAgICBpZiAoZG9jdW1lbnQuY29va2llLmluY2x1ZGVzKGVsZW1lbnQpKSB7XHJcbiAgICAgICAgJCgnLm1vZGFsJykuaGlkZSgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgJCgnLm1vZGFsJykuc2hvdygpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoZG9jdW1lbnQuY29va2llLmluZGV4T2YoJGRpc21pc3NfY29va2llX25hbWUpID09IC0xKSB7XHJcbiAgICAgICAgJCgnLm1vZGFsJykuc2hvdygpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgJCgnLm1vZGFsJykuaGlkZSgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gIH0pO1xyXG5cclxuXHQvLyBkaXNjbGFpbWVyIGNvb2tpZVxyXG5cdC8vIGlmIChkb2N1bWVudC5jb29raWUuaW5kZXhPZigkZGlzbWlzc19jb29raWVfbmFtZSkgPT0gLTEpIHtcclxuXHRcdC8vICQoJy5tb2RhbCcpLnNob3coKTtcclxuXHQvLyB9IGVsc2Uge1xyXG5cdFx0Ly8gJCgnLm1vZGFsJykuaGlkZSgpO1xyXG5cdC8vIH1cclxuXHJcblx0Ly9tb2RhbFxyXG5cdCQoJy5hZ3JlZScpLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuXHRcdGRvY3VtZW50LmNvb2tpZSA9ICRkaXNtaXNzX2Nvb2tpZTtcclxuXHRcdCQoJy5tb2RhbCcpLmhpZGUoKTtcclxuXHR9KVxyXG5cclxuXHQkKCdtYWluLnBhZ2UgLnBhZ2VfYXJ0aWNsZSBhJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xyXG5cdFx0JCh0aGlzKS5hZGRDbGFzcygndmlzaXRlZCcpXHJcblx0fSlcclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy9cclxuXHQvLyAgICAgICAgICAgU0VBUkNIIFNUQVJUICAgICAgICAgICAvL1xyXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy9cclxuXHQkKCcuYWR2YW5jZS1maWx0ZXJzJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xyXG5cdFx0JCgnLmhpZGUnKS5yZW1vdmVDbGFzcygnaGlkZScpO1xyXG5cdFx0JCh0aGlzKS5hZGRDbGFzcygnaGlkZScpO1xyXG5cdH0pXHJcblxyXG5cdC8vIFF1aWNrIGJhc2ljIHNlYXJjaFxyXG5cdCQoJy5iYXNpYy1zZWFyY2ggLnNlYXJjaF9zdWJtaXQnKS5vbignY2xpY2snLCBmdW5jdGlvbiAoZSkge1xyXG5cdFx0dmFyICRrZXl3b3JkID0gJCh0aGlzKS5wcmV2KCdpbnB1dFtuYW1lPVwia2V5d29yZFwiXScpLnZhbCgpLFxyXG5cdFx0XHQkdXJsID0gJCh0aGlzKS5wYXJlbnQoKS5kYXRhKCd1cmwnKTtcclxuXHRcdHZhciAkZGlvY2VzZSA9ICQodGhpcykucGFyZW50KCkuZGF0YSgnZGlvY2VzZScpO1xyXG5cclxuXHRcdGlmICgka2V5d29yZCAhPSB1bmRlZmluZWQpIHtcclxuXHRcdFx0d2luZG93LmxvY2F0aW9uID0gJHVybCArIFwia2V5d29yZD1cIiArICRrZXl3b3JkICsgXCImY2F0ZWdvcnk9QWxsXCIgKyBcIiZzb3J0PVJlbGV2YW5jZVwiICsgXCImdHlwZT0wXCIgKyBcIiZkaW9jZXNlPVwiICsgJGRpb2Nlc2UgKyBcIiZwYWdlPTFcIjtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHdpbmRvdy5sb2NhdGlvbiA9ICR1cmw7XHJcblx0XHR9XHJcblx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblx0fSk7XHJcblxyXG5cdCQoJy5iYXNpYy1zZWFyY2ggaW5wdXQsIC5mdWxsLXNlYXJjaCBpbnB1dCcpLm9uKCdrZXlkb3duJywgZnVuY3Rpb24gKGUpIHtcclxuXHRcdGlmIChlLmtleUNvZGUgPT09IDEzKSB7XHJcblx0XHRcdCQodGhpcykubmV4dCgpLnRyaWdnZXIoJ2NsaWNrJyk7XHJcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdH1cclxuXHR9KTtcclxuXHJcblx0Ly8gZnVsbCBzZWFyY2hcclxuXHQkKCcuZnVsbC1zZWFyY2ggLnNlYXJjaF9zdWJtaXQnKS5vbignY2xpY2snLCBmdW5jdGlvbiAoZSkge1xyXG5cdFx0JCgnLnNlYXJjaF9maWx0ZXJzIC5zZWFyY2hfc3VibWl0JykudHJpZ2dlcignY2xpY2snKTtcclxuXHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHR9KVxyXG5cclxuXHQvLyBGdWxsIFNlYXJjaFxyXG5cdCQoJy5zZWFyY2hfZmlsdGVycyAuc2VhcmNoX3N1Ym1pdCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XHJcblxyXG5cdFx0dmFyICRzZWFyY2hTdHJpbmcgPSAkKCcuc2VhcmNoX2ZpbHRlcnMnKS5kYXRhKCd1cmwnKSxcclxuXHRcdFx0JGtleXdvcmQgPSAkKCcuZnVsbC1zZWFyY2ggLnNlYXJjaF9zdWJtaXQnKS5wcmV2KCcja2V5d29yZCcpLnZhbCgpLFxyXG5cdFx0XHQkY2F0ZWdvcnkgPSAkKCdpbnB1dFt0eXBlPVwicmFkaW9cIl06Y2hlY2tlZCcpLnZhbCgpLFxyXG5cdFx0XHQkc2Nob29sID0gJCgnI3NjaG9vbCcpLnZhbCgpLFxyXG5cdFx0XHQkc29ydCA9ICQoJyNzb3J0JykudmFsKCksXHJcblx0XHRcdCR0eXBlID0gJCgnI3R5cGUnKS52YWwoKSxcclxuXHRcdFx0JGRpb2Nlc2UgPSAkKCcjZGlvY2VzZScpLnZhbCgpLFxyXG5cdFx0XHQkZGF0ZSA9ICQoJyNkYXRlLXBpY2tlcicpLnZhbCgpLFxyXG5cdFx0XHQkZGF0ZXJhbmdlID0gJCgnI2RhdGUtcGlja2VyJykudmFsKCkucmVwbGFjZSgvWy9dL2csIFwiJTJGXCIpO1xyXG5cclxuXHRcdGlmICgka2V5d29yZCAhPSB1bmRlZmluZWQpIHtcclxuXHRcdFx0JHNlYXJjaFN0cmluZyArPSBcImtleXdvcmQ9XCIgKyAka2V5d29yZFxyXG5cdFx0fVxyXG5cdFx0aWYgKCRjYXRlZ29yeSAhPSB1bmRlZmluZWQpIHtcclxuXHRcdFx0JHNlYXJjaFN0cmluZyArPSBcIiZjYXRlZ29yeT1cIiArICRjYXRlZ29yeVxyXG5cdFx0fVxyXG5cdFx0aWYgKCRzY2hvb2wgIT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdCRzZWFyY2hTdHJpbmcgKz0gXCImc2Nob29sPVwiICsgJHNjaG9vbFxyXG5cdFx0fVxyXG5cdFx0aWYgKCRzb3J0ICE9IHVuZGVmaW5lZCkge1xyXG5cdFx0XHQkc2VhcmNoU3RyaW5nICs9IFwiJnNvcnQ9XCIgKyAkc29ydFxyXG5cdFx0fVxyXG5cdFx0aWYgKCR0eXBlICE9IHVuZGVmaW5lZCkge1xyXG5cdFx0XHQkc2VhcmNoU3RyaW5nICs9IFwiJnR5cGU9XCIgKyAkdHlwZVxyXG5cdFx0fVxyXG5cdFx0aWYgKCRkaW9jZXNlICE9IHVuZGVmaW5lZCkge1xyXG5cdFx0XHQkc2VhcmNoU3RyaW5nICs9IFwiJmRpb2Nlc2U9XCIgKyAkZGlvY2VzZVxyXG5cdFx0fVxyXG5cdFx0aWYgKCRkYXRlcmFuZ2UgIT0gJ05vIHJhbmdlIHNldCcpIHtcclxuXHRcdFx0JHNlYXJjaFN0cmluZyArPSBcIiZkYXRlPVwiICsgJGRhdGVyYW5nZVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vY29uc29sZS5sb2coJHNlYXJjaFN0cmluZyk7XHJcblx0XHR3aW5kb3cubG9jYXRpb24gPSAkc2VhcmNoU3RyaW5nO1xyXG5cclxuXHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcblx0fSk7XHJcblxyXG5cdC8vIEFkZCBiYXNpYyBzZWFyY2ggdmFsdWUgdG8gaW5wdXRcclxuXHRpZiAoJCgnLnNlYXJjaF9maWx0ZXJzJykubGVuZ3RoICE9IDApIHtcclxuXHJcblx0XHR2YXIgJHNjaG9vbCA9IGdldFBhcmFtZXRlckJ5TmFtZShcInNjaG9vbFwiKSxcclxuXHRcdFx0JHNvcnQgPSBnZXRQYXJhbWV0ZXJCeU5hbWUoXCJzb3J0XCIpLFxyXG5cdFx0XHQkdHlwZSA9IGdldFBhcmFtZXRlckJ5TmFtZShcInR5cGVcIiksXHJcblx0XHRcdCRkaW9jZXNlID0gZ2V0UGFyYW1ldGVyQnlOYW1lKFwiZGlvY2VzZVwiKSxcclxuXHRcdFx0JGRhdGUgPSBnZXRQYXJhbWV0ZXJCeU5hbWUoXCJkYXRlXCIpO1xyXG5cclxuXHRcdCQoJy5mdWxsLXNlYXJjaCBpbnB1dCcpLnZhbChnZXRQYXJhbWV0ZXJCeU5hbWUoXCJrZXl3b3JkXCIpKTtcclxuXHRcdCQoJ2lucHV0OnJhZGlvW3ZhbHVlPVwiJyArIGdldFBhcmFtZXRlckJ5TmFtZShcImNhdGVnb3J5XCIpICsgJ1wiXScpLnByb3AoJ2NoZWNrZWQnLCB0cnVlKTtcclxuXHJcblx0XHRpZiAoJHNjaG9vbCAhPSBudWxsKSB7ICQoJyNzY2hvb2wnKS52YWwoJHNjaG9vbCkgfVxyXG5cdFx0aWYgKCRzb3J0ICE9IG51bGwpIHsgJCgnI3NvcnQnKS52YWwoJHNvcnQpIH1cclxuXHRcdGlmICgkdHlwZSAhPSBudWxsKSB7ICQoJyN0eXBlJykudmFsKCR0eXBlKSB9XHJcblx0XHRpZiAoJGRpb2Nlc2UgIT0gbnVsbCkgeyAkKCcjZGlvY2VzZScpLnZhbCgkZGlvY2VzZSkgfVxyXG5cdFx0aWYgKCRkYXRlID09IG51bGwpIHtcclxuXHRcdFx0JCgnI2RhdGUtcGlja2VyJykudmFsKCdObyByYW5nZSBzZXQnKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdCQoJyNkYXRlLXBpY2tlcicpLnZhbCgkZGF0ZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9oaWdobGlnaHQgc2VhcmNoIHJlc3VsdFxyXG5cdFx0dmFyIHRleHQgPSAkKCcuc2VhcmNoX2RhcmsgaW5wdXQnKS52YWwoKTtcclxuXHRcdGlmICh0ZXh0Lmxlbmd0aCA+IDApIHtcclxuXHRcdFx0dmFyIHJlID0gbmV3IFJlZ0V4cCgnKCcgKyB0ZXh0ICsgJyknLCAnZ2knKTtcclxuXHRcdFx0JChcImEuaXRlbV9saXN0X2xpbmtcIikuZWFjaChmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0JCh0aGlzKS5odG1sKCQodGhpcykuaHRtbCgpLnJlcGxhY2UocmUsICc8c3BhbiBjbGFzcz1cInNlYXJjaC1oaWdobGlnaHRcIj4kMTwvc3Bhbj4nKSk7XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0JChcInAuaXRlbV9saXN0X2JsdXJiXCIpLmVhY2goZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdCQodGhpcykuaHRtbCgkKHRoaXMpLmh0bWwoKS5yZXBsYWNlKHJlLCAnPHNwYW4gY2xhc3M9XCJzZWFyY2gtaGlnaGxpZ2h0XCI+JDE8L3NwYW4+JykpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGdldFBhcmFtZXRlckJ5TmFtZShuYW1lLCB1cmwpIHtcclxuXHRcdGlmICghdXJsKSB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuXHRcdG5hbWUgPSBuYW1lLnJlcGxhY2UoL1tcXFtcXF1dL2csICdcXFxcJCYnKTtcclxuXHRcdHZhciByZWdleCA9IG5ldyBSZWdFeHAoJ1s/Jl0nICsgbmFtZSArICcoPShbXiYjXSopfCZ8I3wkKScpLFxyXG5cdFx0XHRyZXN1bHRzID0gcmVnZXguZXhlYyh1cmwpO1xyXG5cdFx0aWYgKCFyZXN1bHRzKSByZXR1cm4gbnVsbDtcclxuXHRcdGlmICghcmVzdWx0c1syXSkgcmV0dXJuICcnO1xyXG5cdFx0cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChyZXN1bHRzWzJdLnJlcGxhY2UoL1xcKy9nLCAnICcpKTtcclxuXHR9XHJcblxyXG5cdC8vIGNsZWFyIGZpbHRlcnMgYnV0dG9uXHJcblx0JCgnLmNsZWFyLWZpbHRlcnMnKS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcclxuXHRcdCQoJ2lucHV0OmNoZWNrYm94JykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcclxuXHRcdCQoJ2lucHV0OnJhZGlvJykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcclxuXHRcdCQoJ2lucHV0OnJhZGlvW3ZhbHVlPVwibnVsbFwiXScpLnByb3AoJ2NoZWNrZWQnLCB0cnVlKTtcclxuXHRcdCQoJ2lucHV0OnJhZGlvW3ZhbHVlPVwiYWxsXCJdJykucHJvcCgnY2hlY2tlZCcsIHRydWUpO1xyXG5cdFx0JCgnc2VsZWN0JykucHJvcCgnc2VsZWN0ZWRJbmRleCcsIDApO1xyXG5cdFx0JCgnI2RhdGUtcGlja2VyJykudmFsKCdObyByYW5nZSBzZXQnKTtcclxuXHR9KVxyXG5cclxuXHQkKCcjZGF0ZS1waWNrZXInKS5kYXRlcmFuZ2VwaWNrZXIoe1xyXG5cdFx0Ly8gXCJzdGFydERhdGVcIjogbW9tZW50KCkuc3VidHJhY3QoMzAsICdkYXlzJyksXHJcblx0XHQvLyBcImVuZERhdGVcIjogbW9tZW50KCksXHJcblx0XHRcImF1dG9VcGRhdGVJbnB1dFwiOiBmYWxzZSxcclxuXHRcdFwibG9jYWxlXCI6IHtcclxuXHRcdFx0XCJmb3JtYXRcIjogXCJERC9NTS9ZWVlZXCIsXHJcblx0XHRcdFwiY2FuY2VsTGFiZWxcIjogXCJDbGVhclwiXHJcblx0XHR9XHJcblx0fSk7XHJcblxyXG5cdCQoJyNkYXRlLXBpY2tlcicpLm9uKCdhcHBseS5kYXRlcmFuZ2VwaWNrZXInLCBmdW5jdGlvbiAoZXYsIHBpY2tlcikge1xyXG5cdFx0JCh0aGlzKS52YWwocGlja2VyLnN0YXJ0RGF0ZS5mb3JtYXQoJ0REL01NL1lZWVknKSArICcgLSAnICsgcGlja2VyLmVuZERhdGUuZm9ybWF0KCdERC9NTS9ZWVlZJykpO1xyXG5cclxuXHR9KTtcclxuXHQkKCcjZGF0ZS1waWNrZXInKS5vbignY2FuY2VsLmRhdGVyYW5nZXBpY2tlcicsIGZ1bmN0aW9uIChldiwgcGlja2VyKSB7XHJcblx0XHQkKHRoaXMpLnZhbCgnTm8gcmFuZ2Ugc2V0Jyk7XHJcblx0fSk7XHJcblxyXG5cdC8vQ2hlY2sgaWYgbW9iaWxlXHJcblx0dmFyIGlzTW9iaWxlID0gZmFsc2U7IC8vaW5pdGlhdGUgYXMgZmFsc2VcclxuXHQvLyBkZXZpY2UgZGV0ZWN0aW9uXHJcblx0aWYgKC8oYW5kcm9pZHxiYlxcZCt8bWVlZ28pLittb2JpbGV8YXZhbnRnb3xiYWRhXFwvfGJsYWNrYmVycnl8YmxhemVyfGNvbXBhbHxlbGFpbmV8ZmVubmVjfGhpcHRvcHxpZW1vYmlsZXxpcChob25lfG9kKXxpcGFkfGlyaXN8a2luZGxlfEFuZHJvaWR8U2lsa3xsZ2UgfG1hZW1vfG1pZHB8bW1wfG5ldGZyb250fG9wZXJhIG0ob2J8aW4paXxwYWxtKCBvcyk/fHBob25lfHAoaXhpfHJlKVxcL3xwbHVja2VyfHBvY2tldHxwc3B8c2VyaWVzKDR8NikwfHN5bWJpYW58dHJlb3x1cFxcLihicm93c2VyfGxpbmspfHZvZGFmb25lfHdhcHx3aW5kb3dzIChjZXxwaG9uZSl8eGRhfHhpaW5vL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KVxyXG5cdFx0fHwgLzEyMDd8NjMxMHw2NTkwfDNnc298NHRocHw1MFsxLTZdaXw3NzBzfDgwMnN8YSB3YXxhYmFjfGFjKGVyfG9vfHNcXC0pfGFpKGtvfHJuKXxhbChhdnxjYXxjbyl8YW1vaXxhbihleHxueXx5dyl8YXB0dXxhcihjaHxnbyl8YXModGV8dXMpfGF0dHd8YXUoZGl8XFwtbXxyIHxzICl8YXZhbnxiZShja3xsbHxucSl8YmkobGJ8cmQpfGJsKGFjfGF6KXxicihlfHYpd3xidW1ifGJ3XFwtKG58dSl8YzU1XFwvfGNhcGl8Y2N3YXxjZG1cXC18Y2VsbHxjaHRtfGNsZGN8Y21kXFwtfGNvKG1wfG5kKXxjcmF3fGRhKGl0fGxsfG5nKXxkYnRlfGRjXFwtc3xkZXZpfGRpY2F8ZG1vYnxkbyhjfHApb3xkcygxMnxcXC1kKXxlbCg0OXxhaSl8ZW0obDJ8dWwpfGVyKGljfGswKXxlc2w4fGV6KFs0LTddMHxvc3x3YXx6ZSl8ZmV0Y3xmbHkoXFwtfF8pfGcxIHV8ZzU2MHxnZW5lfGdmXFwtNXxnXFwtbW98Z28oXFwud3xvZCl8Z3IoYWR8dW4pfGhhaWV8aGNpdHxoZFxcLShtfHB8dCl8aGVpXFwtfGhpKHB0fHRhKXxocCggaXxpcCl8aHNcXC1jfGh0KGMoXFwtfCB8X3xhfGd8cHxzfHQpfHRwKXxodShhd3x0Yyl8aVxcLSgyMHxnb3xtYSl8aTIzMHxpYWMoIHxcXC18XFwvKXxpYnJvfGlkZWF8aWcwMXxpa29tfGltMWt8aW5ub3xpcGFxfGlyaXN8amEodHx2KWF8amJyb3xqZW11fGppZ3N8a2RkaXxrZWppfGtndCggfFxcLyl8a2xvbnxrcHQgfGt3Y1xcLXxreW8oY3xrKXxsZShub3x4aSl8bGcoIGd8XFwvKGt8bHx1KXw1MHw1NHxcXC1bYS13XSl8bGlid3xseW54fG0xXFwtd3xtM2dhfG01MFxcL3xtYSh0ZXx1aXx4byl8bWMoMDF8MjF8Y2EpfG1cXC1jcnxtZShyY3xyaSl8bWkobzh8b2F8dHMpfG1tZWZ8bW8oMDF8MDJ8Yml8ZGV8ZG98dChcXC18IHxvfHYpfHp6KXxtdCg1MHxwMXx2ICl8bXdicHxteXdhfG4xMFswLTJdfG4yMFsyLTNdfG4zMCgwfDIpfG41MCgwfDJ8NSl8bjcoMCgwfDEpfDEwKXxuZSgoY3xtKVxcLXxvbnx0Znx3Znx3Z3x3dCl8bm9rKDZ8aSl8bnpwaHxvMmltfG9wKHRpfHd2KXxvcmFufG93ZzF8cDgwMHxwYW4oYXxkfHQpfHBkeGd8cGcoMTN8XFwtKFsxLThdfGMpKXxwaGlsfHBpcmV8cGwoYXl8dWMpfHBuXFwtMnxwbyhja3xydHxzZSl8cHJveHxwc2lvfHB0XFwtZ3xxYVxcLWF8cWMoMDd8MTJ8MjF8MzJ8NjB8XFwtWzItN118aVxcLSl8cXRla3xyMzgwfHI2MDB8cmFrc3xyaW05fHJvKHZlfHpvKXxzNTVcXC98c2EoZ2V8bWF8bW18bXN8bnl8dmEpfHNjKDAxfGhcXC18b298cFxcLSl8c2RrXFwvfHNlKGMoXFwtfDB8MSl8NDd8bWN8bmR8cmkpfHNnaFxcLXxzaGFyfHNpZShcXC18bSl8c2tcXC0wfHNsKDQ1fGlkKXxzbShhbHxhcnxiM3xpdHx0NSl8c28oZnR8bnkpfHNwKDAxfGhcXC18dlxcLXx2ICl8c3koMDF8bWIpfHQyKDE4fDUwKXx0NigwMHwxMHwxOCl8dGEoZ3R8bGspfHRjbFxcLXx0ZGdcXC18dGVsKGl8bSl8dGltXFwtfHRcXC1tb3x0byhwbHxzaCl8dHMoNzB8bVxcLXxtM3xtNSl8dHhcXC05fHVwKFxcLmJ8ZzF8c2kpfHV0c3R8djQwMHx2NzUwfHZlcml8dmkocmd8dGUpfHZrKDQwfDVbMC0zXXxcXC12KXx2bTQwfHZvZGF8dnVsY3x2eCg1Mnw1M3w2MHw2MXw3MHw4MHw4MXw4M3w4NXw5OCl8dzNjKFxcLXwgKXx3ZWJjfHdoaXR8d2koZyB8bmN8bncpfHdtbGJ8d29udXx4NzAwfHlhc1xcLXx5b3VyfHpldG98enRlXFwtL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50LnN1YnN0cigwLCA0KSkpIHtcclxuXHRcdGlzTW9iaWxlID0gdHJ1ZTtcclxuXHR9XHJcblx0Ly9tYWtlIHNlYXJjaCBmaWx0ZXJzIGNvbGxhcHNpYmxlIG9uIG1vYmlsZVxyXG5cdGlmICgkKHdpbmRvdykud2lkdGgoKSA8IDc2Nykge1xyXG5cdFx0dmFyICRmaWx0ZXJBcnJvdyA9ICQoJy5zZWFyY2hfZmlsdGVycyAuY2FyZF9oZWFkZXInKSxcclxuXHRcdFx0JGZpbHRlckNhcmRzID0gJCgnLnNlYXJjaF9maWx0ZXJzIC5jYXJkX2l0ZW0nKTtcclxuXHJcblx0XHQkKCcuc2VhcmNoX2ZpbHRlcnMnKS5hZGRDbGFzcygnY29sbGFwc2UnKTtcclxuXHRcdCRmaWx0ZXJBcnJvdy5hZGRDbGFzcygnYWN0aXZlJyk7XHJcblx0XHQkZmlsdGVyQ2FyZHMuYWRkQ2xhc3MoJ2hpZGUtbWUnKTtcclxuXHJcblx0XHQkZmlsdGVyQXJyb3cub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRpZiAoJGZpbHRlckFycm93Lmhhc0NsYXNzKCdhY3RpdmUnKSkge1xyXG5cdFx0XHRcdCQodGhpcykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xyXG5cdFx0XHRcdCRmaWx0ZXJDYXJkcy5yZW1vdmVDbGFzcygnaGlkZS1tZScpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdCQodGhpcykuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xyXG5cdFx0XHRcdCRmaWx0ZXJDYXJkcy5hZGRDbGFzcygnaGlkZS1tZScpO1xyXG5cdFx0XHR9XHJcblx0XHR9KVxyXG5cdH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy9cclxuXHQvLyAgICAgICAgICAgU0VBUkNIIEVORCAgICAgICAgICAgLy9cclxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vXHJcblxyXG5cdC8vU3RpY2t5IHBvbHlmaWxsXHJcblx0dmFyIHN0aWNreUVsbSA9ICQoZG9jdW1lbnQpLmZpbmQoJy5zdGlja3knKTtcclxuXHRpZiAoc3RpY2t5RWxtLmxlbmd0aCA+IDApIHtcclxuXHRcdHZhciBlbGVtZW50cyA9ICQoJy5zdGlja3knKTtcclxuXHRcdFN0aWNreWZpbGwuYWRkKGVsZW1lbnRzKTtcclxuXHR9XHJcblxyXG5cclxuXHQkKCcucGFnZV9uYXZfdGl0bGUnKS5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7XHJcblx0XHR2YXIgaXNPcGVuID0gJCh0aGlzKS5wYXJlbnQoKS5oYXNDbGFzcygnYWN0aXZlJyk7XHJcblx0XHRpc09wZW4gPT09IHRydWUgPyAkKHRoaXMpLnBhcmVudCgpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKSA6ICQodGhpcykucGFyZW50KCkuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xyXG5cdH0pO1xyXG5cclxuXHQkKCcucGFnZV9uYXYuY29sbGFwc2libGUgPiB1bCcpLmFkZENsYXNzKCdsZXZlbC0yJylcclxuXHQkKCcucGFnZV9uYXYuY29sbGFwc2libGUgPiB1bCA+IGxpID4gdWwnKS5hZGRDbGFzcygnbGV2ZWwtMycpXHJcblx0JCgnLnBhZ2VfbmF2LmNvbGxhcHNpYmxlID4gdWwgPiBsaSA+IHVsID4gbGkgPiB1bCcpLmFkZENsYXNzKCdsZXZlbC00Jyk7XHJcblx0JCgnLkhpZ2hsaWdodGVkJykucGFyZW50KCd1bCcpLnBhcmVudCgnbmF2JykuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xyXG5cdCQoJy5IaWdobGlnaHRlZCcpLnBhcmVudCgndWwnKS5wYXJlbnQoJ2xpJykuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xyXG5cclxuXHJcblx0JCgnLmxldmVsLTMsIC5sZXZlbC00JykuZWFjaChmdW5jdGlvbiAoKSB7XHJcblx0XHQkKHRoaXMpLnBhcmVudCgpLmFkZENsYXNzKCdoYXNjaGlsZCcpLmFwcGVuZCgnPGEgY2xhc3M9XCJtZW51X3RvZ2dsZVwiPjxzcGFuIGNsYXNzPVwic3Itb25seVwiPk9wZW4gc3ViLW1lbnU8L3NwYW4+PC9hPicpO1xyXG5cdH0pXHJcblxyXG5cdCQoZG9jdW1lbnQpLm9uKCdjbGljaycsICcubGV2ZWwtMiA+IGxpID4gLm1lbnVfdG9nZ2xlJywgZnVuY3Rpb24gKCkge1xyXG5cdFx0dmFyIGlzT3BlbiA9ICQodGhpcykucGFyZW50KCkuaGFzQ2xhc3MoJ2FjdGl2ZScpO1xyXG5cclxuXHRcdGlmIChpc09wZW4gPT09IHRydWUpIHtcclxuXHRcdFx0JCh0aGlzKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnYWN0aXZlJylcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdCQoJy5sZXZlbC0yID4gLmFjdGl2ZScpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcclxuXHRcdFx0JCh0aGlzKS5wYXJlbnQoKS5hZGRDbGFzcygnYWN0aXZlJyk7XHJcblx0XHR9XHJcblx0fSk7XHJcblxyXG5cdCQoZG9jdW1lbnQpLm9uKCdjbGljaycsICcubGV2ZWwtMyBsaSAubWVudV90b2dnbGUnLCBmdW5jdGlvbiAoKSB7XHJcblx0XHR2YXIgaXNPcGVuID0gJCh0aGlzKS5wYXJlbnQoKS5oYXNDbGFzcygnYWN0aXZlJyk7XHJcblx0XHRpc09wZW4gPT09IHRydWUgPyAkKHRoaXMpLnBhcmVudCgpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKSA6ICQodGhpcykucGFyZW50KCkuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xyXG5cdH0pO1xyXG5cclxuXHQvL21ha2Ugc2lkZSBtZW51IHBhcmVudCBpdGVtIGV4cGFuZCB3aGVuIGNsaWNraW5nIGl0IHRvIHRoZSBsYW5kaW5nIHBhZ2VcclxuXHQkKCcucGFnZV9uYXYuY29sbGFwc2libGUgbGknKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuXHRcdGlmICgkKHRoaXMpLmhhc0NsYXNzKCdIaWdobGlnaHRlZCcpICYmICQodGhpcykuaGFzQ2xhc3MoJ2hhc2NoaWxkJykpIHtcclxuXHRcdFx0JCh0aGlzKS5hZGRDbGFzcygnYWN0aXZlJylcclxuXHRcdH1cclxuXHR9KVxyXG5cclxuXHQvLyBOZXcgYWNjb3JkaW9uXHJcblx0JCgnLm5ldy1hY2NvcmRpb24gYScpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCl7XHJcblx0XHQkKHRoaXMpLm5leHQoJy5ib2R5Jykuc2xpZGVUb2dnbGUoKVxyXG5cdFx0aWYoJCh0aGlzKS5hdHRyKCdhcmlhLWV4cGFuZGVkJykgPT09ICd0cnVlJyl7XHJcblx0XHRcdCQodGhpcykuYXR0cignYXJpYS1leHBhbmRlZCcsICdmYWxzZScpXHRcclxuXHRcdH1lbHNle1xyXG5cdFx0XHQkKHRoaXMpLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpXHJcblx0XHR9XHJcblx0fSlcclxuXHJcblx0JCgnLmFjY29yZGlvbi1ncm91cCAuY29sbGFwc2UtYnV0dG9uJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKXtcclxuXHRcdGlmKCQodGhpcykuYXR0cignYXJpYS1leHBhbmRlZCcpID09PSAndHJ1ZScpe1xyXG5cdFx0XHQkKHRoaXMpLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKVxyXG5cdFx0XHQkKCcubmV3LWFjY29yZGlvbiBhJykuYXR0cignYXJpYS1leHBhbmRlZCcsICdmYWxzZScpXHJcblx0XHRcdCQoJy5uZXctYWNjb3JkaW9uIC5ib2R5Jykuc2xpZGVVcCgpXHJcblx0XHRcdCQodGhpcykudGV4dCgnRXhwYW5kIEFsbCcpXHJcblx0XHR9ZWxzZXtcclxuXHRcdFx0JCh0aGlzKS5hdHRyKCdhcmlhLWV4cGFuZGVkJywgJ3RydWUnKVxyXG5cdFx0XHQkKCcubmV3LWFjY29yZGlvbiBhJykuYXR0cignYXJpYS1leHBhbmRlZCcsICd0cnVlJylcclxuXHRcdFx0JCgnLm5ldy1hY2NvcmRpb24gLmJvZHknKS5zbGlkZURvd24oKVxyXG5cdFx0XHQkKHRoaXMpLnRleHQoJ0NvbGxhcHNlIEFsbCcpXHJcblx0XHR9XHJcblx0fSlcclxufSk7XHJcbiJdfQ=="}