403Webshell
Server IP : 85.158.181.41  /  Your IP : 216.73.217.12
Web Server : Apache
System : Linux cloud9-vm129 6.1.178+1-ph #ph SMP PREEMPT_DYNAMIC Wed Jul 29 09:00:54 UTC 2026 x86_64
User : moncbefd ( 1024)
PHP Version : 7.3.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home/moncbefd/www.moneta.at/admin/html/assets/javascript/engine/compatibility/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/moncbefd/www.moneta.at/admin/html/assets/javascript/engine/compatibility//init_html_fixes.js
'use strict';

/* --------------------------------------------------------------
 init_html_fixes.js 2016-02-10
 Gambio GmbH
 http://www.gambio.de
 Copyright (c) 2016 Gambio GmbH
 Released under the GNU General Public License (Version 2)
 [http://www.gnu.org/licenses/gpl-2.0.html]
 --------------------------------------------------------------
 */

/**
 * ## Admin HTML Fixes
 *
 * This module will be executed in page load and will perform minor HTML fixes for each pages
 * so that they don't have to be performed manually. Apply this module to the page wrapper element.
 *
 * @module Compatibility/init_html_fixes
 */
gx.compatibility.module('init_html_fixes', ['url_arguments'],

/**  @lends module:Compatibility/init_html_fixes */

function (data) {

    'use strict';

    // ------------------------------------------------------------------------
    // VARIABLES DEFINITION
    // ------------------------------------------------------------------------

    var
    /**
     * Module Selector
     *
     * @var {object}
     */
    $this = $(this),


    /**
     * Array of callbacks.
     *
     * @type {array}
     */
    fixes = [],


    /**
     * Default Options
     *
     * @type {object}
     */
    defaults = {},


    /**
     * Final Options
     *
     * @var {object}
     */
    options = $.extend(true, {}, defaults, data),


    /**
     * Module Object
     *
     * @type {object}
     */
    module = {};

    // ------------------------------------------------------------------------
    // HTML FIXES
    // ------------------------------------------------------------------------

    /**
     * Wrap main page content into container.
     */
    fixes.push(function () {
        $('.pageHeading').eq(1).removeClass('pageHeading');
        $('.boxCenter:not(.no-wrap)').wrapInner('<div class="boxCenterWrapper"></div>');
        $('.pageHeading:first-child').prependTo('.boxCenter');
        $('.pageHeading').css('float', 'none');

        var $firstChild = $($('.boxCenterWrapper').children()[0]);

        if ($firstChild.is('br')) {
            $firstChild.remove();
        }

        if ($('div.gx-configuration-box').length) {
            $('.boxCenterWrapper').wrap('<div class="boxCenterAndConfigurationWrapper" style="overflow: auto"></div>');
            $('.boxCenterAndConfigurationWrapper').append($('div.gx-configuration-box'));
        }
    });

    /**
     * Remove unnecessary <br> tag after page wrapper element.
     */
    fixes.push(function () {
        var $nextElement = $this.next(),
            tagName = $nextElement.prop('tagName');

        if (tagName === 'BR') {
            $nextElement.remove();
        }
    });

    /**
     * Ensure that the left menu parent has the columnLeft2 class because there
     * are some pages where this class is not defined and it will lead to styling issues.
     */
    fixes.push(function () {
        var $columnLeft2 = $('.main-left-menu').parent('td');
        if (!$columnLeft2.hasClass('columnLeft2')) {
            $columnLeft2.addClass('columnLeft2');
        }
    });

    /**
     * Remove width attribute from ".columnLeft2" element.
     */
    fixes.push(function () {
        $('.columnLeft2').removeAttr('width');
    });

    /**
     * Move message stack container to correct place.
     */
    fixes.push(function () {
        var $messageStackContainer = $('.message_stack_container'),
            $message = $messageStackContainer.find('.alert'),
            $createNewWrapper = $('.create-new-wrapper');

        if ($('.boxCenterWrapper').length > 0) {
            $messageStackContainer.prependTo('.boxCenterWrapper').show();
        } else {
            $messageStackContainer.prependTo('.order-edit-content').show();
            $messageStackContainer.prependTo('.dashboard-content').show();
        }

        /**
         * Fix if there are more than one message stack container classes.
         * This fix only work, if there are two containers.
         * Improve it if you recognize pages with more than two container classes.
         */
        if ($messageStackContainer.length > 1) {
            $($messageStackContainer[0]).remove();
        }

        if ($message.length > 0 && $createNewWrapper.length > 0) {
            $createNewWrapper.addClass('message-stack-active');
        }
    });

    /**
     * Changing behavior in the orders page.
     */
    fixes.push(function () {
        // Checks if current page is order and return immediately if its not the case
        var isCurrentPage = window.location.href.indexOf('orders.php') > -1;

        if (!isCurrentPage) {
            return;
        }

        // Prepare customer link
        var customerLinkPrefix = window.location.href.replace(window.location.search, '').replace('orders.php', 'customers.php?action=edit&cID=');

        // Do the modifications on the table rows
        var rowsSelectors = ['tr.gx-container.dataTableRowSelected', 'tr.gx-container.dataTableRow'].join(', ');
        var $rows = $this.find(rowsSelectors);

        // Remove the on click event on the entire row add special events
        $rows.each(function (index, element) {
            // Extract order link from element
            var orderLink = $(element).find('td[onclick]:first').attr('onclick');
            if (typeof orderLink !== 'undefined') {
                orderLink.replace('document.location.href="', '').replace('&action=edit', '').slice(0, -1);
            }

            // Customer ID
            var customerId = $(this).find('a[data-customer-id]').data('customerId');

            // Remove onclick attributes from elements
            $(element).find('[onclick]').removeAttr('onclick');
        });
    });

    /**
     * Remove inline class javascript changes.
     */
    fixes.push(function () {
        var selectors = ['.dataTableRow', '.dataTableRowSelected'];

        $.each(selectors, function () {
            $(this).each(function () {
                if ($(this).attr('onmouseover') && $(this).attr('onmouseover').indexOf('this.className') > -1) {
                    $(this).removeAttr('onmouseover');
                }

                if ($(this).attr('onmouseout') && $(this).attr('onmouseout').indexOf('this.className') > -1) {
                    $(this).removeAttr('onmouseout');
                }
            });
        });
    });

    /**
     * Remove the old markup for editing or creating a new category
     */
    fixes.push(function () {
        $('#old-category-table').remove();
    });

    /**
     * Orders form fix.
     */
    fixes.push(function () {
        var $headingBoxContainer = $('.orders_form');
        $.each($headingBoxContainer.children(), function (index, element) {
            $(element).addClass('hidden');
        });
    });

    /**
     * Fix margins and cell spacing of left menu
     */
    fixes.push(function () {
        $('.columnLeft2').parents('table:first').css({
            'border-spacing': 0
        });
    });

    fixes.push(function () {
        var urlHelper = jse.libs.url_arguments;

        if (urlHelper.getCurrentFile() === 'categories.php') {
            $('.columnLeft2').parents('table:first').css('width', '');
        }
    });

    fixes.push(function () {
        var urlHelper = jse.libs.url_arguments;
        var file = urlHelper.getCurrentFile(),
            doParameter = urlHelper.getUrlParameters().do || '',
            largePages = ['gm_emails.php'],
            smallPages = ['gm_seo_boost.php', 'parcel_services.php'];

        if ($.inArray(file, largePages) > -1 || file === 'admin.php' && $.inArray(doParameter, largePages) > -1) {
            $('.boxCenterWrapper').addClass('breakpoint-large');
        }

        if ($.inArray(file, smallPages) > -1 || file === 'admin.php' && $.inArray(doParameter, smallPages) > -1) {
            $('.boxCenterWrapper').addClass('breakpoint-small');
        }
    });

    /**
     * Helper to add css breakpoint classes to pages which use the controller mechanism.
     * Extend whether the array 'largePages' or 'smallPages' to add the breakpoint class.
     * Add as element the controller name (like in the url behind do=) and the action with trailing slash.
     * (the action is the string in the 'do' argument behind the slash)
     */
    fixes.push(function () {
        var urlHelper = jse.libs.url_arguments,
            currentFile = urlHelper.getCurrentFile(),
            controllerAction = urlHelper.getUrlParameters().do,
            largePages = [],
            smallPages = ['JanolawModuleCenterModule/Config'];

        if (currentFile === 'admin.php') {

            if ($.inArray(controllerAction, largePages) > -1) {
                $('#container').addClass('breakpoint-large');
            }

            if ($.inArray(controllerAction, smallPages) > -1) {
                $('#container').addClass('breakpoint-small');
            }
        }
    });

    /**
     * Cleans the header of the configuration box from tables
     */
    fixes.push(function () {
        var $contents = $('div.configuration-box-header h2 table.contentTable tr td > *');
        $contents.each(function (index, elem) {
            $('div.configuration-box-header h2').append(elem);
            $('div.configuration-box-header h2').find('table.contentTable').remove();
        });
    });

    /**
     * Convert all the simple checkboxes to the JS Engine widget.
     *
     * This fix will fine-tune the html markup of the checkbox and then it will dynamically
     * initialize the checkbox widget.
     */
    fixes.push(function () {
        var selectors = ['table .categories_view_data input:checkbox', 'table .dataTableHeadingRow td input:checkbox', 'table thead tr th:first input:checkbox', 'table.gx-orders-table tr:not(.dataTableHeadingRow) td:first-child input:checkbox', 'form[name="quantity_units"] input:checkbox', 'form[name="sliderset"] input:checkbox', 'form[name="featurecontrol"] input:checkbox:not(.checkbox-switcher)', '.feature-table tr td:last-child input:checkbox'];

        if ($(selectors).length > 120) {
            return;
        }

        $.each(selectors, function () {
            $(this).each(function () {
                if (!$(this).parent().hasClass('single-checkbox')) {
                    $(this).attr('data-single_checkbox', '').parent().attr('data-gx-widget', 'checkbox');
                    gx.widgets.init($(this).parent());
                }
            });
        });
    });

    /**
     * Make the top header bar clickable to activate the search bar
     */
    fixes.push(function () {
        var $topHeader = $('.top-header'),
            $searchInput = $('input[name="admin_search"]');

        $topHeader.on('click', function (event) {
            if ($topHeader.is(event.target)) {
                $searchInput.trigger('click');
            }
        });
    });

    // ------------------------------------------------------------------------
    // INITIALIZATION
    // ------------------------------------------------------------------------

    module.init = function (done) {
        // Execute all the existing fixes.
        $.each(fixes, function () {
            this();
        });

        done();
    };

    return module;
});
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluaXRfaHRtbF9maXhlcy5qcyJdLCJuYW1lcyI6WyJneCIsImNvbXBhdGliaWxpdHkiLCJtb2R1bGUiLCJkYXRhIiwiJHRoaXMiLCIkIiwiZml4ZXMiLCJkZWZhdWx0cyIsIm9wdGlvbnMiLCJleHRlbmQiLCJwdXNoIiwiZXEiLCJyZW1vdmVDbGFzcyIsIndyYXBJbm5lciIsInByZXBlbmRUbyIsImNzcyIsIiRmaXJzdENoaWxkIiwiY2hpbGRyZW4iLCJpcyIsInJlbW92ZSIsImxlbmd0aCIsIndyYXAiLCJhcHBlbmQiLCIkbmV4dEVsZW1lbnQiLCJuZXh0IiwidGFnTmFtZSIsInByb3AiLCIkY29sdW1uTGVmdDIiLCJwYXJlbnQiLCJoYXNDbGFzcyIsImFkZENsYXNzIiwicmVtb3ZlQXR0ciIsIiRtZXNzYWdlU3RhY2tDb250YWluZXIiLCIkbWVzc2FnZSIsImZpbmQiLCIkY3JlYXRlTmV3V3JhcHBlciIsInNob3ciLCJpc0N1cnJlbnRQYWdlIiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwiaW5kZXhPZiIsImN1c3RvbWVyTGlua1ByZWZpeCIsInJlcGxhY2UiLCJzZWFyY2giLCJyb3dzU2VsZWN0b3JzIiwiam9pbiIsIiRyb3dzIiwiZWFjaCIsImluZGV4IiwiZWxlbWVudCIsIm9yZGVyTGluayIsImF0dHIiLCJzbGljZSIsImN1c3RvbWVySWQiLCJzZWxlY3RvcnMiLCIkaGVhZGluZ0JveENvbnRhaW5lciIsInBhcmVudHMiLCJ1cmxIZWxwZXIiLCJqc2UiLCJsaWJzIiwidXJsX2FyZ3VtZW50cyIsImdldEN1cnJlbnRGaWxlIiwiZmlsZSIsImRvUGFyYW1ldGVyIiwiZ2V0VXJsUGFyYW1ldGVycyIsImRvIiwibGFyZ2VQYWdlcyIsInNtYWxsUGFnZXMiLCJpbkFycmF5IiwiY3VycmVudEZpbGUiLCJjb250cm9sbGVyQWN0aW9uIiwiJGNvbnRlbnRzIiwiZWxlbSIsIndpZGdldHMiLCJpbml0IiwiJHRvcEhlYWRlciIsIiRzZWFyY2hJbnB1dCIs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LE1BQU1DLE1BQXBCLENBQUosRUFBaUM7QUFDN0JILDZCQUFhSSxPQUFiLENBQXFCLE9BQXJCO0FBQ0g7QUFDSixTQUpEO0FBTUgsS0FWRDs7QUFZQTtBQUNBO0FBQ0E7O0FBRUEvRSxXQUFPeUUsSUFBUCxHQUFjLFVBQVVPLElBQVYsRUFBZ0I7QUFDMUI7QUFDQTdFLFVBQUUyQyxJQUFGLENBQU8xQyxLQUFQLEVBQWMsWUFBWTtBQUN0QjtBQUNILFNBRkQ7O0FBSUE0RTtBQUNILEtBUEQ7O0FBU0EsV0FBT2hGLE1BQVA7QUFDSCxDQWpYTCIsImZpbGUiOiJpbml0X2h0bWxfZml4ZXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIGluaXRfaHRtbF9maXhlcy5qcyAyMDE2LTAyLTEwXG4gR2FtYmlvIEdtYkhcbiBodHRwOi8vd3d3LmdhbWJpby5kZVxuIENvcHlyaWdodCAoYykgMjAxNiBHYW1iaW8gR21iSFxuIFJlbGVhc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKVxuIFtodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIuMC5odG1sXVxuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuLyoqXG4gKiAjIyBBZG1pbiBIVE1MIEZpeGVzXG4gKlxuICogVGhpcyBtb2R1bGUgd2lsbCBiZSBleGVjdXRlZCBpbiBwYWdlIGxvYWQgYW5kIHdpbGwgcGVyZm9ybSBtaW5vciBIVE1MIGZpeGVzIGZvciBlYWNoIHBhZ2VzXG4gKiBzbyB0aGF0IHRoZXkgZG9uJ3QgaGF2ZSB0byBiZSBwZXJmb3JtZWQgbWFudWFsbHkuIEFwcGx5IHRoaXMgbW9kdWxlIHRvIHRoZSBwYWdlIHdyYXBwZXIgZWxlbWVudC5cbiAqXG4gKiBAbW9kdWxlIENvbXBhdGliaWxpdHkvaW5pdF9odG1sX2ZpeGVzXG4gKi9cbmd4LmNvbXBhdGliaWxpdHkubW9kdWxlKFxuICAgICdpbml0X2h0bWxfZml4ZXMnLFxuXG4gICAgWyd1cmxfYXJndW1lbnRzJ10sXG5cbiAgICAvKiogIEBsZW5kcyBtb2R1bGU6Q29tcGF0aWJpbGl0eS9pbml0X2h0bWxfZml4ZXMgKi9cblxuICAgIGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAvLyBWQVJJQUJMRVMgREVGSU5JVElPTlxuICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgICAgICB2YXJcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogTW9kdWxlIFNlbGVjdG9yXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQHZhciB7b2JqZWN0fVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICAkdGhpcyA9ICQodGhpcyksXG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQXJyYXkgb2YgY2FsbGJhY2tzLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIEB0eXBlIHthcnJheX1cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZml4ZXMgPSBbXSxcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBEZWZhdWx0IE9wdGlvbnNcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBkZWZhdWx0cyA9IHt9LFxuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEZpbmFsIE9wdGlvbnNcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBAdmFyIHtvYmplY3R9XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIG9wdGlvbnMgPSAkLmV4dGVuZCh0cnVlLCB7fSwgZGVmYXVsdHMsIGRhdGEpLFxuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIE1vZHVsZSBPYmplY3RcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBtb2R1bGUgPSB7fTtcblxuICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgLy8gSFRNTCBGSVhFU1xuICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgICAgICAvKipcbiAgICAgICAgICogV3JhcCBtYWluIHBhZ2UgY29udGVudCBpbnRvIGNvbnRhaW5lci5cbiAgICAgICAgICovXG4gICAgICAgIGZpeGVzLnB1c2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgJCgnLnBhZ2VIZWFkaW5nJykuZXEoMSkucmVtb3ZlQ2xhc3MoJ3BhZ2VIZWFkaW5nJyk7XG4gICAgICAgICAgICAkKCcuYm94Q2VudGVyOm5vdCgubm8td3JhcCknKS53cmFwSW5uZXIoJzxkaXYgY2xhc3M9XCJib3hDZW50ZXJXcmFwcGVyXCI+PC9kaXY+Jyk7XG4gICAgICAgICAgICAkKCcucGFnZUhlYWRpbmc6Zmlyc3QtY2hpbGQnKS5wcmVwZW5kVG8oJy5ib3hDZW50ZXInKTtcbiAgICAgICAgICAgICQoJy5wYWdlSGVhZGluZycpLmNzcygnZmxvYXQnLCAnbm9uZScpO1xuXG4gICAgICAgICAgICB2YXIgJGZpcnN0Q2hpbGQgPSAkKCQoJy5ib3hDZW50ZXJXcmFwcGVyJykuY2hpbGRyZW4oKVswXSk7XG5cbiAgICAgICAgICAgIGlmICgkZmlyc3RDaGlsZC5pcygnYnInKSkge1xuICAgICAgICAgICAgICAgICRmaXJzdENoaWxkLnJlbW92ZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoJCgnZGl2Lmd4LWNvbmZpZ3VyYXRpb24tYm94JykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgJCgnLmJveENlbnRlcldyYXBwZXInKS53cmFwKCc8ZGl2IGNsYXNzPVwiYm94Q2VudGVyQW5kQ29uZmlndXJhdGlvbldyYXBwZXJcIiBzdHlsZT1cIm92ZXJmbG93OiBhdXRvXCI+PC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgJCgnLmJveENlbnRlckFuZENvbmZpZ3VyYXRpb25XcmFwcGVyJykuYXBwZW5kKCQoJ2Rpdi5neC1jb25maWd1cmF0aW9uLWJveCcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlbW92ZSB1bm5lY2Vzc2FyeSA8YnI+IHRhZyBhZnRlciBwYWdlIHdyYXBwZXIgZWxlbWVudC5cbiAgICAgICAgICovXG4gICAgICAgIGZpeGVzLnB1c2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyICRuZXh0RWxlbWVudCA9ICR0aGlzLm5leHQoKSxcbiAgICAgICAgICAgICAgICB0YWdOYW1lID0gJG5leHRFbGVtZW50LnByb3AoJ3RhZ05hbWUnKTtcblxuICAgICAgICAgICAgaWYgKHRhZ05hbWUgPT09ICdCUicpIHtcbiAgICAgICAgICAgICAgICAkbmV4dEVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFbnN1cmUgdGhhdCB0aGUgbGVmdCBtZW51IHBhcmVudCBoYXMgdGhlIGNvbHVtbkxlZnQyIGNsYXNzIGJlY2F1c2UgdGhlcmVcbiAgICAgICAgICogYXJlIHNvbWUgcGFnZXMgd2hlcmUgdGhpcyBjbGFzcyBpcyBub3QgZGVmaW5lZCBhbmQgaXQgd2lsbCBsZWFkIHRvIHN0eWxpbmcgaXNzdWVzLlxuICAgICAgICAgKi9cbiAgICAgICAgZml4ZXMucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgJGNvbHVtbkxlZnQyID0gJCgnLm1haW4tbGVmdC1tZW51JykucGFyZW50KCd0ZCcpO1xuICAgICAgICAgICAgaWYgKCEkY29sdW1uTGVmdDIuaGFzQ2xhc3MoJ2NvbHVtbkxlZnQyJykpIHtcbiAgICAgICAgICAgICAgICAkY29sdW1uTGVmdDIuYWRkQ2xhc3MoJ2NvbHVtbkxlZnQyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZW1vdmUgd2lkdGggYXR0cmlidXRlIGZyb20gXCIuY29sdW1uTGVmdDJcIiBlbGVtZW50LlxuICAgICAgICAgKi9cbiAgICAgICAgZml4ZXMucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAkKCcuY29sdW1uTGVmdDInKS5yZW1vdmVBdHRyKCd3aWR0aCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogTW92ZSBtZXNzYWdlIHN0YWNrIGNvbnRhaW5lciB0byBjb3JyZWN0IHBsYWNlLlxuICAgICAgICAgKi9cbiAgICAgICAgZml4ZXMucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgJG1lc3NhZ2VTdGFja0NvbnRhaW5lciA9ICQoJy5tZXNzYWdlX3N0YWNrX2NvbnRhaW5lcicpLFxuICAgICAgICAgICAgICAgICRtZXNzYWdlID0gJG1lc3NhZ2VTdGFja0NvbnRhaW5lci5maW5kKCcuYWxlcnQnKSxcbiAgICAgICAgICAgICAgICAkY3JlYXRlTmV3V3JhcHBlciA9ICQoJy5jcmVhdGUtbmV3LXdyYXBwZXInKTtcblxuICAgICAgICAgICAgaWYgKCQoJy5ib3hDZW50ZXJXcmFwcGVyJykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICRtZXNzYWdlU3RhY2tDb250YWluZXIucHJlcGVuZFRvKCcuYm94Q2VudGVyV3JhcHBlcicpLnNob3coKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgJG1lc3NhZ2VTdGFja0NvbnRhaW5lci5wcmVwZW5kVG8oJy5vcmRlci1lZGl0LWNvbnRlbnQnKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgJG1lc3NhZ2VTdGFja0NvbnRhaW5lci5wcmVwZW5kVG8oJy5kYXNoYm9hcmQtY29udGVudCcpLnNob3coKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBGaXggaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgbWVzc2FnZSBzdGFjayBjb250YWluZXIgY2xhc3Nlcy5cbiAgICAgICAgICAgICAqIFRoaXMgZml4IG9ubHkgd29yaywgaWYgdGhlcmUgYXJlIHR3byBjb250YWluZXJzLlxuICAgICAgICAgICAgICogSW1wcm92ZSBpdCBpZiB5b3UgcmVjb2duaXplIHBhZ2VzIHdpdGggbW9yZSB0aGFuIHR3byBjb250YWluZXIgY2xhc3Nlcy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKCRtZXNzYWdlU3RhY2tDb250YWluZXIubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICQoJG1lc3NhZ2VTdGFja0NvbnRhaW5lclswXSkucmVtb3ZlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgkbWVzc2FnZS5sZW5ndGggPiAwICYmICRjcmVhdGVOZXdXcmFwcGVyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAkY3JlYXRlTmV3V3JhcHBlci5hZGRDbGFzcygnbWVzc2FnZS1zdGFjay1hY3RpdmUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENoYW5naW5nIGJlaGF2aW9yIGluIHRoZSBvcmRlcnMgcGFnZS5cbiAgICAgICAgICovXG4gICAgICAgIGZpeGVzLnB1c2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gQ2hlY2tzIGlmIGN1cnJlbnQgcGFnZSBpcyBvcmRlciBhbmQgcmV0dXJuIGltbWVkaWF0ZWx5IGlmIGl0cyBub3QgdGhlIGNhc2VcbiAgICAgICAgICAgIHZhciBpc0N1cnJlbnRQYWdlID0gKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoJ29yZGVycy5waHAnKSA+IC0xKTtcblxuICAgICAgICAgICAgaWYgKCFpc0N1cnJlbnRQYWdlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBQcmVwYXJlIGN1c3RvbWVyIGxpbmtcbiAgICAgICAgICAgIHZhciBjdXN0b21lckxpbmtQcmVmaXggPSB3aW5kb3cubG9jYXRpb24uaHJlZlxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gsICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdvcmRlcnMucGhwJywgJ2N1c3RvbWVycy5waHA/YWN0aW9uPWVkaXQmY0lEPScpO1xuXG4gICAgICAgICAgICAvLyBEbyB0aGUgbW9kaWZpY2F0aW9ucyBvbiB0aGUgdGFibGUgcm93c1xuICAgICAgICAgICAgdmFyIHJvd3NTZWxlY3RvcnMgPSBbXG4gICAgICAgICAgICAgICAgJ3RyLmd4LWNvbnRhaW5lci5kYXRhVGFibGVSb3dTZWxlY3RlZCcsXG4gICAgICAgICAgICAgICAgJ3RyLmd4LWNvbnRhaW5lci5kYXRhVGFibGVSb3cnXG4gICAgICAgICAgICBdLmpvaW4oJywgJyk7XG4gICAgICAgICAgICB2YXIgJHJvd3MgPSAkdGhpcy5maW5kKHJvd3NTZWxlY3RvcnMpO1xuXG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIG9uIGNsaWNrIGV2ZW50IG9uIHRoZSBlbnRpcmUgcm93IGFkZCBzcGVjaWFsIGV2ZW50c1xuICAgICAgICAgICAgJHJvd3MuZWFjaChmdW5jdGlvbiAoaW5kZXgsIGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IG9yZGVyIGxpbmsgZnJvbSBlbGVtZW50XG4gICAgICAgICAgICAgICAgdmFyIG9yZGVyTGluayA9ICQoZWxlbWVudClcbiAgICAgICAgICAgICAgICAgICAgLmZpbmQoJ3RkW29uY2xpY2tdOmZpcnN0JylcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ29uY2xpY2snKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9yZGVyTGluayAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgb3JkZXJMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnZG9jdW1lbnQubG9jYXRpb24uaHJlZj1cIicsICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJyZhY3Rpb249ZWRpdCcsICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBDdXN0b21lciBJRFxuICAgICAgICAgICAgICAgIHZhciBjdXN0b21lcklkID0gJCh0aGlzKVxuICAgICAgICAgICAgICAgICAgICAuZmluZCgnYVtkYXRhLWN1c3RvbWVyLWlkXScpXG4gICAgICAgICAgICAgICAgICAgIC5kYXRhKCdjdXN0b21lcklkJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgb25jbGljayBhdHRyaWJ1dGVzIGZyb20gZWxlbWVudHNcbiAgICAgICAgICAgICAgICAkKGVsZW1lbnQpXG4gICAgICAgICAgICAgICAgICAgIC5maW5kKCdbb25jbGlja10nKVxuICAgICAgICAgICAgICAgICAgICAucmVtb3ZlQXR0cignb25jbGljaycpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZW1vdmUgaW5saW5lIGNsYXNzIGphdmFzY3JpcHQgY2hhbmdlcy5cbiAgICAgICAgICovXG4gICAgICAgIGZpeGVzLnB1c2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHNlbGVjdG9ycyA9IFtcbiAgICAgICAgICAgICAgICAnLmRhdGFUYWJsZVJvdycsXG4gICAgICAgICAgICAgICAgJy5kYXRhVGFibGVSb3dTZWxlY3RlZCdcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICQuZWFjaChzZWxlY3RvcnMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS5hdHRyKCdvbm1vdXNlb3ZlcicpICYmICQodGhpcykuYXR0cignb25tb3VzZW92ZXInKS5pbmRleE9mKCd0aGlzLmNsYXNzTmFtZScpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQXR0cignb25tb3VzZW92ZXInKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLmF0dHIoJ29ubW91c2VvdXQnKSAmJiAkKHRoaXMpLmF0dHIoJ29ubW91c2VvdXQnKS5pbmRleE9mKCd0aGlzLmNsYXNzTmFtZScpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQXR0cignb25tb3VzZW91dCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlbW92ZSB0aGUgb2xkIG1hcmt1cCBmb3IgZWRpdGluZyBvciBjcmVhdGluZyBhIG5ldyBjYXRlZ29yeVxuICAgICAgICAgKi9cbiAgICAgICAgZml4ZXMucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAkKCcjb2xkLWNhdGVnb3J5LXRhYmxlJykucmVtb3ZlKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBPcmRlcnMgZm9ybSBmaXguXG4gICAgICAgICAqL1xuICAgICAgICBmaXhlcy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciAkaGVhZGluZ0JveENvbnRhaW5lciA9ICQoJy5vcmRlcnNfZm9ybScpO1xuICAgICAgICAgICAgJC5lYWNoKCRoZWFkaW5nQm94Q29udGFpbmVyLmNoaWxkcmVuKCksIGZ1bmN0aW9uIChpbmRleCwgZWxlbWVudCkge1xuICAgICAgICAgICAgICAgICQoZWxlbWVudCkuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXggbWFyZ2lucyBhbmQgY2VsbCBzcGFjaW5nIG9mIGxlZnQgbWVudVxuICAgICAgICAgKi9cbiAgICAgICAgZml4ZXMucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAkKCcuY29sdW1uTGVmdDInKVxuICAgICAgICAgICAgICAgIC5wYXJlbnRzKCd0YWJsZTpmaXJzdCcpXG4gICAgICAgICAgICAgICAgLmNzcyh7XG4gICAgICAgICAgICAgICAgICAgICdib3JkZXItc3BhY2luZyc6IDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZml4ZXMucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdXJsSGVscGVyID0ganNlLmxpYnMudXJsX2FyZ3VtZW50cztcblxuICAgICAgICAgICAgaWYgKHVybEhlbHBlci5nZXRDdXJyZW50RmlsZSgpID09PSAnY2F0ZWdvcmllcy5waHAnKSB7XG4gICAgICAgICAgICAgICAgJCgnLmNvbHVtbkxlZnQyJylcbiAgICAgICAgICAgICAgICAgICAgLnBhcmVudHMoJ3RhYmxlOmZpcnN0JylcbiAgICAgICAgICAgICAgICAgICAgLmNzcygnd2lkdGgnLCAnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZpeGVzLnB1c2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHVybEhlbHBlciA9IGpzZS5saWJzLnVybF9hcmd1bWVudHM7XG4gICAgICAgICAgICB2YXIgZmlsZSA9IHVybEhlbHBlci5nZXRDdXJyZW50RmlsZSgpLFxuICAgICAgICAgICAgICAgIGRvUGFyYW1ldGVyID0gdXJsSGVscGVyLmdldFVybFBhcmFtZXRlcnMoKS5kbyB8fCAnJyxcbiAgICAgICAgICAgICAgICBsYXJnZVBhZ2VzID0gW1xuICAgICAgICAgICAgICAgICAgICAnZ21fZW1haWxzLnBocCdcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNtYWxsUGFnZXMgPSBbXG4gICAgICAgICAgICAgICAgICAgICdnbV9zZW9fYm9vc3QucGhwJyxcbiAgICAgICAgICAgICAgICAgICAgJ3BhcmNlbF9zZXJ2aWNlcy5waHAnXG4gICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgaWYgKCQuaW5BcnJheShmaWxlLCBsYXJnZVBhZ2VzKSA+IC0xXG4gICAgICAgICAgICAgICAgfHwgKGZpbGUgPT09ICdhZG1pbi5waHAnICYmICQuaW5BcnJheShkb1BhcmFtZXRlciwgbGFyZ2VQYWdlcykgPiAtMSkpIHtcbiAgICAgICAgICAgICAgICAkKCcuYm94Q2VudGVyV3JhcHBlcicpXG4gICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnYnJlYWtwb2ludC1sYXJnZScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoJC5pbkFycmF5KGZpbGUsIHNtYWxsUGFnZXMpID4gLTFcbiAgICAgICAgICAgICAgICB8fCAoZmlsZSA9PT0gJ2FkbWluLnBocCcgJiYgJC5pbkFycmF5KGRvUGFyYW1ldGVyLCBzbWFsbFBhZ2VzKSA+IC0xKSkge1xuICAgICAgICAgICAgICAgICQoJy5ib3hDZW50ZXJXcmFwcGVyJylcbiAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCdicmVha3BvaW50LXNtYWxsJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBIZWxwZXIgdG8gYWRkIGNzcyBicmVha3BvaW50IGNsYXNzZXMgdG8gcGFnZXMgd2hpY2ggdXNlIHRoZSBjb250cm9sbGVyIG1lY2hhbmlzbS5cbiAgICAgICAgICogRXh0ZW5kIHdoZXRoZXIgdGhlIGFycmF5ICdsYXJnZVBhZ2VzJyBvciAnc21hbGxQYWdlcycgdG8gYWRkIHRoZSBicmVha3BvaW50IGNsYXNzLlxuICAgICAgICAgKiBBZGQgYXMgZWxlbWVudCB0aGUgY29udHJvbGxlciBuYW1lIChsaWtlIGluIHRoZSB1cmwgYmVoaW5kIGRvPSkgYW5kIHRoZSBhY3Rpb24gd2l0aCB0cmFpbGluZyBzbGFzaC5cbiAgICAgICAgICogKHRoZSBhY3Rpb24gaXMgdGhlIHN0cmluZyBpbiB0aGUgJ2RvJyBhcmd1bWVudCBiZWhpbmQgdGhlIHNsYXNoKVxuICAgICAgICAgKi9cbiAgICAgICAgZml4ZXMucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdXJsSGVscGVyID0ganNlLmxpYnMudXJsX2FyZ3VtZW50cyxcbiAgICAgICAgICAgICAgICBjdXJyZW50RmlsZSA9IHVybEhlbHBlci5nZXRDdXJyZW50RmlsZSgpLFxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXJBY3Rpb24gPSB1cmxIZWxwZXIuZ2V0VXJsUGFyYW1ldGVycygpLmRvLFxuICAgICAgICAgICAgICAgIGxhcmdlUGFnZXMgPSBbXSxcbiAgICAgICAgICAgICAgICBzbWFsbFBhZ2VzID0gWydKYW5vbGF3TW9kdWxlQ2VudGVyTW9kdWxlL0NvbmZpZyddO1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudEZpbGUgPT09ICdhZG1pbi5waHAnKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoJC5pbkFycmF5KGNvbnRyb2xsZXJBY3Rpb24sIGxhcmdlUGFnZXMpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgJCgnI2NvbnRhaW5lcicpXG4gICAgICAgICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ2JyZWFrcG9pbnQtbGFyZ2UnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoJC5pbkFycmF5KGNvbnRyb2xsZXJBY3Rpb24sIHNtYWxsUGFnZXMpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgJCgnI2NvbnRhaW5lcicpXG4gICAgICAgICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ2JyZWFrcG9pbnQtc21hbGwnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDbGVhbnMgdGhlIGhlYWRlciBvZiB0aGUgY29uZmlndXJhdGlvbiBib3ggZnJvbSB0YWJsZXNcbiAgICAgICAgICovXG4gICAgICAgIGZpeGVzLnB1c2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyICRjb250ZW50cyA9ICQoJ2Rpdi5jb25maWd1cmF0aW9uLWJveC1oZWFkZXIgaDIgdGFibGUuY29udGVudFRhYmxlIHRyIHRkID4gKicpO1xuICAgICAgICAgICAgJGNvbnRlbnRzLmVhY2goZnVuY3Rpb24gKGluZGV4LCBlbGVtKSB7XG4gICAgICAgICAgICAgICAgJCgnZGl2LmNvbmZpZ3VyYXRpb24tYm94LWhlYWRlciBoMicpLmFwcGVuZChlbGVtKTtcbiAgICAgICAgICAgICAgICAkKCdkaXYuY29uZmlndXJhdGlvbi1ib3gtaGVhZGVyIGgyJykuZmluZCgndGFibGUuY29udGVudFRhYmxlJykucmVtb3ZlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnZlcnQgYWxsIHRoZSBzaW1wbGUgY2hlY2tib3hlcyB0byB0aGUgSlMgRW5naW5lIHdpZGdldC5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhpcyBmaXggd2lsbCBmaW5lLXR1bmUgdGhlIGh0bWwgbWFya3VwIG9mIHRoZSBjaGVja2JveCBhbmQgdGhlbiBpdCB3aWxsIGR5bmFtaWNhbGx5XG4gICAgICAgICAqIGluaXRpYWxpemUgdGhlIGNoZWNrYm94IHdpZGdldC5cbiAgICAgICAgICovXG4gICAgICAgIGZpeGVzLnB1c2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHNlbGVjdG9ycyA9IFtcbiAgICAgICAgICAgICAgICAndGFibGUgLmNhdGVnb3JpZXNfdmlld19kYXRhIGlucHV0OmNoZWNrYm94JyxcbiAgICAgICAgICAgICAgICAndGFibGUgLmRhdGFUYWJsZUhlYWRpbmdSb3cgdGQgaW5wdXQ6Y2hlY2tib3gnLFxuICAgICAgICAgICAgICAgICd0YWJsZSB0aGVhZCB0ciB0aDpmaXJzdCBpbnB1dDpjaGVja2JveCcsXG4gICAgICAgICAgICAgICAgJ3RhYmxlLmd4LW9yZGVycy10YWJsZSB0cjpub3QoLmRhdGFUYWJsZUhlYWRpbmdSb3cpIHRkOmZpcnN0LWNoaWxkIGlucHV0OmNoZWNrYm94JyxcbiAgICAgICAgICAgICAgICAnZm9ybVtuYW1lPVwicXVhbnRpdHlfdW5pdHNcIl0gaW5wdXQ6Y2hlY2tib3gnLFxuICAgICAgICAgICAgICAgICdmb3JtW25hbWU9XCJzbGlkZXJzZXRcIl0gaW5wdXQ6Y2hlY2tib3gnLFxuICAgICAgICAgICAgICAgICdmb3JtW25hbWU9XCJmZWF0dXJlY29udHJvbFwiXSBpbnB1dDpjaGVja2JveDpub3QoLmNoZWNrYm94LXN3aXRjaGVyKScsXG4gICAgICAgICAgICAgICAgJy5mZWF0dXJlLXRhYmxlIHRyIHRkOmxhc3QtY2hpbGQgaW5wdXQ6Y2hlY2tib3gnXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICBpZiAoJChzZWxlY3RvcnMpLmxlbmd0aCA+IDEyMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJC5lYWNoKHNlbGVjdG9ycywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICQodGhpcykuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghJCh0aGlzKS5wYXJlbnQoKS5oYXNDbGFzcygnc2luZ2xlLWNoZWNrYm94JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXR0cignZGF0YS1zaW5nbGVfY2hlY2tib3gnLCAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucGFyZW50KCkuYXR0cignZGF0YS1neC13aWRnZXQnLCAnY2hlY2tib3gnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGd4LndpZGdldHMuaW5pdCgkKHRoaXMpLnBhcmVudCgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBNYWtlIHRoZSB0b3AgaGVhZGVyIGJhciBjbGlja2FibGUgdG8gYWN0aXZhdGUgdGhlIHNlYXJjaCBiYXJcbiAgICAgICAgICovXG4gICAgICAgIGZpeGVzLnB1c2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyICR0b3BIZWFkZXIgPSAkKCcudG9wLWhlYWRlcicpLFxuICAgICAgICAgICAgICAgICRzZWFyY2hJbnB1dCA9ICQoJ2lucHV0W25hbWU9XCJhZG1pbl9zZWFyY2hcIl0nKTtcblxuICAgICAgICAgICAgJHRvcEhlYWRlci5vbignY2xpY2snLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoJHRvcEhlYWRlci5pcyhldmVudC50YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICRzZWFyY2hJbnB1dC50cmlnZ2VyKCdjbGljaycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAvLyBJTklUSUFMSVpBVElPTlxuICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgICAgICBtb2R1bGUuaW5pdCA9IGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAvLyBFeGVjdXRlIGFsbCB0aGUgZXhpc3RpbmcgZml4ZXMuXG4gICAgICAgICAgICAkLmVhY2goZml4ZXMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0aGlzKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBtb2R1bGU7XG4gICAgfSk7XG4iXX0=

Youez - 2016 - github.com/yon3zu
LinuXploit