diff --git a/public/js/admin.js b/public/js/admin.js index 0b60d01..d74d29f 100644 --- a/public/js/admin.js +++ b/public/js/admin.js @@ -65,7 +65,7 @@ eval("{function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"fun \****************************************/ () { -eval("{function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nif (typeof Supplier === 'undefined') {\n var _Supplier = /*#__PURE__*/function (_DataModel) {\n /*\r\n * Constructor\r\n */\n function _Supplier(data, options) {\n var _this;\n _classCallCheck(this, _Supplier);\n _this = _callSuper(this, _Supplier, [data, options]);\n if (typeof _this.contact === \"undefined\") {\n _this.contact = [];\n }\n console.log('Supplier constructor called');\n return _this;\n }\n _inherits(_Supplier, _DataModel);\n return _createClass(_Supplier);\n }(DataModel);\n ;\n window.Supplier = _Supplier;\n}\nwindow.SupplierAdmin = function (options, SupplierItem) {\n /*\r\n * Variables accessible\r\n * in the class\r\n */\n var Opts = {\n token: null,\n containerCssSelector: '.containerSupplier',\n testMode: false,\n URL: {\n getDataTableContent: '',\n index: '',\n show: '',\n edit: '',\n create: '',\n store: '',\n update: '',\n destroy: '',\n attachFile: '',\n detachFile: ''\n },\n dataTable: {\n orderDirective: [1, 'asc']\n },\n onAfterInitViewDetails: function onAfterInitViewDetails() {}\n };\n var Supplier = {};\n var root = this;\n var contactPopupWorkflow = 'new';\n /*\r\n * Constructor\r\n */\n this.construct = function (options, SupplierItem) {\n console.log('SupplierAdmin constructor called');\n $.extend(Opts, options);\n if (!SupplierItem) {\n console.log('supplier letre kellet hozni ');\n if (!APP.Supplier) {\n APP.Supplier = new window.Supplier();\n }\n root.Supplier = APP.Supplier;\n }\n };\n this.getOpts = function () {\n return Opts;\n };\n this.formDataToDataObjectAPICallOld = function (CSSSelector) {\n var data = new FormData(document.querySelector(CSSSelector));\n //let formJSON = Object.fromEntries(data.entries());\n var formJSON = {};\n data.forEach(function (value, key) {\n // Reflect.has in favor of: formJSON.hasOwnProperty(key)\n if (!Reflect.has(formJSON, key)) {\n formJSON[key] = value;\n return;\n }\n if (!Array.isArray(formJSON[key])) {\n formJSON[key] = [formJSON[key]];\n }\n formJSON[key].push(value);\n });\n $(CSSSelector + ' input[data-inputmask]').each(function () {\n if (formJSON[$(this).attr('name')]) {\n formJSON[$(this).attr('name')] = formJSON[$(this).attr('name')].replace(/[_ ]+$/g, \"\");\n }\n });\n //formJSON.productGroups=$(\".productCategorySelect\").select2().val();\n\n /*Multiselect or checkbox to array:\r\n ajaxData['productGroup']=$(\".productCategorySelect\").select2().val();\r\n formJSON.multiselectName = data.getAll('multiselectName');\r\n $.each(formJSON, function (item, value) {\r\n formJSON[$.lcFirst(item.replace('contact', ''))] = value;\r\n delete formJSON[item];\r\n });\r\n if(formJSON.phone){\r\n formJSON.phone=formJSON.phone.replaceAll('_','');\r\n }\r\n if(formJSON.email){\r\n formJSON.email=formJSON.email.replaceAll('_','');\r\n }\r\n */\n return formJSON;\n };\n this.formDataToDataObjectAPICall = function (CSSSelectorForm) {\n var ajaxData = new FormData($(CSSSelectorForm)[0]);\n $.each(ajaxData.getAll('profitCenter'), function (key, value) {\n ajaxData.append('profitCenter[]', value);\n });\n $.each(ajaxData.getAll('productGroup'), function (key, value) {\n ajaxData.append('productGroup[]', value);\n });\n $.each(ajaxData.getAll('supplierService'), function (key, value) {\n ajaxData.append('supplierService[]', value);\n });\n $.each(ajaxData.getAll('contactId'), function (key, value) {\n ajaxData.append('contactId[]', value);\n });\n ajaxData.append('_token', $('input[name=_token]').val());\n $(CSSSelectorForm + ' input[data-inputmask]').each(function () {\n var indexKey = $(this).attr('name');\n if (ajaxData.get(indexKey)) {\n ajaxData.set(indexKey, ajaxData.get(indexKey).replace(/[_ ]+$/g, \"\"));\n }\n });\n return ajaxData;\n };\n this.clickSaveButton = function (event) {\n debug('Save clicked');\n var CSSSelectorForm = Opts.containerCssSelector + ' .supplierForm';\n event.preventDefault();\n if ($(CSSSelectorForm + ' input[name=\"canSeeInOrder\"]').val() == 1 && $(CSSSelectorForm)[0].checkValidity() === false) {\n console.log('validaton false');\n event.stopPropagation();\n return;\n } else {\n console.log('validaton ok');\n //do your ajax submition here\n }\n var ajaxData = root.formDataToDataObjectAPICall(CSSSelectorForm);\n var ajaxUrl = Opts.URL.store;\n var ajaxMethod = \"POST\";\n if (root.Supplier.id) {\n ajaxUrl = Opts.URL.update.replace('%id%', root.Supplier.id);\n //ajaxMethod=\"PUT\";\n //ajaxData=new FormData($(CSSSelectorForm)[0]);\n ajaxData.append('_method', 'PUT');\n }\n debug(ajaxMethod);\n debug(ajaxData);\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n type: ajaxMethod,\n contentType: false,\n processData: false,\n headers: {\n 'X-CSRF-TOKEN': $('input[name=\"_token\"]').val()\n },\n success: function success(data) {\n debug(data);\n if (data.success == true) {\n //Opts.onAfterInitViewDetails=root.autofillDetails;\n Opts.dataTable.orderDirective = [0, 'desc'];\n Toast.create(\"Sikeres rögzítés!\", ajaxData.get('name') + \" nevű beszálllító elmentve\", TOAST_STATUS.SUCCESS, 5000);\n APP.loadMainContent(Opts.URL.index + '?init=0', root.initViewList);\n }\n }\n });\n };\n this.setDetailsViewData = function () {\n debug('setDetailsViewData');\n console.log(Supplier);\n var CSSSelectorForm = Opts.containerCssSelector + ' .supplierForm';\n var needToSet = ['name', 'hooreycaId', 'nameId', 'orderEmail', 'orderEmail2', 'address', 'mailingAddress', 'phone', 'fax', 'customerServicePhone', 'name22', 'openHours', 'ordersDeadline', 'minOrderValue'];\n $.each(needToSet, function () {\n if (typeof root.Supplier[this] != 'undefined') {\n $(CSSSelectorForm + ' input[name=' + this + ']').val(root.Supplier[this]);\n $(CSSSelectorForm + ' textarea[name=' + this + ']').val(root.Supplier[this]);\n }\n });\n if (typeof root.Supplier['note'] != 'undefined') {\n $(CSSSelectorForm + ' textarea[name=note]').val(root.Supplier.note);\n }\n if (typeof root.Supplier['emailAttachmentType'] != 'undefined') {\n $(CSSSelectorForm + ' input[name=emailAttachmentType][value=' + root.Supplier['emailAttachmentType'] + ']').prop('checked', true);\n }\n $(CSSSelectorForm + ' *[data-toggle=canSee][data-title=' + root.Supplier.canSee + ']').click();\n $(CSSSelectorForm + ' *[data-toggle=canSeeInOrder][data-title=' + root.Supplier.canSeeInOrder + ']').click();\n $(CSSSelectorForm + ' *[data-toggle=hooreycaDataActive][data-title=' + root.Supplier.hooreycaDataActive + ']').click();\n var productGroup = [];\n $.each(root.Supplier.product_group, function () {\n productGroup.push(this.name);\n });\n $(CSSSelectorForm + ' .productCategorySelect').val(productGroup).change();\n var service = [];\n $.each(root.Supplier.service, function () {\n service.push(this.name);\n });\n $(CSSSelectorForm + ' .serviceSelect').val(service).change();\n var profitCenter = [];\n $.each(root.Supplier.profit_center, function () {\n profitCenter.push(this.name);\n });\n //$(CSSSelectorForm+' .profitCenterSelect').val(profitCenter).change();\n //debug(profitCenter);\n $.each(profitCenter, function () {\n $('input[value=\"' + $.escapeSelector(this) + '\"]').prop(\"checked\", true);\n });\n if (typeof root.Supplier['logoFile'] != 'undefined' && root.Supplier['logoFile']) {\n $(CSSSelectorForm + ' img.imageLogo').attr('src', root.Supplier['logoFile']);\n }\n\n //debug(APP.SupplierAdmin.formDataToDataObjectAPICall('.supplierForm')['productGroup']);\n //$('[name=productGroup]').val(['Büféáru_édesipari_termékek','Tojás']).change();\n //root.setDetailsViewData();\n };\n this.initViewDetails = function (options, SupplierItem) {\n debug('**call initViewDetails ');\n if (!APP.ContactPopUp) {\n console.log('nincs APP.ContactPopUp');\n APP.ContactPopUp = new window.ContactPopUp();\n } else {\n console.log('mar van APP.ContactPopUp');\n }\n APP.ContactPopUp.init({\n active: true,\n onAfterSave: root.contactAction\n });\n root.renderContact();\n $('.supplierForm .buttonNewContact').bind('click', function () {\n APP.SupplierAdmin.setContactPopupWorkflow('new');\n APP.ContactPopUp.clearData();\n APP.ContactPopUp.show();\n });\n $('[data-toggle=\"tooltip\"]').tooltip();\n initRadioButtons();\n $(\":input\").inputmask({\n \"onincomplete\": function onincomplete() {\n console.log($(this).data('required'));\n if ($(this).val().length > 0 || $(this).data('required') === true) {\n $(this).addClass('is-invalid');\n }\n },\n \"oncomplete\": function oncomplete() {\n $(this).removeClass('is-invalid');\n $(this).addClass('is-valid');\n },\n \"oncleared\": function oncleared() {\n console.log('cleared');\n $(this).removeClass('is-invalid');\n }\n });\n $('form.supplierForm button.FormSaveButton').off('click');\n $('form.supplierForm button.FormSaveButton').on('click', root.clickSaveButton);\n root.setDetailsViewData();\n $(\".productCategorySelect\").select2();\n $(\".serviceSelect\").select2({\n tags: true,\n createTag: function createTag(params) {\n var term = $.trim(params.term);\n if (term === '') {\n return null;\n }\n return {\n id: term,\n text: term,\n newTag: true // add additional parameters\n };\n }\n });\n\n //$(\".profitCenterSelect\").select2();\n $(\"input[name=logoFile]\").change(function () {\n setImageFromLocal(this, Opts.containerCssSelector + ' .imageLogo');\n });\n $('form.supplierForm .profitCenterSelectCheckboxAll').off('click');\n $('form.supplierForm .profitCenterSelectCheckboxAll').on('click', function () {\n //console.log();\n //let checked=$(this).is(\":checked\")\n $('form.supplierForm input.profitCenterSelectCheckbox').prop('checked', $(this).is(\":checked\"));\n });\n root.renderAttachment();\n //Opts.onAfterInitViewDetails();\n root.initFileAttachmentFeature();\n debug('**end initViewDetails ');\n };\n this.selectedUploadFileToggle = function (fileInput) {\n /*\r\n console.log(fileInput.attr('name'));\r\n console.log(fileInput[0].files[0]);\r\n console.log(fileInput[0].files[0].name);\r\n */\n if (fileInput) {\n $('.containerFileUpload').addClass('d-none');\n if (fileInput[0].files[0]) {\n $('.containerUploadedFileName').text(fileInput[0].files[0].name);\n }\n $('.containerFileUploadStarted').removeClass('d-none');\n $('.containerUploadedSpinner').removeClass('d-none');\n } else {\n $('.containerUploadedFileName').text('');\n $('.custom-file-label.selected').text('');\n $('.containerFileUploadStarted').addClass('d-none');\n $('.uploadStatusRow').addClass('d-none');\n $('.containerFileUpload').removeClass('d-none');\n }\n };\n this.initFileAttachmentFeature = function () {\n console.log('-------initFileAttachmentFeature-----------');\n if (root.Supplier.id) {\n $('.containerFileUpload').removeClass('d-none');\n $('.containerFileUploadNone').addClass('d-none');\n }\n $(Opts.containerCssSelector + ' .buttonUpload').off('click');\n $(Opts.containerCssSelector + ' .buttonUpload').on('click', function () {\n console.group('-------buttonUpload-----------');\n var fileInput = $('#inputGroupAttacheFile');\n if (fileInput[0].files.length < 1) {\n Toast.create(\"Hiba!\", 'Vállaszon ki fájlt!', TOAST_STATUS.DANGER, 10000);\n return;\n }\n console.log($(Opts.containerCssSelector).find('form.supplierForm')[0]);\n var data = new FormData($(Opts.containerCssSelector).find('form.supplierForm')[0]);\n data.append(fileInput.attr('name'), fileInput[0].files[0]);\n root.selectedUploadFileToggle(fileInput);\n var ajaxUrl = Opts.URL.attachFile.replace('%id%', root.Supplier.id);\n console.groupEnd();\n $.ajax({\n url: ajaxUrl,\n data: data,\n type: 'POST',\n contentType: false,\n processData: false,\n beforeSend: function beforeSend() {},\n success: function success(data) {\n console.log(data);\n if (data.success == true) {\n root.addAttachment(data.data.attachment);\n root.selectedUploadFileToggle();\n }\n },\n error: function error(data) {\n console.log(data.responseJSON);\n root.selectedUploadFileToggle();\n ajaxErrorFieldHandler(data.responseJSON.error);\n }\n });\n });\n };\n this.clickNew = function () {\n debug('clickNew');\n APP.loadMainContent(Opts.URL.create, root.clickNewCallBack);\n };\n this.clickNewCallBack = function () {\n debug('callbackNew');\n root.Supplier = new window.Supplier();\n root.initViewDetails();\n };\n this.datatableRowActionEdit = function (rowData, node) {\n console.log('datatableRowActionEdit Called');\n //Opts.onAfterInitViewDetails=root.autofillDetails;\n var ajaxUrl = Opts.URL.edit.replace('%id%', rowData.id);\n APP.loadMainContent(ajaxUrl, root.initViewDetails);\n console.log('datatableRowActionEdit End');\n };\n this.clickOrderDeleteConfirmed = function (event) {\n debug('clickSupplierDeleteConfirmed');\n debug(event);\n debug(event.data);\n $('#dialogModal').modal('hide');\n var ajaxData = {};\n ajaxData._token = Opts.token;\n var ajaxUrl = Opts.URL.destroy.replace('%id%', event.data.id);\n ajaxData._token = $('input[name=_token]').val();\n console.log(ajaxUrl);\n console.log(ajaxData);\n var row = $(dataTableCSSSelector).DataTable().row(root.dadatatableRowActionCallerNode.parents('tr'));\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n method: \"DELETE\",\n success: function success(data) {\n if (data.success == true) {\n row.remove().draw();\n root.dadatatableRowActionCallerNode = false;\n }\n }\n });\n };\n var datatableRowActionCallerNode = false;\n this.datatableRowActionDelete = function (rowData, node) {\n console.log('datatableRowActionDelete Called');\n root.dadatatableRowActionCallerNode = node;\n $('#dialogModal').on('show.bs.modal', function (event) {\n // If necessary, you could initiate an AJAX request here (and then do the updating in a callback).\n // Update the modal's content. We'll use jQuery here, but you could use a data binding library or other methods instead.\n var modal = $(this);\n modal.find('.modal-title').text('Megerősítés ');\n modal.find('.modal-body').text('Biztosan törli a beszállítót?');\n modal.find('.buttonYes').off('click');\n modal.find('.buttonYes').on('click', {\n id: rowData.id\n }, root.clickOrderDeleteConfirmed);\n });\n $('#dialogModal').modal('show');\n };\n this.datatableRowActionButtonClick = function (event) {\n debug('datatableRowActionButtonClick');\n var node = $(event[0].currentTarget);\n var row = $(dataTableCSSSelector).DataTable().row(node.parents('tr'));\n var rowData = row.data();\n var actionName = 'datatableRowAction' + node.data('buttontype').capitalize();\n if (typeof root[actionName] === \"function\") {\n return root[actionName](rowData, node);\n }\n };\n this.initViewList = function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n debug('listview inicialization');\n dataTableCSSSelector = Opts.containerCssSelector + ' .dataTable'; //\n\n var colNum = $(dataTableCSSSelector + ' thead th').length; //buttons insert position need\n APP.setOpts({\n datatableActionButtonClickCallBack: root.clickNew,\n datatableRowActionButtonClickCallBack: root.datatableRowActionButtonClick\n });\n var orderDirective = Opts.dataTable.orderDirective;\n if (typeof options['orderDirective'] != 'undefined') {\n orderDirective = options['orderDirective'];\n }\n $(dataTableCSSSelector).DataTable({\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n //\"ajax\": \"{{asset('exapmle2.json')}}\",\n \"ajax\": Opts.URL.getDataTableContent,\n \"columnDefs\": [{\n \"targets\": colNum - 1,\n \"render\": function render(data, type, row) {\n var buttons = APP.datatableAddRowTrashButton(0, arguments);\n buttons += APP.datatableAddRowEditButton(0, arguments);\n return buttons;\n }\n }, {\n \"targets\": 1,\n \"render\": function render(data, type, row) {\n return type === \"sort\" ? data.latinise() : data;\n }\n }\n //{ \"visible\": false, \"targets\": [ 0 ] }\n ],\n buttons: {\n buttons: ['excel', 'pdf', {\n extend: 'print',\n //text: 'Print current page',\n 'title': 'title custom text',\n 'messageTop': 'Message On Top',\n autoPrint: true\n }, /**/\n\n {\n text: 'Új felvitele',\n className: 'btn btn-success newItem',\n attr: {\n /*\r\n data:{\r\n a:1,\r\n b:2\r\n }\r\n */\n 'data': 'newItem'\n },\n init: function init(api, node, config) {\n $(node).removeClass('ui-button');\n },\n action: function action(e, dt, node, config) {\n APP.datatableActionButtonClickCallBack(arguments);\n /* console.log(e);\r\n console.log(dt);\r\n console.log(node);\r\n console.log(config);*/\n }\n }]\n },\n \"columns\": [{\n \"data\": \"id\"\n }, {\n \"data\": \"name\"\n }, {\n \"data\": \"hooreycaId\"\n }, {\n \"data\": \"nameId\"\n }, {\n \"data\": \"created_at\"\n }, null],\n \"order\": orderDirective,\n \"stateSave\": true,\n \"drawCallback\": function drawCallback(settings) {\n APP.datatableAddRowAction(dataTableCSSSelector);\n }\n });\n debug('listview end');\n };\n this.autofillDetails = function () {\n debug('nyeresre allunk');\n var randomNumber = getRandomInt(9999);\n $('input[name=name]').val('Beszalító' + randomNumber);\n $('input[name=hooreycaId]').val('hb' + randomNumber);\n $('input[name=nameId]').val('be' + randomNumber);\n $('input[name=orderEmail]').val('kapcsolat' + randomNumber + '@beszallito.hu');\n $('input[name=orderEmail2]').val('informacio' + randomNumber + '@beszallito.hu');\n $('input[name=address]').val('8989 Supplier utca ' + randomNumber);\n $('input[name=mailingAddress]').val('8989 Postai út' + randomNumber);\n $('input[name=phone]').val('+36301234567');\n $('input[name=fax]').val('36308889999');\n $('input[name=customerServicePhone]').val('+36761234444');\n $('textarea[name=note]').val('Megjegyzem ' + randomNumber);\n };\n this.testMode = function () {\n console.debug('!!!!testmode !!!!');\n root.Supplier = new window.Supplier({\n 'contact': [{\n id: 2\n }, {\n id: 3\n }\n /*\r\n {\r\n id:3,\r\n name:'Kósa Veronika',\r\n email:'szamlazas4@funkcio.hu',\r\n phone:'{{formatterPhoneNumber(\"+36204589180\")}}'\r\n }\r\n */]\n });\n Opts.onAfterInitViewDetails = root.autofillDetails;\n APP.loadMainContent(Opts.URL.create, root.initViewDetails);\n };\n this.init = function (options, SupplierItem) {\n $.extend(Opts, options);\n if (Opts.testMode) {\n return root.testMode();\n }\n if (SupplierItem) {\n root.Supplier = SupplierItem;\n }\n root.initViewList();\n };\n this.renderAttachment = function () {\n var rowNum = 1;\n console.log('renderingAttachment');\n $.each(root.Supplier.getData('attachment'), function () {\n var attachmentData = this;\n attachmentData.rowNum = rowNum;\n date = new Date(attachmentData.created_at);\n attachmentData.date = date.toLocaleString();\n attachmentData.link = attachmentData.PublicUrl + '/' + attachmentData.filename;\n var template = $('template[data-name=\"supplierAttachmentTableRow\"]').html();\n var render = Mustache.render(template, attachmentData);\n $('.attachmentTable tbody').append(render);\n rowNum++;\n });\n root.bindAttachmentClickAction();\n };\n this.addAttachment = function (attachmentData) {\n console.log(attachmentData);\n var CSSSelectorForm = Opts.containerCssSelector + ' .supplierForm';\n root.Supplier.attachment.push(attachmentData);\n attachmentData.rowNum = root.Supplier.attachment.length;\n var template = $('template[data-name=\"supplierAttachmentTableRow\"]').html();\n var render = Mustache.render(template, attachmentData);\n $(CSSSelectorForm + ' .attachmentTable tbody').append(render);\n root.bindContactClickAction();\n Toast.enableTimers(false);\n Toast.create(\"Fájl hozzáadva!\", attachmentData.original_filename + \" fájl hozzáadva\", TOAST_STATUS.SUCCESS, 5000);\n };\n this.resetContactTable = function () {\n $('.contactTable tbody tr').remove();\n root.renderContact();\n };\n this.renderContact = function () {\n var rowNum = 1;\n console.log('renderingContacts');\n $.each(root.Supplier.getData('contact'), function () {\n var contactData = this;\n contactData.rowNum = rowNum;\n //console.log(contactData);\n var template = $('template[data-name=\"supplierContactTableRow\"]').html();\n var render = Mustache.render(template, contactData);\n $('.contactTable tbody').append(render);\n rowNum++;\n });\n root.bindContactClickAction();\n };\n this.bindContactClickAction = function () {\n var node = $('.contactTable .buttonDelete');\n node.unbind('click');\n node.bind('click', root.contactDeleteClick);\n node = $('.contactTable .buttonEdit');\n node.unbind('click');\n node.bind('click', root.contactEditClick);\n };\n this.bindAttachmentClickAction = function () {\n var node = $('.attachmentTable .buttonDelete');\n node.unbind('click');\n node.bind('click', root.attachmentDeleteClick);\n };\n var currentAttachmentRow = false;\n this.attachmentDeleteClick = function (event) {\n var row = $(this).closest('tr');\n var id = row.find('input[name=attachmentId]').val();\n var ajaxUrl = Opts.URL.detachFile.replace('%id%', root.Supplier.id);\n //let data= new FormData($(Opts.containerCssSelector).find('form.supplierForm')[0]);\n //data.append(fileInput.attr('name'),fileInput[0].files[0]);\n var data = {};\n data._token = $('input[name=\"_token\"]').val();\n data.attachemntId = id;\n $.ajax({\n url: ajaxUrl,\n data: data,\n type: 'POST',\n //contentType:false,\n //processData: false,\n beforeSend: function beforeSend() {},\n success: function success(data) {\n console.log(data);\n if (data.success == true) {\n root.Supplier.attachment = root.Supplier.attachment.filter(function (value, index, arr) {\n if (value.id !== data.data.attachment.id * 1) {\n return true;\n }\n return false;\n });\n /*\r\n */\n //row.remove();\n root.resetAttachmentTable();\n }\n },\n error: function error(data) {\n console.log(data.responseJSON);\n root.selectedUploadFileToggle();\n ajaxErrorFieldHandler(data.responseJSON.error);\n }\n });\n };\n this.resetAttachmentTable = function () {\n $('.attachmentTable tbody tr').remove();\n root.renderAttachment();\n };\n this.contactDeleteClick = function (event) {\n var row = $(this).closest('tr');\n var id = row.find('input[name=contactId]').val();\n root.Supplier.contact = root.Supplier.contact.filter(function (value, index, arr) {\n if (value.id !== id * 1) {\n return true;\n }\n return false;\n });\n row.remove();\n root.resetContactTable();\n };\n root.getContactPopupWorkflow = function () {\n return contactPopupWorkflow;\n };\n root.setContactPopupWorkflow = function (status) {\n contactPopupWorkflow = status;\n };\n this.contactEditClick = function (event) {\n //console.log(this);\n var row = $(this).closest('tr');\n var id = row.find('input[name=contactId]').val();\n root.setContactPopupWorkflow('edit');\n APP.ContactPopUp.loadData(id);\n };\n this.getSupplier = function () {\n return root.Supplier;\n };\n this.contactAction = function (contactData) {\n console.log('nah most kellene meg valamit csinalni.');\n if (root.getContactPopupWorkflow() == 'new') {\n root.addContact(contactData);\n } else if (root.getContactPopupWorkflow() == 'edit') {\n root.editContact(contactData.id, contactData);\n }\n };\n this.editContact = function (id, contactData) {\n var newContacts = [];\n $.each(root.Supplier.getData('contact'), function (index) {\n if (this.id == id) {\n newContacts.push(contactData);\n } else {\n newContacts.push(this);\n }\n });\n root.Supplier.contact = newContacts;\n root.resetContactTable();\n Toast.create(\"Kapcsolat adatai módosítva!\", contactData.name + \" nevű kapocsolattartó módosítva\", TOAST_STATUS.SUCCESS, 5000);\n };\n this.addContact = function (contactData) {\n /*\r\n fel kell venni a sorba\r\n */\n root.Supplier.contact.push(contactData);\n contactData.rowNum = root.Supplier.contact.length;\n var template = $('template[data-name=\"supplierContactTableRow\"]').html();\n var render = Mustache.render(template, contactData);\n $('.contactTable tbody').append(render);\n root.bindContactClickAction();\n Toast.enableTimers(false);\n Toast.create(\"Kapcsolat tartó hozzáadva!\", contactData.name + \" nevű kapocsolattartó hozzáadva\", TOAST_STATUS.SUCCESS, 5000);\n };\n this.construct(options, SupplierItem);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdXBwbGllciIsIl9EYXRhTW9kZWwiLCJfU3VwcGxpZXIiLCJkYXRhIiwib3B0aW9ucyIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2NhbGxTdXBlciIsImNvbnRhY3QiLCJjb25zb2xlIiwibG9nIiwiX2luaGVyaXRzIiwiX2NyZWF0ZUNsYXNzIiwiRGF0YU1vZGVsIiwid2luZG93IiwiU3VwcGxpZXJBZG1pbiIsIlN1cHBsaWVySXRlbSIsIk9wdHMiLCJ0b2tlbiIsImNvbnRhaW5lckNzc1NlbGVjdG9yIiwidGVzdE1vZGUiLCJVUkwiLCJnZXREYXRhVGFibGVDb250ZW50IiwiaW5kZXgiLCJzaG93IiwiZWRpdCIsImNyZWF0ZSIsInN0b3JlIiwidXBkYXRlIiwiZGVzdHJveSIsImF0dGFjaEZpbGUiLCJkZXRhY2hGaWxlIiwiZGF0YVRhYmxlIiwib3JkZXJEaXJlY3RpdmUiLCJvbkFmdGVySW5pdFZpZXdEZXRhaWxzIiwicm9vdCIsImNvbnRhY3RQb3B1cFdvcmtmbG93IiwiY29uc3RydWN0IiwiJCIsImV4dGVuZCIsIkFQUCIsImdldE9wdHMiLCJmb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGxPbGQiLCJDU1NTZWxlY3RvciIsIkZvcm1EYXRhIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiZm9ybUpTT04iLCJmb3JFYWNoIiwidmFsdWUiLCJrZXkiLCJSZWZsZWN0IiwiaGFzIiwiQXJyYXkiLCJpc0FycmF5IiwicHVzaCIsImVhY2giLCJhdHRyIiwicmVwbGFjZSIsImZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbCIsIkNTU1NlbGVjdG9yRm9ybSIsImFqYXhEYXRhIiwiZ2V0QWxsIiwiYXBwZW5kIiwidmFsIiwiaW5kZXhLZXkiLCJnZXQiLCJzZXQiLCJjbGlja1NhdmVCdXR0b24iLCJldmVudCIsImRlYnVnIiwicHJldmVudERlZmF1bHQiLCJjaGVja1ZhbGlkaXR5Iiwic3RvcFByb3BhZ2F0aW9uIiwiYWpheFVybCIsImFqYXhNZXRob2QiLCJpZCIsImFqYXgiLCJ1cmwiLCJ0eXBlIiwiY29udGVudFR5cGUiLCJwcm9jZXNzRGF0YSIsImhlYWRlcnMiLCJzdWNjZXNzIiwiVG9hc3QiLCJUT0FTVF9TVEFUVVMiLCJTVUNDRVNTIiwibG9hZE1haW5Db250ZW50IiwiaW5pdFZpZXdMaXN0Iiwic2V0RGV0YWlsc1ZpZXdEYXRhIiwibmVlZFRvU2V0Iiwibm90ZSIsInByb3AiLCJjYW5TZWUiLCJjbGljayIsImNhblNlZUluT3JkZXIiLCJob29yZXljYURhdGFBY3RpdmUiLCJwcm9kdWN0R3JvdXAiLCJwcm9kdWN0X2dyb3VwIiwibmFtZSIsImNoYW5nZSIsInNlcnZpY2UiLCJwcm9maXRDZW50ZXIiLCJwcm9maXRfY2VudGVyIiwiZXNjYXBlU2VsZWN0b3IiLCJpbml0Vmlld0RldGFpbHMiLCJDb250YWN0UG9wVXAiLCJpbml0IiwiYWN0aXZlIiwib25BZnRlclNhdmUiLCJjb250YWN0QWN0aW9uIiwicmVuZGVyQ29udGFjdCIsImJpbmQiLCJzZXRDb250YWN0UG9wdXBXb3JrZmxvdyIsImNsZWFyRGF0YSIsInRvb2x0aXAiLCJpbml0UmFkaW9CdXR0b25zIiwiaW5wdXRtYXNrIiwib25pbmNvbXBsZXRlIiwibGVuZ3RoIiwiYWRkQ2xhc3MiLCJvbmNvbXBsZXRlIiwicmVtb3ZlQ2xhc3MiLCJvbmNsZWFyZWQiLCJvZmYiLCJvbiIsInNlbGVjdDIiLCJ0YWdzIiwiY3JlYXRlVGFnIiwicGFyYW1zIiwidGVybSIsInRyaW0iLCJ0ZXh0IiwibmV3VGFnIiwic2V0SW1hZ2VGcm9tTG9jYWwiLCJpcyIsInJlbmRlckF0dGFjaG1lbnQiLCJpbml0RmlsZUF0dGFjaG1lbnRGZWF0dXJlIiwic2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlIiwiZmlsZUlucHV0IiwiZmlsZXMiLCJncm91cCIsIkRBTkdFUiIsImZpbmQiLCJncm91cEVuZCIsImJlZm9yZVNlbmQiLCJhZGRBdHRhY2htZW50IiwiYXR0YWNobWVudCIsImVycm9yIiwicmVzcG9uc2VKU09OIiwiYWpheEVycm9yRmllbGRIYW5kbGVyIiwiY2xpY2tOZXciLCJjbGlja05ld0NhbGxCYWNrIiwiZGF0YXRhYmxlUm93QWN0aW9uRWRpdCIsInJvd0RhdGEiLCJub2RlIiwiY2xpY2tPcmRlckRlbGV0ZUNvbmZpcm1lZCIsIm1vZGFsIiwiX3Rva2VuIiwicm93IiwiZGF0YVRhYmxlQ1NTU2VsZWN0b3IiLCJEYXRhVGFibGUiLCJkYWRhdGF0YWJsZVJvd0FjdGlvbkNhbGxlck5vZGUiLCJwYXJlbnRzIiwibWV0aG9kIiwicmVtb3ZlIiwiZHJhdyIsImRhdGF0YWJsZVJvd0FjdGlvbkNhbGxlck5vZGUiLCJkYXRhdGFibGVSb3dBY3Rpb25EZWxldGUiLCJkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayIsImN1cnJlbnRUYXJnZXQiLCJhY3Rpb25OYW1lIiwiY2FwaXRhbGl6ZSIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsImNvbE51bSIsInNldE9wdHMiLCJkYXRhdGFibGVBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrIiwiZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayIsImxhbmd1YWdlIiwicmVuZGVyIiwiYnV0dG9ucyIsImRhdGF0YWJsZUFkZFJvd1RyYXNoQnV0dG9uIiwiZGF0YXRhYmxlQWRkUm93RWRpdEJ1dHRvbiIsImxhdGluaXNlIiwiYXV0b1ByaW50IiwiY2xhc3NOYW1lIiwiYXBpIiwiY29uZmlnIiwiYWN0aW9uIiwiZSIsImR0IiwiZHJhd0NhbGxiYWNrIiwic2V0dGluZ3MiLCJkYXRhdGFibGVBZGRSb3dBY3Rpb24iLCJhdXRvZmlsbERldGFpbHMiLCJyYW5kb21OdW1iZXIiLCJnZXRSYW5kb21JbnQiLCJyb3dOdW0iLCJnZXREYXRhIiwiYXR0YWNobWVudERhdGEiLCJkYXRlIiwiRGF0ZSIsImNyZWF0ZWRfYXQiLCJ0b0xvY2FsZVN0cmluZyIsImxpbmsiLCJQdWJsaWNVcmwiLCJmaWxlbmFtZSIsInRlbXBsYXRlIiwiaHRtbCIsIk11c3RhY2hlIiwiYmluZEF0dGFjaG1lbnRDbGlja0FjdGlvbiIsImJpbmRDb250YWN0Q2xpY2tBY3Rpb24iLCJlbmFibGVUaW1lcnMiLCJvcmlnaW5hbF9maWxlbmFtZSIsInJlc2V0Q29udGFjdFRhYmxlIiwiY29udGFjdERhdGEiLCJ1bmJpbmQiLCJjb250YWN0RGVsZXRlQ2xpY2siLCJjb250YWN0RWRpdENsaWNrIiwiYXR0YWNobWVudERlbGV0ZUNsaWNrIiwiY3VycmVudEF0dGFjaG1lbnRSb3ciLCJjbG9zZXN0IiwiYXR0YWNoZW1udElkIiwiZmlsdGVyIiwiYXJyIiwicmVzZXRBdHRhY2htZW50VGFibGUiLCJnZXRDb250YWN0UG9wdXBXb3JrZmxvdyIsInN0YXR1cyIsImxvYWREYXRhIiwiZ2V0U3VwcGxpZXIiLCJhZGRDb250YWN0IiwiZWRpdENvbnRhY3QiLCJuZXdDb250YWN0cyJdLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvYWRtaW4vc3VwcGxpZXIuanM/YTdjNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpZih0eXBlb2YgU3VwcGxpZXI9PT0ndW5kZWZpbmVkJyl7XHJcbiAgICBjbGFzcyBTdXBwbGllciBleHRlbmRzIERhdGFNb2RlbHtcclxuXHJcbiAgICAgICAgLypcclxuICAgICAgICAgKiBDb25zdHJ1Y3RvclxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnN0cnVjdG9yIChkYXRhLG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgc3VwZXIoZGF0YSxvcHRpb25zKVxyXG4gICAgICAgICAgICBpZih0eXBlb2YgdGhpcy5jb250YWN0ID09PVwidW5kZWZpbmVkXCIpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWN0PVtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTdXBwbGllciBjb25zdHJ1Y3RvciBjYWxsZWQnKTtcclxuICAgICAgICB9O1xyXG4gICAgfTtcclxuICAgIHdpbmRvdy5TdXBwbGllcj1TdXBwbGllcjtcclxufVxyXG5cclxuXHJcbndpbmRvdy5TdXBwbGllckFkbWluPWZ1bmN0aW9uIChvcHRpb25zLFN1cHBsaWVySXRlbSkge1xyXG4gICAgLypcclxuICAgICAqIFZhcmlhYmxlcyBhY2Nlc3NpYmxlXHJcbiAgICAgKiBpbiB0aGUgY2xhc3NcclxuICAgICAqL1xyXG4gICAgbGV0IE9wdHMgPSB7XHJcbiAgICAgICAgdG9rZW46bnVsbCxcclxuICAgICAgICBjb250YWluZXJDc3NTZWxlY3RvcjogJy5jb250YWluZXJTdXBwbGllcicsXHJcbiAgICAgICAgdGVzdE1vZGU6ZmFsc2UsXHJcbiAgICAgICAgVVJMOntcclxuICAgICAgICAgICAgZ2V0RGF0YVRhYmxlQ29udGVudDonJyxcclxuICAgICAgICAgICAgaW5kZXg6JycsXHJcbiAgICAgICAgICAgIHNob3c6JycsXHJcbiAgICAgICAgICAgIGVkaXQ6JycsXHJcbiAgICAgICAgICAgIGNyZWF0ZTonJyxcclxuICAgICAgICAgICAgc3RvcmU6JycsXHJcbiAgICAgICAgICAgIHVwZGF0ZTonJyxcclxuICAgICAgICAgICAgZGVzdHJveTonJyxcclxuICAgICAgICAgICAgYXR0YWNoRmlsZTonJyxcclxuICAgICAgICAgICAgZGV0YWNoRmlsZTonJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRhdGFUYWJsZTp7XHJcbiAgICAgICAgICAgIG9yZGVyRGlyZWN0aXZlOlsxLCAnYXNjJ11cclxuICAgICAgICB9LFxyXG4gICAgICAgIG9uQWZ0ZXJJbml0Vmlld0RldGFpbHM6ZnVuY3Rpb24gKCl7fVxyXG4gICAgfTtcclxuICAgIGxldCBTdXBwbGllciA9IHt9O1xyXG4gICAgbGV0IHJvb3QgPSB0aGlzO1xyXG4gICAgbGV0IGNvbnRhY3RQb3B1cFdvcmtmbG93PSduZXcnO1xyXG4gICAgLypcclxuICAgICAqIENvbnN0cnVjdG9yXHJcbiAgICAgKi9cclxuICAgIHRoaXMuY29uc3RydWN0ID0gZnVuY3Rpb24gKG9wdGlvbnMsU3VwcGxpZXJJdGVtKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1N1cHBsaWVyQWRtaW4gY29uc3RydWN0b3IgY2FsbGVkJyk7XHJcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XHJcbiAgICAgICAgaWYoIVN1cHBsaWVySXRlbSl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzdXBwbGllciBsZXRyZSBrZWxsZXQgaG96bmkgJyk7XHJcbiAgICAgICAgICAgIGlmKCFBUFAuU3VwcGxpZXIpe1xyXG4gICAgICAgICAgICAgICAgQVBQLlN1cHBsaWVyPW5ldyB3aW5kb3cuU3VwcGxpZXIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByb290LlN1cHBsaWVyPUFQUC5TdXBwbGllcjtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhpcy5nZXRPcHRzPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIHJldHVybiBPcHRzO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsT2xkPSBmdW5jdGlvbiAoQ1NTU2VsZWN0b3IpIHtcclxuICAgICAgICBsZXQgZGF0YSA9IG5ldyBGb3JtRGF0YShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKENTU1NlbGVjdG9yKSk7XHJcbiAgICAgICAgLy9sZXQgZm9ybUpTT04gPSBPYmplY3QuZnJvbUVudHJpZXMoZGF0YS5lbnRyaWVzKCkpO1xyXG4gICAgICAgIHZhciBmb3JtSlNPTiA9IHt9O1xyXG4gICAgICAgIGRhdGEuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICAvLyBSZWZsZWN0LmhhcyBpbiBmYXZvciBvZjogZm9ybUpTT04uaGFzT3duUHJvcGVydHkoa2V5KVxyXG4gICAgICAgICAgICBpZighUmVmbGVjdC5oYXMoZm9ybUpTT04sIGtleSkpe1xyXG4gICAgICAgICAgICAgICAgZm9ybUpTT05ba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGZvcm1KU09OW2tleV0pKXtcclxuICAgICAgICAgICAgICAgIGZvcm1KU09OW2tleV0gPSBbZm9ybUpTT05ba2V5XV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9ybUpTT05ba2V5XS5wdXNoKHZhbHVlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJChDU1NTZWxlY3RvcisnIGlucHV0W2RhdGEtaW5wdXRtYXNrXScpLmVhY2goZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIGlmKGZvcm1KU09OWyQodGhpcykuYXR0cignbmFtZScpXSl7XHJcbiAgICAgICAgICAgICAgICBmb3JtSlNPTlskKHRoaXMpLmF0dHIoJ25hbWUnKV09Zm9ybUpTT05bJCh0aGlzKS5hdHRyKCduYW1lJyldLnJlcGxhY2UoL1tfIF0rJC9nLFwiXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy9mb3JtSlNPTi5wcm9kdWN0R3JvdXBzPSQoXCIucHJvZHVjdENhdGVnb3J5U2VsZWN0XCIpLnNlbGVjdDIoKS52YWwoKTtcclxuXHJcblxyXG4gICAgICAgIC8qTXVsdGlzZWxlY3Qgb3IgY2hlY2tib3ggdG8gYXJyYXk6XHJcbiAgICAgICAgYWpheERhdGFbJ3Byb2R1Y3RHcm91cCddPSQoXCIucHJvZHVjdENhdGVnb3J5U2VsZWN0XCIpLnNlbGVjdDIoKS52YWwoKTtcclxuXHJcbiAgICAgICAgZm9ybUpTT04ubXVsdGlzZWxlY3ROYW1lID0gZGF0YS5nZXRBbGwoJ211bHRpc2VsZWN0TmFtZScpO1xyXG4gICAgICAgICQuZWFjaChmb3JtSlNPTiwgZnVuY3Rpb24gKGl0ZW0sIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGZvcm1KU09OWyQubGNGaXJzdChpdGVtLnJlcGxhY2UoJ2NvbnRhY3QnLCAnJykpXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBkZWxldGUgZm9ybUpTT05baXRlbV07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYoZm9ybUpTT04ucGhvbmUpe1xyXG4gICAgICAgICAgICBmb3JtSlNPTi5waG9uZT1mb3JtSlNPTi5waG9uZS5yZXBsYWNlQWxsKCdfJywnJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGZvcm1KU09OLmVtYWlsKXtcclxuICAgICAgICAgICAgZm9ybUpTT04uZW1haWw9Zm9ybUpTT04uZW1haWwucmVwbGFjZUFsbCgnXycsJycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAqL1xyXG4gICAgICAgIHJldHVybiBmb3JtSlNPTjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbCA9IGZ1bmN0aW9uIChDU1NTZWxlY3RvckZvcm0pIHtcclxuICAgICAgICBsZXQgYWpheERhdGE9bmV3IEZvcm1EYXRhKCQoQ1NTU2VsZWN0b3JGb3JtKVswXSk7XHJcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgncHJvZml0Q2VudGVyJyksZnVuY3Rpb24oa2V5LHZhbHVlKXtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdwcm9maXRDZW50ZXJbXScsdmFsdWUpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgncHJvZHVjdEdyb3VwJyksZnVuY3Rpb24oa2V5LHZhbHVlKXtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdwcm9kdWN0R3JvdXBbXScsdmFsdWUpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgnc3VwcGxpZXJTZXJ2aWNlJyksZnVuY3Rpb24oa2V5LHZhbHVlKXtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdzdXBwbGllclNlcnZpY2VbXScsdmFsdWUpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgnY29udGFjdElkJyksZnVuY3Rpb24oa2V5LHZhbHVlKXtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdjb250YWN0SWRbXScsdmFsdWUpO1xyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIGFqYXhEYXRhLmFwcGVuZCgnX3Rva2VuJywkKCdpbnB1dFtuYW1lPV90b2tlbl0nKS52YWwoKSk7XHJcblxyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbZGF0YS1pbnB1dG1hc2tdJykuZWFjaChmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgbGV0IGluZGV4S2V5PSQodGhpcykuYXR0cignbmFtZScpO1xyXG4gICAgICAgICAgICBpZihhamF4RGF0YS5nZXQoaW5kZXhLZXkpKXtcclxuICAgICAgICAgICAgICAgIGFqYXhEYXRhLnNldChpbmRleEtleSxhamF4RGF0YS5nZXQoaW5kZXhLZXkpLnJlcGxhY2UoL1tfIF0rJC9nLFwiXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gYWpheERhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja1NhdmVCdXR0b249ZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgZGVidWcoJ1NhdmUgY2xpY2tlZCcpO1xyXG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm09T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5zdXBwbGllckZvcm0nO1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICBpZiAoJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPVwiY2FuU2VlSW5PcmRlclwiXScpLnZhbCgpPT0xICYmICQoQ1NTU2VsZWN0b3JGb3JtKVswXS5jaGVja1ZhbGlkaXR5KCkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd2YWxpZGF0b24gZmFsc2UnKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygndmFsaWRhdG9uIG9rJyk7XHJcbiAgICAgICAgICAgIC8vZG8geW91ciBhamF4IHN1Ym1pdGlvbiBoZXJlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBhamF4RGF0YT1yb290LmZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbChDU1NTZWxlY3RvckZvcm0pO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLnN0b3JlO1xyXG4gICAgICAgIGxldCBhamF4TWV0aG9kPVwiUE9TVFwiO1xyXG4gICAgICAgIGlmKHJvb3QuU3VwcGxpZXIuaWQpe1xyXG4gICAgICAgICAgICBhamF4VXJsPU9wdHMuVVJMLnVwZGF0ZS5yZXBsYWNlKCclaWQlJyxyb290LlN1cHBsaWVyLmlkKTtcclxuICAgICAgICAgICAgLy9hamF4TWV0aG9kPVwiUFVUXCI7XHJcbiAgICAgICAgICAgIC8vYWpheERhdGE9bmV3IEZvcm1EYXRhKCQoQ1NTU2VsZWN0b3JGb3JtKVswXSk7XHJcbiAgICAgICAgICAgIGFqYXhEYXRhLmFwcGVuZCgnX21ldGhvZCcsJ1BVVCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGVidWcoYWpheE1ldGhvZCk7XHJcbiAgICAgICAgZGVidWcoYWpheERhdGEpO1xyXG5cclxuICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICB1cmw6YWpheFVybCxcclxuICAgICAgICAgICAgZGF0YTphamF4RGF0YSxcclxuICAgICAgICAgICAgdHlwZTphamF4TWV0aG9kLFxyXG4gICAgICAgICAgICBjb250ZW50VHlwZTpmYWxzZSxcclxuICAgICAgICAgICAgcHJvY2Vzc0RhdGE6IGZhbHNlLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAnWC1DU1JGLVRPS0VOJzogJCgnaW5wdXRbbmFtZT1cIl90b2tlblwiXScpLnZhbCgpXHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICBzdWNjZXNzOmZ1bmN0aW9uIChkYXRhKXtcclxuICAgICAgICAgICAgICAgIGRlYnVnKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgaWYoZGF0YS5zdWNjZXNzPT10cnVlKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy9PcHRzLm9uQWZ0ZXJJbml0Vmlld0RldGFpbHM9cm9vdC5hdXRvZmlsbERldGFpbHM7XHJcbiAgICAgICAgICAgICAgICAgICAgT3B0cy5kYXRhVGFibGUub3JkZXJEaXJlY3RpdmU9WzAsICdkZXNjJ107XHJcbiAgICAgICAgICAgICAgICAgICAgVG9hc3QuY3JlYXRlKFwiU2lrZXJlcyByw7ZnesOtdMOpcyFcIiwgYWpheERhdGEuZ2V0KCduYW1lJykrXCIgbmV2xbEgYmVzesOhbGxsw610w7MgZWxtZW50dmVcIiwgVE9BU1RfU1RBVFVTLlNVQ0NFU1MsNTAwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChPcHRzLlVSTC5pbmRleCsnP2luaXQ9MCcscm9vdC5pbml0Vmlld0xpc3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldERldGFpbHNWaWV3RGF0YT1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZGVidWcoJ3NldERldGFpbHNWaWV3RGF0YScpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFN1cHBsaWVyKTtcclxuICAgICAgICBsZXQgQ1NTU2VsZWN0b3JGb3JtPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuc3VwcGxpZXJGb3JtJztcclxuICAgICAgICBsZXQgbmVlZFRvU2V0PVtcclxuICAgICAgICAgICAgJ25hbWUnLCdob29yZXljYUlkJywnbmFtZUlkJyxcclxuICAgICAgICAgICAgJ29yZGVyRW1haWwnLCdvcmRlckVtYWlsMicsJ2FkZHJlc3MnLCdtYWlsaW5nQWRkcmVzcycsJ3Bob25lJywnZmF4JywnY3VzdG9tZXJTZXJ2aWNlUGhvbmUnLFxyXG4gICAgICAgICAgICAnbmFtZTIyJyxcclxuICAgICAgICAgICAgJ29wZW5Ib3VycycsICdvcmRlcnNEZWFkbGluZScsICdtaW5PcmRlclZhbHVlJyxcclxuICAgICAgICBdO1xyXG4gICAgICAgICQuZWFjaChuZWVkVG9TZXQsZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZih0eXBlb2Ygcm9vdC5TdXBwbGllclt0aGlzXSE9J3VuZGVmaW5lZCcpe1xyXG4gICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPScrdGhpcysnXScpLnZhbChyb290LlN1cHBsaWVyW3RoaXNdKTtcclxuICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgdGV4dGFyZWFbbmFtZT0nK3RoaXMrJ10nKS52YWwocm9vdC5TdXBwbGllclt0aGlzXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIGlmKHR5cGVvZiByb290LlN1cHBsaWVyWydub3RlJ10hPSd1bmRlZmluZWQnKXtcclxuICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyB0ZXh0YXJlYVtuYW1lPW5vdGVdJykudmFsKHJvb3QuU3VwcGxpZXIubm90ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHR5cGVvZiByb290LlN1cHBsaWVyWydlbWFpbEF0dGFjaG1lbnRUeXBlJ10hPSd1bmRlZmluZWQnKXtcclxuICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPWVtYWlsQXR0YWNobWVudFR5cGVdW3ZhbHVlPScrcm9vdC5TdXBwbGllclsnZW1haWxBdHRhY2htZW50VHlwZSddKyddJykucHJvcCgnY2hlY2tlZCcsdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1jYW5TZWVdW2RhdGEtdGl0bGU9Jytyb290LlN1cHBsaWVyLmNhblNlZSsnXScpLmNsaWNrKCk7XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAqW2RhdGEtdG9nZ2xlPWNhblNlZUluT3JkZXJdW2RhdGEtdGl0bGU9Jytyb290LlN1cHBsaWVyLmNhblNlZUluT3JkZXIrJ10nKS5jbGljaygpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1ob29yZXljYURhdGFBY3RpdmVdW2RhdGEtdGl0bGU9Jytyb290LlN1cHBsaWVyLmhvb3JleWNhRGF0YUFjdGl2ZSsnXScpLmNsaWNrKCk7XHJcbiAgICAgICAgbGV0IHByb2R1Y3RHcm91cD1bXTtcclxuICAgICAgICAkLmVhY2gocm9vdC5TdXBwbGllci5wcm9kdWN0X2dyb3VwLGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcHJvZHVjdEdyb3VwLnB1c2godGhpcy5uYW1lKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5wcm9kdWN0Q2F0ZWdvcnlTZWxlY3QnKS52YWwocHJvZHVjdEdyb3VwKS5jaGFuZ2UoKTtcclxuXHJcbiAgICAgICAgbGV0IHNlcnZpY2U9W107XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuU3VwcGxpZXIuc2VydmljZSxmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHNlcnZpY2UucHVzaCh0aGlzLm5hbWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLnNlcnZpY2VTZWxlY3QnKS52YWwoc2VydmljZSkuY2hhbmdlKCk7XHJcblxyXG4gICAgICAgIGxldCBwcm9maXRDZW50ZXI9W107XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuU3VwcGxpZXIucHJvZml0X2NlbnRlcixmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHByb2ZpdENlbnRlci5wdXNoKHRoaXMubmFtZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8kKENTU1NlbGVjdG9yRm9ybSsnIC5wcm9maXRDZW50ZXJTZWxlY3QnKS52YWwocHJvZml0Q2VudGVyKS5jaGFuZ2UoKTtcclxuICAgICAgICAvL2RlYnVnKHByb2ZpdENlbnRlcik7XHJcbiAgICAgICAgJC5lYWNoKHByb2ZpdENlbnRlcixmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICQoJ2lucHV0W3ZhbHVlPVwiJyskLmVzY2FwZVNlbGVjdG9yKHRoaXMpKydcIl0nKS5wcm9wKCBcImNoZWNrZWRcIiwgdHJ1ZSApO1xyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIGlmKHR5cGVvZiByb290LlN1cHBsaWVyWydsb2dvRmlsZSddIT0ndW5kZWZpbmVkJyAmJiAocm9vdC5TdXBwbGllclsnbG9nb0ZpbGUnXSkpe1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGltZy5pbWFnZUxvZ28nKS5hdHRyKCdzcmMnLHJvb3QuU3VwcGxpZXJbJ2xvZ29GaWxlJ10pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9kZWJ1ZyhBUFAuU3VwcGxpZXJBZG1pbi5mb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGwoJy5zdXBwbGllckZvcm0nKVsncHJvZHVjdEdyb3VwJ10pO1xyXG4gICAgICAgIC8vJCgnW25hbWU9cHJvZHVjdEdyb3VwXScpLnZhbChbJ0LDvGbDqcOhcnVfw6lkZXNpcGFyaV90ZXJtw6lrZWsnLCdUb2rDoXMnXSkuY2hhbmdlKCk7XHJcbiAgICAgICAgLy9yb290LnNldERldGFpbHNWaWV3RGF0YSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbml0Vmlld0RldGFpbHM9ZnVuY3Rpb24gKG9wdGlvbnMsU3VwcGxpZXJJdGVtKXtcclxuICAgICAgICBkZWJ1ZygnKipjYWxsIGluaXRWaWV3RGV0YWlscyAnKTtcclxuICAgICAgICBpZighQVBQLkNvbnRhY3RQb3BVcCl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCduaW5jcyBBUFAuQ29udGFjdFBvcFVwJylcclxuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcCA9IG5ldyB3aW5kb3cuQ29udGFjdFBvcFVwKCk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdtYXIgdmFuICBBUFAuQ29udGFjdFBvcFVwJylcclxuICAgICAgICB9XHJcbiAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5pbml0KHtcclxuICAgICAgICAgICAgYWN0aXZlOnRydWUsXHJcbiAgICAgICAgICAgIG9uQWZ0ZXJTYXZlOnJvb3QuY29udGFjdEFjdGlvblxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQ29udGFjdCgpO1xyXG4gICAgICAgICQoJy5zdXBwbGllckZvcm0gLmJ1dHRvbk5ld0NvbnRhY3QnKS5iaW5kKCdjbGljaycsZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIEFQUC5TdXBwbGllckFkbWluLnNldENvbnRhY3RQb3B1cFdvcmtmbG93KCduZXcnKTtcclxuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5jbGVhckRhdGEoKTtcclxuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5zaG93KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJCgnW2RhdGEtdG9nZ2xlPVwidG9vbHRpcFwiXScpLnRvb2x0aXAoKTtcclxuICAgICAgICBpbml0UmFkaW9CdXR0b25zKCk7XHJcbiAgICAgICAgJChcIjppbnB1dFwiKS5pbnB1dG1hc2soe1xyXG4gICAgICAgICAgICBcIm9uaW5jb21wbGV0ZVwiOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygkKHRoaXMpLmRhdGEoJ3JlcXVpcmVkJykpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCQodGhpcykudmFsKCkubGVuZ3RoID4gMCB8fCAkKHRoaXMpLmRhdGEoJ3JlcXVpcmVkJykgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdpcy1pbnZhbGlkJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwib25jb21wbGV0ZVwiOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdpcy1pbnZhbGlkJyk7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdpcy12YWxpZCcpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcIm9uY2xlYXJlZFwiOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnY2xlYXJlZCcpO1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygnaXMtaW52YWxpZCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQoJ2Zvcm0uc3VwcGxpZXJGb3JtIGJ1dHRvbi5Gb3JtU2F2ZUJ1dHRvbicpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKCdmb3JtLnN1cHBsaWVyRm9ybSBidXR0b24uRm9ybVNhdmVCdXR0b24nKS5vbignY2xpY2snLHJvb3QuY2xpY2tTYXZlQnV0dG9uKTtcclxuICAgICAgICByb290LnNldERldGFpbHNWaWV3RGF0YSgpO1xyXG4gICAgICAgICQoXCIucHJvZHVjdENhdGVnb3J5U2VsZWN0XCIpLnNlbGVjdDIoKTtcclxuICAgICAgICAkKFwiLnNlcnZpY2VTZWxlY3RcIikuc2VsZWN0Mih7XHJcbiAgICAgICAgICAgIHRhZ3M6IHRydWUsXHJcbiAgICAgICAgICAgIGNyZWF0ZVRhZzogZnVuY3Rpb24gKHBhcmFtcykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRlcm0gPSAkLnRyaW0ocGFyYW1zLnRlcm0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0ZXJtID09PSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHRlcm0sXHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogdGVybSxcclxuICAgICAgICAgICAgICAgICAgICBuZXdUYWc6IHRydWUgLy8gYWRkIGFkZGl0aW9uYWwgcGFyYW1ldGVyc1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vJChcIi5wcm9maXRDZW50ZXJTZWxlY3RcIikuc2VsZWN0MigpO1xyXG4gICAgICAgICQoXCJpbnB1dFtuYW1lPWxvZ29GaWxlXVwiKS5jaGFuZ2UoZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgc2V0SW1hZ2VGcm9tTG9jYWwodGhpcyxPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmltYWdlTG9nbycpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkKCdmb3JtLnN1cHBsaWVyRm9ybSAucHJvZml0Q2VudGVyU2VsZWN0Q2hlY2tib3hBbGwnKS5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgJCgnZm9ybS5zdXBwbGllckZvcm0gLnByb2ZpdENlbnRlclNlbGVjdENoZWNrYm94QWxsJykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coKTtcclxuICAgICAgICAgICAgLy9sZXQgY2hlY2tlZD0kKHRoaXMpLmlzKFwiOmNoZWNrZWRcIilcclxuICAgICAgICAgICAgJCgnZm9ybS5zdXBwbGllckZvcm0gaW5wdXQucHJvZml0Q2VudGVyU2VsZWN0Q2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJywkKHRoaXMpLmlzKFwiOmNoZWNrZWRcIikpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQXR0YWNobWVudCgpO1xyXG4gICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzKCk7XHJcbiAgICAgICAgcm9vdC5pbml0RmlsZUF0dGFjaG1lbnRGZWF0dXJlKCk7XHJcbiAgICAgICAgZGVidWcoJyoqZW5kIGluaXRWaWV3RGV0YWlscyAnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkVXBsb2FkRmlsZVRvZ2dsZT1mdW5jdGlvbiAoZmlsZUlucHV0KXtcclxuICAgICAgICAvKlxyXG4gICAgICAgIGNvbnNvbGUubG9nKGZpbGVJbnB1dC5hdHRyKCduYW1lJykpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGZpbGVJbnB1dFswXS5maWxlc1swXSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coZmlsZUlucHV0WzBdLmZpbGVzWzBdLm5hbWUpO1xyXG4gICAgICAgICovXHJcbiAgICAgICAgaWYoZmlsZUlucHV0KXtcclxuICAgICAgICAgICAgJCgnLmNvbnRhaW5lckZpbGVVcGxvYWQnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgIGlmKGZpbGVJbnB1dFswXS5maWxlc1swXSl7XHJcbiAgICAgICAgICAgICAgICAkKCcuY29udGFpbmVyVXBsb2FkZWRGaWxlTmFtZScpLnRleHQoZmlsZUlucHV0WzBdLmZpbGVzWzBdLm5hbWUpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZFN0YXJ0ZWQnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJVcGxvYWRlZFNwaW5uZXInKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJVcGxvYWRlZEZpbGVOYW1lJykudGV4dCgnJyk7XHJcbiAgICAgICAgICAgICQoJy5jdXN0b20tZmlsZS1sYWJlbC5zZWxlY3RlZCcpLnRleHQoJycpO1xyXG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZFN0YXJ0ZWQnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICQoJy51cGxvYWRTdGF0dXNSb3cnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRGaWxlQXR0YWNobWVudEZlYXR1cmU9ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0taW5pdEZpbGVBdHRhY2htZW50RmVhdHVyZS0tLS0tLS0tLS0tJyk7XHJcbiAgICAgICAgaWYocm9vdC5TdXBwbGllci5pZCl7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZE5vbmUnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgJChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmJ1dHRvblVwbG9hZCcpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuYnV0dG9uVXBsb2FkJykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgY29uc29sZS5ncm91cCgnLS0tLS0tLWJ1dHRvblVwbG9hZC0tLS0tLS0tLS0tJyk7XHJcbiAgICAgICAgICAgIGxldCBmaWxlSW5wdXQ9JCgnI2lucHV0R3JvdXBBdHRhY2hlRmlsZScpO1xyXG4gICAgICAgICAgICBpZihmaWxlSW5wdXRbMF0uZmlsZXMubGVuZ3RoPDEpe1xyXG4gICAgICAgICAgICAgICAgVG9hc3QuY3JlYXRlKFwiSGliYSFcIiwgJ1bDoWxsYXN6b24ga2kgZsOhamx0IScsIFRPQVNUX1NUQVRVUy5EQU5HRVIsIDEwMDAwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IpLmZpbmQoJ2Zvcm0uc3VwcGxpZXJGb3JtJylbMF0pO1xyXG4gICAgICAgICAgICBsZXQgZGF0YT0gbmV3IEZvcm1EYXRhKCQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcikuZmluZCgnZm9ybS5zdXBwbGllckZvcm0nKVswXSk7XHJcbiAgICAgICAgICAgIGRhdGEuYXBwZW5kKGZpbGVJbnB1dC5hdHRyKCduYW1lJyksZmlsZUlucHV0WzBdLmZpbGVzWzBdKTtcclxuXHJcbiAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKGZpbGVJbnB1dCk7XHJcbiAgICAgICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmF0dGFjaEZpbGUucmVwbGFjZSgnJWlkJScscm9vdC5TdXBwbGllci5pZCk7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICB1cmw6YWpheFVybCxcclxuICAgICAgICAgICAgICAgIGRhdGE6ZGF0YSxcclxuICAgICAgICAgICAgICAgIHR5cGU6J1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgY29udGVudFR5cGU6ZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzRGF0YTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QuYWRkQXR0YWNobWVudChkYXRhLmRhdGEuYXR0YWNobWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YS5yZXNwb25zZUpTT04pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYWpheEVycm9yRmllbGRIYW5kbGVyKGRhdGEucmVzcG9uc2VKU09OLmVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xpY2tOZXc9ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGRlYnVnKCdjbGlja05ldycpO1xyXG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoT3B0cy5VUkwuY3JlYXRlLHJvb3QuY2xpY2tOZXdDYWxsQmFjayk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja05ld0NhbGxCYWNrPWZ1bmN0aW9uICgpIHtcclxuICAgICAgICBkZWJ1ZygnY2FsbGJhY2tOZXcnKTtcclxuICAgICAgICByb290LlN1cHBsaWVyPW5ldyB3aW5kb3cuU3VwcGxpZXIoKTtcclxuICAgICAgICByb290LmluaXRWaWV3RGV0YWlscygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kYXRhdGFibGVSb3dBY3Rpb25FZGl0PWZ1bmN0aW9uIChyb3dEYXRhLG5vZGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZGF0YXRhYmxlUm93QWN0aW9uRWRpdCBDYWxsZWQnKTtcclxuICAgICAgICAvL09wdHMub25BZnRlckluaXRWaWV3RGV0YWlscz1yb290LmF1dG9maWxsRGV0YWlscztcclxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5lZGl0LnJlcGxhY2UoJyVpZCUnLHJvd0RhdGEuaWQpO1xyXG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoYWpheFVybCxyb290LmluaXRWaWV3RGV0YWlscyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGF0YWJsZVJvd0FjdGlvbkVkaXQgRW5kJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja09yZGVyRGVsZXRlQ29uZmlybWVkPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgZGVidWcoJ2NsaWNrU3VwcGxpZXJEZWxldGVDb25maXJtZWQnKTtcclxuICAgICAgICBkZWJ1ZyhldmVudCk7XHJcbiAgICAgICAgZGVidWcoZXZlbnQuZGF0YSk7XHJcbiAgICAgICAgJCgnI2RpYWxvZ01vZGFsJykubW9kYWwoJ2hpZGUnKTtcclxuICAgICAgICBsZXQgYWpheERhdGE9e307XHJcbiAgICAgICAgYWpheERhdGEuX3Rva2VuPU9wdHMudG9rZW47XHJcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuZGVzdHJveS5yZXBsYWNlKCclaWQlJyxldmVudC5kYXRhLmlkKTtcclxuICAgICAgICBhamF4RGF0YS5fdG9rZW49JCgnaW5wdXRbbmFtZT1fdG9rZW5dJykudmFsKCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYWpheFVybCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYWpheERhdGEpO1xyXG4gICAgICAgIGxldCByb3c9JChkYXRhVGFibGVDU1NTZWxlY3RvcikuRGF0YVRhYmxlKCkucm93KHJvb3QuZGFkYXRhdGFibGVSb3dBY3Rpb25DYWxsZXJOb2RlLnBhcmVudHMoJ3RyJykpO1xyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxyXG4gICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxyXG4gICAgICAgICAgICBtZXRob2Q6XCJERUxFVEVcIixcclxuICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSl7XHJcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJvdy5yZW1vdmUoKS5kcmF3KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5kYWRhdGF0YWJsZVJvd0FjdGlvbkNhbGxlck5vZGU9ZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcbiAgICBsZXQgZGF0YXRhYmxlUm93QWN0aW9uQ2FsbGVyTm9kZT1mYWxzZTtcclxuXHJcbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkRlbGV0ZT1mdW5jdGlvbiAocm93RGF0YSxub2RlKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGF0YWJsZVJvd0FjdGlvbkRlbGV0ZSBDYWxsZWQnKTtcclxuICAgICAgICByb290LmRhZGF0YXRhYmxlUm93QWN0aW9uQ2FsbGVyTm9kZT1ub2RlO1xyXG4gICAgICAgICQoJyNkaWFsb2dNb2RhbCcpLm9uKCdzaG93LmJzLm1vZGFsJywgZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIC8vIElmIG5lY2Vzc2FyeSwgeW91IGNvdWxkIGluaXRpYXRlIGFuIEFKQVggcmVxdWVzdCBoZXJlIChhbmQgdGhlbiBkbyB0aGUgdXBkYXRpbmcgaW4gYSBjYWxsYmFjaykuXHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgbW9kYWwncyBjb250ZW50LiBXZSdsbCB1c2UgalF1ZXJ5IGhlcmUsIGJ1dCB5b3UgY291bGQgdXNlIGEgZGF0YSBiaW5kaW5nIGxpYnJhcnkgb3Igb3RoZXIgbWV0aG9kcyBpbnN0ZWFkLlxyXG4gICAgICAgICAgICB2YXIgbW9kYWwgPSAkKHRoaXMpO1xyXG4gICAgICAgICAgICBtb2RhbC5maW5kKCcubW9kYWwtdGl0bGUnKS50ZXh0KCdNZWdlcsWRc8OtdMOpcyAnKTtcclxuICAgICAgICAgICAgbW9kYWwuZmluZCgnLm1vZGFsLWJvZHknKS50ZXh0KCdCaXp0b3NhbiB0w7ZybGkgYSBiZXN6w6FsbMOtdMOzdD8nKTtcclxuICAgICAgICAgICAgbW9kYWwuZmluZCgnLmJ1dHRvblllcycpLm9mZignY2xpY2snKTtcclxuICAgICAgICAgICAgbW9kYWwuZmluZCgnLmJ1dHRvblllcycpLm9uKCdjbGljaycse2lkOnJvd0RhdGEuaWR9LHJvb3QuY2xpY2tPcmRlckRlbGV0ZUNvbmZpcm1lZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJCgnI2RpYWxvZ01vZGFsJykubW9kYWwoJ3Nob3cnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgZGVidWcoJ2RhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrJyk7XHJcbiAgICAgICAgbGV0IG5vZGU9JChldmVudFswXS5jdXJyZW50VGFyZ2V0KTtcclxuICAgICAgICBsZXQgcm93PSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgpLnJvdyhub2RlLnBhcmVudHMoJ3RyJykpO1xyXG4gICAgICAgIGxldCByb3dEYXRhPXJvdy5kYXRhKCk7XHJcbiAgICAgICAgbGV0IGFjdGlvbk5hbWU9J2RhdGF0YWJsZVJvd0FjdGlvbicrbm9kZS5kYXRhKCdidXR0b250eXBlJykuY2FwaXRhbGl6ZSgpO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygcm9vdFthY3Rpb25OYW1lXSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByb290W2FjdGlvbk5hbWVdKHJvd0RhdGEsbm9kZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0Vmlld0xpc3QgPSBmdW5jdGlvbiAob3B0aW9ucz17fSkge1xyXG4gICAgICAgIGRlYnVnKCdsaXN0dmlldyBpbmljaWFsaXphdGlvbicpO1xyXG4gICAgICAgIGRhdGFUYWJsZUNTU1NlbGVjdG9yPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuZGF0YVRhYmxlJzsgLy9cclxuXHJcbiAgICAgICAgbGV0IGNvbE51bT0kKGRhdGFUYWJsZUNTU1NlbGVjdG9yKycgdGhlYWQgdGgnKS5sZW5ndGg7IC8vYnV0dG9ucyBpbnNlcnQgcG9zaXRpb24gbmVlZFxyXG4gICAgICAgIEFQUC5zZXRPcHRzKHtcclxuICAgICAgICAgICAgZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjazpyb290LmNsaWNrTmV3LFxyXG4gICAgICAgICAgICBkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnJvb3QuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2ssXHJcblxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgbGV0IG9yZGVyRGlyZWN0aXZlPU9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlO1xyXG4gICAgICAgIGlmKHR5cGVvZiBvcHRpb25zWydvcmRlckRpcmVjdGl2ZSddIT0ndW5kZWZpbmVkJyl7XHJcbiAgICAgICAgICAgIG9yZGVyRGlyZWN0aXZlPW9wdGlvbnNbJ29yZGVyRGlyZWN0aXZlJ107XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgge1xyXG4gICAgICAgICAgICBsYW5ndWFnZToge1xyXG4gICAgICAgICAgICAgICAgdXJsOiAnLy9jZG4uZGF0YXRhYmxlcy5uZXQvcGx1Zy1pbnMvMS4xMC4yNC9pMThuL0h1bmdhcmlhbi5qc29uJ1xyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgLy9cImFqYXhcIjogXCJ7e2Fzc2V0KCdleGFwbWxlMi5qc29uJyl9fVwiLFxyXG4gICAgICAgICAgICBcImFqYXhcIjogT3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudCxcclxuICAgICAgICAgICAgXCJjb2x1bW5EZWZzXCI6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogY29sTnVtLTEsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBidXR0b25zPUFQUC5kYXRhdGFibGVBZGRSb3dUcmFzaEJ1dHRvbigwLGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbnMrPUFQUC5kYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uKDAsYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJ0YXJnZXRzXCI6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlID09PSBcInNvcnRcIiA/IGRhdGEubGF0aW5pc2UoKSA6IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAvL3sgXCJ2aXNpYmxlXCI6IGZhbHNlLCAgXCJ0YXJnZXRzXCI6IFsgMCBdIH1cclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgYnV0dG9uczp7XHJcbiAgICAgICAgICAgICAgICBidXR0b25zOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgJ2V4Y2VsJywncGRmJyxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZDogJ3ByaW50JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy90ZXh0OiAnUHJpbnQgY3VycmVudCBwYWdlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogJ3RpdGxlIGN1c3RvbSB0ZXh0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2VUb3AnOiAnTWVzc2FnZSBPbiBUb3AnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvUHJpbnQ6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIC8qKi9cclxuXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnw5pqIGZlbHZpdGVsZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2J0biBidG4tc3VjY2VzcyBuZXdJdGVtJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cjp7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOjEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6MlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiduZXdJdGVtJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0OiBmdW5jdGlvbihhcGksIG5vZGUsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChub2RlKS5yZW1vdmVDbGFzcygndWktYnV0dG9uJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbiAoIGUsIGR0LCBub2RlLCBjb25maWcgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUFAuZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayhhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29uc29sZS5sb2coZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNvbmZpZyk7Ki9cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwiY29sdW1uc1wiOiBbXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImlkXCIgfSxcclxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwibmFtZVwiIH0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImhvb3JleWNhSWRcIiB9LFxyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJuYW1lSWRcIiB9LFxyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJjcmVhdGVkX2F0XCIgfSxcclxuICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIFwib3JkZXJcIjogb3JkZXJEaXJlY3RpdmUsXHJcbiAgICAgICAgICAgIFwic3RhdGVTYXZlXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZHJhd0NhbGxiYWNrXCI6IGZ1bmN0aW9uKCBzZXR0aW5ncyApIHtcclxuICAgICAgICAgICAgICAgIEFQUC5kYXRhdGFibGVBZGRSb3dBY3Rpb24oZGF0YVRhYmxlQ1NTU2VsZWN0b3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSApO1xyXG4gICAgICAgIGRlYnVnKCdsaXN0dmlldyBlbmQnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmF1dG9maWxsRGV0YWlscz1mdW5jdGlvbiAoKXtcclxuICAgICAgICBkZWJ1ZygnbnllcmVzcmUgYWxsdW5rJyk7XHJcbiAgICAgICAgbGV0IHJhbmRvbU51bWJlcj1nZXRSYW5kb21JbnQoOTk5OSk7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1uYW1lXScpLnZhbCgnQmVzemFsw610w7MnK3JhbmRvbU51bWJlcik7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1ob29yZXljYUlkXScpLnZhbCgnaGInK3JhbmRvbU51bWJlcik7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1uYW1lSWRdJykudmFsKCdiZScrcmFuZG9tTnVtYmVyKTtcclxuICAgICAgICAkKCdpbnB1dFtuYW1lPW9yZGVyRW1haWxdJykudmFsKCdrYXBjc29sYXQnK3JhbmRvbU51bWJlcisnQGJlc3phbGxpdG8uaHUnKTtcclxuICAgICAgICAkKCdpbnB1dFtuYW1lPW9yZGVyRW1haWwyXScpLnZhbCgnaW5mb3JtYWNpbycrcmFuZG9tTnVtYmVyKydAYmVzemFsbGl0by5odScpO1xyXG4gICAgICAgICQoJ2lucHV0W25hbWU9YWRkcmVzc10nKS52YWwoJzg5ODkgU3VwcGxpZXIgdXRjYSAnK3JhbmRvbU51bWJlcik7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1tYWlsaW5nQWRkcmVzc10nKS52YWwoJzg5ODkgUG9zdGFpIMO6dCcrcmFuZG9tTnVtYmVyKTtcclxuICAgICAgICAkKCdpbnB1dFtuYW1lPXBob25lXScpLnZhbCgnKzM2MzAxMjM0NTY3Jyk7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1mYXhdJykudmFsKCczNjMwODg4OTk5OScpO1xyXG4gICAgICAgICQoJ2lucHV0W25hbWU9Y3VzdG9tZXJTZXJ2aWNlUGhvbmVdJykudmFsKCcrMzY3NjEyMzQ0NDQnKTtcclxuICAgICAgICAkKCd0ZXh0YXJlYVtuYW1lPW5vdGVdJykudmFsKCdNZWdqZWd5emVtICcrcmFuZG9tTnVtYmVyKTtcclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLnRlc3RNb2RlPWZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zb2xlLmRlYnVnKCchISEhdGVzdG1vZGUgISEhIScpO1xyXG4gICAgICAgIHJvb3QuU3VwcGxpZXIgPSBuZXcgd2luZG93LlN1cHBsaWVyKHtcclxuICAgICAgICAgICAgJ2NvbnRhY3QnOltcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZDoyLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZDozLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDozLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOidLw7NzYSBWZXJvbmlrYScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYWlsOidzemFtbGF6YXM0QGZ1bmtjaW8uaHUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaG9uZTone3tmb3JtYXR0ZXJQaG9uZU51bWJlcihcIiszNjIwNDU4OTE4MFwiKX19J1xyXG4gICAgICAgICAgICB9XHJcbiovXHJcblxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xyXG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoT3B0cy5VUkwuY3JlYXRlLHJvb3QuaW5pdFZpZXdEZXRhaWxzKTtcclxuICAgIH1cclxuICAgIHRoaXMuaW5pdD1mdW5jdGlvbiAob3B0aW9ucyxTdXBwbGllckl0ZW0pe1xyXG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgICBpZihPcHRzLnRlc3RNb2RlKXtcclxuICAgICAgICAgICAgcmV0dXJuIHJvb3QudGVzdE1vZGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoU3VwcGxpZXJJdGVtKXtcclxuICAgICAgICAgICAgcm9vdC5TdXBwbGllcj1TdXBwbGllckl0ZW1cclxuICAgICAgICB9XHJcbiAgICAgICAgcm9vdC5pbml0Vmlld0xpc3QoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbmRlckF0dGFjaG1lbnQ9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgbGV0IHJvd051bT0xO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdyZW5kZXJpbmdBdHRhY2htZW50Jyk7XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuU3VwcGxpZXIuZ2V0RGF0YSgnYXR0YWNobWVudCcpLGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBsZXQgYXR0YWNobWVudERhdGE9dGhpcztcclxuICAgICAgICAgICAgYXR0YWNobWVudERhdGEucm93TnVtPXJvd051bTtcclxuICAgICAgICAgICAgZGF0ZT1uZXcgRGF0ZShhdHRhY2htZW50RGF0YS5jcmVhdGVkX2F0KTtcclxuICAgICAgICAgICAgYXR0YWNobWVudERhdGEuZGF0ZT1kYXRlLnRvTG9jYWxlU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGF0dGFjaG1lbnREYXRhLmxpbms9YXR0YWNobWVudERhdGEuUHVibGljVXJsKycvJythdHRhY2htZW50RGF0YS5maWxlbmFtZTtcclxuICAgICAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInN1cHBsaWVyQXR0YWNobWVudFRhYmxlUm93XCJdJykuaHRtbCgpXHJcbiAgICAgICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGF0dGFjaG1lbnREYXRhKTtcclxuICAgICAgICAgICAgJCgnLmF0dGFjaG1lbnRUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xyXG4gICAgICAgICAgICByb3dOdW0rKztcclxuICAgICAgICB9KTtcclxuICAgICAgICByb290LmJpbmRBdHRhY2htZW50Q2xpY2tBY3Rpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFkZEF0dGFjaG1lbnQ9ZnVuY3Rpb24gKGF0dGFjaG1lbnREYXRhKXtcclxuICAgICAgICBjb25zb2xlLmxvZyhhdHRhY2htZW50RGF0YSk7XHJcbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLnN1cHBsaWVyRm9ybSc7XHJcbiAgICAgICAgcm9vdC5TdXBwbGllci5hdHRhY2htZW50LnB1c2goYXR0YWNobWVudERhdGEpO1xyXG4gICAgICAgIGF0dGFjaG1lbnREYXRhLnJvd051bT1yb290LlN1cHBsaWVyLmF0dGFjaG1lbnQubGVuZ3RoO1xyXG4gICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJzdXBwbGllckF0dGFjaG1lbnRUYWJsZVJvd1wiXScpLmh0bWwoKVxyXG4gICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGF0dGFjaG1lbnREYXRhKTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5hdHRhY2htZW50VGFibGUgdGJvZHknKS5hcHBlbmQocmVuZGVyKTtcclxuICAgICAgICByb290LmJpbmRDb250YWN0Q2xpY2tBY3Rpb24oKTtcclxuICAgICAgICBUb2FzdC5lbmFibGVUaW1lcnMoZmFsc2UpO1xyXG4gICAgICAgIFRvYXN0LmNyZWF0ZShcIkbDoWpsIGhvenrDoWFkdmEhXCIsIGF0dGFjaG1lbnREYXRhLm9yaWdpbmFsX2ZpbGVuYW1lK1wiIGbDoWpsIGhvenrDoWFkdmFcIiwgVE9BU1RfU1RBVFVTLlNVQ0NFU1MsNTAwMCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMucmVzZXRDb250YWN0VGFibGU9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgJCgnLmNvbnRhY3RUYWJsZSB0Ym9keSB0cicpLnJlbW92ZSgpO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQ29udGFjdCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZW5kZXJDb250YWN0PWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIGxldCByb3dOdW09MTtcclxuICAgICAgICBjb25zb2xlLmxvZygncmVuZGVyaW5nQ29udGFjdHMnKTtcclxuICAgICAgICAkLmVhY2gocm9vdC5TdXBwbGllci5nZXREYXRhKCdjb250YWN0JyksZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIGxldCBjb250YWN0RGF0YT10aGlzO1xyXG4gICAgICAgICAgICBjb250YWN0RGF0YS5yb3dOdW09cm93TnVtO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKGNvbnRhY3REYXRhKTtcclxuICAgICAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInN1cHBsaWVyQ29udGFjdFRhYmxlUm93XCJdJykuaHRtbCgpXHJcbiAgICAgICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGNvbnRhY3REYXRhKTtcclxuICAgICAgICAgICAgJCgnLmNvbnRhY3RUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xyXG4gICAgICAgICAgICByb3dOdW0rKztcclxuICAgICAgICB9KTtcclxuICAgICAgICByb290LmJpbmRDb250YWN0Q2xpY2tBY3Rpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJpbmRDb250YWN0Q2xpY2tBY3Rpb24gPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIGxldCBub2RlPSQoJy5jb250YWN0VGFibGUgLmJ1dHRvbkRlbGV0ZScpO1xyXG4gICAgICAgIG5vZGUudW5iaW5kKCdjbGljaycpO1xyXG4gICAgICAgIG5vZGUuYmluZCgnY2xpY2snLHJvb3QuY29udGFjdERlbGV0ZUNsaWNrKTtcclxuXHJcbiAgICAgICAgbm9kZT0kKCcuY29udGFjdFRhYmxlIC5idXR0b25FZGl0Jyk7XHJcbiAgICAgICAgbm9kZS51bmJpbmQoJ2NsaWNrJyk7XHJcbiAgICAgICAgbm9kZS5iaW5kKCdjbGljaycscm9vdC5jb250YWN0RWRpdENsaWNrKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5iaW5kQXR0YWNobWVudENsaWNrQWN0aW9uPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIGxldCBub2RlPSQoJy5hdHRhY2htZW50VGFibGUgLmJ1dHRvbkRlbGV0ZScpO1xyXG4gICAgICAgIG5vZGUudW5iaW5kKCdjbGljaycpO1xyXG4gICAgICAgIG5vZGUuYmluZCgnY2xpY2snLHJvb3QuYXR0YWNobWVudERlbGV0ZUNsaWNrKTtcclxuICAgIH1cclxuICAgIGxldCBjdXJyZW50QXR0YWNobWVudFJvdz1mYWxzZTtcclxuICAgIHRoaXMuYXR0YWNobWVudERlbGV0ZUNsaWNrPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgbGV0IHJvdz0kKHRoaXMpLmNsb3Nlc3QoJ3RyJyk7XHJcbiAgICAgICAgbGV0IGlkPXJvdy5maW5kKCdpbnB1dFtuYW1lPWF0dGFjaG1lbnRJZF0nKS52YWwoKTtcclxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5kZXRhY2hGaWxlLnJlcGxhY2UoJyVpZCUnLHJvb3QuU3VwcGxpZXIuaWQpO1xyXG4gICAgICAgIC8vbGV0IGRhdGE9IG5ldyBGb3JtRGF0YSgkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IpLmZpbmQoJ2Zvcm0uc3VwcGxpZXJGb3JtJylbMF0pO1xyXG4gICAgICAgIC8vZGF0YS5hcHBlbmQoZmlsZUlucHV0LmF0dHIoJ25hbWUnKSxmaWxlSW5wdXRbMF0uZmlsZXNbMF0pO1xyXG4gICAgICAgIGxldCBkYXRhPXt9O1xyXG4gICAgICAgIGRhdGEuX3Rva2VuPSQoJ2lucHV0W25hbWU9XCJfdG9rZW5cIl0nKS52YWwoKTtcclxuICAgICAgICBkYXRhLmF0dGFjaGVtbnRJZD1pZDtcclxuICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICB1cmw6YWpheFVybCxcclxuICAgICAgICAgICAgZGF0YTpkYXRhLFxyXG4gICAgICAgICAgICB0eXBlOidQT1NUJyxcclxuICAgICAgICAgICAgLy9jb250ZW50VHlwZTpmYWxzZSxcclxuICAgICAgICAgICAgLy9wcm9jZXNzRGF0YTogZmFsc2UsXHJcbiAgICAgICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3QuU3VwcGxpZXIuYXR0YWNobWVudD1yb290LlN1cHBsaWVyLmF0dGFjaG1lbnQuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUsaW5kZXgsYXJyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pZCE9PWRhdGEuZGF0YS4gICBhdHRhY2htZW50LmlkKjEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAgdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgICAgIC8vcm93LnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3QucmVzZXRBdHRhY2htZW50VGFibGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEucmVzcG9uc2VKU09OKTtcclxuICAgICAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKCk7XHJcbiAgICAgICAgICAgICAgICBhamF4RXJyb3JGaWVsZEhhbmRsZXIoZGF0YS5yZXNwb25zZUpTT04uZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMucmVzZXRBdHRhY2htZW50VGFibGU9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgJCgnLmF0dGFjaG1lbnRUYWJsZSB0Ym9keSB0cicpLnJlbW92ZSgpO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQXR0YWNobWVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY29udGFjdERlbGV0ZUNsaWNrPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgbGV0IHJvdz0kKHRoaXMpLmNsb3Nlc3QoJ3RyJyk7XHJcbiAgICAgICAgbGV0IGlkPXJvdy5maW5kKCdpbnB1dFtuYW1lPWNvbnRhY3RJZF0nKS52YWwoKTtcclxuICAgICAgICByb290LlN1cHBsaWVyLmNvbnRhY3Q9cm9vdC5TdXBwbGllci5jb250YWN0LmZpbHRlcihcclxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlLGluZGV4LGFycil7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuaWQhPT1pZCoxKXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHJvdy5yZW1vdmUoKTtcclxuICAgICAgICByb290LnJlc2V0Q29udGFjdFRhYmxlKCk7XHJcbiAgICB9XHJcbiAgICByb290LmdldENvbnRhY3RQb3B1cFdvcmtmbG93ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBjb250YWN0UG9wdXBXb3JrZmxvdztcclxuICAgIH1cclxuICAgIHJvb3Quc2V0Q29udGFjdFBvcHVwV29ya2Zsb3cgPSBmdW5jdGlvbiAoc3RhdHVzKSB7XHJcbiAgICAgICAgY29udGFjdFBvcHVwV29ya2Zsb3c9c3RhdHVzO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICB0aGlzLmNvbnRhY3RFZGl0Q2xpY2s9ZnVuY3Rpb24gKGV2ZW50KXtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMpO1xyXG4gICAgICAgIGxldCByb3c9JCh0aGlzKS5jbG9zZXN0KCd0cicpO1xyXG4gICAgICAgIGxldCBpZD1yb3cuZmluZCgnaW5wdXRbbmFtZT1jb250YWN0SWRdJykudmFsKCk7XHJcbiAgICAgICAgcm9vdC5zZXRDb250YWN0UG9wdXBXb3JrZmxvdygnZWRpdCcpO1xyXG4gICAgICAgIEFQUC5Db250YWN0UG9wVXAubG9hZERhdGEoaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ2V0U3VwcGxpZXI9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgcmV0dXJuIHJvb3QuU3VwcGxpZXI7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbnRhY3RBY3Rpb249ZnVuY3Rpb24gKGNvbnRhY3REYXRhKXtcclxuICAgICAgICBjb25zb2xlLmxvZygnbmFoIG1vc3Qga2VsbGVuZSBtZWcgdmFsYW1pdCBjc2luYWxuaS4nKVxyXG4gICAgICAgIGlmKHJvb3QuZ2V0Q29udGFjdFBvcHVwV29ya2Zsb3coKT09J25ldycpe1xyXG4gICAgICAgICAgICByb290LmFkZENvbnRhY3QoY29udGFjdERhdGEpO1xyXG4gICAgICAgIH1lbHNlIGlmKHJvb3QuZ2V0Q29udGFjdFBvcHVwV29ya2Zsb3coKT09J2VkaXQnKXtcclxuICAgICAgICAgICAgcm9vdC5lZGl0Q29udGFjdChjb250YWN0RGF0YS5pZCxjb250YWN0RGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZWRpdENvbnRhY3Q9ZnVuY3Rpb24gKGlkLGNvbnRhY3REYXRhKXtcclxuXHJcbiAgICAgICAgbGV0IG5ld0NvbnRhY3RzPVtdO1xyXG4gICAgICAgICQuZWFjaChyb290LlN1cHBsaWVyLmdldERhdGEoJ2NvbnRhY3QnKSxmdW5jdGlvbiAoaW5kZXgpe1xyXG4gICAgICAgICAgICBpZih0aGlzLmlkPT1pZCl7XHJcbiAgICAgICAgICAgICAgICBuZXdDb250YWN0cy5wdXNoKGNvbnRhY3REYXRhKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBuZXdDb250YWN0cy5wdXNoKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcm9vdC5TdXBwbGllci5jb250YWN0PW5ld0NvbnRhY3RzO1xyXG4gICAgICAgIHJvb3QucmVzZXRDb250YWN0VGFibGUoKTtcclxuICAgICAgICBUb2FzdC5jcmVhdGUoXCJLYXBjc29sYXQgYWRhdGFpIG3Ds2Rvc8OtdHZhIVwiLCBjb250YWN0RGF0YS5uYW1lK1wiIG5ldsWxIGthcG9jc29sYXR0YXJ0w7MgbcOzZG9zw610dmFcIiwgVE9BU1RfU1RBVFVTLlNVQ0NFU1MsNTAwMCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFkZENvbnRhY3Q9ZnVuY3Rpb24gKGNvbnRhY3REYXRhKXtcclxuICAgICAgICAvKlxyXG4gICAgICAgIGZlbCBrZWxsIHZlbm5pIGEgc29yYmFcclxuICAgICAgICAgKi9cclxuICAgICAgICByb290LlN1cHBsaWVyLmNvbnRhY3QucHVzaChjb250YWN0RGF0YSk7XHJcbiAgICAgICAgY29udGFjdERhdGEucm93TnVtPXJvb3QuU3VwcGxpZXIuY29udGFjdC5sZW5ndGg7XHJcbiAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInN1cHBsaWVyQ29udGFjdFRhYmxlUm93XCJdJykuaHRtbCgpXHJcbiAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsY29udGFjdERhdGEpO1xyXG4gICAgICAgICQoJy5jb250YWN0VGFibGUgdGJvZHknKS5hcHBlbmQocmVuZGVyKTtcclxuICAgICAgICByb290LmJpbmRDb250YWN0Q2xpY2tBY3Rpb24oKTtcclxuICAgICAgICBUb2FzdC5lbmFibGVUaW1lcnMoZmFsc2UpO1xyXG4gICAgICAgIFRvYXN0LmNyZWF0ZShcIkthcGNzb2xhdCB0YXJ0w7MgaG96esOhYWR2YSFcIiwgY29udGFjdERhdGEubmFtZStcIiBuZXbFsSBrYXBvY3NvbGF0dGFydMOzIGhvenrDoWFkdmFcIiwgVE9BU1RfU1RBVFVTLlNVQ0NFU1MsNTAwMCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMuY29uc3RydWN0KG9wdGlvbnMsU3VwcGxpZXJJdGVtKTtcclxufTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUEsSUFBRyxPQUFPQSxRQUFRLEtBQUcsV0FBVyxFQUFDO0VBQUEsSUFDdkJBLFNBQVEsMEJBQUFDLFVBQUE7SUFFVjtBQUNSO0FBQ0E7SUFDUSxTQUFBQyxVQUFhQyxJQUFJLEVBQUNDLE9BQU8sRUFBRTtNQUFBLElBQUFDLEtBQUE7TUFBQUMsZUFBQSxPQUFBSixTQUFBO01BQ3ZCRyxLQUFBLEdBQUFFLFVBQUEsT0FBQUwsU0FBQSxHQUFNQyxJQUFJLEVBQUNDLE9BQU87TUFDbEIsSUFBRyxPQUFPQyxLQUFBLENBQUtHLE9BQU8sS0FBSSxXQUFXLEVBQUM7UUFDbENILEtBQUEsQ0FBS0csT0FBTyxHQUFDLEVBQUU7TUFDbkI7TUFDQUMsT0FBTyxDQUFDQyxHQUFHLENBQUMsNkJBQTZCLENBQUM7TUFBQyxPQUFBTCxLQUFBO0lBQy9DO0lBQUNNLFNBQUEsQ0FBQVQsU0FBQSxFQUFBRCxVQUFBO0lBQUEsT0FBQVcsWUFBQSxDQUFBVixTQUFBO0VBQUEsRUFYa0JXLFNBQVM7RUFZL0I7RUFDREMsTUFBTSxDQUFDZCxRQUFRLEdBQUNBLFNBQVE7QUFDNUI7QUFHQWMsTUFBTSxDQUFDQyxhQUFhLEdBQUMsVUFBVVgsT0FBTyxFQUFDWSxZQUFZLEVBQUU7RUFDakQ7QUFDSjtBQUNBO0FBQ0E7RUFDSSxJQUFJQyxJQUFJLEdBQUc7SUFDUEMsS0FBSyxFQUFDLElBQUk7SUFDVkMsb0JBQW9CLEVBQUUsb0JBQW9CO0lBQzFDQyxRQUFRLEVBQUMsS0FBSztJQUNkQyxHQUFHLEVBQUM7TUFDQUMsbUJBQW1CLEVBQUMsRUFBRTtNQUN0QkMsS0FBSyxFQUFDLEVBQUU7TUFDUkMsSUFBSSxFQUFDLEVBQUU7TUFDUEMsSUFBSSxFQUFDLEVBQUU7TUFDUEMsTUFBTSxFQUFDLEVBQUU7TUFDVEMsS0FBSyxFQUFDLEVBQUU7TUFDUkMsTUFBTSxFQUFDLEVBQUU7TUFDVEMsT0FBTyxFQUFDLEVBQUU7TUFDVkMsVUFBVSxFQUFDLEVBQUU7TUFDYkMsVUFBVSxFQUFDO0lBQ2YsQ0FBQztJQUNEQyxTQUFTLEVBQUM7TUFDTkMsY0FBYyxFQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUs7SUFDNUIsQ0FBQztJQUNEQyxzQkFBc0IsRUFBQyxTQUF2QkEsc0JBQXNCQSxDQUFBLEVBQVksQ0FBQztFQUN2QyxDQUFDO0VBQ0QsSUFBSWxDLFFBQVEsR0FBRyxDQUFDLENBQUM7RUFDakIsSUFBSW1DLElBQUksR0FBRyxJQUFJO0VBQ2YsSUFBSUMsb0JBQW9CLEdBQUMsS0FBSztFQUM5QjtBQUNKO0FBQ0E7RUFDSSxJQUFJLENBQUNDLFNBQVMsR0FBRyxVQUFVakMsT0FBTyxFQUFDWSxZQUFZLEVBQUU7SUFDN0NQLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLGtDQUFrQyxDQUFDO0lBQy9DNEIsQ0FBQyxDQUFDQyxNQUFNLENBQUN0QixJQUFJLEVBQUViLE9BQU8sQ0FBQztJQUN2QixJQUFHLENBQUNZLFlBQVksRUFBQztNQUNiUCxPQUFPLENBQUNDLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQztNQUMzQyxJQUFHLENBQUM4QixHQUFHLENBQUN4QyxRQUFRLEVBQUM7UUFDYndDLEdBQUcsQ0FBQ3hDLFFBQVEsR0FBQyxJQUFJYyxNQUFNLENBQUNkLFFBQVEsQ0FBQyxDQUFDO01BQ3RDO01BQ0FtQyxJQUFJLENBQUNuQyxRQUFRLEdBQUN3QyxHQUFHLENBQUN4QyxRQUFRO0lBQzlCO0VBQ0osQ0FBQztFQUNELElBQUksQ0FBQ3lDLE9BQU8sR0FBQyxZQUFXO0lBQ3BCLE9BQU94QixJQUFJO0VBQ2YsQ0FBQztFQUVELElBQUksQ0FBQ3lCLDhCQUE4QixHQUFFLFVBQVVDLFdBQVcsRUFBRTtJQUN4RCxJQUFJeEMsSUFBSSxHQUFHLElBQUl5QyxRQUFRLENBQUNDLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDSCxXQUFXLENBQUMsQ0FBQztJQUM1RDtJQUNBLElBQUlJLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDakI1QyxJQUFJLENBQUM2QyxPQUFPLENBQUMsVUFBQ0MsS0FBSyxFQUFFQyxHQUFHLEVBQUs7TUFDekI7TUFDQSxJQUFHLENBQUNDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDTCxRQUFRLEVBQUVHLEdBQUcsQ0FBQyxFQUFDO1FBQzNCSCxRQUFRLENBQUNHLEdBQUcsQ0FBQyxHQUFHRCxLQUFLO1FBQ3JCO01BQ0o7TUFDQSxJQUFHLENBQUNJLEtBQUssQ0FBQ0MsT0FBTyxDQUFDUCxRQUFRLENBQUNHLEdBQUcsQ0FBQyxDQUFDLEVBQUM7UUFDN0JILFFBQVEsQ0FBQ0csR0FBRyxDQUFDLEdBQUcsQ0FBQ0gsUUFBUSxDQUFDRyxHQUFHLENBQUMsQ0FBQztNQUNuQztNQUNBSCxRQUFRLENBQUNHLEdBQUcsQ0FBQyxDQUFDSyxJQUFJLENBQUNOLEtBQUssQ0FBQztJQUM3QixDQUFDLENBQUM7SUFFRlgsQ0FBQyxDQUFDSyxXQUFXLEdBQUMsd0JBQXdCLENBQUMsQ0FBQ2EsSUFBSSxDQUFDLFlBQVc7TUFDcEQsSUFBR1QsUUFBUSxDQUFDVCxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNtQixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBQztRQUM5QlYsUUFBUSxDQUFDVCxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNtQixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBQ1YsUUFBUSxDQUFDVCxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNtQixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDLFNBQVMsRUFBQyxFQUFFLENBQUM7TUFDdkY7SUFDSixDQUFDLENBQUM7SUFDRjs7SUFHQTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBRVEsT0FBT1gsUUFBUTtFQUNuQixDQUFDO0VBRUQsSUFBSSxDQUFDWSwyQkFBMkIsR0FBRyxVQUFVQyxlQUFlLEVBQUU7SUFDMUQsSUFBSUMsUUFBUSxHQUFDLElBQUlqQixRQUFRLENBQUNOLENBQUMsQ0FBQ3NCLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hEdEIsQ0FBQyxDQUFDa0IsSUFBSSxDQUFDSyxRQUFRLENBQUNDLE1BQU0sQ0FBQyxjQUFjLENBQUMsRUFBQyxVQUFTWixHQUFHLEVBQUNELEtBQUssRUFBQztNQUN0RFksUUFBUSxDQUFDRSxNQUFNLENBQUMsZ0JBQWdCLEVBQUNkLEtBQUssQ0FBQztJQUMzQyxDQUFDLENBQUM7SUFDRlgsQ0FBQyxDQUFDa0IsSUFBSSxDQUFDSyxRQUFRLENBQUNDLE1BQU0sQ0FBQyxjQUFjLENBQUMsRUFBQyxVQUFTWixHQUFHLEVBQUNELEtBQUssRUFBQztNQUN0RFksUUFBUSxDQUFDRSxNQUFNLENBQUMsZ0JBQWdCLEVBQUNkLEtBQUssQ0FBQztJQUMzQyxDQUFDLENBQUM7SUFDRlgsQ0FBQyxDQUFDa0IsSUFBSSxDQUFDSyxRQUFRLENBQUNDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxFQUFDLFVBQVNaLEdBQUcsRUFBQ0QsS0FBSyxFQUFDO01BQ3pEWSxRQUFRLENBQUNFLE1BQU0sQ0FBQyxtQkFBbUIsRUFBQ2QsS0FBSyxDQUFDO0lBQzlDLENBQUMsQ0FBQztJQUNGWCxDQUFDLENBQUNrQixJQUFJLENBQUNLLFFBQVEsQ0FBQ0MsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFDLFVBQVNaLEdBQUcsRUFBQ0QsS0FBSyxFQUFDO01BQ25EWSxRQUFRLENBQUNFLE1BQU0sQ0FBQyxhQUFhLEVBQUNkLEtBQUssQ0FBQztJQUN4QyxDQUFDLENBQUM7SUFFRlksUUFBUSxDQUFDRSxNQUFNLENBQUMsUUFBUSxFQUFDekIsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMwQixHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRXZEMUIsQ0FBQyxDQUFDc0IsZUFBZSxHQUFDLHdCQUF3QixDQUFDLENBQUNKLElBQUksQ0FBQyxZQUFXO01BQ3hELElBQUlTLFFBQVEsR0FBQzNCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ21CLElBQUksQ0FBQyxNQUFNLENBQUM7TUFDakMsSUFBR0ksUUFBUSxDQUFDSyxHQUFHLENBQUNELFFBQVEsQ0FBQyxFQUFDO1FBQ3RCSixRQUFRLENBQUNNLEdBQUcsQ0FBQ0YsUUFBUSxFQUFDSixRQUFRLENBQUNLLEdBQUcsQ0FBQ0QsUUFBUSxDQUFDLENBQUNQLE9BQU8sQ0FBQyxTQUFTLEVBQUMsRUFBRSxDQUFDLENBQUM7TUFDdkU7SUFDSixDQUFDLENBQUM7SUFFRixPQUFPRyxRQUFRO0VBQ25CLENBQUM7RUFFRCxJQUFJLENBQUNPLGVBQWUsR0FBQyxVQUFVQyxLQUFLLEVBQUU7SUFDbENDLEtBQUssQ0FBQyxjQUFjLENBQUM7SUFDckIsSUFBSVYsZUFBZSxHQUFDM0MsSUFBSSxDQUFDRSxvQkFBb0IsR0FBQyxnQkFBZ0I7SUFDOURrRCxLQUFLLENBQUNFLGNBQWMsQ0FBQyxDQUFDO0lBQ3ZCLElBQUlqQyxDQUFDLENBQUNzQixlQUFlLEdBQUMsOEJBQThCLENBQUMsQ0FBQ0ksR0FBRyxDQUFDLENBQUMsSUFBRSxDQUFDLElBQUkxQixDQUFDLENBQUNzQixlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ1ksYUFBYSxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7TUFDOUcvRCxPQUFPLENBQUNDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQztNQUM5QjJELEtBQUssQ0FBQ0ksZUFBZSxDQUFDLENBQUM7TUFDdkI7SUFDSixDQUFDLE1BQU07TUFDSGhFLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLGNBQWMsQ0FBQztNQUMzQjtJQUNKO0lBQ0EsSUFBSW1ELFFBQVEsR0FBQzFCLElBQUksQ0FBQ3dCLDJCQUEyQixDQUFDQyxlQUFlLENBQUM7SUFJOUQsSUFBSWMsT0FBTyxHQUFDekQsSUFBSSxDQUFDSSxHQUFHLENBQUNNLEtBQUs7SUFDMUIsSUFBSWdELFVBQVUsR0FBQyxNQUFNO0lBQ3JCLElBQUd4QyxJQUFJLENBQUNuQyxRQUFRLENBQUM0RSxFQUFFLEVBQUM7TUFDaEJGLE9BQU8sR0FBQ3pELElBQUksQ0FBQ0ksR0FBRyxDQUFDTyxNQUFNLENBQUM4QixPQUFPLENBQUMsTUFBTSxFQUFDdkIsSUFBSSxDQUFDbkMsUUFBUSxDQUFDNEUsRUFBRSxDQUFDO01BQ3hEO01BQ0E7TUFDQWYsUUFBUSxDQUFDRSxNQUFNLENBQUMsU0FBUyxFQUFDLEtBQUssQ0FBQztJQUNwQztJQUVBTyxLQUFLLENBQUNLLFVBQVUsQ0FBQztJQUNqQkwsS0FBSyxDQUFDVCxRQUFRLENBQUM7SUFFZnZCLENBQUMsQ0FBQ3VDLElBQUksQ0FBQztNQUNIQyxHQUFHLEVBQUNKLE9BQU87TUFDWHZFLElBQUksRUFBQzBELFFBQVE7TUFDYmtCLElBQUksRUFBQ0osVUFBVTtNQUNmSyxXQUFXLEVBQUMsS0FBSztNQUNqQkMsV0FBVyxFQUFFLEtBQUs7TUFDbEJDLE9BQU8sRUFBRTtRQUNMLGNBQWMsRUFBRTVDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDMEIsR0FBRyxDQUFDO01BQ2xELENBQUM7TUFFRG1CLE9BQU8sRUFBQyxTQUFSQSxPQUFPQSxDQUFXaEYsSUFBSSxFQUFDO1FBQ25CbUUsS0FBSyxDQUFDbkUsSUFBSSxDQUFDO1FBQ1gsSUFBR0EsSUFBSSxDQUFDZ0YsT0FBTyxJQUFFLElBQUksRUFBQztVQUVsQjtVQUNBbEUsSUFBSSxDQUFDZSxTQUFTLENBQUNDLGNBQWMsR0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUM7VUFDekNtRCxLQUFLLENBQUMxRCxNQUFNLENBQUMsbUJBQW1CLEVBQUVtQyxRQUFRLENBQUNLLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBQyw0QkFBNEIsRUFBRW1CLFlBQVksQ0FBQ0MsT0FBTyxFQUFDLElBQUksQ0FBQztVQUMvRzlDLEdBQUcsQ0FBQytDLGVBQWUsQ0FBQ3RFLElBQUksQ0FBQ0ksR0FBRyxDQUFDRSxLQUFLLEdBQUMsU0FBUyxFQUFDWSxJQUFJLENBQUNxRCxZQUFZLENBQUM7UUFDbkU7TUFDSjtJQUNKLENBQUMsQ0FBQztFQUNOLENBQUM7RUFDRCxJQUFJLENBQUNDLGtCQUFrQixHQUFDLFlBQVk7SUFDaENuQixLQUFLLENBQUMsb0JBQW9CLENBQUM7SUFDM0I3RCxPQUFPLENBQUNDLEdBQUcsQ0FBQ1YsUUFBUSxDQUFDO0lBQ3JCLElBQUk0RCxlQUFlLEdBQUMzQyxJQUFJLENBQUNFLG9CQUFvQixHQUFDLGdCQUFnQjtJQUM5RCxJQUFJdUUsU0FBUyxHQUFDLENBQ1YsTUFBTSxFQUFDLFlBQVksRUFBQyxRQUFRLEVBQzVCLFlBQVksRUFBQyxhQUFhLEVBQUMsU0FBUyxFQUFDLGdCQUFnQixFQUFDLE9BQU8sRUFBQyxLQUFLLEVBQUMsc0JBQXNCLEVBQzFGLFFBQVEsRUFDUixXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxDQUNqRDtJQUNEcEQsQ0FBQyxDQUFDa0IsSUFBSSxDQUFDa0MsU0FBUyxFQUFDLFlBQVk7TUFDekIsSUFBRyxPQUFPdkQsSUFBSSxDQUFDbkMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFFLFdBQVcsRUFBQztRQUN2Q3NDLENBQUMsQ0FBQ3NCLGVBQWUsR0FBQyxjQUFjLEdBQUMsSUFBSSxHQUFDLEdBQUcsQ0FBQyxDQUFDSSxHQUFHLENBQUM3QixJQUFJLENBQUNuQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkVzQyxDQUFDLENBQUNzQixlQUFlLEdBQUMsaUJBQWlCLEdBQUMsSUFBSSxHQUFDLEdBQUcsQ0FBQyxDQUFDSSxHQUFHLENBQUM3QixJQUFJLENBQUNuQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDMUU7SUFDSixDQUFDLENBQUM7SUFDRixJQUFHLE9BQU9tQyxJQUFJLENBQUNuQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUUsV0FBVyxFQUFDO01BQ3pDc0MsQ0FBQyxDQUFDc0IsZUFBZSxHQUFDLHNCQUFzQixDQUFDLENBQUNJLEdBQUcsQ0FBQzdCLElBQUksQ0FBQ25DLFFBQVEsQ0FBQzJGLElBQUksQ0FBQztJQUNyRTtJQUNBLElBQUcsT0FBT3hELElBQUksQ0FBQ25DLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFFLFdBQVcsRUFBQztNQUN4RHNDLENBQUMsQ0FBQ3NCLGVBQWUsR0FBQyx5Q0FBeUMsR0FBQ3pCLElBQUksQ0FBQ25DLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFDLEdBQUcsQ0FBQyxDQUFDNEYsSUFBSSxDQUFDLFNBQVMsRUFBQyxJQUFJLENBQUM7SUFDOUg7SUFDQXRELENBQUMsQ0FBQ3NCLGVBQWUsR0FBQyxvQ0FBb0MsR0FBQ3pCLElBQUksQ0FBQ25DLFFBQVEsQ0FBQzZGLE1BQU0sR0FBQyxHQUFHLENBQUMsQ0FBQ0MsS0FBSyxDQUFDLENBQUM7SUFDeEZ4RCxDQUFDLENBQUNzQixlQUFlLEdBQUMsMkNBQTJDLEdBQUN6QixJQUFJLENBQUNuQyxRQUFRLENBQUMrRixhQUFhLEdBQUMsR0FBRyxDQUFDLENBQUNELEtBQUssQ0FBQyxDQUFDO0lBQ3RHeEQsQ0FBQyxDQUFDc0IsZUFBZSxHQUFDLGdEQUFnRCxHQUFDekIsSUFBSSxDQUFDbkMsUUFBUSxDQUFDZ0csa0JBQWtCLEdBQUMsR0FBRyxDQUFDLENBQUNGLEtBQUssQ0FBQyxDQUFDO0lBQ2hILElBQUlHLFlBQVksR0FBQyxFQUFFO0lBQ25CM0QsQ0FBQyxDQUFDa0IsSUFBSSxDQUFDckIsSUFBSSxDQUFDbkMsUUFBUSxDQUFDa0csYUFBYSxFQUFDLFlBQVk7TUFDM0NELFlBQVksQ0FBQzFDLElBQUksQ0FBQyxJQUFJLENBQUM0QyxJQUFJLENBQUM7SUFDaEMsQ0FBQyxDQUFDO0lBQ0Y3RCxDQUFDLENBQUNzQixlQUFlLEdBQUMseUJBQXlCLENBQUMsQ0FBQ0ksR0FBRyxDQUFDaUMsWUFBWSxDQUFDLENBQUNHLE1BQU0sQ0FBQyxDQUFDO0lBRXZFLElBQUlDLE9BQU8sR0FBQyxFQUFFO0lBQ2QvRCxDQUFDLENBQUNrQixJQUFJLENBQUNyQixJQUFJLENBQUNuQyxRQUFRLENBQUNxRyxPQUFPLEVBQUMsWUFBWTtNQUNyQ0EsT0FBTyxDQUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQzRDLElBQUksQ0FBQztJQUMzQixDQUFDLENBQUM7SUFDRjdELENBQUMsQ0FBQ3NCLGVBQWUsR0FBQyxpQkFBaUIsQ0FBQyxDQUFDSSxHQUFHLENBQUNxQyxPQUFPLENBQUMsQ0FBQ0QsTUFBTSxDQUFDLENBQUM7SUFFMUQsSUFBSUUsWUFBWSxHQUFDLEVBQUU7SUFDbkJoRSxDQUFDLENBQUNrQixJQUFJLENBQUNyQixJQUFJLENBQUNuQyxRQUFRLENBQUN1RyxhQUFhLEVBQUMsWUFBWTtNQUMzQ0QsWUFBWSxDQUFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQzRDLElBQUksQ0FBQztJQUNoQyxDQUFDLENBQUM7SUFDRjtJQUNBO0lBQ0E3RCxDQUFDLENBQUNrQixJQUFJLENBQUM4QyxZQUFZLEVBQUMsWUFBWTtNQUM1QmhFLENBQUMsQ0FBQyxlQUFlLEdBQUNBLENBQUMsQ0FBQ2tFLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBQyxJQUFJLENBQUMsQ0FBQ1osSUFBSSxDQUFFLFNBQVMsRUFBRSxJQUFLLENBQUM7SUFDMUUsQ0FBQyxDQUFDO0lBRUYsSUFBRyxPQUFPekQsSUFBSSxDQUFDbkMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFFLFdBQVcsSUFBS21DLElBQUksQ0FBQ25DLFFBQVEsQ0FBQyxVQUFVLENBQUUsRUFBQztNQUM1RXNDLENBQUMsQ0FBQ3NCLGVBQWUsR0FBQyxnQkFBZ0IsQ0FBQyxDQUFDSCxJQUFJLENBQUMsS0FBSyxFQUFDdEIsSUFBSSxDQUFDbkMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdFOztJQUVBO0lBQ0E7SUFDQTtFQUNKLENBQUM7RUFDRCxJQUFJLENBQUN5RyxlQUFlLEdBQUMsVUFBVXJHLE9BQU8sRUFBQ1ksWUFBWSxFQUFDO0lBQ2hEc0QsS0FBSyxDQUFDLHlCQUF5QixDQUFDO0lBQ2hDLElBQUcsQ0FBQzlCLEdBQUcsQ0FBQ2tFLFlBQVksRUFBQztNQUNqQmpHLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLHdCQUF3QixDQUFDO01BQ3JDOEIsR0FBRyxDQUFDa0UsWUFBWSxHQUFHLElBQUk1RixNQUFNLENBQUM0RixZQUFZLENBQUMsQ0FBQztJQUNoRCxDQUFDLE1BQUk7TUFDRGpHLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLDJCQUEyQixDQUFDO0lBQzVDO0lBQ0E4QixHQUFHLENBQUNrRSxZQUFZLENBQUNDLElBQUksQ0FBQztNQUNsQkMsTUFBTSxFQUFDLElBQUk7TUFDWEMsV0FBVyxFQUFDMUUsSUFBSSxDQUFDMkU7SUFDckIsQ0FBQyxDQUFDO0lBQ0YzRSxJQUFJLENBQUM0RSxhQUFhLENBQUMsQ0FBQztJQUNwQnpFLENBQUMsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDMEUsSUFBSSxDQUFDLE9BQU8sRUFBQyxZQUFXO01BQ3pEeEUsR0FBRyxDQUFDekIsYUFBYSxDQUFDa0csdUJBQXVCLENBQUMsS0FBSyxDQUFDO01BQ2hEekUsR0FBRyxDQUFDa0UsWUFBWSxDQUFDUSxTQUFTLENBQUMsQ0FBQztNQUM1QjFFLEdBQUcsQ0FBQ2tFLFlBQVksQ0FBQ2xGLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUMsQ0FBQztJQUNGYyxDQUFDLENBQUMseUJBQXlCLENBQUMsQ0FBQzZFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2xCOUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDK0UsU0FBUyxDQUFDO01BQ2xCLGNBQWMsRUFBRSxTQUFoQkMsWUFBY0EsQ0FBQSxFQUFjO1FBQ3hCN0csT0FBTyxDQUFDQyxHQUFHLENBQUM0QixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNuQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDckMsSUFBSW1DLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzBCLEdBQUcsQ0FBQyxDQUFDLENBQUN1RCxNQUFNLEdBQUcsQ0FBQyxJQUFJakYsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDbkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksRUFBRTtVQUMvRG1DLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ2tGLFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDbEM7TUFDSixDQUFDO01BQ0QsWUFBWSxFQUFFLFNBQWRDLFVBQVlBLENBQUEsRUFBYztRQUN0Qm5GLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ29GLFdBQVcsQ0FBQyxZQUFZLENBQUM7UUFDakNwRixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNrRixRQUFRLENBQUMsVUFBVSxDQUFDO01BQ2hDLENBQUM7TUFDRCxXQUFXLEVBQUUsU0FBYkcsU0FBV0EsQ0FBQSxFQUFjO1FBQ3JCbEgsT0FBTyxDQUFDQyxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ3RCNEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDb0YsV0FBVyxDQUFDLFlBQVksQ0FBQztNQUNyQztJQUNKLENBQUMsQ0FBQztJQUVGcEYsQ0FBQyxDQUFDLHlDQUF5QyxDQUFDLENBQUNzRixHQUFHLENBQUMsT0FBTyxDQUFDO0lBQ3pEdEYsQ0FBQyxDQUFDLHlDQUF5QyxDQUFDLENBQUN1RixFQUFFLENBQUMsT0FBTyxFQUFDMUYsSUFBSSxDQUFDaUMsZUFBZSxDQUFDO0lBQzdFakMsSUFBSSxDQUFDc0Qsa0JBQWtCLENBQUMsQ0FBQztJQUN6Qm5ELENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDd0YsT0FBTyxDQUFDLENBQUM7SUFDckN4RixDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQ3dGLE9BQU8sQ0FBQztNQUN4QkMsSUFBSSxFQUFFLElBQUk7TUFDVkMsU0FBUyxFQUFFLFNBQVhBLFNBQVNBLENBQVlDLE1BQU0sRUFBRTtRQUN6QixJQUFJQyxJQUFJLEdBQUc1RixDQUFDLENBQUM2RixJQUFJLENBQUNGLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDO1FBRTlCLElBQUlBLElBQUksS0FBSyxFQUFFLEVBQUU7VUFDYixPQUFPLElBQUk7UUFDZjtRQUVBLE9BQU87VUFDSHRELEVBQUUsRUFBRXNELElBQUk7VUFDUkUsSUFBSSxFQUFFRixJQUFJO1VBQ1ZHLE1BQU0sRUFBRSxJQUFJLENBQUM7UUFDakIsQ0FBQztNQUNMO0lBQ0osQ0FBQyxDQUFDOztJQUVGO0lBQ0EvRixDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQzhELE1BQU0sQ0FBQyxZQUFVO01BQ3ZDa0MsaUJBQWlCLENBQUMsSUFBSSxFQUFDckgsSUFBSSxDQUFDRSxvQkFBb0IsR0FBQyxhQUFhLENBQUM7SUFDbkUsQ0FBQyxDQUFDO0lBRUZtQixDQUFDLENBQUMsa0RBQWtELENBQUMsQ0FBQ3NGLEdBQUcsQ0FBQyxPQUFPLENBQUM7SUFDbEV0RixDQUFDLENBQUMsa0RBQWtELENBQUMsQ0FBQ3VGLEVBQUUsQ0FBQyxPQUFPLEVBQUMsWUFBWTtNQUN6RTtNQUNBO01BQ0F2RixDQUFDLENBQUMsb0RBQW9ELENBQUMsQ0FBQ3NELElBQUksQ0FBQyxTQUFTLEVBQUN0RCxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNpRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEcsQ0FBQyxDQUFDO0lBQ0ZwRyxJQUFJLENBQUNxRyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3ZCO0lBQ0FyRyxJQUFJLENBQUNzRyx5QkFBeUIsQ0FBQyxDQUFDO0lBQ2hDbkUsS0FBSyxDQUFDLHdCQUF3QixDQUFDO0VBQ25DLENBQUM7RUFFRCxJQUFJLENBQUNvRSx3QkFBd0IsR0FBQyxVQUFVQyxTQUFTLEVBQUM7SUFDOUM7QUFDUjtBQUNBO0FBQ0E7QUFDQTtJQUNRLElBQUdBLFNBQVMsRUFBQztNQUNUckcsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUNrRixRQUFRLENBQUMsUUFBUSxDQUFDO01BQzVDLElBQUdtQixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUNDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBQztRQUNyQnRHLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDOEYsSUFBSSxDQUFDTyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUNDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ3pDLElBQUksQ0FBQztNQUVwRTtNQUNBN0QsQ0FBQyxDQUFDLDZCQUE2QixDQUFDLENBQUNvRixXQUFXLENBQUMsUUFBUSxDQUFDO01BQ3REcEYsQ0FBQyxDQUFDLDJCQUEyQixDQUFDLENBQUNvRixXQUFXLENBQUMsUUFBUSxDQUFDO0lBQ3hELENBQUMsTUFBSTtNQUNEcEYsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLENBQUM4RixJQUFJLENBQUMsRUFBRSxDQUFDO01BQ3hDOUYsQ0FBQyxDQUFDLDZCQUE2QixDQUFDLENBQUM4RixJQUFJLENBQUMsRUFBRSxDQUFDO01BQ3pDOUYsQ0FBQyxDQUFDLDZCQUE2QixDQUFDLENBQUNrRixRQUFRLENBQUMsUUFBUSxDQUFDO01BQ25EbEYsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUNrRixRQUFRLENBQUMsUUFBUSxDQUFDO01BQ3hDbEYsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUNvRixXQUFXLENBQUMsUUFBUSxDQUFDO0lBQ25EO0VBQ0osQ0FBQztFQUVELElBQUksQ0FBQ2UseUJBQXlCLEdBQUMsWUFBWTtJQUN2Q2hJLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLDZDQUE2QyxDQUFDO0lBQzFELElBQUd5QixJQUFJLENBQUNuQyxRQUFRLENBQUM0RSxFQUFFLEVBQUM7TUFDaEJ0QyxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQ29GLFdBQVcsQ0FBQyxRQUFRLENBQUM7TUFDL0NwRixDQUFDLENBQUMsMEJBQTBCLENBQUMsQ0FBQ2tGLFFBQVEsQ0FBQyxRQUFRLENBQUM7SUFDcEQ7SUFHQWxGLENBQUMsQ0FBQ3JCLElBQUksQ0FBQ0Usb0JBQW9CLEdBQUMsZ0JBQWdCLENBQUMsQ0FBQ3lHLEdBQUcsQ0FBQyxPQUFPLENBQUM7SUFDMUR0RixDQUFDLENBQUNyQixJQUFJLENBQUNFLG9CQUFvQixHQUFDLGdCQUFnQixDQUFDLENBQUMwRyxFQUFFLENBQUMsT0FBTyxFQUFDLFlBQVc7TUFDaEVwSCxPQUFPLENBQUNvSSxLQUFLLENBQUMsZ0NBQWdDLENBQUM7TUFDL0MsSUFBSUYsU0FBUyxHQUFDckcsQ0FBQyxDQUFDLHdCQUF3QixDQUFDO01BQ3pDLElBQUdxRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUNDLEtBQUssQ0FBQ3JCLE1BQU0sR0FBQyxDQUFDLEVBQUM7UUFDM0JuQyxLQUFLLENBQUMxRCxNQUFNLENBQUMsT0FBTyxFQUFFLHFCQUFxQixFQUFFMkQsWUFBWSxDQUFDeUQsTUFBTSxFQUFFLEtBQUssQ0FBQztRQUN4RTtNQUNKO01BQ0FySSxPQUFPLENBQUNDLEdBQUcsQ0FBQzRCLENBQUMsQ0FBQ3JCLElBQUksQ0FBQ0Usb0JBQW9CLENBQUMsQ0FBQzRILElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3RFLElBQUk1SSxJQUFJLEdBQUUsSUFBSXlDLFFBQVEsQ0FBQ04sQ0FBQyxDQUFDckIsSUFBSSxDQUFDRSxvQkFBb0IsQ0FBQyxDQUFDNEgsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDakY1SSxJQUFJLENBQUM0RCxNQUFNLENBQUM0RSxTQUFTLENBQUNsRixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUNrRixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUNDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUV6RHpHLElBQUksQ0FBQ3VHLHdCQUF3QixDQUFDQyxTQUFTLENBQUM7TUFDeEMsSUFBSWpFLE9BQU8sR0FBQ3pELElBQUksQ0FBQ0ksR0FBRyxDQUFDUyxVQUFVLENBQUM0QixPQUFPLENBQUMsTUFBTSxFQUFDdkIsSUFBSSxDQUFDbkMsUUFBUSxDQUFDNEUsRUFBRSxDQUFDO01BRWhFbkUsT0FBTyxDQUFDdUksUUFBUSxDQUFDLENBQUM7TUFDbEIxRyxDQUFDLENBQUN1QyxJQUFJLENBQUM7UUFDSEMsR0FBRyxFQUFDSixPQUFPO1FBQ1h2RSxJQUFJLEVBQUNBLElBQUk7UUFDVDRFLElBQUksRUFBQyxNQUFNO1FBQ1hDLFdBQVcsRUFBQyxLQUFLO1FBQ2pCQyxXQUFXLEVBQUUsS0FBSztRQUNsQmdFLFVBQVUsRUFBRSxTQUFaQSxVQUFVQSxDQUFBLEVBQWEsQ0FFdkIsQ0FBQztRQUNEOUQsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQVdoRixJQUFJLEVBQUU7VUFDcEJNLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDUCxJQUFJLENBQUM7VUFDakIsSUFBR0EsSUFBSSxDQUFDZ0YsT0FBTyxJQUFFLElBQUksRUFBQztZQUNsQmhELElBQUksQ0FBQytHLGFBQWEsQ0FBQy9JLElBQUksQ0FBQ0EsSUFBSSxDQUFDZ0osVUFBVSxDQUFDO1lBQ3hDaEgsSUFBSSxDQUFDdUcsd0JBQXdCLENBQUMsQ0FBQztVQUNuQztRQUNKLENBQUM7UUFDRFUsS0FBSyxFQUFFLFNBQVBBLEtBQUtBLENBQVdqSixJQUFJLEVBQUU7VUFDbEJNLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDUCxJQUFJLENBQUNrSixZQUFZLENBQUM7VUFDOUJsSCxJQUFJLENBQUN1Ryx3QkFBd0IsQ0FBQyxDQUFDO1VBQy9CWSxxQkFBcUIsQ0FBQ25KLElBQUksQ0FBQ2tKLFlBQVksQ0FBQ0QsS0FBSyxDQUFDO1FBQ2xEO01BQ0osQ0FBQyxDQUFDO0lBRU4sQ0FBQyxDQUFDO0VBRU4sQ0FBQztFQUVELElBQUksQ0FBQ0csUUFBUSxHQUFDLFlBQVk7SUFDdEJqRixLQUFLLENBQUMsVUFBVSxDQUFDO0lBQ2pCOUIsR0FBRyxDQUFDK0MsZUFBZSxDQUFDdEUsSUFBSSxDQUFDSSxHQUFHLENBQUNLLE1BQU0sRUFBQ1MsSUFBSSxDQUFDcUgsZ0JBQWdCLENBQUM7RUFDOUQsQ0FBQztFQUVELElBQUksQ0FBQ0EsZ0JBQWdCLEdBQUMsWUFBWTtJQUM5QmxGLEtBQUssQ0FBQyxhQUFhLENBQUM7SUFDcEJuQyxJQUFJLENBQUNuQyxRQUFRLEdBQUMsSUFBSWMsTUFBTSxDQUFDZCxRQUFRLENBQUMsQ0FBQztJQUNuQ21DLElBQUksQ0FBQ3NFLGVBQWUsQ0FBQyxDQUFDO0VBQzFCLENBQUM7RUFDRCxJQUFJLENBQUNnRCxzQkFBc0IsR0FBQyxVQUFVQyxPQUFPLEVBQUNDLElBQUksRUFBRTtJQUNoRGxKLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLCtCQUErQixDQUFDO0lBQzVDO0lBQ0EsSUFBSWdFLE9BQU8sR0FBQ3pELElBQUksQ0FBQ0ksR0FBRyxDQUFDSSxJQUFJLENBQUNpQyxPQUFPLENBQUMsTUFBTSxFQUFDZ0csT0FBTyxDQUFDOUUsRUFBRSxDQUFDO0lBQ3BEcEMsR0FBRyxDQUFDK0MsZUFBZSxDQUFDYixPQUFPLEVBQUN2QyxJQUFJLENBQUNzRSxlQUFlLENBQUM7SUFDakRoRyxPQUFPLENBQUNDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQztFQUM3QyxDQUFDO0VBRUQsSUFBSSxDQUFDa0oseUJBQXlCLEdBQUMsVUFBVXZGLEtBQUssRUFBQztJQUMzQ0MsS0FBSyxDQUFDLDhCQUE4QixDQUFDO0lBQ3JDQSxLQUFLLENBQUNELEtBQUssQ0FBQztJQUNaQyxLQUFLLENBQUNELEtBQUssQ0FBQ2xFLElBQUksQ0FBQztJQUNqQm1DLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQ3VILEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDL0IsSUFBSWhHLFFBQVEsR0FBQyxDQUFDLENBQUM7SUFDZkEsUUFBUSxDQUFDaUcsTUFBTSxHQUFDN0ksSUFBSSxDQUFDQyxLQUFLO0lBQzFCLElBQUl3RCxPQUFPLEdBQUN6RCxJQUFJLENBQUNJLEdBQUcsQ0FBQ1EsT0FBTyxDQUFDNkIsT0FBTyxDQUFDLE1BQU0sRUFBQ1csS0FBSyxDQUFDbEUsSUFBSSxDQUFDeUUsRUFBRSxDQUFDO0lBQzFEZixRQUFRLENBQUNpRyxNQUFNLEdBQUN4SCxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQzBCLEdBQUcsQ0FBQyxDQUFDO0lBQzdDdkQsT0FBTyxDQUFDQyxHQUFHLENBQUNnRSxPQUFPLENBQUM7SUFDcEJqRSxPQUFPLENBQUNDLEdBQUcsQ0FBQ21ELFFBQVEsQ0FBQztJQUNyQixJQUFJa0csR0FBRyxHQUFDekgsQ0FBQyxDQUFDMEgsb0JBQW9CLENBQUMsQ0FBQ0MsU0FBUyxDQUFDLENBQUMsQ0FBQ0YsR0FBRyxDQUFDNUgsSUFBSSxDQUFDK0gsOEJBQThCLENBQUNDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsRzdILENBQUMsQ0FBQ3VDLElBQUksQ0FBQztNQUNIQyxHQUFHLEVBQUNKLE9BQU87TUFDWHZFLElBQUksRUFBQzBELFFBQVE7TUFDYnVHLE1BQU0sRUFBQyxRQUFRO01BQ2ZqRixPQUFPLEVBQUMsU0FBUkEsT0FBT0EsQ0FBV2hGLElBQUksRUFBQztRQUNuQixJQUFHQSxJQUFJLENBQUNnRixPQUFPLElBQUUsSUFBSSxFQUFDO1VBQ2xCNEUsR0FBRyxDQUFDTSxNQUFNLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUMsQ0FBQztVQUNuQm5JLElBQUksQ0FBQytILDhCQUE4QixHQUFDLEtBQUs7UUFDN0M7TUFDSjtJQUNKLENBQUMsQ0FBQztFQUVOLENBQUM7RUFDRCxJQUFJSyw0QkFBNEIsR0FBQyxLQUFLO0VBRXRDLElBQUksQ0FBQ0Msd0JBQXdCLEdBQUMsVUFBVWQsT0FBTyxFQUFDQyxJQUFJLEVBQUU7SUFDbERsSixPQUFPLENBQUNDLEdBQUcsQ0FBQyxpQ0FBaUMsQ0FBQztJQUM5Q3lCLElBQUksQ0FBQytILDhCQUE4QixHQUFDUCxJQUFJO0lBQ3hDckgsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDdUYsRUFBRSxDQUFDLGVBQWUsRUFBRSxVQUFVeEQsS0FBSyxFQUFFO01BQ25EO01BQ0E7TUFDQSxJQUFJd0YsS0FBSyxHQUFHdkgsQ0FBQyxDQUFDLElBQUksQ0FBQztNQUNuQnVILEtBQUssQ0FBQ2QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDWCxJQUFJLENBQUMsY0FBYyxDQUFDO01BQy9DeUIsS0FBSyxDQUFDZCxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUNYLElBQUksQ0FBQywrQkFBK0IsQ0FBQztNQUMvRHlCLEtBQUssQ0FBQ2QsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDbkIsR0FBRyxDQUFDLE9BQU8sQ0FBQztNQUNyQ2lDLEtBQUssQ0FBQ2QsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDbEIsRUFBRSxDQUFDLE9BQU8sRUFBQztRQUFDakQsRUFBRSxFQUFDOEUsT0FBTyxDQUFDOUU7TUFBRSxDQUFDLEVBQUN6QyxJQUFJLENBQUN5SCx5QkFBeUIsQ0FBQztJQUN2RixDQUFDLENBQUM7SUFDRnRILENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQ3VILEtBQUssQ0FBQyxNQUFNLENBQUM7RUFDbkMsQ0FBQztFQUVELElBQUksQ0FBQ1ksNkJBQTZCLEdBQUMsVUFBVXBHLEtBQUssRUFBQztJQUMvQ0MsS0FBSyxDQUFDLCtCQUErQixDQUFDO0lBQ3RDLElBQUlxRixJQUFJLEdBQUNySCxDQUFDLENBQUMrQixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUNxRyxhQUFhLENBQUM7SUFDbEMsSUFBSVgsR0FBRyxHQUFDekgsQ0FBQyxDQUFDMEgsb0JBQW9CLENBQUMsQ0FBQ0MsU0FBUyxDQUFDLENBQUMsQ0FBQ0YsR0FBRyxDQUFDSixJQUFJLENBQUNRLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuRSxJQUFJVCxPQUFPLEdBQUNLLEdBQUcsQ0FBQzVKLElBQUksQ0FBQyxDQUFDO0lBQ3RCLElBQUl3SyxVQUFVLEdBQUMsb0JBQW9CLEdBQUNoQixJQUFJLENBQUN4SixJQUFJLENBQUMsWUFBWSxDQUFDLENBQUN5SyxVQUFVLENBQUMsQ0FBQztJQUN4RSxJQUFJLE9BQU96SSxJQUFJLENBQUN3SSxVQUFVLENBQUMsS0FBSyxVQUFVLEVBQUU7TUFDeEMsT0FBT3hJLElBQUksQ0FBQ3dJLFVBQVUsQ0FBQyxDQUFDakIsT0FBTyxFQUFDQyxJQUFJLENBQUM7SUFDekM7RUFDSixDQUFDO0VBRUQsSUFBSSxDQUFDbkUsWUFBWSxHQUFHLFlBQXNCO0lBQUEsSUFBWnBGLE9BQU8sR0FBQXlLLFNBQUEsQ0FBQXRELE1BQUEsUUFBQXNELFNBQUEsUUFBQUMsU0FBQSxHQUFBRCxTQUFBLE1BQUMsQ0FBQyxDQUFDO0lBQ3BDdkcsS0FBSyxDQUFDLHlCQUF5QixDQUFDO0lBQ2hDMEYsb0JBQW9CLEdBQUMvSSxJQUFJLENBQUNFLG9CQUFvQixHQUFDLGFBQWEsQ0FBQyxDQUFDOztJQUU5RCxJQUFJNEosTUFBTSxHQUFDekksQ0FBQyxDQUFDMEgsb0JBQW9CLEdBQUMsV0FBVyxDQUFDLENBQUN6QyxNQUFNLENBQUMsQ0FBQztJQUN2RC9FLEdBQUcsQ0FBQ3dJLE9BQU8sQ0FBQztNQUNSQyxrQ0FBa0MsRUFBQzlJLElBQUksQ0FBQ29ILFFBQVE7TUFDaEQyQixxQ0FBcUMsRUFBQy9JLElBQUksQ0FBQ3NJO0lBRS9DLENBQUMsQ0FBQztJQUNGLElBQUl4SSxjQUFjLEdBQUNoQixJQUFJLENBQUNlLFNBQVMsQ0FBQ0MsY0FBYztJQUNoRCxJQUFHLE9BQU83QixPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBRSxXQUFXLEVBQUM7TUFDN0M2QixjQUFjLEdBQUM3QixPQUFPLENBQUMsZ0JBQWdCLENBQUM7SUFDNUM7SUFDQWtDLENBQUMsQ0FBQzBILG9CQUFvQixDQUFDLENBQUNDLFNBQVMsQ0FBRTtNQUMvQmtCLFFBQVEsRUFBRTtRQUNOckcsR0FBRyxFQUFFO01BQ1QsQ0FBQztNQUVEO01BQ0EsTUFBTSxFQUFFN0QsSUFBSSxDQUFDSSxHQUFHLENBQUNDLG1CQUFtQjtNQUNwQyxZQUFZLEVBQUUsQ0FDVjtRQUNJLFNBQVMsRUFBRXlKLE1BQU0sR0FBQyxDQUFDO1FBQ25CLFFBQVEsRUFBRSxTQUFWSyxNQUFRQSxDQUFhakwsSUFBSSxFQUFFNEUsSUFBSSxFQUFFZ0YsR0FBRyxFQUFHO1VBQ25DLElBQUlzQixPQUFPLEdBQUM3SSxHQUFHLENBQUM4SSwwQkFBMEIsQ0FBQyxDQUFDLEVBQUNULFNBQVMsQ0FBQztVQUN2RFEsT0FBTyxJQUFFN0ksR0FBRyxDQUFDK0kseUJBQXlCLENBQUMsQ0FBQyxFQUFDVixTQUFTLENBQUM7VUFDbkQsT0FBT1EsT0FBTztRQUNsQjtNQUNKLENBQUMsRUFDRDtRQUNJLFNBQVMsRUFBRSxDQUFDO1FBQ1osUUFBUSxFQUFFLFNBQVZELE1BQVFBLENBQWFqTCxJQUFJLEVBQUU0RSxJQUFJLEVBQUVnRixHQUFHLEVBQUc7VUFDbkMsT0FBT2hGLElBQUksS0FBSyxNQUFNLEdBQUc1RSxJQUFJLENBQUNxTCxRQUFRLENBQUMsQ0FBQyxHQUFHckwsSUFBSTtRQUNuRDtNQUNKO01BQ0E7TUFBQSxDQUNIO01BQ0RrTCxPQUFPLEVBQUM7UUFDSkEsT0FBTyxFQUFFLENBQ0wsT0FBTyxFQUFDLEtBQUssRUFDYjtVQUNJOUksTUFBTSxFQUFFLE9BQU87VUFDZjtVQUNBLE9BQU8sRUFBRSxtQkFBbUI7VUFDNUIsWUFBWSxFQUFFLGdCQUFnQjtVQUM5QmtKLFNBQVMsRUFBRTtRQUNmLENBQUMsRUFDRDs7UUFFQTtVQUNJckQsSUFBSSxFQUFFLGNBQWM7VUFDcEJzRCxTQUFTLEVBQUUseUJBQXlCO1VBQ3BDakksSUFBSSxFQUFDO1lBQ0Q7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtZQUU0QixNQUFNLEVBQUM7VUFDWCxDQUFDO1VBQ0RrRCxJQUFJLEVBQUUsU0FBTkEsSUFBSUEsQ0FBV2dGLEdBQUcsRUFBRWhDLElBQUksRUFBRWlDLE1BQU0sRUFBRTtZQUM5QnRKLENBQUMsQ0FBQ3FILElBQUksQ0FBQyxDQUFDakMsV0FBVyxDQUFDLFdBQVcsQ0FBQztVQUNwQyxDQUFDO1VBQ0RtRSxNQUFNLEVBQUUsU0FBUkEsTUFBTUEsQ0FBYUMsQ0FBQyxFQUFFQyxFQUFFLEVBQUVwQyxJQUFJLEVBQUVpQyxNQUFNLEVBQUc7WUFDckNwSixHQUFHLENBQUN5SSxrQ0FBa0MsQ0FBQ0osU0FBUyxDQUFDO1lBQ2pEO0FBQzVCO0FBQ0E7QUFDQTtVQUV3QjtRQUNKLENBQUM7TUFFVCxDQUFDO01BQ0QsU0FBUyxFQUFFLENBQ1A7UUFBRSxNQUFNLEVBQUU7TUFBSyxDQUFDLEVBQ2hCO1FBQUUsTUFBTSxFQUFFO01BQU8sQ0FBQyxFQUNsQjtRQUFFLE1BQU0sRUFBRTtNQUFhLENBQUMsRUFDeEI7UUFBRSxNQUFNLEVBQUU7TUFBUyxDQUFDLEVBQ3BCO1FBQUUsTUFBTSxFQUFFO01BQWEsQ0FBQyxFQUN4QixJQUFJLENBQ1A7TUFDRCxPQUFPLEVBQUU1SSxjQUFjO01BQ3ZCLFdBQVcsRUFBRSxJQUFJO01BQ2pCLGNBQWMsRUFBRSxTQUFoQitKLFlBQWNBLENBQVlDLFFBQVEsRUFBRztRQUNqQ3pKLEdBQUcsQ0FBQzBKLHFCQUFxQixDQUFDbEMsb0JBQW9CLENBQUM7TUFDbkQ7SUFDSixDQUFFLENBQUM7SUFDSDFGLEtBQUssQ0FBQyxjQUFjLENBQUM7RUFDekIsQ0FBQztFQUVELElBQUksQ0FBQzZILGVBQWUsR0FBQyxZQUFXO0lBQzVCN0gsS0FBSyxDQUFDLGlCQUFpQixDQUFDO0lBQ3hCLElBQUk4SCxZQUFZLEdBQUNDLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFDbkMvSixDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQzBCLEdBQUcsQ0FBQyxXQUFXLEdBQUNvSSxZQUFZLENBQUM7SUFDbkQ5SixDQUFDLENBQUMsd0JBQXdCLENBQUMsQ0FBQzBCLEdBQUcsQ0FBQyxJQUFJLEdBQUNvSSxZQUFZLENBQUM7SUFDbEQ5SixDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQzBCLEdBQUcsQ0FBQyxJQUFJLEdBQUNvSSxZQUFZLENBQUM7SUFDOUM5SixDQUFDLENBQUMsd0JBQXdCLENBQUMsQ0FBQzBCLEdBQUcsQ0FBQyxXQUFXLEdBQUNvSSxZQUFZLEdBQUMsZ0JBQWdCLENBQUM7SUFDMUU5SixDQUFDLENBQUMseUJBQXlCLENBQUMsQ0FBQzBCLEdBQUcsQ0FBQyxZQUFZLEdBQUNvSSxZQUFZLEdBQUMsZ0JBQWdCLENBQUM7SUFDNUU5SixDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQzBCLEdBQUcsQ0FBQyxxQkFBcUIsR0FBQ29JLFlBQVksQ0FBQztJQUNoRTlKLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDMEIsR0FBRyxDQUFDLGdCQUFnQixHQUFDb0ksWUFBWSxDQUFDO0lBQ2xFOUosQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMwQixHQUFHLENBQUMsY0FBYyxDQUFDO0lBQzFDMUIsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMwQixHQUFHLENBQUMsYUFBYSxDQUFDO0lBQ3ZDMUIsQ0FBQyxDQUFDLGtDQUFrQyxDQUFDLENBQUMwQixHQUFHLENBQUMsY0FBYyxDQUFDO0lBQ3pEMUIsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMwQixHQUFHLENBQUMsYUFBYSxHQUFDb0ksWUFBWSxDQUFDO0VBRTVELENBQUM7RUFDRCxJQUFJLENBQUNoTCxRQUFRLEdBQUMsWUFBWTtJQUN0QlgsT0FBTyxDQUFDNkQsS0FBSyxDQUFDLG1CQUFtQixDQUFDO0lBQ2xDbkMsSUFBSSxDQUFDbkMsUUFBUSxHQUFHLElBQUljLE1BQU0sQ0FBQ2QsUUFBUSxDQUFDO01BQ2hDLFNBQVMsRUFBQyxDQUNOO1FBQ0k0RSxFQUFFLEVBQUM7TUFDUCxDQUFDLEVBQ0Q7UUFDSUEsRUFBRSxFQUFDO01BQ1A7TUFDQTtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQVBnQjtJQVVSLENBQUMsQ0FBQztJQUNGM0QsSUFBSSxDQUFDaUIsc0JBQXNCLEdBQUNDLElBQUksQ0FBQ2dLLGVBQWU7SUFDaEQzSixHQUFHLENBQUMrQyxlQUFlLENBQUN0RSxJQUFJLENBQUNJLEdBQUcsQ0FBQ0ssTUFBTSxFQUFDUyxJQUFJLENBQUNzRSxlQUFlLENBQUM7RUFDN0QsQ0FBQztFQUNELElBQUksQ0FBQ0UsSUFBSSxHQUFDLFVBQVV2RyxPQUFPLEVBQUNZLFlBQVksRUFBQztJQUNyQ3NCLENBQUMsQ0FBQ0MsTUFBTSxDQUFDdEIsSUFBSSxFQUFFYixPQUFPLENBQUM7SUFFdkIsSUFBR2EsSUFBSSxDQUFDRyxRQUFRLEVBQUM7TUFDYixPQUFPZSxJQUFJLENBQUNmLFFBQVEsQ0FBQyxDQUFDO0lBQzFCO0lBQ0EsSUFBR0osWUFBWSxFQUFDO01BQ1ptQixJQUFJLENBQUNuQyxRQUFRLEdBQUNnQixZQUFZO0lBQzlCO0lBQ0FtQixJQUFJLENBQUNxRCxZQUFZLENBQUMsQ0FBQztFQUN2QixDQUFDO0VBRUQsSUFBSSxDQUFDZ0QsZ0JBQWdCLEdBQUMsWUFBVztJQUM3QixJQUFJOEQsTUFBTSxHQUFDLENBQUM7SUFDWjdMLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLHFCQUFxQixDQUFDO0lBQ2xDNEIsQ0FBQyxDQUFDa0IsSUFBSSxDQUFDckIsSUFBSSxDQUFDbkMsUUFBUSxDQUFDdU0sT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFDLFlBQVc7TUFDbEQsSUFBSUMsY0FBYyxHQUFDLElBQUk7TUFDdkJBLGNBQWMsQ0FBQ0YsTUFBTSxHQUFDQSxNQUFNO01BQzVCRyxJQUFJLEdBQUMsSUFBSUMsSUFBSSxDQUFDRixjQUFjLENBQUNHLFVBQVUsQ0FBQztNQUN4Q0gsY0FBYyxDQUFDQyxJQUFJLEdBQUNBLElBQUksQ0FBQ0csY0FBYyxDQUFDLENBQUM7TUFDekNKLGNBQWMsQ0FBQ0ssSUFBSSxHQUFDTCxjQUFjLENBQUNNLFNBQVMsR0FBQyxHQUFHLEdBQUNOLGNBQWMsQ0FBQ08sUUFBUTtNQUN4RSxJQUFJQyxRQUFRLEdBQUMxSyxDQUFDLENBQUMsa0RBQWtELENBQUMsQ0FBQzJLLElBQUksQ0FBQyxDQUFDO01BQ3pFLElBQUk3QixNQUFNLEdBQUM4QixRQUFRLENBQUM5QixNQUFNLENBQUM0QixRQUFRLEVBQUNSLGNBQWMsQ0FBQztNQUNuRGxLLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDeUIsTUFBTSxDQUFDcUgsTUFBTSxDQUFDO01BQzFDa0IsTUFBTSxFQUFFO0lBQ1osQ0FBQyxDQUFDO0lBQ0ZuSyxJQUFJLENBQUNnTCx5QkFBeUIsQ0FBQyxDQUFDO0VBQ3BDLENBQUM7RUFFRCxJQUFJLENBQUNqRSxhQUFhLEdBQUMsVUFBVXNELGNBQWMsRUFBQztJQUN4Qy9MLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDOEwsY0FBYyxDQUFDO0lBQzNCLElBQUk1SSxlQUFlLEdBQUMzQyxJQUFJLENBQUNFLG9CQUFvQixHQUFDLGdCQUFnQjtJQUM5RGdCLElBQUksQ0FBQ25DLFFBQVEsQ0FBQ21KLFVBQVUsQ0FBQzVGLElBQUksQ0FBQ2lKLGNBQWMsQ0FBQztJQUM3Q0EsY0FBYyxDQUFDRixNQUFNLEdBQUNuSyxJQUFJLENBQUNuQyxRQUFRLENBQUNtSixVQUFVLENBQUM1QixNQUFNO0lBQ3JELElBQUl5RixRQUFRLEdBQUMxSyxDQUFDLENBQUMsa0RBQWtELENBQUMsQ0FBQzJLLElBQUksQ0FBQyxDQUFDO0lBQ3pFLElBQUk3QixNQUFNLEdBQUM4QixRQUFRLENBQUM5QixNQUFNLENBQUM0QixRQUFRLEVBQUNSLGNBQWMsQ0FBQztJQUNuRGxLLENBQUMsQ0FBQ3NCLGVBQWUsR0FBQyx5QkFBeUIsQ0FBQyxDQUFDRyxNQUFNLENBQUNxSCxNQUFNLENBQUM7SUFDM0RqSixJQUFJLENBQUNpTCxzQkFBc0IsQ0FBQyxDQUFDO0lBQzdCaEksS0FBSyxDQUFDaUksWUFBWSxDQUFDLEtBQUssQ0FBQztJQUN6QmpJLEtBQUssQ0FBQzFELE1BQU0sQ0FBQyxpQkFBaUIsRUFBRThLLGNBQWMsQ0FBQ2MsaUJBQWlCLEdBQUMsaUJBQWlCLEVBQUVqSSxZQUFZLENBQUNDLE9BQU8sRUFBQyxJQUFJLENBQUM7RUFDbEgsQ0FBQztFQUdELElBQUksQ0FBQ2lJLGlCQUFpQixHQUFDLFlBQVc7SUFDOUJqTCxDQUFDLENBQUMsd0JBQXdCLENBQUMsQ0FBQytILE1BQU0sQ0FBQyxDQUFDO0lBQ3BDbEksSUFBSSxDQUFDNEUsYUFBYSxDQUFDLENBQUM7RUFDeEIsQ0FBQztFQUNELElBQUksQ0FBQ0EsYUFBYSxHQUFDLFlBQVc7SUFDMUIsSUFBSXVGLE1BQU0sR0FBQyxDQUFDO0lBQ1o3TCxPQUFPLENBQUNDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztJQUNoQzRCLENBQUMsQ0FBQ2tCLElBQUksQ0FBQ3JCLElBQUksQ0FBQ25DLFFBQVEsQ0FBQ3VNLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBQyxZQUFXO01BQy9DLElBQUlpQixXQUFXLEdBQUMsSUFBSTtNQUNwQkEsV0FBVyxDQUFDbEIsTUFBTSxHQUFDQSxNQUFNO01BQ3pCO01BQ0EsSUFBSVUsUUFBUSxHQUFDMUssQ0FBQyxDQUFDLCtDQUErQyxDQUFDLENBQUMySyxJQUFJLENBQUMsQ0FBQztNQUN0RSxJQUFJN0IsTUFBTSxHQUFDOEIsUUFBUSxDQUFDOUIsTUFBTSxDQUFDNEIsUUFBUSxFQUFDUSxXQUFXLENBQUM7TUFDaERsTCxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQ3lCLE1BQU0sQ0FBQ3FILE1BQU0sQ0FBQztNQUN2Q2tCLE1BQU0sRUFBRTtJQUNaLENBQUMsQ0FBQztJQUNGbkssSUFBSSxDQUFDaUwsc0JBQXNCLENBQUMsQ0FBQztFQUNqQyxDQUFDO0VBRUQsSUFBSSxDQUFDQSxzQkFBc0IsR0FBRSxZQUFXO0lBQ3BDLElBQUl6RCxJQUFJLEdBQUNySCxDQUFDLENBQUMsNkJBQTZCLENBQUM7SUFDekNxSCxJQUFJLENBQUM4RCxNQUFNLENBQUMsT0FBTyxDQUFDO0lBQ3BCOUQsSUFBSSxDQUFDM0MsSUFBSSxDQUFDLE9BQU8sRUFBQzdFLElBQUksQ0FBQ3VMLGtCQUFrQixDQUFDO0lBRTFDL0QsSUFBSSxHQUFDckgsQ0FBQyxDQUFDLDJCQUEyQixDQUFDO0lBQ25DcUgsSUFBSSxDQUFDOEQsTUFBTSxDQUFDLE9BQU8sQ0FBQztJQUNwQjlELElBQUksQ0FBQzNDLElBQUksQ0FBQyxPQUFPLEVBQUM3RSxJQUFJLENBQUN3TCxnQkFBZ0IsQ0FBQztFQUU1QyxDQUFDO0VBRUQsSUFBSSxDQUFDUix5QkFBeUIsR0FBQyxZQUFXO0lBQ3RDLElBQUl4RCxJQUFJLEdBQUNySCxDQUFDLENBQUMsZ0NBQWdDLENBQUM7SUFDNUNxSCxJQUFJLENBQUM4RCxNQUFNLENBQUMsT0FBTyxDQUFDO0lBQ3BCOUQsSUFBSSxDQUFDM0MsSUFBSSxDQUFDLE9BQU8sRUFBQzdFLElBQUksQ0FBQ3lMLHFCQUFxQixDQUFDO0VBQ2pELENBQUM7RUFDRCxJQUFJQyxvQkFBb0IsR0FBQyxLQUFLO0VBQzlCLElBQUksQ0FBQ0QscUJBQXFCLEdBQUMsVUFBVXZKLEtBQUssRUFBQztJQUN2QyxJQUFJMEYsR0FBRyxHQUFDekgsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDd0wsT0FBTyxDQUFDLElBQUksQ0FBQztJQUM3QixJQUFJbEosRUFBRSxHQUFDbUYsR0FBRyxDQUFDaEIsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUMvRSxHQUFHLENBQUMsQ0FBQztJQUNqRCxJQUFJVSxPQUFPLEdBQUN6RCxJQUFJLENBQUNJLEdBQUcsQ0FBQ1UsVUFBVSxDQUFDMkIsT0FBTyxDQUFDLE1BQU0sRUFBQ3ZCLElBQUksQ0FBQ25DLFFBQVEsQ0FBQzRFLEVBQUUsQ0FBQztJQUNoRTtJQUNBO0lBQ0EsSUFBSXpFLElBQUksR0FBQyxDQUFDLENBQUM7SUFDWEEsSUFBSSxDQUFDMkosTUFBTSxHQUFDeEgsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUMwQixHQUFHLENBQUMsQ0FBQztJQUMzQzdELElBQUksQ0FBQzROLFlBQVksR0FBQ25KLEVBQUU7SUFDcEJ0QyxDQUFDLENBQUN1QyxJQUFJLENBQUM7TUFDSEMsR0FBRyxFQUFDSixPQUFPO01BQ1h2RSxJQUFJLEVBQUNBLElBQUk7TUFDVDRFLElBQUksRUFBQyxNQUFNO01BQ1g7TUFDQTtNQUNBa0UsVUFBVSxFQUFFLFNBQVpBLFVBQVVBLENBQUEsRUFBYSxDQUV2QixDQUFDO01BQ0Q5RCxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBV2hGLElBQUksRUFBRTtRQUNwQk0sT0FBTyxDQUFDQyxHQUFHLENBQUNQLElBQUksQ0FBQztRQUNqQixJQUFHQSxJQUFJLENBQUNnRixPQUFPLElBQUUsSUFBSSxFQUFDO1VBQ2xCaEQsSUFBSSxDQUFDbkMsUUFBUSxDQUFDbUosVUFBVSxHQUFDaEgsSUFBSSxDQUFDbkMsUUFBUSxDQUFDbUosVUFBVSxDQUFDNkUsTUFBTSxDQUNwRCxVQUFVL0ssS0FBSyxFQUFDMUIsS0FBSyxFQUFDME0sR0FBRyxFQUFDO1lBQ3RCLElBQUloTCxLQUFLLENBQUMyQixFQUFFLEtBQUd6RSxJQUFJLENBQUNBLElBQUksQ0FBSWdKLFVBQVUsQ0FBQ3ZFLEVBQUUsR0FBQyxDQUFDLEVBQUM7Y0FDeEMsT0FBUSxJQUFJO1lBQ2hCO1lBQ0EsT0FBTyxLQUFLO1VBQ2hCLENBQ0osQ0FBQztVQUNEO0FBQ3BCO1VBQ29CO1VBQ0F6QyxJQUFJLENBQUMrTCxvQkFBb0IsQ0FBQyxDQUFDO1FBQy9CO01BQ0osQ0FBQztNQUNEOUUsS0FBSyxFQUFFLFNBQVBBLEtBQUtBLENBQVdqSixJQUFJLEVBQUU7UUFDbEJNLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDUCxJQUFJLENBQUNrSixZQUFZLENBQUM7UUFDOUJsSCxJQUFJLENBQUN1Ryx3QkFBd0IsQ0FBQyxDQUFDO1FBQy9CWSxxQkFBcUIsQ0FBQ25KLElBQUksQ0FBQ2tKLFlBQVksQ0FBQ0QsS0FBSyxDQUFDO01BQ2xEO0lBQ0osQ0FBQyxDQUFDO0VBRU4sQ0FBQztFQUdELElBQUksQ0FBQzhFLG9CQUFvQixHQUFDLFlBQVc7SUFDakM1TCxDQUFDLENBQUMsMkJBQTJCLENBQUMsQ0FBQytILE1BQU0sQ0FBQyxDQUFDO0lBQ3ZDbEksSUFBSSxDQUFDcUcsZ0JBQWdCLENBQUMsQ0FBQztFQUMzQixDQUFDO0VBRUQsSUFBSSxDQUFDa0Ysa0JBQWtCLEdBQUMsVUFBVXJKLEtBQUssRUFBQztJQUNwQyxJQUFJMEYsR0FBRyxHQUFDekgsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDd0wsT0FBTyxDQUFDLElBQUksQ0FBQztJQUM3QixJQUFJbEosRUFBRSxHQUFDbUYsR0FBRyxDQUFDaEIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMvRSxHQUFHLENBQUMsQ0FBQztJQUM5QzdCLElBQUksQ0FBQ25DLFFBQVEsQ0FBQ1EsT0FBTyxHQUFDMkIsSUFBSSxDQUFDbkMsUUFBUSxDQUFDUSxPQUFPLENBQUN3TixNQUFNLENBQzlDLFVBQVUvSyxLQUFLLEVBQUMxQixLQUFLLEVBQUMwTSxHQUFHLEVBQUM7TUFDdEIsSUFBSWhMLEtBQUssQ0FBQzJCLEVBQUUsS0FBR0EsRUFBRSxHQUFDLENBQUMsRUFBQztRQUNoQixPQUFRLElBQUk7TUFDaEI7TUFDQSxPQUFPLEtBQUs7SUFDaEIsQ0FDSixDQUFDO0lBQ0RtRixHQUFHLENBQUNNLE1BQU0sQ0FBQyxDQUFDO0lBQ1psSSxJQUFJLENBQUNvTCxpQkFBaUIsQ0FBQyxDQUFDO0VBQzVCLENBQUM7RUFDRHBMLElBQUksQ0FBQ2dNLHVCQUF1QixHQUFHLFlBQVk7SUFDdkMsT0FBTy9MLG9CQUFvQjtFQUMvQixDQUFDO0VBQ0RELElBQUksQ0FBQzhFLHVCQUF1QixHQUFHLFVBQVVtSCxNQUFNLEVBQUU7SUFDN0NoTSxvQkFBb0IsR0FBQ2dNLE1BQU07RUFDL0IsQ0FBQztFQUdELElBQUksQ0FBQ1QsZ0JBQWdCLEdBQUMsVUFBVXRKLEtBQUssRUFBQztJQUNsQztJQUNBLElBQUkwRixHQUFHLEdBQUN6SCxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUN3TCxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzdCLElBQUlsSixFQUFFLEdBQUNtRixHQUFHLENBQUNoQixJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQy9FLEdBQUcsQ0FBQyxDQUFDO0lBQzlDN0IsSUFBSSxDQUFDOEUsdUJBQXVCLENBQUMsTUFBTSxDQUFDO0lBQ3BDekUsR0FBRyxDQUFDa0UsWUFBWSxDQUFDMkgsUUFBUSxDQUFDekosRUFBRSxDQUFDO0VBQ2pDLENBQUM7RUFFRCxJQUFJLENBQUMwSixXQUFXLEdBQUMsWUFBVztJQUN4QixPQUFPbk0sSUFBSSxDQUFDbkMsUUFBUTtFQUN4QixDQUFDO0VBQ0QsSUFBSSxDQUFDOEcsYUFBYSxHQUFDLFVBQVUwRyxXQUFXLEVBQUM7SUFDckMvTSxPQUFPLENBQUNDLEdBQUcsQ0FBQyx3Q0FBd0MsQ0FBQztJQUNyRCxJQUFHeUIsSUFBSSxDQUFDZ00sdUJBQXVCLENBQUMsQ0FBQyxJQUFFLEtBQUssRUFBQztNQUNyQ2hNLElBQUksQ0FBQ29NLFVBQVUsQ0FBQ2YsV0FBVyxDQUFDO0lBQ2hDLENBQUMsTUFBSyxJQUFHckwsSUFBSSxDQUFDZ00sdUJBQXVCLENBQUMsQ0FBQyxJQUFFLE1BQU0sRUFBQztNQUM1Q2hNLElBQUksQ0FBQ3FNLFdBQVcsQ0FBQ2hCLFdBQVcsQ0FBQzVJLEVBQUUsRUFBQzRJLFdBQVcsQ0FBQztJQUNoRDtFQUNKLENBQUM7RUFFRCxJQUFJLENBQUNnQixXQUFXLEdBQUMsVUFBVTVKLEVBQUUsRUFBQzRJLFdBQVcsRUFBQztJQUV0QyxJQUFJaUIsV0FBVyxHQUFDLEVBQUU7SUFDbEJuTSxDQUFDLENBQUNrQixJQUFJLENBQUNyQixJQUFJLENBQUNuQyxRQUFRLENBQUN1TSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUMsVUFBVWhMLEtBQUssRUFBQztNQUNwRCxJQUFHLElBQUksQ0FBQ3FELEVBQUUsSUFBRUEsRUFBRSxFQUFDO1FBQ1g2SixXQUFXLENBQUNsTCxJQUFJLENBQUNpSyxXQUFXLENBQUM7TUFDakMsQ0FBQyxNQUFJO1FBQ0RpQixXQUFXLENBQUNsTCxJQUFJLENBQUMsSUFBSSxDQUFDO01BQzFCO0lBQ0osQ0FBQyxDQUFDO0lBQ0ZwQixJQUFJLENBQUNuQyxRQUFRLENBQUNRLE9BQU8sR0FBQ2lPLFdBQVc7SUFDakN0TSxJQUFJLENBQUNvTCxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3hCbkksS0FBSyxDQUFDMUQsTUFBTSxDQUFDLDZCQUE2QixFQUFFOEwsV0FBVyxDQUFDckgsSUFBSSxHQUFDLGlDQUFpQyxFQUFFZCxZQUFZLENBQUNDLE9BQU8sRUFBQyxJQUFJLENBQUM7RUFDOUgsQ0FBQztFQUNELElBQUksQ0FBQ2lKLFVBQVUsR0FBQyxVQUFVZixXQUFXLEVBQUM7SUFDbEM7QUFDUjtBQUNBO0lBQ1FyTCxJQUFJLENBQUNuQyxRQUFRLENBQUNRLE9BQU8sQ0FBQytDLElBQUksQ0FBQ2lLLFdBQVcsQ0FBQztJQUN2Q0EsV0FBVyxDQUFDbEIsTUFBTSxHQUFDbkssSUFBSSxDQUFDbkMsUUFBUSxDQUFDUSxPQUFPLENBQUMrRyxNQUFNO0lBQy9DLElBQUl5RixRQUFRLEdBQUMxSyxDQUFDLENBQUMsK0NBQStDLENBQUMsQ0FBQzJLLElBQUksQ0FBQyxDQUFDO0lBQ3RFLElBQUk3QixNQUFNLEdBQUM4QixRQUFRLENBQUM5QixNQUFNLENBQUM0QixRQUFRLEVBQUNRLFdBQVcsQ0FBQztJQUNoRGxMLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDeUIsTUFBTSxDQUFDcUgsTUFBTSxDQUFDO0lBQ3ZDakosSUFBSSxDQUFDaUwsc0JBQXNCLENBQUMsQ0FBQztJQUM3QmhJLEtBQUssQ0FBQ2lJLFlBQVksQ0FBQyxLQUFLLENBQUM7SUFDekJqSSxLQUFLLENBQUMxRCxNQUFNLENBQUMsNEJBQTRCLEVBQUU4TCxXQUFXLENBQUNySCxJQUFJLEdBQUMsaUNBQWlDLEVBQUVkLFlBQVksQ0FBQ0MsT0FBTyxFQUFDLElBQUksQ0FBQztFQUM3SCxDQUFDO0VBR0QsSUFBSSxDQUFDakQsU0FBUyxDQUFDakMsT0FBTyxFQUFDWSxZQUFZLENBQUM7QUFDeEMsQ0FBQyIsImlnbm9yZUxpc3QiOltdLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvYWRtaW4vc3VwcGxpZXIuanMiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/admin/supplier.js\n\n}"); +eval("{function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nif (typeof Supplier === 'undefined') {\n var _Supplier = /*#__PURE__*/function (_DataModel) {\n /*\r\n * Constructor\r\n */\n function _Supplier(data, options) {\n var _this;\n _classCallCheck(this, _Supplier);\n _this = _callSuper(this, _Supplier, [data, options]);\n if (typeof _this.contact === \"undefined\") {\n _this.contact = [];\n }\n console.log('Supplier constructor called');\n return _this;\n }\n _inherits(_Supplier, _DataModel);\n return _createClass(_Supplier);\n }(DataModel);\n ;\n window.Supplier = _Supplier;\n}\nwindow.SupplierAdmin = function (options, SupplierItem) {\n /*\r\n * Variables accessible\r\n * in the class\r\n */\n var Opts = {\n token: null,\n containerCssSelector: '.containerSupplier',\n testMode: false,\n URL: {\n getDataTableContent: '',\n index: '',\n show: '',\n edit: '',\n create: '',\n store: '',\n update: '',\n destroy: '',\n attachFile: '',\n detachFile: ''\n },\n dataTable: {\n orderDirective: [1, 'asc']\n },\n onAfterInitViewDetails: function onAfterInitViewDetails() {}\n };\n var Supplier = {};\n var root = this;\n var contactPopupWorkflow = 'new';\n /*\r\n * Constructor\r\n */\n this.construct = function (options, SupplierItem) {\n console.log('SupplierAdmin constructor called');\n $.extend(Opts, options);\n if (!SupplierItem) {\n console.log('supplier letre kellet hozni ');\n if (!APP.Supplier) {\n APP.Supplier = new window.Supplier();\n }\n root.Supplier = APP.Supplier;\n }\n };\n this.getOpts = function () {\n return Opts;\n };\n this.formDataToDataObjectAPICallOld = function (CSSSelector) {\n var data = new FormData(document.querySelector(CSSSelector));\n //let formJSON = Object.fromEntries(data.entries());\n var formJSON = {};\n data.forEach(function (value, key) {\n // Reflect.has in favor of: formJSON.hasOwnProperty(key)\n if (!Reflect.has(formJSON, key)) {\n formJSON[key] = value;\n return;\n }\n if (!Array.isArray(formJSON[key])) {\n formJSON[key] = [formJSON[key]];\n }\n formJSON[key].push(value);\n });\n $(CSSSelector + ' input[data-inputmask]').each(function () {\n if (formJSON[$(this).attr('name')]) {\n formJSON[$(this).attr('name')] = formJSON[$(this).attr('name')].replace(/[_ ]+$/g, \"\");\n }\n });\n //formJSON.productGroups=$(\".productCategorySelect\").select2().val();\n\n /*Multiselect or checkbox to array:\r\n ajaxData['productGroup']=$(\".productCategorySelect\").select2().val();\r\n formJSON.multiselectName = data.getAll('multiselectName');\r\n $.each(formJSON, function (item, value) {\r\n formJSON[$.lcFirst(item.replace('contact', ''))] = value;\r\n delete formJSON[item];\r\n });\r\n if(formJSON.phone){\r\n formJSON.phone=formJSON.phone.replaceAll('_','');\r\n }\r\n if(formJSON.email){\r\n formJSON.email=formJSON.email.replaceAll('_','');\r\n }\r\n */\n return formJSON;\n };\n this.formDataToDataObjectAPICall = function (CSSSelectorForm) {\n var ajaxData = new FormData($(CSSSelectorForm)[0]);\n $.each(ajaxData.getAll('profitCenter'), function (key, value) {\n ajaxData.append('profitCenter[]', value);\n });\n $.each(ajaxData.getAll('productGroup'), function (key, value) {\n ajaxData.append('productGroup[]', value);\n });\n $.each(ajaxData.getAll('supplierService'), function (key, value) {\n ajaxData.append('supplierService[]', value);\n });\n $.each(ajaxData.getAll('contactId'), function (key, value) {\n ajaxData.append('contactId[]', value);\n });\n ajaxData.append('_token', $('input[name=_token]').val());\n $(CSSSelectorForm + ' input[data-inputmask]').each(function () {\n var indexKey = $(this).attr('name');\n if (ajaxData.get(indexKey)) {\n ajaxData.set(indexKey, ajaxData.get(indexKey).replace(/[_ ]+$/g, \"\"));\n }\n });\n return ajaxData;\n };\n this.clickSaveButton = function (event) {\n debug('Save clicked');\n var CSSSelectorForm = Opts.containerCssSelector + ' .supplierForm';\n event.preventDefault();\n if ($(CSSSelectorForm + ' input[name=\"canSeeInOrder\"]').val() == 1 && $(CSSSelectorForm)[0].checkValidity() === false) {\n console.log('validaton false');\n event.stopPropagation();\n return;\n } else {\n console.log('validaton ok');\n //do your ajax submition here\n }\n var ajaxData = root.formDataToDataObjectAPICall(CSSSelectorForm);\n var ajaxUrl = Opts.URL.store;\n var ajaxMethod = \"POST\";\n if (root.Supplier.id) {\n ajaxUrl = Opts.URL.update.replace('%id%', root.Supplier.id);\n //ajaxMethod=\"PUT\";\n //ajaxData=new FormData($(CSSSelectorForm)[0]);\n ajaxData.append('_method', 'PUT');\n }\n debug(ajaxMethod);\n debug(ajaxData);\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n type: ajaxMethod,\n contentType: false,\n processData: false,\n headers: {\n 'X-CSRF-TOKEN': $('input[name=\"_token\"]').val()\n },\n success: function success(data) {\n debug('d1: Save success ');\n debug(data);\n if (data.success == true) {\n //Opts.onAfterInitViewDetails=root.autofillDetails;\n Opts.dataTable.orderDirective = [0, 'desc'];\n Toast.create(\"Sikeres rögzítés!\", ajaxData.get('name') + \" nevű beszálllító elmentve\", TOAST_STATUS.SUCCESS, 5000);\n APP.loadMainContent(Opts.URL.index + '?init=0', root.initViewList);\n }\n }\n });\n };\n this.setDetailsViewData = function () {\n debug('setDetailsViewData');\n console.log(Supplier);\n var CSSSelectorForm = Opts.containerCssSelector + ' .supplierForm';\n var needToSet = ['name', 'hooreycaId', 'nameId', 'orderEmail', 'orderEmail2', 'address', 'mailingAddress', 'phone', 'fax', 'customerServicePhone', 'name22', 'openHours', 'ordersDeadline', 'minOrderValue'];\n $.each(needToSet, function () {\n if (typeof root.Supplier[this] != 'undefined') {\n $(CSSSelectorForm + ' input[name=' + this + ']').val(root.Supplier[this]);\n $(CSSSelectorForm + ' textarea[name=' + this + ']').val(root.Supplier[this]);\n }\n });\n if (typeof root.Supplier['note'] != 'undefined') {\n $(CSSSelectorForm + ' textarea[name=note]').val(root.Supplier.note);\n }\n if (typeof root.Supplier['emailAttachmentType'] != 'undefined') {\n $(CSSSelectorForm + ' input[name=emailAttachmentType][value=' + root.Supplier['emailAttachmentType'] + ']').prop('checked', true);\n }\n $(CSSSelectorForm + ' *[data-toggle=canSee][data-title=' + root.Supplier.canSee + ']').click();\n $(CSSSelectorForm + ' *[data-toggle=canSeeInOrder][data-title=' + root.Supplier.canSeeInOrder + ']').click();\n $(CSSSelectorForm + ' *[data-toggle=hooreycaDataActive][data-title=' + root.Supplier.hooreycaDataActive + ']').click();\n var productGroup = [];\n $.each(root.Supplier.product_group, function () {\n productGroup.push(this.name);\n });\n $(CSSSelectorForm + ' .productCategorySelect').val(productGroup).change();\n var service = [];\n $.each(root.Supplier.service, function () {\n service.push(this.name);\n });\n $(CSSSelectorForm + ' .serviceSelect').val(service).change();\n var profitCenter = [];\n $.each(root.Supplier.profit_center, function () {\n profitCenter.push(this.name);\n });\n //$(CSSSelectorForm+' .profitCenterSelect').val(profitCenter).change();\n //debug(profitCenter);\n $.each(profitCenter, function () {\n $('input[value=\"' + $.escapeSelector(this) + '\"]').prop(\"checked\", true);\n });\n if (typeof root.Supplier['logoFile'] != 'undefined' && root.Supplier['logoFile']) {\n $(CSSSelectorForm + ' img.imageLogo').attr('src', root.Supplier['logoFile']);\n }\n\n //debug(APP.SupplierAdmin.formDataToDataObjectAPICall('.supplierForm')['productGroup']);\n //$('[name=productGroup]').val(['Büféáru_édesipari_termékek','Tojás']).change();\n //root.setDetailsViewData();\n };\n this.initViewDetails = function (options, SupplierItem) {\n debug('**call initViewDetails ');\n if (!APP.ContactPopUp) {\n console.log('nincs APP.ContactPopUp');\n APP.ContactPopUp = new window.ContactPopUp();\n } else {\n console.log('mar van APP.ContactPopUp');\n }\n APP.ContactPopUp.init({\n active: true,\n onAfterSave: root.contactAction\n });\n root.renderContact();\n $('.supplierForm .buttonNewContact').bind('click', function () {\n APP.SupplierAdmin.setContactPopupWorkflow('new');\n APP.ContactPopUp.clearData();\n APP.ContactPopUp.show();\n });\n $('[data-toggle=\"tooltip\"]').tooltip();\n initRadioButtons();\n $(\":input\").inputmask({\n \"onincomplete\": function onincomplete() {\n console.log($(this).data('required'));\n if ($(this).val().length > 0 || $(this).data('required') === true) {\n $(this).addClass('is-invalid');\n }\n },\n \"oncomplete\": function oncomplete() {\n $(this).removeClass('is-invalid');\n $(this).addClass('is-valid');\n },\n \"oncleared\": function oncleared() {\n console.log('cleared');\n $(this).removeClass('is-invalid');\n }\n });\n $('form.supplierForm button.FormSaveButton').off('click');\n $('form.supplierForm button.FormSaveButton').on('click', root.clickSaveButton);\n root.setDetailsViewData();\n $(\".productCategorySelect\").select2();\n $(\".serviceSelect\").select2({\n tags: true,\n createTag: function createTag(params) {\n var term = $.trim(params.term);\n if (term === '') {\n return null;\n }\n return {\n id: term,\n text: term,\n newTag: true // add additional parameters\n };\n }\n });\n\n //$(\".profitCenterSelect\").select2();\n $(\"input[name=logoFile]\").change(function () {\n setImageFromLocal(this, Opts.containerCssSelector + ' .imageLogo');\n });\n $('form.supplierForm .profitCenterSelectCheckboxAll').off('click');\n $('form.supplierForm .profitCenterSelectCheckboxAll').on('click', function () {\n //console.log();\n //let checked=$(this).is(\":checked\")\n $('form.supplierForm input.profitCenterSelectCheckbox').prop('checked', $(this).is(\":checked\"));\n });\n root.renderAttachment();\n //Opts.onAfterInitViewDetails();\n root.initFileAttachmentFeature();\n debug('**end initViewDetails ');\n };\n this.selectedUploadFileToggle = function (fileInput) {\n /*\r\n console.log(fileInput.attr('name'));\r\n console.log(fileInput[0].files[0]);\r\n console.log(fileInput[0].files[0].name);\r\n */\n if (fileInput) {\n $('.containerFileUpload').addClass('d-none');\n if (fileInput[0].files[0]) {\n $('.containerUploadedFileName').text(fileInput[0].files[0].name);\n }\n $('.containerFileUploadStarted').removeClass('d-none');\n $('.containerUploadedSpinner').removeClass('d-none');\n } else {\n $('.containerUploadedFileName').text('');\n $('.custom-file-label.selected').text('');\n $('.containerFileUploadStarted').addClass('d-none');\n $('.uploadStatusRow').addClass('d-none');\n $('.containerFileUpload').removeClass('d-none');\n }\n };\n this.initFileAttachmentFeature = function () {\n console.log('-------initFileAttachmentFeature-----------');\n if (root.Supplier.id) {\n $('.containerFileUpload').removeClass('d-none');\n $('.containerFileUploadNone').addClass('d-none');\n }\n $(Opts.containerCssSelector + ' .buttonUpload').off('click');\n $(Opts.containerCssSelector + ' .buttonUpload').on('click', function () {\n console.group('-------buttonUpload-----------');\n var fileInput = $('#inputGroupAttacheFile');\n if (fileInput[0].files.length < 1) {\n Toast.create(\"Hiba!\", 'Vállaszon ki fájlt!', TOAST_STATUS.DANGER, 10000);\n return;\n }\n console.log($(Opts.containerCssSelector).find('form.supplierForm')[0]);\n var data = new FormData($(Opts.containerCssSelector).find('form.supplierForm')[0]);\n data.append(fileInput.attr('name'), fileInput[0].files[0]);\n root.selectedUploadFileToggle(fileInput);\n var ajaxUrl = Opts.URL.attachFile.replace('%id%', root.Supplier.id);\n console.groupEnd();\n $.ajax({\n url: ajaxUrl,\n data: data,\n type: 'POST',\n contentType: false,\n processData: false,\n beforeSend: function beforeSend() {},\n success: function success(data) {\n console.log(data);\n if (data.success == true) {\n root.addAttachment(data.data.attachment);\n root.selectedUploadFileToggle();\n }\n },\n error: function error(data) {\n console.log(data.responseJSON);\n root.selectedUploadFileToggle();\n ajaxErrorFieldHandler(data.responseJSON.error);\n }\n });\n });\n };\n this.clickNew = function () {\n debug('clickNew');\n APP.loadMainContent(Opts.URL.create, root.clickNewCallBack);\n };\n this.clickNewCallBack = function () {\n debug('callbackNew');\n root.Supplier = new window.Supplier();\n root.initViewDetails();\n };\n this.datatableRowActionEdit = function (rowData, node) {\n console.log('datatableRowActionEdit Called');\n //Opts.onAfterInitViewDetails=root.autofillDetails;\n var ajaxUrl = Opts.URL.edit.replace('%id%', rowData.id);\n APP.loadMainContent(ajaxUrl, root.initViewDetails);\n console.log('datatableRowActionEdit End');\n };\n this.clickOrderDeleteConfirmed = function (event) {\n debug('clickSupplierDeleteConfirmed');\n debug(event);\n debug(event.data);\n $('#dialogModal').modal('hide');\n var ajaxData = {};\n ajaxData._token = Opts.token;\n var ajaxUrl = Opts.URL.destroy.replace('%id%', event.data.id);\n ajaxData._token = $('input[name=_token]').val();\n console.log(ajaxUrl);\n console.log(ajaxData);\n var row = $(dataTableCSSSelector).DataTable().row(root.dadatatableRowActionCallerNode.parents('tr'));\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n method: \"DELETE\",\n success: function success(data) {\n if (data.success == true) {\n row.remove().draw();\n root.dadatatableRowActionCallerNode = false;\n }\n }\n });\n };\n var datatableRowActionCallerNode = false;\n this.datatableRowActionDelete = function (rowData, node) {\n console.log('datatableRowActionDelete Called');\n root.dadatatableRowActionCallerNode = node;\n $('#dialogModal').on('show.bs.modal', function (event) {\n // If necessary, you could initiate an AJAX request here (and then do the updating in a callback).\n // Update the modal's content. We'll use jQuery here, but you could use a data binding library or other methods instead.\n var modal = $(this);\n modal.find('.modal-title').text('Megerősítés ');\n modal.find('.modal-body').text('Biztosan törli a beszállítót?');\n modal.find('.buttonYes').off('click');\n modal.find('.buttonYes').on('click', {\n id: rowData.id\n }, root.clickOrderDeleteConfirmed);\n });\n $('#dialogModal').modal('show');\n };\n this.datatableRowActionButtonClick = function (event) {\n debug('datatableRowActionButtonClick');\n var node = $(event[0].currentTarget);\n var row = $(dataTableCSSSelector).DataTable().row(node.parents('tr'));\n var rowData = row.data();\n var actionName = 'datatableRowAction' + node.data('buttontype').capitalize();\n if (typeof root[actionName] === \"function\") {\n return root[actionName](rowData, node);\n }\n };\n this.initViewList = function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n debug('listview inicialization');\n dataTableCSSSelector = Opts.containerCssSelector + ' .dataTable'; //\n\n var colNum = $(dataTableCSSSelector + ' thead th').length; //buttons insert position need\n APP.setOpts({\n datatableActionButtonClickCallBack: root.clickNew,\n datatableRowActionButtonClickCallBack: root.datatableRowActionButtonClick\n });\n var orderDirective = Opts.dataTable.orderDirective;\n if (typeof options['orderDirective'] != 'undefined') {\n orderDirective = options['orderDirective'];\n }\n $(dataTableCSSSelector).DataTable({\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n //\"ajax\": \"{{asset('exapmle2.json')}}\",\n \"ajax\": Opts.URL.getDataTableContent,\n \"columnDefs\": [{\n \"targets\": colNum - 1,\n \"render\": function render(data, type, row) {\n var buttons = APP.datatableAddRowTrashButton(0, arguments);\n buttons += APP.datatableAddRowEditButton(0, arguments);\n return buttons;\n }\n }, {\n \"targets\": 1,\n \"render\": function render(data, type, row) {\n return type === \"sort\" ? data.latinise() : data;\n }\n }\n //{ \"visible\": false, \"targets\": [ 0 ] }\n ],\n buttons: {\n buttons: ['excel', 'pdf', {\n extend: 'print',\n //text: 'Print current page',\n 'title': 'title custom text',\n 'messageTop': 'Message On Top',\n autoPrint: true\n }, /**/\n\n {\n text: 'Új felvitele',\n className: 'btn btn-success newItem',\n attr: {\n /*\r\n data:{\r\n a:1,\r\n b:2\r\n }\r\n */\n 'data': 'newItem'\n },\n init: function init(api, node, config) {\n $(node).removeClass('ui-button');\n },\n action: function action(e, dt, node, config) {\n APP.datatableActionButtonClickCallBack(arguments);\n /* console.log(e);\r\n console.log(dt);\r\n console.log(node);\r\n console.log(config);*/\n }\n }]\n },\n \"columns\": [{\n \"data\": \"id\"\n }, {\n \"data\": \"name\"\n }, {\n \"data\": \"hooreycaId\"\n }, {\n \"data\": \"nameId\"\n }, {\n \"data\": \"created_at\"\n }, null],\n \"order\": orderDirective,\n \"stateSave\": true,\n \"drawCallback\": function drawCallback(settings) {\n APP.datatableAddRowAction(dataTableCSSSelector);\n }\n });\n debug('listview end');\n };\n this.autofillDetails = function () {\n debug('nyeresre allunk');\n var randomNumber = getRandomInt(9999);\n $('input[name=name]').val('Beszalító' + randomNumber);\n $('input[name=hooreycaId]').val('hb' + randomNumber);\n $('input[name=nameId]').val('be' + randomNumber);\n $('input[name=orderEmail]').val('kapcsolat' + randomNumber + '@beszallito.hu');\n $('input[name=orderEmail2]').val('informacio' + randomNumber + '@beszallito.hu');\n $('input[name=address]').val('8989 Supplier utca ' + randomNumber);\n $('input[name=mailingAddress]').val('8989 Postai út' + randomNumber);\n $('input[name=phone]').val('+36301234567');\n $('input[name=fax]').val('36308889999');\n $('input[name=customerServicePhone]').val('+36761234444');\n $('textarea[name=note]').val('Megjegyzem ' + randomNumber);\n };\n this.testMode = function () {\n console.debug('!!!!testmode !!!!');\n root.Supplier = new window.Supplier({\n 'contact': [{\n id: 2\n }, {\n id: 3\n }\n /*\r\n {\r\n id:3,\r\n name:'Kósa Veronika',\r\n email:'szamlazas4@funkcio.hu',\r\n phone:'{{formatterPhoneNumber(\"+36204589180\")}}'\r\n }\r\n */]\n });\n Opts.onAfterInitViewDetails = root.autofillDetails;\n APP.loadMainContent(Opts.URL.create, root.initViewDetails);\n };\n this.init = function (options, SupplierItem) {\n $.extend(Opts, options);\n if (Opts.testMode) {\n return root.testMode();\n }\n if (SupplierItem) {\n root.Supplier = SupplierItem;\n }\n root.initViewList();\n };\n this.renderAttachment = function () {\n var rowNum = 1;\n console.log('renderingAttachment');\n $.each(root.Supplier.getData('attachment'), function () {\n var attachmentData = this;\n attachmentData.rowNum = rowNum;\n date = new Date(attachmentData.created_at);\n attachmentData.date = date.toLocaleString();\n attachmentData.link = attachmentData.PublicUrl + '/' + attachmentData.filename;\n var template = $('template[data-name=\"supplierAttachmentTableRow\"]').html();\n var render = Mustache.render(template, attachmentData);\n $('.attachmentTable tbody').append(render);\n rowNum++;\n });\n root.bindAttachmentClickAction();\n };\n this.addAttachment = function (attachmentData) {\n console.log(attachmentData);\n var CSSSelectorForm = Opts.containerCssSelector + ' .supplierForm';\n root.Supplier.attachment.push(attachmentData);\n attachmentData.rowNum = root.Supplier.attachment.length;\n var template = $('template[data-name=\"supplierAttachmentTableRow\"]').html();\n var render = Mustache.render(template, attachmentData);\n $(CSSSelectorForm + ' .attachmentTable tbody').append(render);\n root.bindContactClickAction();\n Toast.enableTimers(false);\n Toast.create(\"Fájl hozzáadva!\", attachmentData.original_filename + \" fájl hozzáadva\", TOAST_STATUS.SUCCESS, 5000);\n };\n this.resetContactTable = function () {\n $('.contactTable tbody tr').remove();\n root.renderContact();\n };\n this.renderContact = function () {\n var rowNum = 1;\n console.log('renderingContacts');\n $.each(root.Supplier.getData('contact'), function () {\n var contactData = this;\n contactData.rowNum = rowNum;\n //console.log(contactData);\n var template = $('template[data-name=\"supplierContactTableRow\"]').html();\n var render = Mustache.render(template, contactData);\n $('.contactTable tbody').append(render);\n rowNum++;\n });\n root.bindContactClickAction();\n };\n this.bindContactClickAction = function () {\n var node = $('.contactTable .buttonDelete');\n node.unbind('click');\n node.bind('click', root.contactDeleteClick);\n node = $('.contactTable .buttonEdit');\n node.unbind('click');\n node.bind('click', root.contactEditClick);\n };\n this.bindAttachmentClickAction = function () {\n var node = $('.attachmentTable .buttonDelete');\n node.unbind('click');\n node.bind('click', root.attachmentDeleteClick);\n };\n var currentAttachmentRow = false;\n this.attachmentDeleteClick = function (event) {\n var row = $(this).closest('tr');\n var id = row.find('input[name=attachmentId]').val();\n var ajaxUrl = Opts.URL.detachFile.replace('%id%', root.Supplier.id);\n //let data= new FormData($(Opts.containerCssSelector).find('form.supplierForm')[0]);\n //data.append(fileInput.attr('name'),fileInput[0].files[0]);\n var data = {};\n data._token = $('input[name=\"_token\"]').val();\n data.attachemntId = id;\n $.ajax({\n url: ajaxUrl,\n data: data,\n type: 'POST',\n //contentType:false,\n //processData: false,\n beforeSend: function beforeSend() {},\n success: function success(data) {\n console.log(data);\n if (data.success == true) {\n root.Supplier.attachment = root.Supplier.attachment.filter(function (value, index, arr) {\n if (value.id !== data.data.attachment.id * 1) {\n return true;\n }\n return false;\n });\n /*\r\n */\n //row.remove();\n root.resetAttachmentTable();\n }\n },\n error: function error(data) {\n console.log(data.responseJSON);\n root.selectedUploadFileToggle();\n ajaxErrorFieldHandler(data.responseJSON.error);\n }\n });\n };\n this.resetAttachmentTable = function () {\n $('.attachmentTable tbody tr').remove();\n root.renderAttachment();\n };\n this.contactDeleteClick = function (event) {\n var row = $(this).closest('tr');\n var id = row.find('input[name=contactId]').val();\n root.Supplier.contact = root.Supplier.contact.filter(function (value, index, arr) {\n if (value.id !== id * 1) {\n return true;\n }\n return false;\n });\n row.remove();\n root.resetContactTable();\n };\n root.getContactPopupWorkflow = function () {\n return contactPopupWorkflow;\n };\n root.setContactPopupWorkflow = function (status) {\n contactPopupWorkflow = status;\n };\n this.contactEditClick = function (event) {\n //console.log(this);\n var row = $(this).closest('tr');\n var id = row.find('input[name=contactId]').val();\n root.setContactPopupWorkflow('edit');\n APP.ContactPopUp.loadData(id);\n };\n this.getSupplier = function () {\n return root.Supplier;\n };\n this.contactAction = function (contactData) {\n console.log('nah most kellene meg valamit csinalni.');\n if (root.getContactPopupWorkflow() == 'new') {\n root.addContact(contactData);\n } else if (root.getContactPopupWorkflow() == 'edit') {\n root.editContact(contactData.id, contactData);\n }\n };\n this.editContact = function (id, contactData) {\n var newContacts = [];\n $.each(root.Supplier.getData('contact'), function (index) {\n if (this.id == id) {\n newContacts.push(contactData);\n } else {\n newContacts.push(this);\n }\n });\n root.Supplier.contact = newContacts;\n root.resetContactTable();\n Toast.create(\"Kapcsolat adatai módosítva!\", contactData.name + \" nevű kapocsolattartó módosítva\", TOAST_STATUS.SUCCESS, 5000);\n };\n this.addContact = function (contactData) {\n /*\r\n fel kell venni a sorba\r\n */\n root.Supplier.contact.push(contactData);\n contactData.rowNum = root.Supplier.contact.length;\n var template = $('template[data-name=\"supplierContactTableRow\"]').html();\n var render = Mustache.render(template, contactData);\n $('.contactTable tbody').append(render);\n root.bindContactClickAction();\n Toast.enableTimers(false);\n Toast.create(\"Kapcsolat tartó hozzáadva!\", contactData.name + \" nevű kapocsolattartó hozzáadva\", TOAST_STATUS.SUCCESS, 5000);\n };\n this.construct(options, SupplierItem);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdXBwbGllciIsIl9EYXRhTW9kZWwiLCJfU3VwcGxpZXIiLCJkYXRhIiwib3B0aW9ucyIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2NhbGxTdXBlciIsImNvbnRhY3QiLCJjb25zb2xlIiwibG9nIiwiX2luaGVyaXRzIiwiX2NyZWF0ZUNsYXNzIiwiRGF0YU1vZGVsIiwid2luZG93IiwiU3VwcGxpZXJBZG1pbiIsIlN1cHBsaWVySXRlbSIsIk9wdHMiLCJ0b2tlbiIsImNvbnRhaW5lckNzc1NlbGVjdG9yIiwidGVzdE1vZGUiLCJVUkwiLCJnZXREYXRhVGFibGVDb250ZW50IiwiaW5kZXgiLCJzaG93IiwiZWRpdCIsImNyZWF0ZSIsInN0b3JlIiwidXBkYXRlIiwiZGVzdHJveSIsImF0dGFjaEZpbGUiLCJkZXRhY2hGaWxlIiwiZGF0YVRhYmxlIiwib3JkZXJEaXJlY3RpdmUiLCJvbkFmdGVySW5pdFZpZXdEZXRhaWxzIiwicm9vdCIsImNvbnRhY3RQb3B1cFdvcmtmbG93IiwiY29uc3RydWN0IiwiJCIsImV4dGVuZCIsIkFQUCIsImdldE9wdHMiLCJmb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGxPbGQiLCJDU1NTZWxlY3RvciIsIkZvcm1EYXRhIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiZm9ybUpTT04iLCJmb3JFYWNoIiwidmFsdWUiLCJrZXkiLCJSZWZsZWN0IiwiaGFzIiwiQXJyYXkiLCJpc0FycmF5IiwicHVzaCIsImVhY2giLCJhdHRyIiwicmVwbGFjZSIsImZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbCIsIkNTU1NlbGVjdG9yRm9ybSIsImFqYXhEYXRhIiwiZ2V0QWxsIiwiYXBwZW5kIiwidmFsIiwiaW5kZXhLZXkiLCJnZXQiLCJzZXQiLCJjbGlja1NhdmVCdXR0b24iLCJldmVudCIsImRlYnVnIiwicHJldmVudERlZmF1bHQiLCJjaGVja1ZhbGlkaXR5Iiwic3RvcFByb3BhZ2F0aW9uIiwiYWpheFVybCIsImFqYXhNZXRob2QiLCJpZCIsImFqYXgiLCJ1cmwiLCJ0eXBlIiwiY29udGVudFR5cGUiLCJwcm9jZXNzRGF0YSIsImhlYWRlcnMiLCJzdWNjZXNzIiwiVG9hc3QiLCJUT0FTVF9TVEFUVVMiLCJTVUNDRVNTIiwibG9hZE1haW5Db250ZW50IiwiaW5pdFZpZXdMaXN0Iiwic2V0RGV0YWlsc1ZpZXdEYXRhIiwibmVlZFRvU2V0Iiwibm90ZSIsInByb3AiLCJjYW5TZWUiLCJjbGljayIsImNhblNlZUluT3JkZXIiLCJob29yZXljYURhdGFBY3RpdmUiLCJwcm9kdWN0R3JvdXAiLCJwcm9kdWN0X2dyb3VwIiwibmFtZSIsImNoYW5nZSIsInNlcnZpY2UiLCJwcm9maXRDZW50ZXIiLCJwcm9maXRfY2VudGVyIiwiZXNjYXBlU2VsZWN0b3IiLCJpbml0Vmlld0RldGFpbHMiLCJDb250YWN0UG9wVXAiLCJpbml0IiwiYWN0aXZlIiwib25BZnRlclNhdmUiLCJjb250YWN0QWN0aW9uIiwicmVuZGVyQ29udGFjdCIsImJpbmQiLCJzZXRDb250YWN0UG9wdXBXb3JrZmxvdyIsImNsZWFyRGF0YSIsInRvb2x0aXAiLCJpbml0UmFkaW9CdXR0b25zIiwiaW5wdXRtYXNrIiwib25pbmNvbXBsZXRlIiwibGVuZ3RoIiwiYWRkQ2xhc3MiLCJvbmNvbXBsZXRlIiwicmVtb3ZlQ2xhc3MiLCJvbmNsZWFyZWQiLCJvZmYiLCJvbiIsInNlbGVjdDIiLCJ0YWdzIiwiY3JlYXRlVGFnIiwicGFyYW1zIiwidGVybSIsInRyaW0iLCJ0ZXh0IiwibmV3VGFnIiwic2V0SW1hZ2VGcm9tTG9jYWwiLCJpcyIsInJlbmRlckF0dGFjaG1lbnQiLCJpbml0RmlsZUF0dGFjaG1lbnRGZWF0dXJlIiwic2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlIiwiZmlsZUlucHV0IiwiZmlsZXMiLCJncm91cCIsIkRBTkdFUiIsImZpbmQiLCJncm91cEVuZCIsImJlZm9yZVNlbmQiLCJhZGRBdHRhY2htZW50IiwiYXR0YWNobWVudCIsImVycm9yIiwicmVzcG9uc2VKU09OIiwiYWpheEVycm9yRmllbGRIYW5kbGVyIiwiY2xpY2tOZXciLCJjbGlja05ld0NhbGxCYWNrIiwiZGF0YXRhYmxlUm93QWN0aW9uRWRpdCIsInJvd0RhdGEiLCJub2RlIiwiY2xpY2tPcmRlckRlbGV0ZUNvbmZpcm1lZCIsIm1vZGFsIiwiX3Rva2VuIiwicm93IiwiZGF0YVRhYmxlQ1NTU2VsZWN0b3IiLCJEYXRhVGFibGUiLCJkYWRhdGF0YWJsZVJvd0FjdGlvbkNhbGxlck5vZGUiLCJwYXJlbnRzIiwibWV0aG9kIiwicmVtb3ZlIiwiZHJhdyIsImRhdGF0YWJsZVJvd0FjdGlvbkNhbGxlck5vZGUiLCJkYXRhdGFibGVSb3dBY3Rpb25EZWxldGUiLCJkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayIsImN1cnJlbnRUYXJnZXQiLCJhY3Rpb25OYW1lIiwiY2FwaXRhbGl6ZSIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsImNvbE51bSIsInNldE9wdHMiLCJkYXRhdGFibGVBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrIiwiZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayIsImxhbmd1YWdlIiwicmVuZGVyIiwiYnV0dG9ucyIsImRhdGF0YWJsZUFkZFJvd1RyYXNoQnV0dG9uIiwiZGF0YXRhYmxlQWRkUm93RWRpdEJ1dHRvbiIsImxhdGluaXNlIiwiYXV0b1ByaW50IiwiY2xhc3NOYW1lIiwiYXBpIiwiY29uZmlnIiwiYWN0aW9uIiwiZSIsImR0IiwiZHJhd0NhbGxiYWNrIiwic2V0dGluZ3MiLCJkYXRhdGFibGVBZGRSb3dBY3Rpb24iLCJhdXRvZmlsbERldGFpbHMiLCJyYW5kb21OdW1iZXIiLCJnZXRSYW5kb21JbnQiLCJyb3dOdW0iLCJnZXREYXRhIiwiYXR0YWNobWVudERhdGEiLCJkYXRlIiwiRGF0ZSIsImNyZWF0ZWRfYXQiLCJ0b0xvY2FsZVN0cmluZyIsImxpbmsiLCJQdWJsaWNVcmwiLCJmaWxlbmFtZSIsInRlbXBsYXRlIiwiaHRtbCIsIk11c3RhY2hlIiwiYmluZEF0dGFjaG1lbnRDbGlja0FjdGlvbiIsImJpbmRDb250YWN0Q2xpY2tBY3Rpb24iLCJlbmFibGVUaW1lcnMiLCJvcmlnaW5hbF9maWxlbmFtZSIsInJlc2V0Q29udGFjdFRhYmxlIiwiY29udGFjdERhdGEiLCJ1bmJpbmQiLCJjb250YWN0RGVsZXRlQ2xpY2siLCJjb250YWN0RWRpdENsaWNrIiwiYXR0YWNobWVudERlbGV0ZUNsaWNrIiwiY3VycmVudEF0dGFjaG1lbnRSb3ciLCJjbG9zZXN0IiwiYXR0YWNoZW1udElkIiwiZmlsdGVyIiwiYXJyIiwicmVzZXRBdHRhY2htZW50VGFibGUiLCJnZXRDb250YWN0UG9wdXBXb3JrZmxvdyIsInN0YXR1cyIsImxvYWREYXRhIiwiZ2V0U3VwcGxpZXIiLCJhZGRDb250YWN0IiwiZWRpdENvbnRhY3QiLCJuZXdDb250YWN0cyJdLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvYWRtaW4vc3VwcGxpZXIuanM/YTdjNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpZih0eXBlb2YgU3VwcGxpZXI9PT0ndW5kZWZpbmVkJyl7XHJcbiAgICBjbGFzcyBTdXBwbGllciBleHRlbmRzIERhdGFNb2RlbHtcclxuXHJcbiAgICAgICAgLypcclxuICAgICAgICAgKiBDb25zdHJ1Y3RvclxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnN0cnVjdG9yIChkYXRhLG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgc3VwZXIoZGF0YSxvcHRpb25zKVxyXG4gICAgICAgICAgICBpZih0eXBlb2YgdGhpcy5jb250YWN0ID09PVwidW5kZWZpbmVkXCIpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWN0PVtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTdXBwbGllciBjb25zdHJ1Y3RvciBjYWxsZWQnKTtcclxuICAgICAgICB9O1xyXG4gICAgfTtcclxuICAgIHdpbmRvdy5TdXBwbGllcj1TdXBwbGllcjtcclxufVxyXG5cclxuXHJcbndpbmRvdy5TdXBwbGllckFkbWluPWZ1bmN0aW9uIChvcHRpb25zLFN1cHBsaWVySXRlbSkge1xyXG4gICAgLypcclxuICAgICAqIFZhcmlhYmxlcyBhY2Nlc3NpYmxlXHJcbiAgICAgKiBpbiB0aGUgY2xhc3NcclxuICAgICAqL1xyXG4gICAgbGV0IE9wdHMgPSB7XHJcbiAgICAgICAgdG9rZW46bnVsbCxcclxuICAgICAgICBjb250YWluZXJDc3NTZWxlY3RvcjogJy5jb250YWluZXJTdXBwbGllcicsXHJcbiAgICAgICAgdGVzdE1vZGU6ZmFsc2UsXHJcbiAgICAgICAgVVJMOntcclxuICAgICAgICAgICAgZ2V0RGF0YVRhYmxlQ29udGVudDonJyxcclxuICAgICAgICAgICAgaW5kZXg6JycsXHJcbiAgICAgICAgICAgIHNob3c6JycsXHJcbiAgICAgICAgICAgIGVkaXQ6JycsXHJcbiAgICAgICAgICAgIGNyZWF0ZTonJyxcclxuICAgICAgICAgICAgc3RvcmU6JycsXHJcbiAgICAgICAgICAgIHVwZGF0ZTonJyxcclxuICAgICAgICAgICAgZGVzdHJveTonJyxcclxuICAgICAgICAgICAgYXR0YWNoRmlsZTonJyxcclxuICAgICAgICAgICAgZGV0YWNoRmlsZTonJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRhdGFUYWJsZTp7XHJcbiAgICAgICAgICAgIG9yZGVyRGlyZWN0aXZlOlsxLCAnYXNjJ11cclxuICAgICAgICB9LFxyXG4gICAgICAgIG9uQWZ0ZXJJbml0Vmlld0RldGFpbHM6ZnVuY3Rpb24gKCl7fVxyXG4gICAgfTtcclxuICAgIGxldCBTdXBwbGllciA9IHt9O1xyXG4gICAgbGV0IHJvb3QgPSB0aGlzO1xyXG4gICAgbGV0IGNvbnRhY3RQb3B1cFdvcmtmbG93PSduZXcnO1xyXG4gICAgLypcclxuICAgICAqIENvbnN0cnVjdG9yXHJcbiAgICAgKi9cclxuICAgIHRoaXMuY29uc3RydWN0ID0gZnVuY3Rpb24gKG9wdGlvbnMsU3VwcGxpZXJJdGVtKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1N1cHBsaWVyQWRtaW4gY29uc3RydWN0b3IgY2FsbGVkJyk7XHJcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XHJcbiAgICAgICAgaWYoIVN1cHBsaWVySXRlbSl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzdXBwbGllciBsZXRyZSBrZWxsZXQgaG96bmkgJyk7XHJcbiAgICAgICAgICAgIGlmKCFBUFAuU3VwcGxpZXIpe1xyXG4gICAgICAgICAgICAgICAgQVBQLlN1cHBsaWVyPW5ldyB3aW5kb3cuU3VwcGxpZXIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByb290LlN1cHBsaWVyPUFQUC5TdXBwbGllcjtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhpcy5nZXRPcHRzPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIHJldHVybiBPcHRzO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsT2xkPSBmdW5jdGlvbiAoQ1NTU2VsZWN0b3IpIHtcclxuICAgICAgICBsZXQgZGF0YSA9IG5ldyBGb3JtRGF0YShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKENTU1NlbGVjdG9yKSk7XHJcbiAgICAgICAgLy9sZXQgZm9ybUpTT04gPSBPYmplY3QuZnJvbUVudHJpZXMoZGF0YS5lbnRyaWVzKCkpO1xyXG4gICAgICAgIHZhciBmb3JtSlNPTiA9IHt9O1xyXG4gICAgICAgIGRhdGEuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICAvLyBSZWZsZWN0LmhhcyBpbiBmYXZvciBvZjogZm9ybUpTT04uaGFzT3duUHJvcGVydHkoa2V5KVxyXG4gICAgICAgICAgICBpZighUmVmbGVjdC5oYXMoZm9ybUpTT04sIGtleSkpe1xyXG4gICAgICAgICAgICAgICAgZm9ybUpTT05ba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGZvcm1KU09OW2tleV0pKXtcclxuICAgICAgICAgICAgICAgIGZvcm1KU09OW2tleV0gPSBbZm9ybUpTT05ba2V5XV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9ybUpTT05ba2V5XS5wdXNoKHZhbHVlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJChDU1NTZWxlY3RvcisnIGlucHV0W2RhdGEtaW5wdXRtYXNrXScpLmVhY2goZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIGlmKGZvcm1KU09OWyQodGhpcykuYXR0cignbmFtZScpXSl7XHJcbiAgICAgICAgICAgICAgICBmb3JtSlNPTlskKHRoaXMpLmF0dHIoJ25hbWUnKV09Zm9ybUpTT05bJCh0aGlzKS5hdHRyKCduYW1lJyldLnJlcGxhY2UoL1tfIF0rJC9nLFwiXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy9mb3JtSlNPTi5wcm9kdWN0R3JvdXBzPSQoXCIucHJvZHVjdENhdGVnb3J5U2VsZWN0XCIpLnNlbGVjdDIoKS52YWwoKTtcclxuXHJcblxyXG4gICAgICAgIC8qTXVsdGlzZWxlY3Qgb3IgY2hlY2tib3ggdG8gYXJyYXk6XHJcbiAgICAgICAgYWpheERhdGFbJ3Byb2R1Y3RHcm91cCddPSQoXCIucHJvZHVjdENhdGVnb3J5U2VsZWN0XCIpLnNlbGVjdDIoKS52YWwoKTtcclxuXHJcbiAgICAgICAgZm9ybUpTT04ubXVsdGlzZWxlY3ROYW1lID0gZGF0YS5nZXRBbGwoJ211bHRpc2VsZWN0TmFtZScpO1xyXG4gICAgICAgICQuZWFjaChmb3JtSlNPTiwgZnVuY3Rpb24gKGl0ZW0sIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGZvcm1KU09OWyQubGNGaXJzdChpdGVtLnJlcGxhY2UoJ2NvbnRhY3QnLCAnJykpXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBkZWxldGUgZm9ybUpTT05baXRlbV07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYoZm9ybUpTT04ucGhvbmUpe1xyXG4gICAgICAgICAgICBmb3JtSlNPTi5waG9uZT1mb3JtSlNPTi5waG9uZS5yZXBsYWNlQWxsKCdfJywnJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGZvcm1KU09OLmVtYWlsKXtcclxuICAgICAgICAgICAgZm9ybUpTT04uZW1haWw9Zm9ybUpTT04uZW1haWwucmVwbGFjZUFsbCgnXycsJycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAqL1xyXG4gICAgICAgIHJldHVybiBmb3JtSlNPTjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbCA9IGZ1bmN0aW9uIChDU1NTZWxlY3RvckZvcm0pIHtcclxuICAgICAgICBsZXQgYWpheERhdGE9bmV3IEZvcm1EYXRhKCQoQ1NTU2VsZWN0b3JGb3JtKVswXSk7XHJcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgncHJvZml0Q2VudGVyJyksZnVuY3Rpb24oa2V5LHZhbHVlKXtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdwcm9maXRDZW50ZXJbXScsdmFsdWUpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgncHJvZHVjdEdyb3VwJyksZnVuY3Rpb24oa2V5LHZhbHVlKXtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdwcm9kdWN0R3JvdXBbXScsdmFsdWUpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgnc3VwcGxpZXJTZXJ2aWNlJyksZnVuY3Rpb24oa2V5LHZhbHVlKXtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdzdXBwbGllclNlcnZpY2VbXScsdmFsdWUpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgnY29udGFjdElkJyksZnVuY3Rpb24oa2V5LHZhbHVlKXtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdjb250YWN0SWRbXScsdmFsdWUpO1xyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIGFqYXhEYXRhLmFwcGVuZCgnX3Rva2VuJywkKCdpbnB1dFtuYW1lPV90b2tlbl0nKS52YWwoKSk7XHJcblxyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbZGF0YS1pbnB1dG1hc2tdJykuZWFjaChmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgbGV0IGluZGV4S2V5PSQodGhpcykuYXR0cignbmFtZScpO1xyXG4gICAgICAgICAgICBpZihhamF4RGF0YS5nZXQoaW5kZXhLZXkpKXtcclxuICAgICAgICAgICAgICAgIGFqYXhEYXRhLnNldChpbmRleEtleSxhamF4RGF0YS5nZXQoaW5kZXhLZXkpLnJlcGxhY2UoL1tfIF0rJC9nLFwiXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gYWpheERhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja1NhdmVCdXR0b249ZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgZGVidWcoJ1NhdmUgY2xpY2tlZCcpO1xyXG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm09T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5zdXBwbGllckZvcm0nO1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICBpZiAoJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPVwiY2FuU2VlSW5PcmRlclwiXScpLnZhbCgpPT0xICYmICQoQ1NTU2VsZWN0b3JGb3JtKVswXS5jaGVja1ZhbGlkaXR5KCkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd2YWxpZGF0b24gZmFsc2UnKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygndmFsaWRhdG9uIG9rJyk7XHJcbiAgICAgICAgICAgIC8vZG8geW91ciBhamF4IHN1Ym1pdGlvbiBoZXJlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBhamF4RGF0YT1yb290LmZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbChDU1NTZWxlY3RvckZvcm0pO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLnN0b3JlO1xyXG4gICAgICAgIGxldCBhamF4TWV0aG9kPVwiUE9TVFwiO1xyXG4gICAgICAgIGlmKHJvb3QuU3VwcGxpZXIuaWQpe1xyXG4gICAgICAgICAgICBhamF4VXJsPU9wdHMuVVJMLnVwZGF0ZS5yZXBsYWNlKCclaWQlJyxyb290LlN1cHBsaWVyLmlkKTtcclxuICAgICAgICAgICAgLy9hamF4TWV0aG9kPVwiUFVUXCI7XHJcbiAgICAgICAgICAgIC8vYWpheERhdGE9bmV3IEZvcm1EYXRhKCQoQ1NTU2VsZWN0b3JGb3JtKVswXSk7XHJcbiAgICAgICAgICAgIGFqYXhEYXRhLmFwcGVuZCgnX21ldGhvZCcsJ1BVVCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGVidWcoYWpheE1ldGhvZCk7XHJcbiAgICAgICAgZGVidWcoYWpheERhdGEpO1xyXG5cclxuICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICB1cmw6YWpheFVybCxcclxuICAgICAgICAgICAgZGF0YTphamF4RGF0YSxcclxuICAgICAgICAgICAgdHlwZTphamF4TWV0aG9kLFxyXG4gICAgICAgICAgICBjb250ZW50VHlwZTpmYWxzZSxcclxuICAgICAgICAgICAgcHJvY2Vzc0RhdGE6IGZhbHNlLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAnWC1DU1JGLVRPS0VOJzogJCgnaW5wdXRbbmFtZT1cIl90b2tlblwiXScpLnZhbCgpXHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICBzdWNjZXNzOmZ1bmN0aW9uIChkYXRhKXtcclxuICAgICAgICAgICAgICAgIGRlYnVnKCdkMTogU2F2ZSBzdWNjZXNzICcpO1xyXG4gICAgICAgICAgICAgICAgZGVidWcoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL09wdHMub25BZnRlckluaXRWaWV3RGV0YWlscz1yb290LmF1dG9maWxsRGV0YWlscztcclxuICAgICAgICAgICAgICAgICAgICBPcHRzLmRhdGFUYWJsZS5vcmRlckRpcmVjdGl2ZT1bMCwgJ2Rlc2MnXTtcclxuICAgICAgICAgICAgICAgICAgICBUb2FzdC5jcmVhdGUoXCJTaWtlcmVzIHLDtmd6w610w6lzIVwiLCBhamF4RGF0YS5nZXQoJ25hbWUnKStcIiBuZXbFsSBiZXN6w6FsbGzDrXTDsyBlbG1lbnR2ZVwiLCBUT0FTVF9TVEFUVVMuU1VDQ0VTUyw1MDAwKTtcclxuICAgICAgICAgICAgICAgICAgICBBUFAubG9hZE1haW5Db250ZW50KE9wdHMuVVJMLmluZGV4Kyc/aW5pdD0wJyxyb290LmluaXRWaWV3TGlzdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0RGV0YWlsc1ZpZXdEYXRhPWZ1bmN0aW9uICgpIHtcclxuICAgICAgICBkZWJ1Zygnc2V0RGV0YWlsc1ZpZXdEYXRhJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coU3VwcGxpZXIpO1xyXG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm09T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5zdXBwbGllckZvcm0nO1xyXG4gICAgICAgIGxldCBuZWVkVG9TZXQ9W1xyXG4gICAgICAgICAgICAnbmFtZScsJ2hvb3JleWNhSWQnLCduYW1lSWQnLFxyXG4gICAgICAgICAgICAnb3JkZXJFbWFpbCcsJ29yZGVyRW1haWwyJywnYWRkcmVzcycsJ21haWxpbmdBZGRyZXNzJywncGhvbmUnLCdmYXgnLCdjdXN0b21lclNlcnZpY2VQaG9uZScsXHJcbiAgICAgICAgICAgICduYW1lMjInLFxyXG4gICAgICAgICAgICAnb3BlbkhvdXJzJywgJ29yZGVyc0RlYWRsaW5lJywgJ21pbk9yZGVyVmFsdWUnLFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgJC5lYWNoKG5lZWRUb1NldCxmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmKHR5cGVvZiByb290LlN1cHBsaWVyW3RoaXNdIT0ndW5kZWZpbmVkJyl7XHJcbiAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9Jyt0aGlzKyddJykudmFsKHJvb3QuU3VwcGxpZXJbdGhpc10pO1xyXG4gICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyB0ZXh0YXJlYVtuYW1lPScrdGhpcysnXScpLnZhbChyb290LlN1cHBsaWVyW3RoaXNdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgaWYodHlwZW9mIHJvb3QuU3VwcGxpZXJbJ25vdGUnXSE9J3VuZGVmaW5lZCcpe1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIHRleHRhcmVhW25hbWU9bm90ZV0nKS52YWwocm9vdC5TdXBwbGllci5ub3RlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYodHlwZW9mIHJvb3QuU3VwcGxpZXJbJ2VtYWlsQXR0YWNobWVudFR5cGUnXSE9J3VuZGVmaW5lZCcpe1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9ZW1haWxBdHRhY2htZW50VHlwZV1bdmFsdWU9Jytyb290LlN1cHBsaWVyWydlbWFpbEF0dGFjaG1lbnRUeXBlJ10rJ10nKS5wcm9wKCdjaGVja2VkJyx0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAqW2RhdGEtdG9nZ2xlPWNhblNlZV1bZGF0YS10aXRsZT0nK3Jvb3QuU3VwcGxpZXIuY2FuU2VlKyddJykuY2xpY2soKTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnICpbZGF0YS10b2dnbGU9Y2FuU2VlSW5PcmRlcl1bZGF0YS10aXRsZT0nK3Jvb3QuU3VwcGxpZXIuY2FuU2VlSW5PcmRlcisnXScpLmNsaWNrKCk7XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAqW2RhdGEtdG9nZ2xlPWhvb3JleWNhRGF0YUFjdGl2ZV1bZGF0YS10aXRsZT0nK3Jvb3QuU3VwcGxpZXIuaG9vcmV5Y2FEYXRhQWN0aXZlKyddJykuY2xpY2soKTtcclxuICAgICAgICBsZXQgcHJvZHVjdEdyb3VwPVtdO1xyXG4gICAgICAgICQuZWFjaChyb290LlN1cHBsaWVyLnByb2R1Y3RfZ3JvdXAsZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBwcm9kdWN0R3JvdXAucHVzaCh0aGlzLm5hbWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLnByb2R1Y3RDYXRlZ29yeVNlbGVjdCcpLnZhbChwcm9kdWN0R3JvdXApLmNoYW5nZSgpO1xyXG5cclxuICAgICAgICBsZXQgc2VydmljZT1bXTtcclxuICAgICAgICAkLmVhY2gocm9vdC5TdXBwbGllci5zZXJ2aWNlLGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgc2VydmljZS5wdXNoKHRoaXMubmFtZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuc2VydmljZVNlbGVjdCcpLnZhbChzZXJ2aWNlKS5jaGFuZ2UoKTtcclxuXHJcbiAgICAgICAgbGV0IHByb2ZpdENlbnRlcj1bXTtcclxuICAgICAgICAkLmVhY2gocm9vdC5TdXBwbGllci5wcm9maXRfY2VudGVyLGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcHJvZml0Q2VudGVyLnB1c2godGhpcy5uYW1lKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyQoQ1NTU2VsZWN0b3JGb3JtKycgLnByb2ZpdENlbnRlclNlbGVjdCcpLnZhbChwcm9maXRDZW50ZXIpLmNoYW5nZSgpO1xyXG4gICAgICAgIC8vZGVidWcocHJvZml0Q2VudGVyKTtcclxuICAgICAgICAkLmVhY2gocHJvZml0Q2VudGVyLGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgJCgnaW5wdXRbdmFsdWU9XCInKyQuZXNjYXBlU2VsZWN0b3IodGhpcykrJ1wiXScpLnByb3AoIFwiY2hlY2tlZFwiLCB0cnVlICk7XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgaWYodHlwZW9mIHJvb3QuU3VwcGxpZXJbJ2xvZ29GaWxlJ10hPSd1bmRlZmluZWQnICYmIChyb290LlN1cHBsaWVyWydsb2dvRmlsZSddKSl7XHJcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW1nLmltYWdlTG9nbycpLmF0dHIoJ3NyYycscm9vdC5TdXBwbGllclsnbG9nb0ZpbGUnXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2RlYnVnKEFQUC5TdXBwbGllckFkbWluLmZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbCgnLnN1cHBsaWVyRm9ybScpWydwcm9kdWN0R3JvdXAnXSk7XHJcbiAgICAgICAgLy8kKCdbbmFtZT1wcm9kdWN0R3JvdXBdJykudmFsKFsnQsO8ZsOpw6FydV/DqWRlc2lwYXJpX3Rlcm3DqWtlaycsJ1RvasOhcyddKS5jaGFuZ2UoKTtcclxuICAgICAgICAvL3Jvb3Quc2V0RGV0YWlsc1ZpZXdEYXRhKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmluaXRWaWV3RGV0YWlscz1mdW5jdGlvbiAob3B0aW9ucyxTdXBwbGllckl0ZW0pe1xyXG4gICAgICAgIGRlYnVnKCcqKmNhbGwgaW5pdFZpZXdEZXRhaWxzICcpO1xyXG4gICAgICAgIGlmKCFBUFAuQ29udGFjdFBvcFVwKXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ25pbmNzIEFQUC5Db250YWN0UG9wVXAnKVxyXG4gICAgICAgICAgICBBUFAuQ29udGFjdFBvcFVwID0gbmV3IHdpbmRvdy5Db250YWN0UG9wVXAoKTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ21hciB2YW4gIEFQUC5Db250YWN0UG9wVXAnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBBUFAuQ29udGFjdFBvcFVwLmluaXQoe1xyXG4gICAgICAgICAgICBhY3RpdmU6dHJ1ZSxcclxuICAgICAgICAgICAgb25BZnRlclNhdmU6cm9vdC5jb250YWN0QWN0aW9uXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcm9vdC5yZW5kZXJDb250YWN0KCk7XHJcbiAgICAgICAgJCgnLnN1cHBsaWVyRm9ybSAuYnV0dG9uTmV3Q29udGFjdCcpLmJpbmQoJ2NsaWNrJyxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgQVBQLlN1cHBsaWVyQWRtaW4uc2V0Q29udGFjdFBvcHVwV29ya2Zsb3coJ25ldycpO1xyXG4gICAgICAgICAgICBBUFAuQ29udGFjdFBvcFVwLmNsZWFyRGF0YSgpO1xyXG4gICAgICAgICAgICBBUFAuQ29udGFjdFBvcFVwLnNob3coKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAkKCdbZGF0YS10b2dnbGU9XCJ0b29sdGlwXCJdJykudG9vbHRpcCgpO1xyXG4gICAgICAgIGluaXRSYWRpb0J1dHRvbnMoKTtcclxuICAgICAgICAkKFwiOmlucHV0XCIpLmlucHV0bWFzayh7XHJcbiAgICAgICAgICAgIFwib25pbmNvbXBsZXRlXCI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCQodGhpcykuZGF0YSgncmVxdWlyZWQnKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS52YWwoKS5sZW5ndGggPiAwIHx8ICQodGhpcykuZGF0YSgncmVxdWlyZWQnKSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ2lzLWludmFsaWQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJvbmNvbXBsZXRlXCI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ2lzLWludmFsaWQnKTtcclxuICAgICAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ2lzLXZhbGlkJyk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwib25jbGVhcmVkXCI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdjbGVhcmVkJyk7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdpcy1pbnZhbGlkJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJCgnZm9ybS5zdXBwbGllckZvcm0gYnV0dG9uLkZvcm1TYXZlQnV0dG9uJykub2ZmKCdjbGljaycpO1xyXG4gICAgICAgICQoJ2Zvcm0uc3VwcGxpZXJGb3JtIGJ1dHRvbi5Gb3JtU2F2ZUJ1dHRvbicpLm9uKCdjbGljaycscm9vdC5jbGlja1NhdmVCdXR0b24pO1xyXG4gICAgICAgIHJvb3Quc2V0RGV0YWlsc1ZpZXdEYXRhKCk7XHJcbiAgICAgICAgJChcIi5wcm9kdWN0Q2F0ZWdvcnlTZWxlY3RcIikuc2VsZWN0MigpO1xyXG4gICAgICAgICQoXCIuc2VydmljZVNlbGVjdFwiKS5zZWxlY3QyKHtcclxuICAgICAgICAgICAgdGFnczogdHJ1ZSxcclxuICAgICAgICAgICAgY3JlYXRlVGFnOiBmdW5jdGlvbiAocGFyYW1zKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGVybSA9ICQudHJpbShwYXJhbXMudGVybSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRlcm0gPT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogdGVybSxcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0ZXJtLFxyXG4gICAgICAgICAgICAgICAgICAgIG5ld1RhZzogdHJ1ZSAvLyBhZGQgYWRkaXRpb25hbCBwYXJhbWV0ZXJzXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8kKFwiLnByb2ZpdENlbnRlclNlbGVjdFwiKS5zZWxlY3QyKCk7XHJcbiAgICAgICAgJChcImlucHV0W25hbWU9bG9nb0ZpbGVdXCIpLmNoYW5nZShmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBzZXRJbWFnZUZyb21Mb2NhbCh0aGlzLE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuaW1hZ2VMb2dvJyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQoJ2Zvcm0uc3VwcGxpZXJGb3JtIC5wcm9maXRDZW50ZXJTZWxlY3RDaGVja2JveEFsbCcpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKCdmb3JtLnN1cHBsaWVyRm9ybSAucHJvZml0Q2VudGVyU2VsZWN0Q2hlY2tib3hBbGwnKS5vbignY2xpY2snLGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygpO1xyXG4gICAgICAgICAgICAvL2xldCBjaGVja2VkPSQodGhpcykuaXMoXCI6Y2hlY2tlZFwiKVxyXG4gICAgICAgICAgICAkKCdmb3JtLnN1cHBsaWVyRm9ybSBpbnB1dC5wcm9maXRDZW50ZXJTZWxlY3RDaGVja2JveCcpLnByb3AoJ2NoZWNrZWQnLCQodGhpcykuaXMoXCI6Y2hlY2tlZFwiKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcm9vdC5yZW5kZXJBdHRhY2htZW50KCk7XHJcbiAgICAgICAgLy9PcHRzLm9uQWZ0ZXJJbml0Vmlld0RldGFpbHMoKTtcclxuICAgICAgICByb290LmluaXRGaWxlQXR0YWNobWVudEZlYXR1cmUoKTtcclxuICAgICAgICBkZWJ1ZygnKiplbmQgaW5pdFZpZXdEZXRhaWxzICcpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlPWZ1bmN0aW9uIChmaWxlSW5wdXQpe1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgY29uc29sZS5sb2coZmlsZUlucHV0LmF0dHIoJ25hbWUnKSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coZmlsZUlucHV0WzBdLmZpbGVzWzBdKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhmaWxlSW5wdXRbMF0uZmlsZXNbMF0ubmFtZSk7XHJcbiAgICAgICAgKi9cclxuICAgICAgICBpZihmaWxlSW5wdXQpe1xyXG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZCcpLmFkZENsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgaWYoZmlsZUlucHV0WzBdLmZpbGVzWzBdKXtcclxuICAgICAgICAgICAgICAgICQoJy5jb250YWluZXJVcGxvYWRlZEZpbGVOYW1lJykudGV4dChmaWxlSW5wdXRbMF0uZmlsZXNbMF0ubmFtZSk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkU3RhcnRlZCcpLnJlbW92ZUNsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgJCgnLmNvbnRhaW5lclVwbG9hZGVkU3Bpbm5lcicpLnJlbW92ZUNsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgJCgnLmNvbnRhaW5lclVwbG9hZGVkRmlsZU5hbWUnKS50ZXh0KCcnKTtcclxuICAgICAgICAgICAgJCgnLmN1c3RvbS1maWxlLWxhYmVsLnNlbGVjdGVkJykudGV4dCgnJyk7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkU3RhcnRlZCcpLmFkZENsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgJCgnLnVwbG9hZFN0YXR1c1JvdycpLmFkZENsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgJCgnLmNvbnRhaW5lckZpbGVVcGxvYWQnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdEZpbGVBdHRhY2htZW50RmVhdHVyZT1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS1pbml0RmlsZUF0dGFjaG1lbnRGZWF0dXJlLS0tLS0tLS0tLS0nKTtcclxuICAgICAgICBpZihyb290LlN1cHBsaWVyLmlkKXtcclxuICAgICAgICAgICAgJCgnLmNvbnRhaW5lckZpbGVVcGxvYWQnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkTm9uZScpLmFkZENsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuYnV0dG9uVXBsb2FkJykub2ZmKCdjbGljaycpO1xyXG4gICAgICAgICQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5idXR0b25VcGxvYWQnKS5vbignY2xpY2snLGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmdyb3VwKCctLS0tLS0tYnV0dG9uVXBsb2FkLS0tLS0tLS0tLS0nKTtcclxuICAgICAgICAgICAgbGV0IGZpbGVJbnB1dD0kKCcjaW5wdXRHcm91cEF0dGFjaGVGaWxlJyk7XHJcbiAgICAgICAgICAgIGlmKGZpbGVJbnB1dFswXS5maWxlcy5sZW5ndGg8MSl7XHJcbiAgICAgICAgICAgICAgICBUb2FzdC5jcmVhdGUoXCJIaWJhIVwiLCAnVsOhbGxhc3pvbiBraSBmw6FqbHQhJywgVE9BU1RfU1RBVFVTLkRBTkdFUiwgMTAwMDApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcikuZmluZCgnZm9ybS5zdXBwbGllckZvcm0nKVswXSk7XHJcbiAgICAgICAgICAgIGxldCBkYXRhPSBuZXcgRm9ybURhdGEoJChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKS5maW5kKCdmb3JtLnN1cHBsaWVyRm9ybScpWzBdKTtcclxuICAgICAgICAgICAgZGF0YS5hcHBlbmQoZmlsZUlucHV0LmF0dHIoJ25hbWUnKSxmaWxlSW5wdXRbMF0uZmlsZXNbMF0pO1xyXG5cclxuICAgICAgICAgICAgcm9vdC5zZWxlY3RlZFVwbG9hZEZpbGVUb2dnbGUoZmlsZUlucHV0KTtcclxuICAgICAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuYXR0YWNoRmlsZS5yZXBsYWNlKCclaWQlJyxyb290LlN1cHBsaWVyLmlkKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxuICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgIHVybDphamF4VXJsLFxyXG4gICAgICAgICAgICAgICAgZGF0YTpkYXRhLFxyXG4gICAgICAgICAgICAgICAgdHlwZTonUE9TVCcsXHJcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTpmYWxzZSxcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0YS5zdWNjZXNzPT10cnVlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5hZGRBdHRhY2htZW50KGRhdGEuZGF0YS5hdHRhY2htZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5zZWxlY3RlZFVwbG9hZEZpbGVUb2dnbGUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhLnJlc3BvbnNlSlNPTik7XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5zZWxlY3RlZFVwbG9hZEZpbGVUb2dnbGUoKTtcclxuICAgICAgICAgICAgICAgICAgICBhamF4RXJyb3JGaWVsZEhhbmRsZXIoZGF0YS5yZXNwb25zZUpTT04uZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja05ldz1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZGVidWcoJ2NsaWNrTmV3Jyk7XHJcbiAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChPcHRzLlVSTC5jcmVhdGUscm9vdC5jbGlja05ld0NhbGxCYWNrKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNsaWNrTmV3Q2FsbEJhY2s9ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGRlYnVnKCdjYWxsYmFja05ldycpO1xyXG4gICAgICAgIHJvb3QuU3VwcGxpZXI9bmV3IHdpbmRvdy5TdXBwbGllcigpO1xyXG4gICAgICAgIHJvb3QuaW5pdFZpZXdEZXRhaWxzKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkVkaXQ9ZnVuY3Rpb24gKHJvd0RhdGEsbm9kZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdkYXRhdGFibGVSb3dBY3Rpb25FZGl0IENhbGxlZCcpO1xyXG4gICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xyXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmVkaXQucmVwbGFjZSgnJWlkJScscm93RGF0YS5pZCk7XHJcbiAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChhamF4VXJsLHJvb3QuaW5pdFZpZXdEZXRhaWxzKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnZGF0YXRhYmxlUm93QWN0aW9uRWRpdCBFbmQnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNsaWNrT3JkZXJEZWxldGVDb25maXJtZWQ9ZnVuY3Rpb24gKGV2ZW50KXtcclxuICAgICAgICBkZWJ1ZygnY2xpY2tTdXBwbGllckRlbGV0ZUNvbmZpcm1lZCcpO1xyXG4gICAgICAgIGRlYnVnKGV2ZW50KTtcclxuICAgICAgICBkZWJ1ZyhldmVudC5kYXRhKTtcclxuICAgICAgICAkKCcjZGlhbG9nTW9kYWwnKS5tb2RhbCgnaGlkZScpO1xyXG4gICAgICAgIGxldCBhamF4RGF0YT17fTtcclxuICAgICAgICBhamF4RGF0YS5fdG9rZW49T3B0cy50b2tlbjtcclxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5kZXN0cm95LnJlcGxhY2UoJyVpZCUnLGV2ZW50LmRhdGEuaWQpO1xyXG4gICAgICAgIGFqYXhEYXRhLl90b2tlbj0kKCdpbnB1dFtuYW1lPV90b2tlbl0nKS52YWwoKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhhamF4VXJsKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhhamF4RGF0YSk7XHJcbiAgICAgICAgbGV0IHJvdz0kKGRhdGFUYWJsZUNTU1NlbGVjdG9yKS5EYXRhVGFibGUoKS5yb3cocm9vdC5kYWRhdGF0YWJsZVJvd0FjdGlvbkNhbGxlck5vZGUucGFyZW50cygndHInKSk7XHJcbiAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgdXJsOmFqYXhVcmwsXHJcbiAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXHJcbiAgICAgICAgICAgIG1ldGhvZDpcIkRFTEVURVwiLFxyXG4gICAgICAgICAgICBzdWNjZXNzOmZ1bmN0aW9uIChkYXRhKXtcclxuICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93LnJlbW92ZSgpLmRyYXcoKTtcclxuICAgICAgICAgICAgICAgICAgICByb290LmRhZGF0YXRhYmxlUm93QWN0aW9uQ2FsbGVyTm9kZT1mYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuICAgIGxldCBkYXRhdGFibGVSb3dBY3Rpb25DYWxsZXJOb2RlPWZhbHNlO1xyXG5cclxuICAgIHRoaXMuZGF0YXRhYmxlUm93QWN0aW9uRGVsZXRlPWZ1bmN0aW9uIChyb3dEYXRhLG5vZGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZGF0YXRhYmxlUm93QWN0aW9uRGVsZXRlIENhbGxlZCcpO1xyXG4gICAgICAgIHJvb3QuZGFkYXRhdGFibGVSb3dBY3Rpb25DYWxsZXJOb2RlPW5vZGU7XHJcbiAgICAgICAgJCgnI2RpYWxvZ01vZGFsJykub24oJ3Nob3cuYnMubW9kYWwnLCBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgLy8gSWYgbmVjZXNzYXJ5LCB5b3UgY291bGQgaW5pdGlhdGUgYW4gQUpBWCByZXF1ZXN0IGhlcmUgKGFuZCB0aGVuIGRvIHRoZSB1cGRhdGluZyBpbiBhIGNhbGxiYWNrKS5cclxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBtb2RhbCdzIGNvbnRlbnQuIFdlJ2xsIHVzZSBqUXVlcnkgaGVyZSwgYnV0IHlvdSBjb3VsZCB1c2UgYSBkYXRhIGJpbmRpbmcgbGlicmFyeSBvciBvdGhlciBtZXRob2RzIGluc3RlYWQuXHJcbiAgICAgICAgICAgIHZhciBtb2RhbCA9ICQodGhpcyk7XHJcbiAgICAgICAgICAgIG1vZGFsLmZpbmQoJy5tb2RhbC10aXRsZScpLnRleHQoJ01lZ2VyxZFzw610w6lzICcpO1xyXG4gICAgICAgICAgICBtb2RhbC5maW5kKCcubW9kYWwtYm9keScpLnRleHQoJ0JpenRvc2FuIHTDtnJsaSBhIGJlc3rDoWxsw610w7N0PycpO1xyXG4gICAgICAgICAgICBtb2RhbC5maW5kKCcuYnV0dG9uWWVzJykub2ZmKCdjbGljaycpO1xyXG4gICAgICAgICAgICBtb2RhbC5maW5kKCcuYnV0dG9uWWVzJykub24oJ2NsaWNrJyx7aWQ6cm93RGF0YS5pZH0scm9vdC5jbGlja09yZGVyRGVsZXRlQ29uZmlybWVkKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAkKCcjZGlhbG9nTW9kYWwnKS5tb2RhbCgnc2hvdycpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2s9ZnVuY3Rpb24gKGV2ZW50KXtcclxuICAgICAgICBkZWJ1ZygnZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2snKTtcclxuICAgICAgICBsZXQgbm9kZT0kKGV2ZW50WzBdLmN1cnJlbnRUYXJnZXQpO1xyXG4gICAgICAgIGxldCByb3c9JChkYXRhVGFibGVDU1NTZWxlY3RvcikuRGF0YVRhYmxlKCkucm93KG5vZGUucGFyZW50cygndHInKSk7XHJcbiAgICAgICAgbGV0IHJvd0RhdGE9cm93LmRhdGEoKTtcclxuICAgICAgICBsZXQgYWN0aW9uTmFtZT0nZGF0YXRhYmxlUm93QWN0aW9uJytub2RlLmRhdGEoJ2J1dHRvbnR5cGUnKS5jYXBpdGFsaXplKCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByb290W2FjdGlvbk5hbWVdID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJvb3RbYWN0aW9uTmFtZV0ocm93RGF0YSxub2RlKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRWaWV3TGlzdCA9IGZ1bmN0aW9uIChvcHRpb25zPXt9KSB7XHJcbiAgICAgICAgZGVidWcoJ2xpc3R2aWV3IGluaWNpYWxpemF0aW9uJyk7XHJcbiAgICAgICAgZGF0YVRhYmxlQ1NTU2VsZWN0b3I9T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5kYXRhVGFibGUnOyAvL1xyXG5cclxuICAgICAgICBsZXQgY29sTnVtPSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IrJyB0aGVhZCB0aCcpLmxlbmd0aDsgLy9idXR0b25zIGluc2VydCBwb3NpdGlvbiBuZWVkXHJcbiAgICAgICAgQVBQLnNldE9wdHMoe1xyXG4gICAgICAgICAgICBkYXRhdGFibGVBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnJvb3QuY2xpY2tOZXcsXHJcbiAgICAgICAgICAgIGRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2s6cm9vdC5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayxcclxuXHJcbiAgICAgICAgfSlcclxuICAgICAgICBsZXQgb3JkZXJEaXJlY3RpdmU9T3B0cy5kYXRhVGFibGUub3JkZXJEaXJlY3RpdmU7XHJcbiAgICAgICAgaWYodHlwZW9mIG9wdGlvbnNbJ29yZGVyRGlyZWN0aXZlJ10hPSd1bmRlZmluZWQnKXtcclxuICAgICAgICAgICAgb3JkZXJEaXJlY3RpdmU9b3B0aW9uc1snb3JkZXJEaXJlY3RpdmUnXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgJChkYXRhVGFibGVDU1NTZWxlY3RvcikuRGF0YVRhYmxlKCB7XHJcbiAgICAgICAgICAgIGxhbmd1YWdlOiB7XHJcbiAgICAgICAgICAgICAgICB1cmw6ICcvL2Nkbi5kYXRhdGFibGVzLm5ldC9wbHVnLWlucy8xLjEwLjI0L2kxOG4vSHVuZ2FyaWFuLmpzb24nXHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAvL1wiYWpheFwiOiBcInt7YXNzZXQoJ2V4YXBtbGUyLmpzb24nKX19XCIsXHJcbiAgICAgICAgICAgIFwiYWpheFwiOiBPcHRzLlVSTC5nZXREYXRhVGFibGVDb250ZW50LFxyXG4gICAgICAgICAgICBcImNvbHVtbkRlZnNcIjogW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIFwidGFyZ2V0c1wiOiBjb2xOdW0tMSxcclxuICAgICAgICAgICAgICAgICAgICBcInJlbmRlclwiOiBmdW5jdGlvbiAoIGRhdGEsIHR5cGUsIHJvdyApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJ1dHRvbnM9QVBQLmRhdGF0YWJsZUFkZFJvd1RyYXNoQnV0dG9uKDAsYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9ucys9QVBQLmRhdGF0YWJsZUFkZFJvd0VkaXRCdXR0b24oMCxhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnV0dG9ucztcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogMSxcclxuICAgICAgICAgICAgICAgICAgICBcInJlbmRlclwiOiBmdW5jdGlvbiAoIGRhdGEsIHR5cGUsIHJvdyApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT09IFwic29ydFwiID8gZGF0YS5sYXRpbmlzZSgpIDogZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIC8veyBcInZpc2libGVcIjogZmFsc2UsICBcInRhcmdldHNcIjogWyAwIF0gfVxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBidXR0b25zOntcclxuICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFtcclxuICAgICAgICAgICAgICAgICAgICAnZXhjZWwnLCdwZGYnLFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kOiAncHJpbnQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3RleHQ6ICdQcmludCBjdXJyZW50IHBhZ2UnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiAndGl0bGUgY3VzdG9tIHRleHQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZVRvcCc6ICdNZXNzYWdlIE9uIFRvcCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QcmludDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgLyoqL1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICfDmmogZmVsdml0ZWxlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnYnRuIGJ0bi1zdWNjZXNzIG5ld0l0ZW0nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyOntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTp7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6MSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjoyXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YSc6J25ld0l0ZW0nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uKGFwaSwgbm9kZSwgY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKG5vZGUpLnJlbW92ZUNsYXNzKCd1aS1idXR0b24nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uICggZSwgZHQsIG5vZGUsIGNvbmZpZyApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQUC5kYXRhdGFibGVBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrKGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25zb2xlLmxvZyhlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coY29uZmlnKTsqL1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJjb2x1bW5zXCI6IFtcclxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiaWRcIiB9LFxyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJuYW1lXCIgfSxcclxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiaG9vcmV5Y2FJZFwiIH0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcIm5hbWVJZFwiIH0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImNyZWF0ZWRfYXRcIiB9LFxyXG4gICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgXCJvcmRlclwiOiBvcmRlckRpcmVjdGl2ZSxcclxuICAgICAgICAgICAgXCJzdGF0ZVNhdmVcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJkcmF3Q2FsbGJhY2tcIjogZnVuY3Rpb24oIHNldHRpbmdzICkge1xyXG4gICAgICAgICAgICAgICAgQVBQLmRhdGF0YWJsZUFkZFJvd0FjdGlvbihkYXRhVGFibGVDU1NTZWxlY3Rvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ICk7XHJcbiAgICAgICAgZGVidWcoJ2xpc3R2aWV3IGVuZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYXV0b2ZpbGxEZXRhaWxzPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIGRlYnVnKCdueWVyZXNyZSBhbGx1bmsnKTtcclxuICAgICAgICBsZXQgcmFuZG9tTnVtYmVyPWdldFJhbmRvbUludCg5OTk5KTtcclxuICAgICAgICAkKCdpbnB1dFtuYW1lPW5hbWVdJykudmFsKCdCZXN6YWzDrXTDsycrcmFuZG9tTnVtYmVyKTtcclxuICAgICAgICAkKCdpbnB1dFtuYW1lPWhvb3JleWNhSWRdJykudmFsKCdoYicrcmFuZG9tTnVtYmVyKTtcclxuICAgICAgICAkKCdpbnB1dFtuYW1lPW5hbWVJZF0nKS52YWwoJ2JlJytyYW5kb21OdW1iZXIpO1xyXG4gICAgICAgICQoJ2lucHV0W25hbWU9b3JkZXJFbWFpbF0nKS52YWwoJ2thcGNzb2xhdCcrcmFuZG9tTnVtYmVyKydAYmVzemFsbGl0by5odScpO1xyXG4gICAgICAgICQoJ2lucHV0W25hbWU9b3JkZXJFbWFpbDJdJykudmFsKCdpbmZvcm1hY2lvJytyYW5kb21OdW1iZXIrJ0BiZXN6YWxsaXRvLmh1Jyk7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1hZGRyZXNzXScpLnZhbCgnODk4OSBTdXBwbGllciB1dGNhICcrcmFuZG9tTnVtYmVyKTtcclxuICAgICAgICAkKCdpbnB1dFtuYW1lPW1haWxpbmdBZGRyZXNzXScpLnZhbCgnODk4OSBQb3N0YWkgw7p0JytyYW5kb21OdW1iZXIpO1xyXG4gICAgICAgICQoJ2lucHV0W25hbWU9cGhvbmVdJykudmFsKCcrMzYzMDEyMzQ1NjcnKTtcclxuICAgICAgICAkKCdpbnB1dFtuYW1lPWZheF0nKS52YWwoJzM2MzA4ODg5OTk5Jyk7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1jdXN0b21lclNlcnZpY2VQaG9uZV0nKS52YWwoJyszNjc2MTIzNDQ0NCcpO1xyXG4gICAgICAgICQoJ3RleHRhcmVhW25hbWU9bm90ZV0nKS52YWwoJ01lZ2plZ3l6ZW0gJytyYW5kb21OdW1iZXIpO1xyXG5cclxuICAgIH1cclxuICAgIHRoaXMudGVzdE1vZGU9ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnNvbGUuZGVidWcoJyEhISF0ZXN0bW9kZSAhISEhJyk7XHJcbiAgICAgICAgcm9vdC5TdXBwbGllciA9IG5ldyB3aW5kb3cuU3VwcGxpZXIoe1xyXG4gICAgICAgICAgICAnY29udGFjdCc6W1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOjIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOjMsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOjMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6J0vDs3NhIFZlcm9uaWthJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1haWw6J3N6YW1sYXphczRAZnVua2Npby5odScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBob25lOid7e2Zvcm1hdHRlclBob25lTnVtYmVyKFwiKzM2MjA0NTg5MTgwXCIpfX0nXHJcbiAgICAgICAgICAgIH1cclxuKi9cclxuXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9KTtcclxuICAgICAgICBPcHRzLm9uQWZ0ZXJJbml0Vmlld0RldGFpbHM9cm9vdC5hdXRvZmlsbERldGFpbHM7XHJcbiAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChPcHRzLlVSTC5jcmVhdGUscm9vdC5pbml0Vmlld0RldGFpbHMpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbml0PWZ1bmN0aW9uIChvcHRpb25zLFN1cHBsaWVySXRlbSl7XHJcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XHJcblxyXG4gICAgICAgIGlmKE9wdHMudGVzdE1vZGUpe1xyXG4gICAgICAgICAgICByZXR1cm4gcm9vdC50ZXN0TW9kZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihTdXBwbGllckl0ZW0pe1xyXG4gICAgICAgICAgICByb290LlN1cHBsaWVyPVN1cHBsaWVySXRlbVxyXG4gICAgICAgIH1cclxuICAgICAgICByb290LmluaXRWaWV3TGlzdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVuZGVyQXR0YWNobWVudD1mdW5jdGlvbiAoKXtcclxuICAgICAgICBsZXQgcm93TnVtPTE7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3JlbmRlcmluZ0F0dGFjaG1lbnQnKTtcclxuICAgICAgICAkLmVhY2gocm9vdC5TdXBwbGllci5nZXREYXRhKCdhdHRhY2htZW50JyksZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIGxldCBhdHRhY2htZW50RGF0YT10aGlzO1xyXG4gICAgICAgICAgICBhdHRhY2htZW50RGF0YS5yb3dOdW09cm93TnVtO1xyXG4gICAgICAgICAgICBkYXRlPW5ldyBEYXRlKGF0dGFjaG1lbnREYXRhLmNyZWF0ZWRfYXQpO1xyXG4gICAgICAgICAgICBhdHRhY2htZW50RGF0YS5kYXRlPWRhdGUudG9Mb2NhbGVTdHJpbmcoKTtcclxuICAgICAgICAgICAgYXR0YWNobWVudERhdGEubGluaz1hdHRhY2htZW50RGF0YS5QdWJsaWNVcmwrJy8nK2F0dGFjaG1lbnREYXRhLmZpbGVuYW1lO1xyXG4gICAgICAgICAgICBsZXQgdGVtcGxhdGU9JCgndGVtcGxhdGVbZGF0YS1uYW1lPVwic3VwcGxpZXJBdHRhY2htZW50VGFibGVSb3dcIl0nKS5odG1sKClcclxuICAgICAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsYXR0YWNobWVudERhdGEpO1xyXG4gICAgICAgICAgICAkKCcuYXR0YWNobWVudFRhYmxlIHRib2R5JykuYXBwZW5kKHJlbmRlcik7XHJcbiAgICAgICAgICAgIHJvd051bSsrO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QuYmluZEF0dGFjaG1lbnRDbGlja0FjdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWRkQXR0YWNobWVudD1mdW5jdGlvbiAoYXR0YWNobWVudERhdGEpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGF0dGFjaG1lbnREYXRhKTtcclxuICAgICAgICBsZXQgQ1NTU2VsZWN0b3JGb3JtPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuc3VwcGxpZXJGb3JtJztcclxuICAgICAgICByb290LlN1cHBsaWVyLmF0dGFjaG1lbnQucHVzaChhdHRhY2htZW50RGF0YSk7XHJcbiAgICAgICAgYXR0YWNobWVudERhdGEucm93TnVtPXJvb3QuU3VwcGxpZXIuYXR0YWNobWVudC5sZW5ndGg7XHJcbiAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInN1cHBsaWVyQXR0YWNobWVudFRhYmxlUm93XCJdJykuaHRtbCgpXHJcbiAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsYXR0YWNobWVudERhdGEpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmF0dGFjaG1lbnRUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xyXG4gICAgICAgIHJvb3QuYmluZENvbnRhY3RDbGlja0FjdGlvbigpO1xyXG4gICAgICAgIFRvYXN0LmVuYWJsZVRpbWVycyhmYWxzZSk7XHJcbiAgICAgICAgVG9hc3QuY3JlYXRlKFwiRsOhamwgaG96esOhYWR2YSFcIiwgYXR0YWNobWVudERhdGEub3JpZ2luYWxfZmlsZW5hbWUrXCIgZsOhamwgaG96esOhYWR2YVwiLCBUT0FTVF9TVEFUVVMuU1VDQ0VTUyw1MDAwKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5yZXNldENvbnRhY3RUYWJsZT1mdW5jdGlvbiAoKXtcclxuICAgICAgICAkKCcuY29udGFjdFRhYmxlIHRib2R5IHRyJykucmVtb3ZlKCk7XHJcbiAgICAgICAgcm9vdC5yZW5kZXJDb250YWN0KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlbmRlckNvbnRhY3Q9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgbGV0IHJvd051bT0xO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdyZW5kZXJpbmdDb250YWN0cycpO1xyXG4gICAgICAgICQuZWFjaChyb290LlN1cHBsaWVyLmdldERhdGEoJ2NvbnRhY3QnKSxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgbGV0IGNvbnRhY3REYXRhPXRoaXM7XHJcbiAgICAgICAgICAgIGNvbnRhY3REYXRhLnJvd051bT1yb3dOdW07XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coY29udGFjdERhdGEpO1xyXG4gICAgICAgICAgICBsZXQgdGVtcGxhdGU9JCgndGVtcGxhdGVbZGF0YS1uYW1lPVwic3VwcGxpZXJDb250YWN0VGFibGVSb3dcIl0nKS5odG1sKClcclxuICAgICAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsY29udGFjdERhdGEpO1xyXG4gICAgICAgICAgICAkKCcuY29udGFjdFRhYmxlIHRib2R5JykuYXBwZW5kKHJlbmRlcik7XHJcbiAgICAgICAgICAgIHJvd051bSsrO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QuYmluZENvbnRhY3RDbGlja0FjdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYmluZENvbnRhY3RDbGlja0FjdGlvbiA9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgbGV0IG5vZGU9JCgnLmNvbnRhY3RUYWJsZSAuYnV0dG9uRGVsZXRlJyk7XHJcbiAgICAgICAgbm9kZS51bmJpbmQoJ2NsaWNrJyk7XHJcbiAgICAgICAgbm9kZS5iaW5kKCdjbGljaycscm9vdC5jb250YWN0RGVsZXRlQ2xpY2spO1xyXG5cclxuICAgICAgICBub2RlPSQoJy5jb250YWN0VGFibGUgLmJ1dHRvbkVkaXQnKTtcclxuICAgICAgICBub2RlLnVuYmluZCgnY2xpY2snKTtcclxuICAgICAgICBub2RlLmJpbmQoJ2NsaWNrJyxyb290LmNvbnRhY3RFZGl0Q2xpY2spO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJpbmRBdHRhY2htZW50Q2xpY2tBY3Rpb249ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgbGV0IG5vZGU9JCgnLmF0dGFjaG1lbnRUYWJsZSAuYnV0dG9uRGVsZXRlJyk7XHJcbiAgICAgICAgbm9kZS51bmJpbmQoJ2NsaWNrJyk7XHJcbiAgICAgICAgbm9kZS5iaW5kKCdjbGljaycscm9vdC5hdHRhY2htZW50RGVsZXRlQ2xpY2spO1xyXG4gICAgfVxyXG4gICAgbGV0IGN1cnJlbnRBdHRhY2htZW50Um93PWZhbHNlO1xyXG4gICAgdGhpcy5hdHRhY2htZW50RGVsZXRlQ2xpY2s9ZnVuY3Rpb24gKGV2ZW50KXtcclxuICAgICAgICBsZXQgcm93PSQodGhpcykuY2xvc2VzdCgndHInKTtcclxuICAgICAgICBsZXQgaWQ9cm93LmZpbmQoJ2lucHV0W25hbWU9YXR0YWNobWVudElkXScpLnZhbCgpO1xyXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmRldGFjaEZpbGUucmVwbGFjZSgnJWlkJScscm9vdC5TdXBwbGllci5pZCk7XHJcbiAgICAgICAgLy9sZXQgZGF0YT0gbmV3IEZvcm1EYXRhKCQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcikuZmluZCgnZm9ybS5zdXBwbGllckZvcm0nKVswXSk7XHJcbiAgICAgICAgLy9kYXRhLmFwcGVuZChmaWxlSW5wdXQuYXR0cignbmFtZScpLGZpbGVJbnB1dFswXS5maWxlc1swXSk7XHJcbiAgICAgICAgbGV0IGRhdGE9e307XHJcbiAgICAgICAgZGF0YS5fdG9rZW49JCgnaW5wdXRbbmFtZT1cIl90b2tlblwiXScpLnZhbCgpO1xyXG4gICAgICAgIGRhdGEuYXR0YWNoZW1udElkPWlkO1xyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxyXG4gICAgICAgICAgICBkYXRhOmRhdGEsXHJcbiAgICAgICAgICAgIHR5cGU6J1BPU1QnLFxyXG4gICAgICAgICAgICAvL2NvbnRlbnRUeXBlOmZhbHNlLFxyXG4gICAgICAgICAgICAvL3Byb2Nlc3NEYXRhOiBmYWxzZSxcclxuICAgICAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcclxuICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5TdXBwbGllci5hdHRhY2htZW50PXJvb3QuU3VwcGxpZXIuYXR0YWNobWVudC5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZSxpbmRleCxhcnIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmlkIT09ZGF0YS5kYXRhLiAgIGF0dGFjaG1lbnQuaWQqMSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICAgICAgLy9yb3cucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5yZXNldEF0dGFjaG1lbnRUYWJsZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YS5yZXNwb25zZUpTT04pO1xyXG4gICAgICAgICAgICAgICAgcm9vdC5zZWxlY3RlZFVwbG9hZEZpbGVUb2dnbGUoKTtcclxuICAgICAgICAgICAgICAgIGFqYXhFcnJvckZpZWxkSGFuZGxlcihkYXRhLnJlc3BvbnNlSlNPTi5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5yZXNldEF0dGFjaG1lbnRUYWJsZT1mdW5jdGlvbiAoKXtcclxuICAgICAgICAkKCcuYXR0YWNobWVudFRhYmxlIHRib2R5IHRyJykucmVtb3ZlKCk7XHJcbiAgICAgICAgcm9vdC5yZW5kZXJBdHRhY2htZW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jb250YWN0RGVsZXRlQ2xpY2s9ZnVuY3Rpb24gKGV2ZW50KXtcclxuICAgICAgICBsZXQgcm93PSQodGhpcykuY2xvc2VzdCgndHInKTtcclxuICAgICAgICBsZXQgaWQ9cm93LmZpbmQoJ2lucHV0W25hbWU9Y29udGFjdElkXScpLnZhbCgpO1xyXG4gICAgICAgIHJvb3QuU3VwcGxpZXIuY29udGFjdD1yb290LlN1cHBsaWVyLmNvbnRhY3QuZmlsdGVyKFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUsaW5kZXgsYXJyKXtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pZCE9PWlkKjEpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAgdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcm93LnJlbW92ZSgpO1xyXG4gICAgICAgIHJvb3QucmVzZXRDb250YWN0VGFibGUoKTtcclxuICAgIH1cclxuICAgIHJvb3QuZ2V0Q29udGFjdFBvcHVwV29ya2Zsb3cgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRhY3RQb3B1cFdvcmtmbG93O1xyXG4gICAgfVxyXG4gICAgcm9vdC5zZXRDb250YWN0UG9wdXBXb3JrZmxvdyA9IGZ1bmN0aW9uIChzdGF0dXMpIHtcclxuICAgICAgICBjb250YWN0UG9wdXBXb3JrZmxvdz1zdGF0dXM7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMuY29udGFjdEVkaXRDbGljaz1mdW5jdGlvbiAoZXZlbnQpe1xyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcyk7XHJcbiAgICAgICAgbGV0IHJvdz0kKHRoaXMpLmNsb3Nlc3QoJ3RyJyk7XHJcbiAgICAgICAgbGV0IGlkPXJvdy5maW5kKCdpbnB1dFtuYW1lPWNvbnRhY3RJZF0nKS52YWwoKTtcclxuICAgICAgICByb290LnNldENvbnRhY3RQb3B1cFdvcmtmbG93KCdlZGl0Jyk7XHJcbiAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5sb2FkRGF0YShpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5nZXRTdXBwbGllcj1mdW5jdGlvbiAoKXtcclxuICAgICAgICByZXR1cm4gcm9vdC5TdXBwbGllcjtcclxuICAgIH1cclxuICAgIHRoaXMuY29udGFjdEFjdGlvbj1mdW5jdGlvbiAoY29udGFjdERhdGEpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCduYWggbW9zdCBrZWxsZW5lIG1lZyB2YWxhbWl0IGNzaW5hbG5pLicpXHJcbiAgICAgICAgaWYocm9vdC5nZXRDb250YWN0UG9wdXBXb3JrZmxvdygpPT0nbmV3Jyl7XHJcbiAgICAgICAgICAgIHJvb3QuYWRkQ29udGFjdChjb250YWN0RGF0YSk7XHJcbiAgICAgICAgfWVsc2UgaWYocm9vdC5nZXRDb250YWN0UG9wdXBXb3JrZmxvdygpPT0nZWRpdCcpe1xyXG4gICAgICAgICAgICByb290LmVkaXRDb250YWN0KGNvbnRhY3REYXRhLmlkLGNvbnRhY3REYXRhKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lZGl0Q29udGFjdD1mdW5jdGlvbiAoaWQsY29udGFjdERhdGEpe1xyXG5cclxuICAgICAgICBsZXQgbmV3Q29udGFjdHM9W107XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuU3VwcGxpZXIuZ2V0RGF0YSgnY29udGFjdCcpLGZ1bmN0aW9uIChpbmRleCl7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaWQ9PWlkKXtcclxuICAgICAgICAgICAgICAgIG5ld0NvbnRhY3RzLnB1c2goY29udGFjdERhdGEpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIG5ld0NvbnRhY3RzLnB1c2godGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByb290LlN1cHBsaWVyLmNvbnRhY3Q9bmV3Q29udGFjdHM7XHJcbiAgICAgICAgcm9vdC5yZXNldENvbnRhY3RUYWJsZSgpO1xyXG4gICAgICAgIFRvYXN0LmNyZWF0ZShcIkthcGNzb2xhdCBhZGF0YWkgbcOzZG9zw610dmEhXCIsIGNvbnRhY3REYXRhLm5hbWUrXCIgbmV2xbEga2Fwb2Nzb2xhdHRhcnTDsyBtw7Nkb3PDrXR2YVwiLCBUT0FTVF9TVEFUVVMuU1VDQ0VTUyw1MDAwKTtcclxuICAgIH1cclxuICAgIHRoaXMuYWRkQ29udGFjdD1mdW5jdGlvbiAoY29udGFjdERhdGEpe1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgZmVsIGtlbGwgdmVubmkgYSBzb3JiYVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJvb3QuU3VwcGxpZXIuY29udGFjdC5wdXNoKGNvbnRhY3REYXRhKTtcclxuICAgICAgICBjb250YWN0RGF0YS5yb3dOdW09cm9vdC5TdXBwbGllci5jb250YWN0Lmxlbmd0aDtcclxuICAgICAgICBsZXQgdGVtcGxhdGU9JCgndGVtcGxhdGVbZGF0YS1uYW1lPVwic3VwcGxpZXJDb250YWN0VGFibGVSb3dcIl0nKS5odG1sKClcclxuICAgICAgICBsZXQgcmVuZGVyPU11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSxjb250YWN0RGF0YSk7XHJcbiAgICAgICAgJCgnLmNvbnRhY3RUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xyXG4gICAgICAgIHJvb3QuYmluZENvbnRhY3RDbGlja0FjdGlvbigpO1xyXG4gICAgICAgIFRvYXN0LmVuYWJsZVRpbWVycyhmYWxzZSk7XHJcbiAgICAgICAgVG9hc3QuY3JlYXRlKFwiS2FwY3NvbGF0IHRhcnTDsyBob3p6w6FhZHZhIVwiLCBjb250YWN0RGF0YS5uYW1lK1wiIG5ldsWxIGthcG9jc29sYXR0YXJ0w7MgaG96esOhYWR2YVwiLCBUT0FTVF9TVEFUVVMuU1VDQ0VTUyw1MDAwKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5jb25zdHJ1Y3Qob3B0aW9ucyxTdXBwbGllckl0ZW0pO1xyXG59O1xyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFHLE9BQU9BLFFBQVEsS0FBRyxXQUFXLEVBQUM7RUFBQSxJQUN2QkEsU0FBUSwwQkFBQUMsVUFBQTtJ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LENBQUNxRCxFQUFFLElBQUVBLEVBQUUsRUFBQztRQUNYNkosV0FBVyxDQUFDbEwsSUFBSSxDQUFDaUssV0FBVyxDQUFDO01BQ2pDLENBQUMsTUFBSTtRQUNEaUIsV0FBVyxDQUFDbEwsSUFBSSxDQUFDLElBQUksQ0FBQztNQUMxQjtJQUNKLENBQUMsQ0FBQztJQUNGcEIsSUFBSSxDQUFDbkMsUUFBUSxDQUFDUSxPQUFPLEdBQUNpTyxXQUFXO0lBQ2pDdE0sSUFBSSxDQUFDb0wsaUJBQWlCLENBQUMsQ0FBQztJQUN4Qm5JLEtBQUssQ0FBQzFELE1BQU0sQ0FBQyw2QkFBNkIsRUFBRThMLFdBQVcsQ0FBQ3JILElBQUksR0FBQyxpQ0FBaUMsRUFBRWQsWUFBWSxDQUFDQyxPQUFPLEVBQUMsSUFBSSxDQUFDO0VBQzlILENBQUM7RUFDRCxJQUFJLENBQUNpSixVQUFVLEdBQUMsVUFBVWYsV0FBVyxFQUFDO0lBQ2xDO0FBQ1I7QUFDQTtJQUNRckwsSUFBSSxDQUFDbkMsUUFBUSxDQUFDUSxPQUFPLENBQUMrQyxJQUFJLENBQUNpSyxXQUFXLENBQUM7SUFDdkNBLFdBQVcsQ0FBQ2xCLE1BQU0sR0FBQ25LLElBQUksQ0FBQ25DLFFBQVEsQ0FBQ1EsT0FBTyxDQUFDK0csTUFBTTtJQUMvQyxJQUFJeUYsUUFBUSxHQUFDMUssQ0FBQyxDQUFDLCtDQUErQyxDQUFDLENBQUMySyxJQUFJLENBQUMsQ0FBQztJQUN0RSxJQUFJN0IsTUFBTSxHQUFDOEIsUUFBUSxDQUFDOUIsTUFBTSxDQUFDNEIsUUFBUSxFQUFDUSxXQUFXLENBQUM7SUFDaERsTCxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQ3lCLE1BQU0sQ0FBQ3FILE1BQU0sQ0FBQztJQUN2Q2pKLElBQUksQ0FBQ2lMLHNCQUFzQixDQUFDLENBQUM7SUFDN0JoSSxLQUFLLENBQUNpSSxZQUFZLENBQUMsS0FBSyxDQUFDO0lBQ3pCakksS0FBSyxDQUFDMUQsTUFBTSxDQUFDLDRCQUE0QixFQUFFOEwsV0FBVyxDQUFDckgsSUFBSSxHQUFDLGlDQUFpQyxFQUFFZCxZQUFZLENBQUNDLE9BQU8sRUFBQyxJQUFJLENBQUM7RUFDN0gsQ0FBQztFQUdELElBQUksQ0FBQ2pELFNBQVMsQ0FBQ2pDLE9BQU8sRUFBQ1ksWUFBWSxDQUFDO0FBQ3hDLENBQUMiLCJpZ25vcmVMaXN0IjpbXSwiZmlsZSI6Ii4vcmVzb3VyY2VzL2pzL2FkbWluL3N1cHBsaWVyLmpzIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/admin/supplier.js\n\n}"); /***/ } diff --git a/public/js/app.js b/public/js/app.js index b788ec6..cc6886a 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -15,7 +15,7 @@ \*****************************/ (__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { -eval("{function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\n__webpack_require__(/*! ./bootstrap */ \"./resources/js/bootstrap.js\");\n\n//----------------------------------------------------------------------\n/*\r\nHelper function\r\n*/\nwindow.getMonday = function (date, dateStr) {\n if (dateStr) {\n date = new Date(dateStr);\n }\n var day = date.getDay(),\n diff = date.getDate() - day + (day == 0 ? -6 : 1); // adjust when day is sunday\n return new Date(date.setDate(diff));\n};\nwindow.debug = function (txt) {\n try {\n console.log(txt);\n } catch (e) {}\n};\nwindow.buildFormData = function (formData, data, parentKey) {\n if (data && _typeof(data) === 'object' && !(data instanceof Date) && !(data instanceof File)) {\n Object.keys(data).forEach(function (key) {\n buildFormData(formData, data[key], parentKey ? \"\".concat(parentKey, \"[\").concat(key, \"]\") : key);\n });\n } else {\n var value = data == null ? '' : data;\n formData.append(parentKey, value);\n }\n};\nwindow.jsonToFormData = function (data) {\n var formData = new FormData();\n buildFormData(formData, data);\n return formData;\n};\nString.prototype.capitalize = function () {\n return this.charAt(0).toUpperCase() + this.slice(1);\n};\nwindow.arrayRemove = function (arr, value) {\n return arr.filter(function (ele) {\n return ele != value;\n });\n};\nwindow.getRandomInt = function () {\n var max = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Number.MAX_SAFE_INTEGER;\n var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n debug(max);\n debug(min);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n};\nwindow.setImageFromLocal = function (input, targetImgCssSelector) {\n if (input.files && input.files[0]) {\n var reader = new FileReader();\n reader.onload = function (e) {\n $(targetImgCssSelector).attr('src', e.target.result);\n };\n reader.readAsDataURL(input.files[0]);\n }\n};\n__webpack_require__(/*! ./latinise */ \"./resources/js/latinise.js\");\n\n/*\r\ndisable back button\r\n */\n$(function () {\n if (window.history && window.history.pushState) {\n window.history.pushState('', null, window.location.href);\n $(window).on('popstate', function (event) {\n // alert('Back button was pressed.');\n //document.location.href = '#';\n window.history.pushState('', document.title, window.location.href);\n //console.log('mevagy');\n event.stopPropagation();\n });\n }\n});\n//----------------------------------------------------------------------\n/*\r\ninit custom radio buttons\r\n */\nwindow.initRadioButtons = function (Options) {\n var Opts = {\n onChange: function onChange(value, node) {}\n };\n $.extend(Opts, Options);\n var activeValue = $('.customRadioBtnGroup .active').data('title');\n var target = $('.customRadioBtnGroup .active').data('toggle');\n $('input[name=' + target + ']').prop('value', activeValue);\n $('.customRadioBtnGroup a').unbind('click');\n $('.customRadioBtnGroup a').bind('click', function () {\n var sel = $(this).data('title');\n var tog = $(this).data('toggle');\n $('input[name=' + tog + ']').prop('value', sel);\n $('a[data-toggle=\"' + tog + '\"]').not('[data-title=\"' + sel + '\"]').removeClass('active').addClass('notActive');\n $('a[data-toggle=\"' + tog + '\"][data-title=\"' + sel + '\"]').removeClass('notActive').addClass('active');\n Opts.onChange(sel, tog);\n });\n};\n\n//----------------------------------------------------------------------\n// Defaults\n//----------------------------------------------------------------------\n$.extend(true, $.fn.dataTable.defaults, {\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n lengthMenu: [[10, 25, 50, -1], ['10 sor', '25 sor', '50 sor', 'Összes']],\n buttons: {\n dom: {\n button: {\n className: 'fg-button ui-button dataTableHeaderButtons'\n }\n }\n },\n dom: '<\"fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix ui-corner-tl ui-corner-tr\"lBfr>' + 't' + '<\"fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix ui-corner-bl ui-corner-br\"ip>'\n});\nInputmask.extendDefinitions({\n 'x': {\n validator: \"[\\.,-áéíóöőúàèìòùüűÁÉÍÓÖŐÚÀÈÌÒÙÜŰA-Za-z0-9 ]\"\n //cardinality: 1\n }\n});\n\n//----------------------------------------------------------------------\nToast.enableTimers(false);\n$.fn.select2.defaults.set('language', 'jp');\nwindow.select2CreateTag = function (params) {\n var term = $.trim(params.term);\n var count = 0;\n var existsVar = false;\n //check if there is any option already\n if ($('#keywords option').length > 0) {\n $('#keywords option').each(function () {\n if ($(this).text().toUpperCase() == term.toUpperCase()) {\n existsVar = true;\n return false;\n } else {\n existsVar = false;\n }\n });\n if (existsVar) {\n return null;\n }\n return {\n id: params.term,\n text: params.term,\n newTag: true\n };\n }\n //since select has 0 options, add new without comparing\n else {\n return {\n id: params.term,\n text: params.term,\n newTag: true\n };\n }\n};\nwindow.ajaxErrorHandler = function (xhr, ajaxOptions, thrownError) {\n debug(this);\n debug(xhr);\n debug(ajaxOptions);\n debug(thrownError);\n if (xhr.responseJSON.errors) {\n if (\"jsonapi\" in xhr.responseJSON) {\n ajaxErrorFieldHandlerJsonAPI(xhr.responseJSON.errors);\n } else {\n ajaxErrorFieldHandler(xhr.responseJSON.errors);\n }\n } else {\n if (xhr.status == 404) {\n ajaxErrorFieldHandler({\n 'detail': 'Nincs ilyen elem.'\n });\n } else {\n ajaxErrorFieldHandler({\n 'detail': 'Általános hiba.'\n });\n }\n }\n};\nwindow.ajaxErrorFieldHandlerJsonAPI = function (errors, container) {\n var toastBodyHtml = '';\n var toastTitle = 'Hiba';\n console.error(errors);\n $.each(errors, function (index, value) {\n console.error(value);\n toastTitle = 'Hiba';\n toastBodyHtml = '';\n if (\"title\" in value) {\n toastTitle = value.title;\n }\n if (\"detail\" in value) {\n toastBodyHtml += '
' + value.detail + '
';\n }\n Toast.create(toastTitle, toastBodyHtml, TOAST_STATUS.DANGER, 10000);\n });\n};\nwindow.ajaxErrorFieldHandler = function (errors, container) {\n var toastBodyHtml = '';\n $.each(errors, function (index, value) {\n toastBodyHtml += '
' + value + '
';\n });\n Toast.create(\"Hiba!\", toastBodyHtml, TOAST_STATUS.DANGER, 10000);\n /*\r\n Toast.fire({\r\n icon: 'error',\r\n html: toastBodyHtml\r\n });\r\n */\n};\n$.ajaxSetup({\n error: ajaxErrorHandler\n});\n/*\r\ndatepicker afterShow function\r\n */\n$.datepicker._updateDatepicker_original = $.datepicker._updateDatepicker;\n$.datepicker._updateDatepicker = function (inst) {\n $.datepicker._updateDatepicker_original(inst);\n var afterShow = this._get(inst, 'afterShow');\n if (afterShow) afterShow.apply(inst.input ? inst.input[0] : null); // trigger custom callback\n};\n\n//----------------------------------------------------------------------\nwindow.EmegrendelesDefaults = {\n datatableActionButtonClickCallBack: function datatableActionButtonClickCallBack() {},\n datatableAddRowTrashButton: function datatableAddRowTrashButton(id, args) {\n return '';\n },\n datatableAddRowEditButton: function datatableAddRowEditButton(args) {\n var title = 'Adatok';\n if (typeof args[1].title !== \"undefined\") {\n title = args[1].title;\n }\n return '';\n },\n datatableAddRowViewButton: function datatableAddRowViewButton(id, args) {\n return '';\n },\n datatableAddRowAttachmentButton: function datatableAddRowAttachmentButton(id, args) {\n return '';\n },\n datatableCustomHeadButtonClickCallBack: function datatableCustomHeadButtonClickCallBack(args) {\n console.log(args);\n },\n afterLoadMainContent: function afterLoadMainContent(args) {\n console.log(args);\n }\n};\nif (typeof DataModel === 'undefined') {\n var _DataModel2 = /*#__PURE__*/function () {\n /*\r\n * Constructor\r\n */\n function _DataModel2(data, options) {\n _classCallCheck(this, _DataModel2);\n /*\r\n * Variables accessible\r\n * in the class\r\n */\n _defineProperty(this, \"Opts\", {\n active: false\n });\n $.extend(this, data);\n $.extend(this.Opts, options);\n }\n return _createClass(_DataModel2, [{\n key: \"setData\",\n value: function setData(data) {\n $.extend(this, data);\n }\n }, {\n key: \"getData\",\n value: function getData(index) {\n if (index) {\n return this[index];\n } else {\n return this;\n }\n }\n }]);\n }();\n ;\n window.DataModel = _DataModel2;\n}\nwindow.Emegrendeles = function (options) {\n /*\r\n * Variables accessible\r\n * in the class\r\n */\n var Opts = {\n myVar: 'Emegrendeles value',\n datatableAddRowTrashButton: {},\n datatableAddRowEditButton: {},\n datatableActionButtonClickCallBack: {},\n datatableRowActionButtonClickCallBack: {},\n datatableCustomHeadButtonClickCallBack: {},\n afterLoadMainContent: {},\n Url: {}\n };\n var PublicVar = {};\n var PublicVar2 = {\n 'asd': '21'\n };\n var ApiToken = null;\n var root = this;\n /*\r\n * Constructor\r\n */\n this.construct = function (options) {\n //$.extend(Opts, options);\n console.log(this.constructor.name + ' constructor called');\n $.extend(Opts, window.EmegrendelesDefaults, options);\n };\n this.setOpts = function (options) {\n $.extend(Opts, options);\n };\n this.getOpts = function () {\n return Opts;\n };\n this.datatableAddRowTrashButton = function () {\n return Opts.datatableAddRowTrashButton(arguments);\n };\n this.datatableAddRowEditButton = function () {\n return Opts.datatableAddRowEditButton(arguments);\n };\n this.datatableAddRowViewButton = function () {\n return Opts.datatableAddRowViewButton(arguments);\n };\n this.datatableAddRowAttachmentButton = function () {\n return Opts.datatableAddRowAttachmentButton(arguments);\n };\n this.afterLoadMainContent = function () {\n return Opts.afterLoadMainContent(arguments);\n };\n this.datatableActionButtonClickCallBack = function () {\n return Opts.datatableActionButtonClickCallBack(arguments);\n };\n this.datatableRowActionButtonClickCallBack = function () {\n return Opts.datatableRowActionButtonClickCallBack(arguments);\n };\n this.datatableAddRowAction = function (CSSSelector) {\n if (!CSSSelector) {\n return;\n }\n $(CSSSelector + ' tr button').off('click');\n $(CSSSelector + ' tr button').on('click', APP.datatableRowActionButtonClickCallBack);\n };\n this.datatableCustomHeadButtonClickCallBack = function () {\n return Opts.datatableCustomHeadButtonClickCallBack(arguments);\n };\n\n /*\r\n * Public method\r\n * Can be called outside class\r\n */\n this.myPublicMethod = function () {\n console.log(Opts);\n myPrivateMethod();\n };\n this.setApiToken = function (token) {\n root.ApiToken = token;\n };\n this.getApiToken = function () {\n return root.ApiToken;\n };\n\n /*\r\n * Private method\r\n * Can only be called inside class\r\n */\n var myPrivateMethod = function myPrivateMethod() {\n console.log('accessed private method');\n };\n\n /**\r\n * @param {string} itemName\r\n */\n this.setActiveNavBarItem = function (itemName) {\n $('.speedButtonNavBar li').removeClass('selected');\n $('.speedButtonNavBar li.iconholderModul' + itemName).addClass('selected');\n return this;\n };\n this.getActiveNavBarItem = function () {\n return $('.speedButtonNavBar .selected').find('a').data('name');\n };\n this.clearArchiveModuleDataTableState = function () {\n if (APP.OrderArchiveModule != undefined) {\n console.log('APP.OrderArchiveModule');\n console.log('clear');\n APP.OrderArchiveModule.dataTable.state.clear();\n }\n };\n this.navBarItemBeforepost = function () {\n console.log('navBarItemBeforepost');\n if (root.getActiveNavBarItem() !== 'activeOrder') {\n root.clearArchiveModuleDataTableState();\n }\n ;\n };\n this.navBarItemAfterPost = function () {};\n this.initNavBar = function () {\n $(\".speedButtonNavBar a:not([data-target=_blank]):not([data-no-ajax])\").bind('click', function (event) {\n console.log($(this).data().name);\n if ($(this).data('big-icon')) {\n $(\".speedButtonNavBar\").removeClass('smallicons');\n } else {\n $(\".speedButtonNavBar\").addClass('smallicons');\n }\n root.setActiveNavBarItem($(this).data().name);\n event.preventDefault();\n });\n $(\".speedButtonNavBar a:not([data-target=_blank]):not([data-no-ajax])\").ajaxlink({\n target: $('.mainContent'),\n ajaxtype: 'GET',\n afterpost: root.navBarItemAfterPost,\n beforepost: root.navBarItemBeforepost\n });\n $(\".speedButtonNavBar a[data-target=_blank], .speedButtonNavBar a[data-no-ajax]\").bind('click', function () {\n root.clearArchiveModuleDataTableState();\n });\n };\n this.loadMainContent = function (url, data, callBack) {\n if (!callBack) {\n callBack = root.afterLoadMainContent;\n } else {\n console.log('van callback');\n console.log(callBack);\n }\n $('.mainContent').load(url, data, callBack);\n };\n /*\r\n * Pass options when class instantiated\r\n */\n this.construct(options);\n};\n\n/*\r\n$.fn.ajaxlink = function(options){\r\n\r\n};\r\nimport './ajaxLink';\r\n\r\n* */\nwindow.APP = {};\n$(document).ready(function () {\n console.log('ready doc');\n //$('.datepicker').datepicker();\n Mustache.tags = ['[[', ']]'];\n // = [ '<%', '%>' ];\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QjtFQUNBMkwsUUFBUSxDQUFDQyxJQUFJLEdBQUcsQ0FBRSxJQUFJLEVBQUUsSUFBSSxDQUFFO0VBQzlCO0FBRUosQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2FwcC5qcz9jZWQ2Il0sInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vYm9vdHN0cmFwJyk7XHJcblxyXG5cclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8qXHJcbkhlbHBlciBmdW5jdGlvblxyXG4qL1xyXG53aW5kb3cuZ2V0TW9uZGF5PWZ1bmN0aW9uKGRhdGUsZGF0ZVN0cikge1xyXG4gICAgaWYoZGF0ZVN0cil7XHJcbiAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKGRhdGVTdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkYXkgPSBkYXRlLmdldERheSgpLFxyXG4gICAgICAgIGRpZmYgPSBkYXRlLmdldERhdGUoKSAtIGRheSArIChkYXkgPT0gMCA/IC02OjEpOyAvLyBhZGp1c3Qgd2hlbiBkYXkgaXMgc3VuZGF5XHJcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS5zZXREYXRlKGRpZmYpKTtcclxufVxyXG53aW5kb3cuZGVidWc9ZnVuY3Rpb24gKHR4dClcclxue1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBjb25zb2xlLmxvZyh0eHQpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2goZSl7fVxyXG59O1xyXG5cclxud2luZG93LmJ1aWxkRm9ybURhdGE9ZnVuY3Rpb24oZm9ybURhdGEsIGRhdGEsIHBhcmVudEtleSkge1xyXG4gICAgaWYgKGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmICEoZGF0YSBpbnN0YW5jZW9mIERhdGUpICYmICEoZGF0YSBpbnN0YW5jZW9mIEZpbGUpKSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBidWlsZEZvcm1EYXRhKGZvcm1EYXRhLCBkYXRhW2tleV0sIHBhcmVudEtleSA/IGAke3BhcmVudEtleX1bJHtrZXl9XWAgOiBrZXkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGEgPT0gbnVsbCA/ICcnIDogZGF0YTtcclxuXHJcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKHBhcmVudEtleSwgdmFsdWUpO1xyXG4gICAgfVxyXG59XHJcblxyXG53aW5kb3cuanNvblRvRm9ybURhdGE9ZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuXHJcbiAgICBidWlsZEZvcm1EYXRhKGZvcm1EYXRhLCBkYXRhKTtcclxuXHJcbiAgICByZXR1cm4gZm9ybURhdGE7XHJcbn1cclxuXHJcblN0cmluZy5wcm90b3R5cGUuY2FwaXRhbGl6ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0aGlzLnNsaWNlKDEpXHJcbn1cclxuXHJcbndpbmRvdy5hcnJheVJlbW92ZT1mdW5jdGlvbihhcnIsIHZhbHVlKSB7XHJcblxyXG4gICAgcmV0dXJuIGFyci5maWx0ZXIoZnVuY3Rpb24oZWxlKXtcclxuICAgICAgICByZXR1cm4gZWxlICE9IHZhbHVlO1xyXG4gICAgfSk7XHJcbn1cclxud2luZG93LmdldFJhbmRvbUludD1mdW5jdGlvbiAobWF4PU51bWJlci5NQVhfU0FGRV9JTlRFR0VSLG1pbj0wKSB7XHJcbiAgICBkZWJ1ZyhtYXgpO1xyXG4gICAgZGVidWcobWluKTtcclxuICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpICsgbWluO1xyXG59XHJcblxyXG53aW5kb3cuc2V0SW1hZ2VGcm9tTG9jYWw9ZnVuY3Rpb24oaW5wdXQsdGFyZ2V0SW1nQ3NzU2VsZWN0b3IpIHtcclxuICAgIGlmIChpbnB1dC5maWxlcyAmJiBpbnB1dC5maWxlc1swXSkge1xyXG4gICAgICAgIGxldCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAkKHRhcmdldEltZ0Nzc1NlbGVjdG9yKS5hdHRyKCdzcmMnLCBlLnRhcmdldC5yZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChpbnB1dC5maWxlc1swXSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbnJlcXVpcmUoJy4vbGF0aW5pc2UnKTtcclxuXHJcbi8qXHJcbmRpc2FibGUgYmFjayBidXR0b25cclxuICovXHJcbiQoZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAod2luZG93Lmhpc3RvcnkgJiYgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKSB7XHJcbiAgICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKCcnLCBudWxsLCB3aW5kb3cubG9jYXRpb24uaHJlZik7XHJcbiAgICAgICAgJCh3aW5kb3cpLm9uKCdwb3BzdGF0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIC8vIGFsZXJ0KCdCYWNrIGJ1dHRvbiB3YXMgcHJlc3NlZC4nKTtcclxuICAgICAgICAgICAgLy9kb2N1bWVudC5sb2NhdGlvbi5ocmVmID0gJyMnO1xyXG4gICAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoJycsIGRvY3VtZW50LnRpdGxlLCB3aW5kb3cubG9jYXRpb24uaHJlZik7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ21ldmFneScpO1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSk7XHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vKlxyXG5pbml0IGN1c3RvbSByYWRpbyBidXR0b25zXHJcbiAqL1xyXG53aW5kb3cuaW5pdFJhZGlvQnV0dG9ucz1mdW5jdGlvbiAoT3B0aW9ucyl7XHJcbiAgICBsZXQgT3B0cyA9IHtcclxuICAgICAgICBvbkNoYW5nZTogZnVuY3Rpb24gKHZhbHVlLG5vZGUpIHtcclxuICAgICAgICB9LFxyXG4gICAgfTtcclxuXHJcbiAgICAkLmV4dGVuZChPcHRzLCBPcHRpb25zKTtcclxuXHJcbiAgICBsZXQgYWN0aXZlVmFsdWUgPSAkKCcuY3VzdG9tUmFkaW9CdG5Hcm91cCAuYWN0aXZlJykuZGF0YSgndGl0bGUnKTtcclxuICAgIGxldCB0YXJnZXQgPSAkKCcuY3VzdG9tUmFkaW9CdG5Hcm91cCAuYWN0aXZlJykuZGF0YSgndG9nZ2xlJyk7XHJcbiAgICAkKCdpbnB1dFtuYW1lPScrdGFyZ2V0KyddJykucHJvcCgndmFsdWUnLCBhY3RpdmVWYWx1ZSk7XHJcblxyXG4gICAgJCgnLmN1c3RvbVJhZGlvQnRuR3JvdXAgYScpLnVuYmluZCgnY2xpY2snKTtcclxuICAgICQoJy5jdXN0b21SYWRpb0J0bkdyb3VwIGEnKS5iaW5kKCdjbGljaycsZnVuY3Rpb24oKXtcclxuICAgICAgICBsZXQgc2VsID0gJCh0aGlzKS5kYXRhKCd0aXRsZScpO1xyXG4gICAgICAgIGxldCB0b2cgPSAkKHRoaXMpLmRhdGEoJ3RvZ2dsZScpO1xyXG4gICAgICAgICQoJ2lucHV0W25hbWU9Jyt0b2crJ10nKS5wcm9wKCd2YWx1ZScsIHNlbCk7XHJcbiAgICAgICAgJCgnYVtkYXRhLXRvZ2dsZT1cIicrdG9nKydcIl0nKS5ub3QoJ1tkYXRhLXRpdGxlPVwiJytzZWwrJ1wiXScpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKS5hZGRDbGFzcygnbm90QWN0aXZlJyk7XHJcbiAgICAgICAgJCgnYVtkYXRhLXRvZ2dsZT1cIicrdG9nKydcIl1bZGF0YS10aXRsZT1cIicrc2VsKydcIl0nKS5yZW1vdmVDbGFzcygnbm90QWN0aXZlJykuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xyXG4gICAgICAgIE9wdHMub25DaGFuZ2Uoc2VsLHRvZyk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vICBEZWZhdWx0c1xyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuJC5leHRlbmQoIHRydWUsICQuZm4uZGF0YVRhYmxlLmRlZmF1bHRzLCB7XHJcbiAgICBsYW5ndWFnZToge1xyXG4gICAgICAgIHVybDogJy8vY2RuLmRhdGF0YWJsZXMubmV0L3BsdWctaW5zLzEuMTAuMjQvaTE4bi9IdW5nYXJpYW4uanNvbidcclxuICAgIH0sXHJcbiAgICBsZW5ndGhNZW51OiBbXHJcbiAgICAgICAgWyAxMCwgMjUsIDUwLCAtMSBdLFxyXG4gICAgICAgIFsgJzEwIHNvcicsICcyNSBzb3InLCAnNTAgc29yJywgJ8OWc3N6ZXMnIF1cclxuICAgIF0sXHJcbiAgICBidXR0b25zOntcclxuICAgICAgICBkb206e1xyXG4gICAgICAgICAgICBidXR0b246e1xyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOidmZy1idXR0b24gdWktYnV0dG9uIGRhdGFUYWJsZUhlYWRlckJ1dHRvbnMnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgfSxcclxuICAgIGRvbTogJzxcImZnLXRvb2xiYXIgdWktdG9vbGJhciB1aS13aWRnZXQtaGVhZGVyIHVpLWhlbHBlci1jbGVhcmZpeCB1aS1jb3JuZXItdGwgdWktY29ybmVyLXRyXCJsQmZyPicrXHJcbiAgICAgICAgJ3QnK1xyXG4gICAgICAgICc8XCJmZy10b29sYmFyIHVpLXRvb2xiYXIgdWktd2lkZ2V0LWhlYWRlciB1aS1oZWxwZXItY2xlYXJmaXggdWktY29ybmVyLWJsIHVpLWNvcm5lci1iclwiaXA+JyxcclxuXHJcbn0gKTtcclxuSW5wdXRtYXNrLmV4dGVuZERlZmluaXRpb25zKHtcclxuICAgICd4Jzoge1xyXG4gICAgICAgIHZhbGlkYXRvcjogXCJbXFwuLC3DocOpw63Ds8O2xZHDusOgw6jDrMOyw7nDvMWxw4HDicONw5PDlsWQw5rDgMOIw4zDksOZw5zFsEEtWmEtejAtOSBdXCIsXHJcbiAgICAgICAgLy9jYXJkaW5hbGl0eTogMVxyXG4gICAgfVxyXG59KTtcclxuXHJcblxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuVG9hc3QuZW5hYmxlVGltZXJzKGZhbHNlKTtcclxuJC5mbi5zZWxlY3QyLmRlZmF1bHRzLnNldCgnbGFuZ3VhZ2UnLCAnanAnKTtcclxud2luZG93LnNlbGVjdDJDcmVhdGVUYWc9ZnVuY3Rpb24gKHBhcmFtcyl7XHJcbiAgICB2YXIgdGVybSA9ICQudHJpbShwYXJhbXMudGVybSk7XHJcbiAgICB2YXIgY291bnQgPSAwXHJcbiAgICB2YXIgZXhpc3RzVmFyID0gZmFsc2U7XHJcbiAgICAvL2NoZWNrIGlmIHRoZXJlIGlzIGFueSBvcHRpb24gYWxyZWFkeVxyXG4gICAgaWYoJCgnI2tleXdvcmRzIG9wdGlvbicpLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICQoJyNrZXl3b3JkcyBvcHRpb24nKS5lYWNoKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIGlmICgkKHRoaXMpLnRleHQoKS50b1VwcGVyQ2FzZSgpID09IHRlcm0udG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgZXhpc3RzVmFyID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGV4aXN0c1ZhciA9IGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZihleGlzdHNWYXIpe1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaWQ6IHBhcmFtcy50ZXJtLFxyXG4gICAgICAgICAgICB0ZXh0OiBwYXJhbXMudGVybSxcclxuICAgICAgICAgICAgbmV3VGFnOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy9zaW5jZSBzZWxlY3QgaGFzIDAgb3B0aW9ucywgYWRkIG5ldyB3aXRob3V0IGNvbXBhcmluZ1xyXG4gICAgZWxzZXtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBpZDogcGFyYW1zLnRlcm0sXHJcbiAgICAgICAgICAgIHRleHQ6IHBhcmFtcy50ZXJtLFxyXG4gICAgICAgICAgICBuZXdUYWc6IHRydWVcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG59XHJcblxyXG53aW5kb3cuYWpheEVycm9ySGFuZGxlcj0gZnVuY3Rpb24gKHhociwgYWpheE9wdGlvbnMsIHRocm93bkVycm9yKXtcclxuICAgIGRlYnVnKHRoaXMpO1xyXG4gICAgZGVidWcoeGhyKTtcclxuICAgIGRlYnVnKGFqYXhPcHRpb25zKTtcclxuICAgIGRlYnVnKHRocm93bkVycm9yKTtcclxuICAgIGlmICh4aHIucmVzcG9uc2VKU09OLmVycm9ycykge1xyXG4gICAgICAgIGlmKFwianNvbmFwaVwiIGluIHhoci5yZXNwb25zZUpTT04pe1xyXG4gICAgICAgICAgICBhamF4RXJyb3JGaWVsZEhhbmRsZXJKc29uQVBJKHhoci5yZXNwb25zZUpTT04uZXJyb3JzKTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgYWpheEVycm9yRmllbGRIYW5kbGVyKHhoci5yZXNwb25zZUpTT04uZXJyb3JzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgaWYoeGhyLnN0YXR1cz09NDA0KXtcclxuICAgICAgICAgICAgYWpheEVycm9yRmllbGRIYW5kbGVyKHsnZGV0YWlsJzonTmluY3MgaWx5ZW4gZWxlbS4nfSk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGFqYXhFcnJvckZpZWxkSGFuZGxlcih7J2RldGFpbCc6J8OBbHRhbMOhbm9zIGhpYmEuJ30pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG59XHJcbndpbmRvdy5hamF4RXJyb3JGaWVsZEhhbmRsZXJKc29uQVBJPSBmdW5jdGlvbiAoZXJyb3JzLCBjb250YWluZXIpIHtcclxuICAgIGxldCB0b2FzdEJvZHlIdG1sID0gJyc7XHJcbiAgICBsZXQgdG9hc3RUaXRsZSA9ICdIaWJhJztcclxuICAgIGNvbnNvbGUuZXJyb3IoZXJyb3JzKTtcclxuICAgICQuZWFjaChlcnJvcnMsIGZ1bmN0aW9uIChpbmRleCwgdmFsdWUpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKHZhbHVlKTtcclxuICAgICAgICB0b2FzdFRpdGxlID0gJ0hpYmEnO1xyXG4gICAgICAgIHRvYXN0Qm9keUh0bWwgPSAnJztcclxuICAgICAgICBpZihcInRpdGxlXCIgaW4gdmFsdWUpe1xyXG4gICAgICAgICAgICB0b2FzdFRpdGxlPXZhbHVlLnRpdGxlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihcImRldGFpbFwiIGluIHZhbHVlKXtcclxuICAgICAgICAgICAgdG9hc3RCb2R5SHRtbCArPSAnPGRpdj4nICsgdmFsdWUuZGV0YWlsICsgJzxkaXY+JztcclxuICAgICAgICB9XHJcbiAgICAgICAgVG9hc3QuY3JlYXRlKHRvYXN0VGl0bGUsIHRvYXN0Qm9keUh0bWwsIFRPQVNUX1NUQVRVUy5EQU5HRVIsIDEwMDAwKTtcclxuICAgIH0pO1xyXG59XHJcbndpbmRvdy5hamF4RXJyb3JGaWVsZEhhbmRsZXIgPSBmdW5jdGlvbiAoZXJyb3JzLCBjb250YWluZXIpIHtcclxuICAgIGxldCB0b2FzdEJvZHlIdG1sID0gJyc7XHJcbiAgICAkLmVhY2goZXJyb3JzLCBmdW5jdGlvbiAoaW5kZXgsIHZhbHVlKSB7XHJcbiAgICAgICAgdG9hc3RCb2R5SHRtbCArPSAnPGRpdj4nICsgdmFsdWUgKyAnPGRpdj4nO1xyXG4gICAgfSk7XHJcbiAgICBUb2FzdC5jcmVhdGUoXCJIaWJhIVwiLCB0b2FzdEJvZHlIdG1sLCBUT0FTVF9TVEFUVVMuREFOR0VSLCAxMDAwMCk7XHJcbi8qXHJcbiAgICBUb2FzdC5maXJlKHtcclxuICAgICAgICBpY29uOiAnZXJyb3InLFxyXG4gICAgICAgIGh0bWw6IHRvYXN0Qm9keUh0bWxcclxuICAgIH0pO1xyXG4qL1xyXG59XHJcbiQuYWpheFNldHVwKHtcclxuICAgIGVycm9yOmFqYXhFcnJvckhhbmRsZXIsXHJcbn0pO1xyXG4vKlxyXG5kYXRlcGlja2VyIGFmdGVyU2hvdyBmdW5jdGlvblxyXG4gKi9cclxuJC5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyX29yaWdpbmFsID0gJC5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyO1xyXG4kLmRhdGVwaWNrZXIuX3VwZGF0ZURhdGVwaWNrZXIgPSBmdW5jdGlvbihpbnN0KSB7XHJcbiAgICAkLmRhdGVwaWNrZXIuX3VwZGF0ZURhdGVwaWNrZXJfb3JpZ2luYWwoaW5zdCk7XHJcbiAgICBsZXQgYWZ0ZXJTaG93ID0gdGhpcy5fZ2V0KGluc3QsICdhZnRlclNob3cnKTtcclxuICAgIGlmIChhZnRlclNob3cpXHJcbiAgICAgICAgYWZ0ZXJTaG93LmFwcGx5KChpbnN0LmlucHV0ID8gaW5zdC5pbnB1dFswXSA6IG51bGwpKTsgIC8vIHRyaWdnZXIgY3VzdG9tIGNhbGxiYWNrXHJcbn1cclxuXHJcblxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxud2luZG93LkVtZWdyZW5kZWxlc0RlZmF1bHRzPXtcclxuICAgIGRhdGF0YWJsZUFjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2s6IGZ1bmN0aW9uICgpIHt9LFxyXG4gICAgZGF0YXRhYmxlQWRkUm93VHJhc2hCdXR0b246IGZ1bmN0aW9uIChpZCxhcmdzKSB7XHJcbiAgICAgICAgcmV0dXJuICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWRhbmdlciBidXR0b25EZWxldGVcIiBkYXRhLWJ1dHRvblR5cGU9XCJkZWxldGVcIiBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cImJvdHRvbVwiIHRpdGxlPVwiVMO2cmzDqXNcIj4nICtcclxuICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwiZmFzIGZhLXRyYXNoXCI+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAnPC9idXR0b24+J1xyXG5cclxuICAgIH0sXHJcbiAgICBkYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uOiBmdW5jdGlvbiAoYXJncykge1xyXG4gICAgICAgIGxldCB0aXRsZT0nQWRhdG9rJztcclxuICAgICAgICBpZih0eXBlb2YgYXJnc1sxXS50aXRsZSE9PVwidW5kZWZpbmVkXCIpe1xyXG4gICAgICAgICAgICB0aXRsZT1hcmdzWzFdLnRpdGxlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taW5mbyBidXR0b25FZGl0XCIgIGRhdGEtYnV0dG9uVHlwZT1cImVkaXRcIiBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cImJvdHRvbVwiIHRpdGxlPVwiJyt0aXRsZSsnXCI+JyArXHJcbiAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cImZhcyBmYS1wZW5jaWwtYWx0XCI+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAnPC9idXR0b24+J1xyXG5cclxuICAgIH0sXHJcbiAgICBkYXRhdGFibGVBZGRSb3dWaWV3QnV0dG9uOiBmdW5jdGlvbiAoaWQsYXJncykge1xyXG4gICAgICAgIHJldHVybiAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBkYXRhVGFibGVSb3dCdXR0b24gYnV0dG9uVmlld1wiICBkYXRhLWJ1dHRvblR5cGU9XCJ2aWV3XCIgZGF0YS10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1wbGFjZW1lbnQ9XCJib3R0b21cIiB0aXRsZT1cIk1lZ3Rla2ludFwiPicgK1xyXG4gICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJmYXMgZmEtZXllXCI+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAnPC9idXR0b24+J1xyXG5cclxuICAgIH0sXHJcbiAgICBkYXRhdGFibGVBZGRSb3dBdHRhY2htZW50QnV0dG9uOiBmdW5jdGlvbiAoaWQsYXJncykge1xyXG4gICAgICAgIHJldHVybiAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLWRhcmsgZGF0YVRhYmxlUm93QnV0dG9uIGJ1dHRvbkF0dGFjaG1lbnRcIiAgZGF0YS1idXR0b25UeXBlPVwiYXR0YWNobWVudFwiIGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiIGRhdGEtcGxhY2VtZW50PVwiYm90dG9tXCIgdGl0bGU9XCJDc2F0b2xtw6FueVwiPicgK1xyXG4gICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJmYXMgZmEtcGFwZXJjbGlwXCI+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAnPC9idXR0b24+J1xyXG5cclxuICAgIH0sXHJcbiAgICBkYXRhdGFibGVDdXN0b21IZWFkQnV0dG9uQ2xpY2tDYWxsQmFjazpmdW5jdGlvbiAoYXJncykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGFyZ3MpO1xyXG4gICAgfSxcclxuXHJcbiAgICBhZnRlckxvYWRNYWluQ29udGVudDpmdW5jdGlvbiAoYXJncykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGFyZ3MpO1xyXG4gICAgfSxcclxuXHJcblxyXG59O1xyXG5cclxuaWYodHlwZW9mIERhdGFNb2RlbD09PSd1bmRlZmluZWQnKXtcclxuICAgIGNsYXNzIERhdGFNb2RlbHtcclxuICAgICAgICAvKlxyXG4gICAgICAgICAqIFZhcmlhYmxlcyBhY2Nlc3NpYmxlXHJcbiAgICAgICAgICogaW4gdGhlIGNsYXNzXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgT3B0cyA9IHtcclxuICAgICAgICAgICAgYWN0aXZlOiBmYWxzZSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvKlxyXG4gICAgICAgICAqIENvbnN0cnVjdG9yXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29uc3RydWN0b3IgKGRhdGEsb3B0aW9ucykge1xyXG4gICAgICAgICAgICAkLmV4dGVuZCh0aGlzLCBkYXRhKTtcclxuICAgICAgICAgICAgJC5leHRlbmQodGhpcy5PcHRzLCBvcHRpb25zKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBzZXREYXRhIChkYXRhKXtcclxuICAgICAgICAgICAgJC5leHRlbmQodGhpcywgZGF0YSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnZXREYXRhKGluZGV4KXtcclxuICAgICAgICAgICAgaWYoaW5kZXgpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbaW5kZXhdO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHdpbmRvdy5EYXRhTW9kZWw9RGF0YU1vZGVsO1xyXG59XHJcblxyXG5cclxud2luZG93LkVtZWdyZW5kZWxlcyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcblxyXG4gICAgLypcclxuICAgICAqIFZhcmlhYmxlcyBhY2Nlc3NpYmxlXHJcbiAgICAgKiBpbiB0aGUgY2xhc3NcclxuICAgICAqL1xyXG4gICAgbGV0IE9wdHMgPSB7XHJcbiAgICAgICAgbXlWYXI6ICdFbWVncmVuZGVsZXMgdmFsdWUnLFxyXG4gICAgICAgIGRhdGF0YWJsZUFkZFJvd1RyYXNoQnV0dG9uOnt9LFxyXG4gICAgICAgIGRhdGF0YWJsZUFkZFJvd0VkaXRCdXR0b246e30sXHJcbiAgICAgICAgZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjazp7fSxcclxuICAgICAgICBkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnt9LFxyXG4gICAgICAgIGRhdGF0YWJsZUN1c3RvbUhlYWRCdXR0b25DbGlja0NhbGxCYWNrOnt9LFxyXG4gICAgICAgIGFmdGVyTG9hZE1haW5Db250ZW50Ont9LFxyXG4gICAgICAgIFVybDp7fSxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgUHVibGljVmFyPXt9O1xyXG4gICAgbGV0IFB1YmxpY1ZhcjI9eydhc2QnOicyMSd9O1xyXG4gICAgbGV0IEFwaVRva2VuPW51bGw7XHJcbiAgICBsZXQgcm9vdD10aGlzO1xyXG4gICAgLypcclxuICAgICAqIENvbnN0cnVjdG9yXHJcbiAgICAgKi9cclxuICAgIHRoaXMuY29uc3RydWN0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgICAgICAvLyQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuY29uc3RydWN0b3IubmFtZSsnIGNvbnN0cnVjdG9yIGNhbGxlZCcpO1xyXG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIHdpbmRvdy5FbWVncmVuZGVsZXNEZWZhdWx0cywgb3B0aW9ucyk7XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuc2V0T3B0cz1mdW5jdGlvbihvcHRpb25zKXtcclxuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmdldE9wdHM9ZnVuY3Rpb24oKXtcclxuICAgICAgICByZXR1cm4gT3B0cztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGF0YWJsZUFkZFJvd1RyYXNoQnV0dG9uPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIHJldHVybiBPcHRzLmRhdGF0YWJsZUFkZFJvd1RyYXNoQnV0dG9uKGFyZ3VtZW50cyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRhdGF0YWJsZUFkZFJvd0VkaXRCdXR0b249ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgcmV0dXJuIE9wdHMuZGF0YXRhYmxlQWRkUm93RWRpdEJ1dHRvbihhcmd1bWVudHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGF0YXRhYmxlQWRkUm93Vmlld0J1dHRvbj1mdW5jdGlvbiAoKXtcclxuICAgICAgICByZXR1cm4gT3B0cy5kYXRhdGFibGVBZGRSb3dWaWV3QnV0dG9uKGFyZ3VtZW50cyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRhdGF0YWJsZUFkZFJvd0F0dGFjaG1lbnRCdXR0b249ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgcmV0dXJuIE9wdHMuZGF0YXRhYmxlQWRkUm93QXR0YWNobWVudEJ1dHRvbihhcmd1bWVudHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWZ0ZXJMb2FkTWFpbkNvbnRlbnQ9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgcmV0dXJuIE9wdHMuYWZ0ZXJMb2FkTWFpbkNvbnRlbnQoYXJndW1lbnRzKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGF0YWJsZUFjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2s9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgcmV0dXJuIE9wdHMuZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayhhcmd1bWVudHMpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIHJldHVybiBPcHRzLmRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2soYXJndW1lbnRzKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGF0YWJsZUFkZFJvd0FjdGlvbj1mdW5jdGlvbiAoQ1NTU2VsZWN0b3Ipe1xyXG4gICAgICAgIGlmKCFDU1NTZWxlY3Rvcil7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgJChDU1NTZWxlY3RvcisnIHRyIGJ1dHRvbicpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yKycgdHIgYnV0dG9uJykub24oJ2NsaWNrJyxBUFAuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGF0YXRhYmxlQ3VzdG9tSGVhZEJ1dHRvbkNsaWNrQ2FsbEJhY2s9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgcmV0dXJuIE9wdHMuZGF0YXRhYmxlQ3VzdG9tSGVhZEJ1dHRvbkNsaWNrQ2FsbEJhY2soYXJndW1lbnRzKTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogUHVibGljIG1ldGhvZFxyXG4gICAgICogQ2FuIGJlIGNhbGxlZCBvdXRzaWRlIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIHRoaXMubXlQdWJsaWNNZXRob2QgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coT3B0cyk7XHJcblxyXG4gICAgICAgIG15UHJpdmF0ZU1ldGhvZCgpO1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnNldEFwaVRva2VuID0gZnVuY3Rpb24gKHRva2VuKSB7XHJcbiAgICAgICAgcm9vdC5BcGlUb2tlbj10b2tlbjtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5nZXRBcGlUb2tlbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gcm9vdC5BcGlUb2tlbjtcclxuICAgIH07XHJcblxyXG4gICAgLypcclxuICAgICAqIFByaXZhdGUgbWV0aG9kXHJcbiAgICAgKiBDYW4gb25seSBiZSBjYWxsZWQgaW5zaWRlIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IG15UHJpdmF0ZU1ldGhvZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnYWNjZXNzZWQgcHJpdmF0ZSBtZXRob2QnKTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaXRlbU5hbWVcclxuICAgICAqL1xyXG4gICAgdGhpcy5zZXRBY3RpdmVOYXZCYXJJdGVtPWZ1bmN0aW9uKGl0ZW1OYW1lKXtcclxuICAgICAgICAkKCcuc3BlZWRCdXR0b25OYXZCYXIgbGknKS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcclxuICAgICAgICAkKCcuc3BlZWRCdXR0b25OYXZCYXIgbGkuaWNvbmhvbGRlck1vZHVsJytpdGVtTmFtZSkuYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5nZXRBY3RpdmVOYXZCYXJJdGVtPWZ1bmN0aW9uKCl7XHJcbiAgICAgIHJldHVybiAkKCcuc3BlZWRCdXR0b25OYXZCYXIgLnNlbGVjdGVkJykuZmluZCgnYScpLmRhdGEoJ25hbWUnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNsZWFyQXJjaGl2ZU1vZHVsZURhdGFUYWJsZVN0YXRlPWZ1bmN0aW9uKCl7XHJcbiAgICAgICAgaWYoQVBQLk9yZGVyQXJjaGl2ZU1vZHVsZSE9dW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdBUFAuT3JkZXJBcmNoaXZlTW9kdWxlJyk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnY2xlYXInKTtcclxuICAgICAgICAgICAgICAgIEFQUC5PcmRlckFyY2hpdmVNb2R1bGUuZGF0YVRhYmxlLnN0YXRlLmNsZWFyKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIHRoaXMubmF2QmFySXRlbUJlZm9yZXBvc3Q9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ25hdkJhckl0ZW1CZWZvcmVwb3N0Jyk7XHJcbiAgICAgICAgaWYocm9vdC5nZXRBY3RpdmVOYXZCYXJJdGVtKCkhPT0nYWN0aXZlT3JkZXInKXtcclxuICAgICAgICAgICAgcm9vdC5jbGVhckFyY2hpdmVNb2R1bGVEYXRhVGFibGVTdGF0ZSgpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubmF2QmFySXRlbUFmdGVyUG9zdD1mdW5jdGlvbiAoKXtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXROYXZCYXI9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgJChcIi5zcGVlZEJ1dHRvbk5hdkJhciBhOm5vdChbZGF0YS10YXJnZXQ9X2JsYW5rXSk6bm90KFtkYXRhLW5vLWFqYXhdKVwiKS5iaW5kKCdjbGljaycsZnVuY3Rpb24gKGV2ZW50KXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJCh0aGlzKS5kYXRhKCkubmFtZSk7XHJcbiAgICAgICAgICAgIGlmKCQodGhpcykuZGF0YSgnYmlnLWljb24nKSl7XHJcbiAgICAgICAgICAgICAgICAkKFwiLnNwZWVkQnV0dG9uTmF2QmFyXCIpLnJlbW92ZUNsYXNzKCdzbWFsbGljb25zJyk7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgJChcIi5zcGVlZEJ1dHRvbk5hdkJhclwiKS5hZGRDbGFzcygnc21hbGxpY29ucycpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByb290LnNldEFjdGl2ZU5hdkJhckl0ZW0oJCh0aGlzKS5kYXRhKCkubmFtZSk7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJChcIi5zcGVlZEJ1dHRvbk5hdkJhciBhOm5vdChbZGF0YS10YXJnZXQ9X2JsYW5rXSk6bm90KFtkYXRhLW5vLWFqYXhdKVwiKS5hamF4bGluayh7XHJcbiAgICAgICAgICAgIHRhcmdldDokKCcubWFpbkNvbnRlbnQnKSxcclxuICAgICAgICAgICAgYWpheHR5cGU6J0dFVCcsXHJcbiAgICAgICAgICAgIGFmdGVycG9zdDpyb290Lm5hdkJhckl0ZW1BZnRlclBvc3QsXHJcbiAgICAgICAgICAgIGJlZm9yZXBvc3Q6cm9vdC5uYXZCYXJJdGVtQmVmb3JlcG9zdCxcclxuICAgICAgICB9KTtcclxuICAgICAgICAkKFwiLnNwZWVkQnV0dG9uTmF2QmFyIGFbZGF0YS10YXJnZXQ9X2JsYW5rXSwgLnNwZWVkQnV0dG9uTmF2QmFyIGFbZGF0YS1uby1hamF4XVwiKS5iaW5kKCdjbGljaycsZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgcm9vdC5jbGVhckFyY2hpdmVNb2R1bGVEYXRhVGFibGVTdGF0ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubG9hZE1haW5Db250ZW50PWZ1bmN0aW9uICh1cmwsZGF0YSxjYWxsQmFjayl7XHJcblxyXG4gICAgICAgIGlmKCFjYWxsQmFjayl7XHJcbiAgICAgICAgICAgIGNhbGxCYWNrPXJvb3QuYWZ0ZXJMb2FkTWFpbkNvbnRlbnQ7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd2YW4gY2FsbGJhY2snKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coY2FsbEJhY2spO1xyXG4gICAgICAgIH1cclxuICAgICAgICAkKCcubWFpbkNvbnRlbnQnKS5sb2FkKFxyXG4gICAgICAgICAgICB1cmwsZGF0YSxjYWxsQmFja1xyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICAvKlxyXG4gICAgICogUGFzcyBvcHRpb25zIHdoZW4gY2xhc3MgaW5zdGFudGlhdGVkXHJcbiAgICAgKi9cclxuICAgIHRoaXMuY29uc3RydWN0KG9wdGlvbnMpO1xyXG59O1xyXG5cclxuXHJcbi8qXHJcbiQuZm4uYWpheGxpbmsgPSBmdW5jdGlvbihvcHRpb25zKXtcclxuXHJcbn07XHJcbmltcG9ydCAnLi9hamF4TGluayc7XHJcblxyXG4qICovXHJcbndpbmRvdy5BUFA9e307XHJcbiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpe1xyXG4gICAgY29uc29sZS5sb2coJ3JlYWR5IGRvYycpO1xyXG4gICAgLy8kKCcuZGF0ZXBpY2tlcicpLmRhdGVwaWNrZXIoKTtcclxuICAgIE11c3RhY2hlLnRhZ3MgPSBbICdbWycsICddXScgXTtcclxuICAgIC8vID0gWyAnPCUnLCAnJT4nIF07XHJcblxyXG59KTtcclxuXHJcblxyXG5cclxuIl0sIm5hbWVzIjpbInJlcXVpcmUiLCJ3aW5kb3ciLCJnZXRNb25kYXkiLCJkYXRlIiwiZGF0ZVN0ciIsIkRhdGUiLCJkYXkiLCJnZXREYXkiLCJkaWZmIiwiZ2V0RGF0ZSIsInNldERhdGUiLCJkZWJ1ZyIsInR4dCIsImNvbnNvbGUiLCJsb2ciLCJlIiwiYnVpbGRGb3JtRGF0YSIsImZvcm1EYXRhIiwiZGF0YSIsInBhcmVudEtleSIsIl90eXBlb2YiLCJGaWxlIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJjb25jYXQiLCJ2YWx1ZSIsImFwcGVuZCIsImpzb25Ub0Zvcm1EYXRhIiwiRm9ybURhdGEiLCJTdHJpbmciLCJwcm90b3R5cGUiLCJjYXBpdGFsaXplIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJzbGljZSIsImFycmF5UmVtb3ZlIiwiYXJyIiwiZmlsdGVyIiwiZWxlIiwiZ2V0UmFuZG9tSW50IiwibWF4IiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiTnVtYmVyIiwiTUFYX1NBRkVfSU5URUdFUiIsIm1pbiIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsInNldEltYWdlRnJvbUxvY2FsIiwiaW5wdXQiLCJ0YXJnZXRJbWdDc3NTZWxlY3RvciIsImZpbGVzIiwicmVhZGVyIiwiRmlsZVJlYWRlciIsIm9ubG9hZCIsIiQiLCJhdHRyIiwidGFyZ2V0IiwicmVzdWx0IiwicmVhZEFzRGF0YVVSTCIsImhpc3RvcnkiLCJwdXNoU3RhdGUiLCJsb2NhdGlvbiIsImhyZWYiLCJvbiIsImV2ZW50IiwiZG9jdW1lbnQiLCJ0aXRsZSIsInN0b3BQcm9wYWdhdGlvbiIsImluaXRSYWRpb0J1dHRvbnMiLCJPcHRpb25zIiwiT3B0cyIsIm9uQ2hhbmdlIiwibm9kZSIsImV4dGVuZCIsImFjdGl2ZVZhbHVlIiwicHJvcCIsInVuYmluZCIsImJpbmQiLCJzZWwiLCJ0b2ciLCJub3QiLCJyZW1vdmVDbGFzcyIsImFkZENsYXNzIiwiZm4iLCJkYXRhVGFibGUiLCJkZWZhdWx0cyIsImxhbmd1YWdlIiwidXJsIiwibGVuZ3RoTWVudSIsImJ1dHRvbnMiLCJkb20iLCJidXR0b24iLCJjbGFzc05hbWUiLCJJbnB1dG1hc2siLCJleHRlbmREZWZpbml0aW9ucyIsInZhbGlkYXRvciIsIlRvYXN0IiwiZW5hYmxlVGltZXJzIiwic2VsZWN0MiIsInNldCIsInNlbGVjdDJDcmVhdGVUYWciLCJwYXJhbXMiLCJ0ZXJtIiwidHJpbSIsImNvdW50IiwiZXhpc3RzVmFyIiwiZWFjaCIsInRleHQiLCJpZCIsIm5ld1RhZyIsImFqYXhFcnJvckhhbmRsZXIiLCJ4aHIiLCJhamF4T3B0aW9ucyIsInRocm93bkVycm9yIiwicmVzcG9uc2VKU09OIiwiZXJyb3JzIiwiYWpheEVycm9yRmllbGRIYW5kbGVySnNvbkFQSSIsImFqYXhFcnJvckZpZWxkSGFuZGxlciIsInN0YXR1cyIsImNvbnRhaW5lciIsInRvYXN0Qm9keUh0bWwiLCJ0b2FzdFRpdGxlIiwiZXJyb3IiLCJpbmRleCIsImRldGFpbCIsImNyZWF0ZSIsIlRPQVNUX1NUQVRVUyIsIkRBTkdFUiIsImFqYXhTZXR1cCIsImRhdGVwaWNrZXIiLCJfdXBkYXRlRGF0ZXBpY2tlcl9vcmlnaW5hbCIsIl91cGRhdGVEYXRlcGlja2VyIiwiaW5zdCIsImFmdGVyU2hvdyIsIl9nZXQiLCJhcHBseSIsIkVtZWdyZW5kZWxlc0RlZmF1bHRzIiwiZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayIsImRhdGF0YWJsZUFkZFJvd1RyYXNoQnV0dG9uIiwiYXJncyIsImRhdGF0YWJsZUFkZFJvd0VkaXRCdXR0b24iLCJkYXRhdGFibGVBZGRSb3dWaWV3QnV0dG9uIiwiZGF0YXRhYmxlQWRkUm93QXR0YWNobWVudEJ1dHRvbiIsImRhdGF0YWJsZUN1c3RvbUhlYWRCdXR0b25DbGlja0NhbGxCYWNrIiwiYWZ0ZXJMb2FkTWFpbkNvbnRlbnQiLCJEYXRhTW9kZWwiLCJfRGF0YU1vZGVsMiIsIm9wdGlvbnMiLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydHkiLCJhY3RpdmUiLCJfY3JlYXRlQ2xhc3MiLCJzZXREYXRhIiwiZ2V0RGF0YSIsIkVtZWdyZW5kZWxlcyIsIm15VmFyIiwiZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayIsIlVybCIsIlB1YmxpY1ZhciIsIlB1YmxpY1ZhcjIiLCJBcGlUb2tlbiIsInJvb3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJzZXRPcHRzIiwiZ2V0T3B0cyIsImRhdGF0YWJsZUFkZFJvd0FjdGlvbiIsIkNTU1NlbGVjdG9yIiwib2ZmIiwiQVBQIiwibXlQdWJsaWNNZXRob2QiLCJteVByaXZhdGVNZXRob2QiLCJzZXRBcGlUb2tlbiIsInRva2VuIiwiZ2V0QXBpVG9rZW4iLCJzZXRBY3RpdmVOYXZCYXJJdGVtIiwiaXRlbU5hbWUiLCJnZXRBY3RpdmVOYXZCYXJJdGVtIiwiZmluZCIsImNsZWFyQXJjaGl2ZU1vZHVsZURhdGFUYWJsZVN0YXRlIiwiT3JkZXJBcmNoaXZlTW9kdWxlIiwic3RhdGUiLCJjbGVhciIsIm5hdkJhckl0ZW1CZWZvcmVwb3N0IiwibmF2QmFySXRlbUFmdGVyUG9zdCIsImluaXROYXZCYXIiLCJwcmV2ZW50RGVmYXVsdCIsImFqYXhsaW5rIiwiYWpheHR5cGUiLCJhZnRlcnBvc3QiLCJiZWZvcmVwb3N0IiwibG9hZE1haW5Db250ZW50IiwiY2FsbEJhY2siLCJsb2FkIiwicmVhZHkiLCJNdXN0YWNoZSIsInRhZ3MiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/app.js\n\n}"); +eval("{function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\n__webpack_require__(/*! ./bootstrap */ \"./resources/js/bootstrap.js\");\n\n//----------------------------------------------------------------------\n/*\r\nHelper function\r\n*/\nwindow.getMonday = function (date, dateStr) {\n if (dateStr) {\n date = new Date(dateStr);\n }\n var day = date.getDay(),\n diff = date.getDate() - day + (day == 0 ? -6 : 1); // adjust when day is sunday\n return new Date(date.setDate(diff));\n};\nwindow.debug = function (txt) {\n try {\n console.log(txt);\n } catch (e) {}\n};\nwindow.buildFormData = function (formData, data, parentKey) {\n if (data && _typeof(data) === 'object' && !(data instanceof Date) && !(data instanceof File)) {\n Object.keys(data).forEach(function (key) {\n buildFormData(formData, data[key], parentKey ? \"\".concat(parentKey, \"[\").concat(key, \"]\") : key);\n });\n } else {\n var value = data == null ? '' : data;\n formData.append(parentKey, value);\n }\n};\nwindow.jsonToFormData = function (data) {\n var formData = new FormData();\n buildFormData(formData, data);\n return formData;\n};\nString.prototype.capitalize = function () {\n return this.charAt(0).toUpperCase() + this.slice(1);\n};\nwindow.arrayRemove = function (arr, value) {\n return arr.filter(function (ele) {\n return ele != value;\n });\n};\nwindow.getRandomInt = function () {\n var max = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Number.MAX_SAFE_INTEGER;\n var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n debug(max);\n debug(min);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n};\nwindow.setImageFromLocal = function (input, targetImgCssSelector) {\n if (input.files && input.files[0]) {\n var reader = new FileReader();\n reader.onload = function (e) {\n $(targetImgCssSelector).attr('src', e.target.result);\n };\n reader.readAsDataURL(input.files[0]);\n }\n};\n__webpack_require__(/*! ./latinise */ \"./resources/js/latinise.js\");\n\n/*\r\ndisable back button\r\n */\n$(function () {\n if (window.history && window.history.pushState) {\n window.history.pushState('', null, window.location.href);\n $(window).on('popstate', function (event) {\n // alert('Back button was pressed.');\n //document.location.href = '#';\n window.history.pushState('', document.title, window.location.href);\n //console.log('mevagy');\n event.stopPropagation();\n });\n }\n});\n//----------------------------------------------------------------------\n/*\r\ninit custom radio buttons\r\n */\nwindow.initRadioButtons = function (Options) {\n var Opts = {\n onChange: function onChange(value, node) {}\n };\n $.extend(Opts, Options);\n var activeValue = $('.customRadioBtnGroup .active').data('title');\n var target = $('.customRadioBtnGroup .active').data('toggle');\n $('input[name=' + target + ']').prop('value', activeValue);\n $('.customRadioBtnGroup a').unbind('click');\n $('.customRadioBtnGroup a').bind('click', function () {\n var sel = $(this).data('title');\n var tog = $(this).data('toggle');\n $('input[name=' + tog + ']').prop('value', sel);\n $('a[data-toggle=\"' + tog + '\"]').not('[data-title=\"' + sel + '\"]').removeClass('active').addClass('notActive');\n $('a[data-toggle=\"' + tog + '\"][data-title=\"' + sel + '\"]').removeClass('notActive').addClass('active');\n Opts.onChange(sel, tog);\n });\n};\n\n//----------------------------------------------------------------------\n// Defaults\n//----------------------------------------------------------------------\n$.extend(true, $.fn.dataTable.defaults, {\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n lengthMenu: [[10, 25, 50, -1], ['10 sor', '25 sor', '50 sor', 'Összes']],\n buttons: {\n dom: {\n button: {\n className: 'fg-button ui-button dataTableHeaderButtons'\n }\n }\n },\n dom: '<\"fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix ui-corner-tl ui-corner-tr\"lBfr>' + 't' + '<\"fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix ui-corner-bl ui-corner-br\"ip>'\n});\nInputmask.extendDefinitions({\n 'x': {\n validator: \"[\\.,-áéíóöőúàèìòùüűÁÉÍÓÖŐÚÀÈÌÒÙÜŰA-Za-z0-9 ]\"\n //cardinality: 1\n }\n});\n\n//----------------------------------------------------------------------\nToast.enableTimers(false);\n$.fn.select2.defaults.set('language', 'jp');\nwindow.select2CreateTag = function (params) {\n var term = $.trim(params.term);\n var count = 0;\n var existsVar = false;\n //check if there is any option already\n if ($('#keywords option').length > 0) {\n $('#keywords option').each(function () {\n if ($(this).text().toUpperCase() == term.toUpperCase()) {\n existsVar = true;\n return false;\n } else {\n existsVar = false;\n }\n });\n if (existsVar) {\n return null;\n }\n return {\n id: params.term,\n text: params.term,\n newTag: true\n };\n }\n //since select has 0 options, add new without comparing\n else {\n return {\n id: params.term,\n text: params.term,\n newTag: true\n };\n }\n};\nwindow.ajaxErrorHandler = function (xhr, ajaxOptions, thrownError) {\n debug(this);\n console.error(xhr);\n console.error(ajaxOptions);\n console.error(thrownError);\n if (xhr.responseJSON.errors) {\n console.error(\"d2---------------\");\n if (\"jsonapi\" in xhr.responseJSON) {\n ajaxErrorFieldHandlerJsonAPI(xhr.responseJSON.errors);\n } else {\n ajaxErrorFieldHandler(xhr.responseJSON.errors);\n }\n } else {\n if (xhr.status == 404) {\n console.error(\"d3---------------\");\n ajaxErrorFieldHandler({\n 'detail': 'Nincs ilyen elem.'\n });\n } else {\n console.error(\"d4---------------\");\n ajaxErrorFieldHandler({\n 'detail': 'Általános hiba.'\n });\n }\n }\n};\nwindow.ajaxErrorFieldHandlerJsonAPI = function (errors, container) {\n console.error(\"d6---------------\");\n var toastBodyHtml = '';\n var toastTitle = 'Hiba';\n console.error(errors);\n $.each(errors, function (index, value) {\n console.error(value);\n toastTitle = 'Hiba';\n toastBodyHtml = '';\n if (\"title\" in value) {\n toastTitle = value.title;\n }\n if (\"detail\" in value) {\n toastBodyHtml += '
' + value.detail + '
';\n }\n Toast.create({\n title: toastTitle,\n message: toastBodyHtml,\n status: TOAST_STATUS.DANGER,\n // SUCCESS (zöld)\n timeout: 10000\n });\n });\n};\nwindow.ajaxErrorFieldHandler = function (errors, container) {\n console.error(\"d5---------------\");\n console.error(errors);\n var toastBodyHtml = '';\n $.each(errors, function (index, value) {\n toastBodyHtml += '
' + value + '
';\n });\n Toast.create({\n title: \"Hiba!\",\n message: toastBodyHtml,\n status: TOAST_STATUS.DANGER,\n // SUCCESS (zöld)\n timeout: 10000\n });\n};\n$.ajaxSetup({\n error: ajaxErrorHandler\n});\n/*\r\ndatepicker afterShow function\r\n */\n$.datepicker._updateDatepicker_original = $.datepicker._updateDatepicker;\n$.datepicker._updateDatepicker = function (inst) {\n $.datepicker._updateDatepicker_original(inst);\n var afterShow = this._get(inst, 'afterShow');\n if (afterShow) afterShow.apply(inst.input ? inst.input[0] : null); // trigger custom callback\n};\n\n//----------------------------------------------------------------------\nwindow.EmegrendelesDefaults = {\n datatableActionButtonClickCallBack: function datatableActionButtonClickCallBack() {},\n datatableAddRowTrashButton: function datatableAddRowTrashButton(id, args) {\n return '';\n },\n datatableAddRowEditButton: function datatableAddRowEditButton(args) {\n var title = 'Adatok';\n if (typeof args[1].title !== \"undefined\") {\n title = args[1].title;\n }\n return '';\n },\n datatableAddRowViewButton: function datatableAddRowViewButton(id, args) {\n return '';\n },\n datatableAddRowAttachmentButton: function datatableAddRowAttachmentButton(id, args) {\n return '';\n },\n datatableCustomHeadButtonClickCallBack: function datatableCustomHeadButtonClickCallBack(args) {\n console.log(args);\n },\n afterLoadMainContent: function afterLoadMainContent(args) {\n console.log(args);\n }\n};\nif (typeof DataModel === 'undefined') {\n var _DataModel2 = /*#__PURE__*/function () {\n /*\r\n * Constructor\r\n */\n function _DataModel2(data, options) {\n _classCallCheck(this, _DataModel2);\n /*\r\n * Variables accessible\r\n * in the class\r\n */\n _defineProperty(this, \"Opts\", {\n active: false\n });\n $.extend(this, data);\n $.extend(this.Opts, options);\n }\n return _createClass(_DataModel2, [{\n key: \"setData\",\n value: function setData(data) {\n $.extend(this, data);\n }\n }, {\n key: \"getData\",\n value: function getData(index) {\n if (index) {\n return this[index];\n } else {\n return this;\n }\n }\n }]);\n }();\n ;\n window.DataModel = _DataModel2;\n}\nwindow.Emegrendeles = function (options) {\n /*\r\n * Variables accessible\r\n * in the class\r\n */\n var Opts = {\n myVar: 'Emegrendeles value',\n datatableAddRowTrashButton: {},\n datatableAddRowEditButton: {},\n datatableActionButtonClickCallBack: {},\n datatableRowActionButtonClickCallBack: {},\n datatableCustomHeadButtonClickCallBack: {},\n afterLoadMainContent: {},\n Url: {}\n };\n var PublicVar = {};\n var PublicVar2 = {\n 'asd': '21'\n };\n var ApiToken = null;\n var root = this;\n /*\r\n * Constructor\r\n */\n this.construct = function (options) {\n //$.extend(Opts, options);\n console.log(this.constructor.name + ' constructor called');\n $.extend(Opts, window.EmegrendelesDefaults, options);\n };\n this.setOpts = function (options) {\n $.extend(Opts, options);\n };\n this.getOpts = function () {\n return Opts;\n };\n this.datatableAddRowTrashButton = function () {\n return Opts.datatableAddRowTrashButton(arguments);\n };\n this.datatableAddRowEditButton = function () {\n return Opts.datatableAddRowEditButton(arguments);\n };\n this.datatableAddRowViewButton = function () {\n return Opts.datatableAddRowViewButton(arguments);\n };\n this.datatableAddRowAttachmentButton = function () {\n return Opts.datatableAddRowAttachmentButton(arguments);\n };\n this.afterLoadMainContent = function () {\n return Opts.afterLoadMainContent(arguments);\n };\n this.datatableActionButtonClickCallBack = function () {\n return Opts.datatableActionButtonClickCallBack(arguments);\n };\n this.datatableRowActionButtonClickCallBack = function () {\n return Opts.datatableRowActionButtonClickCallBack(arguments);\n };\n this.datatableAddRowAction = function (CSSSelector) {\n if (!CSSSelector) {\n return;\n }\n $(CSSSelector + ' tr button').off('click');\n $(CSSSelector + ' tr button').on('click', APP.datatableRowActionButtonClickCallBack);\n };\n this.datatableCustomHeadButtonClickCallBack = function () {\n return Opts.datatableCustomHeadButtonClickCallBack(arguments);\n };\n\n /*\r\n * Public method\r\n * Can be called outside class\r\n */\n this.myPublicMethod = function () {\n console.log(Opts);\n myPrivateMethod();\n };\n this.setApiToken = function (token) {\n root.ApiToken = token;\n };\n this.getApiToken = function () {\n return root.ApiToken;\n };\n\n /*\r\n * Private method\r\n * Can only be called inside class\r\n */\n var myPrivateMethod = function myPrivateMethod() {\n console.log('accessed private method');\n };\n\n /**\r\n * @param {string} itemName\r\n */\n this.setActiveNavBarItem = function (itemName) {\n $('.speedButtonNavBar li').removeClass('selected');\n $('.speedButtonNavBar li.iconholderModul' + itemName).addClass('selected');\n return this;\n };\n this.getActiveNavBarItem = function () {\n return $('.speedButtonNavBar .selected').find('a').data('name');\n };\n this.clearArchiveModuleDataTableState = function () {\n if (APP.OrderArchiveModule != undefined) {\n console.log('APP.OrderArchiveModule');\n console.log('clear');\n APP.OrderArchiveModule.dataTable.state.clear();\n }\n };\n this.navBarItemBeforepost = function () {\n console.log('navBarItemBeforepost');\n if (root.getActiveNavBarItem() !== 'activeOrder') {\n root.clearArchiveModuleDataTableState();\n }\n ;\n };\n this.navBarItemAfterPost = function () {};\n this.initNavBar = function () {\n $(\".speedButtonNavBar a:not([data-target=_blank]):not([data-no-ajax])\").bind('click', function (event) {\n console.log($(this).data().name);\n if ($(this).data('big-icon')) {\n $(\".speedButtonNavBar\").removeClass('smallicons');\n } else {\n $(\".speedButtonNavBar\").addClass('smallicons');\n }\n root.setActiveNavBarItem($(this).data().name);\n event.preventDefault();\n });\n $(\".speedButtonNavBar a:not([data-target=_blank]):not([data-no-ajax])\").ajaxlink({\n target: $('.mainContent'),\n ajaxtype: 'GET',\n afterpost: root.navBarItemAfterPost,\n beforepost: root.navBarItemBeforepost\n });\n $(\".speedButtonNavBar a[data-target=_blank], .speedButtonNavBar a[data-no-ajax]\").bind('click', function () {\n root.clearArchiveModuleDataTableState();\n });\n };\n this.loadMainContent = function (url, data, callBack) {\n if (!callBack) {\n callBack = root.afterLoadMainContent;\n } else {\n console.log('van callback');\n console.log(callBack);\n }\n $('.mainContent').load(url, data, callBack);\n };\n /*\r\n * Pass options when class instantiated\r\n */\n this.construct(options);\n};\n\n/*\r\n$.fn.ajaxlink = function(options){\r\n\r\n};\r\nimport './ajaxLink';\r\n\r\n* */\nwindow.APP = {};\n$(document).ready(function () {\n console.log('ready doc');\n //$('.datepicker').datepicker();\n Mustache.tags = ['[[', ']]'];\n // = [ '<%', '%>' ];\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QyxjQUFjLENBQUM7TUFDM0JELE9BQU8sQ0FBQ0MsR0FBRyxDQUFDMEwsUUFBUSxDQUFDO0lBQ3pCO0lBQ0E3SSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM4SSxJQUFJLENBQ2xCN0csR0FBRyxFQUFDMUUsSUFBSSxFQUFDc0wsUUFDYixDQUFDO0VBQ0wsQ0FBQztFQUNEO0FBQ0o7QUFDQTtFQUNJLElBQUksQ0FBQy9CLFNBQVMsQ0FBQ2YsT0FBTyxDQUFDO0FBQzNCLENBQUM7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQXpKLE1BQU0sQ0FBQ2dMLEdBQUcsR0FBQyxDQUFDLENBQUM7QUFDYnRILENBQUMsQ0FBQ1csUUFBUSxDQUFDLENBQUNvSSxLQUFLLENBQUMsWUFBVztFQUN6QjdMLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLFdBQVcsQ0FBQztFQUN4QjtFQUNBNkwsUUFBUSxDQUFDQyxJQUFJLEdBQUcsQ0FBRSxJQUFJLEVBQUUsSUFBSSxDQUFFO0VBQzlCO0FBRUosQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2FwcC5qcz9jZWQ2Il0sInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vYm9vdHN0cmFwJyk7XHJcblxyXG5cclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8qXHJcbkhlbHBlciBmdW5jdGlvblxyXG4qL1xyXG53aW5kb3cuZ2V0TW9uZGF5PWZ1bmN0aW9uKGRhdGUsZGF0ZVN0cikge1xyXG4gICAgaWYoZGF0ZVN0cil7XHJcbiAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKGRhdGVTdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkYXkgPSBkYXRlLmdldERheSgpLFxyXG4gICAgICAgIGRpZmYgPSBkYXRlLmdldERhdGUoKSAtIGRheSArIChkYXkgPT0gMCA/IC02OjEpOyAvLyBhZGp1c3Qgd2hlbiBkYXkgaXMgc3VuZGF5XHJcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS5zZXREYXRlKGRpZmYpKTtcclxufVxyXG53aW5kb3cuZGVidWc9ZnVuY3Rpb24gKHR4dClcclxue1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBjb25zb2xlLmxvZyh0eHQpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2goZSl7fVxyXG59O1xyXG5cclxud2luZG93LmJ1aWxkRm9ybURhdGE9ZnVuY3Rpb24oZm9ybURhdGEsIGRhdGEsIHBhcmVudEtleSkge1xyXG4gICAgaWYgKGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmICEoZGF0YSBpbnN0YW5jZW9mIERhdGUpICYmICEoZGF0YSBpbnN0YW5jZW9mIEZpbGUpKSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBidWlsZEZvcm1EYXRhKGZvcm1EYXRhLCBkYXRhW2tleV0sIHBhcmVudEtleSA/IGAke3BhcmVudEtleX1bJHtrZXl9XWAgOiBrZXkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGEgPT0gbnVsbCA/ICcnIDogZGF0YTtcclxuXHJcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKHBhcmVudEtleSwgdmFsdWUpO1xyXG4gICAgfVxyXG59XHJcblxyXG53aW5kb3cuanNvblRvRm9ybURhdGE9ZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuXHJcbiAgICBidWlsZEZvcm1EYXRhKGZvcm1EYXRhLCBkYXRhKTtcclxuXHJcbiAgICByZXR1cm4gZm9ybURhdGE7XHJcbn1cclxuXHJcblN0cmluZy5wcm90b3R5cGUuY2FwaXRhbGl6ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0aGlzLnNsaWNlKDEpXHJcbn1cclxuXHJcbndpbmRvdy5hcnJheVJlbW92ZT1mdW5jdGlvbihhcnIsIHZhbHVlKSB7XHJcblxyXG4gICAgcmV0dXJuIGFyci5maWx0ZXIoZnVuY3Rpb24oZWxlKXtcclxuICAgICAgICByZXR1cm4gZWxlICE9IHZhbHVlO1xyXG4gICAgfSk7XHJcbn1cclxud2luZG93LmdldFJhbmRvbUludD1mdW5jdGlvbiAobWF4PU51bWJlci5NQVhfU0FGRV9JTlRFR0VSLG1pbj0wKSB7XHJcbiAgICBkZWJ1ZyhtYXgpO1xyXG4gICAgZGVidWcobWluKTtcclxuICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpICsgbWluO1xyXG59XHJcblxyXG53aW5kb3cuc2V0SW1hZ2VGcm9tTG9jYWw9ZnVuY3Rpb24oaW5wdXQsdGFyZ2V0SW1nQ3NzU2VsZWN0b3IpIHtcclxuICAgIGlmIChpbnB1dC5maWxlcyAmJiBpbnB1dC5maWxlc1swXSkge1xyXG4gICAgICAgIGxldCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAkKHRhcmdldEltZ0Nzc1NlbGVjdG9yKS5hdHRyKCdzcmMnLCBlLnRhcmdldC5yZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChpbnB1dC5maWxlc1swXSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbnJlcXVpcmUoJy4vbGF0aW5pc2UnKTtcclxuXHJcbi8qXHJcbmRpc2FibGUgYmFjayBidXR0b25cclxuICovXHJcbiQoZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAod2luZG93Lmhpc3RvcnkgJiYgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKSB7XHJcbiAgICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKCcnLCBudWxsLCB3aW5kb3cubG9jYXRpb24uaHJlZik7XHJcbiAgICAgICAgJCh3aW5kb3cpLm9uKCdwb3BzdGF0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIC8vIGFsZXJ0KCdCYWNrIGJ1dHRvbiB3YXMgcHJlc3NlZC4nKTtcclxuICAgICAgICAgICAgLy9kb2N1bWVudC5sb2NhdGlvbi5ocmVmID0gJyMnO1xyXG4gICAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoJycsIGRvY3VtZW50LnRpdGxlLCB3aW5kb3cubG9jYXRpb24uaHJlZik7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ21ldmFneScpO1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSk7XHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vKlxyXG5pbml0IGN1c3RvbSByYWRpbyBidXR0b25zXHJcbiAqL1xyXG53aW5kb3cuaW5pdFJhZGlvQnV0dG9ucz1mdW5jdGlvbiAoT3B0aW9ucyl7XHJcbiAgICBsZXQgT3B0cyA9IHtcclxuICAgICAgICBvbkNoYW5nZTogZnVuY3Rpb24gKHZhbHVlLG5vZGUpIHtcclxuICAgICAgICB9LFxyXG4gICAgfTtcclxuXHJcbiAgICAkLmV4dGVuZChPcHRzLCBPcHRpb25zKTtcclxuXHJcbiAgICBsZXQgYWN0aXZlVmFsdWUgPSAkKCcuY3VzdG9tUmFkaW9CdG5Hcm91cCAuYWN0aXZlJykuZGF0YSgndGl0bGUnKTtcclxuICAgIGxldCB0YXJnZXQgPSAkKCcuY3VzdG9tUmFkaW9CdG5Hcm91cCAuYWN0aXZlJykuZGF0YSgndG9nZ2xlJyk7XHJcbiAgICAkKCdpbnB1dFtuYW1lPScrdGFyZ2V0KyddJykucHJvcCgndmFsdWUnLCBhY3RpdmVWYWx1ZSk7XHJcblxyXG4gICAgJCgnLmN1c3RvbVJhZGlvQnRuR3JvdXAgYScpLnVuYmluZCgnY2xpY2snKTtcclxuICAgICQoJy5jdXN0b21SYWRpb0J0bkdyb3VwIGEnKS5iaW5kKCdjbGljaycsZnVuY3Rpb24oKXtcclxuICAgICAgICBsZXQgc2VsID0gJCh0aGlzKS5kYXRhKCd0aXRsZScpO1xyXG4gICAgICAgIGxldCB0b2cgPSAkKHRoaXMpLmRhdGEoJ3RvZ2dsZScpO1xyXG4gICAgICAgICQoJ2lucHV0W25hbWU9Jyt0b2crJ10nKS5wcm9wKCd2YWx1ZScsIHNlbCk7XHJcbiAgICAgICAgJCgnYVtkYXRhLXRvZ2dsZT1cIicrdG9nKydcIl0nKS5ub3QoJ1tkYXRhLXRpdGxlPVwiJytzZWwrJ1wiXScpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKS5hZGRDbGFzcygnbm90QWN0aXZlJyk7XHJcbiAgICAgICAgJCgnYVtkYXRhLXRvZ2dsZT1cIicrdG9nKydcIl1bZGF0YS10aXRsZT1cIicrc2VsKydcIl0nKS5yZW1vdmVDbGFzcygnbm90QWN0aXZlJykuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xyXG4gICAgICAgIE9wdHMub25DaGFuZ2Uoc2VsLHRvZyk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vICBEZWZhdWx0c1xyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuJC5leHRlbmQoIHRydWUsICQuZm4uZGF0YVRhYmxlLmRlZmF1bHRzLCB7XHJcbiAgICBsYW5ndWFnZToge1xyXG4gICAgICAgIHVybDogJy8vY2RuLmRhdGF0YWJsZXMubmV0L3BsdWctaW5zLzEuMTAuMjQvaTE4bi9IdW5nYXJpYW4uanNvbidcclxuICAgIH0sXHJcbiAgICBsZW5ndGhNZW51OiBbXHJcbiAgICAgICAgWyAxMCwgMjUsIDUwLCAtMSBdLFxyXG4gICAgICAgIFsgJzEwIHNvcicsICcyNSBzb3InLCAnNTAgc29yJywgJ8OWc3N6ZXMnIF1cclxuICAgIF0sXHJcbiAgICBidXR0b25zOntcclxuICAgICAgICBkb206e1xyXG4gICAgICAgICAgICBidXR0b246e1xyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOidmZy1idXR0b24gdWktYnV0dG9uIGRhdGFUYWJsZUhlYWRlckJ1dHRvbnMnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgfSxcclxuICAgIGRvbTogJzxcImZnLXRvb2xiYXIgdWktdG9vbGJhciB1aS13aWRnZXQtaGVhZGVyIHVpLWhlbHBlci1jbGVhcmZpeCB1aS1jb3JuZXItdGwgdWktY29ybmVyLXRyXCJsQmZyPicrXHJcbiAgICAgICAgJ3QnK1xyXG4gICAgICAgICc8XCJmZy10b29sYmFyIHVpLXRvb2xiYXIgdWktd2lkZ2V0LWhlYWRlciB1aS1oZWxwZXItY2xlYXJmaXggdWktY29ybmVyLWJsIHVpLWNvcm5lci1iclwiaXA+JyxcclxuXHJcbn0gKTtcclxuSW5wdXRtYXNrLmV4dGVuZERlZmluaXRpb25zKHtcclxuICAgICd4Jzoge1xyXG4gICAgICAgIHZhbGlkYXRvcjogXCJbXFwuLC3DocOpw63Ds8O2xZHDusOgw6jDrMOyw7nDvMWxw4HDicONw5PDlsWQw5rDgMOIw4zDksOZw5zFsEEtWmEtejAtOSBdXCIsXHJcbiAgICAgICAgLy9jYXJkaW5hbGl0eTogMVxyXG4gICAgfVxyXG59KTtcclxuXHJcblxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuVG9hc3QuZW5hYmxlVGltZXJzKGZhbHNlKTtcclxuJC5mbi5zZWxlY3QyLmRlZmF1bHRzLnNldCgnbGFuZ3VhZ2UnLCAnanAnKTtcclxud2luZG93LnNlbGVjdDJDcmVhdGVUYWc9ZnVuY3Rpb24gKHBhcmFtcyl7XHJcbiAgICB2YXIgdGVybSA9ICQudHJpbShwYXJhbXMudGVybSk7XHJcbiAgICB2YXIgY291bnQgPSAwXHJcbiAgICB2YXIgZXhpc3RzVmFyID0gZmFsc2U7XHJcbiAgICAvL2NoZWNrIGlmIHRoZXJlIGlzIGFueSBvcHRpb24gYWxyZWFkeVxyXG4gICAgaWYoJCgnI2tleXdvcmRzIG9wdGlvbicpLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICQoJyNrZXl3b3JkcyBvcHRpb24nKS5lYWNoKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIGlmICgkKHRoaXMpLnRleHQoKS50b1VwcGVyQ2FzZSgpID09IHRlcm0udG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgZXhpc3RzVmFyID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGV4aXN0c1ZhciA9IGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZihleGlzdHNWYXIpe1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaWQ6IHBhcmFtcy50ZXJtLFxyXG4gICAgICAgICAgICB0ZXh0OiBwYXJhbXMudGVybSxcclxuICAgICAgICAgICAgbmV3VGFnOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy9zaW5jZSBzZWxlY3QgaGFzIDAgb3B0aW9ucywgYWRkIG5ldyB3aXRob3V0IGNvbXBhcmluZ1xyXG4gICAgZWxzZXtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBpZDogcGFyYW1zLnRlcm0sXHJcbiAgICAgICAgICAgIHRleHQ6IHBhcmFtcy50ZXJtLFxyXG4gICAgICAgICAgICBuZXdUYWc6IHRydWVcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG59XHJcblxyXG53aW5kb3cuYWpheEVycm9ySGFuZGxlcj0gZnVuY3Rpb24gKHhociwgYWpheE9wdGlvbnMsIHRocm93bkVycm9yKXtcclxuICAgIGRlYnVnKHRoaXMpO1xyXG4gICAgY29uc29sZS5lcnJvcih4aHIpO1xyXG4gICAgY29uc29sZS5lcnJvcihhamF4T3B0aW9ucyk7XHJcbiAgICBjb25zb2xlLmVycm9yKHRocm93bkVycm9yKTtcclxuICAgIGlmICh4aHIucmVzcG9uc2VKU09OLmVycm9ycykge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJkMi0tLS0tLS0tLS0tLS0tLVwiKTtcclxuICAgICAgICBpZihcImpzb25hcGlcIiBpbiB4aHIucmVzcG9uc2VKU09OKXtcclxuICAgICAgICAgICAgYWpheEVycm9yRmllbGRIYW5kbGVySnNvbkFQSSh4aHIucmVzcG9uc2VKU09OLmVycm9ycyk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGFqYXhFcnJvckZpZWxkSGFuZGxlcih4aHIucmVzcG9uc2VKU09OLmVycm9ycyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1lbHNle1xyXG4gICAgICAgIGlmKHhoci5zdGF0dXM9PTQwNCl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJkMy0tLS0tLS0tLS0tLS0tLVwiKTtcclxuICAgICAgICAgICAgYWpheEVycm9yRmllbGRIYW5kbGVyKHsnZGV0YWlsJzonTmluY3MgaWx5ZW4gZWxlbS4nfSk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJkNC0tLS0tLS0tLS0tLS0tLVwiKTtcclxuICAgICAgICAgICAgYWpheEVycm9yRmllbGRIYW5kbGVyKHsnZGV0YWlsJzonw4FsdGFsw6Fub3MgaGliYS4nfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbn1cclxud2luZG93LmFqYXhFcnJvckZpZWxkSGFuZGxlckpzb25BUEk9IGZ1bmN0aW9uIChlcnJvcnMsIGNvbnRhaW5lcikge1xyXG4gICAgY29uc29sZS5lcnJvcihcImQ2LS0tLS0tLS0tLS0tLS0tXCIpO1xyXG4gICAgbGV0IHRvYXN0Qm9keUh0bWwgPSAnJztcclxuICAgIGxldCB0b2FzdFRpdGxlID0gJ0hpYmEnO1xyXG4gICAgY29uc29sZS5lcnJvcihlcnJvcnMpO1xyXG4gICAgJC5lYWNoKGVycm9ycywgZnVuY3Rpb24gKGluZGV4LCB2YWx1ZSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IodmFsdWUpO1xyXG4gICAgICAgIHRvYXN0VGl0bGUgPSAnSGliYSc7XHJcbiAgICAgICAgdG9hc3RCb2R5SHRtbCA9ICcnO1xyXG4gICAgICAgIGlmKFwidGl0bGVcIiBpbiB2YWx1ZSl7XHJcbiAgICAgICAgICAgIHRvYXN0VGl0bGU9dmFsdWUudGl0bGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKFwiZGV0YWlsXCIgaW4gdmFsdWUpe1xyXG4gICAgICAgICAgICB0b2FzdEJvZHlIdG1sICs9ICc8ZGl2PicgKyB2YWx1ZS5kZXRhaWwgKyAnPGRpdj4nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBUb2FzdC5jcmVhdGUoe1xyXG4gICAgICAgICAgICB0aXRsZTogdG9hc3RUaXRsZSxcclxuICAgICAgICAgICAgbWVzc2FnZTogdG9hc3RCb2R5SHRtbCxcclxuICAgICAgICAgICAgc3RhdHVzOiBUT0FTVF9TVEFUVVMuREFOR0VSLCAgIC8vIFNVQ0NFU1MgKHrDtmxkKVxyXG4gICAgICAgICAgICB0aW1lb3V0OiAxMDAwMFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxud2luZG93LmFqYXhFcnJvckZpZWxkSGFuZGxlciA9IGZ1bmN0aW9uIChlcnJvcnMsIGNvbnRhaW5lcikge1xyXG4gICAgY29uc29sZS5lcnJvcihcImQ1LS0tLS0tLS0tLS0tLS0tXCIpO1xyXG4gICAgY29uc29sZS5lcnJvcihlcnJvcnMpO1xyXG4gICAgbGV0IHRvYXN0Qm9keUh0bWwgPSAnJztcclxuICAgICQuZWFjaChlcnJvcnMsIGZ1bmN0aW9uIChpbmRleCwgdmFsdWUpIHtcclxuICAgICAgICB0b2FzdEJvZHlIdG1sICs9ICc8ZGl2PicgKyB2YWx1ZSArICc8ZGl2Pic7XHJcbiAgICB9KTtcclxuXHJcbiAgICBUb2FzdC5jcmVhdGUoe1xyXG4gICAgICAgIHRpdGxlOiBcIkhpYmEhXCIsXHJcbiAgICAgICAgbWVzc2FnZTogdG9hc3RCb2R5SHRtbCxcclxuICAgICAgICBzdGF0dXM6IFRPQVNUX1NUQVRVUy5EQU5HRVIsICAgLy8gU1VDQ0VTUyAoesO2bGQpXHJcbiAgICAgICAgdGltZW91dDogMTAwMDBcclxuICAgIH0pO1xyXG59XHJcbiQuYWpheFNldHVwKHtcclxuICAgIGVycm9yOmFqYXhFcnJvckhhbmRsZXIsXHJcbn0pO1xyXG4vKlxyXG5kYXRlcGlja2VyIGFmdGVyU2hvdyBmdW5jdGlvblxyXG4gKi9cclxuJC5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyX29yaWdpbmFsID0gJC5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyO1xyXG4kLmRhdGVwaWNrZXIuX3VwZGF0ZURhdGVwaWNrZXIgPSBmdW5jdGlvbihpbnN0KSB7XHJcbiAgICAkLmRhdGVwaWNrZXIuX3VwZGF0ZURhdGVwaWNrZXJfb3JpZ2luYWwoaW5zdCk7XHJcbiAgICBsZXQgYWZ0ZXJTaG93ID0gdGhpcy5fZ2V0KGluc3QsICdhZnRlclNob3cnKTtcclxuICAgIGlmIChhZnRlclNob3cpXHJcbiAgICAgICAgYWZ0ZXJTaG93LmFwcGx5KChpbnN0LmlucHV0ID8gaW5zdC5pbnB1dFswXSA6IG51bGwpKTsgIC8vIHRyaWdnZXIgY3VzdG9tIGNhbGxiYWNrXHJcbn1cclxuXHJcblxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxud2luZG93LkVtZWdyZW5kZWxlc0RlZmF1bHRzPXtcclxuICAgIGRhdGF0YWJsZUFjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2s6IGZ1bmN0aW9uICgpIHt9LFxyXG4gICAgZGF0YXRhYmxlQWRkUm93VHJhc2hCdXR0b246IGZ1bmN0aW9uIChpZCxhcmdzKSB7XHJcbiAgICAgICAgcmV0dXJuICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWRhbmdlciBidXR0b25EZWxldGVcIiBkYXRhLWJ1dHRvblR5cGU9XCJkZWxldGVcIiBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cImJvdHRvbVwiIHRpdGxlPVwiVMO2cmzDqXNcIj4nICtcclxuICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwiZmFzIGZhLXRyYXNoXCI+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAnPC9idXR0b24+J1xyXG5cclxuICAgIH0sXHJcbiAgICBkYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uOiBmdW5jdGlvbiAoYXJncykge1xyXG4gICAgICAgIGxldCB0aXRsZT0nQWRhdG9rJztcclxuICAgICAgICBpZih0eXBlb2YgYXJnc1sxXS50aXRsZSE9PVwidW5kZWZpbmVkXCIpe1xyXG4gICAgICAgICAgICB0aXRsZT1hcmdzWzFdLnRpdGxlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taW5mbyBidXR0b25FZGl0XCIgIGRhdGEtYnV0dG9uVHlwZT1cImVkaXRcIiBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cImJvdHRvbVwiIHRpdGxlPVwiJyt0aXRsZSsnXCI+JyArXHJcbiAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cImZhcyBmYS1wZW5jaWwtYWx0XCI+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAnPC9idXR0b24+J1xyXG5cclxuICAgIH0sXHJcbiAgICBkYXRhdGFibGVBZGRSb3dWaWV3QnV0dG9uOiBmdW5jdGlvbiAoaWQsYXJncykge1xyXG4gICAgICAgIHJldHVybiAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBkYXRhVGFibGVSb3dCdXR0b24gYnV0dG9uVmlld1wiICBkYXRhLWJ1dHRvblR5cGU9XCJ2aWV3XCIgZGF0YS10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1wbGFjZW1lbnQ9XCJib3R0b21cIiB0aXRsZT1cIk1lZ3Rla2ludFwiPicgK1xyXG4gICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJmYXMgZmEtZXllXCI+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAnPC9idXR0b24+J1xyXG5cclxuICAgIH0sXHJcbiAgICBkYXRhdGFibGVBZGRSb3dBdHRhY2htZW50QnV0dG9uOiBmdW5jdGlvbiAoaWQsYXJncykge1xyXG4gICAgICAgIHJldHVybiAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLWRhcmsgZGF0YVRhYmxlUm93QnV0dG9uIGJ1dHRvbkF0dGFjaG1lbnRcIiAgZGF0YS1idXR0b25UeXBlPVwiYXR0YWNobWVudFwiIGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiIGRhdGEtcGxhY2VtZW50PVwiYm90dG9tXCIgdGl0bGU9XCJDc2F0b2xtw6FueVwiPicgK1xyXG4gICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJmYXMgZmEtcGFwZXJjbGlwXCI+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAnPC9idXR0b24+J1xyXG5cclxuICAgIH0sXHJcbiAgICBkYXRhdGFibGVDdXN0b21IZWFkQnV0dG9uQ2xpY2tDYWxsQmFjazpmdW5jdGlvbiAoYXJncykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGFyZ3MpO1xyXG4gICAgfSxcclxuXHJcbiAgICBhZnRlckxvYWRNYWluQ29udGVudDpmdW5jdGlvbiAoYXJncykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGFyZ3MpO1xyXG4gICAgfSxcclxuXHJcblxyXG59O1xyXG5cclxuaWYodHlwZW9mIERhdGFNb2RlbD09PSd1bmRlZmluZWQnKXtcclxuICAgIGNsYXNzIERhdGFNb2RlbHtcclxuICAgICAgICAvKlxyXG4gICAgICAgICAqIFZhcmlhYmxlcyBhY2Nlc3NpYmxlXHJcbiAgICAgICAgICogaW4gdGhlIGNsYXNzXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgT3B0cyA9IHtcclxuICAgICAgICAgICAgYWN0aXZlOiBmYWxzZSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvKlxyXG4gICAgICAgICAqIENvbnN0cnVjdG9yXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29uc3RydWN0b3IgKGRhdGEsb3B0aW9ucykge1xyXG4gICAgICAgICAgICAkLmV4dGVuZCh0aGlzLCBkYXRhKTtcclxuICAgICAgICAgICAgJC5leHRlbmQodGhpcy5PcHRzLCBvcHRpb25zKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBzZXREYXRhIChkYXRhKXtcclxuICAgICAgICAgICAgJC5leHRlbmQodGhpcywgZGF0YSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnZXREYXRhKGluZGV4KXtcclxuICAgICAgICAgICAgaWYoaW5kZXgpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbaW5kZXhdO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHdpbmRvdy5EYXRhTW9kZWw9RGF0YU1vZGVsO1xyXG59XHJcblxyXG5cclxud2luZG93LkVtZWdyZW5kZWxlcyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcblxyXG4gICAgLypcclxuICAgICAqIFZhcmlhYmxlcyBhY2Nlc3NpYmxlXHJcbiAgICAgKiBpbiB0aGUgY2xhc3NcclxuICAgICAqL1xyXG4gICAgbGV0IE9wdHMgPSB7XHJcbiAgICAgICAgbXlWYXI6ICdFbWVncmVuZGVsZXMgdmFsdWUnLFxyXG4gICAgICAgIGRhdGF0YWJsZUFkZFJvd1RyYXNoQnV0dG9uOnt9LFxyXG4gICAgICAgIGRhdGF0YWJsZUFkZFJvd0VkaXRCdXR0b246e30sXHJcbiAgICAgICAgZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjazp7fSxcclxuICAgICAgICBkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnt9LFxyXG4gICAgICAgIGRhdGF0YWJsZUN1c3RvbUhlYWRCdXR0b25DbGlja0NhbGxCYWNrOnt9LFxyXG4gICAgICAgIGFmdGVyTG9hZE1haW5Db250ZW50Ont9LFxyXG4gICAgICAgIFVybDp7fSxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgUHVibGljVmFyPXt9O1xyXG4gICAgbGV0IFB1YmxpY1ZhcjI9eydhc2QnOicyMSd9O1xyXG4gICAgbGV0IEFwaVRva2VuPW51bGw7XHJcbiAgICBsZXQgcm9vdD10aGlzO1xyXG4gICAgLypcclxuICAgICAqIENvbnN0cnVjdG9yXHJcbiAgICAgKi9cclxuICAgIHRoaXMuY29uc3RydWN0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgICAgICAvLyQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuY29uc3RydWN0b3IubmFtZSsnIGNvbnN0cnVjdG9yIGNhbGxlZCcpO1xyXG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIHdpbmRvdy5FbWVncmVuZGVsZXNEZWZhdWx0cywgb3B0aW9ucyk7XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuc2V0T3B0cz1mdW5jdGlvbihvcHRpb25zKXtcclxuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmdldE9wdHM9ZnVuY3Rpb24oKXtcclxuICAgICAgICByZXR1cm4gT3B0cztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGF0YWJsZUFkZFJvd1RyYXNoQnV0dG9uPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIHJldHVybiBPcHRzLmRhdGF0YWJsZUFkZFJvd1RyYXNoQnV0dG9uKGFyZ3VtZW50cyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRhdGF0YWJsZUFkZFJvd0VkaXRCdXR0b249ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgcmV0dXJuIE9wdHMuZGF0YXRhYmxlQWRkUm93RWRpdEJ1dHRvbihhcmd1bWVudHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGF0YXRhYmxlQWRkUm93Vmlld0J1dHRvbj1mdW5jdGlvbiAoKXtcclxuICAgICAgICByZXR1cm4gT3B0cy5kYXRhdGFibGVBZGRSb3dWaWV3QnV0dG9uKGFyZ3VtZW50cyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRhdGF0YWJsZUFkZFJvd0F0dGFjaG1lbnRCdXR0b249ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgcmV0dXJuIE9wdHMuZGF0YXRhYmxlQWRkUm93QXR0YWNobWVudEJ1dHRvbihhcmd1bWVudHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWZ0ZXJMb2FkTWFpbkNvbnRlbnQ9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgcmV0dXJuIE9wdHMuYWZ0ZXJMb2FkTWFpbkNvbnRlbnQoYXJndW1lbnRzKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGF0YWJsZUFjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2s9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgcmV0dXJuIE9wdHMuZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayhhcmd1bWVudHMpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIHJldHVybiBPcHRzLmRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2soYXJndW1lbnRzKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGF0YWJsZUFkZFJvd0FjdGlvbj1mdW5jdGlvbiAoQ1NTU2VsZWN0b3Ipe1xyXG4gICAgICAgIGlmKCFDU1NTZWxlY3Rvcil7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgJChDU1NTZWxlY3RvcisnIHRyIGJ1dHRvbicpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yKycgdHIgYnV0dG9uJykub24oJ2NsaWNrJyxBUFAuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGF0YXRhYmxlQ3VzdG9tSGVhZEJ1dHRvbkNsaWNrQ2FsbEJhY2s9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgcmV0dXJuIE9wdHMuZGF0YXRhYmxlQ3VzdG9tSGVhZEJ1dHRvbkNsaWNrQ2FsbEJhY2soYXJndW1lbnRzKTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogUHVibGljIG1ldGhvZFxyXG4gICAgICogQ2FuIGJlIGNhbGxlZCBvdXRzaWRlIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIHRoaXMubXlQdWJsaWNNZXRob2QgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coT3B0cyk7XHJcblxyXG4gICAgICAgIG15UHJpdmF0ZU1ldGhvZCgpO1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnNldEFwaVRva2VuID0gZnVuY3Rpb24gKHRva2VuKSB7XHJcbiAgICAgICAgcm9vdC5BcGlUb2tlbj10b2tlbjtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5nZXRBcGlUb2tlbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gcm9vdC5BcGlUb2tlbjtcclxuICAgIH07XHJcblxyXG4gICAgLypcclxuICAgICAqIFByaXZhdGUgbWV0aG9kXHJcbiAgICAgKiBDYW4gb25seSBiZSBjYWxsZWQgaW5zaWRlIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IG15UHJpdmF0ZU1ldGhvZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnYWNjZXNzZWQgcHJpdmF0ZSBtZXRob2QnKTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaXRlbU5hbWVcclxuICAgICAqL1xyXG4gICAgdGhpcy5zZXRBY3RpdmVOYXZCYXJJdGVtPWZ1bmN0aW9uKGl0ZW1OYW1lKXtcclxuICAgICAgICAkKCcuc3BlZWRCdXR0b25OYXZCYXIgbGknKS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcclxuICAgICAgICAkKCcuc3BlZWRCdXR0b25OYXZCYXIgbGkuaWNvbmhvbGRlck1vZHVsJytpdGVtTmFtZSkuYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5nZXRBY3RpdmVOYXZCYXJJdGVtPWZ1bmN0aW9uKCl7XHJcbiAgICAgIHJldHVybiAkKCcuc3BlZWRCdXR0b25OYXZCYXIgLnNlbGVjdGVkJykuZmluZCgnYScpLmRhdGEoJ25hbWUnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNsZWFyQXJjaGl2ZU1vZHVsZURhdGFUYWJsZVN0YXRlPWZ1bmN0aW9uKCl7XHJcbiAgICAgICAgaWYoQVBQLk9yZGVyQXJjaGl2ZU1vZHVsZSE9dW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdBUFAuT3JkZXJBcmNoaXZlTW9kdWxlJyk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnY2xlYXInKTtcclxuICAgICAgICAgICAgICAgIEFQUC5PcmRlckFyY2hpdmVNb2R1bGUuZGF0YVRhYmxlLnN0YXRlLmNsZWFyKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIHRoaXMubmF2QmFySXRlbUJlZm9yZXBvc3Q9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ25hdkJhckl0ZW1CZWZvcmVwb3N0Jyk7XHJcbiAgICAgICAgaWYocm9vdC5nZXRBY3RpdmVOYXZCYXJJdGVtKCkhPT0nYWN0aXZlT3JkZXInKXtcclxuICAgICAgICAgICAgcm9vdC5jbGVhckFyY2hpdmVNb2R1bGVEYXRhVGFibGVTdGF0ZSgpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubmF2QmFySXRlbUFmdGVyUG9zdD1mdW5jdGlvbiAoKXtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXROYXZCYXI9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgJChcIi5zcGVlZEJ1dHRvbk5hdkJhciBhOm5vdChbZGF0YS10YXJnZXQ9X2JsYW5rXSk6bm90KFtkYXRhLW5vLWFqYXhdKVwiKS5iaW5kKCdjbGljaycsZnVuY3Rpb24gKGV2ZW50KXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJCh0aGlzKS5kYXRhKCkubmFtZSk7XHJcbiAgICAgICAgICAgIGlmKCQodGhpcykuZGF0YSgnYmlnLWljb24nKSl7XHJcbiAgICAgICAgICAgICAgICAkKFwiLnNwZWVkQnV0dG9uTmF2QmFyXCIpLnJlbW92ZUNsYXNzKCdzbWFsbGljb25zJyk7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgJChcIi5zcGVlZEJ1dHRvbk5hdkJhclwiKS5hZGRDbGFzcygnc21hbGxpY29ucycpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByb290LnNldEFjdGl2ZU5hdkJhckl0ZW0oJCh0aGlzKS5kYXRhKCkubmFtZSk7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJChcIi5zcGVlZEJ1dHRvbk5hdkJhciBhOm5vdChbZGF0YS10YXJnZXQ9X2JsYW5rXSk6bm90KFtkYXRhLW5vLWFqYXhdKVwiKS5hamF4bGluayh7XHJcbiAgICAgICAgICAgIHRhcmdldDokKCcubWFpbkNvbnRlbnQnKSxcclxuICAgICAgICAgICAgYWpheHR5cGU6J0dFVCcsXHJcbiAgICAgICAgICAgIGFmdGVycG9zdDpyb290Lm5hdkJhckl0ZW1BZnRlclBvc3QsXHJcbiAgICAgICAgICAgIGJlZm9yZXBvc3Q6cm9vdC5uYXZCYXJJdGVtQmVmb3JlcG9zdCxcclxuICAgICAgICB9KTtcclxuICAgICAgICAkKFwiLnNwZWVkQnV0dG9uTmF2QmFyIGFbZGF0YS10YXJnZXQ9X2JsYW5rXSwgLnNwZWVkQnV0dG9uTmF2QmFyIGFbZGF0YS1uby1hamF4XVwiKS5iaW5kKCdjbGljaycsZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgcm9vdC5jbGVhckFyY2hpdmVNb2R1bGVEYXRhVGFibGVTdGF0ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubG9hZE1haW5Db250ZW50PWZ1bmN0aW9uICh1cmwsZGF0YSxjYWxsQmFjayl7XHJcblxyXG4gICAgICAgIGlmKCFjYWxsQmFjayl7XHJcbiAgICAgICAgICAgIGNhbGxCYWNrPXJvb3QuYWZ0ZXJMb2FkTWFpbkNvbnRlbnQ7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd2YW4gY2FsbGJhY2snKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coY2FsbEJhY2spO1xyXG4gICAgICAgIH1cclxuICAgICAgICAkKCcubWFpbkNvbnRlbnQnKS5sb2FkKFxyXG4gICAgICAgICAgICB1cmwsZGF0YSxjYWxsQmFja1xyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICAvKlxyXG4gICAgICogUGFzcyBvcHRpb25zIHdoZW4gY2xhc3MgaW5zdGFudGlhdGVkXHJcbiAgICAgKi9cclxuICAgIHRoaXMuY29uc3RydWN0KG9wdGlvbnMpO1xyXG59O1xyXG5cclxuXHJcbi8qXHJcbiQuZm4uYWpheGxpbmsgPSBmdW5jdGlvbihvcHRpb25zKXtcclxuXHJcbn07XHJcbmltcG9ydCAnLi9hamF4TGluayc7XHJcblxyXG4qICovXHJcbndpbmRvdy5BUFA9e307XHJcbiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpe1xyXG4gICAgY29uc29sZS5sb2coJ3JlYWR5IGRvYycpO1xyXG4gICAgLy8kKCcuZGF0ZXBpY2tlcicpLmRhdGVwaWNrZXIoKTtcclxuICAgIE11c3RhY2hlLnRhZ3MgPSBbICdbWycsICddXScgXTtcclxuICAgIC8vID0gWyAnPCUnLCAnJT4nIF07XHJcblxyXG59KTtcclxuXHJcblxyXG5cclxuIl0sIm5hbWVzIjpbInJlcXVpcmUiLCJ3aW5kb3ciLCJnZXRNb25kYXkiLCJkYXRlIiwiZGF0ZVN0ciIsIkRhdGUiLCJkYXkiLCJnZXREYXkiLCJkaWZmIiwiZ2V0RGF0ZSIsInNldERhdGUiLCJkZWJ1ZyIsInR4dCIsImNvbnNvbGUiLCJsb2ciLCJlIiwiYnVpbGRGb3JtRGF0YSIsImZvcm1EYXRhIiwiZGF0YSIsInBhcmVudEtleSIsIl90eXBlb2YiLCJGaWxlIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJjb25jYXQiLCJ2YWx1ZSIsImFwcGVuZCIsImpzb25Ub0Zvcm1EYXRhIiwiRm9ybURhdGEiLCJTdHJpbmciLCJwcm90b3R5cGUiLCJjYXBpdGFsaXplIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJzbGljZSIsImFycmF5UmVtb3ZlIiwiYXJyIiwiZmlsdGVyIiwiZWxlIiwiZ2V0UmFuZG9tSW50IiwibWF4IiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiTnVtYmVyIiwiTUFYX1NBRkVfSU5URUdFUiIsIm1pbiIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsInNldEltYWdlRnJvbUxvY2FsIiwiaW5wdXQiLCJ0YXJnZXRJbWdDc3NTZWxlY3RvciIsImZpbGVzIiwicmVhZGVyIiwiRmlsZVJlYWRlciIsIm9ubG9hZCIsIiQiLCJhdHRyIiwidGFyZ2V0IiwicmVzdWx0IiwicmVhZEFzRGF0YVVSTCIsImhpc3RvcnkiLCJwdXNoU3RhdGUiLCJsb2NhdGlvbiIsImhyZWYiLCJvbiIsImV2ZW50IiwiZG9jdW1lbnQiLCJ0aXRsZSIsInN0b3BQcm9wYWdhdGlvbiIsImluaXRSYWRpb0J1dHRvbnMiLCJPcHRpb25zIiwiT3B0cyIsIm9uQ2hhbmdlIiwibm9kZSIsImV4dGVuZCIsImFjdGl2ZVZhbHVlIiwicHJvcCIsInVuYmluZCIsImJpbmQiLCJzZWwiLCJ0b2ciLCJub3QiLCJyZW1vdmVDbGFzcyIsImFkZENsYXNzIiwiZm4iLCJkYXRhVGFibGUiLCJkZWZhdWx0cyIsImxhbmd1YWdlIiwidXJsIiwibGVuZ3RoTWVudSIsImJ1dHRvbnMiLCJkb20iLCJidXR0b24iLCJjbGFzc05hbWUiLCJJbnB1dG1hc2siLCJleHRlbmREZWZpbml0aW9ucyIsInZhbGlkYXRvciIsIlRvYXN0IiwiZW5hYmxlVGltZXJzIiwic2VsZWN0MiIsInNldCIsInNlbGVjdDJDcmVhdGVUYWciLCJwYXJhbXMiLCJ0ZXJtIiwidHJpbSIsImNvdW50IiwiZXhpc3RzVmFyIiwiZWFjaCIsInRleHQiLCJpZCIsIm5ld1RhZyIsImFqYXhFcnJvckhhbmRsZXIiLCJ4aHIiLCJhamF4T3B0aW9ucyIsInRocm93bkVycm9yIiwiZXJyb3IiLCJyZXNwb25zZUpTT04iLCJlcnJvcnMiLCJhamF4RXJyb3JGaWVsZEhhbmRsZXJKc29uQVBJIiwiYWpheEVycm9yRmllbGRIYW5kbGVyIiwic3RhdHVzIiwiY29udGFpbmVyIiwidG9hc3RCb2R5SHRtbCIsInRvYXN0VGl0bGUiLCJpbmRleCIsImRldGFpbCIsImNyZWF0ZSIsIm1lc3NhZ2UiLCJUT0FTVF9TVEFUVVMiLCJEQU5HRVIiLCJ0aW1lb3V0IiwiYWpheFNldHVwIiwiZGF0ZXBpY2tlciIsIl91cGRhdGVEYXRlcGlja2VyX29yaWdpbmFsIiwiX3VwZGF0ZURhdGVwaWNrZXIiLCJpbnN0IiwiYWZ0ZXJTaG93IiwiX2dldCIsImFwcGx5IiwiRW1lZ3JlbmRlbGVzRGVmYXVsdHMiLCJkYXRhdGFibGVBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrIiwiZGF0YXRhYmxlQWRkUm93VHJhc2hCdXR0b24iLCJhcmdzIiwiZGF0YXRhYmxlQWRkUm93RWRpdEJ1dHRvbiIsImRhdGF0YWJsZUFkZFJvd1ZpZXdCdXR0b24iLCJkYXRhdGFibGVBZGRSb3dBdHRhY2htZW50QnV0dG9uIiwiZGF0YXRhYmxlQ3VzdG9tSGVhZEJ1dHRvbkNsaWNrQ2FsbEJhY2siLCJhZnRlckxvYWRNYWluQ29udGVudCIsIkRhdGFNb2RlbCIsIl9EYXRhTW9kZWwyIiwib3B0aW9ucyIsIl9jbGFzc0NhbGxDaGVjayIsIl9kZWZpbmVQcm9wZXJ0eSIsImFjdGl2ZSIsIl9jcmVhdGVDbGFzcyIsInNldERhdGEiLCJnZXREYXRhIiwiRW1lZ3JlbmRlbGVzIiwibXlWYXIiLCJkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrIiwiVXJsIiwiUHVibGljVmFyIiwiUHVibGljVmFyMiIsIkFwaVRva2VuIiwicm9vdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwibmFtZSIsInNldE9wdHMiLCJnZXRPcHRzIiwiZGF0YXRhYmxlQWRkUm93QWN0aW9uIiwiQ1NTU2VsZWN0b3IiLCJvZmYiLCJBUFAiLCJteVB1YmxpY01ldGhvZCIsIm15UHJpdmF0ZU1ldGhvZCIsInNldEFwaVRva2VuIiwidG9rZW4iLCJnZXRBcGlUb2tlbiIsInNldEFjdGl2ZU5hdkJhckl0ZW0iLCJpdGVtTmFtZSIsImdldEFjdGl2ZU5hdkJhckl0ZW0iLCJmaW5kIiwiY2xlYXJBcmNoaXZlTW9kdWxlRGF0YVRhYmxlU3RhdGUiLCJPcmRlckFyY2hpdmVNb2R1bGUiLCJzdGF0ZSIsImNsZWFyIiwibmF2QmFySXRlbUJlZm9yZXBvc3QiLCJuYXZCYXJJdGVtQWZ0ZXJQb3N0IiwiaW5pdE5hdkJhciIsInByZXZlbnREZWZhdWx0IiwiYWpheGxpbmsiLCJhamF4dHlwZSIsImFmdGVycG9zdCIsImJlZm9yZXBvc3QiLCJsb2FkTWFpbkNvbnRlbnQiLCJjYWxsQmFjayIsImxvYWQiLCJyZWFkeSIsIk11c3RhY2hlIiwidGFncyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/app.js\n\n}"); /***/ }, diff --git a/public/mix-manifest.json b/public/mix-manifest.json index cb4fe7e..b8d73a5 100644 --- a/public/mix-manifest.json +++ b/public/mix-manifest.json @@ -1,6 +1,6 @@ { - "/js/app.js": "/js/app.js?id=c3305cf2e0efb767261d2b2b14965bd2", - "/js/admin.js": "/js/admin.js?id=da5d82ea896b3250811b365e143abfc4", + "/js/app.js": "/js/app.js?id=b2b26ba4c8485e78de1ad23b8c72997d", + "/js/admin.js": "/js/admin.js?id=a3f796dee735ea8029b653e812781e63", "/js/module.js": "/js/module.js?id=9baa3aeb550477277796c6ebeff868c4", "/js/components.js": "/js/components.js?id=34668cee8ac371c98657beffcff579b8", "/css/app.css": "/css/app.css?id=11474616a7ef31af1acf43a25d65f4b6", diff --git a/resources/js/admin/supplier.js b/resources/js/admin/supplier.js index f2ee55c..9608499 100644 --- a/resources/js/admin/supplier.js +++ b/resources/js/admin/supplier.js @@ -171,6 +171,7 @@ window.SupplierAdmin=function (options,SupplierItem) { }, success:function (data){ + debug('d1: Save success '); debug(data); if(data.success==true){ diff --git a/resources/js/app.js b/resources/js/app.js index aaf5231..cf5f1ee 100644 --- a/resources/js/app.js +++ b/resources/js/app.js @@ -182,10 +182,11 @@ window.select2CreateTag=function (params){ window.ajaxErrorHandler= function (xhr, ajaxOptions, thrownError){ debug(this); - debug(xhr); - debug(ajaxOptions); - debug(thrownError); + console.error(xhr); + console.error(ajaxOptions); + console.error(thrownError); if (xhr.responseJSON.errors) { + console.error("d2---------------"); if("jsonapi" in xhr.responseJSON){ ajaxErrorFieldHandlerJsonAPI(xhr.responseJSON.errors); }else{ @@ -194,8 +195,10 @@ window.ajaxErrorHandler= function (xhr, ajaxOptions, thrownError){ }else{ if(xhr.status==404){ + console.error("d3---------------"); ajaxErrorFieldHandler({'detail':'Nincs ilyen elem.'}); }else{ + console.error("d4---------------"); ajaxErrorFieldHandler({'detail':'Általános hiba.'}); } } @@ -203,6 +206,7 @@ window.ajaxErrorHandler= function (xhr, ajaxOptions, thrownError){ } window.ajaxErrorFieldHandlerJsonAPI= function (errors, container) { + console.error("d6---------------"); let toastBodyHtml = ''; let toastTitle = 'Hiba'; console.error(errors); @@ -216,21 +220,28 @@ window.ajaxErrorFieldHandlerJsonAPI= function (errors, container) { if("detail" in value){ toastBodyHtml += '
' + value.detail + '
'; } - Toast.create(toastTitle, toastBodyHtml, TOAST_STATUS.DANGER, 10000); + Toast.create({ + title: toastTitle, + message: toastBodyHtml, + status: TOAST_STATUS.DANGER, // SUCCESS (zöld) + timeout: 10000 + }); }); } window.ajaxErrorFieldHandler = function (errors, container) { + console.error("d5---------------"); + console.error(errors); let toastBodyHtml = ''; $.each(errors, function (index, value) { toastBodyHtml += '
' + value + '
'; }); - Toast.create("Hiba!", toastBodyHtml, TOAST_STATUS.DANGER, 10000); -/* - Toast.fire({ - icon: 'error', - html: toastBodyHtml + + Toast.create({ + title: "Hiba!", + message: toastBodyHtml, + status: TOAST_STATUS.DANGER, // SUCCESS (zöld) + timeout: 10000 }); -*/ } $.ajaxSetup({ error:ajaxErrorHandler, diff --git a/resources/views/components/address-add-popup.blade.php b/resources/views/components/address-add-popup.blade.php index 6412138..ca92e65 100644 --- a/resources/views/components/address-add-popup.blade.php +++ b/resources/views/components/address-add-popup.blade.php @@ -92,7 +92,7 @@ }); - +/* window.ajaxErrorFieldHandler = function (errors, container) { let toastBodyHtml = ''; $.each(errors, function (index, value) { @@ -100,7 +100,7 @@ }); Toast.create("Hiba!", toastBodyHtml, TOAST_STATUS.DANGER, 10000); } - +*/ /* if(!$.fn.jstree){ diff --git a/resources/views/components/contact-add-popup.blade.php b/resources/views/components/contact-add-popup.blade.php index e31cc1d..ca235ed 100644 --- a/resources/views/components/contact-add-popup.blade.php +++ b/resources/views/components/contact-add-popup.blade.php @@ -98,6 +98,7 @@ +/* window.ajaxErrorFieldHandler = function (errors, container) { let toastBodyHtml = ''; $.each(errors, function (index, value) { @@ -105,6 +106,7 @@ }); Toast.create("Hiba!", toastBodyHtml, TOAST_STATUS.DANGER, 10000); } +*/ /*