{"version":3,"sources":["node_modules/browser-pack/_prelude.js","scripts/direction-reveal.js","scripts/main.js"],"names":[],"mappings":"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","file":"bundle.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o h ? (h / w) : 1));\n let y = (e.pageY - position.y - (h / 2) * (h > w ? (w / h) : 1));\n\n // Calculate the angle the pointer entered/exited and convert to clockwise format (top/right/bottom/left = 0/1/2/3). See https://stackoverflow.com/a/3647634 for a full explanation.\n let d = Math.round(Math.atan2(y, x) / 1.57079633 + 5) % 4;\n\n // console.table([x, y, w, h, e.pageX, e.pageY, item.offsetLeft, item.offsetTop, position.x, position.y]);\n\n return d;\n };\n\n\n // https://www.kirupa.com/html5/get_element_position_using_javascript.htm\n const _getPosition = function (el) {\n let xPos = 0;\n let yPos = 0;\n\n while (el) {\n xPos += (el.offsetLeft + el.clientLeft);\n yPos += (el.offsetTop + el.clientTop);\n\n el = el.offsetParent;\n }\n return {\n x: xPos,\n y: yPos\n };\n }\n\n const _translateDirection = switchcase({\n 0: 'top',\n 1: 'right',\n 2: 'bottom',\n 3: 'left'\n })('top');\n\n\n const _addClass = function (e, state) {\n let currentItem = e.currentTarget;\n let direction = _getDirection(e, currentItem);\n let directionString = _translateDirection(direction);\n\n // Remove current animation classes and add current one.\n let currentCssClasses = currentItem.className.split(' ');\n let filteredCssClasses = currentCssClasses.filter((cssClass) => (!cssClass.startsWith(animationName))).join(' ');\n currentItem.className = filteredCssClasses;\n currentItem.classList.add(`${animationName}--${state}-${directionString}`);\n };\n\n\n const _bindEvents = function (containerItem) {\n const items = containerItem.querySelectorAll(itemSelector);\n\n items.forEach((item) => {\n\n _addEventListenerMulti(item, ['mouseenter', 'focus'], function(e) {\n _addClass(e, 'in');\n });\n\n _addEventListenerMulti(item, ['mouseleave', 'blur'], function(e) {\n _addClass(e, 'out');\n });\n\n if (enableTouch) {\n\n item.addEventListener('touchstart', function(e) {\n touchStart = +new Date;\n });\n\n item.addEventListener('touchend', function(e) {\n let touchTime = +new Date - touchStart;\n\n if (touchTime < touchThreshold && item.getAttribute('data-hover') === null) {\n e.preventDefault();\n item.setAttribute('data-hover', 'true');\n _addClass(e, 'in');\n }\n });\n\n }\n\n });\n };\n\n const _addEventListenerMulti = function (element, events, fn) {\n events.forEach((e) => element.addEventListener(e, fn));\n }\n\n\n const init = function () {\n\n if (containers.length) {\n containers.forEach((containerItem) => {\n _bindEvents(containerItem);\n });\n }\n else {\n return;\n }\n\n };\n\n // Init is called by default\n init();\n\n\n // Reveal API\n return {\n init\n };\n};\n\nexport default DirectionReveal;\n\n\n// Better switch cases - https://hackernoon.com/rethinking-javascript-eliminate-the-switch-statement-for-better-code-5c81c044716d\nexport const switchcase = cases => defaultCase => key =>\nkey in cases ? cases[key] : defaultCase;\n","import DirectionReveal from './direction-reveal.js';\n\n// Swing animation(Default)\nconst directionRevealSwing = DirectionReveal({\n selector: '.direction-reveal--demo-swing'\n});\n\n// Slide animation with all options specified\nconst directionRevealSlide = DirectionReveal({\n selector: '.direction-reveal--demo-slide',\n itemSelector: '.direction-reveal__card',\n animationName: 'slide',\n enableTouch: true\n});\n\n// Rotate animation\nconst directionRevealRotate = DirectionReveal({\n selector: '.direction-reveal--demo-rotate',\n animationName: 'rotate'\n});\n\n// Bootstrap demo\nconst directionRevealBoostrap = DirectionReveal({\n selector: '.direction-reveal--demo-bootstrap'\n});\n"],"preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzY3JpcHRzL2RpcmVjdGlvbi1yZXZlYWwuanMiLCJzY3JpcHRzL21haW4uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7QUNDQTs7Ozs7Ozs7Ozs7QUFXQSxJQUFNLGtCQUFrQixTQUFsQixlQUFrQixHQU1kO0FBQUEsaUZBQUosRUFBSTtBQUFBLDJCQUxSLFFBS1E7QUFBQSxNQUxFLFFBS0YsaUNBTGEsbUJBS2I7QUFBQSwrQkFKUixZQUlRO0FBQUEsTUFKTSxZQUlOLHFDQUpxQix5QkFJckI7QUFBQSxnQ0FIUixhQUdRO0FBQUEsTUFITyxhQUdQLHNDQUh1QixPQUd2QjtBQUFBLDhCQUZSLFdBRVE7QUFBQSxNQUZLLFdBRUwsb0NBRm1CLElBRW5CO0FBQUEsaUNBRFIsY0FDUTtBQUFBLE1BRFEsY0FDUix1Q0FEeUIsR0FDekI7O0FBRVIsTUFBTSxhQUFhLFNBQVMsZ0JBQVQsQ0FBMEIsUUFBMUIsQ0FBbkI7QUFDQSxNQUFJLG1CQUFKOztBQUdBLE1BQU0sZ0JBQWdCLFNBQWhCLGFBQWdCLENBQVUsQ0FBVixFQUFhLElBQWIsRUFBbUI7QUFDdkM7QUFDQSxRQUFJLElBQUksS0FBSyxXQUFiO0FBQ0EsUUFBSSxJQUFJLEtBQUssWUFBYjtBQUNBLFFBQUksV0FBVyxhQUFhLElBQWIsQ0FBZjs7QUFFQTtBQUNBLFFBQUksSUFBSyxFQUFFLEtBQUYsR0FBVSxTQUFTLENBQW5CLEdBQXdCLElBQUksQ0FBTCxJQUFXLElBQUksQ0FBSixHQUFTLElBQUksQ0FBYixHQUFrQixDQUE3QixDQUFoQztBQUNBLFFBQUksSUFBSyxFQUFFLEtBQUYsR0FBVSxTQUFTLENBQW5CLEdBQXdCLElBQUksQ0FBTCxJQUFXLElBQUksQ0FBSixHQUFTLElBQUksQ0FBYixHQUFrQixDQUE3QixDQUFoQzs7QUFFQTtBQUNBLFFBQUksSUFBSSxLQUFLLEtBQUwsQ0FBVyxLQUFLLEtBQUwsQ0FB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QTRCLEVBQTVCLENBQVA7QUFBQSxLQUFmO0FBQ0QsR0FGRDs7QUFLQSxNQUFNLE9BQU8sU0FBUCxJQUFPLEdBQVk7O0FBRXZCLFFBQUksV0FBVyxNQUFmLEVBQXVCO0FBQ3JCLGlCQUFXLE9BQVgsQ0FBbUIsVUFBQyxhQUFELEVBQW1CO0FBQ3BDLG9CQUFZLGFBQVo7QUFDRCxPQUZEO0FBR0QsS0FKRCxNQUtLO0FBQ0g7QUFDRDtBQUVGLEdBWEQ7O0FBYUE7QUFDQTs7QUFHQTtBQUNBLFNBQU87QUFDTDtBQURLLEdBQVA7QUFHRCxDQWpJRDs7a0JBbUllLGU7O0FBR2Y7O0FBQ08sSUFBTSxrQ0FBYSxTQUFiLFVBQWE7QUFBQSxTQUFTO0FBQUEsV0FBZTtBQUFBLGFBQ2xELE9BQU8sS0FBUCxHQUFlLE1BQU0sR0FBTixDQUFmLEdBQTRCLFdBRHNCO0FBQUEsS0FBZjtBQUFBLEdBQVQ7QUFBQSxDQUFuQjs7Ozs7QUNuSlA7Ozs7OztBQUVBO0FBQ0EsSUFBTSx1QkFBdUIsK0JBQWdCO0FBQzNDLFlBQVU7QUFEaUMsQ0FBaEIsQ0FBN0I7O0FBSUE7QUFDQSxJQUFNLHVCQUF1QiwrQkFBZ0I7QUFDM0MsWUFBVSwrQkFEaUM7QUFFM0MsZ0JBQWMseUJBRjZCO0FBRzNDLGlCQUFlLE9BSDRCO0FBSTNDLGVBQWE7QUFKOEIsQ0FBaEIsQ0FBN0I7O0FBT0E7QUFDQSxJQUFNLHdCQUF3QiwrQkFBZ0I7QUFDNUMsWUFBVSxnQ0FEa0M7QUFFNUMsaUJBQWU7QUFGNkIsQ0FBaEIsQ0FBOUI7O0FBS0E7QUFDQSxJQUFNLDBCQUEwQiwrQkFBZ0I7QUFDOUMsWUFBVTtBQURvQyxDQUFoQixDQUFoQyIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJcbi8qKlxuICBEaXJlY3Rpb24gYXdhcmUgY29udGVudCByZXZlYWxzLlxuXG4gIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgLSBDb250YWluZXIgZm9yIGFsbCBvcHRpb25zLlxuICBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBDb250YWluZXIgZWxlbWVudCBzZWxlY3Rvci5cbiAgQHBhcmFtIHtzdHJpbmd9IGl0ZW1TZWxlY3RvciAtIEl0ZW0gZWxlbWVudCBzZWxlY3Rvci5cbiAgQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBBbmltYXRpb24gQ1NTIGNsYXNzLlxuICBAcGFyYW0ge2JvbGxlYW59IGVuYWJsZVRvdWNoICAtIEFkZHMgdG91Y2ggZXZlbnQgdG8gc2hvdyBjb250ZW50IG9uIGZpcnN0IGNsaWNrIHRoZW4gZm9sbG93IGxpbmsgb24gdGhlIHNlY29uZCBjbGljay5cbiAgQHBhcmFtIHtpbnRlZ2VyfSB0b3VjaFRocmVzaG9sZCAtIFRvdWNoIGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiB0aGlzIHRvIHRyaWdnZXIgcmV2ZWFsIHdoaWNoIHByZXZlbnRzIHRoZSBldmVudCB0cmlnZ2VyaW5nIGlmIHVzZXIgaXMgc2Nyb2xsaW5nLlxuKi9cblxuY29uc3QgRGlyZWN0aW9uUmV2ZWFsID0gZnVuY3Rpb24oe1xuICBzZWxlY3Rvcjogc2VsZWN0b3IgPSAnLmRpcmVjdGlvbi1yZXZlYWwnLFxuICBpdGVtU2VsZWN0b3I6IGl0ZW1TZWxlY3RvciA9ICcuZGlyZWN0aW9uLXJldmVhbF9fY2FyZCcsXG4gIGFuaW1hdGlvbk5hbWU6IGFuaW1hdGlvbk5hbWUgPSAnc3dpbmcnLFxuICBlbmFibGVUb3VjaDogZW5hYmxlVG91Y2ggPSB0cnVlLFxuICB0b3VjaFRocmVzaG9sZDogdG91Y2hUaHJlc2hvbGQgPSAyNTBcbiAgfSA9IHt9KSB7XG5cbiAgY29uc3QgY29udGFpbmVycyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICBsZXQgdG91Y2hTdGFydDtcblxuXG4gIGNvbnN0IF9nZXREaXJlY3Rpb24gPSBmdW5jdGlvbiAoZSwgaXRlbSkge1xuICAgIC8vIFdpZHRoIGFuZCBoZWlnaHQgb2YgY3VycmVudCBpdGVtXG4gICAgbGV0IHcgPSBpdGVtLm9mZnNldFdpZHRoO1xuICAgIGxldCBoID0gaXRlbS5vZmZzZXRIZWlnaHQ7XG4gICAgbGV0IHBvc2l0aW9uID0gX2dldFBvc2l0aW9uKGl0ZW0pO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSB4L3kgdmFsdWUgb2YgdGhlIHBvaW50ZXIgZW50ZXJpbmcvZXhpdGluZywgcmVsYXRpdmUgdG8gdGhlIGNlbnRlciBvZiB0aGUgaXRlbS5cbiAgICBsZXQgeCA9IChlLnBhZ2VYIC0gcG9zaXRpb24ueCAtICh3IC8gMikgKiAodyA+IGggPyAoaCAvIHcpIDogMSkpO1xuICAgIGxldCB5ID0gKGUucGFnZVkgLSBwb3NpdGlvbi55IC0gKGggLyAyKSAqIChoID4gdyA/ICh3IC8gaCkgOiAxKSk7XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIGFuZ2xlIHRoZSBwb2ludGVyIGVudGVyZWQvZXhpdGVkIGFuZCBjb252ZXJ0IHRvIGNsb2Nrd2lzZSBmb3JtYXQgKHRvcC9yaWdodC9ib3R0b20vbGVmdCA9IDAvMS8yLzMpLiAgU2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zNjQ3NjM0IGZvciBhIGZ1bGwgZXhwbGFuYXRpb24uXG4gICAgbGV0IGQgPSBNYXRoLnJvdW5kKE1hdGguYXRhbjIoeSwgeCkgLyAxLjU3MDc5NjMzICsgNSkgJSA0O1xuXG4gICAgLy8gY29uc29sZS50YWJsZShbeCwgeSwgdywgaCwgZS5wYWdlWCwgZS5wYWdlWSwgaXRlbS5vZmZzZXRMZWZ0LCBpdGVtLm9mZnNldFRvcCwgcG9zaXRpb24ueCwgcG9zaXRpb24ueV0pO1xuXG4gICAgcmV0dXJuIGQ7XG4gIH07XG5cblxuICAvLyBodHRwczovL3d3dy5raXJ1cGEuY29tL2h0bWw1L2dldF9lbGVtZW50X3Bvc2l0aW9uX3VzaW5nX2phdmFzY3JpcHQuaHRtXG4gIGNvbnN0IF9nZXRQb3NpdGlvbiA9IGZ1bmN0aW9uIChlbCkge1xuICAgIGxldCB4UG9zID0gMDtcbiAgICBsZXQgeVBvcyA9IDA7XG5cbiAgICB3aGlsZSAoZWwpIHtcbiAgICAgIHhQb3MgKz0gKGVsLm9mZnNldExlZnQgKyBlbC5jbGllbnRMZWZ0KTtcbiAgICAgIHlQb3MgKz0gKGVsLm9mZnNldFRvcCArIGVsLmNsaWVudFRvcCk7XG5cbiAgICAgIGVsID0gZWwub2Zmc2V0UGFyZW50O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgeDogeFBvcyxcbiAgICAgIHk6IHlQb3NcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgX3RyYW5zbGF0ZURpcmVjdGlvbiA9IHN3aXRjaGNhc2Uoe1xuICAgIDA6ICd0b3AnLFxuICAgIDE6ICdyaWdodCcsXG4gICAgMjogJ2JvdHRvbScsXG4gICAgMzogJ2xlZnQnXG4gIH0pKCd0b3AnKTtcblxuXG4gIGNvbnN0IF9hZGRDbGFzcyA9IGZ1bmN0aW9uIChlLCBzdGF0ZSkge1xuICAgIGxldCBjdXJyZW50SXRlbSA9IGUuY3VycmVudFRhcmdldDtcbiAgICBsZXQgZGlyZWN0aW9uID0gX2dldERpcmVjdGlvbihlLCBjdXJyZW50SXRlbSk7XG4gICAgbGV0IGRpcmVjdGlvblN0cmluZyA9IF90cmFuc2xhdGVEaXJlY3Rpb24oZGlyZWN0aW9uKTtcblxuICAgIC8vIFJlbW92ZSBjdXJyZW50IGFuaW1hdGlvbiBjbGFzc2VzIGFuZCBhZGQgY3VycmVudCBvbmUuXG4gICAgbGV0IGN1cnJlbnRDc3NDbGFzc2VzID0gY3VycmVudEl0ZW0uY2xhc3NOYW1lLnNwbGl0KCcgJyk7XG4gICAgbGV0IGZpbHRlcmVkQ3NzQ2xhc3NlcyA9IGN1cnJlbnRDc3NDbGFzc2VzLmZpbHRlcigoY3NzQ2xhc3MpID0+ICghY3NzQ2xhc3Muc3RhcnRzV2l0aChhbmltYXRpb25OYW1lKSkpLmpvaW4oJyAnKTtcbiAgICBjdXJyZW50SXRlbS5jbGFzc05hbWUgPSBmaWx0ZXJlZENzc0NsYXNzZXM7XG4gICAgY3VycmVudEl0ZW0uY2xhc3NMaXN0LmFkZChgJHthbmltYXRpb25OYW1lfS0tJHtzdGF0ZX0tJHtkaXJlY3Rpb25TdHJpbmd9YCk7XG4gIH07XG5cblxuICBjb25zdCBfYmluZEV2ZW50cyA9IGZ1bmN0aW9uIChjb250YWluZXJJdGVtKSB7XG4gICAgY29uc3QgaXRlbXMgPSBjb250YWluZXJJdGVtLnF1ZXJ5U2VsZWN0b3JBbGwoaXRlbVNlbGVjdG9yKTtcblxuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcblxuICAgICAgX2FkZEV2ZW50TGlzdGVuZXJNdWx0aShpdGVtLCBbJ21vdXNlZW50ZXInLCAnZm9jdXMnXSwgZnVuY3Rpb24oZSkge1xuICAgICAgICBfYWRkQ2xhc3MoZSwgJ2luJyk7XG4gICAgICB9KTtcblxuICAgICAgX2FkZEV2ZW50TGlzdGVuZXJNdWx0aShpdGVtLCBbJ21vdXNlbGVhdmUnLCAnYmx1ciddLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIF9hZGRDbGFzcyhlLCAnb3V0Jyk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGVuYWJsZVRvdWNoKSB7XG5cbiAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgIHRvdWNoU3RhcnQgPSArbmV3IERhdGU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgbGV0IHRvdWNoVGltZSA9ICtuZXcgRGF0ZSAtIHRvdWNoU3RhcnQ7XG5cbiAgICAgICAgICBpZiAodG91Y2hUaW1lIDwgdG91Y2hUaHJlc2hvbGQgJiYgaXRlbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtaG92ZXInKSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ2RhdGEtaG92ZXInLCAndHJ1ZScpO1xuICAgICAgICAgICAgX2FkZENsYXNzKGUsICdpbicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgIH1cblxuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IF9hZGRFdmVudExpc3RlbmVyTXVsdGkgPSBmdW5jdGlvbiAoZWxlbWVudCwgZXZlbnRzLCBmbikge1xuICAgIGV2ZW50cy5mb3JFYWNoKChlKSA9PiBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZSwgZm4pKTtcbiAgfVxuXG5cbiAgY29uc3QgaW5pdCA9IGZ1bmN0aW9uICgpIHtcblxuICAgIGlmIChjb250YWluZXJzLmxlbmd0aCkge1xuICAgICAgY29udGFpbmVycy5mb3JFYWNoKChjb250YWluZXJJdGVtKSA9PiB7XG4gICAgICAgIF9iaW5kRXZlbnRzKGNvbnRhaW5lckl0ZW0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICB9O1xuXG4gIC8vIEluaXQgaXMgY2FsbGVkIGJ5IGRlZmF1bHRcbiAgaW5pdCgpO1xuXG5cbiAgLy8gUmV2ZWFsIEFQSVxuICByZXR1cm4ge1xuICAgIGluaXRcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IERpcmVjdGlvblJldmVhbDtcblxuXG4vLyBCZXR0ZXIgc3dpdGNoIGNhc2VzIC0gaHR0cHM6Ly9oYWNrZXJub29uLmNvbS9yZXRoaW5raW5nLWphdmFzY3JpcHQtZWxpbWluYXRlLXRoZS1zd2l0Y2gtc3RhdGVtZW50LWZvci1iZXR0ZXItY29kZS01YzgxYzA0NDcxNmRcbmV4cG9ydCBjb25zdCBzd2l0Y2hjYXNlID0gY2FzZXMgPT4gZGVmYXVsdENhc2UgPT4ga2V5ID0+XG5rZXkgaW4gY2FzZXMgPyBjYXNlc1trZXldIDogZGVmYXVsdENhc2U7XG4iLCJpbXBvcnQgRGlyZWN0aW9uUmV2ZWFsIGZyb20gJy4vZGlyZWN0aW9uLXJldmVhbC5qcyc7XG5cbi8vIFN3aW5nIGFuaW1hdGlvbihEZWZhdWx0KVxuY29uc3QgZGlyZWN0aW9uUmV2ZWFsU3dpbmcgPSBEaXJlY3Rpb25SZXZlYWwoe1xuICBzZWxlY3RvcjogJy5kaXJlY3Rpb24tcmV2ZWFsLS1kZW1vLXN3aW5nJ1xufSk7XG5cbi8vIFNsaWRlIGFuaW1hdGlvbiB3aXRoIGFsbCBvcHRpb25zIHNwZWNpZmllZFxuY29uc3QgZGlyZWN0aW9uUmV2ZWFsU2xpZGUgPSBEaXJlY3Rpb25SZXZlYWwoe1xuICBzZWxlY3RvcjogJy5kaXJlY3Rpb24tcmV2ZWFsLS1kZW1vLXNsaWRlJyxcbiAgaXRlbVNlbGVjdG9yOiAnLmRpcmVjdGlvbi1yZXZlYWxfX2NhcmQnLFxuICBhbmltYXRpb25OYW1lOiAnc2xpZGUnLFxuICBlbmFibGVUb3VjaDogdHJ1ZVxufSk7XG5cbi8vIFJvdGF0ZSBhbmltYXRpb25cbmNvbnN0IGRpcmVjdGlvblJldmVhbFJvdGF0ZSA9IERpcmVjdGlvblJldmVhbCh7XG4gIHNlbGVjdG9yOiAnLmRpcmVjdGlvbi1yZXZlYWwtLWRlbW8tcm90YXRlJyxcbiAgYW5pbWF0aW9uTmFtZTogJ3JvdGF0ZSdcbn0pO1xuXG4vLyBCb290c3RyYXAgZGVtb1xuY29uc3QgZGlyZWN0aW9uUmV2ZWFsQm9vc3RyYXAgPSBEaXJlY3Rpb25SZXZlYWwoe1xuICBzZWxlY3RvcjogJy5kaXJlY3Rpb24tcmV2ZWFsLS1kZW1vLWJvb3RzdHJhcCdcbn0pO1xuIl19"}