diff --git a/client/dist/bbj-grid-widget.js b/client/dist/bbj-grid-widget.js index f7572fb3..77031b77 100644 --- a/client/dist/bbj-grid-widget.js +++ b/client/dist/bbj-grid-widget.js @@ -1,4 +1,4 @@ -!function(e,t){for(var n in t)e[n]=t[n]}(window,function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=39)}([function(e,t,n){"use strict";function r(e){window.BBjGridExWidget=window.BBjGridExWidget||{};var t=window.BBjGridExWidget[e]||null;if(!t){var n=JSON.stringify(Object.keys(window.BBjGridExWidget));throw new TypeError("\n\n[Grid Not Found] The method asked for non-existent grid instance.\n-------------------------------------------------------------------\nRequired Grid Id : ".concat(e," \nRegistered Grids : ").concat(n,"\n"))}return t}Object.defineProperty(t,"__esModule",{value:!0}),t.gw_getDocument=function(){return"undefined"!=typeof $doc?$doc:document},t.gw_getWindow=function(){return"undefined"!=typeof $wnd?$wnd:window},t.gw_escape=function(e){return null!=e?e:""},t.gw_uuid=function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)}))},t.gw_getGrid=r,t.gw_addGrid=function(e,t){return window.BBjGridExWidget=window.BBjGridExWidget||{},window.BBjGridExWidget[e]=t,r(e)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_debounce=function(e,t,n){var r;return function(){var o=this,i=arguments,a=function(){r=null,n||e.apply(o,i)},u=n&&!r;clearTimeout(r),r=setTimeout(a,t),u&&e.apply(o,i)}},t.gw_sendEvent=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],o=e.interests||[];if(o.includes(n)){var i=(0,r.gw_getDocument)().getElementById("".concat(e.id));window.basisDispatchCustomEvent(i,t)}},t.gw_parseNode=o,t.gw_parseNodeFromEvent=function(e){return o(e.node,e.context)};var r=n(0);function o(e,t){if(!0===e.group)return!1;var n=e.rowPinned?"__ROW_INDEX":t.getRowNodeId;return{i:t.hasOwnProperty("getRowNodeId")&&e.data[n]?e.data[n]:e.id,x:e.rowIndex,p:e.hasOwnProperty("parent")&&e.parent.hasOwnProperty("key")?e.parent.key:"",c:e.rowPinned?-1:e.childIndex,s:Boolean(e.selected),cr:t.hasOwnProperty("includeClientRowData")&&!0===t.includeClientRowData?e.data:null,pp:e.rowPinned}}},function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var o;o=function(){return this}();try{o=o||new Function("return this")()}catch(e){"object"===("undefined"==typeof window?"undefined":r(window))&&(o=window)}e.exports=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(9)),o=a(n(67)),i=a(n(68));function a(e){return e&&e.__esModule?e:{default:e}}var u=r.default?r.default.toStringTag:void 0;var c=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":u&&u in Object(e)?(0,o.default)(e):(0,i.default)(e)};t.default=c},function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=function(e){return null!=e&&"object"==r(e)};t.default=o},function(e,t,n){"use strict";e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}e.exports={deepParseJson:function e(t){if("string"!=typeof t)return Array.isArray(t)?t.map((function(t){return e(t)})):"object"===r(t)&&null!==t?Object.keys(t).reduce((function(n,r){return n[r]=e(t[r]),n}),{}):t;try{return e(JSON.parse(t))}catch(e){return t}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.GW_EVENT_KEYPRESS=t.GW_EVENT_RANGE_SELECTION_CHANGED=t.GW_EVENT_GRID_STATE_CHANGE=t.GW_EVENT_ROW_VALUE_CHANGED=t.GW_EVENT_ROW_EDITING_STOPPED=t.GW_EVENT_ROW_EDITING_STARTED=t.GW_EVENT_CELL_VALUE_CHANGED=t.GW_EVENT_CELL_EDITING_STOPPED=t.GW_EVENT_CELL_EDITING_STARTED=t.GW_EVENT_CELL_DOUBLE_CLICK=t.GW_EVENT_CELL_CLICK=t.GW_EVENT_ROW_DOUBLE_CLICK=t.GW_EVENT_ROW_CLICK=t.GW_EVENT_ROW_SELECT=void 0;t.GW_EVENT_ROW_SELECT=69;t.GW_EVENT_ROW_CLICK=5011;t.GW_EVENT_ROW_DOUBLE_CLICK=52;t.GW_EVENT_CELL_CLICK=5001;t.GW_EVENT_CELL_DOUBLE_CLICK=5002;t.GW_EVENT_CELL_EDITING_STARTED=5003;t.GW_EVENT_CELL_EDITING_STOPPED=5004;t.GW_EVENT_CELL_VALUE_CHANGED=5005;t.GW_EVENT_ROW_EDITING_STARTED=5006;t.GW_EVENT_ROW_EDITING_STOPPED=5007;t.GW_EVENT_ROW_VALUE_CHANGED=5012;t.GW_EVENT_GRID_STATE_CHANGE=5008;t.GW_EVENT_RANGE_SELECTION_CHANGED=5009;t.GW_EVENT_KEYPRESS=5010},function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=function(e){var t=r(e);return null!=e&&("object"==t||"function"==t)};t.default=o},function(e,t,n){"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=((r=n(10))&&r.__esModule?r:{default:r}).default.Symbol;t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(23))&&r.__esModule?r:{default:r};function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var a="object"==("undefined"==typeof self?"undefined":i(self))&&self&&self.Object===Object&&self,u=o.default||a||Function("return this")();t.default=u},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e,t){return e===t||e!=e&&t!=t};t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(22)),o=i(n(28));function i(e){return e&&e.__esModule?e:{default:e}}var a=function(e){return null!=e&&(0,o.default)(e.length)&&!(0,r.default)(e)};t.default=a},function(e,t,n){"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=((r=n(45))&&r.__esModule?r:{default:r}).default;t.default=o},function(e,t,n){"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=((r=n(46))&&r.__esModule?r:{default:r}).default;t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_extendColumnDefinitions=u,t.gw_setColumnDefinitions=function(e,t){var n=(0,r.gw_getGrid)(e),o=i(JSON.stringify(t));u(o),n.options.api.setColumnDefs(o),n.options.columnDefs=o},t.gw_sizeColumnsToFit=function(e,t){var n=(0,r.gw_getGrid)(e).options,o=n.api,i=n.columnApi;t?i.sizeColumnsToFit(Number(t)):o.sizeColumnsToFit()},t.gw_autoSizeColumns=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,o=(0,r.gw_getGrid)(e).options,i=o.columnApi;if(n&&n.length)i.autoSizeColumns(n,Boolean(t));else{var a=[];i.getAllColumns().forEach((function(e){a.push(e.colId)})),i.autoSizeColumns(a,Boolean(t))}},t.gw_ensureColumnVisible=function(e,t){(0,r.gw_getGrid)(e).options.api.ensureColumnVisible(t)},t.gw_setColumnWidth=function(e,t,n){(0,r.gw_getGrid)(e).options.columnApi.setColumnWidth(t,Number(n))},t.gw_pinColumn=function(e,t,n){(0,r.gw_getGrid)(e).options.columnApi.setColumnPinned(t,n)},t.gw_moveColumn=function(e,t,n){(0,r.gw_getGrid)(e).options.columnApi.moveColumn(t,n)},t.gw_isShowSelectionCheckbox=c,t.gw_isHeaderCheckboxSelection=l,t.gw_addRowGroupColumn=function(e,t,n){(0,r.gw_getGrid)(e).options.columnApi[n?"setRowGroupColumns":"addRowGroupColumns"](t.split(",").map((function(e){return e.trim()})))},t.gw_removeRowGroupColumn=function(e,t){(0,r.gw_getGrid)(e).options.columnApi.removeRowGroupColumns(t.split(",").map((function(e){return e.trim()})))},t.gw_getPivotMode=function(e){return(0,r.gw_getGrid)(e).options.columnApi.isPivotMode()},t.gw_setPivotMode=function(e,t){(0,r.gw_getGrid)(e).options.columnApi.setPivotMode(!!Number(t))},t.gw_addPivotColumns=function(e,t,n){(0,r.gw_getGrid)(e).options.columnApi[n?"setPivotColumns":"addPivotColumns"](t.split(",").map((function(e){return e.trim()})))},t.gw_removePivotColumns=function(e,t){(0,r.gw_getGrid)(e).options.columnApi.removePivotColumns(t.split(",").map((function(e){return e.trim()})))},t.gw_addValueColumns=function(e,t){(0,r.gw_getGrid)(e).options.columnApi.addValueColumns(t.split(",").map((function(e){return e.trim()})))},t.gw_removeValueColumns=function(e,t){(0,r.gw_getGrid)(e).options.columnApi.removeValueColumns(t.split(",").map((function(e){return e.trim()})))},t.gw_setSortModel=function(e,t){var n=JSON.parse(t),o=[];n.forEach((function(e){for(var t in e)o.push({colId:t,sort:e[t]})})),(0,r.gw_getGrid)(e).options.api.setSortModel(o)},t.gw_refreshHeader=function(e){(0,r.gw_getGrid)(e).options.api.redrawRows()};var r=n(0),o=n(16),i=n(6).deepParseJson;function a(e){var t=e.tooltipValueGetter;t&&(e.tooltipValueGetter=function(e){return(0,o.gw_executeExpression)(t,e)}),e.tooltipComponent="HTMLTooltip",e.hasOwnProperty("children")&&e.children.forEach((function(e){return a(e)}))}function u(e){for(var t in e){var n=e[t];n.checkboxSelection=n.checkboxSelection||c,n.headerCheckboxSelection=n.headerCheckboxSelection||l,a(n),n.hasOwnProperty("editable")&&"string"==typeof n.editable&&function(){var e=n.editable;n.editable=function(t){return(0,o.gw_executeExpression)(e,t)}}()}}function c(e){return!!e.context.showSelectionCheckbox&&e.columnApi.getAllGridColumns()[0].colDef.field===e.colDef.field}function l(e){return!!e.api.gridOptionsWrapper.gridOptions.context.showHeaderSelectionCheckbox&&e.columnApi.getAllGridColumns()[0].colDef.field===e.colDef.field}},function(e,t,n){"use strict";function r(e){if(void 0===r.expressionCache&&(r.expressionCache=[]),r.expressionCache[e])return r.expressionCache[e];var t=null;t=e.indexOf("return")>=0?e:"return "+e+";";var n=new Function("x, ctx, oldValue, newValue, value, node, data, colDef, rowIndex, api, columnApi, getValue, column, columnGroup",t);return r.expressionCache[e]=n,n}Object.defineProperty(t,"__esModule",{value:!0}),t.gw_compileExpression=r,t.gw_executeExpression=function(e,t){try{return r(e)(t.value,t.context,t.oldValue,t.newValue,t.value,t.node,t.data,t.colDef,t.rowIndex,t.api,t.columnApi,t.getValue,t.column,t.columnGroup)}catch(n){return console.log("Processing of the expression failed"),console.log("Expression = "+e),console.log("Params =",t),console.log("Exception = "+n),null}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_setQuickFilter=function(e,t){(0,r.gw_getGrid)(e).options.api.setQuickFilter(t)},t.gw_expandAll=function(e){(0,r.gw_getGrid)(e).options.api.expandAll()},t.gw_collapseAll=function(e){(0,r.gw_getGrid)(e).options.api.collapseAll()},t.gw_ensureIndexVisible=function(e,t,n){var o=(0,r.gw_getGrid)(e).options.api,i=o.getRowNode(t);i?o.ensureNodeVisible(i,n):o.ensureIndexVisible(Number(t),n)},t.gw_navigateToNextRow=function(e,t){var n=(0,r.gw_getGrid)(e).options,o=t.previousCellPosition,i=t.nextCellPosition;switch(t.key){case 40:if(i&&!i.rowPinned)if(o.rowPinned){var a=n.api.getDisplayedRowAtIndex(n.api.getFirstDisplayedRow());a&&a.setSelected(!0)}else n.api.forEachNode((function(e){o.rowIndex+1===e.rowIndex&&e.setSelected(!0)}));return i;case 38:if(i&&!i.rowPinned)if(o.rowPinned){var u=n.api.getDisplayedRowAtIndex(n.api.getLastDisplayedRow());u&&u.setSelected(!0)}else n.api.forEachNode((function(e){o.rowIndex-1===e.rowIndex&&e.setSelected(!0)}));return i;case 37:case 39:return i;default:throw new Error("You have super strange keyboard")}},t.gw_getRowNodeId=function(e,t){return t[(0,r.gw_getGrid)(e).options.context.getRowNodeId]},t.gw_setRowData=function(e,t){var n=(0,r.gw_getGrid)(e).options;n.api.setRowData(t),n.rowData=t},t.gw_updateRowData=function(e,t,n){var o=(0,r.gw_getGrid)(e).options;if(t.remove.length){var i=[];t.remove.forEach((function(e){i.push(o.api.getRowNode(e).data)})),t.remove=i}n?o.api.batchUpdateRowData(t):o.api.updateRowData(t)},t.gw_setRowsHeight=function(e,t){var n=(0,r.gw_getGrid)(e).options.api;n.forEachNode((function(e){e.setRowHeight(t)})),n.onRowHeightChanged()},t.gw_setRowHeight=function(e,t,n){var o=(0,r.gw_getGrid)(e).options,i=o.api,a=i.getRowNode(t)||i.getDisplayedRowAtIndex(t);a?(a.setRowHeight(n),o.api.onRowHeightChanged()):console.warn("Failed to set height for row ".concat(t,". Row cannot be found"))},t.gw_resetRowHeights=function(e){(0,r.gw_getGrid)(e).options.api.resetRowHeights()},t.gw_setSelectedRows=function(e,t){var n=(0,r.gw_getGrid)(e).options.api;n.forEachNodeAfterFilterAndSort((function(e){(t.indexOf(String(e.rowIndex))>-1||t.indexOf(String(e.id))>-1)&&(e.setSelected(!0),e.expanded=!0)})),n.onGroupExpandedOrCollapsed()},t.gw_selectAll=function(e,t){var n=(0,r.gw_getGrid)(e).options;1===t?n.api.selectAllFiltered():n.api.selectAll()},t.gw_deselectAll=function(e,t){var n=(0,r.gw_getGrid)(e).options;1===t?n.api.deselectAllFiltered():n.api.deselectAll()},t.gw_getSelectedRows=a,t.gw_getSelectedRow=function(e){var t=JSON.parse(a(e));if(t.length)return JSON.stringify(t[t.length-1]);return""},t.gw_getRow=function(e,t){var n=(0,r.gw_getGrid)(e).options;return JSON.stringify((0,o.gw_parseNode)(n.api.getRowNode(t),n.context))},t.gw_getRows=function(e,t,n){var a=(0,r.gw_getGrid)(e).options,u=[];return a.api[t]((function(e){e.group||(n?(0,i.gw_executeExpression)(n,{value:e.data,context:a.context,oldValue:null,newValue:null,node:e,data:e.data,colDef:null,rowIndex:e.rowIndex,api:e.gridApi,columnApi:e.columnApi,getValue:function(){return e.data},column:null,columnGroup:e.hasOwnProperty("parent")&&e.parent.hasOwnProperty("key")?e.parent.key:""})&&u.push((0,o.gw_parseNode)(e,a.context)):u.push((0,o.gw_parseNode)(e,a.context)))})),JSON.stringify(u)},t.gw_redrawRows=function(e){(0,r.gw_getGrid)(e).options.api.redrawRows()},t.gw_setPinnedTopRowData=function(e,t){(0,r.gw_getGrid)(e).options.api.setPinnedTopRowData(t)},t.gw_setPinnedBottomRowData=function(e,t){(0,r.gw_getGrid)(e).options.api.setPinnedBottomRowData(t)};var r=n(0),o=n(1),i=n(16);function a(e){var t=(0,r.gw_getGrid)(e).options,n=t.api.getSelectedNodes(),i=[];return n.forEach((function(e){i.push((0,o.gw_parseNode)(e,t.context))})),JSON.stringify(i)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_getChartToolbarItems=function(e){return e.api.gridOptionsWrapper.gridOptions.context.chartToolbarItems||[]},t.gw_addChartRange=function(e,t){var n=(0,r.gw_getGrid)(e),a=n.options,u=i(JSON.stringify(t));u.cellRange=(0,o.gw_parseAddCellRange)(a,u.cellRange);var c=a.api.createRangeChart(u),l=(0,r.gw_uuid)();return n.created_charts=n.created_charts||{},n.created_charts[l]=c,l},t.gw_destroyChart=function(e,t){var n=(0,r.gw_getGrid)(e);if(t)n.hasOwnProperty("created_charts")&&n.created_charts.hasOwnProperty(t)&&n.created_charts[t].destroyChart();else if(n.hasOwnProperty("created_charts"))for(var o in n.created_charts){if(n.created_charts.hasOwnProperty(o))n.created_charts[o].destroyChart()}};var r=n(0),o=n(19),i=n(6).deepParseJson},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_startEditingCell=function(e,t,n,o,i,a){var u=(0,r.gw_getGrid)(e).options,c=u.api,l=c.getRowNode(t)||c.getDisplayedRowAtIndex(t);u.api.startEditingCell({rowIndex:l.rowIndex,keyPress:Number(o),colKey:n,charPress:i,rowPinned:a})},t.gw_stopEditing=function(e,t){(0,r.gw_getGrid)(e).options.api.stopEditing(t)},t.gw_tabToNextCell=function(e){(0,r.gw_getGrid)(e).options.api.tabToNextCell()},t.gw_tabToPreviousCell=function(e){(0,r.gw_getGrid)(e).options.api.tabToPreviousCell()},t.gw_setFocusedCell=function(e,t,n){var o,i,a,u=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,c=(0,r.gw_getGrid)(e).options;if(c.api.getEditingCells().length>0)return;if(-1==t){var l=c.api.getFocusedCell();l?(o=l.rowIndex,i=l.column.colId,a=l.rowPinned):(o=0,i=c.columnApi.getAllGridColumns()[0].colId,a=u)}else o=t?Number.isInteger(+t)?+t:c.api.getRowNode(t).rowIndex:0,i=n||c.columnApi.getAllGridColumns()[0].colId,a=u;(0,r.gw_getGrid)(e).options.api.setFocusedCell(o,i,a)},t.gw_getRangeSelections=function(e){var t=(0,r.gw_getGrid)(e).options,n=t.context,i=t.api,a=i.getCellRanges(),u=i.getModel(),c=[];return a.forEach((function(e){for(var t=e.columns.reduce((function(e,t){return"ag-Grid-AutoColumn"!==t.colId&&e.push(t.colId),e}),[]).filter(Boolean),r=Math.min(e.startRow.rowIndex,e.endRow.rowIndex),i=Math.max(e.startRow.rowIndex,e.endRow.rowIndex),a=[],l=r;l<=i;l++){var s=u.getRow(l);if(s){var d=(0,o.gw_parseNode)(s,n);d&&a.push(d)}}a.length&&t.length&&c.push({r:a,c:t})})),JSON.stringify(c)},t.gw_parseAddCellRange=a,t.gw_addCellRange=function(e,t){var n=(0,r.gw_getGrid)(e).options;n.api.addCellRange(a(n,t))},t.gw_clearRangeSelection=function(e){(0,r.gw_getGrid)(e).options.api.clearRangeSelection()};var r=n(0),o=n(1),i=n(6).deepParseJson;function a(e,t){var n=i(JSON.stringify(t)),r=n.start?Number.isInteger(+n.start)?+n.start:e.api.getRowNode(n.start).rowIndex:0,o=n.end?Number.isInteger(+n.end)?+n.end:e.api.getRowNode(n.end).rowIndex:e.rowData.length-1;return{rowStartIndex:Math.abs(r),rowEndIndex:Math.abs(o),columns:n.columns}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(21))&&r.__esModule?r:{default:r};var i=function(e,t,n){"__proto__"==t&&o.default?(0,o.default)(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n};t.default=i},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(65))&&r.__esModule?r:{default:r};var i=function(){try{var e=(0,o.default)(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();t.default=i},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(3)),o=i(n(8));function i(e){return e&&e.__esModule?e:{default:e}}var a=function(e){if(!(0,o.default)(e))return!1;var t=(0,r.default)(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t};t.default=a},function(e,t,n){"use strict";(function(e){function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r="object"==(void 0===e?"undefined":n(e))&&e&&e.Object===Object&&e;t.default=r}).call(this,n(2))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(25)),o=a(n(74)),i=a(n(75));function a(e){return e&&e.__esModule?e:{default:e}}var u=function(e,t){return(0,i.default)((0,o.default)(e,t,r.default),e+"")};t.default=u},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return e};t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)};t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=u(n(11)),o=u(n(12)),i=u(n(29)),a=u(n(8));function u(e){return e&&e.__esModule?e:{default:e}}function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var l=function(e,t,n){if(!(0,a.default)(n))return!1;var u=c(t);return!!("number"==u?(0,o.default)(n)&&(0,i.default)(t,n.length):"string"==u&&t in n)&&(0,r.default)(n[t],e)};t.default=l},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991};t.default=r},function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=/^(?:0|[1-9]\d*)$/;var i=function(e,t){var n=r(e);return!!(t=null==t?9007199254740991:t)&&("number"==n||"symbol"!=n&&o.test(e))&&e>-1&&e%1==0&&e/g;t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(104))&&r.__esModule?r:{default:r};var i=function(e){return null==e?"":(0,o.default)(e)};t.default=i},function(e,t,n){var r,o,i={},a=(r=function(){return window&&document&&document.all&&!window.atob},function(){return void 0===o&&(o=r.apply(this,arguments)),o}),u=function(e){return document.querySelector(e)},c=function(e){var t={};return function(e){if("function"==typeof e)return e();if(void 0===t[e]){var n=u.call(this,e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}}(),l=null,s=0,d=[],f=n(119);function p(e,t){for(var n=0;n=0&&d.splice(t,1)}function y(e){var t=document.createElement("style");return e.attrs.type="text/css",m(t,e.attrs),g(e,t),t}function m(e,t){Object.keys(t).forEach((function(n){e.setAttribute(n,t[n])}))}function v(e,t){var n,r,o,i;if(t.transform&&e.css){if(!(i=t.transform(e.css)))return function(){};e.css=i}if(t.singleton){var a=s++;n=l||(l=y(t)),r=O.bind(null,n,a,!1),o=O.bind(null,n,a,!0)}else e.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(n=function(e){var t=document.createElement("link");return e.attrs.type="text/css",e.attrs.rel="stylesheet",m(t,e.attrs),g(e,t),t}(t),r=C.bind(null,n,t),o=function(){b(n),n.href&&URL.revokeObjectURL(n.href)}):(n=y(t),r=k.bind(null,n),o=function(){b(n)});return r(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;r(e=t)}else o()}}e.exports=function(e,t){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");(t=t||{}).attrs="object"==typeof t.attrs?t.attrs:{},t.singleton||"boolean"==typeof t.singleton||(t.singleton=a()),t.insertInto||(t.insertInto="head"),t.insertAt||(t.insertAt="bottom");var n=h(e,t);return p(n,t),function(e){for(var r=[],o=0;o59)}},function(e,t,n){var r=n(19);t.a=r.a},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n.d(t,"Utils",(function(){return u}));var r=n(1),o=n(2),i=n(4),a=n(20);n.d(t,"Types",(function(){return a.a})),n.d(t,"NumberMask",(function(){return r.a})),n.d(t,"DateMask",(function(){return o.c})),n.d(t,"StringMask",(function(){return i.a}));var u={Dates:{getDayOfYear:o.e,getWeekNumber:o.g,getWeekStartByLocale:o.h,IS_DATE_REGEX:o.a,IS_TIME_REGEX:o.b,fixShortISO:o.d,getTimezoneOrOffset:o.f}};t.default=a.a},function(e,t,n){function r(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:",",o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".",i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],u=n.length;if(0===u){if(a)return str;throw{name:"MaskError",message:"MaskError: Mask is empty"}}for(var c=0,l=0,s=!1,d=0;dc){if(a)return t.toString();throw{name:"MaskError",message:"MaskError: Number is too large for mask"}}if(y>l){p=e._round(p,l),g=(h=e._toCharArray(p)).length,b=0,y=0,s=!1;for(var v=0;vc){if(a)return t.toString();throw{name:"MaskError",message:"MaskError: Number is too large for mask"}}}var _=" ",w=" ",O=0,k=0,C=0;"*"==n.charAt(0)&&(_="*");var x=_,D=e._getSign(p)<0,E=g>0||n.indexOf("0")>=0,S=!1,j=!1;s=!1;for(var M=new Array(u),P=0;P0?M[k]=r:(M[k]=_,s||(C=P)),++k;break;case"-":j||" "!=w?M[k]=D?"-":_:(D&&(w="-"),M[k]=_,C=s?-1:P),++k;break;case"+":j||" "!=w?M[k]=D?"-":"+":(w=D?"-":"+",M[k]=_,C=s?-1:P),++k;break;case"$":j||" "!=w?M[k]="$":(w="$",M[k]=_,C=s?-1:P),++k;break;case"(":j||" "!=w?M[k]=D?"(":s?" ":_:(D&&(w="("),M[k]=_,C=s?-1:P),++k;break;case")":M[k]=D?")":s?" ":_,++k;break;case"C":P=u;)--C;M[C]==x&&(M[C]=w)}return M.join("")}},{key:"_shift",value:function(e,t,n){n&&(t=-t);var r=(""+e).split("e");return+(r[0]+"e"+(r[1]?+r[1]+t:t))}},{key:"_round",value:function(t,n){return e._shift(Math.round(e._shift(t,n,!1)),n,!0)}},{key:"_toCharArray",value:function(t){var n=e._getSign(t),r=[];if(0!==n){var o=n<0?"".concat(-1*t.toString()):t.toString();o.length>1&&"0"==o.charAt(0)&&(o=o.substring(1)),r=o.split("")}return r}},{key:"_getSign",value:function(e){return(e>0)-(e<0)||+e}}],(n=null)&&r(t.prototype,n),o&&r(t,o),e}();t.a=o},function(e,t,n){n.d(t,"b",(function(){return a})),n.d(t,"a",(function(){return u})),n.d(t,"h",(function(){return c})),n.d(t,"e",(function(){return l})),n.d(t,"d",(function(){return s})),n.d(t,"f",(function(){return d})),n.d(t,"g",(function(){return f}));var r=n(8),o=n(15);function i(e,t){for(var n=0;n12?"PM":"AM",pp:e.hours24>12?"pm":"am",p:e.hours24>12?"pm":"am",Jz:1==String(e.dayOfYear).length?"0"+e.dayOfYear:e.dayOfYear,Js:e.dayOfYear,Jl:e.dayOfYear,Jd:e.dayOfYear,J:e.dayOfYear,Wz:1==String(e.dayOfWeek).length?"0"+e.dayOfWeek:e.dayOfWeek,Ws:e.dayOfWeek,Wl:e.dayOfWeek,Wp:String.fromCharCode(e.dayOfWeek),Wd:e.dayOfWeek,W:e.dayOfWeek,wz:1==String(e.weekNumber).length?"0"+e.weekNumber:e.weekNumber,ws:e.weekNumber,wl:e.weekNumber,wp:String.fromCharCode(e.weekNumber),wd:e.weekNumber,w:e.weekNumber}}}],(n=null)&&i(t.prototype,n),o&&i(t,o),e}();t.c=p},function(e,t,n){t.a=function(e,t,n){var a=Object(i.a)(e,n),u=new Date(a.getUTCFullYear(),a.getUTCMonth(),a.getUTCDate(),a.getUTCHours(),a.getUTCMinutes(),a.getUTCSeconds(),a.getUTCMilliseconds()),c=Object(r.a)(t,a);return c?Object(o.a)(u,c):u};var r=n(3),o=n(10),i=n(13)},function(e,t,n){t.a=function(e,t){var n=function(e){if(!o[e]){var t=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:"America/New_York",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(new Date("2014-06-25T04:00:00.123Z")),n="06/25/2014, 00:00:00"===t||"‎06‎/‎25‎/‎2014‎ ‎00‎:‎00‎:‎00"===t;o[e]=n?new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:e,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):new Intl.DateTimeFormat("en-US",{hourCycle:"h23",timeZone:e,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})}return o[e]}(t);return n.formatToParts?function(e,t){for(var n=e.formatToParts(t),o=[],i=0;i=0&&(o[a]=parseInt(n[i].value,10))}return o}(n,e):function(e,t){var n=e.format(t).replace(/\u200E/g,""),r=/(\d+)\/(\d+)\/(\d+),? (\d+):(\d+):(\d+)/.exec(n);return[r[3],r[1],r[2],r[4],r[5],r[6]]}(n,e)};var r={year:0,month:1,day:2,hour:3,minute:4,second:5},o={}},function(e,t,n){t.a=function(e,t){if(arguments.length<2)throw new TypeError("2 arguments required, but only "+arguments.length+" present");var n=Object(r.a)(t);return Object(o.a)(e,-n)};var r=n(0),o=n(11)},function(e,t,n){t.a=function(e,t){if(arguments.length<2)throw new TypeError("2 arguments required, but only "+arguments.length+" present");var n=Object(o.a)(e).getTime(),i=Object(r.a)(t);return new Date(n+i)};var r=n(0),o=n(12)},function(e,t,n){t.a=function(e){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");var t=Object.prototype.toString.call(e);return e instanceof Date||"object"===a(e)&&"[object Date]"===t?new Date(e.getTime()):"number"==typeof e||"[object Number]"===t?new Date(e):("string"!=typeof e&&"[object String]"!==t||"undefined"==typeof console||(console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule"),console.warn((new Error).stack)),new Date(NaN))}},function(e,t,n){t.a=function(e,t){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");if(null===e)return new Date(NaN);var n=t||{},u=null==n.additionalDigits?2:Object(r.a)(n.additionalDigits);if(2!==u&&1!==u&&0!==u)throw new RangeError("additionalDigits must be 0, 1 or 2");if(e instanceof Date||"object"===a(e)&&"[object Date]"===Object.prototype.toString.call(e))return new Date(e.getTime());if("number"==typeof e||"[object Number]"===Object.prototype.toString.call(e))return new Date(e);if("string"!=typeof e&&"[object String]"!==Object.prototype.toString.call(e))return new Date(NaN);var f=c(e),p=l(f.date,u),h=p.year,g=p.restDateString,b=s(g,h);if(isNaN(b))return new Date(NaN);if(b){var y,m=b.getTime(),v=0;if(f.time&&(v=d(f.time),isNaN(v)))return new Date(NaN);if(f.timezone||n.timeZone){if(y=Object(i.a)(f.timezone||n.timeZone,new Date(m+v)),isNaN(y))return new Date(NaN)}else y=Object(o.a)(new Date(m+v)),y=Object(o.a)(new Date(m+v+y));return new Date(m+v+y)}return new Date(NaN)};var r=n(0),o=n(14),i=n(3),u={dateTimeDelimeter:/[T ]/,plainTime:/:/,timeZoneDelimeter:/[Z ]/i,YY:/^(\d{2})$/,YYY:[/^([+-]\d{2})$/,/^([+-]\d{3})$/,/^([+-]\d{4})$/],YYYY:/^(\d{4})/,YYYYY:[/^([+-]\d{4})/,/^([+-]\d{5})/,/^([+-]\d{6})/],MM:/^-(\d{2})$/,DDD:/^-?(\d{3})$/,MMDD:/^-?(\d{2})-?(\d{2})$/,Www:/^-?W(\d{2})$/,WwwD:/^-?W(\d{2})-?(\d{1})$/,HH:/^(\d{2}([.,]\d*)?)$/,HHMM:/^(\d{2}):?(\d{2}([.,]\d*)?)$/,HHMMSS:/^(\d{2}):?(\d{2}):?(\d{2}([.,]\d*)?)$/,timezone:/([Z+-].*| UTC|(?:[a-zA-Z]+\/[a-zA-Z_]+(?:\/[a-zA-Z_]+)?))$/};function c(e){var t,n={},r=e.split(u.dateTimeDelimeter);if(u.plainTime.test(r[0])?(n.date=null,t=r[0]):(n.date=r[0],t=r[1],n.timezone=r[2],u.timeZoneDelimeter.test(n.date)&&(n.date=e.split(u.timeZoneDelimeter)[0],t=e.substr(n.date.length,e.length))),t){var o=u.timezone.exec(t);o?(n.time=t.replace(o[1],""),n.timezone=o[1]):n.time=t}return n}function l(e,t){var n,r=u.YYY[t],o=u.YYYYY[t];if(n=u.YYYY.exec(e)||o.exec(e)){var i=n[1];return{year:parseInt(i,10),restDateString:e.slice(i.length)}}if(n=u.YY.exec(e)||r.exec(e)){var a=n[1];return{year:100*parseInt(a,10),restDateString:e.slice(a.length)}}return{year:null}}function s(e,t){if(null===t)return null;var n,r,o,i;if(0===e.length)return(r=new Date(0)).setUTCFullYear(t),r;if(n=u.MM.exec(e))return r=new Date(0),b(t,o=parseInt(n[1],10)-1)?(r.setUTCFullYear(t,o),r):new Date(NaN);if(n=u.DDD.exec(e)){r=new Date(0);var a=parseInt(n[1],10);return function(e,t){if(t<1)return!1;var n=g(e);return!(n&&t>366)&&!(!n&&t>365)}(t,a)?(r.setUTCFullYear(t,0,a),r):new Date(NaN)}if(n=u.MMDD.exec(e)){r=new Date(0),o=parseInt(n[1],10)-1;var c=parseInt(n[2],10);return b(t,o,c)?(r.setUTCFullYear(t,o,c),r):new Date(NaN)}if(n=u.Www.exec(e))return y(0,i=parseInt(n[1],10)-1)?f(t,i):new Date(NaN);if(n=u.WwwD.exec(e)){i=parseInt(n[1],10)-1;var l=parseInt(n[2],10)-1;return y(0,i,l)?f(t,i,l):new Date(NaN)}return null}function d(e){var t,n,r;if(t=u.HH.exec(e))return m(n=parseFloat(t[1].replace(",",".")))?n%24*36e5:NaN;if(t=u.HHMM.exec(e))return m(n=parseInt(t[1],10),r=parseFloat(t[2].replace(",",".")))?n%24*36e5+6e4*r:NaN;if(t=u.HHMMSS.exec(e)){n=parseInt(t[1],10),r=parseInt(t[2],10);var o=parseFloat(t[3].replace(",","."));return m(n,r,o)?n%24*36e5+6e4*r+1e3*o:NaN}return null}function f(e,t,n){t=t||0,n=n||0;var r=new Date(0);r.setUTCFullYear(e,0,4);var o=7*t+n+1-(r.getUTCDay()||7);return r.setUTCDate(r.getUTCDate()+o),r}var p=[31,28,31,30,31,30,31,31,30,31,30,31],h=[31,29,31,30,31,30,31,31,30,31,30,31];function g(e){return e%400==0||e%4==0&&e%100!=0}function b(e,t,n){if(t<0||t>11)return!1;if(null!=n){if(n<1)return!1;var r=g(e);if(r&&n>h[t])return!1;if(!r&&n>p[t])return!1}return!0}function y(e,t,n){return!(t<0||t>52||null!=n&&(n<0||n>6))}function m(e,t,n){return!(null!=e&&(e<0||e>=25)||null!=t&&(t<0||t>=60)||null!=n&&(n<0||n>=60))}},function(e,t,n){t.a=function(e){var t=new Date(e.getTime()),n=Math.ceil(t.getTimezoneOffset());t.setSeconds(0,0);var r=t.getTime()%6e4;return 6e4*n+r}},function(e,t,n){n.d(t,"a",(function(){return a}));var r=n(16),o=n(17),i=n(18);function a(e){return Object(r.a)(e,o.a,i.a)}},function(e,t,n){function r(e,t){var n=t["string"==typeof e?e.toUpperCase():e];return"number"==typeof n?n:1}function o(e,t,n){if(e){var o,i=e.toLowerCase().split(/[-_]/),a=i[0];if(i[1]&&4===i[1].length?(a+="_"+i[1],o=i[2]):o=i[1],o||(o=t[a]),o)return r(o.match(/^\d+$/)?Number(o):o,n)}return 1}n.d(t,"b",(function(){return r})),n.d(t,"a",(function(){return o}))},function(e,t,n){t.a={en:"US",zh:"CN",zh_hans:"CN",hans:"CN",wuu:"CN",hsn:"CN",hak:"CN",nan:"CN",gan:"CN",hi:"IN",te:"IN",mr:"IN",ta:"IN",gu:"IN",kn:"IN",or:"IN",ml:"IN",pa_guru:"IN",bho:"IN",awa:"IN",as:"IN",mwr:"IN",mai:"IN",mag:"IN",bgc:"IN",hne:"IN",dcc:"IN",dz:"BT",tn:"BW",am:"ET",om:"ET",quc:"GT",id:"ID",jv:"ID",su:"ID",mad:"ID",ms_arab:"ID",ga:"IE",he:"IL",jam:"JM",ja:"JP",km:"KH",ko:"KR",lo:"LA",mh:"MH",my:"MM",mt:"MT",ne:"NP",fil:"PH",ceb:"PH",ilo:"PH",ur:"PK",pa:"PK",pa_arab:"PK",arab:"PK",lah:"PK",ps:"PK",sd:"PK",sd_arab:"PK",skr:"PK",gn:"PY",th:"TH",tts:"TH",aeb:"TN",zh_hant:"TW",hant:"TW",sm:"WS",zu:"ZA",sn:"ZW",arq:"DZ",ar:"EG",arz:"EG",fa:"IR",az_arab:"IR",ary:"MA",bn:"BD",rkt:"BD",dv:"MV"}},function(e,t,n){t.a={AG:0,ATG:0,28:0,AR:0,ARG:0,32:0,AS:0,ASM:0,16:0,AU:0,AUS:0,36:0,BR:0,BRA:0,76:0,BS:0,BHS:0,44:0,BT:0,BTN:0,64:0,BW:0,BWA:0,72:0,BZ:0,BLZ:0,84:0,CA:0,CAN:0,124:0,CN:0,CHN:0,156:0,CO:0,COL:0,170:0,DM:0,DMA:0,212:0,DO:0,DOM:0,214:0,ET:0,ETH:0,231:0,GT:0,GTM:0,320:0,GU:0,GUM:0,316:0,HK:0,HKG:0,344:0,HN:0,HND:0,340:0,ID:0,IDN:0,360:0,IE:0,IRL:0,372:0,IL:0,ISR:0,376:0,IN:0,IND:0,356:0,JM:0,JAM:0,388:0,JP:0,JPN:0,392:0,KE:0,KEN:0,404:0,KH:0,KHM:0,116:0,KR:0,KOR:0,410:0,LA:0,LA0:0,418:0,MH:0,MHL:0,584:0,MM:0,MMR:0,104:0,MO:0,MAC:0,446:0,MT:0,MLT:0,470:0,MX:0,MEX:0,484:0,MZ:0,MOZ:0,508:0,NI:0,NIC:0,558:0,NP:0,NPL:0,524:0,NZ:0,NZL:0,554:0,PA:0,PAN:0,591:0,PE:0,PER:0,604:0,PH:0,PHL:0,608:0,PK:0,PAK:0,586:0,PR:0,PRI:0,630:0,PY:0,PRY:0,600:0,SA:0,SAU:0,682:0,SG:0,SGP:0,702:0,SV:0,SLV:0,222:0,TH:0,THA:0,764:0,TN:0,TUN:0,788:0,TT:0,TTO:0,780:0,TW:0,TWN:0,158:0,UM:0,UMI:0,581:0,US:0,USA:0,840:0,VE:0,VEN:0,862:0,VI:0,VIR:0,850:0,WS:0,WSM:0,882:0,YE:0,YEM:0,887:0,ZA:0,ZAF:0,710:0,ZW:0,ZWE:0,716:0,AE:6,ARE:6,784:6,AF:6,AFG:6,4:6,BH:6,BHR:6,48:6,DJ:6,DJI:6,262:6,DZ:6,DZA:6,12:6,EG:6,EGY:6,818:6,IQ:6,IRQ:6,368:6,IR:6,IRN:6,364:6,JO:6,JOR:6,400:6,KW:6,KWT:6,414:6,LY:6,LBY:6,434:6,MA:6,MAR:6,504:6,OM:6,OMN:6,512:6,QA:6,QAT:6,634:6,SD:6,SDN:6,729:6,SY:6,SYR:6,760:6,BD:5,BGD:5,50:5,MV:5,MDV:5,462:5}},function(e,t,n){function r(e,t){for(var n=0;n2&&void 0!==arguments[2])||arguments[2];e=String(e);var r=(t=String(t)).length,l=e.length;if(l>r){if(n)return e;throw{name:"MaskIsTooShortError",message:"MaskIsTooShortError: Mask is shorter than the passed string"}}for(var s=new Array(r),d=0,f="",p=0;p?@[]^_`{|}~".indexOf(v)>-1?s[p]=v:c(n,s,p,e)}else s[p]=" ";++d;break;default:s[p]=f}if(d2&&void 0!==arguments[2]?arguments[2]:",",o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".",i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];return r.a.mask(e,t,n,o,i,a)}},{key:"date",value:function(e,t,n,r){return o.c.mask(e,t,n,r)}},{key:"string",value:function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return i.a.mask(e,t,n)}}],(n=null)&&a(t.prototype,n),u&&a(t,u),e}();t.a=u}])},"object"===a(t)&&"object"===a(e)?e.exports=i():(r=[],void 0===(o="function"==typeof(n=i)?n.apply(t,r):n)||(e.exports=o))}).call(this,n(5)(e))},function(e,t,n){(function(t){t.Basis||(t.Basis={}),e.exports=t.Basis.InputMasking=n(44)}).call(this,n(2))},function(module,exports,__webpack_require__){"use strict";(function(module){var __WEBPACK_AMD_DEFINE_FACTORY__,__WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__,factory;function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}"undefined"!=typeof self&&self,factory=function(__WEBPACK_EXTERNAL_MODULE_0__,__WEBPACK_EXTERNAL_MODULE_7__){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e,t){e.exports=__WEBPACK_EXTERNAL_MODULE_0__},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),o=n(5);n.d(t,"TextInput",(function(){return r.a})),n.d(t,"NumberInput",(function(){return o.a}))},function(e,t,n){var r=n(3);t.a=r.a},function(e,t,n){var r=n(0),o=n.n(r),i=n(4);function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function u(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{};l(this,e),this.options=u({},{elements:".bbj-text-masked",doc:document,cssClassError:"bbj-mask-error",cssClassSuccess:"bbj-mask-success",onUpdate:null,onInvalid:null},{},t),this._onKeystroke=this._onKeystroke.bind(this),this._onFocus=this._onFocus.bind(this),this.refresh()}var t,n,r;return t=e,(n=[{key:"refresh",value:function(){for(var e,t,n="string"==typeof this.options.elements?this.options.doc.querySelectorAll(this.options.elements):this.options.elements,r=0;r-1;this._wrap(e,o)}else console.warn("BBjMasking: Invalid input element. The element will be ignored",e)}},{key:"destroy",value:function(){for(var e,t,n="string"==typeof this.options.elements?this.options.doc.querySelectorAll(this.options.elements):this.options.elements,r=0;r-1&&this._unwrap(e)}},{key:"_wrap",value:function(e,t){var n=e.getAttribute("id"),r=e.getAttribute("name"),o=e.dataset.mask||"",a=e.pattern,u=Object(i.b)(o),c=a||u,l=null,s=null;return t?s=(l=e.parentNode).querySelector(".textInputMask__unmaskedInput"):(l=this.options.doc.createElement("span"),s=this.options.doc.createElement("input")),e.value=Object(i.c)(e.value,o),e.pattern=c,e.classList.add("textInputMask__textInput"),e.dataset.mask=o,e.dataset.valueUnmasked=Object(i.d)(e.value,o),a&&a!==u&&(e.dataset.isCustomPattern=!0),t||(e.hasAttribute("readonly")||e.hasAttribute("disable")||(e.addEventListener("keyup",this._onKeystroke),e.addEventListener("keypress",this._onKeystroke),e.addEventListener("paste",this._onKeystroke),e.addEventListener("focusin",this._onFocus),e.addEventListener("click",this._onFocus)),e.parentNode.insertBefore(l,e)),this._validateInput(e)&&this.__fireOnUpdate(e.value,e.dataset.valueUnmasked,e),s.setAttribute("aria-hidden","true"),s.setAttribute("type","hidden"),s.classList.add("textInputMask__unmaskedInput"),s.value=e.dataset.valueUnmasked,n&&s.setAttribute("id","".concat(n,"-unmasked")),r&&s.setAttribute("name","".concat(r,"-unmasked")),t||(l.setAttribute("class","textInputMask__wrap"),l.appendChild(s),l.appendChild(e)),l}},{key:"_unwrap",value:function(e){e.removeChild(e.querySelector(".textInputMask__unmaskedInput"));var t=e.querySelector(".textInputMask__textInput");t.removeEventListener("keyup",this._onKeystroke),t.removeEventListener("keypress",this._onKeystroke),t.removeEventListener("paste",this._onKeystroke),t.removeEventListener("focusin",this._onFocus),t.removeEventListener("click",this._onFocus),delete t.dataset.valueUnmasked,t.dataset.isCustomPattern||(t.removeAttribute("pattern"),delete t.dataset.isCustomPattern),t.classList.remove(this.options.cssClassError),e.parentNode.insertBefore(t,e),e.parentNode.removeChild(e)}},{key:"_onKeystroke",value:function(e){if(!(e.ctrlKey||e.shiftKey||e.altKey||e.metaKey)){13!==e.keyCode&&e.preventDefault();var t=e.target,n=t.dataset.mask||this.options.mask,r=e.type;t.classList.remove(this.options.cssClassError),t.classList.remove(this.options.cssClassSuccess),t.setCustomValidity("");var a,u,c=t.value,l=e.keyCode,s=e.key||e.code.replace(/[^0-9]/g,""),d=s?s.length>1?"":s:"",f=Object(i.a)(c,n),p=!1;switch(r){case"paste":a=Object(i.c)((e.clipboardData||window.clipboardData).getData("Text"),n);break;case"keyup":a=c;break;case"keypress":var h=t.selectionStart;h!==f&&(f=h),a=c.substr(0,f)+d+c.substr(f)}if(u=Object(i.d)(a,n),-1===[35,36,37,38,39,40].indexOf(l)){try{t.value=o.a.mask(u,n,!1),this._validateInput(t)&&(t.dataset.valueUnmasked=u,this.options.doc.querySelector("#".concat(t.getAttribute("id"),"-unmasked")).value=u,this.__applyCssClassState(t,"success"),this.__fireOnUpdate(t.value,t.dataset.valueUnmasked,t)),p=!1}catch(e){this.__applyCssClassState(t,"error"),this.__fireOnInvalid(e,t),p=!0}this._updateCaretPosition(t,n)}p||this._validateInput(t)}}},{key:"_onFocus",value:function(e){var t=e.target,n=t.dataset.mask||this.options.mask;this._updateCaretPosition(t,n)}},{key:"_updateCaretPosition",value:function(e,t){setTimeout((function(){var n=Object(i.a)(e.value,t);e.setSelectionRange(n,n)}),0)}},{key:"_validateInput",value:function(e){var t=e.checkValidity();return t?(this.__applyCssClassState(e,"success"),e.setCustomValidity("")):(this.__applyCssClassState(e,"error"),this.__fireOnInvalid(e.validationMessage,e)),t}},{key:"__fireOnUpdate",value:function(e,t,n){this.options.onUpdate&&this.options.onUpdate(e,t,n)}},{key:"__fireOnInvalid",value:function(e,t){this.options.onInvalid&&this.options.onInvalid(e,t)}},{key:"__applyCssClassState",value:function(e,t){e.hasAttribute("readonly")||e.hasAttribute("disabled")?(e.classList.remove(this.options.cssClassError),e.classList.remove(this.options.cssClassSuccess)):("success"===t&&(e.classList.remove(this.options.cssClassError),e.classList.add(this.options.cssClassSuccess)),"error"===t&&(e.classList.add(this.options.cssClassError),e.classList.remove(this.options.cssClassSuccess)))}}])&&s(t.prototype,n),r&&s(t,r),e}();t.a=d},function(module,__webpack_exports__,__webpack_require__){__webpack_require__.d(__webpack_exports__,"c",(function(){return maskIfNotMasked})),__webpack_require__.d(__webpack_exports__,"d",(function(){return unmask})),__webpack_require__.d(__webpack_exports__,"a",(function(){return findCaretPosition})),__webpack_require__.d(__webpack_exports__,"b",(function(){return generatePatternFromMask}));var __WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask__=__webpack_require__(0),__WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask___default=__webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask__),SUPPORTED_MASKS=["X","a","A","0","z","Z","U"],IS_UNICODE_PROPERTY_SUPPORTED=!1;try{eval("/\\p{L}/u"),IS_UNICODE_PROPERTY_SUPPORTED=!0}catch(e){IS_UNICODE_PROPERTY_SUPPORTED=!1}var isMaskedValue=function e(t,n){void 0===e.__CACHE__&&(e.__CACHE__={});var r="".concat(t,"-").concat(n);if(!e.__CACHE__[r]){var o=unmask(t,n);e.__CACHE__[r]=t===__WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask___default.a.mask(o,n)}return e.__CACHE__[r]},maskIfNotMasked=function e(t,n){void 0===e.__CACHE__&&(e.__CACHE__={});var r="".concat(t,"-").concat(n);if(!e.__CACHE__[r])if(isMaskedValue(t,n))e.__CACHE__[r]=t;else try{e.__CACHE__[r]=__WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask___default.a.mask(t,n,!1)}catch(t){e.__CACHE__[r]=__WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask___default.a.mask("",n)}return e.__CACHE__[r]},generatePatternFromMask=function e(t){void 0===e.__CACHE__&&(e.__CACHE__={});var n=t;if(!e.__CACHE__[n]){var r=t.split(""),o="";r.forEach((function(e){switch(e){case"X":o+="([^ -~])";break;case"a":case"A":o+=IS_UNICODE_PROPERTY_SUPPORTED?"\\p{L}":"((?:[A-Za-zªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙՠ-ֈא-תׯ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࡠ-ࡪࢠ-ࢴࢶ-ࢽऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱৼਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄຆ-ຊຌ-ຣລວ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛱ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡸᢀ-ᢄᢇ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-ᲈᲐ-ᲺᲽ-Ჿᳩ-ᳬᳮ-ᳳᳵᳶᳺᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎↃↄⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々〆〱-〵〻〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿯ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛥꜗ-ꜟꜢ-ꞈꞋ-ꞿꟂ-Ᶎꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꣾꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭧꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf2d-\udf40\udf42-\udf49\udf50-\udf75\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf]|\ud801[\udc00-\udc9d\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00\ude10-\ude13\ude15-\ude17\ude19-\ude35\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2\udd00-\udd23\udf00-\udf1c\udf27\udf30-\udf45\udfe0-\udff6]|\ud804[\udc03-\udc37\udc83-\udcaf\udcd0-\udce8\udd03-\udd26\udd44\udd50-\udd72\udd76\udd83-\uddb2\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude2b\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udede\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3d\udf50\udf5d-\udf61]|\ud805[\udc00-\udc34\udc47-\udc4a\udc5f\udc80-\udcaf\udcc4\udcc5\udcc7\udd80-\uddae\uddd8-\udddb\ude00-\ude2f\ude44\ude80-\udeaa\udeb8\udf00-\udf1a]|\ud806[\udc00-\udc2b\udca0-\udcdf\udcff\udda0-\udda7\uddaa-\uddd0\udde1\udde3\ude00\ude0b-\ude32\ude3a\ude50\ude5c-\ude89\ude9d\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc2e\udc40\udc72-\udc8f\udd00-\udd06\udd08\udd09\udd0b-\udd30\udd46\udd60-\udd65\udd67\udd68\udd6a-\udd89\udd98\udee0-\udef2]|\ud808[\udc00-\udf99]|\ud809[\udc80-\udd43]|[\ud80c\ud81c-\ud820\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872\ud874-\ud879][\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf2f\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\ude40-\ude7f\udf00-\udf4a\udf50\udf93-\udf9f\udfe0\udfe1\udfe3]|\ud821[\udc00-\udff7]|\ud822[\udc00-\udef2]|\ud82c[\udc00-\udd1e\udd50-\udd52\udd64-\udd67\udd70-\udefb]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud838[\udd00-\udd2c\udd37-\udd3d\udd4e\udec0-\udeeb]|\ud83a[\udc00-\udcc4\udd00-\udd43\udd4b]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1\udeb0-\udfff]|\ud87a[\udc00-\udfe0]|\ud87e[\udc00-\ude1d]))";break;case"0":o+="([0-9])";break;case"z":case"Z":o+=IS_UNICODE_PROPERTY_SUPPORTED?"([0-9]|\\p{L})":"([0-9]|(?:[A-Za-zªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙՠ-ֈא-תׯ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࡠ-ࡪࢠ-ࢴࢶ-ࢽऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱৼਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄຆ-ຊຌ-ຣລວ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛱ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡸᢀ-ᢄᢇ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-ᲈᲐ-ᲺᲽ-Ჿᳩ-ᳬᳮ-ᳳᳵᳶᳺᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎↃↄⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々〆〱-〵〻〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿯ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛥꜗ-ꜟꜢ-ꞈꞋ-ꞿꟂ-Ᶎꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꣾꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭧꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf2d-\udf40\udf42-\udf49\udf50-\udf75\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf]|\ud801[\udc00-\udc9d\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00\ude10-\ude13\ude15-\ude17\ude19-\ude35\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2\udd00-\udd23\udf00-\udf1c\udf27\udf30-\udf45\udfe0-\udff6]|\ud804[\udc03-\udc37\udc83-\udcaf\udcd0-\udce8\udd03-\udd26\udd44\udd50-\udd72\udd76\udd83-\uddb2\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude2b\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udede\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3d\udf50\udf5d-\udf61]|\ud805[\udc00-\udc34\udc47-\udc4a\udc5f\udc80-\udcaf\udcc4\udcc5\udcc7\udd80-\uddae\uddd8-\udddb\ude00-\ude2f\ude44\ude80-\udeaa\udeb8\udf00-\udf1a]|\ud806[\udc00-\udc2b\udca0-\udcdf\udcff\udda0-\udda7\uddaa-\uddd0\udde1\udde3\ude00\ude0b-\ude32\ude3a\ude50\ude5c-\ude89\ude9d\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc2e\udc40\udc72-\udc8f\udd00-\udd06\udd08\udd09\udd0b-\udd30\udd46\udd60-\udd65\udd67\udd68\udd6a-\udd89\udd98\udee0-\udef2]|\ud808[\udc00-\udf99]|\ud809[\udc80-\udd43]|[\ud80c\ud81c-\ud820\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872\ud874-\ud879][\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf2f\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\ude40-\ude7f\udf00-\udf4a\udf50\udf93-\udf9f\udfe0\udfe1\udfe3]|\ud821[\udc00-\udff7]|\ud822[\udc00-\udef2]|\ud82c[\udc00-\udd1e\udd50-\udd52\udd64-\udd67\udd70-\udefb]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud838[\udd00-\udd2c\udd37-\udd3d\udd4e\udec0-\udeeb]|\ud83a[\udc00-\udcc4\udd00-\udd43\udd4b]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1\udeb0-\udfff]|\ud87a[\udc00-\udfe0]|\ud87e[\udc00-\ude1d]))";break;case"U":o+=IS_UNICODE_PROPERTY_SUPPORTED?"(([0-9])|(\\s)|([.,/#!$%^&*;:{}=-_`~()])|(\\p{L}))":"(([0-9])|(\\s)|([.,/#!$%^&*;:{}=-_`~()])|(?:[A-Za-zªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙՠ-ֈא-תׯ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࡠ-ࡪࢠ-ࢴࢶ-ࢽऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱৼਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄຆ-ຊຌ-ຣລວ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛱ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡸᢀ-ᢄᢇ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-ᲈᲐ-ᲺᲽ-Ჿᳩ-ᳬᳮ-ᳳᳵᳶᳺᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎↃↄⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々〆〱-〵〻〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿯ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛥꜗ-ꜟꜢ-ꞈꞋ-ꞿꟂ-Ᶎꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꣾꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭧꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf2d-\udf40\udf42-\udf49\udf50-\udf75\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf]|\ud801[\udc00-\udc9d\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00\ude10-\ude13\ude15-\ude17\ude19-\ude35\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2\udd00-\udd23\udf00-\udf1c\udf27\udf30-\udf45\udfe0-\udff6]|\ud804[\udc03-\udc37\udc83-\udcaf\udcd0-\udce8\udd03-\udd26\udd44\udd50-\udd72\udd76\udd83-\uddb2\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude2b\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udede\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3d\udf50\udf5d-\udf61]|\ud805[\udc00-\udc34\udc47-\udc4a\udc5f\udc80-\udcaf\udcc4\udcc5\udcc7\udd80-\uddae\uddd8-\udddb\ude00-\ude2f\ude44\ude80-\udeaa\udeb8\udf00-\udf1a]|\ud806[\udc00-\udc2b\udca0-\udcdf\udcff\udda0-\udda7\uddaa-\uddd0\udde1\udde3\ude00\ude0b-\ude32\ude3a\ude50\ude5c-\ude89\ude9d\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc2e\udc40\udc72-\udc8f\udd00-\udd06\udd08\udd09\udd0b-\udd30\udd46\udd60-\udd65\udd67\udd68\udd6a-\udd89\udd98\udee0-\udef2]|\ud808[\udc00-\udf99]|\ud809[\udc80-\udd43]|[\ud80c\ud81c-\ud820\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872\ud874-\ud879][\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf2f\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\ude40-\ude7f\udf00-\udf4a\udf50\udf93-\udf9f\udfe0\udfe1\udfe3]|\ud821[\udc00-\udff7]|\ud822[\udc00-\udef2]|\ud82c[\udc00-\udd1e\udd50-\udd52\udd64-\udd67\udd70-\udefb]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud838[\udd00-\udd2c\udd37-\udd3d\udd4e\udec0-\udeeb]|\ud83a[\udc00-\udcc4\udd00-\udd43\udd4b]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1\udeb0-\udfff]|\ud87a[\udc00-\udfe0]|\ud87e[\udc00-\ude1d]))";break;default:o+=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}})),e.__CACHE__[n]=o}return e.__CACHE__[n]},unmask=function e(t,n){void 0===e.__CACHE__&&(e.__CACHE__={});var r="".concat(t,"-").concat(n);if(!e.__CACHE__[r]){for(var o=n.split(""),i=t.split(""),a="",u=0;u-1){if(!new RegExp(generatePatternFromMask(l),IS_UNICODE_PROPERTY_SUPPORTED?"u":"").test(c))break;a+=c}}e.__CACHE__[r]=a.toLocaleLowerCase()}return e.__CACHE__[r]},findCaretPosition=function e(t,n){void 0===e.__CACHE__&&(e.__CACHE__={});var r="".concat(t,"-").concat(n);if(!e.__CACHE__[r]){var o=n.split(""),i=t.split("");i.length-1&&!new RegExp(generatePatternFromMask(c),IS_UNICODE_PROPERTY_SUPPORTED?"u":"").test(i[u])){a=u;break}}e.__CACHE__[r]=a<0?i.length:a}return e.__CACHE__[r]}},function(e,t,n){var r=n(6);t.a=r.a},function(e,t,n){var r=n(7),o=n.n(r);function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{};c(this,e),this.options=a({},{elements:".bbj-number-masked",doc:document,cssClassError:"bbj-mask-error",cssClassSuccess:"bbj-mask-success",onUpdate:null,onInvalid:null},{},t),this._actualInputHandler=this._actualInputHandler.bind(this),this._unmaskedInputHandler=this._unmaskedInputHandler.bind(this),this.refresh()}var t,n,r;return t=e,(n=[{key:"refresh",value:function(){for(var e,t,n="string"==typeof this.options.elements?this.options.doc.querySelectorAll(this.options.elements):this.options.elements,r=0;r-1;this._wrap(e,o)}else console.warn("BBjMasking: Invalid input element. The element will be ignored",e)}},{key:"destroy",value:function(){for(var e,t,n="string"==typeof this.options.elements?this.options.doc.querySelectorAll(this.options.elements):this.options.elements,r=0;r-1&&this._unwrap(e)}},{key:"_wrap",value:function(e,t){var n=e.getAttribute("id"),r=e.getAttribute("name"),i=e.dataset.step||null,a=e.dataset.max||null,u=e.dataset.min||null,c=e.dataset.groupingSeparator||",",l=e.dataset.decimalSeparator||".",d=e.dataset.forceTrailingZeros||null,f=e.dataset.mask||"",p=e.getAttribute("class"),h=e.getAttribute("required")||null,g=null,b=null;if(t?b=(g=e.parentNode).querySelector(".numberInputMask__unmaskedInput"):(g=this.options.doc.createElement("span"),b=this.options.doc.createElement("input")),t||(e.parentNode.insertBefore(g,e),e.hasAttribute("readonly")||e.hasAttribute("disabled")||(e.addEventListener("click",this._actualInputHandler),e.addEventListener("focusin",this._actualInputHandler))),e.dataset.valueUnmasked=e.value||0,e.dataset.groupingSeparator=c,e.dataset.decimalSeparator=l,e.dataset.forceTrailingZeros=d,e.value=o.a.mask(e.dataset.valueUnmasked,f,c,l,d).trim(),e.classList.add("numberInputMask__textInput",this.options.cssClassSuccess),b.value=e.dataset.valueUnmasked,b.setAttribute("aria-hidden","true"),b.setAttribute("type","hidden"),b.setAttribute("class",p),n&&b.setAttribute("id","".concat(n,"-unmasked")),r&&b.setAttribute("name","".concat(r,"-unmasked")),h&&b.setAttribute("required","required"),i)b.setAttribute("step",i);else{var y=s(b.value),m="1";y>0&&(m=".".concat(Array(y).join("0"),"1")),b.setAttribute("step",m)}return u&&b.setAttribute("min",u),a&&b.setAttribute("max",a),b.dataset.inputId=n,b.dataset.mask=f,b.dataset.groupingSeparator=c,b.dataset.decimalSeparator=l,d&&(b.dataset.forceTrailingZeros=d),t||(b.classList.add("numberInputMask__unmaskedInput"),b.addEventListener("keydown",this._unmaskedInputHandler),b.addEventListener("keyup",this._unmaskedInputHandler),b.addEventListener("focusout",this._unmaskedInputHandler),g.setAttribute("class","numberInputMask__wrap"),g.appendChild(b),g.appendChild(e)),isNaN(Number(e.dataset.valueUnmasked))?e.classList.add(this.options.cssClassError):this._validateInput(b,e)&&this.__fireOnUpdate(e.value,e.dataset.valueUnmasked,e),g}},{key:"_unwrap",value:function(e){var t=e.querySelector(".numberInputMask__textInput"),n=t.id,r=e.querySelector("#".concat(n,"-unmasked"));r.removeEventListener("keyup",this._unmaskedInputHandler),r.removeEventListener("keypress",this._unmaskedInputHandler),r.removeEventListener("focusout",this._unmaskedInputHandler),e.removeChild(r),t.removeEventListener("click",this._actualInputHandler),t.removeEventListener("focusin",this._actualInputHandler),t.classList.remove("numberInputMask__textInput"),t.classList.remove(this.options.cssClassError),t.classList.remove(this.options.cssClassSuccess),delete t.dataset.valueUnmasked,e.parentNode.insertBefore(t,e),e.parentNode.removeChild(e)}},{key:"_actualInputHandler",value:function(e){var t=e.target,n=t.id,r=this.options.doc.querySelector("#".concat(n,"-unmasked"));t.setAttribute("aria-hidden","true"),t.setAttribute("type","hidden"),r.removeAttribute("aria-hidden"),r.setAttribute("type","number"),this._validateInput(r,t),setTimeout((function(){r.focus();var e=String(r.value).length;r.type="text",r.setSelectionRange(e,e),r.type="number"}),0)}},{key:"_unmaskedInputHandler",value:function(e){var t,n=e.target,r=e.keyCode,i=n.dataset.mask,a=n.dataset.groupingSeparator,u=n.dataset.decimalSeparator,c=n.dataset.forceTrailingZeros,l=n.dataset.inputId,s=this.options.doc.querySelector("#".concat(l)),d=!1,f=this._validateInput(n,s);try{d=o.a.mask(n.value||0,i,a,u,c,!1).trim()}catch(e){d=!1,this.__applyCssClassState(n,s,"error"),this.__fireOnInvalid(e,s)}t=d&&f,([13,27].indexOf(r)>-1||"focusout"===e.type)&&(n.classList.remove(this.options.cssClassError),n.classList.remove(this.options.cssClassSuccess),n.setAttribute("aria-hidden","true"),n.setAttribute("type","hidden"),s.removeAttribute("aria-hidden"),s.setAttribute("type","text"),s.classList.add(this.options.cssClassSuccess),t?(s.value=d,s.dataset.valueUnmasked=n.value,this.__fireOnUpdate(d,n.value,s)):(n.value=s.dataset.valueUnmasked,this.__applyCssClassState(n,s,"success")))}},{key:"_validateInput",value:function(e,t){var n=!0,r=Number(e.value);if("hidden"!==e.getAttribute("type")||isNaN(r))n=e.checkValidity();else{var o=e.getAttribute("max"),i=e.getAttribute("min"),a=e.getAttribute("step");i&&(n=n&&r>=Number(i)),o&&(n=n&&r<=Number(o)),a&&(n=n&&s(a)===s(e.value))}return n?this.__applyCssClassState(e,t,"success"):(this.__applyCssClassState(e,t,"error"),this.__fireOnInvalid(e.validationMessage||"Validity check fails",t)),n}},{key:"__fireOnUpdate",value:function(e,t,n){this.options.onUpdate&&this.options.onUpdate(e,t,n)}},{key:"__fireOnInvalid",value:function(e,t){this.options.onInvalid&&this.options.onInvalid(e,t)}},{key:"__applyCssClassState",value:function(e,t,n){t.hasAttribute("readonly")||t.hasAttribute("disabled")?(t.classList.remove(this.options.cssClassError),t.classList.remove(this.options.cssClassSuccess),e.classList.remove(this.options.cssClassError),e.classList.remove(this.options.cssClassSuccess)):("success"===n&&(t.classList.remove(this.options.cssClassError),t.classList.add(this.options.cssClassSuccess),e.classList.remove(this.options.cssClassError),e.classList.add(this.options.cssClassSuccess)),"error"===n&&(t.classList.add(this.options.cssClassError),t.classList.remove(this.options.cssClassSuccess),e.classList.add(this.options.cssClassError),e.classList.remove(this.options.cssClassSuccess)))}}])&&l(t.prototype,n),r&&l(t,r),e}();t.a=d},function(e,t){e.exports=__WEBPACK_EXTERNAL_MODULE_7__}])},"object"===_typeof(exports)&&"object"===_typeof(module)?module.exports=factory(__webpack_require__(13),__webpack_require__(14)):(__WEBPACK_AMD_DEFINE_ARRAY__=[__webpack_require__(13),__webpack_require__(14)],void 0===(__WEBPACK_AMD_DEFINE_RESULT__="function"==typeof(__WEBPACK_AMD_DEFINE_FACTORY__=factory)?__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports,__WEBPACK_AMD_DEFINE_ARRAY__):__WEBPACK_AMD_DEFINE_FACTORY__)||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__))}).call(this,__webpack_require__(5)(module))},function(e,t,n){"use strict";function r(e,t){for(var n=0;n2&&void 0!==arguments[2])||arguments[2];e=String(e);var r=(t=String(t)).length,l=e.length;if(l>r){if(n)return e;throw{name:"MaskIsTooShortError",message:"MaskIsTooShortError: Mask is shorter than the passed string"}}for(var s=new Array(r),d=0,f="",p=0;p?@[]^_`{|}~".indexOf(v)>-1?s[p]=v:c(n,s,p,e)}else s[p]=" ";++d;break;default:s[p]=f}if(d2&&void 0!==arguments[2]?arguments[2]:",",o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".",i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],u=n.length;if(0===u){if(a)return str;throw{name:"MaskError",message:"MaskError: Mask is empty"}}for(var c=0,l=0,s=!1,d=0;dc){if(a)return t.toString();throw{name:"MaskError",message:"MaskError: Number is too large for mask"}}if(y>l){p=e._round(p,l),g=(h=e._toCharArray(p)).length,b=0,y=0,s=!1;for(var v=0;vc){if(a)return t.toString();throw{name:"MaskError",message:"MaskError: Number is too large for mask"}}}var _=" ",w=" ",O=0,k=0,C=0;"*"==n.charAt(0)&&(_="*");var x=_,D=e._getSign(p)<0,E=g>0||n.indexOf("0")>=0,S=!1,j=!1;s=!1;for(var M=new Array(u),P=0;P0?M[k]=r:(M[k]=_,s||(C=P)),++k;break;case"-":j||" "!=w?M[k]=D?"-":_:(D&&(w="-"),M[k]=_,C=s?-1:P),++k;break;case"+":j||" "!=w?M[k]=D?"-":"+":(w=D?"-":"+",M[k]=_,C=s?-1:P),++k;break;case"$":j||" "!=w?M[k]="$":(w="$",M[k]=_,C=s?-1:P),++k;break;case"(":j||" "!=w?M[k]=D?"(":s?" ":_:(D&&(w="("),M[k]=_,C=s?-1:P),++k;break;case")":M[k]=D?")":s?" ":_,++k;break;case"C":P=u;)--C;M[C]==x&&(M[C]=w)}return M.join("")}},{key:"_shift",value:function(e,t,n){n&&(t=-t);var r=(""+e).split("e");return+(r[0]+"e"+(r[1]?+r[1]+t:t))}},{key:"_round",value:function(t,n){return e._shift(Math.round(e._shift(t,n,!1)),n,!0)}},{key:"_toCharArray",value:function(t){var n=e._getSign(t),r=[];if(0!==n){var o=n<0?"".concat(-1*t.toString()):t.toString();o.length>1&&"0"==o.charAt(0)&&(o=o.substring(1)),r=o.split("")}return r}},{key:"_getSign",value:function(e){return(e>0)-(e<0)||+e}}],(n=null)&&r(t.prototype,n),o&&r(t,o),e}();t.default=o},function(e,t,n){(function(t){e.exports=t.flatpickr=n(48)}).call(this,n(2))},function(e,t,n){"use strict";var r,o,i;function a(e){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)} +!function(e,t){for(var n in t)e[n]=t[n]}(window,function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=39)}([function(e,t,n){"use strict";function r(e){window.BBjGridExWidget=window.BBjGridExWidget||{};var t=window.BBjGridExWidget[e]||null;if(!t){var n=JSON.stringify(Object.keys(window.BBjGridExWidget));throw new TypeError("\n\n[Grid Not Found] The method asked for non-existent grid instance.\n-------------------------------------------------------------------\nRequired Grid Id : ".concat(e," \nRegistered Grids : ").concat(n,"\n"))}return t}Object.defineProperty(t,"__esModule",{value:!0}),t.gw_getDocument=function(){return"undefined"!=typeof $doc?$doc:document},t.gw_getWindow=function(){return"undefined"!=typeof $wnd?$wnd:window},t.gw_escape=function(e){return null!=e?e:""},t.gw_uuid=function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)}))},t.gw_getGrid=r,t.gw_addGrid=function(e,t){return window.BBjGridExWidget=window.BBjGridExWidget||{},window.BBjGridExWidget[e]=t,r(e)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_debounce=function(e,t,n){var r;return function(){var o=this,i=arguments,a=function(){r=null,n||e.apply(o,i)},u=n&&!r;clearTimeout(r),r=setTimeout(a,t),u&&e.apply(o,i)}},t.gw_sendEvent=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],o=e.interests||[];if(o.includes(n)){var i=(0,r.gw_getDocument)().getElementById("".concat(e.id));window.basisDispatchCustomEvent(i,t)}},t.gw_parseNode=o,t.gw_parseNodeFromEvent=function(e){return o(e.node,e.context)};var r=n(0);function o(e,t){if(!0===e.group)return!1;var n=e.rowPinned?"__ROW_INDEX":t.getRowNodeId;return{i:t.hasOwnProperty("getRowNodeId")&&e.data[n]?e.data[n]:e.id,x:e.rowIndex,p:e.hasOwnProperty("parent")&&e.parent.hasOwnProperty("key")?e.parent.key:"",c:e.rowPinned?-1:e.childIndex,s:Boolean(e.selected),cr:t.hasOwnProperty("includeClientRowData")&&!0===t.includeClientRowData?e.data:null,pp:e.rowPinned}}},function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var o;o=function(){return this}();try{o=o||new Function("return this")()}catch(e){"object"===("undefined"==typeof window?"undefined":r(window))&&(o=window)}e.exports=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(9)),o=a(n(67)),i=a(n(68));function a(e){return e&&e.__esModule?e:{default:e}}var u=r.default?r.default.toStringTag:void 0;var c=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":u&&u in Object(e)?(0,o.default)(e):(0,i.default)(e)};t.default=c},function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=function(e){return null!=e&&"object"==r(e)};t.default=o},function(e,t,n){"use strict";e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}e.exports={deepParseJson:function e(t){if("string"!=typeof t)return Array.isArray(t)?t.map((function(t){return e(t)})):"object"===r(t)&&null!==t?Object.keys(t).reduce((function(n,r){return n[r]=e(t[r]),n}),{}):t;try{return e(JSON.parse(t))}catch(e){return t}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.GW_EVENT_KEYPRESS=t.GW_EVENT_RANGE_SELECTION_CHANGED=t.GW_EVENT_GRID_STATE_CHANGE=t.GW_EVENT_ROW_VALUE_CHANGED=t.GW_EVENT_ROW_EDITING_STOPPED=t.GW_EVENT_ROW_EDITING_STARTED=t.GW_EVENT_CELL_VALUE_CHANGED=t.GW_EVENT_CELL_EDITING_STOPPED=t.GW_EVENT_CELL_EDITING_STARTED=t.GW_EVENT_CELL_DOUBLE_CLICK=t.GW_EVENT_CELL_CLICK=t.GW_EVENT_ROW_DOUBLE_CLICK=t.GW_EVENT_ROW_CLICK=t.GW_EVENT_ROW_SELECT=void 0;t.GW_EVENT_ROW_SELECT=69;t.GW_EVENT_ROW_CLICK=5011;t.GW_EVENT_ROW_DOUBLE_CLICK=52;t.GW_EVENT_CELL_CLICK=5001;t.GW_EVENT_CELL_DOUBLE_CLICK=5002;t.GW_EVENT_CELL_EDITING_STARTED=5003;t.GW_EVENT_CELL_EDITING_STOPPED=5004;t.GW_EVENT_CELL_VALUE_CHANGED=5005;t.GW_EVENT_ROW_EDITING_STARTED=5006;t.GW_EVENT_ROW_EDITING_STOPPED=5007;t.GW_EVENT_ROW_VALUE_CHANGED=5012;t.GW_EVENT_GRID_STATE_CHANGE=5008;t.GW_EVENT_RANGE_SELECTION_CHANGED=5009;t.GW_EVENT_KEYPRESS=5010},function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=function(e){var t=r(e);return null!=e&&("object"==t||"function"==t)};t.default=o},function(e,t,n){"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=((r=n(10))&&r.__esModule?r:{default:r}).default.Symbol;t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(23))&&r.__esModule?r:{default:r};function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var a="object"==("undefined"==typeof self?"undefined":i(self))&&self&&self.Object===Object&&self,u=o.default||a||Function("return this")();t.default=u},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e,t){return e===t||e!=e&&t!=t};t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(22)),o=i(n(28));function i(e){return e&&e.__esModule?e:{default:e}}var a=function(e){return null!=e&&(0,o.default)(e.length)&&!(0,r.default)(e)};t.default=a},function(e,t,n){"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=((r=n(45))&&r.__esModule?r:{default:r}).default;t.default=o},function(e,t,n){"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=((r=n(46))&&r.__esModule?r:{default:r}).default;t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_extendColumnDefinitions=u,t.gw_setColumnDefinitions=function(e,t){var n=(0,r.gw_getGrid)(e),o=i(JSON.stringify(t));u(o),n.options.api.setColumnDefs(o),n.options.columnDefs=o},t.gw_sizeColumnsToFit=function(e,t){var n=(0,r.gw_getGrid)(e).options,o=n.api,i=n.columnApi;t?i.sizeColumnsToFit(Number(t)):o.sizeColumnsToFit()},t.gw_autoSizeColumns=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,o=(0,r.gw_getGrid)(e).options,i=o.columnApi;if(n&&n.length)i.autoSizeColumns(n,Boolean(t));else{var a=[];i.getAllColumns().forEach((function(e){a.push(e.colId)})),i.autoSizeColumns(a,Boolean(t))}},t.gw_ensureColumnVisible=function(e,t){(0,r.gw_getGrid)(e).options.api.ensureColumnVisible(t)},t.gw_setColumnWidth=function(e,t,n){(0,r.gw_getGrid)(e).options.columnApi.setColumnWidth(t,Number(n))},t.gw_pinColumn=function(e,t,n){(0,r.gw_getGrid)(e).options.columnApi.setColumnPinned(t,n)},t.gw_moveColumn=function(e,t,n){(0,r.gw_getGrid)(e).options.columnApi.moveColumn(t,n)},t.gw_isShowSelectionCheckbox=c,t.gw_isHeaderCheckboxSelection=l,t.gw_addRowGroupColumn=function(e,t,n){(0,r.gw_getGrid)(e).options.columnApi[n?"setRowGroupColumns":"addRowGroupColumns"](t.split(",").map((function(e){return e.trim()})))},t.gw_removeRowGroupColumn=function(e,t){(0,r.gw_getGrid)(e).options.columnApi.removeRowGroupColumns(t.split(",").map((function(e){return e.trim()})))},t.gw_getPivotMode=function(e){return(0,r.gw_getGrid)(e).options.columnApi.isPivotMode()},t.gw_setPivotMode=function(e,t){(0,r.gw_getGrid)(e).options.columnApi.setPivotMode(!!Number(t))},t.gw_addPivotColumns=function(e,t,n){(0,r.gw_getGrid)(e).options.columnApi[n?"setPivotColumns":"addPivotColumns"](t.split(",").map((function(e){return e.trim()})))},t.gw_removePivotColumns=function(e,t){(0,r.gw_getGrid)(e).options.columnApi.removePivotColumns(t.split(",").map((function(e){return e.trim()})))},t.gw_addValueColumns=function(e,t){(0,r.gw_getGrid)(e).options.columnApi.addValueColumns(t.split(",").map((function(e){return e.trim()})))},t.gw_removeValueColumns=function(e,t){(0,r.gw_getGrid)(e).options.columnApi.removeValueColumns(t.split(",").map((function(e){return e.trim()})))},t.gw_setSortModel=function(e,t){var n=JSON.parse(t),o=[];n.forEach((function(e){for(var t in e)o.push({colId:t,sort:e[t]})})),(0,r.gw_getGrid)(e).options.api.setSortModel(o)},t.gw_refreshHeader=function(e){(0,r.gw_getGrid)(e).options.api.redrawRows()};var r=n(0),o=n(16),i=n(6).deepParseJson;function a(e){var t=e.tooltipValueGetter;t&&(e.tooltipValueGetter=function(e){return(0,o.gw_executeExpression)(t,e)}),e.tooltipComponent="HTMLTooltip",e.hasOwnProperty("children")&&e.children.forEach((function(e){return a(e)}))}function u(e){for(var t in e){var n=e[t];n.checkboxSelection=n.checkboxSelection||c,n.headerCheckboxSelection=n.headerCheckboxSelection||l,a(n),n.hasOwnProperty("editable")&&"string"==typeof n.editable&&function(){var e=n.editable;n.editable=function(t){return(0,o.gw_executeExpression)(e,t)}}()}}function c(e){return!!e.context.showSelectionCheckbox&&e.columnApi.getAllGridColumns()[0].colDef.field===e.colDef.field}function l(e){return!!e.api.gridOptionsWrapper.gridOptions.context.showHeaderSelectionCheckbox&&e.columnApi.getAllGridColumns()[0].colDef.field===e.colDef.field}},function(e,t,n){"use strict";function r(e){if(void 0===r.expressionCache&&(r.expressionCache=[]),r.expressionCache[e])return r.expressionCache[e];var t=null;t=e.indexOf("return")>=0?e:"return "+e+";";var n=new Function("x, ctx, oldValue, newValue, value, node, data, colDef, rowIndex, api, columnApi, getValue, column, columnGroup",t);return r.expressionCache[e]=n,n}Object.defineProperty(t,"__esModule",{value:!0}),t.gw_compileExpression=r,t.gw_executeExpression=function(e,t){try{return r(e)(t.value,t.context,t.oldValue,t.newValue,t.value,t.node,t.data,t.colDef,t.rowIndex,t.api,t.columnApi,t.getValue,t.column,t.columnGroup)}catch(n){return console.log("Processing of the expression failed"),console.log("Expression = "+e),console.log("Params =",t),console.log("Exception = "+n),null}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_setQuickFilter=function(e,t){(0,r.gw_getGrid)(e).options.api.setQuickFilter(t)},t.gw_expandAll=function(e){(0,r.gw_getGrid)(e).options.api.expandAll()},t.gw_collapseAll=function(e){(0,r.gw_getGrid)(e).options.api.collapseAll()},t.gw_ensureIndexVisible=function(e,t,n){var o=(0,r.gw_getGrid)(e).options.api,i=o.getRowNode(t);i?o.ensureNodeVisible(i,n):o.ensureIndexVisible(Number(t),n)},t.gw_navigateToNextRow=function(e,t){var n=(0,r.gw_getGrid)(e).options,o=t.previousCellPosition,i=t.nextCellPosition;switch(t.key){case 40:if(i&&!i.rowPinned)if(o.rowPinned){var a=n.api.getDisplayedRowAtIndex(n.api.getFirstDisplayedRow());a&&a.setSelected(!0)}else n.api.forEachNode((function(e){o.rowIndex+1===e.rowIndex&&e.setSelected(!0)}));return i;case 38:if(i&&!i.rowPinned)if(o.rowPinned){var u=n.api.getDisplayedRowAtIndex(n.api.getLastDisplayedRow());u&&u.setSelected(!0)}else n.api.forEachNode((function(e){o.rowIndex-1===e.rowIndex&&e.setSelected(!0)}));return i;case 37:case 39:return i;default:throw new Error("You have super strange keyboard")}},t.gw_getRowNodeId=function(e,t){return t[(0,r.gw_getGrid)(e).options.context.getRowNodeId]},t.gw_setRowData=function(e,t){var n=(0,r.gw_getGrid)(e).options;n.api.setRowData(t),n.rowData=t},t.gw_updateRowData=function(e,t,n){var o=(0,r.gw_getGrid)(e).options;if(t.remove.length){var i=[];t.remove.forEach((function(e){i.push(o.api.getRowNode(e).data)})),t.remove=i}n?o.api.applyTransactionAsync(t):o.api.applyTransaction(t)},t.gw_setRowsHeight=function(e,t){var n=(0,r.gw_getGrid)(e).options.api;n.forEachNode((function(e){e.setRowHeight(t)})),n.onRowHeightChanged()},t.gw_setRowHeight=function(e,t,n){var o=(0,r.gw_getGrid)(e).options,i=o.api,a=i.getRowNode(t)||i.getDisplayedRowAtIndex(t);a?(a.setRowHeight(n),o.api.onRowHeightChanged()):console.warn("Failed to set height for row ".concat(t,". Row cannot be found"))},t.gw_resetRowHeights=function(e){(0,r.gw_getGrid)(e).options.api.resetRowHeights()},t.gw_setSelectedRows=function(e,t){var n=(0,r.gw_getGrid)(e).options.api;n.forEachNodeAfterFilterAndSort((function(e){(t.indexOf(String(e.rowIndex))>-1||t.indexOf(String(e.id))>-1)&&(e.setSelected(!0),e.expanded=!0)})),n.onGroupExpandedOrCollapsed()},t.gw_selectAll=function(e,t){var n=(0,r.gw_getGrid)(e).options;1===t?n.api.selectAllFiltered():n.api.selectAll()},t.gw_deselectAll=function(e,t){var n=(0,r.gw_getGrid)(e).options;1===t?n.api.deselectAllFiltered():n.api.deselectAll()},t.gw_getSelectedRows=a,t.gw_getSelectedRow=function(e){var t=JSON.parse(a(e));if(t.length)return JSON.stringify(t[t.length-1]);return""},t.gw_getRow=function(e,t){var n=(0,r.gw_getGrid)(e).options;return JSON.stringify((0,o.gw_parseNode)(n.api.getRowNode(t),n.context))},t.gw_getRows=function(e,t,n){var a=(0,r.gw_getGrid)(e).options,u=[];return a.api[t]((function(e){e.group||(n?(0,i.gw_executeExpression)(n,{value:e.data,context:a.context,oldValue:null,newValue:null,node:e,data:e.data,colDef:null,rowIndex:e.rowIndex,api:e.gridApi,columnApi:e.columnApi,getValue:function(){return e.data},column:null,columnGroup:e.hasOwnProperty("parent")&&e.parent.hasOwnProperty("key")?e.parent.key:""})&&u.push((0,o.gw_parseNode)(e,a.context)):u.push((0,o.gw_parseNode)(e,a.context)))})),JSON.stringify(u)},t.gw_redrawRows=function(e){(0,r.gw_getGrid)(e).options.api.redrawRows()},t.gw_setPinnedTopRowData=function(e,t){(0,r.gw_getGrid)(e).options.api.setPinnedTopRowData(t)},t.gw_setPinnedBottomRowData=function(e,t){(0,r.gw_getGrid)(e).options.api.setPinnedBottomRowData(t)};var r=n(0),o=n(1),i=n(16);function a(e){var t=(0,r.gw_getGrid)(e).options,n=t.api.getSelectedNodes(),i=[];return n.forEach((function(e){i.push((0,o.gw_parseNode)(e,t.context))})),JSON.stringify(i)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_getChartToolbarItems=function(e){return e.api.gridOptionsWrapper.gridOptions.context.chartToolbarItems||[]},t.gw_addChartRange=function(e,t){var n=(0,r.gw_getGrid)(e),a=n.options,u=i(JSON.stringify(t));u.cellRange=(0,o.gw_parseAddCellRange)(a,u.cellRange);var c=a.api.createRangeChart(u),l=(0,r.gw_uuid)();return n.created_charts=n.created_charts||{},n.created_charts[l]=c,l},t.gw_destroyChart=function(e,t){var n=(0,r.gw_getGrid)(e);if(t)n.hasOwnProperty("created_charts")&&n.created_charts.hasOwnProperty(t)&&n.created_charts[t].destroyChart();else if(n.hasOwnProperty("created_charts"))for(var o in n.created_charts){if(n.created_charts.hasOwnProperty(o))n.created_charts[o].destroyChart()}};var r=n(0),o=n(19),i=n(6).deepParseJson},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_startEditingCell=function(e,t,n,o,i,a){var u=(0,r.gw_getGrid)(e).options,c=u.api,l=c.getRowNode(t)||c.getDisplayedRowAtIndex(t);u.api.startEditingCell({rowIndex:l.rowIndex,keyPress:Number(o),colKey:n,charPress:i,rowPinned:a})},t.gw_stopEditing=function(e,t){(0,r.gw_getGrid)(e).options.api.stopEditing(t)},t.gw_tabToNextCell=function(e){(0,r.gw_getGrid)(e).options.api.tabToNextCell()},t.gw_tabToPreviousCell=function(e){(0,r.gw_getGrid)(e).options.api.tabToPreviousCell()},t.gw_setFocusedCell=function(e,t,n){var o,i,a,u=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,c=(0,r.gw_getGrid)(e).options;if(c.api.getEditingCells().length>0)return;if(-1==t){var l=c.api.getFocusedCell();l?(o=l.rowIndex,i=l.column.colId,a=l.rowPinned):(o=0,i=c.columnApi.getAllGridColumns()[0].colId,a=u)}else o=t?Number.isInteger(+t)?+t:c.api.getRowNode(t).rowIndex:0,i=n||c.columnApi.getAllGridColumns()[0].colId,a=u;(0,r.gw_getGrid)(e).options.api.setFocusedCell(o,i,a)},t.gw_getRangeSelections=function(e){var t=(0,r.gw_getGrid)(e).options,n=t.context,i=t.api,a=i.getCellRanges(),u=i.getModel(),c=[];return a.forEach((function(e){for(var t=e.columns.reduce((function(e,t){return"ag-Grid-AutoColumn"!==t.colId&&e.push(t.colId),e}),[]).filter(Boolean),r=Math.min(e.startRow.rowIndex,e.endRow.rowIndex),i=Math.max(e.startRow.rowIndex,e.endRow.rowIndex),a=[],l=r;l<=i;l++){var s=u.getRow(l);if(s){var d=(0,o.gw_parseNode)(s,n);d&&a.push(d)}}a.length&&t.length&&c.push({r:a,c:t})})),JSON.stringify(c)},t.gw_parseAddCellRange=a,t.gw_addCellRange=function(e,t){var n=(0,r.gw_getGrid)(e).options;n.api.addCellRange(a(n,t))},t.gw_clearRangeSelection=function(e){(0,r.gw_getGrid)(e).options.api.clearRangeSelection()};var r=n(0),o=n(1),i=n(6).deepParseJson;function a(e,t){var n=i(JSON.stringify(t)),r=n.start?Number.isInteger(+n.start)?+n.start:e.api.getRowNode(n.start).rowIndex:0,o=n.end?Number.isInteger(+n.end)?+n.end:e.api.getRowNode(n.end).rowIndex:e.rowData.length-1;return{rowStartIndex:Math.abs(r),rowEndIndex:Math.abs(o),columns:n.columns}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(21))&&r.__esModule?r:{default:r};var i=function(e,t,n){"__proto__"==t&&o.default?(0,o.default)(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n};t.default=i},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(65))&&r.__esModule?r:{default:r};var i=function(){try{var e=(0,o.default)(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();t.default=i},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(3)),o=i(n(8));function i(e){return e&&e.__esModule?e:{default:e}}var a=function(e){if(!(0,o.default)(e))return!1;var t=(0,r.default)(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t};t.default=a},function(e,t,n){"use strict";(function(e){function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r="object"==(void 0===e?"undefined":n(e))&&e&&e.Object===Object&&e;t.default=r}).call(this,n(2))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(25)),o=a(n(74)),i=a(n(75));function a(e){return e&&e.__esModule?e:{default:e}}var u=function(e,t){return(0,i.default)((0,o.default)(e,t,r.default),e+"")};t.default=u},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return e};t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)};t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=u(n(11)),o=u(n(12)),i=u(n(29)),a=u(n(8));function u(e){return e&&e.__esModule?e:{default:e}}function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var l=function(e,t,n){if(!(0,a.default)(n))return!1;var u=c(t);return!!("number"==u?(0,o.default)(n)&&(0,i.default)(t,n.length):"string"==u&&t in n)&&(0,r.default)(n[t],e)};t.default=l},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991};t.default=r},function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=/^(?:0|[1-9]\d*)$/;var i=function(e,t){var n=r(e);return!!(t=null==t?9007199254740991:t)&&("number"==n||"symbol"!=n&&o.test(e))&&e>-1&&e%1==0&&e/g;t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(104))&&r.__esModule?r:{default:r};var i=function(e){return null==e?"":(0,o.default)(e)};t.default=i},function(e,t,n){var r,o,i={},a=(r=function(){return window&&document&&document.all&&!window.atob},function(){return void 0===o&&(o=r.apply(this,arguments)),o}),u=function(e){return document.querySelector(e)},c=function(e){var t={};return function(e){if("function"==typeof e)return e();if(void 0===t[e]){var n=u.call(this,e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}}(),l=null,s=0,d=[],f=n(119);function p(e,t){for(var n=0;n=0&&d.splice(t,1)}function y(e){var t=document.createElement("style");return e.attrs.type="text/css",m(t,e.attrs),g(e,t),t}function m(e,t){Object.keys(t).forEach((function(n){e.setAttribute(n,t[n])}))}function v(e,t){var n,r,o,i;if(t.transform&&e.css){if(!(i=t.transform(e.css)))return function(){};e.css=i}if(t.singleton){var a=s++;n=l||(l=y(t)),r=O.bind(null,n,a,!1),o=O.bind(null,n,a,!0)}else e.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(n=function(e){var t=document.createElement("link");return e.attrs.type="text/css",e.attrs.rel="stylesheet",m(t,e.attrs),g(e,t),t}(t),r=C.bind(null,n,t),o=function(){b(n),n.href&&URL.revokeObjectURL(n.href)}):(n=y(t),r=k.bind(null,n),o=function(){b(n)});return r(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;r(e=t)}else o()}}e.exports=function(e,t){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");(t=t||{}).attrs="object"==typeof t.attrs?t.attrs:{},t.singleton||"boolean"==typeof t.singleton||(t.singleton=a()),t.insertInto||(t.insertInto="head"),t.insertAt||(t.insertAt="bottom");var n=h(e,t);return p(n,t),function(e){for(var r=[],o=0;o59)}},function(e,t,n){var r=n(19);t.a=r.a},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n.d(t,"Utils",(function(){return u}));var r=n(1),o=n(2),i=n(4),a=n(20);n.d(t,"Types",(function(){return a.a})),n.d(t,"NumberMask",(function(){return r.a})),n.d(t,"DateMask",(function(){return o.c})),n.d(t,"StringMask",(function(){return i.a}));var u={Dates:{getDayOfYear:o.e,getWeekNumber:o.g,getWeekStartByLocale:o.h,IS_DATE_REGEX:o.a,IS_TIME_REGEX:o.b,fixShortISO:o.d,getTimezoneOrOffset:o.f}};t.default=a.a},function(e,t,n){function r(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:",",o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".",i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],u=n.length;if(0===u){if(a)return str;throw{name:"MaskError",message:"MaskError: Mask is empty"}}for(var c=0,l=0,s=!1,d=0;dc){if(a)return t.toString();throw{name:"MaskError",message:"MaskError: Number is too large for mask"}}if(y>l){p=e._round(p,l),g=(h=e._toCharArray(p)).length,b=0,y=0,s=!1;for(var v=0;vc){if(a)return t.toString();throw{name:"MaskError",message:"MaskError: Number is too large for mask"}}}var _=" ",w=" ",O=0,k=0,C=0;"*"==n.charAt(0)&&(_="*");var x=_,D=e._getSign(p)<0,E=g>0||n.indexOf("0")>=0,S=!1,j=!1;s=!1;for(var M=new Array(u),P=0;P0?M[k]=r:(M[k]=_,s||(C=P)),++k;break;case"-":j||" "!=w?M[k]=D?"-":_:(D&&(w="-"),M[k]=_,C=s?-1:P),++k;break;case"+":j||" "!=w?M[k]=D?"-":"+":(w=D?"-":"+",M[k]=_,C=s?-1:P),++k;break;case"$":j||" "!=w?M[k]="$":(w="$",M[k]=_,C=s?-1:P),++k;break;case"(":j||" "!=w?M[k]=D?"(":s?" ":_:(D&&(w="("),M[k]=_,C=s?-1:P),++k;break;case")":M[k]=D?")":s?" ":_,++k;break;case"C":P=u;)--C;M[C]==x&&(M[C]=w)}return M.join("")}},{key:"_shift",value:function(e,t,n){n&&(t=-t);var r=(""+e).split("e");return+(r[0]+"e"+(r[1]?+r[1]+t:t))}},{key:"_round",value:function(t,n){return e._shift(Math.round(e._shift(t,n,!1)),n,!0)}},{key:"_toCharArray",value:function(t){var n=e._getSign(t),r=[];if(0!==n){var o=n<0?"".concat(-1*t.toString()):t.toString();o.length>1&&"0"==o.charAt(0)&&(o=o.substring(1)),r=o.split("")}return r}},{key:"_getSign",value:function(e){return(e>0)-(e<0)||+e}}],(n=null)&&r(t.prototype,n),o&&r(t,o),e}();t.a=o},function(e,t,n){n.d(t,"b",(function(){return a})),n.d(t,"a",(function(){return u})),n.d(t,"h",(function(){return c})),n.d(t,"e",(function(){return l})),n.d(t,"d",(function(){return s})),n.d(t,"f",(function(){return d})),n.d(t,"g",(function(){return f}));var r=n(8),o=n(15);function i(e,t){for(var n=0;n12?"PM":"AM",pp:e.hours24>12?"pm":"am",p:e.hours24>12?"pm":"am",Jz:1==String(e.dayOfYear).length?"0"+e.dayOfYear:e.dayOfYear,Js:e.dayOfYear,Jl:e.dayOfYear,Jd:e.dayOfYear,J:e.dayOfYear,Wz:1==String(e.dayOfWeek).length?"0"+e.dayOfWeek:e.dayOfWeek,Ws:e.dayOfWeek,Wl:e.dayOfWeek,Wp:String.fromCharCode(e.dayOfWeek),Wd:e.dayOfWeek,W:e.dayOfWeek,wz:1==String(e.weekNumber).length?"0"+e.weekNumber:e.weekNumber,ws:e.weekNumber,wl:e.weekNumber,wp:String.fromCharCode(e.weekNumber),wd:e.weekNumber,w:e.weekNumber}}}],(n=null)&&i(t.prototype,n),o&&i(t,o),e}();t.c=p},function(e,t,n){t.a=function(e,t,n){var a=Object(i.a)(e,n),u=new Date(a.getUTCFullYear(),a.getUTCMonth(),a.getUTCDate(),a.getUTCHours(),a.getUTCMinutes(),a.getUTCSeconds(),a.getUTCMilliseconds()),c=Object(r.a)(t,a);return c?Object(o.a)(u,c):u};var r=n(3),o=n(10),i=n(13)},function(e,t,n){t.a=function(e,t){var n=function(e){if(!o[e]){var t=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:"America/New_York",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(new Date("2014-06-25T04:00:00.123Z")),n="06/25/2014, 00:00:00"===t||"‎06‎/‎25‎/‎2014‎ ‎00‎:‎00‎:‎00"===t;o[e]=n?new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:e,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):new Intl.DateTimeFormat("en-US",{hourCycle:"h23",timeZone:e,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})}return o[e]}(t);return n.formatToParts?function(e,t){for(var n=e.formatToParts(t),o=[],i=0;i=0&&(o[a]=parseInt(n[i].value,10))}return o}(n,e):function(e,t){var n=e.format(t).replace(/\u200E/g,""),r=/(\d+)\/(\d+)\/(\d+),? (\d+):(\d+):(\d+)/.exec(n);return[r[3],r[1],r[2],r[4],r[5],r[6]]}(n,e)};var r={year:0,month:1,day:2,hour:3,minute:4,second:5},o={}},function(e,t,n){t.a=function(e,t){if(arguments.length<2)throw new TypeError("2 arguments required, but only "+arguments.length+" present");var n=Object(r.a)(t);return Object(o.a)(e,-n)};var r=n(0),o=n(11)},function(e,t,n){t.a=function(e,t){if(arguments.length<2)throw new TypeError("2 arguments required, but only "+arguments.length+" present");var n=Object(o.a)(e).getTime(),i=Object(r.a)(t);return new Date(n+i)};var r=n(0),o=n(12)},function(e,t,n){t.a=function(e){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");var t=Object.prototype.toString.call(e);return e instanceof Date||"object"===a(e)&&"[object Date]"===t?new Date(e.getTime()):"number"==typeof e||"[object Number]"===t?new Date(e):("string"!=typeof e&&"[object String]"!==t||"undefined"==typeof console||(console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule"),console.warn((new Error).stack)),new Date(NaN))}},function(e,t,n){t.a=function(e,t){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");if(null===e)return new Date(NaN);var n=t||{},u=null==n.additionalDigits?2:Object(r.a)(n.additionalDigits);if(2!==u&&1!==u&&0!==u)throw new RangeError("additionalDigits must be 0, 1 or 2");if(e instanceof Date||"object"===a(e)&&"[object Date]"===Object.prototype.toString.call(e))return new Date(e.getTime());if("number"==typeof e||"[object Number]"===Object.prototype.toString.call(e))return new Date(e);if("string"!=typeof e&&"[object String]"!==Object.prototype.toString.call(e))return new Date(NaN);var f=c(e),p=l(f.date,u),h=p.year,g=p.restDateString,b=s(g,h);if(isNaN(b))return new Date(NaN);if(b){var y,m=b.getTime(),v=0;if(f.time&&(v=d(f.time),isNaN(v)))return new Date(NaN);if(f.timezone||n.timeZone){if(y=Object(i.a)(f.timezone||n.timeZone,new Date(m+v)),isNaN(y))return new Date(NaN)}else y=Object(o.a)(new Date(m+v)),y=Object(o.a)(new Date(m+v+y));return new Date(m+v+y)}return new Date(NaN)};var r=n(0),o=n(14),i=n(3),u={dateTimeDelimeter:/[T ]/,plainTime:/:/,timeZoneDelimeter:/[Z ]/i,YY:/^(\d{2})$/,YYY:[/^([+-]\d{2})$/,/^([+-]\d{3})$/,/^([+-]\d{4})$/],YYYY:/^(\d{4})/,YYYYY:[/^([+-]\d{4})/,/^([+-]\d{5})/,/^([+-]\d{6})/],MM:/^-(\d{2})$/,DDD:/^-?(\d{3})$/,MMDD:/^-?(\d{2})-?(\d{2})$/,Www:/^-?W(\d{2})$/,WwwD:/^-?W(\d{2})-?(\d{1})$/,HH:/^(\d{2}([.,]\d*)?)$/,HHMM:/^(\d{2}):?(\d{2}([.,]\d*)?)$/,HHMMSS:/^(\d{2}):?(\d{2}):?(\d{2}([.,]\d*)?)$/,timezone:/([Z+-].*| UTC|(?:[a-zA-Z]+\/[a-zA-Z_]+(?:\/[a-zA-Z_]+)?))$/};function c(e){var t,n={},r=e.split(u.dateTimeDelimeter);if(u.plainTime.test(r[0])?(n.date=null,t=r[0]):(n.date=r[0],t=r[1],n.timezone=r[2],u.timeZoneDelimeter.test(n.date)&&(n.date=e.split(u.timeZoneDelimeter)[0],t=e.substr(n.date.length,e.length))),t){var o=u.timezone.exec(t);o?(n.time=t.replace(o[1],""),n.timezone=o[1]):n.time=t}return n}function l(e,t){var n,r=u.YYY[t],o=u.YYYYY[t];if(n=u.YYYY.exec(e)||o.exec(e)){var i=n[1];return{year:parseInt(i,10),restDateString:e.slice(i.length)}}if(n=u.YY.exec(e)||r.exec(e)){var a=n[1];return{year:100*parseInt(a,10),restDateString:e.slice(a.length)}}return{year:null}}function s(e,t){if(null===t)return null;var n,r,o,i;if(0===e.length)return(r=new Date(0)).setUTCFullYear(t),r;if(n=u.MM.exec(e))return r=new Date(0),b(t,o=parseInt(n[1],10)-1)?(r.setUTCFullYear(t,o),r):new Date(NaN);if(n=u.DDD.exec(e)){r=new Date(0);var a=parseInt(n[1],10);return function(e,t){if(t<1)return!1;var n=g(e);return!(n&&t>366)&&!(!n&&t>365)}(t,a)?(r.setUTCFullYear(t,0,a),r):new Date(NaN)}if(n=u.MMDD.exec(e)){r=new Date(0),o=parseInt(n[1],10)-1;var c=parseInt(n[2],10);return b(t,o,c)?(r.setUTCFullYear(t,o,c),r):new Date(NaN)}if(n=u.Www.exec(e))return y(0,i=parseInt(n[1],10)-1)?f(t,i):new Date(NaN);if(n=u.WwwD.exec(e)){i=parseInt(n[1],10)-1;var l=parseInt(n[2],10)-1;return y(0,i,l)?f(t,i,l):new Date(NaN)}return null}function d(e){var t,n,r;if(t=u.HH.exec(e))return m(n=parseFloat(t[1].replace(",",".")))?n%24*36e5:NaN;if(t=u.HHMM.exec(e))return m(n=parseInt(t[1],10),r=parseFloat(t[2].replace(",",".")))?n%24*36e5+6e4*r:NaN;if(t=u.HHMMSS.exec(e)){n=parseInt(t[1],10),r=parseInt(t[2],10);var o=parseFloat(t[3].replace(",","."));return m(n,r,o)?n%24*36e5+6e4*r+1e3*o:NaN}return null}function f(e,t,n){t=t||0,n=n||0;var r=new Date(0);r.setUTCFullYear(e,0,4);var o=7*t+n+1-(r.getUTCDay()||7);return r.setUTCDate(r.getUTCDate()+o),r}var p=[31,28,31,30,31,30,31,31,30,31,30,31],h=[31,29,31,30,31,30,31,31,30,31,30,31];function g(e){return e%400==0||e%4==0&&e%100!=0}function b(e,t,n){if(t<0||t>11)return!1;if(null!=n){if(n<1)return!1;var r=g(e);if(r&&n>h[t])return!1;if(!r&&n>p[t])return!1}return!0}function y(e,t,n){return!(t<0||t>52||null!=n&&(n<0||n>6))}function m(e,t,n){return!(null!=e&&(e<0||e>=25)||null!=t&&(t<0||t>=60)||null!=n&&(n<0||n>=60))}},function(e,t,n){t.a=function(e){var t=new Date(e.getTime()),n=Math.ceil(t.getTimezoneOffset());t.setSeconds(0,0);var r=t.getTime()%6e4;return 6e4*n+r}},function(e,t,n){n.d(t,"a",(function(){return a}));var r=n(16),o=n(17),i=n(18);function a(e){return Object(r.a)(e,o.a,i.a)}},function(e,t,n){function r(e,t){var n=t["string"==typeof e?e.toUpperCase():e];return"number"==typeof n?n:1}function o(e,t,n){if(e){var o,i=e.toLowerCase().split(/[-_]/),a=i[0];if(i[1]&&4===i[1].length?(a+="_"+i[1],o=i[2]):o=i[1],o||(o=t[a]),o)return r(o.match(/^\d+$/)?Number(o):o,n)}return 1}n.d(t,"b",(function(){return r})),n.d(t,"a",(function(){return o}))},function(e,t,n){t.a={en:"US",zh:"CN",zh_hans:"CN",hans:"CN",wuu:"CN",hsn:"CN",hak:"CN",nan:"CN",gan:"CN",hi:"IN",te:"IN",mr:"IN",ta:"IN",gu:"IN",kn:"IN",or:"IN",ml:"IN",pa_guru:"IN",bho:"IN",awa:"IN",as:"IN",mwr:"IN",mai:"IN",mag:"IN",bgc:"IN",hne:"IN",dcc:"IN",dz:"BT",tn:"BW",am:"ET",om:"ET",quc:"GT",id:"ID",jv:"ID",su:"ID",mad:"ID",ms_arab:"ID",ga:"IE",he:"IL",jam:"JM",ja:"JP",km:"KH",ko:"KR",lo:"LA",mh:"MH",my:"MM",mt:"MT",ne:"NP",fil:"PH",ceb:"PH",ilo:"PH",ur:"PK",pa:"PK",pa_arab:"PK",arab:"PK",lah:"PK",ps:"PK",sd:"PK",sd_arab:"PK",skr:"PK",gn:"PY",th:"TH",tts:"TH",aeb:"TN",zh_hant:"TW",hant:"TW",sm:"WS",zu:"ZA",sn:"ZW",arq:"DZ",ar:"EG",arz:"EG",fa:"IR",az_arab:"IR",ary:"MA",bn:"BD",rkt:"BD",dv:"MV"}},function(e,t,n){t.a={AG:0,ATG:0,28:0,AR:0,ARG:0,32:0,AS:0,ASM:0,16:0,AU:0,AUS:0,36:0,BR:0,BRA:0,76:0,BS:0,BHS:0,44:0,BT:0,BTN:0,64:0,BW:0,BWA:0,72:0,BZ:0,BLZ:0,84:0,CA:0,CAN:0,124:0,CN:0,CHN:0,156:0,CO:0,COL:0,170:0,DM:0,DMA:0,212:0,DO:0,DOM:0,214:0,ET:0,ETH:0,231:0,GT:0,GTM:0,320:0,GU:0,GUM:0,316:0,HK:0,HKG:0,344:0,HN:0,HND:0,340:0,ID:0,IDN:0,360:0,IE:0,IRL:0,372:0,IL:0,ISR:0,376:0,IN:0,IND:0,356:0,JM:0,JAM:0,388:0,JP:0,JPN:0,392:0,KE:0,KEN:0,404:0,KH:0,KHM:0,116:0,KR:0,KOR:0,410:0,LA:0,LA0:0,418:0,MH:0,MHL:0,584:0,MM:0,MMR:0,104:0,MO:0,MAC:0,446:0,MT:0,MLT:0,470:0,MX:0,MEX:0,484:0,MZ:0,MOZ:0,508:0,NI:0,NIC:0,558:0,NP:0,NPL:0,524:0,NZ:0,NZL:0,554:0,PA:0,PAN:0,591:0,PE:0,PER:0,604:0,PH:0,PHL:0,608:0,PK:0,PAK:0,586:0,PR:0,PRI:0,630:0,PY:0,PRY:0,600:0,SA:0,SAU:0,682:0,SG:0,SGP:0,702:0,SV:0,SLV:0,222:0,TH:0,THA:0,764:0,TN:0,TUN:0,788:0,TT:0,TTO:0,780:0,TW:0,TWN:0,158:0,UM:0,UMI:0,581:0,US:0,USA:0,840:0,VE:0,VEN:0,862:0,VI:0,VIR:0,850:0,WS:0,WSM:0,882:0,YE:0,YEM:0,887:0,ZA:0,ZAF:0,710:0,ZW:0,ZWE:0,716:0,AE:6,ARE:6,784:6,AF:6,AFG:6,4:6,BH:6,BHR:6,48:6,DJ:6,DJI:6,262:6,DZ:6,DZA:6,12:6,EG:6,EGY:6,818:6,IQ:6,IRQ:6,368:6,IR:6,IRN:6,364:6,JO:6,JOR:6,400:6,KW:6,KWT:6,414:6,LY:6,LBY:6,434:6,MA:6,MAR:6,504:6,OM:6,OMN:6,512:6,QA:6,QAT:6,634:6,SD:6,SDN:6,729:6,SY:6,SYR:6,760:6,BD:5,BGD:5,50:5,MV:5,MDV:5,462:5}},function(e,t,n){function r(e,t){for(var n=0;n2&&void 0!==arguments[2])||arguments[2];e=String(e);var r=(t=String(t)).length,l=e.length;if(l>r){if(n)return e;throw{name:"MaskIsTooShortError",message:"MaskIsTooShortError: Mask is shorter than the passed string"}}for(var s=new Array(r),d=0,f="",p=0;p?@[]^_`{|}~".indexOf(v)>-1?s[p]=v:c(n,s,p,e)}else s[p]=" ";++d;break;default:s[p]=f}if(d2&&void 0!==arguments[2]?arguments[2]:",",o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".",i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];return r.a.mask(e,t,n,o,i,a)}},{key:"date",value:function(e,t,n,r){return o.c.mask(e,t,n,r)}},{key:"string",value:function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return i.a.mask(e,t,n)}}],(n=null)&&a(t.prototype,n),u&&a(t,u),e}();t.a=u}])},"object"===a(t)&&"object"===a(e)?e.exports=i():(r=[],void 0===(o="function"==typeof(n=i)?n.apply(t,r):n)||(e.exports=o))}).call(this,n(5)(e))},function(e,t,n){(function(t){t.Basis||(t.Basis={}),e.exports=t.Basis.InputMasking=n(44)}).call(this,n(2))},function(module,exports,__webpack_require__){"use strict";(function(module){var __WEBPACK_AMD_DEFINE_FACTORY__,__WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__,factory;function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}"undefined"!=typeof self&&self,factory=function(__WEBPACK_EXTERNAL_MODULE_0__,__WEBPACK_EXTERNAL_MODULE_7__){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e,t){e.exports=__WEBPACK_EXTERNAL_MODULE_0__},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),o=n(5);n.d(t,"TextInput",(function(){return r.a})),n.d(t,"NumberInput",(function(){return o.a}))},function(e,t,n){var r=n(3);t.a=r.a},function(e,t,n){var r=n(0),o=n.n(r),i=n(4);function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function u(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{};l(this,e),this.options=u({},{elements:".bbj-text-masked",doc:document,cssClassError:"bbj-mask-error",cssClassSuccess:"bbj-mask-success",onUpdate:null,onInvalid:null},{},t),this._onKeystroke=this._onKeystroke.bind(this),this._onFocus=this._onFocus.bind(this),this.refresh()}var t,n,r;return t=e,(n=[{key:"refresh",value:function(){for(var e,t,n="string"==typeof this.options.elements?this.options.doc.querySelectorAll(this.options.elements):this.options.elements,r=0;r-1;this._wrap(e,o)}else console.warn("BBjMasking: Invalid input element. The element will be ignored",e)}},{key:"destroy",value:function(){for(var e,t,n="string"==typeof this.options.elements?this.options.doc.querySelectorAll(this.options.elements):this.options.elements,r=0;r-1&&this._unwrap(e)}},{key:"_wrap",value:function(e,t){var n=e.getAttribute("id"),r=e.getAttribute("name"),o=e.dataset.mask||"",a=e.pattern,u=Object(i.b)(o),c=a||u,l=null,s=null;return t?s=(l=e.parentNode).querySelector(".textInputMask__unmaskedInput"):(l=this.options.doc.createElement("span"),s=this.options.doc.createElement("input")),e.value=Object(i.c)(e.value,o),e.pattern=c,e.classList.add("textInputMask__textInput"),e.dataset.mask=o,e.dataset.valueUnmasked=Object(i.d)(e.value,o),a&&a!==u&&(e.dataset.isCustomPattern=!0),t||(e.hasAttribute("readonly")||e.hasAttribute("disable")||(e.addEventListener("keyup",this._onKeystroke),e.addEventListener("keypress",this._onKeystroke),e.addEventListener("paste",this._onKeystroke),e.addEventListener("focusin",this._onFocus),e.addEventListener("click",this._onFocus)),e.parentNode.insertBefore(l,e)),this._validateInput(e)&&this.__fireOnUpdate(e.value,e.dataset.valueUnmasked,e),s.setAttribute("aria-hidden","true"),s.setAttribute("type","hidden"),s.classList.add("textInputMask__unmaskedInput"),s.value=e.dataset.valueUnmasked,n&&s.setAttribute("id","".concat(n,"-unmasked")),r&&s.setAttribute("name","".concat(r,"-unmasked")),t||(l.setAttribute("class","textInputMask__wrap"),l.appendChild(s),l.appendChild(e)),l}},{key:"_unwrap",value:function(e){e.removeChild(e.querySelector(".textInputMask__unmaskedInput"));var t=e.querySelector(".textInputMask__textInput");t.removeEventListener("keyup",this._onKeystroke),t.removeEventListener("keypress",this._onKeystroke),t.removeEventListener("paste",this._onKeystroke),t.removeEventListener("focusin",this._onFocus),t.removeEventListener("click",this._onFocus),delete t.dataset.valueUnmasked,t.dataset.isCustomPattern||(t.removeAttribute("pattern"),delete t.dataset.isCustomPattern),t.classList.remove(this.options.cssClassError),e.parentNode.insertBefore(t,e),e.parentNode.removeChild(e)}},{key:"_onKeystroke",value:function(e){if(!(e.ctrlKey||e.shiftKey||e.altKey||e.metaKey)){13!==e.keyCode&&e.preventDefault();var t=e.target,n=t.dataset.mask||this.options.mask,r=e.type;t.classList.remove(this.options.cssClassError),t.classList.remove(this.options.cssClassSuccess),t.setCustomValidity("");var a,u,c=t.value,l=e.keyCode,s=e.key||e.code.replace(/[^0-9]/g,""),d=s?s.length>1?"":s:"",f=Object(i.a)(c,n),p=!1;switch(r){case"paste":a=Object(i.c)((e.clipboardData||window.clipboardData).getData("Text"),n);break;case"keyup":a=c;break;case"keypress":var h=t.selectionStart;h!==f&&(f=h),a=c.substr(0,f)+d+c.substr(f)}if(u=Object(i.d)(a,n),-1===[35,36,37,38,39,40].indexOf(l)){try{t.value=o.a.mask(u,n,!1),this._validateInput(t)&&(t.dataset.valueUnmasked=u,this.options.doc.querySelector("#".concat(t.getAttribute("id"),"-unmasked")).value=u,this.__applyCssClassState(t,"success"),this.__fireOnUpdate(t.value,t.dataset.valueUnmasked,t)),p=!1}catch(e){this.__applyCssClassState(t,"error"),this.__fireOnInvalid(e,t),p=!0}this._updateCaretPosition(t,n)}p||this._validateInput(t)}}},{key:"_onFocus",value:function(e){var t=e.target,n=t.dataset.mask||this.options.mask;this._updateCaretPosition(t,n)}},{key:"_updateCaretPosition",value:function(e,t){setTimeout((function(){var n=Object(i.a)(e.value,t);e.setSelectionRange(n,n)}),0)}},{key:"_validateInput",value:function(e){var t=e.checkValidity();return t?(this.__applyCssClassState(e,"success"),e.setCustomValidity("")):(this.__applyCssClassState(e,"error"),this.__fireOnInvalid(e.validationMessage,e)),t}},{key:"__fireOnUpdate",value:function(e,t,n){this.options.onUpdate&&this.options.onUpdate(e,t,n)}},{key:"__fireOnInvalid",value:function(e,t){this.options.onInvalid&&this.options.onInvalid(e,t)}},{key:"__applyCssClassState",value:function(e,t){e.hasAttribute("readonly")||e.hasAttribute("disabled")?(e.classList.remove(this.options.cssClassError),e.classList.remove(this.options.cssClassSuccess)):("success"===t&&(e.classList.remove(this.options.cssClassError),e.classList.add(this.options.cssClassSuccess)),"error"===t&&(e.classList.add(this.options.cssClassError),e.classList.remove(this.options.cssClassSuccess)))}}])&&s(t.prototype,n),r&&s(t,r),e}();t.a=d},function(module,__webpack_exports__,__webpack_require__){__webpack_require__.d(__webpack_exports__,"c",(function(){return maskIfNotMasked})),__webpack_require__.d(__webpack_exports__,"d",(function(){return unmask})),__webpack_require__.d(__webpack_exports__,"a",(function(){return findCaretPosition})),__webpack_require__.d(__webpack_exports__,"b",(function(){return generatePatternFromMask}));var __WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask__=__webpack_require__(0),__WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask___default=__webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask__),SUPPORTED_MASKS=["X","a","A","0","z","Z","U"],IS_UNICODE_PROPERTY_SUPPORTED=!1;try{eval("/\\p{L}/u"),IS_UNICODE_PROPERTY_SUPPORTED=!0}catch(e){IS_UNICODE_PROPERTY_SUPPORTED=!1}var isMaskedValue=function e(t,n){void 0===e.__CACHE__&&(e.__CACHE__={});var r="".concat(t,"-").concat(n);if(!e.__CACHE__[r]){var o=unmask(t,n);e.__CACHE__[r]=t===__WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask___default.a.mask(o,n)}return e.__CACHE__[r]},maskIfNotMasked=function e(t,n){void 0===e.__CACHE__&&(e.__CACHE__={});var r="".concat(t,"-").concat(n);if(!e.__CACHE__[r])if(isMaskedValue(t,n))e.__CACHE__[r]=t;else try{e.__CACHE__[r]=__WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask___default.a.mask(t,n,!1)}catch(t){e.__CACHE__[r]=__WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask___default.a.mask("",n)}return e.__CACHE__[r]},generatePatternFromMask=function e(t){void 0===e.__CACHE__&&(e.__CACHE__={});var n=t;if(!e.__CACHE__[n]){var r=t.split(""),o="";r.forEach((function(e){switch(e){case"X":o+="([^ -~])";break;case"a":case"A":o+=IS_UNICODE_PROPERTY_SUPPORTED?"\\p{L}":"((?:[A-Za-zªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙՠ-ֈא-תׯ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࡠ-ࡪࢠ-ࢴࢶ-ࢽऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱৼਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄຆ-ຊຌ-ຣລວ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛱ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡸᢀ-ᢄᢇ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-ᲈᲐ-ᲺᲽ-Ჿᳩ-ᳬᳮ-ᳳᳵᳶᳺᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎↃↄⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々〆〱-〵〻〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿯ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛥꜗ-ꜟꜢ-ꞈꞋ-ꞿꟂ-Ᶎꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꣾꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭧꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf2d-\udf40\udf42-\udf49\udf50-\udf75\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf]|\ud801[\udc00-\udc9d\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00\ude10-\ude13\ude15-\ude17\ude19-\ude35\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2\udd00-\udd23\udf00-\udf1c\udf27\udf30-\udf45\udfe0-\udff6]|\ud804[\udc03-\udc37\udc83-\udcaf\udcd0-\udce8\udd03-\udd26\udd44\udd50-\udd72\udd76\udd83-\uddb2\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude2b\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udede\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3d\udf50\udf5d-\udf61]|\ud805[\udc00-\udc34\udc47-\udc4a\udc5f\udc80-\udcaf\udcc4\udcc5\udcc7\udd80-\uddae\uddd8-\udddb\ude00-\ude2f\ude44\ude80-\udeaa\udeb8\udf00-\udf1a]|\ud806[\udc00-\udc2b\udca0-\udcdf\udcff\udda0-\udda7\uddaa-\uddd0\udde1\udde3\ude00\ude0b-\ude32\ude3a\ude50\ude5c-\ude89\ude9d\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc2e\udc40\udc72-\udc8f\udd00-\udd06\udd08\udd09\udd0b-\udd30\udd46\udd60-\udd65\udd67\udd68\udd6a-\udd89\udd98\udee0-\udef2]|\ud808[\udc00-\udf99]|\ud809[\udc80-\udd43]|[\ud80c\ud81c-\ud820\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872\ud874-\ud879][\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf2f\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\ude40-\ude7f\udf00-\udf4a\udf50\udf93-\udf9f\udfe0\udfe1\udfe3]|\ud821[\udc00-\udff7]|\ud822[\udc00-\udef2]|\ud82c[\udc00-\udd1e\udd50-\udd52\udd64-\udd67\udd70-\udefb]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud838[\udd00-\udd2c\udd37-\udd3d\udd4e\udec0-\udeeb]|\ud83a[\udc00-\udcc4\udd00-\udd43\udd4b]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1\udeb0-\udfff]|\ud87a[\udc00-\udfe0]|\ud87e[\udc00-\ude1d]))";break;case"0":o+="([0-9])";break;case"z":case"Z":o+=IS_UNICODE_PROPERTY_SUPPORTED?"([0-9]|\\p{L})":"([0-9]|(?:[A-Za-zªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙՠ-ֈא-תׯ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࡠ-ࡪࢠ-ࢴࢶ-ࢽऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱৼਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄຆ-ຊຌ-ຣລວ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛱ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡸᢀ-ᢄᢇ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-ᲈᲐ-ᲺᲽ-Ჿᳩ-ᳬᳮ-ᳳᳵᳶᳺᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎↃↄⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々〆〱-〵〻〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿯ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛥꜗ-ꜟꜢ-ꞈꞋ-ꞿꟂ-Ᶎꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꣾꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭧꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf2d-\udf40\udf42-\udf49\udf50-\udf75\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf]|\ud801[\udc00-\udc9d\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00\ude10-\ude13\ude15-\ude17\ude19-\ude35\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2\udd00-\udd23\udf00-\udf1c\udf27\udf30-\udf45\udfe0-\udff6]|\ud804[\udc03-\udc37\udc83-\udcaf\udcd0-\udce8\udd03-\udd26\udd44\udd50-\udd72\udd76\udd83-\uddb2\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude2b\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udede\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3d\udf50\udf5d-\udf61]|\ud805[\udc00-\udc34\udc47-\udc4a\udc5f\udc80-\udcaf\udcc4\udcc5\udcc7\udd80-\uddae\uddd8-\udddb\ude00-\ude2f\ude44\ude80-\udeaa\udeb8\udf00-\udf1a]|\ud806[\udc00-\udc2b\udca0-\udcdf\udcff\udda0-\udda7\uddaa-\uddd0\udde1\udde3\ude00\ude0b-\ude32\ude3a\ude50\ude5c-\ude89\ude9d\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc2e\udc40\udc72-\udc8f\udd00-\udd06\udd08\udd09\udd0b-\udd30\udd46\udd60-\udd65\udd67\udd68\udd6a-\udd89\udd98\udee0-\udef2]|\ud808[\udc00-\udf99]|\ud809[\udc80-\udd43]|[\ud80c\ud81c-\ud820\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872\ud874-\ud879][\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf2f\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\ude40-\ude7f\udf00-\udf4a\udf50\udf93-\udf9f\udfe0\udfe1\udfe3]|\ud821[\udc00-\udff7]|\ud822[\udc00-\udef2]|\ud82c[\udc00-\udd1e\udd50-\udd52\udd64-\udd67\udd70-\udefb]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud838[\udd00-\udd2c\udd37-\udd3d\udd4e\udec0-\udeeb]|\ud83a[\udc00-\udcc4\udd00-\udd43\udd4b]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1\udeb0-\udfff]|\ud87a[\udc00-\udfe0]|\ud87e[\udc00-\ude1d]))";break;case"U":o+=IS_UNICODE_PROPERTY_SUPPORTED?"(([0-9])|(\\s)|([.,/#!$%^&*;:{}=-_`~()])|(\\p{L}))":"(([0-9])|(\\s)|([.,/#!$%^&*;:{}=-_`~()])|(?:[A-Za-zªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙՠ-ֈא-תׯ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࡠ-ࡪࢠ-ࢴࢶ-ࢽऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱৼਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄຆ-ຊຌ-ຣລວ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛱ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡸᢀ-ᢄᢇ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-ᲈᲐ-ᲺᲽ-Ჿᳩ-ᳬᳮ-ᳳᳵᳶᳺᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎↃↄⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々〆〱-〵〻〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿯ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛥꜗ-ꜟꜢ-ꞈꞋ-ꞿꟂ-Ᶎꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꣾꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭧꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf2d-\udf40\udf42-\udf49\udf50-\udf75\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf]|\ud801[\udc00-\udc9d\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00\ude10-\ude13\ude15-\ude17\ude19-\ude35\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2\udd00-\udd23\udf00-\udf1c\udf27\udf30-\udf45\udfe0-\udff6]|\ud804[\udc03-\udc37\udc83-\udcaf\udcd0-\udce8\udd03-\udd26\udd44\udd50-\udd72\udd76\udd83-\uddb2\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude2b\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udede\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3d\udf50\udf5d-\udf61]|\ud805[\udc00-\udc34\udc47-\udc4a\udc5f\udc80-\udcaf\udcc4\udcc5\udcc7\udd80-\uddae\uddd8-\udddb\ude00-\ude2f\ude44\ude80-\udeaa\udeb8\udf00-\udf1a]|\ud806[\udc00-\udc2b\udca0-\udcdf\udcff\udda0-\udda7\uddaa-\uddd0\udde1\udde3\ude00\ude0b-\ude32\ude3a\ude50\ude5c-\ude89\ude9d\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc2e\udc40\udc72-\udc8f\udd00-\udd06\udd08\udd09\udd0b-\udd30\udd46\udd60-\udd65\udd67\udd68\udd6a-\udd89\udd98\udee0-\udef2]|\ud808[\udc00-\udf99]|\ud809[\udc80-\udd43]|[\ud80c\ud81c-\ud820\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872\ud874-\ud879][\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf2f\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\ude40-\ude7f\udf00-\udf4a\udf50\udf93-\udf9f\udfe0\udfe1\udfe3]|\ud821[\udc00-\udff7]|\ud822[\udc00-\udef2]|\ud82c[\udc00-\udd1e\udd50-\udd52\udd64-\udd67\udd70-\udefb]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud838[\udd00-\udd2c\udd37-\udd3d\udd4e\udec0-\udeeb]|\ud83a[\udc00-\udcc4\udd00-\udd43\udd4b]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1\udeb0-\udfff]|\ud87a[\udc00-\udfe0]|\ud87e[\udc00-\ude1d]))";break;default:o+=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}})),e.__CACHE__[n]=o}return e.__CACHE__[n]},unmask=function e(t,n){void 0===e.__CACHE__&&(e.__CACHE__={});var r="".concat(t,"-").concat(n);if(!e.__CACHE__[r]){for(var o=n.split(""),i=t.split(""),a="",u=0;u-1){if(!new RegExp(generatePatternFromMask(l),IS_UNICODE_PROPERTY_SUPPORTED?"u":"").test(c))break;a+=c}}e.__CACHE__[r]=a.toLocaleLowerCase()}return e.__CACHE__[r]},findCaretPosition=function e(t,n){void 0===e.__CACHE__&&(e.__CACHE__={});var r="".concat(t,"-").concat(n);if(!e.__CACHE__[r]){var o=n.split(""),i=t.split("");i.length-1&&!new RegExp(generatePatternFromMask(c),IS_UNICODE_PROPERTY_SUPPORTED?"u":"").test(i[u])){a=u;break}}e.__CACHE__[r]=a<0?i.length:a}return e.__CACHE__[r]}},function(e,t,n){var r=n(6);t.a=r.a},function(e,t,n){var r=n(7),o=n.n(r);function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{};c(this,e),this.options=a({},{elements:".bbj-number-masked",doc:document,cssClassError:"bbj-mask-error",cssClassSuccess:"bbj-mask-success",onUpdate:null,onInvalid:null},{},t),this._actualInputHandler=this._actualInputHandler.bind(this),this._unmaskedInputHandler=this._unmaskedInputHandler.bind(this),this.refresh()}var t,n,r;return t=e,(n=[{key:"refresh",value:function(){for(var e,t,n="string"==typeof this.options.elements?this.options.doc.querySelectorAll(this.options.elements):this.options.elements,r=0;r-1;this._wrap(e,o)}else console.warn("BBjMasking: Invalid input element. The element will be ignored",e)}},{key:"destroy",value:function(){for(var e,t,n="string"==typeof this.options.elements?this.options.doc.querySelectorAll(this.options.elements):this.options.elements,r=0;r-1&&this._unwrap(e)}},{key:"_wrap",value:function(e,t){var n=e.getAttribute("id"),r=e.getAttribute("name"),i=e.dataset.step||null,a=e.dataset.max||null,u=e.dataset.min||null,c=e.dataset.groupingSeparator||",",l=e.dataset.decimalSeparator||".",d=e.dataset.forceTrailingZeros||null,f=e.dataset.mask||"",p=e.getAttribute("class"),h=e.getAttribute("required")||null,g=null,b=null;if(t?b=(g=e.parentNode).querySelector(".numberInputMask__unmaskedInput"):(g=this.options.doc.createElement("span"),b=this.options.doc.createElement("input")),t||(e.parentNode.insertBefore(g,e),e.hasAttribute("readonly")||e.hasAttribute("disabled")||(e.addEventListener("click",this._actualInputHandler),e.addEventListener("focusin",this._actualInputHandler))),e.dataset.valueUnmasked=e.value||0,e.dataset.groupingSeparator=c,e.dataset.decimalSeparator=l,e.dataset.forceTrailingZeros=d,e.value=o.a.mask(e.dataset.valueUnmasked,f,c,l,d).trim(),e.classList.add("numberInputMask__textInput",this.options.cssClassSuccess),b.value=e.dataset.valueUnmasked,b.setAttribute("aria-hidden","true"),b.setAttribute("type","hidden"),b.setAttribute("class",p),n&&b.setAttribute("id","".concat(n,"-unmasked")),r&&b.setAttribute("name","".concat(r,"-unmasked")),h&&b.setAttribute("required","required"),i)b.setAttribute("step",i);else{var y=s(b.value),m="1";y>0&&(m=".".concat(Array(y).join("0"),"1")),b.setAttribute("step",m)}return u&&b.setAttribute("min",u),a&&b.setAttribute("max",a),b.dataset.inputId=n,b.dataset.mask=f,b.dataset.groupingSeparator=c,b.dataset.decimalSeparator=l,d&&(b.dataset.forceTrailingZeros=d),t||(b.classList.add("numberInputMask__unmaskedInput"),b.addEventListener("keydown",this._unmaskedInputHandler),b.addEventListener("keyup",this._unmaskedInputHandler),b.addEventListener("focusout",this._unmaskedInputHandler),g.setAttribute("class","numberInputMask__wrap"),g.appendChild(b),g.appendChild(e)),isNaN(Number(e.dataset.valueUnmasked))?e.classList.add(this.options.cssClassError):this._validateInput(b,e)&&this.__fireOnUpdate(e.value,e.dataset.valueUnmasked,e),g}},{key:"_unwrap",value:function(e){var t=e.querySelector(".numberInputMask__textInput"),n=t.id,r=e.querySelector("#".concat(n,"-unmasked"));r.removeEventListener("keyup",this._unmaskedInputHandler),r.removeEventListener("keypress",this._unmaskedInputHandler),r.removeEventListener("focusout",this._unmaskedInputHandler),e.removeChild(r),t.removeEventListener("click",this._actualInputHandler),t.removeEventListener("focusin",this._actualInputHandler),t.classList.remove("numberInputMask__textInput"),t.classList.remove(this.options.cssClassError),t.classList.remove(this.options.cssClassSuccess),delete t.dataset.valueUnmasked,e.parentNode.insertBefore(t,e),e.parentNode.removeChild(e)}},{key:"_actualInputHandler",value:function(e){var t=e.target,n=t.id,r=this.options.doc.querySelector("#".concat(n,"-unmasked"));t.setAttribute("aria-hidden","true"),t.setAttribute("type","hidden"),r.removeAttribute("aria-hidden"),r.setAttribute("type","number"),this._validateInput(r,t),setTimeout((function(){r.focus();var e=String(r.value).length;r.type="text",r.setSelectionRange(e,e),r.type="number"}),0)}},{key:"_unmaskedInputHandler",value:function(e){var t,n=e.target,r=e.keyCode,i=n.dataset.mask,a=n.dataset.groupingSeparator,u=n.dataset.decimalSeparator,c=n.dataset.forceTrailingZeros,l=n.dataset.inputId,s=this.options.doc.querySelector("#".concat(l)),d=!1,f=this._validateInput(n,s);try{d=o.a.mask(n.value||0,i,a,u,c,!1).trim()}catch(e){d=!1,this.__applyCssClassState(n,s,"error"),this.__fireOnInvalid(e,s)}t=d&&f,([13,27].indexOf(r)>-1||"focusout"===e.type)&&(n.classList.remove(this.options.cssClassError),n.classList.remove(this.options.cssClassSuccess),n.setAttribute("aria-hidden","true"),n.setAttribute("type","hidden"),s.removeAttribute("aria-hidden"),s.setAttribute("type","text"),s.classList.add(this.options.cssClassSuccess),t?(s.value=d,s.dataset.valueUnmasked=n.value,this.__fireOnUpdate(d,n.value,s)):(n.value=s.dataset.valueUnmasked,this.__applyCssClassState(n,s,"success")))}},{key:"_validateInput",value:function(e,t){var n=!0,r=Number(e.value);if("hidden"!==e.getAttribute("type")||isNaN(r))n=e.checkValidity();else{var o=e.getAttribute("max"),i=e.getAttribute("min"),a=e.getAttribute("step");i&&(n=n&&r>=Number(i)),o&&(n=n&&r<=Number(o)),a&&(n=n&&s(a)===s(e.value))}return n?this.__applyCssClassState(e,t,"success"):(this.__applyCssClassState(e,t,"error"),this.__fireOnInvalid(e.validationMessage||"Validity check fails",t)),n}},{key:"__fireOnUpdate",value:function(e,t,n){this.options.onUpdate&&this.options.onUpdate(e,t,n)}},{key:"__fireOnInvalid",value:function(e,t){this.options.onInvalid&&this.options.onInvalid(e,t)}},{key:"__applyCssClassState",value:function(e,t,n){t.hasAttribute("readonly")||t.hasAttribute("disabled")?(t.classList.remove(this.options.cssClassError),t.classList.remove(this.options.cssClassSuccess),e.classList.remove(this.options.cssClassError),e.classList.remove(this.options.cssClassSuccess)):("success"===n&&(t.classList.remove(this.options.cssClassError),t.classList.add(this.options.cssClassSuccess),e.classList.remove(this.options.cssClassError),e.classList.add(this.options.cssClassSuccess)),"error"===n&&(t.classList.add(this.options.cssClassError),t.classList.remove(this.options.cssClassSuccess),e.classList.add(this.options.cssClassError),e.classList.remove(this.options.cssClassSuccess)))}}])&&l(t.prototype,n),r&&l(t,r),e}();t.a=d},function(e,t){e.exports=__WEBPACK_EXTERNAL_MODULE_7__}])},"object"===_typeof(exports)&&"object"===_typeof(module)?module.exports=factory(__webpack_require__(13),__webpack_require__(14)):(__WEBPACK_AMD_DEFINE_ARRAY__=[__webpack_require__(13),__webpack_require__(14)],void 0===(__WEBPACK_AMD_DEFINE_RESULT__="function"==typeof(__WEBPACK_AMD_DEFINE_FACTORY__=factory)?__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports,__WEBPACK_AMD_DEFINE_ARRAY__):__WEBPACK_AMD_DEFINE_FACTORY__)||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__))}).call(this,__webpack_require__(5)(module))},function(e,t,n){"use strict";function r(e,t){for(var n=0;n2&&void 0!==arguments[2])||arguments[2];e=String(e);var r=(t=String(t)).length,l=e.length;if(l>r){if(n)return e;throw{name:"MaskIsTooShortError",message:"MaskIsTooShortError: Mask is shorter than the passed string"}}for(var s=new Array(r),d=0,f="",p=0;p?@[]^_`{|}~".indexOf(v)>-1?s[p]=v:c(n,s,p,e)}else s[p]=" ";++d;break;default:s[p]=f}if(d2&&void 0!==arguments[2]?arguments[2]:",",o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".",i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],u=n.length;if(0===u){if(a)return str;throw{name:"MaskError",message:"MaskError: Mask is empty"}}for(var c=0,l=0,s=!1,d=0;dc){if(a)return t.toString();throw{name:"MaskError",message:"MaskError: Number is too large for mask"}}if(y>l){p=e._round(p,l),g=(h=e._toCharArray(p)).length,b=0,y=0,s=!1;for(var v=0;vc){if(a)return t.toString();throw{name:"MaskError",message:"MaskError: Number is too large for mask"}}}var _=" ",w=" ",O=0,k=0,C=0;"*"==n.charAt(0)&&(_="*");var x=_,D=e._getSign(p)<0,E=g>0||n.indexOf("0")>=0,S=!1,j=!1;s=!1;for(var M=new Array(u),P=0;P0?M[k]=r:(M[k]=_,s||(C=P)),++k;break;case"-":j||" "!=w?M[k]=D?"-":_:(D&&(w="-"),M[k]=_,C=s?-1:P),++k;break;case"+":j||" "!=w?M[k]=D?"-":"+":(w=D?"-":"+",M[k]=_,C=s?-1:P),++k;break;case"$":j||" "!=w?M[k]="$":(w="$",M[k]=_,C=s?-1:P),++k;break;case"(":j||" "!=w?M[k]=D?"(":s?" ":_:(D&&(w="("),M[k]=_,C=s?-1:P),++k;break;case")":M[k]=D?")":s?" ":_,++k;break;case"C":P=u;)--C;M[C]==x&&(M[C]=w)}return M.join("")}},{key:"_shift",value:function(e,t,n){n&&(t=-t);var r=(""+e).split("e");return+(r[0]+"e"+(r[1]?+r[1]+t:t))}},{key:"_round",value:function(t,n){return e._shift(Math.round(e._shift(t,n,!1)),n,!0)}},{key:"_toCharArray",value:function(t){var n=e._getSign(t),r=[];if(0!==n){var o=n<0?"".concat(-1*t.toString()):t.toString();o.length>1&&"0"==o.charAt(0)&&(o=o.substring(1)),r=o.split("")}return r}},{key:"_getSign",value:function(e){return(e>0)-(e<0)||+e}}],(n=null)&&r(t.prototype,n),o&&r(t,o),e}();t.default=o},function(e,t,n){(function(t){e.exports=t.flatpickr=n(48)}).call(this,n(2))},function(e,t,n){"use strict";var r,o,i;function a(e){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)} /* flatpickr v4.6.3, @license MIT */i=function(){ /*! ***************************************************************************** Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,4 +13,4 @@ and limitations under the License. ***************************************************************************** */ var e=function(){return(e=Object.assign||function(e){for(var t,n=1,r=arguments.length;n",noCalendar:!1,now:new Date,onChange:[],onClose:[],onDayCreate:[],onDestroy:[],onKeyDown:[],onMonthChange:[],onOpen:[],onParseConfig:[],onReady:[],onValueUpdate:[],onYearChange:[],onPreCalendarPosition:[],plugins:[],position:"auto",positionElement:void 0,prevArrow:"",shorthandCurrentMonth:!1,showMonths:1,static:!1,time_24hr:!1,weekNumbers:!1,wrap:!1},r={weekdays:{shorthand:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],longhand:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},months:{shorthand:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],longhand:["January","February","March","April","May","June","July","August","September","October","November","December"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,ordinal:function(e){var t=e%100;if(t>3&&t<21)return"th";switch(t%10){case 1:return"st";case 2:return"nd";case 3:return"rd";default:return"th"}},rangeSeparator:" to ",weekAbbreviation:"Wk",scrollTitle:"Scroll to increment",toggleTitle:"Click to toggle",amPM:["AM","PM"],yearAriaLabel:"Year",hourAriaLabel:"Hour",minuteAriaLabel:"Minute",time_24hr:!1},o=function(e){return("0"+e).slice(-2)},i=function(e){return!0===e?1:0};function u(e,t,n){var r;return void 0===n&&(n=!1),function(){var o=this,i=arguments;null!==r&&clearTimeout(r),r=window.setTimeout((function(){r=null,n||e.apply(o,i)}),t),n&&!r&&e.apply(o,i)}}var c=function(e){return e instanceof Array?e:[e]};function l(e,t,n){if(!0===n)return e.classList.add(t);e.classList.remove(t)}function s(e,t,n){var r=window.document.createElement(e);return t=t||"",n=n||"",r.className=t,void 0!==n&&(r.textContent=n),r}function d(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function f(e,t){var n=s("div","numInputWrapper"),r=s("input","numInput "+e),o=s("span","arrowUp"),i=s("span","arrowDown");if(-1===navigator.userAgent.indexOf("MSIE 9.0")?r.type="number":(r.type="text",r.pattern="\\d*"),void 0!==t)for(var a in t)r.setAttribute(a,t[a]);return n.appendChild(r),n.appendChild(o),n.appendChild(i),n}var p=function(){},h=function(e,t,n){return n.months[t?"shorthand":"longhand"][e]},g={D:p,F:function(e,t,n){e.setMonth(n.months.longhand.indexOf(t))},G:function(e,t){e.setHours(parseFloat(t))},H:function(e,t){e.setHours(parseFloat(t))},J:function(e,t){e.setDate(parseFloat(t))},K:function(e,t,n){e.setHours(e.getHours()%12+12*i(new RegExp(n.amPM[1],"i").test(t)))},M:function(e,t,n){e.setMonth(n.months.shorthand.indexOf(t))},S:function(e,t){e.setSeconds(parseFloat(t))},U:function(e,t){return new Date(1e3*parseFloat(t))},W:function(e,t,n){var r=parseInt(t),o=new Date(e.getFullYear(),0,2+7*(r-1),0,0,0,0);return o.setDate(o.getDate()-o.getDay()+n.firstDayOfWeek),o},Y:function(e,t){e.setFullYear(parseFloat(t))},Z:function(e,t){return new Date(t)},d:function(e,t){e.setDate(parseFloat(t))},h:function(e,t){e.setHours(parseFloat(t))},i:function(e,t){e.setMinutes(parseFloat(t))},j:function(e,t){e.setDate(parseFloat(t))},l:p,m:function(e,t){e.setMonth(parseFloat(t)-1)},n:function(e,t){e.setMonth(parseFloat(t)-1)},s:function(e,t){e.setSeconds(parseFloat(t))},u:function(e,t){return new Date(parseFloat(t))},w:p,y:function(e,t){e.setFullYear(2e3+parseFloat(t))}},b={D:"(\\w+)",F:"(\\w+)",G:"(\\d\\d|\\d)",H:"(\\d\\d|\\d)",J:"(\\d\\d|\\d)\\w+",K:"",M:"(\\w+)",S:"(\\d\\d|\\d)",U:"(.+)",W:"(\\d\\d|\\d)",Y:"(\\d{4})",Z:"(.+)",d:"(\\d\\d|\\d)",h:"(\\d\\d|\\d)",i:"(\\d\\d|\\d)",j:"(\\d\\d|\\d)",l:"(\\w+)",m:"(\\d\\d|\\d)",n:"(\\d\\d|\\d)",s:"(\\d\\d|\\d)",u:"(.+)",w:"(\\d\\d|\\d)",y:"(\\d{2})"},y={Z:function(e){return e.toISOString()},D:function(e,t,n){return t.weekdays.shorthand[y.w(e,t,n)]},F:function(e,t,n){return h(y.n(e,t,n)-1,!1,t)},G:function(e,t,n){return o(y.h(e,t,n))},H:function(e){return o(e.getHours())},J:function(e,t){return void 0!==t.ordinal?e.getDate()+t.ordinal(e.getDate()):e.getDate()},K:function(e,t){return t.amPM[i(e.getHours()>11)]},M:function(e,t){return h(e.getMonth(),!0,t)},S:function(e){return o(e.getSeconds())},U:function(e){return e.getTime()/1e3},W:function(e,t,n){return n.getWeek(e)},Y:function(e){return e.getFullYear()},d:function(e){return o(e.getDate())},h:function(e){return e.getHours()%12?e.getHours()%12:12},i:function(e){return o(e.getMinutes())},j:function(e){return e.getDate()},l:function(e,t){return t.weekdays.longhand[e.getDay()]},m:function(e){return o(e.getMonth()+1)},n:function(e){return e.getMonth()+1},s:function(e){return e.getSeconds()},u:function(e){return e.getTime()},w:function(e){return e.getDay()},y:function(e){return String(e.getFullYear()).substring(2)}},m=function(e){var t=e.config,o=void 0===t?n:t,i=e.l10n,a=void 0===i?r:i;return function(e,t,n){var r=n||a;return void 0!==o.formatDate?o.formatDate(e,t,r):t.split("").map((function(t,n,i){return y[t]&&"\\"!==i[n-1]?y[t](e,r,o):"\\"!==t?t:""})).join("")}},v=function(e){var t=e.config,o=void 0===t?n:t,i=e.l10n,a=void 0===i?r:i;return function(e,t,r,i){if(0===e||e){var u,c=i||a,l=e;if(e instanceof Date)u=new Date(e.getTime());else if("string"!=typeof e&&void 0!==e.toFixed)u=new Date(e);else if("string"==typeof e){var s=t||(o||n).dateFormat,d=String(e).trim();if("today"===d)u=new Date,r=!0;else if(/Z$/.test(d)||/GMT$/.test(d))u=new Date(e);else if(o&&o.parseDate)u=o.parseDate(e,s);else{u=o&&o.noCalendar?new Date((new Date).setHours(0,0,0,0)):new Date((new Date).getFullYear(),0,1,0,0,0,0);for(var f=void 0,p=[],h=0,y=0,m="";ha&&(s=n===y.hourElement?s-a-i(!y.amPM):r,f&&R(void 0,1,y.hourElement)),y.amPM&&d&&(1===u?s+c===23:Math.abs(s-c)>u)&&(y.amPM.textContent=y.l10n.amPM[i(y.amPM.textContent===y.l10n.amPM[0])]),n.value=o(s)}}(e);var t=y._input.value;D(),me(),y._input.value!==t&&y._debouncedChange()}function D(){if(void 0!==y.hourElement&&void 0!==y.minuteElement){var e,t,n=(parseInt(y.hourElement.value.slice(-2),10)||0)%24,r=(parseInt(y.minuteElement.value,10)||0)%60,o=void 0!==y.secondElement?(parseInt(y.secondElement.value,10)||0)%60:0;void 0!==y.amPM&&(e=n,t=y.amPM.textContent,n=e%12+12*i(t===y.l10n.amPM[1]));var a=void 0!==y.config.minTime||y.config.minDate&&y.minDateHasTime&&y.latestSelectedDateObj&&0===_(y.latestSelectedDateObj,y.config.minDate,!0);if(void 0!==y.config.maxTime||y.config.maxDate&&y.maxDateHasTime&&y.latestSelectedDateObj&&0===_(y.latestSelectedDateObj,y.config.maxDate,!0)){var u=void 0!==y.config.maxTime?y.config.maxTime:y.config.maxDate;(n=Math.min(n,u.getHours()))===u.getHours()&&(r=Math.min(r,u.getMinutes())),r===u.getMinutes()&&(o=Math.min(o,u.getSeconds()))}if(a){var c=void 0!==y.config.minTime?y.config.minTime:y.config.minDate;(n=Math.max(n,c.getHours()))===c.getHours()&&(r=Math.max(r,c.getMinutes())),r===c.getMinutes()&&(o=Math.max(o,c.getSeconds()))}j(n,r,o)}}function E(e){var t=e||y.latestSelectedDateObj;t&&j(t.getHours(),t.getMinutes(),t.getSeconds())}function S(){var e=y.config.defaultHour,t=y.config.defaultMinute,n=y.config.defaultSeconds;if(void 0!==y.config.minDate){var r=y.config.minDate.getHours(),o=y.config.minDate.getMinutes();(e=Math.max(e,r))===r&&(t=Math.max(o,t)),e===r&&t===o&&(n=y.config.minDate.getSeconds())}if(void 0!==y.config.maxDate){var i=y.config.maxDate.getHours(),a=y.config.maxDate.getMinutes();(e=Math.min(e,i))===i&&(t=Math.min(a,t)),e===i&&t===a&&(n=y.config.maxDate.getSeconds())}j(e,t,n)}function j(e,t,n){void 0!==y.latestSelectedDateObj&&y.latestSelectedDateObj.setHours(e%24,t,n||0,0),y.hourElement&&y.minuteElement&&!y.isMobile&&(y.hourElement.value=o(y.config.time_24hr?e:(12+e)%12+12*i(e%12==0)),y.minuteElement.value=o(t),void 0!==y.amPM&&(y.amPM.textContent=y.l10n.amPM[i(e>=12)]),void 0!==y.secondElement&&(y.secondElement.value=o(n)))}function M(e){var t=parseInt(e.target.value)+(e.delta||0);(t/1e3>1||"Enter"===e.key&&!/[^\d]/.test(t.toString()))&&Z(t)}function P(e,t,n,r){return t instanceof Array?t.forEach((function(t){return P(e,t,n,r)})):e instanceof Array?e.forEach((function(e){return P(e,t,n,r)})):(e.addEventListener(t,n,r),void y._handlers.push({element:e,event:t,handler:n,options:r}))}function T(e){return function(t){1===t.which&&e(t)}}function I(){pe("onChange")}function N(e,t){var n=void 0!==e?y.parseDate(e):y.latestSelectedDateObj||(y.config.minDate&&y.config.minDate>y.now?y.config.minDate:y.config.maxDate&&y.config.maxDate=0&&_(e,y.selectedDates[1])<=0}(t)&&!ge(t)&&i.classList.add("inRange"),y.weekNumbers&&1===y.config.showMonths&&"prevMonthDay"!==e&&n%7==1&&y.weekNumbers.insertAdjacentHTML("beforeend",""+y.config.getWeek(t)+""),pe("onDayCreate",i),i}function F(e){e.focus(),"range"===y.config.mode&&te(e)}function G(e){for(var t=e>0?0:y.config.showMonths-1,n=e>0?y.config.showMonths:-1,r=t;r!=n;r+=e)for(var o=y.daysContainer.children[r],i=e>0?0:o.children.length-1,a=e>0?o.children.length:-1,u=i;u!=a;u+=e){var c=o.children[u];if(-1===c.className.indexOf("hidden")&&X(c.dateObj))return c}}function H(e,t){var n=Q(document.activeElement||document.body),r=void 0!==e?e:n?document.activeElement:void 0!==y.selectedDateElem&&Q(y.selectedDateElem)?y.selectedDateElem:void 0!==y.todayDateElem&&Q(y.todayDateElem)?y.todayDateElem:G(t>0?1:-1);return void 0===r?y._input.focus():n?void function(e,t){for(var n=-1===e.className.indexOf("Month")?e.dateObj.getMonth():y.currentMonth,r=t>0?y.config.showMonths:-1,o=t>0?1:-1,i=n-y.currentMonth;i!=r;i+=o)for(var a=y.daysContainer.children[i],u=n-y.currentMonth===i?e.$i+t:t<0?a.children.length-1:0,c=a.children.length,l=u;l>=0&&l0?c:-1);l+=o){var s=a.children[l];if(-1===s.className.indexOf("hidden")&&X(s.dateObj)&&Math.abs(e.$i-l)>=Math.abs(t))return F(s)}y.changeMonth(o),H(G(o),0)}(r,t):F(r)}function U(e,t){for(var n=(new Date(e,t,1).getDay()-y.l10n.firstDayOfWeek+7)%7,r=y.utils.getDaysInMonth((t-1+12)%12),o=y.utils.getDaysInMonth(t),i=window.document.createDocumentFragment(),a=y.config.showMonths>1,u=a?"prevMonthDay hidden":"prevMonthDay",c=a?"nextMonthDay hidden":"nextMonthDay",l=r+1-n,d=0;l<=r;l++,d++)i.appendChild(L(u,new Date(e,t-1,l),l,d));for(l=1;l<=o;l++,d++)i.appendChild(L("",new Date(e,t,l),l,d));for(var f=o+1;f<=42-n&&(1===y.config.showMonths||d%7!=0);f++,d++)i.appendChild(L(c,new Date(e,t+1,f%o),f,d));var p=s("div","dayContainer");return p.appendChild(i),p}function W(){if(void 0!==y.daysContainer){d(y.daysContainer),y.weekNumbers&&d(y.weekNumbers);for(var e=document.createDocumentFragment(),t=0;t1||"dropdown"!==y.config.monthSelectorType)){var e=function(e){return!(void 0!==y.config.minDate&&y.currentYear===y.config.minDate.getFullYear()&&ey.config.maxDate.getMonth())};y.monthsDropdownContainer.tabIndex=-1,y.monthsDropdownContainer.innerHTML="";for(var t=0;t<12;t++)if(e(t)){var n=s("option","flatpickr-monthDropdown-month");n.value=new Date(y.currentYear,t).getMonth().toString(),n.textContent=h(t,y.config.shorthandCurrentMonth,y.l10n),n.tabIndex=-1,y.currentMonth===t&&(n.selected=!0),y.monthsDropdownContainer.appendChild(n)}}}function Y(){var e,t=s("div","flatpickr-month"),n=window.document.createDocumentFragment();y.config.showMonths>1||"static"===y.config.monthSelectorType?e=s("span","cur-month"):(y.monthsDropdownContainer=s("select","flatpickr-monthDropdown-months"),P(y.monthsDropdownContainer,"change",(function(e){var t=e.target,n=parseInt(t.value,10);y.changeMonth(n-y.currentMonth),pe("onMonthChange")})),B(),e=y.monthsDropdownContainer);var r=f("cur-year",{tabindex:"-1"}),o=r.getElementsByTagName("input")[0];o.setAttribute("aria-label",y.l10n.yearAriaLabel),y.config.minDate&&o.setAttribute("min",y.config.minDate.getFullYear().toString()),y.config.maxDate&&(o.setAttribute("max",y.config.maxDate.getFullYear().toString()),o.disabled=!!y.config.minDate&&y.config.minDate.getFullYear()===y.config.maxDate.getFullYear());var i=s("div","flatpickr-current-month");return i.appendChild(e),i.appendChild(r),n.appendChild(i),t.appendChild(n),{container:t,yearElement:o,monthElement:e}}function z(){d(y.monthNav),y.monthNav.appendChild(y.prevMonthNav),y.config.showMonths&&(y.yearElements=[],y.monthElements=[]);for(var e=y.config.showMonths;e--;){var t=Y();y.yearElements.push(t.yearElement),y.monthElements.push(t.monthElement),y.monthNav.appendChild(t.container)}y.monthNav.appendChild(y.nextMonthNav)}function V(){y.weekdayContainer?d(y.weekdayContainer):y.weekdayContainer=s("div","flatpickr-weekdays");for(var e=y.config.showMonths;e--;){var t=s("div","flatpickr-weekdaycontainer");y.weekdayContainer.appendChild(t)}return K(),y.weekdayContainer}function K(){if(y.weekdayContainer){var e=y.l10n.firstDayOfWeek,t=y.l10n.weekdays.shorthand.slice();e>0&&e\n "+t.join("")+"\n \n "}}function $(e,t){void 0===t&&(t=!0);var n=t?e:e-y.currentMonth;n<0&&!0===y._hidePrevMonthArrow||n>0&&!0===y._hideNextMonthArrow||(y.currentMonth+=n,(y.currentMonth<0||y.currentMonth>11)&&(y.currentYear+=y.currentMonth>11?1:-1,y.currentMonth=(y.currentMonth+12)%12,pe("onYearChange"),B()),W(),pe("onMonthChange"),be())}function q(e){return!(!y.config.appendTo||!y.config.appendTo.contains(e))||y.calendarContainer.contains(e)}function J(e){if(y.isOpen&&!y.config.inline){var t=function(e){return"function"==typeof e.composedPath?e.composedPath()[0]:e.target}(e),n=q(t),r=t===y.input||t===y.altInput||y.element.contains(t)||e.path&&e.path.indexOf&&(~e.path.indexOf(y.input)||~e.path.indexOf(y.altInput)),o="blur"===e.type?r&&e.relatedTarget&&!q(e.relatedTarget):!r&&!n&&!q(e.relatedTarget),i=!y.config.ignoredFocusElements.some((function(e){return e.contains(t)}));o&&i&&(void 0!==y.timeContainer&&void 0!==y.minuteElement&&void 0!==y.hourElement&&x(),y.close(),"range"===y.config.mode&&1===y.selectedDates.length&&(y.clear(!1),y.redraw()))}}function Z(e){if(!(!e||y.config.minDate&&ey.config.maxDate.getFullYear())){var t=e,n=y.currentYear!==t;y.currentYear=t||y.currentYear,y.config.maxDate&&y.currentYear===y.config.maxDate.getFullYear()?y.currentMonth=Math.min(y.config.maxDate.getMonth(),y.currentMonth):y.config.minDate&&y.currentYear===y.config.minDate.getFullYear()&&(y.currentMonth=Math.max(y.config.minDate.getMonth(),y.currentMonth)),n&&(y.redraw(),pe("onYearChange"),B())}}function X(e,t){void 0===t&&(t=!0);var n=y.parseDate(e,void 0,t);if(y.config.minDate&&n&&_(n,y.config.minDate,void 0!==t?t:!y.minDateHasTime)<0||y.config.maxDate&&n&&_(n,y.config.maxDate,void 0!==t?t:!y.maxDateHasTime)>0)return!1;if(0===y.config.enable.length&&0===y.config.disable.length)return!0;if(void 0===n)return!1;for(var r=y.config.enable.length>0,o=r?y.config.enable:y.config.disable,i=0,u=void 0;i=u.from.getTime()&&n.getTime()<=u.to.getTime())return r}return!r}function Q(e){return void 0!==y.daysContainer&&-1===e.className.indexOf("hidden")&&y.daysContainer.contains(e)}function ee(e){var t=e.target===y._input,n=y.config.allowInput,r=y.isOpen&&(!n||!t),o=y.config.inline&&t&&!n;if(13===e.keyCode&&t){if(n)return y.setDate(y._input.value,!0,e.target===y.altInput?y.config.altFormat:y.config.dateFormat),e.target.blur();y.open()}else if(q(e.target)||r||o){var i=!!y.timeContainer&&y.timeContainer.contains(e.target);switch(e.keyCode){case 13:i?(e.preventDefault(),x(),ce()):le(e);break;case 27:e.preventDefault(),ce();break;case 8:case 46:t&&!y.config.allowInput&&(e.preventDefault(),y.clear());break;case 37:case 39:if(i||t)y.hourElement&&y.hourElement.focus();else if(e.preventDefault(),void 0!==y.daysContainer&&(!1===n||document.activeElement&&Q(document.activeElement))){var a=39===e.keyCode?1:-1;e.ctrlKey?(e.stopPropagation(),$(a),H(G(1),0)):H(void 0,a)}break;case 38:case 40:e.preventDefault();var u=40===e.keyCode?1:-1;y.daysContainer&&void 0!==e.target.$i||e.target===y.input||e.target===y.altInput?e.ctrlKey?(e.stopPropagation(),Z(y.currentYear-u),H(G(1),0)):i||H(void 0,7*u):e.target===y.currentYearElement?Z(y.currentYear-u):y.config.enableTime&&(!i&&y.hourElement&&y.hourElement.focus(),x(e),y._debouncedChange());break;case 9:if(i){var c=[y.hourElement,y.minuteElement,y.secondElement,y.amPM].concat(y.pluginElements).filter((function(e){return e})),l=c.indexOf(e.target);if(-1!==l){var s=c[l+(e.shiftKey?-1:1)];e.preventDefault(),(s||y._input).focus()}}else!y.config.noCalendar&&y.daysContainer&&y.daysContainer.contains(e.target)&&e.shiftKey&&(e.preventDefault(),y._input.focus())}}if(void 0!==y.amPM&&e.target===y.amPM)switch(e.key){case y.l10n.amPM[0].charAt(0):case y.l10n.amPM[0].charAt(0).toLowerCase():y.amPM.textContent=y.l10n.amPM[0],D(),me();break;case y.l10n.amPM[1].charAt(0):case y.l10n.amPM[1].charAt(0).toLowerCase():y.amPM.textContent=y.l10n.amPM[1],D(),me()}(t||q(e.target))&&pe("onKeyDown",e)}function te(e){if(1===y.selectedDates.length&&(!e||e.classList.contains("flatpickr-day")&&!e.classList.contains("flatpickr-disabled"))){for(var t=e?e.dateObj.getTime():y.days.firstElementChild.dateObj.getTime(),n=y.parseDate(y.selectedDates[0],void 0,!0).getTime(),r=Math.min(t,y.selectedDates[0].getTime()),o=Math.max(t,y.selectedDates[0].getTime()),i=!1,a=0,u=0,c=r;cr&&ca)?a=c:c>n&&(!u||c0&&p0&&p>u;return h?(f.classList.add("notAllowed"),["inRange","startRange","endRange"].forEach((function(e){f.classList.remove(e)})),"continue"):i&&!h?"continue":(["startRange","inRange","endRange","notAllowed"].forEach((function(e){f.classList.remove(e)})),void(void 0!==e&&(e.classList.add(t<=y.selectedDates[0].getTime()?"startRange":"endRange"),nt&&p===n&&f.classList.add("endRange"),p>=a&&(0===u||p<=u)&&(l=n,d=t,(c=p)>Math.min(l,d)&&c0||n.getMinutes()>0||n.getSeconds()>0),y.selectedDates&&(y.selectedDates=y.selectedDates.filter((function(e){return X(e)})),y.selectedDates.length||"min"!==e||E(n),me()),y.daysContainer&&(ue(),void 0!==n?y.currentYearElement[e]=n.getFullYear().toString():y.currentYearElement.removeAttribute(e),y.currentYearElement.disabled=!!r&&void 0!==n&&r.getFullYear()===n.getFullYear())}}function ie(){"object"!==a(y.config.locale)&&void 0===C.l10ns[y.config.locale]&&y.config.errorHandler(new Error("flatpickr: invalid locale "+y.config.locale)),y.l10n=e({},C.l10ns.default,"object"===a(y.config.locale)?y.config.locale:"default"!==y.config.locale?C.l10ns[y.config.locale]:void 0),b.K="("+y.l10n.amPM[0]+"|"+y.l10n.amPM[1]+"|"+y.l10n.amPM[0].toLowerCase()+"|"+y.l10n.amPM[1].toLowerCase()+")",void 0===e({},g,JSON.parse(JSON.stringify(p.dataset||{}))).time_24hr&&void 0===C.defaultConfig.time_24hr&&(y.config.time_24hr=y.l10n.time_24hr),y.formatDate=m(y),y.parseDate=v({config:y.config,l10n:y.l10n})}function ae(e){if(void 0!==y.calendarContainer){pe("onPreCalendarPosition");var t=e||y._positionElement,n=Array.prototype.reduce.call(y.calendarContainer.children,(function(e,t){return e+t.offsetHeight}),0),r=y.calendarContainer.offsetWidth,o=y.config.position.split(" "),i=o[0],a=o.length>1?o[1]:null,u=t.getBoundingClientRect(),c=window.innerHeight-u.bottom,s="above"===i||"below"!==i&&cn,d=window.pageYOffset+u.top+(s?-n-2:t.offsetHeight+2);if(l(y.calendarContainer,"arrowTop",!s),l(y.calendarContainer,"arrowBottom",s),!y.config.inline){var f=window.pageXOffset+u.left-(null!=a&&"center"===a?(r-u.width)/2:0),p=window.document.body.offsetWidth-(window.pageXOffset+u.right),h=f+r>window.document.body.offsetWidth,g=p+r>window.document.body.offsetWidth;if(l(y.calendarContainer,"rightMost",h),!y.config.static)if(y.calendarContainer.style.top=d+"px",h)if(g){var b=document.styleSheets[0];if(void 0===b)return;var m=window.document.body.offsetWidth,v=Math.max(0,m/2-r/2),_=b.cssRules.length,w="{left:"+u.left+"px;right:auto;}";l(y.calendarContainer,"rightMost",!1),l(y.calendarContainer,"centerMost",!0),b.insertRule(".flatpickr-calendar.centerMost:before,.flatpickr-calendar.centerMost:after"+w,_),y.calendarContainer.style.left=v+"px",y.calendarContainer.style.right="auto"}else y.calendarContainer.style.left="auto",y.calendarContainer.style.right=p+"px";else y.calendarContainer.style.left=f+"px",y.calendarContainer.style.right="auto"}}}function ue(){y.config.noCalendar||y.isMobile||(be(),W())}function ce(){y._input.focus(),-1!==window.navigator.userAgent.indexOf("MSIE")||void 0!==navigator.msMaxTouchPoints?setTimeout(y.close,0):y.close()}function le(e){e.preventDefault(),e.stopPropagation();var t=function e(t,n){return n(t)?t:t.parentNode?e(t.parentNode,n):void 0}(e.target,(function(e){return e.classList&&e.classList.contains("flatpickr-day")&&!e.classList.contains("flatpickr-disabled")&&!e.classList.contains("notAllowed")}));if(void 0!==t){var n=t,r=y.latestSelectedDateObj=new Date(n.dateObj.getTime()),o=(r.getMonth()y.currentMonth+y.config.showMonths-1)&&"range"!==y.config.mode;if(y.selectedDateElem=n,"single"===y.config.mode)y.selectedDates=[r];else if("multiple"===y.config.mode){var i=ge(r);i?y.selectedDates.splice(parseInt(i),1):y.selectedDates.push(r)}else"range"===y.config.mode&&(2===y.selectedDates.length&&y.clear(!1,!1),y.latestSelectedDateObj=r,y.selectedDates.push(r),0!==_(r,y.selectedDates[0],!0)&&y.selectedDates.sort((function(e,t){return e.getTime()-t.getTime()})));if(D(),o){var a=y.currentYear!==r.getFullYear();y.currentYear=r.getFullYear(),y.currentMonth=r.getMonth(),a&&(pe("onYearChange"),B()),pe("onMonthChange")}if(be(),W(),me(),y.config.enableTime&&setTimeout((function(){return y.showTimeInput=!0}),50),o||"range"===y.config.mode||1!==y.config.showMonths?void 0!==y.selectedDateElem&&void 0===y.hourElement&&y.selectedDateElem&&y.selectedDateElem.focus():F(n),void 0!==y.hourElement&&void 0!==y.hourElement&&y.hourElement.focus(),y.config.closeOnSelect){var u="single"===y.config.mode&&!y.config.enableTime,c="range"===y.config.mode&&2===y.selectedDates.length&&!y.config.enableTime;(u||c)&&ce()}I()}}y.parseDate=v({config:y.config,l10n:y.l10n}),y._handlers=[],y.pluginElements=[],y.loadedPlugins=[],y._bind=P,y._setHoursFromDate=E,y._positionCalendar=ae,y.changeMonth=$,y.changeYear=Z,y.clear=function(e,t){void 0===e&&(e=!0),void 0===t&&(t=!0),y.input.value="",void 0!==y.altInput&&(y.altInput.value=""),void 0!==y.mobileInput&&(y.mobileInput.value=""),y.selectedDates=[],y.latestSelectedDateObj=void 0,!0===t&&(y.currentYear=y._initialDate.getFullYear(),y.currentMonth=y._initialDate.getMonth()),y.showTimeInput=!1,!0===y.config.enableTime&&S(),y.redraw(),e&&pe("onChange")},y.close=function(){y.isOpen=!1,y.isMobile||(void 0!==y.calendarContainer&&y.calendarContainer.classList.remove("open"),void 0!==y._input&&y._input.classList.remove("active")),pe("onClose")},y._createElement=s,y.destroy=function(){void 0!==y.config&&pe("onDestroy");for(var e=y._handlers.length;e--;){var t=y._handlers[e];t.element.removeEventListener(t.event,t.handler,t.options)}if(y._handlers=[],y.mobileInput)y.mobileInput.parentNode&&y.mobileInput.parentNode.removeChild(y.mobileInput),y.mobileInput=void 0;else if(y.calendarContainer&&y.calendarContainer.parentNode)if(y.config.static&&y.calendarContainer.parentNode){var n=y.calendarContainer.parentNode;if(n.lastChild&&n.removeChild(n.lastChild),n.parentNode){for(;n.firstChild;)n.parentNode.insertBefore(n.firstChild,n);n.parentNode.removeChild(n)}}else y.calendarContainer.parentNode.removeChild(y.calendarContainer);y.altInput&&(y.input.type="text",y.altInput.parentNode&&y.altInput.parentNode.removeChild(y.altInput),delete y.altInput),y.input&&(y.input.type=y.input._type,y.input.classList.remove("flatpickr-input"),y.input.removeAttribute("readonly"),y.input.value=""),["_showTimeInput","latestSelectedDateObj","_hideNextMonthArrow","_hidePrevMonthArrow","__hideNextMonthArrow","__hidePrevMonthArrow","isMobile","isOpen","selectedDateElem","minDateHasTime","maxDateHasTime","days","daysContainer","_input","_positionElement","innerContainer","rContainer","monthNav","todayDateElem","calendarContainer","weekdayContainer","prevMonthNav","nextMonthNav","monthsDropdownContainer","currentMonthElement","currentYearElement","navigationCurrentMonth","selectedDateElem","config"].forEach((function(e){try{delete y[e]}catch(e){}}))},y.isEnabled=X,y.jumpToDate=N,y.open=function(e,t){if(void 0===t&&(t=y._positionElement),!0===y.isMobile)return e&&(e.preventDefault(),e.target&&e.target.blur()),void 0!==y.mobileInput&&(y.mobileInput.focus(),y.mobileInput.click()),void pe("onOpen");if(!y._input.disabled&&!y.config.inline){var n=y.isOpen;y.isOpen=!0,n||(y.calendarContainer.classList.add("open"),y._input.classList.add("active"),pe("onOpen"),ae(t)),!0===y.config.enableTime&&!0===y.config.noCalendar&&(0===y.selectedDates.length&&re(),!1!==y.config.allowInput||void 0!==e&&y.timeContainer.contains(e.relatedTarget)||setTimeout((function(){return y.hourElement.select()}),50))}},y.redraw=ue,y.set=function(e,n){if(null!==e&&"object"===a(e))for(var r in Object.assign(y.config,e),e)void 0!==se[r]&&se[r].forEach((function(e){return e()}));else y.config[e]=n,void 0!==se[e]?se[e].forEach((function(e){return e()})):t.indexOf(e)>-1&&(y.config[e]=c(n));y.redraw(),me(!1)},y.setDate=function(e,t,n){if(void 0===t&&(t=!1),void 0===n&&(n=y.config.dateFormat),0!==e&&!e||e instanceof Array&&0===e.length)return y.clear(t);de(e,n),y.showTimeInput=y.selectedDates.length>0,y.latestSelectedDateObj=y.selectedDates[y.selectedDates.length-1],y.redraw(),N(),E(),0===y.selectedDates.length&&y.clear(!1),me(t),t&&pe("onChange")},y.toggle=function(e){if(!0===y.isOpen)return y.close();y.open(e)};var se={locale:[ie,K],showMonths:[z,k,V],minDate:[N],maxDate:[N]};function de(e,t){var n=[];if(e instanceof Array)n=e.map((function(e){return y.parseDate(e,t)}));else if(e instanceof Date||"number"==typeof e)n=[y.parseDate(e,t)];else if("string"==typeof e)switch(y.config.mode){case"single":case"time":n=[y.parseDate(e,t)];break;case"multiple":n=e.split(y.config.conjunction).map((function(e){return y.parseDate(e,t)}));break;case"range":n=e.split(y.l10n.rangeSeparator).map((function(e){return y.parseDate(e,t)}))}else y.config.errorHandler(new Error("Invalid date supplied: "+JSON.stringify(e)));y.selectedDates=n.filter((function(e){return e instanceof Date&&X(e,!1)})),"range"===y.config.mode&&y.selectedDates.sort((function(e,t){return e.getTime()-t.getTime()}))}function fe(e){return e.slice().map((function(e){return"string"==typeof e||"number"==typeof e||e instanceof Date?y.parseDate(e,void 0,!0):e&&"object"===a(e)&&e.from&&e.to?{from:y.parseDate(e.from,void 0),to:y.parseDate(e.to,void 0)}:e})).filter((function(e){return e}))}function pe(e,t){if(void 0!==y.config){var n=y.config[e];if(void 0!==n&&n.length>0)for(var r=0;n[r]&&r1||"static"===y.config.monthSelectorType?y.monthElements[t].textContent=h(n.getMonth(),y.config.shorthandCurrentMonth,y.l10n)+" ":y.monthsDropdownContainer.value=n.getMonth().toString(),e.value=n.getFullYear().toString()})),y._hidePrevMonthArrow=void 0!==y.config.minDate&&(y.currentYear===y.config.minDate.getFullYear()?y.currentMonth<=y.config.minDate.getMonth():y.currentYeary.config.maxDate.getMonth():y.currentYear>y.config.maxDate.getFullYear()))}function ye(e){return y.selectedDates.map((function(t){return y.formatDate(t,e)})).filter((function(e,t,n){return"range"!==y.config.mode||y.config.enableTime||n.indexOf(e)===t})).join("range"!==y.config.mode?y.config.conjunction:y.l10n.rangeSeparator)}function me(e){void 0===e&&(e=!0),void 0!==y.mobileInput&&y.mobileFormatStr&&(y.mobileInput.value=void 0!==y.latestSelectedDateObj?y.formatDate(y.latestSelectedDateObj,y.mobileFormatStr):""),y.input.value=ye(y.config.dateFormat),void 0!==y.altInput&&(y.altInput.value=ye(y.config.altFormat)),!1!==e&&pe("onValueUpdate")}function ve(e){var t=y.prevMonthNav.contains(e.target),n=y.nextMonthNav.contains(e.target);t||n?$(t?-1:1):y.yearElements.indexOf(e.target)>=0?e.target.select():e.target.classList.contains("arrowUp")?y.changeYear(y.currentYear+1):e.target.classList.contains("arrowDown")&&y.changeYear(y.currentYear-1)}return function(){y.element=y.input=p,y.isOpen=!1,function(){var r=["wrap","weekNumbers","allowInput","clickOpens","time_24hr","enableTime","noCalendar","altInput","shorthandCurrentMonth","inline","static","enableSeconds","disableMobile"],o=e({},g,JSON.parse(JSON.stringify(p.dataset||{}))),i={};y.config.parseDate=o.parseDate,y.config.formatDate=o.formatDate,Object.defineProperty(y.config,"enable",{get:function(){return y.config._enable},set:function(e){y.config._enable=fe(e)}}),Object.defineProperty(y.config,"disable",{get:function(){return y.config._disable},set:function(e){y.config._disable=fe(e)}});var a="time"===o.mode;if(!o.dateFormat&&(o.enableTime||a)){var u=C.defaultConfig.dateFormat||n.dateFormat;i.dateFormat=o.noCalendar||a?"H:i"+(o.enableSeconds?":S":""):u+" H:i"+(o.enableSeconds?":S":"")}if(o.altInput&&(o.enableTime||a)&&!o.altFormat){var l=C.defaultConfig.altFormat||n.altFormat;i.altFormat=o.noCalendar||a?"h:i"+(o.enableSeconds?":S K":" K"):l+" h:i"+(o.enableSeconds?":S":"")+" K"}o.altInputClass||(y.config.altInputClass=y.input.className+" "+y.config.altInputClass),Object.defineProperty(y.config,"minDate",{get:function(){return y.config._minDate},set:oe("min")}),Object.defineProperty(y.config,"maxDate",{get:function(){return y.config._maxDate},set:oe("max")});var s=function(e){return function(t){y.config["min"===e?"_minTime":"_maxTime"]=y.parseDate(t,"H:i:S")}};Object.defineProperty(y.config,"minTime",{get:function(){return y.config._minTime},set:s("min")}),Object.defineProperty(y.config,"maxTime",{get:function(){return y.config._maxTime},set:s("max")}),"time"===o.mode&&(y.config.noCalendar=!0,y.config.enableTime=!0),Object.assign(y.config,i,o);for(var d=0;d-1?y.config[h]=c(f[h]).map(O).concat(y.config[h]):void 0===o[h]&&(y.config[h]=f[h])}pe("onParseConfig")}(),ie(),y.input=y.config.wrap?p.querySelector("[data-input]"):p,y.input?(y.input._type=y.input.type,y.input.type="text",y.input.classList.add("flatpickr-input"),y._input=y.input,y.config.altInput&&(y.altInput=s(y.input.nodeName,y.config.altInputClass),y._input=y.altInput,y.altInput.placeholder=y.input.placeholder,y.altInput.disabled=y.input.disabled,y.altInput.required=y.input.required,y.altInput.tabIndex=y.input.tabIndex,y.altInput.type="text",y.input.setAttribute("type","hidden"),!y.config.static&&y.input.parentNode&&y.input.parentNode.insertBefore(y.altInput,y.input.nextSibling)),y.config.allowInput||y._input.setAttribute("readonly","readonly"),y._positionElement=y.config.positionElement||y._input):y.config.errorHandler(new Error("Invalid input element specified")),function(){y.selectedDates=[],y.now=y.parseDate(y.config.now)||new Date;var e=y.config.defaultDate||("INPUT"!==y.input.nodeName&&"TEXTAREA"!==y.input.nodeName||!y.input.placeholder||y.input.value!==y.input.placeholder?y.input.value:null);e&&de(e,y.config.dateFormat),y._initialDate=y.selectedDates.length>0?y.selectedDates[0]:y.config.minDate&&y.config.minDate.getTime()>y.now.getTime()?y.config.minDate:y.config.maxDate&&y.config.maxDate.getTime()0&&(y.latestSelectedDateObj=y.selectedDates[0]),void 0!==y.config.minTime&&(y.config.minTime=y.parseDate(y.config.minTime,"H:i")),void 0!==y.config.maxTime&&(y.config.maxTime=y.parseDate(y.config.maxTime,"H:i")),y.minDateHasTime=!!y.config.minDate&&(y.config.minDate.getHours()>0||y.config.minDate.getMinutes()>0||y.config.minDate.getSeconds()>0),y.maxDateHasTime=!!y.config.maxDate&&(y.config.maxDate.getHours()>0||y.config.maxDate.getMinutes()>0||y.config.maxDate.getSeconds()>0),Object.defineProperty(y,"showTimeInput",{get:function(){return y._showTimeInput},set:function(e){y._showTimeInput=e,y.calendarContainer&&l(y.calendarContainer,"showTimeInput",e),y.isOpen&&ae()}})}(),y.utils={getDaysInMonth:function(e,t){return void 0===e&&(e=y.currentMonth),void 0===t&&(t=y.currentYear),1===e&&(t%4==0&&t%100!=0||t%400==0)?29:y.l10n.daysInMonth[e]}},y.isMobile||function(){var e=window.document.createDocumentFragment();if(y.calendarContainer=s("div","flatpickr-calendar"),y.calendarContainer.tabIndex=-1,!y.config.noCalendar){if(e.appendChild((y.monthNav=s("div","flatpickr-months"),y.yearElements=[],y.monthElements=[],y.prevMonthNav=s("span","flatpickr-prev-month"),y.prevMonthNav.innerHTML=y.config.prevArrow,y.nextMonthNav=s("span","flatpickr-next-month"),y.nextMonthNav.innerHTML=y.config.nextArrow,z(),Object.defineProperty(y,"_hidePrevMonthArrow",{get:function(){return y.__hidePrevMonthArrow},set:function(e){y.__hidePrevMonthArrow!==e&&(l(y.prevMonthNav,"flatpickr-disabled",e),y.__hidePrevMonthArrow=e)}}),Object.defineProperty(y,"_hideNextMonthArrow",{get:function(){return y.__hideNextMonthArrow},set:function(e){y.__hideNextMonthArrow!==e&&(l(y.nextMonthNav,"flatpickr-disabled",e),y.__hideNextMonthArrow=e)}}),y.currentYearElement=y.yearElements[0],be(),y.monthNav)),y.innerContainer=s("div","flatpickr-innerContainer"),y.config.weekNumbers){var t=function(){y.calendarContainer.classList.add("hasWeeks");var e=s("div","flatpickr-weekwrapper");e.appendChild(s("span","flatpickr-weekday",y.l10n.weekAbbreviation));var t=s("div","flatpickr-weeks");return e.appendChild(t),{weekWrapper:e,weekNumbers:t}}(),n=t.weekWrapper,r=t.weekNumbers;y.innerContainer.appendChild(n),y.weekNumbers=r,y.weekWrapper=n}y.rContainer=s("div","flatpickr-rContainer"),y.rContainer.appendChild(V()),y.daysContainer||(y.daysContainer=s("div","flatpickr-days"),y.daysContainer.tabIndex=-1),W(),y.rContainer.appendChild(y.daysContainer),y.innerContainer.appendChild(y.rContainer),e.appendChild(y.innerContainer)}y.config.enableTime&&e.appendChild(function(){y.calendarContainer.classList.add("hasTime"),y.config.noCalendar&&y.calendarContainer.classList.add("noCalendar"),y.timeContainer=s("div","flatpickr-time"),y.timeContainer.tabIndex=-1;var e=s("span","flatpickr-time-separator",":"),t=f("flatpickr-hour",{"aria-label":y.l10n.hourAriaLabel});y.hourElement=t.getElementsByTagName("input")[0];var n=f("flatpickr-minute",{"aria-label":y.l10n.minuteAriaLabel});if(y.minuteElement=n.getElementsByTagName("input")[0],y.hourElement.tabIndex=y.minuteElement.tabIndex=-1,y.hourElement.value=o(y.latestSelectedDateObj?y.latestSelectedDateObj.getHours():y.config.time_24hr?y.config.defaultHour:function(e){switch(e%24){case 0:case 12:return 12;default:return e%12}}(y.config.defaultHour)),y.minuteElement.value=o(y.latestSelectedDateObj?y.latestSelectedDateObj.getMinutes():y.config.defaultMinute),y.hourElement.setAttribute("step",y.config.hourIncrement.toString()),y.minuteElement.setAttribute("step",y.config.minuteIncrement.toString()),y.hourElement.setAttribute("min",y.config.time_24hr?"0":"1"),y.hourElement.setAttribute("max",y.config.time_24hr?"23":"12"),y.minuteElement.setAttribute("min","0"),y.minuteElement.setAttribute("max","59"),y.timeContainer.appendChild(t),y.timeContainer.appendChild(e),y.timeContainer.appendChild(n),y.config.time_24hr&&y.timeContainer.classList.add("time24hr"),y.config.enableSeconds){y.timeContainer.classList.add("hasSeconds");var r=f("flatpickr-second");y.secondElement=r.getElementsByTagName("input")[0],y.secondElement.value=o(y.latestSelectedDateObj?y.latestSelectedDateObj.getSeconds():y.config.defaultSeconds),y.secondElement.setAttribute("step",y.minuteElement.getAttribute("step")),y.secondElement.setAttribute("min","0"),y.secondElement.setAttribute("max","59"),y.timeContainer.appendChild(s("span","flatpickr-time-separator",":")),y.timeContainer.appendChild(r)}return y.config.time_24hr||(y.amPM=s("span","flatpickr-am-pm",y.l10n.amPM[i((y.latestSelectedDateObj?y.hourElement.value:y.config.defaultHour)>11)]),y.amPM.title=y.l10n.toggleTitle,y.amPM.tabIndex=-1,y.timeContainer.appendChild(y.amPM)),y.timeContainer}()),l(y.calendarContainer,"rangeMode","range"===y.config.mode),l(y.calendarContainer,"animate",!0===y.config.animate),l(y.calendarContainer,"multiMonth",y.config.showMonths>1),y.calendarContainer.appendChild(e);var a=void 0!==y.config.appendTo&&void 0!==y.config.appendTo.nodeType;if((y.config.inline||y.config.static)&&(y.calendarContainer.classList.add(y.config.inline?"inline":"static"),y.config.inline&&(!a&&y.element.parentNode?y.element.parentNode.insertBefore(y.calendarContainer,y._input.nextSibling):void 0!==y.config.appendTo&&y.config.appendTo.appendChild(y.calendarContainer)),y.config.static)){var u=s("div","flatpickr-wrapper");y.element.parentNode&&y.element.parentNode.insertBefore(u,y.element),u.appendChild(y.element),y.altInput&&u.appendChild(y.altInput),u.appendChild(y.calendarContainer)}y.config.static||y.config.inline||(void 0!==y.config.appendTo?y.config.appendTo:window.document.body).appendChild(y.calendarContainer)}(),function(){if(y.config.wrap&&["open","close","toggle","clear"].forEach((function(e){Array.prototype.forEach.call(y.element.querySelectorAll("[data-"+e+"]"),(function(t){return P(t,"click",y[e])}))})),y.isMobile)!function(){var e=y.config.enableTime?y.config.noCalendar?"time":"datetime-local":"date";y.mobileInput=s("input",y.input.className+" flatpickr-mobile"),y.mobileInput.step=y.input.getAttribute("step")||"any",y.mobileInput.tabIndex=1,y.mobileInput.type=e,y.mobileInput.disabled=y.input.disabled,y.mobileInput.required=y.input.required,y.mobileInput.placeholder=y.input.placeholder,y.mobileFormatStr="datetime-local"===e?"Y-m-d\\TH:i:S":"date"===e?"Y-m-d":"H:i:S",y.selectedDates.length>0&&(y.mobileInput.defaultValue=y.mobileInput.value=y.formatDate(y.selectedDates[0],y.mobileFormatStr)),y.config.minDate&&(y.mobileInput.min=y.formatDate(y.config.minDate,"Y-m-d")),y.config.maxDate&&(y.mobileInput.max=y.formatDate(y.config.maxDate,"Y-m-d")),y.input.type="hidden",void 0!==y.altInput&&(y.altInput.type="hidden");try{y.input.parentNode&&y.input.parentNode.insertBefore(y.mobileInput,y.input.nextSibling)}catch(e){}P(y.mobileInput,"change",(function(e){y.setDate(e.target.value,!1,y.mobileFormatStr),pe("onChange"),pe("onClose")}))}();else{var e=u(ne,50);y._debouncedChange=u(I,300),y.daysContainer&&!/iPhone|iPad|iPod/i.test(navigator.userAgent)&&P(y.daysContainer,"mouseover",(function(e){"range"===y.config.mode&&te(e.target)})),P(window.document.body,"keydown",ee),y.config.inline||y.config.static||P(window,"resize",e),void 0!==window.ontouchstart?P(window.document,"touchstart",J):P(window.document,"mousedown",T(J)),P(window.document,"focus",J,{capture:!0}),!0===y.config.clickOpens&&(P(y._input,"focus",y.open),P(y._input,"mousedown",T(y.open))),void 0!==y.daysContainer&&(P(y.monthNav,"mousedown",T(ve)),P(y.monthNav,["keyup","increment"],M),P(y.daysContainer,"mousedown",T(le))),void 0!==y.timeContainer&&void 0!==y.minuteElement&&void 0!==y.hourElement&&(P(y.timeContainer,["increment"],x),P(y.timeContainer,"blur",x,{capture:!0}),P(y.timeContainer,"mousedown",T(A)),P([y.hourElement,y.minuteElement],["focus","click"],(function(e){return e.target.select()})),void 0!==y.secondElement&&P(y.secondElement,"focus",(function(){return y.secondElement&&y.secondElement.select()})),void 0!==y.amPM&&P(y.amPM,"mousedown",T((function(e){x(e),I()}))))}}(),(y.selectedDates.length||y.config.noCalendar)&&(y.config.enableTime&&E(y.config.noCalendar?y.latestSelectedDateObj||y.config.minDate:void 0),me(!1)),k(),y.showTimeInput=y.selectedDates.length>0||y.config.noCalendar;var r=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);!y.isMobile&&r&&ae(),pe("onReady")}(),y}function k(e,t){for(var n=Array.prototype.slice.call(e).filter((function(e){return e instanceof HTMLElement})),r=[],o=0;o1&&void 0!==arguments[1]?arguments[1]:t.key,r=arguments.length>2?arguments[2]:void 0;return n+r}))}},{key:"key",get:function(){return this.childDescriptor.key}},{key:"parentNotation",get:function(){return"".concat(this.parentKlass.constructor.name,"#").concat(this.parentPropertySignature)}},{key:"childNotation",get:function(){return"".concat(this.childKlass.constructor.name,"#").concat(this.childPropertySignature)}},{key:"parentTopic",get:function(){return this._getTopic(this.parentDescriptor)}},{key:"childTopic",get:function(){return this._getTopic(this.childDescriptor)}},{key:"parentPropertySignature",get:function(){return this._extractTopicSignature(this.parentTopic)}},{key:"childPropertySignature",get:function(){return this._extractTopicSignature(this.childTopic)}}]),a(e,[{key:"assert",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";!0!==e&&this.error("{child} does not properly override {parent}"+t)}},{key:"error",value:function(e){var t=this;throw e=e.replace("{parent}",(function(e){return t.parentNotation})).replace("{child}",(function(e){return t.childNotation})),new SyntaxError(e)}}]),e}();function l(e){return e.hasOwnProperty("value")?"data":e.hasOwnProperty("get")||e.hasOwnProperty("set")?"accessor":"data"}function s(e,t,n){n.assert(e.length===t.length)}function d(e,t,n){var r=l(e),i=l(t);switch(r!==i&&n.error('descriptor types do not match. {parent} is "'.concat(r,'", {child} is "').concat(i,'"')),i){case"data":!function(e,t,n){var r=o(e.value),i=o(t.value);switch("undefined"===r&&"undefined"===i&&n.error("descriptor values are both undefined. (class properties are are not currently supported)'"),r!==i&&("function"===i&&void 0===r||void 0!==r)&&n.error('value types do not match. {parent} is "'.concat(r,'", {child} is "').concat(i,'"')),i){case"function":s(e.value,t.value,n);break;default:n.error('Unexpected error. Please file a bug with: {parent} is "'.concat(r,'", {child} is "').concat(i,'"'))}}(e,t,n);break;case"accessor":!function(e,t,n){var r="function"==typeof e.get,o="function"==typeof t.get,i="function"==typeof e.set,a="function"==typeof t.set;(r||o)&&(!r&&i&&n.error("{parent} is setter but {child} is getter"),!o&&a&&n.error("{parent} is getter but {child} is setter"),s(e.get,t.get,n)),(i||a)&&(!i&&r&&n.error("{parent} is getter but {child} is setter"),!a&&o&&n.error("{parent} is setter but {child} is getter"),s(e.set,t.set,n))}(e,t,n)}}var f=[function(e){return e.toLowerCase()},function(e){return e.toUpperCase()},function(e){return e+"s"},function(e){return e.slice(0,-1)},function(e){return e.slice(1,e.length)}];function p(e,t,n){n.key=t;var r=Object.getPrototypeOf(e),o=Object.getOwnPropertyDescriptor(r,t),i=new c(r,e,o,n);if(void 0===o){var a=function(e,t){for(var n=0,r=f.length;n=0&&f.splice(t,1)}function m(e){var t=document.createElement("style");return e.attrs.type="text/css",v(t,e.attrs),b(e,t),t}function v(e,t){Object.keys(t).forEach((function(n){e.setAttribute(n,t[n])}))}function _(e,t){var n,r,o,i;if(t.transform&&e.css){if(!(i=t.transform(e.css)))return function(){};e.css=i}if(t.singleton){var a=d++;n=s||(s=m(t)),r=k.bind(null,n,a,!1),o=k.bind(null,n,a,!0)}else e.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(n=function(e){var t=document.createElement("link");return e.attrs.type="text/css",e.attrs.rel="stylesheet",v(t,e.attrs),b(e,t),t}(t),r=x.bind(null,n,t),o=function(){y(n),n.href&&URL.revokeObjectURL(n.href)}):(n=m(t),r=C.bind(null,n),o=function(){y(n)});return r(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;r(e=t)}else o()}}e.exports=function(e,t){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!==("undefined"==typeof document?"undefined":a(document)))throw new Error("The style-loader cannot be used in a non-browser environment");(t=t||{}).attrs="object"===a(t.attrs)?t.attrs:{},t.singleton||"boolean"==typeof t.singleton||(t.singleton=u()),t.insertInto||(t.insertInto="head"),t.insertAt||(t.insertAt="bottom");var n=g(e,t);return h(n,t),function(e){for(var r=[],o=0;o1?"s":" required, but only "+t.length+" present")}},function(e,t,n){var r=n(46);t.a=r.a},function(e,t,n){var r=n(65);t.a=r.a},function(e,t,n){var r=n(18);t.a=function(e,t,n){"__proto__"==t&&r.a?Object(r.a)(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}},function(e,t,n){var r=n(70),o=function(){try{var e=Object(r.a)(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();t.a=o},function(e,t,n){var r=n(5),o=n(8);t.a=function(e){if(!Object(o.a)(e))return!1;var t=Object(r.a)(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},function(e,t,n){(function(e){function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var r="object"==(void 0===e?"undefined":n(e))&&e&&e.Object===Object&&e;t.a=r}).call(t,n(21))},function(e,t){function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(e){"object"===("undefined"==typeof window?"undefined":n(window))&&(r=window)}e.exports=r},function(e,t,n){var r=n(23),o=n(79),i=n(80);t.a=function(e,t){return Object(i.a)(Object(o.a)(e,t,r.a),e+"")}},function(e,t,n){t.a=function(e){return e}},function(e,t,n){t.a=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}},function(e,t,n){var r=n(11),o=n(12),i=n(27),a=n(8);function u(e){return(u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}t.a=function(e,t,n){if(!Object(a.a)(n))return!1;var c=u(t);return!!("number"==c?Object(o.a)(n)&&Object(i.a)(t,n.length):"string"==c&&t in n)&&Object(r.a)(n[t],e)}},function(e,t,n){t.a=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}},function(e,t,n){function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var o=/^(?:0|[1-9]\d*)$/;t.a=function(e,t){var n=r(e);return!!(t=null==t?9007199254740991:t)&&("number"==n||"symbol"!=n&&o.test(e))&&e>-1&&e%1==0&&e/g},function(e,t,n){var r=n(109);t.a=function(e){return null==e?"":Object(r.a)(e)}},function(e,t,n){t.a=function(){for(var e=arguments.length,t=new Array(e),n=0;n59)}},function(e,t,n){var r=n(123);n.d(t,"a",(function(){return r.b})),r.a},function(e,t,n){var r=n(124);t.a=r.a},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(43),o=n(51),i=n(53),a=n(57),u=n(61),c=n(16),l=n(113),s=n(115),d=n(129);n.d(t,"BooleanEditor",(function(){return r.a})),n.d(t,"BooleanRenderer",(function(){return o.a})),n.d(t,"BooleanFilter",(function(){return i.a})),n.d(t,"NumberEditor",(function(){return a.a})),n.d(t,"TextEditor",(function(){return u.a})),n.d(t,"TemplateRenderer",(function(){return c.a})),n.d(t,"ImageRenderer",(function(){return l.a})),n.d(t,"DateTimeFilter",(function(){return s.a})),n.d(t,"DateTimeEditor",(function(){return d.a}))},function(e,t,n){var r=n(44);t.a=r.a},function(e,t,n){var r=n(0),o=n(15);function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){for(var n=0;n-1||!(n.indexOf(r)>-1)&&e}}])&&u(n.prototype,r),i&&u(n,i),t}(r.a);t.a=d},function(e,t,n){function r(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:null;if(t&&t.hasOwnProperty(e))n=t[e];else if(t.hasOwnProperty("colDef")&&t.colDef.hasOwnProperty(e))n=t.colDef[e];else{var o=null;if(t.hasOwnProperty("context")&&(o=t.context.AGridComponentsMetaConfig||t.context.meta),o&&o.hasOwnProperty(t.column.colId)&&o[t.column.colId].hasOwnProperty(e))n=o[t.column.colId][e];else if(o&&o.hasOwnProperty(e))n=o[e];else{var i=t.context;n=i&&i.hasOwnProperty(e)?i[e]:r}}return void 0!==n?n:r}},{key:"getWin",value:function(e){var t=this.getOption("window",e)||window||null;if(!t)throw new Error("Current environment does not support window");return t}},{key:"getDoc",value:function(e){var t=this.getOption("document",e)||document||null;if(!t)throw new Error("Current environment does not support document");return t}}])&&r(t.prototype,n),o&&r(t,o),e}();t.a=o},function(e,t,n){var r,o=n(1),i=n(2),a=n(0),u=n(48);function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function l(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){for(var n=0;n0&&void 0!==arguments[0]&&arguments[0],r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return l(this,t),(e=d(this,f(t).call(this))).setChecked(n),e.setListener(r),e.setDisabled(!1),e}var n,r,o;return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&p(e,t)}(t,e),n=t,(r=[{key:"init",value:function(e){this._params=e,this._onClick=this._onClick.bind(this),this._onKeydown=this._onKeydown.bind(this),this._gui=this.getDoc(e).createElement("div"),this._gui.className="boolSwitch__wrapper",this._gui.tabIndex=-1,this.render()}},{key:"render",value:function(){var e=this.getDoc(this._params),t=document.createElement("div");t.className="boolSwitch",this._input=e.createElement("input"),this._input.id="el-".concat(Math.random()),this._input.name="checkbox",this._input.className="boolSwitch__checkbox",this._input.type="checkbox",this._input.checked=this.isChecked(),this._input.disabled=this.isDisabled(),this._input.tabIndex="0";var n=document.createElement("label");n.className="boolSwitch__label",n.for=this._input.id,n.innerHTML='\n \n \n ',t.appendChild(this._input),t.appendChild(n),t.addEventListener("click",this._onClick),this._gui.addEventListener("keydown",this._onKeydown),this._gui.appendChild(t)}},{key:"destroy",value:function(){this._gui.querySelector(".boolSwitch").removeEventListener("click",this._onClick),this._gui.removeEventListener("keydown",this._onKeydown)}},{key:"focus",value:function(){this._gui.focus(),this._input.focus()}},{key:"setListener",value:function(e){this._listener=e}},{key:"getListener",value:function(){return this._listener}},{key:"setChecked",value:function(e){this._checked=e,this._input&&(this._input.checked=e)}},{key:"isChecked",value:function(){return this._checked}},{key:"toggle",value:function(){this.setChecked(!this.isChecked())}},{key:"setDisabled",value:function(e){this._disabled=e,this._input&&(this._input.disabled=e)}},{key:"isDisabled",value:function(){return this._disabled}},{key:"_onClick",value:function(e){if(this._disabled)return!1;this.toggle(),this._listener&&this._listener(this)}},{key:"_onKeydown",value:function(e){if(this._disabled)return!1;var t=e.which||e.keyCode;32==t?(this.toggle(),this._listener&&this._listener(this),e.stopPropagation()):39==t?(this.setChecked(!0),this._listener&&this._listener(this),e.stopPropagation()):37==t&&(this.setChecked(!1),this._listener&&this._listener(this),e.stopPropagation())}}])&&s(n.prototype,r),o&&s(n,o),t}(a.a)).prototype,"init",[i.a],Object.getOwnPropertyDescriptor(r.prototype,"init"),r.prototype),h(r.prototype,"destroy",[i.a],Object.getOwnPropertyDescriptor(r.prototype,"destroy"),r.prototype),h(r.prototype,"_onClick",[o.a],Object.getOwnPropertyDescriptor(r.prototype,"_onClick"),r.prototype),h(r.prototype,"_onKeydown",[o.a],Object.getOwnPropertyDescriptor(r.prototype,"_onKeydown"),r.prototype),r);t.a=g},function(e,t,n){t.a=function(){for(var e=arguments.length,t=new Array(e),n=0;n-1)if(r.length&&"switch"!==r)this._gui.innerHTML=r;else{var u=this._getSwitcher(e);u.setChecked(!0),this._gui.innerHTML="",this._gui.appendChild(u.getGui())}else if(a.indexOf(n)>-1)if(o.length&&"switch"!==o)this._gui.innerHTML=o;else{var c=this._getSwitcher(e);c.setChecked(!1),this._gui.innerHTML="",this._gui.appendChild(c.getGui())}else this._gui.innerHTML=n}return!0}},{key:"_getSwitcher",value:function(e){return this._switcher||(this._switcher=new o.a,this._switcher.setDisabled(!0),this._switcher.init(e)),this._switcher}}])&&a(n.prototype,r),i&&a(n,i),t}(r.a);t.a=s},function(e,t,n){var r=n(54);t.a=r.a},function(e,t,n){var r,o=n(1),i=n(2),a=n(0),u=n(55);function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function l(e,t){for(var n=0;n\n \n\n\n \n \n ").concat(r?"":'\n \n ")," \n \n "),i.addEventListener("change",this._onRadioChange),this._gui.appendChild(i);var a=document.createElement("div");a.className="booleanFilter__body__applyPanel ag-filter-apply-panel ag-hidden",a.innerHTML='\n \n \n \n "),(n||r||o)&&a.classList.remove("ag-hidden"),a.addEventListener("click",this._ApplyFilterPanelButtonClick),this._gui.appendChild(a)}},{key:"destroy",value:function(){this._gui.querySelector(".booleanFilter__body__labels").removeEventListener("change",this._onRadioChange),this._gui.querySelector(".booleanFilter__body__applyPanel").removeEventListener("click",this._ApplyFilterPanelButtonClick)}},{key:"doesFilterPass",value:function(e){var t=String(this._params.hasOwnProperty("filterValueGetter")?this._params.filterValueGetter(e):this._params.valueGetter(e));return"true"===this._filterText?this._trueValue.indexOf(t)>-1:this._falseValue.indexOf(t)>-1}},{key:"isFilterActive",value:function(){return null!==this._filterText&&void 0!==this._filterText&&""!==this._filterText}},{key:"getModel",value:function(){return this.isFilterActive()?{value:this._filterText,filterType:"boolean"}:null}},{key:"setModel",value:function(e){this._filterText=e&&e.hasOwnProperty("value")?e.value:"";var t=String(this._filterText);this._gui.querySelector(".booleanFilter__body").querySelectorAll('input[type="radio"]').forEach((function(e){e.value==t?e.checked=!0:e.checked=!1}))}},{key:"getModelAsString",value:function(e){return e?(t="true"===e.value?this._booleanFilterTranslation.true:this._booleanFilterTranslation.false,(n=document.createElement("DIV")).innerHTML=t,n.textContent||n.innerText||""):"";var t,n}},{key:"reset",value:function(){var e=this._gui.querySelector(".booleanFilter__body");e.querySelectorAll('input[type="radio"]').forEach((function(e){e.checked=!1})),e.querySelector(".ag-wrapper-true").classList.remove("ag-checked"),e.querySelector(".ag-wrapper-false").classList.remove("ag-checked");try{e.querySelector(".ag-wrapper-reset").classList.remove("ag-checked")}catch(e){}this._filterText=null}},{key:"_onRadioChange",value:function(e,t){var n=t.target;this._filterText=n.value;var r=this._gui.querySelector(".booleanFilter__body");if(r)if(n.classList.contains("true-input")){r.querySelector(".ag-wrapper-true").classList.add("ag-checked"),r.querySelector(".ag-wrapper-false").classList.remove("ag-checked");try{r.querySelector(".ag-wrapper-reset").classList.remove("ag-checked")}catch(t){}}else if(n.classList.contains("false-input")){r.querySelector(".ag-wrapper-true").classList.remove("ag-checked"),r.querySelector(".ag-wrapper-false").classList.add("ag-checked");try{r.querySelector(".ag-wrapper-reset").classList.remove("ag-checked")}catch(t){}}else{r.querySelector(".ag-wrapper-true").classList.remove("ag-checked"),r.querySelector(".ag-wrapper-false").classList.remove("ag-checked");try{r.querySelector(".ag-wrapper-reset").classList.add("ag-checked")}catch(t){}}!1===e&&this._params.filterChangedCallback()}},{key:"_ApplyFilterPanelButtonClick",value:function(e){var t=e.target;"BUTTON"===t.nodeName&&(t.classList.contains("reset")?(this.reset(),this._params.filterChangedCallback()):t.classList.contains("clear")?this.reset():t.classList.contains("apply")&&this._params.filterChangedCallback())}}])&&l(n.prototype,r),o&&l(n,o),t}(a.a)).prototype,"init",[i.a],Object.getOwnPropertyDescriptor(r.prototype,"init"),r.prototype),p(r.prototype,"destroy",[i.a],Object.getOwnPropertyDescriptor(r.prototype,"destroy"),r.prototype),p(r.prototype,"_ApplyFilterPanelButtonClick",[o.a],Object.getOwnPropertyDescriptor(r.prototype,"_ApplyFilterPanelButtonClick"),r.prototype),r);t.a=g},function(e,t,n){var r=n(56);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:function(){return window.parent.document.head}};n(4)(r,o),r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(3)(!1)).push([e.i,".booleanFilter__body__labels label{display:block;padding:6px}.booleanFilter__body__labels label{display:block;padding:6px 0}.booleanFilter__body__labels label span{padding-left:6px}\n",""])},function(e,t,n){var r=n(58);t.a=r.a},function(e,t,n){var r,o=n(0),i=n(1),a=n(2),u=n(59);function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function l(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){for(var n=0;n1?n[i-1]:void 0,u=i>2?n[2]:void 0;for(a=e.length>3&&"function"==typeof a?(i--,a):void 0,u&&Object(o.a)(n[0],n[1],u)&&(a=i<3?void 0:a,i=1),t=Object(t);++r0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}},function(e,t,n){var r=n(28),o=n(94),i=n(12);t.a=function(e){return Object(i.a)(e)?Object(r.a)(e,!0):Object(o.a)(e)}},function(e,t,n){t.a=function(e,t){for(var n=-1,r=Array(e);++n"']/g,a=RegExp(i.source);t.a=function(e){return(e=Object(o.a)(e))&&a.test(e)?e.replace(i,r.a):e}},function(e,t,n){var r=n(108),o=Object(r.a)({"&":"&","<":"<",">":">",'"':""","'":"'"});t.a=o},function(e,t,n){t.a=function(e){return function(t){return null==e?void 0:e[t]}}},function(e,t,n){var r=n(9),o=n(34),i=n(29),a=n(110),u=r.a?r.a.prototype:void 0,c=u?u.toString:void 0;t.a=function e(t){if("string"==typeof t)return t;if(Object(i.a)(t))return Object(o.a)(t,e)+"";if(Object(a.a)(t))return c?c.call(t):"";var n=t+"";return"0"==n&&1/t==-1/0?"-0":n}},function(e,t,n){var r=n(5),o=n(6);function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}t.a=function(e){return"symbol"==i(e)||Object(o.a)(e)&&"[object Symbol]"==Object(r.a)(e)}},function(e,t,n){t.a=/<%-([\s\S]+?)%>/g},function(e,t,n){t.a=/<%([\s\S]+?)%>/g},function(e,t,n){var r=n(114);t.a=r.a},function(e,t,n){function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){for(var n=0;n\n '):e.renderTemplate=r,u(c(t.prototype),"refresh",this).call(this,e,n)}}])&&i(n.prototype,r),s&&i(n,s),t}(n(16).a);t.a=s},function(e,t,n){var r=n(116);t.a=r.a},function(e,t,n){var r,o,i,a,u,c,l,s,d,f,p,h,g,b=n(1),y=n(2),m=n(37),v=n(38),_=n(40),w=n(41),O=n(0),k=n(127);function C(e){return(C="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function x(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function D(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function E(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function S(e,t){for(var n=0;n-1?R:this._filterOptions[0]),this.state.type=this._defaultOption;var i=(x(n={},R,o(R,"Equals")),x(n,L,o(R,"Not equal")),x(n,F,o(F,"Less than")),x(n,G,o(G,"Greater than")),x(n,H,o(H,"In range")),n);this._gui=document.createElement("div"),this._gui.className="dateTimeFilter ag-filter-body-wrapper",this._gui.innerHTML='\n \n
\n
\n
\n
\n
\n
\n '),this._filterTimeInput.init(e),this._filterTimeInput.on(w.a.ON_DATE_CHANGED,(function(e){r.state.filter=e,r.notify(t.ON_CONDITION_CHANGED,r.state)})),this._filterToDateTimeInput.init(e),this._filterToDateTimeInput.on(w.a.ON_DATE_CHANGED,(function(e){r.state.filterTo=e,r.notify(t.ON_CONDITION_CHANGED,r.state)})),this._gui.querySelector(".ag-filter-date-from").appendChild(this._filterTimeInput.getGui()),this._gui.querySelector(".ag-filter-date-to").appendChild(this._filterToDateTimeInput.getGui()),this._gui.querySelector(".ag-filter-select").addEventListener("change",this._onTypeChange),this.setState(this._state)}},{key:"destroy",value:function(){this.off(t.ON_CONDITION_CHANGED),this._filterTimeInput.destroy(),this._filterToDateTimeInput.destroy(),this._gui.querySelector(".ag-filter-select").removeEventListener("change",this._onTypeChange),this.reset()}},{key:"reset",value:function(){this.state.filter=null,this.state.filterTo=null,this._filterTimeInput.reset(),this._filterToDateTimeInput.reset(),this.notify(t.ON_CONDITION_CHANGED,this.state)}},{key:"setState",value:function(e){e=e||{},this.state.filter=e.filter||null,this.state.filterTo=e.filterTo||null,this.state.type=e.type||this._defaultOption;var n=this._gui,r=this._filterOptions,o=n.querySelector(".ag-filter-select"),i=this._filterTimeInput,a=this._filterToDateTimeInput;if(o.selectedIndex=r.indexOf(this.state.type),i.setDate(this.state.filter),a.setDate(this.state.filterTo),"createEvent"in document){var u=document.createEvent("HTMLEvents");u.initEvent("change",!1,!0),o.dispatchEvent(u)}else o.fireEvent("onchange");this.notify(t.ON_CONDITION_CHANGED,this.state)}},{key:"_onTypeChange",value:function(e){var n=e.target,r=this._gui.querySelector(".ag-filter-date-to");this.state.type=n.options[n.selectedIndex].value,this.state.type===H?r.classList.remove("ag-hidden"):r.classList.add("ag-hidden"),this.notify(t.ON_CONDITION_CHANGED,this.state)}}]),t}(O.a),u.ON_CONDITION_CHANGED="ConditionPanel.ON_CONDITION_CHANGED",A(o=c,"ON_CONDITION_CHANGED",[m.a],(i=(i=Object.getOwnPropertyDescriptor(o,"ON_CONDITION_CHANGED"))?i.value:void 0,{enumerable:!0,configurable:!0,writable:!0,initializer:function(){return i}}),o),a=A(o.prototype,"state",[m.a],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return{type:R,filter:null,filterTo:null}}}),A(o.prototype,"init",[y.a],Object.getOwnPropertyDescriptor(o.prototype,"init"),o.prototype),A(o.prototype,"destroy",[y.a],Object.getOwnPropertyDescriptor(o.prototype,"destroy"),o.prototype),A(o.prototype,"_onTypeChange",[b.a],Object.getOwnPropertyDescriptor(o.prototype,"_onTypeChange"),o.prototype),r=o))||r,Y=Object(_.a)((h=p=function(e){function t(){var e,n;E(this,t);for(var r=arguments.length,o=new Array(r),i=0;i \n ').concat(t("andCondition","AND"),'\n \n
\n \n
\n \n \n
\n \n
\n \n
\n
\n '),this._gui.appendChild(this._operatorPanel),this._operatorPanel.addEventListener("change",this._onOperatorChanged),this._gui.appendChild(this._secondConditionPanel.getGui())}},{key:"destroy",value:function(){this._firstConditionPanel.destroy(),this._secondConditionPanel.destroy(),this._operatorPanel.removeEventListener("change",this._onOperatorChanged),this.off(t.ON_JOIN_CONDITION_CHANGED),this.reset()}},{key:"reset",value:function(){this._firstConditionPanel.reset(),this._secondConditionPanel.reset(),this.notify(B.ON_CONDITION_CHANGED,this.state)}},{key:"setState",value:function(e){var n=this;e=e||{},this.state.operator=e.operator||W,this.state.condition1=e.condition1||null,this.state.condition2=e.condition2||null,this._firstConditionPanel.setState(this.state.condition1),this._secondConditionPanel.setState(this.state.condition2),this._operatorPanel.querySelectorAll("input").forEach((function(e){e.classList.contains(n.state.operator)?e.checked=!0:e.checked=!1})),this.notify(t.ON_JOIN_CONDITION_CHANGED,this.state)}},{key:"_onOperatorChanged",value:function(e){var n=e.target;this.state.operator=n.value,n.classList.contains("OR")?(this._operatorPanel.querySelector(".ag-wrapper-or").classList.add("ag-checked"),this._operatorPanel.querySelector(".ag-wrapper-and").classList.remove("ag-checked")):(this._operatorPanel.querySelector(".ag-wrapper-or").classList.remove("ag-checked"),this._operatorPanel.querySelector(".ag-wrapper-and").classList.add("ag-checked")),this.notify(t.ON_JOIN_CONDITION_CHANGED,this.state)}},{key:"_onFirstConditionChanged",value:function(e){if(this.state.condition1=e,!this.getOption("suppressAndOrCondition",this._params,!1)){var n=this.state.condition1,r=n.filter,o=n.filterTo,i=n.type,a=this._secondConditionPanel.getGui(),u=this._operatorPanel;(i===H?r&&o:r)?(a.classList.remove("ag-hidden"),u.classList.remove("ag-hidden")):(a.classList.add("ag-hidden"),u.classList.add("ag-hidden"))}this.notify(t.ON_JOIN_CONDITION_CHANGED,this.state)}},{key:"_onSecondConditionChanged",value:function(e){this.state.condition2=e,this.notify(t.ON_JOIN_CONDITION_CHANGED,this.state)}}]),t}(O.a),p.ON_JOIN_CONDITION_CHANGED="JoinConditionPanel.ON_JOIN_CONDITION_CHANGED",A(s=h,"ON_JOIN_CONDITION_CHANGED",[m.a],(d=(d=Object.getOwnPropertyDescriptor(s,"ON_JOIN_CONDITION_CHANGED"))?d.value:void 0,{enumerable:!0,configurable:!0,writable:!0,initializer:function(){return d}}),s),f=A(s.prototype,"state",[m.a],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return{condition1:{},condition2:{},operator:W}}}),A(s.prototype,"init",[y.a],Object.getOwnPropertyDescriptor(s.prototype,"init"),s.prototype),A(s.prototype,"destroy",[y.a],Object.getOwnPropertyDescriptor(s.prototype,"destroy"),s.prototype),A(s.prototype,"_onOperatorChanged",[b.a],Object.getOwnPropertyDescriptor(s.prototype,"_onOperatorChanged"),s.prototype),A(s.prototype,"_onFirstConditionChanged",[b.a],Object.getOwnPropertyDescriptor(s.prototype,"_onFirstConditionChanged"),s.prototype),A(s.prototype,"_onSecondConditionChanged",[b.a],Object.getOwnPropertyDescriptor(s.prototype,"_onSecondConditionChanged"),s.prototype),l=s))||l,z=(A((g=function(e){function t(){var e,n;E(this,t);for(var r=arguments.length,o=new Array(r),i=0;i').concat(n("clearFilter","Clear Filter"),'\n \n \n "),(r||o||i)&&a.classList.remove("ag-hidden"),a.addEventListener("click",this._ApplyFilterPanelButtonClick),this._gui.appendChild(a),this._state=this._JoinConditionPanel.state,this._params=e,this._doesFilterPassOptions={enableTime:this.getOption("dateTimeEnableTime",this._params,!0),inRangeInclusive:this.getOption("inRangeInclusive",this._params,!1),valueGetter:this._params.hasOwnProperty("filterValueGetter")?this._params.filterValueGetter:this._params.valueGetter}}},{key:"destroy",value:function(){this._JoinConditionPanel.destroy()}},{key:"doesFilterPass",value:function(e){var t=this._doesFilterPassOptions.valueGetter(e),n=this._state,r=n.condition1,o=n.condition2,i=n.operator,a=this._doesPassCondition(r,t),u=this._doesPassCondition(o,t);return i===W?a||u:a&&u}},{key:"isFilterActive",value:function(){var e=this._state.condition1;return!(!e||!e.filter)&&(e.filterTo&&e.type===H?null!==e.filter&&null!==e.filterTo:null!==e.filter)}},{key:"getModel",value:function(){var e=this,t=JSON.parse(JSON.stringify(this._state));return[t.condition1,t.condition2].forEach((function(t,n){t.filter&&(t.filter=e._state["condition".concat(n+1)].filter.toISOString()),t.filterTo&&(t.filterTo=e._state["condition".concat(n+1)].filterTo.toISOString())})),t.filterType="datetime",t.condition1.filterType="datetime",t.condition2.filterType="datetime",t.hasOwnProperty("condition2")&&t.condition2.hasOwnProperty("filter")&&t.condition2.filter?t:t.condition1}},{key:"setModel",value:function(e){!e||e.hasOwnProperty("condition1")||e.hasOwnProperty("condition2")||(e={condition1:e}),this.__disableStateChangeListener=!0,this._JoinConditionPanel.setState(e),this.__disableStateChangeListener=!1,this._state=this._JoinConditionPanel.state,[this._state.condition1,this._state.condition2].forEach((function(e){e.filter&&(e.filter=new Date(e.filter)),e.filterTo&&(e.filterTo=new Date(e.filterTo))}))}},{key:"getModelAsString",value:function(e){if(!e)return"";var t=this.getOption("dateTimeMask",this._params,this._JoinConditionPanel._firstConditionPanel._filterTimeInput.picker.config.dateFormat),n=this.getOption("dateTimeLocale",this._params,Intl.DateTimeFormat().resolvedOptions().locale||"en-US"),r=JSON.parse(JSON.stringify(e)),o=r.condition1,i=r.condition2,a=r.operator;[o,i].forEach((function(e){e.filter&&(e.filter=BBj.Masks.DateMask.mask(e.filter,t,n)),e.filterTo&&(e.filterTo=BBj.Masks.DateMask.mask(e.filterTo,t,n))}));var u="".concat(o.filter||""," ").concat(o.filterTo?"→ "+o.filterTo:""),c="".concat(i.filter||""," ").concat(i.filterTo?"→ "+i.filterTo:""),l="".concat(i.filter&&a?a:"");return"".concat(u," ").concat(l," ").concat(c).trim()}},{key:"_doesPassCondition",value:function(e,t){if(!e.filter||!t)return!1;var n=e.filter,r=e.filterTo,o=e.type,i=BBj.Masks.Utils.Dates.getTimezoneOrOffset(),a=this._doesFilterPassOptions.inRangeInclusive,u=this._doesFilterPassOptions.enableTime,c=!1;return BBj.Masks.Utils.Dates.IS_TIME_REGEX.test(t)?(t=t=BBj.Masks.Utils.Dates.fixShortISO(t),[n,r].forEach((function(e){e instanceof Date&&(e.setFullYear(1970),e.setMonth(0),e.setDate(1))}))):BBj.Masks.Utils.Dates.IS_DATE_REGEX.test(t)&&(t=BBj.Masks.Utils.Dates.fixShortISO(t)),t=Object(v.a)(t,i),u||[t,n,r].forEach((function(e){e instanceof Date&&(e.setHours(0),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0))})),o===R?c=n>t==0&&nt==0&&nt:o===H&&r&&(c=a?(nt==0&&nt||r>t==0&&rt),c}},{key:"_ApplyFilterPanelButtonClick",value:function(e){var t=e.target;"BUTTON"===t.nodeName&&(t.classList.contains("reset")?(this._JoinConditionPanel.reset(),this._params.filterChangedCallback()):t.classList.contains("clear")?this._JoinConditionPanel.reset():t.classList.contains("apply")&&this._params.filterChangedCallback())}},{key:"_onJoinConditionPanelStateChanged",value:function(e,t){this._state=e,!1===t&&this._params.filterChangedCallback()}}]),t}(O.a)).prototype,"init",[y.a],Object.getOwnPropertyDescriptor(g.prototype,"init"),g.prototype),A(g.prototype,"destroy",[y.a],Object.getOwnPropertyDescriptor(g.prototype,"destroy"),g.prototype),A(g.prototype,"_ApplyFilterPanelButtonClick",[b.a],Object.getOwnPropertyDescriptor(g.prototype,"_ApplyFilterPanelButtonClick"),g.prototype),A(g.prototype,"_onJoinConditionPanelStateChanged",[b.a],Object.getOwnPropertyDescriptor(g.prototype,"_onJoinConditionPanelStateChanged"),g.prototype),g);t.a=z},function(e,t,n){t.a=function(e,t){var n=function(e){if(!o[e]){var t=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:"America/New_York",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(new Date("2014-06-25T04:00:00.123Z")),n="06/25/2014, 00:00:00"===t||"‎06‎/‎25‎/‎2014‎ ‎00‎:‎00‎:‎00"===t;o[e]=n?new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:e,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):new Intl.DateTimeFormat("en-US",{hourCycle:"h23",timeZone:e,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})}return o[e]}(t);return n.formatToParts?function(e,t){for(var n=e.formatToParts(t),o=[],i=0;i=0&&(o[a]=parseInt(n[i].value,10))}return o}(n,e):function(e,t){var n=e.format(t).replace(/\u200E/g,""),r=/(\d+)\/(\d+)\/(\d+),? (\d+):(\d+):(\d+)/.exec(n);return[r[3],r[1],r[2],r[4],r[5],r[6]]}(n,e)};var r={year:0,month:1,day:2,hour:3,minute:4,second:5},o={}},function(e,t,n){t.a=function(e,t){Object(i.a)(2,arguments);var n=Object(r.a)(t);return Object(o.a)(e,-n)};var r=n(13),o=n(119),i=n(14)},function(e,t,n){t.a=function(e,t){Object(i.a)(2,arguments);var n=Object(o.a)(e).getTime(),a=Object(r.a)(t);return new Date(n+a)};var r=n(13),o=n(120),i=n(14)},function(e,t,n){t.a=function(e){Object(r.a)(1,arguments);var t=Object.prototype.toString.call(e);return e instanceof Date||"object"===o(e)&&"[object Date]"===t?new Date(e.getTime()):"number"==typeof e||"[object Number]"===t?new Date(e):("string"!=typeof e&&"[object String]"!==t||"undefined"==typeof console||(console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule"),console.warn((new Error).stack)),new Date(NaN))};var r=n(14);function o(e){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}},function(e,t,n){t.a=function(e,t){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");if(null===e)return new Date(NaN);var n=t||{},u=null==n.additionalDigits?2:Object(r.a)(n.additionalDigits);if(2!==u&&1!==u&&0!==u)throw new RangeError("additionalDigits must be 0, 1 or 2");if(e instanceof Date||"object"===a(e)&&"[object Date]"===Object.prototype.toString.call(e))return new Date(e.getTime());if("number"==typeof e||"[object Number]"===Object.prototype.toString.call(e))return new Date(e);if("string"!=typeof e&&"[object String]"!==Object.prototype.toString.call(e))return new Date(NaN);var f=c(e),p=l(f.date,u),h=p.year,g=p.restDateString,b=s(g,h);if(isNaN(b))return new Date(NaN);if(b){var y,m=b.getTime(),v=0;if(f.time&&(v=d(f.time),isNaN(v)))return new Date(NaN);if(f.timezone||n.timeZone){if(y=Object(i.a)(f.timezone||n.timeZone,new Date(m+v)),isNaN(y))return new Date(NaN)}else y=Object(o.a)(new Date(m+v)),y=Object(o.a)(new Date(m+v+y));return new Date(m+v+y)}return new Date(NaN)};var r=n(13),o=n(122),i=n(39);function a(e){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var u={dateTimeDelimeter:/[T ]/,plainTime:/:/,timeZoneDelimeter:/[Z ]/i,YY:/^(\d{2})$/,YYY:[/^([+-]\d{2})$/,/^([+-]\d{3})$/,/^([+-]\d{4})$/],YYYY:/^(\d{4})/,YYYYY:[/^([+-]\d{4})/,/^([+-]\d{5})/,/^([+-]\d{6})/],MM:/^-(\d{2})$/,DDD:/^-?(\d{3})$/,MMDD:/^-?(\d{2})-?(\d{2})$/,Www:/^-?W(\d{2})$/,WwwD:/^-?W(\d{2})-?(\d{1})$/,HH:/^(\d{2}([.,]\d*)?)$/,HHMM:/^(\d{2}):?(\d{2}([.,]\d*)?)$/,HHMMSS:/^(\d{2}):?(\d{2}):?(\d{2}([.,]\d*)?)$/,timezone:/([Z+-].*| UTC|(?:[a-zA-Z]+\/[a-zA-Z_]+(?:\/[a-zA-Z_]+)?))$/};function c(e){var t,n={},r=e.split(u.dateTimeDelimeter);if(u.plainTime.test(r[0])?(n.date=null,t=r[0]):(n.date=r[0],t=r[1],n.timezone=r[2],u.timeZoneDelimeter.test(n.date)&&(n.date=e.split(u.timeZoneDelimeter)[0],t=e.substr(n.date.length,e.length))),t){var o=u.timezone.exec(t);o?(n.time=t.replace(o[1],""),n.timezone=o[1]):n.time=t}return n}function l(e,t){var n,r=u.YYY[t],o=u.YYYYY[t];if(n=u.YYYY.exec(e)||o.exec(e)){var i=n[1];return{year:parseInt(i,10),restDateString:e.slice(i.length)}}if(n=u.YY.exec(e)||r.exec(e)){var a=n[1];return{year:100*parseInt(a,10),restDateString:e.slice(a.length)}}return{year:null}}function s(e,t){if(null===t)return null;var n,r,o,i;if(0===e.length)return(r=new Date(0)).setUTCFullYear(t),r;if(n=u.MM.exec(e))return r=new Date(0),b(t,o=parseInt(n[1],10)-1)?(r.setUTCFullYear(t,o),r):new Date(NaN);if(n=u.DDD.exec(e)){r=new Date(0);var a=parseInt(n[1],10);return function(e,t){if(t<1)return!1;var n=g(e);return!(n&&t>366)&&!(!n&&t>365)}(t,a)?(r.setUTCFullYear(t,0,a),r):new Date(NaN)}if(n=u.MMDD.exec(e)){r=new Date(0),o=parseInt(n[1],10)-1;var c=parseInt(n[2],10);return b(t,o,c)?(r.setUTCFullYear(t,o,c),r):new Date(NaN)}if(n=u.Www.exec(e))return y(0,i=parseInt(n[1],10)-1)?f(t,i):new Date(NaN);if(n=u.WwwD.exec(e)){i=parseInt(n[1],10)-1;var l=parseInt(n[2],10)-1;return y(0,i,l)?f(t,i,l):new Date(NaN)}return null}function d(e){var t,n,r;if(t=u.HH.exec(e))return m(n=parseFloat(t[1].replace(",",".")))?n%24*36e5:NaN;if(t=u.HHMM.exec(e))return m(n=parseInt(t[1],10),r=parseFloat(t[2].replace(",",".")))?n%24*36e5+6e4*r:NaN;if(t=u.HHMMSS.exec(e)){n=parseInt(t[1],10),r=parseInt(t[2],10);var o=parseFloat(t[3].replace(",","."));return m(n,r,o)?n%24*36e5+6e4*r+1e3*o:NaN}return null}function f(e,t,n){t=t||0,n=n||0;var r=new Date(0);r.setUTCFullYear(e,0,4);var o=7*t+n+1-(r.getUTCDay()||7);return r.setUTCDate(r.getUTCDate()+o),r}var p=[31,28,31,30,31,30,31,31,30,31,30,31],h=[31,29,31,30,31,30,31,31,30,31,30,31];function g(e){return e%400==0||e%4==0&&e%100!=0}function b(e,t,n){if(t<0||t>11)return!1;if(null!=n){if(n<1)return!1;var r=g(e);if(r&&n>h[t])return!1;if(!r&&n>p[t])return!1}return!0}function y(e,t,n){return!(t<0||t>52||null!=n&&(n<0||n>6))}function m(e,t,n){return!(null!=e&&(e<0||e>=25)||null!=t&&(t<0||t>=60)||null!=n&&(n<0||n>=60))}},function(e,t,n){function r(e){return e.getTime()%6e4}t.a=function(e){var t=new Date(e.getTime()),n=Math.ceil(t.getTimezoneOffset());t.setSeconds(0,0);var o=n>0?(6e4+r(t))%6e4:r(t);return 6e4*n+o}},function(e,t,n){function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){for(var n=0;n0&&void 0!==arguments[0]&&arguments[0];return g(this,t),(e=y(this,m(t).call(this))).picker=null,e.selectedDate=null,e._params={},e._gui=document.createElement("div"),e._gui.className="ag-cell-edit-wrapper",e._gui.innerHTML='\n
\n
\n \n \n \n \n
\n
\n '),e}var n,r,o;return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&v(e,t)}(t,e),n=t,(r=[{key:"init",value:function(e){this._params=e;var t=this.getOption("dateTimeEnableTime",e,!0),n=this.getOption("dateTimeEnable24HR",e,!0),r=this.getOption("dateTimeEnableSeconds",e,!1),o=!this.getOption("dateTimeEnableCalendar",e,!0),i=this.getOption("dateTimeMask",e);i||(i=o?"":"%Y/%Mz/%Dz",t&&(i+=n?" %Hz:%mz":" %hz:%mz",r&&(i+=":%sz"))),i=i.trim(),this.picker=flatpickr(this._gui,{wrap:!0,allowInput:!1,onChange:this._onDateChanged,formatDate:this.formatDate,maxDate:this.getOption("dateTimeMax",e,null),minDate:this.getOption("dateTimeMin",e,null),defaultHour:this.getOption("dateTimeDefaultHour",e,12),defaultMinute:this.getOption("dateTimeDefaultMinute",e,0),disableMobile:this.getOption("dateTimeDisableMobile",e,!1),weekNumbers:this.getOption("dateTimeEnableWeekNumber",e,!1),locale:this._getPickerLocale(),noCalendar:o,dateFormat:i,enableTime:t,enableSeconds:r,time_24hr:n}),this.picker.calendarContainer.classList.add("ag-custom-component-popup")}},{key:"destroy",value:function(){this.picker.destroy(),this.off(t.ON_DATE_CHANGED)}},{key:"setDate",value:function(e){this.picker.setDate(e,!0)}},{key:"open",value:function(){this.picker.open(),this._gui.querySelector("input").focus()}},{key:"close",value:function(){this.picker.close()}},{key:"reset",value:function(){this.picker.config&&this.picker.clear()}},{key:"formatDate",value:function(e,t){var n=this.getOption("dateTimeFormatter",this._params),r=this.getOption("dateTimeLocale",this._params,Intl.DateTimeFormat().resolvedOptions().locale||"en-US");if(!n){if(!t||t&&t.indexOf("%")<0)return;return BBj.Masks.DateMask.mask(e,t,r)}var o=n;switch(h(n)){case"string":return o.indexOf("return")>=0||(o="return "+o+";"),new Function("date","format","locale","DateMask",o)(e,t,r,BBj.Masks.DateMask);case"function":return n(e,t,r,BBj.Masks.DateMask);default:throw new Error('Invalid dateTimeFormatter defined for column "'.concat(this._params.colDef.field,'". The formatter should be an expression or plain function'))}}},{key:"_onDateChanged",value:function(e){this.selectedDate=e[0]||null,this.notify(t.ON_DATE_CHANGED,this.selectedDate)}},{key:"_getPickerLocale",value:function(){for(var e=Intl.DateTimeFormat().resolvedOptions().locale||"en-US",t=[],n=[],r=4;r<11;r++){var o=new Date(1970,0,r);t.push(o.toLocaleString(e,{weekday:"short"}).split(",")[0]),n.push(o.toLocaleString(e,{weekday:"long"}).split(",")[0])}for(var i=[],a=[],u=0;u<12;u++){var c=new Date(1970,u,4);i.push(c.toLocaleString(e,{month:"short"})),a.push(c.toLocaleString(e,{month:"long"}))}return{weekdays:{shorthand:t,longhand:n},months:{shorthand:i,longhand:a},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:BBj.Masks.Utils.Dates.getWeekStartByLocale(e),ordinal:function(e){return""},rangeSeparator:" ",weekAbbreviation:"",scrollTitle:"",toggleTitle:"",amPM:["AM","PM"],yearAriaLabel:"",hourAriaLabel:"",minuteAriaLabel:""}}}])&&b(n.prototype,r),o&&b(n,o),t}(f.a),a.ON_DATE_CHANGED="DateTimeInput.ON_DATE_CHANGED",_(o=u,"ON_DATE_CHANGED",[s.a],(i=(i=Object.getOwnPropertyDescriptor(o,"ON_DATE_CHANGED"))?i.value:void 0,{enumerable:!0,configurable:!0,writable:!0,initializer:function(){return i}}),o),_(o.prototype,"init",[l.a],Object.getOwnPropertyDescriptor(o.prototype,"init"),o.prototype),_(o.prototype,"destroy",[l.a],Object.getOwnPropertyDescriptor(o.prototype,"destroy"),o.prototype),_(o.prototype,"formatDate",[c.a],Object.getOwnPropertyDescriptor(o.prototype,"formatDate"),o.prototype),_(o.prototype,"_onDateChanged",[c.a],Object.getOwnPropertyDescriptor(o.prototype,"_onDateChanged"),o.prototype),r=o))||r;t.a=w},function(e,t,n){var r=n(126);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:function(){return window.parent.document.head}};n(4)(r,o),r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(3)(!1)).push([e.i,".datetime__input{display:flex;align-items:center;width:100%;height:100%;overflow:hidden;border:1px solid var(--ag-input-border-color, var(--ag-border-color, #babfc7));border-radius:3px}.datetime__input:focus,.datetime__input:active,.datetime__input:hover{border-color:var(--ag-input-focus-border-color, rgba(33,150,243,0.4))}.datetime__input__input{flex:1;padding:6px;border:none;outline:none;background-color:var(--ag-background-color);color:inherit}.ag-theme-alpine .datetime__input__input,.ag-theme-balham .datetime__input__input,.ag-theme-material .datetime__input__input{background-color:var(--ag-background-color, #fff)}.ag-theme-alpine-dark .datetime__input__input,.ag-theme-balham-dark .datetime__input__input{background-color:var(--ag-background-color, #2d3436)}.datetime__input__clear{margin-left:1px;margin-top:1px;padding:6px;text-align:center;border:none;outline:none;cursor:pointer;color:inherit}.datetime__input--editor{border-color:var(--ag-input-focus-border-color, rgba(33,150,243,0.4))}.datetime__input--editor .datetime__input__input{padding:0;padding-left:6px}\n",""])},function(e,t,n){var r=n(128);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:function(){return window.parent.document.head}};n(4)(r,o),r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(3)(!1)).push([e.i,".dateTimeFilter select{margin-bottom:9px;padding:6px;border-radius:3px;border:1px solid var(--ag-input-border-color, var(--ag-border-color, #babfc7));color:inherit}.dateTimeFilter select:focus,.dateTimeFilter select:active{border-color:var(--ag-input-focus-border-color, rgba(33,150,243,0.4))}.dateTimeFilter select option{text-indent:6px}\n",""])},function(e,t,n){var r=n(130);t.a=r.a},function(e,t,n){var r,o=n(1),i=n(2),a=n(38),u=n(41);function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function l(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){for(var n=0;n1?n[i-1]:void 0,u=i>2?n[2]:void 0;for(a=e.length>3&&"function"==typeof a?(i--,a):void 0,u&&(0,o.default)(n[0],n[1],u)&&(a=i<3?void 0:a,i=1),t=Object(t);++r0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}};t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(30)),o=a(n(89)),i=a(n(12));function a(e){return e&&e.__esModule?e:{default:e}}var u=function(e){return(0,i.default)(e)?(0,r.default)(e,!0):(0,o.default)(e)};t.default=u},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e,t){for(var n=-1,r=Array(e);++n"']/g,u=RegExp(a.source);var c=function(e){return(e=(0,o.default)(e))&&u.test(e)?e.replace(a,r.default):e};t.default=c},function(e,t,n){"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=(0,((r=n(103))&&r.__esModule?r:{default:r}).default)({"&":"&","<":"<",">":">",'"':""","'":"'"});t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return function(t){return null==e?void 0:e[t]}};t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=u(n(9)),o=u(n(35)),i=u(n(31)),a=u(n(105));function u(e){return e&&e.__esModule?e:{default:e}}var c=r.default?r.default.prototype:void 0,l=c?c.toString:void 0;var s=function e(t){if("string"==typeof t)return t;if((0,i.default)(t))return(0,o.default)(t,e)+"";if((0,a.default)(t))return l?l.call(t):"";var n=t+"";return"0"==n&&1/t==-1/0?"-0":n};t.default=s},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(3)),o=i(n(4));function i(e){return e&&e.__esModule?e:{default:e}}function a(e){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var u=function(e){return"symbol"==a(e)||(0,o.default)(e)&&"[object Symbol]"==(0,r.default)(e)};t.default=u},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=/<%-([\s\S]+?)%>/g;t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=/<%([\s\S]+?)%>/g;t.default=r},function(e,t,n){"use strict";function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){for(var n=0;n0?e.style.setProperty(n,r.substr(0,o),"important"):e.style.setProperty(n,r)}}function g(e){return e.replace(/-([a-z])/g,(function(e,t){return t.toUpperCase()}))}function b(e){return e.replace(/([A-Z])/g,(function(e,t){return"-"+t.toLowerCase()}))}var y=function(e){this.doc=e,this.head=this.doc.head||this.doc.getElementsByTagName("head")[0],this.sheets=this.doc.styleSheets||[]};y.prototype={get:function(e){if(!this.defaultSheet)return{};if(e)return s(o(this.defaultSheet,e));var t=function(e){for(var t=e.cssRules||e.rules||[],n={},r=0;r\n*\n* For the full copyright and license information, please view the LICENSE\n* file that was distributed with this source code.\n*/\n\n.gw-alignment-cell-right,\n.gw-alignment-cell-right .ag-cell-value {\n text-align: right;\n -webkit-box-pack: end;\n -ms-flex-pack: end;\n justify-content: flex-end;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n\n.gw-alignment-cell-center,\n.gw-alignment-cell-center .ag-cell-value {\n text-align: center;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n\n.gw-alignment-header-right .ag-header-cell-label {\n -webkit-box-orient: horizontal;\n -webkit-box-direction: reverse;\n -ms-flex-direction: row-reverse;\n flex-direction: row-reverse;\n}\n\n.gw-alignment-header-center .ag-header-cell-label {\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n\n.gw-alignment-header-right .ag-cell-label-container,\n.gw-alignment-header-center .ag-cell-label-container {\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row;\n}\n\n.gw-tooltip {\n position: absolute;\n overflow: hidden;\n pointer-events: none;\n -webkit-transition: opacity 1s;\n transition: opacity 1s;\n border-radius: 3.1px;\n padding: 10px;\n -webkit-transition: opacity 260ms;\n transition: opacity 260ms;\n}\n\n.gw-tooltip-light {\n background-color: white;\n -webkit-box-shadow: 0 0 6px rgba(0, 0, 0, 0.25);\n box-shadow: 0 0 6px rgba(0, 0, 0, 0.25);\n}\n\n.gw-tooltip-dark {\n background-color: #1c1f20;\n -webkit-box-shadow: 0 0 6px #5c5c5c;\n box-shadow: 0 0 6px #5c5c5c;\n color: white;\n}\n"}])); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwaS91dGlsaXRpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2V2ZW50cy91dGlsaXRpZXMuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlR2V0VGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNPYmplY3RMaWtlLmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9tb2R1bGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RlZXAtcGFyc2UtanNvbi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZXZlbnRzL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzT2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1N5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19yb290LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvZXEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FycmF5TGlrZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmJqLW1hc2tzL3NyYy9TdHJpbmdNYXNrL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYmotbWFza3Mvc3JjL051bWJlck1hc2svaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwaS9jb2x1bW5zLmpzIiwid2VicGFjazovLy8uL3NyYy9leHByZXNzaW9uLmpzIiwid2VicGFjazovLy8uL3NyYy9hcGkvcm93cy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBpL2NoYXJ0cy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBpL2NlbGxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VBc3NpZ25WYWx1ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19kZWZpbmVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzRnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZnJlZUdsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlUmVzdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lkZW50aXR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FwcGx5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzSXRlcmF0ZWVDYWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNMZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheUxpa2VLZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc1Byb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzRXJyb3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb3ZlckFyZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheU1hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19yZUludGVycG9sYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzIiwid2VicGFjazovLy8uL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmJqLW1hc2tzL2Rpc3QvYmJqLW1hc2tzLmpzLWV4cG9zZWQiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Jiai1tYXNrcy9kaXN0L2Jiai1tYXNrcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFzaXMtaW5wdXQtbWFza2luZy9kaXN0L2Jhc2lzLWlucHV0LW1hc2tpbmcuanMtZXhwb3NlZCIsIndlYnBhY2s6Ly8vL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly8vd2VicGFjazovd2VicGFjay9ib290c3RyYXAgZmQ3ZjYwNDIxOTJlMTIzMmNmNjUiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6L2V4dGVybmFsIHtcImNvbW1vbmpzXCI6XCJiYmotbWFza3Mvc3JjL1N0cmluZ01hc2tcIixcImNvbW1vbmpzMlwiOlwiYmJqLW1hc2tzL3NyYy9TdHJpbmdNYXNrXCIsXCJhbWRcIjpcImJiai1tYXNrcy9zcmMvU3RyaW5nTWFza1wiLFwicm9vdFwiOltcIkJCalwiLFwiTWFza3NcIixcIlN0cmluZ01hc2tcIl19Iiwid2VicGFjazovLy8vc3JjL1RleHRJbnB1dC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9UZXh0SW5wdXQvVGV4dElucHV0LmpzIiwid2VicGFjazovLy8vc3JjL1RleHRJbnB1dC90b29scy5qcyIsIndlYnBhY2s6Ly8vL3NyYy9OdW1iZXJJbnB1dC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9OdW1iZXJJbnB1dC9OdW1iZXJJbnB1dC5qcyIsIndlYnBhY2s6Ly8vd2VicGFjazovZXh0ZXJuYWwge1wiY29tbW9uanNcIjpcImJiai1tYXNrcy9zcmMvTnVtYmVyTWFza1wiLFwiY29tbW9uanMyXCI6XCJiYmotbWFza3Mvc3JjL051bWJlck1hc2tcIixcImFtZFwiOlwiYmJqLW1hc2tzL3NyYy9OdW1iZXJNYXNrXCIsXCJyb290XCI6W1wiQkJqXCIsXCJNYXNrc1wiLFwiTnVtYmVyTWFza1wiXX0iLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Jiai1tYXNrcy9zcmMvU3RyaW5nTWFzay9TdHJpbmdNYXNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYmotbWFza3Mvc3JjL051bWJlck1hc2svTnVtYmVyTWFzay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZmxhdHBpY2tyL2Rpc3QvZmxhdHBpY2tyLmpzLWV4cG9zZWQiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2ZsYXRwaWNrci9kaXN0L2ZsYXRwaWNrci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFzaXMtYWdncmlkLWNvbXBvbmVudHMvZGlzdC9iYXNpcy1hZ2dyaWQtY29tcG9uZW50cy5qcy1leHBvc2VkIiwid2VicGFjazovLy93ZWJwYWNrOi93ZWJwYWNrL2Jvb3RzdHJhcCBiNzBmOGQ1ZjA2YzllYTZiMmU4ZiIsIndlYnBhY2s6Ly8vL3NyYy9Db21wb25lbnQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvY29yZS1kZWNvcmF0b3JzL3NyYy9hdXRvYmluZC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9jb3JlLWRlY29yYXRvcnMvc3JjL292ZXJyaWRlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUdldFRhZy5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNPYmplY3RMaWtlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2NvcmUtZGVjb3JhdG9ycy9zcmMvcHJpdmF0ZS91dGlscy5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNPYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19TeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19yb290LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9lcS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcnJheUxpa2UuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9Cb29sZWFuU3dpdGNoL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL1RlbXBsYXRlUmVuZGVyZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlQXNzaWduVmFsdWUuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19kZWZpbmVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNGdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2ZyZWVHbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlUmVzdC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaWRlbnRpdHkuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcHBseS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzSXRlcmF0ZWVDYWxsLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0xlbmd0aC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzSW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheUxpa2VLZXlzLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FycmF5LmpzIiwid2VicGFjazovLy8vKHdlYnBhY2spL2J1aWxkaW4vaGFybW9ueS1tb2R1bGUuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc1Byb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNFcnJvci5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX292ZXJBcmcuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheU1hcC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3JlSW50ZXJwb2xhdGUuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RvU3RyaW5nLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2NvcmUtZGVjb3JhdG9ycy9zcmMvcmVhZG9ubHkuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvZGF0ZS1mbnMtdHovZXNtL3V0Y1RvWm9uZWRUaW1lL2luZGV4LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2RhdGUtZm5zLXR6L2VzbS9fbGliL3R6UGFyc2VUaW1lem9uZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9FdmVudHNNaXhpbi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9EYXRlVGltZUlucHV0L2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL0Jvb2xlYW5FZGl0b3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9zcmMvQm9vbGVhbkVkaXRvci9Cb29sZWFuRWRpdG9yLmpzIiwid2VicGFjazovLy8vc3JjL0NvbXBvbmVudC9Db21wb25lbnQuanMiLCJ3ZWJwYWNrOi8vLy9zcmMvQm9vbGVhblN3aXRjaC9Cb29sZWFuU3dpdGNoLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2NvcmUtZGVjb3JhdG9ycy9zcmMvbGF6eS1pbml0aWFsaXplLmpzIiwid2VicGFjazovLy8vc3JjL0Jvb2xlYW5Td2l0Y2gvc3R5bGUuc2NzcyIsIndlYnBhY2s6Ly8vL3NyYy9Cb29sZWFuU3dpdGNoL3N0eWxlLnNjc3M/NzZhMyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL3VybHMuanMiLCJ3ZWJwYWNrOi8vLy9zcmMvQm9vbGVhblJlbmRlcmVyL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL0Jvb2xlYW5SZW5kZXJlci9Cb29sZWFuUmVuZGVyZXIuanMiLCJ3ZWJwYWNrOi8vLy9zcmMvQm9vbGVhbkZpbHRlci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9Cb29sZWFuRmlsdGVyL0Jvb2xlYW5GaWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy9zcmMvQm9vbGVhbkZpbHRlci9zdHlsZS5zY3NzIiwid2VicGFjazovLy8vc3JjL0Jvb2xlYW5GaWx0ZXIvc3R5bGUuc2Nzcz8wZDVlIiwid2VicGFjazovLy8vc3JjL051bWJlckVkaXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9OdW1iZXJFZGl0b3IvTnVtYmVyRWRpdG9yLmpzIiwid2VicGFjazovLy8vc3JjL051bWJlckVkaXRvci9zdHlsZS5zY3NzIiwid2VicGFjazovLy8vc3JjL051bWJlckVkaXRvci9zdHlsZS5zY3NzP2FhMGUiLCJ3ZWJwYWNrOi8vLy9zcmMvVGV4dEVkaXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9UZXh0RWRpdG9yL1RleHRFZGl0b3IuanMiLCJ3ZWJwYWNrOi8vLy9zcmMvVGV4dEVkaXRvci9zdHlsZS5zY3NzIiwid2VicGFjazovLy8vc3JjL1RleHRFZGl0b3Ivc3R5bGUuc2Nzcz8wOTFiIiwid2VicGFjazovLy8vc3JjL1RlbXBsYXRlUmVuZGVyZXIvVGVtcGxhdGVSZW5kZXJlci5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdGVtcGxhdGUuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2Fzc2lnbkluV2l0aC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NvcHlPYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hc3NpZ25WYWx1ZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldE5hdGl2ZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc05hdGl2ZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFJhd1RhZy5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX29iamVjdFRvU3RyaW5nLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNNYXNrZWQuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jb3JlSnNEYXRhLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fdG9Tb3VyY2UuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRWYWx1ZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NyZWF0ZUFzc2lnbmVyLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb3ZlclJlc3QuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zZXRUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VTZXRUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvY29uc3RhbnQuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zaG9ydE91dC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMva2V5c0luLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRpbWVzLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FyZ3VtZW50cy5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc0FyZ3VtZW50cy5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNCdWZmZXIuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3N0dWJGYWxzZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNUeXBlZEFycmF5LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzVHlwZWRBcnJheS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VVbmFyeS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25vZGVVdGlsLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUtleXNJbi5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25hdGl2ZUtleXNJbi5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvYXR0ZW1wdC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNQbGFpbk9iamVjdC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFByb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VWYWx1ZXMuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jdXN0b21EZWZhdWx0c0Fzc2lnbkluLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZXNjYXBlU3RyaW5nQ2hhci5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMva2V5cy5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VLZXlzLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbmF0aXZlS2V5cy5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdGVtcGxhdGVTZXR0aW5ncy5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvZXNjYXBlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZXNjYXBlSHRtbENoYXIuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlUHJvcGVydHlPZi5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNTeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19yZUVzY2FwZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3JlRXZhbHVhdGUuanMiLCJ3ZWJwYWNrOi8vLy9zcmMvSW1hZ2VSZW5kZXJlci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9JbWFnZVJlbmRlcmVyL0ltYWdlUmVuZGVyZXIuanMiLCJ3ZWJwYWNrOi8vLy9zcmMvRGF0ZVRpbWVGaWx0ZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9zcmMvRGF0ZVRpbWVGaWx0ZXIvRGF0ZVRpbWVGaWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvZGF0ZS1mbnMtdHovZXNtL19saWIvdHpUb2tlbml6ZURhdGUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vYWRkTWlsbGlzZWNvbmRzL2luZGV4LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS90b0RhdGUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvZGF0ZS1mbnMtdHovZXNtL3RvRGF0ZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL0V2ZW50c01peGluL0V2ZW50c01peGluLmpzIiwid2VicGFjazovLy8vc3JjL0RhdGVUaW1lSW5wdXQvRGF0ZVRpbWVJbnB1dC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9EYXRlVGltZUlucHV0L3N0eWxlLnNjc3MiLCJ3ZWJwYWNrOi8vLy9zcmMvRGF0ZVRpbWVJbnB1dC9zdHlsZS5zY3NzPzRmNjciLCJ3ZWJwYWNrOi8vLy9zcmMvRGF0ZVRpbWVGaWx0ZXIvc3R5bGUuc2NzcyIsIndlYnBhY2s6Ly8vL3NyYy9EYXRlVGltZUZpbHRlci9zdHlsZS5zY3NzPzc2ZmIiLCJ3ZWJwYWNrOi8vLy9zcmMvRGF0ZVRpbWVFZGl0b3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9zcmMvRGF0ZVRpbWVFZGl0b3IvRGF0ZVRpbWVFZGl0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BvbHlmaWxscy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBpL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9hcGkvaW5pdC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBpL21lbnVzLmpzIiwid2VicGFjazovLy8uL3NyYy9ldmVudHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2V2ZW50cy9zZWxlY3Rpb25zLmpzIiwid2VicGFjazovLy8uL3NyYy9ldmVudHMvZWRpdGluZy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZXZlbnRzL3JlYWR5LmpzIiwid2VicGFjazovLy8uL3NyYy9ldmVudHMvc3RhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2V2ZW50cy9rZXlib2FyZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RlbXBsYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvYXNzaWduSW5XaXRoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NvcHlPYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXNzaWduVmFsdWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0TmF0aXZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc05hdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRSYXdUYWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb2JqZWN0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNNYXNrZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29yZUpzRGF0YS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL190b1NvdXJjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRWYWx1ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jcmVhdGVBc3NpZ25lci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19vdmVyUmVzdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zZXRUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlU2V0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9jb25zdGFudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zaG9ydE91dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2tleXNJbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVGltZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FyZ3VtZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0J1ZmZlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3N0dWJGYWxzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzVHlwZWRBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNUeXBlZEFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VVbmFyeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19ub2RlVXRpbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlS2V5c0luLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25hdGl2ZUtleXNJbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2F0dGVtcHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1BsYWluT2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFByb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVmFsdWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2N1c3RvbURlZmF1bHRzQXNzaWduSW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZXNjYXBlU3RyaW5nQ2hhci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbmF0aXZlS2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RlbXBsYXRlU2V0dGluZ3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZXNjYXBlSHRtbENoYXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVByb3BlcnR5T2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRvU3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNTeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcmVFc2NhcGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcmVFdmFsdWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9IVE1MVG9vbHRpcC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBpL3N0YXRlLmpzIiwid2VicGFjazovLy8uL3NyYy9hcGkvdG9vbHBhbmVsLmpzIiwid2VicGFjazovLy8uL3NyYy9hcGkvc3RhdHVzYmFyLmpzIiwid2VicGFjazovLy8uL3NyYy9hcGkvb3ZlcmxheXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwaS9jb250ZXh0LmpzIiwid2VicGFjazovLy8uL3NyYy9hcGkvanNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9qc3MvanNzLmpzLWV4cG9zZWQiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2pzcy9qc3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2ZsYXRwaWNrci9kaXN0L2ZsYXRwaWNrci5jc3M/N2I2OCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZmxhdHBpY2tyL2Rpc3QvZmxhdHBpY2tyLmNzcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi91cmxzLmpzIiwid2VicGFjazovLy8uL3NyYy9zdHlsZS9jbGFzc2VzLmNzcz9iNzM4Iiwid2VicGFjazovLy8uL3NyYy9zdHlsZS9jbGFzc2VzLmNzcyJdLCJuYW1lcyI6WyJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsImd3X2dldEdyaWQiLCJpZCIsIndpbmRvdyIsIkJCakdyaWRFeFdpZGdldCIsImdyaWQiLCJyZWdpc3RlcmVkR3JpZHMiLCJKU09OIiwic3RyaW5naWZ5Iiwia2V5cyIsIlR5cGVFcnJvciIsIiRkb2MiLCJkb2N1bWVudCIsIiR3bmQiLCJyZXBsYWNlIiwiTWF0aCIsInJhbmRvbSIsInRvU3RyaW5nIiwib3B0aW9ucyIsImZ1bmMiLCJ3YWl0IiwiaW1tZWRpYXRlIiwidGltZW91dCIsImNvbnRleHQiLCJ0aGlzIiwiYXJncyIsImFyZ3VtZW50cyIsImxhdGVyIiwiYXBwbHkiLCJjYWxsTm93IiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsInBheWxvYWQiLCJldmVudElkIiwicmVnaXN0ZXJlZEludGVyZXN0cyIsImludGVyZXN0cyIsImluY2x1ZGVzIiwiZGl2IiwiZ3dfZ2V0RG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImJhc2lzRGlzcGF0Y2hDdXN0b21FdmVudCIsImUiLCJnd19wYXJzZU5vZGUiLCJub2RlIiwiZ3JvdXAiLCJnZXRSb3dOb2RlSWQiLCJyb3dQaW5uZWQiLCJkYXRhIiwieCIsInJvd0luZGV4IiwicGFyZW50IiwiY2hpbGRJbmRleCIsIkJvb2xlYW4iLCJzZWxlY3RlZCIsImNyIiwicHAiLCJnIiwiRnVuY3Rpb24iLCJzeW1Ub1N0cmluZ1RhZyIsInVuZGVmaW5lZCIsIndlYnBhY2tQb2x5ZmlsbCIsImRlcHJlY2F0ZSIsInBhdGhzIiwiY2hpbGRyZW4iLCJkZWVwUGFyc2VKc29uIiwianNvblN0cmluZyIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsInZhbCIsInJlZHVjZSIsIm9iaiIsInBhcnNlIiwiZXJyIiwidHlwZSIsInJvb3QiLCJmcmVlU2VsZiIsInNlbGYiLCJmcmVlR2xvYmFsIiwib3RoZXIiLCJsZW5ndGgiLCJTdHJpbmdNYXNrIiwiTnVtYmVyTWFzayIsImRlZmluaXRpb25zIiwiZGVlcFBhcnNlZERlZmluaXRpb25zIiwiZ3dfZXh0ZW5kQ29sdW1uRGVmaW5pdGlvbnMiLCJhcGkiLCJzZXRDb2x1bW5EZWZzIiwiY29sdW1uRGVmcyIsIndpZHRoIiwiY29sdW1uc0FQSSIsImNvbHVtbkFwaSIsInNpemVDb2x1bW5zVG9GaXQiLCJOdW1iZXIiLCJza2lwSGVhZGVyIiwiY29sdW1ucyIsImF1dG9TaXplQ29sdW1ucyIsImFsbENvbHVtbklkcyIsImdldEFsbENvbHVtbnMiLCJmb3JFYWNoIiwiY29sdW1uIiwicHVzaCIsImNvbElkIiwiY29sdW1uSWQiLCJlbnN1cmVDb2x1bW5WaXNpYmxlIiwic2V0Q29sdW1uV2lkdGgiLCJwaW4iLCJzZXRDb2x1bW5QaW5uZWQiLCJ0b0luZGV4IiwibW92ZUNvbHVtbiIsInNldCIsInNwbGl0IiwidHJpbSIsInJlbW92ZVJvd0dyb3VwQ29sdW1ucyIsImlzUGl2b3RNb2RlIiwic2V0UGl2b3RNb2RlIiwicmVtb3ZlUGl2b3RDb2x1bW5zIiwiYWRkVmFsdWVDb2x1bW5zIiwicmVtb3ZlVmFsdWVDb2x1bW5zIiwibW9kZWwiLCJhc0FycmF5IiwicGFyc2VkTW9kZWwiLCJzb3J0Iiwic2V0U29ydE1vZGVsIiwicmVkcmF3Um93cyIsInJlcXVpcmUiLCJfY29uZmlndXJlVG9vbHRpcHMiLCJkZWYiLCJ0b29sdGlwVmFsdWVHZXR0ZXJFeHByZXNzaW9uIiwidG9vbHRpcFZhbHVlR2V0dGVyIiwicGFyYW1zIiwiZ3dfZXhlY3V0ZUV4cHJlc3Npb24iLCJ0b29sdGlwQ29tcG9uZW50IiwiY2hpbGQiLCJjaGVja2JveFNlbGVjdGlvbiIsImd3X2lzU2hvd1NlbGVjdGlvbkNoZWNrYm94IiwiaGVhZGVyQ2hlY2tib3hTZWxlY3Rpb24iLCJnd19pc0hlYWRlckNoZWNrYm94U2VsZWN0aW9uIiwiZWRpdGFibGUiLCJwYXJhbSIsInNob3dTZWxlY3Rpb25DaGVja2JveCIsImdldEFsbEdyaWRDb2x1bW5zIiwiY29sRGVmIiwiZmllbGQiLCJncmlkT3B0aW9uc1dyYXBwZXIiLCJncmlkT3B0aW9ucyIsInNob3dIZWFkZXJTZWxlY3Rpb25DaGVja2JveCIsImd3X2NvbXBpbGVFeHByZXNzaW9uIiwiZXhwcmVzc2lvbiIsImV4cHJlc3Npb25DYWNoZSIsImZ1bmN0aW9uQm9keSIsImluZGV4T2YiLCJ0aGVGdW5jdGlvbiIsImphdmFTY3JpcHRGdW5jdGlvbiIsIm9sZFZhbHVlIiwibmV3VmFsdWUiLCJnZXRWYWx1ZSIsImNvbHVtbkdyb3VwIiwiY29uc29sZSIsImxvZyIsImZpbHRlciIsInNldFF1aWNrRmlsdGVyIiwiZXhwYW5kQWxsIiwiY29sbGFwc2VBbGwiLCJpbmRleCIsInBvc2l0aW9uIiwiZ2V0Um93Tm9kZSIsImVuc3VyZU5vZGVWaXNpYmxlIiwiZW5zdXJlSW5kZXhWaXNpYmxlIiwicHJldmlvdXNDZWxsIiwicHJldmlvdXNDZWxsUG9zaXRpb24iLCJzdWdnZXN0ZWROZXh0Q2VsbCIsIm5leHRDZWxsUG9zaXRpb24iLCJyb3ciLCJnZXREaXNwbGF5ZWRSb3dBdEluZGV4IiwiZ2V0Rmlyc3REaXNwbGF5ZWRSb3ciLCJzZXRTZWxlY3RlZCIsImZvckVhY2hOb2RlIiwiZ2V0TGFzdERpc3BsYXllZFJvdyIsIkVycm9yIiwianNvbiIsInNldFJvd0RhdGEiLCJyb3dEYXRhIiwidHJhbnNhY3Rpb24iLCJiYXRjaFVwZGF0ZSIsInJlbW92ZSIsIml0ZW1zIiwiYmF0Y2hVcGRhdGVSb3dEYXRhIiwidXBkYXRlUm93RGF0YSIsImhlaWdodCIsInNldFJvd0hlaWdodCIsIm9uUm93SGVpZ2h0Q2hhbmdlZCIsIndhcm4iLCJyZXNldFJvd0hlaWdodHMiLCJyb3dzIiwiZm9yRWFjaE5vZGVBZnRlckZpbHRlckFuZFNvcnQiLCJTdHJpbmciLCJleHBhbmRlZCIsIm9uR3JvdXBFeHBhbmRlZE9yQ29sbGFwc2VkIiwiZmlsdGVyZWQiLCJzZWxlY3RBbGxGaWx0ZXJlZCIsInNlbGVjdEFsbCIsImRlc2VsZWN0QWxsRmlsdGVyZWQiLCJkZXNlbGVjdEFsbCIsImd3X2dldFNlbGVjdGVkUm93cyIsInBoYXNlIiwiZmlsdGVyRXhwcmVzc2lvbiIsInBhcnNlZCIsImdyaWRBcGkiLCJzZXRQaW5uZWRUb3BSb3dEYXRhIiwic2V0UGlubmVkQm90dG9tUm93RGF0YSIsIm5vZGVzIiwiZ2V0U2VsZWN0ZWROb2RlcyIsImNoYXJ0VG9vbGJhckl0ZW1zIiwicmFuZ2UiLCJwciIsImNlbGxSYW5nZSIsImd3X3BhcnNlQWRkQ2VsbFJhbmdlIiwicmVmIiwiY3JlYXRlUmFuZ2VDaGFydCIsInV1aWQiLCJnd191dWlkIiwiY3JlYXRlZF9jaGFydHMiLCJkZXN0cm95Q2hhcnQiLCJjb2xLZXkiLCJrZXlQcmVzcyIsImNoYXJQcmVzcyIsInN0YXJ0RWRpdGluZ0NlbGwiLCJjYW5jZWwiLCJzdG9wRWRpdGluZyIsInRhYlRvTmV4dENlbGwiLCJ0YWJUb1ByZXZpb3VzQ2VsbCIsImYiLCJmbG9hdGluZyIsImdldEVkaXRpbmdDZWxscyIsImxhc3RGb2N1c2VkQ2VsbCIsImdldEZvY3VzZWRDZWxsIiwiaXNJbnRlZ2VyIiwic2V0Rm9jdXNlZENlbGwiLCJyYW5nZXMiLCJnZXRDZWxsUmFuZ2VzIiwiZ2V0TW9kZWwiLCJyZXN1bHQiLCJhY2N1bXVsYXRvciIsImN1cnJlbnQiLCJzdGFySW5kZXgiLCJtaW4iLCJzdGFydFJvdyIsImVuZFJvdyIsImVuZEluZGV4IiwibWF4IiwiZ2V0Um93IiwicGFyc2VkTm9kZSIsImFkZENlbGxSYW5nZSIsImNsZWFyUmFuZ2VTZWxlY3Rpb24iLCJzdGFydCIsImVuZCIsInJvd1N0YXJ0SW5kZXgiLCJhYnMiLCJyb3dFbmRJbmRleCIsInRhZyIsImdsb2JhbCIsImlkZW50aXR5IiwidGhpc0FyZyIsInJlSXNVaW50IiwidGVzdCIsImluaGVyaXRlZCIsImlzQXJyIiwiaXNBcmciLCJpc0J1ZmYiLCJpc1R5cGUiLCJza2lwSW5kZXhlcyIsIm9iamVjdFByb3RvIiwiQ3RvciIsImNvbnN0cnVjdG9yIiwibWVzc2FnZSIsInRyYW5zZm9ybSIsImFyZyIsImFycmF5IiwiaXRlcmF0ZWUiLCJmbiIsIm1lbW8iLCJzdHlsZXNJbkRvbSIsImlzT2xkSUUiLCJhbGwiLCJhdG9iIiwiZ2V0VGFyZ2V0IiwidGFyZ2V0IiwicXVlcnlTZWxlY3RvciIsImdldEVsZW1lbnQiLCJzdHlsZVRhcmdldCIsIkhUTUxJRnJhbWVFbGVtZW50IiwiY29udGVudERvY3VtZW50IiwiaGVhZCIsInNpbmdsZXRvbiIsInNpbmdsZXRvbkNvdW50ZXIiLCJzdHlsZXNJbnNlcnRlZEF0VG9wIiwiZml4VXJscyIsImFkZFN0eWxlc1RvRG9tIiwic3R5bGVzIiwiaXRlbSIsImRvbVN0eWxlIiwicmVmcyIsImoiLCJwYXJ0cyIsImFkZFN0eWxlIiwibGlzdFRvU3R5bGVzIiwibGlzdCIsIm5ld1N0eWxlcyIsImJhc2UiLCJwYXJ0IiwiY3NzIiwibWVkaWEiLCJzb3VyY2VNYXAiLCJpbnNlcnRTdHlsZUVsZW1lbnQiLCJzdHlsZSIsImluc2VydEludG8iLCJsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcCIsImluc2VydEF0IiwibmV4dFNpYmxpbmciLCJpbnNlcnRCZWZvcmUiLCJhcHBlbmRDaGlsZCIsImZpcnN0Q2hpbGQiLCJiZWZvcmUiLCJyZW1vdmVTdHlsZUVsZW1lbnQiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJpZHgiLCJzcGxpY2UiLCJjcmVhdGVTdHlsZUVsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiYXR0cnMiLCJhZGRBdHRycyIsImVsIiwic2V0QXR0cmlidXRlIiwidXBkYXRlIiwic3R5bGVJbmRleCIsImFwcGx5VG9TaW5nbGV0b25UYWciLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJyZXZva2VPYmplY3RVUkwiLCJCbG9iIiwiYnRvYSIsImxpbmsiLCJyZWwiLCJjcmVhdGVMaW5rRWxlbWVudCIsInVwZGF0ZUxpbmsiLCJocmVmIiwiYXBwbHlUb1RhZyIsIm5ld09iaiIsIkRFQlVHIiwibmV3TGlzdCIsIm1heVJlbW92ZSIsInRleHRTdG9yZSIsInJlcGxhY2VUZXh0IiwicmVwbGFjZW1lbnQiLCJqb2luIiwic3R5bGVTaGVldCIsImNzc1RleHQiLCJjc3NOb2RlIiwiY3JlYXRlVGV4dE5vZGUiLCJjaGlsZE5vZGVzIiwiYXV0b0ZpeFVybHMiLCJjb252ZXJ0VG9BYnNvbHV0ZVVybHMiLCJ1bmVzY2FwZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImJsb2IiLCJvbGRTcmMiLCJmYWN0b3J5IiwiY29uZmlndXJhYmxlIiwiX193ZWJwYWNrX2V4cG9ydHNfXyIsImRpcnR5TnVtYmVyIiwiTmFOIiwibnVtYmVyIiwiaXNOYU4iLCJjZWlsIiwiZmxvb3IiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX051bWJlck1hc2tfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0ZU1hc2tfXyIsInRpbWV6b25lU3RyaW5nIiwiZGF0ZSIsInRva2VuIiwiYWJzb2x1dGVPZmZzZXQiLCJob3VycyIsInBhdHRlcm5zIiwidGltZXpvbmVaIiwiZXhlYyIsInRpbWV6b25lSEgiLCJ2YWxpZGF0ZVRpbWV6b25lIiwicGFyc2VJbnQiLCJ0aW1lem9uZUhITU0iLCJtaW51dGVzIiwidGltZXpvbmVJQU5BIiwidG9rZW5zIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX190elRva2VuaXplRGF0ZV9pbmRleF9qc19fIiwiYXNVVEMiLCJEYXRlIiwiVVRDIiwidGltZXN0YW1wV2l0aE1zWmVyb2VkIiwiZ2V0VGltZSIsInRpbWV6b25lIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdHJpbmdNYXNrX18iLCJVdGlscyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fRGF0ZU1hc2tfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fU3RyaW5nTWFza19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19UeXBlc19fIiwiRGF0ZXMiLCJnZXREYXlPZlllYXIiLCJnZXRXZWVrTnVtYmVyIiwiZ2V0V2Vla1N0YXJ0QnlMb2NhbGUiLCJJU19EQVRFX1JFR0VYIiwiSVNfVElNRV9SRUdFWCIsImZpeFNob3J0SVNPIiwiZ2V0VGltZXpvbmVPck9mZnNldCIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwicHJvcHMiLCJkZXNjcmlwdG9yIiwid3JpdGFibGUiLCJpbnN0YW5jZSIsIkNvbnN0cnVjdG9yIiwiX2NsYXNzQ2FsbENoZWNrIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwiX21hc2siLCJncm91cGluZ1NlcGFyYXRvciIsImRlY2ltYWxTZXBhcmF0b3IiLCJmb3JjZVRyYWlsaW5nWmVyb3MiLCJsb29zZSIsIm1hc2tMZW4iLCJzdHIiLCJtYXNrQmVmb3JlRGVjaW1hbCIsIm1hc2tBZnRlckRlY2ltYWwiLCJmb3VuZERlY2ltYWwiLCJjaGFyQXQiLCJudW0iLCJfcm91bmQiLCJieXRlcyIsIl90b0NoYXJBcnJheSIsImluTGVuIiwibnVtQmVmb3JlRGVjaW1hbCIsIm51bUFmdGVyRGVjaW1hbCIsIl9pIiwiX2kyIiwiZmlsbEJ5dGUiLCJmbG9hdEJ5dGUiLCJpblBvcyIsIm91dFBvcyIsImZsb2F0UG9zIiwiZmlsbEluaXQiLCJpc05lZ2F0aXZlIiwiX2dldFNpZ24iLCJlbWl0RGVjaW1hbCIsImZvdW5kWmVybyIsImZvdW5kRGlnaXQiLCJyZXQiLCJtYXNrUG9zIiwiX20iLCJwcmVjaXNpb24iLCJyZXZlcnNlU2hpZnQiLCJudW1BcnJheSIsIl9zaGlmdCIsInJvdW5kIiwic2lnbnVtIiwiY2hhcnMiLCJzdHJpbmciLCJjb25jYXQiLCJzdWJzdHJpbmciLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfZGF0ZV9mbnNfdHpfdXRjVG9ab25lZFRpbWVfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV93ZWVrc3RhcnRfXyIsImxvY2FsZSIsImdldEZ1bGxZZWFyIiwiZGlmZiIsImdldFRpbWV6b25lT2Zmc2V0Iiwib2Zmc2V0IiwibWF0Y2giLCJJbnRsIiwiRGF0ZVRpbWVGb3JtYXQiLCJyZXNvbHZlZE9wdGlvbnMiLCJ0aW1lWm9uZSIsInBhZCIsIndlZWtTdGFydCIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImRheU51bSIsImdldFVUQ0RheSIsInNldFVUQ0RhdGUiLCJnZXRVVENEYXRlIiwieWVhclN0YXJ0IiwiZ2V0VVRDRnVsbFllYXIiLCJEYXRlTWFzayIsImRhdGVPYmplY3QiLCJ0cmFuc2xhdGlvbiIsIl9idWlsZFRyYW5zbGF0aW9uIiwieWVhciIsIm1vbnRoIiwibW9udGhTaG9ydCIsImZvcm1hdCIsIm1vbnRoTG9uZyIsImRheSIsImRheVNob3J0Iiwid2Vla2RheSIsImRheUxvbmciLCJnZXRNaW51dGVzIiwic2Vjb25kcyIsImdldFNlY29uZHMiLCJnZXRIb3VycyIsImhvdXJzMjQiLCJkYXlPZlllYXIiLCJkYXlPZldlZWsiLCJnZXREYXkiLCJ3ZWVrTnVtYmVyIiwiayIsIlJlZ0V4cCIsImRhdGVEZXRhaWxzIiwiWXoiLCJzdWJzdHIiLCJZcyIsIllsIiwiWXAiLCJmcm9tQ2hhckNvZGUiLCJZZCIsIlkiLCJNeiIsIk1zIiwiTWwiLCJNcCIsIk1kIiwiTSIsIkR6IiwiRHMiLCJEbCIsIkRwIiwiRGQiLCJEIiwiSHoiLCJIcyIsIkhsIiwiSHAiLCJIZCIsIkgiLCJoeiIsImhvdXJzMTIiLCJocyIsImhsIiwiaHAiLCJoZCIsImgiLCJteiIsIm1zIiwibWwiLCJtcCIsIm1kIiwic3oiLCJzcyIsInNsIiwic3AiLCJzZCIsIlBQIiwiUCIsIkp6IiwiSnMiLCJKbCIsIkpkIiwiSiIsIld6IiwiV3MiLCJXbCIsIldwIiwiV2QiLCJXIiwid3oiLCJ3cyIsIndsIiwid3AiLCJ3ZCIsInciLCJkaXJ0eURhdGUiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3RvRGF0ZV9fIiwidXRjRGF0ZSIsImdldFVUQ01vbnRoIiwiZ2V0VVRDSG91cnMiLCJnZXRVVENNaW51dGVzIiwiZ2V0VVRDU2Vjb25kcyIsImdldFVUQ01pbGxpc2Vjb25kcyIsIm9mZnNldE1pbGxpc2Vjb25kcyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbGliX3R6UGFyc2VUaW1lem9uZV9fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2RhdGVfZm5zX2VzbV9zdWJNaWxsaXNlY29uZHNfXyIsImR0ZiIsImR0ZkNhY2hlIiwidGVzdERhdGVGb3JtYXR0ZWQiLCJob3VyMTIiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwiaG91ckN5Y2xlU3VwcG9ydGVkIiwiaG91ckN5Y2xlIiwiZ2V0RGF0ZVRpbWVGb3JtYXQiLCJmb3JtYXRUb1BhcnRzIiwiZm9ybWF0dGVkIiwiZmlsbGVkIiwicG9zIiwidHlwZVRvUG9zIiwicGFydHNPZmZzZXQiLCJoYWNreU9mZnNldCIsImRpcnR5QW1vdW50IiwiYW1vdW50IiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19saWJfdG9JbnRlZ2VyX2luZGV4X2pzX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2FkZE1pbGxpc2Vjb25kc19pbmRleF9qc19fIiwidGltZXN0YW1wIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX190b0RhdGVfaW5kZXhfanNfXyIsImFyZ3VtZW50IiwiYXJnU3RyIiwic3RhY2siLCJkaXJ0eU9wdGlvbnMiLCJhZGRpdGlvbmFsRGlnaXRzIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2RhdGVfZm5zX2VzbV9saWJfdG9JbnRlZ2VyX2luZGV4X2pzX18iLCJSYW5nZUVycm9yIiwiZGF0ZVN0cmluZ3MiLCJzcGxpdERhdGVTdHJpbmciLCJwYXJzZVllYXJSZXN1bHQiLCJwYXJzZVllYXIiLCJyZXN0RGF0ZVN0cmluZyIsInBhcnNlRGF0ZSIsInRpbWUiLCJwYXJzZVRpbWUiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2xpYl90elBhcnNlVGltZXpvbmVfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9kYXRlX2Zuc19lc21fbGliX2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHNfaW5kZXhfanNfXyIsImRhdGVUaW1lRGVsaW1ldGVyIiwicGxhaW5UaW1lIiwidGltZVpvbmVEZWxpbWV0ZXIiLCJZWSIsIllZWSIsIllZWVkiLCJZWVlZWSIsIk1NIiwiREREIiwiTU1ERCIsIld3dyIsIld3d0QiLCJISCIsIkhITU0iLCJISE1NU1MiLCJkYXRlU3RyaW5nIiwidGltZVN0cmluZyIsInBhdHRlcm5ZWVkiLCJwYXR0ZXJuWVlZWVkiLCJ5ZWFyU3RyaW5nIiwic2xpY2UiLCJjZW50dXJ5U3RyaW5nIiwid2VlayIsInNldFVUQ0Z1bGxZZWFyIiwidmFsaWRhdGVEYXRlIiwiaXNMZWFwWWVhciIsImlzTGVhcFllYXJJbmRleCIsInZhbGlkYXRlRGF5T2ZZZWFyRGF0ZSIsInZhbGlkYXRlV2Vla0RhdGUiLCJkYXlPZklTT1dlZWtZZWFyIiwidmFsaWRhdGVUaW1lIiwicGFyc2VGbG9hdCIsImlzb1dlZWtZZWFyIiwiREFZU19JTl9NT05USCIsIkRBWVNfSU5fTU9OVEhfTEVBUF9ZRUFSIiwiYmFzZVRpbWV6b25lT2Zmc2V0Iiwic2V0U2Vjb25kcyIsIm1pbGxpc2Vjb25kc1BhcnRPZlRpbWV6b25lT2Zmc2V0IiwiZ2V0V2Vla1N0YXJ0QnlMb2NhbGUkMSIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXBpX2pzX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2xhbmdSZWdpb25NYXBfanNfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fcmVnaW9uRGF5TWFwX2pzX18iLCJnZXRXZWVrU3RhcnRCeVJlZ2lvbiIsInJlZ2lvbkNvZGUiLCJyZWdpb25EYXlNYXAiLCJjb2RlIiwidG9VcHBlckNhc2UiLCJsYW5nUmVnaW9uTWFwIiwiY291bnRyeSIsInRvTG93ZXJDYXNlIiwibGFuZ3VhZ2UiLCJlbiIsInpoIiwiemhfaGFucyIsImhhbnMiLCJ3dXUiLCJoc24iLCJoYWsiLCJuYW4iLCJnYW4iLCJoaSIsInRlIiwibXIiLCJ0YSIsImd1Iiwia24iLCJvciIsInBhX2d1cnUiLCJiaG8iLCJhd2EiLCJhcyIsIm13ciIsIm1haSIsIm1hZyIsImJnYyIsImhuZSIsImRjYyIsImR6IiwidG4iLCJhbSIsIm9tIiwicXVjIiwianYiLCJzdSIsIm1hZCIsIm1zX2FyYWIiLCJnYSIsImhlIiwiamFtIiwiamEiLCJrbSIsImtvIiwibG8iLCJtaCIsIm15IiwibXQiLCJuZSIsImZpbCIsImNlYiIsImlsbyIsInVyIiwicGEiLCJwYV9hcmFiIiwiYXJhYiIsImxhaCIsInBzIiwic2RfYXJhYiIsInNrciIsImduIiwidGgiLCJ0dHMiLCJhZWIiLCJ6aF9oYW50IiwiaGFudCIsInNtIiwienUiLCJzbiIsImFycSIsImFyIiwiYXJ6IiwiZmEiLCJhel9hcmFiIiwiYXJ5IiwiYm4iLCJya3QiLCJkdiIsIkFHIiwiQVRHIiwiMjgiLCJBUiIsIkFSRyIsIjMyIiwiQVMiLCJBU00iLCIxNiIsIkFVIiwiQVVTIiwiMzYiLCJCUiIsIkJSQSIsIjc2IiwiQlMiLCJCSFMiLCI0NCIsIkJUIiwiQlROIiwiNjQiLCJCVyIsIkJXQSIsIjcyIiwiQloiLCJCTFoiLCI4NCIsIkNBIiwiQ0FOIiwiMTI0IiwiQ04iLCJDSE4iLCIxNTYiLCJDTyIsIkNPTCIsIjE3MCIsIkRNIiwiRE1BIiwiMjEyIiwiRE8iLCJET00iLCIyMTQiLCJFVCIsIkVUSCIsIjIzMSIsIkdUIiwiR1RNIiwiMzIwIiwiR1UiLCJHVU0iLCIzMTYiLCJISyIsIkhLRyIsIjM0NCIsIkhOIiwiSE5EIiwiMzQwIiwiSUQiLCJJRE4iLCIzNjAiLCJJRSIsIklSTCIsIjM3MiIsIklMIiwiSVNSIiwiMzc2IiwiSU4iLCJJTkQiLCIzNTYiLCJKTSIsIkpBTSIsIjM4OCIsIkpQIiwiSlBOIiwiMzkyIiwiS0UiLCJLRU4iLCI0MDQiLCJLSCIsIktITSIsIjExNiIsIktSIiwiS09SIiwiNDEwIiwiTEEiLCJMQTAiLCI0MTgiLCJNSCIsIk1ITCIsIjU4NCIsIk1NUiIsIjEwNCIsIk1PIiwiTUFDIiwiNDQ2IiwiTVQiLCJNTFQiLCI0NzAiLCJNWCIsIk1FWCIsIjQ4NCIsIk1aIiwiTU9aIiwiNTA4IiwiTkkiLCJOSUMiLCI1NTgiLCJOUCIsIk5QTCIsIjUyNCIsIk5aIiwiTlpMIiwiNTU0IiwiUEEiLCJQQU4iLCI1OTEiLCJQRSIsIlBFUiIsIjYwNCIsIlBIIiwiUEhMIiwiNjA4IiwiUEsiLCJQQUsiLCI1ODYiLCJQUiIsIlBSSSIsIjYzMCIsIlBZIiwiUFJZIiwiNjAwIiwiU0EiLCJTQVUiLCI2ODIiLCJTRyIsIlNHUCIsIjcwMiIsIlNWIiwiU0xWIiwiMjIyIiwiVEgiLCJUSEEiLCI3NjQiLCJUTiIsIlRVTiIsIjc4OCIsIlRUIiwiVFRPIiwiNzgwIiwiVFciLCJUV04iLCIxNTgiLCJVTSIsIlVNSSIsIjU4MSIsIlVTIiwiVVNBIiwiODQwIiwiVkUiLCJWRU4iLCI4NjIiLCJWSSIsIlZJUiIsIjg1MCIsIldTIiwiV1NNIiwiODgyIiwiWUUiLCJZRU0iLCI4ODciLCJaQSIsIlpBRiIsIjcxMCIsIlpXIiwiWldFIiwiNzE2IiwiQUUiLCJBUkUiLCI3ODQiLCJBRiIsIkFGRyIsIjQiLCJCSCIsIkJIUiIsIjQ4IiwiREoiLCJESkkiLCIyNjIiLCJEWiIsIkRaQSIsIjEyIiwiRUciLCJFR1kiLCI4MTgiLCJJUSIsIklSUSIsIjM2OCIsIklSIiwiSVJOIiwiMzY0IiwiSk8iLCJKT1IiLCI0MDAiLCJLVyIsIktXVCIsIjQxNCIsIkxZIiwiTEJZIiwiNDM0IiwiTUEiLCJNQVIiLCI1MDQiLCJPTSIsIk9NTiIsIjUxMiIsIlFBIiwiUUFUIiwiNjM0IiwiU0QiLCJTRE4iLCI3MjkiLCJTWSIsIlNZUiIsIjc2MCIsIkJEIiwiQkdEIiwiNTAiLCJNViIsIk1EViIsIjQ2MiIsImlzTnVtYmVyUmVnZXgiLCJpc1doaXRlc3BhY2VSZWdleCIsImlzTG93ZXJDYXNlIiwiaXNVcHBlckNhc2UiLCJwYXNzT3JUaHJvd0Vycm9yIiwiX2NoYXIiLCJzdHJMZW4iLCJtYXNrQnl0ZSIsIl9ieXRlIiwiX2J5dGUyIiwiX2J5dGUzIiwiX2J5dGU0IiwiX2J5dGU1IiwiX2J5dGU2IiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19UeXBlc19fIiwiVHlwZXMiLCJfbnVtYmVyIiwibWFzayIsIl9kYXRlIiwiZGVmaW5lIiwiVGV4dElucHV0IiwiZWxlbWVudHMiLCJkb2MiLCJjc3NDbGFzc0Vycm9yIiwiY3NzQ2xhc3NTdWNjZXNzIiwib25VcGRhdGUiLCJvbkludmFsaWQiLCJfb25LZXlzdHJva2UiLCJfb25Gb2N1cyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJpbnB1dCIsInBhcmVudENsYXNzIiwiaXNXcmFwcGVkIiwiaW5wdXRJZCIsImlucHV0TmFtZSIsIm9yaWdpbmFsUGF0dGVybiIsImRlZmF1bHRQYXR0ZXJuIiwiZ2VuZXJhdGVQYXR0ZXJuRnJvbU1hc2siLCJwYXR0ZXJuIiwid3JhcCIsInVubWFza0lucHV0IiwibWFza0lmTm90TWFza2VkIiwidW5tYXNrIiwiX3ZhbGlkYXRlSW5wdXQiLCJ0ZXh0SW5wdXQiLCJldmVudFR5cGUiLCJrZXlDb2RlIiwia2V5Q29udGVudCIsImluc2VydFBvc2l0aW9uIiwiZmluZENhcmV0UG9zaXRpb24iLCJtYXNrRXJyb3IiLCJzZWxlY3Rpb25TdGFydCIsInVubWFza2VkVmFsdWUiLCJlcnJvciIsImlzVmFsaWQiLCJ2YWx1ZU1hc2tlZCIsInZhbHVlVW5tYXNrZWQiLCJzdGF0ZSIsIlNVUFBPUlRFRF9NQVNLUyIsIklTX1VOSUNPREVfUFJPUEVSVFlfU1VQUE9SVEVEIiwiZXZhbCIsImlzTWFza2VkVmFsdWUiLCJjYWNoZUtleSIsIm1hc2tBc0FycnkiLCJyZWdleCIsIm1hc2tlZFZhbHVlIiwibWFza0FzQXJyYXkiLCJtYXNrZWRWYWx1ZUFzQXJyYXkiLCJ1bm1hc2tlZCIsIk51bWJlcklucHV0IiwiY291bnREZWNpbWFscyIsIl9hY3R1YWxJbnB1dEhhbmRsZXIiLCJfdW5tYXNrZWRJbnB1dEhhbmRsZXIiLCJhY3R1YWxJbnB1dCIsImFjdHVhbElucHV0SWQiLCJhY3R1YWxJbnB1dE5hbWUiLCJhY3R1YWxJbnB1dFN0ZXAiLCJhY3R1YWxJbnB1dE1heCIsImFjdHVhbElucHV0TWluIiwiYWN0dWFsSW5wdXRHcm91cGluZ1NlcGFyYXRvciIsImFjdHVhbElucHV0RGVjaW1hbFNlcGFyYXRvciIsImFjdHVhbElucHV0Rm9yY2VUcmFpbGluZ1plcm9zIiwiYWN0dWFsSW5wdXRNYXNrIiwiYWN0dWFsSW5wdXRDbGFzc2VzIiwiYWN0dWFsSW5wdXRSZXF1aXJlZCIsInVubWFza2VkSW5wdXQiLCJkZWNpbWFscyIsInN0ZXAiLCJ3cmFwcGVyIiwicmVzdG9yZSIsImNoYXIiLCJieXRlIiwiX19hc3NpZ24iLCJhc3NpZ24iLCJIT09LUyIsImRlZmF1bHRzIiwiX2Rpc2FibGUiLCJfZW5hYmxlIiwiYWxsb3dJbnB1dCIsImFsdEZvcm1hdCIsImFsdElucHV0IiwiYWx0SW5wdXRDbGFzcyIsImFuaW1hdGUiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJhcmlhRGF0ZUZvcm1hdCIsImNsaWNrT3BlbnMiLCJjbG9zZU9uU2VsZWN0IiwiY29uanVuY3Rpb24iLCJkYXRlRm9ybWF0IiwiZGVmYXVsdEhvdXIiLCJkZWZhdWx0TWludXRlIiwiZGVmYXVsdFNlY29uZHMiLCJkaXNhYmxlIiwiZGlzYWJsZU1vYmlsZSIsImVuYWJsZSIsImVuYWJsZVNlY29uZHMiLCJlbmFibGVUaW1lIiwiZXJyb3JIYW5kbGVyIiwiZ2V0V2VlayIsImdpdmVuRGF0ZSIsInNldEhvdXJzIiwic2V0RGF0ZSIsIndlZWsxIiwiaG91ckluY3JlbWVudCIsImlnbm9yZWRGb2N1c0VsZW1lbnRzIiwiaW5saW5lIiwibWludXRlSW5jcmVtZW50IiwibW9udGhTZWxlY3RvclR5cGUiLCJuZXh0QXJyb3ciLCJub0NhbGVuZGFyIiwibm93Iiwib25DaGFuZ2UiLCJvbkNsb3NlIiwib25EYXlDcmVhdGUiLCJvbkRlc3Ryb3kiLCJvbktleURvd24iLCJvbk1vbnRoQ2hhbmdlIiwib25PcGVuIiwib25QYXJzZUNvbmZpZyIsIm9uUmVhZHkiLCJvblZhbHVlVXBkYXRlIiwib25ZZWFyQ2hhbmdlIiwib25QcmVDYWxlbmRhclBvc2l0aW9uIiwicGx1Z2lucyIsInBvc2l0aW9uRWxlbWVudCIsInByZXZBcnJvdyIsInNob3J0aGFuZEN1cnJlbnRNb250aCIsInNob3dNb250aHMiLCJzdGF0aWMiLCJ0aW1lXzI0aHIiLCJ3ZWVrTnVtYmVycyIsImVuZ2xpc2giLCJ3ZWVrZGF5cyIsInNob3J0aGFuZCIsImxvbmdoYW5kIiwibW9udGhzIiwiZGF5c0luTW9udGgiLCJmaXJzdERheU9mV2VlayIsIm9yZGluYWwiLCJudGgiLCJyYW5nZVNlcGFyYXRvciIsIndlZWtBYmJyZXZpYXRpb24iLCJzY3JvbGxUaXRsZSIsInRvZ2dsZVRpdGxlIiwiYW1QTSIsInllYXJBcmlhTGFiZWwiLCJob3VyQXJpYUxhYmVsIiwibWludXRlQXJpYUxhYmVsIiwiaW50IiwiYm9vbCIsImRlYm91bmNlIiwiYXJyYXlpZnkiLCJ0b2dnbGVDbGFzcyIsImVsZW0iLCJjbGFzc05hbWUiLCJjbGFzc0xpc3QiLCJhZGQiLCJjb250ZW50IiwidGV4dENvbnRlbnQiLCJjbGVhck5vZGUiLCJjcmVhdGVOdW1iZXJJbnB1dCIsImlucHV0Q2xhc3NOYW1lIiwib3B0cyIsIm51bUlucHV0IiwiYXJyb3dVcCIsImFycm93RG93biIsImRvTm90aGluZyIsIm1vbnRoVG9TdHIiLCJtb250aE51bWJlciIsInJldkZvcm1hdCIsIkYiLCJkYXRlT2JqIiwibW9udGhOYW1lIiwic2V0TW9udGgiLCJHIiwiSyIsInNob3J0TW9udGgiLCJTIiwiVSIsIl8iLCJ1bml4U2Vjb25kcyIsIndlZWtOdW0iLCJzZXRGdWxsWWVhciIsIloiLCJJU09EYXRlIiwic2V0TWludXRlcyIsInUiLCJ1bml4TWlsbFNlY29uZHMiLCJ5IiwidG9rZW5SZWdleCIsImZvcm1hdHMiLCJ0b0lTT1N0cmluZyIsImNyZWF0ZURhdGVGb3JtYXR0ZXIiLCJfYSIsIl9iIiwiY29uZmlnIiwiX2MiLCJsMTBuIiwiZnJtdCIsIm92ZXJyaWRlTG9jYWxlIiwiZm9ybWF0RGF0ZSIsImFyciIsImNyZWF0ZURhdGVQYXJzZXIiLCJnaXZlbkZvcm1hdCIsInRpbWVsZXNzIiwiY3VzdG9tTG9jYWxlIiwicGFyc2VkRGF0ZSIsImRhdGVPcmlnIiwidG9GaXhlZCIsImRhdGVzdHIiLCJtYXRjaGVkIiwib3BzIiwibWF0Y2hJbmRleCIsInJlZ2V4U3RyIiwidG9rZW5fMSIsImlzQmFja1NsYXNoIiwiZXNjYXBlZCIsImNvbXBhcmVEYXRlcyIsImRhdGUxIiwiZGF0ZTIiLCJkdXJhdGlvbiIsIkZsYXRwaWNrckluc3RhbmNlIiwiZWxlbWVudCIsImluc3RhbmNlQ29uZmlnIiwiZmxhdHBpY2tyIiwiZGVmYXVsdENvbmZpZyIsImJpbmRUb0luc3RhbmNlIiwic2V0Q2FsZW5kYXJXaWR0aCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImNhbGVuZGFyQ29udGFpbmVyIiwidmlzaWJpbGl0eSIsImRpc3BsYXkiLCJkYXlzQ29udGFpbmVyIiwiZGF5c1dpZHRoIiwiZGF5cyIsIm9mZnNldFdpZHRoIiwid2Vla1dyYXBwZXIiLCJyZW1vdmVQcm9wZXJ0eSIsInVwZGF0ZVRpbWUiLCJzZWxlY3RlZERhdGVzIiwic2V0RGVmYXVsdFRpbWUiLCJwcmV2ZW50RGVmYXVsdCIsImlzS2V5RG93biIsImdldEF0dHJpYnV0ZSIsImN1clZhbHVlIiwiZGVsdGEiLCJ3aGljaCIsImlzSG91ckVsZW0iLCJob3VyRWxlbWVudCIsImlzTWludXRlRWxlbSIsIm1pbnV0ZUVsZW1lbnQiLCJpbmNyZW1lbnROdW1JbnB1dCIsInRpbWVXcmFwcGVyIiwicHJldlZhbHVlIiwiX2lucHV0Iiwic2V0SG91cnNGcm9tSW5wdXRzIiwidXBkYXRlVmFsdWUiLCJfZGVib3VuY2VkQ2hhbmdlIiwic2Vjb25kRWxlbWVudCIsImxpbWl0TWluSG91cnMiLCJtaW5UaW1lIiwibWluRGF0ZSIsIm1pbkRhdGVIYXNUaW1lIiwibGF0ZXN0U2VsZWN0ZWREYXRlT2JqIiwibWF4VGltZSIsIm1heERhdGUiLCJtYXhEYXRlSGFzVGltZSIsInNldEhvdXJzRnJvbURhdGUiLCJzZXREZWZhdWx0SG91cnMiLCJtaW5IciIsIm1pbk1pbnV0ZXMiLCJtYXhIciIsIm1heE1pbnV0ZXMiLCJpc01vYmlsZSIsIm9uWWVhcklucHV0IiwiZXZlbnQiLCJjaGFuZ2VZZWFyIiwiaGFuZGxlciIsImV2IiwiYWRkRXZlbnRMaXN0ZW5lciIsIl9oYW5kbGVycyIsIm9uQ2xpY2siLCJldnQiLCJ0cmlnZ2VyQ2hhbmdlIiwidHJpZ2dlckV2ZW50IiwianVtcFRvRGF0ZSIsImp1bXBEYXRlIiwianVtcFRvIiwib2xkWWVhciIsImN1cnJlbnRZZWFyIiwib2xkTW9udGgiLCJjdXJyZW50TW9udGgiLCJidWlsZE1vbnRoU3dpdGNoIiwicmVkcmF3IiwidGltZUluY3JlbWVudCIsImNvbnRhaW5zIiwiaW5wdXRFbGVtIiwiY3JlYXRlRXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwiY3JlYXRlRGF5IiwiZGF5TnVtYmVyIiwiZGF0ZUlzRW5hYmxlZCIsImlzRW5hYmxlZCIsImRheUVsZW1lbnQiLCIkaSIsInRvZGF5RGF0ZUVsZW0iLCJ0YWJJbmRleCIsImlzRGF0ZVNlbGVjdGVkIiwic2VsZWN0ZWREYXRlRWxlbSIsImlzRGF0ZUluUmFuZ2UiLCJpbnNlcnRBZGphY2VudEhUTUwiLCJmb2N1c09uRGF5RWxlbSIsInRhcmdldE5vZGUiLCJmb2N1cyIsIm9uTW91c2VPdmVyIiwiZ2V0Rmlyc3RBdmFpbGFibGVEYXkiLCJzdGFydE1vbnRoIiwiZW5kTW9udGgiLCJzdGFydEluZGV4IiwiZm9jdXNPbkRheSIsImRheUZvY3VzZWQiLCJpc0luVmlldyIsImFjdGl2ZUVsZW1lbnQiLCJib2R5Iiwic3RhcnRFbGVtIiwiZ2l2ZW5Nb250aCIsImxvb3BEZWx0YSIsIm51bU1vbnRoRGF5cyIsImNoYW5nZU1vbnRoIiwiZ2V0TmV4dEF2YWlsYWJsZURheSIsImJ1aWxkTW9udGhEYXlzIiwiZmlyc3RPZk1vbnRoIiwicHJldk1vbnRoRGF5cyIsInV0aWxzIiwiZ2V0RGF5c0luTW9udGgiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwiaXNNdWx0aU1vbnRoIiwicHJldk1vbnRoRGF5Q2xhc3MiLCJuZXh0TW9udGhEYXlDbGFzcyIsImRheUluZGV4IiwiZGF5Q29udGFpbmVyIiwiYnVpbGREYXlzIiwiZnJhZyIsInNob3VsZEJ1aWxkTW9udGgiLCJtb250aHNEcm9wZG93bkNvbnRhaW5lciIsImlubmVySFRNTCIsImJ1aWxkTW9udGgiLCJtb250aEVsZW1lbnQiLCJjb250YWluZXIiLCJtb250aE5hdkZyYWdtZW50Iiwic2VsZWN0ZWRNb250aCIsInllYXJJbnB1dCIsInRhYmluZGV4IiwieWVhckVsZW1lbnQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImRpc2FibGVkIiwiYnVpbGRNb250aHMiLCJtb250aE5hdiIsInByZXZNb250aE5hdiIsInllYXJFbGVtZW50cyIsIm1vbnRoRWxlbWVudHMiLCJuZXh0TW9udGhOYXYiLCJidWlsZFdlZWtkYXlzIiwid2Vla2RheUNvbnRhaW5lciIsInVwZGF0ZVdlZWtkYXlzIiwiaXNPZmZzZXQiLCJfaGlkZVByZXZNb250aEFycm93IiwiX2hpZGVOZXh0TW9udGhBcnJvdyIsInVwZGF0ZU5hdmlnYXRpb25DdXJyZW50TW9udGgiLCJpc0NhbGVuZGFyRWxlbSIsImFwcGVuZFRvIiwiZG9jdW1lbnRDbGljayIsImlzT3BlbiIsImV2ZW50VGFyZ2V0XzEiLCJjb21wb3NlZFBhdGgiLCJnZXRFdmVudFRhcmdldCIsImlzQ2FsZW5kYXJFbGVtZW50IiwiaXNJbnB1dCIsInBhdGgiLCJsb3N0Rm9jdXMiLCJyZWxhdGVkVGFyZ2V0IiwiaXNJZ25vcmVkIiwic29tZSIsInRpbWVDb250YWluZXIiLCJjbG9zZSIsImNsZWFyIiwibmV3WWVhciIsIm5ld1llYXJOdW0iLCJpc05ld1llYXIiLCJkYXRlVG9DaGVjayIsImZyb20iLCJ0byIsImFsbG93S2V5ZG93biIsImFsbG93SW5saW5lS2V5ZG93biIsImJsdXIiLCJvcGVuIiwiaXNUaW1lT2JqIiwiZm9jdXNBbmRDbG9zZSIsInNlbGVjdERhdGUiLCJkZWx0YV8xIiwiY3RybEtleSIsInN0b3BQcm9wYWdhdGlvbiIsImN1cnJlbnRZZWFyRWxlbWVudCIsImVsZW1zIiwicGx1Z2luRWxlbWVudHMiLCJzaGlmdEtleSIsImhvdmVyRGF0ZSIsImZpcnN0RWxlbWVudENoaWxkIiwiaW5pdGlhbERhdGUiLCJyYW5nZVN0YXJ0RGF0ZSIsInJhbmdlRW5kRGF0ZSIsImNvbnRhaW5zRGlzYWJsZWQiLCJtaW5SYW5nZSIsIm1heFJhbmdlIiwiX2xvb3BfMSIsInRzIiwidHMxIiwidHMyIiwiZGF5RWxlbSIsIm91dE9mUmFuZ2UiLCJvblJlc2l6ZSIsInBvc2l0aW9uQ2FsZW5kYXIiLCJtaW5NYXhEYXRlU2V0dGVyIiwiaW52ZXJzZURhdGVPYmoiLCJyZW1vdmVBdHRyaWJ1dGUiLCJzZXR1cExvY2FsZSIsImwxMG5zIiwiZGF0YXNldCIsImN1c3RvbVBvc2l0aW9uRWxlbWVudCIsIl9wb3NpdGlvbkVsZW1lbnQiLCJjYWxlbmRhckhlaWdodCIsImFjYyIsIm9mZnNldEhlaWdodCIsImNhbGVuZGFyV2lkdGgiLCJjb25maWdQb3MiLCJjb25maWdQb3NWZXJ0aWNhbCIsImNvbmZpZ1Bvc0hvcml6b250YWwiLCJpbnB1dEJvdW5kcyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImRpc3RhbmNlRnJvbUJvdHRvbSIsImlubmVySGVpZ2h0IiwiYm90dG9tIiwic2hvd09uVG9wIiwidG9wIiwicGFnZVlPZmZzZXQiLCJsZWZ0IiwicGFnZVhPZmZzZXQiLCJyaWdodCIsInJpZ2h0TW9zdCIsImNlbnRlck1vc3QiLCJzdHlsZVNoZWV0cyIsImJvZHlXaWR0aCIsImNlbnRlckxlZnQiLCJjZW50ZXJJbmRleCIsImNzc1J1bGVzIiwiY2VudGVyU3R5bGUiLCJpbnNlcnRSdWxlIiwiY2VudGVyQmVmb3JlIiwibXNNYXhUb3VjaFBvaW50cyIsImZpbmRQYXJlbnQiLCJjb25kaXRpb24iLCJzZWxlY3RlZERhdGUiLCJzaG91bGRDaGFuZ2VNb250aCIsInNlbGVjdGVkSW5kZXgiLCJhIiwiYiIsInNob3dUaW1lSW5wdXQiLCJzaW5nbGUiLCJsb2FkZWRQbHVnaW5zIiwiX2JpbmQiLCJfc2V0SG91cnNGcm9tRGF0ZSIsIl9wb3NpdGlvbkNhbGVuZGFyIiwidHJpZ2dlckNoYW5nZUV2ZW50IiwidG9Jbml0aWFsIiwibW9iaWxlSW5wdXQiLCJfaW5pdGlhbERhdGUiLCJfY3JlYXRlRWxlbWVudCIsImRlc3Ryb3kiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibGFzdENoaWxkIiwiX3R5cGUiLCJjbGljayIsIndhc09wZW4iLCJzZWxlY3QiLCJvcHRpb24iLCJDQUxMQkFDS1MiLCJzZXRTZWxlY3RlZERhdGUiLCJ0b2dnbGUiLCJpbnB1dERhdGUiLCJkYXRlcyIsInBhcnNlRGF0ZVJ1bGVzIiwicnVsZSIsImhvb2tzIiwiaW5pdEV2ZW50IiwiZ2V0RGF0ZVN0ciIsImRPYmoiLCJtb2JpbGVGb3JtYXRTdHIiLCJvbk1vbnRoTmF2Q2xpY2siLCJpc1ByZXZNb250aCIsImlzTmV4dE1vbnRoIiwiYm9vbE9wdHMiLCJ1c2VyQ29uZmlnIiwidGltZU1vZGUiLCJkZWZhdWx0RGF0ZUZvcm1hdCIsImRlZmF1bHRBbHRGb3JtYXQiLCJfbWluRGF0ZSIsIl9tYXhEYXRlIiwibWluTWF4VGltZVNldHRlciIsIl9taW5UaW1lIiwiX21heFRpbWUiLCJob29rIiwicGx1Z2luQ29uZiIsInBhcnNlQ29uZmlnIiwibm9kZU5hbWUiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwicHJlbG9hZGVkRGF0ZSIsImRlZmF1bHREYXRlIiwiX3Nob3dUaW1lSW5wdXQiLCJzZXR1cERhdGVzIiwieXIiLCJmcmFnbWVudCIsIl9faGlkZVByZXZNb250aEFycm93IiwiX19oaWRlTmV4dE1vbnRoQXJyb3ciLCJpbm5lckNvbnRhaW5lciIsImJ1aWxkV2Vla3MiLCJyQ29udGFpbmVyIiwic2VwYXJhdG9yIiwiaG91cklucHV0IiwibWludXRlSW5wdXQiLCJtaWxpdGFyeTJhbXBtIiwic2Vjb25kSW5wdXQiLCJ0aXRsZSIsImJ1aWxkVGltZSIsImN1c3RvbUFwcGVuZCIsIm5vZGVUeXBlIiwiYnVpbGQiLCJpbnB1dFR5cGUiLCJkZWZhdWx0VmFsdWUiLCJzZXR1cE1vYmlsZSIsImRlYm91bmNlZFJlc2l6ZSIsIm9udG91Y2hzdGFydCIsImNhcHR1cmUiLCJiaW5kRXZlbnRzIiwiaXNTYWZhcmkiLCJpbml0IiwiX2ZsYXRwaWNrciIsIm5vZGVMaXN0IiwiSFRNTEVsZW1lbnQiLCJpbnN0YW5jZXMiLCJzb3VyY2UiLCJhcmdzXzEiLCJIVE1MQ29sbGVjdGlvbiIsIk5vZGVMaXN0Iiwic2VsZWN0b3IiLCJOb2RlIiwibG9jYWxpemUiLCJzZXREZWZhdWx0cyIsImpRdWVyeSIsImZwX2luY3IiLCJDb21wb25lbnQiLCJoYW5kbGUiLCJnZXRQcm90b3R5cGVPZiIsImRlc2NzIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImtsYXNzIiwiZ2V0T3duS2V5cyIsImRlc2MiLCJhdXRvYmluZE1ldGhvZCIsIlN5bnRheEVycm9yIiwiV2Vha01hcCIsIm1hcFN0b3JlIiwic3VwZXJTdG9yZSIsImdldEJvdW5kU3VwZXIiLCJib3VuZEZuIiwiY3JlYXRlRGVmYXVsdFNldHRlciIsImF1dG9iaW5kQ2xhc3MiLCJkZWNvcmF0ZSIsIkZVTkNUSU9OX1JFR0VYUCIsIlN5bnRheEVycm9yUmVwb3J0ZXIiLCJwYXJlbnRLbGFzcyIsImNoaWxkS2xhc3MiLCJwYXJlbnREZXNjcmlwdG9yIiwiY2hpbGREZXNjcmlwdG9yIiwidG9waWMiLCJfZXh0cmFjdEZ1bmN0aW9uU2lnbmF0dXJlIiwiX2dldFRvcGljIiwiX2V4dHJhY3RUb3BpY1NpZ25hdHVyZSIsIm1zZyIsInJlcG9ydGVyIiwicGFyZW50VHlwZSIsImdldERlc2NyaXB0b3JUeXBlIiwiY2hpbGRUeXBlIiwicGFyZW50VmFsdWVUeXBlIiwiY2hpbGRWYWx1ZVR5cGUiLCJjaGVja0Z1bmN0aW9uU2lnbmF0dXJlcyIsImNoZWNrRGF0YURlc2NyaXB0b3JzIiwicGFyZW50SGFzR2V0dGVyIiwiY2hpbGRIYXNHZXR0ZXIiLCJwYXJlbnRIYXNTZXR0ZXIiLCJjaGlsZEhhc1NldHRlciIsImNoZWNrQWNjZXNzb3JEZXNjcmlwdG9ycyIsInN1Z2dlc3Rpb25UcmFuc2Zvcm1zIiwic3VwZXJLbGFzcyIsInN1cGVyRGVzY3JpcHRvciIsInN1Z2dlc3RlZEtleSIsInN1Z2dlc3Rpb24iLCJmaW5kUG9zc2libGVBbHRlcm5hdGl2ZXMiLCJjaGVja0Rlc2NyaXB0b3JzIiwiY3NzTWFwcGluZyIsInVzZVNvdXJjZU1hcCIsInNvdXJjZU1hcHBpbmciLCJzb3VyY2VVUkxzIiwiY3NzV2l0aE1hcHBpbmdUb1N0cmluZyIsImFscmVhZHlJbXBvcnRlZE1vZHVsZXMiLCJtZWRpYVF1ZXJ5IiwiYmFzZUdldFRhZyIsImdldFJhd1RhZyIsIm9iamVjdFRvU3RyaW5nIiwiaXNPYmplY3RMaWtlIiwiaXNEZXNjcmlwdG9yIiwiZW50cnlBcmdzIiwiaGFuZGxlRGVzY3JpcHRvciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImdldE93blByb3BlcnR5TmFtZXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJsYXp5SW5pdGlhbGl6ZSIsImlzT2JqZWN0IiwiZXEiLCJpc0FycmF5TGlrZSIsImlzTGVuZ3RoIiwiaXNGdW5jdGlvbiIsIkJvb2xlYW5Td2l0Y2giLCJUZW1wbGF0ZVJlbmRlcmVyIiwiYmFzZUFzc2lnblZhbHVlIiwiZ2V0TmF0aXZlIiwiYmFzZVJlc3QiLCJzZXRUb1N0cmluZyIsIm92ZXJSZXN0IiwiaXNJdGVyYXRlZUNhbGwiLCJpc0luZGV4IiwiYXJyYXlMaWtlS2V5cyIsImlzQXJndW1lbnRzIiwiaXNCdWZmZXIiLCJpc1R5cGVkQXJyYXkiLCJiYXNlVGltZXMiLCJvcmlnaW5hbE1vZHVsZSIsImlzUHJvdG90eXBlIiwiaXNFcnJvciIsImlzUGxhaW5PYmplY3QiLCJvdmVyQXJnIiwiYXJyYXlNYXAiLCJyZUludGVycG9sYXRlIiwiYmFzZVRvU3RyaW5nIiwidG9EYXRlIiwidHpQYXJzZVRpbWV6b25lIiwic3ViTWlsbGlzZWNvbmRzIiwidHpUb2tlbml6ZURhdGUiLCJFdmVudHNNaXhpbiIsIkRhdGVUaW1lSW5wdXQiLCJCb29sZWFuRWRpdG9yIiwiZ2V0T3B0aW9uIiwiX3RydWVWYWx1ZSIsIl9mYWxzZVZhbHVlIiwiX2NvbnZlcnRWYWx1ZSIsInN3aXRjaGVyIiwiX3N3aXRjaGVyIiwiX3ZhbHVlIiwidHJ1ZVZhbHVlIiwiZmFsc2VWYWx1ZSIsInZhbHVlQXNTdHJpbmciLCJfZ3VpIiwiZmFsbGJhY2siLCJBR3JpZENvbXBvbmVudHNNZXRhQ29uZmlnIiwid2luIiwiaW5pdGlhbFZhbHVlIiwibGlzdGVuZXIiLCJfb25DbGljayIsIl9vbktleWRvd24iLCJnZXREb2MiLCJib29sU3dpdGNoIiwibGFiZWwiLCJvdmVycmlkZSIsImF1dG9iaW5kIiwiaW5pdGlhbGl6ZXIiLCJsb2NhdGlvbiIsImJhc2VVcmwiLCJjdXJyZW50RGlyIiwidW5xdW90ZWRPcmlnVXJsIiwib3JpZ1VybCIsIm5ld1VybCIsIkJvb2xlYW5SZW5kZXJlciIsImlzSW5pdCIsImJvb2xlYW5UcnVlUmVuZGVyVmFsdWUiLCJib29sZWFuRmFsc2VSZW5kZXJWYWx1ZSIsImJvb2xlYW5UcnVlVmFsdWUiLCJib29sZWFuRmFsc2VWYWx1ZSIsIl9nZXRTd2l0Y2hlciIsIkJvb2xlYW5GaWx0ZXIiLCJ0b1RpdGxlQ2FzZSIsInBocmFzZSIsIndvcmQiLCJfYm9vbGVhbkZpbHRlclRyYW5zbGF0aW9uIiwidHJhbnNsYXRlIiwiaXNDbGVhckZpbHRlciIsImlzUmVzZXRCdXR0b24iLCJpc0FwcGx5QnV0dG9uIiwidHJ1ZSIsImZhbHNlIiwicmVzZXQiLCJfb25SYWRpb0NoYW5nZSIsImFwcGx5RmlsdGVyUGFuZWwiLCJfcGFyYW1zIiwiZmlsdGVyVmFsdWVHZXR0ZXIiLCJ2YWx1ZUdldHRlciIsIl9maWx0ZXJUZXh0IiwiZmlsdGVyVHlwZSIsImZpbHRlclRleHRBc1N0cmluZyIsImh0bWwiLCJ0bXAiLCJOdW1iZXJFZGl0b3IiLCJzdGFydFZhbHVlIiwiQmFzaXMiLCJfb25OdW1iZXJJbnB1dEludmFsaWQiLCJjYXN0ZWQiLCJyZXRWYWx1ZSIsIl9faXNNYXNrZWRfXyIsInBhcnNlVmFsdWUiLCJfbWFza2VkIiwiVGV4dEVkaXRvciIsIl9vblRleHRJbnB1dEludmFsaWQiLCJ0ZW1wbGF0ZSIsIl9jb21waWxlZFRlbXBsYXRlIiwicmVFbXB0eVN0cmluZ0xlYWRpbmciLCJyZUVtcHR5U3RyaW5nTWlkZGxlIiwicmVFbXB0eVN0cmluZ1RyYWlsaW5nIiwicmVFc1RlbXBsYXRlIiwicmVOb01hdGNoIiwicmVVbmVzY2FwZWRTdHJpbmciLCJzZXR0aW5ncyIsInRlbXBsYXRlU2V0dGluZ3MiLCJndWFyZCIsImFzc2lnbkluV2l0aCIsImN1c3RvbURlZmF1bHRzQXNzaWduSW4iLCJpbXBvcnRzIiwiaW1wb3J0c0tleXMiLCJpbXBvcnRzVmFsdWVzIiwiYmFzZVZhbHVlcyIsImludGVycG9sYXRlIiwicmVEZWxpbWl0ZXJzIiwic291cmNlVVJMIiwiaW50ZXJwb2xhdGVWYWx1ZSIsImVzY2FwZVN0cmluZ0NoYXIiLCJpc0VzY2FwaW5nIiwiZXNjYXBlVmFsdWUiLCJpc0V2YWx1YXRpbmciLCJldmFsdWF0ZVZhbHVlIiwidmFyaWFibGUiLCJhdHRlbXB0IiwiY3JlYXRlQXNzaWduZXIiLCJjb3B5T2JqZWN0Iiwia2V5c0luIiwiaXNOZXciLCJjdXN0b21pemVyIiwiYXNzaWduVmFsdWUiLCJvYmpWYWx1ZSIsImJhc2VJc05hdGl2ZSIsInJlSXNIb3N0Q3RvciIsImZ1bmNQcm90byIsImZ1bmNUb1N0cmluZyIsInJlSXNOYXRpdmUiLCJpc01hc2tlZCIsInRvU291cmNlIiwibmF0aXZlT2JqZWN0VG9TdHJpbmciLCJpc093biIsInVpZCIsIm1hc2tTcmNLZXkiLCJjb3JlSnNEYXRhIiwic291cmNlcyIsImFzc2lnbmVyIiwibmF0aXZlTWF4Iiwib3RoZXJBcmdzIiwic2hvcnRPdXQiLCJiYXNlU2V0VG9TdHJpbmciLCJjb25zdGFudCIsIm5hdGl2ZU5vdyIsImNvdW50IiwibGFzdENhbGxlZCIsInN0YW1wIiwicmVtYWluaW5nIiwiYmFzZUtleXNJbiIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiYmFzZUlzQXJndW1lbnRzIiwiZnJlZUV4cG9ydHMiLCJmcmVlTW9kdWxlIiwiQnVmZmVyIiwic3R1YkZhbHNlIiwibm9kZUlzVHlwZWRBcnJheSIsIm5vZGVVdGlsIiwiYmFzZVVuYXJ5IiwiYmFzZUlzVHlwZWRBcnJheSIsInR5cGVkQXJyYXlUYWdzIiwiZnJlZVByb2Nlc3MiLCJ0eXBlcyIsIm5hdGl2ZUtleXNJbiIsImlzUHJvdG8iLCJvYmplY3RDdG9yU3RyaW5nIiwicHJvdG8iLCJnZXRQcm90b3R5cGUiLCJzdHJpbmdFc2NhcGVzIiwiYmFzZUtleXMiLCJuYXRpdmVLZXlzIiwicmVFc2NhcGUiLCJyZUV2YWx1YXRlIiwiZXNjYXBlIiwicmVVbmVzY2FwZWRIdG1sIiwicmVIYXNVbmVzY2FwZWRIdG1sIiwiZXNjYXBlSHRtbENoYXIiLCJiYXNlUHJvcGVydHlPZiIsInN5bWJvbFByb3RvIiwic3ltYm9sVG9TdHJpbmciLCJpc1N5bWJvbCIsIkltYWdlUmVuZGVyZXIiLCJpbWFnZVdpZHRoIiwiaW1hZ2VIZWlnaHQiLCJpbWFnZUxpc3QiLCJEYXRlVGltZUZpbHRlciIsIlRPS0VOUyIsIkNvbmRpdGlvblBhbmVsIiwid2l0aEV2ZW50c01peGluIiwiX2ZpbHRlclRpbWVJbnB1dCIsIl9maWx0ZXJUb0RhdGVUaW1lSW5wdXQiLCJfZmlsdGVyT3B0aW9ucyIsIl9kZWZhdWx0T3B0aW9uIiwib3B0aW9uc1RyYW5zbGF0aW9ucyIsImd1aSIsImZpbHRlck9wdGlvbnMiLCJzZWxlY3RFbCIsImZpbHRlcklucHV0IiwiZmlsdGVyVG9JbnB1dCIsImZpbHRlckRhdGVUbyIsIk9OX0NPTkRJVElPTl9DSEFOR0VEIiwicmVhZG9ubHkiLCJmaWx0ZXJUbyIsIkpvaW5Db25kaXRpb25QYW5lbCIsIl9maXJzdENvbmRpdGlvblBhbmVsIiwiX3NlY29uZENvbmRpdGlvblBhbmVsIiwiX29wZXJhdG9yUGFuZWwiLCJpZE9uZSIsImlkVHdvIiwic2Vjb25kQ29uZGl0aW9uR3VpIiwib3BlcmF0b3JQYW5lbEd1aSIsIk9OX0pPSU5fQ09ORElUSU9OX0NIQU5HRUQiLCJjb25kaXRpb24xIiwiY29uZGl0aW9uMiIsIm9wZXJhdG9yIiwiX0pvaW5Db25kaXRpb25QYW5lbCIsIl9zdGF0ZSIsIl9kb2VzRmlsdGVyUGFzc09wdGlvbnMiLCJpblJhbmdlSW5jbHVzaXZlIiwiZG9lc1Bhc3NGaXJzdENvbmRpdGlvbiIsIl9kb2VzUGFzc0NvbmRpdGlvbiIsImRvZXNQYXNzU2Vjb25kQ29uZGl0aW9uIiwiY2xvbmUiLCJkYXRlVGltZU1hc2siLCJCQmoiLCJmaXJzdENvbmRpdGlvbkFzU3RyaW5nIiwic2Vjb25kQ29uZGl0aW9uQXNTdHJpbmciLCJvcGVyYXRvckFzU3RyaW5nIiwicGFzc2VkIiwidXRjVG9ab25lZFRpbWUiLCJpc0FwcGx5QnV0dG9uQWN0aXZlIiwicmVxdWlyZWRBcmdzIiwidG9JbnRlZ2VyIiwiYWRkTWlsbGlzZWNvbmRzIiwiZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyIsImdldERhdGVNaWxsaXNlY29uZHNQYXJ0Iiwic3VwZXJDbGFzcyIsIl9faGFuZGxlcnMiLCJyZWdpc3RlcmVkSGFuZGxlciIsImhhbmRsZXJzIiwiaXNFZGl0b3IiLCJwaWNrZXIiLCJkYXRlVGltZUZvcm1hdHRlciIsIndlZWtEYXlzU2hvcnQiLCJ3ZWVrRGF5c0xvbmciLCJtb250aHNTaG9ydCIsIm1vbnRoc0xvbmciLCJPTl9EQVRFX0NIQU5HRUQiLCJEYXRlVGltZUVkaXRvciIsIkN1c3RvbUV2ZW50IiwiYnViYmxlcyIsImNhbmNlbGFibGUiLCJkZXRhaWwiLCJpbml0Q3VzdG9tRXZlbnQiLCJFdmVudCIsImxpY2Vuc2UiLCJhZ0dyaWQiLCJMaWNlbnNlTWFuYWdlciIsInNldExpY2Vuc2VLZXkiLCJnd19hZGRHcmlkIiwicGFyc2VkT3B0aW9ucyIsImRlZXBQYXJzZWRPcHRpb25zIiwiZ2V0RGF0YVBhdGhUZW1wbGF0ZSIsImdldERhdGFQYXRoIiwiZmluYWxPcHRpb25zIiwiZ2V0RG9jdW1lbnQiLCJvbkNlbGxFZGl0aW5nU3RhcnRlZCIsImd3X29uQ2VsbEVkaXRpbmdFdmVudCIsIm9uQ2VsbEVkaXRpbmdTdG9wcGVkIiwib25DZWxsVmFsdWVDaGFuZ2VkIiwib25Sb3dFZGl0aW5nU3RhcnRlZCIsImd3X29uUm93RWRpdGluZ0V2ZW50Iiwib25Sb3dWYWx1ZUNoYW5nZWQiLCJvblJvd0VkaXRpbmdTdG9wcGVkIiwib25DZWxsQ2xpY2tlZCIsImd3X29uQ2VsbENsaWNrRXZlbnQiLCJvbkNlbGxEb3VibGVDbGlja2VkIiwib25HcmlkUmVhZHkiLCJnd19vblJlYWR5RXZlbnQiLCJnd19nZXRSb3dOb2RlSWQiLCJnZXRDb250ZXh0TWVudUl0ZW1zIiwiZ3dfZ2V0Q29udGV4dE1lbnUiLCJnZXRDaGFydFRvb2xiYXJJdGVtcyIsImd3X2dldENoYXJ0VG9vbGJhckl0ZW1zIiwicG9wdXBQYXJlbnQiLCJvblJvd0RvdWJsZUNsaWNrZWQiLCJnd19kZWJvdW5jZSIsImd3X29uUm93RG91YmxlQ2xpY2tlZCIsIm9uUm93Q2xpY2tlZCIsImd3X29uUm93Q2xpY2tlZCIsIm9uU2VsZWN0aW9uQ2hhbmdlZCIsImd3X29uU2VsZWN0aW9uQ2hhbmdlZCIsIm9uUmFuZ2VTZWxlY3Rpb25DaGFuZ2VkIiwiZ3dfb25SYW5nZVNlbGVjdGlvbkNoYW5nZWQiLCJjb21wb25lbnRzIiwiQWdHcmlkQ29tcG9uZW50cyIsIkhUTUxUb29sdGlwIiwiZ3dfZ2V0V2luZG93IiwibmF2aWdhdGVUb05leHRDZWxsIiwiZ3dfbmF2aWdhdGVUb05leHRSb3ciLCJ0cmVlRGF0YSIsImdldERhdGFQYXRoVGVtcGxhdGVDb21wbGllZCIsImd3X3BhcnNlT3B0aW9ucyIsIkdyaWQiLCJncmlkSWQiLCJwYXJzZU1lbnUiLCJtZW51IiwiZ3dfcGFyc2VOb2RlRnJvbUV2ZW50IiwiZ3dfc2VuZEV2ZW50IiwidiIsImJ1aWxkQ29udGV4dE1lbnVBY3Rpb24iLCJjb250ZXh0TWVudSIsIkdXX0VWRU5UX1JPV19ET1VCTEVfQ0xJQ0siLCJHV19FVkVOVF9ST1dfQ0xJQ0siLCJHV19FVkVOVF9ST1dfU0VMRUNUIiwiR1dfRVZFTlRfUkFOR0VfU0VMRUNUSU9OX0NIQU5HRUQiLCJnd19lc2NhcGUiLCJDRUxMX0NMSUNLSU5HX0VWRU5UU19NQVAiLCJjZWxsQ2xpY2tlZCIsIkdXX0VWRU5UX0NFTExfQ0xJQ0siLCJjZWxsRG91YmxlQ2xpY2tlZCIsIkdXX0VWRU5UX0NFTExfRE9VQkxFX0NMSUNLIiwiQ0VMTF9FRElUSU5HX0VWRU5UU19NQVAiLCJST1dfRURJVElOR19FVkVOVFNfTUFQIiwiY2VsbEVkaXRpbmdTdGFydGVkIiwiR1dfRVZFTlRfQ0VMTF9FRElUSU5HX1NUQVJURUQiLCJjZWxsRWRpdGluZ1N0b3BwZWQiLCJHV19FVkVOVF9DRUxMX0VESVRJTkdfU1RPUFBFRCIsImNlbGxWYWx1ZUNoYW5nZWQiLCJHV19FVkVOVF9DRUxMX1ZBTFVFX0NIQU5HRUQiLCJyb3dFZGl0aW5nU3RhcnRlZCIsIkdXX0VWRU5UX1JPV19FRElUSU5HX1NUQVJURUQiLCJyb3dFZGl0aW5nU3RvcHBlZCIsIkdXX0VWRU5UX1JPV19FRElUSU5HX1NUT1BQRUQiLCJyb3dWYWx1ZUNoYW5nZWQiLCJHV19FVkVOVF9ST1dfVkFMVUVfQ0hBTkdFRCIsIl9lIiwic3RhdGVEZWJvdW5jZSIsImNoYW5nZUV2ZW50IiwiZ3dfb25TdGF0ZUNoYW5nZWQiLCJrZXlib2FyZERlYm91bmNlIiwia2V5ZG93bkV2ZW50IiwiZ3dfb25LZXlkb3duIiwiR1dfRVZFTlRfR1JJRF9TVEFURV9DSEFOR0UiLCJrYyIsImFrIiwiYWx0S2V5Iiwic2siLCJjayIsIkdXX0VWRU5UX0tFWVBSRVNTIiwiZXZhbHVhdGUiLCJlc1RlbXBsYXRlVmFsdWUiLCJzcmNJbmRleCIsIklFX1BST1RPIiwicHJvY2VzcyIsImJpbmRpbmciLCJzcmNWYWx1ZSIsImNociIsImVHdWkiLCJpc0hlYWRlciIsImlzR3JvdXBlZEhlYWRlciIsInRoZW1lIiwiZ3JpZENvcmUiLCJlR3JpZERpdiIsImVuZHNXaXRoIiwidG9vbHRpcEZpZWxkIiwicGFzc2VkUGFyYW1zIiwic2V0Q29sdW1uU3RhdGUiLCJzZXRDb2x1bW5Hcm91cFN0YXRlIiwiZ3JvdXBzIiwic2V0RmlsdGVyTW9kZWwiLCJmaWx0ZXJzIiwiZ2V0Q29sdW1uU3RhdGUiLCJnZXRDb2x1bW5Hcm91cFN0YXRlIiwiZ2V0U29ydE1vZGVsIiwiZ2V0RmlsdGVyTW9kZWwiLCJzZXRTaWRlQmFyVmlzaWJsZSIsInRvb2xwYW5lbElkIiwib3BlblRvb2xQYW5lbCIsImNsb3NlVG9vbFBhbmVsIiwic2V0RnVuY3Rpb25zUmVhZE9ubHkiLCJnZXRTdGF0dXNQYW5lbCIsInNldFZpc2libGUiLCJzaG93TG9hZGluZ092ZXJsYXkiLCJzaG93Tm9Sb3dzT3ZlcmxheSIsImhpZGVPdmVybGF5IiwicnVsZXMiLCJqc3MiLCJmb3JEb2N1bWVudCIsInNpbmdsZUNvbG9uRm9yUHNldWRvRWxlbWVudHMiLCJhZGpTZWxBdHRyUmVnZXgiLCJkb3VibGVDb2xvblBzZXVkb0VsUmVnZXgiLCJzaW5nbGVDb2xvblBzZXVkb0VsUmVnZXgiLCJnZXRSdWxlcyIsInNoZWV0IiwicmVzdWx0cyIsInNlbGVjdG9yVGV4dCIsInN3YXBBZGpTZWxBdHRyIiwic3dhcFBzZXVkb0VsU3ludGF4IiwiYWRkUnVsZSIsImRvdWJsZUNvbG9uU2VsZWN0b3IiLCJzaW5nbGVDb2xvblNlbGVjdG9yIiwidG9TaW5nbGVDb2xvblBzZXVkb0VsZW1lbnRzIiwidG9Eb3VibGVDb2xvblBzZXVkb0VsZW1lbnRzIiwiYWRkUnVsZVRvU2hlZXQiLCJhZGRQc2V1ZG9FbGVtZW50UnVsZSIsInN1Ym1hdGNoMSIsInN1Ym1hdGNoMiIsInN1Ym1hdGNoMyIsImV4dGVuZCIsImRlc3QiLCJzcmMiLCJhZ2dyZWdhdGVTdHlsZXMiLCJhZ2dyZWdhdGUiLCJkZWNsYXJlZFByb3BlcnRpZXMiLCJkZWNsYXJlZCIsInRvQ2FtZWxDYXNlIiwic3dhcCIsImxhc3RJbmRleCIsInNldFN0eWxlUHJvcGVydGllcyIsInByb3BlcnRpZXMiLCJpbXBvcnRhbnRJbmRleCIsInNldFByb3BlcnR5Iiwic3VibWF0Y2giLCJ1bkNhbWVsQ2FzZSIsIkpzcyIsInNoZWV0cyIsImRlZmF1bHRTaGVldCIsImdldFNlbGVjdG9yc0FuZFJ1bGVzIiwiZ2V0QWxsIiwiX2NyZWF0ZVNoZWV0Iiwib2xkUHJvcHMiLCJuZXdQcm9wcyIsInRyYW5zZm9ybUNhbWVsQ2FzZWRQcm9wZXJ0eU5hbWVzIiwiX3JlbW92ZVNoZWV0IiwiZGVsZXRlUnVsZSIsInJlbW92ZVJ1bGUiLCJzdHlsZU5vZGUiLCJvd25lck5vZGUiLCJsb2NhbHMiLCJwcm90b2NvbCIsImhvc3QiLCJwYXRobmFtZSIsImZ1bGxNYXRjaCIsIiQxIl0sIm1hcHBpbmdzIjoiNERBQ0UsSUFBSUEsRUFBbUIsR0FHdkIsU0FBU0MsRUFBb0JDLEdBRzVCLEdBQUdGLEVBQWlCRSxHQUNuQixPQUFPRixFQUFpQkUsR0FBVUMsUUFHbkMsSUFBSUMsRUFBU0osRUFBaUJFLEdBQVksQ0FDekNHLEVBQUdILEVBQ0hJLEdBQUcsRUFDSEgsUUFBUyxJQVVWLE9BTkFJLEVBQVFMLEdBQVVNLEtBQUtKLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVNGLEdBRy9ERyxFQUFPRSxHQUFJLEVBR0pGLEVBQU9ELFFBMERmLE9BckRBRixFQUFvQlEsRUFBSUYsRUFHeEJOLEVBQW9CUyxFQUFJVixFQUd4QkMsRUFBb0JVLEVBQUksU0FBU1IsRUFBU1MsRUFBTUMsR0FDM0NaLEVBQW9CYSxFQUFFWCxFQUFTUyxJQUNsQ0csT0FBT0MsZUFBZWIsRUFBU1MsRUFBTSxDQUFFSyxZQUFZLEVBQU1DLElBQUtMLEtBS2hFWixFQUFvQmtCLEVBQUksU0FBU2hCLEdBQ1gsb0JBQVhpQixRQUEwQkEsT0FBT0MsYUFDMUNOLE9BQU9DLGVBQWViLEVBQVNpQixPQUFPQyxZQUFhLENBQUVDLE1BQU8sV0FFN0RQLE9BQU9DLGVBQWViLEVBQVMsYUFBYyxDQUFFbUIsT0FBTyxLQVF2RHJCLEVBQW9Cc0IsRUFBSSxTQUFTRCxFQUFPRSxHQUV2QyxHQURVLEVBQVBBLElBQVVGLEVBQVFyQixFQUFvQnFCLElBQy9CLEVBQVBFLEVBQVUsT0FBT0YsRUFDcEIsR0FBVyxFQUFQRSxHQUE4QixpQkFBVkYsR0FBc0JBLEdBQVNBLEVBQU1HLFdBQVksT0FBT0gsRUFDaEYsSUFBSUksRUFBS1gsT0FBT1ksT0FBTyxNQUd2QixHQUZBMUIsRUFBb0JrQixFQUFFTyxHQUN0QlgsT0FBT0MsZUFBZVUsRUFBSSxVQUFXLENBQUVULFlBQVksRUFBTUssTUFBT0EsSUFDdEQsRUFBUEUsR0FBNEIsaUJBQVRGLEVBQW1CLElBQUksSUFBSU0sS0FBT04sRUFBT3JCLEVBQW9CVSxFQUFFZSxFQUFJRSxFQUFLLFNBQVNBLEdBQU8sT0FBT04sRUFBTU0sSUFBUUMsS0FBSyxLQUFNRCxJQUM5SSxPQUFPRixHQUlSekIsRUFBb0I2QixFQUFJLFNBQVMxQixHQUNoQyxJQUFJUyxFQUFTVCxHQUFVQSxFQUFPcUIsV0FDN0IsV0FBd0IsT0FBT3JCLEVBQWdCLFNBQy9DLFdBQThCLE9BQU9BLEdBRXRDLE9BREFILEVBQW9CVSxFQUFFRSxFQUFRLElBQUtBLEdBQzVCQSxHQUlSWixFQUFvQmEsRUFBSSxTQUFTaUIsRUFBUUMsR0FBWSxPQUFPakIsT0FBT2tCLFVBQVVDLGVBQWUxQixLQUFLdUIsRUFBUUMsSUFHekcvQixFQUFvQmtDLEVBQUksR0FJakJsQyxFQUFvQkEsRUFBb0JtQyxFQUFJLEksK0JDakI5QyxTQUFTQyxFQUFXQyxHQUN6QkMsT0FBT0MsZ0JBQWtCRCxPQUFPQyxpQkFBbUIsR0FDbkQsSUFBTUMsRUFBT0YsT0FBT0MsZ0JBQWdCRixJQUFPLEtBRTNDLElBQUtHLEVBQU0sQ0FDVCxJQUFNQyxFQUFrQkMsS0FBS0MsVUFBVTdCLE9BQU84QixLQUFLTixPQUFPQyxrQkFHMUQsTUFBTSxJQUFJTSxVQUFKLHlLQUdXUixFQUhYLG1DQUlXSSxFQUpYLE9BU1IsT0FBT0QsRSxrRUFuRUYsV0FDTCxNQUF1QixvQkFBVE0sS0FBdUJBLEtBQU9DLFUsZUFVdkMsV0FDTCxNQUF1QixvQkFBVEMsS0FBdUJBLEtBQU9WLFEsWUFZdkMsU0FBbUJqQixHQUN4QixPQUFPQSxRQUF3Q0EsRUFBUSxJLFVBT2xELFdBQ0wsTUFBTyx1Q0FBdUM0QixRQUFRLFNBQVMsU0FBU3hDLEdBQ3RFLElBQUlTLEVBQXFCLEdBQWhCZ0MsS0FBS0MsU0FBaUIsRUFFL0IsT0FEVyxLQUFMMUMsRUFBV1MsRUFBUyxFQUFKQSxFQUFXLEdBQ3hCa0MsU0FBUyxRLDRCQTRDZixTQUFvQmYsRUFBSWdCLEdBSTdCLE9BSEFmLE9BQU9DLGdCQUFrQkQsT0FBT0MsaUJBQW1CLEdBQ25ERCxPQUFPQyxnQkFBZ0JGLEdBQU1nQixFQUV0QmpCLEVBQVdDLEssNEZDdkZiLFNBQXFCaUIsRUFBTUMsRUFBTUMsR0FDdEMsSUFBSUMsRUFDSixPQUFPLFdBQ0wsSUFBSUMsRUFBVUMsS0FDWkMsRUFBT0MsVUFDTEMsRUFBUSxXQUNWTCxFQUFVLEtBQ0xELEdBQ0hGLEVBQUtTLE1BQU1MLEVBQVNFLElBR3BCSSxFQUFVUixJQUFjQyxFQUM1QlEsYUFBYVIsR0FDYkEsRUFBVVMsV0FBV0osRUFBT1AsR0FDeEJTLEdBQ0ZWLEVBQUtTLE1BQU1MLEVBQVNFLEssZUFZbkIsU0FBc0JGLEdBQXFDLElBQTVCUyxFQUE0Qix1REFBbEIsR0FBSUMsRUFBYyx1REFBSixHQUN0REMsRUFBc0JYLEVBQVFZLFdBQWEsR0FFakQsR0FBSUQsRUFBb0JFLFNBQVNILEdBQVUsQ0FDekMsSUFBTUksR0FBTSxJQUFBQyxrQkFBaUJDLGVBQWpCLFVBQW1DaEIsRUFBUXJCLEtBQ3ZEQyxPQUFPcUMseUJBQXlCSCxFQUFLTCxLLHlDQTZEbEMsU0FBK0JTLEdBQ3BDLE9BQU9DLEVBQWFELEVBQUVFLEtBQU1GLEVBQUVsQixVQWpHaEMsV0EwRE8sU0FBU21CLEVBQWFDLEVBQU1wQixHQUNqQyxJQUFJLElBQVNvQixFQUFLQyxNQUNoQixPQUFPLEVBR1QsSUFBTUMsRUFBZUYsRUFBS0csVUFBWSxjQUFnQnZCLEVBQVFzQixhQUU5RCxNQUFPLENBQ0w1RSxFQUNFc0QsRUFBUXpCLGVBQWUsaUJBQW1CNkMsRUFBS0ksS0FBS0YsR0FDaERGLEVBQUtJLEtBQUtGLEdBQ1ZGLEVBQUt6QyxHQUNYOEMsRUFBR0wsRUFBS00sU0FDUmxELEVBQ0U0QyxFQUFLN0MsZUFBZSxXQUFhNkMsRUFBS08sT0FBT3BELGVBQWUsT0FDeEQ2QyxFQUFLTyxPQUFPMUQsSUFDWixHQUNObEIsRUFBR3FFLEVBQUtHLFdBQWEsRUFBSUgsRUFBS1EsV0FDOUJuRCxFQUFHb0QsUUFBUVQsRUFBS1UsVUFFaEJDLEdBQ0UvQixFQUFRekIsZUFBZSwwQkFDYSxJQUFwQ3lCLEVBQU8scUJBQ0hvQixFQUFLSSxLQUNMLEtBQ05RLEdBQUlaLEVBQUtHLGEsa1FDNUZiLElBQUlVLEVBR0pBLEVBQUssV0FDSixPQUFPaEMsS0FESCxHQUlMLElBRUNnQyxFQUFJQSxHQUFLLElBQUlDLFNBQVMsY0FBYixHQUNSLE1BQU9oQixHQUVjLFlBQWxCLG9CQUFPdEMsT0FBUCxjQUFPQSxXQUFxQnFELEVBQUlyRCxRQU9yQ25DLEVBQU9ELFFBQVV5RixHLCtGQ25CakIsY0FDQSxXQUNBLFcsbURBR0EsSUFJSUUsRUFBaUIxRSxVQUFTQSxVQUFPQyxpQkFBYzBFLEUsTUFTbkQsU0FBb0J6RSxHQUNsQixPQUFhLE1BQVRBLE9BQ2V5RSxJQUFWekUsRUFkUSxxQkFETCxnQkFpQkp3RSxHQUFrQkEsS0FBa0IvRSxPQUFPTyxJQUMvQyxhQUFVQSxJQUNWLGFBQWVBLEksdVZDQXJCLFNBQXNCQSxHQUNwQixPQUFnQixNQUFUQSxHQUFpQyxVQUFoQixFQUFPQSxJLDBDQ3pCakNsQixFQUFPRCxRQUFVLFNBQVNDLEdBb0J6QixPQW5CS0EsRUFBTzRGLGtCQUNYNUYsRUFBTzZGLFVBQVksYUFDbkI3RixFQUFPOEYsTUFBUSxHQUVWOUYsRUFBTytGLFdBQVUvRixFQUFPK0YsU0FBVyxJQUN4Q3BGLE9BQU9DLGVBQWVaLEVBQVEsU0FBVSxDQUN2Q2EsWUFBWSxFQUNaQyxJQUFLLFdBQ0osT0FBT2QsRUFBT0UsS0FHaEJTLE9BQU9DLGVBQWVaLEVBQVEsS0FBTSxDQUNuQ2EsWUFBWSxFQUNaQyxJQUFLLFdBQ0osT0FBT2QsRUFBT0MsS0FHaEJELEVBQU80RixnQkFBa0IsR0FFbkI1RixJLGtRQ1dSQSxFQUFPRCxRQUFVLENBQUVpRyxjQXpCbkIsU0FBU0EsRUFBY0MsR0FHckIsR0FBMEIsaUJBQWZBLEVBTUosT0FBSUMsTUFBTUMsUUFBUUYsR0FFaEJBLEVBQVdHLEtBQUksU0FBQUMsR0FBRyxPQUFJTCxFQUFjSyxNQUNaLFdBQXRCLEVBQU9KLElBQTBDLE9BQWZBLEVBR3BDdEYsT0FBTzhCLEtBQUt3RCxHQUFZSyxRQUFPLFNBQUNDLEVBQUsvRSxHQUUxQyxPQURBK0UsRUFBSS9FLEdBQU93RSxFQUFjQyxFQUFXekUsSUFDN0IrRSxJQUNOLElBR0lOLEVBakJQLElBQ0UsT0FBT0QsRUFBY3pELEtBQUtpRSxNQUFNUCxJQUNoQyxNQUFPUSxHQUNQLE9BQU9SLE0sa2ZDSnNCLEcscUJBQ0QsSyw0QkFDTyxHLHNCQUNOLEssNkJBQ08sSyxnQ0FHRyxLLGdDQUNBLEssOEJBQ0YsSywrQkFDQyxLLCtCQUNBLEssNkJBQ0YsSyw2QkFHQSxLLG1DQUdNLEssb0JBR2YsTSwwVUNMakMsU0FBa0IvRSxHQUNoQixJQUFJd0YsRUFBTyxFQUFPeEYsR0FDbEIsT0FBZ0IsTUFBVEEsSUFBMEIsVUFBUndGLEdBQTRCLFlBQVJBLEksMENDM0IvQyxJLG9FQUdBLEksTUFIQSxRLDRCQUdhQyxRQUFLM0YsTyw0R0NIbEIsSSxFQUFBLEcsRUFBQSxRLGdRQUdBLElBQUk0RixFQUEwQixXQUFmLG9CQUFPQyxLQUFQLGNBQU9BLFFBQW9CQSxNQUFRQSxLQUFLbEcsU0FBV0EsUUFBVWtHLEssRUFHakVDLFdBQWNGLEdBQVluQixTQUFTLGNBQVRBLEcsa0hDMEJyQyxTQUFZdkUsRUFBTzZGLEdBQ2pCLE9BQU83RixJQUFVNkYsR0FBVTdGLEdBQVVBLEdBQVM2RixHQUFVQSxHLDRHQ2pDMUQsZUFDQSxXLHlEQTJCQSxTQUFxQjdGLEdBQ25CLE9BQWdCLE1BQVRBLElBQWlCLGFBQVNBLEVBQU04RixXQUFZLGFBQVc5RixJLDBDQ3JCaEUsSSw4RUFBQSxRLDRCQUVlK0YsUSwwQ0NGZixJLDhFQUFBLFEsNEJBRWVDLFEsb0pDcURSLFNBQWlDaEYsRUFBSWlGLEdBQzFDLElBQU05RSxHQUFPLElBQUFKLFlBQVdDLEdBQ2xCa0YsRUFBd0JwQixFQUFjekQsS0FBS0MsVUFBVTJFLElBRTNERSxFQUEyQkQsR0FFM0IvRSxFQUFLYSxRQUFRb0UsSUFBSUMsY0FBY0gsR0FDL0IvRSxFQUFLYSxRQUFRc0UsV0FBYUosRyxzQkFTckIsU0FBNkJsRixFQUFJdUYsR0FDdEMsSUFBTXZFLEdBQVUsSUFBQWpCLFlBQVdDLEdBQUlnQixRQUN6Qm9FLEVBQU1wRSxFQUFRb0UsSUFDZEksRUFBYXhFLEVBQVF5RSxVQUN2QkYsRUFDRkMsRUFBV0UsaUJBQWlCQyxPQUFPSixJQUVuQ0gsRUFBSU0sb0IscUJBWUQsU0FBNEIxRixHQUF3QyxJQUFwQzRGLEVBQW9DLHdEQUFoQkMsRUFBZ0IsdURBQU4sS0FDN0Q3RSxHQUFVLElBQUFqQixZQUFXQyxHQUFJZ0IsUUFDekJ3RSxFQUFheEUsRUFBUXlFLFVBRTNCLEdBQU1JLEdBQVdBLEVBQVFmLE9BU3ZCVSxFQUFXTSxnQkFBZ0JELEVBQVMzQyxRQUFRMEMsUUFUWixDQUNoQyxJQUFNRyxFQUFlLEdBRXJCUCxFQUFXUSxnQkFBZ0JDLFNBQVEsU0FBQUMsR0FDakNILEVBQWFJLEtBQUtELEVBQU9FLFVBRzNCWixFQUFXTSxnQkFBZ0JDLEVBQWM3QyxRQUFRMEMsTSx5QkFXOUMsU0FBZ0M1RixFQUFJcUcsSUFDekMsSUFBQXRHLFlBQVdDLEdBQUlnQixRQUFRb0UsSUFBSWtCLG9CQUFvQkQsSSxvQkFVMUMsU0FBMkJyRyxFQUFJcUcsRUFBVWQsSUFDOUMsSUFBQXhGLFlBQVdDLEdBQUlnQixRQUFReUUsVUFBVWMsZUFBZUYsRUFBVVYsT0FBT0osSyxlQVk1RCxTQUFzQnZGLEVBQUlxRyxFQUFVRyxJQUN6QyxJQUFBekcsWUFBV0MsR0FBSWdCLFFBQVF5RSxVQUFVZ0IsZ0JBQWdCSixFQUFVRyxJLGdCQVl0RCxTQUF1QnhHLEVBQUlxRyxFQUFVSyxJQUMxQyxJQUFBM0csWUFBV0MsR0FBSWdCLFFBQVF5RSxVQUFVa0IsV0FBV04sRUFBVUssSSx1RkFzRGpELFNBQThCMUcsRUFBSTZGLEVBQVNlLElBQ2hELElBQUE3RyxZQUFXQyxHQUFJZ0IsUUFBUXlFLFVBQ3JCbUIsRUFBTSxxQkFBdUIsc0JBQzdCZixFQUFRZ0IsTUFBTSxLQUFLM0MsS0FBSSxTQUFBbkcsR0FBQyxPQUFJQSxFQUFFK0ksWSwwQkFTM0IsU0FBaUM5RyxFQUFJNkYsSUFDMUMsSUFBQTlGLFlBQVdDLEdBQUlnQixRQUFReUUsVUFBVXNCLHNCQUMvQmxCLEVBQVFnQixNQUFNLEtBQUszQyxLQUFJLFNBQUFuRyxHQUFDLE9BQUlBLEVBQUUrSSxZLGtCQUkzQixTQUF5QjlHLEdBQzlCLE9BQU8sSUFBQUQsWUFBV0MsR0FBSWdCLFFBQVF5RSxVQUFVdUIsZSxrQkFTbkMsU0FBeUJoSCxFQUFJZCxJQUNsQyxJQUFBYSxZQUFXQyxHQUFJZ0IsUUFBUXlFLFVBQVV3QixlQUFldEIsT0FBT3pHLEsscUJBVWxELFNBQTRCYyxFQUFJNkYsRUFBU2UsSUFDOUMsSUFBQTdHLFlBQVdDLEdBQUlnQixRQUFReUUsVUFBVW1CLEVBQU0sa0JBQW9CLG1CQUN6RGYsRUFBUWdCLE1BQU0sS0FBSzNDLEtBQUksU0FBQW5HLEdBQUMsT0FBSUEsRUFBRStJLFksd0JBVTNCLFNBQStCOUcsRUFBSTZGLElBQ3hDLElBQUE5RixZQUFXQyxHQUFJZ0IsUUFBUXlFLFVBQVV5QixtQkFDL0JyQixFQUFRZ0IsTUFBTSxLQUFLM0MsS0FBSSxTQUFBbkcsR0FBQyxPQUFJQSxFQUFFK0ksWSxxQkFVM0IsU0FBNEI5RyxFQUFJNkYsSUFDckMsSUFBQTlGLFlBQVdDLEdBQUlnQixRQUFReUUsVUFBVTBCLGdCQUMvQnRCLEVBQVFnQixNQUFNLEtBQUszQyxLQUFJLFNBQUFuRyxHQUFDLE9BQUlBLEVBQUUrSSxZLHdCQVUzQixTQUErQjlHLEVBQUk2RixJQUN4QyxJQUFBOUYsWUFBV0MsR0FBSWdCLFFBQVF5RSxVQUFVMkIsbUJBQy9CdkIsRUFBUWdCLE1BQU0sS0FBSzNDLEtBQUksU0FBQW5HLEdBQUMsT0FBSUEsRUFBRStJLFksa0JBVTNCLFNBQXlCOUcsRUFBSXFILEdBQ2xDLElBQU1DLEVBQVVqSCxLQUFLaUUsTUFBTStDLEdBQ3JCRSxFQUFjLEdBQ3BCRCxFQUFRckIsU0FBUSxTQUFBbEksR0FDZCxJQUFLLElBQU11QixLQUFPdkIsRUFDaEJ3SixFQUFZcEIsS0FBSyxDQUNmQyxNQUFPOUcsRUFDUGtJLEtBQU16SixFQUFFdUIsU0FLZCxJQUFBUyxZQUFXQyxHQUFJZ0IsUUFBUW9FLElBQUlxQyxhQUFhRixJLG1CQVNuQyxTQUEwQnZILElBQy9CLElBQUFELFlBQVdDLEdBQUlnQixRQUFRb0UsSUFBSXNDLGNBelQ3QixXQUNBLFFBQ1E1RCxFQUFrQjZELEVBQVEsR0FBMUI3RCxjQVFSLFNBQVM4RCxFQUFtQkMsR0FDMUIsSUFBTUMsRUFBK0JELEVBQUlFLG1CQUNyQ0QsSUFDRkQsRUFBSUUsbUJBQXFCLFNBQUFDLEdBQU0sT0FDN0IsSUFBQUMsc0JBQXFCSCxFQUE4QkUsS0FHdkRILEVBQUlLLGlCQUFtQixjQUduQkwsRUFBSWpJLGVBQWUsYUFDckJpSSxFQUFJaEUsU0FBU29DLFNBQVEsU0FBQWtDLEdBQUssT0FBSVAsRUFBbUJPLE1BVzlDLFNBQVNoRCxFQUEyQkYsR0FDekMsSUFBSyxJQUFJbEgsS0FBS2tILEVBQWEsQ0FDekIsSUFBTTRDLEVBQU01QyxFQUFZbEgsR0FFeEI4SixFQUFJTyxrQkFBb0JQLEVBQUlPLG1CQUFxQkMsRUFDakRSLEVBQUlTLHdCQUNGVCxFQUFJUyx5QkFBMkJDLEVBQ2pDWCxFQUFtQkMsR0FHZkEsRUFBSWpJLGVBQWUsYUFBdUMsaUJBQWpCaUksRUFBSVcsVUFBdUIsV0FDdEUsSUFBTUEsRUFBV1gsRUFBSVcsU0FDckJYLEVBQUlXLFNBQVcsU0FBQVIsR0FBTSxPQUFJLElBQUFDLHNCQUFxQk8sRUFBVVIsSUFGYyxJQTBIckUsU0FBU0ssRUFBMkJJLEdBQ3pDLFFBQUtBLEVBQU1wSCxRQUFRcUgsdUJBSUhELEVBQU1oRCxVQUFVa0Qsb0JBRWpCLEdBQUdDLE9BQU9DLFFBQVVKLEVBQU1HLE9BQU9DLE1BYzNDLFNBQVNOLEVBQTZCRSxHQUczQyxRQUZnQkEsRUFBTXJELElBQUkwRCxtQkFBbUJDLFlBQVkxSCxRQUU1QzJILDZCQUlHUCxFQUFNaEQsVUFBVWtELG9CQUVqQixHQUFHQyxPQUFPQyxRQUFVSixFQUFNRyxPQUFPQyxRLDZCQzNMM0MsU0FBU0ksRUFBcUJDLEdBT25DLFFBTG1ELElBQXhDRCxFQUFxQkUsa0JBQzlCRixFQUFxQkUsZ0JBQWtCLElBSXJDRixFQUFxQkUsZ0JBQWdCRCxHQUN2QyxPQUFPRCxFQUFxQkUsZ0JBQWdCRCxHQUk5QyxJQUFJRSxFQUFlLEtBSWpCQSxFQURFRixFQUFXRyxRQUFRLFdBQWEsRUFDbkJILEVBRUEsVUFBWUEsRUFBYSxJQUcxQyxJQUFNSSxFQUFjLElBQUkvRixTQUN0QixpSEFDQTZGLEdBTUYsT0FGQUgsRUFBcUJFLGdCQUFnQkQsR0FBY0ksRUFFNUNBLEUsaUdBV0YsU0FBOEJKLEVBQVlsQixHQUMvQyxJQW9CRSxPQW5CMkJpQixFQUFxQkMsRUFHakNLLENBQ2J2QixFQUFPaEosTUFDUGdKLEVBQU8zRyxRQUNQMkcsRUFBT3dCLFNBQ1B4QixFQUFPeUIsU0FDUHpCLEVBQU9oSixNQUNQZ0osRUFBT3ZGLEtBQ1B1RixFQUFPbkYsS0FDUG1GLEVBQU9ZLE9BQ1BaLEVBQU9qRixTQUNQaUYsRUFBTzVDLElBQ1A0QyxFQUFPdkMsVUFDUHVDLEVBQU8wQixTQUNQMUIsRUFBTzlCLE9BQ1A4QixFQUFPMkIsYUFHVCxNQUFPcEgsR0FPUCxPQUpBcUgsUUFBUUMsSUFBSSx1Q0FDWkQsUUFBUUMsSUFBSSxnQkFBa0JYLEdBQzlCVSxRQUFRQyxJQUFJLFdBQVk3QixHQUN4QjRCLFFBQVFDLElBQUksZUFBaUJ0SCxHQUN0QixRLGtHQ3hFSixTQUEyQnZDLEVBQUk4SixJQUNwQyxJQUFBL0osWUFBV0MsR0FBSWdCLFFBQVFvRSxJQUFJMkUsZUFBZUQsSSxlQUdyQyxTQUFzQjlKLElBQzNCLElBQUFELFlBQVdDLEdBQUlnQixRQUFRb0UsSUFBSTRFLGEsaUJBR3RCLFNBQXdCaEssSUFDN0IsSUFBQUQsWUFBV0MsR0FBSWdCLFFBQVFvRSxJQUFJNkUsZSx3QkFTdEIsU0FBK0JqSyxFQUFJa0ssRUFBT0MsR0FDL0MsSUFBTS9FLEdBQU0sSUFBQXJGLFlBQVdDLEdBQUlnQixRQUFRb0UsSUFDN0IzQyxFQUFPMkMsRUFBSWdGLFdBQVdGLEdBRXhCekgsRUFDRjJDLEVBQUlpRixrQkFBa0I1SCxFQUFNMEgsR0FFNUIvRSxFQUFJa0YsbUJBQW1CM0UsT0FBT3VFLEdBQVFDLEksdUJBSW5DLFNBQThCbkssRUFBSWdJLEdBQ3ZDLElBQU1oSCxHQUFVLElBQUFqQixZQUFXQyxHQUFJZ0IsUUFDM0J1SixFQUFldkMsRUFBT3dDLHFCQUN0QkMsRUFBb0J6QyxFQUFPMEMsaUJBTy9CLE9BQVExQyxFQUFPMUksS0FDYixLQUxlLEdBT2IsR0FBSW1MLElBQXNCQSxFQUFrQjdILFVBQzFDLEdBQUkySCxFQUFhM0gsVUFBVyxDQUMxQixJQUFNK0gsRUFBTTNKLEVBQVFvRSxJQUFJd0YsdUJBQ3RCNUosRUFBUW9FLElBQUl5Rix3QkFFVkYsR0FDRkEsRUFBSUcsYUFBWSxRQUdsQjlKLEVBQVFvRSxJQUFJMkYsYUFBWSxTQUFBdEksR0FDbEI4SCxFQUFheEgsU0FBVyxJQUFNTixFQUFLTSxVQUNyQ04sRUFBS3FJLGFBQVksTUFNekIsT0FBT0wsRUFDVCxLQTFCYSxHQTRCWCxHQUFJQSxJQUFzQkEsRUFBa0I3SCxVQUMxQyxHQUFJMkgsRUFBYTNILFVBQVcsQ0FDMUIsSUFBTStILEVBQU0zSixFQUFRb0UsSUFBSXdGLHVCQUN0QjVKLEVBQVFvRSxJQUFJNEYsdUJBRVZMLEdBQ0ZBLEVBQUlHLGFBQVksUUFHbEI5SixFQUFRb0UsSUFBSTJGLGFBQVksU0FBQXRJLEdBQ2xCOEgsRUFBYXhILFNBQVcsSUFBTU4sRUFBS00sVUFDckNOLEVBQUtxSSxhQUFZLE1BS3pCLE9BQU9MLEVBQ1QsS0EzQ2UsR0E0Q2YsS0EzQ2dCLEdBNENkLE9BQU9BLEVBQ1QsUUFDRSxNQUFNLElBQUlRLE1BQU0scUMsa0JBVWYsU0FBeUJqTCxFQUFJNkMsR0FDbEMsT0FBT0EsR0FBSyxJQUFBOUMsWUFBV0MsR0FBSWdCLFFBQVFLLFFBQVFzQixlLGdCQVN0QyxTQUF1QjNDLEVBQUlrTCxHQUNoQyxJQUFNbEssR0FBVSxJQUFBakIsWUFBV0MsR0FBSWdCLFFBRS9CQSxFQUFRb0UsSUFBSStGLFdBQVdELEdBQ3ZCbEssRUFBUW9LLFFBQVVGLEcsbUJBU2IsU0FBMEJsTCxFQUFJcUwsRUFBYUMsR0FDaEQsSUFBTXRLLEdBQVUsSUFBQWpCLFlBQVdDLEdBQUlnQixRQUUvQixHQUFJcUssRUFBWUUsT0FBT3pHLE9BQVEsQ0FDN0IsSUFBSTBHLEVBQVEsR0FFWkgsRUFBWUUsT0FBT3RGLFNBQVEsU0FBQWlFLEdBQ3pCc0IsRUFBTXJGLEtBQUtuRixFQUFRb0UsSUFBSWdGLFdBQVdGLEdBQU9ySCxTQUczQ3dJLEVBQVlFLE9BQVNDLEVBR2xCRixFQUdIdEssRUFBUW9FLElBQUlxRyxtQkFBbUJKLEdBRi9CckssRUFBUW9FLElBQUlzRyxjQUFjTCxJLG1CQVl2QixTQUEwQnJMLEVBQUkyTCxHQUNuQyxJQUNNdkcsR0FEVSxJQUFBckYsWUFBV0MsR0FBSWdCLFFBQ1hvRSxJQUVwQkEsRUFBSTJGLGFBQVksU0FBQUosR0FDZEEsRUFBSWlCLGFBQWFELE1BR25CdkcsRUFBSXlHLHNCLGtCQVVDLFNBQXlCN0wsRUFBSWtLLEVBQU95QixHQUN6QyxJQUFNM0ssR0FBVSxJQUFBakIsWUFBV0MsR0FBSWdCLFFBQ3pCb0UsRUFBTXBFLEVBQVFvRSxJQUNkdUYsRUFBTXZGLEVBQUlnRixXQUFXRixJQUFVOUUsRUFBSXdGLHVCQUF1QlYsR0FFNURTLEdBQ0ZBLEVBQUlpQixhQUFhRCxHQUNqQjNLLEVBQVFvRSxJQUFJeUcsc0JBRVpqQyxRQUFRa0MsS0FBUix1Q0FBNkM1QixFQUE3QywyQixxQkFTRyxTQUE0QmxLLElBQ2pDLElBQUFELFlBQVdDLEdBQUlnQixRQUFRb0UsSUFBSTJHLG1CLHFCQVN0QixTQUE0Qi9MLEVBQUlnTSxHQUNyQyxJQUNNNUcsR0FEVSxJQUFBckYsWUFBV0MsR0FBSWdCLFFBQ1hvRSxJQUVwQkEsRUFBSTZHLCtCQUE4QixTQUFBeEosSUFFOUJ1SixFQUFLM0MsUUFBUTZDLE9BQU96SixFQUFLTSxZQUFjLEdBQ3ZDaUosRUFBSzNDLFFBQVE2QyxPQUFPekosRUFBS3pDLE1BQVEsS0FFakN5QyxFQUFLcUksYUFBWSxHQUNqQnJJLEVBQUswSixVQUFXLE1BSXBCL0csRUFBSWdILDhCLGVBR0MsU0FBc0JwTSxFQUFJcU0sR0FDL0IsSUFBTXJMLEdBQVUsSUFBQWpCLFlBQVdDLEdBQUlnQixRQUUzQixJQUFNcUwsRUFDUnJMLEVBQVFvRSxJQUFJa0gsb0JBRVp0TCxFQUFRb0UsSUFBSW1ILGEsaUJBSVQsU0FBd0J2TSxFQUFJcU0sR0FDakMsSUFBTXJMLEdBQVUsSUFBQWpCLFlBQVdDLEdBQUlnQixRQUUzQixJQUFNcUwsRUFDUnJMLEVBQVFvRSxJQUFJb0gsc0JBRVp4TCxFQUFRb0UsSUFBSXFILGUsMkNBOEJULFNBQTJCek0sR0FDaEMsSUFBTWdNLEVBQU8zTCxLQUFLaUUsTUFBTW9JLEVBQW1CMU0sSUFFM0MsR0FBSWdNLEVBQUtsSCxPQUNQLE9BQU96RSxLQUFLQyxVQUFVMEwsRUFBS0EsRUFBS2xILE9BQVMsSUFHM0MsTUFBTyxJLFlBV0YsU0FBbUI5RSxFQUFJa0ssR0FDNUIsSUFBTWxKLEdBQVUsSUFBQWpCLFlBQVdDLEdBQUlnQixRQUMvQixPQUFPWCxLQUFLQyxXQUNWLElBQUFrQyxjQUFheEIsRUFBUW9FLElBQUlnRixXQUFXRixHQUFRbEosRUFBUUssVyxhQWFqRCxTQUFvQnJCLEVBQUkyTSxFQUFPQyxHQUNwQyxJQUFNNUwsR0FBVSxJQUFBakIsWUFBV0MsR0FBSWdCLFFBQ3pCNkwsRUFBUyxHQWtDZixPQWhDQTdMLEVBQVFvRSxJQUFJdUgsSUFBTyxTQUFBbEssR0FDWkEsRUFBS0MsUUFDSmtLLEdBQ2lCLElBQUEzRSxzQkFBcUIyRSxFQUFrQixDQUN4RDVOLE1BQU95RCxFQUFLSSxLQUNaeEIsUUFBU0wsRUFBUUssUUFDakJtSSxTQUFVLEtBQ1ZDLFNBQVUsS0FDVmhILEtBQU1BLEVBQ05JLEtBQU1KLEVBQUtJLEtBQ1grRixPQUFRLEtBQ1I3RixTQUFVTixFQUFLTSxTQUNmcUMsSUFBSzNDLEVBQUtxSyxRQUNWckgsVUFBV2hELEVBQUtnRCxVQUNoQmlFLFNBQVUsa0JBQU1qSCxFQUFLSSxNQUNyQnFELE9BQVEsS0FDUnlELFlBRUVsSCxFQUFLN0MsZUFBZSxXQUFhNkMsRUFBS08sT0FBT3BELGVBQWUsT0FDeEQ2QyxFQUFLTyxPQUFPMUQsSUFDWixNQUlOdU4sRUFBTzFHLE1BQUssSUFBQTNELGNBQWFDLEVBQU16QixFQUFRSyxVQUd6Q3dMLEVBQU8xRyxNQUFLLElBQUEzRCxjQUFhQyxFQUFNekIsRUFBUUssY0FLdENoQixLQUFLQyxVQUFVdU0sSSxnQkFRakIsU0FBdUI3TSxJQUM1QixJQUFBRCxZQUFXQyxHQUFJZ0IsUUFBUW9FLElBQUlzQyxjLHlCQVN0QixTQUFnQzFILEVBQUk2QyxJQUN6QyxJQUFBOUMsWUFBV0MsR0FBSWdCLFFBQVFvRSxJQUFJMkgsb0JBQW9CbEssSSw0QkFTMUMsU0FBbUM3QyxFQUFJNkMsSUFDNUMsSUFBQTlDLFlBQVdDLEdBQUlnQixRQUFRb0UsSUFBSTRILHVCQUF1Qm5LLElBbFdwRCxXQUNBLE9BQ0EsUUEwT08sU0FBUzZKLEVBQW1CMU0sR0FDakMsSUFBTWdCLEdBQVUsSUFBQWpCLFlBQVdDLEdBQUlnQixRQUN6QmlNLEVBQVFqTSxFQUFRb0UsSUFBSThILG1CQUN0QkwsRUFBUyxHQU1iLE9BSkFJLEVBQU1oSCxTQUFRLFNBQUF4RCxHQUNab0ssRUFBTzFHLE1BQUssSUFBQTNELGNBQWFDLEVBQU16QixFQUFRSyxhQUdsQ2hCLEtBQUtDLFVBQVV1TSxLLHdHQ25PakIsU0FBaUM3RSxHQUN0QyxPQUNFQSxFQUFPNUMsSUFBSTBELG1CQUFtQkMsWUFBWTFILFFBQVE4TCxtQkFBcUIsSSxtQkFZcEUsU0FBMEJuTixFQUFJb04sR0FDbkMsSUFBTWpOLEdBQU8sSUFBQUosWUFBV0MsR0FDbEJnQixFQUFVYixFQUFLYSxRQUNmcU0sRUFBS3ZKLEVBQWN6RCxLQUFLQyxVQUFVOE0sSUFFeENDLEVBQUdDLFdBQVksSUFBQUMsc0JBQXFCdk0sRUFBU3FNLEVBQUdDLFdBRWhELElBQU1FLEVBQU14TSxFQUFRb0UsSUFBSXFJLGlCQUFpQkosR0FDbkNLLEdBQU8sSUFBQUMsV0FLYixPQUhBeE4sRUFBS3lOLGVBQWlCek4sRUFBS3lOLGdCQUFrQixHQUM3Q3pOLEVBQUt5TixlQUFlRixHQUFRRixFQUVyQkUsRyxrQkFZRixTQUF5QjFOLEVBQUkwTixHQUNsQyxJQUFNdk4sR0FBTyxJQUFBSixZQUFXQyxHQUV4QixHQUFJME4sRUFFQXZOLEVBQUtQLGVBQWUsbUJBQ3BCTyxFQUFLeU4sZUFBZWhPLGVBQWU4TixJQUVuQ3ZOLEVBQUt5TixlQUFlRixHQUFNRyxvQkFHNUIsR0FBSTFOLEVBQUtQLGVBQWUsa0JBQ3RCLElBQUssSUFBTTdCLEtBQUtvQyxFQUFLeU4sZUFBZ0IsQ0FDbkMsR0FBSXpOLEVBQUt5TixlQUFlaE8sZUFBZTdCLEdBQ3ZCb0MsRUFBS3lOLGVBQWU3UCxHQUM1QjhQLGlCQXZFaEIsV0FDQSxRQUVRL0osRUFBa0I2RCxFQUFRLEdBQTFCN0QsZSxvR0NXRCxTQUNMOUQsRUFDQTJLLEVBQ0FtRCxFQUNBQyxFQUNBQyxFQUNBcEwsR0FFQSxJQUFNNUIsR0FBVSxJQUFBakIsWUFBV0MsR0FBSWdCLFFBQ3pCb0UsRUFBTXBFLEVBQVFvRSxJQUNkM0MsRUFBTzJDLEVBQUlnRixXQUFXTyxJQUFRdkYsRUFBSXdGLHVCQUF1QkQsR0FFL0QzSixFQUFRb0UsSUFBSTZJLGlCQUFpQixDQUMzQmxMLFNBQVVOLEVBQUtNLFNBQ2ZnTCxTQUFVcEksT0FBT29JLEdBQ2pCRCxTQUNBRSxZQUNBcEwsZSxpQkFVRyxTQUF3QjVDLEVBQUlrTyxJQUNqQyxJQUFBbk8sWUFBV0MsR0FBSWdCLFFBQVFvRSxJQUFJK0ksWUFBWUQsSSxtQkFRbEMsU0FBMEJsTyxJQUMvQixJQUFBRCxZQUFXQyxHQUFJZ0IsUUFBUW9FLElBQUlnSixpQix1QkFRdEIsU0FBOEJwTyxJQUNuQyxJQUFBRCxZQUFXQyxHQUFJZ0IsUUFBUW9FLElBQUlpSixxQixvQkFXdEIsU0FBMkJyTyxFQUFJMkssRUFBS3pFLEdBQXlCLElBUTlEckgsRUFBR1QsRUFBR2tRLEVBUnVDQyxFQUFpQix1REFBTixLQUN0RHZOLEdBQVUsSUFBQWpCLFlBQVdDLEdBQUlnQixRQUcvQixHQUFJQSxFQUFRb0UsSUFBSW9KLGtCQUFrQjFKLE9BQVMsRUFDekMsT0FJRixJQUFZLEdBQVI2RixFQUFXLENBRWIsSUFBTThELEVBQWtCek4sRUFBUW9FLElBQUlzSixpQkFFaENELEdBQ0Y1UCxFQUFJNFAsRUFBZ0IxTCxTQUNwQjNFLEVBQUlxUSxFQUFnQnZJLE9BQU9FLE1BQzNCa0ksRUFBSUcsRUFBZ0I3TCxZQUVwQi9ELEVBQUksRUFDSlQsRUFBSTRDLEVBQVF5RSxVQUFVa0Qsb0JBQW9CLEdBQUd2QyxNQUM3Q2tJLEVBQUlDLFFBR04xUCxFQUFLOEwsRUFFRGhGLE9BQU9nSixXQUFXaEUsSUFDakJBLEVBQ0QzSixFQUFRb0UsSUFBSWdGLFdBQVdPLEdBQUs1SCxTQUg1QixFQUlKM0UsRUFBSThILEdBQWtCbEYsRUFBUXlFLFVBQVVrRCxvQkFBb0IsR0FBR3ZDLE1BQy9Ea0ksRUFBSUMsR0FHTixJQUFBeE8sWUFBV0MsR0FBSWdCLFFBQVFvRSxJQUFJd0osZUFBZS9QLEVBQUdULEVBQUdrUSxJLHdCQVkzQyxTQUErQnRPLEdBQ3BDLElBQU1nQixHQUFVLElBQUFqQixZQUFXQyxHQUFJZ0IsUUFDekJLLEVBQVVMLEVBQVFLLFFBQ2xCK0QsRUFBTXBFLEVBQVFvRSxJQUNkeUosRUFBU3pKLEVBQUkwSixnQkFDYnpILEVBQVFqQyxFQUFJMkosV0FDZEMsRUFBUyxHQXFDYixPQW5DQUgsRUFBTzVJLFNBQVEsU0FBQW1ILEdBbUJiLElBZEEsSUFBTXZILEVBQVV1SCxFQUFNdkgsUUFDbkJ6QixRQUFPLFNBQUM2SyxFQUFhQyxHQUtwQixNQUpJLHVCQUF5QkEsRUFBUTlJLE9BQ25DNkksRUFBWTlJLEtBQUsrSSxFQUFROUksT0FHcEI2SSxJQUNOLElBQ0ZuRixPQUFPNUcsU0FFSmlNLEVBQVl0TyxLQUFLdU8sSUFBSWhDLEVBQU1pQyxTQUFTdE0sU0FBVXFLLEVBQU1rQyxPQUFPdk0sVUFDM0R3TSxFQUFXMU8sS0FBSzJPLElBQUlwQyxFQUFNaUMsU0FBU3RNLFNBQVVxSyxFQUFNa0MsT0FBT3ZNLFVBQzFEaUosRUFBTyxHQUVKakosRUFBV29NLEVBQVdwTSxHQUFZd00sRUFBVXhNLElBQVksQ0FDL0QsSUFBTU4sRUFBTzRFLEVBQU1vSSxPQUFPMU0sR0FDMUIsR0FBSU4sRUFBTSxDQUNSLElBQU1pTixHQUFhLElBQUFsTixjQUFhQyxFQUFNcEIsR0FDbENxTyxHQUNGMUQsRUFBSzdGLEtBQUt1SixJQUtaMUQsRUFBS2xILFFBQVVlLEVBQVFmLFFBQ3pCa0ssRUFBTzdJLEtBQUssQ0FBRXRILEVBQUdtTixFQUFNNU4sRUFBR3lILE9BS3ZCeEYsS0FBS0MsVUFBVTBPLEksMkNBbUNqQixTQUF5QmhQLEVBQUlvTixHQUNsQyxJQUFNcE0sR0FBVSxJQUFBakIsWUFBV0MsR0FBSWdCLFFBQy9CQSxFQUFRb0UsSUFBSXVLLGFBQWFwQyxFQUFxQnZNLEVBQVNvTSxLLHlCQVFsRCxTQUFnQ3BOLElBQ3JDLElBQUFELFlBQVdDLEdBQUlnQixRQUFRb0UsSUFBSXdLLHVCQTdNN0IsV0FDQSxPQUVROUwsRUFBa0I2RCxFQUFRLEdBQTFCN0QsY0FzS0QsU0FBU3lKLEVBQXFCdk0sRUFBU29NLEdBQzVDLElBQU1DLEVBQUt2SixFQUFjekQsS0FBS0MsVUFBVThNLElBQ2xDeUMsRUFBVXhDLEVBQUd3QyxNQUVmbEssT0FBT2dKLFdBQVd0QixFQUFHd0MsUUFDcEJ4QyxFQUFHd0MsTUFDSjdPLEVBQVFvRSxJQUFJZ0YsV0FBV2lELEVBQUd3QyxPQUFPOU0sU0FIakMsRUFJRStNLEVBQVF6QyxFQUFHeUMsSUFFYm5LLE9BQU9nSixXQUFXdEIsRUFBR3lDLE1BQ3BCekMsRUFBR3lDLElBQ0o5TyxFQUFRb0UsSUFBSWdGLFdBQVdpRCxFQUFHeUMsS0FBSy9NLFNBSC9CL0IsRUFBUW9LLFFBQVF0RyxPQUFTLEVBSzdCLE1BQU8sQ0FDTGlMLGNBQWVsUCxLQUFLbVAsSUFBSUgsR0FDeEJJLFlBQWFwUCxLQUFLbVAsSUFBSUYsR0FDdEJqSyxRQUFTd0gsRUFBR3hILFcsK0ZDak1oQixJLEVBQUEsRyxFQUFBLFEsaUNBV0EsU0FBeUJwRyxFQUFRSCxFQUFLTixHQUN6QixhQUFQTSxHQUFzQlosV0FDeEIsYUFBZWUsRUFBUUgsRUFBSyxDQUMxQixjQUFnQixFQUNoQixZQUFjLEVBQ2QsTUFBU04sRUFDVCxVQUFZLElBR2RTLEVBQU9ILEdBQU9OLEcsNEdDcEJsQixJLEVBQUEsRyxFQUFBLFEsMkJBRUEsSSxFQUFzQixXQUNwQixJQUNFLElBQUlpQyxHQUFPLGFBQVV4QyxPQUFRLGtCQUU3QixPQURBd0MsRUFBSyxHQUFJLEdBQUksSUFDTkEsRUFDUCxNQUFPc0IsS0FMVyxHLDRHQ0Z0QixjQUNBLFUseURBeUJBLFNBQW9CdkQsR0FDbEIsS0FBSyxhQUFTQSxHQUNaLE9BQU8sRUFJVCxJQUFJa1IsR0FBTSxhQUFXbFIsR0FDckIsTUE1QlkscUJBNEJMa1IsR0EzQkksOEJBMkJjQSxHQTdCWiwwQkE2QjZCQSxHQTFCN0Isa0JBMEJnREEsRyw4VkNoQy9ELEksRUFBa0MsZ0JBQWpCLElBQU9DLEVBQVAsY0FBT0EsS0FBc0JBLEdBQVVBLEVBQU8xUixTQUFXQSxRQUFVMFIsRSw4SENEcEYsZUFDQSxXQUNBLFcseURBVUEsU0FBa0JsUCxFQUFNNE8sR0FDdEIsT0FBTyxjQUFZLGFBQVM1TyxFQUFNNE8sRUFBT08sV0FBV25QLEVBQU8sSyxrSENHN0QsU0FBa0JqQyxHQUNoQixPQUFPQSxHLGtIQ1BULFNBQWVpQyxFQUFNb1AsRUFBUzlPLEdBQzVCLE9BQVFBLEVBQUt1RCxRQUNYLEtBQUssRUFBRyxPQUFPN0QsRUFBSy9DLEtBQUttUyxHQUN6QixLQUFLLEVBQUcsT0FBT3BQLEVBQUsvQyxLQUFLbVMsRUFBUzlPLEVBQUssSUFDdkMsS0FBSyxFQUFHLE9BQU9OLEVBQUsvQyxLQUFLbVMsRUFBUzlPLEVBQUssR0FBSUEsRUFBSyxJQUNoRCxLQUFLLEVBQUcsT0FBT04sRUFBSy9DLEtBQUttUyxFQUFTOU8sRUFBSyxHQUFJQSxFQUFLLEdBQUlBLEVBQUssSUFFM0QsT0FBT04sRUFBS1MsTUFBTTJPLEVBQVM5TyxJLDRHQ2pCN0IsZUFDQSxXQUNBLFdBQ0EsVSw4UkFZQSxTQUF3QnZDLEVBQU9rTCxFQUFPekssR0FDcEMsS0FBSyxhQUFTQSxHQUNaLE9BQU8sRUFFVCxJQUFJK0UsRUFBTyxFQUFPMEYsR0FDbEIsU0FBWSxVQUFSMUYsR0FDSyxhQUFZL0UsS0FBVyxhQUFReUssRUFBT3pLLEVBQU9xRixRQUNyQyxVQUFSTixHQUFvQjBGLEtBQVN6SyxLQUU3QixhQUFHQSxFQUFPeUssR0FBUWxMLEksa0hDSzdCLFNBQWtCQSxHQUNoQixNQUF1QixpQkFBVEEsR0FDWkEsR0FBUyxHQUFLQSxFQUFRLEdBQUssR0FBS0EsR0E5QmIsa0IsaVZDQXZCLElBR0lzUixFQUFXLG1CLE1BVWYsU0FBaUJ0UixFQUFPOEYsR0FDdEIsSUFBSU4sRUFBTyxFQUFPeEYsR0FHbEIsU0FGQThGLEVBQW1CLE1BQVZBLEVBZlksaUJBZXdCQSxLQUdsQyxVQUFSTixHQUNVLFVBQVJBLEdBQW9COEwsRUFBU0MsS0FBS3ZSLEtBQ2hDQSxHQUFTLEdBQUtBLEVBQVEsR0FBSyxHQUFLQSxFQUFROEYsRyw0R0NyQmpELGVBQ0EsV0FDQSxXQUNBLFdBQ0EsV0FDQSxXLG1EQUdBLElBR0lsRixFQUhjbkIsT0FBT2tCLFVBR1FDLGUsTUFVakMsU0FBdUJaLEVBQU93UixHQUM1QixJQUFJQyxHQUFRLGFBQVF6UixHQUNoQjBSLEdBQVNELElBQVMsYUFBWXpSLEdBQzlCMlIsR0FBVUYsSUFBVUMsSUFBUyxhQUFTMVIsR0FDdEM0UixHQUFVSCxJQUFVQyxJQUFVQyxJQUFVLGFBQWEzUixHQUNyRDZSLEVBQWNKLEdBQVNDLEdBQVNDLEdBQVVDLEVBQzFDNUIsRUFBUzZCLEdBQWMsYUFBVTdSLEVBQU04RixPQUFRb0gsUUFBVSxHQUN6RHBILEVBQVNrSyxFQUFPbEssT0FFcEIsSUFBSyxJQUFJeEYsS0FBT04sR0FDVHdSLElBQWE1USxFQUFlMUIsS0FBS2MsRUFBT00sSUFDdkN1UixJQUVRLFVBQVB2UixHQUVDcVIsSUFBa0IsVUFBUHJSLEdBQTBCLFVBQVBBLElBRTlCc1IsSUFBa0IsVUFBUHRSLEdBQTBCLGNBQVBBLEdBQThCLGNBQVBBLEtBRXRELGFBQVFBLEVBQUt3RixLQUVsQmtLLEVBQU83SSxLQUFLN0csR0FHaEIsT0FBTzBQLEcsNEdDdEJULEksRUFBY2hMLE1BQU1DLFEsNEdDdEJwQixJQUFJNk0sRUFBY3JTLE9BQU9rQixVLE1BU3pCLFNBQXFCWCxHQUNuQixJQUFJK1IsRUFBTy9SLEdBQVNBLEVBQU1nUyxZQUcxQixPQUFPaFMsS0FGcUIsbUJBQVIrUixHQUFzQkEsRUFBS3BSLFdBQWNtUixJLDRHQ1ovRCxjQUNBLFVBQ0EsVyx5REF3QkEsU0FBaUI5UixHQUNmLEtBQUssYUFBYUEsR0FDaEIsT0FBTyxFQUVULElBQUlrUixHQUFNLGFBQVdsUixHQUNyQixNQXpCYSxrQkF5Qk5rUixHQTFCTyx5QkEwQllBLEdBQ0MsaUJBQWpCbFIsRUFBTWlTLFNBQTRDLGlCQUFkalMsRUFBTVYsUUFBcUIsYUFBY1UsSSxrSEN4QnpGLFNBQWlCaUMsRUFBTWlRLEdBQ3JCLE9BQU8sU0FBU0MsR0FDZCxPQUFPbFEsRUFBS2lRLEVBQVVDLE0sa0hDRDFCLFNBQWtCQyxFQUFPQyxHQUt2QixJQUpBLElBQUluSCxHQUFTLEVBQ1RwRixFQUFrQixNQUFUc00sRUFBZ0IsRUFBSUEsRUFBTXRNLE9BQ25Da0ssRUFBU2hMLE1BQU1jLEtBRVZvRixFQUFRcEYsR0FDZmtLLEVBQU85RSxHQUFTbUgsRUFBU0QsRUFBTWxILEdBQVFBLEVBQU9rSCxHQUVoRCxPQUFPcEMsRyw0R0NoQlQsSSxFQUFvQixtQiw0R0NEcEIsSSxFQUFBLEcsRUFBQSxTLGlDQXVCQSxTQUFrQmhRLEdBQ2hCLE9BQWdCLE1BQVRBLEVBQWdCLElBQUssYUFBYUEsSSw2QkNuQjNDLElBRXdCc1MsRUFDbkJDLEVBSERDLEVBQWMsR0FXZEMsR0FUb0JILEVBU0YsV0FNckIsT0FBT3JSLFFBQVVTLFVBQVlBLFNBQVNnUixNQUFRelIsT0FBTzBSLE1BWjlDLFdBRU4sWUFEb0IsSUFBVEosSUFBc0JBLEVBQU9ELEVBQUc1UCxNQUFNSixLQUFNRSxZQUNoRCtQLElBYUxLLEVBQVksU0FBVUMsR0FDeEIsT0FBT25SLFNBQVNvUixjQUFjRCxJQUc1QkUsRUFBYSxTQUFXVCxHQUMzQixJQUFJQyxFQUFPLEdBRVgsT0FBTyxTQUFTTSxHQU1ELEdBQXNCLG1CQUFYQSxFQUNILE9BQU9BLElBRWYsUUFBNEIsSUFBakJOLEVBQUtNLEdBQXlCLENBQ3RELElBQUlHLEVBQWNKLEVBQVUxVCxLQUFLb0QsS0FBTXVRLEdBRXZDLEdBQUk1UixPQUFPZ1MsbUJBQXFCRCxhQUF1Qi9SLE9BQU9nUyxrQkFDN0QsSUFHQ0QsRUFBY0EsRUFBWUUsZ0JBQWdCQyxLQUN6QyxNQUFNNVAsR0FDUHlQLEVBQWMsS0FHaEJULEVBQUtNLEdBQVVHLEVBRWhCLE9BQU9ULEVBQUtNLElBMUJHLEdBOEJiTyxFQUFZLEtBQ1pDLEVBQW1CLEVBQ25CQyxFQUFzQixHQUV0QkMsRUFBVSxFQUFRLEtBcUR0QixTQUFTQyxFQUFnQkMsRUFBUXpSLEdBQ2hDLElBQUssSUFBSWpELEVBQUksRUFBR0EsRUFBSTBVLEVBQU8zTixPQUFRL0csSUFBSyxDQUN2QyxJQUFJMlUsRUFBT0QsRUFBTzFVLEdBQ2Q0VSxFQUFXbkIsRUFBWWtCLEVBQUsxUyxJQUVoQyxHQUFHMlMsRUFBVSxDQUNaQSxFQUFTQyxPQUVULElBQUksSUFBSUMsRUFBSSxFQUFHQSxFQUFJRixFQUFTRyxNQUFNaE8sT0FBUStOLElBQ3pDRixFQUFTRyxNQUFNRCxHQUFHSCxFQUFLSSxNQUFNRCxJQUc5QixLQUFNQSxFQUFJSCxFQUFLSSxNQUFNaE8sT0FBUStOLElBQzVCRixFQUFTRyxNQUFNM00sS0FBSzRNLEVBQVNMLEVBQUtJLE1BQU1ELEdBQUk3UixRQUV2QyxDQUNOLElBQUk4UixFQUFRLEdBRVosSUFBUUQsRUFBSSxFQUFHQSxFQUFJSCxFQUFLSSxNQUFNaE8sT0FBUStOLElBQ3JDQyxFQUFNM00sS0FBSzRNLEVBQVNMLEVBQUtJLE1BQU1ELEdBQUk3UixJQUdwQ3dRLEVBQVlrQixFQUFLMVMsSUFBTSxDQUFDQSxHQUFJMFMsRUFBSzFTLEdBQUk0UyxLQUFNLEVBQUdFLE1BQU9BLEtBS3hELFNBQVNFLEVBQWNDLEVBQU1qUyxHQUk1QixJQUhBLElBQUl5UixFQUFTLEdBQ1RTLEVBQVksR0FFUG5WLEVBQUksRUFBR0EsRUFBSWtWLEVBQUtuTyxPQUFRL0csSUFBSyxDQUNyQyxJQUFJMlUsRUFBT08sRUFBS2xWLEdBQ1ppQyxFQUFLZ0IsRUFBUW1TLEtBQU9ULEVBQUssR0FBSzFSLEVBQVFtUyxLQUFPVCxFQUFLLEdBSWxEVSxFQUFPLENBQUNDLElBSEZYLEVBQUssR0FHT1ksTUFGVlosRUFBSyxHQUVtQmEsVUFEcEJiLEVBQUssSUFHakJRLEVBQVVsVCxHQUNUa1QsRUFBVWxULEdBQUk4UyxNQUFNM00sS0FBS2lOLEdBRFhYLEVBQU90TSxLQUFLK00sRUFBVWxULEdBQU0sQ0FBQ0EsR0FBSUEsRUFBSThTLE1BQU8sQ0FBQ00sS0FJakUsT0FBT1gsRUFHUixTQUFTZSxFQUFvQnhTLEVBQVN5UyxHQUNyQyxJQUFJNUIsRUFBU0UsRUFBVy9RLEVBQVEwUyxZQUVoQyxJQUFLN0IsRUFDSixNQUFNLElBQUk1RyxNQUFNLCtHQUdqQixJQUFJMEksRUFBZ0NyQixFQUFvQkEsRUFBb0J4TixPQUFTLEdBRXJGLEdBQXlCLFFBQXJCOUQsRUFBUTRTLFNBQ05ELEVBRU1BLEVBQThCRSxZQUN4Q2hDLEVBQU9pQyxhQUFhTCxFQUFPRSxFQUE4QkUsYUFFekRoQyxFQUFPa0MsWUFBWU4sR0FKbkI1QixFQUFPaUMsYUFBYUwsRUFBTzVCLEVBQU9tQyxZQU1uQzFCLEVBQW9Cbk0sS0FBS3NOLFFBQ25CLEdBQXlCLFdBQXJCelMsRUFBUTRTLFNBQ2xCL0IsRUFBT2tDLFlBQVlOLE9BQ2IsSUFBZ0MsaUJBQXJCelMsRUFBUTRTLFdBQXlCNVMsRUFBUTRTLFNBQVNLLE9BSW5FLE1BQU0sSUFBSWhKLE1BQU0sOExBSGhCLElBQUk0SSxFQUFjOUIsRUFBVy9RLEVBQVEwUyxXQUFhLElBQU0xUyxFQUFRNFMsU0FBU0ssUUFDekVwQyxFQUFPaUMsYUFBYUwsRUFBT0ksSUFNN0IsU0FBU0ssRUFBb0JULEdBQzVCLEdBQXlCLE9BQXJCQSxFQUFNVSxXQUFxQixPQUFPLEVBQ3RDVixFQUFNVSxXQUFXQyxZQUFZWCxHQUU3QixJQUFJWSxFQUFNL0IsRUFBb0JqSixRQUFRb0ssR0FDbkNZLEdBQU8sR0FDVC9CLEVBQW9CZ0MsT0FBT0QsRUFBSyxHQUlsQyxTQUFTRSxFQUFvQnZULEdBQzVCLElBQUl5UyxFQUFRL1MsU0FBUzhULGNBQWMsU0FPbkMsT0FMQXhULEVBQVF5VCxNQUFNalEsS0FBTyxXQUVyQmtRLEVBQVNqQixFQUFPelMsRUFBUXlULE9BQ3hCakIsRUFBbUJ4UyxFQUFTeVMsR0FFckJBLEVBZVIsU0FBU2lCLEVBQVVDLEVBQUlGLEdBQ3RCaFcsT0FBTzhCLEtBQUtrVSxHQUFPeE8sU0FBUSxTQUFVM0csR0FDcENxVixFQUFHQyxhQUFhdFYsRUFBS21WLEVBQU1uVixPQUk3QixTQUFTeVQsRUFBVTFPLEVBQUtyRCxHQUN2QixJQUFJeVMsRUFBT29CLEVBQVF0SixFQUFReUQsRUFHM0IsR0FBSWhPLEVBQVFrUSxXQUFhN00sRUFBSWdQLElBQUssQ0FHOUIsS0FGQXJFLEVBQVNoTyxFQUFRa1EsVUFBVTdNLEVBQUlnUCxNQVM5QixPQUFPLGFBSlBoUCxFQUFJZ1AsSUFBTXJFLEVBVWYsR0FBSWhPLEVBQVFvUixVQUFXLENBQ3RCLElBQUkwQyxFQUFhekMsSUFFakJvQixFQUFRckIsSUFBY0EsRUFBWW1DLEVBQW1CdlQsSUFFckQ2VCxFQUFTRSxFQUFvQnhWLEtBQUssS0FBTWtVLEVBQU9xQixHQUFZLEdBQzNEdkosRUFBU3dKLEVBQW9CeFYsS0FBSyxLQUFNa1UsRUFBT3FCLEdBQVksUUFHM0R6USxFQUFJa1AsV0FDVyxtQkFBUnlCLEtBQ3dCLG1CQUF4QkEsSUFBSUMsaUJBQ29CLG1CQUF4QkQsSUFBSUUsaUJBQ0ssbUJBQVRDLE1BQ1MsbUJBQVRDLE1BRVAzQixFQXRERixTQUE0QnpTLEdBQzNCLElBQUlxVSxFQUFPM1UsU0FBUzhULGNBQWMsUUFRbEMsT0FOQXhULEVBQVF5VCxNQUFNalEsS0FBTyxXQUNyQnhELEVBQVF5VCxNQUFNYSxJQUFNLGFBRXBCWixFQUFTVyxFQUFNclUsRUFBUXlULE9BQ3ZCakIsRUFBbUJ4UyxFQUFTcVUsR0FFckJBLEVBNkNFRSxDQUFrQnZVLEdBQzFCNlQsRUFBU1csRUFBV2pXLEtBQUssS0FBTWtVLEVBQU96UyxHQUN0Q3VLLEVBQVMsV0FDUjJJLEVBQW1CVCxHQUVoQkEsRUFBTWdDLE1BQU1ULElBQUlFLGdCQUFnQnpCLEVBQU1nQyxTQUcxQ2hDLEVBQVFjLEVBQW1CdlQsR0FDM0I2VCxFQUFTYSxFQUFXblcsS0FBSyxLQUFNa1UsR0FDL0JsSSxFQUFTLFdBQ1IySSxFQUFtQlQsS0FNckIsT0FGQW9CLEVBQU94USxHQUVBLFNBQXNCc1IsR0FDNUIsR0FBSUEsRUFBUSxDQUNYLEdBQ0NBLEVBQU90QyxNQUFRaFAsRUFBSWdQLEtBQ25Cc0MsRUFBT3JDLFFBQVVqUCxFQUFJaVAsT0FDckJxQyxFQUFPcEMsWUFBY2xQLEVBQUlrUCxVQUV6QixPQUdEc0IsRUFBT3hRLEVBQU1zUixRQUVicEssS0FyT0h6TixFQUFPRCxRQUFVLFNBQVNvVixFQUFNalMsR0FDL0IsR0FBcUIsb0JBQVY0VSxPQUF5QkEsT0FDWCxpQkFBYmxWLFNBQXVCLE1BQU0sSUFBSXVLLE1BQU0saUVBR25EakssRUFBVUEsR0FBVyxJQUVieVQsTUFBaUMsaUJBQWxCelQsRUFBUXlULE1BQXFCelQsRUFBUXlULE1BQVEsR0FJL0R6VCxFQUFRb1IsV0FBMEMsa0JBQXRCcFIsRUFBUW9SLFlBQXlCcFIsRUFBUW9SLFVBQVlYLEtBRzFFelEsRUFBUTBTLGFBQVkxUyxFQUFRMFMsV0FBYSxRQUdoRDFTLEVBQVE0UyxXQUFVNVMsRUFBUTRTLFNBQVcsVUFFMUMsSUFBSW5CLEVBQVNPLEVBQWFDLEVBQU1qUyxHQUloQyxPQUZBd1IsRUFBZUMsRUFBUXpSLEdBRWhCLFNBQWlCNlUsR0FHdkIsSUFGQSxJQUFJQyxFQUFZLEdBRVAvWCxFQUFJLEVBQUdBLEVBQUkwVSxFQUFPM04sT0FBUS9HLElBQUssQ0FDdkMsSUFBSTJVLEVBQU9ELEVBQU8xVSxJQUNkNFUsRUFBV25CLEVBQVlrQixFQUFLMVMsS0FFdkI0UyxPQUNUa0QsRUFBVTNQLEtBQUt3TSxHQUdia0QsR0FFRnJELEVBRGdCUSxFQUFhNkMsRUFBUzdVLEdBQ1pBLEdBRzNCLElBQVNqRCxFQUFJLEVBQUdBLEVBQUkrWCxFQUFVaFIsT0FBUS9HLElBQUssQ0FDMUMsSUFBSTRVLEVBRUosR0FBcUIsS0FGakJBLEVBQVdtRCxFQUFVL1gsSUFFYjZVLEtBQVksQ0FDdkIsSUFBSyxJQUFJQyxFQUFJLEVBQUdBLEVBQUlGLEVBQVNHLE1BQU1oTyxPQUFRK04sSUFBS0YsRUFBU0csTUFBTUQsWUFFeERyQixFQUFZbUIsRUFBUzNTLFFBNkxoQyxJQUNLK1YsRUFEREMsR0FDQ0QsRUFBWSxHQUVULFNBQVU3TCxFQUFPK0wsR0FHdkIsT0FGQUYsRUFBVTdMLEdBQVMrTCxFQUVaRixFQUFVak0sT0FBTzVHLFNBQVNnVCxLQUFLLFFBSXhDLFNBQVNuQixFQUFxQnRCLEVBQU92SixFQUFPcUIsRUFBUWxILEdBQ25ELElBQUlnUCxFQUFNOUgsRUFBUyxHQUFLbEgsRUFBSWdQLElBRTVCLEdBQUlJLEVBQU0wQyxXQUNUMUMsRUFBTTBDLFdBQVdDLFFBQVVKLEVBQVk5TCxFQUFPbUosT0FDeEMsQ0FDTixJQUFJZ0QsRUFBVTNWLFNBQVM0VixlQUFlakQsR0FDbENrRCxFQUFhOUMsRUFBTThDLFdBRW5CQSxFQUFXck0sSUFBUXVKLEVBQU1XLFlBQVltQyxFQUFXck0sSUFFaERxTSxFQUFXelIsT0FDZDJPLEVBQU1LLGFBQWF1QyxFQUFTRSxFQUFXck0sSUFFdkN1SixFQUFNTSxZQUFZc0MsSUFLckIsU0FBU1gsRUFBWWpDLEVBQU9wUCxHQUMzQixJQUFJZ1AsRUFBTWhQLEVBQUlnUCxJQUNWQyxFQUFRalAsRUFBSWlQLE1BTWhCLEdBSkdBLEdBQ0ZHLEVBQU1tQixhQUFhLFFBQVN0QixHQUcxQkcsRUFBTTBDLFdBQ1IxQyxFQUFNMEMsV0FBV0MsUUFBVS9DLE1BQ3JCLENBQ04sS0FBTUksRUFBTU8sWUFDWFAsRUFBTVcsWUFBWVgsRUFBTU8sWUFHekJQLEVBQU1NLFlBQVlyVCxTQUFTNFYsZUFBZWpELEtBSTVDLFNBQVNtQyxFQUFZSCxFQUFNclUsRUFBU3FELEdBQ25DLElBQUlnUCxFQUFNaFAsRUFBSWdQLElBQ1ZFLEVBQVlsUCxFQUFJa1AsVUFRaEJpRCxPQUFnRC9TLElBQWxDekMsRUFBUXlWLHVCQUF1Q2xELEdBRTdEdlMsRUFBUXlWLHVCQUF5QkQsS0FDcENuRCxFQUFNZCxFQUFRYyxJQUdYRSxJQUVIRixHQUFPLHVEQUF5RCtCLEtBQUtzQixTQUFTQyxtQkFBbUJ0VyxLQUFLQyxVQUFVaVQsTUFBZ0IsT0FHakksSUFBSXFELEVBQU8sSUFBSXpCLEtBQUssQ0FBQzlCLEdBQU0sQ0FBRTdPLEtBQU0sYUFFL0JxUyxFQUFTeEIsRUFBS0ksS0FFbEJKLEVBQUtJLEtBQU9ULElBQUlDLGdCQUFnQjJCLEdBRTdCQyxHQUFRN0IsSUFBSUUsZ0JBQWdCMkIsSywrR0M5V2hDLE1BQ0EsTUFDQSxNQUNBLE1BS0EsMkpBQ0EsMkpBSkFsUCxFQUFRLEtBQ1JBLEVBQVEsTSxpQkNkUiw4QkFDQTdKLEVBQU9ELFFBQVVzUyxFQUFZLElBQVMsTUFBSSxFQUFRLE0scUVDREQyRyxFLHFPQVM5QixvQkFBVG5TLE1BQXVCQSxLQVRnQm1TLEVBU0gsV0FDOUMsT0FBaUIsU0FBUzdZLEdBRWhCLElBQUlQLEVBQW1CLEdBR3ZCLFNBQVNDLEVBQW9CQyxHQUc1QixHQUFHRixFQUFpQkUsR0FDbkIsT0FBT0YsRUFBaUJFLEdBQVVDLFFBR25DLElBQUlDLEVBQVNKLEVBQWlCRSxHQUFZLENBQ3pDRyxFQUFHSCxFQUNISSxHQUFHLEVBQ0hILFFBQVMsSUFVVixPQU5BSSxFQUFRTCxHQUFVTSxLQUFLSixFQUFPRCxRQUFTQyxFQUFRQSxFQUFPRCxRQUFTRixHQUcvREcsRUFBT0UsR0FBSSxFQUdKRixFQUFPRCxRQXFDZixPQWhDQUYsRUFBb0JRLEVBQUlGLEVBR3hCTixFQUFvQlMsRUFBSVYsRUFHeEJDLEVBQW9CVSxFQUFJLFNBQVNSLEVBQVNTLEVBQU1DLEdBQzNDWixFQUFvQmEsRUFBRVgsRUFBU1MsSUFDbENHLE9BQU9DLGVBQWViLEVBQVNTLEVBQU0sQ0FDcEN5WSxjQUFjLEVBQ2RwWSxZQUFZLEVBQ1pDLElBQUtMLEtBTVJaLEVBQW9CNkIsRUFBSSxTQUFTMUIsR0FDaEMsSUFBSVMsRUFBU1QsR0FBVUEsRUFBT3FCLFdBQzdCLFdBQXdCLE9BQU9yQixFQUFNLFNBQ3JDLFdBQThCLE9BQU9BLEdBRXRDLE9BREFILEVBQW9CVSxFQUFFRSxFQUFRLElBQUtBLEdBQzVCQSxHQUlSWixFQUFvQmEsRUFBSSxTQUFTaUIsRUFBUUMsR0FBWSxPQUFPakIsT0FBT2tCLFVBQVVDLGVBQWUxQixLQUFLdUIsRUFBUUMsSUFHekcvQixFQUFvQmtDLEVBQUksR0FHakJsQyxFQUFvQkEsRUFBb0JtQyxFQUFJLEdBOUQ3RCxDQWlFVSxDQUVILFNBQVNoQyxFQUFRa1osRUFBcUJyWixHQUdacVosRUFBbUIsRUFDcEQsU0FBbUJDLEdBQ2pCLEdBQW9CLE9BQWhCQSxJQUF3QyxJQUFoQkEsSUFBd0MsSUFBaEJBLEVBQ2xELE9BQU9DLElBR1QsSUFBSUMsRUFBU3hSLE9BQU9zUixHQUVwQixPQUFJRyxNQUFNRCxHQUNEQSxFQUdGQSxFQUFTLEVBQUl0VyxLQUFLd1csS0FBS0YsR0FBVXRXLEtBQUt5VyxNQUFNSCxLQUs5QyxTQUFTclosRUFBUWtaLEVBQXFCclosR0FHeEIsSUFBSTRaLEVBQTRDNVosRUFBb0IsR0FTNURxWixFQUFtQixFQUFTTyxFQUF5QyxHQUkzRixTQUFTelosRUFBUWtaLEVBQXFCclosR0FHeEIsSUFBSTZaLEVBQTBDN1osRUFBb0IsR0FDdERBLEVBQW9CVSxFQUFFMlksRUFBcUIsS0FBSyxXQUFhLE9BQU9RLEVBQXVDLEtBQzNHN1osRUFBb0JVLEVBQUUyWSxFQUFxQixLQUFLLFdBQWEsT0FBT1EsRUFBdUMsS0FDM0c3WixFQUFvQlUsRUFBRTJZLEVBQXFCLEtBQUssV0FBYSxPQUFPUSxFQUF1QyxLQUMzRzdaLEVBQW9CVSxFQUFFMlksRUFBcUIsS0FBSyxXQUFhLE9BQU9RLEVBQXVDLEtBQzNHN1osRUFBb0JVLEVBQUUyWSxFQUFxQixLQUFLLFdBQWEsT0FBT1EsRUFBdUMsS0FDM0c3WixFQUFvQlUsRUFBRTJZLEVBQXFCLEtBQUssV0FBYSxPQUFPUSxFQUF1QyxLQUMzRzdaLEVBQW9CVSxFQUFFMlksRUFBcUIsS0FBSyxXQUFhLE9BQU9RLEVBQXVDLEtBVS9HUixFQUFtQixFQUFTUSxFQUF1QyxHQUl6RixTQUFTMVosRUFBUWtaLEVBQXFCclosR0FHWnFaLEVBQW1CLEVBZ0JwRCxTQUF5QlMsRUFBZ0JDLEdBQ3ZDLElBQUlDLEVBQ0FDLEVBUUFDLEVBSkosR0FEQUYsRUFBUUcsRUFBU0MsVUFBVUMsS0FBS1AsR0FFOUIsT0FBTyxFQU9ULEdBREFFLEVBQVFHLEVBQVNHLFdBQVdELEtBQUtQLEdBSS9CLE9BQUtTLEVBRkxMLEVBQVFNLFNBQVNSLEVBQU0sR0FBSSxNQU0zQkMsRUFqQ3VCLEtBaUNOQyxFQUNHLE1BQWJGLEVBQU0sSUFBY0MsRUFBaUJBLEdBSm5DVixJQVNYLEdBREFTLEVBQVFHLEVBQVNNLGFBQWFKLEtBQUtQLEdBQ3hCLENBQ1RJLEVBQVFNLFNBQVNSLEVBQU0sR0FBSSxJQUMzQixJQUFJVSxFQUFVRixTQUFTUixFQUFNLEdBQUksSUFFakMsT0FBS08sRUFBaUJMLEVBQU9RLElBSTdCVCxFQS9DdUIsS0FnRHJCQyxFQS9DdUIsSUErQ1FRLEVBQ2IsTUFBYlYsRUFBTSxJQUFjQyxFQUFpQkEsR0FMbkNWLElBVVgsR0FEQVMsRUFBUUcsRUFBU1EsYUFBYU4sS0FBS1AsR0FDeEIsQ0FFVCxJQUFJYyxFQUFTOVosT0FBTytaLEVBQXNELEVBQTdEL1osQ0FBa0ZpWixFQUFNRCxHQUNqR2dCLEVBQVFDLEtBQUtDLElBQ2ZKLEVBQU8sR0FDUEEsRUFBTyxHQUFLLEVBQ1pBLEVBQU8sR0FDUEEsRUFBTyxHQUNQQSxFQUFPLEdBQ1BBLEVBQU8sSUFFTEssRUFBd0JsQixFQUFLbUIsVUFBYW5CLEVBQUttQixVQUFZLElBQy9ELFFBQVNKLEVBQVFHLEdBR25CLE9BQU8sR0F4RVksSUFBSUosRUFBeUQ3YSxFQUFvQixHQU1sR21hLEVBQVcsQ0FDYmdCLFNBQVUsYUFDVmYsVUFBVyxRQUNYRSxXQUFZLGtCQUNaRyxhQUFjLDJCQUNkRSxhQUFjLHFEQWdFaEIsU0FBU0osRUFBaUJMLEVBQU9RLEdBQy9CLE9BQWUsTUFBWEEsS0FBb0JBLEVBQVUsR0FBS0EsRUFBVSxNQVU1QyxTQUFTdmEsRUFBUWtaLEVBQXFCclosR0FHeEIsSUFBSW9iLEVBQTRDcGIsRUFBb0IsSUFTNURxWixFQUFtQixFQUFTK0IsRUFBeUMsR0FJM0YsU0FBU2piLEVBQVFrWixFQUFxQnJaLEdBRzdDYyxPQUFPQyxlQUFlc1ksRUFBcUIsYUFBYyxDQUFFaFksT0FBTyxJQUNuQ3JCLEVBQW9CVSxFQUFFMlksRUFBcUIsU0FBUyxXQUFhLE9BQU9nQyxLQUNsRixJQUFJekIsRUFBNEM1WixFQUFvQixHQUNoRXNiLEVBQTBDdGIsRUFBb0IsR0FDOUR1YixFQUE0Q3ZiLEVBQW9CLEdBQ2hFd2IsRUFBdUN4YixFQUFvQixJQUNuREEsRUFBb0JVLEVBQUUyWSxFQUFxQixTQUFTLFdBQWEsT0FBT21DLEVBQW9DLEtBQzVHeGIsRUFBb0JVLEVBQUUyWSxFQUFxQixjQUFjLFdBQWEsT0FBT08sRUFBeUMsS0FDdEg1WixFQUFvQlUsRUFBRTJZLEVBQXFCLFlBQVksV0FBYSxPQUFPaUMsRUFBdUMsS0FDbEh0YixFQUFvQlUsRUFBRTJZLEVBQXFCLGNBQWMsV0FBYSxPQUFPa0MsRUFBeUMsS0FZdkosSUFBSUYsRUFBUSxDQUNWSSxNQUFPLENBQ0xDLGFBQWNKLEVBQXVDLEVBQ3JESyxjQUFlTCxFQUF1QyxFQUN0RE0scUJBQXNCTixFQUF1QyxFQUM3RE8sY0FBZVAsRUFBdUMsRUFDdERRLGNBQWVSLEVBQXVDLEVBQ3REUyxZQUFhVCxFQUF1QyxFQUNwRFUsb0JBQXFCVixFQUF1QyxJQUduQ2pDLEVBQW1CLFFBQWVtQyxFQUFvQyxHQUs1RixTQUFTcmIsRUFBUWtaLEVBQXFCclosR0FLN0MsU0FBU2ljLEVBQWtCL0gsRUFBUWdJLEdBQVMsSUFBSyxJQUFJOWIsRUFBSSxFQUFHQSxFQUFJOGIsRUFBTS9VLE9BQVEvRyxJQUFLLENBQUUsSUFBSStiLEVBQWFELEVBQU05YixHQUFJK2IsRUFBV25iLFdBQWFtYixFQUFXbmIsYUFBYyxFQUFPbWIsRUFBVy9DLGNBQWUsRUFBVSxVQUFXK0MsSUFBWUEsRUFBV0MsVUFBVyxHQUFNdGIsT0FBT0MsZUFBZW1ULEVBQVFpSSxFQUFXeGEsSUFBS3dhLElBbUI3UyxJQUFJOVUsRUFFSixXQUNFLFNBQVNBLEtBeEJYLFNBQXlCZ1YsRUFBVUMsR0FBZSxLQUFNRCxhQUFvQkMsR0FBZ0IsTUFBTSxJQUFJelosVUFBVSxxQ0F5QjVHMFosQ0FBZ0I1WSxLQUFNMEQsR0FyQjFCLElBQXNCaVYsRUFBYUUsRUFBWUMsRUEyWDdDLE9BM1hvQkgsRUF3QlBqVixFQXhCZ0NvVixFQXdCZCxDQUFDLENBQzlCOWEsSUFBSyxPQWtCTE4sTUFBTyxTQUFjbVksRUFBUWtELEdBQzNCLElBQUlDLEVBQW9COVksVUFBVXNELE9BQVMsUUFBc0JyQixJQUFqQmpDLFVBQVUsR0FBbUJBLFVBQVUsR0FBSyxJQUN4RitZLEVBQW1CL1ksVUFBVXNELE9BQVMsUUFBc0JyQixJQUFqQmpDLFVBQVUsR0FBbUJBLFVBQVUsR0FBSyxJQUN2RmdaLEVBQXFCaFosVUFBVXNELE9BQVMsUUFBc0JyQixJQUFqQmpDLFVBQVUsSUFBbUJBLFVBQVUsR0FDcEZpWixJQUFRalosVUFBVXNELE9BQVMsUUFBc0JyQixJQUFqQmpDLFVBQVUsS0FBbUJBLFVBQVUsR0FDdkVrWixFQUFVTCxFQUFNdlYsT0FFcEIsR0FBSSxJQUFNNFYsRUFBUyxDQUNqQixHQUFJRCxFQUFPLE9BQU9FLElBQ2IsS0FBTSxDQUNQcmMsS0FBTSxZQUNOMlMsUUFBUyw0QkFTZixJQUpBLElBQUkySixFQUFvQixFQUNwQkMsRUFBbUIsRUFDbkJDLEdBQWUsRUFFVi9jLEVBQUksRUFBR0EsRUFBSTJjLElBQVczYyxFQUFHLENBQ2hDLElBQUlJLEVBQUlrYyxFQUFNVSxPQUFPaGQsR0FFWixLQUFMSSxHQUFpQixLQUFMQSxFQUNWMmMsSUFBZ0JELElBQXdCRCxFQUM5QixLQUFMemMsSUFBVTJjLEdBQWUsR0FHdEMsSUFBSUUsRUFBTWhXLEVBQVdpVyxPQUFPOUQsRUFBUTBELEdBRWhDSyxFQUFRbFcsRUFBV21XLGFBQWFILEdBR2hDSSxFQUFRRixFQUFNcFcsT0FDZHVXLEVBQW1CLEVBQ25CQyxFQUFrQixFQUN0QlIsR0FBZSxFQUVmLElBQUssSUFBSVMsRUFBSyxFQUFHQSxFQUFLSCxJQUFTRyxFQUNaLEtBQWJMLEVBQU1LLEdBQVlULEdBQWUsRUFDL0JBLElBQWdCUSxJQUF1QkQsRUFLL0MsR0FBSUEsRUFBbUJULEVBQW1CLENBQ3hDLEdBQUlILEVBQU8sT0FBT3RELEVBQU9wVyxXQUNwQixLQUFNLENBQ1B6QyxLQUFNLFlBQ04yUyxRQUFTLDJDQUtmLEdBQUlxSyxFQUFrQlQsRUFBa0IsQ0FDdENHLEVBQU1oVyxFQUFXaVcsT0FBT0QsRUFBS0gsR0FFN0JPLEdBREFGLEVBQVFsVyxFQUFXbVcsYUFBYUgsSUFDbEJsVyxPQUVkdVcsRUFBbUIsRUFDbkJDLEVBQWtCLEVBQ2xCUixHQUFlLEVBRWYsSUFBSyxJQUFJVSxFQUFNLEVBQUdBLEVBQU1KLElBQVNJLEVBQ2IsS0FBZE4sRUFBTU0sR0FBYVYsR0FBZSxFQUNoQ0EsSUFBZ0JRLElBQXVCRCxFQUsvQyxHQUFJQSxFQUFtQlQsRUFBbUIsQ0FDeEMsR0FBSUgsRUFBTyxPQUFPdEQsRUFBT3BXLFdBQ3BCLEtBQU0sQ0FDUHpDLEtBQU0sWUFDTjJTLFFBQVMsNENBS2pCLElBQUl3SyxFQUFXLElBQ1hDLEVBQVksSUFDWkMsRUFBUSxFQUNSQyxFQUFTLEVBQ1RDLEVBQVcsRUFDUSxLQUFuQnhCLEVBQU1VLE9BQU8sS0FBV1UsRUFBVyxLQUN2QyxJQUFJSyxFQUFXTCxFQUNYTSxFQUFhL1csRUFBV2dYLFNBQVNoQixHQUFPLEVBQ3hDaUIsRUFBY2IsRUFBUSxHQUFLZixFQUFNaFIsUUFBUSxNQUFRLEVBQ2pENlMsR0FBWSxFQUNaQyxHQUFhLEVBRWpCckIsR0FBZSxFQUdmLElBRkEsSUFBSXNCLEVBQU0sSUFBSXBZLE1BQU0wVyxHQUVYMkIsRUFBVSxFQUFHQSxFQUFVM0IsSUFBVzJCLEVBQVMsQ0FDbEQsSUFBSUMsRUFBS2pDLEVBQU1VLE9BQU9zQixHQUV0QixPQUFRQyxHQUNOLElBQUssTUFDRDFCLEVBRXNCUyxHQUFvQk0sRUFBUVAsR0FDbERnQixFQUFJUixHQUFVVixFQUFNUyxLQUNsQkEsRUFDRlEsR0FBYSxJQUViQyxFQUFJUixHQUFVLElBQ2RNLEdBQVksS0FHWk4sRUFDRixNQUVGLElBQUssTUFDRGhCLEVBRXNCUyxHQUFvQk0sRUFBUVAsR0FDbERnQixFQUFJUixHQUFVVixFQUFNUyxLQUNsQkEsRUFDRlEsR0FBYSxJQUViQyxFQUFJUixHQUFVZCxHQUFnQk4sR0FBa0QsR0FBNUJ4VixFQUFXZ1gsU0FBU2hCLEdBQVksSUFBTVMsRUFDckZYLElBQWNlLEVBQVdRLE1BRzlCVCxFQUNGLE1BRUYsSUFBSyxJQUNDTSxHQUFhUCxFQUFRLEVBQUdTLEVBQUlSLEdBQVV0QixHQUN4QzhCLEVBQUlSLEdBQVVILEVBQ1RYLElBQWNlLEVBQVdRLE1BRTlCVCxFQUNGLE1BRUYsSUFBSyxJQUNFTyxHQUEyQixLQUFiVCxFQUlaVSxFQUFJUixHQUFVRyxFQUFhLElBQU1OLEdBSGxDTSxJQUFZTCxFQUFZLEtBQzVCVSxFQUFJUixHQUFVSCxFQUNkSSxFQUFXZixHQUFnQixFQUFJdUIsS0FHL0JULEVBQ0YsTUFFRixJQUFLLElBQ0VPLEdBQTJCLEtBQWJULEVBSVpVLEVBQUlSLEdBQVVHLEVBQWEsSUFBTSxLQUh0Q0wsRUFBWUssRUFBYSxJQUFNLElBQy9CSyxFQUFJUixHQUFVSCxFQUNkSSxFQUFXZixHQUFnQixFQUFJdUIsS0FHL0JULEVBQ0YsTUFFRixJQUFLLElBQ0VPLEdBQTJCLEtBQWJULEVBS2pCVSxFQUFJUixHQUFVLEtBSmRGLEVBQVksSUFDWlUsRUFBSVIsR0FBVUgsRUFDZEksRUFBV2YsR0FBZ0IsRUFBSXVCLEtBSy9CVCxFQUNGLE1Bd0JGLElBQUssSUFDRU8sR0FBMkIsS0FBYlQsRUFNZlUsRUFBSVIsR0FERkcsRUFDWSxJQUVBakIsRUFBZSxJQUFNVyxHQVBqQ00sSUFBWUwsRUFBWSxLQUM1QlUsRUFBSVIsR0FBVUgsRUFDZEksRUFBV2YsR0FBZ0IsRUFBSXVCLEtBUy9CVCxFQUNGLE1BRUYsSUFBSyxJQUVEUSxFQUFJUixHQURGRyxFQUNZLElBRUFqQixFQUFlLElBQU1XLElBR25DRyxFQUNGLE1BRUYsSUFBSyxJQUNDUyxFQUFVM0IsRUFBVSxHQUFrQyxLQUE3QkwsRUFBTVUsT0FBT3NCLEVBQVUsSUFDOUNOLEdBQ0ZLLEVBQUlSLEdBQVUsSUFDZFEsRUFBSVIsRUFBUyxHQUFLLE1BRWxCUSxFQUFJUixHQUFVLElBQ2RRLEVBQUlSLEVBQVMsR0FBSyxLQUdwQkEsR0FBVSxJQUNSUyxJQUVGRCxFQUFJUixHQUFVLE1BQ1pBLEdBR0osTUFFRixJQUFLLElBQ0NTLEVBQVUzQixFQUFVLEdBQWtDLEtBQTdCTCxFQUFNVSxPQUFPc0IsRUFBVSxJQUM5Q04sR0FDRkssRUFBSVIsR0FBVSxJQUNkUSxFQUFJUixFQUFTLEdBQUssTUFFbEJRLEVBQUlSLEdBQVUsSUFDZFEsRUFBSVIsRUFBUyxHQUFLLEtBR3BCQSxHQUFVLElBQ1JTLElBRUZELEVBQUlSLEdBQVUsTUFDWkEsR0FHSixNQUVGLElBQUssSUFDSFEsRUFBSVIsR0FBVSxNQUNaQSxFQUNGLE1BRUYsSUFBSyxJQUNIUSxFQUFJUixHQUFVSyxFQUFjMUIsRUFBbUJrQixFQUMvQ0EsRUFBVyxJQUNYWCxHQUFlLElBQ2JhLElBQ0FDLEVBQ0YsTUFFRixJQUFLLElBQ0hRLEVBQUlSLEdBQVUsTUFDWkEsRUFDRixNQUVGLFFBQ0VRLEVBQUlSLEdBQVVVLElBQ1pWLEdBS1IsR0FBaUIsS0FBYkYsRUFBa0IsQ0FHcEIsSUFGSUcsRUFBVyxJQUFHQSxFQUFXRCxHQUV0QkMsR0FBWW5CLEtBQ2ZtQixFQUdBTyxFQUFJUCxJQUFhQyxJQUFVTSxFQUFJUCxHQUFZSCxHQUdqRCxPQUFPVSxFQUFJbEcsS0FBSyxNQUVqQixDQUNENVcsSUFBSyxTQUNMTixNQUFPLFNBQWdCbVksRUFBUW9GLEVBQVdDLEdBQ3BDQSxJQUFjRCxHQUFhQSxHQUMvQixJQUFJRSxHQUFZLEdBQUt0RixHQUFRdFEsTUFBTSxLQUNuQyxRQUFTNFYsRUFBUyxHQUFLLEtBQU9BLEVBQVMsSUFBTUEsRUFBUyxHQUFLRixFQUFZQSxNQUV4RSxDQUNEamQsSUFBSyxTQUNMTixNQUFPLFNBQWdCbVksRUFBUW9GLEdBQzdCLE9BQU92WCxFQUFXMFgsT0FBTzdiLEtBQUs4YixNQUFNM1gsRUFBVzBYLE9BQU92RixFQUFRb0YsR0FBVyxJQUFTQSxHQUFXLEtBRTlGLENBQ0RqZCxJQUFLLGVBQ0xOLE1BQU8sU0FBc0JtWSxHQUMzQixJQUFJeUYsRUFBUzVYLEVBQVdnWCxTQUFTN0UsR0FFN0IwRixFQUFRLEdBRVosR0FBZSxJQUFYRCxFQUFjLENBQ2hCLElBQUlFLEVBQVNGLEVBQVMsRUFBSSxHQUFHRyxRQUFRLEVBQUk1RixFQUFPcFcsWUFBY29XLEVBQU9wVyxXQUNqRStiLEVBQU9oWSxPQUFTLEdBQXlCLEtBQXBCZ1ksRUFBTy9CLE9BQU8sS0FBVytCLEVBQVNBLEVBQU9FLFVBQVUsSUFFNUVILEVBQVFDLEVBQU9qVyxNQUFNLElBR3ZCLE9BQU9nVyxJQVlSLENBQ0R2ZCxJQUFLLFdBQ0xOLE1BQU8sU0FBa0I4RCxHQUN2QixPQUFRQSxFQUFJLElBQU1BLEVBQUksS0FBT0EsTUF2WEFxWCxFQXdCUixPQXhCbURQLEVBQWtCSyxFQUFZdGEsVUFBV3dhLEdBQWlCQyxHQUFhUixFQUFrQkssRUFBYUcsR0EyWDNLcFYsRUF4V1QsR0EyVzZCZ1MsRUFBbUIsRUFBU2hTLEdBSWxELFNBQVNsSCxFQUFRa1osRUFBcUJyWixHQUdkQSxFQUFvQlUsRUFBRTJZLEVBQXFCLEtBQUssV0FBYSxPQUFPeUMsS0FDcEU5YixFQUFvQlUsRUFBRTJZLEVBQXFCLEtBQUssV0FBYSxPQUFPd0MsS0FDcEU3YixFQUFvQlUsRUFBRTJZLEVBQXFCLEtBQUssV0FBYSxPQUFPdUMsS0FDcEU1YixFQUFvQlUsRUFBRTJZLEVBQXFCLEtBQUssV0FBYSxPQUFPcUMsS0FDcEUxYixFQUFvQlUsRUFBRTJZLEVBQXFCLEtBQUssV0FBYSxPQUFPMEMsS0FDcEUvYixFQUFvQlUsRUFBRTJZLEVBQXFCLEtBQUssV0FBYSxPQUFPMkMsS0FDcEVoYyxFQUFvQlUsRUFBRTJZLEVBQXFCLEtBQUssV0FBYSxPQUFPc0MsS0FDOUUsSUFBSTJELEVBQTJEdGYsRUFBb0IsR0FDL0V1ZixFQUEwQ3ZmLEVBQW9CLElBR3ZGLFNBQVNpYyxFQUFrQi9ILEVBQVFnSSxHQUFTLElBQUssSUFBSTliLEVBQUksRUFBR0EsRUFBSThiLEVBQU0vVSxPQUFRL0csSUFBSyxDQUFFLElBQUkrYixFQUFhRCxFQUFNOWIsR0FBSStiLEVBQVduYixXQUFhbWIsRUFBV25iLGFBQWMsRUFBT21iLEVBQVcvQyxjQUFlLEVBQVUsVUFBVytDLElBQVlBLEVBQVdDLFVBQVcsR0FBTXRiLE9BQU9DLGVBQWVtVCxFQUFRaUksRUFBV3hhLElBQUt3YSxJQWE3UyxJQUFJTCxFQUFnQixvR0FDaEJELEVBQWdCLHlHQVNoQkQsRUFBdUIsU0FBOEI0RCxHQUN2RCxPQUFPMWUsT0FBT3llLEVBQXVDLEVBQTlDemUsQ0FBZ0YwZSxJQVVyRjlELEVBQWUsU0FBc0IzQixHQUN2QyxJQUFJN0gsRUFBUSxJQUFJNkksS0FBS2hCLEVBQUswRixjQUFlLEVBQUcsR0FDeENDLEVBQU8zRixFQUFPN0gsRUFBaUUsSUFBeERBLEVBQU15TixvQkFBc0I1RixFQUFLNEYscUJBQTRCLElBR3hGLE9BRFV6YyxLQUFLeVcsTUFBTStGLEVBRFIsUUFZWDNELEVBQWMsU0FBcUJoQyxHQUNyQyxJQUFJMVksRUFBUTBZLEVBQ1I2RixHQUFVdmUsRUFBTXdlLE1BQU0sd0JBQTBCLElBQUksR0FheEQsT0FYS0QsSUFFSHZlLEdBREF1ZSxFQUFTLEtBSVA5RCxFQUFjbEosS0FBS3ZSLEdBQ3JCQSxFQUFRLGNBQWMrZCxPQUFPL2QsR0FDcEJ3YSxFQUFjakosS0FBS3ZSLEtBQzVCQSxFQUFRLEdBQUcrZCxPQUFPL2QsRUFBTTZILE1BQU0wVyxHQUFRLEdBQUksYUFBYVIsT0FBT1EsSUFHekR2ZSxHQVNMMmEsRUFBc0IsV0FDeEIsSUFBSWIsRUFBVzJFLEtBQUtDLGlCQUFpQkMsa0JBQWtCQyxTQUV2RCxJQUFLOUUsRUFBVSxDQUNiLElBQUkrRSxFQUFNLFNBQWExRyxFQUFRclMsR0FHN0IsSUFGQSxJQUFJNlYsRUFBTSxHQUFLeEQsRUFFUndELEVBQUk3VixPQUFTQSxHQUNsQjZWLEVBQU0sSUFBTUEsRUFHZCxPQUFPQSxHQUdMNEMsR0FBUyxJQUFJN0UsTUFBTzRFLG9CQUd4QixPQUZBQyxHQUFVQSxFQUFTLEVBQUksSUFBTSxLQUM3Qk0sRUFBSTFGLFNBQVN0WCxLQUFLbVAsSUFBSXVOLEVBQVMsS0FBTSxHQUFLTSxFQUFJaGQsS0FBS21QLElBQUl1TixFQUFTLElBQUssR0FJdkUsT0FBT3pFLEdBV0xRLEVBQWdCLFNBQXVCNUIsRUFBTW9HLEdBQy9DLElBQUl6ZixFQUFJLElBQUlxYSxLQUFLQSxLQUFLQyxJQUFJakIsRUFBSzBGLGNBQWUxRixFQUFLcUcsV0FBWXJHLEVBQUtzRyxZQUNoRUMsRUFBUzVmLEVBQUU2ZixhQUFlSixFQUFZLElBQU0sRUFDaER6ZixFQUFFOGYsV0FBVzlmLEVBQUUrZixhQUFlLEVBQUlILEdBQ2xDLElBQUlJLEVBQVksSUFBSTNGLEtBQUtBLEtBQUtDLElBQUl0YSxFQUFFaWdCLGlCQUFrQixFQUFHLElBQ3pELE9BQU96ZCxLQUFLd1csT0FBT2haLEVBQUlnZ0IsR0FBYSxNQUFXLEdBQUssSUFVbERFLEVBRUosV0FDRSxTQUFTQSxLQTVIWCxTQUF5QnZFLEVBQVVDLEdBQWUsS0FBTUQsYUFBb0JDLEdBQWdCLE1BQU0sSUFBSXpaLFVBQVUscUNBNkg1RzBaLENBQWdCNVksS0FBTWlkLEdBekgxQixJQUFzQnRFLEVBQWFFLEVBQVlDLEVBMFI3QyxPQTFSb0JILEVBNEhQc0UsRUE1SGdDbkUsRUE0SGhCLENBQUMsQ0FDNUI5YSxJQUFLLE9BZUxOLE1BQU8sU0FBYzBZLEVBQU0yQyxFQUFPOEMsRUFBUXJFLEdBQ3hDLElBQUtwQixFQUFNLE1BQU8sR0FDbEIsSUFBSzJDLEVBQU8sT0FBTzNDLEVBQ25Cb0IsRUFBV0EsR0FBWWEsSUFDdkJ3RCxFQUFTQSxHQUFVTSxLQUFLQyxpQkFBaUJDLGtCQUFrQlIsUUFBVSxRQUVyRXpGLEVBQU9BLGFBQWdCZ0IsS0FBT2hCLEVBQU9nQyxFQUFZaEMsR0FDakQsSUFBSThHLEVBQWEvZixPQUFPd2UsRUFBd0QsRUFBL0R4ZSxDQUFvRmlaLEVBQU1vQixHQUV2RzJGLEVBQWNGLEVBQVNHLGtCQUFrQixDQUMzQ0MsS0FBTUgsRUFBV3BCLGNBQ2pCd0IsTUFBT0osRUFBV1QsV0FBYSxFQUMvQmMsV0FBWSxJQUFJcEIsS0FBS0MsZUFBZSxDQUFDUCxHQUFTLENBQzVDeUIsTUFBTyxVQUNORSxPQUFPTixHQUNWTyxVQUFXLElBQUl0QixLQUFLQyxlQUFlLENBQUNQLEdBQVMsQ0FDM0N5QixNQUFPLFNBQ05FLE9BQU9OLEdBQ1ZRLElBQUtSLEVBQVdSLFVBQ2hCaUIsU0FBVSxJQUFJeEIsS0FBS0MsZUFBZSxDQUFDUCxHQUFTLENBQzFDK0IsUUFBUyxVQUNSSixPQUFPTixHQUNWVyxRQUFTLElBQUkxQixLQUFLQyxlQUFlLENBQUNQLEdBQVMsQ0FDekMrQixRQUFTLFNBQ1JKLE9BQU9OLEdBQ1ZuRyxRQUFTbUcsRUFBV1ksYUFDcEJDLFFBQVNiLEVBQVdjLGFBRXBCLGNBQ0UsT0FBT2QsRUFBV2UsWUFHcEIsY0FDRSxPQUFPamUsS0FBS2tlLFFBQVUsSUFBTSxJQUc5QkMsVUFBV3BHLEVBQWFtRixHQUN4QmtCLFVBQVdsQixFQUFXbUIsU0FBVyxFQUVqQ0MsV0FBWXRHLEVBQWNrRixFQUFZakYsRUFBcUI0RCxJQUMzREEsT0FBUUEsRUFDUnJFLFNBQVVBLElBR1I5SixFQUFTcUwsRUFFYixJQUFLLElBQUl3RixLQUFLcEIsRUFDWnpQLEVBQVNBLEVBQU9wTyxRQUFRLElBQUlrZixPQUFPLEtBQU9ELEVBQUksSUFBSyxLQUFNcEIsRUFBWW9CLElBR3ZFLE9BQU83USxJQVVSLENBQ0QxUCxJQUFLLG9CQUNMTixNQUFPLFNBQTJCK2dCLEdBQ2hDLE1BQU8sQ0FFTEMsR0FBSUQsRUFBWXBCLEtBQUs1ZCxXQUFXa2YsUUFBUSxHQUN4Q0MsR0FBSUgsRUFBWXBCLEtBQ2hCd0IsR0FBSUosRUFBWXBCLEtBQ2hCeUIsR0FBSWxVLE9BQU9tVSxhQUFhTixFQUFZcEIsTUFDcEMyQixHQUFJUCxFQUFZcEIsS0FDaEI0QixFQUFHUixFQUFZcEIsS0FFZjZCLEdBQXdDLEdBQXBDdFUsT0FBTzZULEVBQVluQixPQUFPOVosT0FBYyxJQUFNaWIsRUFBWW5CLE1BQVFtQixFQUFZbkIsTUFDbEY2QixHQUFJVixFQUFZbEIsV0FDaEI2QixHQUFJWCxFQUFZaEIsVUFDaEI0QixHQUFJelUsT0FBT21VLGFBQWFOLEVBQVluQixPQUNwQ2dDLEdBQUliLEVBQVluQixNQUNoQmlDLEVBQUdkLEVBQVluQixNQUVma0MsR0FBc0MsR0FBbEM1VSxPQUFPNlQsRUFBWWYsS0FBS2xhLE9BQWMsSUFBTWliLEVBQVlmLElBQU1lLEVBQVlmLElBQzlFK0IsR0FBSWhCLEVBQVlkLFNBQ2hCK0IsR0FBSWpCLEVBQVlaLFFBQ2hCOEIsR0FBSS9VLE9BQU9tVSxhQUFhTixFQUFZZixLQUNwQ2tDLEdBQUluQixFQUFZZixJQUNoQm1DLEVBQUdwQixFQUFZZixJQUVmb0MsR0FBMEMsR0FBdENsVixPQUFPNlQsRUFBWVAsU0FBUzFhLE9BQWMsSUFBTWliLEVBQVlQLFFBQVVPLEVBQVlQLFFBQ3RGNkIsR0FBSXRCLEVBQVlQLFFBQ2hCOEIsR0FBSXZCLEVBQVlQLFFBQ2hCK0IsR0FBSXJWLE9BQU9tVSxhQUFhTixFQUFZUCxTQUNwQ2dDLEdBQUl6QixFQUFZUCxRQUNoQmlDLEVBQUcxQixFQUFZUCxRQUVma0MsR0FBMEMsR0FBdEN4VixPQUFPNlQsRUFBWTRCLFNBQVM3YyxPQUFjLElBQU1pYixFQUFZNEIsUUFBVTVCLEVBQVk0QixRQUN0RkMsR0FBSTdCLEVBQVk0QixRQUNoQkUsR0FBSTlCLEVBQVk0QixRQUNoQkcsR0FBSTVWLE9BQU9tVSxhQUFhTixFQUFZNEIsU0FDcENJLEdBQUloQyxFQUFZNEIsUUFDaEJLLEVBQUdqQyxFQUFZNEIsUUFFZk0sR0FBMEMsR0FBdEMvVixPQUFPNlQsRUFBWTFILFNBQVN2VCxPQUFjLElBQU1pYixFQUFZMUgsUUFBVTBILEVBQVkxSCxRQUN0RjZKLEdBQUluQyxFQUFZMUgsUUFDaEI4SixHQUFJcEMsRUFBWTFILFFBQ2hCK0osR0FBSWxXLE9BQU9tVSxhQUFhTixFQUFZMUgsU0FDcENnSyxHQUFJdEMsRUFBWTFILFFBQ2hCbGEsRUFBRzRoQixFQUFZMUgsUUFFZmlLLEdBQTBDLEdBQXRDcFcsT0FBTzZULEVBQVlWLFNBQVN2YSxPQUFjLElBQU1pYixFQUFZVixRQUFVVSxFQUFZVixRQUN0RmtELEdBQUl4QyxFQUFZVixRQUNoQm1ELEdBQUl6QyxFQUFZVixRQUNoQm9ELEdBQUl2VyxPQUFPbVUsYUFBYU4sRUFBWVYsU0FDcENxRCxHQUFJM0MsRUFBWVYsUUFDaEJ2ZixFQUFHaWdCLEVBQVlWLFFBRWZzRCxJQUFJNUMsRUFBWVAsUUFBZSxNQUMvQm9ELEVBQUc3QyxFQUFZUCxRQUFVLEdBQUssS0FBTyxLQUNyQ25jLEdBQUkwYyxFQUFZUCxRQUFVLEdBQUssS0FBTyxLQUN0QzNmLEVBQUdrZ0IsRUFBWVAsUUFBVSxHQUFLLEtBQU8sS0FFckNxRCxHQUE0QyxHQUF4QzNXLE9BQU82VCxFQUFZTixXQUFXM2EsT0FBYyxJQUFNaWIsRUFBWU4sVUFBWU0sRUFBWU4sVUFDMUZxRCxHQUFJL0MsRUFBWU4sVUFDaEJzRCxHQUFJaEQsRUFBWU4sVUFDaEJ1RCxHQUFJakQsRUFBWU4sVUFDaEJ3RCxFQUFHbEQsRUFBWU4sVUFFZnlELEdBQTRDLEdBQXhDaFgsT0FBTzZULEVBQVlMLFdBQVc1YSxPQUFjLElBQU1pYixFQUFZTCxVQUFZSyxFQUFZTCxVQUMxRnlELEdBQUlwRCxFQUFZTCxVQUNoQjBELEdBQUlyRCxFQUFZTCxVQUNoQjJELEdBQUluWCxPQUFPbVUsYUFBYU4sRUFBWUwsV0FDcEM0RCxHQUFJdkQsRUFBWUwsVUFDaEI2RCxFQUFHeEQsRUFBWUwsVUFFZjhELEdBQTZDLEdBQXpDdFgsT0FBTzZULEVBQVlILFlBQVk5YSxPQUFjLElBQU1pYixFQUFZSCxXQUFhRyxFQUFZSCxXQUM1RjZELEdBQUkxRCxFQUFZSCxXQUNoQjhELEdBQUkzRCxFQUFZSCxXQUNoQitELEdBQUl6WCxPQUFPbVUsYUFBYU4sRUFBWUgsWUFDcENnRSxHQUFJN0QsRUFBWUgsV0FDaEJpRSxFQUFHOUQsRUFBWUgsZ0JBclJZekYsRUE0SFYsT0E1SHFEUCxFQUFrQkssRUFBWXRhLFVBQVd3YSxHQUFpQkMsR0FBYVIsRUFBa0JLLEVBQWFHLEdBMFIzS21FLEVBbktULEdBc0s2QnZILEVBQW1CLEVBQVN1SCxHQUlsRCxTQUFTemdCLEVBQVFrWixFQUFxQnJaLEdBR1pxWixFQUFtQixFQWdDcEQsU0FBd0I4TSxFQUFXbEcsRUFBVTVjLEdBQzNDLElBQUkwVyxFQUFPalosT0FBT3NsQixFQUFxQyxFQUE1Q3RsQixDQUFpRXFsQixFQUFXOWlCLEdBR25GZ2pCLEVBQVUsSUFBSXRMLEtBQ2hCaEIsRUFBSzRHLGlCQUNMNUcsRUFBS3VNLGNBQ0x2TSxFQUFLMEcsYUFDTDFHLEVBQUt3TSxjQUNMeE0sRUFBS3lNLGdCQUNMek0sRUFBSzBNLGdCQUNMMU0sRUFBSzJNLHNCQUdIQyxFQUFxQjdsQixPQUFPOGxCLEVBQWtELEVBQXpEOWxCLENBQThFbWYsRUFBVWxHLEdBRWpILE9BQU80TSxFQUNIN2xCLE9BQU8rbEIsRUFBMEQsRUFBakUvbEIsQ0FBc0Z1bEIsRUFBU00sR0FDL0ZOLEdBakRlLElBQUlPLEVBQXFENW1CLEVBQW9CLEdBQ3pFNm1CLEVBQTZEN21CLEVBQW9CLElBQ2pGb21CLEVBQXdDcG1CLEVBQW9CLEtBcUQ5RSxTQUFTRyxFQUFRa1osRUFBcUJyWixHQUdacVosRUFBbUIsRUFLcEQsU0FBd0JVLEVBQU1rRyxHQUM1QixJQUFJNkcsRUFzQ04sU0FBMkI3RyxHQUN6QixJQUFLOEcsRUFBUzlHLEdBQVcsQ0FFdkIsSUFBSStHLEVBQW9CLElBQUlsSCxLQUFLQyxlQUFlLFFBQVMsQ0FDdkRrSCxRQUFRLEVBQ1JoSCxTQUFVLG1CQUNWZSxLQUFNLFVBQ05DLE1BQU8sVUFDUEksSUFBSyxVQUNMNkYsS0FBTSxVQUNOQyxPQUFRLFVBQ1JDLE9BQVEsWUFDUGpHLE9BQU8sSUFBSXBHLEtBQUssNkJBQ2ZzTSxFQUNvQix5QkFBdEJMLEdBQ3NCLG1DQUF0QkEsRUFFRkQsRUFBUzlHLEdBQVlvSCxFQUNqQixJQUFJdkgsS0FBS0MsZUFBZSxRQUFTLENBQy9Ca0gsUUFBUSxFQUNSaEgsU0FBVUEsRUFDVmUsS0FBTSxVQUNOQyxNQUFPLFVBQ1BJLElBQUssVUFDTDZGLEtBQU0sVUFDTkMsT0FBUSxVQUNSQyxPQUFRLFlBRVYsSUFBSXRILEtBQUtDLGVBQWUsUUFBUyxDQUMvQnVILFVBQVcsTUFDWHJILFNBQVVBLEVBQ1ZlLEtBQU0sVUFDTkMsTUFBTyxVQUNQSSxJQUFLLFVBQ0w2RixLQUFNLFVBQ05DLE9BQVEsVUFDUkMsT0FBUSxZQUdoQixPQUFPTCxFQUFTOUcsR0E3RU5zSCxDQUFrQnRILEdBQzVCLE9BQU82RyxFQUFJVSxjQVliLFNBQXFCVixFQUFLL00sR0FHeEIsSUFGQSxJQUFJME4sRUFBWVgsRUFBSVUsY0FBY3pOLEdBQzlCMk4sRUFBUyxHQUNKdG5CLEVBQUksRUFBR0EsRUFBSXFuQixFQUFVdGdCLE9BQVEvRyxJQUFLLENBQ3pDLElBQUl1bkIsRUFBTUMsRUFBVUgsRUFBVXJuQixHQUFHeUcsTUFFN0I4Z0IsR0FBTyxJQUNURCxFQUFPQyxHQUFPbk4sU0FBU2lOLEVBQVVybkIsR0FBR2lCLE1BQU8sS0FHL0MsT0FBT3FtQixFQXRCb0JHLENBQVlmLEVBQUsvTSxHQXlCOUMsU0FBcUIrTSxFQUFLL00sR0FDeEIsSUFBSTBOLEVBQVlYLEVBQUkzRixPQUFPcEgsR0FBTTlXLFFBQVEsVUFBVyxJQUNoRGlNLEVBQVMsMENBQTBDbUwsS0FBS29OLEdBRzVELE1BQU8sQ0FBQ3ZZLEVBQU8sR0FBSUEsRUFBTyxHQUFJQSxFQUFPLEdBQUlBLEVBQU8sR0FBSUEsRUFBTyxHQUFJQSxFQUFPLElBOUJsQjRZLENBQVloQixFQUFLL00sSUFHdkUsSUFBSTZOLEVBQVksQ0FDZDVHLEtBQU0sRUFDTkMsTUFBTyxFQUNQSSxJQUFLLEVBQ0w2RixLQUFNLEVBQ05DLE9BQVEsRUFDUkMsT0FBUSxHQTJCTkwsRUFBVyxJQThDUixTQUFTNW1CLEVBQVFrWixFQUFxQnJaLEdBR1pxWixFQUFtQixFQTRCcEQsU0FBeUI4TSxFQUFXNEIsR0FDbEMsR0FBSWxrQixVQUFVc0QsT0FBUyxFQUNyQixNQUFNLElBQUl0RSxVQUFVLGtDQUFvQ2dCLFVBQVVzRCxPQUFTLFlBRzdFLElBQUk2Z0IsRUFBU2xuQixPQUFPbW5CLEVBQXFELEVBQTVEbm5CLENBQWlGaW5CLEdBQzlGLE9BQU9qbkIsT0FBT29uQixFQUF1RCxFQUE5RHBuQixDQUFtRnFsQixHQUFZNkIsSUFqQ25GLElBQUlDLEVBQXdEam9CLEVBQW9CLEdBQzVFa29CLEVBQTBEbG9CLEVBQW9CLEtBcUNoRyxTQUFTRyxFQUFRa1osRUFBcUJyWixHQUdacVosRUFBbUIsRUE0QnBELFNBQXlCOE0sRUFBVzRCLEdBQ2xDLEdBQUlsa0IsVUFBVXNELE9BQVMsRUFDckIsTUFBTSxJQUFJdEUsVUFBVSxrQ0FBb0NnQixVQUFVc0QsT0FBUyxZQUc3RSxJQUFJZ2hCLEVBQVlybkIsT0FBT3NuQixFQUE4QyxFQUFyRHRuQixDQUEwRXFsQixHQUFXakwsVUFDakc4TSxFQUFTbG5CLE9BQU9tbkIsRUFBcUQsRUFBNURubkIsQ0FBaUZpbkIsR0FDOUYsT0FBTyxJQUFJaE4sS0FBS29OLEVBQVlILElBbENULElBQUlDLEVBQXdEam9CLEVBQW9CLEdBQzVFb29CLEVBQWlEcG9CLEVBQW9CLEtBc0N2RixTQUFTRyxFQUFRa1osRUFBcUJyWixHQUdacVosRUFBbUIsRUErQnBELFNBQWdCZ1AsR0FDZCxHQUFJeGtCLFVBQVVzRCxPQUFTLEVBQ3JCLE1BQU0sSUFBSXRFLFVBQVUsaUNBQW1DZ0IsVUFBVXNELE9BQVMsWUFHNUUsSUFBSW1oQixFQUFTeG5CLE9BQU9rQixVQUFVb0IsU0FBUzdDLEtBQUs4bkIsR0FFNUMsT0FBSUEsYUFBb0J0TixNQUE0QixXQUFwQixFQUFPc04sSUFBb0Msa0JBQVhDLEVBRXZELElBQUl2TixLQUFLc04sRUFBU25OLFdBQ0ksaUJBQWJtTixHQUFvQyxvQkFBWEMsRUFDbEMsSUFBSXZOLEtBQUtzTixJQUVTLGlCQUFiQSxHQUFvQyxvQkFBWEMsR0FBb0Qsb0JBQVpyYyxVQUUzRUEsUUFBUWtDLEtBQUssK0lBRWJsQyxRQUFRa0MsTUFBSyxJQUFJYixPQUFRaWIsUUFHcEIsSUFBSXhOLEtBQUt4QixRQU1iLFNBQVNwWixFQUFRa1osRUFBcUJyWixHQUdacVosRUFBbUIsRUF1RnBELFNBQWdCZ1AsRUFBVUcsR0FDeEIsR0FBSTNrQixVQUFVc0QsT0FBUyxFQUNyQixNQUFNLElBQUl0RSxVQUNSLGlDQUFtQ2dCLFVBQVVzRCxPQUFTLFlBSTFELEdBQWlCLE9BQWJraEIsRUFDRixPQUFPLElBQUl0TixLQUFLeEIsS0FHbEIsSUFBSWxXLEVBQVVtbEIsR0FBZ0IsR0FFMUJDLEVBQzBCLE1BQTVCcGxCLEVBQVFvbEIsaUJBM0ZvQixFQTZGeEIzbkIsT0FBTzRuQixFQUFpRSxFQUF4RTVuQixDQUE2RnVDLEVBQVFvbEIsa0JBQzNHLEdBQ3VCLElBQXJCQSxHQUNxQixJQUFyQkEsR0FDcUIsSUFBckJBLEVBRUEsTUFBTSxJQUFJRSxXQUFXLHNDQUl2QixHQUNFTixhQUFvQnROLE1BQ0MsV0FBcEIsRUFBT3NOLElBQ3VDLGtCQUE3Q3ZuQixPQUFPa0IsVUFBVW9CLFNBQVM3QyxLQUFLOG5CLEdBR2pDLE9BQU8sSUFBSXROLEtBQUtzTixFQUFTbk4sV0FDcEIsR0FDZSxpQkFBYm1OLEdBQ3NDLG9CQUE3Q3ZuQixPQUFPa0IsVUFBVW9CLFNBQVM3QyxLQUFLOG5CLEdBRS9CLE9BQU8sSUFBSXROLEtBQUtzTixHQUNYLEdBRWlCLGlCQUFiQSxHQUNzQyxvQkFBN0N2bkIsT0FBT2tCLFVBQVVvQixTQUFTN0MsS0FBSzhuQixHQUdqQyxPQUFPLElBQUl0TixLQUFLeEIsS0FHbEIsSUFBSXFQLEVBQWNDLEVBQWdCUixHQUU5QlMsRUFBa0JDLEVBQVVILEVBQVk3TyxLQUFNME8sR0FDOUN6SCxFQUFPOEgsRUFBZ0I5SCxLQUN2QmdJLEVBQWlCRixFQUFnQkUsZUFFakNqUCxFQUFPa1AsRUFBVUQsRUFBZ0JoSSxHQUVyQyxHQUFJdkgsTUFBTU0sR0FDUixPQUFPLElBQUlnQixLQUFLeEIsS0FHbEIsR0FBSVEsRUFBTSxDQUNSLElBRUk2RixFQUZBdUksRUFBWXBPLEVBQUttQixVQUNqQmdPLEVBQU8sRUFHWCxHQUFJTixFQUFZTSxPQUNkQSxFQUFPQyxFQUFVUCxFQUFZTSxNQUV6QnpQLE1BQU15UCxJQUNSLE9BQU8sSUFBSW5PLEtBQUt4QixLQUlwQixHQUFJcVAsRUFBWXpOLFVBQVk5WCxFQUFRNGMsVUFLbEMsR0FKQUwsRUFBUzllLE9BQU9zb0IsRUFBa0QsRUFBekR0b0IsQ0FDUDhuQixFQUFZek4sVUFBWTlYLEVBQVE0YyxTQUNoQyxJQUFJbEYsS0FBS29OLEVBQVllLElBRW5CelAsTUFBTW1HLEdBQ1IsT0FBTyxJQUFJN0UsS0FBS3hCLFVBSWxCcUcsRUFBUzllLE9BQU91b0IsRUFBdUYsRUFBOUZ2b0IsQ0FBbUgsSUFBSWlhLEtBQUtvTixFQUFZZSxJQUNqSnRKLEVBQVM5ZSxPQUFPdW9CLEVBQXVGLEVBQTlGdm9CLENBQ1AsSUFBSWlhLEtBQUtvTixFQUFZZSxFQUFPdEosSUFJaEMsT0FBTyxJQUFJN0UsS0FBS29OLEVBQVllLEVBQU90SixHQUVuQyxPQUFPLElBQUk3RSxLQUFLeEIsTUFoTEMsSUFBSW1QLEVBQW9FMW9CLEVBQW9CLEdBQ3hGcXBCLEVBQTBGcnBCLEVBQW9CLElBQzlHb3BCLEVBQXFEcHBCLEVBQW9CLEdBUzlGbWEsRUFBVyxDQUNibVAsa0JBQW1CLE9BQ25CQyxVQUFXLElBQ1hDLGtCQUFtQixRQUduQkMsR0FBSSxZQUNKQyxJQUFLLENBQ0gsZ0JBQ0EsZ0JBQ0EsaUJBRUZDLEtBQU0sV0FDTkMsTUFBTyxDQUNMLGVBQ0EsZUFDQSxnQkFJRkMsR0FBSSxhQUNKQyxJQUFLLGNBQ0xDLEtBQU0sdUJBQ05DLElBQUssZUFDTEMsS0FBTSx3QkFFTkMsR0FBSSxzQkFDSkMsS0FBTSwrQkFDTkMsT0FBUSx3Q0FHUmpQLFNBQVUsOERBMElaLFNBQVMwTixFQUFnQndCLEdBQ3ZCLElBRUlDLEVBRkExQixFQUFjLEdBQ2RuVixFQUFRNFcsRUFBV25oQixNQUFNaVIsRUFBU21QLG1CQWdCdEMsR0FiSW5QLEVBQVNvUCxVQUFVM1csS0FBS2EsRUFBTSxLQUNoQ21WLEVBQVk3TyxLQUFPLEtBQ25CdVEsRUFBYTdXLEVBQU0sS0FFbkJtVixFQUFZN08sS0FBT3RHLEVBQU0sR0FDekI2VyxFQUFhN1csRUFBTSxHQUNuQm1WLEVBQVl6TixTQUFXMUgsRUFBTSxHQUN6QjBHLEVBQVNxUCxrQkFBa0I1VyxLQUFLZ1csRUFBWTdPLFFBQzlDNk8sRUFBWTdPLEtBQU9zUSxFQUFXbmhCLE1BQU1pUixFQUFTcVAsbUJBQW1CLEdBQ2hFYyxFQUFhRCxFQUFXL0gsT0FBT3NHLEVBQVk3TyxLQUFLNVMsT0FBUWtqQixFQUFXbGpCLFVBSW5FbWpCLEVBQVksQ0FDZCxJQUFJdFEsRUFBUUcsRUFBU2dCLFNBQVNkLEtBQUtpUSxHQUMvQnRRLEdBQ0Y0TyxFQUFZTSxLQUFPb0IsRUFBV3JuQixRQUFRK1csRUFBTSxHQUFJLElBQ2hENE8sRUFBWXpOLFNBQVduQixFQUFNLElBRTdCNE8sRUFBWU0sS0FBT29CLEVBSXZCLE9BQU8xQixFQUdULFNBQVNHLEVBQVVzQixFQUFZNUIsR0FDN0IsSUFHSXpPLEVBSEF1USxFQUFhcFEsRUFBU3VQLElBQUlqQixHQUMxQitCLEVBQWVyUSxFQUFTeVAsTUFBTW5CLEdBTWxDLEdBREF6TyxFQUFRRyxFQUFTd1AsS0FBS3RQLEtBQUtnUSxJQUFlRyxFQUFhblEsS0FBS2dRLEdBQ2pELENBQ1QsSUFBSUksRUFBYXpRLEVBQU0sR0FDdkIsTUFBTyxDQUNMZ0gsS0FBTXhHLFNBQVNpUSxFQUFZLElBQzNCekIsZUFBZ0JxQixFQUFXSyxNQUFNRCxFQUFXdGpCLFNBTWhELEdBREE2UyxFQUFRRyxFQUFTc1AsR0FBR3BQLEtBQUtnUSxJQUFlRSxFQUFXbFEsS0FBS2dRLEdBQzdDLENBQ1QsSUFBSU0sRUFBZ0IzUSxFQUFNLEdBQzFCLE1BQU8sQ0FDTGdILEtBQW9DLElBQTlCeEcsU0FBU21RLEVBQWUsSUFDOUIzQixlQUFnQnFCLEVBQVdLLE1BQU1DLEVBQWN4akIsU0FLbkQsTUFBTyxDQUNMNlosS0FBTSxNQUlWLFNBQVNpSSxFQUFVb0IsRUFBWXJKLEdBRTdCLEdBQWEsT0FBVEEsRUFDRixPQUFPLEtBR1QsSUFBSWhILEVBQ0FELEVBQ0FrSCxFQUNBMkosRUFHSixHQUEwQixJQUF0QlAsRUFBV2xqQixPQUdiLE9BRkE0UyxFQUFPLElBQUlnQixLQUFLLElBQ1g4UCxlQUFlN0osR0FDYmpILEVBS1QsR0FEQUMsRUFBUUcsRUFBUzBQLEdBQUd4UCxLQUFLZ1EsR0FLdkIsT0FIQXRRLEVBQU8sSUFBSWdCLEtBQUssR0FHWCtQLEVBQWE5SixFQUZsQkMsRUFBUXpHLFNBQVNSLEVBQU0sR0FBSSxJQUFNLElBTWpDRCxFQUFLOFEsZUFBZTdKLEVBQU1DLEdBQ25CbEgsR0FKRSxJQUFJZ0IsS0FBS3hCLEtBU3BCLEdBREFTLEVBQVFHLEVBQVMyUCxJQUFJelAsS0FBS2dRLEdBQ2YsQ0FDVHRRLEVBQU8sSUFBSWdCLEtBQUssR0FDaEIsSUFBSStHLEVBQVl0SCxTQUFTUixFQUFNLEdBQUksSUFFbkMsT0FvSkosU0FBK0JnSCxFQUFNYyxHQUNuQyxHQUFJQSxFQUFZLEVBQ2QsT0FBTyxFQUdULElBQUlpSixFQUFhQyxFQUFnQmhLLEdBQ2pDLFFBQUkrSixHQUFjakosRUFBWSxTQUd6QmlKLEdBQWNqSixFQUFZLEtBN0p4Qm1KLENBQXNCakssRUFBTWMsSUFJakMvSCxFQUFLOFEsZUFBZTdKLEVBQU0sRUFBR2MsR0FDdEIvSCxHQUpFLElBQUlnQixLQUFLeEIsS0FTcEIsR0FEQVMsRUFBUUcsRUFBUzRQLEtBQUsxUCxLQUFLZ1EsR0FDaEIsQ0FDVHRRLEVBQU8sSUFBSWdCLEtBQUssR0FDaEJrRyxFQUFRekcsU0FBU1IsRUFBTSxHQUFJLElBQU0sRUFDakMsSUFBSXFILEVBQU03RyxTQUFTUixFQUFNLEdBQUksSUFFN0IsT0FBSzhRLEVBQWE5SixFQUFNQyxFQUFPSSxJQUkvQnRILEVBQUs4USxlQUFlN0osRUFBTUMsRUFBT0ksR0FDMUJ0SCxHQUpFLElBQUlnQixLQUFLeEIsS0FTcEIsR0FEQVMsRUFBUUcsRUFBUzZQLElBQUkzUCxLQUFLZ1EsR0FJeEIsT0FBS2EsRUFBaUJsSyxFQUZ0QjRKLEVBQU9wUSxTQUFTUixFQUFNLEdBQUksSUFBTSxHQU16Qm1SLEVBQWlCbkssRUFBTTRKLEdBSHJCLElBQUk3UCxLQUFLeEIsS0FRcEIsR0FEQVMsRUFBUUcsRUFBUzhQLEtBQUs1UCxLQUFLZ1EsR0FDaEIsQ0FDVE8sRUFBT3BRLFNBQVNSLEVBQU0sR0FBSSxJQUFNLEVBQ2hDLElBQUkrSCxFQUFZdkgsU0FBU1IsRUFBTSxHQUFJLElBQU0sRUFFekMsT0FBS2tSLEVBQWlCbEssRUFBTTRKLEVBQU03SSxHQUkzQm9KLEVBQWlCbkssRUFBTTRKLEVBQU03SSxHQUgzQixJQUFJaEgsS0FBS3hCLEtBT3BCLE9BQU8sS0FHVCxTQUFTNFAsRUFBVW1CLEdBQ2pCLElBQUl0USxFQUNBRSxFQUNBUSxFQUlKLEdBREFWLEVBQVFHLEVBQVMrUCxHQUFHN1AsS0FBS2lRLEdBSXZCLE9BQUtjLEVBRkxsUixFQUFRbVIsV0FBV3JSLEVBQU0sR0FBRy9XLFFBQVEsSUFBSyxPQU1qQ2lYLEVBQVEsR0FwVk8sS0FpVmRYLElBUVgsR0FEQVMsRUFBUUcsRUFBU2dRLEtBQUs5UCxLQUFLaVEsR0FLekIsT0FBS2MsRUFITGxSLEVBQVFNLFNBQVNSLEVBQU0sR0FBSSxJQUMzQlUsRUFBVTJRLFdBQVdyUixFQUFNLEdBQUcvVyxRQUFRLElBQUssT0FPeENpWCxFQUFRLEdBbFdZLEtBQ0UsSUFpV2VRLEVBSi9CbkIsSUFVWCxHQURBUyxFQUFRRyxFQUFTaVEsT0FBTy9QLEtBQUtpUSxHQUNsQixDQUNUcFEsRUFBUU0sU0FBU1IsRUFBTSxHQUFJLElBQzNCVSxFQUFVRixTQUFTUixFQUFNLEdBQUksSUFDN0IsSUFBSTBILEVBQVUySixXQUFXclIsRUFBTSxHQUFHL1csUUFBUSxJQUFLLE1BRS9DLE9BQUttb0IsRUFBYWxSLEVBQU9RLEVBQVNnSCxHQUsvQnhILEVBQVEsR0FsWFksS0FDRSxJQWtYdkJRLEVBQ1UsSUFBVmdILEVBTk9uSSxJQVdYLE9BQU8sS0FHVCxTQUFTNFIsRUFBaUJHLEVBQWFWLEVBQU12SixHQUMzQ3VKLEVBQU9BLEdBQVEsRUFDZnZKLEVBQU1BLEdBQU8sRUFDYixJQUFJdEgsRUFBTyxJQUFJZ0IsS0FBSyxHQUNwQmhCLEVBQUs4USxlQUFlUyxFQUFhLEVBQUcsR0FDcEMsSUFDSTVMLEVBQWMsRUFBUGtMLEVBQVd2SixFQUFNLEdBREh0SCxFQUFLd0csYUFBZSxHQUc3QyxPQURBeEcsRUFBS3lHLFdBQVd6RyxFQUFLMEcsYUFBZWYsR0FDN0IzRixFQUtULElBQUl3UixFQUFnQixDQUFDLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxJQUM3REMsRUFBMEIsQ0FBQyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksSUFFM0UsU0FBU1IsRUFBZ0JoSyxHQUN2QixPQUFPQSxFQUFPLEtBQVEsR0FBTUEsRUFBTyxHQUFNLEdBQUtBLEVBQU8sS0FBUSxFQUcvRCxTQUFTOEosRUFBYTlKLEVBQU1DLEVBQU9sSCxHQUNqQyxHQUFJa0gsRUFBUSxHQUFLQSxFQUFRLEdBQ3ZCLE9BQU8sRUFHVCxHQUFZLE1BQVJsSCxFQUFjLENBQ2hCLEdBQUlBLEVBQU8sRUFDVCxPQUFPLEVBR1QsSUFBSWdSLEVBQWFDLEVBQWdCaEssR0FDakMsR0FBSStKLEdBQWNoUixFQUFPeVIsRUFBd0J2SyxHQUMvQyxPQUFPLEVBRVQsSUFBSzhKLEdBQWNoUixFQUFPd1IsRUFBY3RLLEdBQ3RDLE9BQU8sRUFJWCxPQUFPLEVBbUJULFNBQVNpSyxFQUFpQmxLLEVBQU00SixFQUFNdkosR0FDcEMsUUFBSXVKLEVBQU8sR0FBS0EsRUFBTyxJQUlaLE1BQVB2SixJQUFnQkEsRUFBTSxHQUFLQSxFQUFNLElBT3ZDLFNBQVMrSixFQUFhbFIsRUFBT1EsRUFBU2dILEdBQ3BDLFFBQWEsTUFBVHhILElBQWtCQSxFQUFRLEdBQUtBLEdBQVMsS0FJN0IsTUFBWFEsSUFBb0JBLEVBQVUsR0FBS0EsR0FBVyxLQUluQyxNQUFYZ0gsSUFBb0JBLEVBQVUsR0FBS0EsR0FBVyxPQVU3QyxTQUFTdmhCLEVBQVFrWixFQUFxQnJaLEdBR1pxWixFQUFtQixFQWNwRCxTQUF5QzhNLEdBQ3ZDLElBQUlwTSxFQUFPLElBQUlnQixLQUFLb0wsRUFBVWpMLFdBQzFCdVEsRUFBcUJ2b0IsS0FBS3dXLEtBQUtLLEVBQUs0RixxQkFDeEM1RixFQUFLMlIsV0FBVyxFQUFHLEdBQ25CLElBQUlDLEVBQW1DNVIsRUFBS21CLFVBakJqQixJQWtCM0IsT0FsQjJCLElBa0JwQnVRLEVBQThDRSxJQUtoRCxTQUFTeHJCLEVBQVFrWixFQUFxQnJaLEdBSWRBLEVBQW9CVSxFQUFFMlksRUFBcUIsS0FBSyxXQUFhLE9BQU91UyxLQUM5RSxJQUFJQyxFQUF3QzdyQixFQUFvQixJQUM1RDhyQixFQUFrRDlyQixFQUFvQixJQUN0RStyQixFQUFpRC9yQixFQUFvQixJQVM5RixTQUFTNHJCLEVBQXVCcE0sR0FDNUIsT0FBTzFlLE9BQU8rcUIsRUFBcUMsRUFBNUMvcUIsQ0FBOEUwZSxFQUFRc00sRUFBK0MsRUFBcUJDLEVBQThDLEtBUzVNLFNBQVM1ckIsRUFBUWtaLEVBQXFCclosR0FLN0MsU0FBU2dzQixFQUFxQkMsRUFBWUMsR0FDdEMsSUFBSUMsRUFBT0QsRUFBbUMsaUJBQWZELEVBQTBCQSxFQUFXRyxjQUFnQkgsR0FDcEYsTUFBdUIsaUJBQVRFLEVBQW9CQSxFQUFPLEVBRzdDLFNBQVN2USxFQUFxQjRELEVBQVE2TSxFQUFlSCxHQUNqRCxHQUFJMU0sRUFBUSxDQUNSLElBRUk4TSxFQUZBcG5CLEVBQU9zYSxFQUFPK00sY0FBY3JqQixNQUFNLFFBQ2xDc2pCLEVBQVd0bkIsRUFBSyxHQVdwQixHQVRJQSxFQUFLLElBQXlCLElBQW5CQSxFQUFLLEdBQUdpQyxRQUNuQnFsQixHQUFZLElBQU90bkIsRUFBSyxHQUN4Qm9uQixFQUFVcG5CLEVBQUssSUFFZm9uQixFQUFVcG5CLEVBQUssR0FFZG9uQixJQUNEQSxFQUFVRCxFQUFjRyxJQUV4QkYsRUFDQSxPQUFPTixFQUFxQk0sRUFBUXpNLE1BQU0sU0FBVzdYLE9BQU9za0IsR0FBV0EsRUFBU0osR0FHeEYsT0FBTyxFQXpCb0Jsc0IsRUFBb0JVLEVBQUUyWSxFQUFxQixLQUFLLFdBQWEsT0FBTzJTLEtBQ3BFaHNCLEVBQW9CVSxFQUFFMlksRUFBcUIsS0FBSyxXQUFhLE9BQU91QyxNQWlDNUYsU0FBU3piLEVBQVFrWixFQUFxQnJaLEdBb0ZoQnFaLEVBQW1CLEVBakY1QixDQUNoQm9ULEdBQUksS0FDSkMsR0FBSSxLQUNKQyxRQUFTLEtBQ1RDLEtBQU0sS0FDTkMsSUFBSyxLQUNMQyxJQUFLLEtBQ0xDLElBQUssS0FDTEMsSUFBSyxLQUNMQyxJQUFLLEtBQ0xDLEdBQUksS0FDSkMsR0FBSSxLQUNKQyxHQUFJLEtBQ0pDLEdBQUksS0FDSkMsR0FBSSxLQUNKQyxHQUFJLEtBQ0pDLEdBQUksS0FDSmhKLEdBQUksS0FDSmlKLFFBQVMsS0FDVEMsSUFBSyxLQUNMQyxJQUFLLEtBQ0xDLEdBQUksS0FDSkMsSUFBSyxLQUNMQyxJQUFLLEtBQ0xDLElBQUssS0FDTEMsSUFBSyxLQUNMQyxJQUFLLEtBQ0xDLElBQUssS0FDTEMsR0FBSSxLQUNKQyxHQUFJLEtBQ0pDLEdBQUksS0FDSkMsR0FBSSxLQUNKQyxJQUFLLEtBQ0xsc0IsR0FBSSxLQUNKbXNCLEdBQUksS0FDSkMsR0FBSSxLQUNKQyxJQUFLLEtBQ0xDLFFBQVMsS0FDVEMsR0FBSSxLQUNKQyxHQUFJLEtBQ0pDLElBQUssS0FDTEMsR0FBSSxLQUNKQyxHQUFJLEtBQ0pDLEdBQUksS0FDSkMsR0FBSSxLQUNKQyxHQUFJLEtBQ0pDLEdBQUksS0FDSkMsR0FBSSxLQUNKQyxHQUFJLEtBQ0pDLElBQUssS0FDTEMsSUFBSyxLQUNMQyxJQUFLLEtBQ0xDLEdBQUksS0FDSkMsR0FBSSxLQUNKQyxRQUFTLEtBQ1RDLEtBQU0sS0FDTkMsSUFBSyxLQUNMQyxHQUFJLEtBQ0poTCxHQUFJLEtBQ0ppTCxRQUFTLEtBQ1RDLElBQUssS0FDTEMsR0FBSSxLQUNKQyxHQUFJLEtBQ0pDLElBQUssS0FDTEMsSUFBSyxLQUNMQyxRQUFTLEtBQ1RDLEtBQU0sS0FDTkMsR0FBSSxLQUNKQyxHQUFJLEtBQ0pDLEdBQUksS0FDSkMsSUFBSyxLQUNMQyxHQUFJLEtBQ0pDLElBQUssS0FDTEMsR0FBSSxLQUNKQyxRQUFTLEtBQ1RDLElBQUssS0FDTEMsR0FBSSxLQUNKQyxJQUFLLEtBQ0xDLEdBQUksT0FTRCxTQUFTaHhCLEVBQVFrWixFQUFxQnJaLEdBNk9oQnFaLEVBQW1CLEVBMU83QixDQUNmK1gsR0FBSSxFQUNKQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsR0FBSSxFQUNKQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsR0FBSSxFQUNKQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsR0FBSSxFQUNKQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsR0FBSSxFQUNKQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsR0FBSSxFQUNKQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsR0FBSSxFQUNKQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsR0FBSSxFQUNKQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsR0FBSSxFQUNKQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsR0FBSSxFQUNKQyxJQUFLLEVBQ0xDLElBQUssRUFDTEMsR0FBSSxFQUNKQyxJQUFLLEVBQ0xDLElBQUssRUFDTEMsR0FBSSxFQUNKQyxJQUFLLEVBQ0xDLElBQUssRUFDTEMsR0FBSSxFQUNKQyxJQUFLLEVBQ0xDLElBQUssRUFDTEMsR0FBSSxFQUNKQyxJQUFLLEVBQ0xDLElBQUssRUFDTEMsR0FBSSxFQUNKQyxJQUFLLEVBQ0xDLElBQUssRUFDTEMsR0FBSSxFQUNKQyxJQUFLLEVBQ0xDLElBQUssRUFDTEMsR0FBSSxFQUNKQyxJQUFLLEVBQ0xDLElBQUssRUFDTEMsR0FBSSxFQUNKQyxJQUFLLEVBQ0xDLElBQUssRUFDTEMsR0FBSSxFQUNKQyxJQUFLLEVBQ0xDLElBQUssRUFDTEMsR0FBSSxFQUNKQyxJQUFLLEVBQ0xDLElBQUssRUFDTEMsR0FBSSxFQUNKQyxJQUFLLEVBQ0xDLElBQUssRUFDTEMsR0FBSSxFQUNKQyxJQUFLLEVBQ0xDLElBQUssRUFDTEMsR0FBSSxFQUNKQyxJQUFLLEVBQ0xDLElBQUssRUFDTEMsR0FBSSxFQUNKQyxJQUFLLEVBQ0xDLElBQUssRUFDTEMsR0FBSSxFQUNKQyxJQUFLLEVBQ0xDLElBQUssRUFDTEMsR0FBSSxFQUNKQyxJQUFLLEVBQ0xDLElBQUssRUFDTEMsR0FBSSxFQUNKQyxJQUFLLEVBQ0xDLElBQUssRUFDTEMsR0FBSSxFQUNKQyxJQUFLLEVBQ0xDLElBQUssRUFDTEMsR0FBSSxFQUNKQyxJQUFLLEVBQ0xDLElBQUssRUFDTEMsR0FBSSxFQUNKQyxJQUFLLEVBQ0xDLElBQUssRUFDTGhOLEdBQUksRUFDSmlOLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsRUFBRyxFQUNIQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsR0FBSSxFQUNKQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsR0FBSSxFQUNKQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFB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QUFTNlksS0FDOUMzWSxFQUFhRCxFQUFVRCxFQUFTOFksU0FBU3poRSxRQUFRLFlBQWEsS0EyRG5FLE9BL0JleVMsRUFBSXpTLFFBQVEsdURBQXVELFNBQVMwaEUsRUFBVzNZLEdBRXJHLElBV0lDLEVBWEFGLEVBQWtCQyxFQUNwQjdpRCxPQUNBbEcsUUFBUSxZQUFZLFNBQVNwQyxFQUFHK2pFLEdBQUssT0FBT0EsS0FDNUMzaEUsUUFBUSxZQUFZLFNBQVNwQyxFQUFHK2pFLEdBQUssT0FBT0EsS0FHOUMsTUFBSSxvREFBb0RoeUQsS0FBS201QyxHQUNwRDRZLEdBUVIxWSxFQUZxQyxJQUFsQ0YsRUFBZ0JyZ0QsUUFBUSxNQUVsQnFnRCxFQUNrQyxJQUFqQ0EsRUFBZ0JyZ0QsUUFBUSxLQUV6Qm1nRCxFQUFVRSxFQUdWRCxFQUFhQyxFQUFnQjlvRCxRQUFRLFFBQVMsSUFJakQsT0FBU1AsS0FBS0MsVUFBVXNwRCxHQUFVLFUsZ0JDbEYzQyxJQUFJcmhCLEVBQVUsRUFBUSxLQUVBLGlCQUFaQSxJQUFzQkEsRUFBVSxDQUFDLENBQUN6cUMsRUFBT0MsRUFBSXdxQyxFQUFTLE1BT2hFLElBQUl2bkMsRUFBVSxDQUFDLEtBQU0sRUFFckIsZUFQSWtRLEVBUUosV0FBcUIsV0FDTCxPQUFPalIsT0FBTytDLE9BQU90QyxTQUFTeVIsT0FHakMsRUFBUSxHQUFSLENBQTZEbzJCLEVBQVN2bkMsR0FFaEZ1bkMsRUFBUTI1QixTQUFRcGtFLEVBQU9ELFFBQVUwcUMsRUFBUTI1QixTLGNDbkI1Q3BrRSxFQUFPRCxRQUFVIiwiZmlsZSI6ImJiai1ncmlkLXdpZGdldC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAzOSk7XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBCYXNpcy5BZ0dyaWRDb21wb25lbnRzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuLyoqXG4gKiBHZXQgZG9jdW1lbnRcbiAqXG4gKiBHZXQgdGhlIGRvY3VtZW50IGluc3RhbmNlIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBCQmogZW52XG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBEb2N1bWVudCBpbnN0YW5jZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfZ2V0RG9jdW1lbnQoKSB7XG4gIHJldHVybiB0eXBlb2YgJGRvYyAhPT0gJ3VuZGVmaW5lZCcgPyAkZG9jIDogZG9jdW1lbnRcbn1cblxuLyoqXG4gKiBHZXQgd2luZG93XG4gKlxuICogR2V0IHRoZSB3aW5kb3cgaW5zdGFuY2UgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IEJCaiBlbnZcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IFdpbmRvdyBpbnN0YW5jZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfZ2V0V2luZG93KCkge1xuICByZXR1cm4gdHlwZW9mICR3bmQgIT09ICd1bmRlZmluZWQnID8gJHduZCA6IHdpbmRvd1xufVxuXG4vKipcbiAqIEVzY2FwZSBWYWx1ZVxuICpcbiAqIENoYW5nZSBudWxsIGFuZCB1bmRlZmluZWQgdG8gZW1wdHkgc3RyaW5nXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gZXNjYXBlZCB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfZXNjYXBlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiAnJ1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgdW5pcXVlIHV1aWRcbiAqIEBzZWUgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTA1MDM0L2NyZWF0ZS1ndWlkLXV1aWQtaW4tamF2YXNjcmlwdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfdXVpZCgpIHtcbiAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24oYykge1xuICAgIHZhciByID0gKE1hdGgucmFuZG9tKCkgKiAxNikgfCAwLFxuICAgICAgdiA9IGMgPT0gJ3gnID8gciA6IChyICYgMHgzKSB8IDB4OFxuICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KVxuICB9KVxufVxuXG4vKipcbiAqIEdldCBHcmlkXG4gKlxuICogUmV0cmlldmUgdGhlIGdyaWQgaW5zdGFuY2UgZnJvbSBgd2luZG93LkJCakdyaWRFeFdpZGdldGAgYXJyYXlcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQncyBpZFxuICpcbiAqIEByZXR1cm4ge09iamVjdHxudWxsfSBUaGUgZ3JpZCdzIGluc3RhbmNlIG9mciBudWxsXG4gKiBAdGhyb3dzIFR5cGVFcnJvciB3aGVuIHRoZSBncmlkIGluc3RhbmNlIGlzIG5vdCBmb3VuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfZ2V0R3JpZChpZCkge1xuICB3aW5kb3cuQkJqR3JpZEV4V2lkZ2V0ID0gd2luZG93LkJCakdyaWRFeFdpZGdldCB8fCB7fVxuICBjb25zdCBncmlkID0gd2luZG93LkJCakdyaWRFeFdpZGdldFtpZF0gfHwgbnVsbFxuXG4gIGlmICghZ3JpZCkge1xuICAgIGNvbnN0IHJlZ2lzdGVyZWRHcmlkcyA9IEpTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKHdpbmRvdy5CQmpHcmlkRXhXaWRnZXQpKVxuICAgIC8vZ2V0RnVuY0FyZ3MoZnVuYykuZm9yRWFjaCgoa2V5LCBpKSA9PiBhcmdzT2JqW2tleV0gPSBhcmdzW2ldKTtcblxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICBgXFxuXFxuW0dyaWQgTm90IEZvdW5kXSBUaGUgbWV0aG9kIGFza2VkIGZvciBub24tZXhpc3RlbnQgZ3JpZCBpbnN0YW5jZS5cbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblJlcXVpcmVkIEdyaWQgSWQgOiAke2lkfSAgIFxuUmVnaXN0ZXJlZCBHcmlkcyA6ICR7cmVnaXN0ZXJlZEdyaWRzfVxuYFxuICAgIClcbiAgfVxuXG4gIHJldHVybiBncmlkXG59XG5cbi8qKlxuICogQWRkIEdyaWRcbiAqXG4gKiBTdG9yZSBhIG5ldyBncmlkIGluc3RhbmNlIGJ5IGluIHRoZSBgd2luZG93LkJCakdyaWRFeFdpZGdldGAgYXJyYXlcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgIFRoZSBncmlkJ3Mgb3B0aW9uc1xuICpcbiAqIEByZXR1cm4ge09iamVjdH0gU3RvcmVkIGdyaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2FkZEdyaWQoaWQsIG9wdGlvbnMpIHtcbiAgd2luZG93LkJCakdyaWRFeFdpZGdldCA9IHdpbmRvdy5CQmpHcmlkRXhXaWRnZXQgfHwge31cbiAgd2luZG93LkJCakdyaWRFeFdpZGdldFtpZF0gPSBvcHRpb25zXG5cbiAgcmV0dXJuIGd3X2dldEdyaWQoaWQpXG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgKi9cbi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfZ2V0RG9jdW1lbnQgfSBmcm9tICdhcGkvdXRpbGl0aWVzJ1xuXG4vKiogaHR0cHM6Ly9kYXZpZHdhbHNoLm5hbWUvamF2YXNjcmlwdC1kZWJvdW5jZS1mdW5jdGlvbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2RlYm91bmNlKGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSkge1xuICB2YXIgdGltZW91dFxuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLFxuICAgICAgYXJncyA9IGFyZ3VtZW50c1xuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGltZW91dCA9IG51bGxcbiAgICAgIGlmICghaW1tZWRpYXRlKSB7XG4gICAgICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncylcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXRcbiAgICBjbGVhclRpbWVvdXQodGltZW91dClcbiAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdClcbiAgICBpZiAoY2FsbE5vdykge1xuICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFNlbmQgYW4gZXZlbnQgdG8gQkJqIHNpZGVcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBjb250ZXh0IHRoZSBncmlkJ3MgY29udGV4dFxuICogQHBhcmFtIHsqfSBwYXlsb2FkIHRoZSBldmVudCBwYXlsb2FkXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRJZCB0aGUgZXZlbnQncyBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2VuZEV2ZW50KGNvbnRleHQsIHBheWxvYWQgPSB7fSwgZXZlbnRJZCA9IFtdKSB7XG4gIGNvbnN0IHJlZ2lzdGVyZWRJbnRlcmVzdHMgPSBjb250ZXh0LmludGVyZXN0cyB8fCBbXVxuXG4gIGlmIChyZWdpc3RlcmVkSW50ZXJlc3RzLmluY2x1ZGVzKGV2ZW50SWQpKSB7XG4gICAgY29uc3QgZGl2ID0gZ3dfZ2V0RG9jdW1lbnQoKS5nZXRFbGVtZW50QnlJZChgJHtjb250ZXh0LmlkfWApXG4gICAgd2luZG93LmJhc2lzRGlzcGF0Y2hDdXN0b21FdmVudChkaXYsIHBheWxvYWQpXG4gIH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBCQmpHcmlkRXhXaWRnZXRSb3dcbiAqXG4gKiBAcHJvcGVydHkge251bWJlcn0gaWRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpbmRleFxuICogQHByb3BlcnR5IHtudW1iZXJ9IHBhcmVudEtleVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNoaWxkSW5kZXhcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAqL1xuXG4vKipcbiAqIFBhcnNlIGEgbm9kZSBhcyBCQmpHcmlkRXhXaWRnZXRSb3dcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gbm9kZSBhZyBncmlkIG5vZGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0ICBhZyBncmlkIGNvbnRleHRcbiAqXG4gKiBAcmV0dXJucyB7QkJqR3JpZEV4V2lkZ2V0Um93fEJvb2xlYW59IG9iamVjdCBmb3JtYXR0ZWQgYXMgQkJqR3JpZEV4V2lkZ2V0Um93LlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSBpZiB0aGUgbm9kZSBpcyBmb3IgZ3JvdXAgbm9kZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfcGFyc2VOb2RlKG5vZGUsIGNvbnRleHQpIHtcbiAgaWYgKHRydWUgPT09IG5vZGUuZ3JvdXApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSAvLyB3ZSBkbyBub3QgbWFuYWdlIGdyb3Vwc1xuXG4gIGNvbnN0IGdldFJvd05vZGVJZCA9IG5vZGUucm93UGlubmVkID8gJ19fUk9XX0lOREVYJyA6IGNvbnRleHQuZ2V0Um93Tm9kZUlkXG5cbiAgcmV0dXJuIHtcbiAgICBpOlxuICAgICAgY29udGV4dC5oYXNPd25Qcm9wZXJ0eSgnZ2V0Um93Tm9kZUlkJykgJiYgbm9kZS5kYXRhW2dldFJvd05vZGVJZF1cbiAgICAgICAgPyBub2RlLmRhdGFbZ2V0Um93Tm9kZUlkXVxuICAgICAgICA6IG5vZGUuaWQsIC8vIGlkXG4gICAgeDogbm9kZS5yb3dJbmRleCwgLy8gaW5kZXhcbiAgICBwOlxuICAgICAgbm9kZS5oYXNPd25Qcm9wZXJ0eSgncGFyZW50JykgJiYgbm9kZS5wYXJlbnQuaGFzT3duUHJvcGVydHkoJ2tleScpXG4gICAgICAgID8gbm9kZS5wYXJlbnQua2V5XG4gICAgICAgIDogJycsIC8vIHBhcmVudCBrZXlcbiAgICBjOiBub2RlLnJvd1Bpbm5lZCA/IC0xIDogbm9kZS5jaGlsZEluZGV4LCAvL2NoaWxkSW5kZXhcbiAgICBzOiBCb29sZWFuKG5vZGUuc2VsZWN0ZWQpLCAvLyBzZWxlY3RlZFxuICAgIC8vIGNsaWVudCByb3dcbiAgICBjcjpcbiAgICAgIGNvbnRleHQuaGFzT3duUHJvcGVydHkoJ2luY2x1ZGVDbGllbnRSb3dEYXRhJykgJiZcbiAgICAgIGNvbnRleHRbJ2luY2x1ZGVDbGllbnRSb3dEYXRhJ10gPT09IHRydWVcbiAgICAgICAgPyBub2RlLmRhdGFcbiAgICAgICAgOiBudWxsLFxuICAgIHBwOiBub2RlLnJvd1Bpbm5lZCwgLy8gcGluIHBvc2l0aW9uXG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZSBub2RlIGZyb20gZXZlbnRcbiAqXG4gKiBQYXJzZSBub2RlIGluIHRoZSBwYVNzZWQgZXZlbnQgYXMgQkJqR3JpZEV4V2lkZ2V0Um93XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGVcbiAqXG4gKiBAcmV0dXJucyB7QkJqR3JpZEV4V2lkZ2V0Um93fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfcGFyc2VOb2RlRnJvbUV2ZW50KGUpIHtcbiAgcmV0dXJuIGd3X3BhcnNlTm9kZShlLm5vZGUsIGUuY29udGV4dClcbn1cbiIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiIsImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcbmltcG9ydCBnZXRSYXdUYWcgZnJvbSAnLi9fZ2V0UmF3VGFnLmpzJztcbmltcG9ydCBvYmplY3RUb1N0cmluZyBmcm9tICcuL19vYmplY3RUb1N0cmluZy5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlR2V0VGFnO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzT2JqZWN0TGlrZTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obW9kdWxlKSB7XG5cdGlmICghbW9kdWxlLndlYnBhY2tQb2x5ZmlsbCkge1xuXHRcdG1vZHVsZS5kZXByZWNhdGUgPSBmdW5jdGlvbigpIHt9O1xuXHRcdG1vZHVsZS5wYXRocyA9IFtdO1xuXHRcdC8vIG1vZHVsZS5wYXJlbnQgPSB1bmRlZmluZWQgYnkgZGVmYXVsdFxuXHRcdGlmICghbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImxvYWRlZFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5sO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwiaWRcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtb2R1bGUuaTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRtb2R1bGUud2VicGFja1BvbHlmaWxsID0gMTtcblx0fVxuXHRyZXR1cm4gbW9kdWxlO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qKlxuICogW1JlY3Vyc2l2ZWx5IHBhcnNlcyBhIHN0cmluZ2lmaWVkIEpTT05dXG4gKiBAcGFyYW0gIHtbdHlwZV19IGpzb25TdHJpbmcgW3N0cmluZ2lmaWVkIGpzb24gdG8gcGFyc2VdXG4gKiBAcmV0dXJuIHtbdHlwZV19ICAgICAgICAgICAgW25vcm1hbGl6ZWQgSmF2YXNjcmlwdCBvYmplY3RdXG4gKi9cbmZ1bmN0aW9uIGRlZXBQYXJzZUpzb24oanNvblN0cmluZykge1xuICAvLyBpZiBub3Qgc3RyaW5naWZpZWQganNvbiByYXRoZXIgYSBzaW1wbGUgc3RyaW5nIHZhbHVlIHRoZW4gSlNPTi5wYXJzZSB3aWxsIHRocm93IGVycm9yXG4gIC8vIG90aGVyd2lzZSBjb250aW51ZSByZWN1cnNpb25cbiAgaWYgKHR5cGVvZiBqc29uU3RyaW5nID09PSAnc3RyaW5nJykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZGVlcFBhcnNlSnNvbihKU09OLnBhcnNlKGpzb25TdHJpbmcpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiBqc29uU3RyaW5nO1xuICAgIH1cbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGpzb25TdHJpbmcpKSB7XG4gICAgLy8gaWYgYW4gYXJyYXkgaXMgcmVjZWl2ZWQsIG1hcCBvdmVyIHRoZSBhcnJheSBhbmQgZGVlcFBhcnNlIGVhY2ggdmFsdWVcbiAgICByZXR1cm4ganNvblN0cmluZy5tYXAodmFsID0+IGRlZXBQYXJzZUpzb24odmFsKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGpzb25TdHJpbmcgPT09ICdvYmplY3QnICYmIGpzb25TdHJpbmcgIT09IG51bGwpIHtcbiAgICAvLyBpZiBhbiBvYmplY3QgaXMgcmVjZWl2ZWQgdGhlbiBkZWVwUGFyc2UgZWFjaCBlbGVtZW50IGluIHRoZSBvYmplY3RcbiAgICAvLyB0eXBlb2YgbnVsbCByZXR1cm5zICdvYmplY3QnIHRvbywgc28gd2UgaGF2ZSB0byBlbGltaW5hdGUgdGhhdFxuICAgIHJldHVybiBPYmplY3Qua2V5cyhqc29uU3RyaW5nKS5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gICAgICBvYmpba2V5XSA9IGRlZXBQYXJzZUpzb24oanNvblN0cmluZ1trZXldKTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSwge30pO1xuICB9IGVsc2Uge1xuICAgIC8vIG90aGVyd2lzZSByZXR1cm4gd2hhdGV2ZXIgd2FzIHJlY2VpdmVkXG4gICAgcmV0dXJuIGpzb25TdHJpbmc7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IGRlZXBQYXJzZUpzb24gfTtcbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuLy8gc2VsZWN0aW9uIGNvbnN0YW50c1xuZXhwb3J0IGNvbnN0IEdXX0VWRU5UX1JPV19TRUxFQ1QgPSA2OVxuZXhwb3J0IGNvbnN0IEdXX0VWRU5UX1JPV19DTElDSyA9IDUwMTFcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9ST1dfRE9VQkxFX0NMSUNLID0gNTJcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9DRUxMX0NMSUNLID0gNTAwMVxuZXhwb3J0IGNvbnN0IEdXX0VWRU5UX0NFTExfRE9VQkxFX0NMSUNLID0gNTAwMlxuXG4vLyBlZGl0aW5nIGNvbnN0YW50c1xuZXhwb3J0IGNvbnN0IEdXX0VWRU5UX0NFTExfRURJVElOR19TVEFSVEVEID0gNTAwM1xuZXhwb3J0IGNvbnN0IEdXX0VWRU5UX0NFTExfRURJVElOR19TVE9QUEVEID0gNTAwNFxuZXhwb3J0IGNvbnN0IEdXX0VWRU5UX0NFTExfVkFMVUVfQ0hBTkdFRCA9IDUwMDVcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9ST1dfRURJVElOR19TVEFSVEVEID0gNTAwNlxuZXhwb3J0IGNvbnN0IEdXX0VWRU5UX1JPV19FRElUSU5HX1NUT1BQRUQgPSA1MDA3XG5leHBvcnQgY29uc3QgR1dfRVZFTlRfUk9XX1ZBTFVFX0NIQU5HRUQgPSA1MDEyXG5cbi8vIHN0YXRlIGNvbnN0YW50c1xuZXhwb3J0IGNvbnN0IEdXX0VWRU5UX0dSSURfU1RBVEVfQ0hBTkdFID0gNTAwOFxuXG4vLyByYW5nZSBzZWxlY3Rpb25cbmV4cG9ydCBjb25zdCBHV19FVkVOVF9SQU5HRV9TRUxFQ1RJT05fQ0hBTkdFRCA9IDUwMDlcblxuLy8ga2V5Ym9hcmQgZXZlbnRzXG5leHBvcnQgY29uc3QgR1dfRVZFTlRfS0VZUFJFU1MgPSA1MDEwXG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNPYmplY3Q7XG4iLCJpbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sID0gcm9vdC5TeW1ib2w7XG5cbmV4cG9ydCBkZWZhdWx0IFN5bWJvbDtcbiIsImltcG9ydCBmcmVlR2xvYmFsIGZyb20gJy4vX2ZyZWVHbG9iYWwuanMnO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbmV4cG9ydCBkZWZhdWx0IHJvb3Q7XG4iLCIvKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcSgnYScsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcShOYU4sIE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZXE7XG4iLCJpbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGlzTGVuZ3RoIGZyb20gJy4vaXNMZW5ndGguanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNBcnJheUxpa2U7XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmJqLW1hc2tzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IFN0cmluZ01hc2sgZnJvbSAnLi9TdHJpbmdNYXNrJ1xuXG5leHBvcnQgZGVmYXVsdCBTdHJpbmdNYXNrXG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmJqLW1hc2tzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IE51bWJlck1hc2sgZnJvbSAnLi9OdW1iZXJNYXNrJ1xuXG5leHBvcnQgZGVmYXVsdCBOdW1iZXJNYXNrXG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBCYXNpcy5BZ0dyaWRDb21wb25lbnRzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfZ2V0R3JpZCB9IGZyb20gJy4vdXRpbGl0aWVzJ1xuaW1wb3J0IHsgZ3dfZXhlY3V0ZUV4cHJlc3Npb24gfSBmcm9tICcuLi9leHByZXNzaW9uJ1xuY29uc3QgeyBkZWVwUGFyc2VKc29uIH0gPSByZXF1aXJlKCdkZWVwLXBhcnNlLWpzb24nKVxuXG4vKipcbiAqIFNldHVwIHRoZSB0b29sdGlwIHZhbHVlIGdldHRlciBhbmQgdG9vbHRpcCBjb21wb25lbnQgZm9yIHRoZSBwYXNzZWQgY29sdW1uIGRlZmluaXRpb24gLCBpZiB0aGUgY29sdW1uIGRlZmluaXRpb24gaXMgYSBncm91cFxuICogdGhlbiB0aGUgZnVuY3Rpb24gd2lsbCBsb29wIG92ZXIgYWxsIGl0cyBjaGlsZHJlbiBhbmQgc2V0dXAgdGhlIGV4cHJlc3Npb24gYW5kIHRoZSBjb21wb25lbnQgdG9vLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWYgY29sdW1uIGRlZmluaXRpb24gb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIF9jb25maWd1cmVUb29sdGlwcyhkZWYpIHtcbiAgY29uc3QgdG9vbHRpcFZhbHVlR2V0dGVyRXhwcmVzc2lvbiA9IGRlZi50b29sdGlwVmFsdWVHZXR0ZXJcbiAgaWYgKHRvb2x0aXBWYWx1ZUdldHRlckV4cHJlc3Npb24pIHtcbiAgICBkZWYudG9vbHRpcFZhbHVlR2V0dGVyID0gcGFyYW1zID0+XG4gICAgICBnd19leGVjdXRlRXhwcmVzc2lvbih0b29sdGlwVmFsdWVHZXR0ZXJFeHByZXNzaW9uLCBwYXJhbXMpXG4gIH1cblxuICBkZWYudG9vbHRpcENvbXBvbmVudCA9ICdIVE1MVG9vbHRpcCdcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gIGlmIChkZWYuaGFzT3duUHJvcGVydHkoJ2NoaWxkcmVuJykpIHtcbiAgICBkZWYuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiBfY29uZmlndXJlVG9vbHRpcHMoY2hpbGQpKVxuICB9XG59XG4vKipcbiAqIEV4dGVuZCB0aGUgY29sdW1uIGRlZmluaXRpb25zXG4gKlxuICogRXh0ZW5kIHRoZSBjb2x1bW4gZGVmaW5pdGlvbnMgd2l0aCBvcHRpb25zIHdoaWNoIGNhbiBub3QgYmUgaGFuZGxlZCBpbiBCQmpcbiAqIChleDogYXR0YWNoaW5nIGNhbGxiYWNrcylcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBkZWZpbml0aW9ucyBhcnJheSBvZiBjb2x1bW4gZGVmaW5pdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2V4dGVuZENvbHVtbkRlZmluaXRpb25zKGRlZmluaXRpb25zKSB7XG4gIGZvciAobGV0IGkgaW4gZGVmaW5pdGlvbnMpIHtcbiAgICBjb25zdCBkZWYgPSBkZWZpbml0aW9uc1tpXVxuXG4gICAgZGVmLmNoZWNrYm94U2VsZWN0aW9uID0gZGVmLmNoZWNrYm94U2VsZWN0aW9uIHx8IGd3X2lzU2hvd1NlbGVjdGlvbkNoZWNrYm94XG4gICAgZGVmLmhlYWRlckNoZWNrYm94U2VsZWN0aW9uID1cbiAgICAgIGRlZi5oZWFkZXJDaGVja2JveFNlbGVjdGlvbiB8fCBnd19pc0hlYWRlckNoZWNrYm94U2VsZWN0aW9uXG4gICAgX2NvbmZpZ3VyZVRvb2x0aXBzKGRlZilcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICBpZiAoZGVmLmhhc093blByb3BlcnR5KCdlZGl0YWJsZScpICYmIHR5cGVvZiBkZWYuZWRpdGFibGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBlZGl0YWJsZSA9IGRlZi5lZGl0YWJsZVxuICAgICAgZGVmLmVkaXRhYmxlID0gcGFyYW1zID0+IGd3X2V4ZWN1dGVFeHByZXNzaW9uKGVkaXRhYmxlLCBwYXJhbXMpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVXBkYXRlIHRoZSBjb2x1bW4gZGVmaW5pdGlvbnNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQgaWRcbiAqIEBwYXJhbSB7QXJyYXl9IGRlZmluaXRpb25zIGFycmF5IG9mIGNvbHVtbiBkZWZpbml0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0Q29sdW1uRGVmaW5pdGlvbnMoaWQsIGRlZmluaXRpb25zKSB7XG4gIGNvbnN0IGdyaWQgPSBnd19nZXRHcmlkKGlkKVxuICBjb25zdCBkZWVwUGFyc2VkRGVmaW5pdGlvbnMgPSBkZWVwUGFyc2VKc29uKEpTT04uc3RyaW5naWZ5KGRlZmluaXRpb25zKSlcblxuICBnd19leHRlbmRDb2x1bW5EZWZpbml0aW9ucyhkZWVwUGFyc2VkRGVmaW5pdGlvbnMpXG5cbiAgZ3JpZC5vcHRpb25zLmFwaS5zZXRDb2x1bW5EZWZzKGRlZXBQYXJzZWREZWZpbml0aW9ucylcbiAgZ3JpZC5vcHRpb25zLmNvbHVtbkRlZnMgPSBkZWVwUGFyc2VkRGVmaW5pdGlvbnNcbn1cblxuLyoqXG4gKiBNYWtlIHRoZSBjdXJyZW50bHkgdmlzaWJsZSBjb2x1bW5zIGZpdCB0aGUgc2NyZWVuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7TnVtYmVyfSB0aGUgd2lkdGggdG8gdXNlIHRvIGZpdCBhbGwgY29sdW1ucyBpblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2l6ZUNvbHVtbnNUb0ZpdChpZCwgd2lkdGgpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcbiAgY29uc3QgYXBpID0gb3B0aW9ucy5hcGlcbiAgY29uc3QgY29sdW1uc0FQSSA9IG9wdGlvbnMuY29sdW1uQXBpXG4gIGlmICh3aWR0aCkge1xuICAgIGNvbHVtbnNBUEkuc2l6ZUNvbHVtbnNUb0ZpdChOdW1iZXIod2lkdGgpKVxuICB9IGVsc2Uge1xuICAgIGFwaS5zaXplQ29sdW1uc1RvRml0KClcbiAgfVxufVxuXG4vKipcbiAqIFdvcmsgb3V0IHRoZSBiZXN0IHdpZHRoIHRvIGZpdCB0aGUgY29udGVudHMgb2YgdGhlIGNlbGxzIGluIHRoZSBjb2x1bW4uXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW3NraXBIZWFkZXI9ZmFsc2VdIHdoZW4gdHJ1ZSBpbmRpY2F0ZSB0aGF0IHRoZSBoZWFkZXIgY29udGVudCAoaGVhZGVyTmFtZSkgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIHdoZW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxjdWxhdGluZyB0aGUgd2lkdGggb2YgdGhlIGNvbHVtblxuICogQHBhcmFtIHtBcnJheXxudWxsfSBbY29sdW1ucz1udWxsXSBhbiBhcnJheSBvZiBjb2x1bW5zIGlkcyB0byBhdXRvIHNpemUgb3IgbnVsbCB0byBhdXRvIHNpemUgYWxsIGNvbHVtbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2F1dG9TaXplQ29sdW1ucyhpZCwgc2tpcEhlYWRlciA9IGZhbHNlLCBjb2x1bW5zID0gbnVsbCkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuICBjb25zdCBjb2x1bW5zQVBJID0gb3B0aW9ucy5jb2x1bW5BcGlcblxuICBpZiAoIShjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoKSkge1xuICAgIGNvbnN0IGFsbENvbHVtbklkcyA9IFtdXG5cbiAgICBjb2x1bW5zQVBJLmdldEFsbENvbHVtbnMoKS5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICBhbGxDb2x1bW5JZHMucHVzaChjb2x1bW4uY29sSWQpXG4gICAgfSlcblxuICAgIGNvbHVtbnNBUEkuYXV0b1NpemVDb2x1bW5zKGFsbENvbHVtbklkcywgQm9vbGVhbihza2lwSGVhZGVyKSlcbiAgfSBlbHNlIHtcbiAgICBjb2x1bW5zQVBJLmF1dG9TaXplQ29sdW1ucyhjb2x1bW5zLCBCb29sZWFuKHNraXBIZWFkZXIpKVxuICB9XG59XG4vKipcbiAqIEVuc3VyZXMgdGhlIGNvbHVtbiBpcyB2aXNpYmxlLCBzY3JvbGxpbmcgdGhlIHRhYmxlIGlmIG5lZWRlZC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgIHRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb2x1bW5JZCAgdGhlIGNvbHVtbiBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfZW5zdXJlQ29sdW1uVmlzaWJsZShpZCwgY29sdW1uSWQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkuZW5zdXJlQ29sdW1uVmlzaWJsZShjb2x1bW5JZClcbn1cblxuLyoqXG4gKiBTZXQgQ29sdW1uIFdpZHRoXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gY29sdW1uSWQgVGhlIGNvbHVtbiBpZFxuICogQHBhcmFtIHtOdW1iZXJ8U3RyaW5nfSB3aWR0aCBUaGUgbmV3IGNvbHVtbiB3aWR0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0Q29sdW1uV2lkdGgoaWQsIGNvbHVtbklkLCB3aWR0aCkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbHVtbkFwaS5zZXRDb2x1bW5XaWR0aChjb2x1bW5JZCwgTnVtYmVyKHdpZHRoKSlcbn1cblxuLyoqXG4gKiBQaW4gQ29sdW1uXG4gKlxuICogUGluIGEgY29sdW1uIHRvIGEgc3BlY2lmaWMgZGlyZWN0aW9uXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gY29sdW1uSWQgVGhlIGNvbHVtbiBpZFxuICogQHBhcmFtIHtTdHJpbmd9IHBpbiBUaGUgcGluIGRpcmVjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfcGluQ29sdW1uKGlkLCBjb2x1bW5JZCwgcGluKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29sdW1uQXBpLnNldENvbHVtblBpbm5lZChjb2x1bW5JZCwgcGluKVxufVxuXG4vKipcbiAqIE1vdmUgQ29sdW1uXG4gKlxuICogTW92ZSBjb2x1bW4gdG8gYSBzcGVjaWZpYyBpbmRleFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCBpZFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbHVtbklkIFRoZSBjb2x1bW4gaWRcbiAqIEBwYXJhbSB7TnVtYmVyfFN0cmluZ30gdG9JbmRleCBUaGUgbmV3IGNvbHVtbiBpbmRleFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfbW92ZUNvbHVtbihpZCwgY29sdW1uSWQsIHRvSW5kZXgpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb2x1bW5BcGkubW92ZUNvbHVtbihjb2x1bW5JZCwgdG9JbmRleClcbn1cblxuLyoqXG4gKiBTaG93IC8gSGlkZSBzZWxlY3Rpb24gY2hlY2tib3ggYmFzZWQgb24gdGhlIGZpcnN0IGNvbHVtblxuICpcbiAqIFRoZSBmdW5jdGlvbiBtYWtlIHN1cmUgdGhhdCB0aGUgc2VsZWN0aW9uIGNoZWNrYm94IGlzIGFsd2F5cyBzaG93biBvbiB0aGVcbiAqIGZpcnN0IGNvbHVtblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbVxuICpcbiAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgd2hlbiBmaXJzdCBjb2x1bW4gLCBmYWxzZSBpZiBub3QgdGhlIGZpcnN0IGNvbHVtbiBvciBpZiB0aGVcbiAqICAgICAgICAgICAgICAgICAgIGdyaWQncyBgQ29udGV4dC5zaG93U2VsZWN0aW9uQ2hlY2tib3hgIGlzIGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19pc1Nob3dTZWxlY3Rpb25DaGVja2JveChwYXJhbSkge1xuICBpZiAoIXBhcmFtLmNvbnRleHQuc2hvd1NlbGVjdGlvbkNoZWNrYm94KSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb25zdCBjb2x1bW5zID0gcGFyYW0uY29sdW1uQXBpLmdldEFsbEdyaWRDb2x1bW5zKClcblxuICByZXR1cm4gY29sdW1uc1swXS5jb2xEZWYuZmllbGQgPT09IHBhcmFtLmNvbERlZi5maWVsZFxufVxuXG4vKipcbiAqIFNob3cgLyBIaWRlIGhlYWRlciBzZWxlY3Rpb24gY2hlY2tib3ggYmFzZWQgb24gdGhlIGZpcnN0IGNvbHVtblxuICpcbiAqIFRoZSBmdW5jdGlvbiBtYWtlIHN1cmUgdGhhdCB0aGUgaGVhZGVyIHNlbGVjdGlvbiBjaGVja2JveCBpcyBhbHdheXMgc2hvd24gb24gdGhlXG4gKiBmaXJzdCBjb2x1bW5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1cbiAqXG4gKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIHdoZW4gZmlyc3QgY29sdW1uICwgZmFsc2UgaWYgbm90IHRoZSBmaXJzdCBjb2x1bW4gb3IgaWYgdGhlXG4gKiAgICAgICAgICAgICAgICAgICBncmlkJ3MgYENvbnRleHQuc2hvd0hlYWRlclNlbGVjdGlvbkNoZWNrYm94YCBpcyBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfaXNIZWFkZXJDaGVja2JveFNlbGVjdGlvbihwYXJhbSkge1xuICBjb25zdCBjb250ZXh0ID0gcGFyYW0uYXBpLmdyaWRPcHRpb25zV3JhcHBlci5ncmlkT3B0aW9ucy5jb250ZXh0XG5cbiAgaWYgKCFjb250ZXh0LnNob3dIZWFkZXJTZWxlY3Rpb25DaGVja2JveCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgY29uc3QgY29sdW1ucyA9IHBhcmFtLmNvbHVtbkFwaS5nZXRBbGxHcmlkQ29sdW1ucygpXG5cbiAgcmV0dXJuIGNvbHVtbnNbMF0uY29sRGVmLmZpZWxkID09PSBwYXJhbS5jb2xEZWYuZmllbGRcbn1cblxuLyoqXG4gKiBFbmFibGUgcm93IGdyb3VwaW5nIGZvciBjb2x1bW5zXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gY29sdW1ucyAgYSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGNvbHVtbnNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gc2V0ICBXaGVuIHRydWUgLCBgc2V0Um93R3JvdXBDb2x1bW5zYCB3aWxsIGJlIHVzZWQgLCBgYWRkUm93R3JvdXBDb2x1bW5zYCBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2FkZFJvd0dyb3VwQ29sdW1uKGlkLCBjb2x1bW5zLCBzZXQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb2x1bW5BcGlbXG4gICAgc2V0ID8gJ3NldFJvd0dyb3VwQ29sdW1ucycgOiAnYWRkUm93R3JvdXBDb2x1bW5zJ1xuICBdKGNvbHVtbnMuc3BsaXQoJywnKS5tYXAoaSA9PiBpLnRyaW0oKSkpXG59XG5cbi8qKlxuICogRGlzYWJsZSByb3cgZ3JvdXBpbmcgZm9yIGNvbHVtbnNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb2x1bW5zICBhIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgY29sdW1uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfcmVtb3ZlUm93R3JvdXBDb2x1bW4oaWQsIGNvbHVtbnMpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb2x1bW5BcGkucmVtb3ZlUm93R3JvdXBDb2x1bW5zKFxuICAgIGNvbHVtbnMuc3BsaXQoJywnKS5tYXAoaSA9PiBpLnRyaW0oKSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3dfZ2V0UGl2b3RNb2RlKGlkKSB7XG4gIHJldHVybiBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbHVtbkFwaS5pc1Bpdm90TW9kZSgpXG59XG5cbi8qKlxuICogRW5hYmxlIC8gZGlzYmFsZSBwaXZvdCBtb2RlXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkIGlkXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG1vZGUgd2hlbiB0cnVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRQaXZvdE1vZGUoaWQsIG1vZGUpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb2x1bW5BcGkuc2V0UGl2b3RNb2RlKCEhTnVtYmVyKG1vZGUpKVxufVxuXG4vKipcbiAqIEVuYWJsZSBwaXZvdCBmb3IgY29sdW1uc1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCBpZFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbHVtbnMgIGEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBjb2x1bW5zXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHNldCAgV2hlbiB0cnVlICwgYGFkZFBpdm90Q29sdW1uc2Agd2lsbCBiZSB1c2VkICwgYHNldFBpdm90Q29sdW1uc2Agb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19hZGRQaXZvdENvbHVtbnMoaWQsIGNvbHVtbnMsIHNldCkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbHVtbkFwaVtzZXQgPyAnc2V0UGl2b3RDb2x1bW5zJyA6ICdhZGRQaXZvdENvbHVtbnMnXShcbiAgICBjb2x1bW5zLnNwbGl0KCcsJykubWFwKGkgPT4gaS50cmltKCkpXG4gIClcbn1cblxuLyoqXG4gKiBEaXNhYmxlIHBpdm90IGZvciBjb2x1bW5zXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gY29sdW1ucyAgYSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGNvbHVtbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3JlbW92ZVBpdm90Q29sdW1ucyhpZCwgY29sdW1ucykge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbHVtbkFwaS5yZW1vdmVQaXZvdENvbHVtbnMoXG4gICAgY29sdW1ucy5zcGxpdCgnLCcpLm1hcChpID0+IGkudHJpbSgpKVxuICApXG59XG5cbi8qKlxuICogRW5hYmxlIHZhbHVlIGZvciBjb2x1bW5zXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gY29sdW1ucyAgYSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGNvbHVtbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2FkZFZhbHVlQ29sdW1ucyhpZCwgY29sdW1ucykge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbHVtbkFwaS5hZGRWYWx1ZUNvbHVtbnMoXG4gICAgY29sdW1ucy5zcGxpdCgnLCcpLm1hcChpID0+IGkudHJpbSgpKVxuICApXG59XG5cbi8qKlxuICogRGlzYWJsZSB2YWx1ZSBmb3IgY29sdW1uc1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCBpZFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbHVtbnMgIGEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBjb2x1bW5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19yZW1vdmVWYWx1ZUNvbHVtbnMoaWQsIGNvbHVtbnMpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb2x1bW5BcGkucmVtb3ZlVmFsdWVDb2x1bW5zKFxuICAgIGNvbHVtbnMuc3BsaXQoJywnKS5tYXAoaSA9PiBpLnRyaW0oKSlcbiAgKVxufVxuXG4vKipcbiAqIFNldCB0aGUgY29sdW1uIHNvcnRpbmcgbW9kZWxcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBtb2RlbCBtb2RlbCBhcyBqc29uIGFycmF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRTb3J0TW9kZWwoaWQsIG1vZGVsKSB7XG4gIGNvbnN0IGFzQXJyYXkgPSBKU09OLnBhcnNlKG1vZGVsKVxuICBjb25zdCBwYXJzZWRNb2RlbCA9IFtdXG4gIGFzQXJyYXkuZm9yRWFjaChpID0+IHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBpKSB7XG4gICAgICBwYXJzZWRNb2RlbC5wdXNoKHtcbiAgICAgICAgY29sSWQ6IGtleSxcbiAgICAgICAgc29ydDogaVtrZXldLFxuICAgICAgfSlcbiAgICB9XG4gIH0pXG5cbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkuc2V0U29ydE1vZGVsKHBhcnNlZE1vZGVsKVxufVxuXG4vKipcbiAqIFJlZHJhd3MgdGhlIGhlYWRlci4gVXNlZnVsIGlmIGEgY29sdW1uIG5hbWUgY2hhbmdlcyxcbiAqIG9yIHNvbWV0aGluZyBlbHNlIHRoYXQgY2hhbmdlcyBob3cgdGhlIGNvbHVtbiBoZWFkZXIgaXMgZGlzcGxheWVkLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBncmlkJ3MgaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3JlZnJlc2hIZWFkZXIoaWQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkucmVkcmF3Um93cygpXG59XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbi8qKlxuICogQnVpbGQgYSBqcyBmdW5jdGlvbiBmcm9tIHRoZSBnaXZlbiBleHByZXNzaW9uXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV4cHJlc3Npb25cbiAqXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2NvbXBpbGVFeHByZXNzaW9uKGV4cHJlc3Npb24pIHtcbiAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBleHByZXNzaW9uIGNhY2hlIGhhcyBiZWVuIGluaXRpYWxpemVkXG4gIGlmICh0eXBlb2YgZ3dfY29tcGlsZUV4cHJlc3Npb24uZXhwcmVzc2lvbkNhY2hlID09ICd1bmRlZmluZWQnKSB7XG4gICAgZ3dfY29tcGlsZUV4cHJlc3Npb24uZXhwcmVzc2lvbkNhY2hlID0gW11cbiAgfVxuXG4gIC8vIGNoZWNrIGNhY2hlIGZpcnN0XG4gIGlmIChnd19jb21waWxlRXhwcmVzc2lvbi5leHByZXNzaW9uQ2FjaGVbZXhwcmVzc2lvbl0pIHtcbiAgICByZXR1cm4gZ3dfY29tcGlsZUV4cHJlc3Npb24uZXhwcmVzc2lvbkNhY2hlW2V4cHJlc3Npb25dXG4gIH1cblxuICAvLyBpZiBub3QgZm91bmQgaW4gY2FjaGUsIHJldHVybiB0aGUgZnVuY3Rpb25cbiAgbGV0IGZ1bmN0aW9uQm9keSA9IG51bGxcbiAgLy8gaWYgdGhlIGV4cHJlc3Npb24gaGFzIHRoZSAncmV0dXJuJyB3b3JkIGluIGl0LCB0aGVuIHVzZSBhcyBpcyxcbiAgLy8gaWYgbm90LCB0aGVuIHdyYXAgaXQgd2l0aCByZXR1cm4gYW5kICc7JyB0byBtYWtlIGEgZnVuY3Rpb25cbiAgaWYgKGV4cHJlc3Npb24uaW5kZXhPZigncmV0dXJuJykgPj0gMCkge1xuICAgIGZ1bmN0aW9uQm9keSA9IGV4cHJlc3Npb25cbiAgfSBlbHNlIHtcbiAgICBmdW5jdGlvbkJvZHkgPSAncmV0dXJuICcgKyBleHByZXNzaW9uICsgJzsnXG4gIH1cblxuICBjb25zdCB0aGVGdW5jdGlvbiA9IG5ldyBGdW5jdGlvbihcbiAgICAneCwgY3R4LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHZhbHVlLCBub2RlLCBkYXRhLCBjb2xEZWYsIHJvd0luZGV4LCBhcGksIGNvbHVtbkFwaSwgZ2V0VmFsdWUsIGNvbHVtbiwgY29sdW1uR3JvdXAnLFxuICAgIGZ1bmN0aW9uQm9keVxuICApXG5cbiAgLy8gc3RvcmUgaW4gY2FjaGVcbiAgZ3dfY29tcGlsZUV4cHJlc3Npb24uZXhwcmVzc2lvbkNhY2hlW2V4cHJlc3Npb25dID0gdGhlRnVuY3Rpb25cblxuICByZXR1cm4gdGhlRnVuY3Rpb25cbn1cblxuLyoqXG4gKiBCdWlsZCBhbmQgZXhlY3V0ZWQgYW4gZXhwcmVzc2lvbiB3aXRoIHRoZSBwYXNzZWQgcGFyYW1zXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV4cHJlc3Npb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqXG4gKiBAcmV0dXJuIG1peGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19leGVjdXRlRXhwcmVzc2lvbihleHByZXNzaW9uLCBwYXJhbXMpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBqYXZhU2NyaXB0RnVuY3Rpb24gPSBnd19jb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uKVxuICAgIC8vIHRoZSBwYXJhbXMgZG9uJ3QgaGF2ZSBhbGwgdGhlc2UgdmFsdWVzLCByYXRoZXIgd2UgYWRkIGV2ZXJ5IHBvc3NpYmxlXG4gICAgLy8gdmFsdWUgYSBwYXJhbXMgY2FuIGhhdmUsIHdoaWNoIG1ha2VzIHdoYXRldmVyIGlzIGluIHRoZSBwYXJhbXMgYXZhaWxhYmxlLlxuICAgIGNvbnN0IHJlc3VsdCA9IGphdmFTY3JpcHRGdW5jdGlvbihcbiAgICAgIHBhcmFtcy52YWx1ZSxcbiAgICAgIHBhcmFtcy5jb250ZXh0LFxuICAgICAgcGFyYW1zLm9sZFZhbHVlLFxuICAgICAgcGFyYW1zLm5ld1ZhbHVlLFxuICAgICAgcGFyYW1zLnZhbHVlLFxuICAgICAgcGFyYW1zLm5vZGUsXG4gICAgICBwYXJhbXMuZGF0YSxcbiAgICAgIHBhcmFtcy5jb2xEZWYsXG4gICAgICBwYXJhbXMucm93SW5kZXgsXG4gICAgICBwYXJhbXMuYXBpLFxuICAgICAgcGFyYW1zLmNvbHVtbkFwaSxcbiAgICAgIHBhcmFtcy5nZXRWYWx1ZSxcbiAgICAgIHBhcmFtcy5jb2x1bW4sXG4gICAgICBwYXJhbXMuY29sdW1uR3JvdXBcbiAgICApXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gdGhlIGV4cHJlc3Npb24gZmFpbGVkLCB3aGljaCBjYW4gaGFwcGVuLCBhcyBpdCdzIHRoZSBjbGllbnQgdGhhdFxuICAgIC8vIHByb3ZpZGVzIHRoZSBleHByZXNzaW9uLiBzbyBwcmludCBhIG5pY2UgbWVzc2FnZVxuICAgIGNvbnNvbGUubG9nKCdQcm9jZXNzaW5nIG9mIHRoZSBleHByZXNzaW9uIGZhaWxlZCcpXG4gICAgY29uc29sZS5sb2coJ0V4cHJlc3Npb24gPSAnICsgZXhwcmVzc2lvbilcbiAgICBjb25zb2xlLmxvZygnUGFyYW1zID0nLCBwYXJhbXMpXG4gICAgY29uc29sZS5sb2coJ0V4Y2VwdGlvbiA9ICcgKyBlKVxuICAgIHJldHVybiBudWxsXG4gIH1cbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QEJhc2lzLkFnR3JpZENvbXBvbmVudHMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19nZXRHcmlkIH0gZnJvbSAnLi91dGlsaXRpZXMnXG5pbXBvcnQgeyBnd19wYXJzZU5vZGUgfSBmcm9tICdldmVudHMvdXRpbGl0aWVzJ1xuaW1wb3J0IHsgZ3dfZXhlY3V0ZUV4cHJlc3Npb24gfSBmcm9tICcuLi9leHByZXNzaW9uJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0UXVpY2tGaWx0ZXIoaWQsIGZpbHRlcikge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5zZXRRdWlja0ZpbHRlcihmaWx0ZXIpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnd19leHBhbmRBbGwoaWQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkuZXhwYW5kQWxsKClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGd3X2NvbGxhcHNlQWxsKGlkKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLmNvbGxhcHNlQWxsKClcbn1cbi8qKlxuICogRW5zdXJlcyB0aGUgcm93IGluZGV4IGlzIHZpc2libGUgYnkgdmVydGljYWxseSBzY3JvbGxpbmcgdGhlIGdyaWRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgIHRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gaW5kZXggdGhlIHJvdyBpbmRleCBvciBrZXlcbiAqIEBwYXJhbSB7U3RyaW5nfSBwb3NpdGlvbiB7J3RvcCcsICdtaWRkbGUnLCAnYm90dG9tJywgdW5kZWZpbmVkL251bGx9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19lbnN1cmVJbmRleFZpc2libGUoaWQsIGluZGV4LCBwb3NpdGlvbikge1xuICBjb25zdCBhcGkgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaVxuICBjb25zdCBub2RlID0gYXBpLmdldFJvd05vZGUoaW5kZXgpXG5cbiAgaWYgKG5vZGUpIHtcbiAgICBhcGkuZW5zdXJlTm9kZVZpc2libGUobm9kZSwgcG9zaXRpb24pXG4gIH0gZWxzZSB7XG4gICAgYXBpLmVuc3VyZUluZGV4VmlzaWJsZShOdW1iZXIoaW5kZXgpLCBwb3NpdGlvbilcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3dfbmF2aWdhdGVUb05leHRSb3coaWQsIHBhcmFtcykge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuICBsZXQgcHJldmlvdXNDZWxsID0gcGFyYW1zLnByZXZpb3VzQ2VsbFBvc2l0aW9uXG4gIGxldCBzdWdnZXN0ZWROZXh0Q2VsbCA9IHBhcmFtcy5uZXh0Q2VsbFBvc2l0aW9uXG5cbiAgY29uc3QgS0VZX1VQID0gMzhcbiAgY29uc3QgS0VZX0RPV04gPSA0MFxuICBjb25zdCBLRVlfTEVGVCA9IDM3XG4gIGNvbnN0IEtFWV9SSUdIVCA9IDM5XG5cbiAgc3dpdGNoIChwYXJhbXMua2V5KSB7XG4gICAgY2FzZSBLRVlfRE9XTjpcbiAgICAgIC8vIHNldCBzZWxlY3RlZCBjZWxsIG9uIGN1cnJlbnQgY2VsbCArIDFcbiAgICAgIGlmIChzdWdnZXN0ZWROZXh0Q2VsbCAmJiAhc3VnZ2VzdGVkTmV4dENlbGwucm93UGlubmVkKSB7XG4gICAgICAgIGlmIChwcmV2aW91c0NlbGwucm93UGlubmVkKSB7XG4gICAgICAgICAgY29uc3Qgcm93ID0gb3B0aW9ucy5hcGkuZ2V0RGlzcGxheWVkUm93QXRJbmRleChcbiAgICAgICAgICAgIG9wdGlvbnMuYXBpLmdldEZpcnN0RGlzcGxheWVkUm93KClcbiAgICAgICAgICApXG4gICAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgICAgcm93LnNldFNlbGVjdGVkKHRydWUpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnMuYXBpLmZvckVhY2hOb2RlKG5vZGUgPT4ge1xuICAgICAgICAgICAgaWYgKHByZXZpb3VzQ2VsbC5yb3dJbmRleCArIDEgPT09IG5vZGUucm93SW5kZXgpIHtcbiAgICAgICAgICAgICAgbm9kZS5zZXRTZWxlY3RlZCh0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN1Z2dlc3RlZE5leHRDZWxsXG4gICAgY2FzZSBLRVlfVVA6XG4gICAgICAvLyBzZXQgc2VsZWN0ZWQgY2VsbCBvbiBjdXJyZW50IGNlbGwgLSAxXG4gICAgICBpZiAoc3VnZ2VzdGVkTmV4dENlbGwgJiYgIXN1Z2dlc3RlZE5leHRDZWxsLnJvd1Bpbm5lZCkge1xuICAgICAgICBpZiAocHJldmlvdXNDZWxsLnJvd1Bpbm5lZCkge1xuICAgICAgICAgIGNvbnN0IHJvdyA9IG9wdGlvbnMuYXBpLmdldERpc3BsYXllZFJvd0F0SW5kZXgoXG4gICAgICAgICAgICBvcHRpb25zLmFwaS5nZXRMYXN0RGlzcGxheWVkUm93KClcbiAgICAgICAgICApXG4gICAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgICAgcm93LnNldFNlbGVjdGVkKHRydWUpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnMuYXBpLmZvckVhY2hOb2RlKG5vZGUgPT4ge1xuICAgICAgICAgICAgaWYgKHByZXZpb3VzQ2VsbC5yb3dJbmRleCAtIDEgPT09IG5vZGUucm93SW5kZXgpIHtcbiAgICAgICAgICAgICAgbm9kZS5zZXRTZWxlY3RlZCh0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWdnZXN0ZWROZXh0Q2VsbFxuICAgIGNhc2UgS0VZX0xFRlQ6XG4gICAgY2FzZSBLRVlfUklHSFQ6XG4gICAgICByZXR1cm4gc3VnZ2VzdGVkTmV4dENlbGxcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgaGF2ZSBzdXBlciBzdHJhbmdlIGtleWJvYXJkJylcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgYSByb3cgYmFzZWQgb24gYGdldFJvd05vZGVJZGAgY29uZmlnIGRlZmluZWQgaW4gdGhlIGdyaWQgY29udGV4dFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YSAgdGhlIGRhdGEgcm93XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19nZXRSb3dOb2RlSWQoaWQsIGRhdGEpIHtcbiAgcmV0dXJuIGRhdGFbZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb250ZXh0LmdldFJvd05vZGVJZF1cbn1cblxuLyoqXG4gKiBVcGRhdGUgdGhlIGdyaWQncyBkYXRhIHNldFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge09iamVjdH0ganNvbiBqc29uIG9iamVjdCB3aGljaCBjb250YWlucyB0aGUgbmV3IGRhdGFzZXQgdG8gdXBkYXRlIHRoZSBncmlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRSb3dEYXRhKGlkLCBqc29uKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG5cbiAgb3B0aW9ucy5hcGkuc2V0Um93RGF0YShqc29uKVxuICBvcHRpb25zLnJvd0RhdGEgPSBqc29uXG59XG5cbi8qKlxuICogVXBkYXRlIHRoZSBncmlkIHdpdGggYSB0cmFuc2FjdGlvbiBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgIHRoZSBncmlkIGlkXG4gKiBAcGFyYW0ge09iamVjdH0gdHJhbnNhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3VwZGF0ZVJvd0RhdGEoaWQsIHRyYW5zYWN0aW9uLCBiYXRjaFVwZGF0ZSkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuXG4gIGlmICh0cmFuc2FjdGlvbi5yZW1vdmUubGVuZ3RoKSB7XG4gICAgbGV0IGl0ZW1zID0gW11cblxuICAgIHRyYW5zYWN0aW9uLnJlbW92ZS5mb3JFYWNoKGluZGV4ID0+IHtcbiAgICAgIGl0ZW1zLnB1c2gob3B0aW9ucy5hcGkuZ2V0Um93Tm9kZShpbmRleCkuZGF0YSlcbiAgICB9KVxuXG4gICAgdHJhbnNhY3Rpb24ucmVtb3ZlID0gaXRlbXNcbiAgfVxuXG4gIGlmICghYmF0Y2hVcGRhdGUpIHtcbiAgICBvcHRpb25zLmFwaS51cGRhdGVSb3dEYXRhKHRyYW5zYWN0aW9uKVxuICB9IGVsc2Uge1xuICAgIG9wdGlvbnMuYXBpLmJhdGNoVXBkYXRlUm93RGF0YSh0cmFuc2FjdGlvbilcbiAgfVxufVxuXG4vKipcbiAqIFNldCB0aGUgaGVpZ2h0IG9mIGFsbCByb3dzXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkIGlkXG4gKiBAcGFyYW0ge051bWJlcn0gaGVpZ2h0IHRoZSByb3cgaGVpZ2h0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRSb3dzSGVpZ2h0KGlkLCBoZWlnaHQpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcbiAgY29uc3QgYXBpID0gb3B0aW9ucy5hcGlcblxuICBhcGkuZm9yRWFjaE5vZGUocm93ID0+IHtcbiAgICByb3cuc2V0Um93SGVpZ2h0KGhlaWdodClcbiAgfSlcblxuICBhcGkub25Sb3dIZWlnaHRDaGFuZ2VkKClcbn1cblxuLyoqXG4gKiBTZXQgdGhlIGdpdmVuIHJvdyBoZWlnaHRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQgaWRcbiAqIEBwYXJhbSB7TnVtYmVyfFN0cmluZ30gaW5kZXggdGhlIHJvdyBpbmRleCBvciBrZXlcbiAqIEBwYXJhbSB7TnVtYmVyfSBoZWlnaHQgdGhlIG5ldyBoZWlnaHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3NldFJvd0hlaWdodChpZCwgaW5kZXgsIGhlaWdodCkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuICBjb25zdCBhcGkgPSBvcHRpb25zLmFwaVxuICBjb25zdCByb3cgPSBhcGkuZ2V0Um93Tm9kZShpbmRleCkgfHwgYXBpLmdldERpc3BsYXllZFJvd0F0SW5kZXgoaW5kZXgpXG5cbiAgaWYgKHJvdykge1xuICAgIHJvdy5zZXRSb3dIZWlnaHQoaGVpZ2h0KVxuICAgIG9wdGlvbnMuYXBpLm9uUm93SGVpZ2h0Q2hhbmdlZCgpXG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS53YXJuKGBGYWlsZWQgdG8gc2V0IGhlaWdodCBmb3Igcm93ICR7aW5kZXh9LiBSb3cgY2Fubm90IGJlIGZvdW5kYClcbiAgfVxufVxuXG4vKipcbiAqIFJlc2V0IHRoZSByb3cgaGVpZ2h0XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkICB0aGUgZ3JpZCBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfcmVzZXRSb3dIZWlnaHRzKGlkKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLnJlc2V0Um93SGVpZ2h0cygpXG59XG5cbi8qKlxuICogU2VsZWN0IHJvdyBvciBtb3JlIGJhc2VkIG9uIHRoZSByb3cgaWQgb3IgaW5kZXhcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtBcnJheX0gcm93cyBhbiBhcnJheSBvZiByb3cga2V5cyBhbmQgaW5kZXhlcyB0byBzZWxlY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3NldFNlbGVjdGVkUm93cyhpZCwgcm93cykge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuICBjb25zdCBhcGkgPSBvcHRpb25zLmFwaVxuXG4gIGFwaS5mb3JFYWNoTm9kZUFmdGVyRmlsdGVyQW5kU29ydChub2RlID0+IHtcbiAgICBpZiAoXG4gICAgICByb3dzLmluZGV4T2YoU3RyaW5nKG5vZGUucm93SW5kZXgpKSA+IC0xIHx8XG4gICAgICByb3dzLmluZGV4T2YoU3RyaW5nKG5vZGUuaWQpKSA+IC0xXG4gICAgKSB7XG4gICAgICBub2RlLnNldFNlbGVjdGVkKHRydWUpXG4gICAgICBub2RlLmV4cGFuZGVkID0gdHJ1ZVxuICAgIH1cbiAgfSlcblxuICBhcGkub25Hcm91cEV4cGFuZGVkT3JDb2xsYXBzZWQoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2VsZWN0QWxsKGlkLCBmaWx0ZXJlZCkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuXG4gIGlmICgxID09PSBmaWx0ZXJlZCkge1xuICAgIG9wdGlvbnMuYXBpLnNlbGVjdEFsbEZpbHRlcmVkKClcbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zLmFwaS5zZWxlY3RBbGwoKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnd19kZXNlbGVjdEFsbChpZCwgZmlsdGVyZWQpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcblxuICBpZiAoMSA9PT0gZmlsdGVyZWQpIHtcbiAgICBvcHRpb25zLmFwaS5kZXNlbGVjdEFsbEZpbHRlcmVkKClcbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zLmFwaS5kZXNlbGVjdEFsbCgpXG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgcm93c1xuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBpZCBncmlkJ3MgaWRcbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfSAgc2VsZWN0ZWQgcm93cyBhcyBKU09OXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19nZXRTZWxlY3RlZFJvd3MoaWQpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcbiAgY29uc3Qgbm9kZXMgPSBvcHRpb25zLmFwaS5nZXRTZWxlY3RlZE5vZGVzKClcbiAgbGV0IHBhcnNlZCA9IFtdXG5cbiAgbm9kZXMuZm9yRWFjaChub2RlID0+IHtcbiAgICBwYXJzZWQucHVzaChnd19wYXJzZU5vZGUobm9kZSwgb3B0aW9ucy5jb250ZXh0KSlcbiAgfSlcblxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocGFyc2VkKVxufVxuXG4vKipcbiAqIEdldCB0aGUgbGFzdCBzZWxlY3RlZCByb3dcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgZ3JpZCdzIGlkXG4gKlxuICogQHJldHVybnMge1N0cmluZ30gc2VsZWN0ZWQgcm93IGFzIEpTT05cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldFNlbGVjdGVkUm93KGlkKSB7XG4gIGNvbnN0IHJvd3MgPSBKU09OLnBhcnNlKGd3X2dldFNlbGVjdGVkUm93cyhpZCkpXG5cbiAgaWYgKHJvd3MubGVuZ3RoKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJvd3Nbcm93cy5sZW5ndGggLSAxXSlcbiAgfVxuXG4gIHJldHVybiAnJ1xufVxuXG4vKipcbiAqIEdldCB0aGUgcm93IGJ5IGl0cyBpZCBvciBpbmRleFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gaW5kZXhcbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHJvdyBhcyBKU09OXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19nZXRSb3coaWQsIGluZGV4KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShcbiAgICBnd19wYXJzZU5vZGUob3B0aW9ucy5hcGkuZ2V0Um93Tm9kZShpbmRleCksIG9wdGlvbnMuY29udGV4dClcbiAgKVxufVxuXG4vKipcbiAqIEdldCByb3dzIGZyb20gdGhlIGdyaWRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtTdHJpbmd9IHBoYXNlIFRoZSByb3dzIHBoYXNlXG4gKiBAcGFyYW0ge1N0cmluZ30gZmlsdGVyRXhwcmVzc2lvbiBBIGZpbHRlciBleHByZXNzaW9uXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSBKc29uIHN0cmluZ2lmaWVkIGFycmF5IG9mIHJvd3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldFJvd3MoaWQsIHBoYXNlLCBmaWx0ZXJFeHByZXNzaW9uKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG4gIGNvbnN0IHBhcnNlZCA9IFtdXG5cbiAgb3B0aW9ucy5hcGlbcGhhc2VdKG5vZGUgPT4ge1xuICAgIGlmICghbm9kZS5ncm91cCkge1xuICAgICAgaWYgKGZpbHRlckV4cHJlc3Npb24pIHtcbiAgICAgICAgY29uc3QgY2FuUHJvY2VzcyA9IGd3X2V4ZWN1dGVFeHByZXNzaW9uKGZpbHRlckV4cHJlc3Npb24sIHtcbiAgICAgICAgICB2YWx1ZTogbm9kZS5kYXRhLFxuICAgICAgICAgIGNvbnRleHQ6IG9wdGlvbnMuY29udGV4dCxcbiAgICAgICAgICBvbGRWYWx1ZTogbnVsbCxcbiAgICAgICAgICBuZXdWYWx1ZTogbnVsbCxcbiAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgIGRhdGE6IG5vZGUuZGF0YSxcbiAgICAgICAgICBjb2xEZWY6IG51bGwsXG4gICAgICAgICAgcm93SW5kZXg6IG5vZGUucm93SW5kZXgsXG4gICAgICAgICAgYXBpOiBub2RlLmdyaWRBcGksXG4gICAgICAgICAgY29sdW1uQXBpOiBub2RlLmNvbHVtbkFwaSxcbiAgICAgICAgICBnZXRWYWx1ZTogKCkgPT4gbm9kZS5kYXRhLFxuICAgICAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgICAgICBjb2x1bW5Hcm91cDpcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgICAgIG5vZGUuaGFzT3duUHJvcGVydHkoJ3BhcmVudCcpICYmIG5vZGUucGFyZW50Lmhhc093blByb3BlcnR5KCdrZXknKVxuICAgICAgICAgICAgICA/IG5vZGUucGFyZW50LmtleVxuICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChjYW5Qcm9jZXNzKSB7XG4gICAgICAgICAgcGFyc2VkLnB1c2goZ3dfcGFyc2VOb2RlKG5vZGUsIG9wdGlvbnMuY29udGV4dCkpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZC5wdXNoKGd3X3BhcnNlTm9kZShub2RlLCBvcHRpb25zLmNvbnRleHQpKVxuICAgICAgfVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocGFyc2VkKVxufVxuXG4vKipcbiAqIEdldHMgdGhlIGdyaWQgdG8gcmVtb3ZlIGEgcm93IGZyb20gdGhlIERPTSBhbmQgcmVjcmVhdGUgaXQgYWdhaW4gZnJvbSBzY3JhdGNoLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBncmlkJ3MgaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3JlZHJhd1Jvd3MoaWQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkucmVkcmF3Um93cygpXG59XG5cbi8qKlxuICogUGluIGFuIGFycmF5IG9mIHRvdyB0byB0aGUgdG9wIG9mIHRoZSBncmlkXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7QXJyYXl9IGRhdGEgYXJyYXkgb2Ygcm93c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0UGlubmVkVG9wUm93RGF0YShpZCwgZGF0YSkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5zZXRQaW5uZWRUb3BSb3dEYXRhKGRhdGEpXG59XG5cbi8qKlxuICogUGluIGFuIGFycmF5IG9mIHRvdyB0byB0aGUgYm90dG9tIG9mIHRoZSBncmlkXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7QXJyYXl9IGRhdGEgYXJyYXkgb2Ygcm93c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0UGlubmVkQm90dG9tUm93RGF0YShpZCwgZGF0YSkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5zZXRQaW5uZWRCb3R0b21Sb3dEYXRhKGRhdGEpXG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgKi9cbi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfZ2V0R3JpZCwgZ3dfdXVpZCB9IGZyb20gJ2FwaS91dGlsaXRpZXMnXG5pbXBvcnQgeyBnd19wYXJzZUFkZENlbGxSYW5nZSB9IGZyb20gJ2FwaS9jZWxscydcblxuY29uc3QgeyBkZWVwUGFyc2VKc29uIH0gPSByZXF1aXJlKCdkZWVwLXBhcnNlLWpzb24nKVxuXG4vKipcbiAqIFRoZSBhcnJheSBjb250YWlucyByZWZlcmVuY2VzIHRvIGNyZWF0ZWQgY2hhcnRzIGZyb20gQkJqLlxuICogRXZlcnkgcmVmZXJlbmNlIGlzIGEgQ2hhcnRSZWYgb2JqZWN0IHdoaWNoIHByb3ZpZGVzIHRoZSBhcHBsaWNhdGlvbiB3aXRoIHRoZVxuICogZGVzdHJveUNoYXJ0KCkgbWV0aG9kIHRoYXQgaXMgcmVxdWlyZWQgd2hlbiB0aGUgYXBwbGljYXRpb24gd2FudHMgdG8gZGlzcG9zZSB0aGUgY2hhcnQuXG4gKi9cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGNoYXJ0IHRvb2xiYXIgaXRlbXMgZGVmaW5lZCBpbiB0aGUgZ3JpZCdzIGNvbnRleHRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKiBAcmV0dXJucyB7QXJyYXl9IGFycmF5IG9mIHN1cHBvcnRlZCBjaGFydCBpdGVtc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfZ2V0Q2hhcnRUb29sYmFySXRlbXMocGFyYW1zKSB7XG4gIHJldHVybiAoXG4gICAgcGFyYW1zLmFwaS5ncmlkT3B0aW9uc1dyYXBwZXIuZ3JpZE9wdGlvbnMuY29udGV4dC5jaGFydFRvb2xiYXJJdGVtcyB8fCBbXVxuICApXG59XG5cbi8qKlxuICogQWRkIG5ldyBjaGFydCByYW5nZVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSByYW5nZSAgYm91bmRlZCBvciB1bmJvdW5kZWQgcmFuZ2UgbW9kZWxcbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IGEgdW5pcXVlIGlkIGZvciB0aGUgZ2VuZXJhdGUgY2hhcnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2FkZENoYXJ0UmFuZ2UoaWQsIHJhbmdlKSB7XG4gIGNvbnN0IGdyaWQgPSBnd19nZXRHcmlkKGlkKVxuICBjb25zdCBvcHRpb25zID0gZ3JpZC5vcHRpb25zXG4gIGNvbnN0IHByID0gZGVlcFBhcnNlSnNvbihKU09OLnN0cmluZ2lmeShyYW5nZSkpXG5cbiAgcHIuY2VsbFJhbmdlID0gZ3dfcGFyc2VBZGRDZWxsUmFuZ2Uob3B0aW9ucywgcHIuY2VsbFJhbmdlKVxuXG4gIGNvbnN0IHJlZiA9IG9wdGlvbnMuYXBpLmNyZWF0ZVJhbmdlQ2hhcnQocHIpXG4gIGNvbnN0IHV1aWQgPSBnd191dWlkKClcblxuICBncmlkLmNyZWF0ZWRfY2hhcnRzID0gZ3JpZC5jcmVhdGVkX2NoYXJ0cyB8fCB7fVxuICBncmlkLmNyZWF0ZWRfY2hhcnRzW3V1aWRdID0gcmVmXG5cbiAgcmV0dXJuIHV1aWRcbn1cblxuLyoqXG4gKiBEZXN0cm95IGNyZWF0ZWQgY2hhcnRzXG4gKlxuICogRGVzdHJveSBhbHJlYWR5IGNyZWF0ZWQgY2hhcnQgYnkgaWQgb3IgYWxsIGNyZWF0ZWQgY2hhcnRzXG4gKiB3aGVuIHRoZSBgdXVpZGAgaXMgb21pdHRlZC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gdXVpZCBUaGUgY2hhcnQncyBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfZGVzdHJveUNoYXJ0KGlkLCB1dWlkKSB7XG4gIGNvbnN0IGdyaWQgPSBnd19nZXRHcmlkKGlkKVxuXG4gIGlmICh1dWlkKSB7XG4gICAgaWYgKFxuICAgICAgZ3JpZC5oYXNPd25Qcm9wZXJ0eSgnY3JlYXRlZF9jaGFydHMnKSAmJlxuICAgICAgZ3JpZC5jcmVhdGVkX2NoYXJ0cy5oYXNPd25Qcm9wZXJ0eSh1dWlkKVxuICAgICkge1xuICAgICAgZ3JpZC5jcmVhdGVkX2NoYXJ0c1t1dWlkXS5kZXN0cm95Q2hhcnQoKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoZ3JpZC5oYXNPd25Qcm9wZXJ0eSgnY3JlYXRlZF9jaGFydHMnKSkge1xuICAgICAgZm9yIChjb25zdCBpIGluIGdyaWQuY3JlYXRlZF9jaGFydHMpIHtcbiAgICAgICAgaWYgKGdyaWQuY3JlYXRlZF9jaGFydHMuaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgICBjb25zdCBjaGFydCA9IGdyaWQuY3JlYXRlZF9jaGFydHNbaV1cbiAgICAgICAgICBjaGFydC5kZXN0cm95Q2hhcnQoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGd3X2dldEdyaWQgfSBmcm9tICcuL3V0aWxpdGllcydcbmltcG9ydCB7IGd3X3BhcnNlTm9kZSB9IGZyb20gJ2V2ZW50cy91dGlsaXRpZXMnXG5cbmNvbnN0IHsgZGVlcFBhcnNlSnNvbiB9ID0gcmVxdWlyZSgnZGVlcC1wYXJzZS1qc29uJylcblxuLyoqXG4gKiBTdGFydCBjZWxsIGVkaXRpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtTdHJpbmd8bnVtYmVyfSByb3cgVGhlIHJvdyBpbmRleCBvciBrZXlcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb2xLZXkgVGhlIGNvbHVtbidzIGtleVxuICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSBrZXlQcmVzcyAgS2V5IHByZXNzXG4gKiBAcGFyYW0ge1N0cmluZ30gY2hhclByZXNzXG4gKiBAcGFyYW0ge1N0cmluZ30gcm93UGlubmVkIFNldCB0byAndG9wJyBvciAnYm90dG9tJyB0byBzdGFydGVkIGVkaXRpbmcgYSBwaW5uZWQgcm93XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19zdGFydEVkaXRpbmdDZWxsKFxuICBpZCxcbiAgcm93LFxuICBjb2xLZXksXG4gIGtleVByZXNzLFxuICBjaGFyUHJlc3MsXG4gIHJvd1Bpbm5lZFxuKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG4gIGNvbnN0IGFwaSA9IG9wdGlvbnMuYXBpXG4gIGNvbnN0IG5vZGUgPSBhcGkuZ2V0Um93Tm9kZShyb3cpIHx8IGFwaS5nZXREaXNwbGF5ZWRSb3dBdEluZGV4KHJvdylcblxuICBvcHRpb25zLmFwaS5zdGFydEVkaXRpbmdDZWxsKHtcbiAgICByb3dJbmRleDogbm9kZS5yb3dJbmRleCxcbiAgICBrZXlQcmVzczogTnVtYmVyKGtleVByZXNzKSxcbiAgICBjb2xLZXksXG4gICAgY2hhclByZXNzLFxuICAgIHJvd1Bpbm5lZCxcbiAgfSlcbn1cblxuLyoqXG4gKiBTdG9wIGNlbGwgZWRpdGluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGNhbmNlbCB3aGVuIHRydWUgY2FuY2VsIGVkaXRzICwgc2F2ZSBlZGl0cyBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3N0b3BFZGl0aW5nKGlkLCBjYW5jZWwpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkuc3RvcEVkaXRpbmcoY2FuY2VsKVxufVxuXG4vKipcbiAqIE5hdmlnYXRlcyB0aGUgZ3JpZCBmb2N1cyB0byB0aGUgbmV4dCBjZWxsLCBhcyBpZiB0YWJiaW5nLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCAgdGhlIGdyaWQgaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3RhYlRvTmV4dENlbGwoaWQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkudGFiVG9OZXh0Q2VsbCgpXG59XG5cbi8qKlxuICogTmF2aWdhdGVzIHRoZSBncmlkIGZvY3VzIHRvIHRoZSBwcmV2aW91cyBjZWxsLCBhcyBpZiBzaGlmdC10YWJiaW5nLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCAgdGhlIGdyaWQgaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3RhYlRvUHJldmlvdXNDZWxsKGlkKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLnRhYlRvUHJldmlvdXNDZWxsKClcbn1cblxuLyoqXG4gKiBTZXQgRm9jdXMgb24gdGhlIGdpdmVuIHJvdyBhbmQgY29sdW1uXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gcm93IFRoZSByb3cncyBpbmRleC9pZFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbHVtbiBUaGUgY29sdW1uIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gZmxvYXRpbmcgbnVsbCwgJ3RvcCcsIG9yICdib3R0b20nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0Rm9jdXNlZENlbGwoaWQsIHJvdywgY29sdW1uLCBmbG9hdGluZyA9IG51bGwpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcblxuICAvLyBpZ25vcmUgZm9jdXMgY2FsbHMgaWYgZWRpdGluZ1xuICBpZiAob3B0aW9ucy5hcGkuZ2V0RWRpdGluZ0NlbGxzKCkubGVuZ3RoID4gMCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgbGV0IHIsIGMsIGZcbiAgaWYgKHJvdyA9PSAtMSkge1xuICAgIC8vIHRyeSB0byByZXRhaW4gdGhlIGZvY3VzXG4gICAgY29uc3QgbGFzdEZvY3VzZWRDZWxsID0gb3B0aW9ucy5hcGkuZ2V0Rm9jdXNlZENlbGwoKVxuXG4gICAgaWYgKGxhc3RGb2N1c2VkQ2VsbCkge1xuICAgICAgciA9IGxhc3RGb2N1c2VkQ2VsbC5yb3dJbmRleFxuICAgICAgYyA9IGxhc3RGb2N1c2VkQ2VsbC5jb2x1bW4uY29sSWRcbiAgICAgIGYgPSBsYXN0Rm9jdXNlZENlbGwucm93UGlubmVkXG4gICAgfSBlbHNlIHtcbiAgICAgIHIgPSAwXG4gICAgICBjID0gb3B0aW9ucy5jb2x1bW5BcGkuZ2V0QWxsR3JpZENvbHVtbnMoKVswXS5jb2xJZFxuICAgICAgZiA9IGZsb2F0aW5nXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHIgPSAhcm93XG4gICAgICA/IDBcbiAgICAgIDogTnVtYmVyLmlzSW50ZWdlcigrcm93KVxuICAgICAgPyArcm93XG4gICAgICA6IG9wdGlvbnMuYXBpLmdldFJvd05vZGUocm93KS5yb3dJbmRleFxuICAgIGMgPSBjb2x1bW4gPyBjb2x1bW4gOiBvcHRpb25zLmNvbHVtbkFwaS5nZXRBbGxHcmlkQ29sdW1ucygpWzBdLmNvbElkXG4gICAgZiA9IGZsb2F0aW5nXG4gIH1cblxuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5zZXRGb2N1c2VkQ2VsbChyLCBjLCBmKVxufVxuXG4vKipcbiAqIEdldCBSYW5nZSBTZWxlY3Rpb25zXG4gKlxuICogVGhlIG1ldGhvZCB3aWxsIGNyZWF0ZSBhIHJhbmdlIGpzb24gbW9kZWwgZm9yIGVhY2ggcmFuZ2Ugd2hpY2ggY2FuIGJlIHBhcnNlZCBpbiBCQmogc2lkZS5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgZ3JpZCdzIGlkXG4gKlxuICogQHJldHVybnMge1N0cmluZ30gc2VsZWN0ZWQgcmFuZ2VzIGFzIEpTT05cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldFJhbmdlU2VsZWN0aW9ucyhpZCkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuICBjb25zdCBjb250ZXh0ID0gb3B0aW9ucy5jb250ZXh0XG4gIGNvbnN0IGFwaSA9IG9wdGlvbnMuYXBpXG4gIGNvbnN0IHJhbmdlcyA9IGFwaS5nZXRDZWxsUmFuZ2VzKClcbiAgY29uc3QgbW9kZWwgPSBhcGkuZ2V0TW9kZWwoKVxuICBsZXQgcmVzdWx0ID0gW11cblxuICByYW5nZXMuZm9yRWFjaChyYW5nZSA9PiB7XG4gICAgLy8gY29uc3Qgc3RhcnQgPSBnd19wYXJzZU5vZGUobW9kZWwuZ2V0Um93KHJhbmdlLnN0YXJ0Um93LnJvd0luZGV4KSwgb3B0aW9ucy5jb250ZXh0KTtcbiAgICAvLyBjb25zdCBlbmQgPSBnd19wYXJzZU5vZGUobW9kZWwuZ2V0Um93KHJhbmdlLmVuZFJvdy5yb3dJbmRleCksIG9wdGlvbnMuY29udGV4dCk7XG5cbiAgICAvL2lmIChzdGFydCAhPT0gZmFsc2UgJiYgZW5kICE9PSBmYWxzZSkge1xuICAgIGNvbnN0IGNvbHVtbnMgPSByYW5nZS5jb2x1bW5zXG4gICAgICAucmVkdWNlKChhY2N1bXVsYXRvciwgY3VycmVudCkgPT4ge1xuICAgICAgICBpZiAoJ2FnLUdyaWQtQXV0b0NvbHVtbicgIT09IGN1cnJlbnQuY29sSWQpIHtcbiAgICAgICAgICBhY2N1bXVsYXRvci5wdXNoKGN1cnJlbnQuY29sSWQpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjdW11bGF0b3JcbiAgICAgIH0sIFtdKVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuXG4gICAgY29uc3Qgc3RhckluZGV4ID0gTWF0aC5taW4ocmFuZ2Uuc3RhcnRSb3cucm93SW5kZXgsIHJhbmdlLmVuZFJvdy5yb3dJbmRleClcbiAgICBjb25zdCBlbmRJbmRleCA9IE1hdGgubWF4KHJhbmdlLnN0YXJ0Um93LnJvd0luZGV4LCByYW5nZS5lbmRSb3cucm93SW5kZXgpXG4gICAgY29uc3Qgcm93cyA9IFtdXG5cbiAgICBmb3IgKGxldCByb3dJbmRleCA9IHN0YXJJbmRleDsgcm93SW5kZXggPD0gZW5kSW5kZXg7IHJvd0luZGV4KyspIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBtb2RlbC5nZXRSb3cocm93SW5kZXgpXG4gICAgICBpZiAobm9kZSkge1xuICAgICAgICBjb25zdCBwYXJzZWROb2RlID0gZ3dfcGFyc2VOb2RlKG5vZGUsIGNvbnRleHQpXG4gICAgICAgIGlmIChwYXJzZWROb2RlKSB7XG4gICAgICAgICAgcm93cy5wdXNoKHBhcnNlZE5vZGUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocm93cy5sZW5ndGggJiYgY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHsgcjogcm93cywgYzogY29sdW1ucyB9KVxuICAgIH1cbiAgICAvL31cbiAgfSlcblxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVzdWx0KVxufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBjZWxscyByYW5nZSBpbiBhIGZvcm1hdCB0aGUgZ3JpZCBjYW4gdW5kZXJzdGFuZCB3aGVuIGl0IGlzIHBhc3NlZFxuICogdG8gYGFwaS5hZGRDZWxsUmFuZ2VgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgVGhlIGdyaWQncyBvcHRpb25zXG4gKiBAcGFyYW0ge09iamVjdH0gcmFuZ2UgIGJvdW5kZWQgb3IgdW5ib3VuZGVkIHJhbmdlIG1vZGVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19wYXJzZUFkZENlbGxSYW5nZShvcHRpb25zLCByYW5nZSkge1xuICBjb25zdCBwciA9IGRlZXBQYXJzZUpzb24oSlNPTi5zdHJpbmdpZnkocmFuZ2UpKVxuICBjb25zdCBzdGFydCA9ICEocHIuc3RhcnQgfHwgbnVsbClcbiAgICA/IDBcbiAgICA6IE51bWJlci5pc0ludGVnZXIoK3ByLnN0YXJ0KVxuICAgID8gK3ByLnN0YXJ0XG4gICAgOiBvcHRpb25zLmFwaS5nZXRSb3dOb2RlKHByLnN0YXJ0KS5yb3dJbmRleFxuICBjb25zdCBlbmQgPSAhKHByLmVuZCB8fCBudWxsKVxuICAgID8gb3B0aW9ucy5yb3dEYXRhLmxlbmd0aCAtIDFcbiAgICA6IE51bWJlci5pc0ludGVnZXIoK3ByLmVuZClcbiAgICA/ICtwci5lbmRcbiAgICA6IG9wdGlvbnMuYXBpLmdldFJvd05vZGUocHIuZW5kKS5yb3dJbmRleFxuXG4gIHJldHVybiB7XG4gICAgcm93U3RhcnRJbmRleDogTWF0aC5hYnMoc3RhcnQpLFxuICAgIHJvd0VuZEluZGV4OiBNYXRoLmFicyhlbmQpLFxuICAgIGNvbHVtbnM6IHByLmNvbHVtbnMsXG4gIH1cbn1cbi8qKlxuICogQWRkIG5ldyBjZWxsIHJhbmdlXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGlkIGdyaWQncyBpZFxuICogQHBhcmFtIHtPYmplY3R9IHJhbmdlICBib3VuZGVkIG9yIHVuYm91bmRlZCByYW5nZSBtb2RlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfYWRkQ2VsbFJhbmdlKGlkLCByYW5nZSkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuICBvcHRpb25zLmFwaS5hZGRDZWxsUmFuZ2UoZ3dfcGFyc2VBZGRDZWxsUmFuZ2Uob3B0aW9ucywgcmFuZ2UpKVxufVxuXG4vKipcbiAqIENsZWFycyB0aGUgc2VsZWN0ZWQgcmFuZ2UuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGlkIGdyaWQncyBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfY2xlYXJSYW5nZVNlbGVjdGlvbihpZCkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5jbGVhclJhbmdlU2VsZWN0aW9uKClcbn1cbiIsImltcG9ydCBkZWZpbmVQcm9wZXJ0eSBmcm9tICcuL19kZWZpbmVQcm9wZXJ0eS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcbiAqIHZhbHVlIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgZGVmaW5lUHJvcGVydHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuICAgICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgICAnZW51bWVyYWJsZSc6IHRydWUsXG4gICAgICAndmFsdWUnOiB2YWx1ZSxcbiAgICAgICd3cml0YWJsZSc6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VBc3NpZ25WYWx1ZTtcbiIsImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZVByb3BlcnR5O1xuIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzRnVuY3Rpb247XG4iLCIvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG5leHBvcnQgZGVmYXVsdCBmcmVlR2xvYmFsO1xuIiwiaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuaW1wb3J0IG92ZXJSZXN0IGZyb20gJy4vX292ZXJSZXN0LmpzJztcbmltcG9ydCBzZXRUb1N0cmluZyBmcm9tICcuL19zZXRUb1N0cmluZy5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVzdGAgd2hpY2ggZG9lc24ndCB2YWxpZGF0ZSBvciBjb2VyY2UgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VSZXN0KGZ1bmMsIHN0YXJ0KSB7XG4gIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCBzdGFydCwgaWRlbnRpdHkpLCBmdW5jICsgJycpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlUmVzdDtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKlxuICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlkZW50aXR5O1xuIiwiLyoqXG4gKiBBIGZhc3RlciBhbHRlcm5hdGl2ZSB0byBgRnVuY3Rpb24jYXBwbHlgLCB0aGlzIGZ1bmN0aW9uIGludm9rZXMgYGZ1bmNgXG4gKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2AgYW5kIHRoZSBhcmd1bWVudHMgb2YgYGFyZ3NgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBmdW5jYC5cbiAqL1xuZnVuY3Rpb24gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncykge1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICB9XG4gIHJldHVybiBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcHBseTtcbiIsImltcG9ydCBlcSBmcm9tICcuL2VxLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCBpc0luZGV4IGZyb20gJy4vX2lzSW5kZXguanMnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSB2YWx1ZSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gIGlmICh0eXBlID09ICdudW1iZXInXG4gICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxuICAgICAgKSB7XG4gICAgcmV0dXJuIGVxKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzSXRlcmF0ZWVDYWxsO1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTGVuZ3RoKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0xlbmd0aDtcbiIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovXG52YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXGQqKSQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBpbmRleC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuXG4gIHJldHVybiAhIWxlbmd0aCAmJlxuICAgICh0eXBlID09ICdudW1iZXInIHx8XG4gICAgICAodHlwZSAhPSAnc3ltYm9sJyAmJiByZUlzVWludC50ZXN0KHZhbHVlKSkpICYmXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNJbmRleDtcbiIsImltcG9ydCBiYXNlVGltZXMgZnJvbSAnLi9fYmFzZVRpbWVzLmpzJztcbmltcG9ydCBpc0FyZ3VtZW50cyBmcm9tICcuL2lzQXJndW1lbnRzLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNCdWZmZXIgZnJvbSAnLi9pc0J1ZmZlci5qcyc7XG5pbXBvcnQgaXNJbmRleCBmcm9tICcuL19pc0luZGV4LmpzJztcbmltcG9ydCBpc1R5cGVkQXJyYXkgZnJvbSAnLi9pc1R5cGVkQXJyYXkuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluaGVyaXRlZCBTcGVjaWZ5IHJldHVybmluZyBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZXMuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBhcnJheUxpa2VLZXlzKHZhbHVlLCBpbmhlcml0ZWQpIHtcbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSksXG4gICAgICBpc0FyZyA9ICFpc0FyciAmJiBpc0FyZ3VtZW50cyh2YWx1ZSksXG4gICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgIWlzQXJnICYmIGlzQnVmZmVyKHZhbHVlKSxcbiAgICAgIGlzVHlwZSA9ICFpc0FyciAmJiAhaXNBcmcgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXkodmFsdWUpLFxuICAgICAgc2tpcEluZGV4ZXMgPSBpc0FyciB8fCBpc0FyZyB8fCBpc0J1ZmYgfHwgaXNUeXBlLFxuICAgICAgcmVzdWx0ID0gc2tpcEluZGV4ZXMgPyBiYXNlVGltZXModmFsdWUubGVuZ3RoLCBTdHJpbmcpIDogW10sXG4gICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmICgoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpICYmXG4gICAgICAgICEoc2tpcEluZGV4ZXMgJiYgKFxuICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXG4gICAgICAgICAgIGtleSA9PSAnbGVuZ3RoJyB8fFxuICAgICAgICAgICAvLyBOb2RlLmpzIDAuMTAgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gYnVmZmVycy5cbiAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XG4gICAgICAgICAgIC8vIFBoYW50b21KUyAyIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cy5cbiAgICAgICAgICAgKGlzVHlwZSAmJiAoa2V5ID09ICdidWZmZXInIHx8IGtleSA9PSAnYnl0ZUxlbmd0aCcgfHwga2V5ID09ICdieXRlT2Zmc2V0JykpIHx8XG4gICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cbiAgICAgICAgICAgaXNJbmRleChrZXksIGxlbmd0aClcbiAgICAgICAgKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5TGlrZUtleXM7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxuZXhwb3J0IGRlZmF1bHQgaXNBcnJheTtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNQcm90b3R5cGU7XG4iLCJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSAnLi9pc1BsYWluT2JqZWN0LmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGRvbUV4Y1RhZyA9ICdbb2JqZWN0IERPTUV4Y2VwdGlvbl0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhbiBgRXJyb3JgLCBgRXZhbEVycm9yYCwgYFJhbmdlRXJyb3JgLCBgUmVmZXJlbmNlRXJyb3JgLFxuICogYFN5bnRheEVycm9yYCwgYFR5cGVFcnJvcmAsIG9yIGBVUklFcnJvcmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGVycm9yIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRXJyb3IobmV3IEVycm9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRXJyb3IoRXJyb3IpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNFcnJvcih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICByZXR1cm4gdGFnID09IGVycm9yVGFnIHx8IHRhZyA9PSBkb21FeGNUYWcgfHxcbiAgICAodHlwZW9mIHZhbHVlLm1lc3NhZ2UgPT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlLm5hbWUgPT0gJ3N0cmluZycgJiYgIWlzUGxhaW5PYmplY3QodmFsdWUpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNFcnJvcjtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIHVuYXJ5IGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnQgdHJhbnNmb3JtZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xuICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBvdmVyQXJnO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TWFwKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlNYXA7XG4iLCIvKiogVXNlZCB0byBtYXRjaCB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLiAqL1xudmFyIHJlSW50ZXJwb2xhdGUgPSAvPCU9KFtcXHNcXFNdKz8pJT4vZztcblxuZXhwb3J0IGRlZmF1bHQgcmVJbnRlcnBvbGF0ZTtcbiIsImltcG9ydCBiYXNlVG9TdHJpbmcgZnJvbSAnLi9fYmFzZVRvU3RyaW5nLmpzJztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b1N0cmluZztcbiIsIi8qXG5cdE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG5cdEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG5cbnZhciBzdHlsZXNJbkRvbSA9IHt9O1xuXG52YXJcdG1lbW9pemUgPSBmdW5jdGlvbiAoZm4pIHtcblx0dmFyIG1lbW87XG5cblx0cmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0XHRpZiAodHlwZW9mIG1lbW8gPT09IFwidW5kZWZpbmVkXCIpIG1lbW8gPSBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdHJldHVybiBtZW1vO1xuXHR9O1xufTtcblxudmFyIGlzT2xkSUUgPSBtZW1vaXplKGZ1bmN0aW9uICgpIHtcblx0Ly8gVGVzdCBmb3IgSUUgPD0gOSBhcyBwcm9wb3NlZCBieSBCcm93c2VyaGFja3Ncblx0Ly8gQHNlZSBodHRwOi8vYnJvd3NlcmhhY2tzLmNvbS8jaGFjay1lNzFkODY5MmY2NTMzNDE3M2ZlZTcxNWMyMjJjYjgwNVxuXHQvLyBUZXN0cyBmb3IgZXhpc3RlbmNlIG9mIHN0YW5kYXJkIGdsb2JhbHMgaXMgdG8gYWxsb3cgc3R5bGUtbG9hZGVyXG5cdC8vIHRvIG9wZXJhdGUgY29ycmVjdGx5IGludG8gbm9uLXN0YW5kYXJkIGVudmlyb25tZW50c1xuXHQvLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrLWNvbnRyaWIvc3R5bGUtbG9hZGVyL2lzc3Vlcy8xNzdcblx0cmV0dXJuIHdpbmRvdyAmJiBkb2N1bWVudCAmJiBkb2N1bWVudC5hbGwgJiYgIXdpbmRvdy5hdG9iO1xufSk7XG5cbnZhciBnZXRUYXJnZXQgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7XG59O1xuXG52YXIgZ2V0RWxlbWVudCA9IChmdW5jdGlvbiAoZm4pIHtcblx0dmFyIG1lbW8gPSB7fTtcblxuXHRyZXR1cm4gZnVuY3Rpb24odGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgcGFzc2luZyBmdW5jdGlvbiBpbiBvcHRpb25zLCB0aGVuIHVzZSBpdCBmb3IgcmVzb2x2ZSBcImhlYWRcIiBlbGVtZW50LlxuICAgICAgICAgICAgICAgIC8vIFVzZWZ1bCBmb3IgU2hhZG93IFJvb3Qgc3R5bGUgaS5lXG4gICAgICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgICAgIC8vICAgaW5zZXJ0SW50bzogZnVuY3Rpb24gKCkgeyByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNmb29cIikuc2hhZG93Um9vdCB9XG4gICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVtb1t0YXJnZXRdID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR2YXIgc3R5bGVUYXJnZXQgPSBnZXRUYXJnZXQuY2FsbCh0aGlzLCB0YXJnZXQpO1xuXHRcdFx0Ly8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcblx0XHRcdGlmICh3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQgJiYgc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHQvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuXHRcdFx0XHRcdC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG5cdFx0XHRcdFx0c3R5bGVUYXJnZXQgPSBzdHlsZVRhcmdldC5jb250ZW50RG9jdW1lbnQuaGVhZDtcblx0XHRcdFx0fSBjYXRjaChlKSB7XG5cdFx0XHRcdFx0c3R5bGVUYXJnZXQgPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRtZW1vW3RhcmdldF0gPSBzdHlsZVRhcmdldDtcblx0XHR9XG5cdFx0cmV0dXJuIG1lbW9bdGFyZ2V0XVxuXHR9O1xufSkoKTtcblxudmFyIHNpbmdsZXRvbiA9IG51bGw7XG52YXJcdHNpbmdsZXRvbkNvdW50ZXIgPSAwO1xudmFyXHRzdHlsZXNJbnNlcnRlZEF0VG9wID0gW107XG5cbnZhclx0Zml4VXJscyA9IHJlcXVpcmUoXCIuL3VybHNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obGlzdCwgb3B0aW9ucykge1xuXHRpZiAodHlwZW9mIERFQlVHICE9PSBcInVuZGVmaW5lZFwiICYmIERFQlVHKSB7XG5cdFx0aWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHN0eWxlLWxvYWRlciBjYW5ub3QgYmUgdXNlZCBpbiBhIG5vbi1icm93c2VyIGVudmlyb25tZW50XCIpO1xuXHR9XG5cblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0b3B0aW9ucy5hdHRycyA9IHR5cGVvZiBvcHRpb25zLmF0dHJzID09PSBcIm9iamVjdFwiID8gb3B0aW9ucy5hdHRycyA6IHt9O1xuXG5cdC8vIEZvcmNlIHNpbmdsZS10YWcgc29sdXRpb24gb24gSUU2LTksIHdoaWNoIGhhcyBhIGhhcmQgbGltaXQgb24gdGhlICMgb2YgPHN0eWxlPlxuXHQvLyB0YWdzIGl0IHdpbGwgYWxsb3cgb24gYSBwYWdlXG5cdGlmICghb3B0aW9ucy5zaW5nbGV0b24gJiYgdHlwZW9mIG9wdGlvbnMuc2luZ2xldG9uICE9PSBcImJvb2xlYW5cIikgb3B0aW9ucy5zaW5nbGV0b24gPSBpc09sZElFKCk7XG5cblx0Ly8gQnkgZGVmYXVsdCwgYWRkIDxzdHlsZT4gdGFncyB0byB0aGUgPGhlYWQ+IGVsZW1lbnRcbiAgICAgICAgaWYgKCFvcHRpb25zLmluc2VydEludG8pIG9wdGlvbnMuaW5zZXJ0SW50byA9IFwiaGVhZFwiO1xuXG5cdC8vIEJ5IGRlZmF1bHQsIGFkZCA8c3R5bGU+IHRhZ3MgdG8gdGhlIGJvdHRvbSBvZiB0aGUgdGFyZ2V0XG5cdGlmICghb3B0aW9ucy5pbnNlcnRBdCkgb3B0aW9ucy5pbnNlcnRBdCA9IFwiYm90dG9tXCI7XG5cblx0dmFyIHN0eWxlcyA9IGxpc3RUb1N0eWxlcyhsaXN0LCBvcHRpb25zKTtcblxuXHRhZGRTdHlsZXNUb0RvbShzdHlsZXMsIG9wdGlvbnMpO1xuXG5cdHJldHVybiBmdW5jdGlvbiB1cGRhdGUgKG5ld0xpc3QpIHtcblx0XHR2YXIgbWF5UmVtb3ZlID0gW107XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGl0ZW0gPSBzdHlsZXNbaV07XG5cdFx0XHR2YXIgZG9tU3R5bGUgPSBzdHlsZXNJbkRvbVtpdGVtLmlkXTtcblxuXHRcdFx0ZG9tU3R5bGUucmVmcy0tO1xuXHRcdFx0bWF5UmVtb3ZlLnB1c2goZG9tU3R5bGUpO1xuXHRcdH1cblxuXHRcdGlmKG5ld0xpc3QpIHtcblx0XHRcdHZhciBuZXdTdHlsZXMgPSBsaXN0VG9TdHlsZXMobmV3TGlzdCwgb3B0aW9ucyk7XG5cdFx0XHRhZGRTdHlsZXNUb0RvbShuZXdTdHlsZXMsIG9wdGlvbnMpO1xuXHRcdH1cblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbWF5UmVtb3ZlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgZG9tU3R5bGUgPSBtYXlSZW1vdmVbaV07XG5cblx0XHRcdGlmKGRvbVN0eWxlLnJlZnMgPT09IDApIHtcblx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBkb21TdHlsZS5wYXJ0cy5sZW5ndGg7IGorKykgZG9tU3R5bGUucGFydHNbal0oKTtcblxuXHRcdFx0XHRkZWxldGUgc3R5bGVzSW5Eb21bZG9tU3R5bGUuaWRdO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn07XG5cbmZ1bmN0aW9uIGFkZFN0eWxlc1RvRG9tIChzdHlsZXMsIG9wdGlvbnMpIHtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgaXRlbSA9IHN0eWxlc1tpXTtcblx0XHR2YXIgZG9tU3R5bGUgPSBzdHlsZXNJbkRvbVtpdGVtLmlkXTtcblxuXHRcdGlmKGRvbVN0eWxlKSB7XG5cdFx0XHRkb21TdHlsZS5yZWZzKys7XG5cblx0XHRcdGZvcih2YXIgaiA9IDA7IGogPCBkb21TdHlsZS5wYXJ0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRkb21TdHlsZS5wYXJ0c1tqXShpdGVtLnBhcnRzW2pdKTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yKDsgaiA8IGl0ZW0ucGFydHMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0ZG9tU3R5bGUucGFydHMucHVzaChhZGRTdHlsZShpdGVtLnBhcnRzW2pdLCBvcHRpb25zKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciBwYXJ0cyA9IFtdO1xuXG5cdFx0XHRmb3IodmFyIGogPSAwOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRwYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0sIG9wdGlvbnMpKTtcblx0XHRcdH1cblxuXHRcdFx0c3R5bGVzSW5Eb21baXRlbS5pZF0gPSB7aWQ6IGl0ZW0uaWQsIHJlZnM6IDEsIHBhcnRzOiBwYXJ0c307XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGxpc3RUb1N0eWxlcyAobGlzdCwgb3B0aW9ucykge1xuXHR2YXIgc3R5bGVzID0gW107XG5cdHZhciBuZXdTdHlsZXMgPSB7fTtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgaXRlbSA9IGxpc3RbaV07XG5cdFx0dmFyIGlkID0gb3B0aW9ucy5iYXNlID8gaXRlbVswXSArIG9wdGlvbnMuYmFzZSA6IGl0ZW1bMF07XG5cdFx0dmFyIGNzcyA9IGl0ZW1bMV07XG5cdFx0dmFyIG1lZGlhID0gaXRlbVsyXTtcblx0XHR2YXIgc291cmNlTWFwID0gaXRlbVszXTtcblx0XHR2YXIgcGFydCA9IHtjc3M6IGNzcywgbWVkaWE6IG1lZGlhLCBzb3VyY2VNYXA6IHNvdXJjZU1hcH07XG5cblx0XHRpZighbmV3U3R5bGVzW2lkXSkgc3R5bGVzLnB1c2gobmV3U3R5bGVzW2lkXSA9IHtpZDogaWQsIHBhcnRzOiBbcGFydF19KTtcblx0XHRlbHNlIG5ld1N0eWxlc1tpZF0ucGFydHMucHVzaChwYXJ0KTtcblx0fVxuXG5cdHJldHVybiBzdHlsZXM7XG59XG5cbmZ1bmN0aW9uIGluc2VydFN0eWxlRWxlbWVudCAob3B0aW9ucywgc3R5bGUpIHtcblx0dmFyIHRhcmdldCA9IGdldEVsZW1lbnQob3B0aW9ucy5pbnNlcnRJbnRvKVxuXG5cdGlmICghdGFyZ2V0KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnRJbnRvJyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG5cdH1cblxuXHR2YXIgbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3AgPSBzdHlsZXNJbnNlcnRlZEF0VG9wW3N0eWxlc0luc2VydGVkQXRUb3AubGVuZ3RoIC0gMV07XG5cblx0aWYgKG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwidG9wXCIpIHtcblx0XHRpZiAoIWxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wKSB7XG5cdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKHN0eWxlLCB0YXJnZXQuZmlyc3RDaGlsZCk7XG5cdFx0fSBlbHNlIGlmIChsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcC5uZXh0U2libGluZykge1xuXHRcdFx0dGFyZ2V0Lmluc2VydEJlZm9yZShzdHlsZSwgbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3AubmV4dFNpYmxpbmcpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuXHRcdH1cblx0XHRzdHlsZXNJbnNlcnRlZEF0VG9wLnB1c2goc3R5bGUpO1xuXHR9IGVsc2UgaWYgKG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwiYm90dG9tXCIpIHtcblx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zLmluc2VydEF0ID09PSBcIm9iamVjdFwiICYmIG9wdGlvbnMuaW5zZXJ0QXQuYmVmb3JlKSB7XG5cdFx0dmFyIG5leHRTaWJsaW5nID0gZ2V0RWxlbWVudChvcHRpb25zLmluc2VydEludG8gKyBcIiBcIiArIG9wdGlvbnMuaW5zZXJ0QXQuYmVmb3JlKTtcblx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBuZXh0U2libGluZyk7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiW1N0eWxlIExvYWRlcl1cXG5cXG4gSW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICdpbnNlcnRBdCcgKCdvcHRpb25zLmluc2VydEF0JykgZm91bmQuXFxuIE11c3QgYmUgJ3RvcCcsICdib3R0b20nLCBvciBPYmplY3QuXFxuIChodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay1jb250cmliL3N0eWxlLWxvYWRlciNpbnNlcnRhdClcXG5cIik7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50IChzdHlsZSkge1xuXHRpZiAoc3R5bGUucGFyZW50Tm9kZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXHRzdHlsZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlKTtcblxuXHR2YXIgaWR4ID0gc3R5bGVzSW5zZXJ0ZWRBdFRvcC5pbmRleE9mKHN0eWxlKTtcblx0aWYoaWR4ID49IDApIHtcblx0XHRzdHlsZXNJbnNlcnRlZEF0VG9wLnNwbGljZShpZHgsIDEpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0eWxlRWxlbWVudCAob3B0aW9ucykge1xuXHR2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG5cblx0b3B0aW9ucy5hdHRycy50eXBlID0gXCJ0ZXh0L2Nzc1wiO1xuXG5cdGFkZEF0dHJzKHN0eWxlLCBvcHRpb25zLmF0dHJzKTtcblx0aW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMsIHN0eWxlKTtcblxuXHRyZXR1cm4gc3R5bGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxpbmtFbGVtZW50IChvcHRpb25zKSB7XG5cdHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIik7XG5cblx0b3B0aW9ucy5hdHRycy50eXBlID0gXCJ0ZXh0L2Nzc1wiO1xuXHRvcHRpb25zLmF0dHJzLnJlbCA9IFwic3R5bGVzaGVldFwiO1xuXG5cdGFkZEF0dHJzKGxpbmssIG9wdGlvbnMuYXR0cnMpO1xuXHRpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucywgbGluayk7XG5cblx0cmV0dXJuIGxpbms7XG59XG5cbmZ1bmN0aW9uIGFkZEF0dHJzIChlbCwgYXR0cnMpIHtcblx0T2JqZWN0LmtleXMoYXR0cnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuXHRcdGVsLnNldEF0dHJpYnV0ZShrZXksIGF0dHJzW2tleV0pO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gYWRkU3R5bGUgKG9iaiwgb3B0aW9ucykge1xuXHR2YXIgc3R5bGUsIHVwZGF0ZSwgcmVtb3ZlLCByZXN1bHQ7XG5cblx0Ly8gSWYgYSB0cmFuc2Zvcm0gZnVuY3Rpb24gd2FzIGRlZmluZWQsIHJ1biBpdCBvbiB0aGUgY3NzXG5cdGlmIChvcHRpb25zLnRyYW5zZm9ybSAmJiBvYmouY3NzKSB7XG5cdCAgICByZXN1bHQgPSBvcHRpb25zLnRyYW5zZm9ybShvYmouY3NzKTtcblxuXHQgICAgaWYgKHJlc3VsdCkge1xuXHQgICAgXHQvLyBJZiB0cmFuc2Zvcm0gcmV0dXJucyBhIHZhbHVlLCB1c2UgdGhhdCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBjc3MuXG5cdCAgICBcdC8vIFRoaXMgYWxsb3dzIHJ1bm5pbmcgcnVudGltZSB0cmFuc2Zvcm1hdGlvbnMgb24gdGhlIGNzcy5cblx0ICAgIFx0b2JqLmNzcyA9IHJlc3VsdDtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdC8vIElmIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24gcmV0dXJucyBhIGZhbHN5IHZhbHVlLCBkb24ndCBhZGQgdGhpcyBjc3MuXG5cdCAgICBcdC8vIFRoaXMgYWxsb3dzIGNvbmRpdGlvbmFsIGxvYWRpbmcgb2YgY3NzXG5cdCAgICBcdHJldHVybiBmdW5jdGlvbigpIHtcblx0ICAgIFx0XHQvLyBub29wXG5cdCAgICBcdH07XG5cdCAgICB9XG5cdH1cblxuXHRpZiAob3B0aW9ucy5zaW5nbGV0b24pIHtcblx0XHR2YXIgc3R5bGVJbmRleCA9IHNpbmdsZXRvbkNvdW50ZXIrKztcblxuXHRcdHN0eWxlID0gc2luZ2xldG9uIHx8IChzaW5nbGV0b24gPSBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucykpO1xuXG5cdFx0dXBkYXRlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCBmYWxzZSk7XG5cdFx0cmVtb3ZlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCB0cnVlKTtcblxuXHR9IGVsc2UgaWYgKFxuXHRcdG9iai5zb3VyY2VNYXAgJiZcblx0XHR0eXBlb2YgVVJMID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgVVJMLmNyZWF0ZU9iamVjdFVSTCA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIFVSTC5yZXZva2VPYmplY3RVUkwgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBCbG9iID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiXG5cdCkge1xuXHRcdHN0eWxlID0gY3JlYXRlTGlua0VsZW1lbnQob3B0aW9ucyk7XG5cdFx0dXBkYXRlID0gdXBkYXRlTGluay5iaW5kKG51bGwsIHN0eWxlLCBvcHRpb25zKTtcblx0XHRyZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpO1xuXG5cdFx0XHRpZihzdHlsZS5ocmVmKSBVUkwucmV2b2tlT2JqZWN0VVJMKHN0eWxlLmhyZWYpO1xuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0c3R5bGUgPSBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucyk7XG5cdFx0dXBkYXRlID0gYXBwbHlUb1RhZy5iaW5kKG51bGwsIHN0eWxlKTtcblx0XHRyZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpO1xuXHRcdH07XG5cdH1cblxuXHR1cGRhdGUob2JqKTtcblxuXHRyZXR1cm4gZnVuY3Rpb24gdXBkYXRlU3R5bGUgKG5ld09iaikge1xuXHRcdGlmIChuZXdPYmopIHtcblx0XHRcdGlmIChcblx0XHRcdFx0bmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJlxuXHRcdFx0XHRuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJlxuXHRcdFx0XHRuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR1cGRhdGUob2JqID0gbmV3T2JqKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVtb3ZlKCk7XG5cdFx0fVxuXHR9O1xufVxuXG52YXIgcmVwbGFjZVRleHQgPSAoZnVuY3Rpb24gKCkge1xuXHR2YXIgdGV4dFN0b3JlID0gW107XG5cblx0cmV0dXJuIGZ1bmN0aW9uIChpbmRleCwgcmVwbGFjZW1lbnQpIHtcblx0XHR0ZXh0U3RvcmVbaW5kZXhdID0gcmVwbGFjZW1lbnQ7XG5cblx0XHRyZXR1cm4gdGV4dFN0b3JlLmZpbHRlcihCb29sZWFuKS5qb2luKCdcXG4nKTtcblx0fTtcbn0pKCk7XG5cbmZ1bmN0aW9uIGFwcGx5VG9TaW5nbGV0b25UYWcgKHN0eWxlLCBpbmRleCwgcmVtb3ZlLCBvYmopIHtcblx0dmFyIGNzcyA9IHJlbW92ZSA/IFwiXCIgOiBvYmouY3NzO1xuXG5cdGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG5cdFx0c3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gcmVwbGFjZVRleHQoaW5kZXgsIGNzcyk7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIGNzc05vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpO1xuXHRcdHZhciBjaGlsZE5vZGVzID0gc3R5bGUuY2hpbGROb2RlcztcblxuXHRcdGlmIChjaGlsZE5vZGVzW2luZGV4XSkgc3R5bGUucmVtb3ZlQ2hpbGQoY2hpbGROb2Rlc1tpbmRleF0pO1xuXG5cdFx0aWYgKGNoaWxkTm9kZXMubGVuZ3RoKSB7XG5cdFx0XHRzdHlsZS5pbnNlcnRCZWZvcmUoY3NzTm9kZSwgY2hpbGROb2Rlc1tpbmRleF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdHlsZS5hcHBlbmRDaGlsZChjc3NOb2RlKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gYXBwbHlUb1RhZyAoc3R5bGUsIG9iaikge1xuXHR2YXIgY3NzID0gb2JqLmNzcztcblx0dmFyIG1lZGlhID0gb2JqLm1lZGlhO1xuXG5cdGlmKG1lZGlhKSB7XG5cdFx0c3R5bGUuc2V0QXR0cmlidXRlKFwibWVkaWFcIiwgbWVkaWEpXG5cdH1cblxuXHRpZihzdHlsZS5zdHlsZVNoZWV0KSB7XG5cdFx0c3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuXHR9IGVsc2Uge1xuXHRcdHdoaWxlKHN0eWxlLmZpcnN0Q2hpbGQpIHtcblx0XHRcdHN0eWxlLnJlbW92ZUNoaWxkKHN0eWxlLmZpcnN0Q2hpbGQpO1xuXHRcdH1cblxuXHRcdHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUxpbmsgKGxpbmssIG9wdGlvbnMsIG9iaikge1xuXHR2YXIgY3NzID0gb2JqLmNzcztcblx0dmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXA7XG5cblx0Lypcblx0XHRJZiBjb252ZXJ0VG9BYnNvbHV0ZVVybHMgaXNuJ3QgZGVmaW5lZCwgYnV0IHNvdXJjZW1hcHMgYXJlIGVuYWJsZWRcblx0XHRhbmQgdGhlcmUgaXMgbm8gcHVibGljUGF0aCBkZWZpbmVkIHRoZW4gbGV0cyB0dXJuIGNvbnZlcnRUb0Fic29sdXRlVXJsc1xuXHRcdG9uIGJ5IGRlZmF1bHQuICBPdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgY29udmVydFRvQWJzb2x1dGVVcmxzIG9wdGlvblxuXHRcdGRpcmVjdGx5XG5cdCovXG5cdHZhciBhdXRvRml4VXJscyA9IG9wdGlvbnMuY29udmVydFRvQWJzb2x1dGVVcmxzID09PSB1bmRlZmluZWQgJiYgc291cmNlTWFwO1xuXG5cdGlmIChvcHRpb25zLmNvbnZlcnRUb0Fic29sdXRlVXJscyB8fCBhdXRvRml4VXJscykge1xuXHRcdGNzcyA9IGZpeFVybHMoY3NzKTtcblx0fVxuXG5cdGlmIChzb3VyY2VNYXApIHtcblx0XHQvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yNjYwMzg3NVxuXHRcdGNzcyArPSBcIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIgKyBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpICsgXCIgKi9cIjtcblx0fVxuXG5cdHZhciBibG9iID0gbmV3IEJsb2IoW2Nzc10sIHsgdHlwZTogXCJ0ZXh0L2Nzc1wiIH0pO1xuXG5cdHZhciBvbGRTcmMgPSBsaW5rLmhyZWY7XG5cblx0bGluay5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblxuXHRpZihvbGRTcmMpIFVSTC5yZXZva2VPYmplY3RVUkwob2xkU3JjKTtcbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0ICdleHBvc2UtbG9hZGVyP0JCai5NYXNrcyFiYmotbWFza3MvZGlzdC9iYmotbWFza3MuanMnXG5pbXBvcnQgJ2V4cG9zZS1sb2FkZXI/QmFzaXMuSW5wdXRNYXNraW5nIWJhc2lzLWlucHV0LW1hc2tpbmcvZGlzdC9iYXNpcy1pbnB1dC1tYXNraW5nLmpzJ1xuaW1wb3J0ICdleHBvc2UtbG9hZGVyP2ZsYXRwaWNrciFmbGF0cGlja3IvZGlzdC9mbGF0cGlja3IuanMnXG5pbXBvcnQgJ2V4cG9zZS1sb2FkZXI/QmFzaXMuQWdHcmlkQ29tcG9uZW50cyFiYXNpcy1hZ2dyaWQtY29tcG9uZW50cy9kaXN0L2Jhc2lzLWFnZ3JpZC1jb21wb25lbnRzLmpzJ1xuXG5yZXF1aXJlKCdmbGF0cGlja3IvZGlzdC9mbGF0cGlja3IuY3NzJylcbnJlcXVpcmUoJy4vc3R5bGUvY2xhc3Nlcy5jc3MnKVxuXG5leHBvcnQgKiBmcm9tICcuL3BvbHlmaWxscy5qcydcbmV4cG9ydCAqIGZyb20gJy4vYXBpJ1xuIiwiaWYoIWdsb2JhbFtcIkJCalwiXSkgZ2xvYmFsW1wiQkJqXCJdID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbFtcIkJCalwiXVtcIk1hc2tzXCJdID0gcmVxdWlyZShcIi0hRDpcXFxcR2l0aHViXFxcXEJCakdyaWRFeFdpZGdldFxcXFxjbGllbnRcXFxcbm9kZV9tb2R1bGVzXFxcXGJhYmVsLWxvYWRlclxcXFxsaWJcXFxcaW5kZXguanM/P3JlZi0tNCEuXFxcXGJiai1tYXNrcy5qc1wiKTsiLCIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJNYXNrc1wiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJCQmpcIl0gPSByb290W1wiQkJqXCJdIHx8IHt9LCByb290W1wiQkJqXCJdW1wiTWFza3NcIl0gPSBmYWN0b3J5KCk7XG59KSh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogdGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuLyoqKioqKi8gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuLyoqKioqKi8gXHRcdFx0XHRnZXQ6IGdldHRlclxuLyoqKioqKi8gXHRcdFx0fSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDUpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoW1xuLyogMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gdG9JbnRlZ2VyO1xuZnVuY3Rpb24gdG9JbnRlZ2VyKGRpcnR5TnVtYmVyKSB7XG4gIGlmIChkaXJ0eU51bWJlciA9PT0gbnVsbCB8fCBkaXJ0eU51bWJlciA9PT0gdHJ1ZSB8fCBkaXJ0eU51bWJlciA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gTmFOO1xuICB9XG5cbiAgdmFyIG51bWJlciA9IE51bWJlcihkaXJ0eU51bWJlcik7XG5cbiAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG5cbiAgcmV0dXJuIG51bWJlciA8IDAgPyBNYXRoLmNlaWwobnVtYmVyKSA6IE1hdGguZmxvb3IobnVtYmVyKTtcbn1cblxuLyoqKi8gfSksXG4vKiAxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTnVtYmVyTWFza19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcbi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYmotbWFza3MgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTnVtYmVyTWFza19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKTtcblxuLyoqKi8gfSksXG4vKiAyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0ZU1hc2tfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fW1wiZVwiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJnXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fW1wiZ1wiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJoXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fW1wiaFwiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fW1wiYVwiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJiXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fW1wiYlwiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fW1wiZFwiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJmXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fW1wiZlwiXTsgfSk7XG4vKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmJqLW1hc2tzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJjXCJdID0gKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0ZU1hc2tfX1tcImNcIiAvKiBkZWZhdWx0ICovXSk7XG5cbi8qKiovIH0pLFxuLyogMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gdHpQYXJzZVRpbWV6b25lO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fdHpUb2tlbml6ZURhdGVfaW5kZXhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG5cblxudmFyIE1JTExJU0VDT05EU19JTl9IT1VSID0gMzYwMDAwMFxudmFyIE1JTExJU0VDT05EU19JTl9NSU5VVEUgPSA2MDAwMFxuXG52YXIgcGF0dGVybnMgPSB7XG4gIHRpbWV6b25lOiAvKFtaKy1dLiopJC8sXG4gIHRpbWV6b25lWjogL14oWikkLyxcbiAgdGltZXpvbmVISDogL14oWystXSkoXFxkezJ9KSQvLFxuICB0aW1lem9uZUhITU06IC9eKFsrLV0pKFxcZHsyfSk6PyhcXGR7Mn0pJC8sXG4gIHRpbWV6b25lSUFOQTogLyhVVEN8KD86W2EtekEtWl0rXFwvW2EtekEtWl9dKyg/OlxcL1thLXpBLVpfXSspPykpJC9cbn1cblxuLy8gUGFyc2UgdmFyaW91cyB0aW1lIHpvbmUgb2Zmc2V0IGZvcm1hdHMgdG8gYW4gb2Zmc2V0IGluIG1pbGxpc2Vjb25kc1xuZnVuY3Rpb24gdHpQYXJzZVRpbWV6b25lKHRpbWV6b25lU3RyaW5nLCBkYXRlKSB7XG4gIHZhciB0b2tlblxuICB2YXIgYWJzb2x1dGVPZmZzZXRcblxuICAvLyBaXG4gIHRva2VuID0gcGF0dGVybnMudGltZXpvbmVaLmV4ZWModGltZXpvbmVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIHJldHVybiAwXG4gIH1cblxuICB2YXIgaG91cnNcblxuICAvLyDCsWhoXG4gIHRva2VuID0gcGF0dGVybnMudGltZXpvbmVISC5leGVjKHRpbWV6b25lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBob3VycyA9IHBhcnNlSW50KHRva2VuWzJdLCAxMClcblxuICAgIGlmICghdmFsaWRhdGVUaW1lem9uZShob3VycykpIHtcbiAgICAgIHJldHVybiBOYU5cbiAgICB9XG5cbiAgICBhYnNvbHV0ZU9mZnNldCA9IGhvdXJzICogTUlMTElTRUNPTkRTX0lOX0hPVVJcbiAgICByZXR1cm4gdG9rZW5bMV0gPT09ICcrJyA/IC1hYnNvbHV0ZU9mZnNldCA6IGFic29sdXRlT2Zmc2V0XG4gIH1cblxuICAvLyDCsWhoOm1tIG9yIMKxaGhtbVxuICB0b2tlbiA9IHBhdHRlcm5zLnRpbWV6b25lSEhNTS5leGVjKHRpbWV6b25lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBob3VycyA9IHBhcnNlSW50KHRva2VuWzJdLCAxMClcbiAgICB2YXIgbWludXRlcyA9IHBhcnNlSW50KHRva2VuWzNdLCAxMClcblxuICAgIGlmICghdmFsaWRhdGVUaW1lem9uZShob3VycywgbWludXRlcykpIHtcbiAgICAgIHJldHVybiBOYU5cbiAgICB9XG5cbiAgICBhYnNvbHV0ZU9mZnNldCA9XG4gICAgICBob3VycyAqIE1JTExJU0VDT05EU19JTl9IT1VSICsgbWludXRlcyAqIE1JTExJU0VDT05EU19JTl9NSU5VVEVcbiAgICByZXR1cm4gdG9rZW5bMV0gPT09ICcrJyA/IC1hYnNvbHV0ZU9mZnNldCA6IGFic29sdXRlT2Zmc2V0XG4gIH1cblxuICAvLyBJQU5BIHRpbWUgem9uZVxuICB0b2tlbiA9IHBhdHRlcm5zLnRpbWV6b25lSUFOQS5leGVjKHRpbWV6b25lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICAvLyB2YXIgW2ZZZWFyLCBmTW9udGgsIGZEYXksIGZIb3VyLCBmTWludXRlLCBmU2Vjb25kXSA9IHR6VG9rZW5pemVEYXRlKGRhdGUsIHRpbWV6b25lU3RyaW5nKVxuICAgIHZhciB0b2tlbnMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX190elRva2VuaXplRGF0ZV9pbmRleF9qc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShkYXRlLCB0aW1lem9uZVN0cmluZylcbiAgICB2YXIgYXNVVEMgPSBEYXRlLlVUQyhcbiAgICAgIHRva2Vuc1swXSxcbiAgICAgIHRva2Vuc1sxXSAtIDEsXG4gICAgICB0b2tlbnNbMl0sXG4gICAgICB0b2tlbnNbM10sXG4gICAgICB0b2tlbnNbNF0sXG4gICAgICB0b2tlbnNbNV1cbiAgICApXG4gICAgdmFyIHRpbWVzdGFtcFdpdGhNc1plcm9lZCA9IGRhdGUuZ2V0VGltZSgpIC0gKGRhdGUuZ2V0VGltZSgpICUgMTAwMClcbiAgICByZXR1cm4gLShhc1VUQyAtIHRpbWVzdGFtcFdpdGhNc1plcm9lZClcbiAgfVxuXG4gIHJldHVybiAwXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGltZXpvbmUoaG91cnMsIG1pbnV0ZXMpIHtcbiAgaWYgKG1pbnV0ZXMgIT0gbnVsbCAmJiAobWludXRlcyA8IDAgfHwgbWludXRlcyA+IDU5KSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuXG4vKioqLyB9KSxcbi8qIDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdHJpbmdNYXNrX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTtcbi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYmotbWFza3MgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3RyaW5nTWFza19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKTtcblxuLyoqKi8gfSksXG4vKiA1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fd2VicGFja19leHBvcnRzX18sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlV0aWxzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVXRpbHM7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTnVtYmVyTWFza19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX0RhdGVNYXNrX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fU3RyaW5nTWFza19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1R5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlR5cGVzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19UeXBlc19fW1wiYVwiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJOdW1iZXJNYXNrXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19OdW1iZXJNYXNrX19bXCJhXCJdOyB9KTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRhdGVNYXNrXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19EYXRlTWFza19fW1wiY1wiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdHJpbmdNYXNrXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19TdHJpbmdNYXNrX19bXCJhXCJdOyB9KTtcbi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYmotbWFza3MgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5cblxuXG52YXIgVXRpbHMgPSB7XG4gIERhdGVzOiB7XG4gICAgZ2V0RGF5T2ZZZWFyOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX0RhdGVNYXNrX19bXCJlXCIgLyogZ2V0RGF5T2ZZZWFyICovXSxcbiAgICBnZXRXZWVrTnVtYmVyOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX0RhdGVNYXNrX19bXCJnXCIgLyogZ2V0V2Vla051bWJlciAqL10sXG4gICAgZ2V0V2Vla1N0YXJ0QnlMb2NhbGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fRGF0ZU1hc2tfX1tcImhcIiAvKiBnZXRXZWVrU3RhcnRCeUxvY2FsZSAqL10sXG4gICAgSVNfREFURV9SRUdFWDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19EYXRlTWFza19fW1wiYVwiIC8qIElTX0RBVEVfUkVHRVggKi9dLFxuICAgIElTX1RJTUVfUkVHRVg6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fRGF0ZU1hc2tfX1tcImJcIiAvKiBJU19USU1FX1JFR0VYICovXSxcbiAgICBmaXhTaG9ydElTTzogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19EYXRlTWFza19fW1wiZFwiIC8qIGZpeFNob3J0SVNPICovXSxcbiAgICBnZXRUaW1lem9uZU9yT2Zmc2V0OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX0RhdGVNYXNrX19bXCJmXCIgLyogZ2V0VGltZXpvbmVPck9mZnNldCAqL11cbiAgfVxufTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19UeXBlc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKTtcblxuXG4vKioqLyB9KSxcbi8qIDYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYmotbWFza3MgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKipcbiAqIE51bWJlck1hc2tcbiAqXG4gKiBBIGphdmFzY3JpcHQgaW1wbGVtZW50YXRpb24gZm9yIEJCaiBudW1iZXJzIG1hc2tpbmdcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG52YXIgTnVtYmVyTWFzayA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE51bWJlck1hc2soKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE51bWJlck1hc2spO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKE51bWJlck1hc2ssIG51bGwsIFt7XG4gICAga2V5OiBcIm1hc2tcIixcblxuICAgIC8qKlxuICAgICAqIE1hc2sgdGhlIGdpdmVuIG51bWJlciB3aXRoIHRoZSBnaXZlbiBtYXNrIGFjY29yZGluZyB0byBCQmogcnVsZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBudW1iZXIgdGhlIG51bWJlciB0byBmb3JtYXRcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWFzayB0aGUgbWFzayB0byB1c2UgZm9yIGZvcm1hdHRpbmdcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW2dyb3VwaW5nU2VwYXJhdG9yPSxdIC0gYSBjaGFyIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGdyb3VwaW5nIHNlcGFyYXRvclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbZGVjaW1hbFNlcGFyYXRvcj0uXSAgLSBhIGNoYXIgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgZGVjaW1hbCBzZXBhcmF0b3JcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtmb3JjZVRyYWlsaW5nWmVyb3M9ZmFsc2VdIC0gQWZmZWN0cyB0aGUgb3V0cHV0IGJ5IHN3aXRjaGluZyB0aGUgd2F5IGEgbWFzayB3aXRoIFwiI1wiIGNoYXJhY3RlcnMgaW4gdGhlIHRyYWlsaW5nIHBvc2l0aW9ucyBpcyBmaWxsZWQuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGV4YW1wbGUsIHRoZSBmdW5jdGlvbiBgTnVtYmVyTWFzay5tYXNrKC4xMDpcIiMuIyNcIilgIHJldHVybnMgYCAuMTBgIGluc3RlYWQgb2YgYCAuMSBgXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBbbG9vc2U9dHJ1ZV0gd2hlbiB0cnVlICwgZXJyb3JzIHdpbGwgYmUgaWdub3JlZCBhbmQgdGhlIG1ldGhvZCB3aWxsIHRyeSBhdCBhcHBseSB0aGUgbWFza1xuICAgICAqICAgICAgICAgICAgICAgIGFueXdheSAsIG90aGVyd2lzZSBpdCB3aWxsIHN0b3AgYXQgZmlyc3QgZXJyb3IgYW5kIHRocm93IGl0LlxuICAgICAqIFxuICAgICAqIEB0aHJvd3Mge01hc2tFcnJvcn0gb25seSBpZiBsb29zZSBpcyBkaXNhYmxlZFxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IHRoZSBtYXNrZWQgbnVtYmVyXG4gICAgICovXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG1hc2sobnVtYmVyLCBfbWFzaykge1xuICAgICAgdmFyIGdyb3VwaW5nU2VwYXJhdG9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiAnLCc7XG4gICAgICB2YXIgZGVjaW1hbFNlcGFyYXRvciA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogJy4nO1xuICAgICAgdmFyIGZvcmNlVHJhaWxpbmdaZXJvcyA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDogZmFsc2U7XG4gICAgICB2YXIgbG9vc2UgPSBhcmd1bWVudHMubGVuZ3RoID4gNSAmJiBhcmd1bWVudHNbNV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s1XSA6IHRydWU7XG4gICAgICB2YXIgbWFza0xlbiA9IF9tYXNrLmxlbmd0aDtcblxuICAgICAgaWYgKDAgPT09IG1hc2tMZW4pIHtcbiAgICAgICAgaWYgKGxvb3NlKSByZXR1cm4gc3RyOyAvLyBmcmllbmRseSBzaWxlbnQgZmFpbFxuICAgICAgICBlbHNlIHRocm93IHtcbiAgICAgICAgICAgIG5hbWU6ICdNYXNrRXJyb3InLFxuICAgICAgICAgICAgbWVzc2FnZTogXCJNYXNrRXJyb3I6IE1hc2sgaXMgZW1wdHlcIlxuICAgICAgICAgIH07XG4gICAgICB9IC8vIEdldCBtYWduaXR1ZGUgYW5kIHByZWNpc2lvbiBvZiBNQVNLXG5cblxuICAgICAgdmFyIG1hc2tCZWZvcmVEZWNpbWFsID0gMDtcbiAgICAgIHZhciBtYXNrQWZ0ZXJEZWNpbWFsID0gMDtcbiAgICAgIHZhciBmb3VuZERlY2ltYWwgPSBmYWxzZTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXNrTGVuOyArK2kpIHtcbiAgICAgICAgdmFyIG0gPSBfbWFzay5jaGFyQXQoaSk7XG5cbiAgICAgICAgaWYgKG0gPT0gJzAnIHx8IG0gPT0gJyMnKSB7XG4gICAgICAgICAgaWYgKGZvdW5kRGVjaW1hbCkgKyttYXNrQWZ0ZXJEZWNpbWFsO2Vsc2UgKyttYXNrQmVmb3JlRGVjaW1hbDtcbiAgICAgICAgfSBlbHNlIGlmIChtID09ICcuJykgZm91bmREZWNpbWFsID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIG51bSA9IE51bWJlck1hc2suX3JvdW5kKG51bWJlciwgbWFza0FmdGVyRGVjaW1hbCk7XG5cbiAgICAgIHZhciBieXRlcyA9IE51bWJlck1hc2suX3RvQ2hhckFycmF5KG51bSk7IC8vIEdldCBtYWduaXR1ZGUgYW5kIHByZWNpc2lvbiBvZiBOVU1CRVJcblxuXG4gICAgICB2YXIgaW5MZW4gPSBieXRlcy5sZW5ndGg7XG4gICAgICB2YXIgbnVtQmVmb3JlRGVjaW1hbCA9IDA7XG4gICAgICB2YXIgbnVtQWZ0ZXJEZWNpbWFsID0gMDtcbiAgICAgIGZvdW5kRGVjaW1hbCA9IGZhbHNlO1xuXG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgaW5MZW47ICsrX2kpIHtcbiAgICAgICAgaWYgKGJ5dGVzW19pXSA9PSAnLicpIGZvdW5kRGVjaW1hbCA9IHRydWU7ZWxzZSB7XG4gICAgICAgICAgaWYgKGZvdW5kRGVjaW1hbCkgKytudW1BZnRlckRlY2ltYWw7ZWxzZSArK251bUJlZm9yZURlY2ltYWw7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gYWx3YXlzIGlnbm9yZSBtYXNrIG92ZXJmbG93XG5cblxuICAgICAgaWYgKG51bUJlZm9yZURlY2ltYWwgPiBtYXNrQmVmb3JlRGVjaW1hbCkge1xuICAgICAgICBpZiAobG9vc2UpIHJldHVybiBudW1iZXIudG9TdHJpbmcoKTsgLy8gZnJpZW5kbHkgc2lsZW50IGZhaWxcbiAgICAgICAgZWxzZSB0aHJvdyB7XG4gICAgICAgICAgICBuYW1lOiAnTWFza0Vycm9yJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiTWFza0Vycm9yOiBOdW1iZXIgaXMgdG9vIGxhcmdlIGZvciBtYXNrXCJcbiAgICAgICAgICB9O1xuICAgICAgfSAvLyByb3VuZCBpZiBtYXNrIGlzIGZvciBhIGxvd2VyIHByZWNpc2lvbiBudW1iZXJcblxuXG4gICAgICBpZiAobnVtQWZ0ZXJEZWNpbWFsID4gbWFza0FmdGVyRGVjaW1hbCkge1xuICAgICAgICBudW0gPSBOdW1iZXJNYXNrLl9yb3VuZChudW0sIG1hc2tBZnRlckRlY2ltYWwpO1xuICAgICAgICBieXRlcyA9IE51bWJlck1hc2suX3RvQ2hhckFycmF5KG51bSk7XG4gICAgICAgIGluTGVuID0gYnl0ZXMubGVuZ3RoOyAvLyBHZXQgbmV3IG1hZ25pdHVkZSBhbmQgcHJlY2lzaW9uIG9mIE5VTUJFUlxuXG4gICAgICAgIG51bUJlZm9yZURlY2ltYWwgPSAwO1xuICAgICAgICBudW1BZnRlckRlY2ltYWwgPSAwO1xuICAgICAgICBmb3VuZERlY2ltYWwgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBpbkxlbjsgKytfaTIpIHtcbiAgICAgICAgICBpZiAoYnl0ZXNbX2kyXSA9PSAnLicpIGZvdW5kRGVjaW1hbCA9IHRydWU7ZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm91bmREZWNpbWFsKSArK251bUFmdGVyRGVjaW1hbDtlbHNlICsrbnVtQmVmb3JlRGVjaW1hbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gYWx3YXlzIGlnbm9yZSBtYXNrIG92ZXJmbG93XG5cblxuICAgICAgICBpZiAobnVtQmVmb3JlRGVjaW1hbCA+IG1hc2tCZWZvcmVEZWNpbWFsKSB7XG4gICAgICAgICAgaWYgKGxvb3NlKSByZXR1cm4gbnVtYmVyLnRvU3RyaW5nKCk7IC8vIGZyaWVuZGx5IHNpbGVudCBmYWlsXG4gICAgICAgICAgZWxzZSB0aHJvdyB7XG4gICAgICAgICAgICAgIG5hbWU6ICdNYXNrRXJyb3InLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBcIk1hc2tFcnJvcjogTnVtYmVyIGlzIHRvbyBsYXJnZSBmb3IgbWFza1wiXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBmaWxsQnl0ZSA9ICcgJyxcbiAgICAgICAgICBmbG9hdEJ5dGUgPSAnICc7XG4gICAgICB2YXIgaW5Qb3MgPSAwLFxuICAgICAgICAgIG91dFBvcyA9IDAsXG4gICAgICAgICAgZmxvYXRQb3MgPSAwO1xuICAgICAgaWYgKF9tYXNrLmNoYXJBdCgwKSA9PSAnKicpIGZpbGxCeXRlID0gJyonO1xuICAgICAgdmFyIGZpbGxJbml0ID0gZmlsbEJ5dGU7XG4gICAgICB2YXIgaXNOZWdhdGl2ZSA9IE51bWJlck1hc2suX2dldFNpZ24obnVtKSA8IDA7XG4gICAgICB2YXIgZW1pdERlY2ltYWwgPSBpbkxlbiA+IDAgfHwgX21hc2suaW5kZXhPZignMCcpID49IDA7XG4gICAgICB2YXIgZm91bmRaZXJvID0gZmFsc2U7XG4gICAgICB2YXIgZm91bmREaWdpdCA9IGZhbHNlO1xuICAgICAgdmFyIGN1cnJlbmN5ID0gZmFsc2U7XG4gICAgICBmb3VuZERlY2ltYWwgPSBmYWxzZTtcbiAgICAgIHZhciByZXQgPSBuZXcgQXJyYXkobWFza0xlbik7XG5cbiAgICAgIGZvciAodmFyIG1hc2tQb3MgPSAwOyBtYXNrUG9zIDwgbWFza0xlbjsgKyttYXNrUG9zKSB7XG4gICAgICAgIHZhciBfbSA9IF9tYXNrLmNoYXJBdChtYXNrUG9zKTtcblxuICAgICAgICBzd2l0Y2ggKF9tKSB7XG4gICAgICAgICAgY2FzZSAnMCc6XG4gICAgICAgICAgICAtLW1hc2tCZWZvcmVEZWNpbWFsO1xuXG4gICAgICAgICAgICBpZiAobWFza0JlZm9yZURlY2ltYWwgPCBudW1CZWZvcmVEZWNpbWFsICYmIGluUG9zIDwgaW5MZW4pIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSBieXRlc1tpblBvc107XG4gICAgICAgICAgICAgICsraW5Qb3M7XG4gICAgICAgICAgICAgIGZvdW5kRGlnaXQgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnMCc7XG4gICAgICAgICAgICAgIGZvdW5kWmVybyA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICsrb3V0UG9zO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICcjJzpcbiAgICAgICAgICAgIC0tbWFza0JlZm9yZURlY2ltYWw7XG5cbiAgICAgICAgICAgIGlmIChtYXNrQmVmb3JlRGVjaW1hbCA8IG51bUJlZm9yZURlY2ltYWwgJiYgaW5Qb3MgPCBpbkxlbikge1xuICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9IGJ5dGVzW2luUG9zXTtcbiAgICAgICAgICAgICAgKytpblBvcztcbiAgICAgICAgICAgICAgZm91bmREaWdpdCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9IGZvdW5kRGVjaW1hbCAmJiBmb3JjZVRyYWlsaW5nWmVyb3MgJiYgTnVtYmVyTWFzay5fZ2V0U2lnbihudW0pICE9IDAgPyAnMCcgOiBmaWxsQnl0ZTtcbiAgICAgICAgICAgICAgaWYgKCFmb3VuZERlY2ltYWwpIGZsb2F0UG9zID0gbWFza1BvcztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgKytvdXRQb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJywnOlxuICAgICAgICAgICAgaWYgKGZvdW5kWmVybyB8fCBpblBvcyA+IDApIHJldFtvdXRQb3NdID0gZ3JvdXBpbmdTZXBhcmF0b3I7ZWxzZSB7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZmlsbEJ5dGU7XG4gICAgICAgICAgICAgIGlmICghZm91bmREZWNpbWFsKSBmbG9hdFBvcyA9IG1hc2tQb3M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICArK291dFBvcztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnLSc6XG4gICAgICAgICAgICBpZiAoIWZvdW5kRGlnaXQgJiYgZmxvYXRCeXRlID09ICcgJykge1xuICAgICAgICAgICAgICBpZiAoaXNOZWdhdGl2ZSkgZmxvYXRCeXRlID0gJy0nO1xuICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9IGZpbGxCeXRlO1xuICAgICAgICAgICAgICBmbG9hdFBvcyA9IGZvdW5kRGVjaW1hbCA/IC0xIDogbWFza1BvcztcbiAgICAgICAgICAgIH0gZWxzZSByZXRbb3V0UG9zXSA9IGlzTmVnYXRpdmUgPyAnLScgOiBmaWxsQnl0ZTtcblxuICAgICAgICAgICAgKytvdXRQb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJysnOlxuICAgICAgICAgICAgaWYgKCFmb3VuZERpZ2l0ICYmIGZsb2F0Qnl0ZSA9PSAnICcpIHtcbiAgICAgICAgICAgICAgZmxvYXRCeXRlID0gaXNOZWdhdGl2ZSA/ICctJyA6ICcrJztcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSBmaWxsQnl0ZTtcbiAgICAgICAgICAgICAgZmxvYXRQb3MgPSBmb3VuZERlY2ltYWwgPyAtMSA6IG1hc2tQb3M7XG4gICAgICAgICAgICB9IGVsc2UgcmV0W291dFBvc10gPSBpc05lZ2F0aXZlID8gJy0nIDogJysnO1xuXG4gICAgICAgICAgICArK291dFBvcztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnJCc6XG4gICAgICAgICAgICBpZiAoIWZvdW5kRGlnaXQgJiYgZmxvYXRCeXRlID09ICcgJykge1xuICAgICAgICAgICAgICBmbG9hdEJ5dGUgPSAnJCc7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZmlsbEJ5dGU7XG4gICAgICAgICAgICAgIGZsb2F0UG9zID0gZm91bmREZWNpbWFsID8gLTEgOiBtYXNrUG9zO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnJCc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICsrb3V0UG9zO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgLy8gY2FzZSAnJic6XG4gICAgICAgICAgLy8gICBjdXJyZW5jeSA9IHRydWVcbiAgICAgICAgICAvLyAgIGlmICghZm91bmREaWdpdCAmJiBmbG9hdEJ5dGUgPT0gJyAnKSB7XG4gICAgICAgICAgLy8gICAgIGZsb2F0Qnl0ZSA9ICcmJ1xuICAgICAgICAgIC8vICAgICByZXRbb3V0UG9zXSA9IGZpbGxCeXRlXG4gICAgICAgICAgLy8gICAgIGZsb2F0UG9zID0gZm91bmREZWNpbWFsID8gLTEgOiBtYXNrUG9zXG4gICAgICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgICAgIC8vICAgICByZXRbb3V0UG9zXSA9ICcmJ1xuICAgICAgICAgIC8vICAgfVxuICAgICAgICAgIC8vICAgKytvdXRQb3NcbiAgICAgICAgICAvLyAgIGJyZWFrXG4gICAgICAgICAgLy8gY2FzZSAnQCc6XG4gICAgICAgICAgLy8gICBjdXJyZW5jeSA9IHRydWVcbiAgICAgICAgICAvLyAgIGlmICghZm91bmREaWdpdCAmJiBmbG9hdEJ5dGUgPT0gJyAnKSB7XG4gICAgICAgICAgLy8gICAgIGZsb2F0Qnl0ZSA9ICdAJ1xuICAgICAgICAgIC8vICAgICByZXRbb3V0UG9zXSA9IGZpbGxCeXRlXG4gICAgICAgICAgLy8gICAgIGZsb2F0UG9zID0gZm91bmREZWNpbWFsID8gLTEgOiBtYXNrUG9zXG4gICAgICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgICAgIC8vICAgICByZXRbb3V0UG9zXSA9ICdAJ1xuICAgICAgICAgIC8vICAgfVxuICAgICAgICAgIC8vICAgKytvdXRQb3NcbiAgICAgICAgICAvLyAgIGJyZWFrXG5cbiAgICAgICAgICBjYXNlICcoJzpcbiAgICAgICAgICAgIGlmICghZm91bmREaWdpdCAmJiBmbG9hdEJ5dGUgPT0gJyAnKSB7XG4gICAgICAgICAgICAgIGlmIChpc05lZ2F0aXZlKSBmbG9hdEJ5dGUgPSAnKCc7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZmlsbEJ5dGU7XG4gICAgICAgICAgICAgIGZsb2F0UG9zID0gZm91bmREZWNpbWFsID8gLTEgOiBtYXNrUG9zO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKGlzTmVnYXRpdmUpIHtcbiAgICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9ICcoJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9IGZvdW5kRGVjaW1hbCA/ICcgJyA6IGZpbGxCeXRlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICsrb3V0UG9zO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICcpJzpcbiAgICAgICAgICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJyknO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSBmb3VuZERlY2ltYWwgPyAnICcgOiBmaWxsQnl0ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgKytvdXRQb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ0MnOlxuICAgICAgICAgICAgaWYgKG1hc2tQb3MgPCBtYXNrTGVuIC0gMSAmJiBfbWFzay5jaGFyQXQobWFza1BvcyArIDEpID09ICdSJykge1xuICAgICAgICAgICAgICBpZiAoaXNOZWdhdGl2ZSkge1xuICAgICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJ0MnO1xuICAgICAgICAgICAgICAgIHJldFtvdXRQb3MgKyAxXSA9ICdSJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9ICcgJztcbiAgICAgICAgICAgICAgICByZXRbb3V0UG9zICsgMV0gPSAnICc7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBvdXRQb3MgKz0gMjtcbiAgICAgICAgICAgICAgKyttYXNrUG9zO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnQyc7XG4gICAgICAgICAgICAgICsrb3V0UG9zO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgaWYgKG1hc2tQb3MgPCBtYXNrTGVuIC0gMSAmJiBfbWFzay5jaGFyQXQobWFza1BvcyArIDEpID09ICdSJykge1xuICAgICAgICAgICAgICBpZiAoaXNOZWdhdGl2ZSkge1xuICAgICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJ0MnO1xuICAgICAgICAgICAgICAgIHJldFtvdXRQb3MgKyAxXSA9ICdSJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9ICdEJztcbiAgICAgICAgICAgICAgICByZXRbb3V0UG9zICsgMV0gPSAnUic7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBvdXRQb3MgKz0gMjtcbiAgICAgICAgICAgICAgKyttYXNrUG9zO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnRCc7XG4gICAgICAgICAgICAgICsrb3V0UG9zO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJyonOlxuICAgICAgICAgICAgcmV0W291dFBvc10gPSAnKic7XG4gICAgICAgICAgICArK291dFBvcztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnLic6XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9IGVtaXREZWNpbWFsID8gZGVjaW1hbFNlcGFyYXRvciA6IGZpbGxCeXRlO1xuICAgICAgICAgICAgZmlsbEJ5dGUgPSAnICc7XG4gICAgICAgICAgICBmb3VuZERlY2ltYWwgPSB0cnVlO1xuICAgICAgICAgICAgKytpblBvcztcbiAgICAgICAgICAgICsrb3V0UG9zO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdCJzpcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJyAnO1xuICAgICAgICAgICAgKytvdXRQb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9IF9tO1xuICAgICAgICAgICAgKytvdXRQb3M7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmxvYXRCeXRlICE9ICcgJykge1xuICAgICAgICBpZiAoZmxvYXRQb3MgPCAwKSBmbG9hdFBvcyA9IG91dFBvcztcblxuICAgICAgICB3aGlsZSAoZmxvYXRQb3MgPj0gbWFza0xlbikge1xuICAgICAgICAgIC0tZmxvYXRQb3M7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmV0W2Zsb2F0UG9zXSA9PSBmaWxsSW5pdCkgcmV0W2Zsb2F0UG9zXSA9IGZsb2F0Qnl0ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldC5qb2luKCcnKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX3NoaWZ0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9zaGlmdChudW1iZXIsIHByZWNpc2lvbiwgcmV2ZXJzZVNoaWZ0KSB7XG4gICAgICBpZiAocmV2ZXJzZVNoaWZ0KSBwcmVjaXNpb24gPSAtcHJlY2lzaW9uO1xuICAgICAgdmFyIG51bUFycmF5ID0gKCcnICsgbnVtYmVyKS5zcGxpdCgnZScpO1xuICAgICAgcmV0dXJuICsobnVtQXJyYXlbMF0gKyAnZScgKyAobnVtQXJyYXlbMV0gPyArbnVtQXJyYXlbMV0gKyBwcmVjaXNpb24gOiBwcmVjaXNpb24pKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX3JvdW5kXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9yb3VuZChudW1iZXIsIHByZWNpc2lvbikge1xuICAgICAgcmV0dXJuIE51bWJlck1hc2suX3NoaWZ0KE1hdGgucm91bmQoTnVtYmVyTWFzay5fc2hpZnQobnVtYmVyLCBwcmVjaXNpb24sIGZhbHNlKSksIHByZWNpc2lvbiwgdHJ1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl90b0NoYXJBcnJheVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfdG9DaGFyQXJyYXkobnVtYmVyKSB7XG4gICAgICB2YXIgc2lnbnVtID0gTnVtYmVyTWFzay5fZ2V0U2lnbihudW1iZXIpO1xuXG4gICAgICB2YXIgY2hhcnMgPSBbXTtcblxuICAgICAgaWYgKHNpZ251bSAhPT0gMCkge1xuICAgICAgICB2YXIgc3RyaW5nID0gc2lnbnVtIDwgMCA/IFwiXCIuY29uY2F0KC0xICogbnVtYmVyLnRvU3RyaW5nKCkpIDogbnVtYmVyLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMSAmJiBzdHJpbmcuY2hhckF0KDApID09ICcwJykgc3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZygxKTsgLy8gVGhlIHN0cmluZyBjb250YWlucyBvbmx5IFswLTldIGFuZCAnLidcblxuICAgICAgICBjaGFycyA9IHN0cmluZy5zcGxpdCgnJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGFycztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgc2lnbiBvZiBhIG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHggbnVtYmVyXG4gICAgICogQHJldHVybnMge051bWJlcn0gQSBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSBzaWduIG9mIHRoZSBnaXZlbiBhcmd1bWVudC5cbiAgICAgKiAgICAgICAgICAgICAgICAgICBJZiB0aGUgYXJndW1lbnQgaXMgYSBwb3NpdGl2ZSBudW1iZXIsIG5lZ2F0aXZlIG51bWJlciwgcG9zaXRpdmUgemVyb1xuICAgICAqICAgICAgICAgICAgICAgICAgIG9yIG5lZ2F0aXZlIHplcm8sIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiAxLCAtMSwgMCBvciAtMCByZXNwZWN0aXZlbHkuXG4gICAgICogICAgICAgICAgICAgICAgICAgT3RoZXJ3aXNlLCBOYU4gaXMgcmV0dXJuZWQuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJfZ2V0U2lnblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZ2V0U2lnbih4KSB7XG4gICAgICByZXR1cm4gKHggPiAwKSAtICh4IDwgMCkgfHwgK3g7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIE51bWJlck1hc2s7XG59KCk7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAoTnVtYmVyTWFzayk7XG5cbi8qKiovIH0pLFxuLyogNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJiXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gSVNfVElNRV9SRUdFWDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIElTX0RBVEVfUkVHRVg7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImhcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRXZWVrU3RhcnRCeUxvY2FsZTsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldERheU9mWWVhcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZpeFNob3J0SVNPOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJmXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0VGltZXpvbmVPck9mZnNldDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZ1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldFdlZWtOdW1iZXI7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9kYXRlX2Zuc190el91dGNUb1pvbmVkVGltZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfd2Vla3N0YXJ0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJiai1tYXNrcyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cblxudmFyIElTX1RJTUVfUkVHRVggPSAvXigyWzAtM118WzAxXVswLTldKTo/KFswLTVdWzAtOV0pOj8oWzAtNV1bMC05XSkoWnxbKy1dKD86MlswLTNdfFswMV1bMC05XSkoPzo6Pyg/OlswLTVdWzAtOV0pKT8pJC87XG52YXIgSVNfREFURV9SRUdFWCA9IC9eKChbMTJdXFxkezN9KS0oMFsxLTldfDFbMC0yXSktKDBbMS05XXxbMTJdXFxkfDNbMDFdKShafFsrLV0oPzoyWzAtM118WzAxXVswLTldKSg/Ojo/KD86WzAtNV1bMC05XSkpPykpJC87XG4vKipcbiAqIEZpbmQgb3V0IHdoZW4gdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayBiYXNlZCBvbiB0aGUgcGFzc2VkIGxvY2FsZVxuICpcbiAqIEBwYXJhbSB7bG9jYWxlfSBsb2NhbGVcbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGEgbnVtYmVyIDAgPSBzdW5kYXkgLCAxID0gbW9uZGF5ICwgLi4uLlxuICovXG5cbnZhciBnZXRXZWVrU3RhcnRCeUxvY2FsZSA9IGZ1bmN0aW9uIGdldFdlZWtTdGFydEJ5TG9jYWxlKGxvY2FsZSkge1xuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV93ZWVrc3RhcnRfX1tcImFcIiAvKiBnZXRXZWVrU3RhcnRCeUxvY2FsZSAqL10pKGxvY2FsZSk7XG59O1xuLyoqXG4gKiAgR2V0IGRheSBudW1iZXIgaW4gdGhlIHllYXIgb2YgdGhlIHBhc3NlZCBkYXRlXG4gKlxuICogQHBhcmFtIHtEYXRlfSBkYXRlXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSBkYXkgbnVtYmVyXG4gKi9cblxudmFyIGdldERheU9mWWVhciA9IGZ1bmN0aW9uIGdldERheU9mWWVhcihkYXRlKSB7XG4gIHZhciBzdGFydCA9IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgMCwgMCk7XG4gIHZhciBkaWZmID0gZGF0ZSAtIHN0YXJ0ICsgKHN0YXJ0LmdldFRpbWV6b25lT2Zmc2V0KCkgLSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkpICogNjAgKiAxMDAwO1xuICB2YXIgb25lRGF5ID0gMTAwMCAqIDYwICogNjAgKiAyNDtcbiAgdmFyIGRheSA9IE1hdGguZmxvb3IoZGlmZiAvIG9uZURheSk7XG4gIHJldHVybiBkYXk7XG59O1xuLyoqXG4gKiBUYWtlcyBpbmNvbXBsZXRlIGlzbyBzdHJpbmcgYW5kIHJldHVybiBhIGNvbXBsZXRlIG9uZVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBkYXRlIGluY29tcGxldGUgaXNvIHN0cmluZ1xuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gY29tcGxldGUgaXNvIHN0cmluZ1xuICovXG5cbnZhciBmaXhTaG9ydElTTyA9IGZ1bmN0aW9uIGZpeFNob3J0SVNPKGRhdGUpIHtcbiAgdmFyIHZhbHVlID0gZGF0ZTtcbiAgdmFyIG9mZnNldCA9ICh2YWx1ZS5tYXRjaCgveiR8WytcXC1dXFxkXFxkOlxcZFxcZCQvaSkgfHwgW10pWzBdO1xuXG4gIGlmICghb2Zmc2V0KSB7XG4gICAgb2Zmc2V0ID0gJ1onO1xuICAgIHZhbHVlICs9IG9mZnNldDtcbiAgfVxuXG4gIGlmIChJU19USU1FX1JFR0VYLnRlc3QodmFsdWUpKSB7XG4gICAgdmFsdWUgPSBcIjE5NzAtMDEtMDFUXCIuY29uY2F0KHZhbHVlKTtcbiAgfSBlbHNlIGlmIChJU19EQVRFX1JFR0VYLnRlc3QodmFsdWUpKSB7XG4gICAgdmFsdWUgPSBcIlwiLmNvbmNhdCh2YWx1ZS5zcGxpdChvZmZzZXQpWzBdLCBcIlQwMDowMDowMFwiKS5jb25jYXQob2Zmc2V0KTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG4vKipcbiAqIEdldCB0aGUgYnJvd3NlciB0aW1lem9uZSBuYW1lICwgaWYgbm90IHN1cHBvcnRlZCB0aGVuIHRoZSBicm93c2VyXG4gKiB0aW1lem9uZSBvZmZzZXQgZm9ybWF0dGVkXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSB0aW1lem9uZSBvZiBvZmZzZXRcbiAqL1xuXG52YXIgZ2V0VGltZXpvbmVPck9mZnNldCA9IGZ1bmN0aW9uIGdldFRpbWV6b25lT3JPZmZzZXQoKSB7XG4gIHZhciB0aW1lem9uZSA9IEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS50aW1lWm9uZTtcblxuICBpZiAoIXRpbWV6b25lKSB7XG4gICAgdmFyIHBhZCA9IGZ1bmN0aW9uIHBhZChudW1iZXIsIGxlbmd0aCkge1xuICAgICAgdmFyIHN0ciA9ICcnICsgbnVtYmVyO1xuXG4gICAgICB3aGlsZSAoc3RyLmxlbmd0aCA8IGxlbmd0aCkge1xuICAgICAgICBzdHIgPSAnMCcgKyBzdHI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdHI7XG4gICAgfTtcblxuICAgIHZhciBvZmZzZXQgPSBuZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgb2Zmc2V0ID0gKG9mZnNldCA8IDAgPyAnKycgOiAnLScpICsgLy8gTm90ZSB0aGUgcmV2ZXJzZWQgc2lnbiFcbiAgICBwYWQocGFyc2VJbnQoTWF0aC5hYnMob2Zmc2V0IC8gNjApKSwgMikgKyBwYWQoTWF0aC5hYnMob2Zmc2V0ICUgNjApLCAyKTtcbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG5cbiAgcmV0dXJuIHRpbWV6b25lO1xufTtcbi8qKlxuICogR2V0IHRoZSBXZWVrIE51bWJlciBpbiB0aGUgcGFzc2VkIGRhdGVcbiAqXG4gKiBAcGFyYW0ge0RhdGV9IGRhdGUgLSBEYXRlIG9iamVjdFxuICogQHBhcmFtIHtOdW1iZXJ9IHdlZWtTdGFydCBBIG51bWJlciB3aGljaCBkZWZpbmVzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsgKDAgID0gc3VuZGF5ICwgMSA9IG1vbmRheSAsIC4uLilcbiAqXG4gKiBAcmV0dXJucyB7TnVtYmVyfSB0aGUgd2VlayBudW1iZXJcbiAqL1xuXG52YXIgZ2V0V2Vla051bWJlciA9IGZ1bmN0aW9uIGdldFdlZWtOdW1iZXIoZGF0ZSwgd2Vla1N0YXJ0KSB7XG4gIHZhciBkID0gbmV3IERhdGUoRGF0ZS5VVEMoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpKSk7XG4gIHZhciBkYXlOdW0gPSBkLmdldFVUQ0RheSgpIC0gKHdlZWtTdGFydCAtIDEpIHx8IDc7XG4gIGQuc2V0VVRDRGF0ZShkLmdldFVUQ0RhdGUoKSArIDQgLSBkYXlOdW0pO1xuICB2YXIgeWVhclN0YXJ0ID0gbmV3IERhdGUoRGF0ZS5VVEMoZC5nZXRVVENGdWxsWWVhcigpLCAwLCAxKSk7XG4gIHJldHVybiBNYXRoLmNlaWwoKChkIC0geWVhclN0YXJ0KSAvIDg2NDAwMDAwICsgMSkgLyA3KTtcbn07XG4vKipcbiAqIERhdGVNYXNrXG4gKlxuICogQSBqYXZhc2NyaXB0IGltcGxlbWVudGF0aW9uIGZvciBCQmogZGF0ZXMgbWFza2luZ1xuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cblxudmFyIERhdGVNYXNrID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRGF0ZU1hc2soKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIERhdGVNYXNrKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhEYXRlTWFzaywgbnVsbCwgW3tcbiAgICBrZXk6IFwibWFza1wiLFxuXG4gICAgLyoqXG4gICAgICogTWFzayBkYXRlXG4gICAgICpcbiAgICAgKiBNYXNrIHRoZSBwYXNzZWQgZGF0ZSB3aXRoIHRoZSBwYXNzZWQgbWFza1xuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGRhdGUgZGF0ZSBhcyBhIHN0cmluZ1xuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtYXNrIG1hc2sgYXMgYSBzdHJpbmdcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW2xvY2FsZT1Ccm93c2VyJ3MgbG9jYWxlXSB0aGUgbGFuZ3VhZ2UgdG8gdXNlIGV4KGVuLVVTKS4gZGVmYXVsdCBpcyB0byB0aGUgc3lzdGVtIGxhbmd1YWdlXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFt0aW1lem9uZT1TeXN0ZW0gdGltZXpvbmVdIHRoZSB0aW1lIHpvbmUgZGVzY3JpcHRvciAoZS5nLiBBbWVyaWNhL0xvc19BbmdlbGVzKS4gZGVmYXVsdCB0byB0aGUgc3lzdGVtXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWV6b25lXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IGEgZGF0ZSBtYXNrZWQgd2l0aCB0aGUgZ2l2ZW4gbWFza1xuICAgICAqL1xuICAgIHZhbHVlOiBmdW5jdGlvbiBtYXNrKGRhdGUsIF9tYXNrLCBsb2NhbGUsIHRpbWV6b25lKSB7XG4gICAgICBpZiAoIWRhdGUpIHJldHVybiAnJztcbiAgICAgIGlmICghX21hc2spIHJldHVybiBkYXRlO1xuICAgICAgdGltZXpvbmUgPSB0aW1lem9uZSB8fCBnZXRUaW1lem9uZU9yT2Zmc2V0KCk7XG4gICAgICBsb2NhbGUgPSBsb2NhbGUgfHwgSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZSB8fCAnZW4tVVMnOyAvLyBtYWtlIHN1cmUgd2UgaGF2ZSBhIGNvbXBsZXRlIGlzbyBzdHJpbmdcblxuICAgICAgZGF0ZSA9IGRhdGUgaW5zdGFuY2VvZiBEYXRlID8gZGF0ZSA6IGZpeFNob3J0SVNPKGRhdGUpO1xuICAgICAgdmFyIGRhdGVPYmplY3QgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2RhdGVfZm5zX3R6X3V0Y1RvWm9uZWRUaW1lX19bXCJhXCIgLyogZGVmYXVsdCAqL10pKGRhdGUsIHRpbWV6b25lKTtcblxuICAgICAgdmFyIHRyYW5zbGF0aW9uID0gRGF0ZU1hc2suX2J1aWxkVHJhbnNsYXRpb24oe1xuICAgICAgICB5ZWFyOiBkYXRlT2JqZWN0LmdldEZ1bGxZZWFyKCksXG4gICAgICAgIG1vbnRoOiBkYXRlT2JqZWN0LmdldE1vbnRoKCkgKyAxLFxuICAgICAgICBtb250aFNob3J0OiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChbbG9jYWxlXSwge1xuICAgICAgICAgIG1vbnRoOiAnc2hvcnQnXG4gICAgICAgIH0pLmZvcm1hdChkYXRlT2JqZWN0KSxcbiAgICAgICAgbW9udGhMb25nOiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChbbG9jYWxlXSwge1xuICAgICAgICAgIG1vbnRoOiAnbG9uZydcbiAgICAgICAgfSkuZm9ybWF0KGRhdGVPYmplY3QpLFxuICAgICAgICBkYXk6IGRhdGVPYmplY3QuZ2V0RGF0ZSgpLFxuICAgICAgICBkYXlTaG9ydDogbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoW2xvY2FsZV0sIHtcbiAgICAgICAgICB3ZWVrZGF5OiAnc2hvcnQnXG4gICAgICAgIH0pLmZvcm1hdChkYXRlT2JqZWN0KSxcbiAgICAgICAgZGF5TG9uZzogbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoW2xvY2FsZV0sIHtcbiAgICAgICAgICB3ZWVrZGF5OiAnbG9uZydcbiAgICAgICAgfSkuZm9ybWF0KGRhdGVPYmplY3QpLFxuICAgICAgICBtaW51dGVzOiBkYXRlT2JqZWN0LmdldE1pbnV0ZXMoKSxcbiAgICAgICAgc2Vjb25kczogZGF0ZU9iamVjdC5nZXRTZWNvbmRzKCksXG5cbiAgICAgICAgZ2V0IGhvdXJzMjQoKSB7XG4gICAgICAgICAgcmV0dXJuIGRhdGVPYmplY3QuZ2V0SG91cnMoKTtcbiAgICAgICAgfSxcblxuICAgICAgICBnZXQgaG91cnMxMigpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5ob3VyczI0ICUgMTIgfHwgMTI7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZGF5T2ZZZWFyOiBnZXREYXlPZlllYXIoZGF0ZU9iamVjdCksXG4gICAgICAgIGRheU9mV2VlazogZGF0ZU9iamVjdC5nZXREYXkoKSArIDEsXG4gICAgICAgIC8vIFN1bmRheSA9IDEgaW4gQkJqIGJ1dCBTdW5kYXkgPSAwIGluIEpTXG4gICAgICAgIHdlZWtOdW1iZXI6IGdldFdlZWtOdW1iZXIoZGF0ZU9iamVjdCwgZ2V0V2Vla1N0YXJ0QnlMb2NhbGUobG9jYWxlKSksXG4gICAgICAgIGxvY2FsZTogbG9jYWxlLFxuICAgICAgICB0aW1lem9uZTogdGltZXpvbmVcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gX21hc2s7XG5cbiAgICAgIGZvciAodmFyIGsgaW4gdHJhbnNsYXRpb24pIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UobmV3IFJlZ0V4cCgnKCUnICsgayArICcpJywgJ2cnKSwgdHJhbnNsYXRpb25ba10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgYSBtYXAgb2JqZWN0IHdoaWNoIGNvbnRhaW5zIGFsbCBwb3NzaWJsZSBmb3JtcyBvZiBtYXNrc1xuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGVEZXRhaWxzIGRhdGVcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge09iamVjdH0gZm9ybXMgbWFza3NcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcIl9idWlsZFRyYW5zbGF0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9idWlsZFRyYW5zbGF0aW9uKGRhdGVEZXRhaWxzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAvLyB5ZWFyXG4gICAgICAgIFl6OiBkYXRlRGV0YWlscy55ZWFyLnRvU3RyaW5nKCkuc3Vic3RyKC0yKSxcbiAgICAgICAgWXM6IGRhdGVEZXRhaWxzLnllYXIsXG4gICAgICAgIFlsOiBkYXRlRGV0YWlscy55ZWFyLFxuICAgICAgICBZcDogU3RyaW5nLmZyb21DaGFyQ29kZShkYXRlRGV0YWlscy55ZWFyKSxcbiAgICAgICAgWWQ6IGRhdGVEZXRhaWxzLnllYXIsXG4gICAgICAgIFk6IGRhdGVEZXRhaWxzLnllYXIsXG4gICAgICAgIC8vIG1vbnRoXG4gICAgICAgIE16OiBTdHJpbmcoZGF0ZURldGFpbHMubW9udGgpLmxlbmd0aCA9PSAxID8gJzAnICsgZGF0ZURldGFpbHMubW9udGggOiBkYXRlRGV0YWlscy5tb250aCxcbiAgICAgICAgTXM6IGRhdGVEZXRhaWxzLm1vbnRoU2hvcnQsXG4gICAgICAgIE1sOiBkYXRlRGV0YWlscy5tb250aExvbmcsXG4gICAgICAgIE1wOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGRhdGVEZXRhaWxzLm1vbnRoKSxcbiAgICAgICAgTWQ6IGRhdGVEZXRhaWxzLm1vbnRoLFxuICAgICAgICBNOiBkYXRlRGV0YWlscy5tb250aCxcbiAgICAgICAgLy8gZGF5XG4gICAgICAgIER6OiBTdHJpbmcoZGF0ZURldGFpbHMuZGF5KS5sZW5ndGggPT0gMSA/ICcwJyArIGRhdGVEZXRhaWxzLmRheSA6IGRhdGVEZXRhaWxzLmRheSxcbiAgICAgICAgRHM6IGRhdGVEZXRhaWxzLmRheVNob3J0LFxuICAgICAgICBEbDogZGF0ZURldGFpbHMuZGF5TG9uZyxcbiAgICAgICAgRHA6IFN0cmluZy5mcm9tQ2hhckNvZGUoZGF0ZURldGFpbHMuZGF5KSxcbiAgICAgICAgRGQ6IGRhdGVEZXRhaWxzLmRheSxcbiAgICAgICAgRDogZGF0ZURldGFpbHMuZGF5LFxuICAgICAgICAvLyBob3VyIDI0XG4gICAgICAgIEh6OiBTdHJpbmcoZGF0ZURldGFpbHMuaG91cnMyNCkubGVuZ3RoID09IDEgPyAnMCcgKyBkYXRlRGV0YWlscy5ob3VyczI0IDogZGF0ZURldGFpbHMuaG91cnMyNCxcbiAgICAgICAgSHM6IGRhdGVEZXRhaWxzLmhvdXJzMjQsXG4gICAgICAgIEhsOiBkYXRlRGV0YWlscy5ob3VyczI0LFxuICAgICAgICBIcDogU3RyaW5nLmZyb21DaGFyQ29kZShkYXRlRGV0YWlscy5ob3VyczI0KSxcbiAgICAgICAgSGQ6IGRhdGVEZXRhaWxzLmhvdXJzMjQsXG4gICAgICAgIEg6IGRhdGVEZXRhaWxzLmhvdXJzMjQsXG4gICAgICAgIC8vIGhvdXIgMTJcbiAgICAgICAgaHo6IFN0cmluZyhkYXRlRGV0YWlscy5ob3VyczEyKS5sZW5ndGggPT0gMSA/ICcwJyArIGRhdGVEZXRhaWxzLmhvdXJzMTIgOiBkYXRlRGV0YWlscy5ob3VyczEyLFxuICAgICAgICBoczogZGF0ZURldGFpbHMuaG91cnMxMixcbiAgICAgICAgaGw6IGRhdGVEZXRhaWxzLmhvdXJzMTIsXG4gICAgICAgIGhwOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGRhdGVEZXRhaWxzLmhvdXJzMTIpLFxuICAgICAgICBoZDogZGF0ZURldGFpbHMuaG91cnMxMixcbiAgICAgICAgaDogZGF0ZURldGFpbHMuaG91cnMxMixcbiAgICAgICAgLy8gbWludXRlc1xuICAgICAgICBtejogU3RyaW5nKGRhdGVEZXRhaWxzLm1pbnV0ZXMpLmxlbmd0aCA9PSAxID8gJzAnICsgZGF0ZURldGFpbHMubWludXRlcyA6IGRhdGVEZXRhaWxzLm1pbnV0ZXMsXG4gICAgICAgIG1zOiBkYXRlRGV0YWlscy5taW51dGVzLFxuICAgICAgICBtbDogZGF0ZURldGFpbHMubWludXRlcyxcbiAgICAgICAgbXA6IFN0cmluZy5mcm9tQ2hhckNvZGUoZGF0ZURldGFpbHMubWludXRlcyksXG4gICAgICAgIG1kOiBkYXRlRGV0YWlscy5taW51dGVzLFxuICAgICAgICBtOiBkYXRlRGV0YWlscy5taW51dGVzLFxuICAgICAgICAvLyBzZWNvbmRzXG4gICAgICAgIHN6OiBTdHJpbmcoZGF0ZURldGFpbHMuc2Vjb25kcykubGVuZ3RoID09IDEgPyAnMCcgKyBkYXRlRGV0YWlscy5zZWNvbmRzIDogZGF0ZURldGFpbHMuc2Vjb25kcyxcbiAgICAgICAgc3M6IGRhdGVEZXRhaWxzLnNlY29uZHMsXG4gICAgICAgIHNsOiBkYXRlRGV0YWlscy5zZWNvbmRzLFxuICAgICAgICBzcDogU3RyaW5nLmZyb21DaGFyQ29kZShkYXRlRGV0YWlscy5zZWNvbmRzKSxcbiAgICAgICAgc2Q6IGRhdGVEZXRhaWxzLnNlY29uZHMsXG4gICAgICAgIHM6IGRhdGVEZXRhaWxzLnNlY29uZHMsXG4gICAgICAgIC8vIEFNICwgUE1cbiAgICAgICAgUFA6IGRhdGVEZXRhaWxzLmhvdXJzMjQgPiAxMiA/ICdQTScgOiAnUE0nLFxuICAgICAgICBQOiBkYXRlRGV0YWlscy5ob3VyczI0ID4gMTIgPyAnUE0nIDogJ0FNJyxcbiAgICAgICAgcHA6IGRhdGVEZXRhaWxzLmhvdXJzMjQgPiAxMiA/ICdwbScgOiAnYW0nLFxuICAgICAgICBwOiBkYXRlRGV0YWlscy5ob3VyczI0ID4gMTIgPyAncG0nIDogJ2FtJyxcbiAgICAgICAgLy8gRGF5IG9mIFllYXJcbiAgICAgICAgSno6IFN0cmluZyhkYXRlRGV0YWlscy5kYXlPZlllYXIpLmxlbmd0aCA9PSAxID8gJzAnICsgZGF0ZURldGFpbHMuZGF5T2ZZZWFyIDogZGF0ZURldGFpbHMuZGF5T2ZZZWFyLFxuICAgICAgICBKczogZGF0ZURldGFpbHMuZGF5T2ZZZWFyLFxuICAgICAgICBKbDogZGF0ZURldGFpbHMuZGF5T2ZZZWFyLFxuICAgICAgICBKZDogZGF0ZURldGFpbHMuZGF5T2ZZZWFyLFxuICAgICAgICBKOiBkYXRlRGV0YWlscy5kYXlPZlllYXIsXG4gICAgICAgIC8vIERheSBPZiBXZWVrXG4gICAgICAgIFd6OiBTdHJpbmcoZGF0ZURldGFpbHMuZGF5T2ZXZWVrKS5sZW5ndGggPT0gMSA/ICcwJyArIGRhdGVEZXRhaWxzLmRheU9mV2VlayA6IGRhdGVEZXRhaWxzLmRheU9mV2VlayxcbiAgICAgICAgV3M6IGRhdGVEZXRhaWxzLmRheU9mV2VlayxcbiAgICAgICAgV2w6IGRhdGVEZXRhaWxzLmRheU9mV2VlayxcbiAgICAgICAgV3A6IFN0cmluZy5mcm9tQ2hhckNvZGUoZGF0ZURldGFpbHMuZGF5T2ZXZWVrKSxcbiAgICAgICAgV2Q6IGRhdGVEZXRhaWxzLmRheU9mV2VlayxcbiAgICAgICAgVzogZGF0ZURldGFpbHMuZGF5T2ZXZWVrLFxuICAgICAgICAvLyB3ZWVrIG51bWJlclxuICAgICAgICB3ejogU3RyaW5nKGRhdGVEZXRhaWxzLndlZWtOdW1iZXIpLmxlbmd0aCA9PSAxID8gJzAnICsgZGF0ZURldGFpbHMud2Vla051bWJlciA6IGRhdGVEZXRhaWxzLndlZWtOdW1iZXIsXG4gICAgICAgIHdzOiBkYXRlRGV0YWlscy53ZWVrTnVtYmVyLFxuICAgICAgICB3bDogZGF0ZURldGFpbHMud2Vla051bWJlcixcbiAgICAgICAgd3A6IFN0cmluZy5mcm9tQ2hhckNvZGUoZGF0ZURldGFpbHMud2Vla051bWJlciksXG4gICAgICAgIHdkOiBkYXRlRGV0YWlscy53ZWVrTnVtYmVyLFxuICAgICAgICB3OiBkYXRlRGV0YWlscy53ZWVrTnVtYmVyXG4gICAgICB9O1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBEYXRlTWFzaztcbn0oKTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiY1wiXSA9IChEYXRlTWFzayk7XG5cbi8qKiovIH0pLFxuLyogOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gdXRjVG9ab25lZFRpbWU7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19saWJfdHpQYXJzZVRpbWV6b25lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9kYXRlX2Zuc19lc21fc3ViTWlsbGlzZWNvbmRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3RvRGF0ZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XG5cblxuXG5cbi8qKlxuICogQG5hbWUgdXRjVG9ab25lZFRpbWVcbiAqIEBjYXRlZ29yeSBUaW1lIFpvbmUgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IGEgZGF0ZS90aW1lIHJlcHJlc2VudGluZyBsb2NhbCB0aW1lIGluIGEgZ2l2ZW4gdGltZSB6b25lIGZyb20gdGhlIFVUQyBkYXRlXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIGEgZGF0ZSBpbnN0YW5jZSB3aXRoIHZhbHVlcyByZXByZXNlbnRpbmcgdGhlIGxvY2FsIHRpbWUgaW4gdGhlIHRpbWUgem9uZVxuICogc3BlY2lmaWVkIG9mIHRoZSBVVEMgdGltZSBmcm9tIHRoZSBkYXRlIHByb3ZpZGVkLiBJbiBvdGhlciB3b3Jkcywgd2hlbiB0aGUgbmV3IGRhdGVcbiAqIGlzIGZvcm1hdHRlZCBpdCB3aWxsIHNob3cgdGhlIGVxdWl2YWxlbnQgaG91cnMgaW4gdGhlIHRhcmdldCB0aW1lIHpvbmUgcmVnYXJkbGVzc1xuICogb2YgdGhlIGN1cnJlbnQgc3lzdGVtIHRpbWUgem9uZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8U3RyaW5nfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHdpdGggdGhlIHJlbGV2YW50IFVUQyB0aW1lXG4gKiBAcGFyYW0ge1N0cmluZ30gdGltZVpvbmUgLSB0aGUgdGltZSB6b25lIHRvIGdldCBsb2NhbCB0aW1lIGZvciwgY2FuIGJlIGFuIG9mZnNldCBvciBJQU5BIHRpbWUgem9uZVxuICogQHBhcmFtIHtPcHRpb25zV2l0aFRafSBbb3B0aW9uc10gLSB0aGUgb2JqZWN0IHdpdGggb3B0aW9ucy4gU2VlIFtPcHRpb25zXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL09wdGlvbnN9XG4gKiBAcGFyYW0gezB8MXwyfSBbb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzPTJdIC0gcGFzc2VkIHRvIGB0b0RhdGVgLiBTZWUgW3RvRGF0ZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy90b0RhdGV9XG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIGVxdWl2YWxlbnQgdGltZSBpbiB0aGUgdGltZSB6b25lXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzYCBtdXN0IGJlIDAsIDEgb3IgMlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJbiBKdW5lIDEwYW0gVVRDIGlzIDZhbSBpbiBOZXcgWW9yayAoLTA0OjAwKVxuICogY29uc3QgcmVzdWx0ID0gdXRjVG9ab25lZFRpbWUoJzIwMTQtMDYtMjVUMTA6MDA6MDAuMDAwWicsICdBbWVyaWNhL05ld19Zb3JrJylcbiAqIC8vPT4gSnVuIDI1IDIwMTQgMDY6MDA6MDBcbiAqL1xuZnVuY3Rpb24gdXRjVG9ab25lZFRpbWUoZGlydHlEYXRlLCB0aW1lWm9uZSwgb3B0aW9ucykge1xuICB2YXIgZGF0ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3RvRGF0ZV9fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShkaXJ0eURhdGUsIG9wdGlvbnMpXG5cbiAgLy8gVGhpcyBkYXRlIGhhcyB0aGUgVVRDIHRpbWUgdmFsdWVzIG9mIHRoZSBpbnB1dCBkYXRlIGF0IHRoZSBzeXN0ZW0gdGltZSB6b25lXG4gIHZhciB1dGNEYXRlID0gbmV3IERhdGUoXG4gICAgZGF0ZS5nZXRVVENGdWxsWWVhcigpLFxuICAgIGRhdGUuZ2V0VVRDTW9udGgoKSxcbiAgICBkYXRlLmdldFVUQ0RhdGUoKSxcbiAgICBkYXRlLmdldFVUQ0hvdXJzKCksXG4gICAgZGF0ZS5nZXRVVENNaW51dGVzKCksXG4gICAgZGF0ZS5nZXRVVENTZWNvbmRzKCksXG4gICAgZGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKVxuICApXG4gIC8vIFdlIGp1c3QgbmVlZCB0byBhcHBseSB0aGUgb2Zmc2V0IGluZGljYXRlZCBieSB0aGUgdGltZSB6b25lIHRvIHRoaXMgbG9jYWxpemVkIGRhdGVcbiAgdmFyIG9mZnNldE1pbGxpc2Vjb25kcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2xpYl90elBhcnNlVGltZXpvbmVfX1tcImFcIiAvKiBkZWZhdWx0ICovXSkodGltZVpvbmUsIGRhdGUpXG5cbiAgcmV0dXJuIG9mZnNldE1pbGxpc2Vjb25kc1xuICAgID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9kYXRlX2Zuc19lc21fc3ViTWlsbGlzZWNvbmRzX19bXCJhXCIgLyogZGVmYXVsdCAqL10pKHV0Y0RhdGUsIG9mZnNldE1pbGxpc2Vjb25kcylcbiAgICA6IHV0Y0RhdGVcbn1cblxuXG4vKioqLyB9KSxcbi8qIDkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IHR6VG9rZW5pemVEYXRlO1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBbeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmRzXSB0b2tlbnMgb2YgdGhlIHByb3ZpZGVkXG4gKiBgZGF0ZWAgYXMgaXQgd2lsbCBiZSByZW5kZXJlZCBpbiB0aGUgYHRpbWVab25lYC5cbiAqL1xuZnVuY3Rpb24gdHpUb2tlbml6ZURhdGUoZGF0ZSwgdGltZVpvbmUpIHtcbiAgdmFyIGR0ZiA9IGdldERhdGVUaW1lRm9ybWF0KHRpbWVab25lKVxuICByZXR1cm4gZHRmLmZvcm1hdFRvUGFydHMgPyBwYXJ0c09mZnNldChkdGYsIGRhdGUpIDogaGFja3lPZmZzZXQoZHRmLCBkYXRlKVxufVxuXG52YXIgdHlwZVRvUG9zID0ge1xuICB5ZWFyOiAwLFxuICBtb250aDogMSxcbiAgZGF5OiAyLFxuICBob3VyOiAzLFxuICBtaW51dGU6IDQsXG4gIHNlY29uZDogNVxufVxuXG5mdW5jdGlvbiBwYXJ0c09mZnNldChkdGYsIGRhdGUpIHtcbiAgdmFyIGZvcm1hdHRlZCA9IGR0Zi5mb3JtYXRUb1BhcnRzKGRhdGUpXG4gIHZhciBmaWxsZWQgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcm1hdHRlZC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwb3MgPSB0eXBlVG9Qb3NbZm9ybWF0dGVkW2ldLnR5cGVdXG5cbiAgICBpZiAocG9zID49IDApIHtcbiAgICAgIGZpbGxlZFtwb3NdID0gcGFyc2VJbnQoZm9ybWF0dGVkW2ldLnZhbHVlLCAxMClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpbGxlZFxufVxuXG5mdW5jdGlvbiBoYWNreU9mZnNldChkdGYsIGRhdGUpIHtcbiAgdmFyIGZvcm1hdHRlZCA9IGR0Zi5mb3JtYXQoZGF0ZSkucmVwbGFjZSgvXFx1MjAwRS9nLCAnJylcbiAgdmFyIHBhcnNlZCA9IC8oXFxkKylcXC8oXFxkKylcXC8oXFxkKyksPyAoXFxkKyk6KFxcZCspOihcXGQrKS8uZXhlYyhmb3JtYXR0ZWQpXG4gIC8vIHZhciBbLCBmTW9udGgsIGZEYXksIGZZZWFyLCBmSG91ciwgZk1pbnV0ZSwgZlNlY29uZF0gPSBwYXJzZWRcbiAgLy8gcmV0dXJuIFtmWWVhciwgZk1vbnRoLCBmRGF5LCBmSG91ciwgZk1pbnV0ZSwgZlNlY29uZF1cbiAgcmV0dXJuIFtwYXJzZWRbM10sIHBhcnNlZFsxXSwgcGFyc2VkWzJdLCBwYXJzZWRbNF0sIHBhcnNlZFs1XSwgcGFyc2VkWzZdXVxufVxuXG4vLyBHZXQgYSBjYWNoZWQgSW50bC5EYXRlVGltZUZvcm1hdCBpbnN0YW5jZSBmb3IgdGhlIElBTkEgYHRpbWVab25lYC4gVGhpcyBjYW4gYmUgdXNlZFxuLy8gdG8gZ2V0IGRldGVybWluaXN0aWMgbG9jYWwgZGF0ZS90aW1lIG91dHB1dCBhY2NvcmRpbmcgdG8gdGhlIGBlbi1VU2AgbG9jYWxlIHdoaWNoXG4vLyBjYW4gYmUgdXNlZCB0byBleHRyYWN0IGxvY2FsIHRpbWUgcGFydHMgYXMgbmVjZXNzYXJ5LlxudmFyIGR0ZkNhY2hlID0ge31cbmZ1bmN0aW9uIGdldERhdGVUaW1lRm9ybWF0KHRpbWVab25lKSB7XG4gIGlmICghZHRmQ2FjaGVbdGltZVpvbmVdKSB7XG4gICAgLy8gTmV3IGJyb3dzZXJzIHVzZSBgaG91ckN5Y2xlYCwgSUUgYW5kIENocm9tZSA8NzMgZG9lcyBub3Qgc3VwcG9ydCBpdCBhbmQgdXNlcyBgaG91cjEyYFxuICAgIHZhciB0ZXN0RGF0ZUZvcm1hdHRlZCA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCdlbi1VUycsIHtcbiAgICAgIGhvdXIxMjogZmFsc2UsXG4gICAgICB0aW1lWm9uZTogJ0FtZXJpY2EvTmV3X1lvcmsnLFxuICAgICAgeWVhcjogJ251bWVyaWMnLFxuICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICBzZWNvbmQ6ICcyLWRpZ2l0J1xuICAgIH0pLmZvcm1hdChuZXcgRGF0ZSgnMjAxNC0wNi0yNVQwNDowMDowMC4xMjNaJykpXG4gICAgdmFyIGhvdXJDeWNsZVN1cHBvcnRlZCA9XG4gICAgICB0ZXN0RGF0ZUZvcm1hdHRlZCA9PT0gJzA2LzI1LzIwMTQsIDAwOjAwOjAwJyB8fFxuICAgICAgdGVzdERhdGVGb3JtYXR0ZWQgPT09ICfigI4wNuKAji/igI4yNeKAji/igI4yMDE04oCOIOKAjjAw4oCOOuKAjjAw4oCOOuKAjjAwJ1xuXG4gICAgZHRmQ2FjaGVbdGltZVpvbmVdID0gaG91ckN5Y2xlU3VwcG9ydGVkXG4gICAgICA/IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCdlbi1VUycsIHtcbiAgICAgICAgICBob3VyMTI6IGZhbHNlLFxuICAgICAgICAgIHRpbWVab25lOiB0aW1lWm9uZSxcbiAgICAgICAgICB5ZWFyOiAnbnVtZXJpYycsXG4gICAgICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBkYXk6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICAgICAgc2Vjb25kOiAnMi1kaWdpdCdcbiAgICAgICAgfSlcbiAgICAgIDogbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoJ2VuLVVTJywge1xuICAgICAgICAgIGhvdXJDeWNsZTogJ2gyMycsXG4gICAgICAgICAgdGltZVpvbmU6IHRpbWVab25lLFxuICAgICAgICAgIHllYXI6ICdudW1lcmljJyxcbiAgICAgICAgICBtb250aDogJzItZGlnaXQnLFxuICAgICAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBzZWNvbmQ6ICcyLWRpZ2l0J1xuICAgICAgICB9KVxuICB9XG4gIHJldHVybiBkdGZDYWNoZVt0aW1lWm9uZV1cbn1cblxuXG4vKioqLyB9KSxcbi8qIDEwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSBzdWJNaWxsaXNlY29uZHM7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19saWJfdG9JbnRlZ2VyX2luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYWRkTWlsbGlzZWNvbmRzX2luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcblxuXG4vKipcbiAqIEBuYW1lIHN1Yk1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogIyMjIHYyLjAuMCBicmVha2luZyBjaGFuZ2VzOlxuICpcbiAqIC0gW0NoYW5nZXMgdGhhdCBhcmUgY29tbW9uIGZvciB0aGUgd2hvbGUgbGlicmFyeV0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdXBncmFkZUd1aWRlLm1kI0NvbW1vbi1DaGFuZ2VzKS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIHN1YnRyYWN0ZWRcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIHN1YnRyYWN0ZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgNzUwIG1pbGxpc2Vjb25kcyBmcm9tIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiB2YXIgcmVzdWx0ID0gc3ViTWlsbGlzZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgNDUsIDMwLCAwKSwgNzUwKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6NDU6MjkuMjUwXG4gKi9cblxuZnVuY3Rpb24gc3ViTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5ICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBwcmVzZW50Jyk7XG4gIH1cblxuICB2YXIgYW1vdW50ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbGliX3RvSW50ZWdlcl9pbmRleF9qc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShkaXJ0eUFtb3VudCk7XG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19hZGRNaWxsaXNlY29uZHNfaW5kZXhfanNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSkoZGlydHlEYXRlLCAtYW1vdW50KTtcbn1cblxuLyoqKi8gfSksXG4vKiAxMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gYWRkTWlsbGlzZWNvbmRzO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbGliX3RvSW50ZWdlcl9pbmRleF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3RvRGF0ZV9pbmRleF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XG5cblxuLyoqXG4gKiBAbmFtZSBhZGRNaWxsaXNlY29uZHNcbiAqIEBjYXRlZ29yeSBNaWxsaXNlY29uZCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiAjIyMgdjIuMC4wIGJyZWFraW5nIGNoYW5nZXM6XG4gKlxuICogLSBbQ2hhbmdlcyB0aGF0IGFyZSBjb21tb24gZm9yIHRoZSB3aG9sZSBsaWJyYXJ5XShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjQ29tbW9uLUNoYW5nZXMpLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgYWRkZWRcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIGFkZGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCA3NTAgbWlsbGlzZWNvbmRzIHRvIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiB2YXIgcmVzdWx0ID0gYWRkTWlsbGlzZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgNDUsIDMwLCAwKSwgNzUwKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6NDU6MzAuNzUwXG4gKi9cblxuZnVuY3Rpb24gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5ICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBwcmVzZW50Jyk7XG4gIH1cblxuICB2YXIgdGltZXN0YW1wID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdG9EYXRlX2luZGV4X2pzX19bXCJhXCIgLyogZGVmYXVsdCAqL10pKGRpcnR5RGF0ZSkuZ2V0VGltZSgpO1xuICB2YXIgYW1vdW50ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbGliX3RvSW50ZWdlcl9pbmRleF9qc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShkaXJ0eUFtb3VudCk7XG4gIHJldHVybiBuZXcgRGF0ZSh0aW1lc3RhbXAgKyBhbW91bnQpO1xufVxuXG4vKioqLyB9KSxcbi8qIDEyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSB0b0RhdGU7XG4vKipcbiAqIEBuYW1lIHRvRGF0ZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgaXRzIGNsb25lLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhIG51bWJlciwgaXQgaXMgdHJlYXRlZCBhcyBhIHRpbWVzdGFtcC5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgbm9uZSBvZiB0aGUgYWJvdmUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiAqKk5vdGUqKjogKmFsbCogRGF0ZSBhcmd1bWVudHMgcGFzc2VkIHRvIGFueSAqZGF0ZS1mbnMqIGZ1bmN0aW9uIGlzIHByb2Nlc3NlZCBieSBgdG9EYXRlYC5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBhcmd1bWVudCAtIHRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHBhcnNlZCBkYXRlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDbG9uZSB0aGUgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZShuZXcgRGF0ZSgyMDE0LCAxLCAxMSwgMTEsIDMwLCAzMCkpXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IHRoZSB0aW1lc3RhbXAgdG8gZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZSgxMzkyMDk4NDMwMDAwKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqL1xuZnVuY3Rpb24gdG9EYXRlKGFyZ3VtZW50KSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJzEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5ICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBwcmVzZW50Jyk7XG4gIH1cblxuICB2YXIgYXJnU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50KTsgLy8gQ2xvbmUgdGhlIGRhdGVcblxuICBpZiAoYXJndW1lbnQgaW5zdGFuY2VvZiBEYXRlIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ29iamVjdCcgJiYgYXJnU3RyID09PSAnW29iamVjdCBEYXRlXScpIHtcbiAgICAvLyBQcmV2ZW50IHRoZSBkYXRlIHRvIGxvc2UgdGhlIG1pbGxpc2Vjb25kcyB3aGVuIHBhc3NlZCB0byBuZXcgRGF0ZSgpIGluIElFMTBcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQuZ2V0VGltZSgpKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgYXJndW1lbnQgPT09ICdudW1iZXInIHx8IGFyZ1N0ciA9PT0gJ1tvYmplY3QgTnVtYmVyXScpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQpO1xuICB9IGVsc2Uge1xuICAgIGlmICgodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJyB8fCBhcmdTdHIgPT09ICdbb2JqZWN0IFN0cmluZ10nKSAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXCJTdGFydGluZyB3aXRoIHYyLjAuMC1iZXRhLjEgZGF0ZS1mbnMgZG9lc24ndCBhY2NlcHQgc3RyaW5ncyBhcyBhcmd1bWVudHMuIFBsZWFzZSB1c2UgYHBhcnNlSVNPYCB0byBwYXJzZSBzdHJpbmdzLiBTZWU6IGh0dHBzOi8vZ2l0LmlvL2ZqdWxlXCIpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuXG4gICAgICBjb25zb2xlLndhcm4obmV3IEVycm9yKCkuc3RhY2spO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG59XG5cbi8qKiovIH0pLFxuLyogMTMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IHRvRGF0ZTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfZGF0ZV9mbnNfZXNtX2xpYl90b0ludGVnZXJfaW5kZXhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2RhdGVfZm5zX2VzbV9saWJfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kc19pbmRleF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19saWJfdHpQYXJzZVRpbWV6b25lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuXG5cblxuXG52YXIgTUlMTElTRUNPTkRTX0lOX0hPVVIgPSAzNjAwMDAwXG52YXIgTUlMTElTRUNPTkRTX0lOX01JTlVURSA9IDYwMDAwXG52YXIgREVGQVVMVF9BRERJVElPTkFMX0RJR0lUUyA9IDJcblxudmFyIHBhdHRlcm5zID0ge1xuICBkYXRlVGltZURlbGltZXRlcjogL1tUIF0vLFxuICBwbGFpblRpbWU6IC86LyxcbiAgdGltZVpvbmVEZWxpbWV0ZXI6IC9bWiBdL2ksXG5cbiAgLy8geWVhciB0b2tlbnNcbiAgWVk6IC9eKFxcZHsyfSkkLyxcbiAgWVlZOiBbXG4gICAgL14oWystXVxcZHsyfSkkLywgLy8gMCBhZGRpdGlvbmFsIGRpZ2l0c1xuICAgIC9eKFsrLV1cXGR7M30pJC8sIC8vIDEgYWRkaXRpb25hbCBkaWdpdFxuICAgIC9eKFsrLV1cXGR7NH0pJC8gLy8gMiBhZGRpdGlvbmFsIGRpZ2l0c1xuICBdLFxuICBZWVlZOiAvXihcXGR7NH0pLyxcbiAgWVlZWVk6IFtcbiAgICAvXihbKy1dXFxkezR9KS8sIC8vIDAgYWRkaXRpb25hbCBkaWdpdHNcbiAgICAvXihbKy1dXFxkezV9KS8sIC8vIDEgYWRkaXRpb25hbCBkaWdpdFxuICAgIC9eKFsrLV1cXGR7Nn0pLyAvLyAyIGFkZGl0aW9uYWwgZGlnaXRzXG4gIF0sXG5cbiAgLy8gZGF0ZSB0b2tlbnNcbiAgTU06IC9eLShcXGR7Mn0pJC8sXG4gIERERDogL14tPyhcXGR7M30pJC8sXG4gIE1NREQ6IC9eLT8oXFxkezJ9KS0/KFxcZHsyfSkkLyxcbiAgV3d3OiAvXi0/VyhcXGR7Mn0pJC8sXG4gIFd3d0Q6IC9eLT9XKFxcZHsyfSktPyhcXGR7MX0pJC8sXG5cbiAgSEg6IC9eKFxcZHsyfShbLixdXFxkKik/KSQvLFxuICBISE1NOiAvXihcXGR7Mn0pOj8oXFxkezJ9KFsuLF1cXGQqKT8pJC8sXG4gIEhITU1TUzogL14oXFxkezJ9KTo/KFxcZHsyfSk6PyhcXGR7Mn0oWy4sXVxcZCopPykkLyxcblxuICAvLyB0aW1lem9uZSB0b2tlbnMgKHRvIGlkZW50aWZ5IHRoZSBwcmVzZW5jZSBvZiBhIHR6KVxuICB0aW1lem9uZTogLyhbWistXS4qfCBVVEN8KD86W2EtekEtWl0rXFwvW2EtekEtWl9dKyg/OlxcL1thLXpBLVpfXSspPykpJC9cbn1cblxuLyoqXG4gKiBAbmFtZSB0b0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGFuIGluc3RhbmNlIG9mIERhdGUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGl0cyBjbG9uZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYSBudW1iZXIsIGl0IGlzIHRyZWF0ZWQgYXMgYSB0aW1lc3RhbXAuXG4gKlxuICogSWYgYW4gYXJndW1lbnQgaXMgYSBzdHJpbmcsIHRoZSBmdW5jdGlvbiB0cmllcyB0byBwYXJzZSBpdC5cbiAqIEZ1bmN0aW9uIGFjY2VwdHMgY29tcGxldGUgSVNPIDg2MDEgZm9ybWF0cyBhcyB3ZWxsIGFzIHBhcnRpYWwgaW1wbGVtZW50YXRpb25zLlxuICogSVNPIDg2MDE6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDFcbiAqIElmIHRoZSBmdW5jdGlvbiBjYW5ub3QgcGFyc2UgdGhlIHN0cmluZyBvciB0aGUgdmFsdWVzIGFyZSBpbnZhbGlkLCBpdCByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgbm9uZSBvZiB0aGUgYWJvdmUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiAqKk5vdGUqKjogKmFsbCogRGF0ZSBhcmd1bWVudHMgcGFzc2VkIHRvIGFueSAqZGF0ZS1mbnMqIGZ1bmN0aW9uIGlzIHByb2Nlc3NlZCBieSBgdG9EYXRlYC5cbiAqIEFsbCAqZGF0ZS1mbnMqIGZ1bmN0aW9ucyB3aWxsIHRocm93IGBSYW5nZUVycm9yYCBpZiBgb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzYCBpcyBub3QgMCwgMSwgMiBvciB1bmRlZmluZWQuXG4gKlxuICogQHBhcmFtIHtEYXRlfFN0cmluZ3xOdW1iZXJ9IGFyZ3VtZW50IC0gdGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEBwYXJhbSB7T3B0aW9uc1dpdGhUWn0gW29wdGlvbnNdIC0gdGhlIG9iamVjdCB3aXRoIG9wdGlvbnMuIFNlZSBbT3B0aW9uc117QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9PcHRpb25zfVxuICogQHBhcmFtIHswfDF8Mn0gW29wdGlvbnMuYWRkaXRpb25hbERpZ2l0cz0yXSAtIHRoZSBhZGRpdGlvbmFsIG51bWJlciBvZiBkaWdpdHMgaW4gdGhlIGV4dGVuZGVkIHllYXIgZm9ybWF0XG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMudGltZVpvbmU9JyddIC0gdXNlZCB0byBzcGVjaWZ5IHRoZSBJQU5BIHRpbWUgem9uZSBvZmZzZXQgb2YgYSBkYXRlIFN0cmluZy5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgcGFyc2VkIGRhdGUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzYCBtdXN0IGJlIDAsIDEgb3IgMlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IHN0cmluZyAnMjAxNC0wMi0xMVQxMTozMDozMCcgdG8gZGF0ZTpcbiAqIHZhciByZXN1bHQgPSB0b0RhdGUoJzIwMTQtMDItMTFUMTE6MzA6MzAnKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCBzdHJpbmcgJyswMjAxNDEwMScgdG8gZGF0ZSxcbiAqIC8vIGlmIHRoZSBhZGRpdGlvbmFsIG51bWJlciBvZiBkaWdpdHMgaW4gdGhlIGV4dGVuZGVkIHllYXIgZm9ybWF0IGlzIDE6XG4gKiB2YXIgcmVzdWx0ID0gdG9EYXRlKCcrMDIwMTQxMDEnLCB7YWRkaXRpb25hbERpZ2l0czogMX0pXG4gKiAvLz0+IEZyaSBBcHIgMTEgMjAxNCAwMDowMDowMFxuICovXG5mdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQsIGRpcnR5T3B0aW9ucykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJzEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5ICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBwcmVzZW50J1xuICAgIClcbiAgfVxuXG4gIGlmIChhcmd1bWVudCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gIH1cblxuICB2YXIgb3B0aW9ucyA9IGRpcnR5T3B0aW9ucyB8fCB7fVxuXG4gIHZhciBhZGRpdGlvbmFsRGlnaXRzID1cbiAgICBvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHMgPT0gbnVsbFxuICAgICAgPyBERUZBVUxUX0FERElUSU9OQUxfRElHSVRTXG4gICAgICA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfZGF0ZV9mbnNfZXNtX2xpYl90b0ludGVnZXJfaW5kZXhfanNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSkob3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzKVxuICBpZiAoXG4gICAgYWRkaXRpb25hbERpZ2l0cyAhPT0gMiAmJlxuICAgIGFkZGl0aW9uYWxEaWdpdHMgIT09IDEgJiZcbiAgICBhZGRpdGlvbmFsRGlnaXRzICE9PSAwXG4gICkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdhZGRpdGlvbmFsRGlnaXRzIG11c3QgYmUgMCwgMSBvciAyJylcbiAgfVxuXG4gIC8vIENsb25lIHRoZSBkYXRlXG4gIGlmIChcbiAgICBhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAodHlwZW9mIGFyZ3VtZW50ID09PSAnb2JqZWN0JyAmJlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50KSA9PT0gJ1tvYmplY3QgRGF0ZV0nKVxuICApIHtcbiAgICAvLyBQcmV2ZW50IHRoZSBkYXRlIHRvIGxvc2UgdGhlIG1pbGxpc2Vjb25kcyB3aGVuIHBhc3NlZCB0byBuZXcgRGF0ZSgpIGluIElFMTBcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQuZ2V0VGltZSgpKVxuICB9IGVsc2UgaWYgKFxuICAgIHR5cGVvZiBhcmd1bWVudCA9PT0gJ251bWJlcicgfHxcbiAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpID09PSAnW29iamVjdCBOdW1iZXJdJ1xuICApIHtcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQpXG4gIH0gZWxzZSBpZiAoXG4gICAgIShcbiAgICAgIHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycgfHxcbiAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudCkgPT09ICdbb2JqZWN0IFN0cmluZ10nXG4gICAgKVxuICApIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICB9XG5cbiAgdmFyIGRhdGVTdHJpbmdzID0gc3BsaXREYXRlU3RyaW5nKGFyZ3VtZW50KVxuXG4gIHZhciBwYXJzZVllYXJSZXN1bHQgPSBwYXJzZVllYXIoZGF0ZVN0cmluZ3MuZGF0ZSwgYWRkaXRpb25hbERpZ2l0cylcbiAgdmFyIHllYXIgPSBwYXJzZVllYXJSZXN1bHQueWVhclxuICB2YXIgcmVzdERhdGVTdHJpbmcgPSBwYXJzZVllYXJSZXN1bHQucmVzdERhdGVTdHJpbmdcblxuICB2YXIgZGF0ZSA9IHBhcnNlRGF0ZShyZXN0RGF0ZVN0cmluZywgeWVhcilcblxuICBpZiAoaXNOYU4oZGF0ZSkpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICB9XG5cbiAgaWYgKGRhdGUpIHtcbiAgICB2YXIgdGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKClcbiAgICB2YXIgdGltZSA9IDBcbiAgICB2YXIgb2Zmc2V0XG5cbiAgICBpZiAoZGF0ZVN0cmluZ3MudGltZSkge1xuICAgICAgdGltZSA9IHBhcnNlVGltZShkYXRlU3RyaW5ncy50aW1lKVxuXG4gICAgICBpZiAoaXNOYU4odGltZSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGF0ZVN0cmluZ3MudGltZXpvbmUgfHwgb3B0aW9ucy50aW1lWm9uZSkge1xuICAgICAgb2Zmc2V0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbGliX3R6UGFyc2VUaW1lem9uZV9fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShcbiAgICAgICAgZGF0ZVN0cmluZ3MudGltZXpvbmUgfHwgb3B0aW9ucy50aW1lWm9uZSxcbiAgICAgICAgbmV3IERhdGUodGltZXN0YW1wICsgdGltZSlcbiAgICAgIClcbiAgICAgIGlmIChpc05hTihvZmZzZXQpKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGdldCBvZmZzZXQgYWNjdXJhdGUgdG8gaG91ciBpbiB0aW1lem9uZXMgdGhhdCBjaGFuZ2Ugb2Zmc2V0XG4gICAgICBvZmZzZXQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2RhdGVfZm5zX2VzbV9saWJfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kc19pbmRleF9qc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShuZXcgRGF0ZSh0aW1lc3RhbXAgKyB0aW1lKSlcbiAgICAgIG9mZnNldCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfZGF0ZV9mbnNfZXNtX2xpYl9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzX2luZGV4X2pzX19bXCJhXCIgLyogZGVmYXVsdCAqL10pKFxuICAgICAgICBuZXcgRGF0ZSh0aW1lc3RhbXAgKyB0aW1lICsgb2Zmc2V0KVxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgRGF0ZSh0aW1lc3RhbXAgKyB0aW1lICsgb2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gIH1cbn1cblxuZnVuY3Rpb24gc3BsaXREYXRlU3RyaW5nKGRhdGVTdHJpbmcpIHtcbiAgdmFyIGRhdGVTdHJpbmdzID0ge31cbiAgdmFyIGFycmF5ID0gZGF0ZVN0cmluZy5zcGxpdChwYXR0ZXJucy5kYXRlVGltZURlbGltZXRlcilcbiAgdmFyIHRpbWVTdHJpbmdcblxuICBpZiAocGF0dGVybnMucGxhaW5UaW1lLnRlc3QoYXJyYXlbMF0pKSB7XG4gICAgZGF0ZVN0cmluZ3MuZGF0ZSA9IG51bGxcbiAgICB0aW1lU3RyaW5nID0gYXJyYXlbMF1cbiAgfSBlbHNlIHtcbiAgICBkYXRlU3RyaW5ncy5kYXRlID0gYXJyYXlbMF1cbiAgICB0aW1lU3RyaW5nID0gYXJyYXlbMV1cbiAgICBkYXRlU3RyaW5ncy50aW1lem9uZSA9IGFycmF5WzJdXG4gICAgaWYgKHBhdHRlcm5zLnRpbWVab25lRGVsaW1ldGVyLnRlc3QoZGF0ZVN0cmluZ3MuZGF0ZSkpIHtcbiAgICAgIGRhdGVTdHJpbmdzLmRhdGUgPSBkYXRlU3RyaW5nLnNwbGl0KHBhdHRlcm5zLnRpbWVab25lRGVsaW1ldGVyKVswXVxuICAgICAgdGltZVN0cmluZyA9IGRhdGVTdHJpbmcuc3Vic3RyKGRhdGVTdHJpbmdzLmRhdGUubGVuZ3RoLCBkYXRlU3RyaW5nLmxlbmd0aClcbiAgICB9XG4gIH1cblxuICBpZiAodGltZVN0cmluZykge1xuICAgIHZhciB0b2tlbiA9IHBhdHRlcm5zLnRpbWV6b25lLmV4ZWModGltZVN0cmluZylcbiAgICBpZiAodG9rZW4pIHtcbiAgICAgIGRhdGVTdHJpbmdzLnRpbWUgPSB0aW1lU3RyaW5nLnJlcGxhY2UodG9rZW5bMV0sICcnKVxuICAgICAgZGF0ZVN0cmluZ3MudGltZXpvbmUgPSB0b2tlblsxXVxuICAgIH0gZWxzZSB7XG4gICAgICBkYXRlU3RyaW5ncy50aW1lID0gdGltZVN0cmluZ1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkYXRlU3RyaW5nc1xufVxuXG5mdW5jdGlvbiBwYXJzZVllYXIoZGF0ZVN0cmluZywgYWRkaXRpb25hbERpZ2l0cykge1xuICB2YXIgcGF0dGVybllZWSA9IHBhdHRlcm5zLllZWVthZGRpdGlvbmFsRGlnaXRzXVxuICB2YXIgcGF0dGVybllZWVlZID0gcGF0dGVybnMuWVlZWVlbYWRkaXRpb25hbERpZ2l0c11cblxuICB2YXIgdG9rZW5cblxuICAvLyBZWVlZIG9yIMKxWVlZWVlcbiAgdG9rZW4gPSBwYXR0ZXJucy5ZWVlZLmV4ZWMoZGF0ZVN0cmluZykgfHwgcGF0dGVybllZWVlZLmV4ZWMoZGF0ZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgdmFyIHllYXJTdHJpbmcgPSB0b2tlblsxXVxuICAgIHJldHVybiB7XG4gICAgICB5ZWFyOiBwYXJzZUludCh5ZWFyU3RyaW5nLCAxMCksXG4gICAgICByZXN0RGF0ZVN0cmluZzogZGF0ZVN0cmluZy5zbGljZSh5ZWFyU3RyaW5nLmxlbmd0aClcbiAgICB9XG4gIH1cblxuICAvLyBZWSBvciDCsVlZWVxuICB0b2tlbiA9IHBhdHRlcm5zLllZLmV4ZWMoZGF0ZVN0cmluZykgfHwgcGF0dGVybllZWS5leGVjKGRhdGVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIHZhciBjZW50dXJ5U3RyaW5nID0gdG9rZW5bMV1cbiAgICByZXR1cm4ge1xuICAgICAgeWVhcjogcGFyc2VJbnQoY2VudHVyeVN0cmluZywgMTApICogMTAwLFxuICAgICAgcmVzdERhdGVTdHJpbmc6IGRhdGVTdHJpbmcuc2xpY2UoY2VudHVyeVN0cmluZy5sZW5ndGgpXG4gICAgfVxuICB9XG5cbiAgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHllYXJcbiAgcmV0dXJuIHtcbiAgICB5ZWFyOiBudWxsXG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VEYXRlKGRhdGVTdHJpbmcsIHllYXIpIHtcbiAgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHllYXJcbiAgaWYgKHllYXIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgdmFyIHRva2VuXG4gIHZhciBkYXRlXG4gIHZhciBtb250aFxuICB2YXIgd2Vla1xuXG4gIC8vIFlZWVlcbiAgaWYgKGRhdGVTdHJpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgZGF0ZSA9IG5ldyBEYXRlKDApXG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5ZWFyKVxuICAgIHJldHVybiBkYXRlXG4gIH1cblxuICAvLyBZWVlZLU1NXG4gIHRva2VuID0gcGF0dGVybnMuTU0uZXhlYyhkYXRlU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBkYXRlID0gbmV3IERhdGUoMClcbiAgICBtb250aCA9IHBhcnNlSW50KHRva2VuWzFdLCAxMCkgLSAxXG5cbiAgICBpZiAoIXZhbGlkYXRlRGF0ZSh5ZWFyLCBtb250aCkpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgfVxuXG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5ZWFyLCBtb250aClcbiAgICByZXR1cm4gZGF0ZVxuICB9XG5cbiAgLy8gWVlZWS1EREQgb3IgWVlZWURERFxuICB0b2tlbiA9IHBhdHRlcm5zLkRERC5leGVjKGRhdGVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGRhdGUgPSBuZXcgRGF0ZSgwKVxuICAgIHZhciBkYXlPZlllYXIgPSBwYXJzZUludCh0b2tlblsxXSwgMTApXG5cbiAgICBpZiAoIXZhbGlkYXRlRGF5T2ZZZWFyRGF0ZSh5ZWFyLCBkYXlPZlllYXIpKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICAgIH1cblxuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZGF5T2ZZZWFyKVxuICAgIHJldHVybiBkYXRlXG4gIH1cblxuICAvLyB5eXl5LU1NLWRkIG9yIFlZWVlNTUREXG4gIHRva2VuID0gcGF0dGVybnMuTU1ERC5leGVjKGRhdGVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGRhdGUgPSBuZXcgRGF0ZSgwKVxuICAgIG1vbnRoID0gcGFyc2VJbnQodG9rZW5bMV0sIDEwKSAtIDFcbiAgICB2YXIgZGF5ID0gcGFyc2VJbnQodG9rZW5bMl0sIDEwKVxuXG4gICAgaWYgKCF2YWxpZGF0ZURhdGUoeWVhciwgbW9udGgsIGRheSkpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgfVxuXG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5ZWFyLCBtb250aCwgZGF5KVxuICAgIHJldHVybiBkYXRlXG4gIH1cblxuICAvLyBZWVlZLVd3dyBvciBZWVlZV3d3XG4gIHRva2VuID0gcGF0dGVybnMuV3d3LmV4ZWMoZGF0ZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgd2VlayA9IHBhcnNlSW50KHRva2VuWzFdLCAxMCkgLSAxXG5cbiAgICBpZiAoIXZhbGlkYXRlV2Vla0RhdGUoeWVhciwgd2VlaykpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgfVxuXG4gICAgcmV0dXJuIGRheU9mSVNPV2Vla1llYXIoeWVhciwgd2VlaylcbiAgfVxuXG4gIC8vIFlZWVktV3d3LUQgb3IgWVlZWVd3d0RcbiAgdG9rZW4gPSBwYXR0ZXJucy5Xd3dELmV4ZWMoZGF0ZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgd2VlayA9IHBhcnNlSW50KHRva2VuWzFdLCAxMCkgLSAxXG4gICAgdmFyIGRheU9mV2VlayA9IHBhcnNlSW50KHRva2VuWzJdLCAxMCkgLSAxXG5cbiAgICBpZiAoIXZhbGlkYXRlV2Vla0RhdGUoeWVhciwgd2VlaywgZGF5T2ZXZWVrKSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgICB9XG5cbiAgICByZXR1cm4gZGF5T2ZJU09XZWVrWWVhcih5ZWFyLCB3ZWVrLCBkYXlPZldlZWspXG4gIH1cblxuICAvLyBJbnZhbGlkIElTTy1mb3JtYXR0ZWQgZGF0ZVxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBwYXJzZVRpbWUodGltZVN0cmluZykge1xuICB2YXIgdG9rZW5cbiAgdmFyIGhvdXJzXG4gIHZhciBtaW51dGVzXG5cbiAgLy8gaGhcbiAgdG9rZW4gPSBwYXR0ZXJucy5ISC5leGVjKHRpbWVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGhvdXJzID0gcGFyc2VGbG9hdCh0b2tlblsxXS5yZXBsYWNlKCcsJywgJy4nKSlcblxuICAgIGlmICghdmFsaWRhdGVUaW1lKGhvdXJzKSkge1xuICAgICAgcmV0dXJuIE5hTlxuICAgIH1cblxuICAgIHJldHVybiAoaG91cnMgJSAyNCkgKiBNSUxMSVNFQ09ORFNfSU5fSE9VUlxuICB9XG5cbiAgLy8gaGg6bW0gb3IgaGhtbVxuICB0b2tlbiA9IHBhdHRlcm5zLkhITU0uZXhlYyh0aW1lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBob3VycyA9IHBhcnNlSW50KHRva2VuWzFdLCAxMClcbiAgICBtaW51dGVzID0gcGFyc2VGbG9hdCh0b2tlblsyXS5yZXBsYWNlKCcsJywgJy4nKSlcblxuICAgIGlmICghdmFsaWRhdGVUaW1lKGhvdXJzLCBtaW51dGVzKSkge1xuICAgICAgcmV0dXJuIE5hTlxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAoaG91cnMgJSAyNCkgKiBNSUxMSVNFQ09ORFNfSU5fSE9VUiArIG1pbnV0ZXMgKiBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFXG4gICAgKVxuICB9XG5cbiAgLy8gaGg6bW06c3Mgb3IgaGhtbXNzXG4gIHRva2VuID0gcGF0dGVybnMuSEhNTVNTLmV4ZWModGltZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgaG91cnMgPSBwYXJzZUludCh0b2tlblsxXSwgMTApXG4gICAgbWludXRlcyA9IHBhcnNlSW50KHRva2VuWzJdLCAxMClcbiAgICB2YXIgc2Vjb25kcyA9IHBhcnNlRmxvYXQodG9rZW5bM10ucmVwbGFjZSgnLCcsICcuJykpXG5cbiAgICBpZiAoIXZhbGlkYXRlVGltZShob3VycywgbWludXRlcywgc2Vjb25kcykpIHtcbiAgICAgIHJldHVybiBOYU5cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgKGhvdXJzICUgMjQpICogTUlMTElTRUNPTkRTX0lOX0hPVVIgK1xuICAgICAgbWludXRlcyAqIE1JTExJU0VDT05EU19JTl9NSU5VVEUgK1xuICAgICAgc2Vjb25kcyAqIDEwMDBcbiAgICApXG4gIH1cblxuICAvLyBJbnZhbGlkIElTTy1mb3JtYXR0ZWQgdGltZVxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBkYXlPZklTT1dlZWtZZWFyKGlzb1dlZWtZZWFyLCB3ZWVrLCBkYXkpIHtcbiAgd2VlayA9IHdlZWsgfHwgMFxuICBkYXkgPSBkYXkgfHwgMFxuICB2YXIgZGF0ZSA9IG5ldyBEYXRlKDApXG4gIGRhdGUuc2V0VVRDRnVsbFllYXIoaXNvV2Vla1llYXIsIDAsIDQpXG4gIHZhciBmb3VydGhPZkphbnVhcnlEYXkgPSBkYXRlLmdldFVUQ0RheSgpIHx8IDdcbiAgdmFyIGRpZmYgPSB3ZWVrICogNyArIGRheSArIDEgLSBmb3VydGhPZkphbnVhcnlEYXlcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpICsgZGlmZilcbiAgcmV0dXJuIGRhdGVcbn1cblxuLy8gVmFsaWRhdGlvbiBmdW5jdGlvbnNcblxudmFyIERBWVNfSU5fTU9OVEggPSBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV1cbnZhciBEQVlTX0lOX01PTlRIX0xFQVBfWUVBUiA9IFszMSwgMjksIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXVxuXG5mdW5jdGlvbiBpc0xlYXBZZWFySW5kZXgoeWVhcikge1xuICByZXR1cm4geWVhciAlIDQwMCA9PT0gMCB8fCAoeWVhciAlIDQgPT09IDAgJiYgeWVhciAlIDEwMCAhPT0gMClcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVEYXRlKHllYXIsIG1vbnRoLCBkYXRlKSB7XG4gIGlmIChtb250aCA8IDAgfHwgbW9udGggPiAxMSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKGRhdGUgIT0gbnVsbCkge1xuICAgIGlmIChkYXRlIDwgMSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgdmFyIGlzTGVhcFllYXIgPSBpc0xlYXBZZWFySW5kZXgoeWVhcilcbiAgICBpZiAoaXNMZWFwWWVhciAmJiBkYXRlID4gREFZU19JTl9NT05USF9MRUFQX1lFQVJbbW9udGhdKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgaWYgKCFpc0xlYXBZZWFyICYmIGRhdGUgPiBEQVlTX0lOX01PTlRIW21vbnRoXSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVEYXlPZlllYXJEYXRlKHllYXIsIGRheU9mWWVhcikge1xuICBpZiAoZGF5T2ZZZWFyIDwgMSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdmFyIGlzTGVhcFllYXIgPSBpc0xlYXBZZWFySW5kZXgoeWVhcilcbiAgaWYgKGlzTGVhcFllYXIgJiYgZGF5T2ZZZWFyID4gMzY2KSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgaWYgKCFpc0xlYXBZZWFyICYmIGRheU9mWWVhciA+IDM2NSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVXZWVrRGF0ZSh5ZWFyLCB3ZWVrLCBkYXkpIHtcbiAgaWYgKHdlZWsgPCAwIHx8IHdlZWsgPiA1Mikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKGRheSAhPSBudWxsICYmIChkYXkgPCAwIHx8IGRheSA+IDYpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVRpbWUoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpIHtcbiAgaWYgKGhvdXJzICE9IG51bGwgJiYgKGhvdXJzIDwgMCB8fCBob3VycyA+PSAyNSkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChtaW51dGVzICE9IG51bGwgJiYgKG1pbnV0ZXMgPCAwIHx8IG1pbnV0ZXMgPj0gNjApKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAoc2Vjb25kcyAhPSBudWxsICYmIChzZWNvbmRzIDwgMCB8fCBzZWNvbmRzID49IDYwKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuXG4vKioqLyB9KSxcbi8qIDE0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzO1xudmFyIE1JTExJU0VDT05EU19JTl9NSU5VVEUgPSA2MDAwMDtcbi8qKlxuICogR29vZ2xlIENocm9tZSBhcyBvZiA2Ny4wLjMzOTYuODcgaW50cm9kdWNlZCB0aW1lem9uZXMgd2l0aCBvZmZzZXQgdGhhdCBpbmNsdWRlcyBzZWNvbmRzLlxuICogVGhleSB1c3VhbGx5IGFwcGVhciBmb3IgZGF0ZXMgdGhhdCBkZW5vdGUgdGltZSBiZWZvcmUgdGhlIHRpbWV6b25lcyB3ZXJlIGludHJvZHVjZWRcbiAqIChlLmcuIGZvciAnRXVyb3BlL1ByYWd1ZScgdGltZXpvbmUgdGhlIG9mZnNldCBpcyBHTVQrMDA6NTc6NDQgYmVmb3JlIDEgT2N0b2JlciAxODkxXG4gKiBhbmQgR01UKzAxOjAwOjAwIGFmdGVyIHRoYXQgZGF0ZSlcbiAqXG4gKiBEYXRlI2dldFRpbWV6b25lT2Zmc2V0IHJldHVybnMgdGhlIG9mZnNldCBpbiBtaW51dGVzIGFuZCB3b3VsZCByZXR1cm4gNTcgZm9yIHRoZSBleGFtcGxlIGFib3ZlLFxuICogd2hpY2ggd291bGQgbGVhZCB0byBpbmNvcnJlY3QgY2FsY3VsYXRpb25zLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdGltZXpvbmUgb2Zmc2V0IGluIG1pbGxpc2Vjb25kcyB0aGF0IHRha2VzIHNlY29uZHMgaW4gYWNjb3VudC5cbiAqL1xuXG5mdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSkge1xuICB2YXIgZGF0ZSA9IG5ldyBEYXRlKGRpcnR5RGF0ZS5nZXRUaW1lKCkpO1xuICB2YXIgYmFzZVRpbWV6b25lT2Zmc2V0ID0gTWF0aC5jZWlsKGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gIGRhdGUuc2V0U2Vjb25kcygwLCAwKTtcbiAgdmFyIG1pbGxpc2Vjb25kc1BhcnRPZlRpbWV6b25lT2Zmc2V0ID0gZGF0ZS5nZXRUaW1lKCkgJSBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFO1xuICByZXR1cm4gYmFzZVRpbWV6b25lT2Zmc2V0ICogTUlMTElTRUNPTkRTX0lOX01JTlVURSArIG1pbGxpc2Vjb25kc1BhcnRPZlRpbWV6b25lT2Zmc2V0O1xufVxuXG4vKioqLyB9KSxcbi8qIDE1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IGdldFdlZWtTdGFydEJ5UmVnaW9uICovXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldFdlZWtTdGFydEJ5TG9jYWxlJDE7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXBpX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2xhbmdSZWdpb25NYXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fcmVnaW9uRGF5TWFwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcblxuXG5cblxuZnVuY3Rpb24gZ2V0V2Vla1N0YXJ0QnlSZWdpb24kMShyZWdpb25Db2RlKSB7XG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FwaV9qc19fW1wiYlwiIC8qIGdldFdlZWtTdGFydEJ5UmVnaW9uICovXSkocmVnaW9uQ29kZSwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19yZWdpb25EYXlNYXBfanNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSk7XG59XG5cbmZ1bmN0aW9uIGdldFdlZWtTdGFydEJ5TG9jYWxlJDEobG9jYWxlKSB7XG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FwaV9qc19fW1wiYVwiIC8qIGdldFdlZWtTdGFydEJ5TG9jYWxlICovXSkobG9jYWxlLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2xhbmdSZWdpb25NYXBfanNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19yZWdpb25EYXlNYXBfanNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSk7XG59XG5cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWFpbi5qcy5tYXBcblxuXG4vKioqLyB9KSxcbi8qIDE2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRXZWVrU3RhcnRCeVJlZ2lvbjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldFdlZWtTdGFydEJ5TG9jYWxlOyB9KTtcbmZ1bmN0aW9uIGdldFdlZWtTdGFydEJ5UmVnaW9uKHJlZ2lvbkNvZGUsIHJlZ2lvbkRheU1hcCkge1xuICAgIHZhciBjb2RlID0gcmVnaW9uRGF5TWFwW3R5cGVvZiByZWdpb25Db2RlID09PSAnc3RyaW5nJyA/IHJlZ2lvbkNvZGUudG9VcHBlckNhc2UoKSA6IHJlZ2lvbkNvZGVdO1xuICAgIHJldHVybiB0eXBlb2YgY29kZSA9PT0gJ251bWJlcicgPyBjb2RlIDogMTtcbn1cblxuZnVuY3Rpb24gZ2V0V2Vla1N0YXJ0QnlMb2NhbGUobG9jYWxlLCBsYW5nUmVnaW9uTWFwLCByZWdpb25EYXlNYXApIHtcbiAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgIHZhciBkYXRhID0gbG9jYWxlLnRvTG93ZXJDYXNlKCkuc3BsaXQoL1stX10vKTtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gZGF0YVswXTtcbiAgICAgICAgdmFyIGNvdW50cnk7XG4gICAgICAgIGlmIChkYXRhWzFdICYmIGRhdGFbMV0ubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICBsYW5ndWFnZSArPSBcIl9cIiArIChkYXRhWzFdKTtcbiAgICAgICAgICAgIGNvdW50cnkgPSBkYXRhWzJdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY291bnRyeSA9IGRhdGFbMV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb3VudHJ5KSB7XG4gICAgICAgICAgICBjb3VudHJ5ID0gbGFuZ1JlZ2lvbk1hcFtsYW5ndWFnZV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvdW50cnkpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRXZWVrU3RhcnRCeVJlZ2lvbihjb3VudHJ5Lm1hdGNoKC9eXFxkKyQvKSA/IE51bWJlcihjb3VudHJ5KSA6IGNvdW50cnksIHJlZ2lvbkRheU1hcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIDE7XG59XG5cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBpLmpzLm1hcFxuXG5cbi8qKiovIH0pLFxuLyogMTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG52YXIgbGFuZ1JlZ2lvbk1hcCA9IHtcbiAgICBlbjogJ1VTJyxcbiAgICB6aDogJ0NOJyxcbiAgICB6aF9oYW5zOiAnQ04nLFxuICAgIGhhbnM6ICdDTicsXG4gICAgd3V1OiAnQ04nLFxuICAgIGhzbjogJ0NOJyxcbiAgICBoYWs6ICdDTicsXG4gICAgbmFuOiAnQ04nLFxuICAgIGdhbjogJ0NOJyxcbiAgICBoaTogJ0lOJyxcbiAgICB0ZTogJ0lOJyxcbiAgICBtcjogJ0lOJyxcbiAgICB0YTogJ0lOJyxcbiAgICBndTogJ0lOJyxcbiAgICBrbjogJ0lOJyxcbiAgICBvcjogJ0lOJyxcbiAgICBtbDogJ0lOJyxcbiAgICBwYV9ndXJ1OiAnSU4nLFxuICAgIGJobzogJ0lOJyxcbiAgICBhd2E6ICdJTicsXG4gICAgYXM6ICdJTicsXG4gICAgbXdyOiAnSU4nLFxuICAgIG1haTogJ0lOJyxcbiAgICBtYWc6ICdJTicsXG4gICAgYmdjOiAnSU4nLFxuICAgIGhuZTogJ0lOJyxcbiAgICBkY2M6ICdJTicsXG4gICAgZHo6ICdCVCcsXG4gICAgdG46ICdCVycsXG4gICAgYW06ICdFVCcsXG4gICAgb206ICdFVCcsXG4gICAgcXVjOiAnR1QnLFxuICAgIGlkOiAnSUQnLFxuICAgIGp2OiAnSUQnLFxuICAgIHN1OiAnSUQnLFxuICAgIG1hZDogJ0lEJyxcbiAgICBtc19hcmFiOiAnSUQnLFxuICAgIGdhOiAnSUUnLFxuICAgIGhlOiAnSUwnLFxuICAgIGphbTogJ0pNJyxcbiAgICBqYTogJ0pQJyxcbiAgICBrbTogJ0tIJyxcbiAgICBrbzogJ0tSJyxcbiAgICBsbzogJ0xBJyxcbiAgICBtaDogJ01IJyxcbiAgICBteTogJ01NJyxcbiAgICBtdDogJ01UJyxcbiAgICBuZTogJ05QJyxcbiAgICBmaWw6ICdQSCcsXG4gICAgY2ViOiAnUEgnLFxuICAgIGlsbzogJ1BIJyxcbiAgICB1cjogJ1BLJyxcbiAgICBwYTogJ1BLJyxcbiAgICBwYV9hcmFiOiAnUEsnLFxuICAgIGFyYWI6ICdQSycsXG4gICAgbGFoOiAnUEsnLFxuICAgIHBzOiAnUEsnLFxuICAgIHNkOiAnUEsnLFxuICAgIHNkX2FyYWI6ICdQSycsXG4gICAgc2tyOiAnUEsnLFxuICAgIGduOiAnUFknLFxuICAgIHRoOiAnVEgnLFxuICAgIHR0czogJ1RIJyxcbiAgICBhZWI6ICdUTicsXG4gICAgemhfaGFudDogJ1RXJyxcbiAgICBoYW50OiAnVFcnLFxuICAgIHNtOiAnV1MnLFxuICAgIHp1OiAnWkEnLFxuICAgIHNuOiAnWlcnLFxuICAgIGFycTogJ0RaJyxcbiAgICBhcjogJ0VHJyxcbiAgICBhcno6ICdFRycsXG4gICAgZmE6ICdJUicsXG4gICAgYXpfYXJhYjogJ0lSJyxcbiAgICBhcnk6ICdNQScsXG4gICAgYm46ICdCRCcsXG4gICAgcmt0OiAnQkQnLFxuICAgIGR2OiAnTVYnXG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKGxhbmdSZWdpb25NYXApO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGFuZ1JlZ2lvbk1hcC5qcy5tYXBcblxuXG4vKioqLyB9KSxcbi8qIDE4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xudmFyIHJlZ2lvbkRheU1hcCA9IHtcbiAgICBBRzogMCxcbiAgICBBVEc6IDAsXG4gICAgMjg6IDAsXG4gICAgQVI6IDAsXG4gICAgQVJHOiAwLFxuICAgIDMyOiAwLFxuICAgIEFTOiAwLFxuICAgIEFTTTogMCxcbiAgICAxNjogMCxcbiAgICBBVTogMCxcbiAgICBBVVM6IDAsXG4gICAgMzY6IDAsXG4gICAgQlI6IDAsXG4gICAgQlJBOiAwLFxuICAgIDc2OiAwLFxuICAgIEJTOiAwLFxuICAgIEJIUzogMCxcbiAgICA0NDogMCxcbiAgICBCVDogMCxcbiAgICBCVE46IDAsXG4gICAgNjQ6IDAsXG4gICAgQlc6IDAsXG4gICAgQldBOiAwLFxuICAgIDcyOiAwLFxuICAgIEJaOiAwLFxuICAgIEJMWjogMCxcbiAgICA4NDogMCxcbiAgICBDQTogMCxcbiAgICBDQU46IDAsXG4gICAgMTI0OiAwLFxuICAgIENOOiAwLFxuICAgIENITjogMCxcbiAgICAxNTY6IDAsXG4gICAgQ086IDAsXG4gICAgQ09MOiAwLFxuICAgIDE3MDogMCxcbiAgICBETTogMCxcbiAgICBETUE6IDAsXG4gICAgMjEyOiAwLFxuICAgIERPOiAwLFxuICAgIERPTTogMCxcbiAgICAyMTQ6IDAsXG4gICAgRVQ6IDAsXG4gICAgRVRIOiAwLFxuICAgIDIzMTogMCxcbiAgICBHVDogMCxcbiAgICBHVE06IDAsXG4gICAgMzIwOiAwLFxuICAgIEdVOiAwLFxuICAgIEdVTTogMCxcbiAgICAzMTY6IDAsXG4gICAgSEs6IDAsXG4gICAgSEtHOiAwLFxuICAgIDM0NDogMCxcbiAgICBITjogMCxcbiAgICBITkQ6IDAsXG4gICAgMzQwOiAwLFxuICAgIElEOiAwLFxuICAgIElETjogMCxcbiAgICAzNjA6IDAsXG4gICAgSUU6IDAsXG4gICAgSVJMOiAwLFxuICAgIDM3MjogMCxcbiAgICBJTDogMCxcbiAgICBJU1I6IDAsXG4gICAgMzc2OiAwLFxuICAgIElOOiAwLFxuICAgIElORDogMCxcbiAgICAzNTY6IDAsXG4gICAgSk06IDAsXG4gICAgSkFNOiAwLFxuICAgIDM4ODogMCxcbiAgICBKUDogMCxcbiAgICBKUE46IDAsXG4gICAgMzkyOiAwLFxuICAgIEtFOiAwLFxuICAgIEtFTjogMCxcbiAgICA0MDQ6IDAsXG4gICAgS0g6IDAsXG4gICAgS0hNOiAwLFxuICAgIDExNjogMCxcbiAgICBLUjogMCxcbiAgICBLT1I6IDAsXG4gICAgNDEwOiAwLFxuICAgIExBOiAwLFxuICAgIExBMDogMCxcbiAgICA0MTg6IDAsXG4gICAgTUg6IDAsXG4gICAgTUhMOiAwLFxuICAgIDU4NDogMCxcbiAgICBNTTogMCxcbiAgICBNTVI6IDAsXG4gICAgMTA0OiAwLFxuICAgIE1POiAwLFxuICAgIE1BQzogMCxcbiAgICA0NDY6IDAsXG4gICAgTVQ6IDAsXG4gICAgTUxUOiAwLFxuICAgIDQ3MDogMCxcbiAgICBNWDogMCxcbiAgICBNRVg6IDAsXG4gICAgNDg0OiAwLFxuICAgIE1aOiAwLFxuICAgIE1PWjogMCxcbiAgICA1MDg6IDAsXG4gICAgTkk6IDAsXG4gICAgTklDOiAwLFxuICAgIDU1ODogMCxcbiAgICBOUDogMCxcbiAgICBOUEw6IDAsXG4gICAgNTI0OiAwLFxuICAgIE5aOiAwLFxuICAgIE5aTDogMCxcbiAgICA1NTQ6IDAsXG4gICAgUEE6IDAsXG4gICAgUEFOOiAwLFxuICAgIDU5MTogMCxcbiAgICBQRTogMCxcbiAgICBQRVI6IDAsXG4gICAgNjA0OiAwLFxuICAgIFBIOiAwLFxuICAgIFBITDogMCxcbiAgICA2MDg6IDAsXG4gICAgUEs6IDAsXG4gICAgUEFLOiAwLFxuICAgIDU4NjogMCxcbiAgICBQUjogMCxcbiAgICBQUkk6IDAsXG4gICAgNjMwOiAwLFxuICAgIFBZOiAwLFxuICAgIFBSWTogMCxcbiAgICA2MDA6IDAsXG4gICAgU0E6IDAsXG4gICAgU0FVOiAwLFxuICAgIDY4MjogMCxcbiAgICBTRzogMCxcbiAgICBTR1A6IDAsXG4gICAgNzAyOiAwLFxuICAgIFNWOiAwLFxuICAgIFNMVjogMCxcbiAgICAyMjI6IDAsXG4gICAgVEg6IDAsXG4gICAgVEhBOiAwLFxuICAgIDc2NDogMCxcbiAgICBUTjogMCxcbiAgICBUVU46IDAsXG4gICAgNzg4OiAwLFxuICAgIFRUOiAwLFxuICAgIFRUTzogMCxcbiAgICA3ODA6IDAsXG4gICAgVFc6IDAsXG4gICAgVFdOOiAwLFxuICAgIDE1ODogMCxcbiAgICBVTTogMCxcbiAgICBVTUk6IDAsXG4gICAgNTgxOiAwLFxuICAgIFVTOiAwLFxuICAgIFVTQTogMCxcbiAgICA4NDA6IDAsXG4gICAgVkU6IDAsXG4gICAgVkVOOiAwLFxuICAgIDg2MjogMCxcbiAgICBWSTogMCxcbiAgICBWSVI6IDAsXG4gICAgODUwOiAwLFxuICAgIFdTOiAwLFxuICAgIFdTTTogMCxcbiAgICA4ODI6IDAsXG4gICAgWUU6IDAsXG4gICAgWUVNOiAwLFxuICAgIDg4NzogMCxcbiAgICBaQTogMCxcbiAgICBaQUY6IDAsXG4gICAgNzEwOiAwLFxuICAgIFpXOiAwLFxuICAgIFpXRTogMCxcbiAgICA3MTY6IDAsXG4gICAgQUU6IDYsXG4gICAgQVJFOiA2LFxuICAgIDc4NDogNixcbiAgICBBRjogNixcbiAgICBBRkc6IDYsXG4gICAgNDogNixcbiAgICBCSDogNixcbiAgICBCSFI6IDYsXG4gICAgNDg6IDYsXG4gICAgREo6IDYsXG4gICAgREpJOiA2LFxuICAgIDI2MjogNixcbiAgICBEWjogNixcbiAgICBEWkE6IDYsXG4gICAgMTI6IDYsXG4gICAgRUc6IDYsXG4gICAgRUdZOiA2LFxuICAgIDgxODogNixcbiAgICBJUTogNixcbiAgICBJUlE6IDYsXG4gICAgMzY4OiA2LFxuICAgIElSOiA2LFxuICAgIElSTjogNixcbiAgICAzNjQ6IDYsXG4gICAgSk86IDYsXG4gICAgSk9SOiA2LFxuICAgIDQwMDogNixcbiAgICBLVzogNixcbiAgICBLV1Q6IDYsXG4gICAgNDE0OiA2LFxuICAgIExZOiA2LFxuICAgIExCWTogNixcbiAgICA0MzQ6IDYsXG4gICAgTUE6IDYsXG4gICAgTUFSOiA2LFxuICAgIDUwNDogNixcbiAgICBPTTogNixcbiAgICBPTU46IDYsXG4gICAgNTEyOiA2LFxuICAgIFFBOiA2LFxuICAgIFFBVDogNixcbiAgICA2MzQ6IDYsXG4gICAgU0Q6IDYsXG4gICAgU0ROOiA2LFxuICAgIDcyOTogNixcbiAgICBTWTogNixcbiAgICBTWVI6IDYsXG4gICAgNzYwOiA2LFxuICAgIEJEOiA1LFxuICAgIEJHRDogNSxcbiAgICA1MDogNSxcbiAgICBNVjogNSxcbiAgICBNRFY6IDUsXG4gICAgNDYyOiA1XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKHJlZ2lvbkRheU1hcCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWdpb25EYXlNYXAuanMubWFwXG5cblxuLyoqKi8gfSksXG4vKiAxOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJiai1tYXNrcyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG52YXIgaXNOdW1iZXJSZWdleCA9IC9eXFxkKyQvO1xudmFyIGlzV2hpdGVzcGFjZVJlZ2V4ID0gL1xccy87XG52YXIgcHVuY3R1YXRpb25MaXN0ID0gJyFcIiMkJSZcXCcoKSorLC0uLzo7PD0+P0BbXV5fYHt8fX4nO1xuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGluIGxvd2VyIGNhc2VcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKi9cblxudmFyIGlzTG93ZXJDYXNlID0gZnVuY3Rpb24gaXNMb3dlckNhc2Uoc3RyKSB7XG4gIHJldHVybiBzdHIgPT0gc3RyLnRvTG93ZXJDYXNlKCkgJiYgc3RyICE9IHN0ci50b1VwcGVyQ2FzZSgpO1xufTtcbi8qKlxuICogQ2hlY2sgaWYgdGhlIGdpdmVuIHN0cmluZyBpcyBpbiB1cHBlciBjYXNlXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICovXG5cblxudmFyIGlzVXBwZXJDYXNlID0gZnVuY3Rpb24gaXNVcHBlckNhc2Uoc3RyKSB7XG4gIHJldHVybiBzdHIgPT0gc3RyLnRvVXBwZXJDYXNlKCkgJiYgc3RyICE9IHN0ci50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIHBhc3NPclRocm93RXJyb3IgPSBmdW5jdGlvbiBwYXNzT3JUaHJvd0Vycm9yKGxvb3NlLCByZXQsIGksIHN0cikge1xuICBpZiAoIWxvb3NlKSB7XG4gICAgdmFyIF9jaGFyID0gc3RyLmNoYXJBdChpKTtcblxuICAgIHZhciBwb3MgPSBpICsgMTtcbiAgICB0aHJvdyB7XG4gICAgICBuYW1lOiAnU3RyaW5nTWFza0Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6IFwiU3RyaW5nTWFza0Vycm9yOiBlcnJvciBhcHBseWluZyBtYXNrIGF0IHBvc2l0aW9uIFxcXCJcIi5jb25jYXQocG9zLCBcIlxcXCIgLCBjaGFyIFxcXCJcIikuY29uY2F0KF9jaGFyLCBcIlxcXCJcIiksXG4gICAgICBwb3M6IHBvcyxcbiAgICAgIFwiY2hhclwiOiBfY2hhclxuICAgIH07XG4gIH0gZWxzZSByZXRbaV0gPSAnICc7XG59O1xuLyoqXG4gKiBOdW1iZXJNYXNrXG4gKlxuICogQSBqYXZhc2NyaXB0IGltcGxlbWVudGF0aW9uIGZvciBCQmogbnVtYmVycyBtYXNraW5nXG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqL1xuXG5cbnZhciBTdHJpbmdNYXNrID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3RyaW5nTWFzaygpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3RyaW5nTWFzayk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3RyaW5nTWFzaywgbnVsbCwgW3tcbiAgICBrZXk6IFwibWFza1wiLFxuXG4gICAgLyoqXG4gICAgICogTWFzayB0aGUgZ2l2ZW4gc3RyaW5nIHdpdGggdGhlIGdpdmVuIG1hc2sgYWNjb3JkaW5nIHRvIEJCaiBydWxlc1xuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHN0ciB0aGUgc3RyaW5nIHRvIG1hc2tcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWFzayB0aGUgbWFzayB0byB1c2UgZm9yIGZvcm1hdHRpbmdcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtsb29zZT10cnVlXSB3aGVuIHRydWUgLCBlcnJvcnMgd2lsbCBiZSBpZ25vcmVkIGFuZCB0aGUgbWV0aG9kIHdpbGwgdHJ5IGF0IGFwcGx5IHRoZSBtYXNrXG4gICAgICogICAgICAgICAgICAgICAgYW55d2F5ICwgb3RoZXJ3aXNlIGl0IHdpbGwgc3RvcCBhdCBmaXJzdCBlcnJvciBhbmQgdGhyb3cgaXQuXG4gICAgICogXG4gICAgICogQHRocm93cyB7TWFza0lzVG9vU2hvcnRFcnJvcn1cbiAgICAgKiBAdGhyb3dzIHtTdHJpbmdNYXNrRXJyb3J9XG4gICAgICogQHRocm93cyB7TWFza0Vycm9yfVxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IHRoZSBtYXNrZWQgc3RyaW5nXG4gICAgICovXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG1hc2soc3RyLCBfbWFzaykge1xuICAgICAgdmFyIGxvb3NlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB0cnVlO1xuICAgICAgc3RyID0gU3RyaW5nKHN0cik7XG4gICAgICBfbWFzayA9IFN0cmluZyhfbWFzayk7XG4gICAgICB2YXIgbWFza0xlbiA9IF9tYXNrLmxlbmd0aDtcbiAgICAgIHZhciBzdHJMZW4gPSBzdHIubGVuZ3RoO1xuXG4gICAgICBpZiAoc3RyTGVuID4gbWFza0xlbikge1xuICAgICAgICBpZiAobG9vc2UpIHJldHVybiBzdHI7IC8vIGZyaWVuZGx5IHNpbGVudCBmYWlsXG4gICAgICAgIGVsc2UgdGhyb3cge1xuICAgICAgICAgICAgbmFtZTogJ01hc2tJc1Rvb1Nob3J0RXJyb3InLFxuICAgICAgICAgICAgbWVzc2FnZTogXCJNYXNrSXNUb29TaG9ydEVycm9yOiBNYXNrIGlzIHNob3J0ZXIgdGhhbiB0aGUgcGFzc2VkIHN0cmluZ1wiXG4gICAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJldCA9IG5ldyBBcnJheShtYXNrTGVuKTtcbiAgICAgIHZhciBwb3MgPSAwOyAvLyB0byBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBzdHJcblxuICAgICAgdmFyIG1hc2tCeXRlID0gJyc7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFza0xlbjsgaSsrKSB7XG4gICAgICAgIG1hc2tCeXRlID0gX21hc2suY2hhckF0KGkpO1xuXG4gICAgICAgIHN3aXRjaCAobWFza0J5dGUpIHtcbiAgICAgICAgICBjYXNlICdYJzpcbiAgICAgICAgICAgIC8vIG1hdGNoIGFueSBjaGFyYWN0ZXJcbiAgICAgICAgICAgIHJldFtpXSA9IHBvcyA8IHN0ckxlbiA/IHN0ci5jaGFyQXQocG9zKSA6ICcgJztcbiAgICAgICAgICAgICsrcG9zO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdBJzpcbiAgICAgICAgICAgIC8vIG1hdGNoIGxldHRlcjsgZm9yY2UgdXBwZXIgY2FzZVxuICAgICAgICAgICAgaWYgKHBvcyA8IHN0ckxlbikge1xuICAgICAgICAgICAgICB2YXIgX2J5dGUgPSBzdHIuY2hhckF0KHBvcyk7XG5cbiAgICAgICAgICAgICAgaWYgKGlzVXBwZXJDYXNlKF9ieXRlKSkgcmV0W2ldID0gX2J5dGU7ZWxzZSBpZiAoaXNMb3dlckNhc2UoX2J5dGUpKSByZXRbaV0gPSBfYnl0ZS50b1VwcGVyQ2FzZSgpO2Vsc2UgcGFzc09yVGhyb3dFcnJvcihsb29zZSwgcmV0LCBpLCBzdHIpO1xuICAgICAgICAgICAgfSBlbHNlIHJldFtpXSA9ICcgJztcblxuICAgICAgICAgICAgKytwb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ2EnOlxuICAgICAgICAgICAgLy8gbWF0Y2ggbGV0dGVyXG4gICAgICAgICAgICBpZiAocG9zIDwgc3RyTGVuKSB7XG4gICAgICAgICAgICAgIHZhciBfYnl0ZTIgPSBzdHIuY2hhckF0KHBvcyk7XG5cbiAgICAgICAgICAgICAgaWYgKGlzVXBwZXJDYXNlKF9ieXRlMikgfHwgaXNMb3dlckNhc2UoX2J5dGUyKSkgcmV0W2ldID0gX2J5dGUyO2Vsc2UgcGFzc09yVGhyb3dFcnJvcihsb29zZSwgcmV0LCBpLCBzdHIpO1xuICAgICAgICAgICAgfSBlbHNlIHJldFtpXSA9ICcgJztcblxuICAgICAgICAgICAgKytwb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJzAnOlxuICAgICAgICAgICAgLy8gbWF0Y2ggZGlnaXRcbiAgICAgICAgICAgIGlmIChwb3MgPCBzdHJMZW4pIHtcbiAgICAgICAgICAgICAgdmFyIF9ieXRlMyA9IHN0ci5jaGFyQXQocG9zKTtcblxuICAgICAgICAgICAgICBpZiAoaXNOdW1iZXJSZWdleC50ZXN0KF9ieXRlMykpIHJldFtpXSA9IF9ieXRlMztlbHNlIHBhc3NPclRocm93RXJyb3IobG9vc2UsIHJldCwgaSwgc3RyKTtcbiAgICAgICAgICAgIH0gZWxzZSByZXRbaV0gPSAnICc7XG5cbiAgICAgICAgICAgICsrcG9zO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdaJzpcbiAgICAgICAgICAgIC8vIG1hdGNoIGxldHRlciBvciBkaWdpdDsgZm9yY2UgdXBwZXIgY2FzZVxuICAgICAgICAgICAgaWYgKHBvcyA8IHN0ckxlbikge1xuICAgICAgICAgICAgICB2YXIgX2J5dGU0ID0gc3RyLmNoYXJBdChwb3MpO1xuXG4gICAgICAgICAgICAgIGlmIChpc1VwcGVyQ2FzZShfYnl0ZTQpIHx8IGlzTnVtYmVyUmVnZXgudGVzdChfYnl0ZTQpKSByZXRbaV0gPSBfYnl0ZTQ7ZWxzZSBpZiAoaXNMb3dlckNhc2UoX2J5dGU0KSkgcmV0W2ldID0gX2J5dGU0LnRvVXBwZXJDYXNlKCk7ZWxzZSBwYXNzT3JUaHJvd0Vycm9yKGxvb3NlLCByZXQsIGksIHN0cik7XG4gICAgICAgICAgICB9IGVsc2UgcmV0W2ldID0gJyAnO1xuXG4gICAgICAgICAgICArK3BvcztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAneic6XG4gICAgICAgICAgICAvLyBtYXRjaCBsZXR0ZXIgb3IgZGlnaXRcbiAgICAgICAgICAgIGlmIChwb3MgPCBzdHJMZW4pIHtcbiAgICAgICAgICAgICAgdmFyIF9ieXRlNSA9IHN0ci5jaGFyQXQocG9zKTtcblxuICAgICAgICAgICAgICBpZiAoaXNVcHBlckNhc2UoX2J5dGU1KSB8fCBpc0xvd2VyQ2FzZShfYnl0ZTUpIHx8IGlzTnVtYmVyUmVnZXgudGVzdChfYnl0ZTUpKSByZXRbaV0gPSBfYnl0ZTU7ZWxzZSBwYXNzT3JUaHJvd0Vycm9yKGxvb3NlLCByZXQsIGksIHN0cik7XG4gICAgICAgICAgICB9IGVsc2UgcmV0W2ldID0gJyAnO1xuXG4gICAgICAgICAgICArK3BvcztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdVJzpcbiAgICAgICAgICAgIC8vIG1hdGNoIGxldHRlciAoZm9yY2UgdXBwZXIgY2FzZSksIGRpZ2l0LCB3aGl0ZXNwYWNlIG9yIHB1bmN0dWF0aW9uLlxuICAgICAgICAgICAgaWYgKHBvcyA8IHN0ckxlbikge1xuICAgICAgICAgICAgICB2YXIgX2J5dGU2ID0gc3RyLmNoYXJBdChwb3MpO1xuXG4gICAgICAgICAgICAgIGlmIChpc0xvd2VyQ2FzZShfYnl0ZTYpKSByZXRbaV0gPSBfYnl0ZTYudG9VcHBlckNhc2UoKTtlbHNlIGlmIChpc1VwcGVyQ2FzZShfYnl0ZTYpIHx8IGlzTnVtYmVyUmVnZXgudGVzdChfYnl0ZTYpIHx8IGlzV2hpdGVzcGFjZVJlZ2V4LnRlc3QoX2J5dGU2KSB8fCBwdW5jdHVhdGlvbkxpc3QuaW5kZXhPZihfYnl0ZTYpID4gLTEpIHJldFtpXSA9IF9ieXRlNjtlbHNlIHBhc3NPclRocm93RXJyb3IobG9vc2UsIHJldCwgaSwgc3RyKTtcbiAgICAgICAgICAgIH0gZWxzZSByZXRbaV0gPSAnICc7XG5cbiAgICAgICAgICAgICsrcG9zO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0W2ldID0gbWFza0J5dGU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocG9zIDwgc3RyTGVuKSB7XG4gICAgICAgIGlmICghbG9vc2UpIHtcbiAgICAgICAgICB0aHJvdyB7XG4gICAgICAgICAgICBuYW1lOiAnTWFza0Vycm9yJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdNYXNrIGNhbm5vdCBiZSBhcHBsaWVkJ1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldC5qb2luKCcnKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3RyaW5nTWFzaztcbn0oKTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IChTdHJpbmdNYXNrKTtcblxuLyoqKi8gfSksXG4vKiAyMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1R5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcbi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYmotbWFza3MgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fVHlwZXNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSk7XG5cbi8qKiovIH0pLFxuLyogMjEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19OdW1iZXJNYXNrX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fRGF0ZU1hc2tfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19TdHJpbmdNYXNrX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG4vKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmJqLW1hc2tzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuXG5cbi8qKlxuICogVHlwZXNcbiAqXG4gKiBCQmogbWFza3MgZmFjdG9yeVxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cblxudmFyIFR5cGVzID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gVHlwZXMoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFR5cGVzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhUeXBlcywgbnVsbCwgW3tcbiAgICBrZXk6IFwibnVtYmVyXCIsXG5cbiAgICAvKipcbiAgICAgKiBNYXNrIHRoZSBnaXZlbiBudW1iZXIgd2l0aCB0aGUgZ2l2ZW4gbWFzayBhY2NvcmRpbmcgdG8gQkJqIHJ1bGVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gbnVtYmVyIHRoZSBudW1iZXIgdG8gZm9ybWF0XG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG1hc2sgdGhlIG1hc2sgdG8gdXNlIGZvciBmb3JtYXR0aW5nXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFtncm91cGluZ1NlcGFyYXRvcj0sXSAtIGEgY2hhciB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBncm91cGluZyBzZXBhcmF0b3JcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW2RlY2ltYWxTZXBhcmF0b3I9Ll0gIC0gYSBjaGFyIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGRlY2ltYWwgc2VwYXJhdG9yXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBbZm9yY2VUcmFpbGluZ1plcm9zPWZhbHNlXSAtIEFmZmVjdHMgdGhlIG91dHB1dCBieSBzd2l0Y2hpbmcgdGhlIHdheSBhIG1hc2sgd2l0aCBcIiNcIiBjaGFyYWN0ZXJzIGluIHRoZSB0cmFpbGluZyBwb3NpdGlvbnMgaXMgZmlsbGVkLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBleGFtcGxlLCB0aGUgZnVuY3Rpb24gYE51bWJlck1hc2subWFzayguMTA6XCIjLiMjXCIpYCByZXR1cm5zIGAgLjEwYCBpbnN0ZWFkIG9mIGAgLjEgYFxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW2xvb3NlPXRydWVdIHdoZW4gdHJ1ZSAsIGVycm9ycyB3aWxsIGJlIGlnbm9yZWQgYW5kIHRoZSBtZXRob2Qgd2lsbCB0cnkgYXQgYXBwbHkgdGhlIG1hc2tcbiAgICAgKiAgICAgICAgICAgICAgICBhbnl3YXkgLCBvdGhlcndpc2UgaXQgd2lsbCBzdG9wIGF0IGZpcnN0IGVycm9yIGFuZCB0aHJvdyBpdC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IHRoZSBtYXNrZWQgbnVtYmVyXG4gICAgICovXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG51bWJlcihfbnVtYmVyLCBtYXNrKSB7XG4gICAgICB2YXIgZ3JvdXBpbmdTZXBhcmF0b3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6ICcsJztcbiAgICAgIHZhciBkZWNpbWFsU2VwYXJhdG9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiAnLic7XG4gICAgICB2YXIgZm9yY2VUcmFpbGluZ1plcm9zID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiBmYWxzZTtcbiAgICAgIHZhciBsb29zZSA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzVdIDogdHJ1ZTtcbiAgICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX051bWJlck1hc2tfX1tcImFcIiAvKiBkZWZhdWx0ICovXS5tYXNrKF9udW1iZXIsIG1hc2ssIGdyb3VwaW5nU2VwYXJhdG9yLCBkZWNpbWFsU2VwYXJhdG9yLCBmb3JjZVRyYWlsaW5nWmVyb3MsIGxvb3NlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFzayBhIGRhdGUgYWNjb3JkaW5nIHRvIGJiaiBtYXNraW5nIHJ1bGVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZGF0ZSBkYXRlIGFzIGEgc3RyaW5nXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG1hc2sgbWFzayBhcyBhIHN0cmluZ1xuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbbG9jYWxlPUJyb3dzZXIncyBsb2NhbGVdIHRoZSBsYW5ndWFnZSB0byB1c2UgZXgoZW4tVVMpLiBkZWZhdWx0IGlzIHRvIHRoZSBzeXN0ZW0gbGFuZ3VhZ2VcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW3RpbWV6b25lPVN5c3RlbSB0aW1lem9uZV0gdGhlIHRpbWUgem9uZSBkZXNjcmlwdG9yIChlLmcuIEFtZXJpY2EvTG9zX0FuZ2VsZXMpLiBkZWZhdWx0IHRvIHRoZSBzeXN0ZW1cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXpvbmVcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1N0cmluZ30gbnVtYmVyIG1hc2tlZCB3aXRoIHRoZSBnaXZlbiBtYXNrXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRhdGUoX2RhdGUsIG1hc2ssIGxvY2FsZSwgdGltZXpvbmUpIHtcbiAgICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX0RhdGVNYXNrX19bXCJjXCIgLyogZGVmYXVsdCAqL10ubWFzayhfZGF0ZSwgbWFzaywgbG9jYWxlLCB0aW1lem9uZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hc2sgdGhlIGdpdmVuIHN0cmluZyB3aXRoIHRoZSBnaXZlbiBtYXNrIGFjY29yZGluZyB0byBCQmogcnVsZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgdGhlIHN0cmluZyB0byBtYXNrXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG1hc2sgdGhlIG1hc2sgdG8gdXNlIGZvciBmb3JtYXR0aW5nXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBbbG9vc2U9dHJ1ZV0gd2hlbiB0cnVlICwgZXJyb3JzIHdpbGwgYmUgaWdub3JlZCBhbmQgdGhlIG1ldGhvZCB3aWxsIHRyeSBhdCBhcHBseSB0aGUgbWFza1xuICAgICAqICAgICAgICAgICAgICAgIGFueXdheSAsIG90aGVyd2lzZSBpdCB3aWxsIHN0b3AgYXQgZmlyc3QgZXJyb3IgYW5kIHRocm93IGl0LlxuICAgICAqXG4gICAgICogQHRocm93cyB7TWFza0lzVG9vU2hvcnRFcnJvcn1cbiAgICAgKiBAdGhyb3dzIHtTdHJpbmdNYXNrRXJyb3J9XG4gICAgICogQHRocm93cyB7TWFza0Vycm9yfVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N0cmluZ30gdGhlIG1hc2tlZCBzdHJpbmdcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcInN0cmluZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzdHJpbmcoc3RyLCBtYXNrKSB7XG4gICAgICB2YXIgbG9vc2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHRydWU7XG4gICAgICByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19TdHJpbmdNYXNrX19bXCJhXCIgLyogZGVmYXVsdCAqL10ubWFzayhzdHIsIG1hc2ssIGxvb3NlKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gVHlwZXM7XG59KCk7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAoVHlwZXMpO1xuXG4vKioqLyB9KVxuLyoqKioqKi8gXSk7XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJiai1tYXNrcy5qcy5tYXAiLCJpZighZ2xvYmFsW1wiQmFzaXNcIl0pIGdsb2JhbFtcIkJhc2lzXCJdID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbFtcIkJhc2lzXCJdW1wiSW5wdXRNYXNraW5nXCJdID0gcmVxdWlyZShcIi0hRDpcXFxcR2l0aHViXFxcXEJCakdyaWRFeFdpZGdldFxcXFxjbGllbnRcXFxcbm9kZV9tb2R1bGVzXFxcXGJhYmVsLWxvYWRlclxcXFxsaWJcXFxcaW5kZXguanM/P3JlZi0tNCEuXFxcXGJhc2lzLWlucHV0LW1hc2tpbmcuanNcIik7IiwiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiQWdHcmlkQ29tcG9uZW50c1wiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJCYXNpc1wiXSA9IHJvb3RbXCJCYXNpc1wiXSB8fCB7fSwgcm9vdFtcIkJhc2lzXCJdW1wiQWdHcmlkQ29tcG9uZW50c1wiXSA9IGZhY3RvcnkoKTtcbn0pKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiBcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgZmQ3ZjYwNDIxOTJlMTIzMmNmNjUiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMF9fO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcImNvbW1vbmpzXCI6XCJiYmotbWFza3Mvc3JjL1N0cmluZ01hc2tcIixcImNvbW1vbmpzMlwiOlwiYmJqLW1hc2tzL3NyYy9TdHJpbmdNYXNrXCIsXCJhbWRcIjpcImJiai1tYXNrcy9zcmMvU3RyaW5nTWFza1wiLFwicm9vdFwiOltcIkJCalwiLFwiTWFza3NcIixcIlN0cmluZ01hc2tcIl19XG4vLyBtb2R1bGUgaWQgPSAwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIiwiLypcclxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtaW5wdXQtbWFza2luZyBsaWIuXHJcbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cclxuICpcclxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcclxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXHJcbiAqL1xyXG5cclxuaW1wb3J0IFRleHRJbnB1dCBmcm9tICcuL1RleHRJbnB1dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRleHRJbnB1dFxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvVGV4dElucHV0L2luZGV4LmpzIiwiLypcclxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtaW5wdXQtbWFza2luZyBsaWIuXHJcbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cclxuICpcclxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcclxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXHJcbiAqL1xyXG5cclxuaW1wb3J0IFN0cmluZ01hc2sgZnJvbSAnYmJqLW1hc2tzL3NyYy9TdHJpbmdNYXNrJ1xyXG5pbXBvcnQge1xyXG4gIG1hc2tJZk5vdE1hc2tlZCxcclxuICB1bm1hc2ssXHJcbiAgZmluZENhcmV0UG9zaXRpb24sXHJcbiAgZ2VuZXJhdGVQYXR0ZXJuRnJvbU1hc2ssXHJcbn0gZnJvbSAnLi90b29scy5qcydcclxuXHJcbi8qKlxyXG4gKiBUaGUgYFRleHRJbnB1dGAgd2lsbCB3cmFwIHRleHQgaW5wdXRzIGFuZCBhcHBseSB0aGUgZ2l2ZW4gW2JiaiBzdHJpbmcgbWFza10oaHR0cHM6Ly9naXRodWIuY29tL0Jhc2lzSHViL2Jiai1tYXNrcyNzdHJpbmctbWFza3MpXHJcbiAqXHJcbiAqICoqT3B0aW9ucyoqXHJcbiAqXHJcbiAqIF9PcHRpb25zIGNhbiBiZSBwYXNzZWQgdmlhIGRhdGEgYXR0cmlidXRlcyAuIEZvciBkYXRhIGF0dHJpYnV0ZXMsIGFwcGVuZCB0aGUgb3B0aW9uIG5hbWUgdG8gZGF0YS0sIGFzIGluIGRhdGEtbWFza19cclxuICpcclxuICogfCBPcHRpb24gICAgfCBEZWZhdWx0IHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqIHwtLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxyXG4gKiB8IG1hc2sgfCAgICAgICAgIHwgVGhlIGJiaiBzdHJpbmcgbWFzayBAc2VlIFtCQmogU3RyaW5nIE1hc2tzXShodHRwczovL2dpdGh1Yi5jb20vQmFzaXNIdWIvYmJqLW1hc2tzI3N0cmluZy1tYXNrcykgfFxyXG4gKlxyXG4gKiAgPGJyPlxyXG4gKlxyXG4gKiAqKkV4YW1wbGUgOioqXHJcbiAqIGBgYGh0bWxcclxuICogIDxpbnB1dCBjbGFzcz1cImJiai10ZXh0LW1hc2tlZFwiIG5hbWU9XCJ0ZXN0XCIgaWQ9XCJ0ZXN0XCIgdmFsdWU9XCJlZDIzXCIgZGF0YS1tYXNrPVwiQUEtMDBcIj5cclxuICpcclxuICogIDxzY3JpcHQ+XHJcbiAqICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbiAoZSkge1xyXG4gKiAgICAgIG5ldyBCYXNpcy5JbnB1dE1hc2tpbmcuVGV4dElucHV0KHtcclxuICogICAgICAgICBvblVwZGF0ZTogKG1hc2tlZFZhbHVlICwgcmF3VmFsdWUgLCBpbnB1dCkgPT4ge1xyXG4gKiAgICAgICAgICAgIC8vIGRvIHNvbWV0aGluZ1xyXG4gKiAgICAgICAgIH0sXHJcbiAqICAgICAgICAgb25JbnZhbGlkOiAoZXJyICwgaW5wdXQpID0+IHtcclxuICogICAgICAgICAgICAvLyBkbyBzb21ldGhpbmdcclxuICogICAgICAgICB9XHJcbiAqICAgICAgfSlcclxuICogICAgfSlcclxuICogIDwvc2NyaXB0PlxyXG4gKiBgYGBcclxuICpcclxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cclxuICovXHJcbmNsYXNzIFRleHRJbnB1dCB7XHJcbiAgLyoqXHJcbiAgICogQ29uc3RydWN0IG5ldyBUZXh0SW5wdXRcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7P09iamVjdH0gb3B0aW9ucyAtIFRoZSBpbnB1dCBvcHRpb25zLlxyXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8U3RyaW5nfSBbb3B0aW9ucy5lbGVtZW50cz1cIi5iYmotdGV4dC1tYXNrZWRcIl0gLSBUaGUgY2xhc3MgbmFtZSBvciB0aGUgbm9kZSB0byB1c2VcclxuICAgKiBAcGFyYW0ge0hUTUxEb2N1bWVudH0gW29wdGlvbnMuZG9jdW1lbnQ9ZG9jdW1lbnRdIC0gRG9jdW1lbnQgaW5zdGFuY2UgdG8gdXNlXHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmNzc0NsYXNzRXJyb3I9XCJiYmotbWFzay1lcnJvclwiXSAtIEEgY3NzIGNsYXNzIHRvIGF0dGFjaCB0byB0aGUgaW5wdXQgd2hlbiBpdCBpcyBpbnZhbGlkXHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmNzc0NsYXNzU3VjY2Vzcz1cImJiai1tYXNrLXN1Y2Nlc3NcIl0gLSBBIGNzcyBjbGFzcyB0byBhdHRhY2ggdG8gdGhlIGlucHV0IHdoZW4gaXQgaXMgdmFsaWQgYWZ0ZXIgdGhlIHVzZXIgaW50ZXJhY3Rpb25cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5vblVwZGF0ZT1udWxsXSAtIEEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIG9uIHRoZSBuZXcgbWFza2VkIHZhbHVlIGlzIHNldFxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLm9uSW52YWxpZD1udWxsXSAtIEEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIG9uIHRoZSBpbnB1dCBvciB0aGUgbWFzayBpcyBpbnZhbGlkXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMgPSB7XHJcbiAgICAgIC4uLntcclxuICAgICAgICBlbGVtZW50czogJy5iYmotdGV4dC1tYXNrZWQnLFxyXG4gICAgICAgIGRvYzogZG9jdW1lbnQsXHJcbiAgICAgICAgY3NzQ2xhc3NFcnJvcjogJ2Jiai1tYXNrLWVycm9yJyxcclxuICAgICAgICBjc3NDbGFzc1N1Y2Nlc3M6ICdiYmotbWFzay1zdWNjZXNzJyxcclxuICAgICAgICBvblVwZGF0ZTogbnVsbCxcclxuICAgICAgICBvbkludmFsaWQ6IG51bGwsXHJcbiAgICAgIH0sXHJcbiAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICB9XHJcbiAgICB0aGlzLl9vbktleXN0cm9rZSA9IHRoaXMuX29uS2V5c3Ryb2tlLmJpbmQodGhpcylcclxuICAgIHRoaXMuX29uRm9jdXMgPSB0aGlzLl9vbkZvY3VzLmJpbmQodGhpcylcclxuICAgIHRoaXMucmVmcmVzaCgpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplIHRoZSBjb21wb25lbnQgYW5kIHdyYXAgdGhlIGlucHV0IGVsZW1lbnRzIGZvciBtYXNraW5nIGluIGNhc2VcclxuICAgKiB0aGV5IGFyZSBub3Qgd3JhcHBlZCB5ZXRcclxuICAgKi9cclxuICByZWZyZXNoKCkge1xyXG4gICAgY29uc3QgZWxlbWVudHMgPVxyXG4gICAgICB0eXBlb2YgdGhpcy5vcHRpb25zLmVsZW1lbnRzID09PSAnc3RyaW5nJ1xyXG4gICAgICAgID8gdGhpcy5vcHRpb25zLmRvYy5xdWVyeVNlbGVjdG9yQWxsKHRoaXMub3B0aW9ucy5lbGVtZW50cylcclxuICAgICAgICA6IHRoaXMub3B0aW9ucy5lbGVtZW50c1xyXG4gICAgbGV0IGlucHV0LCBwYXJlbnRDbGFzc1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaW5wdXQgPSBlbGVtZW50c1tpXVxyXG4gICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSB7XHJcbiAgICAgICAgcGFyZW50Q2xhc3MgPSBpbnB1dC5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZSgnY2xhc3MnKVxyXG5cclxuICAgICAgICBpZiAoIWlucHV0LmdldEF0dHJpYnV0ZSgnaWQnKSkge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgICBgQkJqTWFza2luZzogSW5wdXQgaGFzIG5vIElELiBXaXRob3V0IGFuIElEIHRoZSBpbnB1dCBjYW5ub3QgYmUgbWFza2VkYCxcclxuICAgICAgICAgICAgaW5wdXRcclxuICAgICAgICAgIClcclxuICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB3ZSBkb24ndCBpbml0aWFsaXplIHRoZSBpbnB1dCdzIHdyYXAgdHdpY2VcclxuICAgICAgICBjb25zdCBpc1dyYXBwZWQgPVxyXG4gICAgICAgICAgcGFyZW50Q2xhc3MgJiYgcGFyZW50Q2xhc3MuaW5kZXhPZigndGV4dElucHV0TWFza19fd3JhcCcpID4gLTFcclxuICAgICAgICB0aGlzLl93cmFwKGlucHV0LCBpc1dyYXBwZWQpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgYEJCak1hc2tpbmc6IEludmFsaWQgaW5wdXQgZWxlbWVudC4gVGhlIGVsZW1lbnQgd2lsbCBiZSBpZ25vcmVkYCxcclxuICAgICAgICAgIGlucHV0XHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVbndyYXAgdGhlIGlucHV0IGVsZW1lbnRzIGFuZCByZW1vdmUgYXR0YWNoZWQgbGlzdGVuZXJzXHJcbiAgICovXHJcbiAgZGVzdHJveSgpIHtcclxuICAgIGNvbnN0IGVsZW1lbnRzID1cclxuICAgICAgdHlwZW9mIHRoaXMub3B0aW9ucy5lbGVtZW50cyA9PT0gJ3N0cmluZydcclxuICAgICAgICA/IHRoaXMub3B0aW9ucy5kb2MucXVlcnlTZWxlY3RvckFsbCh0aGlzLm9wdGlvbnMuZWxlbWVudHMpXHJcbiAgICAgICAgOiB0aGlzLm9wdGlvbnMuZWxlbWVudHNcclxuXHJcbiAgICBsZXQgaW5wdXQsIHBhcmVudCwgcGFyZW50Q2xhc3NcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlucHV0ID0gZWxlbWVudHNbaV1cclxuICAgICAgcGFyZW50ID0gaW5wdXQucGFyZW50Tm9kZVxyXG4gICAgICBwYXJlbnRDbGFzcyA9IHBhcmVudC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJylcclxuXHJcbiAgICAgIGlmIChwYXJlbnRDbGFzcyAmJiBwYXJlbnRDbGFzcy5pbmRleE9mKCd0ZXh0SW5wdXRNYXNrX193cmFwJykgPiAtMSkge1xyXG4gICAgICAgIHRoaXMuX3Vud3JhcChwYXJlbnQpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSB0aGUgdGV4dCBtYXNraW5nIGlucHV0IHdyYXBwZXJcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7SFRNTElucHV0RWxlbWVudH0gaW5wdXQgdGhlIGlucHV0IGVsZW1lbnRcclxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IGlzV3JhcHBlZCB3aGVuIHRydWUgdGhlIGlucHV0IGlzIGFscmVhZHkgd3JhcHBlZCBhbmQgd2UgbmVlZCB0byBhZGQgd2hhdCBpc1xyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pc3Npbmcgb25seVxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0hUTUxTcGFuRWxlbWVudH0gdGhlIHdyYXAgZWxlbWVudFxyXG4gICAqXHJcbiAgICogQHByb3RlY3RlZFxyXG4gICAqL1xyXG4gIF93cmFwKGlucHV0LCBpc1dyYXBwZWQpIHtcclxuICAgIGNvbnN0IGlucHV0SWQgPSBpbnB1dC5nZXRBdHRyaWJ1dGUoJ2lkJyksXHJcbiAgICAgIGlucHV0TmFtZSA9IGlucHV0LmdldEF0dHJpYnV0ZSgnbmFtZScpLFxyXG4gICAgICBtYXNrID0gaW5wdXQuZGF0YXNldC5tYXNrIHx8ICcnLFxyXG4gICAgICBvcmlnaW5hbFBhdHRlcm4gPSBpbnB1dC5wYXR0ZXJuLFxyXG4gICAgICBkZWZhdWx0UGF0dGVybiA9IGdlbmVyYXRlUGF0dGVybkZyb21NYXNrKG1hc2spLFxyXG4gICAgICBwYXR0ZXJuID0gb3JpZ2luYWxQYXR0ZXJuIHx8IGRlZmF1bHRQYXR0ZXJuXHJcblxyXG4gICAgbGV0IHdyYXAgPSBudWxsLFxyXG4gICAgICB1bm1hc2tJbnB1dCA9IG51bGxcclxuXHJcbiAgICBpZiAoIWlzV3JhcHBlZCkge1xyXG4gICAgICB3cmFwID0gdGhpcy5vcHRpb25zLmRvYy5jcmVhdGVFbGVtZW50KCdzcGFuJylcclxuICAgICAgdW5tYXNrSW5wdXQgPSB0aGlzLm9wdGlvbnMuZG9jLmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykgLy8gaGlkZGVuIGlucHV0IHdpdGggdGhlIHVubWFza2VkIHZhbHVlcyBmb3IgZm9ybXNcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHdyYXAgPSBpbnB1dC5wYXJlbnROb2RlXHJcbiAgICAgIHVubWFza0lucHV0ID0gd3JhcC5xdWVyeVNlbGVjdG9yKCcudGV4dElucHV0TWFza19fdW5tYXNrZWRJbnB1dCcpXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY29uZmlndXJlIHRoZSBhY3R1YWwgaW5wdXRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBpbnB1dC52YWx1ZSA9IG1hc2tJZk5vdE1hc2tlZChpbnB1dC52YWx1ZSwgbWFzaylcclxuICAgIGlucHV0LnBhdHRlcm4gPSBwYXR0ZXJuXHJcbiAgICBpbnB1dC5jbGFzc0xpc3QuYWRkKCd0ZXh0SW5wdXRNYXNrX190ZXh0SW5wdXQnKVxyXG4gICAgaW5wdXQuZGF0YXNldC5tYXNrID0gbWFza1xyXG4gICAgaW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkID0gdW5tYXNrKGlucHV0LnZhbHVlLCBtYXNrKVxyXG4gICAgaWYgKG9yaWdpbmFsUGF0dGVybiAmJiBvcmlnaW5hbFBhdHRlcm4gIT09IGRlZmF1bHRQYXR0ZXJuKSB7XHJcbiAgICAgIGlucHV0LmRhdGFzZXQuaXNDdXN0b21QYXR0ZXJuID0gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghaXNXcmFwcGVkKSB7XHJcbiAgICAgIGlmICghKGlucHV0Lmhhc0F0dHJpYnV0ZSgncmVhZG9ubHknKSB8fCBpbnB1dC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGUnKSkpIHtcclxuICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX29uS2V5c3Ryb2tlKVxyXG4gICAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXByZXNzJywgdGhpcy5fb25LZXlzdHJva2UpXHJcbiAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigncGFzdGUnLCB0aGlzLl9vbktleXN0cm9rZSlcclxuICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c2luJywgdGhpcy5fb25Gb2N1cylcclxuICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX29uRm9jdXMpXHJcbiAgICAgIH1cclxuICAgICAgaW5wdXQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUod3JhcCwgaW5wdXQpIC8vIG1vdmUgdGhlIGlucHV0IG91dHNpZGUgdGhlIHdyYXBwZXJcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fdmFsaWRhdGVJbnB1dChpbnB1dCkpIHtcclxuICAgICAgdGhpcy5fX2ZpcmVPblVwZGF0ZShpbnB1dC52YWx1ZSwgaW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkLCBpbnB1dClcclxuICAgIH1cclxuXHJcbiAgICAvLyBjb25maWd1cmUgdGhlIHVubWFza2VkIGlucHV0XHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICB1bm1hc2tJbnB1dC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKVxyXG4gICAgdW5tYXNrSW5wdXQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ2hpZGRlbicpXHJcbiAgICB1bm1hc2tJbnB1dC5jbGFzc0xpc3QuYWRkKCd0ZXh0SW5wdXRNYXNrX191bm1hc2tlZElucHV0JylcclxuICAgIHVubWFza0lucHV0LnZhbHVlID0gaW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkXHJcbiAgICBpZiAoaW5wdXRJZCkgdW5tYXNrSW5wdXQuc2V0QXR0cmlidXRlKCdpZCcsIGAke2lucHV0SWR9LXVubWFza2VkYClcclxuICAgIGlmIChpbnB1dE5hbWUpIHVubWFza0lucHV0LnNldEF0dHJpYnV0ZSgnbmFtZScsIGAke2lucHV0TmFtZX0tdW5tYXNrZWRgKVxyXG5cclxuICAgIGlmICghaXNXcmFwcGVkKSB7XHJcbiAgICAgIC8vIGNvbmZpZ3VyZSB0aGUgd3JhcHBlclxyXG4gICAgICB3cmFwLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAndGV4dElucHV0TWFza19fd3JhcCcpXHJcbiAgICAgIHdyYXAuYXBwZW5kQ2hpbGQodW5tYXNrSW5wdXQpXHJcbiAgICAgIHdyYXAuYXBwZW5kQ2hpbGQoaW5wdXQpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHdyYXBcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVud3JhcCB0aGUgbWFza2VkIGlucHV0IGFuZCByZW1vdmUgdGhlIHZhbHVlIGNoYW5nZWQgbGlzdGVuZXJcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7SFRNTFNwYW5FbGVtZW50fSB0ZXh0SW5wdXQgdGhlIHdyYXBwZXIgc3BhbiBpbnN0YW5jZVxyXG4gICAqXHJcbiAgICogQHByb3RlY3RlZFxyXG4gICAqL1xyXG4gIF91bndyYXAodGV4dElucHV0KSB7XHJcbiAgICB0ZXh0SW5wdXQucmVtb3ZlQ2hpbGQoXHJcbiAgICAgIHRleHRJbnB1dC5xdWVyeVNlbGVjdG9yKCcudGV4dElucHV0TWFza19fdW5tYXNrZWRJbnB1dCcpXHJcbiAgICApXHJcblxyXG4gICAgY29uc3QgaW5wdXQgPSB0ZXh0SW5wdXQucXVlcnlTZWxlY3RvcignLnRleHRJbnB1dE1hc2tfX3RleHRJbnB1dCcpXHJcbiAgICBpbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX29uS2V5c3Ryb2tlKVxyXG4gICAgaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5cHJlc3MnLCB0aGlzLl9vbktleXN0cm9rZSlcclxuICAgIGlucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgdGhpcy5fb25LZXlzdHJva2UpXHJcbiAgICBpbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1c2luJywgdGhpcy5fb25Gb2N1cylcclxuICAgIGlucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25Gb2N1cylcclxuICAgIGRlbGV0ZSBpbnB1dC5kYXRhc2V0LnZhbHVlVW5tYXNrZWRcclxuICAgIGlmICghaW5wdXQuZGF0YXNldC5pc0N1c3RvbVBhdHRlcm4pIHtcclxuICAgICAgaW5wdXQucmVtb3ZlQXR0cmlidXRlKCdwYXR0ZXJuJylcclxuICAgICAgZGVsZXRlIGlucHV0LmRhdGFzZXQuaXNDdXN0b21QYXR0ZXJuXHJcbiAgICB9XHJcblxyXG4gICAgaW5wdXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NFcnJvcilcclxuXHJcbiAgICB0ZXh0SW5wdXQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaW5wdXQsIHRleHRJbnB1dClcclxuICAgIHRleHRJbnB1dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRleHRJbnB1dClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3RlbiB0byBldmVyeSBrZXlzdHJva2Ugb24gdGhlIGlucHV0IGFuZCB1cGRhdGUgdGhlIG1hc2tlZCBhbmQgdGhlIHVubWFza2VkIHZhbHVlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0V2ZW50fSBlXHJcbiAgICpcclxuICAgKiBAcHJvdGVjdGVkXHJcbiAgICovXHJcbiAgX29uS2V5c3Ryb2tlKGUpIHtcclxuICAgIGlmIChlLmN0cmxLZXkgfHwgZS5zaGlmdEtleSB8fCBlLmFsdEtleSB8fCBlLm1ldGFLZXkpIHJldHVyblxyXG4gICAgaWYoZS5rZXlDb2RlICE9PSAxMykgZS5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICBcclxuICAgIGNvbnN0IGlucHV0ID0gZS50YXJnZXQsXHJcbiAgICAgIG1hc2sgPSBpbnB1dC5kYXRhc2V0Lm1hc2sgfHwgdGhpcy5vcHRpb25zLm1hc2ssXHJcbiAgICAgIGV2ZW50VHlwZSA9IGUudHlwZVxyXG5cclxuICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICBpbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3MpXHJcbiAgICBpbnB1dC5zZXRDdXN0b21WYWxpZGl0eSgnJyk7XHJcblxyXG4gICAgbGV0IHZhbHVlID0gaW5wdXQudmFsdWUsXHJcbiAgICAgIGtleUNvZGUgPSBlLmtleUNvZGUsXHJcbiAgICAgIGtleUNvbnRlbnQgPSBlLmtleSB8fCBlLmNvZGUucmVwbGFjZSgvW14wLTldL2csICcnKSxcclxuICAgICAga2V5ID0ga2V5Q29udGVudCA/IChrZXlDb250ZW50Lmxlbmd0aCA+IDEgPyAnJyA6IGtleUNvbnRlbnQpIDogJycsXHJcbiAgICAgIGluc2VydFBvc2l0aW9uID0gZmluZENhcmV0UG9zaXRpb24odmFsdWUsIG1hc2spLFxyXG4gICAgICBuZXdWYWx1ZSxcclxuICAgICAgdW5tYXNrZWRWYWx1ZSxcclxuICAgICAgbWFza0Vycm9yID0gZmFsc2VcclxuXHJcbiAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xyXG4gICAgICBjYXNlICdwYXN0ZSc6XHJcbiAgICAgICAgbmV3VmFsdWUgPSBtYXNrSWZOb3RNYXNrZWQoXHJcbiAgICAgICAgICAoZS5jbGlwYm9hcmREYXRhIHx8IHdpbmRvdy5jbGlwYm9hcmREYXRhKS5nZXREYXRhKCdUZXh0JyksXHJcbiAgICAgICAgICBtYXNrXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ2tleXVwJzpcclxuICAgICAgICBuZXdWYWx1ZSA9IHZhbHVlXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAna2V5cHJlc3MnOlxyXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0ID0gaW5wdXQuc2VsZWN0aW9uU3RhcnRcclxuICAgICAgICBpZiAoc2VsZWN0aW9uU3RhcnQgIT09IGluc2VydFBvc2l0aW9uKSBpbnNlcnRQb3NpdGlvbiA9IHNlbGVjdGlvblN0YXJ0XHJcblxyXG4gICAgICAgIG5ld1ZhbHVlID1cclxuICAgICAgICAgIHZhbHVlLnN1YnN0cigwLCBpbnNlcnRQb3NpdGlvbikgKyBrZXkgKyB2YWx1ZS5zdWJzdHIoaW5zZXJ0UG9zaXRpb24pXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVha1xyXG4gICAgfVxyXG5cclxuICAgIHVubWFza2VkVmFsdWUgPSB1bm1hc2sobmV3VmFsdWUsIG1hc2spXHJcblxyXG4gICAgaWYgKFszNSwgMzYsIDM3LCAzOCwgMzksIDQwXS5pbmRleE9mKGtleUNvZGUpID09PSAtMSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlucHV0LnZhbHVlID0gU3RyaW5nTWFzay5tYXNrKHVubWFza2VkVmFsdWUsIG1hc2ssIGZhbHNlKVxyXG4gICAgICAgIGlmKHRoaXMuX3ZhbGlkYXRlSW5wdXQoaW5wdXQpKSB7XHJcbiAgICAgICAgICBpbnB1dC5kYXRhc2V0LnZhbHVlVW5tYXNrZWQgPSB1bm1hc2tlZFZhbHVlXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZG9jLnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgICAgIGAjJHtpbnB1dC5nZXRBdHRyaWJ1dGUoJ2lkJyl9LXVubWFza2VkYFxyXG4gICAgICAgICAgKS52YWx1ZSA9IHVubWFza2VkVmFsdWVcclxuICAgICAgICAgIHRoaXMuX19hcHBseUNzc0NsYXNzU3RhdGUoaW5wdXQsICdzdWNjZXNzJylcclxuICAgICAgICAgIHRoaXMuX19maXJlT25VcGRhdGUoaW5wdXQudmFsdWUsIGlucHV0LmRhdGFzZXQudmFsdWVVbm1hc2tlZCwgaW5wdXQpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1hc2tFcnJvciA9IGZhbHNlXHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5fX2FwcGx5Q3NzQ2xhc3NTdGF0ZShpbnB1dCwgJ2Vycm9yJylcclxuICAgICAgICB0aGlzLl9fZmlyZU9uSW52YWxpZChlcnJvciwgaW5wdXQpXHJcbiAgICAgICAgbWFza0Vycm9yID0gdHJ1ZVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLl91cGRhdGVDYXJldFBvc2l0aW9uKGlucHV0LCBtYXNrKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghbWFza0Vycm9yKSB0aGlzLl92YWxpZGF0ZUlucHV0KGlucHV0KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuIHRvIGZvY3VzIGV2ZW50cyBvbiB0aGUgaW5wdXQgYW5kIHVwZGF0ZSB0aGUgY2FyZXQgcG9zaXRpb25cclxuICAgKiB3aGVyZSB0aGUgbmV4dCBjaGFyIHNob3VsZCBiZSBpbnNlcnRlZCBhY2NvcmRpbmcgdG8gdGhlIG1hc2tcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Rm9jdXNFdmVudH0gZVxyXG4gICAqXHJcbiAgICogQHByb3RlY3RlZFxyXG4gICAqL1xyXG4gIF9vbkZvY3VzKGUpIHtcclxuICAgIGNvbnN0IGlucHV0ID0gZS50YXJnZXRcclxuICAgIGNvbnN0IG1hc2sgPSBpbnB1dC5kYXRhc2V0Lm1hc2sgfHwgdGhpcy5vcHRpb25zLm1hc2tcclxuICAgIHRoaXMuX3VwZGF0ZUNhcmV0UG9zaXRpb24oaW5wdXQsIG1hc2spXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgdGhlIGNhcmV0IHBvc2l0aW9uIG9uIHRoZSBpbnB1dCBiYXNlZCBvbiB0aGUgZ2l2ZW4gbWFza1xyXG4gICAqXHJcbiAgICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBpbnB1dCBpbnN0YW5jZVxyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtYXNrICBiYmogc3RyaW5nXHJcbiAgICpcclxuICAgKiBAcHJvdGVjdGVkXHJcbiAgICovXHJcbiAgX3VwZGF0ZUNhcmV0UG9zaXRpb24oaW5wdXQsIG1hc2spIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBjb25zdCBwb3NpdGlvbiA9IGZpbmRDYXJldFBvc2l0aW9uKGlucHV0LnZhbHVlLCBtYXNrKVxyXG4gICAgICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShwb3NpdGlvbiwgcG9zaXRpb24pXHJcbiAgICB9LCAwKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJpZ2dlciBgY2hlY2tWYWxpZGl0eWAgb24gdGhlIGlucHV0XHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGlucHV0XHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSB3aGVuIHZhbGlkICwgZmFsc2Ugb3RoZXJ3aXNlXHJcbiAgICpcclxuICAgKiBAcHJvdGVjdGVkXHJcbiAgICovXHJcbiAgX3ZhbGlkYXRlSW5wdXQoaW5wdXQpIHtcclxuICAgIGNvbnN0IGlzVmFsaWQgPSBpbnB1dC5jaGVja1ZhbGlkaXR5KClcclxuXHJcbiAgICBpZiAoaXNWYWxpZCkge1xyXG4gICAgICB0aGlzLl9fYXBwbHlDc3NDbGFzc1N0YXRlKGlucHV0LCAnc3VjY2VzcycpXHJcbiAgICAgIGlucHV0LnNldEN1c3RvbVZhbGlkaXR5KCcnKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fX2FwcGx5Q3NzQ2xhc3NTdGF0ZShpbnB1dCwgJ2Vycm9yJylcclxuICAgICAgdGhpcy5fX2ZpcmVPbkludmFsaWQoaW5wdXQudmFsaWRhdGlvbk1lc3NhZ2UsIGlucHV0KVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpc1ZhbGlkXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9fZmlyZU9uVXBkYXRlKHZhbHVlTWFza2VkLCB2YWx1ZVVubWFza2VkLCBpbnB1dCkge1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5vblVwZGF0ZSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMub25VcGRhdGUodmFsdWVNYXNrZWQsIHZhbHVlVW5tYXNrZWQsIGlucHV0KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfX2ZpcmVPbkludmFsaWQoZXJyb3IsIGlucHV0KSB7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLm9uSW52YWxpZCkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMub25JbnZhbGlkKGVycm9yLCBpbnB1dClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX19hcHBseUNzc0NsYXNzU3RhdGUoaW5wdXQsIHN0YXRlKSB7XHJcbiAgICBpZiAoaW5wdXQuaGFzQXR0cmlidXRlKCdyZWFkb25seScpIHx8IGlucHV0Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkge1xyXG4gICAgICBpbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc0Vycm9yKVxyXG4gICAgICBpbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3MpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoc3RhdGUgPT09ICdzdWNjZXNzJykge1xyXG4gICAgICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICAgICAgaW5wdXQuY2xhc3NMaXN0LmFkZCh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NTdWNjZXNzKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoc3RhdGUgPT09ICdlcnJvcicpIHtcclxuICAgICAgICBpbnB1dC5jbGFzc0xpc3QuYWRkKHRoaXMub3B0aW9ucy5jc3NDbGFzc0Vycm9yKVxyXG4gICAgICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzU3VjY2VzcylcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGV4dElucHV0XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9UZXh0SW5wdXQvVGV4dElucHV0LmpzIiwiLypcclxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtaW5wdXQtbWFza2luZyBsaWIuXHJcbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cclxuICpcclxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcclxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXHJcbiAqL1xyXG5cclxuaW1wb3J0IFN0cmluZ01hc2sgZnJvbSAnYmJqLW1hc2tzL3NyYy9TdHJpbmdNYXNrJ1xyXG5cclxuY29uc3QgU1VQUE9SVEVEX01BU0tTID0gWydYJywgJ2EnLCAnQScsICcwJywgJ3onLCAnWicsICdVJ11cclxuLyoqXHJcbiAqIFdoZW4gdHJ1ZSAsIHRoZW4gdGhlIGJyb3dzZXIgc3VwcG9ydHMgVW5pY29kZSBQcm9wZXJ0eSBFc2NhcGVzXHJcbiAqIG90aGVyd2lzZSBpdCBpcyBmYWxzZSBcclxuICogXHJcbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1yZWdleHAtdW5pY29kZS1wcm9wZXJ0eS1lc2NhcGVzfVxyXG4gKi9cclxubGV0IElTX1VOSUNPREVfUFJPUEVSVFlfU1VQUE9SVEVEID0gZmFsc2VcclxudHJ5IHtcclxuICBldmFsKCcvXFxcXHB7TH0vdScpXHJcbiAgSVNfVU5JQ09ERV9QUk9QRVJUWV9TVVBQT1JURUQgPSB0cnVlXHJcbn0gY2F0Y2ggKGVycikge1xyXG4gIElTX1VOSUNPREVfUFJPUEVSVFlfU1VQUE9SVEVEID0gZmFsc2VcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBtYXNrZWQgd2l0aCB0aGUgZ2l2ZW4gbWFzayBvciBub3RcclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlIG1hc2tlZCBvciB1bm1hc2tlZCB2YWx1ZVxyXG4gKiBAcGFyYW0ge1N0cmluZ30gbWFzayAgYSBiYmogbWFza1xyXG4gKlxyXG4gKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIHdoZW4gdGhlIHZhbHVlIGlzIG1hc2tlZCB3aXRoIGdpdmVuIG1hc2sgLCBmYWxzZSBvdGhlcndpc2VcclxuICovXHJcbmNvbnN0IGlzTWFza2VkVmFsdWUgPSAodmFsdWUsIG1hc2spID0+IHtcclxuICBpZiAodHlwZW9mIGlzTWFza2VkVmFsdWUuX19DQUNIRV9fID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgaXNNYXNrZWRWYWx1ZS5fX0NBQ0hFX18gPSB7fVxyXG4gIH1cclxuXHJcbiAgY29uc3QgY2FjaGVLZXkgPSBgJHt2YWx1ZX0tJHttYXNrfWBcclxuXHJcbiAgaWYgKCFpc01hc2tlZFZhbHVlLl9fQ0FDSEVfX1tjYWNoZUtleV0pIHtcclxuICAgIGNvbnN0IHVubWFza2VkVmFsdWUgPSB1bm1hc2sodmFsdWUsIG1hc2spXHJcbiAgICBpc01hc2tlZFZhbHVlLl9fQ0FDSEVfX1tjYWNoZUtleV0gPVxyXG4gICAgICB2YWx1ZSA9PT0gU3RyaW5nTWFzay5tYXNrKHVubWFza2VkVmFsdWUsIG1hc2spXHJcbiAgfVxyXG5cclxuICByZXR1cm4gaXNNYXNrZWRWYWx1ZS5fX0NBQ0hFX19bY2FjaGVLZXldXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBNYXNrIHRoZSBnaXZlbiB2YWx1ZSB3aXRoIHRoZSBnaXZlbiBtYXNrIGluIGNhc2UgdGhlIHZhbHVlIGlzIG5vdCBhbHJlYWR5IG1hc2tlZCB3aXRoIHRoZVxyXG4gKiBnaXZlbiBtYXNrXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZSBtYXNrZWQgb3IgdW5tYXNrZWQgdmFsdWVcclxuICogQHBhcmFtIHtTdHJpbmd9IG1hc2sgIGEgYmJqIG1hc2tcclxuICpcclxuICogQHJldHVybiB7U3RyaW5nfSBhIG1hc2tlZCB2YWx1ZVxyXG4gKi9cclxuY29uc3QgbWFza0lmTm90TWFza2VkID0gKHZhbHVlLCBtYXNrKSA9PiB7XHJcbiAgaWYgKHR5cGVvZiBtYXNrSWZOb3RNYXNrZWQuX19DQUNIRV9fID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgbWFza0lmTm90TWFza2VkLl9fQ0FDSEVfXyA9IHt9XHJcbiAgfVxyXG5cclxuICBjb25zdCBjYWNoZUtleSA9IGAke3ZhbHVlfS0ke21hc2t9YFxyXG5cclxuICBpZiAoIW1hc2tJZk5vdE1hc2tlZC5fX0NBQ0hFX19bY2FjaGVLZXldKSB7XHJcbiAgICBpZiAoaXNNYXNrZWRWYWx1ZSh2YWx1ZSwgbWFzaykpIHtcclxuICAgICAgbWFza0lmTm90TWFza2VkLl9fQ0FDSEVfX1tjYWNoZUtleV0gPSB2YWx1ZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBtYXNrSWZOb3RNYXNrZWQuX19DQUNIRV9fW2NhY2hlS2V5XSA9IFN0cmluZ01hc2subWFzayhcclxuICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgICAgbWFzayxcclxuICAgICAgICAgIGZhbHNlXHJcbiAgICAgICAgKVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgbWFza0lmTm90TWFza2VkLl9fQ0FDSEVfX1tjYWNoZUtleV0gPSBTdHJpbmdNYXNrLm1hc2soJycsIG1hc2spXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBtYXNrSWZOb3RNYXNrZWQuX19DQUNIRV9fW2NhY2hlS2V5XVxyXG59XHJcblxyXG4vKipcclxuICogR2VuZXJhdGUgYSByZWdleCBwYXR0ZXIgYmFzZWQgb24gdGhlIGdpdmUgdGFza1xyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gbWFzayAgYmJqIHN0cmluZyBtYXNrXHJcbiAqXHJcbiAqIEByZXR1cm4ge1N0cmluZ30gcmVnZXggZm9yIHRoZSBnaXZlIG1hc2tcclxuICovXHJcbmNvbnN0IGdlbmVyYXRlUGF0dGVybkZyb21NYXNrID0gbWFzayA9PiB7XHJcbiAgaWYgKHR5cGVvZiBnZW5lcmF0ZVBhdHRlcm5Gcm9tTWFzay5fX0NBQ0hFX18gPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBnZW5lcmF0ZVBhdHRlcm5Gcm9tTWFzay5fX0NBQ0hFX18gPSB7fVxyXG4gIH1cclxuXHJcbiAgY29uc3QgY2FjaGVLZXkgPSBtYXNrXHJcblxyXG4gIGlmICghZ2VuZXJhdGVQYXR0ZXJuRnJvbU1hc2suX19DQUNIRV9fW2NhY2hlS2V5XSkge1xyXG4gICAgY29uc3QgbWFza0FzQXJyeSA9IG1hc2suc3BsaXQoJycpXHJcbiAgICBsZXQgcmVnZXggPSAnJ1xyXG4gICAgbWFza0FzQXJyeS5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICBzd2l0Y2ggKGMpIHtcclxuICAgICAgICBjYXNlICdYJzpcclxuICAgICAgICAgIHJlZ2V4ICs9ICcoW14gLX5dKSdcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAnYSc6XHJcbiAgICAgICAgY2FzZSAnQSc6XHJcbiAgICAgICAgICAvLyBodHRwczovL21vdGhlcmVmZi5pbi9yZWdleHB1I2lucHV0PXZhcityZWdleCslM0QrLyU1Q3AlN0JMJTdEL3UlM0ImdW5pY29kZVByb3BlcnR5RXNjYXBlPTFcclxuICAgICAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE1MDAzMy9yZWd1bGFyLWV4cHJlc3Npb24tdG8tbWF0Y2gtbm9uLWFzY2lpLWNoYXJhY3RlcnMjYW5zd2VyLTQ4OTAyNzY1XHJcbiAgICAgICAgICByZWdleCArPSBJU19VTklDT0RFX1BST1BFUlRZX1NVUFBPUlRFRFxyXG4gICAgICAgICAgICA/ICdcXFxccHtMfSdcclxuICAgICAgICAgICAgOiAnKCg/OltBLVphLXpcXHhBQVxceEI1XFx4QkFcXHhDMC1cXHhENlxceEQ4LVxceEY2XFx4RjgtXFx1MDJDMVxcdTAyQzYtXFx1MDJEMVxcdTAyRTAtXFx1MDJFNFxcdTAyRUNcXHUwMkVFXFx1MDM3MC1cXHUwMzc0XFx1MDM3NlxcdTAzNzdcXHUwMzdBLVxcdTAzN0RcXHUwMzdGXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzRjVcXHUwM0Y3LVxcdTA0ODFcXHUwNDhBLVxcdTA1MkZcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MC1cXHUwNTg4XFx1MDVEMC1cXHUwNUVBXFx1MDVFRi1cXHUwNUYyXFx1MDYyMC1cXHUwNjRBXFx1MDY2RVxcdTA2NkZcXHUwNjcxLVxcdTA2RDNcXHUwNkQ1XFx1MDZFNVxcdTA2RTZcXHUwNkVFXFx1MDZFRlxcdTA2RkEtXFx1MDZGQ1xcdTA2RkZcXHUwNzEwXFx1MDcxMi1cXHUwNzJGXFx1MDc0RC1cXHUwN0E1XFx1MDdCMVxcdTA3Q0EtXFx1MDdFQVxcdTA3RjRcXHUwN0Y1XFx1MDdGQVxcdTA4MDAtXFx1MDgxNVxcdTA4MUFcXHUwODI0XFx1MDgyOFxcdTA4NDAtXFx1MDg1OFxcdTA4NjAtXFx1MDg2QVxcdTA4QTAtXFx1MDhCNFxcdTA4QjYtXFx1MDhCRFxcdTA5MDQtXFx1MDkzOVxcdTA5M0RcXHUwOTUwXFx1MDk1OC1cXHUwOTYxXFx1MDk3MS1cXHUwOTgwXFx1MDk4NS1cXHUwOThDXFx1MDk4RlxcdTA5OTBcXHUwOTkzLVxcdTA5QThcXHUwOUFBLVxcdTA5QjBcXHUwOUIyXFx1MDlCNi1cXHUwOUI5XFx1MDlCRFxcdTA5Q0VcXHUwOURDXFx1MDlERFxcdTA5REYtXFx1MDlFMVxcdTA5RjBcXHUwOUYxXFx1MDlGQ1xcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNzItXFx1MEE3NFxcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCRFxcdTBBRDBcXHUwQUUwXFx1MEFFMVxcdTBBRjlcXHUwQjA1LVxcdTBCMENcXHUwQjBGXFx1MEIxMFxcdTBCMTMtXFx1MEIyOFxcdTBCMkEtXFx1MEIzMFxcdTBCMzJcXHUwQjMzXFx1MEIzNS1cXHUwQjM5XFx1MEIzRFxcdTBCNUNcXHUwQjVEXFx1MEI1Ri1cXHUwQjYxXFx1MEI3MVxcdTBCODNcXHUwQjg1LVxcdTBCOEFcXHUwQjhFLVxcdTBCOTBcXHUwQjkyLVxcdTBCOTVcXHUwQjk5XFx1MEI5QVxcdTBCOUNcXHUwQjlFXFx1MEI5RlxcdTBCQTNcXHUwQkE0XFx1MEJBOC1cXHUwQkFBXFx1MEJBRS1cXHUwQkI5XFx1MEJEMFxcdTBDMDUtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzOVxcdTBDM0RcXHUwQzU4LVxcdTBDNUFcXHUwQzYwXFx1MEM2MVxcdTBDODBcXHUwQzg1LVxcdTBDOENcXHUwQzhFLVxcdTBDOTBcXHUwQzkyLVxcdTBDQThcXHUwQ0FBLVxcdTBDQjNcXHUwQ0I1LVxcdTBDQjlcXHUwQ0JEXFx1MENERVxcdTBDRTBcXHUwQ0UxXFx1MENGMVxcdTBDRjJcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNEXFx1MEQ0RVxcdTBENTQtXFx1MEQ1NlxcdTBENUYtXFx1MEQ2MVxcdTBEN0EtXFx1MEQ3RlxcdTBEODUtXFx1MEQ5NlxcdTBEOUEtXFx1MERCMVxcdTBEQjMtXFx1MERCQlxcdTBEQkRcXHUwREMwLVxcdTBEQzZcXHUwRTAxLVxcdTBFMzBcXHUwRTMyXFx1MEUzM1xcdTBFNDAtXFx1MEU0NlxcdTBFODFcXHUwRTgyXFx1MEU4NFxcdTBFODYtXFx1MEU4QVxcdTBFOEMtXFx1MEVBM1xcdTBFQTVcXHUwRUE3LVxcdTBFQjBcXHUwRUIyXFx1MEVCM1xcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGNDAtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGODgtXFx1MEY4Q1xcdTEwMDAtXFx1MTAyQVxcdTEwM0ZcXHUxMDUwLVxcdTEwNTVcXHUxMDVBLVxcdTEwNURcXHUxMDYxXFx1MTA2NVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxMEQwLVxcdTEwRkFcXHUxMEZDLVxcdTEyNDhcXHUxMjRBLVxcdTEyNERcXHUxMjUwLVxcdTEyNTZcXHUxMjU4XFx1MTI1QS1cXHUxMjVEXFx1MTI2MC1cXHUxMjg4XFx1MTI4QS1cXHUxMjhEXFx1MTI5MC1cXHUxMkIwXFx1MTJCMi1cXHUxMkI1XFx1MTJCOC1cXHUxMkJFXFx1MTJDMFxcdTEyQzItXFx1MTJDNVxcdTEyQzgtXFx1MTJENlxcdTEyRDgtXFx1MTMxMFxcdTEzMTItXFx1MTMxNVxcdTEzMTgtXFx1MTM1QVxcdTEzODAtXFx1MTM4RlxcdTEzQTAtXFx1MTNGNVxcdTEzRjgtXFx1MTNGRFxcdTE0MDEtXFx1MTY2Q1xcdTE2NkYtXFx1MTY3RlxcdTE2ODEtXFx1MTY5QVxcdTE2QTAtXFx1MTZFQVxcdTE2RjEtXFx1MTZGOFxcdTE3MDAtXFx1MTcwQ1xcdTE3MEUtXFx1MTcxMVxcdTE3MjAtXFx1MTczMVxcdTE3NDAtXFx1MTc1MVxcdTE3NjAtXFx1MTc2Q1xcdTE3NkUtXFx1MTc3MFxcdTE3ODAtXFx1MTdCM1xcdTE3RDdcXHUxN0RDXFx1MTgyMC1cXHUxODc4XFx1MTg4MC1cXHUxODg0XFx1MTg4Ny1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxRVxcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QjAtXFx1MTlDOVxcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFBQTdcXHUxQjA1LVxcdTFCMzNcXHUxQjQ1LVxcdTFCNEJcXHUxQjgzLVxcdTFCQTBcXHUxQkFFXFx1MUJBRlxcdTFCQkEtXFx1MUJFNVxcdTFDMDAtXFx1MUMyM1xcdTFDNEQtXFx1MUM0RlxcdTFDNUEtXFx1MUM3RFxcdTFDODAtXFx1MUM4OFxcdTFDOTAtXFx1MUNCQVxcdTFDQkQtXFx1MUNCRlxcdTFDRTktXFx1MUNFQ1xcdTFDRUUtXFx1MUNGM1xcdTFDRjVcXHUxQ0Y2XFx1MUNGQVxcdTFEMDAtXFx1MURCRlxcdTFFMDAtXFx1MUYxNVxcdTFGMTgtXFx1MUYxRFxcdTFGMjAtXFx1MUY0NVxcdTFGNDgtXFx1MUY0RFxcdTFGNTAtXFx1MUY1N1xcdTFGNTlcXHUxRjVCXFx1MUY1RFxcdTFGNUYtXFx1MUY3RFxcdTFGODAtXFx1MUZCNFxcdTFGQjYtXFx1MUZCQ1xcdTFGQkVcXHUxRkMyLVxcdTFGQzRcXHUxRkM2LVxcdTFGQ0NcXHUxRkQwLVxcdTFGRDNcXHUxRkQ2LVxcdTFGREJcXHUxRkUwLVxcdTFGRUNcXHUxRkYyLVxcdTFGRjRcXHUxRkY2LVxcdTFGRkNcXHUyMDcxXFx1MjA3RlxcdTIwOTAtXFx1MjA5Q1xcdTIxMDJcXHUyMTA3XFx1MjEwQS1cXHUyMTEzXFx1MjExNVxcdTIxMTktXFx1MjExRFxcdTIxMjRcXHUyMTI2XFx1MjEyOFxcdTIxMkEtXFx1MjEyRFxcdTIxMkYtXFx1MjEzOVxcdTIxM0MtXFx1MjEzRlxcdTIxNDUtXFx1MjE0OVxcdTIxNEVcXHUyMTgzXFx1MjE4NFxcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNFRVxcdTJDRjJcXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ4MC1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MkUyRlxcdTMwMDVcXHUzMDA2XFx1MzAzMS1cXHUzMDM1XFx1MzAzQlxcdTMwM0NcXHUzMDQxLVxcdTMwOTZcXHUzMDlELVxcdTMwOUZcXHUzMEExLVxcdTMwRkFcXHUzMEZDLVxcdTMwRkZcXHUzMTA1LVxcdTMxMkZcXHUzMTMxLVxcdTMxOEVcXHUzMUEwLVxcdTMxQkFcXHUzMUYwLVxcdTMxRkZcXHUzNDAwLVxcdTREQjVcXHU0RTAwLVxcdTlGRUZcXHVBMDAwLVxcdUE0OENcXHVBNEQwLVxcdUE0RkRcXHVBNTAwLVxcdUE2MENcXHVBNjEwLVxcdUE2MUZcXHVBNjJBXFx1QTYyQlxcdUE2NDAtXFx1QTY2RVxcdUE2N0YtXFx1QTY5RFxcdUE2QTAtXFx1QTZFNVxcdUE3MTctXFx1QTcxRlxcdUE3MjItXFx1QTc4OFxcdUE3OEItXFx1QTdCRlxcdUE3QzItXFx1QTdDNlxcdUE3RjctXFx1QTgwMVxcdUE4MDMtXFx1QTgwNVxcdUE4MDctXFx1QTgwQVxcdUE4MEMtXFx1QTgyMlxcdUE4NDAtXFx1QTg3M1xcdUE4ODItXFx1QThCM1xcdUE4RjItXFx1QThGN1xcdUE4RkJcXHVBOEZEXFx1QThGRVxcdUE5MEEtXFx1QTkyNVxcdUE5MzAtXFx1QTk0NlxcdUE5NjAtXFx1QTk3Q1xcdUE5ODQtXFx1QTlCMlxcdUE5Q0ZcXHVBOUUwLVxcdUE5RTRcXHVBOUU2LVxcdUE5RUZcXHVBOUZBLVxcdUE5RkVcXHVBQTAwLVxcdUFBMjhcXHVBQTQwLVxcdUFBNDJcXHVBQTQ0LVxcdUFBNEJcXHVBQTYwLVxcdUFBNzZcXHVBQTdBXFx1QUE3RS1cXHVBQUFGXFx1QUFCMVxcdUFBQjVcXHVBQUI2XFx1QUFCOS1cXHVBQUJEXFx1QUFDMFxcdUFBQzJcXHVBQURCLVxcdUFBRERcXHVBQUUwLVxcdUFBRUFcXHVBQUYyLVxcdUFBRjRcXHVBQjAxLVxcdUFCMDZcXHVBQjA5LVxcdUFCMEVcXHVBQjExLVxcdUFCMTZcXHVBQjIwLVxcdUFCMjZcXHVBQjI4LVxcdUFCMkVcXHVBQjMwLVxcdUFCNUFcXHVBQjVDLVxcdUFCNjdcXHVBQjcwLVxcdUFCRTJcXHVBQzAwLVxcdUQ3QTNcXHVEN0IwLVxcdUQ3QzZcXHVEN0NCLVxcdUQ3RkJcXHVGOTAwLVxcdUZBNkRcXHVGQTcwLVxcdUZBRDlcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGQjFEXFx1RkIxRi1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjIxLVxcdUZGM0FcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGRENdfFxcdUQ4MDBbXFx1REMwMC1cXHVEQzBCXFx1REMwRC1cXHVEQzI2XFx1REMyOC1cXHVEQzNBXFx1REMzQ1xcdURDM0RcXHVEQzNGLVxcdURDNERcXHVEQzUwLVxcdURDNURcXHVEQzgwLVxcdURDRkFcXHVERTgwLVxcdURFOUNcXHVERUEwLVxcdURFRDBcXHVERjAwLVxcdURGMUZcXHVERjJELVxcdURGNDBcXHVERjQyLVxcdURGNDlcXHVERjUwLVxcdURGNzVcXHVERjgwLVxcdURGOURcXHVERkEwLVxcdURGQzNcXHVERkM4LVxcdURGQ0ZdfFxcdUQ4MDFbXFx1REMwMC1cXHVEQzlEXFx1RENCMC1cXHVEQ0QzXFx1RENEOC1cXHVEQ0ZCXFx1REQwMC1cXHVERDI3XFx1REQzMC1cXHVERDYzXFx1REUwMC1cXHVERjM2XFx1REY0MC1cXHVERjU1XFx1REY2MC1cXHVERjY3XXxcXHVEODAyW1xcdURDMDAtXFx1REMwNVxcdURDMDhcXHVEQzBBLVxcdURDMzVcXHVEQzM3XFx1REMzOFxcdURDM0NcXHVEQzNGLVxcdURDNTVcXHVEQzYwLVxcdURDNzZcXHVEQzgwLVxcdURDOUVcXHVEQ0UwLVxcdURDRjJcXHVEQ0Y0XFx1RENGNVxcdUREMDAtXFx1REQxNVxcdUREMjAtXFx1REQzOVxcdUREODAtXFx1RERCN1xcdUREQkVcXHVEREJGXFx1REUwMFxcdURFMTAtXFx1REUxM1xcdURFMTUtXFx1REUxN1xcdURFMTktXFx1REUzNVxcdURFNjAtXFx1REU3Q1xcdURFODAtXFx1REU5Q1xcdURFQzAtXFx1REVDN1xcdURFQzktXFx1REVFNFxcdURGMDAtXFx1REYzNVxcdURGNDAtXFx1REY1NVxcdURGNjAtXFx1REY3MlxcdURGODAtXFx1REY5MV18XFx1RDgwM1tcXHVEQzAwLVxcdURDNDhcXHVEQzgwLVxcdURDQjJcXHVEQ0MwLVxcdURDRjJcXHVERDAwLVxcdUREMjNcXHVERjAwLVxcdURGMUNcXHVERjI3XFx1REYzMC1cXHVERjQ1XFx1REZFMC1cXHVERkY2XXxcXHVEODA0W1xcdURDMDMtXFx1REMzN1xcdURDODMtXFx1RENBRlxcdURDRDAtXFx1RENFOFxcdUREMDMtXFx1REQyNlxcdURENDRcXHVERDUwLVxcdURENzJcXHVERDc2XFx1REQ4My1cXHVEREIyXFx1RERDMS1cXHVEREM0XFx1REREQVxcdURERENcXHVERTAwLVxcdURFMTFcXHVERTEzLVxcdURFMkJcXHVERTgwLVxcdURFODZcXHVERTg4XFx1REU4QS1cXHVERThEXFx1REU4Ri1cXHVERTlEXFx1REU5Ri1cXHVERUE4XFx1REVCMC1cXHVERURFXFx1REYwNS1cXHVERjBDXFx1REYwRlxcdURGMTBcXHVERjEzLVxcdURGMjhcXHVERjJBLVxcdURGMzBcXHVERjMyXFx1REYzM1xcdURGMzUtXFx1REYzOVxcdURGM0RcXHVERjUwXFx1REY1RC1cXHVERjYxXXxcXHVEODA1W1xcdURDMDAtXFx1REMzNFxcdURDNDctXFx1REM0QVxcdURDNUZcXHVEQzgwLVxcdURDQUZcXHVEQ0M0XFx1RENDNVxcdURDQzdcXHVERDgwLVxcdUREQUVcXHVEREQ4LVxcdUREREJcXHVERTAwLVxcdURFMkZcXHVERTQ0XFx1REU4MC1cXHVERUFBXFx1REVCOFxcdURGMDAtXFx1REYxQV18XFx1RDgwNltcXHVEQzAwLVxcdURDMkJcXHVEQ0EwLVxcdURDREZcXHVEQ0ZGXFx1RERBMC1cXHVEREE3XFx1RERBQS1cXHVEREQwXFx1RERFMVxcdURERTNcXHVERTAwXFx1REUwQi1cXHVERTMyXFx1REUzQVxcdURFNTBcXHVERTVDLVxcdURFODlcXHVERTlEXFx1REVDMC1cXHVERUY4XXxcXHVEODA3W1xcdURDMDAtXFx1REMwOFxcdURDMEEtXFx1REMyRVxcdURDNDBcXHVEQzcyLVxcdURDOEZcXHVERDAwLVxcdUREMDZcXHVERDA4XFx1REQwOVxcdUREMEItXFx1REQzMFxcdURENDZcXHVERDYwLVxcdURENjVcXHVERDY3XFx1REQ2OFxcdURENkEtXFx1REQ4OVxcdUREOThcXHVERUUwLVxcdURFRjJdfFxcdUQ4MDhbXFx1REMwMC1cXHVERjk5XXxcXHVEODA5W1xcdURDODAtXFx1REQ0M118W1xcdUQ4MENcXHVEODFDLVxcdUQ4MjBcXHVEODQwLVxcdUQ4NjhcXHVEODZBLVxcdUQ4NkNcXHVEODZGLVxcdUQ4NzJcXHVEODc0LVxcdUQ4NzldW1xcdURDMDAtXFx1REZGRl18XFx1RDgwRFtcXHVEQzAwLVxcdURDMkVdfFxcdUQ4MTFbXFx1REMwMC1cXHVERTQ2XXxcXHVEODFBW1xcdURDMDAtXFx1REUzOFxcdURFNDAtXFx1REU1RVxcdURFRDAtXFx1REVFRFxcdURGMDAtXFx1REYyRlxcdURGNDAtXFx1REY0M1xcdURGNjMtXFx1REY3N1xcdURGN0QtXFx1REY4Rl18XFx1RDgxQltcXHVERTQwLVxcdURFN0ZcXHVERjAwLVxcdURGNEFcXHVERjUwXFx1REY5My1cXHVERjlGXFx1REZFMFxcdURGRTFcXHVERkUzXXxcXHVEODIxW1xcdURDMDAtXFx1REZGN118XFx1RDgyMltcXHVEQzAwLVxcdURFRjJdfFxcdUQ4MkNbXFx1REMwMC1cXHVERDFFXFx1REQ1MC1cXHVERDUyXFx1REQ2NC1cXHVERDY3XFx1REQ3MC1cXHVERUZCXXxcXHVEODJGW1xcdURDMDAtXFx1REM2QVxcdURDNzAtXFx1REM3Q1xcdURDODAtXFx1REM4OFxcdURDOTAtXFx1REM5OV18XFx1RDgzNVtcXHVEQzAwLVxcdURDNTRcXHVEQzU2LVxcdURDOUNcXHVEQzlFXFx1REM5RlxcdURDQTJcXHVEQ0E1XFx1RENBNlxcdURDQTktXFx1RENBQ1xcdURDQUUtXFx1RENCOVxcdURDQkJcXHVEQ0JELVxcdURDQzNcXHVEQ0M1LVxcdUREMDVcXHVERDA3LVxcdUREMEFcXHVERDBELVxcdUREMTRcXHVERDE2LVxcdUREMUNcXHVERDFFLVxcdUREMzlcXHVERDNCLVxcdUREM0VcXHVERDQwLVxcdURENDRcXHVERDQ2XFx1REQ0QS1cXHVERDUwXFx1REQ1Mi1cXHVERUE1XFx1REVBOC1cXHVERUMwXFx1REVDMi1cXHVERURBXFx1REVEQy1cXHVERUZBXFx1REVGQy1cXHVERjE0XFx1REYxNi1cXHVERjM0XFx1REYzNi1cXHVERjRFXFx1REY1MC1cXHVERjZFXFx1REY3MC1cXHVERjg4XFx1REY4QS1cXHVERkE4XFx1REZBQS1cXHVERkMyXFx1REZDNC1cXHVERkNCXXxcXHVEODM4W1xcdUREMDAtXFx1REQyQ1xcdUREMzctXFx1REQzRFxcdURENEVcXHVERUMwLVxcdURFRUJdfFxcdUQ4M0FbXFx1REMwMC1cXHVEQ0M0XFx1REQwMC1cXHVERDQzXFx1REQ0Ql18XFx1RDgzQltcXHVERTAwLVxcdURFMDNcXHVERTA1LVxcdURFMUZcXHVERTIxXFx1REUyMlxcdURFMjRcXHVERTI3XFx1REUyOS1cXHVERTMyXFx1REUzNC1cXHVERTM3XFx1REUzOVxcdURFM0JcXHVERTQyXFx1REU0N1xcdURFNDlcXHVERTRCXFx1REU0RC1cXHVERTRGXFx1REU1MVxcdURFNTJcXHVERTU0XFx1REU1N1xcdURFNTlcXHVERTVCXFx1REU1RFxcdURFNUZcXHVERTYxXFx1REU2MlxcdURFNjRcXHVERTY3LVxcdURFNkFcXHVERTZDLVxcdURFNzJcXHVERTc0LVxcdURFNzdcXHVERTc5LVxcdURFN0NcXHVERTdFXFx1REU4MC1cXHVERTg5XFx1REU4Qi1cXHVERTlCXFx1REVBMS1cXHVERUEzXFx1REVBNS1cXHVERUE5XFx1REVBQi1cXHVERUJCXXxcXHVEODY5W1xcdURDMDAtXFx1REVENlxcdURGMDAtXFx1REZGRl18XFx1RDg2RFtcXHVEQzAwLVxcdURGMzRcXHVERjQwLVxcdURGRkZdfFxcdUQ4NkVbXFx1REMwMC1cXHVEQzFEXFx1REMyMC1cXHVERkZGXXxcXHVEODczW1xcdURDMDAtXFx1REVBMVxcdURFQjAtXFx1REZGRl18XFx1RDg3QVtcXHVEQzAwLVxcdURGRTBdfFxcdUQ4N0VbXFx1REMwMC1cXHVERTFEXSkpJ1xyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICcwJzpcclxuICAgICAgICAgIHJlZ2V4ICs9ICcoWzAtOV0pJ1xyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICd6JzpcclxuICAgICAgICBjYXNlICdaJzpcclxuICAgICAgICAgIHJlZ2V4ICs9IElTX1VOSUNPREVfUFJPUEVSVFlfU1VQUE9SVEVEXHJcbiAgICAgICAgICAgID8gJyhbMC05XXxcXFxccHtMfSknXHJcbiAgICAgICAgICAgIDogJyhbMC05XXwoPzpbQS1aYS16XFx4QUFcXHhCNVxceEJBXFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzNzAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM3RlxcdTAzODZcXHUwMzg4LVxcdTAzOEFcXHUwMzhDXFx1MDM4RS1cXHUwM0ExXFx1MDNBMy1cXHUwM0Y1XFx1MDNGNy1cXHUwNDgxXFx1MDQ4QS1cXHUwNTJGXFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjAtXFx1MDU4OFxcdTA1RDAtXFx1MDVFQVxcdTA1RUYtXFx1MDVGMlxcdTA2MjAtXFx1MDY0QVxcdTA2NkVcXHUwNjZGXFx1MDY3MS1cXHUwNkQzXFx1MDZENVxcdTA2RTVcXHUwNkU2XFx1MDZFRVxcdTA2RUZcXHUwNkZBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMFxcdTA3MTItXFx1MDcyRlxcdTA3NEQtXFx1MDdBNVxcdTA3QjFcXHUwN0NBLVxcdTA3RUFcXHUwN0Y0XFx1MDdGNVxcdTA3RkFcXHUwODAwLVxcdTA4MTVcXHUwODFBXFx1MDgyNFxcdTA4MjhcXHUwODQwLVxcdTA4NThcXHUwODYwLVxcdTA4NkFcXHUwOEEwLVxcdTA4QjRcXHUwOEI2LVxcdTA4QkRcXHUwOTA0LVxcdTA5MzlcXHUwOTNEXFx1MDk1MFxcdTA5NTgtXFx1MDk2MVxcdTA5NzEtXFx1MDk4MFxcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkRcXHUwOUNFXFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwXFx1MDlGMVxcdTA5RkNcXHUwQTA1LVxcdTBBMEFcXHUwQTBGXFx1MEExMFxcdTBBMTMtXFx1MEEyOFxcdTBBMkEtXFx1MEEzMFxcdTBBMzJcXHUwQTMzXFx1MEEzNVxcdTBBMzZcXHUwQTM4XFx1MEEzOVxcdTBBNTktXFx1MEE1Q1xcdTBBNUVcXHUwQTcyLVxcdTBBNzRcXHUwQTg1LVxcdTBBOERcXHUwQThGLVxcdTBBOTFcXHUwQTkzLVxcdTBBQThcXHUwQUFBLVxcdTBBQjBcXHUwQUIyXFx1MEFCM1xcdTBBQjUtXFx1MEFCOVxcdTBBQkRcXHUwQUQwXFx1MEFFMFxcdTBBRTFcXHUwQUY5XFx1MEIwNS1cXHUwQjBDXFx1MEIwRlxcdTBCMTBcXHUwQjEzLVxcdTBCMjhcXHUwQjJBLVxcdTBCMzBcXHUwQjMyXFx1MEIzM1xcdTBCMzUtXFx1MEIzOVxcdTBCM0RcXHUwQjVDXFx1MEI1RFxcdTBCNUYtXFx1MEI2MVxcdTBCNzFcXHUwQjgzXFx1MEI4NS1cXHUwQjhBXFx1MEI4RS1cXHUwQjkwXFx1MEI5Mi1cXHUwQjk1XFx1MEI5OVxcdTBCOUFcXHUwQjlDXFx1MEI5RVxcdTBCOUZcXHUwQkEzXFx1MEJBNFxcdTBCQTgtXFx1MEJBQVxcdTBCQUUtXFx1MEJCOVxcdTBCRDBcXHUwQzA1LVxcdTBDMENcXHUwQzBFLVxcdTBDMTBcXHUwQzEyLVxcdTBDMjhcXHUwQzJBLVxcdTBDMzlcXHUwQzNEXFx1MEM1OC1cXHUwQzVBXFx1MEM2MFxcdTBDNjFcXHUwQzgwXFx1MEM4NS1cXHUwQzhDXFx1MEM4RS1cXHUwQzkwXFx1MEM5Mi1cXHUwQ0E4XFx1MENBQS1cXHUwQ0IzXFx1MENCNS1cXHUwQ0I5XFx1MENCRFxcdTBDREVcXHUwQ0UwXFx1MENFMVxcdTBDRjFcXHUwQ0YyXFx1MEQwNS1cXHUwRDBDXFx1MEQwRS1cXHUwRDEwXFx1MEQxMi1cXHUwRDNBXFx1MEQzRFxcdTBENEVcXHUwRDU0LVxcdTBENTZcXHUwRDVGLVxcdTBENjFcXHUwRDdBLVxcdTBEN0ZcXHUwRDg1LVxcdTBEOTZcXHUwRDlBLVxcdTBEQjFcXHUwREIzLVxcdTBEQkJcXHUwREJEXFx1MERDMC1cXHUwREM2XFx1MEUwMS1cXHUwRTMwXFx1MEUzMlxcdTBFMzNcXHUwRTQwLVxcdTBFNDZcXHUwRTgxXFx1MEU4MlxcdTBFODRcXHUwRTg2LVxcdTBFOEFcXHUwRThDLVxcdTBFQTNcXHUwRUE1XFx1MEVBNy1cXHUwRUIwXFx1MEVCMlxcdTBFQjNcXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVDNlxcdTBFREMtXFx1MEVERlxcdTBGMDBcXHUwRjQwLVxcdTBGNDdcXHUwRjQ5LVxcdTBGNkNcXHUwRjg4LVxcdTBGOENcXHUxMDAwLVxcdTEwMkFcXHUxMDNGXFx1MTA1MC1cXHUxMDU1XFx1MTA1QS1cXHUxMDVEXFx1MTA2MVxcdTEwNjVcXHUxMDY2XFx1MTA2RS1cXHUxMDcwXFx1MTA3NS1cXHUxMDgxXFx1MTA4RVxcdTEwQTAtXFx1MTBDNVxcdTEwQzdcXHUxMENEXFx1MTBEMC1cXHUxMEZBXFx1MTBGQy1cXHUxMjQ4XFx1MTI0QS1cXHUxMjREXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNUEtXFx1MTI1RFxcdTEyNjAtXFx1MTI4OFxcdTEyOEEtXFx1MTI4RFxcdTEyOTAtXFx1MTJCMFxcdTEyQjItXFx1MTJCNVxcdTEyQjgtXFx1MTJCRVxcdTEyQzBcXHUxMkMyLVxcdTEyQzVcXHUxMkM4LVxcdTEyRDZcXHUxMkQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNUFcXHUxMzgwLVxcdTEzOEZcXHUxM0EwLVxcdTEzRjVcXHUxM0Y4LVxcdTEzRkRcXHUxNDAxLVxcdTE2NkNcXHUxNjZGLVxcdTE2N0ZcXHUxNjgxLVxcdTE2OUFcXHUxNkEwLVxcdTE2RUFcXHUxNkYxLVxcdTE2RjhcXHUxNzAwLVxcdTE3MENcXHUxNzBFLVxcdTE3MTFcXHUxNzIwLVxcdTE3MzFcXHUxNzQwLVxcdTE3NTFcXHUxNzYwLVxcdTE3NkNcXHUxNzZFLVxcdTE3NzBcXHUxNzgwLVxcdTE3QjNcXHUxN0Q3XFx1MTdEQ1xcdTE4MjAtXFx1MTg3OFxcdTE4ODAtXFx1MTg4NFxcdTE4ODctXFx1MThBOFxcdTE4QUFcXHUxOEIwLVxcdTE4RjVcXHUxOTAwLVxcdTE5MUVcXHUxOTUwLVxcdTE5NkRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5QUJcXHUxOUIwLVxcdTE5QzlcXHUxQTAwLVxcdTFBMTZcXHUxQTIwLVxcdTFBNTRcXHUxQUE3XFx1MUIwNS1cXHUxQjMzXFx1MUI0NS1cXHUxQjRCXFx1MUI4My1cXHUxQkEwXFx1MUJBRVxcdTFCQUZcXHUxQkJBLVxcdTFCRTVcXHUxQzAwLVxcdTFDMjNcXHUxQzRELVxcdTFDNEZcXHUxQzVBLVxcdTFDN0RcXHUxQzgwLVxcdTFDODhcXHUxQzkwLVxcdTFDQkFcXHUxQ0JELVxcdTFDQkZcXHUxQ0U5LVxcdTFDRUNcXHUxQ0VFLVxcdTFDRjNcXHUxQ0Y1XFx1MUNGNlxcdTFDRkFcXHUxRDAwLVxcdTFEQkZcXHUxRTAwLVxcdTFGMTVcXHUxRjE4LVxcdTFGMURcXHUxRjIwLVxcdTFGNDVcXHUxRjQ4LVxcdTFGNERcXHUxRjUwLVxcdTFGNTdcXHUxRjU5XFx1MUY1QlxcdTFGNURcXHUxRjVGLVxcdTFGN0RcXHUxRjgwLVxcdTFGQjRcXHUxRkI2LVxcdTFGQkNcXHUxRkJFXFx1MUZDMi1cXHUxRkM0XFx1MUZDNi1cXHUxRkNDXFx1MUZEMC1cXHUxRkQzXFx1MUZENi1cXHUxRkRCXFx1MUZFMC1cXHUxRkVDXFx1MUZGMi1cXHUxRkY0XFx1MUZGNi1cXHUxRkZDXFx1MjA3MVxcdTIwN0ZcXHUyMDkwLVxcdTIwOUNcXHUyMTAyXFx1MjEwN1xcdTIxMEEtXFx1MjExM1xcdTIxMTVcXHUyMTE5LVxcdTIxMURcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJBLVxcdTIxMkRcXHUyMTJGLVxcdTIxMzlcXHUyMTNDLVxcdTIxM0ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRFXFx1MjE4M1xcdTIxODRcXHUyQzAwLVxcdTJDMkVcXHUyQzMwLVxcdTJDNUVcXHUyQzYwLVxcdTJDRTRcXHUyQ0VCLVxcdTJDRUVcXHUyQ0YyXFx1MkNGM1xcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1MkQzMC1cXHUyRDY3XFx1MkQ2RlxcdTJEODAtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNlxcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRVxcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTJFMkZcXHUzMDA1XFx1MzAwNlxcdTMwMzEtXFx1MzAzNVxcdTMwM0JcXHUzMDNDXFx1MzA0MS1cXHUzMDk2XFx1MzA5RC1cXHUzMDlGXFx1MzBBMS1cXHUzMEZBXFx1MzBGQy1cXHUzMEZGXFx1MzEwNS1cXHUzMTJGXFx1MzEzMS1cXHUzMThFXFx1MzFBMC1cXHUzMUJBXFx1MzFGMC1cXHUzMUZGXFx1MzQwMC1cXHU0REI1XFx1NEUwMC1cXHU5RkVGXFx1QTAwMC1cXHVBNDhDXFx1QTREMC1cXHVBNEZEXFx1QTUwMC1cXHVBNjBDXFx1QTYxMC1cXHVBNjFGXFx1QTYyQVxcdUE2MkJcXHVBNjQwLVxcdUE2NkVcXHVBNjdGLVxcdUE2OURcXHVBNkEwLVxcdUE2RTVcXHVBNzE3LVxcdUE3MUZcXHVBNzIyLVxcdUE3ODhcXHVBNzhCLVxcdUE3QkZcXHVBN0MyLVxcdUE3QzZcXHVBN0Y3LVxcdUE4MDFcXHVBODAzLVxcdUE4MDVcXHVBODA3LVxcdUE4MEFcXHVBODBDLVxcdUE4MjJcXHVBODQwLVxcdUE4NzNcXHVBODgyLVxcdUE4QjNcXHVBOEYyLVxcdUE4RjdcXHVBOEZCXFx1QThGRFxcdUE4RkVcXHVBOTBBLVxcdUE5MjVcXHVBOTMwLVxcdUE5NDZcXHVBOTYwLVxcdUE5N0NcXHVBOTg0LVxcdUE5QjJcXHVBOUNGXFx1QTlFMC1cXHVBOUU0XFx1QTlFNi1cXHVBOUVGXFx1QTlGQS1cXHVBOUZFXFx1QUEwMC1cXHVBQTI4XFx1QUE0MC1cXHVBQTQyXFx1QUE0NC1cXHVBQTRCXFx1QUE2MC1cXHVBQTc2XFx1QUE3QVxcdUFBN0UtXFx1QUFBRlxcdUFBQjFcXHVBQUI1XFx1QUFCNlxcdUFBQjktXFx1QUFCRFxcdUFBQzBcXHVBQUMyXFx1QUFEQi1cXHVBQUREXFx1QUFFMC1cXHVBQUVBXFx1QUFGMi1cXHVBQUY0XFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXFx1QUIzMC1cXHVBQjVBXFx1QUI1Qy1cXHVBQjY3XFx1QUI3MC1cXHVBQkUyXFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRFxcdUZCMUYtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwXFx1RkI0MVxcdUZCNDNcXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXFx1RkQ1MC1cXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZCXFx1RkU3MC1cXHVGRTc0XFx1RkU3Ni1cXHVGRUZDXFx1RkYyMS1cXHVGRjNBXFx1RkY0MS1cXHVGRjVBXFx1RkY2Ni1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXFx1RkZEMi1cXHVGRkQ3XFx1RkZEQS1cXHVGRkRDXXxcXHVEODAwW1xcdURDMDAtXFx1REMwQlxcdURDMEQtXFx1REMyNlxcdURDMjgtXFx1REMzQVxcdURDM0NcXHVEQzNEXFx1REMzRi1cXHVEQzREXFx1REM1MC1cXHVEQzVEXFx1REM4MC1cXHVEQ0ZBXFx1REU4MC1cXHVERTlDXFx1REVBMC1cXHVERUQwXFx1REYwMC1cXHVERjFGXFx1REYyRC1cXHVERjQwXFx1REY0Mi1cXHVERjQ5XFx1REY1MC1cXHVERjc1XFx1REY4MC1cXHVERjlEXFx1REZBMC1cXHVERkMzXFx1REZDOC1cXHVERkNGXXxcXHVEODAxW1xcdURDMDAtXFx1REM5RFxcdURDQjAtXFx1RENEM1xcdURDRDgtXFx1RENGQlxcdUREMDAtXFx1REQyN1xcdUREMzAtXFx1REQ2M1xcdURFMDAtXFx1REYzNlxcdURGNDAtXFx1REY1NVxcdURGNjAtXFx1REY2N118XFx1RDgwMltcXHVEQzAwLVxcdURDMDVcXHVEQzA4XFx1REMwQS1cXHVEQzM1XFx1REMzN1xcdURDMzhcXHVEQzNDXFx1REMzRi1cXHVEQzU1XFx1REM2MC1cXHVEQzc2XFx1REM4MC1cXHVEQzlFXFx1RENFMC1cXHVEQ0YyXFx1RENGNFxcdURDRjVcXHVERDAwLVxcdUREMTVcXHVERDIwLVxcdUREMzlcXHVERDgwLVxcdUREQjdcXHVEREJFXFx1RERCRlxcdURFMDBcXHVERTEwLVxcdURFMTNcXHVERTE1LVxcdURFMTdcXHVERTE5LVxcdURFMzVcXHVERTYwLVxcdURFN0NcXHVERTgwLVxcdURFOUNcXHVERUMwLVxcdURFQzdcXHVERUM5LVxcdURFRTRcXHVERjAwLVxcdURGMzVcXHVERjQwLVxcdURGNTVcXHVERjYwLVxcdURGNzJcXHVERjgwLVxcdURGOTFdfFxcdUQ4MDNbXFx1REMwMC1cXHVEQzQ4XFx1REM4MC1cXHVEQ0IyXFx1RENDMC1cXHVEQ0YyXFx1REQwMC1cXHVERDIzXFx1REYwMC1cXHVERjFDXFx1REYyN1xcdURGMzAtXFx1REY0NVxcdURGRTAtXFx1REZGNl18XFx1RDgwNFtcXHVEQzAzLVxcdURDMzdcXHVEQzgzLVxcdURDQUZcXHVEQ0QwLVxcdURDRThcXHVERDAzLVxcdUREMjZcXHVERDQ0XFx1REQ1MC1cXHVERDcyXFx1REQ3NlxcdUREODMtXFx1RERCMlxcdUREQzEtXFx1RERDNFxcdUREREFcXHVERERDXFx1REUwMC1cXHVERTExXFx1REUxMy1cXHVERTJCXFx1REU4MC1cXHVERTg2XFx1REU4OFxcdURFOEEtXFx1REU4RFxcdURFOEYtXFx1REU5RFxcdURFOUYtXFx1REVBOFxcdURFQjAtXFx1REVERVxcdURGMDUtXFx1REYwQ1xcdURGMEZcXHVERjEwXFx1REYxMy1cXHVERjI4XFx1REYyQS1cXHVERjMwXFx1REYzMlxcdURGMzNcXHVERjM1LVxcdURGMzlcXHVERjNEXFx1REY1MFxcdURGNUQtXFx1REY2MV18XFx1RDgwNVtcXHVEQzAwLVxcdURDMzRcXHVEQzQ3LVxcdURDNEFcXHVEQzVGXFx1REM4MC1cXHVEQ0FGXFx1RENDNFxcdURDQzVcXHVEQ0M3XFx1REQ4MC1cXHVEREFFXFx1REREOC1cXHVERERCXFx1REUwMC1cXHVERTJGXFx1REU0NFxcdURFODAtXFx1REVBQVxcdURFQjhcXHVERjAwLVxcdURGMUFdfFxcdUQ4MDZbXFx1REMwMC1cXHVEQzJCXFx1RENBMC1cXHVEQ0RGXFx1RENGRlxcdUREQTAtXFx1RERBN1xcdUREQUEtXFx1REREMFxcdURERTFcXHVEREUzXFx1REUwMFxcdURFMEItXFx1REUzMlxcdURFM0FcXHVERTUwXFx1REU1Qy1cXHVERTg5XFx1REU5RFxcdURFQzAtXFx1REVGOF18XFx1RDgwN1tcXHVEQzAwLVxcdURDMDhcXHVEQzBBLVxcdURDMkVcXHVEQzQwXFx1REM3Mi1cXHVEQzhGXFx1REQwMC1cXHVERDA2XFx1REQwOFxcdUREMDlcXHVERDBCLVxcdUREMzBcXHVERDQ2XFx1REQ2MC1cXHVERDY1XFx1REQ2N1xcdURENjhcXHVERDZBLVxcdUREODlcXHVERDk4XFx1REVFMC1cXHVERUYyXXxcXHVEODA4W1xcdURDMDAtXFx1REY5OV18XFx1RDgwOVtcXHVEQzgwLVxcdURENDNdfFtcXHVEODBDXFx1RDgxQy1cXHVEODIwXFx1RDg0MC1cXHVEODY4XFx1RDg2QS1cXHVEODZDXFx1RDg2Ri1cXHVEODcyXFx1RDg3NC1cXHVEODc5XVtcXHVEQzAwLVxcdURGRkZdfFxcdUQ4MERbXFx1REMwMC1cXHVEQzJFXXxcXHVEODExW1xcdURDMDAtXFx1REU0Nl18XFx1RDgxQVtcXHVEQzAwLVxcdURFMzhcXHVERTQwLVxcdURFNUVcXHVERUQwLVxcdURFRURcXHVERjAwLVxcdURGMkZcXHVERjQwLVxcdURGNDNcXHVERjYzLVxcdURGNzdcXHVERjdELVxcdURGOEZdfFxcdUQ4MUJbXFx1REU0MC1cXHVERTdGXFx1REYwMC1cXHVERjRBXFx1REY1MFxcdURGOTMtXFx1REY5RlxcdURGRTBcXHVERkUxXFx1REZFM118XFx1RDgyMVtcXHVEQzAwLVxcdURGRjddfFxcdUQ4MjJbXFx1REMwMC1cXHVERUYyXXxcXHVEODJDW1xcdURDMDAtXFx1REQxRVxcdURENTAtXFx1REQ1MlxcdURENjQtXFx1REQ2N1xcdURENzAtXFx1REVGQl18XFx1RDgyRltcXHVEQzAwLVxcdURDNkFcXHVEQzcwLVxcdURDN0NcXHVEQzgwLVxcdURDODhcXHVEQzkwLVxcdURDOTldfFxcdUQ4MzVbXFx1REMwMC1cXHVEQzU0XFx1REM1Ni1cXHVEQzlDXFx1REM5RVxcdURDOUZcXHVEQ0EyXFx1RENBNVxcdURDQTZcXHVEQ0E5LVxcdURDQUNcXHVEQ0FFLVxcdURDQjlcXHVEQ0JCXFx1RENCRC1cXHVEQ0MzXFx1RENDNS1cXHVERDA1XFx1REQwNy1cXHVERDBBXFx1REQwRC1cXHVERDE0XFx1REQxNi1cXHVERDFDXFx1REQxRS1cXHVERDM5XFx1REQzQi1cXHVERDNFXFx1REQ0MC1cXHVERDQ0XFx1REQ0NlxcdURENEEtXFx1REQ1MFxcdURENTItXFx1REVBNVxcdURFQTgtXFx1REVDMFxcdURFQzItXFx1REVEQVxcdURFREMtXFx1REVGQVxcdURFRkMtXFx1REYxNFxcdURGMTYtXFx1REYzNFxcdURGMzYtXFx1REY0RVxcdURGNTAtXFx1REY2RVxcdURGNzAtXFx1REY4OFxcdURGOEEtXFx1REZBOFxcdURGQUEtXFx1REZDMlxcdURGQzQtXFx1REZDQl18XFx1RDgzOFtcXHVERDAwLVxcdUREMkNcXHVERDM3LVxcdUREM0RcXHVERDRFXFx1REVDMC1cXHVERUVCXXxcXHVEODNBW1xcdURDMDAtXFx1RENDNFxcdUREMDAtXFx1REQ0M1xcdURENEJdfFxcdUQ4M0JbXFx1REUwMC1cXHVERTAzXFx1REUwNS1cXHVERTFGXFx1REUyMVxcdURFMjJcXHVERTI0XFx1REUyN1xcdURFMjktXFx1REUzMlxcdURFMzQtXFx1REUzN1xcdURFMzlcXHVERTNCXFx1REU0MlxcdURFNDdcXHVERTQ5XFx1REU0QlxcdURFNEQtXFx1REU0RlxcdURFNTFcXHVERTUyXFx1REU1NFxcdURFNTdcXHVERTU5XFx1REU1QlxcdURFNURcXHVERTVGXFx1REU2MVxcdURFNjJcXHVERTY0XFx1REU2Ny1cXHVERTZBXFx1REU2Qy1cXHVERTcyXFx1REU3NC1cXHVERTc3XFx1REU3OS1cXHVERTdDXFx1REU3RVxcdURFODAtXFx1REU4OVxcdURFOEItXFx1REU5QlxcdURFQTEtXFx1REVBM1xcdURFQTUtXFx1REVBOVxcdURFQUItXFx1REVCQl18XFx1RDg2OVtcXHVEQzAwLVxcdURFRDZcXHVERjAwLVxcdURGRkZdfFxcdUQ4NkRbXFx1REMwMC1cXHVERjM0XFx1REY0MC1cXHVERkZGXXxcXHVEODZFW1xcdURDMDAtXFx1REMxRFxcdURDMjAtXFx1REZGRl18XFx1RDg3M1tcXHVEQzAwLVxcdURFQTFcXHVERUIwLVxcdURGRkZdfFxcdUQ4N0FbXFx1REMwMC1cXHVERkUwXXxcXHVEODdFW1xcdURDMDAtXFx1REUxRF0pKSdcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAnVSc6XHJcbiAgICAgICAgICByZWdleCArPSBJU19VTklDT0RFX1BST1BFUlRZX1NVUFBPUlRFRFxyXG4gICAgICAgICAgICA/ICcoKFswLTldKXwoXFxcXHMpfChbLiwvIyEkJV4mKjs6e309LV9gfigpXSl8KFxcXFxwe0x9KSknXHJcbiAgICAgICAgICAgIDogJygoWzAtOV0pfChcXFxccyl8KFsuLC8jISQlXiYqOzp7fT0tX2B+KCldKXwoPzpbQS1aYS16XFx4QUFcXHhCNVxceEJBXFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzNzAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM3RlxcdTAzODZcXHUwMzg4LVxcdTAzOEFcXHUwMzhDXFx1MDM4RS1cXHUwM0ExXFx1MDNBMy1cXHUwM0Y1XFx1MDNGNy1cXHUwNDgxXFx1MDQ4QS1cXHUwNTJGXFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjAtXFx1MDU4OFxcdTA1RDAtXFx1MDVFQVxcdTA1RUYtXFx1MDVGMlxcdTA2MjAtXFx1MDY0QVxcdTA2NkVcXHUwNjZGXFx1MDY3MS1cXHUwNkQzXFx1MDZENVxcdTA2RTVcXHUwNkU2XFx1MDZFRVxcdTA2RUZcXHUwNkZBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMFxcdTA3MTItXFx1MDcyRlxcdTA3NEQtXFx1MDdBNVxcdTA3QjFcXHUwN0NBLVxcdTA3RUFcXHUwN0Y0XFx1MDdGNVxcdTA3RkFcXHUwODAwLVxcdTA4MTVcXHUwODFBXFx1MDgyNFxcdTA4MjhcXHUwODQwLVxcdTA4NThcXHUwODYwLVxcdTA4NkFcXHUwOEEwLVxcdTA4QjRcXHUwOEI2LVxcdTA4QkRcXHUwOTA0LVxcdTA5MzlcXHUwOTNEXFx1MDk1MFxcdTA5NTgtXFx1MDk2MVxcdTA5NzEtXFx1MDk4MFxcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkRcXHUwOUNFXFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwXFx1MDlGMVxcdTA5RkNcXHUwQTA1LVxcdTBBMEFcXHUwQTBGXFx1MEExMFxcdTBBMTMtXFx1MEEyOFxcdTBBMkEtXFx1MEEzMFxcdTBBMzJcXHUwQTMzXFx1MEEzNVxcdTBBMzZcXHUwQTM4XFx1MEEzOVxcdTBBNTktXFx1MEE1Q1xcdTBBNUVcXHUwQTcyLVxcdTBBNzRcXHUwQTg1LVxcdTBBOERcXHUwQThGLVxcdTBBOTFcXHUwQTkzLVxcdTBBQThcXHUwQUFBLVxcdTBBQjBcXHUwQUIyXFx1MEFCM1xcdTBBQjUtXFx1MEFCOVxcdTBBQkRcXHUwQUQwXFx1MEFFMFxcdTBBRTFcXHUwQUY5XFx1MEIwNS1cXHUwQjBDXFx1MEIwRlxcdTBCMTBcXHUwQjEzLVxcdTBCMjhcXHUwQjJBLVxcdTBCMzBcXHUwQjMyXFx1MEIzM1xcdTBCMzUtXFx1MEIzOVxcdTBCM0RcXHUwQjVDXFx1MEI1RFxcdTBCNUYtXFx1MEI2MVxcdTBCNzFcXHUwQjgzXFx1MEI4NS1cXHUwQjhBXFx1MEI4RS1cXHUwQjkwXFx1MEI5Mi1cXHUwQjk1XFx1MEI5OVxcdTBCOUFcXHUwQjlDXFx1MEI5RVxcdTBCOUZcXHUwQkEzXFx1MEJBNFxcdTBCQTgtXFx1MEJBQVxcdTBCQUUtXFx1MEJCOVxcdTBCRDBcXHUwQzA1LVxcdTBDMENcXHUwQzBFLVxcdTBDMTBcXHUwQzEyLVxcdTBDMjhcXHUwQzJBLVxcdTBDMzlcXHUwQzNEXFx1MEM1OC1cXHUwQzVBXFx1MEM2MFxcdTBDNjFcXHUwQzgwXFx1MEM4NS1cXHUwQzhDXFx1MEM4RS1cXHUwQzkwXFx1MEM5Mi1cXHUwQ0E4XFx1MENBQS1cXHUwQ0IzXFx1MENCNS1cXHUwQ0I5XFx1MENCRFxcdTBDREVcXHUwQ0UwXFx1MENFMVxcdTBDRjFcXHUwQ0YyXFx1MEQwNS1cXHUwRDBDXFx1MEQwRS1cXHUwRDEwXFx1MEQxMi1cXHUwRDNBXFx1MEQzRFxcdTBENEVcXHUwRDU0LVxcdTBENTZcXHUwRDVGLVxcdTBENjFcXHUwRDdBLVxcdTBEN0ZcXHUwRDg1LVxcdTBEOTZcXHUwRDlBLVxcdTBEQjFcXHUwREIzLVxcdTBEQkJcXHUwREJEXFx1MERDMC1cXHUwREM2XFx1MEUwMS1cXHUwRTMwXFx1MEUzMlxcdTBFMzNcXHUwRTQwLVxcdTBFNDZcXHUwRTgxXFx1MEU4MlxcdTBFODRcXHUwRTg2LVxcdTBFOEFcXHUwRThDLVxcdTBFQTNcXHUwRUE1XFx1MEVBNy1cXHUwRUIwXFx1MEVCMlxcdTBFQjNcXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVDNlxcdTBFREMtXFx1MEVERlxcdTBGMDBcXHUwRjQwLVxcdTBGNDdcXHUwRjQ5LVxcdTBGNkNcXHUwRjg4LVxcdTBGOENcXHUxMDAwLVxcdTEwMkFcXHUxMDNGXFx1MTA1MC1cXHUxMDU1XFx1MTA1QS1cXHUxMDVEXFx1MTA2MVxcdTEwNjVcXHUxMDY2XFx1MTA2RS1cXHUxMDcwXFx1MTA3NS1cXHUxMDgxXFx1MTA4RVxcdTEwQTAtXFx1MTBDNVxcdTEwQzdcXHUxMENEXFx1MTBEMC1cXHUxMEZBXFx1MTBGQy1cXHUxMjQ4XFx1MTI0QS1cXHUxMjREXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNUEtXFx1MTI1RFxcdTEyNjAtXFx1MTI4OFxcdTEyOEEtXFx1MTI4RFxcdTEyOTAtXFx1MTJCMFxcdTEyQjItXFx1MTJCNVxcdTEyQjgtXFx1MTJCRVxcdTEyQzBcXHUxMkMyLVxcdTEyQzVcXHUxMkM4LVxcdTEyRDZcXHUxMkQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNUFcXHUxMzgwLVxcdTEzOEZcXHUxM0EwLVxcdTEzRjVcXHUxM0Y4LVxcdTEzRkRcXHUxNDAxLVxcdTE2NkNcXHUxNjZGLVxcdTE2N0ZcXHUxNjgxLVxcdTE2OUFcXHUxNkEwLVxcdTE2RUFcXHUxNkYxLVxcdTE2RjhcXHUxNzAwLVxcdTE3MENcXHUxNzBFLVxcdTE3MTFcXHUxNzIwLVxcdTE3MzFcXHUxNzQwLVxcdTE3NTFcXHUxNzYwLVxcdTE3NkNcXHUxNzZFLVxcdTE3NzBcXHUxNzgwLVxcdTE3QjNcXHUxN0Q3XFx1MTdEQ1xcdTE4MjAtXFx1MTg3OFxcdTE4ODAtXFx1MTg4NFxcdTE4ODctXFx1MThBOFxcdTE4QUFcXHUxOEIwLVxcdTE4RjVcXHUxOTAwLVxcdTE5MUVcXHUxOTUwLVxcdTE5NkRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5QUJcXHUxOUIwLVxcdTE5QzlcXHUxQTAwLVxcdTFBMTZcXHUxQTIwLVxcdTFBNTRcXHUxQUE3XFx1MUIwNS1cXHUxQjMzXFx1MUI0NS1cXHUxQjRCXFx1MUI4My1cXHUxQkEwXFx1MUJBRVxcdTFCQUZcXHUxQkJBLVxcdTFCRTVcXHUxQzAwLVxcdTFDMjNcXHUxQzRELVxcdTFDNEZcXHUxQzVBLVxcdTFDN0RcXHUxQzgwLVxcdTFDODhcXHUxQzkwLVxcdTFDQkFcXHUxQ0JELVxcdTFDQkZcXHUxQ0U5LVxcdTFDRUNcXHUxQ0VFLVxcdTFDRjNcXHUxQ0Y1XFx1MUNGNlxcdTFDRkFcXHUxRDAwLVxcdTFEQkZcXHUxRTAwLVxcdTFGMTVcXHUxRjE4LVxcdTFGMURcXHUxRjIwLVxcdTFGNDVcXHUxRjQ4LVxcdTFGNERcXHUxRjUwLVxcdTFGNTdcXHUxRjU5XFx1MUY1QlxcdTFGNURcXHUxRjVGLVxcdTFGN0RcXHUxRjgwLVxcdTFGQjRcXHUxRkI2LVxcdTFGQkNcXHUxRkJFXFx1MUZDMi1cXHUxRkM0XFx1MUZDNi1cXHUxRkNDXFx1MUZEMC1cXHUxRkQzXFx1MUZENi1cXHUxRkRCXFx1MUZFMC1cXHUxRkVDXFx1MUZGMi1cXHUxRkY0XFx1MUZGNi1cXHUxRkZDXFx1MjA3MVxcdTIwN0ZcXHUyMDkwLVxcdTIwOUNcXHUyMTAyXFx1MjEwN1xcdTIxMEEtXFx1MjExM1xcdTIxMTVcXHUyMTE5LVxcdTIxMURcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJBLVxcdTIxMkRcXHUyMTJGLVxcdTIxMzlcXHUyMTNDLVxcdTIxM0ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRFXFx1MjE4M1xcdTIxODRcXHUyQzAwLVxcdTJDMkVcXHUyQzMwLVxcdTJDNUVcXHUyQzYwLVxcdTJDRTRcXHUyQ0VCLVxcdTJDRUVcXHUyQ0YyXFx1MkNGM1xcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1MkQzMC1cXHUyRDY3XFx1MkQ2RlxcdTJEODAtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNlxcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRVxcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTJFMkZcXHUzMDA1XFx1MzAwNlxcdTMwMzEtXFx1MzAzNVxcdTMwM0JcXHUzMDNDXFx1MzA0MS1cXHUzMDk2XFx1MzA5RC1cXHUzMDlGXFx1MzBBMS1cXHUzMEZBXFx1MzBGQy1cXHUzMEZGXFx1MzEwNS1cXHUzMTJGXFx1MzEzMS1cXHUzMThFXFx1MzFBMC1cXHUzMUJBXFx1MzFGMC1cXHUzMUZGXFx1MzQwMC1cXHU0REI1XFx1NEUwMC1cXHU5RkVGXFx1QTAwMC1cXHVBNDhDXFx1QTREMC1cXHVBNEZEXFx1QTUwMC1cXHVBNjBDXFx1QTYxMC1cXHVBNjFGXFx1QTYyQVxcdUE2MkJcXHVBNjQwLVxcdUE2NkVcXHVBNjdGLVxcdUE2OURcXHVBNkEwLVxcdUE2RTVcXHVBNzE3LVxcdUE3MUZcXHVBNzIyLVxcdUE3ODhcXHVBNzhCLVxcdUE3QkZcXHVBN0MyLVxcdUE3QzZcXHVBN0Y3LVxcdUE4MDFcXHVBODAzLVxcdUE4MDVcXHVBODA3LVxcdUE4MEFcXHVBODBDLVxcdUE4MjJcXHVBODQwLVxcdUE4NzNcXHVBODgyLVxcdUE4QjNcXHVBOEYyLVxcdUE4RjdcXHVBOEZCXFx1QThGRFxcdUE4RkVcXHVBOTBBLVxcdUE5MjVcXHVBOTMwLVxcdUE5NDZcXHVBOTYwLVxcdUE5N0NcXHVBOTg0LVxcdUE5QjJcXHVBOUNGXFx1QTlFMC1cXHVBOUU0XFx1QTlFNi1cXHVBOUVGXFx1QTlGQS1cXHVBOUZFXFx1QUEwMC1cXHVBQTI4XFx1QUE0MC1cXHVBQTQyXFx1QUE0NC1cXHVBQTRCXFx1QUE2MC1cXHVBQTc2XFx1QUE3QVxcdUFBN0UtXFx1QUFBRlxcdUFBQjFcXHVBQUI1XFx1QUFCNlxcdUFBQjktXFx1QUFCRFxcdUFBQzBcXHVBQUMyXFx1QUFEQi1cXHVBQUREXFx1QUFFMC1cXHVBQUVBXFx1QUFGMi1cXHVBQUY0XFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXFx1QUIzMC1cXHVBQjVBXFx1QUI1Qy1cXHVBQjY3XFx1QUI3MC1cXHVBQkUyXFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRFxcdUZCMUYtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwXFx1RkI0MVxcdUZCNDNcXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXFx1RkQ1MC1cXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZCXFx1RkU3MC1cXHVGRTc0XFx1RkU3Ni1cXHVGRUZDXFx1RkYyMS1cXHVGRjNBXFx1RkY0MS1cXHVGRjVBXFx1RkY2Ni1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXFx1RkZEMi1cXHVGRkQ3XFx1RkZEQS1cXHVGRkRDXXxcXHVEODAwW1xcdURDMDAtXFx1REMwQlxcdURDMEQtXFx1REMyNlxcdURDMjgtXFx1REMzQVxcdURDM0NcXHVEQzNEXFx1REMzRi1cXHVEQzREXFx1REM1MC1cXHVEQzVEXFx1REM4MC1cXHVEQ0ZBXFx1REU4MC1cXHVERTlDXFx1REVBMC1cXHVERUQwXFx1REYwMC1cXHVERjFGXFx1REYyRC1cXHVERjQwXFx1REY0Mi1cXHVERjQ5XFx1REY1MC1cXHVERjc1XFx1REY4MC1cXHVERjlEXFx1REZBMC1cXHVERkMzXFx1REZDOC1cXHVERkNGXXxcXHVEODAxW1xcdURDMDAtXFx1REM5RFxcdURDQjAtXFx1RENEM1xcdURDRDgtXFx1RENGQlxcdUREMDAtXFx1REQyN1xcdUREMzAtXFx1REQ2M1xcdURFMDAtXFx1REYzNlxcdURGNDAtXFx1REY1NVxcdURGNjAtXFx1REY2N118XFx1RDgwMltcXHVEQzAwLVxcdURDMDVcXHVEQzA4XFx1REMwQS1cXHVEQzM1XFx1REMzN1xcdURDMzhcXHVEQzNDXFx1REMzRi1cXHVEQzU1XFx1REM2MC1cXHVEQzc2XFx1REM4MC1cXHVEQzlFXFx1RENFMC1cXHVEQ0YyXFx1RENGNFxcdURDRjVcXHVERDAwLVxcdUREMTVcXHVERDIwLVxcdUREMzlcXHVERDgwLVxcdUREQjdcXHVEREJFXFx1RERCRlxcdURFMDBcXHVERTEwLVxcdURFMTNcXHVERTE1LVxcdURFMTdcXHVERTE5LVxcdURFMzVcXHVERTYwLVxcdURFN0NcXHVERTgwLVxcdURFOUNcXHVERUMwLVxcdURFQzdcXHVERUM5LVxcdURFRTRcXHVERjAwLVxcdURGMzVcXHVERjQwLVxcdURGNTVcXHVERjYwLVxcdURGNzJcXHVERjgwLVxcdURGOTFdfFxcdUQ4MDNbXFx1REMwMC1cXHVEQzQ4XFx1REM4MC1cXHVEQ0IyXFx1RENDMC1cXHVEQ0YyXFx1REQwMC1cXHVERDIzXFx1REYwMC1cXHVERjFDXFx1REYyN1xcdURGMzAtXFx1REY0NVxcdURGRTAtXFx1REZGNl18XFx1RDgwNFtcXHVEQzAzLVxcdURDMzdcXHVEQzgzLVxcdURDQUZcXHVEQ0QwLVxcdURDRThcXHVERDAzLVxcdUREMjZcXHVERDQ0XFx1REQ1MC1cXHVERDcyXFx1REQ3NlxcdUREODMtXFx1RERCMlxcdUREQzEtXFx1RERDNFxcdUREREFcXHVERERDXFx1REUwMC1cXHVERTExXFx1REUxMy1cXHVERTJCXFx1REU4MC1cXHVERTg2XFx1REU4OFxcdURFOEEtXFx1REU4RFxcdURFOEYtXFx1REU5RFxcdURFOUYtXFx1REVBOFxcdURFQjAtXFx1REVERVxcdURGMDUtXFx1REYwQ1xcdURGMEZcXHVERjEwXFx1REYxMy1cXHVERjI4XFx1REYyQS1cXHVERjMwXFx1REYzMlxcdURGMzNcXHVERjM1LVxcdURGMzlcXHVERjNEXFx1REY1MFxcdURGNUQtXFx1REY2MV18XFx1RDgwNVtcXHVEQzAwLVxcdURDMzRcXHVEQzQ3LVxcdURDNEFcXHVEQzVGXFx1REM4MC1cXHVEQ0FGXFx1RENDNFxcdURDQzVcXHVEQ0M3XFx1REQ4MC1cXHVEREFFXFx1REREOC1cXHVERERCXFx1REUwMC1cXHVERTJGXFx1REU0NFxcdURFODAtXFx1REVBQVxcdURFQjhcXHVERjAwLVxcdURGMUFdfFxcdUQ4MDZbXFx1REMwMC1cXHVEQzJCXFx1RENBMC1cXHVEQ0RGXFx1RENGRlxcdUREQTAtXFx1RERBN1xcdUREQUEtXFx1REREMFxcdURERTFcXHVEREUzXFx1REUwMFxcdURFMEItXFx1REUzMlxcdURFM0FcXHVERTUwXFx1REU1Qy1cXHVERTg5XFx1REU5RFxcdURFQzAtXFx1REVGOF18XFx1RDgwN1tcXHVEQzAwLVxcdURDMDhcXHVEQzBBLVxcdURDMkVcXHVEQzQwXFx1REM3Mi1cXHVEQzhGXFx1REQwMC1cXHVERDA2XFx1REQwOFxcdUREMDlcXHVERDBCLVxcdUREMzBcXHVERDQ2XFx1REQ2MC1cXHVERDY1XFx1REQ2N1xcdURENjhcXHVERDZBLVxcdUREODlcXHVERDk4XFx1REVFMC1cXHVERUYyXXxcXHVEODA4W1xcdURDMDAtXFx1REY5OV18XFx1RDgwOVtcXHVEQzgwLVxcdURENDNdfFtcXHVEODBDXFx1RDgxQy1cXHVEODIwXFx1RDg0MC1cXHVEODY4XFx1RDg2QS1cXHVEODZDXFx1RDg2Ri1cXHVEODcyXFx1RDg3NC1cXHVEODc5XVtcXHVEQzAwLVxcdURGRkZdfFxcdUQ4MERbXFx1REMwMC1cXHVEQzJFXXxcXHVEODExW1xcdURDMDAtXFx1REU0Nl18XFx1RDgxQVtcXHVEQzAwLVxcdURFMzhcXHVERTQwLVxcdURFNUVcXHVERUQwLVxcdURFRURcXHVERjAwLVxcdURGMkZcXHVERjQwLVxcdURGNDNcXHVERjYzLVxcdURGNzdcXHVERjdELVxcdURGOEZdfFxcdUQ4MUJbXFx1REU0MC1cXHVERTdGXFx1REYwMC1cXHVERjRBXFx1REY1MFxcdURGOTMtXFx1REY5RlxcdURGRTBcXHVERkUxXFx1REZFM118XFx1RDgyMVtcXHVEQzAwLVxcdURGRjddfFxcdUQ4MjJbXFx1REMwMC1cXHVERUYyXXxcXHVEODJDW1xcdURDMDAtXFx1REQxRVxcdURENTAtXFx1REQ1MlxcdURENjQtXFx1REQ2N1xcdURENzAtXFx1REVGQl18XFx1RDgyRltcXHVEQzAwLVxcdURDNkFcXHVEQzcwLVxcdURDN0NcXHVEQzgwLVxcdURDODhcXHVEQzkwLVxcdURDOTldfFxcdUQ4MzVbXFx1REMwMC1cXHVEQzU0XFx1REM1Ni1cXHVEQzlDXFx1REM5RVxcdURDOUZcXHVEQ0EyXFx1RENBNVxcdURDQTZcXHVEQ0E5LVxcdURDQUNcXHVEQ0FFLVxcdURDQjlcXHVEQ0JCXFx1RENCRC1cXHVEQ0MzXFx1RENDNS1cXHVERDA1XFx1REQwNy1cXHVERDBBXFx1REQwRC1cXHVERDE0XFx1REQxNi1cXHVERDFDXFx1REQxRS1cXHVERDM5XFx1REQzQi1cXHVERDNFXFx1REQ0MC1cXHVERDQ0XFx1REQ0NlxcdURENEEtXFx1REQ1MFxcdURENTItXFx1REVBNVxcdURFQTgtXFx1REVDMFxcdURFQzItXFx1REVEQVxcdURFREMtXFx1REVGQVxcdURFRkMtXFx1REYxNFxcdURGMTYtXFx1REYzNFxcdURGMzYtXFx1REY0RVxcdURGNTAtXFx1REY2RVxcdURGNzAtXFx1REY4OFxcdURGOEEtXFx1REZBOFxcdURGQUEtXFx1REZDMlxcdURGQzQtXFx1REZDQl18XFx1RDgzOFtcXHVERDAwLVxcdUREMkNcXHVERDM3LVxcdUREM0RcXHVERDRFXFx1REVDMC1cXHVERUVCXXxcXHVEODNBW1xcdURDMDAtXFx1RENDNFxcdUREMDAtXFx1REQ0M1xcdURENEJdfFxcdUQ4M0JbXFx1REUwMC1cXHVERTAzXFx1REUwNS1cXHVERTFGXFx1REUyMVxcdURFMjJcXHVERTI0XFx1REUyN1xcdURFMjktXFx1REUzMlxcdURFMzQtXFx1REUzN1xcdURFMzlcXHVERTNCXFx1REU0MlxcdURFNDdcXHVERTQ5XFx1REU0QlxcdURFNEQtXFx1REU0RlxcdURFNTFcXHVERTUyXFx1REU1NFxcdURFNTdcXHVERTU5XFx1REU1QlxcdURFNURcXHVERTVGXFx1REU2MVxcdURFNjJcXHVERTY0XFx1REU2Ny1cXHVERTZBXFx1REU2Qy1cXHVERTcyXFx1REU3NC1cXHVERTc3XFx1REU3OS1cXHVERTdDXFx1REU3RVxcdURFODAtXFx1REU4OVxcdURFOEItXFx1REU5QlxcdURFQTEtXFx1REVBM1xcdURFQTUtXFx1REVBOVxcdURFQUItXFx1REVCQl18XFx1RDg2OVtcXHVEQzAwLVxcdURFRDZcXHVERjAwLVxcdURGRkZdfFxcdUQ4NkRbXFx1REMwMC1cXHVERjM0XFx1REY0MC1cXHVERkZGXXxcXHVEODZFW1xcdURDMDAtXFx1REMxRFxcdURDMjAtXFx1REZGRl18XFx1RDg3M1tcXHVEQzAwLVxcdURFQTFcXHVERUIwLVxcdURGRkZdfFxcdUQ4N0FbXFx1REMwMC1cXHVERkUwXXxcXHVEODdFW1xcdURDMDAtXFx1REUxRF0pKSdcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHJlZ2V4ICs9IGMucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICBnZW5lcmF0ZVBhdHRlcm5Gcm9tTWFzay5fX0NBQ0hFX19bY2FjaGVLZXldID0gcmVnZXhcclxuICB9XHJcblxyXG4gIHJldHVybiBnZW5lcmF0ZVBhdHRlcm5Gcm9tTWFzay5fX0NBQ0hFX19bY2FjaGVLZXldXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBVbm1hc2sgdGhlIGdpdmVuIHZhbHVlXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBtYXNrZWRWYWx1ZSBtYXNrZWQgc3RyaW5nXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBtYXNrICB0aGUgdXNlZCBtYXNrIHRvIHByb2R1Y2UgdGhlIG1hc2tlZCBzdHJpbmdcclxuICovXHJcbmNvbnN0IHVubWFzayA9IChtYXNrZWRWYWx1ZSwgbWFzaykgPT4ge1xyXG4gIGlmICh0eXBlb2YgdW5tYXNrLl9fQ0FDSEVfXyA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIHVubWFzay5fX0NBQ0hFX18gPSB7fVxyXG4gIH1cclxuXHJcbiAgY29uc3QgY2FjaGVLZXkgPSBgJHttYXNrZWRWYWx1ZX0tJHttYXNrfWBcclxuXHJcbiAgaWYgKCF1bm1hc2suX19DQUNIRV9fW2NhY2hlS2V5XSkge1xyXG4gICAgY29uc3QgbWFza0FzQXJyYXkgPSBtYXNrLnNwbGl0KCcnKVxyXG4gICAgY29uc3QgbWFza2VkVmFsdWVBc0FycmF5ID0gbWFza2VkVmFsdWUuc3BsaXQoJycpXHJcblxyXG4gICAgbGV0IHVubWFza2VkID0gJydcclxuXHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbWFza2VkVmFsdWVBc0FycmF5Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBjb25zdCBlbCA9IG1hc2tlZFZhbHVlQXNBcnJheVtpbmRleF1cclxuICAgICAgY29uc3QgbWFzayA9IG1hc2tBc0FycmF5W2luZGV4XVxyXG4gICAgICBjb25zdCBlbEhhc01hc2sgPSBTVVBQT1JURURfTUFTS1MuaW5kZXhPZihtYXNrKSA+IC0xXHJcbiAgICAgIGlmIChlbEhhc01hc2spIHtcclxuICAgICAgICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cChcclxuICAgICAgICAgIGdlbmVyYXRlUGF0dGVybkZyb21NYXNrKG1hc2spLFxyXG4gICAgICAgICAgSVNfVU5JQ09ERV9QUk9QRVJUWV9TVVBQT1JURUQgPyAndScgOiAnJ1xyXG4gICAgICAgIClcclxuICAgICAgICBpZiAocGF0dGVybi50ZXN0KGVsKSkgdW5tYXNrZWQgKz0gZWxcclxuICAgICAgICBlbHNlIGJyZWFrXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1bm1hc2suX19DQUNIRV9fW2NhY2hlS2V5XSA9IHVubWFza2VkLnRvTG9jYWxlTG93ZXJDYXNlKClcclxuICB9XHJcblxyXG4gIHJldHVybiB1bm1hc2suX19DQUNIRV9fW2NhY2hlS2V5XVxyXG59XHJcblxyXG4vKipcclxuICogR2l2ZW4gdGhlIG1hc2tlZCBzdHJpbmcgLCBmaW5kIHRoZSBuZXh0IGNhcmV0IHBvc2l0aW9uIGRlcGVuZGluZyBvblxyXG4gKiB3aGF0IGlzIG1pc3NpbmcgdG8gY29tcGxldGUgdGhlIG1hc2tcclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IG1hc2tlZFZhbHVlIG1hc2tlZCBzdHJpbmdcclxuICogQHBhcmFtIHtTdHJpbmd9IG1hc2sgIHRoZSB1c2VkIG1hc2sgdG8gcHJvZHVjZSB0aGUgbWFza2VkIHN0cmluZ1xyXG4gKi9cclxuY29uc3QgZmluZENhcmV0UG9zaXRpb24gPSAobWFza2VkVmFsdWUsIG1hc2spID0+IHtcclxuICBpZiAodHlwZW9mIGZpbmRDYXJldFBvc2l0aW9uLl9fQ0FDSEVfXyA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIGZpbmRDYXJldFBvc2l0aW9uLl9fQ0FDSEVfXyA9IHt9XHJcbiAgfVxyXG5cclxuICBjb25zdCBjYWNoZUtleSA9IGAke21hc2tlZFZhbHVlfS0ke21hc2t9YFxyXG4gIGlmICghZmluZENhcmV0UG9zaXRpb24uX19DQUNIRV9fW2NhY2hlS2V5XSkge1xyXG4gICAgY29uc3QgbWFza0FzQXJyYXkgPSBtYXNrLnNwbGl0KCcnKVxyXG4gICAgbGV0IG1hc2tlZFZhbHVlQXNBcnJheSA9IG1hc2tlZFZhbHVlLnNwbGl0KCcnKVxyXG4gICAgaWYgKG1hc2tlZFZhbHVlQXNBcnJheS5sZW5ndGggPCBtYXNrQXNBcnJheS5sZW5ndGgpIHtcclxuICAgICAgbWFza2VkVmFsdWVBc0FycmF5ID0gbWFza2VkVmFsdWVBc0FycmF5LmNvbmNhdChcclxuICAgICAgICBuZXcgQXJyYXkobWFza0FzQXJyYXkubGVuZ3RoIC0gbWFza2VkVmFsdWVBc0FycmF5Lmxlbmd0aCkuam9pbignICcpLnNwbGl0KCcnKVxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBvc2l0aW9uID0gLTFcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBtYXNrQXNBcnJheS5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgY29uc3QgZWwgPSBtYXNrQXNBcnJheVtpbmRleF1cclxuICAgICAgaWYgKGVsICE9PSBtYXNrZWRWYWx1ZUFzQXJyYXlbaW5kZXhdKSB7XHJcbiAgICAgICAgLy8gaWYgKG1hc2tlZFZhbHVlQXNBcnJheVtpbmRleF0gPT09ICcgJykgcmV0dXJuIGluZGV4XHJcbiAgICAgICAgaWYgKFNVUFBPUlRFRF9NQVNLUy5pbmRleE9mKGVsKSA+IC0xKSB7XHJcbiAgICAgICAgICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cChcclxuICAgICAgICAgICAgZ2VuZXJhdGVQYXR0ZXJuRnJvbU1hc2soZWwpLFxyXG4gICAgICAgICAgICBJU19VTklDT0RFX1BST1BFUlRZX1NVUFBPUlRFRCA/ICd1JyA6ICcnXHJcbiAgICAgICAgICApXHJcblxyXG4gICAgICAgICAgaWYgKCFwYXR0ZXJuLnRlc3QobWFza2VkVmFsdWVBc0FycmF5W2luZGV4XSkpIHtcclxuICAgICAgICAgICAgcG9zaXRpb24gPSBpbmRleFxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZpbmRDYXJldFBvc2l0aW9uLl9fQ0FDSEVfX1tjYWNoZUtleV0gPVxyXG4gICAgICBwb3NpdGlvbiA8IDAgPyBtYXNrZWRWYWx1ZUFzQXJyYXkubGVuZ3RoIDogcG9zaXRpb25cclxuICB9XHJcblxyXG4gIHJldHVybiBmaW5kQ2FyZXRQb3NpdGlvbi5fX0NBQ0hFX19bY2FjaGVLZXldXHJcbn1cclxuXHJcbmV4cG9ydCB7XHJcbiAgaXNNYXNrZWRWYWx1ZSxcclxuICBtYXNrSWZOb3RNYXNrZWQsXHJcbiAgdW5tYXNrLFxyXG4gIGZpbmRDYXJldFBvc2l0aW9uLFxyXG4gIGdlbmVyYXRlUGF0dGVybkZyb21NYXNrLFxyXG4gIElTX1VOSUNPREVfUFJPUEVSVFlfU1VQUE9SVEVELFxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9UZXh0SW5wdXQvdG9vbHMuanMiLCIvKlxyXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1pbnB1dC1tYXNraW5nIGxpYi5cclxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxyXG4gKlxyXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxyXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cclxuICovXHJcblxyXG5pbXBvcnQgTnVtYmVySW5wdXQgZnJvbSAnLi9OdW1iZXJJbnB1dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IE51bWJlcklucHV0XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9OdW1iZXJJbnB1dC9pbmRleC5qcyIsIi8qXHJcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWlucHV0LW1hc2tpbmcgbGliLlxyXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XHJcbiAqXHJcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXHJcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxyXG4gKi9cclxuXHJcbmltcG9ydCBOdW1iZXJNYXNrIGZyb20gJ2Jiai1tYXNrcy9zcmMvTnVtYmVyTWFzaydcclxuXHJcbmNvbnN0IGNvdW50RGVjaW1hbHMgPSB2YWx1ZSA9PiB7XHJcbiAgaWYgKHZhbHVlICUgMSAhPSAwKSB7XHJcbiAgICBjb25zdCBzcGxpdCA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVxyXG4gICAgaWYgKHNwbGl0Lmxlbmd0aCA9PT0gMikgcmV0dXJuIHNwbGl0WzFdLmxlbmd0aFxyXG4gIH1cclxuICByZXR1cm4gMFxyXG59XHJcblxyXG4vKipcclxuICogVGhlIGBOdW1iZXJJbnB1dGAgd2lsbCB3cmFwIHRleHQgaW5wdXRzIGFuZCBhcHBseSB0aGUgZ2l2ZW4gW2JiaiBOdW1iZXIgbWFza10oaHR0cHM6Ly9naXRodWIuY29tL0Jhc2lzSHViL2Jiai1tYXNrcyNudW1iZXItbWFza3MpXHJcbiAqXHJcbiAqICoqT3B0aW9ucyoqXHJcbiAqXHJcbiAqIF9PcHRpb25zIGNhbiBiZSBwYXNzZWQgdmlhIGRhdGEgYXR0cmlidXRlcyAuIEZvciBkYXRhIGF0dHJpYnV0ZXMsIGFwcGVuZCB0aGUgb3B0aW9uIG5hbWUgdG8gZGF0YS0sIGFzIGluIGRhdGEtbWFza19cclxuICpcclxuICogfCBPcHRpb24gICAgfCBEZWZhdWx0IHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqIHwtLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxyXG4gKiB8IG1hc2sgfCAgICAgICAgIHwgVGhlIGJiaiBudW1iZXIgbWFzayBAc2VlIFtCQmogTnVtYmVyIE1hc2tzXShodHRwczovL2dpdGh1Yi5jb20vQmFzaXNIdWIvYmJqLW1hc2tzI251bWJlci1tYXNrcykgfFxyXG4gKiB8IG1pbiB8ICAgICAgICAgfCBUaGUgbWF4aW11bSB2YWx1ZSB0byBhY2NlcHQgZm9yIHRoaXMgaW5wdXR8XHJcbiAqIHwgbWF4IHwgICAgICAgICB8IFRoZSBtaW5pbXVtIHZhbHVlIHRvIGFjY2VwdCBmb3IgdGhpcyBpbnB1dHxcclxuICogfCBzdGVwIHwgICAgICAgICB8IEEgc3RlcHBpbmcgaW50ZXJ2YWwgdG8gdXNlIHdoZW4gdXNpbmcgdXAgYW5kIGRvd24gYXJyb3dzIHRvIGFkanVzdCB0aGUgdmFsdWUsIGFzIHdlbGwgYXMgZm9yIHZhbGlkYXRpb258XHJcbiAqIHxncm91cGluZy1zZXBhcmF0b3IgfCAsIHwgYSBjaGFyIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGdyb3VwaW5nIHNlcGFyYXRvciB8XHJcbiAqIHxkZWNpbWFsLXNlcGFyYXRvciB8IC4gfCBhIGNoYXIgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgZGVjaW1hbCBzZXBhcmF0b3IgfFxyXG4gKiB8Zm9yY2UtdHJhaWxpbmctemVyb3MgfCBmYWxzZSB8IEFmZmVjdHMgdGhlIG91dHB1dCBieSBzd2l0Y2hpbmcgdGhlIHdheSBhIG1hc2sgd2l0aCBcIiNcIiBjaGFyYWN0ZXJzIGluIHRoZSB0cmFpbGluZyBwb3NpdGlvbnMgaXMgZmlsbGVkLiBmb3IgZXhhbXBsZSwgdGhlIGZ1bmN0aW9uIE51bWJlck1hc2subWFzayguMTA6XCIjLiMjXCIpIHJldHVybnMgLjEwIGluc3RlYWQgb2YgLjF8XHJcbiAqXHJcbiAqICA8YnI+XHJcbiAqXHJcbiAqICoqRXhhbXBsZSA6KipcclxuICogYGBgaHRtbFxyXG4gKiAgPGlucHV0IGNsYXNzPVwiYmJqLW51bWJlci1tYXNrZWRcIiBuYW1lPVwidGVzdFwiIGlkPVwidGVzdFwiIHZhbHVlPVwiMTIzNFwiIGRhdGEtbWFzaz1cIiMjLCMjMFwiPlxyXG4gKlxyXG4gKiAgPHNjcmlwdD5cclxuICogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uIChlKSB7XHJcbiAqICAgICAgbmV3IEJhc2lzLklucHV0TWFza2luZy5OdW1iZXJJbnB1dCh7XHJcbiAqXHJcbiAqICAgICAgICAgLy8gQHBhcmFtIHtTdHJpbmd9IHZhbHVlTWFza2VkICBtYXNrZWQgdmFsdWVcclxuICogICAgICAgICAvLyBAcGFyYW0ge051bWJlcn0gdmFsdWVVbm1hc2tlZCAgb3JpZ2luYWwgdmFsdWVcclxuICogICAgICAgICAvLyBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGlucHV0IHRoZSBhY3R1YWwgaW5wdXQgaW5zdGFuY2VcclxuICogICAgICAgICBvblVwZGF0ZTogKHZhbHVlTWFza2VkLCB2YWx1ZVVubWFza2VkLCBpbnB1dCwgaXNBcHBsaWVkLCBpc0luaXRpYWwpID0+IHtcclxuICogICAgICAgICAgICAvLyBkbyBzb21ldGhpbmdcclxuICogICAgICAgICB9LFxyXG4gKlxyXG4gKiAgICAgICAgIC8vIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gZXJyb3IgbGFzdCBvY2N1cnJlZCBlcnJvci4gY291bGQgYmUgbWFzayBlcnJvciBvciB2YWxpZGF0aW9uIGVycm9yXHJcbiAqICAgICAgICAgLy8gQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBpbnB1dCB0aGUgYWN0dWFsIGlucHV0IGluc3RhbmNlXHJcbiAqICAgICAgICAgb25JbnZhbGlkOiAoZXJyICwgaW5wdXQpID0+IHtcclxuICogICAgICAgICAgICAvLyBkbyBzb21ldGhpbmdcclxuICogICAgICAgICB9XHJcbiAqICAgICAgfSlcclxuICogICAgfSlcclxuICogIDwvc2NyaXB0PlxyXG4gKiBgYGBcclxuICpcclxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cclxuICovXHJcbmNsYXNzIE51bWJlcklucHV0IHtcclxuICAvKipcclxuICAgKiBDb25zdHJ1Y3QgbmV3IE51bWJlcklucHV0XHJcbiAgICpcclxuICAgKiBAcGFyYW0gez9PYmplY3R9IG9wdGlvbnMgLSBUaGUgaW5wdXQgb3B0aW9ucy5cclxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fFN0cmluZ30gW29wdGlvbnMuZWxlbWVudHM9XCIuYmJqLW51bWJlci1tYXNrZWRcIl0gLSBUaGUgY2xhc3MgbmFtZSBvciB0aGUgbm9kZSB0byB1c2VcclxuICAgKiBAcGFyYW0ge0hUTUxEb2N1bWVudH0gW29wdGlvbnMuZG9jdW1lbnQ9ZG9jdW1lbnRdIC0gRG9jdW1lbnQgaW5zdGFuY2UgdG8gdXNlXHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmNzc0NsYXNzRXJyb3I9XCJiYmotbWFzay1lcnJvclwiXSAtIEEgY3NzIGNsYXNzIHRvIGF0dGFjaCB0byB0aGUgaW5wdXQgd2hlbiBpdCBpcyBpbnZhbGlkXHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmNzc0NsYXNzU3VjY2Vzcz1cImJiai1tYXNrLXN1Y2Nlc3NcIl0gLSBBIGNzcyBjbGFzcyB0byBhdHRhY2ggdG8gdGhlIGlucHV0IHdoZW4gaXQgaXMgdmFsaWQgYWZ0ZXIgdGhlIHVzZXIgaW50ZXJhY3Rpb25cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5vblVwZGF0ZT1udWxsXSAtIEEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIG9uIHRoZSBuZXcgbWFza2VkIHZhbHVlIGlzIHNldFxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLm9uSW52YWxpZD1udWxsXSAtIEEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIG9uIHRoZSBpbnB1dCBvciB0aGUgbWFzayBpcyBpbnZhbGlkXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMgPSB7XHJcbiAgICAgIC4uLntcclxuICAgICAgICBlbGVtZW50czogJy5iYmotbnVtYmVyLW1hc2tlZCcsXHJcbiAgICAgICAgZG9jOiBkb2N1bWVudCxcclxuICAgICAgICBjc3NDbGFzc0Vycm9yOiAnYmJqLW1hc2stZXJyb3InLFxyXG4gICAgICAgIGNzc0NsYXNzU3VjY2VzczogJ2Jiai1tYXNrLXN1Y2Nlc3MnLFxyXG4gICAgICAgIG9uVXBkYXRlOiBudWxsLFxyXG4gICAgICAgIG9uSW52YWxpZDogbnVsbCxcclxuICAgICAgfSxcclxuICAgICAgLi4ub3B0aW9ucyxcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9hY3R1YWxJbnB1dEhhbmRsZXIgPSB0aGlzLl9hY3R1YWxJbnB1dEhhbmRsZXIuYmluZCh0aGlzKVxyXG4gICAgdGhpcy5fdW5tYXNrZWRJbnB1dEhhbmRsZXIgPSB0aGlzLl91bm1hc2tlZElucHV0SGFuZGxlci5iaW5kKHRoaXMpXHJcbiAgICB0aGlzLnJlZnJlc2goKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZSB0aGUgY29tcG9uZW50IGFuZCB3cmFwIHRoZSBpbnB1dCBlbGVtZW50cyBmb3IgbWFza2luZyBpbiBjYXNlXHJcbiAgICogdGhleSBhcmUgbm90IHdyYXBwZWQgeWV0XHJcbiAgICovXHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIGNvbnN0IGVsZW1lbnRzID1cclxuICAgICAgdHlwZW9mIHRoaXMub3B0aW9ucy5lbGVtZW50cyA9PT0gJ3N0cmluZydcclxuICAgICAgICA/IHRoaXMub3B0aW9ucy5kb2MucXVlcnlTZWxlY3RvckFsbCh0aGlzLm9wdGlvbnMuZWxlbWVudHMpXHJcbiAgICAgICAgOiB0aGlzLm9wdGlvbnMuZWxlbWVudHNcclxuICAgIGxldCBpbnB1dCwgcGFyZW50Q2xhc3NcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlucHV0ID0gZWxlbWVudHNbaV1cclxuICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xyXG4gICAgICAgIHBhcmVudENsYXNzID0gaW5wdXQucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoJ2NsYXNzJylcclxuXHJcbiAgICAgICAgaWYgKCFpbnB1dC5nZXRBdHRyaWJ1dGUoJ2lkJykpIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgICAgYEJCak1hc2tpbmc6IElucHV0IGhhcyBubyBJRC4gV2l0aG91dCBhbiBJRCB0aGUgaW5wdXQgY2Fubm90IGJlIG1hc2tlZGAsXHJcbiAgICAgICAgICAgIGlucHV0XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gd2UgZG9uJ3QgaW5pdGlhbGl6ZSB0aGUgaW5wdXQncyB3cmFwIHR3aWNlXHJcbiAgICAgICAgY29uc3QgaXNXcmFwcGVkID1cclxuICAgICAgICAgIHBhcmVudENsYXNzICYmIHBhcmVudENsYXNzLmluZGV4T2YoJ251bWJlcklucHV0TWFza19fd3JhcCcpID4gLTFcclxuICAgICAgICB0aGlzLl93cmFwKGlucHV0LCBpc1dyYXBwZWQpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgYEJCak1hc2tpbmc6IEludmFsaWQgaW5wdXQgZWxlbWVudC4gVGhlIGVsZW1lbnQgd2lsbCBiZSBpZ25vcmVkYCxcclxuICAgICAgICAgIGlucHV0XHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVbndyYXAgdGhlIGlucHV0IGVsZW1lbnRzIGFuZCByZW1vdmUgYXR0YWNoZWQgbGlzdGVuZXJzXHJcbiAgICovXHJcbiAgZGVzdHJveSgpIHtcclxuICAgIGNvbnN0IGVsZW1lbnRzID1cclxuICAgICAgdHlwZW9mIHRoaXMub3B0aW9ucy5lbGVtZW50cyA9PT0gJ3N0cmluZydcclxuICAgICAgICA/IHRoaXMub3B0aW9ucy5kb2MucXVlcnlTZWxlY3RvckFsbCh0aGlzLm9wdGlvbnMuZWxlbWVudHMpXHJcbiAgICAgICAgOiB0aGlzLm9wdGlvbnMuZWxlbWVudHNcclxuXHJcbiAgICBsZXQgaW5wdXQsIHBhcmVudCwgcGFyZW50Q2xhc3NcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlucHV0ID0gZWxlbWVudHNbaV1cclxuICAgICAgcGFyZW50ID0gaW5wdXQucGFyZW50Tm9kZVxyXG4gICAgICBwYXJlbnRDbGFzcyA9IHBhcmVudC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJylcclxuXHJcbiAgICAgIGlmIChwYXJlbnRDbGFzcyAmJiBwYXJlbnRDbGFzcy5pbmRleE9mKCdudW1iZXJJbnB1dE1hc2tfX3dyYXAnKSA+IC0xKSB7XHJcbiAgICAgICAgdGhpcy5fdW53cmFwKHBhcmVudClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIHRoZSBudW1iZXIgbWFza2luZyBpbnB1dCB3cmFwcGVyXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGFjdHVhbElucHV0IHRoZSBpbnB1dCBlbGVtZW50XHJcbiAgICogQHBhcmFtIHtCb29sZWFufSBpc1dyYXBwZWQgd2hlbiB0cnVlIHRoZSBpbnB1dCBpcyBhbHJlYWR5IHdyYXBwZWQgYW5kIHdlIG5lZWQgdG8gYWRkIHdoYXQgaXNcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXNzaW5nIG9ubHlcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtIVE1MU3BhbkVsZW1lbnR9IHdyYXBwZXIgaW5zdGFuY2VcclxuICAgKlxyXG4gICAqIEBwcm90ZWN0ZWRcclxuICAgKi9cclxuICBfd3JhcChhY3R1YWxJbnB1dCwgaXNXcmFwcGVkKSB7XHJcbiAgICBjb25zdCBhY3R1YWxJbnB1dElkID0gYWN0dWFsSW5wdXQuZ2V0QXR0cmlidXRlKCdpZCcpLFxyXG4gICAgICBhY3R1YWxJbnB1dE5hbWUgPSBhY3R1YWxJbnB1dC5nZXRBdHRyaWJ1dGUoJ25hbWUnKSxcclxuICAgICAgYWN0dWFsSW5wdXRTdGVwID0gYWN0dWFsSW5wdXQuZGF0YXNldC5zdGVwIHx8IG51bGwsXHJcbiAgICAgIGFjdHVhbElucHV0TWF4ID0gYWN0dWFsSW5wdXQuZGF0YXNldC5tYXggfHwgbnVsbCxcclxuICAgICAgYWN0dWFsSW5wdXRNaW4gPSBhY3R1YWxJbnB1dC5kYXRhc2V0Lm1pbiB8fCBudWxsLFxyXG4gICAgICBhY3R1YWxJbnB1dEdyb3VwaW5nU2VwYXJhdG9yID1cclxuICAgICAgICBhY3R1YWxJbnB1dC5kYXRhc2V0Lmdyb3VwaW5nU2VwYXJhdG9yIHx8ICcsJyxcclxuICAgICAgYWN0dWFsSW5wdXREZWNpbWFsU2VwYXJhdG9yID0gYWN0dWFsSW5wdXQuZGF0YXNldC5kZWNpbWFsU2VwYXJhdG9yIHx8ICcuJyxcclxuICAgICAgYWN0dWFsSW5wdXRGb3JjZVRyYWlsaW5nWmVyb3MgPVxyXG4gICAgICAgIGFjdHVhbElucHV0LmRhdGFzZXQuZm9yY2VUcmFpbGluZ1plcm9zIHx8IG51bGwsXHJcbiAgICAgIGFjdHVhbElucHV0TWFzayA9IGFjdHVhbElucHV0LmRhdGFzZXQubWFzayB8fCAnJyxcclxuICAgICAgYWN0dWFsSW5wdXRDbGFzc2VzID0gYWN0dWFsSW5wdXQuZ2V0QXR0cmlidXRlKCdjbGFzcycpLFxyXG4gICAgICBhY3R1YWxJbnB1dFJlcXVpcmVkID0gYWN0dWFsSW5wdXQuZ2V0QXR0cmlidXRlKCdyZXF1aXJlZCcpIHx8IG51bGxcclxuXHJcbiAgICBsZXQgd3JhcCA9IG51bGwsXHJcbiAgICAgIHVubWFza2VkSW5wdXQgPSBudWxsXHJcblxyXG4gICAgaWYgKCFpc1dyYXBwZWQpIHtcclxuICAgICAgd3JhcCA9IHRoaXMub3B0aW9ucy5kb2MuY3JlYXRlRWxlbWVudCgnc3BhbicpXHJcbiAgICAgIHVubWFza2VkSW5wdXQgPSB0aGlzLm9wdGlvbnMuZG9jLmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykgLy8gaGlkZGVuIGlucHV0IHdpdGggdGhlIHVubWFza2VkIHZhbHVlcyBmb3IgZm9ybXNcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHdyYXAgPSBhY3R1YWxJbnB1dC5wYXJlbnROb2RlXHJcbiAgICAgIHVubWFza2VkSW5wdXQgPSB3cmFwLnF1ZXJ5U2VsZWN0b3IoJy5udW1iZXJJbnB1dE1hc2tfX3VubWFza2VkSW5wdXQnKVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNvbmZpZ3VyZSB0aGUgYWN0dWFsIGlucHV0XHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgaWYgKCFpc1dyYXBwZWQpIHtcclxuICAgICAgYWN0dWFsSW5wdXQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUod3JhcCwgYWN0dWFsSW5wdXQpIC8vIG1vdmUgdGhlIGlucHV0IG91dHNpZGUgdGhlIHdyYXBwZXJcclxuICAgICAgaWYgKFxyXG4gICAgICAgICEoXHJcbiAgICAgICAgICBhY3R1YWxJbnB1dC5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykgfHxcclxuICAgICAgICAgIGFjdHVhbElucHV0Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKVxyXG4gICAgICAgIClcclxuICAgICAgKSB7XHJcbiAgICAgICAgYWN0dWFsSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9hY3R1YWxJbnB1dEhhbmRsZXIpXHJcbiAgICAgICAgYWN0dWFsSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsIHRoaXMuX2FjdHVhbElucHV0SGFuZGxlcilcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFjdHVhbElucHV0LmRhdGFzZXQudmFsdWVVbm1hc2tlZCA9IGFjdHVhbElucHV0LnZhbHVlIHx8IDBcclxuICAgIGFjdHVhbElucHV0LmRhdGFzZXQuZ3JvdXBpbmdTZXBhcmF0b3IgPSBhY3R1YWxJbnB1dEdyb3VwaW5nU2VwYXJhdG9yXHJcbiAgICBhY3R1YWxJbnB1dC5kYXRhc2V0LmRlY2ltYWxTZXBhcmF0b3IgPSBhY3R1YWxJbnB1dERlY2ltYWxTZXBhcmF0b3JcclxuICAgIGFjdHVhbElucHV0LmRhdGFzZXQuZm9yY2VUcmFpbGluZ1plcm9zID0gYWN0dWFsSW5wdXRGb3JjZVRyYWlsaW5nWmVyb3NcclxuICAgIGFjdHVhbElucHV0LnZhbHVlID0gTnVtYmVyTWFzay5tYXNrKFxyXG4gICAgICBhY3R1YWxJbnB1dC5kYXRhc2V0LnZhbHVlVW5tYXNrZWQsXHJcbiAgICAgIGFjdHVhbElucHV0TWFzayxcclxuICAgICAgYWN0dWFsSW5wdXRHcm91cGluZ1NlcGFyYXRvcixcclxuICAgICAgYWN0dWFsSW5wdXREZWNpbWFsU2VwYXJhdG9yLFxyXG4gICAgICBhY3R1YWxJbnB1dEZvcmNlVHJhaWxpbmdaZXJvc1xyXG4gICAgKS50cmltKClcclxuICAgIGFjdHVhbElucHV0LmNsYXNzTGlzdC5hZGQoXHJcbiAgICAgICdudW1iZXJJbnB1dE1hc2tfX3RleHRJbnB1dCcsXHJcbiAgICAgIHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3NcclxuICAgIClcclxuXHJcbiAgICAvLyBjb25maWd1cmUgdGhlIHVubWFza2VkIGlucHV0XHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICB1bm1hc2tlZElucHV0LnZhbHVlID0gYWN0dWFsSW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkXHJcbiAgICB1bm1hc2tlZElucHV0LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpXHJcbiAgICB1bm1hc2tlZElucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICdoaWRkZW4nKVxyXG4gICAgdW5tYXNrZWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgYWN0dWFsSW5wdXRDbGFzc2VzKVxyXG4gICAgaWYgKGFjdHVhbElucHV0SWQpXHJcbiAgICAgIHVubWFza2VkSW5wdXQuc2V0QXR0cmlidXRlKCdpZCcsIGAke2FjdHVhbElucHV0SWR9LXVubWFza2VkYClcclxuICAgIGlmIChhY3R1YWxJbnB1dE5hbWUpXHJcbiAgICAgIHVubWFza2VkSW5wdXQuc2V0QXR0cmlidXRlKCduYW1lJywgYCR7YWN0dWFsSW5wdXROYW1lfS11bm1hc2tlZGApXHJcbiAgICBpZiAoYWN0dWFsSW5wdXRSZXF1aXJlZCkgdW5tYXNrZWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ3JlcXVpcmVkJywgJ3JlcXVpcmVkJylcclxuXHJcbiAgICBpZiAoYWN0dWFsSW5wdXRTdGVwKSB1bm1hc2tlZElucHV0LnNldEF0dHJpYnV0ZSgnc3RlcCcsIGFjdHVhbElucHV0U3RlcClcclxuICAgIGVsc2Uge1xyXG4gICAgICBjb25zdCBkZWNpbWFscyA9IGNvdW50RGVjaW1hbHModW5tYXNrZWRJbnB1dC52YWx1ZSlcclxuICAgICAgbGV0IHN0ZXAgPSAnMSdcclxuICAgICAgaWYgKGRlY2ltYWxzID4gMCkge1xyXG4gICAgICAgIHN0ZXAgPSBgLiR7QXJyYXkoZGVjaW1hbHMpLmpvaW4oJzAnKX0xYFxyXG4gICAgICB9XHJcblxyXG4gICAgICB1bm1hc2tlZElucHV0LnNldEF0dHJpYnV0ZSgnc3RlcCcsIHN0ZXApXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFjdHVhbElucHV0TWluKSB1bm1hc2tlZElucHV0LnNldEF0dHJpYnV0ZSgnbWluJywgYWN0dWFsSW5wdXRNaW4pXHJcbiAgICBpZiAoYWN0dWFsSW5wdXRNYXgpIHVubWFza2VkSW5wdXQuc2V0QXR0cmlidXRlKCdtYXgnLCBhY3R1YWxJbnB1dE1heClcclxuICAgIHVubWFza2VkSW5wdXQuZGF0YXNldC5pbnB1dElkID0gYWN0dWFsSW5wdXRJZFxyXG4gICAgdW5tYXNrZWRJbnB1dC5kYXRhc2V0Lm1hc2sgPSBhY3R1YWxJbnB1dE1hc2tcclxuICAgIHVubWFza2VkSW5wdXQuZGF0YXNldC5ncm91cGluZ1NlcGFyYXRvciA9IGFjdHVhbElucHV0R3JvdXBpbmdTZXBhcmF0b3JcclxuICAgIHVubWFza2VkSW5wdXQuZGF0YXNldC5kZWNpbWFsU2VwYXJhdG9yID0gYWN0dWFsSW5wdXREZWNpbWFsU2VwYXJhdG9yXHJcbiAgICBpZiAoYWN0dWFsSW5wdXRGb3JjZVRyYWlsaW5nWmVyb3MpXHJcbiAgICAgIHVubWFza2VkSW5wdXQuZGF0YXNldC5mb3JjZVRyYWlsaW5nWmVyb3MgPSBhY3R1YWxJbnB1dEZvcmNlVHJhaWxpbmdaZXJvc1xyXG5cclxuICAgIGlmICghaXNXcmFwcGVkKSB7XHJcbiAgICAgIHVubWFza2VkSW5wdXQuY2xhc3NMaXN0LmFkZCgnbnVtYmVySW5wdXRNYXNrX191bm1hc2tlZElucHV0JylcclxuICAgICAgdW5tYXNrZWRJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fdW5tYXNrZWRJbnB1dEhhbmRsZXIpXHJcbiAgICAgIHVubWFza2VkSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLl91bm1hc2tlZElucHV0SGFuZGxlcilcclxuICAgICAgdW5tYXNrZWRJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMuX3VubWFza2VkSW5wdXRIYW5kbGVyKVxyXG5cclxuICAgICAgLy8gY29uZmlndXJlIHRoZSB3cmFwcGVyXHJcbiAgICAgIHdyYXAuc2V0QXR0cmlidXRlKCdjbGFzcycsICdudW1iZXJJbnB1dE1hc2tfX3dyYXAnKVxyXG4gICAgICB3cmFwLmFwcGVuZENoaWxkKHVubWFza2VkSW5wdXQpXHJcbiAgICAgIHdyYXAuYXBwZW5kQ2hpbGQoYWN0dWFsSW5wdXQpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpc05hTihOdW1iZXIoYWN0dWFsSW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkKSkpIHtcclxuICAgICAgaWYgKHRoaXMuX3ZhbGlkYXRlSW5wdXQodW5tYXNrZWRJbnB1dCwgYWN0dWFsSW5wdXQpKSB7XHJcbiAgICAgICAgdGhpcy5fX2ZpcmVPblVwZGF0ZShcclxuICAgICAgICAgIGFjdHVhbElucHV0LnZhbHVlLFxyXG4gICAgICAgICAgYWN0dWFsSW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkLFxyXG4gICAgICAgICAgYWN0dWFsSW5wdXRcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGFjdHVhbElucHV0LmNsYXNzTGlzdC5hZGQodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHdyYXBcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVud3JhcCB0aGUgbWFza2VkIGlucHV0IGFuZCByZW1vdmUgdGhlIHZhbHVlIGNoYW5nZWQgbGlzdGVuZXJcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7SFRNTFNwYW5FbGVtZW50fSB3cmFwcGVyIHRoZSB3cmFwcGVyIHNwYW4gaW5zdGFuY2VcclxuICAgKlxyXG4gICAqIEBwcm90ZWN0ZWRcclxuICAgKi9cclxuICBfdW53cmFwKHdyYXBwZXIpIHtcclxuICAgIGNvbnN0IGFjdHVhbElucHV0ID0gd3JhcHBlci5xdWVyeVNlbGVjdG9yKCcubnVtYmVySW5wdXRNYXNrX190ZXh0SW5wdXQnKSxcclxuICAgICAgYWN0dWFsSW5wdXRJZCA9IGFjdHVhbElucHV0LmlkLFxyXG4gICAgICB1bm1hc2tlZElucHV0ID0gd3JhcHBlci5xdWVyeVNlbGVjdG9yKGAjJHthY3R1YWxJbnB1dElkfS11bm1hc2tlZGApXHJcblxyXG4gICAgdW5tYXNrZWRJbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX3VubWFza2VkSW5wdXRIYW5kbGVyKVxyXG4gICAgdW5tYXNrZWRJbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlwcmVzcycsIHRoaXMuX3VubWFza2VkSW5wdXRIYW5kbGVyKVxyXG4gICAgdW5tYXNrZWRJbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMuX3VubWFza2VkSW5wdXRIYW5kbGVyKVxyXG5cclxuICAgIHdyYXBwZXIucmVtb3ZlQ2hpbGQodW5tYXNrZWRJbnB1dClcclxuXHJcbiAgICBhY3R1YWxJbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX2FjdHVhbElucHV0SGFuZGxlcilcclxuICAgIGFjdHVhbElucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCB0aGlzLl9hY3R1YWxJbnB1dEhhbmRsZXIpXHJcbiAgICBhY3R1YWxJbnB1dC5jbGFzc0xpc3QucmVtb3ZlKCdudW1iZXJJbnB1dE1hc2tfX3RleHRJbnB1dCcpXHJcbiAgICBhY3R1YWxJbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc0Vycm9yKVxyXG4gICAgYWN0dWFsSW5wdXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NTdWNjZXNzKVxyXG4gICAgZGVsZXRlIGFjdHVhbElucHV0LmRhdGFzZXQudmFsdWVVbm1hc2tlZFxyXG5cclxuICAgIHdyYXBwZXIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYWN0dWFsSW5wdXQsIHdyYXBwZXIpXHJcbiAgICB3cmFwcGVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQod3JhcHBlcilcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3RlbiB0byBjbGljayBhbmQgZm9jdXNpbiBldmVudCBvbiB0aGUgYWN0dWFsIGlucHV0IGFuZCB0b2dnbGUgdGhlIG51bWJlciBpbnB1dFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtFdmVudH0gZVxyXG4gICAqXHJcbiAgICogQHByb3RlY3RlZFxyXG4gICAqL1xyXG4gIF9hY3R1YWxJbnB1dEhhbmRsZXIoZSkge1xyXG4gICAgY29uc3QgYWN0dWFsSW5wdXQgPSBlLnRhcmdldCxcclxuICAgICAgYWN0dWFsSW5wdXRJZCA9IGFjdHVhbElucHV0LmlkLFxyXG4gICAgICB1bm1hc2tlZElucHV0ID0gdGhpcy5vcHRpb25zLmRvYy5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgIGAjJHthY3R1YWxJbnB1dElkfS11bm1hc2tlZGBcclxuICAgICAgKVxyXG5cclxuICAgIGFjdHVhbElucHV0LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpXHJcbiAgICBhY3R1YWxJbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnaGlkZGVuJylcclxuXHJcbiAgICB1bm1hc2tlZElucHV0LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKVxyXG4gICAgdW5tYXNrZWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnbnVtYmVyJylcclxuICAgIHRoaXMuX3ZhbGlkYXRlSW5wdXQodW5tYXNrZWRJbnB1dCwgYWN0dWFsSW5wdXQpXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdW5tYXNrZWRJbnB1dC5mb2N1cygpXHJcbiAgICAgIGNvbnN0IGxlbmd0aCA9IFN0cmluZyh1bm1hc2tlZElucHV0LnZhbHVlKS5sZW5ndGhcclxuICAgICAgdW5tYXNrZWRJbnB1dC50eXBlID0gJ3RleHQnXHJcbiAgICAgIHVubWFza2VkSW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2UobGVuZ3RoLCBsZW5ndGgpXHJcbiAgICAgIHVubWFza2VkSW5wdXQudHlwZSA9ICdudW1iZXInXHJcbiAgICB9LCAwKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuIHRvIHRoZSB1bm1hc2tlZCBpbnB1dCBrZXlkb3duIGFuZCBmb2N1c291dCBldmVudHMgYW5kIGNoZWNrXHJcbiAgICogaWYgdGhlIGlucHV0IHZhbHVlIGNhbiBiZSBtYXNrZWQgb3Igbm90XHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0V2ZW50fSBlXHJcbiAgICpcclxuICAgKiBAcHJvdGVjdGVkXHJcbiAgICovXHJcbiAgX3VubWFza2VkSW5wdXRIYW5kbGVyKGUpIHtcclxuICAgIGNvbnN0IHVubWFza2VkSW5wdXQgPSBlLnRhcmdldCxcclxuICAgICAga2V5Q29kZSA9IGUua2V5Q29kZSxcclxuICAgICAgbWFzayA9IHVubWFza2VkSW5wdXQuZGF0YXNldC5tYXNrLFxyXG4gICAgICBncm91cGluZ1NlcGFyYXRvciA9IHVubWFza2VkSW5wdXQuZGF0YXNldC5ncm91cGluZ1NlcGFyYXRvcixcclxuICAgICAgZGVjaW1hbFNlcGFyYXRvciA9IHVubWFza2VkSW5wdXQuZGF0YXNldC5kZWNpbWFsU2VwYXJhdG9yLFxyXG4gICAgICBmb3JjZVRyYWlsaW5nWmVyb3MgPSB1bm1hc2tlZElucHV0LmRhdGFzZXQuZm9yY2VUcmFpbGluZ1plcm9zLFxyXG4gICAgICBhY3R1YWxJbnB1dElkID0gdW5tYXNrZWRJbnB1dC5kYXRhc2V0LmlucHV0SWQsXHJcbiAgICAgIGFjdHVhbElucHV0ID0gdGhpcy5vcHRpb25zLmRvYy5xdWVyeVNlbGVjdG9yKGAjJHthY3R1YWxJbnB1dElkfWApXHJcblxyXG4gICAgbGV0IHJlc3RvcmUgPSBmYWxzZSxcclxuICAgICAgYXBwbHkgPSBmYWxzZSxcclxuICAgICAgbWFza2VkVmFsdWUgPSBmYWxzZSxcclxuICAgICAgaXNWYWxpZCA9IHRoaXMuX3ZhbGlkYXRlSW5wdXQodW5tYXNrZWRJbnB1dCwgYWN0dWFsSW5wdXQpXHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgbWFza2VkVmFsdWUgPSBOdW1iZXJNYXNrLm1hc2soXHJcbiAgICAgICAgdW5tYXNrZWRJbnB1dC52YWx1ZSB8fCAwLFxyXG4gICAgICAgIG1hc2ssXHJcbiAgICAgICAgZ3JvdXBpbmdTZXBhcmF0b3IsXHJcbiAgICAgICAgZGVjaW1hbFNlcGFyYXRvcixcclxuICAgICAgICBmb3JjZVRyYWlsaW5nWmVyb3MsXHJcbiAgICAgICAgZmFsc2VcclxuICAgICAgKS50cmltKClcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgbWFza2VkVmFsdWUgPSBmYWxzZVxyXG4gICAgICB0aGlzLl9fYXBwbHlDc3NDbGFzc1N0YXRlKHVubWFza2VkSW5wdXQsIGFjdHVhbElucHV0LCAnZXJyb3InKVxyXG4gICAgICB0aGlzLl9fZmlyZU9uSW52YWxpZChlLCBhY3R1YWxJbnB1dClcclxuICAgIH1cclxuXHJcbiAgICByZXN0b3JlID0gWzEzLCAyN10uaW5kZXhPZihrZXlDb2RlKSA+IC0xIHx8IGUudHlwZSA9PT0gJ2ZvY3Vzb3V0J1xyXG4gICAgYXBwbHkgPSBtYXNrZWRWYWx1ZSAmJiBpc1ZhbGlkXHJcblxyXG4gICAgaWYgKHJlc3RvcmUpIHtcclxuICAgICAgdW5tYXNrZWRJbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc0Vycm9yKVxyXG4gICAgICB1bm1hc2tlZElucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzU3VjY2VzcylcclxuXHJcbiAgICAgIHVubWFza2VkSW5wdXQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJylcclxuICAgICAgdW5tYXNrZWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnaGlkZGVuJylcclxuXHJcbiAgICAgIGFjdHVhbElucHV0LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKVxyXG4gICAgICBhY3R1YWxJbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dCcpXHJcblxyXG4gICAgICBhY3R1YWxJbnB1dC5jbGFzc0xpc3QuYWRkKHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3MpXHJcblxyXG4gICAgICBpZiAoYXBwbHkpIHtcclxuICAgICAgICBhY3R1YWxJbnB1dC52YWx1ZSA9IG1hc2tlZFZhbHVlXHJcbiAgICAgICAgYWN0dWFsSW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkID0gdW5tYXNrZWRJbnB1dC52YWx1ZVxyXG4gICAgICAgIHRoaXMuX19maXJlT25VcGRhdGUobWFza2VkVmFsdWUsIHVubWFza2VkSW5wdXQudmFsdWUsIGFjdHVhbElucHV0KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHVubWFza2VkSW5wdXQudmFsdWUgPSBhY3R1YWxJbnB1dC5kYXRhc2V0LnZhbHVlVW5tYXNrZWRcclxuICAgICAgICB0aGlzLl9fYXBwbHlDc3NDbGFzc1N0YXRlKHVubWFza2VkSW5wdXQsIGFjdHVhbElucHV0LCAnc3VjY2VzcycpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyaWdnZXIgYGNoZWNrVmFsaWRpdHlgIG9uIHRoZSBpbnB1dFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSB1bm1hc2tlZElucHV0XHJcbiAgICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBhY3R1YWxJbnB1dFxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0Jvb2xlYW59IHRydWUgd2hlbiB2YWxpZCAsIGZhbHNlIG90aGVyd2lzZVxyXG4gICAqXHJcbiAgICogQHByb3RlY3RlZFxyXG4gICAqL1xyXG4gIF92YWxpZGF0ZUlucHV0KHVubWFza2VkSW5wdXQsIGFjdHVhbElucHV0KSB7XHJcbiAgICBsZXQgaXNWYWxpZCA9IHRydWVcclxuICAgIGNvbnN0IHZhbHVlID0gTnVtYmVyKHVubWFza2VkSW5wdXQudmFsdWUpXHJcbiAgICBpZiAodW5tYXNrZWRJbnB1dC5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSA9PT0gJ2hpZGRlbicgJiYgIWlzTmFOKHZhbHVlKSkge1xyXG4gICAgICBjb25zdCBtYXggPSB1bm1hc2tlZElucHV0LmdldEF0dHJpYnV0ZSgnbWF4JylcclxuICAgICAgY29uc3QgbWluID0gdW5tYXNrZWRJbnB1dC5nZXRBdHRyaWJ1dGUoJ21pbicpXHJcbiAgICAgIGNvbnN0IHN0ZXAgPSB1bm1hc2tlZElucHV0LmdldEF0dHJpYnV0ZSgnc3RlcCcpXHJcblxyXG4gICAgICBpZiAobWluKSBpc1ZhbGlkID0gaXNWYWxpZCAmJiB2YWx1ZSA+PSBOdW1iZXIobWluKVxyXG4gICAgICBpZiAobWF4KSBpc1ZhbGlkID0gaXNWYWxpZCAmJiB2YWx1ZSA8PSBOdW1iZXIobWF4KVxyXG5cclxuICAgICAgaWYgKHN0ZXApXHJcbiAgICAgICAgaXNWYWxpZCA9XHJcbiAgICAgICAgICBpc1ZhbGlkICYmIGNvdW50RGVjaW1hbHMoc3RlcCkgPT09IGNvdW50RGVjaW1hbHModW5tYXNrZWRJbnB1dC52YWx1ZSlcclxuICAgIH0gZWxzZSBpc1ZhbGlkID0gdW5tYXNrZWRJbnB1dC5jaGVja1ZhbGlkaXR5KClcclxuXHJcbiAgICBpZiAoaXNWYWxpZCkge1xyXG4gICAgICB0aGlzLl9fYXBwbHlDc3NDbGFzc1N0YXRlKHVubWFza2VkSW5wdXQsIGFjdHVhbElucHV0LCAnc3VjY2VzcycpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9fYXBwbHlDc3NDbGFzc1N0YXRlKHVubWFza2VkSW5wdXQsIGFjdHVhbElucHV0LCAnZXJyb3InKVxyXG4gICAgICB0aGlzLl9fZmlyZU9uSW52YWxpZChcclxuICAgICAgICB1bm1hc2tlZElucHV0LnZhbGlkYXRpb25NZXNzYWdlIHx8ICdWYWxpZGl0eSBjaGVjayBmYWlscycsXHJcbiAgICAgICAgYWN0dWFsSW5wdXRcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpc1ZhbGlkXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVNYXNrZWQgIG1hc2tlZCB2YWx1ZVxyXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZVVubWFza2VkICBvcmlnaW5hbCB2YWx1ZVxyXG4gICAqIEBwYXJhbSB7SFRNTElucHV0RWxlbWVudH0gaW5wdXQgdGhlIGFjdHVhbCBpbnB1dCBpbnN0YW5jZVxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfX2ZpcmVPblVwZGF0ZSh2YWx1ZU1hc2tlZCwgdmFsdWVVbm1hc2tlZCwgaW5wdXQpIHtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMub25VcGRhdGUpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLm9uVXBkYXRlKHZhbHVlTWFza2VkLCB2YWx1ZVVubWFza2VkLCBpbnB1dClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gZXJyb3IgbGFzdCBvY2N1cnJlZCBlcnJvci4gY291bGQgYmUgbWFzayBlcnJvciBvciB2YWxpZGF0aW9uIGVycm9yXHJcbiAgICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBpbnB1dCB0aGUgYWN0dWFsIGlucHV0IGluc3RhbmNlXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9fZmlyZU9uSW52YWxpZChlcnJvciwgaW5wdXQpIHtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMub25JbnZhbGlkKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5vbkludmFsaWQoZXJyb3IsIGlucHV0KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfX2FwcGx5Q3NzQ2xhc3NTdGF0ZSh1bm1hc2tlZElucHV0LCBhY3R1YWxJbnB1dCwgc3RhdGUpIHtcclxuICAgIGlmIChcclxuICAgICAgYWN0dWFsSW5wdXQuaGFzQXR0cmlidXRlKCdyZWFkb25seScpIHx8XHJcbiAgICAgIGFjdHVhbElucHV0Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKVxyXG4gICAgKSB7XHJcbiAgICAgIGFjdHVhbElucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICAgIGFjdHVhbElucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzU3VjY2VzcylcclxuXHJcbiAgICAgIHVubWFza2VkSW5wdXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NFcnJvcilcclxuICAgICAgdW5tYXNrZWRJbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3MpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoc3RhdGUgPT09ICdzdWNjZXNzJykge1xyXG4gICAgICAgIGFjdHVhbElucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICAgICAgYWN0dWFsSW5wdXQuY2xhc3NMaXN0LmFkZCh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NTdWNjZXNzKVxyXG5cclxuICAgICAgICB1bm1hc2tlZElucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICAgICAgdW5tYXNrZWRJbnB1dC5jbGFzc0xpc3QuYWRkKHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3MpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChzdGF0ZSA9PT0gJ2Vycm9yJykge1xyXG4gICAgICAgIGFjdHVhbElucHV0LmNsYXNzTGlzdC5hZGQodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICAgICAgYWN0dWFsSW5wdXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NTdWNjZXNzKVxyXG5cclxuICAgICAgICB1bm1hc2tlZElucHV0LmNsYXNzTGlzdC5hZGQodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICAgICAgdW5tYXNrZWRJbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3MpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IE51bWJlcklucHV0XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9OdW1iZXJJbnB1dC9OdW1iZXJJbnB1dC5qcyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV83X187XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwge1wiY29tbW9uanNcIjpcImJiai1tYXNrcy9zcmMvTnVtYmVyTWFza1wiLFwiY29tbW9uanMyXCI6XCJiYmotbWFza3Mvc3JjL051bWJlck1hc2tcIixcImFtZFwiOlwiYmJqLW1hc2tzL3NyYy9OdW1iZXJNYXNrXCIsXCJyb290XCI6W1wiQkJqXCIsXCJNYXNrc1wiLFwiTnVtYmVyTWFza1wiXX1cbi8vIG1vZHVsZSBpZCA9IDdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmJqLW1hc2tzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuY29uc3QgaXNOdW1iZXJSZWdleCA9IC9eXFxkKyQvXG5jb25zdCBpc1doaXRlc3BhY2VSZWdleCA9IC9cXHMvXG5jb25zdCBwdW5jdHVhdGlvbkxpc3QgPSAnIVwiIyQlJlxcJygpKissLS4vOjs8PT4/QFtdXl9ge3x9fidcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGluIGxvd2VyIGNhc2VcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKi9cbmNvbnN0IGlzTG93ZXJDYXNlID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ciA9PSBzdHIudG9Mb3dlckNhc2UoKSAmJiBzdHIgIT0gc3RyLnRvVXBwZXJDYXNlKClcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGluIHVwcGVyIGNhc2VcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKi9cbmNvbnN0IGlzVXBwZXJDYXNlID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ciA9PSBzdHIudG9VcHBlckNhc2UoKSAmJiBzdHIgIT0gc3RyLnRvTG93ZXJDYXNlKClcbn1cblxuY29uc3QgcGFzc09yVGhyb3dFcnJvciA9IChsb29zZSwgcmV0LCBpLCBzdHIpID0+IHtcbiAgaWYgKCFsb29zZSkge1xuICAgIGNvbnN0IGNoYXIgPSBzdHIuY2hhckF0KGkpXG4gICAgY29uc3QgcG9zID0gaSArIDFcbiAgICB0aHJvdyB7XG4gICAgICBuYW1lOiAnU3RyaW5nTWFza0Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6IGBTdHJpbmdNYXNrRXJyb3I6IGVycm9yIGFwcGx5aW5nIG1hc2sgYXQgcG9zaXRpb24gXCIke3Bvc31cIiAsIGNoYXIgXCIke2NoYXJ9XCJgLFxuICAgICAgcG9zLFxuICAgICAgY2hhclxuICAgIH1cbiAgfSBlbHNlIHJldFtpXSA9ICcgJ1xufVxuXG4vKipcbiAqIE51bWJlck1hc2tcbiAqXG4gKiBBIGphdmFzY3JpcHQgaW1wbGVtZW50YXRpb24gZm9yIEJCaiBudW1iZXJzIG1hc2tpbmdcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5jbGFzcyBTdHJpbmdNYXNrIHtcbiAgLyoqXG4gICAqIE1hc2sgdGhlIGdpdmVuIHN0cmluZyB3aXRoIHRoZSBnaXZlbiBtYXNrIGFjY29yZGluZyB0byBCQmogcnVsZXNcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHN0ciB0aGUgc3RyaW5nIHRvIG1hc2tcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1hc2sgdGhlIG1hc2sgdG8gdXNlIGZvciBmb3JtYXR0aW5nXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW2xvb3NlPXRydWVdIHdoZW4gdHJ1ZSAsIGVycm9ycyB3aWxsIGJlIGlnbm9yZWQgYW5kIHRoZSBtZXRob2Qgd2lsbCB0cnkgYXQgYXBwbHkgdGhlIG1hc2tcbiAgICogICAgICAgICAgICAgICAgYW55d2F5ICwgb3RoZXJ3aXNlIGl0IHdpbGwgc3RvcCBhdCBmaXJzdCBlcnJvciBhbmQgdGhyb3cgaXQuXG4gICAqIFxuICAgKiBAdGhyb3dzIHtNYXNrSXNUb29TaG9ydEVycm9yfVxuICAgKiBAdGhyb3dzIHtTdHJpbmdNYXNrRXJyb3J9XG4gICAqIEB0aHJvd3Mge01hc2tFcnJvcn1cbiAgICogXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IHRoZSBtYXNrZWQgc3RyaW5nXG4gICAqL1xuICBzdGF0aWMgbWFzayhzdHIsIG1hc2ssIGxvb3NlID0gdHJ1ZSkge1xuICAgIHN0ciA9IFN0cmluZyhzdHIpXG4gICAgbWFzayA9IFN0cmluZyhtYXNrKVxuICAgIGNvbnN0IG1hc2tMZW4gPSBtYXNrLmxlbmd0aFxuICAgIGNvbnN0IHN0ckxlbiA9IHN0ci5sZW5ndGhcblxuICAgIGlmIChzdHJMZW4gPiBtYXNrTGVuKSB7XG4gICAgICBpZiAobG9vc2UpIHJldHVybiBzdHJcbiAgICAgIC8vIGZyaWVuZGx5IHNpbGVudCBmYWlsXG4gICAgICBlbHNlXG4gICAgICAgIHRocm93IHtcbiAgICAgICAgICBuYW1lOiAnTWFza0lzVG9vU2hvcnRFcnJvcicsXG4gICAgICAgICAgbWVzc2FnZTogYE1hc2tJc1Rvb1Nob3J0RXJyb3I6IE1hc2sgaXMgc2hvcnRlciB0aGFuIHRoZSBwYXNzZWQgc3RyaW5nYFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcmV0ID0gbmV3IEFycmF5KG1hc2tMZW4pXG4gICAgbGV0IHBvcyA9IDAgLy8gdG8ga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgc3RyXG4gICAgbGV0IG1hc2tCeXRlID0gJydcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWFza0xlbjsgaSsrKSB7XG4gICAgICBtYXNrQnl0ZSA9IG1hc2suY2hhckF0KGkpXG4gICAgICBzd2l0Y2ggKG1hc2tCeXRlKSB7XG4gICAgICAgIGNhc2UgJ1gnOiAvLyBtYXRjaCBhbnkgY2hhcmFjdGVyXG4gICAgICAgICAgcmV0W2ldID0gcG9zIDwgc3RyTGVuID8gc3RyLmNoYXJBdChwb3MpIDogJyAnXG4gICAgICAgICAgKytwb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJ0EnOiAvLyBtYXRjaCBsZXR0ZXI7IGZvcmNlIHVwcGVyIGNhc2VcbiAgICAgICAgICBpZiAocG9zIDwgc3RyTGVuKSB7XG4gICAgICAgICAgICBjb25zdCBieXRlID0gc3RyLmNoYXJBdChwb3MpXG4gICAgICAgICAgICBpZiAoaXNVcHBlckNhc2UoYnl0ZSkpIHJldFtpXSA9IGJ5dGVcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzTG93ZXJDYXNlKGJ5dGUpKSByZXRbaV0gPSBieXRlLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgIGVsc2UgcGFzc09yVGhyb3dFcnJvcihsb29zZSwgcmV0LCBpLCBzdHIpXG4gICAgICAgICAgfSBlbHNlIHJldFtpXSA9ICcgJ1xuICAgICAgICAgICsrcG9zXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICdhJzogLy8gbWF0Y2ggbGV0dGVyXG4gICAgICAgICAgaWYgKHBvcyA8IHN0ckxlbikge1xuICAgICAgICAgICAgY29uc3QgYnl0ZSA9IHN0ci5jaGFyQXQocG9zKVxuICAgICAgICAgICAgaWYgKGlzVXBwZXJDYXNlKGJ5dGUpIHx8IGlzTG93ZXJDYXNlKGJ5dGUpKSByZXRbaV0gPSBieXRlXG4gICAgICAgICAgICBlbHNlIHBhc3NPclRocm93RXJyb3IobG9vc2UsIHJldCwgaSwgc3RyKVxuICAgICAgICAgIH0gZWxzZSByZXRbaV0gPSAnICdcbiAgICAgICAgICArK3Bvc1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJzAnOiAvLyBtYXRjaCBkaWdpdFxuICAgICAgICAgIGlmIChwb3MgPCBzdHJMZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGJ5dGUgPSBzdHIuY2hhckF0KHBvcylcbiAgICAgICAgICAgIGlmIChpc051bWJlclJlZ2V4LnRlc3QoYnl0ZSkpIHJldFtpXSA9IGJ5dGVcbiAgICAgICAgICAgIGVsc2UgcGFzc09yVGhyb3dFcnJvcihsb29zZSwgcmV0LCBpLCBzdHIpXG4gICAgICAgICAgfSBlbHNlIHJldFtpXSA9ICcgJ1xuICAgICAgICAgICsrcG9zXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnWic6IC8vIG1hdGNoIGxldHRlciBvciBkaWdpdDsgZm9yY2UgdXBwZXIgY2FzZVxuICAgICAgICAgIGlmIChwb3MgPCBzdHJMZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGJ5dGUgPSBzdHIuY2hhckF0KHBvcylcbiAgICAgICAgICAgIGlmIChpc1VwcGVyQ2FzZShieXRlKSB8fCBpc051bWJlclJlZ2V4LnRlc3QoYnl0ZSkpIHJldFtpXSA9IGJ5dGVcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzTG93ZXJDYXNlKGJ5dGUpKSByZXRbaV0gPSBieXRlLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgIGVsc2UgcGFzc09yVGhyb3dFcnJvcihsb29zZSwgcmV0LCBpLCBzdHIpXG4gICAgICAgICAgfSBlbHNlIHJldFtpXSA9ICcgJ1xuICAgICAgICAgICsrcG9zXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAneic6IC8vIG1hdGNoIGxldHRlciBvciBkaWdpdFxuICAgICAgICAgIGlmIChwb3MgPCBzdHJMZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGJ5dGUgPSBzdHIuY2hhckF0KHBvcylcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgaXNVcHBlckNhc2UoYnl0ZSkgfHxcbiAgICAgICAgICAgICAgaXNMb3dlckNhc2UoYnl0ZSkgfHxcbiAgICAgICAgICAgICAgaXNOdW1iZXJSZWdleC50ZXN0KGJ5dGUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHJldFtpXSA9IGJ5dGVcbiAgICAgICAgICAgIGVsc2UgcGFzc09yVGhyb3dFcnJvcihsb29zZSwgcmV0LCBpLCBzdHIpXG4gICAgICAgICAgfSBlbHNlIHJldFtpXSA9ICcgJ1xuICAgICAgICAgICsrcG9zXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ1UnOiAvLyBtYXRjaCBsZXR0ZXIgKGZvcmNlIHVwcGVyIGNhc2UpLCBkaWdpdCwgd2hpdGVzcGFjZSBvciBwdW5jdHVhdGlvbi5cbiAgICAgICAgICBpZiAocG9zIDwgc3RyTGVuKSB7XG4gICAgICAgICAgICBjb25zdCBieXRlID0gc3RyLmNoYXJBdChwb3MpXG4gICAgICAgICAgICBpZiAoaXNMb3dlckNhc2UoYnl0ZSkpIHJldFtpXSA9IGJ5dGUudG9VcHBlckNhc2UoKVxuICAgICAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgICAgIGlzVXBwZXJDYXNlKGJ5dGUpIHx8XG4gICAgICAgICAgICAgIGlzTnVtYmVyUmVnZXgudGVzdChieXRlKSB8fFxuICAgICAgICAgICAgICBpc1doaXRlc3BhY2VSZWdleC50ZXN0KGJ5dGUpIHx8XG4gICAgICAgICAgICAgIHB1bmN0dWF0aW9uTGlzdC5pbmRleE9mKGJ5dGUpID4gLTFcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgcmV0W2ldID0gYnl0ZVxuICAgICAgICAgICAgZWxzZSBwYXNzT3JUaHJvd0Vycm9yKGxvb3NlLCByZXQsIGksIHN0cilcbiAgICAgICAgICB9IGVsc2UgcmV0W2ldID0gJyAnXG4gICAgICAgICAgKytwb3NcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldFtpXSA9IG1hc2tCeXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocG9zIDwgc3RyTGVuKSB7XG4gICAgICBpZiAoIWxvb3NlKSB7XG4gICAgICAgIHRocm93IHsgbmFtZTogJ01hc2tFcnJvcicsIG1lc3NhZ2U6ICdNYXNrIGNhbm5vdCBiZSBhcHBsaWVkJyB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldC5qb2luKCcnKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFN0cmluZ01hc2tcbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYmotbWFza3MgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKipcbiAqIE51bWJlck1hc2tcbiAqXG4gKiBBIGphdmFzY3JpcHQgaW1wbGVtZW50YXRpb24gZm9yIEJCaiBudW1iZXJzIG1hc2tpbmdcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5jbGFzcyBOdW1iZXJNYXNrIHtcbiAgLyoqXG4gICAqIE1hc2sgdGhlIGdpdmVuIG51bWJlciB3aXRoIHRoZSBnaXZlbiBtYXNrIGFjY29yZGluZyB0byBCQmogcnVsZXNcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IG51bWJlciB0aGUgbnVtYmVyIHRvIGZvcm1hdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWFzayB0aGUgbWFzayB0byB1c2UgZm9yIGZvcm1hdHRpbmdcbiAgICogQHBhcmFtIHtTdHJpbmd9IFtncm91cGluZ1NlcGFyYXRvcj0sXSAtIGEgY2hhciB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBncm91cGluZyBzZXBhcmF0b3JcbiAgICogQHBhcmFtIHtTdHJpbmd9IFtkZWNpbWFsU2VwYXJhdG9yPS5dICAtIGEgY2hhciB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBkZWNpbWFsIHNlcGFyYXRvclxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtmb3JjZVRyYWlsaW5nWmVyb3M9ZmFsc2VdIC0gQWZmZWN0cyB0aGUgb3V0cHV0IGJ5IHN3aXRjaGluZyB0aGUgd2F5IGEgbWFzayB3aXRoIFwiI1wiIGNoYXJhY3RlcnMgaW4gdGhlIHRyYWlsaW5nIHBvc2l0aW9ucyBpcyBmaWxsZWQuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBleGFtcGxlLCB0aGUgZnVuY3Rpb24gYE51bWJlck1hc2subWFzayguMTA6XCIjLiMjXCIpYCByZXR1cm5zIGAgLjEwYCBpbnN0ZWFkIG9mIGAgLjEgYFxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtsb29zZT10cnVlXSB3aGVuIHRydWUgLCBlcnJvcnMgd2lsbCBiZSBpZ25vcmVkIGFuZCB0aGUgbWV0aG9kIHdpbGwgdHJ5IGF0IGFwcGx5IHRoZSBtYXNrXG4gICAqICAgICAgICAgICAgICAgIGFueXdheSAsIG90aGVyd2lzZSBpdCB3aWxsIHN0b3AgYXQgZmlyc3QgZXJyb3IgYW5kIHRocm93IGl0LlxuICAgKiBcbiAgICogQHRocm93cyB7TWFza0Vycm9yfSBvbmx5IGlmIGxvb3NlIGlzIGRpc2FibGVkXG4gICAqIFxuICAgKiBAcmV0dXJucyB7U3RyaW5nfSB0aGUgbWFza2VkIG51bWJlclxuICAgKi9cbiAgc3RhdGljIG1hc2soXG4gICAgbnVtYmVyLFxuICAgIG1hc2ssXG4gICAgZ3JvdXBpbmdTZXBhcmF0b3IgPSAnLCcsXG4gICAgZGVjaW1hbFNlcGFyYXRvciA9ICcuJyxcbiAgICBmb3JjZVRyYWlsaW5nWmVyb3MgPSBmYWxzZSxcbiAgICBsb29zZSA9IHRydWVcbiAgKSB7XG4gICAgY29uc3QgbWFza0xlbiA9IG1hc2subGVuZ3RoXG4gICAgaWYgKDAgPT09IG1hc2tMZW4pIHtcbiAgICAgIGlmIChsb29zZSkgcmV0dXJuIHN0clxuICAgICAgLy8gZnJpZW5kbHkgc2lsZW50IGZhaWxcbiAgICAgIGVsc2VcbiAgICAgICAgdGhyb3cge1xuICAgICAgICAgIG5hbWU6ICdNYXNrRXJyb3InLFxuICAgICAgICAgIG1lc3NhZ2U6IGBNYXNrRXJyb3I6IE1hc2sgaXMgZW1wdHlgXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHZXQgbWFnbml0dWRlIGFuZCBwcmVjaXNpb24gb2YgTUFTS1xuICAgIGxldCBtYXNrQmVmb3JlRGVjaW1hbCA9IDBcbiAgICBsZXQgbWFza0FmdGVyRGVjaW1hbCA9IDBcbiAgICBsZXQgZm91bmREZWNpbWFsID0gZmFsc2VcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hc2tMZW47ICsraSkge1xuICAgICAgY29uc3QgbSA9IG1hc2suY2hhckF0KGkpXG4gICAgICBpZiAobSA9PSAnMCcgfHwgbSA9PSAnIycpIHtcbiAgICAgICAgaWYgKGZvdW5kRGVjaW1hbCkgKyttYXNrQWZ0ZXJEZWNpbWFsXG4gICAgICAgIGVsc2UgKyttYXNrQmVmb3JlRGVjaW1hbFxuICAgICAgfSBlbHNlIGlmIChtID09ICcuJykgZm91bmREZWNpbWFsID0gdHJ1ZVxuICAgIH1cblxuICAgIGxldCBudW0gPSBOdW1iZXJNYXNrLl9yb3VuZChudW1iZXIsIG1hc2tBZnRlckRlY2ltYWwpXG4gICAgbGV0IGJ5dGVzID0gTnVtYmVyTWFzay5fdG9DaGFyQXJyYXkobnVtKVxuXG4gICAgLy8gR2V0IG1hZ25pdHVkZSBhbmQgcHJlY2lzaW9uIG9mIE5VTUJFUlxuICAgIGxldCBpbkxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGxldCBudW1CZWZvcmVEZWNpbWFsID0gMFxuICAgIGxldCBudW1BZnRlckRlY2ltYWwgPSAwXG4gICAgZm91bmREZWNpbWFsID0gZmFsc2VcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluTGVuOyArK2kpIHtcbiAgICAgIGlmIChieXRlc1tpXSA9PSAnLicpIGZvdW5kRGVjaW1hbCA9IHRydWVcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoZm91bmREZWNpbWFsKSArK251bUFmdGVyRGVjaW1hbFxuICAgICAgICBlbHNlICsrbnVtQmVmb3JlRGVjaW1hbFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFsd2F5cyBpZ25vcmUgbWFzayBvdmVyZmxvd1xuICAgIGlmIChudW1CZWZvcmVEZWNpbWFsID4gbWFza0JlZm9yZURlY2ltYWwpIHtcbiAgICAgIGlmIChsb29zZSkgcmV0dXJuIG51bWJlci50b1N0cmluZygpXG4gICAgICAvLyBmcmllbmRseSBzaWxlbnQgZmFpbFxuICAgICAgZWxzZVxuICAgICAgICB0aHJvdyB7XG4gICAgICAgICAgbmFtZTogJ01hc2tFcnJvcicsXG4gICAgICAgICAgbWVzc2FnZTogYE1hc2tFcnJvcjogTnVtYmVyIGlzIHRvbyBsYXJnZSBmb3IgbWFza2BcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJvdW5kIGlmIG1hc2sgaXMgZm9yIGEgbG93ZXIgcHJlY2lzaW9uIG51bWJlclxuICAgIGlmIChudW1BZnRlckRlY2ltYWwgPiBtYXNrQWZ0ZXJEZWNpbWFsKSB7XG4gICAgICBudW0gPSBOdW1iZXJNYXNrLl9yb3VuZChudW0sIG1hc2tBZnRlckRlY2ltYWwpXG4gICAgICBieXRlcyA9IE51bWJlck1hc2suX3RvQ2hhckFycmF5KG51bSlcbiAgICAgIGluTGVuID0gYnl0ZXMubGVuZ3RoXG5cbiAgICAgIC8vIEdldCBuZXcgbWFnbml0dWRlIGFuZCBwcmVjaXNpb24gb2YgTlVNQkVSXG4gICAgICBudW1CZWZvcmVEZWNpbWFsID0gMFxuICAgICAgbnVtQWZ0ZXJEZWNpbWFsID0gMFxuICAgICAgZm91bmREZWNpbWFsID0gZmFsc2VcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5MZW47ICsraSkge1xuICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJy4nKSBmb3VuZERlY2ltYWwgPSB0cnVlXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmIChmb3VuZERlY2ltYWwpICsrbnVtQWZ0ZXJEZWNpbWFsXG4gICAgICAgICAgZWxzZSArK251bUJlZm9yZURlY2ltYWxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBhbHdheXMgaWdub3JlIG1hc2sgb3ZlcmZsb3dcbiAgICAgIGlmIChudW1CZWZvcmVEZWNpbWFsID4gbWFza0JlZm9yZURlY2ltYWwpIHtcbiAgICAgICAgaWYgKGxvb3NlKSByZXR1cm4gbnVtYmVyLnRvU3RyaW5nKClcbiAgICAgICAgLy8gZnJpZW5kbHkgc2lsZW50IGZhaWxcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHRocm93IHtcbiAgICAgICAgICAgIG5hbWU6ICdNYXNrRXJyb3InLFxuICAgICAgICAgICAgbWVzc2FnZTogYE1hc2tFcnJvcjogTnVtYmVyIGlzIHRvbyBsYXJnZSBmb3IgbWFza2BcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGZpbGxCeXRlID0gJyAnLFxuICAgICAgZmxvYXRCeXRlID0gJyAnXG4gICAgbGV0IGluUG9zID0gMCxcbiAgICAgIG91dFBvcyA9IDAsXG4gICAgICBmbG9hdFBvcyA9IDBcbiAgICBpZiAobWFzay5jaGFyQXQoMCkgPT0gJyonKSBmaWxsQnl0ZSA9ICcqJ1xuXG4gICAgY29uc3QgZmlsbEluaXQgPSBmaWxsQnl0ZVxuICAgIGNvbnN0IGlzTmVnYXRpdmUgPSBOdW1iZXJNYXNrLl9nZXRTaWduKG51bSkgPCAwXG4gICAgbGV0IGVtaXREZWNpbWFsID0gaW5MZW4gPiAwIHx8IG1hc2suaW5kZXhPZignMCcpID49IDBcbiAgICBsZXQgZm91bmRaZXJvID0gZmFsc2VcbiAgICBsZXQgZm91bmREaWdpdCA9IGZhbHNlXG4gICAgbGV0IGN1cnJlbmN5ID0gZmFsc2VcbiAgICBmb3VuZERlY2ltYWwgPSBmYWxzZVxuXG4gICAgbGV0IHJldCA9IG5ldyBBcnJheShtYXNrTGVuKVxuXG4gICAgZm9yIChsZXQgbWFza1BvcyA9IDA7IG1hc2tQb3MgPCBtYXNrTGVuOyArK21hc2tQb3MpIHtcbiAgICAgIGxldCBtID0gbWFzay5jaGFyQXQobWFza1BvcylcbiAgICAgIHN3aXRjaCAobSkge1xuICAgICAgICBjYXNlICcwJzpcbiAgICAgICAgICAtLW1hc2tCZWZvcmVEZWNpbWFsXG4gICAgICAgICAgaWYgKG1hc2tCZWZvcmVEZWNpbWFsIDwgbnVtQmVmb3JlRGVjaW1hbCAmJiBpblBvcyA8IGluTGVuKSB7XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9IGJ5dGVzW2luUG9zXVxuICAgICAgICAgICAgKytpblBvc1xuICAgICAgICAgICAgZm91bmREaWdpdCA9IHRydWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0W291dFBvc10gPSAnMCdcbiAgICAgICAgICAgIGZvdW5kWmVybyA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJyMnOlxuICAgICAgICAgIC0tbWFza0JlZm9yZURlY2ltYWxcbiAgICAgICAgICBpZiAobWFza0JlZm9yZURlY2ltYWwgPCBudW1CZWZvcmVEZWNpbWFsICYmIGluUG9zIDwgaW5MZW4pIHtcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gYnl0ZXNbaW5Qb3NdXG4gICAgICAgICAgICArK2luUG9zXG4gICAgICAgICAgICBmb3VuZERpZ2l0ID0gdHJ1ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9XG4gICAgICAgICAgICAgIGZvdW5kRGVjaW1hbCAmJlxuICAgICAgICAgICAgICBmb3JjZVRyYWlsaW5nWmVyb3MgJiZcbiAgICAgICAgICAgICAgTnVtYmVyTWFzay5fZ2V0U2lnbihudW0pICE9IDBcbiAgICAgICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgICAgIDogZmlsbEJ5dGVcbiAgICAgICAgICAgIGlmICghZm91bmREZWNpbWFsKSBmbG9hdFBvcyA9IG1hc2tQb3NcbiAgICAgICAgICB9XG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJywnOlxuICAgICAgICAgIGlmIChmb3VuZFplcm8gfHwgaW5Qb3MgPiAwKSByZXRbb3V0UG9zXSA9IGdyb3VwaW5nU2VwYXJhdG9yXG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9IGZpbGxCeXRlXG4gICAgICAgICAgICBpZiAoIWZvdW5kRGVjaW1hbCkgZmxvYXRQb3MgPSBtYXNrUG9zXG4gICAgICAgICAgfVxuICAgICAgICAgICsrb3V0UG9zXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICctJzpcbiAgICAgICAgICBpZiAoIWZvdW5kRGlnaXQgJiYgZmxvYXRCeXRlID09ICcgJykge1xuICAgICAgICAgICAgaWYgKGlzTmVnYXRpdmUpIGZsb2F0Qnl0ZSA9ICctJ1xuICAgICAgICAgICAgcmV0W291dFBvc10gPSBmaWxsQnl0ZVxuICAgICAgICAgICAgZmxvYXRQb3MgPSBmb3VuZERlY2ltYWwgPyAtMSA6IG1hc2tQb3NcbiAgICAgICAgICB9IGVsc2UgcmV0W291dFBvc10gPSBpc05lZ2F0aXZlID8gJy0nIDogZmlsbEJ5dGVcbiAgICAgICAgICArK291dFBvc1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSAnKyc6XG4gICAgICAgICAgaWYgKCFmb3VuZERpZ2l0ICYmIGZsb2F0Qnl0ZSA9PSAnICcpIHtcbiAgICAgICAgICAgIGZsb2F0Qnl0ZSA9IGlzTmVnYXRpdmUgPyAnLScgOiAnKydcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZmlsbEJ5dGVcbiAgICAgICAgICAgIGZsb2F0UG9zID0gZm91bmREZWNpbWFsID8gLTEgOiBtYXNrUG9zXG4gICAgICAgICAgfSBlbHNlIHJldFtvdXRQb3NdID0gaXNOZWdhdGl2ZSA/ICctJyA6ICcrJ1xuICAgICAgICAgICsrb3V0UG9zXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICckJzpcbiAgICAgICAgICBpZiAoIWZvdW5kRGlnaXQgJiYgZmxvYXRCeXRlID09ICcgJykge1xuICAgICAgICAgICAgZmxvYXRCeXRlID0gJyQnXG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9IGZpbGxCeXRlXG4gICAgICAgICAgICBmbG9hdFBvcyA9IGZvdW5kRGVjaW1hbCA/IC0xIDogbWFza1Bvc1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9ICckJ1xuICAgICAgICAgIH1cbiAgICAgICAgICArK291dFBvc1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgLy8gY2FzZSAnJic6XG4gICAgICAgIC8vICAgY3VycmVuY3kgPSB0cnVlXG4gICAgICAgIC8vICAgaWYgKCFmb3VuZERpZ2l0ICYmIGZsb2F0Qnl0ZSA9PSAnICcpIHtcbiAgICAgICAgLy8gICAgIGZsb2F0Qnl0ZSA9ICcmJ1xuICAgICAgICAvLyAgICAgcmV0W291dFBvc10gPSBmaWxsQnl0ZVxuICAgICAgICAvLyAgICAgZmxvYXRQb3MgPSBmb3VuZERlY2ltYWwgPyAtMSA6IG1hc2tQb3NcbiAgICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgICAvLyAgICAgcmV0W291dFBvc10gPSAnJidcbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vICAgKytvdXRQb3NcbiAgICAgICAgLy8gICBicmVha1xuXG4gICAgICAgIC8vIGNhc2UgJ0AnOlxuICAgICAgICAvLyAgIGN1cnJlbmN5ID0gdHJ1ZVxuICAgICAgICAvLyAgIGlmICghZm91bmREaWdpdCAmJiBmbG9hdEJ5dGUgPT0gJyAnKSB7XG4gICAgICAgIC8vICAgICBmbG9hdEJ5dGUgPSAnQCdcbiAgICAgICAgLy8gICAgIHJldFtvdXRQb3NdID0gZmlsbEJ5dGVcbiAgICAgICAgLy8gICAgIGZsb2F0UG9zID0gZm91bmREZWNpbWFsID8gLTEgOiBtYXNrUG9zXG4gICAgICAgIC8vICAgfSBlbHNlIHtcbiAgICAgICAgLy8gICAgIHJldFtvdXRQb3NdID0gJ0AnXG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyAgICsrb3V0UG9zXG4gICAgICAgIC8vICAgYnJlYWtcblxuICAgICAgICBjYXNlICcoJzpcbiAgICAgICAgICBpZiAoIWZvdW5kRGlnaXQgJiYgZmxvYXRCeXRlID09ICcgJykge1xuICAgICAgICAgICAgaWYgKGlzTmVnYXRpdmUpIGZsb2F0Qnl0ZSA9ICcoJ1xuICAgICAgICAgICAgcmV0W291dFBvc10gPSBmaWxsQnl0ZVxuICAgICAgICAgICAgZmxvYXRQb3MgPSBmb3VuZERlY2ltYWwgPyAtMSA6IG1hc2tQb3NcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzTmVnYXRpdmUpIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnKCdcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZm91bmREZWNpbWFsID8gJyAnIDogZmlsbEJ5dGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJyknOlxuICAgICAgICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9ICcpJ1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9IGZvdW5kRGVjaW1hbCA/ICcgJyA6IGZpbGxCeXRlXG4gICAgICAgICAgfVxuICAgICAgICAgICsrb3V0UG9zXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICdDJzpcbiAgICAgICAgICBpZiAobWFza1BvcyA8IG1hc2tMZW4gLSAxICYmIG1hc2suY2hhckF0KG1hc2tQb3MgKyAxKSA9PSAnUicpIHtcbiAgICAgICAgICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJ0MnXG4gICAgICAgICAgICAgIHJldFtvdXRQb3MgKyAxXSA9ICdSJ1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnICdcbiAgICAgICAgICAgICAgcmV0W291dFBvcyArIDFdID0gJyAnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXRQb3MgKz0gMlxuICAgICAgICAgICAgKyttYXNrUG9zXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJ0MnXG4gICAgICAgICAgICArK291dFBvc1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICBpZiAobWFza1BvcyA8IG1hc2tMZW4gLSAxICYmIG1hc2suY2hhckF0KG1hc2tQb3MgKyAxKSA9PSAnUicpIHtcbiAgICAgICAgICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJ0MnXG4gICAgICAgICAgICAgIHJldFtvdXRQb3MgKyAxXSA9ICdSJ1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnRCdcbiAgICAgICAgICAgICAgcmV0W291dFBvcyArIDFdID0gJ1InXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXRQb3MgKz0gMlxuICAgICAgICAgICAgKyttYXNrUG9zXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJ0QnXG4gICAgICAgICAgICArK291dFBvc1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJyonOlxuICAgICAgICAgIHJldFtvdXRQb3NdID0gJyonXG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJy4nOlxuICAgICAgICAgIHJldFtvdXRQb3NdID0gZW1pdERlY2ltYWwgPyBkZWNpbWFsU2VwYXJhdG9yIDogZmlsbEJ5dGVcbiAgICAgICAgICBmaWxsQnl0ZSA9ICcgJ1xuICAgICAgICAgIGZvdW5kRGVjaW1hbCA9IHRydWVcbiAgICAgICAgICArK2luUG9zXG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJ0InOlxuICAgICAgICAgIHJldFtvdXRQb3NdID0gJyAnXG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0W291dFBvc10gPSBtXG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmbG9hdEJ5dGUgIT0gJyAnKSB7XG4gICAgICBpZiAoZmxvYXRQb3MgPCAwKSBmbG9hdFBvcyA9IG91dFBvc1xuICAgICAgd2hpbGUgKGZsb2F0UG9zID49IG1hc2tMZW4pIC0tZmxvYXRQb3NcbiAgICAgIGlmIChyZXRbZmxvYXRQb3NdID09IGZpbGxJbml0KSByZXRbZmxvYXRQb3NdID0gZmxvYXRCeXRlXG4gICAgfVxuXG4gICAgcmV0dXJuIHJldC5qb2luKCcnKVxuICB9XG5cbiAgc3RhdGljIF9zaGlmdChudW1iZXIsIHByZWNpc2lvbiwgcmV2ZXJzZVNoaWZ0KSB7XG4gICAgaWYgKHJldmVyc2VTaGlmdCkgcHJlY2lzaW9uID0gLXByZWNpc2lvblxuICAgIHZhciBudW1BcnJheSA9ICgnJyArIG51bWJlcikuc3BsaXQoJ2UnKVxuICAgIHJldHVybiArKFxuICAgICAgbnVtQXJyYXlbMF0gK1xuICAgICAgJ2UnICtcbiAgICAgIChudW1BcnJheVsxXSA/ICtudW1BcnJheVsxXSArIHByZWNpc2lvbiA6IHByZWNpc2lvbilcbiAgICApXG4gIH1cblxuICBzdGF0aWMgX3JvdW5kKG51bWJlciwgcHJlY2lzaW9uKSB7XG4gICAgcmV0dXJuIE51bWJlck1hc2suX3NoaWZ0KFxuICAgICAgTWF0aC5yb3VuZChOdW1iZXJNYXNrLl9zaGlmdChudW1iZXIsIHByZWNpc2lvbiwgZmFsc2UpKSxcbiAgICAgIHByZWNpc2lvbixcbiAgICAgIHRydWVcbiAgICApXG4gIH1cblxuICBzdGF0aWMgX3RvQ2hhckFycmF5KG51bWJlcikge1xuICAgIGNvbnN0IHNpZ251bSA9IE51bWJlck1hc2suX2dldFNpZ24obnVtYmVyKVxuICAgIGxldCBjaGFycyA9IFtdXG5cbiAgICBpZiAoc2lnbnVtICE9PSAwKSB7XG4gICAgICBsZXQgc3RyaW5nID0gc2lnbnVtIDwgMCA/IGAkey0xICogbnVtYmVyLnRvU3RyaW5nKCl9YCA6IG51bWJlci50b1N0cmluZygpXG5cbiAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMSAmJiBzdHJpbmcuY2hhckF0KDApID09ICcwJylcbiAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZygxKVxuXG4gICAgICAvLyBUaGUgc3RyaW5nIGNvbnRhaW5zIG9ubHkgWzAtOV0gYW5kICcuJ1xuICAgICAgY2hhcnMgPSBzdHJpbmcuc3BsaXQoJycpXG4gICAgfVxuXG4gICAgcmV0dXJuIGNoYXJzXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2lnbiBvZiBhIG51bWJlclxuICAgKlxuICAgKiBAcGFyYW0ge051bWJlcn0geCBudW1iZXJcbiAgICogQHJldHVybnMge051bWJlcn0gQSBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSBzaWduIG9mIHRoZSBnaXZlbiBhcmd1bWVudC5cbiAgICogICAgICAgICAgICAgICAgICAgSWYgdGhlIGFyZ3VtZW50IGlzIGEgcG9zaXRpdmUgbnVtYmVyLCBuZWdhdGl2ZSBudW1iZXIsIHBvc2l0aXZlIHplcm9cbiAgICogICAgICAgICAgICAgICAgICAgb3IgbmVnYXRpdmUgemVybywgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDEsIC0xLCAwIG9yIC0wIHJlc3BlY3RpdmVseS5cbiAgICogICAgICAgICAgICAgICAgICAgT3RoZXJ3aXNlLCBOYU4gaXMgcmV0dXJuZWQuXG4gICAqL1xuICBzdGF0aWMgX2dldFNpZ24oeCkge1xuICAgIHJldHVybiAoeCA+IDApIC0gKHggPCAwKSB8fCAreFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE51bWJlck1hc2tcbiIsIm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsW1wiZmxhdHBpY2tyXCJdID0gcmVxdWlyZShcIi0hRDpcXFxcR2l0aHViXFxcXEJCakdyaWRFeFdpZGdldFxcXFxjbGllbnRcXFxcbm9kZV9tb2R1bGVzXFxcXGJhYmVsLWxvYWRlclxcXFxsaWJcXFxcaW5kZXguanM/P3JlZi0tNCEuXFxcXGZsYXRwaWNrci5qc1wiKTsiLCIvKiBmbGF0cGlja3IgdjQuNi4zLCBAbGljZW5zZSBNSVQgKi9cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gICAgKGdsb2JhbCA9IGdsb2JhbCB8fCBzZWxmLCBnbG9iYWwuZmxhdHBpY2tyID0gZmFjdG9yeSgpKTtcbn0odGhpcywgZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAgIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlXHJcbiAgICB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZVxyXG4gICAgTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuXHJcbiAgICBUSElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXHJcbiAgICBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVEXHJcbiAgICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLFxyXG4gICAgTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5cclxuXHJcbiAgICBTZWUgdGhlIEFwYWNoZSBWZXJzaW9uIDIuMCBMaWNlbnNlIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcclxuICAgIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cclxuICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcblxyXG4gICAgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgfTtcblxuICAgIHZhciBIT09LUyA9IFtcbiAgICAgICAgXCJvbkNoYW5nZVwiLFxuICAgICAgICBcIm9uQ2xvc2VcIixcbiAgICAgICAgXCJvbkRheUNyZWF0ZVwiLFxuICAgICAgICBcIm9uRGVzdHJveVwiLFxuICAgICAgICBcIm9uS2V5RG93blwiLFxuICAgICAgICBcIm9uTW9udGhDaGFuZ2VcIixcbiAgICAgICAgXCJvbk9wZW5cIixcbiAgICAgICAgXCJvblBhcnNlQ29uZmlnXCIsXG4gICAgICAgIFwib25SZWFkeVwiLFxuICAgICAgICBcIm9uVmFsdWVVcGRhdGVcIixcbiAgICAgICAgXCJvblllYXJDaGFuZ2VcIixcbiAgICAgICAgXCJvblByZUNhbGVuZGFyUG9zaXRpb25cIixcbiAgICBdO1xuICAgIHZhciBkZWZhdWx0cyA9IHtcbiAgICAgICAgX2Rpc2FibGU6IFtdLFxuICAgICAgICBfZW5hYmxlOiBbXSxcbiAgICAgICAgYWxsb3dJbnB1dDogZmFsc2UsXG4gICAgICAgIGFsdEZvcm1hdDogXCJGIGosIFlcIixcbiAgICAgICAgYWx0SW5wdXQ6IGZhbHNlLFxuICAgICAgICBhbHRJbnB1dENsYXNzOiBcImZvcm0tY29udHJvbCBpbnB1dFwiLFxuICAgICAgICBhbmltYXRlOiB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKFwiTVNJRVwiKSA9PT0gLTEsXG4gICAgICAgIGFyaWFEYXRlRm9ybWF0OiBcIkYgaiwgWVwiLFxuICAgICAgICBjbGlja09wZW5zOiB0cnVlLFxuICAgICAgICBjbG9zZU9uU2VsZWN0OiB0cnVlLFxuICAgICAgICBjb25qdW5jdGlvbjogXCIsIFwiLFxuICAgICAgICBkYXRlRm9ybWF0OiBcIlktbS1kXCIsXG4gICAgICAgIGRlZmF1bHRIb3VyOiAxMixcbiAgICAgICAgZGVmYXVsdE1pbnV0ZTogMCxcbiAgICAgICAgZGVmYXVsdFNlY29uZHM6IDAsXG4gICAgICAgIGRpc2FibGU6IFtdLFxuICAgICAgICBkaXNhYmxlTW9iaWxlOiBmYWxzZSxcbiAgICAgICAgZW5hYmxlOiBbXSxcbiAgICAgICAgZW5hYmxlU2Vjb25kczogZmFsc2UsXG4gICAgICAgIGVuYWJsZVRpbWU6IGZhbHNlLFxuICAgICAgICBlcnJvckhhbmRsZXI6IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjb25zb2xlLndhcm4oZXJyKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0V2VlazogZnVuY3Rpb24gKGdpdmVuRGF0ZSkge1xuICAgICAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShnaXZlbkRhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICAgICAgICAvLyBUaHVyc2RheSBpbiBjdXJyZW50IHdlZWsgZGVjaWRlcyB0aGUgeWVhci5cbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDMgLSAoKGRhdGUuZ2V0RGF5KCkgKyA2KSAlIDcpKTtcbiAgICAgICAgICAgIC8vIEphbnVhcnkgNCBpcyBhbHdheXMgaW4gd2VlayAxLlxuICAgICAgICAgICAgdmFyIHdlZWsxID0gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCAwLCA0KTtcbiAgICAgICAgICAgIC8vIEFkanVzdCB0byBUaHVyc2RheSBpbiB3ZWVrIDEgYW5kIGNvdW50IG51bWJlciBvZiB3ZWVrcyBmcm9tIGRhdGUgdG8gd2VlazEuXG4gICAgICAgICAgICByZXR1cm4gKDEgK1xuICAgICAgICAgICAgICAgIE1hdGgucm91bmQoKChkYXRlLmdldFRpbWUoKSAtIHdlZWsxLmdldFRpbWUoKSkgLyA4NjQwMDAwMCAtXG4gICAgICAgICAgICAgICAgICAgIDMgK1xuICAgICAgICAgICAgICAgICAgICAoKHdlZWsxLmdldERheSgpICsgNikgJSA3KSkgL1xuICAgICAgICAgICAgICAgICAgICA3KSk7XG4gICAgICAgIH0sXG4gICAgICAgIGhvdXJJbmNyZW1lbnQ6IDEsXG4gICAgICAgIGlnbm9yZWRGb2N1c0VsZW1lbnRzOiBbXSxcbiAgICAgICAgaW5saW5lOiBmYWxzZSxcbiAgICAgICAgbG9jYWxlOiBcImRlZmF1bHRcIixcbiAgICAgICAgbWludXRlSW5jcmVtZW50OiA1LFxuICAgICAgICBtb2RlOiBcInNpbmdsZVwiLFxuICAgICAgICBtb250aFNlbGVjdG9yVHlwZTogXCJkcm9wZG93blwiLFxuICAgICAgICBuZXh0QXJyb3c6IFwiPHN2ZyB2ZXJzaW9uPScxLjEnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgeG1sbnM6eGxpbms9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnIHZpZXdCb3g9JzAgMCAxNyAxNyc+PGc+PC9nPjxwYXRoIGQ9J00xMy4yMDcgOC40NzJsLTcuODU0IDcuODU0LTAuNzA3LTAuNzA3IDcuMTQ2LTcuMTQ2LTcuMTQ2LTcuMTQ4IDAuNzA3LTAuNzA3IDcuODU0IDcuODU0eicgLz48L3N2Zz5cIixcbiAgICAgICAgbm9DYWxlbmRhcjogZmFsc2UsXG4gICAgICAgIG5vdzogbmV3IERhdGUoKSxcbiAgICAgICAgb25DaGFuZ2U6IFtdLFxuICAgICAgICBvbkNsb3NlOiBbXSxcbiAgICAgICAgb25EYXlDcmVhdGU6IFtdLFxuICAgICAgICBvbkRlc3Ryb3k6IFtdLFxuICAgICAgICBvbktleURvd246IFtdLFxuICAgICAgICBvbk1vbnRoQ2hhbmdlOiBbXSxcbiAgICAgICAgb25PcGVuOiBbXSxcbiAgICAgICAgb25QYXJzZUNvbmZpZzogW10sXG4gICAgICAgIG9uUmVhZHk6IFtdLFxuICAgICAgICBvblZhbHVlVXBkYXRlOiBbXSxcbiAgICAgICAgb25ZZWFyQ2hhbmdlOiBbXSxcbiAgICAgICAgb25QcmVDYWxlbmRhclBvc2l0aW9uOiBbXSxcbiAgICAgICAgcGx1Z2luczogW10sXG4gICAgICAgIHBvc2l0aW9uOiBcImF1dG9cIixcbiAgICAgICAgcG9zaXRpb25FbGVtZW50OiB1bmRlZmluZWQsXG4gICAgICAgIHByZXZBcnJvdzogXCI8c3ZnIHZlcnNpb249JzEuMScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB4bWxuczp4bGluaz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycgdmlld0JveD0nMCAwIDE3IDE3Jz48Zz48L2c+PHBhdGggZD0nTTUuMjA3IDguNDcxbDcuMTQ2IDcuMTQ3LTAuNzA3IDAuNzA3LTcuODUzLTcuODU0IDcuODU0LTcuODUzIDAuNzA3IDAuNzA3LTcuMTQ3IDcuMTQ2eicgLz48L3N2Zz5cIixcbiAgICAgICAgc2hvcnRoYW5kQ3VycmVudE1vbnRoOiBmYWxzZSxcbiAgICAgICAgc2hvd01vbnRoczogMSxcbiAgICAgICAgc3RhdGljOiBmYWxzZSxcbiAgICAgICAgdGltZV8yNGhyOiBmYWxzZSxcbiAgICAgICAgd2Vla051bWJlcnM6IGZhbHNlLFxuICAgICAgICB3cmFwOiBmYWxzZVxuICAgIH07XG5cbiAgICB2YXIgZW5nbGlzaCA9IHtcbiAgICAgICAgd2Vla2RheXM6IHtcbiAgICAgICAgICAgIHNob3J0aGFuZDogW1wiU3VuXCIsIFwiTW9uXCIsIFwiVHVlXCIsIFwiV2VkXCIsIFwiVGh1XCIsIFwiRnJpXCIsIFwiU2F0XCJdLFxuICAgICAgICAgICAgbG9uZ2hhbmQ6IFtcbiAgICAgICAgICAgICAgICBcIlN1bmRheVwiLFxuICAgICAgICAgICAgICAgIFwiTW9uZGF5XCIsXG4gICAgICAgICAgICAgICAgXCJUdWVzZGF5XCIsXG4gICAgICAgICAgICAgICAgXCJXZWRuZXNkYXlcIixcbiAgICAgICAgICAgICAgICBcIlRodXJzZGF5XCIsXG4gICAgICAgICAgICAgICAgXCJGcmlkYXlcIixcbiAgICAgICAgICAgICAgICBcIlNhdHVyZGF5XCIsXG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgc2hvcnRoYW5kOiBbXG4gICAgICAgICAgICAgICAgXCJKYW5cIixcbiAgICAgICAgICAgICAgICBcIkZlYlwiLFxuICAgICAgICAgICAgICAgIFwiTWFyXCIsXG4gICAgICAgICAgICAgICAgXCJBcHJcIixcbiAgICAgICAgICAgICAgICBcIk1heVwiLFxuICAgICAgICAgICAgICAgIFwiSnVuXCIsXG4gICAgICAgICAgICAgICAgXCJKdWxcIixcbiAgICAgICAgICAgICAgICBcIkF1Z1wiLFxuICAgICAgICAgICAgICAgIFwiU2VwXCIsXG4gICAgICAgICAgICAgICAgXCJPY3RcIixcbiAgICAgICAgICAgICAgICBcIk5vdlwiLFxuICAgICAgICAgICAgICAgIFwiRGVjXCIsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbG9uZ2hhbmQ6IFtcbiAgICAgICAgICAgICAgICBcIkphbnVhcnlcIixcbiAgICAgICAgICAgICAgICBcIkZlYnJ1YXJ5XCIsXG4gICAgICAgICAgICAgICAgXCJNYXJjaFwiLFxuICAgICAgICAgICAgICAgIFwiQXByaWxcIixcbiAgICAgICAgICAgICAgICBcIk1heVwiLFxuICAgICAgICAgICAgICAgIFwiSnVuZVwiLFxuICAgICAgICAgICAgICAgIFwiSnVseVwiLFxuICAgICAgICAgICAgICAgIFwiQXVndXN0XCIsXG4gICAgICAgICAgICAgICAgXCJTZXB0ZW1iZXJcIixcbiAgICAgICAgICAgICAgICBcIk9jdG9iZXJcIixcbiAgICAgICAgICAgICAgICBcIk5vdmVtYmVyXCIsXG4gICAgICAgICAgICAgICAgXCJEZWNlbWJlclwiLFxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBkYXlzSW5Nb250aDogWzMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdLFxuICAgICAgICBmaXJzdERheU9mV2VlazogMCxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG50aCkge1xuICAgICAgICAgICAgdmFyIHMgPSBudGggJSAxMDA7XG4gICAgICAgICAgICBpZiAocyA+IDMgJiYgcyA8IDIxKVxuICAgICAgICAgICAgICAgIHJldHVybiBcInRoXCI7XG4gICAgICAgICAgICBzd2l0Y2ggKHMgJSAxMCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic3RcIjtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm5kXCI7XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZFwiO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcInRoXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJhbmdlU2VwYXJhdG9yOiBcIiB0byBcIixcbiAgICAgICAgd2Vla0FiYnJldmlhdGlvbjogXCJXa1wiLFxuICAgICAgICBzY3JvbGxUaXRsZTogXCJTY3JvbGwgdG8gaW5jcmVtZW50XCIsXG4gICAgICAgIHRvZ2dsZVRpdGxlOiBcIkNsaWNrIHRvIHRvZ2dsZVwiLFxuICAgICAgICBhbVBNOiBbXCJBTVwiLCBcIlBNXCJdLFxuICAgICAgICB5ZWFyQXJpYUxhYmVsOiBcIlllYXJcIixcbiAgICAgICAgaG91ckFyaWFMYWJlbDogXCJIb3VyXCIsXG4gICAgICAgIG1pbnV0ZUFyaWFMYWJlbDogXCJNaW51dGVcIixcbiAgICAgICAgdGltZV8yNGhyOiBmYWxzZVxuICAgIH07XG5cbiAgICB2YXIgcGFkID0gZnVuY3Rpb24gKG51bWJlcikgeyByZXR1cm4gKFwiMFwiICsgbnVtYmVyKS5zbGljZSgtMik7IH07XG4gICAgdmFyIGludCA9IGZ1bmN0aW9uIChib29sKSB7IHJldHVybiAoYm9vbCA9PT0gdHJ1ZSA/IDEgOiAwKTsgfTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGZ1bmN0aW9uIGRlYm91bmNlKGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSkge1xuICAgICAgICBpZiAoaW1tZWRpYXRlID09PSB2b2lkIDApIHsgaW1tZWRpYXRlID0gZmFsc2U7IH1cbiAgICAgICAgdmFyIHRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICB0aW1lb3V0ICE9PSBudWxsICYmIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKCFpbW1lZGlhdGUpXG4gICAgICAgICAgICAgICAgICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgICAgICB9LCB3YWl0KTtcbiAgICAgICAgICAgIGlmIChpbW1lZGlhdGUgJiYgIXRpbWVvdXQpXG4gICAgICAgICAgICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdmFyIGFycmF5aWZ5ID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgQXJyYXkgPyBvYmogOiBbb2JqXTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gdG9nZ2xlQ2xhc3MoZWxlbSwgY2xhc3NOYW1lLCBib29sKSB7XG4gICAgICAgIGlmIChib29sID09PSB0cnVlKVxuICAgICAgICAgICAgcmV0dXJuIGVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xuICAgICAgICBlbGVtLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0YWcsIGNsYXNzTmFtZSwgY29udGVudCkge1xuICAgICAgICB2YXIgZSA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XG4gICAgICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZSB8fCBcIlwiO1xuICAgICAgICBjb250ZW50ID0gY29udGVudCB8fCBcIlwiO1xuICAgICAgICBlLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICAgICAgaWYgKGNvbnRlbnQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGUudGV4dENvbnRlbnQgPSBjb250ZW50O1xuICAgICAgICByZXR1cm4gZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2xlYXJOb2RlKG5vZGUpIHtcbiAgICAgICAgd2hpbGUgKG5vZGUuZmlyc3RDaGlsZClcbiAgICAgICAgICAgIG5vZGUucmVtb3ZlQ2hpbGQobm9kZS5maXJzdENoaWxkKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZFBhcmVudChub2RlLCBjb25kaXRpb24pIHtcbiAgICAgICAgaWYgKGNvbmRpdGlvbihub2RlKSlcbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICBlbHNlIGlmIChub2RlLnBhcmVudE5vZGUpXG4gICAgICAgICAgICByZXR1cm4gZmluZFBhcmVudChub2RlLnBhcmVudE5vZGUsIGNvbmRpdGlvbik7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7IC8vIG5vdGhpbmcgZm91bmRcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlTnVtYmVySW5wdXQoaW5wdXRDbGFzc05hbWUsIG9wdHMpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwibnVtSW5wdXRXcmFwcGVyXCIpLCBudW1JbnB1dCA9IGNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCBcIm51bUlucHV0IFwiICsgaW5wdXRDbGFzc05hbWUpLCBhcnJvd1VwID0gY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJhcnJvd1VwXCIpLCBhcnJvd0Rvd24gPSBjcmVhdGVFbGVtZW50KFwic3BhblwiLCBcImFycm93RG93blwiKTtcbiAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihcIk1TSUUgOS4wXCIpID09PSAtMSkge1xuICAgICAgICAgICAgbnVtSW5wdXQudHlwZSA9IFwibnVtYmVyXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBudW1JbnB1dC50eXBlID0gXCJ0ZXh0XCI7XG4gICAgICAgICAgICBudW1JbnB1dC5wYXR0ZXJuID0gXCJcXFxcZCpcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG9wdHMpXG4gICAgICAgICAgICAgICAgbnVtSW5wdXQuc2V0QXR0cmlidXRlKGtleSwgb3B0c1trZXldKTtcbiAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChudW1JbnB1dCk7XG4gICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoYXJyb3dVcCk7XG4gICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoYXJyb3dEb3duKTtcbiAgICAgICAgcmV0dXJuIHdyYXBwZXI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEV2ZW50VGFyZ2V0KGV2ZW50KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZXZlbnQuY29tcG9zZWRQYXRoID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHZhciBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG4gICAgICAgICAgICByZXR1cm4gcGF0aFswXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXZlbnQudGFyZ2V0O1xuICAgIH1cblxuICAgIHZhciBkb05vdGhpbmcgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB1bmRlZmluZWQ7IH07XG4gICAgdmFyIG1vbnRoVG9TdHIgPSBmdW5jdGlvbiAobW9udGhOdW1iZXIsIHNob3J0aGFuZCwgbG9jYWxlKSB7IHJldHVybiBsb2NhbGUubW9udGhzW3Nob3J0aGFuZCA/IFwic2hvcnRoYW5kXCIgOiBcImxvbmdoYW5kXCJdW21vbnRoTnVtYmVyXTsgfTtcbiAgICB2YXIgcmV2Rm9ybWF0ID0ge1xuICAgICAgICBEOiBkb05vdGhpbmcsXG4gICAgICAgIEY6IGZ1bmN0aW9uIChkYXRlT2JqLCBtb250aE5hbWUsIGxvY2FsZSkge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRNb250aChsb2NhbGUubW9udGhzLmxvbmdoYW5kLmluZGV4T2YobW9udGhOYW1lKSk7XG4gICAgICAgIH0sXG4gICAgICAgIEc6IGZ1bmN0aW9uIChkYXRlT2JqLCBob3VyKSB7XG4gICAgICAgICAgICBkYXRlT2JqLnNldEhvdXJzKHBhcnNlRmxvYXQoaG91cikpO1xuICAgICAgICB9LFxuICAgICAgICBIOiBmdW5jdGlvbiAoZGF0ZU9iaiwgaG91cikge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRIb3VycyhwYXJzZUZsb2F0KGhvdXIpKTtcbiAgICAgICAgfSxcbiAgICAgICAgSjogZnVuY3Rpb24gKGRhdGVPYmosIGRheSkge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXREYXRlKHBhcnNlRmxvYXQoZGF5KSk7XG4gICAgICAgIH0sXG4gICAgICAgIEs6IGZ1bmN0aW9uIChkYXRlT2JqLCBhbVBNLCBsb2NhbGUpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0SG91cnMoKGRhdGVPYmouZ2V0SG91cnMoKSAlIDEyKSArXG4gICAgICAgICAgICAgICAgMTIgKiBpbnQobmV3IFJlZ0V4cChsb2NhbGUuYW1QTVsxXSwgXCJpXCIpLnRlc3QoYW1QTSkpKTtcbiAgICAgICAgfSxcbiAgICAgICAgTTogZnVuY3Rpb24gKGRhdGVPYmosIHNob3J0TW9udGgsIGxvY2FsZSkge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRNb250aChsb2NhbGUubW9udGhzLnNob3J0aGFuZC5pbmRleE9mKHNob3J0TW9udGgpKTtcbiAgICAgICAgfSxcbiAgICAgICAgUzogZnVuY3Rpb24gKGRhdGVPYmosIHNlY29uZHMpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0U2Vjb25kcyhwYXJzZUZsb2F0KHNlY29uZHMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgVTogZnVuY3Rpb24gKF8sIHVuaXhTZWNvbmRzKSB7IHJldHVybiBuZXcgRGF0ZShwYXJzZUZsb2F0KHVuaXhTZWNvbmRzKSAqIDEwMDApOyB9LFxuICAgICAgICBXOiBmdW5jdGlvbiAoZGF0ZU9iaiwgd2Vla051bSwgbG9jYWxlKSB7XG4gICAgICAgICAgICB2YXIgd2Vla051bWJlciA9IHBhcnNlSW50KHdlZWtOdW0pO1xuICAgICAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShkYXRlT2JqLmdldEZ1bGxZZWFyKCksIDAsIDIgKyAod2Vla051bWJlciAtIDEpICogNywgMCwgMCwgMCwgMCk7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSBkYXRlLmdldERheSgpICsgbG9jYWxlLmZpcnN0RGF5T2ZXZWVrKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgICB9LFxuICAgICAgICBZOiBmdW5jdGlvbiAoZGF0ZU9iaiwgeWVhcikge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRGdWxsWWVhcihwYXJzZUZsb2F0KHllYXIpKTtcbiAgICAgICAgfSxcbiAgICAgICAgWjogZnVuY3Rpb24gKF8sIElTT0RhdGUpIHsgcmV0dXJuIG5ldyBEYXRlKElTT0RhdGUpOyB9LFxuICAgICAgICBkOiBmdW5jdGlvbiAoZGF0ZU9iaiwgZGF5KSB7XG4gICAgICAgICAgICBkYXRlT2JqLnNldERhdGUocGFyc2VGbG9hdChkYXkpKTtcbiAgICAgICAgfSxcbiAgICAgICAgaDogZnVuY3Rpb24gKGRhdGVPYmosIGhvdXIpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0SG91cnMocGFyc2VGbG9hdChob3VyKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGk6IGZ1bmN0aW9uIChkYXRlT2JqLCBtaW51dGVzKSB7XG4gICAgICAgICAgICBkYXRlT2JqLnNldE1pbnV0ZXMocGFyc2VGbG9hdChtaW51dGVzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGo6IGZ1bmN0aW9uIChkYXRlT2JqLCBkYXkpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0RGF0ZShwYXJzZUZsb2F0KGRheSkpO1xuICAgICAgICB9LFxuICAgICAgICBsOiBkb05vdGhpbmcsXG4gICAgICAgIG06IGZ1bmN0aW9uIChkYXRlT2JqLCBtb250aCkge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRNb250aChwYXJzZUZsb2F0KG1vbnRoKSAtIDEpO1xuICAgICAgICB9LFxuICAgICAgICBuOiBmdW5jdGlvbiAoZGF0ZU9iaiwgbW9udGgpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0TW9udGgocGFyc2VGbG9hdChtb250aCkgLSAxKTtcbiAgICAgICAgfSxcbiAgICAgICAgczogZnVuY3Rpb24gKGRhdGVPYmosIHNlY29uZHMpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0U2Vjb25kcyhwYXJzZUZsb2F0KHNlY29uZHMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgdTogZnVuY3Rpb24gKF8sIHVuaXhNaWxsU2Vjb25kcykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHBhcnNlRmxvYXQodW5peE1pbGxTZWNvbmRzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHc6IGRvTm90aGluZyxcbiAgICAgICAgeTogZnVuY3Rpb24gKGRhdGVPYmosIHllYXIpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0RnVsbFllYXIoMjAwMCArIHBhcnNlRmxvYXQoeWVhcikpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB2YXIgdG9rZW5SZWdleCA9IHtcbiAgICAgICAgRDogXCIoXFxcXHcrKVwiLFxuICAgICAgICBGOiBcIihcXFxcdyspXCIsXG4gICAgICAgIEc6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgICAgIEg6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgICAgIEo6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXFxcXHcrXCIsXG4gICAgICAgIEs6IFwiXCIsXG4gICAgICAgIE06IFwiKFxcXFx3KylcIixcbiAgICAgICAgUzogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICAgICAgVTogXCIoLispXCIsXG4gICAgICAgIFc6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgICAgIFk6IFwiKFxcXFxkezR9KVwiLFxuICAgICAgICBaOiBcIiguKylcIixcbiAgICAgICAgZDogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICAgICAgaDogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICAgICAgaTogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICAgICAgajogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICAgICAgbDogXCIoXFxcXHcrKVwiLFxuICAgICAgICBtOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgICAgICBuOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgICAgICBzOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgICAgICB1OiBcIiguKylcIixcbiAgICAgICAgdzogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICAgICAgeTogXCIoXFxcXGR7Mn0pXCJcbiAgICB9O1xuICAgIHZhciBmb3JtYXRzID0ge1xuICAgICAgICAvLyBnZXQgdGhlIGRhdGUgaW4gVVRDXG4gICAgICAgIFo6IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBkYXRlLnRvSVNPU3RyaW5nKCk7IH0sXG4gICAgICAgIC8vIHdlZWtkYXkgbmFtZSwgc2hvcnQsIGUuZy4gVGh1XG4gICAgICAgIEQ6IGZ1bmN0aW9uIChkYXRlLCBsb2NhbGUsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXMuc2hvcnRoYW5kW2Zvcm1hdHMudyhkYXRlLCBsb2NhbGUsIG9wdGlvbnMpXTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gZnVsbCBtb250aCBuYW1lIGUuZy4gSmFudWFyeVxuICAgICAgICBGOiBmdW5jdGlvbiAoZGF0ZSwgbG9jYWxlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gbW9udGhUb1N0cihmb3JtYXRzLm4oZGF0ZSwgbG9jYWxlLCBvcHRpb25zKSAtIDEsIGZhbHNlLCBsb2NhbGUpO1xuICAgICAgICB9LFxuICAgICAgICAvLyBwYWRkZWQgaG91ciAxLTEyXG4gICAgICAgIEc6IGZ1bmN0aW9uIChkYXRlLCBsb2NhbGUsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBwYWQoZm9ybWF0cy5oKGRhdGUsIGxvY2FsZSwgb3B0aW9ucykpO1xuICAgICAgICB9LFxuICAgICAgICAvLyBob3VycyB3aXRoIGxlYWRpbmcgemVybyBlLmcuIDAzXG4gICAgICAgIEg6IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBwYWQoZGF0ZS5nZXRIb3VycygpKTsgfSxcbiAgICAgICAgLy8gZGF5ICgxLTMwKSB3aXRoIG9yZGluYWwgc3VmZml4IGUuZy4gMXN0LCAybmRcbiAgICAgICAgSjogZnVuY3Rpb24gKGRhdGUsIGxvY2FsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS5vcmRpbmFsICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IGRhdGUuZ2V0RGF0ZSgpICsgbG9jYWxlLm9yZGluYWwoZGF0ZS5nZXREYXRlKCkpXG4gICAgICAgICAgICAgICAgOiBkYXRlLmdldERhdGUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gQU0vUE1cbiAgICAgICAgSzogZnVuY3Rpb24gKGRhdGUsIGxvY2FsZSkgeyByZXR1cm4gbG9jYWxlLmFtUE1baW50KGRhdGUuZ2V0SG91cnMoKSA+IDExKV07IH0sXG4gICAgICAgIC8vIHNob3J0aGFuZCBtb250aCBlLmcuIEphbiwgU2VwLCBPY3QsIGV0Y1xuICAgICAgICBNOiBmdW5jdGlvbiAoZGF0ZSwgbG9jYWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gbW9udGhUb1N0cihkYXRlLmdldE1vbnRoKCksIHRydWUsIGxvY2FsZSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIHNlY29uZHMgMDAtNTlcbiAgICAgICAgUzogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIHBhZChkYXRlLmdldFNlY29uZHMoKSk7IH0sXG4gICAgICAgIC8vIHVuaXggdGltZXN0YW1wXG4gICAgICAgIFU6IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBkYXRlLmdldFRpbWUoKSAvIDEwMDA7IH0sXG4gICAgICAgIFc6IGZ1bmN0aW9uIChkYXRlLCBfLCBvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5nZXRXZWVrKGRhdGUpO1xuICAgICAgICB9LFxuICAgICAgICAvLyBmdWxsIHllYXIgZS5nLiAyMDE2XG4gICAgICAgIFk6IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBkYXRlLmdldEZ1bGxZZWFyKCk7IH0sXG4gICAgICAgIC8vIGRheSBpbiBtb250aCwgcGFkZGVkICgwMS0zMClcbiAgICAgICAgZDogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIHBhZChkYXRlLmdldERhdGUoKSk7IH0sXG4gICAgICAgIC8vIGhvdXIgZnJvbSAxLTEyIChhbS9wbSlcbiAgICAgICAgaDogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIChkYXRlLmdldEhvdXJzKCkgJSAxMiA/IGRhdGUuZ2V0SG91cnMoKSAlIDEyIDogMTIpOyB9LFxuICAgICAgICAvLyBtaW51dGVzLCBwYWRkZWQgd2l0aCBsZWFkaW5nIHplcm8gZS5nLiAwOVxuICAgICAgICBpOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gcGFkKGRhdGUuZ2V0TWludXRlcygpKTsgfSxcbiAgICAgICAgLy8gZGF5IGluIG1vbnRoICgxLTMwKVxuICAgICAgICBqOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gZGF0ZS5nZXREYXRlKCk7IH0sXG4gICAgICAgIC8vIHdlZWtkYXkgbmFtZSwgZnVsbCwgZS5nLiBUaHVyc2RheVxuICAgICAgICBsOiBmdW5jdGlvbiAoZGF0ZSwgbG9jYWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzLmxvbmdoYW5kW2RhdGUuZ2V0RGF5KCldO1xuICAgICAgICB9LFxuICAgICAgICAvLyBwYWRkZWQgbW9udGggbnVtYmVyICgwMS0xMilcbiAgICAgICAgbTogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIHBhZChkYXRlLmdldE1vbnRoKCkgKyAxKTsgfSxcbiAgICAgICAgLy8gdGhlIG1vbnRoIG51bWJlciAoMS0xMilcbiAgICAgICAgbjogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIGRhdGUuZ2V0TW9udGgoKSArIDE7IH0sXG4gICAgICAgIC8vIHNlY29uZHMgMC01OVxuICAgICAgICBzOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gZGF0ZS5nZXRTZWNvbmRzKCk7IH0sXG4gICAgICAgIC8vIFVuaXggTWlsbGlzZWNvbmRzXG4gICAgICAgIHU6IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBkYXRlLmdldFRpbWUoKTsgfSxcbiAgICAgICAgLy8gbnVtYmVyIG9mIHRoZSBkYXkgb2YgdGhlIHdlZWtcbiAgICAgICAgdzogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIGRhdGUuZ2V0RGF5KCk7IH0sXG4gICAgICAgIC8vIGxhc3QgdHdvIGRpZ2l0cyBvZiB5ZWFyIGUuZy4gMTYgZm9yIDIwMTZcbiAgICAgICAgeTogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIFN0cmluZyhkYXRlLmdldEZ1bGxZZWFyKCkpLnN1YnN0cmluZygyKTsgfVxuICAgIH07XG5cbiAgICB2YXIgY3JlYXRlRGF0ZUZvcm1hdHRlciA9IGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgX2IgPSBfYS5jb25maWcsIGNvbmZpZyA9IF9iID09PSB2b2lkIDAgPyBkZWZhdWx0cyA6IF9iLCBfYyA9IF9hLmwxMG4sIGwxMG4gPSBfYyA9PT0gdm9pZCAwID8gZW5nbGlzaCA6IF9jO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGVPYmosIGZybXQsIG92ZXJyaWRlTG9jYWxlKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlID0gb3ZlcnJpZGVMb2NhbGUgfHwgbDEwbjtcbiAgICAgICAgICAgIGlmIChjb25maWcuZm9ybWF0RGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5mb3JtYXREYXRlKGRhdGVPYmosIGZybXQsIGxvY2FsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZnJtdFxuICAgICAgICAgICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGMsIGksIGFycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXRzW2NdICYmIGFycltpIC0gMV0gIT09IFwiXFxcXFwiXG4gICAgICAgICAgICAgICAgICAgID8gZm9ybWF0c1tjXShkYXRlT2JqLCBsb2NhbGUsIGNvbmZpZylcbiAgICAgICAgICAgICAgICAgICAgOiBjICE9PSBcIlxcXFxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyBjXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5qb2luKFwiXCIpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGNyZWF0ZURhdGVQYXJzZXIgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIF9iID0gX2EuY29uZmlnLCBjb25maWcgPSBfYiA9PT0gdm9pZCAwID8gZGVmYXVsdHMgOiBfYiwgX2MgPSBfYS5sMTBuLCBsMTBuID0gX2MgPT09IHZvaWQgMCA/IGVuZ2xpc2ggOiBfYztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChkYXRlLCBnaXZlbkZvcm1hdCwgdGltZWxlc3MsIGN1c3RvbUxvY2FsZSkge1xuICAgICAgICAgICAgaWYgKGRhdGUgIT09IDAgJiYgIWRhdGUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHZhciBsb2NhbGUgPSBjdXN0b21Mb2NhbGUgfHwgbDEwbjtcbiAgICAgICAgICAgIHZhciBwYXJzZWREYXRlO1xuICAgICAgICAgICAgdmFyIGRhdGVPcmlnID0gZGF0ZTtcbiAgICAgICAgICAgIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSlcbiAgICAgICAgICAgICAgICBwYXJzZWREYXRlID0gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGRhdGUgIT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgICAgICBkYXRlLnRvRml4ZWQgIT09IHVuZGVmaW5lZCAvLyB0aW1lc3RhbXBcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAvLyBjcmVhdGUgYSBjb3B5XG4gICAgICAgICAgICAgICAgcGFyc2VkRGF0ZSA9IG5ldyBEYXRlKGRhdGUpO1xuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGRhdGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBkYXRlIHN0cmluZ1xuICAgICAgICAgICAgICAgIHZhciBmb3JtYXQgPSBnaXZlbkZvcm1hdCB8fCAoY29uZmlnIHx8IGRlZmF1bHRzKS5kYXRlRm9ybWF0O1xuICAgICAgICAgICAgICAgIHZhciBkYXRlc3RyID0gU3RyaW5nKGRhdGUpLnRyaW0oKTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0ZXN0ciA9PT0gXCJ0b2RheVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aW1lbGVzcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKC9aJC8udGVzdChkYXRlc3RyKSB8fFxuICAgICAgICAgICAgICAgICAgICAvR01UJC8udGVzdChkYXRlc3RyKSAvLyBkYXRlc3RyaW5ncyB3LyB0aW1lem9uZVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkRGF0ZSA9IG5ldyBEYXRlKGRhdGUpO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbmZpZyAmJiBjb25maWcucGFyc2VEYXRlKVxuICAgICAgICAgICAgICAgICAgICBwYXJzZWREYXRlID0gY29uZmlnLnBhcnNlRGF0ZShkYXRlLCBmb3JtYXQpO1xuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwYXJzZWREYXRlID1cbiAgICAgICAgICAgICAgICAgICAgICAgICFjb25maWcgfHwgIWNvbmZpZy5ub0NhbGVuZGFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCksIDAsIDEsIDAsIDAsIDAsIDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBuZXcgRGF0ZShuZXcgRGF0ZSgpLnNldEhvdXJzKDAsIDAsIDAsIDApKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoZWQgPSB2b2lkIDAsIG9wcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbWF0Y2hJbmRleCA9IDAsIHJlZ2V4U3RyID0gXCJcIjsgaSA8IGZvcm1hdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VuXzEgPSBmb3JtYXRbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNCYWNrU2xhc2ggPSB0b2tlbl8xID09PSBcIlxcXFxcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlc2NhcGVkID0gZm9ybWF0W2kgLSAxXSA9PT0gXCJcXFxcXCIgfHwgaXNCYWNrU2xhc2g7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5SZWdleFt0b2tlbl8xXSAmJiAhZXNjYXBlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4U3RyICs9IHRva2VuUmVnZXhbdG9rZW5fMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gbmV3IFJlZ0V4cChyZWdleFN0cikuZXhlYyhkYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2ggJiYgKG1hdGNoZWQgPSB0cnVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHNbdG9rZW5fMSAhPT0gXCJZXCIgPyBcInB1c2hcIiA6IFwidW5zaGlmdFwiXSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbjogcmV2Rm9ybWF0W3Rva2VuXzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsOiBtYXRjaFsrK21hdGNoSW5kZXhdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpc0JhY2tTbGFzaClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdleFN0ciArPSBcIi5cIjsgLy8gZG9uJ3QgcmVhbGx5IGNhcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wcy5mb3JFYWNoKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbiA9IF9hLmZuLCB2YWwgPSBfYS52YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChwYXJzZWREYXRlID0gZm4ocGFyc2VkRGF0ZSwgdmFsLCBsb2NhbGUpIHx8IHBhcnNlZERhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkRGF0ZSA9IG1hdGNoZWQgPyBwYXJzZWREYXRlIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICBpZiAoIShwYXJzZWREYXRlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4ocGFyc2VkRGF0ZS5nZXRUaW1lKCkpKSkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5lcnJvckhhbmRsZXIobmV3IEVycm9yKFwiSW52YWxpZCBkYXRlIHByb3ZpZGVkOiBcIiArIGRhdGVPcmlnKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aW1lbGVzcyA9PT0gdHJ1ZSlcbiAgICAgICAgICAgICAgICBwYXJzZWREYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlZERhdGU7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBDb21wdXRlIHRoZSBkaWZmZXJlbmNlIGluIGRhdGVzLCBtZWFzdXJlZCBpbiBtc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBhcmVEYXRlcyhkYXRlMSwgZGF0ZTIsIHRpbWVsZXNzKSB7XG4gICAgICAgIGlmICh0aW1lbGVzcyA9PT0gdm9pZCAwKSB7IHRpbWVsZXNzID0gdHJ1ZTsgfVxuICAgICAgICBpZiAodGltZWxlc3MgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gKG5ldyBEYXRlKGRhdGUxLmdldFRpbWUoKSkuc2V0SG91cnMoMCwgMCwgMCwgMCkgLVxuICAgICAgICAgICAgICAgIG5ldyBEYXRlKGRhdGUyLmdldFRpbWUoKSkuc2V0SG91cnMoMCwgMCwgMCwgMCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRlMS5nZXRUaW1lKCkgLSBkYXRlMi5nZXRUaW1lKCk7XG4gICAgfVxuICAgIHZhciBpc0JldHdlZW4gPSBmdW5jdGlvbiAodHMsIHRzMSwgdHMyKSB7XG4gICAgICAgIHJldHVybiB0cyA+IE1hdGgubWluKHRzMSwgdHMyKSAmJiB0cyA8IE1hdGgubWF4KHRzMSwgdHMyKTtcbiAgICB9O1xuICAgIHZhciBkdXJhdGlvbiA9IHtcbiAgICAgICAgREFZOiA4NjQwMDAwMFxuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIE9iamVjdC5hc3NpZ24gIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBPYmplY3QuYXNzaWduID0gZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgYXJnc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhzb3VyY2UpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gKHRhcmdldFtrZXldID0gc291cmNlW2tleV0pOyB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZm9yICh2YXIgX2EgPSAwLCBhcmdzXzEgPSBhcmdzOyBfYSA8IGFyZ3NfMS5sZW5ndGg7IF9hKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgc291cmNlID0gYXJnc18xW19hXTtcbiAgICAgICAgICAgICAgICBfbG9vcF8xKHNvdXJjZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBERUJPVU5DRURfQ0hBTkdFX01TID0gMzAwO1xuICAgIGZ1bmN0aW9uIEZsYXRwaWNrckluc3RhbmNlKGVsZW1lbnQsIGluc3RhbmNlQ29uZmlnKSB7XG4gICAgICAgIHZhciBzZWxmID0ge1xuICAgICAgICAgICAgY29uZmlnOiBfX2Fzc2lnbih7fSwgZGVmYXVsdHMsIGZsYXRwaWNrci5kZWZhdWx0Q29uZmlnKSxcbiAgICAgICAgICAgIGwxMG46IGVuZ2xpc2hcbiAgICAgICAgfTtcbiAgICAgICAgc2VsZi5wYXJzZURhdGUgPSBjcmVhdGVEYXRlUGFyc2VyKHsgY29uZmlnOiBzZWxmLmNvbmZpZywgbDEwbjogc2VsZi5sMTBuIH0pO1xuICAgICAgICBzZWxmLl9oYW5kbGVycyA9IFtdO1xuICAgICAgICBzZWxmLnBsdWdpbkVsZW1lbnRzID0gW107XG4gICAgICAgIHNlbGYubG9hZGVkUGx1Z2lucyA9IFtdO1xuICAgICAgICBzZWxmLl9iaW5kID0gYmluZDtcbiAgICAgICAgc2VsZi5fc2V0SG91cnNGcm9tRGF0ZSA9IHNldEhvdXJzRnJvbURhdGU7XG4gICAgICAgIHNlbGYuX3Bvc2l0aW9uQ2FsZW5kYXIgPSBwb3NpdGlvbkNhbGVuZGFyO1xuICAgICAgICBzZWxmLmNoYW5nZU1vbnRoID0gY2hhbmdlTW9udGg7XG4gICAgICAgIHNlbGYuY2hhbmdlWWVhciA9IGNoYW5nZVllYXI7XG4gICAgICAgIHNlbGYuY2xlYXIgPSBjbGVhcjtcbiAgICAgICAgc2VsZi5jbG9zZSA9IGNsb3NlO1xuICAgICAgICBzZWxmLl9jcmVhdGVFbGVtZW50ID0gY3JlYXRlRWxlbWVudDtcbiAgICAgICAgc2VsZi5kZXN0cm95ID0gZGVzdHJveTtcbiAgICAgICAgc2VsZi5pc0VuYWJsZWQgPSBpc0VuYWJsZWQ7XG4gICAgICAgIHNlbGYuanVtcFRvRGF0ZSA9IGp1bXBUb0RhdGU7XG4gICAgICAgIHNlbGYub3BlbiA9IG9wZW47XG4gICAgICAgIHNlbGYucmVkcmF3ID0gcmVkcmF3O1xuICAgICAgICBzZWxmLnNldCA9IHNldDtcbiAgICAgICAgc2VsZi5zZXREYXRlID0gc2V0RGF0ZTtcbiAgICAgICAgc2VsZi50b2dnbGUgPSB0b2dnbGU7XG4gICAgICAgIGZ1bmN0aW9uIHNldHVwSGVscGVyRnVuY3Rpb25zKCkge1xuICAgICAgICAgICAgc2VsZi51dGlscyA9IHtcbiAgICAgICAgICAgICAgICBnZXREYXlzSW5Nb250aDogZnVuY3Rpb24gKG1vbnRoLCB5cikge1xuICAgICAgICAgICAgICAgICAgICBpZiAobW9udGggPT09IHZvaWQgMCkgeyBtb250aCA9IHNlbGYuY3VycmVudE1vbnRoOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh5ciA9PT0gdm9pZCAwKSB7IHlyID0gc2VsZi5jdXJyZW50WWVhcjsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobW9udGggPT09IDEgJiYgKCh5ciAlIDQgPT09IDAgJiYgeXIgJSAxMDAgIT09IDApIHx8IHlyICUgNDAwID09PSAwKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAyOTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYubDEwbi5kYXlzSW5Nb250aFttb250aF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgICAgICAgc2VsZi5lbGVtZW50ID0gc2VsZi5pbnB1dCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICBzZWxmLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgcGFyc2VDb25maWcoKTtcbiAgICAgICAgICAgIHNldHVwTG9jYWxlKCk7XG4gICAgICAgICAgICBzZXR1cElucHV0cygpO1xuICAgICAgICAgICAgc2V0dXBEYXRlcygpO1xuICAgICAgICAgICAgc2V0dXBIZWxwZXJGdW5jdGlvbnMoKTtcbiAgICAgICAgICAgIGlmICghc2VsZi5pc01vYmlsZSlcbiAgICAgICAgICAgICAgICBidWlsZCgpO1xuICAgICAgICAgICAgYmluZEV2ZW50cygpO1xuICAgICAgICAgICAgaWYgKHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggfHwgc2VsZi5jb25maWcubm9DYWxlbmRhcikge1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5lbmFibGVUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEhvdXJzRnJvbURhdGUoc2VsZi5jb25maWcubm9DYWxlbmRhclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiB8fCBzZWxmLmNvbmZpZy5taW5EYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHVwZGF0ZVZhbHVlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldENhbGVuZGFyV2lkdGgoKTtcbiAgICAgICAgICAgIHNlbGYuc2hvd1RpbWVJbnB1dCA9XG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA+IDAgfHwgc2VsZi5jb25maWcubm9DYWxlbmRhcjtcbiAgICAgICAgICAgIHZhciBpc1NhZmFyaSA9IC9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgICAgICAgICAvKiBUT0RPOiBpbnZlc3RpZ2F0ZSB0aGlzIGZ1cnRoZXJcbiAgICAgICAgXG4gICAgICAgICAgICAgIEN1cnJlbnRseSwgdGhlcmUgaXMgd2VpcmQgcG9zaXRpb25pbmcgYmVoYXZpb3IgaW4gc2FmYXJpIGNhdXNpbmcgcGFnZXNcbiAgICAgICAgICAgICAgdG8gc2Nyb2xsIHVwLiBodHRwczovL2dpdGh1Yi5jb20vY2htbG4vZmxhdHBpY2tyL2lzc3Vlcy81NjNcbiAgICAgICAgXG4gICAgICAgICAgICAgIEhvd2V2ZXIsIG1vc3QgYnJvd3NlcnMgYXJlIG5vdCBTYWZhcmkgYW5kIHBvc2l0aW9uaW5nIGlzIGV4cGVuc2l2ZSB3aGVuIHVzZWRcbiAgICAgICAgICAgICAgaW4gc2NhbGUuIGh0dHBzOi8vZ2l0aHViLmNvbS9jaG1sbi9mbGF0cGlja3IvaXNzdWVzLzEwOTZcbiAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAoIXNlbGYuaXNNb2JpbGUgJiYgaXNTYWZhcmkpIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbkNhbGVuZGFyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvblJlYWR5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJpbmRUb0luc3RhbmNlKGZuKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYmluZChzZWxmKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRDYWxlbmRhcldpZHRoKCkge1xuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IHNlbGYuY29uZmlnO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy53ZWVrTnVtYmVycyA9PT0gZmFsc2UgJiYgY29uZmlnLnNob3dNb250aHMgPT09IDEpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgZWxzZSBpZiAoY29uZmlnLm5vQ2FsZW5kYXIgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuY2FsZW5kYXJDb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5kYXlzQ29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXlzV2lkdGggPSAoc2VsZi5kYXlzLm9mZnNldFdpZHRoICsgMSkgKiBjb25maWcuc2hvd01vbnRocztcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF5c0NvbnRhaW5lci5zdHlsZS53aWR0aCA9IGRheXNXaWR0aCArIFwicHhcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUud2lkdGggPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheXNXaWR0aCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLndlZWtXcmFwcGVyICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi53ZWVrV3JhcHBlci5vZmZzZXRXaWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHhcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUucmVtb3ZlUHJvcGVydHkoXCJ2aXNpYmlsaXR5XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcImRpc3BsYXlcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGhhbmRsZXIgZm9yIGFsbCBldmVudHMgdGFyZ2V0aW5nIHRoZSB0aW1lIGlucHV0c1xuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlVGltZShlKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHNldERlZmF1bHRUaW1lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZSAhPT0gdW5kZWZpbmVkICYmIGUudHlwZSAhPT0gXCJibHVyXCIpIHtcbiAgICAgICAgICAgICAgICB0aW1lV3JhcHBlcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBwcmV2VmFsdWUgPSBzZWxmLl9pbnB1dC52YWx1ZTtcbiAgICAgICAgICAgIHNldEhvdXJzRnJvbUlucHV0cygpO1xuICAgICAgICAgICAgdXBkYXRlVmFsdWUoKTtcbiAgICAgICAgICAgIGlmIChzZWxmLl9pbnB1dC52YWx1ZSAhPT0gcHJldlZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5fZGVib3VuY2VkQ2hhbmdlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYW1wbTJtaWxpdGFyeShob3VyLCBhbVBNKSB7XG4gICAgICAgICAgICByZXR1cm4gKGhvdXIgJSAxMikgKyAxMiAqIGludChhbVBNID09PSBzZWxmLmwxMG4uYW1QTVsxXSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbWlsaXRhcnkyYW1wbShob3VyKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGhvdXIgJSAyNCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTI7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgJSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogU3luY3MgdGhlIHNlbGVjdGVkIGRhdGUgb2JqZWN0IHRpbWUgd2l0aCB1c2VyJ3MgdGltZSBpbnB1dFxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gc2V0SG91cnNGcm9tSW5wdXRzKCkge1xuICAgICAgICAgICAgaWYgKHNlbGYuaG91ckVsZW1lbnQgPT09IHVuZGVmaW5lZCB8fCBzZWxmLm1pbnV0ZUVsZW1lbnQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgaG91cnMgPSAocGFyc2VJbnQoc2VsZi5ob3VyRWxlbWVudC52YWx1ZS5zbGljZSgtMiksIDEwKSB8fCAwKSAlIDI0LCBtaW51dGVzID0gKHBhcnNlSW50KHNlbGYubWludXRlRWxlbWVudC52YWx1ZSwgMTApIHx8IDApICUgNjAsIHNlY29uZHMgPSBzZWxmLnNlY29uZEVsZW1lbnQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gKHBhcnNlSW50KHNlbGYuc2Vjb25kRWxlbWVudC52YWx1ZSwgMTApIHx8IDApICUgNjBcbiAgICAgICAgICAgICAgICA6IDA7XG4gICAgICAgICAgICBpZiAoc2VsZi5hbVBNICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBob3VycyA9IGFtcG0ybWlsaXRhcnkoaG91cnMsIHNlbGYuYW1QTS50ZXh0Q29udGVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgbGltaXRNaW5Ib3VycyA9IHNlbGYuY29uZmlnLm1pblRpbWUgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgIChzZWxmLmNvbmZpZy5taW5EYXRlICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYubWluRGF0ZUhhc1RpbWUgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogJiZcbiAgICAgICAgICAgICAgICAgICAgY29tcGFyZURhdGVzKHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqLCBzZWxmLmNvbmZpZy5taW5EYXRlLCB0cnVlKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgIDApO1xuICAgICAgICAgICAgdmFyIGxpbWl0TWF4SG91cnMgPSBzZWxmLmNvbmZpZy5tYXhUaW1lICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAoc2VsZi5jb25maWcubWF4RGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLm1heERhdGVIYXNUaW1lICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqICYmXG4gICAgICAgICAgICAgICAgICAgIGNvbXBhcmVEYXRlcyhzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiwgc2VsZi5jb25maWcubWF4RGF0ZSwgdHJ1ZSkgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAwKTtcbiAgICAgICAgICAgIGlmIChsaW1pdE1heEhvdXJzKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1heFRpbWUgPSBzZWxmLmNvbmZpZy5tYXhUaW1lICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5tYXhUaW1lXG4gICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcubWF4RGF0ZTtcbiAgICAgICAgICAgICAgICBob3VycyA9IE1hdGgubWluKGhvdXJzLCBtYXhUaW1lLmdldEhvdXJzKCkpO1xuICAgICAgICAgICAgICAgIGlmIChob3VycyA9PT0gbWF4VGltZS5nZXRIb3VycygpKVxuICAgICAgICAgICAgICAgICAgICBtaW51dGVzID0gTWF0aC5taW4obWludXRlcywgbWF4VGltZS5nZXRNaW51dGVzKCkpO1xuICAgICAgICAgICAgICAgIGlmIChtaW51dGVzID09PSBtYXhUaW1lLmdldE1pbnV0ZXMoKSlcbiAgICAgICAgICAgICAgICAgICAgc2Vjb25kcyA9IE1hdGgubWluKHNlY29uZHMsIG1heFRpbWUuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsaW1pdE1pbkhvdXJzKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1pblRpbWUgPSBzZWxmLmNvbmZpZy5taW5UaW1lICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5taW5UaW1lXG4gICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcubWluRGF0ZTtcbiAgICAgICAgICAgICAgICBob3VycyA9IE1hdGgubWF4KGhvdXJzLCBtaW5UaW1lLmdldEhvdXJzKCkpO1xuICAgICAgICAgICAgICAgIGlmIChob3VycyA9PT0gbWluVGltZS5nZXRIb3VycygpKVxuICAgICAgICAgICAgICAgICAgICBtaW51dGVzID0gTWF0aC5tYXgobWludXRlcywgbWluVGltZS5nZXRNaW51dGVzKCkpO1xuICAgICAgICAgICAgICAgIGlmIChtaW51dGVzID09PSBtaW5UaW1lLmdldE1pbnV0ZXMoKSlcbiAgICAgICAgICAgICAgICAgICAgc2Vjb25kcyA9IE1hdGgubWF4KHNlY29uZHMsIG1pblRpbWUuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldEhvdXJzKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogU3luY3MgdGltZSBpbnB1dCB2YWx1ZXMgd2l0aCBhIGRhdGVcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHNldEhvdXJzRnJvbURhdGUoZGF0ZU9iaikge1xuICAgICAgICAgICAgdmFyIGRhdGUgPSBkYXRlT2JqIHx8IHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqO1xuICAgICAgICAgICAgaWYgKGRhdGUpXG4gICAgICAgICAgICAgICAgc2V0SG91cnMoZGF0ZS5nZXRIb3VycygpLCBkYXRlLmdldE1pbnV0ZXMoKSwgZGF0ZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldERlZmF1bHRIb3VycygpIHtcbiAgICAgICAgICAgIHZhciBob3VycyA9IHNlbGYuY29uZmlnLmRlZmF1bHRIb3VyO1xuICAgICAgICAgICAgdmFyIG1pbnV0ZXMgPSBzZWxmLmNvbmZpZy5kZWZhdWx0TWludXRlO1xuICAgICAgICAgICAgdmFyIHNlY29uZHMgPSBzZWxmLmNvbmZpZy5kZWZhdWx0U2Vjb25kcztcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5taW5EYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWluSHIgPSBzZWxmLmNvbmZpZy5taW5EYXRlLmdldEhvdXJzKCk7XG4gICAgICAgICAgICAgICAgdmFyIG1pbk1pbnV0ZXMgPSBzZWxmLmNvbmZpZy5taW5EYXRlLmdldE1pbnV0ZXMoKTtcbiAgICAgICAgICAgICAgICBob3VycyA9IE1hdGgubWF4KGhvdXJzLCBtaW5Icik7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzID09PSBtaW5IcilcbiAgICAgICAgICAgICAgICAgICAgbWludXRlcyA9IE1hdGgubWF4KG1pbk1pbnV0ZXMsIG1pbnV0ZXMpO1xuICAgICAgICAgICAgICAgIGlmIChob3VycyA9PT0gbWluSHIgJiYgbWludXRlcyA9PT0gbWluTWludXRlcylcbiAgICAgICAgICAgICAgICAgICAgc2Vjb25kcyA9IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0U2Vjb25kcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1heERhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHZhciBtYXhIciA9IHNlbGYuY29uZmlnLm1heERhdGUuZ2V0SG91cnMoKTtcbiAgICAgICAgICAgICAgICB2YXIgbWF4TWludXRlcyA9IHNlbGYuY29uZmlnLm1heERhdGUuZ2V0TWludXRlcygpO1xuICAgICAgICAgICAgICAgIGhvdXJzID0gTWF0aC5taW4oaG91cnMsIG1heEhyKTtcbiAgICAgICAgICAgICAgICBpZiAoaG91cnMgPT09IG1heEhyKVxuICAgICAgICAgICAgICAgICAgICBtaW51dGVzID0gTWF0aC5taW4obWF4TWludXRlcywgbWludXRlcyk7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzID09PSBtYXhIciAmJiBtaW51dGVzID09PSBtYXhNaW51dGVzKVxuICAgICAgICAgICAgICAgICAgICBzZWNvbmRzID0gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRTZWNvbmRzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRIb3Vycyhob3VycywgbWludXRlcywgc2Vjb25kcyk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgdGhlIGhvdXJzLCBtaW51dGVzLCBhbmQgb3B0aW9uYWxseSBzZWNvbmRzXG4gICAgICAgICAqIG9mIHRoZSBsYXRlc3Qgc2VsZWN0ZWQgZGF0ZSBvYmplY3QgYW5kIHRoZVxuICAgICAgICAgKiBjb3JyZXNwb25kaW5nIHRpbWUgaW5wdXRzXG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBob3VycyB0aGUgaG91ci4gd2hldGhlciBpdHMgbWlsaXRhcnlcbiAgICAgICAgICogICAgICAgICAgICAgICAgIG9yIGFtLXBtIGdldHMgaW5mZXJyZWQgZnJvbSBjb25maWdcbiAgICAgICAgICogQHBhcmFtIHtOdW1iZXJ9IG1pbnV0ZXMgdGhlIG1pbnV0ZXNcbiAgICAgICAgICogQHBhcmFtIHtOdW1iZXJ9IHNlY29uZHMgdGhlIHNlY29uZHMgKG9wdGlvbmFsKVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmouc2V0SG91cnMoaG91cnMgJSAyNCwgbWludXRlcywgc2Vjb25kcyB8fCAwLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2VsZi5ob3VyRWxlbWVudCB8fCAhc2VsZi5taW51dGVFbGVtZW50IHx8IHNlbGYuaXNNb2JpbGUpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudC52YWx1ZSA9IHBhZCghc2VsZi5jb25maWcudGltZV8yNGhyXG4gICAgICAgICAgICAgICAgPyAoKDEyICsgaG91cnMpICUgMTIpICsgMTIgKiBpbnQoaG91cnMgJSAxMiA9PT0gMClcbiAgICAgICAgICAgICAgICA6IGhvdXJzKTtcbiAgICAgICAgICAgIHNlbGYubWludXRlRWxlbWVudC52YWx1ZSA9IHBhZChtaW51dGVzKTtcbiAgICAgICAgICAgIGlmIChzZWxmLmFtUE0gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBzZWxmLmFtUE0udGV4dENvbnRlbnQgPSBzZWxmLmwxMG4uYW1QTVtpbnQoaG91cnMgPj0gMTIpXTtcbiAgICAgICAgICAgIGlmIChzZWxmLnNlY29uZEVsZW1lbnQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBzZWxmLnNlY29uZEVsZW1lbnQudmFsdWUgPSBwYWQoc2Vjb25kcyk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEhhbmRsZXMgdGhlIHllYXIgaW5wdXQgYW5kIGluY3JlbWVudGluZyBldmVudHNcbiAgICAgICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQgdGhlIGtleXVwIG9yIGluY3JlbWVudCBldmVudFxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gb25ZZWFySW5wdXQoZXZlbnQpIHtcbiAgICAgICAgICAgIHZhciB5ZWFyID0gcGFyc2VJbnQoZXZlbnQudGFyZ2V0LnZhbHVlKSArIChldmVudC5kZWx0YSB8fCAwKTtcbiAgICAgICAgICAgIGlmICh5ZWFyIC8gMTAwMCA+IDEgfHxcbiAgICAgICAgICAgICAgICAoZXZlbnQua2V5ID09PSBcIkVudGVyXCIgJiYgIS9bXlxcZF0vLnRlc3QoeWVhci50b1N0cmluZygpKSkpIHtcbiAgICAgICAgICAgICAgICBjaGFuZ2VZZWFyKHllYXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFc3NlbnRpYWxseSBhZGRFdmVudExpc3RlbmVyICsgdHJhY2tpbmdcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IHRoZSBlbGVtZW50IHRvIGFkZEV2ZW50TGlzdGVuZXIgdG9cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IHRoZSBldmVudCBuYW1lXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgdGhlIGV2ZW50IGhhbmRsZXJcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGJpbmQoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgICAgICAgICAgIHJldHVybiBldmVudC5mb3JFYWNoKGZ1bmN0aW9uIChldikgeyByZXR1cm4gYmluZChlbGVtZW50LCBldiwgaGFuZGxlciwgb3B0aW9ucyk7IH0pO1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBBcnJheSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gYmluZChlbCwgZXZlbnQsIGhhbmRsZXIsIG9wdGlvbnMpOyB9KTtcbiAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlciwgb3B0aW9ucyk7XG4gICAgICAgICAgICBzZWxmLl9oYW5kbGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBoYW5kbGVyLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIG1vdXNlZG93biBoYW5kbGVyIHdoaWNoIG1pbWljcyBjbGljay5cbiAgICAgICAgICogTWluaW1pemVzIGxhdGVuY3ksIHNpbmNlIHdlIGRvbid0IG5lZWQgdG8gd2FpdCBmb3IgbW91c2V1cCBpbiBtb3N0IGNhc2VzLlxuICAgICAgICAgKiBBbHNvLCBhdm9pZHMgaGFuZGxpbmcgcmlnaHQgY2xpY2tzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIHRoZSBldmVudCBoYW5kbGVyXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBvbkNsaWNrKGhhbmRsZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICAgICAgICAgICAgZXZ0LndoaWNoID09PSAxICYmIGhhbmRsZXIoZXZ0KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdHJpZ2dlckNoYW5nZSgpIHtcbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uQ2hhbmdlXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBZGRzIGFsbCB0aGUgbmVjZXNzYXJ5IGV2ZW50IGxpc3RlbmVyc1xuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gYmluZEV2ZW50cygpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy53cmFwKSB7XG4gICAgICAgICAgICAgICAgW1wib3BlblwiLCBcImNsb3NlXCIsIFwidG9nZ2xlXCIsIFwiY2xlYXJcIl0uZm9yRWFjaChmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoc2VsZi5lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1cIiArIGV2dCArIFwiXVwiKSwgZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmluZChlbCwgXCJjbGlja1wiLCBzZWxmW2V2dF0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmlzTW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgc2V0dXBNb2JpbGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZGVib3VuY2VkUmVzaXplID0gZGVib3VuY2Uob25SZXNpemUsIDUwKTtcbiAgICAgICAgICAgIHNlbGYuX2RlYm91bmNlZENoYW5nZSA9IGRlYm91bmNlKHRyaWdnZXJDaGFuZ2UsIERFQk9VTkNFRF9DSEFOR0VfTVMpO1xuICAgICAgICAgICAgaWYgKHNlbGYuZGF5c0NvbnRhaW5lciAmJiAhL2lQaG9uZXxpUGFkfGlQb2QvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKVxuICAgICAgICAgICAgICAgIGJpbmQoc2VsZi5kYXlzQ29udGFpbmVyLCBcIm1vdXNlb3ZlclwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubW9kZSA9PT0gXCJyYW5nZVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgb25Nb3VzZU92ZXIoZS50YXJnZXQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYmluZCh3aW5kb3cuZG9jdW1lbnQuYm9keSwgXCJrZXlkb3duXCIsIG9uS2V5RG93bik7XG4gICAgICAgICAgICBpZiAoIXNlbGYuY29uZmlnLmlubGluZSAmJiAhc2VsZi5jb25maWcuc3RhdGljKVxuICAgICAgICAgICAgICAgIGJpbmQod2luZG93LCBcInJlc2l6ZVwiLCBkZWJvdW5jZWRSZXNpemUpO1xuICAgICAgICAgICAgaWYgKHdpbmRvdy5vbnRvdWNoc3RhcnQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBiaW5kKHdpbmRvdy5kb2N1bWVudCwgXCJ0b3VjaHN0YXJ0XCIsIGRvY3VtZW50Q2xpY2spO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGJpbmQod2luZG93LmRvY3VtZW50LCBcIm1vdXNlZG93blwiLCBvbkNsaWNrKGRvY3VtZW50Q2xpY2spKTtcbiAgICAgICAgICAgIGJpbmQod2luZG93LmRvY3VtZW50LCBcImZvY3VzXCIsIGRvY3VtZW50Q2xpY2ssIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5jbGlja09wZW5zID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgYmluZChzZWxmLl9pbnB1dCwgXCJmb2N1c1wiLCBzZWxmLm9wZW4pO1xuICAgICAgICAgICAgICAgIGJpbmQoc2VsZi5faW5wdXQsIFwibW91c2Vkb3duXCIsIG9uQ2xpY2soc2VsZi5vcGVuKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5kYXlzQ29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBiaW5kKHNlbGYubW9udGhOYXYsIFwibW91c2Vkb3duXCIsIG9uQ2xpY2sob25Nb250aE5hdkNsaWNrKSk7XG4gICAgICAgICAgICAgICAgYmluZChzZWxmLm1vbnRoTmF2LCBbXCJrZXl1cFwiLCBcImluY3JlbWVudFwiXSwgb25ZZWFySW5wdXQpO1xuICAgICAgICAgICAgICAgIGJpbmQoc2VsZi5kYXlzQ29udGFpbmVyLCBcIm1vdXNlZG93blwiLCBvbkNsaWNrKHNlbGVjdERhdGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLnRpbWVDb250YWluZXIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIHNlbGYubWludXRlRWxlbWVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNlbFRleHQgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS50YXJnZXQuc2VsZWN0KCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBiaW5kKHNlbGYudGltZUNvbnRhaW5lciwgW1wiaW5jcmVtZW50XCJdLCB1cGRhdGVUaW1lKTtcbiAgICAgICAgICAgICAgICBiaW5kKHNlbGYudGltZUNvbnRhaW5lciwgXCJibHVyXCIsIHVwZGF0ZVRpbWUsIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICBiaW5kKHNlbGYudGltZUNvbnRhaW5lciwgXCJtb3VzZWRvd25cIiwgb25DbGljayh0aW1lSW5jcmVtZW50KSk7XG4gICAgICAgICAgICAgICAgYmluZChbc2VsZi5ob3VyRWxlbWVudCwgc2VsZi5taW51dGVFbGVtZW50XSwgW1wiZm9jdXNcIiwgXCJjbGlja1wiXSwgc2VsVGV4dCk7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuc2Vjb25kRWxlbWVudCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBiaW5kKHNlbGYuc2Vjb25kRWxlbWVudCwgXCJmb2N1c1wiLCBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLnNlY29uZEVsZW1lbnQgJiYgc2VsZi5zZWNvbmRFbGVtZW50LnNlbGVjdCgpOyB9KTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5hbVBNICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYmluZChzZWxmLmFtUE0sIFwibW91c2Vkb3duXCIsIG9uQ2xpY2soZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVRpbWUoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldCB0aGUgY2FsZW5kYXIgdmlldyB0byBhIHBhcnRpY3VsYXIgZGF0ZS5cbiAgICAgICAgICogQHBhcmFtIHtEYXRlfSBqdW1wRGF0ZSB0aGUgZGF0ZSB0byBzZXQgdGhlIHZpZXcgdG9cbiAgICAgICAgICogQHBhcmFtIHtib29sZWFufSB0cmlnZ2VyQ2hhbmdlIGlmIGNoYW5nZSBldmVudHMgc2hvdWxkIGJlIHRyaWdnZXJlZFxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24ganVtcFRvRGF0ZShqdW1wRGF0ZSwgdHJpZ2dlckNoYW5nZSkge1xuICAgICAgICAgICAgdmFyIGp1bXBUbyA9IGp1bXBEYXRlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IHNlbGYucGFyc2VEYXRlKGp1bXBEYXRlKVxuICAgICAgICAgICAgICAgIDogc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogfHxcbiAgICAgICAgICAgICAgICAgICAgKHNlbGYuY29uZmlnLm1pbkRhdGUgJiYgc2VsZi5jb25maWcubWluRGF0ZSA+IHNlbGYubm93XG4gICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLm1pbkRhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcubWF4RGF0ZSAmJiBzZWxmLmNvbmZpZy5tYXhEYXRlIDwgc2VsZi5ub3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLm1heERhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNlbGYubm93KTtcbiAgICAgICAgICAgIHZhciBvbGRZZWFyID0gc2VsZi5jdXJyZW50WWVhcjtcbiAgICAgICAgICAgIHZhciBvbGRNb250aCA9IHNlbGYuY3VycmVudE1vbnRoO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoanVtcFRvICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9IGp1bXBUby5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRNb250aCA9IGp1bXBUby5nZXRNb250aCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgICAgICBlLm1lc3NhZ2UgPSBcIkludmFsaWQgZGF0ZSBzdXBwbGllZDogXCIgKyBqdW1wVG87XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcuZXJyb3JIYW5kbGVyKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRyaWdnZXJDaGFuZ2UgJiYgc2VsZi5jdXJyZW50WWVhciAhPT0gb2xkWWVhcikge1xuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uWWVhckNoYW5nZVwiKTtcbiAgICAgICAgICAgICAgICBidWlsZE1vbnRoU3dpdGNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSAmJlxuICAgICAgICAgICAgICAgIChzZWxmLmN1cnJlbnRZZWFyICE9PSBvbGRZZWFyIHx8IHNlbGYuY3VycmVudE1vbnRoICE9PSBvbGRNb250aCkpIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbk1vbnRoQ2hhbmdlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5yZWRyYXcoKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIHVwL2Rvd24gYXJyb3cgaGFuZGxlciBmb3IgdGltZSBpbnB1dHNcbiAgICAgICAgICogQHBhcmFtIHtFdmVudH0gZSB0aGUgY2xpY2sgZXZlbnRcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHRpbWVJbmNyZW1lbnQoZSkge1xuICAgICAgICAgICAgaWYgKH5lLnRhcmdldC5jbGFzc05hbWUuaW5kZXhPZihcImFycm93XCIpKVxuICAgICAgICAgICAgICAgIGluY3JlbWVudE51bUlucHV0KGUsIGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcImFycm93VXBcIikgPyAxIDogLTEpO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmNyZW1lbnRzL2RlY3JlbWVudHMgdGhlIHZhbHVlIG9mIGlucHV0IGFzc29jaS1cbiAgICAgICAgICogYXRlZCB3aXRoIHRoZSB1cC9kb3duIGFycm93IGJ5IGRpc3BhdGNoaW5nIGFuXG4gICAgICAgICAqIFwiaW5jcmVtZW50XCIgZXZlbnQgb24gdGhlIGlucHV0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0V2ZW50fSBlIHRoZSBjbGljayBldmVudFxuICAgICAgICAgKiBAcGFyYW0ge051bWJlcn0gZGVsdGEgdGhlIGRpZmYgKHVzdWFsbHkgMSBvciAtMSlcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBpbnB1dEVsZW0gdGhlIGlucHV0IGVsZW1lbnRcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGluY3JlbWVudE51bUlucHV0KGUsIGRlbHRhLCBpbnB1dEVsZW0pIHtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBlICYmIGUudGFyZ2V0O1xuICAgICAgICAgICAgdmFyIGlucHV0ID0gaW5wdXRFbGVtIHx8XG4gICAgICAgICAgICAgICAgKHRhcmdldCAmJiB0YXJnZXQucGFyZW50Tm9kZSAmJiB0YXJnZXQucGFyZW50Tm9kZS5maXJzdENoaWxkKTtcbiAgICAgICAgICAgIHZhciBldmVudCA9IGNyZWF0ZUV2ZW50KFwiaW5jcmVtZW50XCIpO1xuICAgICAgICAgICAgZXZlbnQuZGVsdGEgPSBkZWx0YTtcbiAgICAgICAgICAgIGlucHV0ICYmIGlucHV0LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkKCkge1xuICAgICAgICAgICAgdmFyIGZyYWdtZW50ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLWNhbGVuZGFyXCIpO1xuICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci50YWJJbmRleCA9IC0xO1xuICAgICAgICAgICAgaWYgKCFzZWxmLmNvbmZpZy5ub0NhbGVuZGFyKSB7XG4gICAgICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoYnVpbGRNb250aE5hdigpKTtcbiAgICAgICAgICAgICAgICBzZWxmLmlubmVyQ29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci1pbm5lckNvbnRhaW5lclwiKTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcud2Vla051bWJlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hID0gYnVpbGRXZWVrcygpLCB3ZWVrV3JhcHBlciA9IF9hLndlZWtXcmFwcGVyLCB3ZWVrTnVtYmVycyA9IF9hLndlZWtOdW1iZXJzO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmlubmVyQ29udGFpbmVyLmFwcGVuZENoaWxkKHdlZWtXcmFwcGVyKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi53ZWVrTnVtYmVycyA9IHdlZWtOdW1iZXJzO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLndlZWtXcmFwcGVyID0gd2Vla1dyYXBwZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlbGYuckNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3ItckNvbnRhaW5lclwiKTtcbiAgICAgICAgICAgICAgICBzZWxmLnJDb250YWluZXIuYXBwZW5kQ2hpbGQoYnVpbGRXZWVrZGF5cygpKTtcbiAgICAgICAgICAgICAgICBpZiAoIXNlbGYuZGF5c0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmRheXNDb250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLWRheXNcIik7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZGF5c0NvbnRhaW5lci50YWJJbmRleCA9IC0xO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBidWlsZERheXMoKTtcbiAgICAgICAgICAgICAgICBzZWxmLnJDb250YWluZXIuYXBwZW5kQ2hpbGQoc2VsZi5kYXlzQ29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICBzZWxmLmlubmVyQ29udGFpbmVyLmFwcGVuZENoaWxkKHNlbGYuckNvbnRhaW5lcik7XG4gICAgICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoc2VsZi5pbm5lckNvbnRhaW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuZW5hYmxlVGltZSkge1xuICAgICAgICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGJ1aWxkVGltZSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwicmFuZ2VNb2RlXCIsIHNlbGYuY29uZmlnLm1vZGUgPT09IFwicmFuZ2VcIik7XG4gICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcImFuaW1hdGVcIiwgc2VsZi5jb25maWcuYW5pbWF0ZSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcIm11bHRpTW9udGhcIiwgc2VsZi5jb25maWcuc2hvd01vbnRocyA+IDEpO1xuICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG4gICAgICAgICAgICB2YXIgY3VzdG9tQXBwZW5kID0gc2VsZi5jb25maWcuYXBwZW5kVG8gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmFwcGVuZFRvLm5vZGVUeXBlICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuaW5saW5lIHx8IHNlbGYuY29uZmlnLnN0YXRpYykge1xuICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuY2xhc3NMaXN0LmFkZChzZWxmLmNvbmZpZy5pbmxpbmUgPyBcImlubGluZVwiIDogXCJzdGF0aWNcIik7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmlubGluZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWN1c3RvbUFwcGVuZCAmJiBzZWxmLmVsZW1lbnQucGFyZW50Tm9kZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBzZWxmLl9pbnB1dC5uZXh0U2libGluZyk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNlbGYuY29uZmlnLmFwcGVuZFRvICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5hcHBlbmRUby5hcHBlbmRDaGlsZChzZWxmLmNhbGVuZGFyQ29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLnN0YXRpYykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgd3JhcHBlciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3Itd3JhcHBlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuZWxlbWVudC5wYXJlbnROb2RlKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHdyYXBwZXIsIHNlbGYuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoc2VsZi5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuYWx0SW5wdXQpXG4gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHNlbGYuYWx0SW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHNlbGYuY2FsZW5kYXJDb250YWluZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2VsZi5jb25maWcuc3RhdGljICYmICFzZWxmLmNvbmZpZy5pbmxpbmUpXG4gICAgICAgICAgICAgICAgKHNlbGYuY29uZmlnLmFwcGVuZFRvICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5hcHBlbmRUb1xuICAgICAgICAgICAgICAgICAgICA6IHdpbmRvdy5kb2N1bWVudC5ib2R5KS5hcHBlbmRDaGlsZChzZWxmLmNhbGVuZGFyQ29udGFpbmVyKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjcmVhdGVEYXkoY2xhc3NOYW1lLCBkYXRlLCBkYXlOdW1iZXIsIGkpIHtcbiAgICAgICAgICAgIHZhciBkYXRlSXNFbmFibGVkID0gaXNFbmFibGVkKGRhdGUsIHRydWUpLCBkYXlFbGVtZW50ID0gY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJmbGF0cGlja3ItZGF5IFwiICsgY2xhc3NOYW1lLCBkYXRlLmdldERhdGUoKS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIGRheUVsZW1lbnQuZGF0ZU9iaiA9IGRhdGU7XG4gICAgICAgICAgICBkYXlFbGVtZW50LiRpID0gaTtcbiAgICAgICAgICAgIGRheUVsZW1lbnQuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLCBzZWxmLmZvcm1hdERhdGUoZGF0ZSwgc2VsZi5jb25maWcuYXJpYURhdGVGb3JtYXQpKTtcbiAgICAgICAgICAgIGlmIChjbGFzc05hbWUuaW5kZXhPZihcImhpZGRlblwiKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICBjb21wYXJlRGF0ZXMoZGF0ZSwgc2VsZi5ub3cpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc2VsZi50b2RheURhdGVFbGVtID0gZGF5RWxlbWVudDtcbiAgICAgICAgICAgICAgICBkYXlFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJ0b2RheVwiKTtcbiAgICAgICAgICAgICAgICBkYXlFbGVtZW50LnNldEF0dHJpYnV0ZShcImFyaWEtY3VycmVudFwiLCBcImRhdGVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0ZUlzRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIGRheUVsZW1lbnQudGFiSW5kZXggPSAtMTtcbiAgICAgICAgICAgICAgICBpZiAoaXNEYXRlU2VsZWN0ZWQoZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF5RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwic2VsZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlRWxlbSA9IGRheUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKGRheUVsZW1lbnQsIFwic3RhcnRSYW5nZVwiLCBzZWxmLnNlbGVjdGVkRGF0ZXNbMF0gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlRGF0ZXMoZGF0ZSwgc2VsZi5zZWxlY3RlZERhdGVzWzBdLCB0cnVlKSA9PT0gMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyhkYXlFbGVtZW50LCBcImVuZFJhbmdlXCIsIHNlbGYuc2VsZWN0ZWREYXRlc1sxXSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVEYXRlcyhkYXRlLCBzZWxmLnNlbGVjdGVkRGF0ZXNbMV0sIHRydWUpID09PSAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbGFzc05hbWUgPT09IFwibmV4dE1vbnRoRGF5XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiaW5SYW5nZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRheUVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImZsYXRwaWNrci1kaXNhYmxlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNEYXRlSW5SYW5nZShkYXRlKSAmJiAhaXNEYXRlU2VsZWN0ZWQoZGF0ZSkpXG4gICAgICAgICAgICAgICAgICAgIGRheUVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImluUmFuZ2VcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi53ZWVrTnVtYmVycyAmJlxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLnNob3dNb250aHMgPT09IDEgJiZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWUgIT09IFwicHJldk1vbnRoRGF5XCIgJiZcbiAgICAgICAgICAgICAgICBkYXlOdW1iZXIgJSA3ID09PSAxKSB7XG4gICAgICAgICAgICAgICAgc2VsZi53ZWVrTnVtYmVycy5pbnNlcnRBZGphY2VudEhUTUwoXCJiZWZvcmVlbmRcIiwgXCI8c3BhbiBjbGFzcz0nZmxhdHBpY2tyLWRheSc+XCIgKyBzZWxmLmNvbmZpZy5nZXRXZWVrKGRhdGUpICsgXCI8L3NwYW4+XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25EYXlDcmVhdGVcIiwgZGF5RWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm4gZGF5RWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBmb2N1c09uRGF5RWxlbSh0YXJnZXROb2RlKSB7XG4gICAgICAgICAgICB0YXJnZXROb2RlLmZvY3VzKCk7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubW9kZSA9PT0gXCJyYW5nZVwiKVxuICAgICAgICAgICAgICAgIG9uTW91c2VPdmVyKHRhcmdldE5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGdldEZpcnN0QXZhaWxhYmxlRGF5KGRlbHRhKSB7XG4gICAgICAgICAgICB2YXIgc3RhcnRNb250aCA9IGRlbHRhID4gMCA/IDAgOiBzZWxmLmNvbmZpZy5zaG93TW9udGhzIC0gMTtcbiAgICAgICAgICAgIHZhciBlbmRNb250aCA9IGRlbHRhID4gMCA/IHNlbGYuY29uZmlnLnNob3dNb250aHMgOiAtMTtcbiAgICAgICAgICAgIGZvciAodmFyIG0gPSBzdGFydE1vbnRoOyBtICE9IGVuZE1vbnRoOyBtICs9IGRlbHRhKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1vbnRoID0gc2VsZi5kYXlzQ29udGFpbmVyLmNoaWxkcmVuW21dO1xuICAgICAgICAgICAgICAgIHZhciBzdGFydEluZGV4ID0gZGVsdGEgPiAwID8gMCA6IG1vbnRoLmNoaWxkcmVuLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgdmFyIGVuZEluZGV4ID0gZGVsdGEgPiAwID8gbW9udGguY2hpbGRyZW4ubGVuZ3RoIDogLTE7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXg7IGkgIT0gZW5kSW5kZXg7IGkgKz0gZGVsdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSBtb250aC5jaGlsZHJlbltpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMuY2xhc3NOYW1lLmluZGV4T2YoXCJoaWRkZW5cIikgPT09IC0xICYmIGlzRW5hYmxlZChjLmRhdGVPYmopKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBnZXROZXh0QXZhaWxhYmxlRGF5KGN1cnJlbnQsIGRlbHRhKSB7XG4gICAgICAgICAgICB2YXIgZ2l2ZW5Nb250aCA9IGN1cnJlbnQuY2xhc3NOYW1lLmluZGV4T2YoXCJNb250aFwiKSA9PT0gLTFcbiAgICAgICAgICAgICAgICA/IGN1cnJlbnQuZGF0ZU9iai5nZXRNb250aCgpXG4gICAgICAgICAgICAgICAgOiBzZWxmLmN1cnJlbnRNb250aDtcbiAgICAgICAgICAgIHZhciBlbmRNb250aCA9IGRlbHRhID4gMCA/IHNlbGYuY29uZmlnLnNob3dNb250aHMgOiAtMTtcbiAgICAgICAgICAgIHZhciBsb29wRGVsdGEgPSBkZWx0YSA+IDAgPyAxIDogLTE7XG4gICAgICAgICAgICBmb3IgKHZhciBtID0gZ2l2ZW5Nb250aCAtIHNlbGYuY3VycmVudE1vbnRoOyBtICE9IGVuZE1vbnRoOyBtICs9IGxvb3BEZWx0YSkge1xuICAgICAgICAgICAgICAgIHZhciBtb250aCA9IHNlbGYuZGF5c0NvbnRhaW5lci5jaGlsZHJlblttXTtcbiAgICAgICAgICAgICAgICB2YXIgc3RhcnRJbmRleCA9IGdpdmVuTW9udGggLSBzZWxmLmN1cnJlbnRNb250aCA9PT0gbVxuICAgICAgICAgICAgICAgICAgICA/IGN1cnJlbnQuJGkgKyBkZWx0YVxuICAgICAgICAgICAgICAgICAgICA6IGRlbHRhIDwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBtb250aC5jaGlsZHJlbi5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA6IDA7XG4gICAgICAgICAgICAgICAgdmFyIG51bU1vbnRoRGF5cyA9IG1vbnRoLmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleDsgaSA+PSAwICYmIGkgPCBudW1Nb250aERheXMgJiYgaSAhPSAoZGVsdGEgPiAwID8gbnVtTW9udGhEYXlzIDogLTEpOyBpICs9IGxvb3BEZWx0YSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IG1vbnRoLmNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYy5jbGFzc05hbWUuaW5kZXhPZihcImhpZGRlblwiKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRW5hYmxlZChjLmRhdGVPYmopICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBNYXRoLmFicyhjdXJyZW50LiRpIC0gaSkgPj0gTWF0aC5hYnMoZGVsdGEpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvY3VzT25EYXlFbGVtKGMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYuY2hhbmdlTW9udGgobG9vcERlbHRhKTtcbiAgICAgICAgICAgIGZvY3VzT25EYXkoZ2V0Rmlyc3RBdmFpbGFibGVEYXkobG9vcERlbHRhKSwgMCk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGZvY3VzT25EYXkoY3VycmVudCwgb2Zmc2V0KSB7XG4gICAgICAgICAgICB2YXIgZGF5Rm9jdXNlZCA9IGlzSW5WaWV3KGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keSk7XG4gICAgICAgICAgICB2YXIgc3RhcnRFbGVtID0gY3VycmVudCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBjdXJyZW50XG4gICAgICAgICAgICAgICAgOiBkYXlGb2N1c2VkXG4gICAgICAgICAgICAgICAgICAgID8gZG9jdW1lbnQuYWN0aXZlRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICA6IHNlbGYuc2VsZWN0ZWREYXRlRWxlbSAhPT0gdW5kZWZpbmVkICYmIGlzSW5WaWV3KHNlbGYuc2VsZWN0ZWREYXRlRWxlbSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi5zZWxlY3RlZERhdGVFbGVtXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHNlbGYudG9kYXlEYXRlRWxlbSAhPT0gdW5kZWZpbmVkICYmIGlzSW5WaWV3KHNlbGYudG9kYXlEYXRlRWxlbSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGYudG9kYXlEYXRlRWxlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZ2V0Rmlyc3RBdmFpbGFibGVEYXkob2Zmc2V0ID4gMCA/IDEgOiAtMSk7XG4gICAgICAgICAgICBpZiAoc3RhcnRFbGVtID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2lucHV0LmZvY3VzKCk7XG4gICAgICAgICAgICBpZiAoIWRheUZvY3VzZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvY3VzT25EYXlFbGVtKHN0YXJ0RWxlbSk7XG4gICAgICAgICAgICBnZXROZXh0QXZhaWxhYmxlRGF5KHN0YXJ0RWxlbSwgb2Zmc2V0KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBidWlsZE1vbnRoRGF5cyh5ZWFyLCBtb250aCkge1xuICAgICAgICAgICAgdmFyIGZpcnN0T2ZNb250aCA9IChuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSkuZ2V0RGF5KCkgLSBzZWxmLmwxMG4uZmlyc3REYXlPZldlZWsgKyA3KSAlIDc7XG4gICAgICAgICAgICB2YXIgcHJldk1vbnRoRGF5cyA9IHNlbGYudXRpbHMuZ2V0RGF5c0luTW9udGgoKG1vbnRoIC0gMSArIDEyKSAlIDEyKTtcbiAgICAgICAgICAgIHZhciBkYXlzSW5Nb250aCA9IHNlbGYudXRpbHMuZ2V0RGF5c0luTW9udGgobW9udGgpLCBkYXlzID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwgaXNNdWx0aU1vbnRoID0gc2VsZi5jb25maWcuc2hvd01vbnRocyA+IDEsIHByZXZNb250aERheUNsYXNzID0gaXNNdWx0aU1vbnRoID8gXCJwcmV2TW9udGhEYXkgaGlkZGVuXCIgOiBcInByZXZNb250aERheVwiLCBuZXh0TW9udGhEYXlDbGFzcyA9IGlzTXVsdGlNb250aCA/IFwibmV4dE1vbnRoRGF5IGhpZGRlblwiIDogXCJuZXh0TW9udGhEYXlcIjtcbiAgICAgICAgICAgIHZhciBkYXlOdW1iZXIgPSBwcmV2TW9udGhEYXlzICsgMSAtIGZpcnN0T2ZNb250aCwgZGF5SW5kZXggPSAwO1xuICAgICAgICAgICAgLy8gcHJlcGVuZCBkYXlzIGZyb20gdGhlIGVuZGluZyBvZiBwcmV2aW91cyBtb250aFxuICAgICAgICAgICAgZm9yICg7IGRheU51bWJlciA8PSBwcmV2TW9udGhEYXlzOyBkYXlOdW1iZXIrKywgZGF5SW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGRheXMuYXBwZW5kQ2hpbGQoY3JlYXRlRGF5KHByZXZNb250aERheUNsYXNzLCBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheU51bWJlciksIGRheU51bWJlciwgZGF5SW5kZXgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFN0YXJ0IGF0IDEgc2luY2UgdGhlcmUgaXMgbm8gMHRoIGRheVxuICAgICAgICAgICAgZm9yIChkYXlOdW1iZXIgPSAxOyBkYXlOdW1iZXIgPD0gZGF5c0luTW9udGg7IGRheU51bWJlcisrLCBkYXlJbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgZGF5cy5hcHBlbmRDaGlsZChjcmVhdGVEYXkoXCJcIiwgbmV3IERhdGUoeWVhciwgbW9udGgsIGRheU51bWJlciksIGRheU51bWJlciwgZGF5SW5kZXgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGFwcGVuZCBkYXlzIGZyb20gdGhlIG5leHQgbW9udGhcbiAgICAgICAgICAgIGZvciAodmFyIGRheU51bSA9IGRheXNJbk1vbnRoICsgMTsgZGF5TnVtIDw9IDQyIC0gZmlyc3RPZk1vbnRoICYmXG4gICAgICAgICAgICAgICAgKHNlbGYuY29uZmlnLnNob3dNb250aHMgPT09IDEgfHwgZGF5SW5kZXggJSA3ICE9PSAwKTsgZGF5TnVtKyssIGRheUluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBkYXlzLmFwcGVuZENoaWxkKGNyZWF0ZURheShuZXh0TW9udGhEYXlDbGFzcywgbmV3IERhdGUoeWVhciwgbW9udGggKyAxLCBkYXlOdW0gJSBkYXlzSW5Nb250aCksIGRheU51bSwgZGF5SW5kZXgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vdXBkYXRlTmF2aWdhdGlvbkN1cnJlbnRNb250aCgpO1xuICAgICAgICAgICAgdmFyIGRheUNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJkYXlDb250YWluZXJcIik7XG4gICAgICAgICAgICBkYXlDb250YWluZXIuYXBwZW5kQ2hpbGQoZGF5cyk7XG4gICAgICAgICAgICByZXR1cm4gZGF5Q29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkRGF5cygpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmRheXNDb250YWluZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNsZWFyTm9kZShzZWxmLmRheXNDb250YWluZXIpO1xuICAgICAgICAgICAgLy8gVE9ETzogd2VlayBudW1iZXJzIGZvciBlYWNoIG1vbnRoXG4gICAgICAgICAgICBpZiAoc2VsZi53ZWVrTnVtYmVycylcbiAgICAgICAgICAgICAgICBjbGVhck5vZGUoc2VsZi53ZWVrTnVtYmVycyk7XG4gICAgICAgICAgICB2YXIgZnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZi5jb25maWcuc2hvd01vbnRoczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGQgPSBuZXcgRGF0ZShzZWxmLmN1cnJlbnRZZWFyLCBzZWxmLmN1cnJlbnRNb250aCwgMSk7XG4gICAgICAgICAgICAgICAgZC5zZXRNb250aChzZWxmLmN1cnJlbnRNb250aCArIGkpO1xuICAgICAgICAgICAgICAgIGZyYWcuYXBwZW5kQ2hpbGQoYnVpbGRNb250aERheXMoZC5nZXRGdWxsWWVhcigpLCBkLmdldE1vbnRoKCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYuZGF5c0NvbnRhaW5lci5hcHBlbmRDaGlsZChmcmFnKTtcbiAgICAgICAgICAgIHNlbGYuZGF5cyA9IHNlbGYuZGF5c0NvbnRhaW5lci5maXJzdENoaWxkO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1vZGUgPT09IFwicmFuZ2VcIiAmJiBzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgb25Nb3VzZU92ZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBidWlsZE1vbnRoU3dpdGNoKCkge1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLnNob3dNb250aHMgPiAxIHx8XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcubW9udGhTZWxlY3RvclR5cGUgIT09IFwiZHJvcGRvd25cIilcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgc2hvdWxkQnVpbGRNb250aCA9IGZ1bmN0aW9uIChtb250aCkge1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5taW5EYXRlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9PT0gc2VsZi5jb25maWcubWluRGF0ZS5nZXRGdWxsWWVhcigpICYmXG4gICAgICAgICAgICAgICAgICAgIG1vbnRoIDwgc2VsZi5jb25maWcubWluRGF0ZS5nZXRNb250aCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICEoc2VsZi5jb25maWcubWF4RGF0ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXIgPT09IHNlbGYuY29uZmlnLm1heERhdGUuZ2V0RnVsbFllYXIoKSAmJlxuICAgICAgICAgICAgICAgICAgICBtb250aCA+IHNlbGYuY29uZmlnLm1heERhdGUuZ2V0TW9udGgoKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgc2VsZi5tb250aHNEcm9wZG93bkNvbnRhaW5lci50YWJJbmRleCA9IC0xO1xuICAgICAgICAgICAgc2VsZi5tb250aHNEcm9wZG93bkNvbnRhaW5lci5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzaG91bGRCdWlsZE1vbnRoKGkpKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB2YXIgbW9udGggPSBjcmVhdGVFbGVtZW50KFwib3B0aW9uXCIsIFwiZmxhdHBpY2tyLW1vbnRoRHJvcGRvd24tbW9udGhcIik7XG4gICAgICAgICAgICAgICAgbW9udGgudmFsdWUgPSBuZXcgRGF0ZShzZWxmLmN1cnJlbnRZZWFyLCBpKS5nZXRNb250aCgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgbW9udGgudGV4dENvbnRlbnQgPSBtb250aFRvU3RyKGksIHNlbGYuY29uZmlnLnNob3J0aGFuZEN1cnJlbnRNb250aCwgc2VsZi5sMTBuKTtcbiAgICAgICAgICAgICAgICBtb250aC50YWJJbmRleCA9IC0xO1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmN1cnJlbnRNb250aCA9PT0gaSkge1xuICAgICAgICAgICAgICAgICAgICBtb250aC5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlbGYubW9udGhzRHJvcGRvd25Db250YWluZXIuYXBwZW5kQ2hpbGQobW9udGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkTW9udGgoKSB7XG4gICAgICAgICAgICB2YXIgY29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci1tb250aFwiKTtcbiAgICAgICAgICAgIHZhciBtb250aE5hdkZyYWdtZW50ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgICAgIHZhciBtb250aEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuc2hvd01vbnRocyA+IDEgfHxcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5tb250aFNlbGVjdG9yVHlwZSA9PT0gXCJzdGF0aWNcIikge1xuICAgICAgICAgICAgICAgIG1vbnRoRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiY3VyLW1vbnRoXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2VsZi5tb250aHNEcm9wZG93bkNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIiwgXCJmbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aHNcIik7XG4gICAgICAgICAgICAgICAgYmluZChzZWxmLm1vbnRoc0Ryb3Bkb3duQ29udGFpbmVyLCBcImNoYW5nZVwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gZS50YXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3RlZE1vbnRoID0gcGFyc2VJbnQodGFyZ2V0LnZhbHVlLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY2hhbmdlTW9udGgoc2VsZWN0ZWRNb250aCAtIHNlbGYuY3VycmVudE1vbnRoKTtcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25Nb250aENoYW5nZVwiKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBidWlsZE1vbnRoU3dpdGNoKCk7XG4gICAgICAgICAgICAgICAgbW9udGhFbGVtZW50ID0gc2VsZi5tb250aHNEcm9wZG93bkNvbnRhaW5lcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB5ZWFySW5wdXQgPSBjcmVhdGVOdW1iZXJJbnB1dChcImN1ci15ZWFyXCIsIHsgdGFiaW5kZXg6IFwiLTFcIiB9KTtcbiAgICAgICAgICAgIHZhciB5ZWFyRWxlbWVudCA9IHllYXJJbnB1dC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlucHV0XCIpWzBdO1xuICAgICAgICAgICAgeWVhckVsZW1lbnQuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLCBzZWxmLmwxMG4ueWVhckFyaWFMYWJlbCk7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubWluRGF0ZSkge1xuICAgICAgICAgICAgICAgIHllYXJFbGVtZW50LnNldEF0dHJpYnV0ZShcIm1pblwiLCBzZWxmLmNvbmZpZy5taW5EYXRlLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubWF4RGF0ZSkge1xuICAgICAgICAgICAgICAgIHllYXJFbGVtZW50LnNldEF0dHJpYnV0ZShcIm1heFwiLCBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgeWVhckVsZW1lbnQuZGlzYWJsZWQgPVxuICAgICAgICAgICAgICAgICAgICAhIXNlbGYuY29uZmlnLm1pbkRhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0RnVsbFllYXIoKSA9PT0gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGN1cnJlbnRNb250aCA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3ItY3VycmVudC1tb250aFwiKTtcbiAgICAgICAgICAgIGN1cnJlbnRNb250aC5hcHBlbmRDaGlsZChtb250aEVsZW1lbnQpO1xuICAgICAgICAgICAgY3VycmVudE1vbnRoLmFwcGVuZENoaWxkKHllYXJJbnB1dCk7XG4gICAgICAgICAgICBtb250aE5hdkZyYWdtZW50LmFwcGVuZENoaWxkKGN1cnJlbnRNb250aCk7XG4gICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQobW9udGhOYXZGcmFnbWVudCk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyLFxuICAgICAgICAgICAgICAgIHllYXJFbGVtZW50OiB5ZWFyRWxlbWVudCxcbiAgICAgICAgICAgICAgICBtb250aEVsZW1lbnQ6IG1vbnRoRWxlbWVudFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBidWlsZE1vbnRocygpIHtcbiAgICAgICAgICAgIGNsZWFyTm9kZShzZWxmLm1vbnRoTmF2KTtcbiAgICAgICAgICAgIHNlbGYubW9udGhOYXYuYXBwZW5kQ2hpbGQoc2VsZi5wcmV2TW9udGhOYXYpO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLnNob3dNb250aHMpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnllYXJFbGVtZW50cyA9IFtdO1xuICAgICAgICAgICAgICAgIHNlbGYubW9udGhFbGVtZW50cyA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgbSA9IHNlbGYuY29uZmlnLnNob3dNb250aHM7IG0tLTspIHtcbiAgICAgICAgICAgICAgICB2YXIgbW9udGggPSBidWlsZE1vbnRoKCk7XG4gICAgICAgICAgICAgICAgc2VsZi55ZWFyRWxlbWVudHMucHVzaChtb250aC55ZWFyRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgc2VsZi5tb250aEVsZW1lbnRzLnB1c2gobW9udGgubW9udGhFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBzZWxmLm1vbnRoTmF2LmFwcGVuZENoaWxkKG1vbnRoLmNvbnRhaW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLm1vbnRoTmF2LmFwcGVuZENoaWxkKHNlbGYubmV4dE1vbnRoTmF2KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBidWlsZE1vbnRoTmF2KCkge1xuICAgICAgICAgICAgc2VsZi5tb250aE5hdiA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3ItbW9udGhzXCIpO1xuICAgICAgICAgICAgc2VsZi55ZWFyRWxlbWVudHMgPSBbXTtcbiAgICAgICAgICAgIHNlbGYubW9udGhFbGVtZW50cyA9IFtdO1xuICAgICAgICAgICAgc2VsZi5wcmV2TW9udGhOYXYgPSBjcmVhdGVFbGVtZW50KFwic3BhblwiLCBcImZsYXRwaWNrci1wcmV2LW1vbnRoXCIpO1xuICAgICAgICAgICAgc2VsZi5wcmV2TW9udGhOYXYuaW5uZXJIVE1MID0gc2VsZi5jb25maWcucHJldkFycm93O1xuICAgICAgICAgICAgc2VsZi5uZXh0TW9udGhOYXYgPSBjcmVhdGVFbGVtZW50KFwic3BhblwiLCBcImZsYXRwaWNrci1uZXh0LW1vbnRoXCIpO1xuICAgICAgICAgICAgc2VsZi5uZXh0TW9udGhOYXYuaW5uZXJIVE1MID0gc2VsZi5jb25maWcubmV4dEFycm93O1xuICAgICAgICAgICAgYnVpbGRNb250aHMoKTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLCBcIl9oaWRlUHJldk1vbnRoQXJyb3dcIiwge1xuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VsZi5fX2hpZGVQcmV2TW9udGhBcnJvdzsgfSxcbiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChib29sKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLl9faGlkZVByZXZNb250aEFycm93ICE9PSBib29sKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLnByZXZNb250aE5hdiwgXCJmbGF0cGlja3ItZGlzYWJsZWRcIiwgYm9vbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9faGlkZVByZXZNb250aEFycm93ID0gYm9vbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYsIFwiX2hpZGVOZXh0TW9udGhBcnJvd1wiLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLl9faGlkZU5leHRNb250aEFycm93OyB9LFxuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKGJvb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuX19oaWRlTmV4dE1vbnRoQXJyb3cgIT09IGJvb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYubmV4dE1vbnRoTmF2LCBcImZsYXRwaWNrci1kaXNhYmxlZFwiLCBib29sKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19oaWRlTmV4dE1vbnRoQXJyb3cgPSBib29sO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyRWxlbWVudCA9IHNlbGYueWVhckVsZW1lbnRzWzBdO1xuICAgICAgICAgICAgdXBkYXRlTmF2aWdhdGlvbkN1cnJlbnRNb250aCgpO1xuICAgICAgICAgICAgcmV0dXJuIHNlbGYubW9udGhOYXY7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYnVpbGRUaW1lKCkge1xuICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwiaGFzVGltZVwiKTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5ub0NhbGVuZGFyKVxuICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuY2xhc3NMaXN0LmFkZChcIm5vQ2FsZW5kYXJcIik7XG4gICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLXRpbWVcIik7XG4gICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIudGFiSW5kZXggPSAtMTtcbiAgICAgICAgICAgIHZhciBzZXBhcmF0b3IgPSBjcmVhdGVFbGVtZW50KFwic3BhblwiLCBcImZsYXRwaWNrci10aW1lLXNlcGFyYXRvclwiLCBcIjpcIik7XG4gICAgICAgICAgICB2YXIgaG91cklucHV0ID0gY3JlYXRlTnVtYmVySW5wdXQoXCJmbGF0cGlja3ItaG91clwiLCB7XG4gICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IHNlbGYubDEwbi5ob3VyQXJpYUxhYmVsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQgPSBob3VySW5wdXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKVswXTtcbiAgICAgICAgICAgIHZhciBtaW51dGVJbnB1dCA9IGNyZWF0ZU51bWJlcklucHV0KFwiZmxhdHBpY2tyLW1pbnV0ZVwiLCB7XG4gICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IHNlbGYubDEwbi5taW51dGVBcmlhTGFiZWxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2VsZi5taW51dGVFbGVtZW50ID0gbWludXRlSW5wdXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKVswXTtcbiAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQudGFiSW5kZXggPSBzZWxmLm1pbnV0ZUVsZW1lbnQudGFiSW5kZXggPSAtMTtcbiAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQudmFsdWUgPSBwYWQoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmpcbiAgICAgICAgICAgICAgICA/IHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqLmdldEhvdXJzKClcbiAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLnRpbWVfMjRoclxuICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLmRlZmF1bHRIb3VyXG4gICAgICAgICAgICAgICAgICAgIDogbWlsaXRhcnkyYW1wbShzZWxmLmNvbmZpZy5kZWZhdWx0SG91cikpO1xuICAgICAgICAgICAgc2VsZi5taW51dGVFbGVtZW50LnZhbHVlID0gcGFkKHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqXG4gICAgICAgICAgICAgICAgPyBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iai5nZXRNaW51dGVzKClcbiAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLmRlZmF1bHRNaW51dGUpO1xuICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJzdGVwXCIsIHNlbGYuY29uZmlnLmhvdXJJbmNyZW1lbnQudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwic3RlcFwiLCBzZWxmLmNvbmZpZy5taW51dGVJbmNyZW1lbnQudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50LnNldEF0dHJpYnV0ZShcIm1pblwiLCBzZWxmLmNvbmZpZy50aW1lXzI0aHIgPyBcIjBcIiA6IFwiMVwiKTtcbiAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWF4XCIsIHNlbGYuY29uZmlnLnRpbWVfMjRociA/IFwiMjNcIiA6IFwiMTJcIik7XG4gICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWluXCIsIFwiMFwiKTtcbiAgICAgICAgICAgIHNlbGYubWludXRlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtYXhcIiwgXCI1OVwiKTtcbiAgICAgICAgICAgIHNlbGYudGltZUNvbnRhaW5lci5hcHBlbmRDaGlsZChob3VySW5wdXQpO1xuICAgICAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLmFwcGVuZENoaWxkKHNlcGFyYXRvcik7XG4gICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuYXBwZW5kQ2hpbGQobWludXRlSW5wdXQpO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLnRpbWVfMjRocilcbiAgICAgICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuY2xhc3NMaXN0LmFkZChcInRpbWUyNGhyXCIpO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmVuYWJsZVNlY29uZHMpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuY2xhc3NMaXN0LmFkZChcImhhc1NlY29uZHNcIik7XG4gICAgICAgICAgICAgICAgdmFyIHNlY29uZElucHV0ID0gY3JlYXRlTnVtYmVySW5wdXQoXCJmbGF0cGlja3Itc2Vjb25kXCIpO1xuICAgICAgICAgICAgICAgIHNlbGYuc2Vjb25kRWxlbWVudCA9IHNlY29uZElucHV0LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaW5wdXRcIilbMF07XG4gICAgICAgICAgICAgICAgc2VsZi5zZWNvbmRFbGVtZW50LnZhbHVlID0gcGFkKHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqXG4gICAgICAgICAgICAgICAgICAgID8gc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmouZ2V0U2Vjb25kcygpXG4gICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcuZGVmYXVsdFNlY29uZHMpO1xuICAgICAgICAgICAgICAgIHNlbGYuc2Vjb25kRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJzdGVwXCIsIHNlbGYubWludXRlRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJzdGVwXCIpKTtcbiAgICAgICAgICAgICAgICBzZWxmLnNlY29uZEVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWluXCIsIFwiMFwiKTtcbiAgICAgICAgICAgICAgICBzZWxmLnNlY29uZEVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWF4XCIsIFwiNTlcIik7XG4gICAgICAgICAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiZmxhdHBpY2tyLXRpbWUtc2VwYXJhdG9yXCIsIFwiOlwiKSk7XG4gICAgICAgICAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLmFwcGVuZENoaWxkKHNlY29uZElucHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2VsZi5jb25maWcudGltZV8yNGhyKSB7XG4gICAgICAgICAgICAgICAgLy8gYWRkIHNlbGYuYW1QTSBpZiBhcHByb3ByaWF0ZVxuICAgICAgICAgICAgICAgIHNlbGYuYW1QTSA9IGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiZmxhdHBpY2tyLWFtLXBtXCIsIHNlbGYubDEwbi5hbVBNW2ludCgoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmpcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmhvdXJFbGVtZW50LnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcuZGVmYXVsdEhvdXIpID4gMTEpXSk7XG4gICAgICAgICAgICAgICAgc2VsZi5hbVBNLnRpdGxlID0gc2VsZi5sMTBuLnRvZ2dsZVRpdGxlO1xuICAgICAgICAgICAgICAgIHNlbGYuYW1QTS50YWJJbmRleCA9IC0xO1xuICAgICAgICAgICAgICAgIHNlbGYudGltZUNvbnRhaW5lci5hcHBlbmRDaGlsZChzZWxmLmFtUE0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNlbGYudGltZUNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBidWlsZFdlZWtkYXlzKCkge1xuICAgICAgICAgICAgaWYgKCFzZWxmLndlZWtkYXlDb250YWluZXIpXG4gICAgICAgICAgICAgICAgc2VsZi53ZWVrZGF5Q29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci13ZWVrZGF5c1wiKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBjbGVhck5vZGUoc2VsZi53ZWVrZGF5Q29udGFpbmVyKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBzZWxmLmNvbmZpZy5zaG93TW9udGhzOyBpLS07KSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3Itd2Vla2RheWNvbnRhaW5lclwiKTtcbiAgICAgICAgICAgICAgICBzZWxmLndlZWtkYXlDb250YWluZXIuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVwZGF0ZVdlZWtkYXlzKCk7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi53ZWVrZGF5Q29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVdlZWtkYXlzKCkge1xuICAgICAgICAgICAgaWYgKCFzZWxmLndlZWtkYXlDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZmlyc3REYXlPZldlZWsgPSBzZWxmLmwxMG4uZmlyc3REYXlPZldlZWs7XG4gICAgICAgICAgICB2YXIgd2Vla2RheXMgPSBzZWxmLmwxMG4ud2Vla2RheXMuc2hvcnRoYW5kLnNsaWNlKCk7XG4gICAgICAgICAgICBpZiAoZmlyc3REYXlPZldlZWsgPiAwICYmIGZpcnN0RGF5T2ZXZWVrIDwgd2Vla2RheXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgd2Vla2RheXMgPSB3ZWVrZGF5cy5zcGxpY2UoZmlyc3REYXlPZldlZWssIHdlZWtkYXlzLmxlbmd0aCkuY29uY2F0KHdlZWtkYXlzLnNwbGljZSgwLCBmaXJzdERheU9mV2VlaykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHNlbGYuY29uZmlnLnNob3dNb250aHM7IGktLTspIHtcbiAgICAgICAgICAgICAgICBzZWxmLndlZWtkYXlDb250YWluZXIuY2hpbGRyZW5baV0uaW5uZXJIVE1MID0gXCJcXG4gICAgICA8c3BhbiBjbGFzcz0nZmxhdHBpY2tyLXdlZWtkYXknPlxcbiAgICAgICAgXCIgKyB3ZWVrZGF5cy5qb2luKFwiPC9zcGFuPjxzcGFuIGNsYXNzPSdmbGF0cGlja3Itd2Vla2RheSc+XCIpICsgXCJcXG4gICAgICA8L3NwYW4+XFxuICAgICAgXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgZnVuY3Rpb24gYnVpbGRXZWVrcygpIHtcbiAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuY2xhc3NMaXN0LmFkZChcImhhc1dlZWtzXCIpO1xuICAgICAgICAgICAgdmFyIHdlZWtXcmFwcGVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci13ZWVrd3JhcHBlclwiKTtcbiAgICAgICAgICAgIHdlZWtXcmFwcGVyLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiZmxhdHBpY2tyLXdlZWtkYXlcIiwgc2VsZi5sMTBuLndlZWtBYmJyZXZpYXRpb24pKTtcbiAgICAgICAgICAgIHZhciB3ZWVrTnVtYmVycyA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3Itd2Vla3NcIik7XG4gICAgICAgICAgICB3ZWVrV3JhcHBlci5hcHBlbmRDaGlsZCh3ZWVrTnVtYmVycyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHdlZWtXcmFwcGVyOiB3ZWVrV3JhcHBlcixcbiAgICAgICAgICAgICAgICB3ZWVrTnVtYmVyczogd2Vla051bWJlcnNcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2hhbmdlTW9udGgodmFsdWUsIGlzT2Zmc2V0KSB7XG4gICAgICAgICAgICBpZiAoaXNPZmZzZXQgPT09IHZvaWQgMCkgeyBpc09mZnNldCA9IHRydWU7IH1cbiAgICAgICAgICAgIHZhciBkZWx0YSA9IGlzT2Zmc2V0ID8gdmFsdWUgOiB2YWx1ZSAtIHNlbGYuY3VycmVudE1vbnRoO1xuICAgICAgICAgICAgaWYgKChkZWx0YSA8IDAgJiYgc2VsZi5faGlkZVByZXZNb250aEFycm93ID09PSB0cnVlKSB8fFxuICAgICAgICAgICAgICAgIChkZWx0YSA+IDAgJiYgc2VsZi5faGlkZU5leHRNb250aEFycm93ID09PSB0cnVlKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBzZWxmLmN1cnJlbnRNb250aCArPSBkZWx0YTtcbiAgICAgICAgICAgIGlmIChzZWxmLmN1cnJlbnRNb250aCA8IDAgfHwgc2VsZi5jdXJyZW50TW9udGggPiAxMSkge1xuICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXIgKz0gc2VsZi5jdXJyZW50TW9udGggPiAxMSA/IDEgOiAtMTtcbiAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRNb250aCA9IChzZWxmLmN1cnJlbnRNb250aCArIDEyKSAlIDEyO1xuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uWWVhckNoYW5nZVwiKTtcbiAgICAgICAgICAgICAgICBidWlsZE1vbnRoU3dpdGNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWlsZERheXMoKTtcbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uTW9udGhDaGFuZ2VcIik7XG4gICAgICAgICAgICB1cGRhdGVOYXZpZ2F0aW9uQ3VycmVudE1vbnRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2xlYXIodHJpZ2dlckNoYW5nZUV2ZW50LCB0b0luaXRpYWwpIHtcbiAgICAgICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlRXZlbnQgPT09IHZvaWQgMCkgeyB0cmlnZ2VyQ2hhbmdlRXZlbnQgPSB0cnVlOyB9XG4gICAgICAgICAgICBpZiAodG9Jbml0aWFsID09PSB2b2lkIDApIHsgdG9Jbml0aWFsID0gdHJ1ZTsgfVxuICAgICAgICAgICAgc2VsZi5pbnB1dC52YWx1ZSA9IFwiXCI7XG4gICAgICAgICAgICBpZiAoc2VsZi5hbHRJbnB1dCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQudmFsdWUgPSBcIlwiO1xuICAgICAgICAgICAgaWYgKHNlbGYubW9iaWxlSW5wdXQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LnZhbHVlID0gXCJcIjtcbiAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcyA9IFtdO1xuICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAodG9Jbml0aWFsID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9IHNlbGYuX2luaXRpYWxEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50TW9udGggPSBzZWxmLl9pbml0aWFsRGF0ZS5nZXRNb250aCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5zaG93VGltZUlucHV0ID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuZW5hYmxlVGltZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHNldERlZmF1bHRIb3VycygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5yZWRyYXcoKTtcbiAgICAgICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlRXZlbnQpXG4gICAgICAgICAgICAgICAgLy8gdHJpZ2dlckNoYW5nZUV2ZW50IGlzIHRydWUgKGRlZmF1bHQpIG9yIGFuIEV2ZW50XG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25DaGFuZ2VcIik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICAgICAgICBzZWxmLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKCFzZWxmLmlzTW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY2FsZW5kYXJDb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoXCJvcGVuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5faW5wdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dC5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uQ2xvc2VcIik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uRGVzdHJveVwiKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBzZWxmLl9oYW5kbGVycy5sZW5ndGg7IGktLTspIHtcbiAgICAgICAgICAgICAgICB2YXIgaCA9IHNlbGYuX2hhbmRsZXJzW2ldO1xuICAgICAgICAgICAgICAgIGguZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGguZXZlbnQsIGguaGFuZGxlciwgaC5vcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYuX2hhbmRsZXJzID0gW107XG4gICAgICAgICAgICBpZiAoc2VsZi5tb2JpbGVJbnB1dCkge1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLm1vYmlsZUlucHV0LnBhcmVudE5vZGUpXG4gICAgICAgICAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzZWxmLm1vYmlsZUlucHV0KTtcbiAgICAgICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc2VsZi5jYWxlbmRhckNvbnRhaW5lciAmJiBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuc3RhdGljICYmIHNlbGYuY2FsZW5kYXJDb250YWluZXIucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgd3JhcHBlciA9IHNlbGYuY2FsZW5kYXJDb250YWluZXIucGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5sYXN0Q2hpbGQgJiYgd3JhcHBlci5yZW1vdmVDaGlsZCh3cmFwcGVyLmxhc3RDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3cmFwcGVyLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh3cmFwcGVyLmZpcnN0Q2hpbGQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh3cmFwcGVyLmZpcnN0Q2hpbGQsIHdyYXBwZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHdyYXBwZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNlbGYuY2FsZW5kYXJDb250YWluZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuYWx0SW5wdXQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmlucHV0LnR5cGUgPSBcInRleHRcIjtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5hbHRJbnB1dC5wYXJlbnROb2RlKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmFsdElucHV0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2VsZi5hbHRJbnB1dCk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHNlbGYuYWx0SW5wdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5pbnB1dCkge1xuICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQudHlwZSA9IHNlbGYuaW5wdXQuX3R5cGU7XG4gICAgICAgICAgICAgICAgc2VsZi5pbnB1dC5jbGFzc0xpc3QucmVtb3ZlKFwiZmxhdHBpY2tyLWlucHV0XCIpO1xuICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQucmVtb3ZlQXR0cmlidXRlKFwicmVhZG9ubHlcIik7XG4gICAgICAgICAgICAgICAgc2VsZi5pbnB1dC52YWx1ZSA9IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCJfc2hvd1RpbWVJbnB1dFwiLFxuICAgICAgICAgICAgICAgIFwibGF0ZXN0U2VsZWN0ZWREYXRlT2JqXCIsXG4gICAgICAgICAgICAgICAgXCJfaGlkZU5leHRNb250aEFycm93XCIsXG4gICAgICAgICAgICAgICAgXCJfaGlkZVByZXZNb250aEFycm93XCIsXG4gICAgICAgICAgICAgICAgXCJfX2hpZGVOZXh0TW9udGhBcnJvd1wiLFxuICAgICAgICAgICAgICAgIFwiX19oaWRlUHJldk1vbnRoQXJyb3dcIixcbiAgICAgICAgICAgICAgICBcImlzTW9iaWxlXCIsXG4gICAgICAgICAgICAgICAgXCJpc09wZW5cIixcbiAgICAgICAgICAgICAgICBcInNlbGVjdGVkRGF0ZUVsZW1cIixcbiAgICAgICAgICAgICAgICBcIm1pbkRhdGVIYXNUaW1lXCIsXG4gICAgICAgICAgICAgICAgXCJtYXhEYXRlSGFzVGltZVwiLFxuICAgICAgICAgICAgICAgIFwiZGF5c1wiLFxuICAgICAgICAgICAgICAgIFwiZGF5c0NvbnRhaW5lclwiLFxuICAgICAgICAgICAgICAgIFwiX2lucHV0XCIsXG4gICAgICAgICAgICAgICAgXCJfcG9zaXRpb25FbGVtZW50XCIsXG4gICAgICAgICAgICAgICAgXCJpbm5lckNvbnRhaW5lclwiLFxuICAgICAgICAgICAgICAgIFwickNvbnRhaW5lclwiLFxuICAgICAgICAgICAgICAgIFwibW9udGhOYXZcIixcbiAgICAgICAgICAgICAgICBcInRvZGF5RGF0ZUVsZW1cIixcbiAgICAgICAgICAgICAgICBcImNhbGVuZGFyQ29udGFpbmVyXCIsXG4gICAgICAgICAgICAgICAgXCJ3ZWVrZGF5Q29udGFpbmVyXCIsXG4gICAgICAgICAgICAgICAgXCJwcmV2TW9udGhOYXZcIixcbiAgICAgICAgICAgICAgICBcIm5leHRNb250aE5hdlwiLFxuICAgICAgICAgICAgICAgIFwibW9udGhzRHJvcGRvd25Db250YWluZXJcIixcbiAgICAgICAgICAgICAgICBcImN1cnJlbnRNb250aEVsZW1lbnRcIixcbiAgICAgICAgICAgICAgICBcImN1cnJlbnRZZWFyRWxlbWVudFwiLFxuICAgICAgICAgICAgICAgIFwibmF2aWdhdGlvbkN1cnJlbnRNb250aFwiLFxuICAgICAgICAgICAgICAgIFwic2VsZWN0ZWREYXRlRWxlbVwiLFxuICAgICAgICAgICAgICAgIFwiY29uZmlnXCIsXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgc2VsZltrXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKF8pIHsgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNDYWxlbmRhckVsZW0oZWxlbSkge1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmFwcGVuZFRvICYmIHNlbGYuY29uZmlnLmFwcGVuZFRvLmNvbnRhaW5zKGVsZW0pKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2FsZW5kYXJDb250YWluZXIuY29udGFpbnMoZWxlbSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZG9jdW1lbnRDbGljayhlKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5pc09wZW4gJiYgIXNlbGYuY29uZmlnLmlubGluZSkge1xuICAgICAgICAgICAgICAgIHZhciBldmVudFRhcmdldF8xID0gZ2V0RXZlbnRUYXJnZXQoZSk7XG4gICAgICAgICAgICAgICAgdmFyIGlzQ2FsZW5kYXJFbGVtZW50ID0gaXNDYWxlbmRhckVsZW0oZXZlbnRUYXJnZXRfMSk7XG4gICAgICAgICAgICAgICAgdmFyIGlzSW5wdXQgPSBldmVudFRhcmdldF8xID09PSBzZWxmLmlucHV0IHx8XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50VGFyZ2V0XzEgPT09IHNlbGYuYWx0SW5wdXQgfHxcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5lbGVtZW50LmNvbnRhaW5zKGV2ZW50VGFyZ2V0XzEpIHx8XG4gICAgICAgICAgICAgICAgICAgIC8vIHdlYiBjb21wb25lbnRzXG4gICAgICAgICAgICAgICAgICAgIC8vIGUucGF0aCBpcyBub3QgcHJlc2VudCBpbiBhbGwgYnJvd3NlcnMuIGNpcmN1bXZlbnRpbmcgdHlwZWNoZWNrc1xuICAgICAgICAgICAgICAgICAgICAoZS5wYXRoICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnBhdGguaW5kZXhPZiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKH5lLnBhdGguaW5kZXhPZihzZWxmLmlucHV0KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5lLnBhdGguaW5kZXhPZihzZWxmLmFsdElucHV0KSkpO1xuICAgICAgICAgICAgICAgIHZhciBsb3N0Rm9jdXMgPSBlLnR5cGUgPT09IFwiYmx1clwiXG4gICAgICAgICAgICAgICAgICAgID8gaXNJbnB1dCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgZS5yZWxhdGVkVGFyZ2V0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhaXNDYWxlbmRhckVsZW0oZS5yZWxhdGVkVGFyZ2V0KVxuICAgICAgICAgICAgICAgICAgICA6ICFpc0lucHV0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhaXNDYWxlbmRhckVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICFpc0NhbGVuZGFyRWxlbShlLnJlbGF0ZWRUYXJnZXQpO1xuICAgICAgICAgICAgICAgIHZhciBpc0lnbm9yZWQgPSAhc2VsZi5jb25maWcuaWdub3JlZEZvY3VzRWxlbWVudHMuc29tZShmdW5jdGlvbiAoZWxlbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5jb250YWlucyhldmVudFRhcmdldF8xKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAobG9zdEZvY3VzICYmIGlzSWdub3JlZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi50aW1lQ29udGFpbmVyICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWludXRlRWxlbWVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIgJiYgc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGVhcihmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlZHJhdygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNoYW5nZVllYXIobmV3WWVhcikge1xuICAgICAgICAgICAgaWYgKCFuZXdZZWFyIHx8XG4gICAgICAgICAgICAgICAgKHNlbGYuY29uZmlnLm1pbkRhdGUgJiYgbmV3WWVhciA8IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0RnVsbFllYXIoKSkgfHxcbiAgICAgICAgICAgICAgICAoc2VsZi5jb25maWcubWF4RGF0ZSAmJiBuZXdZZWFyID4gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRGdWxsWWVhcigpKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgbmV3WWVhck51bSA9IG5ld1llYXIsIGlzTmV3WWVhciA9IHNlbGYuY3VycmVudFllYXIgIT09IG5ld1llYXJOdW07XG4gICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyID0gbmV3WWVhck51bSB8fCBzZWxmLmN1cnJlbnRZZWFyO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1heERhdGUgJiZcbiAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyID09PSBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldEZ1bGxZZWFyKCkpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRNb250aCA9IE1hdGgubWluKHNlbGYuY29uZmlnLm1heERhdGUuZ2V0TW9udGgoKSwgc2VsZi5jdXJyZW50TW9udGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc2VsZi5jb25maWcubWluRGF0ZSAmJlxuICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXIgPT09IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0RnVsbFllYXIoKSkge1xuICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudE1vbnRoID0gTWF0aC5tYXgoc2VsZi5jb25maWcubWluRGF0ZS5nZXRNb250aCgpLCBzZWxmLmN1cnJlbnRNb250aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNOZXdZZWFyKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5yZWRyYXcoKTtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvblllYXJDaGFuZ2VcIik7XG4gICAgICAgICAgICAgICAgYnVpbGRNb250aFN3aXRjaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzRW5hYmxlZChkYXRlLCB0aW1lbGVzcykge1xuICAgICAgICAgICAgaWYgKHRpbWVsZXNzID09PSB2b2lkIDApIHsgdGltZWxlc3MgPSB0cnVlOyB9XG4gICAgICAgICAgICB2YXIgZGF0ZVRvQ2hlY2sgPSBzZWxmLnBhcnNlRGF0ZShkYXRlLCB1bmRlZmluZWQsIHRpbWVsZXNzKTsgLy8gdGltZWxlc3NcbiAgICAgICAgICAgIGlmICgoc2VsZi5jb25maWcubWluRGF0ZSAmJlxuICAgICAgICAgICAgICAgIGRhdGVUb0NoZWNrICYmXG4gICAgICAgICAgICAgICAgY29tcGFyZURhdGVzKGRhdGVUb0NoZWNrLCBzZWxmLmNvbmZpZy5taW5EYXRlLCB0aW1lbGVzcyAhPT0gdW5kZWZpbmVkID8gdGltZWxlc3MgOiAhc2VsZi5taW5EYXRlSGFzVGltZSkgPCAwKSB8fFxuICAgICAgICAgICAgICAgIChzZWxmLmNvbmZpZy5tYXhEYXRlICYmXG4gICAgICAgICAgICAgICAgICAgIGRhdGVUb0NoZWNrICYmXG4gICAgICAgICAgICAgICAgICAgIGNvbXBhcmVEYXRlcyhkYXRlVG9DaGVjaywgc2VsZi5jb25maWcubWF4RGF0ZSwgdGltZWxlc3MgIT09IHVuZGVmaW5lZCA/IHRpbWVsZXNzIDogIXNlbGYubWF4RGF0ZUhhc1RpbWUpID4gMCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmVuYWJsZS5sZW5ndGggPT09IDAgJiYgc2VsZi5jb25maWcuZGlzYWJsZS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBpZiAoZGF0ZVRvQ2hlY2sgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB2YXIgYm9vbCA9IHNlbGYuY29uZmlnLmVuYWJsZS5sZW5ndGggPiAwLCBhcnJheSA9IGJvb2wgPyBzZWxmLmNvbmZpZy5lbmFibGUgOiBzZWxmLmNvbmZpZy5kaXNhYmxlO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGQgPSB2b2lkIDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGQgPSBhcnJheVtpXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGQgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICAgICAgICAgICAgICBkKGRhdGVUb0NoZWNrKSAvLyBkaXNhYmxlZCBieSBmdW5jdGlvblxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJvb2w7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZCBpbnN0YW5jZW9mIERhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgZGF0ZVRvQ2hlY2sgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICBkLmdldFRpbWUoKSA9PT0gZGF0ZVRvQ2hlY2suZ2V0VGltZSgpKVxuICAgICAgICAgICAgICAgICAgICAvLyBkaXNhYmxlZCBieSBkYXRlXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBib29sO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBkID09PSBcInN0cmluZ1wiICYmIGRhdGVUb0NoZWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZGlzYWJsZWQgYnkgZGF0ZSBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlZCA9IHNlbGYucGFyc2VEYXRlKGQsIHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWQgJiYgcGFyc2VkLmdldFRpbWUoKSA9PT0gZGF0ZVRvQ2hlY2suZ2V0VGltZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGJvb2xcbiAgICAgICAgICAgICAgICAgICAgICAgIDogIWJvb2w7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIC8vIGRpc2FibGVkIGJ5IHJhbmdlXG4gICAgICAgICAgICAgICAgdHlwZW9mIGQgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICAgICAgICAgZGF0ZVRvQ2hlY2sgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICBkLmZyb20gJiZcbiAgICAgICAgICAgICAgICAgICAgZC50byAmJlxuICAgICAgICAgICAgICAgICAgICBkYXRlVG9DaGVjay5nZXRUaW1lKCkgPj0gZC5mcm9tLmdldFRpbWUoKSAmJlxuICAgICAgICAgICAgICAgICAgICBkYXRlVG9DaGVjay5nZXRUaW1lKCkgPD0gZC50by5nZXRUaW1lKCkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBib29sO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICFib29sO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzSW5WaWV3KGVsZW0pIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmRheXNDb250YWluZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICByZXR1cm4gKGVsZW0uY2xhc3NOYW1lLmluZGV4T2YoXCJoaWRkZW5cIikgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZGF5c0NvbnRhaW5lci5jb250YWlucyhlbGVtKSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gb25LZXlEb3duKGUpIHtcbiAgICAgICAgICAgIC8vIGUua2V5ICAgICAgICAgICAgICAgICAgICAgIGUua2V5Q29kZVxuICAgICAgICAgICAgLy8gXCJCYWNrc3BhY2VcIiAgICAgICAgICAgICAgICAgICAgICAgIDhcbiAgICAgICAgICAgIC8vIFwiVGFiXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5XG4gICAgICAgICAgICAvLyBcIkVudGVyXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAxM1xuICAgICAgICAgICAgLy8gXCJFc2NhcGVcIiAgICAgKElFIFwiRXNjXCIpICAgICAgICAgICAyN1xuICAgICAgICAgICAgLy8gXCJBcnJvd0xlZnRcIiAgKElFIFwiTGVmdFwiKSAgICAgICAgICAzN1xuICAgICAgICAgICAgLy8gXCJBcnJvd1VwXCIgICAgKElFIFwiVXBcIikgICAgICAgICAgICAzOFxuICAgICAgICAgICAgLy8gXCJBcnJvd1JpZ2h0XCIgKElFIFwiUmlnaHRcIikgICAgICAgICAzOVxuICAgICAgICAgICAgLy8gXCJBcnJvd0Rvd25cIiAgKElFIFwiRG93blwiKSAgICAgICAgICA0MFxuICAgICAgICAgICAgLy8gXCJEZWxldGVcIiAgICAgKElFIFwiRGVsXCIpICAgICAgICAgICA0NlxuICAgICAgICAgICAgdmFyIGlzSW5wdXQgPSBlLnRhcmdldCA9PT0gc2VsZi5faW5wdXQ7XG4gICAgICAgICAgICB2YXIgYWxsb3dJbnB1dCA9IHNlbGYuY29uZmlnLmFsbG93SW5wdXQ7XG4gICAgICAgICAgICB2YXIgYWxsb3dLZXlkb3duID0gc2VsZi5pc09wZW4gJiYgKCFhbGxvd0lucHV0IHx8ICFpc0lucHV0KTtcbiAgICAgICAgICAgIHZhciBhbGxvd0lubGluZUtleWRvd24gPSBzZWxmLmNvbmZpZy5pbmxpbmUgJiYgaXNJbnB1dCAmJiAhYWxsb3dJbnB1dDtcbiAgICAgICAgICAgIGlmIChlLmtleUNvZGUgPT09IDEzICYmIGlzSW5wdXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoYWxsb3dJbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnNldERhdGUoc2VsZi5faW5wdXQudmFsdWUsIHRydWUsIGUudGFyZ2V0ID09PSBzZWxmLmFsdElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLmFsdEZvcm1hdFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy5kYXRlRm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUudGFyZ2V0LmJsdXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYub3BlbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzQ2FsZW5kYXJFbGVtKGUudGFyZ2V0KSB8fFxuICAgICAgICAgICAgICAgIGFsbG93S2V5ZG93biB8fFxuICAgICAgICAgICAgICAgIGFsbG93SW5saW5lS2V5ZG93bikge1xuICAgICAgICAgICAgICAgIHZhciBpc1RpbWVPYmogPSAhIXNlbGYudGltZUNvbnRhaW5lciAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuY29udGFpbnMoZS50YXJnZXQpO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZS5rZXlDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNUaW1lT2JqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c0FuZENsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0RGF0ZShlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI3OiAvLyBlc2NhcGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzQW5kQ2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDY6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbnB1dCAmJiAhc2VsZi5jb25maWcuYWxsb3dJbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNUaW1lT2JqICYmICFpc0lucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmRheXNDb250YWluZXIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWxsb3dJbnB1dCA9PT0gZmFsc2UgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmIGlzSW5WaWV3KGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlbHRhXzEgPSBlLmtleUNvZGUgPT09IDM5ID8gMSA6IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWUuY3RybEtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzT25EYXkodW5kZWZpbmVkLCBkZWx0YV8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlTW9udGgoZGVsdGFfMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c09uRGF5KGdldEZpcnN0QXZhaWxhYmxlRGF5KDEpLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNlbGYuaG91ckVsZW1lbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsdGEgPSBlLmtleUNvZGUgPT09IDQwID8gMSA6IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChzZWxmLmRheXNDb250YWluZXIgJiYgZS50YXJnZXQuJGkgIT09IHVuZGVmaW5lZCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRhcmdldCA9PT0gc2VsZi5pbnB1dCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudGFyZ2V0ID09PSBzZWxmLmFsdElucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuY3RybEtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VZZWFyKHNlbGYuY3VycmVudFllYXIgLSBkZWx0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzT25EYXkoZ2V0Rmlyc3RBdmFpbGFibGVEYXkoMSksIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghaXNUaW1lT2JqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c09uRGF5KHVuZGVmaW5lZCwgZGVsdGEgKiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUudGFyZ2V0ID09PSBzZWxmLmN1cnJlbnRZZWFyRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZVllYXIoc2VsZi5jdXJyZW50WWVhciAtIGRlbHRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNlbGYuY29uZmlnLmVuYWJsZVRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVGltZU9iaiAmJiBzZWxmLmhvdXJFbGVtZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlVGltZShlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9kZWJvdW5jZWRDaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNUaW1lT2JqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW1zID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2Vjb25kRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hbVBNLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChzZWxmLnBsdWdpbkVsZW1lbnRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4OyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IGVsZW1zLmluZGV4T2YoZS50YXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gZWxlbXNbaSArIChlLnNoaWZ0S2V5ID8gLTEgOiAxKV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRhcmdldCB8fCBzZWxmLl9pbnB1dCkuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghc2VsZi5jb25maWcubm9DYWxlbmRhciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF5c0NvbnRhaW5lciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF5c0NvbnRhaW5lci5jb250YWlucyhlLnRhcmdldCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmFtUE0gIT09IHVuZGVmaW5lZCAmJiBlLnRhcmdldCA9PT0gc2VsZi5hbVBNKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChlLmtleSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIHNlbGYubDEwbi5hbVBNWzBdLmNoYXJBdCgwKTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBzZWxmLmwxMG4uYW1QTVswXS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYW1QTS50ZXh0Q29udGVudCA9IHNlbGYubDEwbi5hbVBNWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SG91cnNGcm9tSW5wdXRzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2Ugc2VsZi5sMTBuLmFtUE1bMV0uY2hhckF0KDApOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIHNlbGYubDEwbi5hbVBNWzFdLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpOlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hbVBNLnRleHRDb250ZW50ID0gc2VsZi5sMTBuLmFtUE1bMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRIb3Vyc0Zyb21JbnB1dHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNJbnB1dCB8fCBpc0NhbGVuZGFyRWxlbShlLnRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbktleURvd25cIiwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gb25Nb3VzZU92ZXIoZWxlbSkge1xuICAgICAgICAgICAgaWYgKHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggIT09IDEgfHxcbiAgICAgICAgICAgICAgICAoZWxlbSAmJlxuICAgICAgICAgICAgICAgICAgICAoIWVsZW0uY2xhc3NMaXN0LmNvbnRhaW5zKFwiZmxhdHBpY2tyLWRheVwiKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5jbGFzc0xpc3QuY29udGFpbnMoXCJmbGF0cGlja3ItZGlzYWJsZWRcIikpKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgaG92ZXJEYXRlID0gZWxlbVxuICAgICAgICAgICAgICAgID8gZWxlbS5kYXRlT2JqLmdldFRpbWUoKVxuICAgICAgICAgICAgICAgIDogc2VsZi5kYXlzLmZpcnN0RWxlbWVudENoaWxkLmRhdGVPYmouZ2V0VGltZSgpLCBpbml0aWFsRGF0ZSA9IHNlbGYucGFyc2VEYXRlKHNlbGYuc2VsZWN0ZWREYXRlc1swXSwgdW5kZWZpbmVkLCB0cnVlKS5nZXRUaW1lKCksIHJhbmdlU3RhcnREYXRlID0gTWF0aC5taW4oaG92ZXJEYXRlLCBzZWxmLnNlbGVjdGVkRGF0ZXNbMF0uZ2V0VGltZSgpKSwgcmFuZ2VFbmREYXRlID0gTWF0aC5tYXgoaG92ZXJEYXRlLCBzZWxmLnNlbGVjdGVkRGF0ZXNbMF0uZ2V0VGltZSgpKTtcbiAgICAgICAgICAgIHZhciBjb250YWluc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB2YXIgbWluUmFuZ2UgPSAwLCBtYXhSYW5nZSA9IDA7XG4gICAgICAgICAgICBmb3IgKHZhciB0ID0gcmFuZ2VTdGFydERhdGU7IHQgPCByYW5nZUVuZERhdGU7IHQgKz0gZHVyYXRpb24uREFZKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc0VuYWJsZWQobmV3IERhdGUodCksIHRydWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zRGlzYWJsZWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbnNEaXNhYmxlZCB8fCAodCA+IHJhbmdlU3RhcnREYXRlICYmIHQgPCByYW5nZUVuZERhdGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodCA8IGluaXRpYWxEYXRlICYmICghbWluUmFuZ2UgfHwgdCA+IG1pblJhbmdlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pblJhbmdlID0gdDtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodCA+IGluaXRpYWxEYXRlICYmICghbWF4UmFuZ2UgfHwgdCA8IG1heFJhbmdlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heFJhbmdlID0gdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBtID0gMDsgbSA8IHNlbGYuY29uZmlnLnNob3dNb250aHM7IG0rKykge1xuICAgICAgICAgICAgICAgIHZhciBtb250aCA9IHNlbGYuZGF5c0NvbnRhaW5lci5jaGlsZHJlblttXTtcbiAgICAgICAgICAgICAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIChpLCBsKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXlFbGVtID0gbW9udGguY2hpbGRyZW5baV0sIGRhdGUgPSBkYXlFbGVtLmRhdGVPYmo7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0aW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG91dE9mUmFuZ2UgPSAobWluUmFuZ2UgPiAwICYmIHRpbWVzdGFtcCA8IG1pblJhbmdlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKG1heFJhbmdlID4gMCAmJiB0aW1lc3RhbXAgPiBtYXhSYW5nZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvdXRPZlJhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXlFbGVtLmNsYXNzTGlzdC5hZGQoXCJub3RBbGxvd2VkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgW1wiaW5SYW5nZVwiLCBcInN0YXJ0UmFuZ2VcIiwgXCJlbmRSYW5nZVwiXS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5RWxlbS5jbGFzc0xpc3QucmVtb3ZlKGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJjb250aW51ZVwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnRhaW5zRGlzYWJsZWQgJiYgIW91dE9mUmFuZ2UpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJjb250aW51ZVwiO1xuICAgICAgICAgICAgICAgICAgICBbXCJzdGFydFJhbmdlXCIsIFwiaW5SYW5nZVwiLCBcImVuZFJhbmdlXCIsIFwibm90QWxsb3dlZFwiXS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXlFbGVtLmNsYXNzTGlzdC5yZW1vdmUoYyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTGlzdC5hZGQoaG92ZXJEYXRlIDw9IHNlbGYuc2VsZWN0ZWREYXRlc1swXS5nZXRUaW1lKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwic3RhcnRSYW5nZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcImVuZFJhbmdlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluaXRpYWxEYXRlIDwgaG92ZXJEYXRlICYmIHRpbWVzdGFtcCA9PT0gaW5pdGlhbERhdGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5RWxlbS5jbGFzc0xpc3QuYWRkKFwic3RhcnRSYW5nZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGluaXRpYWxEYXRlID4gaG92ZXJEYXRlICYmIHRpbWVzdGFtcCA9PT0gaW5pdGlhbERhdGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5RWxlbS5jbGFzc0xpc3QuYWRkKFwiZW5kUmFuZ2VcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGltZXN0YW1wID49IG1pblJhbmdlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1heFJhbmdlID09PSAwIHx8IHRpbWVzdGFtcCA8PSBtYXhSYW5nZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0JldHdlZW4odGltZXN0YW1wLCBpbml0aWFsRGF0ZSwgaG92ZXJEYXRlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXlFbGVtLmNsYXNzTGlzdC5hZGQoXCJpblJhbmdlXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IG1vbnRoLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBfbG9vcF8xKGksIGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBvblJlc2l6ZSgpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmlzT3BlbiAmJiAhc2VsZi5jb25maWcuc3RhdGljICYmICFzZWxmLmNvbmZpZy5pbmxpbmUpXG4gICAgICAgICAgICAgICAgcG9zaXRpb25DYWxlbmRhcigpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldERlZmF1bHRUaW1lKCkge1xuICAgICAgICAgICAgc2VsZi5zZXREYXRlKHNlbGYuY29uZmlnLm1pbkRhdGUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gbmV3IERhdGUoc2VsZi5jb25maWcubWluRGF0ZS5nZXRUaW1lKCkpXG4gICAgICAgICAgICAgICAgOiBuZXcgRGF0ZSgpLCB0cnVlKTtcbiAgICAgICAgICAgIHNldERlZmF1bHRIb3VycygpO1xuICAgICAgICAgICAgdXBkYXRlVmFsdWUoKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBvcGVuKGUsIHBvc2l0aW9uRWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKHBvc2l0aW9uRWxlbWVudCA9PT0gdm9pZCAwKSB7IHBvc2l0aW9uRWxlbWVudCA9IHNlbGYuX3Bvc2l0aW9uRWxlbWVudDsgfVxuICAgICAgICAgICAgaWYgKHNlbGYuaXNNb2JpbGUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIGUudGFyZ2V0ICYmIGUudGFyZ2V0LmJsdXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYubW9iaWxlSW5wdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQuY2xpY2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25PcGVuXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLl9pbnB1dC5kaXNhYmxlZCB8fCBzZWxmLmNvbmZpZy5pbmxpbmUpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIHdhc09wZW4gPSBzZWxmLmlzT3BlbjtcbiAgICAgICAgICAgIHNlbGYuaXNPcGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghd2FzT3Blbikge1xuICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuY2xhc3NMaXN0LmFkZChcIm9wZW5cIik7XG4gICAgICAgICAgICAgICAgc2VsZi5faW5wdXQuY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbk9wZW5cIik7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25DYWxlbmRhcihwb3NpdGlvbkVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmVuYWJsZVRpbWUgPT09IHRydWUgJiYgc2VsZi5jb25maWcubm9DYWxlbmRhciA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldERlZmF1bHRUaW1lKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5hbGxvd0lucHV0ID09PSBmYWxzZSAmJlxuICAgICAgICAgICAgICAgICAgICAoZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAhc2VsZi50aW1lQ29udGFpbmVyLmNvbnRhaW5zKGUucmVsYXRlZFRhcmdldCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VsZi5ob3VyRWxlbWVudC5zZWxlY3QoKTsgfSwgNTApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBtaW5NYXhEYXRlU2V0dGVyKHR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgICAgICAgICAgIHZhciBkYXRlT2JqID0gKHNlbGYuY29uZmlnW1wiX1wiICsgdHlwZSArIFwiRGF0ZVwiXSA9IHNlbGYucGFyc2VEYXRlKGRhdGUsIHNlbGYuY29uZmlnLmRhdGVGb3JtYXQpKTtcbiAgICAgICAgICAgICAgICB2YXIgaW52ZXJzZURhdGVPYmogPSBzZWxmLmNvbmZpZ1tcIl9cIiArICh0eXBlID09PSBcIm1pblwiID8gXCJtYXhcIiA6IFwibWluXCIpICsgXCJEYXRlXCJdO1xuICAgICAgICAgICAgICAgIGlmIChkYXRlT2JqICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZlt0eXBlID09PSBcIm1pblwiID8gXCJtaW5EYXRlSGFzVGltZVwiIDogXCJtYXhEYXRlSGFzVGltZVwiXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlT2JqLmdldEhvdXJzKCkgPiAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZU9iai5nZXRNaW51dGVzKCkgPiAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZU9iai5nZXRTZWNvbmRzKCkgPiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5zZWxlY3RlZERhdGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcyA9IHNlbGYuc2VsZWN0ZWREYXRlcy5maWx0ZXIoZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGlzRW5hYmxlZChkKTsgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCAmJiB0eXBlID09PSBcIm1pblwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SG91cnNGcm9tRGF0ZShkYXRlT2JqKTtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlVmFsdWUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuZGF5c0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgICAgICByZWRyYXcoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGVPYmogIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXJFbGVtZW50W3R5cGVdID0gZGF0ZU9iai5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXJFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSh0eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhckVsZW1lbnQuZGlzYWJsZWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgISFpbnZlcnNlRGF0ZU9iaiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVPYmogIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludmVyc2VEYXRlT2JqLmdldEZ1bGxZZWFyKCkgPT09IGRhdGVPYmouZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlQ29uZmlnKCkge1xuICAgICAgICAgICAgdmFyIGJvb2xPcHRzID0gW1xuICAgICAgICAgICAgICAgIFwid3JhcFwiLFxuICAgICAgICAgICAgICAgIFwid2Vla051bWJlcnNcIixcbiAgICAgICAgICAgICAgICBcImFsbG93SW5wdXRcIixcbiAgICAgICAgICAgICAgICBcImNsaWNrT3BlbnNcIixcbiAgICAgICAgICAgICAgICBcInRpbWVfMjRoclwiLFxuICAgICAgICAgICAgICAgIFwiZW5hYmxlVGltZVwiLFxuICAgICAgICAgICAgICAgIFwibm9DYWxlbmRhclwiLFxuICAgICAgICAgICAgICAgIFwiYWx0SW5wdXRcIixcbiAgICAgICAgICAgICAgICBcInNob3J0aGFuZEN1cnJlbnRNb250aFwiLFxuICAgICAgICAgICAgICAgIFwiaW5saW5lXCIsXG4gICAgICAgICAgICAgICAgXCJzdGF0aWNcIixcbiAgICAgICAgICAgICAgICBcImVuYWJsZVNlY29uZHNcIixcbiAgICAgICAgICAgICAgICBcImRpc2FibGVNb2JpbGVcIixcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICB2YXIgdXNlckNvbmZpZyA9IF9fYXNzaWduKHt9LCBpbnN0YW5jZUNvbmZpZywgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlbGVtZW50LmRhdGFzZXQgfHwge30pKSk7XG4gICAgICAgICAgICB2YXIgZm9ybWF0cyA9IHt9O1xuICAgICAgICAgICAgc2VsZi5jb25maWcucGFyc2VEYXRlID0gdXNlckNvbmZpZy5wYXJzZURhdGU7XG4gICAgICAgICAgICBzZWxmLmNvbmZpZy5mb3JtYXREYXRlID0gdXNlckNvbmZpZy5mb3JtYXREYXRlO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYuY29uZmlnLCBcImVuYWJsZVwiLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLmNvbmZpZy5fZW5hYmxlOyB9LFxuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKGRhdGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLl9lbmFibGUgPSBwYXJzZURhdGVSdWxlcyhkYXRlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZi5jb25maWcsIFwiZGlzYWJsZVwiLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLmNvbmZpZy5fZGlzYWJsZTsgfSxcbiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChkYXRlcykge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5fZGlzYWJsZSA9IHBhcnNlRGF0ZVJ1bGVzKGRhdGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciB0aW1lTW9kZSA9IHVzZXJDb25maWcubW9kZSA9PT0gXCJ0aW1lXCI7XG4gICAgICAgICAgICBpZiAoIXVzZXJDb25maWcuZGF0ZUZvcm1hdCAmJiAodXNlckNvbmZpZy5lbmFibGVUaW1lIHx8IHRpbWVNb2RlKSkge1xuICAgICAgICAgICAgICAgIHZhciBkZWZhdWx0RGF0ZUZvcm1hdCA9IGZsYXRwaWNrci5kZWZhdWx0Q29uZmlnLmRhdGVGb3JtYXQgfHwgZGVmYXVsdHMuZGF0ZUZvcm1hdDtcbiAgICAgICAgICAgICAgICBmb3JtYXRzLmRhdGVGb3JtYXQgPVxuICAgICAgICAgICAgICAgICAgICB1c2VyQ29uZmlnLm5vQ2FsZW5kYXIgfHwgdGltZU1vZGVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gXCJIOmlcIiArICh1c2VyQ29uZmlnLmVuYWJsZVNlY29uZHMgPyBcIjpTXCIgOiBcIlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBkZWZhdWx0RGF0ZUZvcm1hdCArIFwiIEg6aVwiICsgKHVzZXJDb25maWcuZW5hYmxlU2Vjb25kcyA/IFwiOlNcIiA6IFwiXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHVzZXJDb25maWcuYWx0SW5wdXQgJiZcbiAgICAgICAgICAgICAgICAodXNlckNvbmZpZy5lbmFibGVUaW1lIHx8IHRpbWVNb2RlKSAmJlxuICAgICAgICAgICAgICAgICF1c2VyQ29uZmlnLmFsdEZvcm1hdCkge1xuICAgICAgICAgICAgICAgIHZhciBkZWZhdWx0QWx0Rm9ybWF0ID0gZmxhdHBpY2tyLmRlZmF1bHRDb25maWcuYWx0Rm9ybWF0IHx8IGRlZmF1bHRzLmFsdEZvcm1hdDtcbiAgICAgICAgICAgICAgICBmb3JtYXRzLmFsdEZvcm1hdCA9XG4gICAgICAgICAgICAgICAgICAgIHVzZXJDb25maWcubm9DYWxlbmRhciB8fCB0aW1lTW9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBcImg6aVwiICsgKHVzZXJDb25maWcuZW5hYmxlU2Vjb25kcyA/IFwiOlMgS1wiIDogXCIgS1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBkZWZhdWx0QWx0Rm9ybWF0ICsgKFwiIGg6aVwiICsgKHVzZXJDb25maWcuZW5hYmxlU2Vjb25kcyA/IFwiOlNcIiA6IFwiXCIpICsgXCIgS1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdXNlckNvbmZpZy5hbHRJbnB1dENsYXNzKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcuYWx0SW5wdXRDbGFzcyA9XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQuY2xhc3NOYW1lICsgXCIgXCIgKyBzZWxmLmNvbmZpZy5hbHRJbnB1dENsYXNzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYuY29uZmlnLCBcIm1pbkRhdGVcIiwge1xuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VsZi5jb25maWcuX21pbkRhdGU7IH0sXG4gICAgICAgICAgICAgICAgc2V0OiBtaW5NYXhEYXRlU2V0dGVyKFwibWluXCIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLmNvbmZpZywgXCJtYXhEYXRlXCIsIHtcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuY29uZmlnLl9tYXhEYXRlOyB9LFxuICAgICAgICAgICAgICAgIHNldDogbWluTWF4RGF0ZVNldHRlcihcIm1heFwiKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgbWluTWF4VGltZVNldHRlciA9IGZ1bmN0aW9uICh0eXBlKSB7IHJldHVybiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWdbdHlwZSA9PT0gXCJtaW5cIiA/IFwiX21pblRpbWVcIiA6IFwiX21heFRpbWVcIl0gPSBzZWxmLnBhcnNlRGF0ZSh2YWwsIFwiSDppOlNcIik7XG4gICAgICAgICAgICB9OyB9O1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYuY29uZmlnLCBcIm1pblRpbWVcIiwge1xuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VsZi5jb25maWcuX21pblRpbWU7IH0sXG4gICAgICAgICAgICAgICAgc2V0OiBtaW5NYXhUaW1lU2V0dGVyKFwibWluXCIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLmNvbmZpZywgXCJtYXhUaW1lXCIsIHtcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuY29uZmlnLl9tYXhUaW1lOyB9LFxuICAgICAgICAgICAgICAgIHNldDogbWluTWF4VGltZVNldHRlcihcIm1heFwiKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAodXNlckNvbmZpZy5tb2RlID09PSBcInRpbWVcIikge1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm5vQ2FsZW5kYXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmVuYWJsZVRpbWUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzZWxmLmNvbmZpZywgZm9ybWF0cywgdXNlckNvbmZpZyk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvb2xPcHRzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnW2Jvb2xPcHRzW2ldXSA9XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnW2Jvb2xPcHRzW2ldXSA9PT0gdHJ1ZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWdbYm9vbE9wdHNbaV1dID09PSBcInRydWVcIjtcbiAgICAgICAgICAgIEhPT0tTLmZpbHRlcihmdW5jdGlvbiAoaG9vaykgeyByZXR1cm4gc2VsZi5jb25maWdbaG9va10gIT09IHVuZGVmaW5lZDsgfSkuZm9yRWFjaChmdW5jdGlvbiAoaG9vaykge1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnW2hvb2tdID0gYXJyYXlpZnkoc2VsZi5jb25maWdbaG9va10gfHwgW10pLm1hcChiaW5kVG9JbnN0YW5jZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNlbGYuaXNNb2JpbGUgPVxuICAgICAgICAgICAgICAgICFzZWxmLmNvbmZpZy5kaXNhYmxlTW9iaWxlICYmXG4gICAgICAgICAgICAgICAgICAgICFzZWxmLmNvbmZpZy5pbmxpbmUgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcubW9kZSA9PT0gXCJzaW5nbGVcIiAmJlxuICAgICAgICAgICAgICAgICAgICAhc2VsZi5jb25maWcuZGlzYWJsZS5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgICAgIXNlbGYuY29uZmlnLmVuYWJsZS5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgICAgIXNlbGYuY29uZmlnLndlZWtOdW1iZXJzICYmXG4gICAgICAgICAgICAgICAgICAgIC9BbmRyb2lkfHdlYk9TfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxJRU1vYmlsZXxPcGVyYSBNaW5pL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZi5jb25maWcucGx1Z2lucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBwbHVnaW5Db25mID0gc2VsZi5jb25maWcucGx1Z2luc1tpXShzZWxmKSB8fCB7fTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcGx1Z2luQ29uZikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoSE9PS1MuaW5kZXhPZihrZXkpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnW2tleV0gPSBhcnJheWlmeShwbHVnaW5Db25mW2tleV0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChiaW5kVG9JbnN0YW5jZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KHNlbGYuY29uZmlnW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB1c2VyQ29uZmlnW2tleV0gPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ1trZXldID0gcGx1Z2luQ29uZltrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uUGFyc2VDb25maWdcIik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0dXBMb2NhbGUoKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNlbGYuY29uZmlnLmxvY2FsZSAhPT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBmbGF0cGlja3IubDEwbnNbc2VsZi5jb25maWcubG9jYWxlXSA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5lcnJvckhhbmRsZXIobmV3IEVycm9yKFwiZmxhdHBpY2tyOiBpbnZhbGlkIGxvY2FsZSBcIiArIHNlbGYuY29uZmlnLmxvY2FsZSkpO1xuICAgICAgICAgICAgc2VsZi5sMTBuID0gX19hc3NpZ24oe30sIGZsYXRwaWNrci5sMTBuc1tcImRlZmF1bHRcIl0sICh0eXBlb2Ygc2VsZi5jb25maWcubG9jYWxlID09PSBcIm9iamVjdFwiXG4gICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5sb2NhbGVcbiAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLmxvY2FsZSAhPT0gXCJkZWZhdWx0XCJcbiAgICAgICAgICAgICAgICAgICAgPyBmbGF0cGlja3IubDEwbnNbc2VsZi5jb25maWcubG9jYWxlXVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCkpO1xuICAgICAgICAgICAgdG9rZW5SZWdleC5LID0gXCIoXCIgKyBzZWxmLmwxMG4uYW1QTVswXSArIFwifFwiICsgc2VsZi5sMTBuLmFtUE1bMV0gKyBcInxcIiArIHNlbGYubDEwbi5hbVBNWzBdLnRvTG93ZXJDYXNlKCkgKyBcInxcIiArIHNlbGYubDEwbi5hbVBNWzFdLnRvTG93ZXJDYXNlKCkgKyBcIilcIjtcbiAgICAgICAgICAgIHZhciB1c2VyQ29uZmlnID0gX19hc3NpZ24oe30sIGluc3RhbmNlQ29uZmlnLCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGVsZW1lbnQuZGF0YXNldCB8fCB7fSkpKTtcbiAgICAgICAgICAgIGlmICh1c2VyQ29uZmlnLnRpbWVfMjRociA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgZmxhdHBpY2tyLmRlZmF1bHRDb25maWcudGltZV8yNGhyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy50aW1lXzI0aHIgPSBzZWxmLmwxMG4udGltZV8yNGhyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5mb3JtYXREYXRlID0gY3JlYXRlRGF0ZUZvcm1hdHRlcihzZWxmKTtcbiAgICAgICAgICAgIHNlbGYucGFyc2VEYXRlID0gY3JlYXRlRGF0ZVBhcnNlcih7IGNvbmZpZzogc2VsZi5jb25maWcsIGwxMG46IHNlbGYubDEwbiB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBwb3NpdGlvbkNhbGVuZGFyKGN1c3RvbVBvc2l0aW9uRWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKHNlbGYuY2FsZW5kYXJDb250YWluZXIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvblByZUNhbGVuZGFyUG9zaXRpb25cIik7XG4gICAgICAgICAgICB2YXIgcG9zaXRpb25FbGVtZW50ID0gY3VzdG9tUG9zaXRpb25FbGVtZW50IHx8IHNlbGYuX3Bvc2l0aW9uRWxlbWVudDtcbiAgICAgICAgICAgIHZhciBjYWxlbmRhckhlaWdodCA9IEFycmF5LnByb3RvdHlwZS5yZWR1Y2UuY2FsbChzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmNoaWxkcmVuLCAoZnVuY3Rpb24gKGFjYywgY2hpbGQpIHsgcmV0dXJuIGFjYyArIGNoaWxkLm9mZnNldEhlaWdodDsgfSksIDApLCBjYWxlbmRhcldpZHRoID0gc2VsZi5jYWxlbmRhckNvbnRhaW5lci5vZmZzZXRXaWR0aCwgY29uZmlnUG9zID0gc2VsZi5jb25maWcucG9zaXRpb24uc3BsaXQoXCIgXCIpLCBjb25maWdQb3NWZXJ0aWNhbCA9IGNvbmZpZ1Bvc1swXSwgY29uZmlnUG9zSG9yaXpvbnRhbCA9IGNvbmZpZ1Bvcy5sZW5ndGggPiAxID8gY29uZmlnUG9zWzFdIDogbnVsbCwgaW5wdXRCb3VuZHMgPSBwb3NpdGlvbkVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIGRpc3RhbmNlRnJvbUJvdHRvbSA9IHdpbmRvdy5pbm5lckhlaWdodCAtIGlucHV0Qm91bmRzLmJvdHRvbSwgc2hvd09uVG9wID0gY29uZmlnUG9zVmVydGljYWwgPT09IFwiYWJvdmVcIiB8fFxuICAgICAgICAgICAgICAgIChjb25maWdQb3NWZXJ0aWNhbCAhPT0gXCJiZWxvd1wiICYmXG4gICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlRnJvbUJvdHRvbSA8IGNhbGVuZGFySGVpZ2h0ICYmXG4gICAgICAgICAgICAgICAgICAgIGlucHV0Qm91bmRzLnRvcCA+IGNhbGVuZGFySGVpZ2h0KTtcbiAgICAgICAgICAgIHZhciB0b3AgPSB3aW5kb3cucGFnZVlPZmZzZXQgK1xuICAgICAgICAgICAgICAgIGlucHV0Qm91bmRzLnRvcCArXG4gICAgICAgICAgICAgICAgKCFzaG93T25Ub3AgPyBwb3NpdGlvbkVsZW1lbnQub2Zmc2V0SGVpZ2h0ICsgMiA6IC1jYWxlbmRhckhlaWdodCAtIDIpO1xuICAgICAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJhcnJvd1RvcFwiLCAhc2hvd09uVG9wKTtcbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwiYXJyb3dCb3R0b21cIiwgc2hvd09uVG9wKTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5pbmxpbmUpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGxlZnQgPSB3aW5kb3cucGFnZVhPZmZzZXQgK1xuICAgICAgICAgICAgICAgIGlucHV0Qm91bmRzLmxlZnQgLVxuICAgICAgICAgICAgICAgIChjb25maWdQb3NIb3Jpem9udGFsICE9IG51bGwgJiYgY29uZmlnUG9zSG9yaXpvbnRhbCA9PT0gXCJjZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICA/IChjYWxlbmRhcldpZHRoIC0gaW5wdXRCb3VuZHMud2lkdGgpIC8gMlxuICAgICAgICAgICAgICAgICAgICA6IDApO1xuICAgICAgICAgICAgdmFyIHJpZ2h0ID0gd2luZG93LmRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGggLSAod2luZG93LnBhZ2VYT2Zmc2V0ICsgaW5wdXRCb3VuZHMucmlnaHQpO1xuICAgICAgICAgICAgdmFyIHJpZ2h0TW9zdCA9IGxlZnQgKyBjYWxlbmRhcldpZHRoID4gd2luZG93LmRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICB2YXIgY2VudGVyTW9zdCA9IHJpZ2h0ICsgY2FsZW5kYXJXaWR0aCA+IHdpbmRvdy5kb2N1bWVudC5ib2R5Lm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJyaWdodE1vc3RcIiwgcmlnaHRNb3N0KTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5zdGF0aWMpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS50b3AgPSB0b3AgKyBcInB4XCI7XG4gICAgICAgICAgICBpZiAoIXJpZ2h0TW9zdCkge1xuICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUubGVmdCA9IGxlZnQgKyBcInB4XCI7XG4gICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5yaWdodCA9IFwiYXV0b1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIWNlbnRlck1vc3QpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnN0eWxlLmxlZnQgPSBcImF1dG9cIjtcbiAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnN0eWxlLnJpZ2h0ID0gcmlnaHQgKyBcInB4XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgZG9jID0gZG9jdW1lbnQuc3R5bGVTaGVldHNbMF07XG4gICAgICAgICAgICAgICAgLy8gc29tZSB0ZXN0aW5nIGVudmlyb25tZW50cyBkb24ndCBoYXZlIGNzcyBzdXBwb3J0XG4gICAgICAgICAgICAgICAgaWYgKGRvYyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgdmFyIGJvZHlXaWR0aCA9IHdpbmRvdy5kb2N1bWVudC5ib2R5Lm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgICAgIHZhciBjZW50ZXJMZWZ0ID0gTWF0aC5tYXgoMCwgYm9keVdpZHRoIC8gMiAtIGNhbGVuZGFyV2lkdGggLyAyKTtcbiAgICAgICAgICAgICAgICB2YXIgY2VudGVyQmVmb3JlID0gXCIuZmxhdHBpY2tyLWNhbGVuZGFyLmNlbnRlck1vc3Q6YmVmb3JlXCI7XG4gICAgICAgICAgICAgICAgdmFyIGNlbnRlckFmdGVyID0gXCIuZmxhdHBpY2tyLWNhbGVuZGFyLmNlbnRlck1vc3Q6YWZ0ZXJcIjtcbiAgICAgICAgICAgICAgICB2YXIgY2VudGVySW5kZXggPSBkb2MuY3NzUnVsZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHZhciBjZW50ZXJTdHlsZSA9IFwie2xlZnQ6XCIgKyBpbnB1dEJvdW5kcy5sZWZ0ICsgXCJweDtyaWdodDphdXRvO31cIjtcbiAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcInJpZ2h0TW9zdFwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJjZW50ZXJNb3N0XCIsIHRydWUpO1xuICAgICAgICAgICAgICAgIGRvYy5pbnNlcnRSdWxlKGNlbnRlckJlZm9yZSArIFwiLFwiICsgY2VudGVyQWZ0ZXIgKyBjZW50ZXJTdHlsZSwgY2VudGVySW5kZXgpO1xuICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUubGVmdCA9IGNlbnRlckxlZnQgKyBcInB4XCI7XG4gICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5yaWdodCA9IFwiYXV0b1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlZHJhdygpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5ub0NhbGVuZGFyIHx8IHNlbGYuaXNNb2JpbGUpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdXBkYXRlTmF2aWdhdGlvbkN1cnJlbnRNb250aCgpO1xuICAgICAgICAgICAgYnVpbGREYXlzKCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZm9jdXNBbmRDbG9zZSgpIHtcbiAgICAgICAgICAgIHNlbGYuX2lucHV0LmZvY3VzKCk7XG4gICAgICAgICAgICBpZiAod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihcIk1TSUVcIikgIT09IC0xIHx8XG4gICAgICAgICAgICAgICAgbmF2aWdhdG9yLm1zTWF4VG91Y2hQb2ludHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIGhhY2sgLSBidWdzIGluIHRoZSB3YXkgSUUgaGFuZGxlcyBmb2N1cyBrZWVwcyB0aGUgY2FsZW5kYXIgb3BlblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoc2VsZi5jbG9zZSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2VsZWN0RGF0ZShlKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgdmFyIGlzU2VsZWN0YWJsZSA9IGZ1bmN0aW9uIChkYXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF5LmNsYXNzTGlzdCAmJlxuICAgICAgICAgICAgICAgICAgICBkYXkuY2xhc3NMaXN0LmNvbnRhaW5zKFwiZmxhdHBpY2tyLWRheVwiKSAmJlxuICAgICAgICAgICAgICAgICAgICAhZGF5LmNsYXNzTGlzdC5jb250YWlucyhcImZsYXRwaWNrci1kaXNhYmxlZFwiKSAmJlxuICAgICAgICAgICAgICAgICAgICAhZGF5LmNsYXNzTGlzdC5jb250YWlucyhcIm5vdEFsbG93ZWRcIik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHQgPSBmaW5kUGFyZW50KGUudGFyZ2V0LCBpc1NlbGVjdGFibGUpO1xuICAgICAgICAgICAgaWYgKHQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdDtcbiAgICAgICAgICAgIHZhciBzZWxlY3RlZERhdGUgPSAoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogPSBuZXcgRGF0ZSh0YXJnZXQuZGF0ZU9iai5nZXRUaW1lKCkpKTtcbiAgICAgICAgICAgIHZhciBzaG91bGRDaGFuZ2VNb250aCA9IChzZWxlY3RlZERhdGUuZ2V0TW9udGgoKSA8IHNlbGYuY3VycmVudE1vbnRoIHx8XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWREYXRlLmdldE1vbnRoKCkgPlxuICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRNb250aCArIHNlbGYuY29uZmlnLnNob3dNb250aHMgLSAxKSAmJlxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1vZGUgIT09IFwicmFuZ2VcIjtcbiAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlRWxlbSA9IHRhcmdldDtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInNpbmdsZVwiKVxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcyA9IFtzZWxlY3RlZERhdGVdO1xuICAgICAgICAgICAgZWxzZSBpZiAoc2VsZi5jb25maWcubW9kZSA9PT0gXCJtdWx0aXBsZVwiKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkSW5kZXggPSBpc0RhdGVTZWxlY3RlZChzZWxlY3RlZERhdGUpO1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZEluZGV4KVxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMuc3BsaWNlKHBhcnNlSW50KHNlbGVjdGVkSW5kZXgpLCAxKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcy5wdXNoKHNlbGVjdGVkRGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmNsZWFyKGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqID0gc2VsZWN0ZWREYXRlO1xuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcy5wdXNoKHNlbGVjdGVkRGF0ZSk7XG4gICAgICAgICAgICAgICAgLy8gdW5sZXNzIHNlbGVjdGluZyBzYW1lIGRhdGUgdHdpY2UsIHNvcnQgYXNjZW5kaW5nbHlcbiAgICAgICAgICAgICAgICBpZiAoY29tcGFyZURhdGVzKHNlbGVjdGVkRGF0ZSwgc2VsZi5zZWxlY3RlZERhdGVzWzBdLCB0cnVlKSAhPT0gMClcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEuZ2V0VGltZSgpIC0gYi5nZXRUaW1lKCk7IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0SG91cnNGcm9tSW5wdXRzKCk7XG4gICAgICAgICAgICBpZiAoc2hvdWxkQ2hhbmdlTW9udGgpIHtcbiAgICAgICAgICAgICAgICB2YXIgaXNOZXdZZWFyID0gc2VsZi5jdXJyZW50WWVhciAhPT0gc2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9IHNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudE1vbnRoID0gc2VsZWN0ZWREYXRlLmdldE1vbnRoKCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmV3WWVhcikge1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvblllYXJDaGFuZ2VcIik7XG4gICAgICAgICAgICAgICAgICAgIGJ1aWxkTW9udGhTd2l0Y2goKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25Nb250aENoYW5nZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVwZGF0ZU5hdmlnYXRpb25DdXJyZW50TW9udGgoKTtcbiAgICAgICAgICAgIGJ1aWxkRGF5cygpO1xuICAgICAgICAgICAgdXBkYXRlVmFsdWUoKTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5lbmFibGVUaW1lKVxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gKHNlbGYuc2hvd1RpbWVJbnB1dCA9IHRydWUpOyB9LCA1MCk7XG4gICAgICAgICAgICAvLyBtYWludGFpbiBmb2N1c1xuICAgICAgICAgICAgaWYgKCFzaG91bGRDaGFuZ2VNb250aCAmJlxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1vZGUgIT09IFwicmFuZ2VcIiAmJlxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLnNob3dNb250aHMgPT09IDEpXG4gICAgICAgICAgICAgICAgZm9jdXNPbkRheUVsZW0odGFyZ2V0KTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHNlbGYuc2VsZWN0ZWREYXRlRWxlbSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVFbGVtICYmIHNlbGYuc2VsZWN0ZWREYXRlRWxlbS5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuaG91ckVsZW1lbnQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50ICE9PSB1bmRlZmluZWQgJiYgc2VsZi5ob3VyRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmNsb3NlT25TZWxlY3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgc2luZ2xlID0gc2VsZi5jb25maWcubW9kZSA9PT0gXCJzaW5nbGVcIiAmJiAhc2VsZi5jb25maWcuZW5hYmxlVGltZTtcbiAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA9PT0gMiAmJlxuICAgICAgICAgICAgICAgICAgICAhc2VsZi5jb25maWcuZW5hYmxlVGltZTtcbiAgICAgICAgICAgICAgICBpZiAoc2luZ2xlIHx8IHJhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQW5kQ2xvc2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cmlnZ2VyQ2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIENBTExCQUNLUyA9IHtcbiAgICAgICAgICAgIGxvY2FsZTogW3NldHVwTG9jYWxlLCB1cGRhdGVXZWVrZGF5c10sXG4gICAgICAgICAgICBzaG93TW9udGhzOiBbYnVpbGRNb250aHMsIHNldENhbGVuZGFyV2lkdGgsIGJ1aWxkV2Vla2RheXNdLFxuICAgICAgICAgICAgbWluRGF0ZTogW2p1bXBUb0RhdGVdLFxuICAgICAgICAgICAgbWF4RGF0ZTogW2p1bXBUb0RhdGVdXG4gICAgICAgIH07XG4gICAgICAgIGZ1bmN0aW9uIHNldChvcHRpb24sIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9uICE9PSBudWxsICYmIHR5cGVvZiBvcHRpb24gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHNlbGYuY29uZmlnLCBvcHRpb24pO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBvcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKENBTExCQUNLU1trZXldICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBDQUxMQkFDS1Nba2V5XS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4KCk7IH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnW29wdGlvbl0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAoQ0FMTEJBQ0tTW29wdGlvbl0gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgQ0FMTEJBQ0tTW29wdGlvbl0uZm9yRWFjaChmdW5jdGlvbiAoeCkgeyByZXR1cm4geCgpOyB9KTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChIT09LUy5pbmRleE9mKG9wdGlvbikgPiAtMSlcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWdbb3B0aW9uXSA9IGFycmF5aWZ5KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYucmVkcmF3KCk7XG4gICAgICAgICAgICB1cGRhdGVWYWx1ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0U2VsZWN0ZWREYXRlKGlucHV0RGF0ZSwgZm9ybWF0KSB7XG4gICAgICAgICAgICB2YXIgZGF0ZXMgPSBbXTtcbiAgICAgICAgICAgIGlmIChpbnB1dERhdGUgaW5zdGFuY2VvZiBBcnJheSlcbiAgICAgICAgICAgICAgICBkYXRlcyA9IGlucHV0RGF0ZS5tYXAoZnVuY3Rpb24gKGQpIHsgcmV0dXJuIHNlbGYucGFyc2VEYXRlKGQsIGZvcm1hdCk7IH0pO1xuICAgICAgICAgICAgZWxzZSBpZiAoaW5wdXREYXRlIGluc3RhbmNlb2YgRGF0ZSB8fCB0eXBlb2YgaW5wdXREYXRlID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgIGRhdGVzID0gW3NlbGYucGFyc2VEYXRlKGlucHV0RGF0ZSwgZm9ybWF0KV07XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgaW5wdXREYXRlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChzZWxmLmNvbmZpZy5tb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzaW5nbGVcIjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInRpbWVcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVzID0gW3NlbGYucGFyc2VEYXRlKGlucHV0RGF0ZSwgZm9ybWF0KV07XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm11bHRpcGxlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlcyA9IGlucHV0RGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdChzZWxmLmNvbmZpZy5jb25qdW5jdGlvbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBzZWxmLnBhcnNlRGF0ZShkYXRlLCBmb3JtYXQpOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwicmFuZ2VcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVzID0gaW5wdXREYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KHNlbGYubDEwbi5yYW5nZVNlcGFyYXRvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBzZWxmLnBhcnNlRGF0ZShkYXRlLCBmb3JtYXQpOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmVycm9ySGFuZGxlcihuZXcgRXJyb3IoXCJJbnZhbGlkIGRhdGUgc3VwcGxpZWQ6IFwiICsgSlNPTi5zdHJpbmdpZnkoaW5wdXREYXRlKSkpO1xuICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzID0gZGF0ZXMuZmlsdGVyKGZ1bmN0aW9uIChkKSB7IHJldHVybiBkIGluc3RhbmNlb2YgRGF0ZSAmJiBpc0VuYWJsZWQoZCwgZmFsc2UpOyB9KTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpXG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEuZ2V0VGltZSgpIC0gYi5nZXRUaW1lKCk7IH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldERhdGUoZGF0ZSwgdHJpZ2dlckNoYW5nZSwgZm9ybWF0KSB7XG4gICAgICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSA9PT0gdm9pZCAwKSB7IHRyaWdnZXJDaGFuZ2UgPSBmYWxzZTsgfVxuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gdm9pZCAwKSB7IGZvcm1hdCA9IHNlbGYuY29uZmlnLmRhdGVGb3JtYXQ7IH1cbiAgICAgICAgICAgIGlmICgoZGF0ZSAhPT0gMCAmJiAhZGF0ZSkgfHwgKGRhdGUgaW5zdGFuY2VvZiBBcnJheSAmJiBkYXRlLmxlbmd0aCA9PT0gMCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2xlYXIodHJpZ2dlckNoYW5nZSk7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZERhdGUoZGF0ZSwgZm9ybWF0KTtcbiAgICAgICAgICAgIHNlbGYuc2hvd1RpbWVJbnB1dCA9IHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggPiAwO1xuICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogPVxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlc1tzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBzZWxmLnJlZHJhdygpO1xuICAgICAgICAgICAganVtcFRvRGF0ZSgpO1xuICAgICAgICAgICAgc2V0SG91cnNGcm9tRGF0ZSgpO1xuICAgICAgICAgICAgaWYgKHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNsZWFyKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVwZGF0ZVZhbHVlKHRyaWdnZXJDaGFuZ2UpO1xuICAgICAgICAgICAgaWYgKHRyaWdnZXJDaGFuZ2UpXG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25DaGFuZ2VcIik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcGFyc2VEYXRlUnVsZXMoYXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyXG4gICAgICAgICAgICAgICAgLnNsaWNlKClcbiAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChydWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBydWxlID09PSBcInN0cmluZ1wiIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBydWxlID09PSBcIm51bWJlclwiIHx8XG4gICAgICAgICAgICAgICAgICAgIHJ1bGUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcnNlRGF0ZShydWxlLCB1bmRlZmluZWQsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChydWxlICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBydWxlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgICAgICAgIHJ1bGUuZnJvbSAmJlxuICAgICAgICAgICAgICAgICAgICBydWxlLnRvKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbTogc2VsZi5wYXJzZURhdGUocnVsZS5mcm9tLCB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG86IHNlbGYucGFyc2VEYXRlKHJ1bGUudG8sIHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVsZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geDsgfSk7IC8vIHJlbW92ZSBmYWxzeSB2YWx1ZXNcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXR1cERhdGVzKCkge1xuICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzID0gW107XG4gICAgICAgICAgICBzZWxmLm5vdyA9IHNlbGYucGFyc2VEYXRlKHNlbGYuY29uZmlnLm5vdykgfHwgbmV3IERhdGUoKTtcbiAgICAgICAgICAgIC8vIFdvcmthcm91bmQgSUUxMSBzZXR0aW5nIHBsYWNlaG9sZGVyIGFzIHRoZSBpbnB1dCdzIHZhbHVlXG4gICAgICAgICAgICB2YXIgcHJlbG9hZGVkRGF0ZSA9IHNlbGYuY29uZmlnLmRlZmF1bHREYXRlIHx8XG4gICAgICAgICAgICAgICAgKChzZWxmLmlucHV0Lm5vZGVOYW1lID09PSBcIklOUFVUXCIgfHxcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5pbnB1dC5ub2RlTmFtZSA9PT0gXCJURVhUQVJFQVwiKSAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLmlucHV0LnBsYWNlaG9sZGVyICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQudmFsdWUgPT09IHNlbGYuaW5wdXQucGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgIDogc2VsZi5pbnB1dC52YWx1ZSk7XG4gICAgICAgICAgICBpZiAocHJlbG9hZGVkRGF0ZSlcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZERhdGUocHJlbG9hZGVkRGF0ZSwgc2VsZi5jb25maWcuZGF0ZUZvcm1hdCk7XG4gICAgICAgICAgICBzZWxmLl9pbml0aWFsRGF0ZSA9XG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLnNlbGVjdGVkRGF0ZXNbMF1cbiAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy5taW5EYXRlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5taW5EYXRlLmdldFRpbWUoKSA+IHNlbGYubm93LmdldFRpbWUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5taW5EYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLm1heERhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldFRpbWUoKSA8IHNlbGYubm93LmdldFRpbWUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi5jb25maWcubWF4RGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc2VsZi5ub3c7XG4gICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyID0gc2VsZi5faW5pdGlhbERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgIHNlbGYuY3VycmVudE1vbnRoID0gc2VsZi5faW5pdGlhbERhdGUuZ2V0TW9udGgoKTtcbiAgICAgICAgICAgIGlmIChzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiA9IHNlbGYuc2VsZWN0ZWREYXRlc1swXTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5taW5UaW1lICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcubWluVGltZSA9IHNlbGYucGFyc2VEYXRlKHNlbGYuY29uZmlnLm1pblRpbWUsIFwiSDppXCIpO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1heFRpbWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5tYXhUaW1lID0gc2VsZi5wYXJzZURhdGUoc2VsZi5jb25maWcubWF4VGltZSwgXCJIOmlcIik7XG4gICAgICAgICAgICBzZWxmLm1pbkRhdGVIYXNUaW1lID1cbiAgICAgICAgICAgICAgICAhIXNlbGYuY29uZmlnLm1pbkRhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgKHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0SG91cnMoKSA+IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0TWludXRlcygpID4gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcubWluRGF0ZS5nZXRTZWNvbmRzKCkgPiAwKTtcbiAgICAgICAgICAgIHNlbGYubWF4RGF0ZUhhc1RpbWUgPVxuICAgICAgICAgICAgICAgICEhc2VsZi5jb25maWcubWF4RGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICAoc2VsZi5jb25maWcubWF4RGF0ZS5nZXRIb3VycygpID4gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcubWF4RGF0ZS5nZXRNaW51dGVzKCkgPiAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldFNlY29uZHMoKSA+IDApO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYsIFwic2hvd1RpbWVJbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLl9zaG93VGltZUlucHV0OyB9LFxuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKGJvb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2hvd1RpbWVJbnB1dCA9IGJvb2w7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmNhbGVuZGFyQ29udGFpbmVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJzaG93VGltZUlucHV0XCIsIGJvb2wpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmlzT3BlbiAmJiBwb3NpdGlvbkNhbGVuZGFyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0dXBJbnB1dHMoKSB7XG4gICAgICAgICAgICBzZWxmLmlucHV0ID0gc2VsZi5jb25maWcud3JhcFxuICAgICAgICAgICAgICAgID8gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiW2RhdGEtaW5wdXRdXCIpXG4gICAgICAgICAgICAgICAgOiBlbGVtZW50O1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgIGlmICghc2VsZi5pbnB1dCkge1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmVycm9ySGFuZGxlcihuZXcgRXJyb3IoXCJJbnZhbGlkIGlucHV0IGVsZW1lbnQgc3BlY2lmaWVkXCIpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBoYWNrOiBzdG9yZSBwcmV2aW91cyB0eXBlIHRvIHJlc3RvcmUgaXQgYWZ0ZXIgZGVzdHJveSgpXG4gICAgICAgICAgICBzZWxmLmlucHV0Ll90eXBlID0gc2VsZi5pbnB1dC50eXBlO1xuICAgICAgICAgICAgc2VsZi5pbnB1dC50eXBlID0gXCJ0ZXh0XCI7XG4gICAgICAgICAgICBzZWxmLmlucHV0LmNsYXNzTGlzdC5hZGQoXCJmbGF0cGlja3ItaW5wdXRcIik7XG4gICAgICAgICAgICBzZWxmLl9pbnB1dCA9IHNlbGYuaW5wdXQ7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuYWx0SW5wdXQpIHtcbiAgICAgICAgICAgICAgICAvLyByZXBsaWNhdGUgc2VsZi5lbGVtZW50XG4gICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dCA9IGNyZWF0ZUVsZW1lbnQoc2VsZi5pbnB1dC5ub2RlTmFtZSwgc2VsZi5jb25maWcuYWx0SW5wdXRDbGFzcyk7XG4gICAgICAgICAgICAgICAgc2VsZi5faW5wdXQgPSBzZWxmLmFsdElucHV0O1xuICAgICAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQucGxhY2Vob2xkZXIgPSBzZWxmLmlucHV0LnBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQuZGlzYWJsZWQgPSBzZWxmLmlucHV0LmRpc2FibGVkO1xuICAgICAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQucmVxdWlyZWQgPSBzZWxmLmlucHV0LnJlcXVpcmVkO1xuICAgICAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQudGFiSW5kZXggPSBzZWxmLmlucHV0LnRhYkluZGV4O1xuICAgICAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQudHlwZSA9IFwidGV4dFwiO1xuICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcImhpZGRlblwiKTtcbiAgICAgICAgICAgICAgICBpZiAoIXNlbGYuY29uZmlnLnN0YXRpYyAmJiBzZWxmLmlucHV0LnBhcmVudE5vZGUpXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc2VsZi5hbHRJbnB1dCwgc2VsZi5pbnB1dC5uZXh0U2libGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXNlbGYuY29uZmlnLmFsbG93SW5wdXQpXG4gICAgICAgICAgICAgICAgc2VsZi5faW5wdXQuc2V0QXR0cmlidXRlKFwicmVhZG9ubHlcIiwgXCJyZWFkb25seVwiKTtcbiAgICAgICAgICAgIHNlbGYuX3Bvc2l0aW9uRWxlbWVudCA9IHNlbGYuY29uZmlnLnBvc2l0aW9uRWxlbWVudCB8fCBzZWxmLl9pbnB1dDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXR1cE1vYmlsZSgpIHtcbiAgICAgICAgICAgIHZhciBpbnB1dFR5cGUgPSBzZWxmLmNvbmZpZy5lbmFibGVUaW1lXG4gICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5ub0NhbGVuZGFyXG4gICAgICAgICAgICAgICAgICAgID8gXCJ0aW1lXCJcbiAgICAgICAgICAgICAgICAgICAgOiBcImRhdGV0aW1lLWxvY2FsXCJcbiAgICAgICAgICAgICAgICA6IFwiZGF0ZVwiO1xuICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dCA9IGNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCBzZWxmLmlucHV0LmNsYXNzTmFtZSArIFwiIGZsYXRwaWNrci1tb2JpbGVcIik7XG4gICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LnN0ZXAgPSBzZWxmLmlucHV0LmdldEF0dHJpYnV0ZShcInN0ZXBcIikgfHwgXCJhbnlcIjtcbiAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQudGFiSW5kZXggPSAxO1xuICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC50eXBlID0gaW5wdXRUeXBlO1xuICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC5kaXNhYmxlZCA9IHNlbGYuaW5wdXQuZGlzYWJsZWQ7XG4gICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LnJlcXVpcmVkID0gc2VsZi5pbnB1dC5yZXF1aXJlZDtcbiAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQucGxhY2Vob2xkZXIgPSBzZWxmLmlucHV0LnBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgc2VsZi5tb2JpbGVGb3JtYXRTdHIgPVxuICAgICAgICAgICAgICAgIGlucHV0VHlwZSA9PT0gXCJkYXRldGltZS1sb2NhbFwiXG4gICAgICAgICAgICAgICAgICAgID8gXCJZLW0tZFxcXFxUSDppOlNcIlxuICAgICAgICAgICAgICAgICAgICA6IGlucHV0VHlwZSA9PT0gXCJkYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gXCJZLW0tZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwiSDppOlNcIjtcbiAgICAgICAgICAgIGlmIChzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQuZGVmYXVsdFZhbHVlID0gc2VsZi5tb2JpbGVJbnB1dC52YWx1ZSA9IHNlbGYuZm9ybWF0RGF0ZShzZWxmLnNlbGVjdGVkRGF0ZXNbMF0sIHNlbGYubW9iaWxlRm9ybWF0U3RyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5taW5EYXRlKVxuICAgICAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQubWluID0gc2VsZi5mb3JtYXREYXRlKHNlbGYuY29uZmlnLm1pbkRhdGUsIFwiWS1tLWRcIik7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubWF4RGF0ZSlcbiAgICAgICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0Lm1heCA9IHNlbGYuZm9ybWF0RGF0ZShzZWxmLmNvbmZpZy5tYXhEYXRlLCBcIlktbS1kXCIpO1xuICAgICAgICAgICAgc2VsZi5pbnB1dC50eXBlID0gXCJoaWRkZW5cIjtcbiAgICAgICAgICAgIGlmIChzZWxmLmFsdElucHV0ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC50eXBlID0gXCJoaWRkZW5cIjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuaW5wdXQucGFyZW50Tm9kZSlcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5pbnB1dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzZWxmLm1vYmlsZUlucHV0LCBzZWxmLmlucHV0Lm5leHRTaWJsaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChfYSkgeyB9XG4gICAgICAgICAgICBiaW5kKHNlbGYubW9iaWxlSW5wdXQsIFwiY2hhbmdlXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5zZXREYXRlKGUudGFyZ2V0LnZhbHVlLCBmYWxzZSwgc2VsZi5tb2JpbGVGb3JtYXRTdHIpO1xuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uQ2hhbmdlXCIpO1xuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uQ2xvc2VcIik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0b2dnbGUoZSkge1xuICAgICAgICAgICAgaWYgKHNlbGYuaXNPcGVuID09PSB0cnVlKVxuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmNsb3NlKCk7XG4gICAgICAgICAgICBzZWxmLm9wZW4oZSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdHJpZ2dlckV2ZW50KGV2ZW50LCBkYXRhKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgaW5zdGFuY2UgaGFzIGJlZW4gZGVzdHJveWVkIGFscmVhZHksIGFsbCBob29rcyBoYXZlIGJlZW4gcmVtb3ZlZFxuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGhvb2tzID0gc2VsZi5jb25maWdbZXZlbnRdO1xuICAgICAgICAgICAgaWYgKGhvb2tzICE9PSB1bmRlZmluZWQgJiYgaG9va3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBob29rc1tpXSAmJiBpIDwgaG9va3MubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgICAgIGhvb2tzW2ldKHNlbGYuc2VsZWN0ZWREYXRlcywgc2VsZi5pbnB1dC52YWx1ZSwgc2VsZiwgZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXZlbnQgPT09IFwib25DaGFuZ2VcIikge1xuICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQuZGlzcGF0Y2hFdmVudChjcmVhdGVFdmVudChcImNoYW5nZVwiKSk7XG4gICAgICAgICAgICAgICAgLy8gbWFueSBmcm9udC1lbmQgZnJhbWV3b3JrcyBiaW5kIHRvIHRoZSBpbnB1dCBldmVudFxuICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQuZGlzcGF0Y2hFdmVudChjcmVhdGVFdmVudChcImlucHV0XCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjcmVhdGVFdmVudChuYW1lKSB7XG4gICAgICAgICAgICB2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIik7XG4gICAgICAgICAgICBlLmluaXRFdmVudChuYW1lLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzRGF0ZVNlbGVjdGVkKGRhdGUpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBhcmVEYXRlcyhzZWxmLnNlbGVjdGVkRGF0ZXNbaV0sIGRhdGUpID09PSAwKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJcIiArIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNEYXRlSW5SYW5nZShkYXRlKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubW9kZSAhPT0gXCJyYW5nZVwiIHx8IHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggPCAyKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiAoY29tcGFyZURhdGVzKGRhdGUsIHNlbGYuc2VsZWN0ZWREYXRlc1swXSkgPj0gMCAmJlxuICAgICAgICAgICAgICAgIGNvbXBhcmVEYXRlcyhkYXRlLCBzZWxmLnNlbGVjdGVkRGF0ZXNbMV0pIDw9IDApO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZU5hdmlnYXRpb25DdXJyZW50TW9udGgoKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubm9DYWxlbmRhciB8fCBzZWxmLmlzTW9iaWxlIHx8ICFzZWxmLm1vbnRoTmF2KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHNlbGYueWVhckVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKHllYXJFbGVtZW50LCBpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGQgPSBuZXcgRGF0ZShzZWxmLmN1cnJlbnRZZWFyLCBzZWxmLmN1cnJlbnRNb250aCwgMSk7XG4gICAgICAgICAgICAgICAgZC5zZXRNb250aChzZWxmLmN1cnJlbnRNb250aCArIGkpO1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5zaG93TW9udGhzID4gMSB8fFxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5tb250aFNlbGVjdG9yVHlwZSA9PT0gXCJzdGF0aWNcIikge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLm1vbnRoRWxlbWVudHNbaV0udGV4dENvbnRlbnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGhUb1N0cihkLmdldE1vbnRoKCksIHNlbGYuY29uZmlnLnNob3J0aGFuZEN1cnJlbnRNb250aCwgc2VsZi5sMTBuKSArIFwiIFwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5tb250aHNEcm9wZG93bkNvbnRhaW5lci52YWx1ZSA9IGQuZ2V0TW9udGgoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB5ZWFyRWxlbWVudC52YWx1ZSA9IGQuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZWxmLl9oaWRlUHJldk1vbnRoQXJyb3cgPVxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1pbkRhdGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICAoc2VsZi5jdXJyZW50WWVhciA9PT0gc2VsZi5jb25maWcubWluRGF0ZS5nZXRGdWxsWWVhcigpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY3VycmVudE1vbnRoIDw9IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0TW9udGgoKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmN1cnJlbnRZZWFyIDwgc2VsZi5jb25maWcubWluRGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgIHNlbGYuX2hpZGVOZXh0TW9udGhBcnJvdyA9XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcubWF4RGF0ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIChzZWxmLmN1cnJlbnRZZWFyID09PSBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi5jdXJyZW50TW9udGggKyAxID4gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRNb250aCgpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHNlbGYuY3VycmVudFllYXIgPiBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGdldERhdGVTdHIoZm9ybWF0KSB7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi5zZWxlY3RlZERhdGVzXG4gICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoZE9iaikgeyByZXR1cm4gc2VsZi5mb3JtYXREYXRlKGRPYmosIGZvcm1hdCk7IH0pXG4gICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoZCwgaSwgYXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29uZmlnLm1vZGUgIT09IFwicmFuZ2VcIiB8fFxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5lbmFibGVUaW1lIHx8XG4gICAgICAgICAgICAgICAgICAgIGFyci5pbmRleE9mKGQpID09PSBpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuam9pbihzZWxmLmNvbmZpZy5tb2RlICE9PSBcInJhbmdlXCJcbiAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLmNvbmp1bmN0aW9uXG4gICAgICAgICAgICAgICAgOiBzZWxmLmwxMG4ucmFuZ2VTZXBhcmF0b3IpO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBVcGRhdGVzIHRoZSB2YWx1ZXMgb2YgaW5wdXRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2FsZW5kYXJcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVZhbHVlKHRyaWdnZXJDaGFuZ2UpIHtcbiAgICAgICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlID09PSB2b2lkIDApIHsgdHJpZ2dlckNoYW5nZSA9IHRydWU7IH1cbiAgICAgICAgICAgIGlmIChzZWxmLm1vYmlsZUlucHV0ICE9PSB1bmRlZmluZWQgJiYgc2VsZi5tb2JpbGVGb3JtYXRTdHIpIHtcbiAgICAgICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LnZhbHVlID1cbiAgICAgICAgICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmZvcm1hdERhdGUoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmosIHNlbGYubW9iaWxlRm9ybWF0U3RyKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5pbnB1dC52YWx1ZSA9IGdldERhdGVTdHIoc2VsZi5jb25maWcuZGF0ZUZvcm1hdCk7XG4gICAgICAgICAgICBpZiAoc2VsZi5hbHRJbnB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC52YWx1ZSA9IGdldERhdGVTdHIoc2VsZi5jb25maWcuYWx0Rm9ybWF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvblZhbHVlVXBkYXRlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG9uTW9udGhOYXZDbGljayhlKSB7XG4gICAgICAgICAgICB2YXIgaXNQcmV2TW9udGggPSBzZWxmLnByZXZNb250aE5hdi5jb250YWlucyhlLnRhcmdldCk7XG4gICAgICAgICAgICB2YXIgaXNOZXh0TW9udGggPSBzZWxmLm5leHRNb250aE5hdi5jb250YWlucyhlLnRhcmdldCk7XG4gICAgICAgICAgICBpZiAoaXNQcmV2TW9udGggfHwgaXNOZXh0TW9udGgpIHtcbiAgICAgICAgICAgICAgICBjaGFuZ2VNb250aChpc1ByZXZNb250aCA/IC0xIDogMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzZWxmLnllYXJFbGVtZW50cy5pbmRleE9mKGUudGFyZ2V0KSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgZS50YXJnZXQuc2VsZWN0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChlLnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoXCJhcnJvd1VwXCIpKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jaGFuZ2VZZWFyKHNlbGYuY3VycmVudFllYXIgKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcImFycm93RG93blwiKSkge1xuICAgICAgICAgICAgICAgIHNlbGYuY2hhbmdlWWVhcihzZWxmLmN1cnJlbnRZZWFyIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdGltZVdyYXBwZXIoZSkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdmFyIGlzS2V5RG93biA9IGUudHlwZSA9PT0gXCJrZXlkb3duXCIsIGlucHV0ID0gZS50YXJnZXQ7XG4gICAgICAgICAgICBpZiAoc2VsZi5hbVBNICE9PSB1bmRlZmluZWQgJiYgZS50YXJnZXQgPT09IHNlbGYuYW1QTSkge1xuICAgICAgICAgICAgICAgIHNlbGYuYW1QTS50ZXh0Q29udGVudCA9XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubDEwbi5hbVBNW2ludChzZWxmLmFtUE0udGV4dENvbnRlbnQgPT09IHNlbGYubDEwbi5hbVBNWzBdKV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgbWluID0gcGFyc2VGbG9hdChpbnB1dC5nZXRBdHRyaWJ1dGUoXCJtaW5cIikpLCBtYXggPSBwYXJzZUZsb2F0KGlucHV0LmdldEF0dHJpYnV0ZShcIm1heFwiKSksIHN0ZXAgPSBwYXJzZUZsb2F0KGlucHV0LmdldEF0dHJpYnV0ZShcInN0ZXBcIikpLCBjdXJWYWx1ZSA9IHBhcnNlSW50KGlucHV0LnZhbHVlLCAxMCksIGRlbHRhID0gZS5kZWx0YSB8fFxuICAgICAgICAgICAgICAgIChpc0tleURvd24gPyAoZS53aGljaCA9PT0gMzggPyAxIDogLTEpIDogMCk7XG4gICAgICAgICAgICB2YXIgbmV3VmFsdWUgPSBjdXJWYWx1ZSArIHN0ZXAgKiBkZWx0YTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQudmFsdWUgIT09IFwidW5kZWZpbmVkXCIgJiYgaW5wdXQudmFsdWUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlzSG91ckVsZW0gPSBpbnB1dCA9PT0gc2VsZi5ob3VyRWxlbWVudCwgaXNNaW51dGVFbGVtID0gaW5wdXQgPT09IHNlbGYubWludXRlRWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAobmV3VmFsdWUgPCBtaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KCFpc0hvdXJFbGVtKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludChpc0hvdXJFbGVtKSAmJiBpbnQoIXNlbGYuYW1QTSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNNaW51dGVFbGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50TnVtSW5wdXQodW5kZWZpbmVkLCAtMSwgc2VsZi5ob3VyRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5ld1ZhbHVlID4gbWF4KSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0ID09PSBzZWxmLmhvdXJFbGVtZW50ID8gbmV3VmFsdWUgLSBtYXggLSBpbnQoIXNlbGYuYW1QTSkgOiBtaW47XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc01pbnV0ZUVsZW0pXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnROdW1JbnB1dCh1bmRlZmluZWQsIDEsIHNlbGYuaG91ckVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5hbVBNICYmXG4gICAgICAgICAgICAgICAgICAgIGlzSG91ckVsZW0gJiZcbiAgICAgICAgICAgICAgICAgICAgKHN0ZXAgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3VmFsdWUgKyBjdXJWYWx1ZSA9PT0gMjNcbiAgICAgICAgICAgICAgICAgICAgICAgIDogTWF0aC5hYnMobmV3VmFsdWUgLSBjdXJWYWx1ZSkgPiBzdGVwKSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmFtUE0udGV4dENvbnRlbnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sMTBuLmFtUE1baW50KHNlbGYuYW1QTS50ZXh0Q29udGVudCA9PT0gc2VsZi5sMTBuLmFtUE1bMF0pXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSBwYWQobmV3VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGluaXQoKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgZnVuY3Rpb24gX2ZsYXRwaWNrcihub2RlTGlzdCwgY29uZmlnKSB7XG4gICAgICAgIC8vIHN0YXRpYyBsaXN0XG4gICAgICAgIHZhciBub2RlcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZVxuICAgICAgICAgICAgLmNhbGwobm9kZUxpc3QpXG4gICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7IH0pO1xuICAgICAgICB2YXIgaW5zdGFuY2VzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChub2RlLmdldEF0dHJpYnV0ZShcImRhdGEtZnAtb21pdFwiKSAhPT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuX2ZsYXRwaWNrciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuX2ZsYXRwaWNrci5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuX2ZsYXRwaWNrciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbm9kZS5fZmxhdHBpY2tyID0gRmxhdHBpY2tySW5zdGFuY2Uobm9kZSwgY29uZmlnIHx8IHt9KTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZXMucHVzaChub2RlLl9mbGF0cGlja3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnN0YW5jZXMubGVuZ3RoID09PSAxID8gaW5zdGFuY2VzWzBdIDogaW5zdGFuY2VzO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgdHlwZW9mIEhUTUxDb2xsZWN0aW9uICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgIHR5cGVvZiBOb2RlTGlzdCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAvLyBicm93c2VyIGVudlxuICAgICAgICBIVE1MQ29sbGVjdGlvbi5wcm90b3R5cGUuZmxhdHBpY2tyID0gTm9kZUxpc3QucHJvdG90eXBlLmZsYXRwaWNrciA9IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgICAgIHJldHVybiBfZmxhdHBpY2tyKHRoaXMsIGNvbmZpZyk7XG4gICAgICAgIH07XG4gICAgICAgIEhUTUxFbGVtZW50LnByb3RvdHlwZS5mbGF0cGlja3IgPSBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgICAgICByZXR1cm4gX2ZsYXRwaWNrcihbdGhpc10sIGNvbmZpZyk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgdmFyIGZsYXRwaWNrciA9IGZ1bmN0aW9uIChzZWxlY3RvciwgY29uZmlnKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBfZmxhdHBpY2tyKHdpbmRvdy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzZWxlY3RvciBpbnN0YW5jZW9mIE5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBfZmxhdHBpY2tyKFtzZWxlY3Rvcl0sIGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gX2ZsYXRwaWNrcihzZWxlY3RvciwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBmbGF0cGlja3IuZGVmYXVsdENvbmZpZyA9IHt9O1xuICAgIGZsYXRwaWNrci5sMTBucyA9IHtcbiAgICAgICAgZW46IF9fYXNzaWduKHt9LCBlbmdsaXNoKSxcbiAgICAgICAgXCJkZWZhdWx0XCI6IF9fYXNzaWduKHt9LCBlbmdsaXNoKVxuICAgIH07XG4gICAgZmxhdHBpY2tyLmxvY2FsaXplID0gZnVuY3Rpb24gKGwxMG4pIHtcbiAgICAgICAgZmxhdHBpY2tyLmwxMG5zW1wiZGVmYXVsdFwiXSA9IF9fYXNzaWduKHt9LCBmbGF0cGlja3IubDEwbnNbXCJkZWZhdWx0XCJdLCBsMTBuKTtcbiAgICB9O1xuICAgIGZsYXRwaWNrci5zZXREZWZhdWx0cyA9IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgZmxhdHBpY2tyLmRlZmF1bHRDb25maWcgPSBfX2Fzc2lnbih7fSwgZmxhdHBpY2tyLmRlZmF1bHRDb25maWcsIGNvbmZpZyk7XG4gICAgfTtcbiAgICBmbGF0cGlja3IucGFyc2VEYXRlID0gY3JlYXRlRGF0ZVBhcnNlcih7fSk7XG4gICAgZmxhdHBpY2tyLmZvcm1hdERhdGUgPSBjcmVhdGVEYXRlRm9ybWF0dGVyKHt9KTtcbiAgICBmbGF0cGlja3IuY29tcGFyZURhdGVzID0gY29tcGFyZURhdGVzO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBqUXVlcnkgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGpRdWVyeS5mbiAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBqUXVlcnkuZm4uZmxhdHBpY2tyID0gZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICAgICAgcmV0dXJuIF9mbGF0cGlja3IodGhpcywgY29uZmlnKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9jYW1lbGNhc2VcbiAgICBEYXRlLnByb3RvdHlwZS5mcF9pbmNyID0gZnVuY3Rpb24gKGRheXMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMuZ2V0RnVsbFllYXIoKSwgdGhpcy5nZXRNb250aCgpLCB0aGlzLmdldERhdGUoKSArICh0eXBlb2YgZGF5cyA9PT0gXCJzdHJpbmdcIiA/IHBhcnNlSW50KGRheXMsIDEwKSA6IGRheXMpKTtcbiAgICB9O1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHdpbmRvdy5mbGF0cGlja3IgPSBmbGF0cGlja3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZsYXRwaWNrcjtcblxufSkpO1xuIiwiaWYoIWdsb2JhbFtcIkJhc2lzXCJdKSBnbG9iYWxbXCJCYXNpc1wiXSA9IHt9O1xubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxbXCJCYXNpc1wiXVtcIkFnR3JpZENvbXBvbmVudHNcIl0gPSByZXF1aXJlKFwiLSFEOlxcXFxHaXRodWJcXFxcQkJqR3JpZEV4V2lkZ2V0XFxcXGNsaWVudFxcXFxub2RlX21vZHVsZXNcXFxcYmFiZWwtbG9hZGVyXFxcXGxpYlxcXFxpbmRleC5qcz8/cmVmLS00IS5cXFxcYmFzaXMtYWdncmlkLWNvbXBvbmVudHMuanNcIik7IiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNDIpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIGI3MGY4ZDVmMDZjOWVhNmIyZThmIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IENvbXBvbmVudCBmcm9tICcuL0NvbXBvbmVudCdcblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9uZW50XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvQ29tcG9uZW50L2luZGV4LmpzIiwiaW1wb3J0IHsgZGVjb3JhdGUsIGNyZWF0ZURlZmF1bHRTZXR0ZXIsXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMsIGdldE93bktleXMsIGJpbmQgfSBmcm9tICcuL3ByaXZhdGUvdXRpbHMnO1xuY29uc3QgeyBkZWZpbmVQcm9wZXJ0eSwgZ2V0UHJvdG90eXBlT2YgfSA9IE9iamVjdDtcblxubGV0IG1hcFN0b3JlO1xuXG5mdW5jdGlvbiBnZXRCb3VuZFN1cGVyKG9iaiwgZm4pIHtcbiAgaWYgKHR5cGVvZiBXZWFrTWFwID09PSAndW5kZWZpbmVkJykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBVc2luZyBAYXV0b2JpbmQgb24gJHtmbi5uYW1lfSgpIHJlcXVpcmVzIFdlYWtNYXAgc3VwcG9ydCBkdWUgdG8gaXRzIHVzZSBvZiBzdXBlci4ke2ZuLm5hbWV9KClcbiAgICAgIFNlZSBodHRwczovL2dpdGh1Yi5jb20vamF5cGhlbHBzL2NvcmUtZGVjb3JhdG9ycy5qcy9pc3N1ZXMvMjBgXG4gICAgKTtcbiAgfVxuXG4gIGlmICghbWFwU3RvcmUpIHtcbiAgICAgbWFwU3RvcmUgPSBuZXcgV2Vha01hcCgpO1xuICB9XG5cbiAgaWYgKG1hcFN0b3JlLmhhcyhvYmopID09PSBmYWxzZSkge1xuICAgIG1hcFN0b3JlLnNldChvYmosIG5ldyBXZWFrTWFwKCkpO1xuICB9XG5cbiAgY29uc3Qgc3VwZXJTdG9yZSA9IG1hcFN0b3JlLmdldChvYmopO1xuXG4gIGlmIChzdXBlclN0b3JlLmhhcyhmbikgPT09IGZhbHNlKSB7XG4gICAgc3VwZXJTdG9yZS5zZXQoZm4sIGJpbmQoZm4sIG9iaikpO1xuICB9XG5cbiAgcmV0dXJuIHN1cGVyU3RvcmUuZ2V0KGZuKTtcbn1cblxuZnVuY3Rpb24gYXV0b2JpbmRDbGFzcyhrbGFzcykge1xuICBjb25zdCBkZXNjcyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoa2xhc3MucHJvdG90eXBlKTtcbiAgY29uc3Qga2V5cyA9IGdldE93bktleXMoZGVzY3MpO1xuXG4gIGZvciAobGV0IGkgPSAwLCBsID0ga2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgIGNvbnN0IGRlc2MgPSBkZXNjc1trZXldO1xuXG4gICAgaWYgKHR5cGVvZiBkZXNjLnZhbHVlICE9PSAnZnVuY3Rpb24nIHx8IGtleSA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZGVmaW5lUHJvcGVydHkoa2xhc3MucHJvdG90eXBlLCBrZXksIGF1dG9iaW5kTWV0aG9kKGtsYXNzLnByb3RvdHlwZSwga2V5LCBkZXNjKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXV0b2JpbmRNZXRob2QodGFyZ2V0LCBrZXksIHsgdmFsdWU6IGZuLCBjb25maWd1cmFibGUsIGVudW1lcmFibGUgfSkge1xuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBAYXV0b2JpbmQgY2FuIG9ubHkgYmUgdXNlZCBvbiBmdW5jdGlvbnMsIG5vdDogJHtmbn1gKTtcbiAgfVxuXG4gIGNvbnN0IHsgY29uc3RydWN0b3IgfSA9IHRhcmdldDtcblxuICByZXR1cm4ge1xuICAgIGNvbmZpZ3VyYWJsZSxcbiAgICBlbnVtZXJhYmxlLFxuXG4gICAgZ2V0KCkge1xuICAgICAgLy8gQ2xhc3MucHJvdG90eXBlLmtleSBsb29rdXBcbiAgICAgIC8vIFNvbWVvbmUgYWNjZXNzZXMgdGhlIHByb3BlcnR5IGRpcmVjdGx5IG9uIHRoZSBwcm90b3R5cGUgb24gd2hpY2ggaXQgaXNcbiAgICAgIC8vIGFjdHVhbGx5IGRlZmluZWQgb24sIGkuZS4gQ2xhc3MucHJvdG90eXBlLmhhc093blByb3BlcnR5KGtleSlcbiAgICAgIGlmICh0aGlzID09PSB0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgfVxuXG4gICAgICAvLyBDbGFzcy5wcm90b3R5cGUua2V5IGxvb2t1cFxuICAgICAgLy8gU29tZW9uZSBhY2Nlc3NlcyB0aGUgcHJvcGVydHkgZGlyZWN0bHkgb24gYSBwcm90b3R5cGUgYnV0IGl0IHdhcyBmb3VuZFxuICAgICAgLy8gdXAgdGhlIGNoYWluLCBub3QgZGVmaW5lZCBkaXJlY3RseSBvbiBpdFxuICAgICAgLy8gaS5lLiBDbGFzcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoa2V5KSA9PSBmYWxzZSAmJiBrZXkgaW4gQ2xhc3MucHJvdG90eXBlXG4gICAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciAhPT0gY29uc3RydWN0b3IgJiYgZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3IgPT09IGNvbnN0cnVjdG9yKSB7XG4gICAgICAgIHJldHVybiBmbjtcbiAgICAgIH1cblxuICAgICAgLy8gQXV0b2JvdW5kIG1ldGhvZCBjYWxsaW5nIHN1cGVyLnNhbWVNZXRob2QoKSB3aGljaCBpcyBhbHNvIGF1dG9ib3VuZCBhbmQgc28gb24uXG4gICAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciAhPT0gY29uc3RydWN0b3IgJiYga2V5IGluIHRoaXMuY29uc3RydWN0b3IucHJvdG90eXBlKSB7XG4gICAgICAgIHJldHVybiBnZXRCb3VuZFN1cGVyKHRoaXMsIGZuKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYm91bmRGbiA9IGJpbmQoZm4sIHRoaXMpO1xuXG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgLy8gTk9UIGVudW1lcmFibGUgd2hlbiBpdCdzIGEgYm91bmQgbWV0aG9kXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogYm91bmRGblxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBib3VuZEZuO1xuICAgIH0sXG4gICAgc2V0OiBjcmVhdGVEZWZhdWx0U2V0dGVyKGtleSlcbiAgfTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlKGFyZ3MpIHtcbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGF1dG9iaW5kQ2xhc3MoLi4uYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGF1dG9iaW5kTWV0aG9kKC4uLmFyZ3MpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGF1dG9iaW5kKC4uLmFyZ3MpIHtcbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBoYW5kbGUoYXJndW1lbnRzKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBoYW5kbGUoYXJncyk7XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWRlY29yYXRvcnMvc3JjL2F1dG9iaW5kLmpzIiwiaW1wb3J0IHsgZGVjb3JhdGUgfSBmcm9tICcuL3ByaXZhdGUvdXRpbHMnO1xuXG5jb25zdCBHRU5FUklDX0ZVTkNUSU9OX0VSUk9SID0gJ3tjaGlsZH0gZG9lcyBub3QgcHJvcGVybHkgb3ZlcnJpZGUge3BhcmVudH0nO1xuY29uc3QgRlVOQ1RJT05fUkVHRVhQID0gL15mdW5jdGlvbiAoW18kYS16QS1aXFx4QTAtXFx1RkZGRl1bXyRhLXpBLVowLTlcXHhBMC1cXHVGRkZGXSopPyhcXChbXlxcKV0qXFwpKVtcXHNcXFNdKyQvO1xuXG5jbGFzcyBTeW50YXhFcnJvclJlcG9ydGVyIHtcbiAgcGFyZW50S2xhc3M7XG4gIGNoaWxkS2xhc3M7XG4gIHBhcmVudERlc2NyaXB0b3I7XG4gIGNoaWxkRGVzY3JpcHRvcjtcbiAgXG4gIGdldCBrZXkoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGREZXNjcmlwdG9yLmtleTsgIFxuICB9XG4gIFxuICBnZXQgcGFyZW50Tm90YXRpb24oKSB7XG4gICAgcmV0dXJuIGAke3RoaXMucGFyZW50S2xhc3MuY29uc3RydWN0b3IubmFtZX0jJHt0aGlzLnBhcmVudFByb3BlcnR5U2lnbmF0dXJlfWA7XG4gIH1cblxuICBnZXQgY2hpbGROb3RhdGlvbigpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5jaGlsZEtsYXNzLmNvbnN0cnVjdG9yLm5hbWV9IyR7dGhpcy5jaGlsZFByb3BlcnR5U2lnbmF0dXJlfWA7XG4gIH1cbiAgXG4gIGdldCBwYXJlbnRUb3BpYygpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0VG9waWModGhpcy5wYXJlbnREZXNjcmlwdG9yKTtcbiAgfVxuICBcbiAgZ2V0IGNoaWxkVG9waWMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldFRvcGljKHRoaXMuY2hpbGREZXNjcmlwdG9yKTtcbiAgfVxuICBcbiAgX2dldFRvcGljKGRlc2NyaXB0b3IpIHtcbiAgICBpZiAoZGVzY3JpcHRvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbnVsbDsgIFxuICAgIH1cbiAgICBcbiAgICBpZiAoJ3ZhbHVlJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgICByZXR1cm4gZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9XG4gICAgXG4gICAgaWYgKCdnZXQnIGluIGRlc2NyaXB0b3IpIHtcbiAgICAgIHJldHVybiBkZXNjcmlwdG9yLmdldDtcbiAgICB9XG4gICAgXG4gICAgaWYgKCdzZXQnIGluIGRlc2NyaXB0b3IpIHtcbiAgICAgIHJldHVybiBkZXNjcmlwdG9yLnNldDtcbiAgICB9XG4gIH1cbiAgXG4gIGdldCBwYXJlbnRQcm9wZXJ0eVNpZ25hdHVyZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZXh0cmFjdFRvcGljU2lnbmF0dXJlKHRoaXMucGFyZW50VG9waWMpOyBcbiAgfVxuICBcbiAgZ2V0IGNoaWxkUHJvcGVydHlTaWduYXR1cmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2V4dHJhY3RUb3BpY1NpZ25hdHVyZSh0aGlzLmNoaWxkVG9waWMpOyBcbiAgfVxuICBcbiAgX2V4dHJhY3RUb3BpY1NpZ25hdHVyZSh0b3BpYykge1xuICAgIHN3aXRjaCAodHlwZW9mIHRvcGljKSB7XG4gICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgIHJldHVybiB0aGlzLl9leHRyYWN0RnVuY3Rpb25TaWduYXR1cmUodG9waWMpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRoaXMua2V5O1xuICAgIH1cbiAgfVxuICBcbiAgX2V4dHJhY3RGdW5jdGlvblNpZ25hdHVyZShmbikge1xuICAgIHJldHVybiBmblxuICAgICAgLnRvU3RyaW5nKClcbiAgICAgIC5yZXBsYWNlKFxuICAgICAgICBGVU5DVElPTl9SRUdFWFAsXG4gICAgICAgIChtYXRjaCwgbmFtZSA9IHRoaXMua2V5LCBwYXJhbXMpID0+IG5hbWUgKyBwYXJhbXNcbiAgICAgICk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihwYXJlbnRLbGFzcywgY2hpbGRLbGFzcywgcGFyZW50RGVzY3JpcHRvciwgY2hpbGREZXNjcmlwdG9yKSB7XG4gICAgdGhpcy5wYXJlbnRLbGFzcyA9IHBhcmVudEtsYXNzO1xuICAgIHRoaXMuY2hpbGRLbGFzcyA9IGNoaWxkS2xhc3M7XG4gICAgdGhpcy5wYXJlbnREZXNjcmlwdG9yID0gcGFyZW50RGVzY3JpcHRvcjtcbiAgICB0aGlzLmNoaWxkRGVzY3JpcHRvciA9IGNoaWxkRGVzY3JpcHRvcjtcbiAgfVxuICBcbiAgYXNzZXJ0KGNvbmRpdGlvbiwgbXNnID0gJycpIHtcbiAgICBpZiAoY29uZGl0aW9uICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLmVycm9yKEdFTkVSSUNfRlVOQ1RJT05fRVJST1IgKyBtc2cpO1xuICAgIH1cbiAgfVxuICBcbiAgZXJyb3IobXNnKSB7XG4gICAgbXNnID0gbXNnXG4gICAgICAvLyBSZXBsYWNlIGxhemlseSwgYmVjYXVzZSB0aGV5IGFjdHVhbGx5IG1pZ2h0IG5vdFxuICAgICAgLy8gYmUgYXZhaWxhYmxlIGluIGFsbCBjYXNlc1xuICAgICAgLnJlcGxhY2UoJ3twYXJlbnR9JywgbSA9PiB0aGlzLnBhcmVudE5vdGF0aW9uKVxuICAgICAgLnJlcGxhY2UoJ3tjaGlsZH0nLCBtID0+IHRoaXMuY2hpbGROb3RhdGlvbik7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKG1zZyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVzY3JpcHRvclR5cGUoZGVzY3JpcHRvcikge1xuICBpZiAoZGVzY3JpcHRvci5oYXNPd25Qcm9wZXJ0eSgndmFsdWUnKSkge1xuICAgIHJldHVybiAnZGF0YSc7XG4gIH1cblxuICBpZiAoZGVzY3JpcHRvci5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgfHwgZGVzY3JpcHRvci5oYXNPd25Qcm9wZXJ0eSgnc2V0JykpIHtcbiAgICByZXR1cm4gJ2FjY2Vzc29yJztcbiAgfVxuXG4gIC8vIElmIG5vbmUgb2YgdGhlbSBleGlzdCwgYnJvd3NlcnMgdHJlYXQgaXQgYXNcbiAgLy8gYSBkYXRhIGRlc2NyaXB0b3Igd2l0aCBhIHZhbHVlIG9mIGB1bmRlZmluZWRgXG4gIHJldHVybiAnZGF0YSc7XG59XG5cbmZ1bmN0aW9uIGNoZWNrRnVuY3Rpb25TaWduYXR1cmVzKHBhcmVudCwgY2hpbGQsIHJlcG9ydGVyKSB7XG4gIHJlcG9ydGVyLmFzc2VydChwYXJlbnQubGVuZ3RoID09PSBjaGlsZC5sZW5ndGgpO1xufVxuXG5mdW5jdGlvbiBjaGVja0RhdGFEZXNjcmlwdG9ycyhwYXJlbnQsIGNoaWxkLCByZXBvcnRlcikge1xuICBjb25zdCBwYXJlbnRWYWx1ZVR5cGUgPSB0eXBlb2YgcGFyZW50LnZhbHVlO1xuICBjb25zdCBjaGlsZFZhbHVlVHlwZSA9IHR5cGVvZiBjaGlsZC52YWx1ZTtcbiAgXG4gIGlmIChwYXJlbnRWYWx1ZVR5cGUgPT09ICd1bmRlZmluZWQnICYmIGNoaWxkVmFsdWVUeXBlID09PSAndW5kZWZpbmVkJykge1xuICAgIC8vIGNsYXNzIHByb3BlcnRpZXMgY2FuIGJlIGFueSBleHByZXNzaW9uLCB3aGljaCBpc24ndCByYW4gdW50aWwgdGhlXG4gICAgLy8gdGhlIGluc3RhbmNlIGlzIGNyZWF0ZWQsIHNvIHdlIGNhbid0IHJlbGlhYmx5IGdldCB0eXBlIGluZm9ybWF0aW9uXG4gICAgLy8gZm9yIHRoZW0geWV0IChwZXIgc3BlYykuIFBlcmhhcHMgd2hlbiBCYWJlbCBpbmNsdWRlcyBmbG93LXR5cGUgaW5mb1xuICAgIC8vIGluIHJ1bnRpbWU/IFRyaWVkIHJlZ2V4IHNvbHV0aW9ucywgYnV0IHN1cGVyIGhhY2t5IGFuZCBvbmx5IGZlYXNpYmxlXG4gICAgLy8gb24gcHJpbWl0aXZlcywgd2hpY2ggaXMgY29uZnVzaW5nIGZvciB1c2FnZS4uLlxuICAgIHJlcG9ydGVyLmVycm9yKGBkZXNjcmlwdG9yIHZhbHVlcyBhcmUgYm90aCB1bmRlZmluZWQuIChjbGFzcyBwcm9wZXJ0aWVzIGFyZSBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQpJ2ApO1xuICB9XG4gIFxuICBpZiAocGFyZW50VmFsdWVUeXBlICE9PSBjaGlsZFZhbHVlVHlwZSkge1xuICAgIGNvbnN0IGlzRnVuY3Rpb25PdmVyVW5kZWZpbmVkID0gKGNoaWxkVmFsdWVUeXBlID09PSAnZnVuY3Rpb24nICYmIHBhcmVudFZhbHVlVHlwZSA9PT0gdW5kZWZpbmVkKTtcbiAgICAvLyBFdmVuIHRob3VnaCB3ZSBkb24ndCBzdXBwb3J0IGNsYXNzIHByb3BlcnRpZXMsIHRoaXNcbiAgICAvLyB3aWxsIHN0aWxsIGhhbmRsZSBtb3JlIHRoYW4ganVzdCBmdW5jdGlvbnMsIGp1c3QgaW4gY2FzZS5cbiAgICAvLyBTaGFkb3dpbmcgYW4gdW5kZWZpbmVkIHZhbHVlIGlzIGFuIGVycm9yIGlmIHRoZSBpbmhlcml0ZWRcbiAgICAvLyB2YWx1ZSB3YXMgdW5kZWZpbmVkICh1c3VhbGx5IGEgY2xhc3MgcHJvcGVydHksIG5vdCBhIG1ldGhvZClcbiAgICBpZiAoaXNGdW5jdGlvbk92ZXJVbmRlZmluZWQgfHwgcGFyZW50VmFsdWVUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcG9ydGVyLmVycm9yKGB2YWx1ZSB0eXBlcyBkbyBub3QgbWF0Y2guIHtwYXJlbnR9IGlzIFwiJHtwYXJlbnRWYWx1ZVR5cGV9XCIsIHtjaGlsZH0gaXMgXCIke2NoaWxkVmFsdWVUeXBlfVwiYCk7XG4gICAgfVxuICB9XG4gIFxuICAvLyBTd2l0Y2gsIGluIHByZXBhcmF0aW9uIGZvciBzdXBwb3J0aW5nIG1vcmUgdHlwZXNcbiAgc3dpdGNoIChjaGlsZFZhbHVlVHlwZSkge1xuICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgIGNoZWNrRnVuY3Rpb25TaWduYXR1cmVzKHBhcmVudC52YWx1ZSwgY2hpbGQudmFsdWUsIHJlcG9ydGVyKTtcbiAgICAgIGJyZWFrO1xuICAgICAgXG4gICAgZGVmYXVsdDpcbiAgICAgIHJlcG9ydGVyLmVycm9yKGBVbmV4cGVjdGVkIGVycm9yLiBQbGVhc2UgZmlsZSBhIGJ1ZyB3aXRoOiB7cGFyZW50fSBpcyBcIiR7cGFyZW50VmFsdWVUeXBlfVwiLCB7Y2hpbGR9IGlzIFwiJHtjaGlsZFZhbHVlVHlwZX1cImApO1xuICAgICAgYnJlYWs7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tBY2Nlc3NvckRlc2NyaXB0b3JzKHBhcmVudCwgY2hpbGQsIHJlcG9ydGVyKSB7XG4gIGNvbnN0IHBhcmVudEhhc0dldHRlciA9IHR5cGVvZiBwYXJlbnQuZ2V0ID09PSAnZnVuY3Rpb24nO1xuICBjb25zdCBjaGlsZEhhc0dldHRlciA9IHR5cGVvZiBjaGlsZC5nZXQgPT09ICdmdW5jdGlvbic7XG4gIGNvbnN0IHBhcmVudEhhc1NldHRlciA9IHR5cGVvZiBwYXJlbnQuc2V0ID09PSAnZnVuY3Rpb24nO1xuICBjb25zdCBjaGlsZEhhc1NldHRlciA9IHR5cGVvZiBjaGlsZC5zZXQgPT09ICdmdW5jdGlvbic7XG4gIFxuICBpZiAocGFyZW50SGFzR2V0dGVyIHx8IGNoaWxkSGFzR2V0dGVyKSB7XG4gICAgaWYgKCFwYXJlbnRIYXNHZXR0ZXIgJiYgcGFyZW50SGFzU2V0dGVyKSB7XG4gICAgICByZXBvcnRlci5lcnJvcihge3BhcmVudH0gaXMgc2V0dGVyIGJ1dCB7Y2hpbGR9IGlzIGdldHRlcmApO1xuICAgIH1cbiAgICBcbiAgICBpZiAoIWNoaWxkSGFzR2V0dGVyICYmIGNoaWxkSGFzU2V0dGVyKSB7XG4gICAgICByZXBvcnRlci5lcnJvcihge3BhcmVudH0gaXMgZ2V0dGVyIGJ1dCB7Y2hpbGR9IGlzIHNldHRlcmApO1xuICAgIH1cbiAgICBcbiAgICBjaGVja0Z1bmN0aW9uU2lnbmF0dXJlcyhwYXJlbnQuZ2V0LCBjaGlsZC5nZXQsIHJlcG9ydGVyKTtcbiAgfVxuICBcbiAgaWYgKHBhcmVudEhhc1NldHRlciB8fCBjaGlsZEhhc1NldHRlcikge1xuICAgIGlmICghcGFyZW50SGFzU2V0dGVyICYmIHBhcmVudEhhc0dldHRlcikge1xuICAgICAgcmVwb3J0ZXIuZXJyb3IoYHtwYXJlbnR9IGlzIGdldHRlciBidXQge2NoaWxkfSBpcyBzZXR0ZXJgKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKCFjaGlsZEhhc1NldHRlciAmJiBjaGlsZEhhc0dldHRlcikge1xuICAgICAgcmVwb3J0ZXIuZXJyb3IoYHtwYXJlbnR9IGlzIHNldHRlciBidXQge2NoaWxkfSBpcyBnZXR0ZXJgKTtcbiAgICB9XG4gICAgXG4gICAgY2hlY2tGdW5jdGlvblNpZ25hdHVyZXMocGFyZW50LnNldCwgY2hpbGQuc2V0LCByZXBvcnRlcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tEZXNjcmlwdG9ycyhwYXJlbnQsIGNoaWxkLCByZXBvcnRlcikge1xuICBjb25zdCBwYXJlbnRUeXBlID0gZ2V0RGVzY3JpcHRvclR5cGUocGFyZW50KTtcbiAgY29uc3QgY2hpbGRUeXBlID0gZ2V0RGVzY3JpcHRvclR5cGUoY2hpbGQpO1xuXG4gIGlmIChwYXJlbnRUeXBlICE9PSBjaGlsZFR5cGUpIHtcbiAgICByZXBvcnRlci5lcnJvcihgZGVzY3JpcHRvciB0eXBlcyBkbyBub3QgbWF0Y2guIHtwYXJlbnR9IGlzIFwiJHtwYXJlbnRUeXBlfVwiLCB7Y2hpbGR9IGlzIFwiJHtjaGlsZFR5cGV9XCJgKTtcbiAgfVxuXG4gIHN3aXRjaCAoY2hpbGRUeXBlKSB7XG4gICAgY2FzZSAnZGF0YSc6XG4gICAgICBjaGVja0RhdGFEZXNjcmlwdG9ycyhwYXJlbnQsIGNoaWxkLCByZXBvcnRlcik7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2FjY2Vzc29yJzpcbiAgICAgIGNoZWNrQWNjZXNzb3JEZXNjcmlwdG9ycyhwYXJlbnQsIGNoaWxkLCByZXBvcnRlcik7XG4gICAgICBicmVhaztcbiAgfVxufVxuXG5jb25zdCBzdWdnZXN0aW9uVHJhbnNmb3JtcyA9IFtcbiAga2V5ID0+IGtleS50b0xvd2VyQ2FzZSgpLFxuICBrZXkgPT4ga2V5LnRvVXBwZXJDYXNlKCksXG4gIGtleSA9PiBrZXkgKyAncycsXG4gIGtleSA9PiBrZXkuc2xpY2UoMCwgLTEpLFxuICBrZXkgPT4ga2V5LnNsaWNlKDEsIGtleS5sZW5ndGgpLFxuXTtcblxuZnVuY3Rpb24gZmluZFBvc3NpYmxlQWx0ZXJuYXRpdmVzKHN1cGVyS2xhc3MsIGtleSkge1xuICBmb3IgKGxldCBpID0gMCwgbCA9IHN1Z2dlc3Rpb25UcmFuc2Zvcm1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGNvbnN0IGZuID0gc3VnZ2VzdGlvblRyYW5zZm9ybXNbaV07XG4gICAgY29uc3Qgc3VnZ2VzdGlvbiA9IGZuKGtleSk7XG5cbiAgICBpZiAoc3VnZ2VzdGlvbiBpbiBzdXBlcktsYXNzKSB7XG4gICAgICByZXR1cm4gc3VnZ2VzdGlvbjtcbiAgICB9XG4gIH1cbiAgXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVEZXNjcmlwdG9yKHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKSB7XG4gIGRlc2NyaXB0b3Iua2V5ID0ga2V5O1xuICBjb25zdCBzdXBlcktsYXNzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldCk7XG4gIGNvbnN0IHN1cGVyRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc3VwZXJLbGFzcywga2V5KTtcbiAgY29uc3QgcmVwb3J0ZXIgPSBuZXcgU3ludGF4RXJyb3JSZXBvcnRlcihzdXBlcktsYXNzLCB0YXJnZXQsIHN1cGVyRGVzY3JpcHRvciwgZGVzY3JpcHRvcik7XG4gIFxuICBpZiAoc3VwZXJEZXNjcmlwdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBzdWdnZXN0ZWRLZXkgPSBmaW5kUG9zc2libGVBbHRlcm5hdGl2ZXMoc3VwZXJLbGFzcywga2V5KTtcbiAgICBjb25zdCBzdWdnZXN0aW9uID0gc3VnZ2VzdGVkS2V5ID8gYFxcblxcbiAgRGlkIHlvdSBtZWFuIFwiJHtzdWdnZXN0ZWRLZXl9XCI/YCA6ICcnO1xuICAgIHJlcG9ydGVyLmVycm9yKGBObyBkZXNjcmlwdG9yIG1hdGNoaW5nIHtjaGlsZH0gd2FzIGZvdW5kIG9uIHRoZSBwcm90b3R5cGUgY2hhaW4uJHtzdWdnZXN0aW9ufWApO1xuICB9XG4gIFxuICBjaGVja0Rlc2NyaXB0b3JzKHN1cGVyRGVzY3JpcHRvciwgZGVzY3JpcHRvciwgcmVwb3J0ZXIpO1xuICBcbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG92ZXJyaWRlKC4uLmFyZ3MpIHtcbiAgcmV0dXJuIGRlY29yYXRlKGhhbmRsZURlc2NyaXB0b3IsIGFyZ3MpO1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtZGVjb3JhdG9ycy9zcmMvb3ZlcnJpZGUuanMiLCIvKlxuXHRNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuXHRBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xuLy8gY3NzIGJhc2UgY29kZSwgaW5qZWN0ZWQgYnkgdGhlIGNzcy1sb2FkZXJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odXNlU291cmNlTWFwKSB7XG5cdHZhciBsaXN0ID0gW107XG5cblx0Ly8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xuXHRsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG5cdFx0XHR2YXIgY29udGVudCA9IGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSwgdXNlU291cmNlTWFwKTtcblx0XHRcdGlmKGl0ZW1bMl0pIHtcblx0XHRcdFx0cmV0dXJuIFwiQG1lZGlhIFwiICsgaXRlbVsyXSArIFwie1wiICsgY29udGVudCArIFwifVwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRlbnQ7XG5cdFx0XHR9XG5cdFx0fSkuam9pbihcIlwiKTtcblx0fTtcblxuXHQvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuXHRsaXN0LmkgPSBmdW5jdGlvbihtb2R1bGVzLCBtZWRpYVF1ZXJ5KSB7XG5cdFx0aWYodHlwZW9mIG1vZHVsZXMgPT09IFwic3RyaW5nXCIpXG5cdFx0XHRtb2R1bGVzID0gW1tudWxsLCBtb2R1bGVzLCBcIlwiXV07XG5cdFx0dmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGlkID0gdGhpc1tpXVswXTtcblx0XHRcdGlmKHR5cGVvZiBpZCA9PT0gXCJudW1iZXJcIilcblx0XHRcdFx0YWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuXHRcdH1cblx0XHRmb3IoaSA9IDA7IGkgPCBtb2R1bGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgaXRlbSA9IG1vZHVsZXNbaV07XG5cdFx0XHQvLyBza2lwIGFscmVhZHkgaW1wb3J0ZWQgbW9kdWxlXG5cdFx0XHQvLyB0aGlzIGltcGxlbWVudGF0aW9uIGlzIG5vdCAxMDAlIHBlcmZlY3QgZm9yIHdlaXJkIG1lZGlhIHF1ZXJ5IGNvbWJpbmF0aW9uc1xuXHRcdFx0Ly8gIHdoZW4gYSBtb2R1bGUgaXMgaW1wb3J0ZWQgbXVsdGlwbGUgdGltZXMgd2l0aCBkaWZmZXJlbnQgbWVkaWEgcXVlcmllcy5cblx0XHRcdC8vICBJIGhvcGUgdGhpcyB3aWxsIG5ldmVyIG9jY3VyIChIZXkgdGhpcyB3YXkgd2UgaGF2ZSBzbWFsbGVyIGJ1bmRsZXMpXG5cdFx0XHRpZih0eXBlb2YgaXRlbVswXSAhPT0gXCJudW1iZXJcIiB8fCAhYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpdGVtWzBdXSkge1xuXHRcdFx0XHRpZihtZWRpYVF1ZXJ5ICYmICFpdGVtWzJdKSB7XG5cdFx0XHRcdFx0aXRlbVsyXSA9IG1lZGlhUXVlcnk7XG5cdFx0XHRcdH0gZWxzZSBpZihtZWRpYVF1ZXJ5KSB7XG5cdFx0XHRcdFx0aXRlbVsyXSA9IFwiKFwiICsgaXRlbVsyXSArIFwiKSBhbmQgKFwiICsgbWVkaWFRdWVyeSArIFwiKVwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3QucHVzaChpdGVtKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdHJldHVybiBsaXN0O1xufTtcblxuZnVuY3Rpb24gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtLCB1c2VTb3VyY2VNYXApIHtcblx0dmFyIGNvbnRlbnQgPSBpdGVtWzFdIHx8ICcnO1xuXHR2YXIgY3NzTWFwcGluZyA9IGl0ZW1bM107XG5cdGlmICghY3NzTWFwcGluZykge1xuXHRcdHJldHVybiBjb250ZW50O1xuXHR9XG5cblx0aWYgKHVzZVNvdXJjZU1hcCAmJiB0eXBlb2YgYnRvYSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdHZhciBzb3VyY2VNYXBwaW5nID0gdG9Db21tZW50KGNzc01hcHBpbmcpO1xuXHRcdHZhciBzb3VyY2VVUkxzID0gY3NzTWFwcGluZy5zb3VyY2VzLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG5cdFx0XHRyZXR1cm4gJy8qIyBzb3VyY2VVUkw9JyArIGNzc01hcHBpbmcuc291cmNlUm9vdCArIHNvdXJjZSArICcgKi8nXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChzb3VyY2VVUkxzKS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKCdcXG4nKTtcblx0fVxuXG5cdHJldHVybiBbY29udGVudF0uam9pbignXFxuJyk7XG59XG5cbi8vIEFkYXB0ZWQgZnJvbSBjb252ZXJ0LXNvdXJjZS1tYXAgKE1JVClcbmZ1bmN0aW9uIHRvQ29tbWVudChzb3VyY2VNYXApIHtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG5cdHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpO1xuXHR2YXIgZGF0YSA9ICdzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCwnICsgYmFzZTY0O1xuXG5cdHJldHVybiAnLyojICcgKyBkYXRhICsgJyAqLyc7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanMiLCIvKlxuXHRNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuXHRBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xuXG52YXIgc3R5bGVzSW5Eb20gPSB7fTtcblxudmFyXHRtZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG5cdHZhciBtZW1vO1xuXG5cdHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKHR5cGVvZiBtZW1vID09PSBcInVuZGVmaW5lZFwiKSBtZW1vID0gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0XHRyZXR1cm4gbWVtbztcblx0fTtcbn07XG5cbnZhciBpc09sZElFID0gbWVtb2l6ZShmdW5jdGlvbiAoKSB7XG5cdC8vIFRlc3QgZm9yIElFIDw9IDkgYXMgcHJvcG9zZWQgYnkgQnJvd3NlcmhhY2tzXG5cdC8vIEBzZWUgaHR0cDovL2Jyb3dzZXJoYWNrcy5jb20vI2hhY2stZTcxZDg2OTJmNjUzMzQxNzNmZWU3MTVjMjIyY2I4MDVcblx0Ly8gVGVzdHMgZm9yIGV4aXN0ZW5jZSBvZiBzdGFuZGFyZCBnbG9iYWxzIGlzIHRvIGFsbG93IHN0eWxlLWxvYWRlclxuXHQvLyB0byBvcGVyYXRlIGNvcnJlY3RseSBpbnRvIG5vbi1zdGFuZGFyZCBlbnZpcm9ubWVudHNcblx0Ly8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay1jb250cmliL3N0eWxlLWxvYWRlci9pc3N1ZXMvMTc3XG5cdHJldHVybiB3aW5kb3cgJiYgZG9jdW1lbnQgJiYgZG9jdW1lbnQuYWxsICYmICF3aW5kb3cuYXRvYjtcbn0pO1xuXG52YXIgZ2V0VGFyZ2V0ID0gZnVuY3Rpb24gKHRhcmdldCkge1xuICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXQpO1xufTtcblxudmFyIGdldEVsZW1lbnQgPSAoZnVuY3Rpb24gKGZuKSB7XG5cdHZhciBtZW1vID0ge307XG5cblx0cmV0dXJuIGZ1bmN0aW9uKHRhcmdldCkge1xuICAgICAgICAgICAgICAgIC8vIElmIHBhc3NpbmcgZnVuY3Rpb24gaW4gb3B0aW9ucywgdGhlbiB1c2UgaXQgZm9yIHJlc29sdmUgXCJoZWFkXCIgZWxlbWVudC5cbiAgICAgICAgICAgICAgICAvLyBVc2VmdWwgZm9yIFNoYWRvdyBSb290IHN0eWxlIGkuZVxuICAgICAgICAgICAgICAgIC8vIHtcbiAgICAgICAgICAgICAgICAvLyAgIGluc2VydEludG86IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjZm9vXCIpLnNoYWRvd1Jvb3QgfVxuICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lbW9bdGFyZ2V0XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0dmFyIHN0eWxlVGFyZ2V0ID0gZ2V0VGFyZ2V0LmNhbGwodGhpcywgdGFyZ2V0KTtcblx0XHRcdC8vIFNwZWNpYWwgY2FzZSB0byByZXR1cm4gaGVhZCBvZiBpZnJhbWUgaW5zdGVhZCBvZiBpZnJhbWUgaXRzZWxmXG5cdFx0XHRpZiAod2luZG93LkhUTUxJRnJhbWVFbGVtZW50ICYmIHN0eWxlVGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LkhUTUxJRnJhbWVFbGVtZW50KSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Ly8gVGhpcyB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhY2Nlc3MgdG8gaWZyYW1lIGlzIGJsb2NrZWRcblx0XHRcdFx0XHQvLyBkdWUgdG8gY3Jvc3Mtb3JpZ2luIHJlc3RyaWN0aW9uc1xuXHRcdFx0XHRcdHN0eWxlVGFyZ2V0ID0gc3R5bGVUYXJnZXQuY29udGVudERvY3VtZW50LmhlYWQ7XG5cdFx0XHRcdH0gY2F0Y2goZSkge1xuXHRcdFx0XHRcdHN0eWxlVGFyZ2V0ID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0bWVtb1t0YXJnZXRdID0gc3R5bGVUYXJnZXQ7XG5cdFx0fVxuXHRcdHJldHVybiBtZW1vW3RhcmdldF1cblx0fTtcbn0pKCk7XG5cbnZhciBzaW5nbGV0b24gPSBudWxsO1xudmFyXHRzaW5nbGV0b25Db3VudGVyID0gMDtcbnZhclx0c3R5bGVzSW5zZXJ0ZWRBdFRvcCA9IFtdO1xuXG52YXJcdGZpeFVybHMgPSByZXF1aXJlKFwiLi91cmxzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGxpc3QsIG9wdGlvbnMpIHtcblx0aWYgKHR5cGVvZiBERUJVRyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBERUJVRykge1xuXHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBFcnJvcihcIlRoZSBzdHlsZS1sb2FkZXIgY2Fubm90IGJlIHVzZWQgaW4gYSBub24tYnJvd3NlciBlbnZpcm9ubWVudFwiKTtcblx0fVxuXG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdG9wdGlvbnMuYXR0cnMgPSB0eXBlb2Ygb3B0aW9ucy5hdHRycyA9PT0gXCJvYmplY3RcIiA/IG9wdGlvbnMuYXR0cnMgOiB7fTtcblxuXHQvLyBGb3JjZSBzaW5nbGUtdGFnIHNvbHV0aW9uIG9uIElFNi05LCB3aGljaCBoYXMgYSBoYXJkIGxpbWl0IG9uIHRoZSAjIG9mIDxzdHlsZT5cblx0Ly8gdGFncyBpdCB3aWxsIGFsbG93IG9uIGEgcGFnZVxuXHRpZiAoIW9wdGlvbnMuc2luZ2xldG9uICYmIHR5cGVvZiBvcHRpb25zLnNpbmdsZXRvbiAhPT0gXCJib29sZWFuXCIpIG9wdGlvbnMuc2luZ2xldG9uID0gaXNPbGRJRSgpO1xuXG5cdC8vIEJ5IGRlZmF1bHQsIGFkZCA8c3R5bGU+IHRhZ3MgdG8gdGhlIDxoZWFkPiBlbGVtZW50XG4gICAgICAgIGlmICghb3B0aW9ucy5pbnNlcnRJbnRvKSBvcHRpb25zLmluc2VydEludG8gPSBcImhlYWRcIjtcblxuXHQvLyBCeSBkZWZhdWx0LCBhZGQgPHN0eWxlPiB0YWdzIHRvIHRoZSBib3R0b20gb2YgdGhlIHRhcmdldFxuXHRpZiAoIW9wdGlvbnMuaW5zZXJ0QXQpIG9wdGlvbnMuaW5zZXJ0QXQgPSBcImJvdHRvbVwiO1xuXG5cdHZhciBzdHlsZXMgPSBsaXN0VG9TdHlsZXMobGlzdCwgb3B0aW9ucyk7XG5cblx0YWRkU3R5bGVzVG9Eb20oc3R5bGVzLCBvcHRpb25zKTtcblxuXHRyZXR1cm4gZnVuY3Rpb24gdXBkYXRlIChuZXdMaXN0KSB7XG5cdFx0dmFyIG1heVJlbW92ZSA9IFtdO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBpdGVtID0gc3R5bGVzW2ldO1xuXHRcdFx0dmFyIGRvbVN0eWxlID0gc3R5bGVzSW5Eb21baXRlbS5pZF07XG5cblx0XHRcdGRvbVN0eWxlLnJlZnMtLTtcblx0XHRcdG1heVJlbW92ZS5wdXNoKGRvbVN0eWxlKTtcblx0XHR9XG5cblx0XHRpZihuZXdMaXN0KSB7XG5cdFx0XHR2YXIgbmV3U3R5bGVzID0gbGlzdFRvU3R5bGVzKG5ld0xpc3QsIG9wdGlvbnMpO1xuXHRcdFx0YWRkU3R5bGVzVG9Eb20obmV3U3R5bGVzLCBvcHRpb25zKTtcblx0XHR9XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG1heVJlbW92ZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGRvbVN0eWxlID0gbWF5UmVtb3ZlW2ldO1xuXG5cdFx0XHRpZihkb21TdHlsZS5yZWZzID09PSAwKSB7XG5cdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgZG9tU3R5bGUucGFydHMubGVuZ3RoOyBqKyspIGRvbVN0eWxlLnBhcnRzW2pdKCk7XG5cblx0XHRcdFx0ZGVsZXRlIHN0eWxlc0luRG9tW2RvbVN0eWxlLmlkXTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG59O1xuXG5mdW5jdGlvbiBhZGRTdHlsZXNUb0RvbSAoc3R5bGVzLCBvcHRpb25zKSB7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIGl0ZW0gPSBzdHlsZXNbaV07XG5cdFx0dmFyIGRvbVN0eWxlID0gc3R5bGVzSW5Eb21baXRlbS5pZF07XG5cblx0XHRpZihkb21TdHlsZSkge1xuXHRcdFx0ZG9tU3R5bGUucmVmcysrO1xuXG5cdFx0XHRmb3IodmFyIGogPSAwOyBqIDwgZG9tU3R5bGUucGFydHMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0ZG9tU3R5bGUucGFydHNbal0oaXRlbS5wYXJ0c1tqXSk7XG5cdFx0XHR9XG5cblx0XHRcdGZvcig7IGogPCBpdGVtLnBhcnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGRvbVN0eWxlLnBhcnRzLnB1c2goYWRkU3R5bGUoaXRlbS5wYXJ0c1tqXSwgb3B0aW9ucykpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YXIgcGFydHMgPSBbXTtcblxuXHRcdFx0Zm9yKHZhciBqID0gMDsgaiA8IGl0ZW0ucGFydHMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0cGFydHMucHVzaChhZGRTdHlsZShpdGVtLnBhcnRzW2pdLCBvcHRpb25zKSk7XG5cdFx0XHR9XG5cblx0XHRcdHN0eWxlc0luRG9tW2l0ZW0uaWRdID0ge2lkOiBpdGVtLmlkLCByZWZzOiAxLCBwYXJ0czogcGFydHN9O1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBsaXN0VG9TdHlsZXMgKGxpc3QsIG9wdGlvbnMpIHtcblx0dmFyIHN0eWxlcyA9IFtdO1xuXHR2YXIgbmV3U3R5bGVzID0ge307XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIGl0ZW0gPSBsaXN0W2ldO1xuXHRcdHZhciBpZCA9IG9wdGlvbnMuYmFzZSA/IGl0ZW1bMF0gKyBvcHRpb25zLmJhc2UgOiBpdGVtWzBdO1xuXHRcdHZhciBjc3MgPSBpdGVtWzFdO1xuXHRcdHZhciBtZWRpYSA9IGl0ZW1bMl07XG5cdFx0dmFyIHNvdXJjZU1hcCA9IGl0ZW1bM107XG5cdFx0dmFyIHBhcnQgPSB7Y3NzOiBjc3MsIG1lZGlhOiBtZWRpYSwgc291cmNlTWFwOiBzb3VyY2VNYXB9O1xuXG5cdFx0aWYoIW5ld1N0eWxlc1tpZF0pIHN0eWxlcy5wdXNoKG5ld1N0eWxlc1tpZF0gPSB7aWQ6IGlkLCBwYXJ0czogW3BhcnRdfSk7XG5cdFx0ZWxzZSBuZXdTdHlsZXNbaWRdLnBhcnRzLnB1c2gocGFydCk7XG5cdH1cblxuXHRyZXR1cm4gc3R5bGVzO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRTdHlsZUVsZW1lbnQgKG9wdGlvbnMsIHN0eWxlKSB7XG5cdHZhciB0YXJnZXQgPSBnZXRFbGVtZW50KG9wdGlvbnMuaW5zZXJ0SW50bylcblxuXHRpZiAoIXRhcmdldCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0SW50bycgcGFyYW1ldGVyIGlzIGludmFsaWQuXCIpO1xuXHR9XG5cblx0dmFyIGxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wID0gc3R5bGVzSW5zZXJ0ZWRBdFRvcFtzdHlsZXNJbnNlcnRlZEF0VG9wLmxlbmd0aCAtIDFdO1xuXG5cdGlmIChvcHRpb25zLmluc2VydEF0ID09PSBcInRvcFwiKSB7XG5cdFx0aWYgKCFsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcCkge1xuXHRcdFx0dGFyZ2V0Lmluc2VydEJlZm9yZShzdHlsZSwgdGFyZ2V0LmZpcnN0Q2hpbGQpO1xuXHRcdH0gZWxzZSBpZiAobGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3AubmV4dFNpYmxpbmcpIHtcblx0XHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoc3R5bGUsIGxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wLm5leHRTaWJsaW5nKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGFyZ2V0LmFwcGVuZENoaWxkKHN0eWxlKTtcblx0XHR9XG5cdFx0c3R5bGVzSW5zZXJ0ZWRBdFRvcC5wdXNoKHN0eWxlKTtcblx0fSBlbHNlIGlmIChvcHRpb25zLmluc2VydEF0ID09PSBcImJvdHRvbVwiKSB7XG5cdFx0dGFyZ2V0LmFwcGVuZENoaWxkKHN0eWxlKTtcblx0fSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucy5pbnNlcnRBdCA9PT0gXCJvYmplY3RcIiAmJiBvcHRpb25zLmluc2VydEF0LmJlZm9yZSkge1xuXHRcdHZhciBuZXh0U2libGluZyA9IGdldEVsZW1lbnQob3B0aW9ucy5pbnNlcnRJbnRvICsgXCIgXCIgKyBvcHRpb25zLmluc2VydEF0LmJlZm9yZSk7XG5cdFx0dGFyZ2V0Lmluc2VydEJlZm9yZShzdHlsZSwgbmV4dFNpYmxpbmcpO1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIltTdHlsZSBMb2FkZXJdXFxuXFxuIEludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAnaW5zZXJ0QXQnICgnb3B0aW9ucy5pbnNlcnRBdCcpIGZvdW5kLlxcbiBNdXN0IGJlICd0b3AnLCAnYm90dG9tJywgb3IgT2JqZWN0LlxcbiAoaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2stY29udHJpYi9zdHlsZS1sb2FkZXIjaW5zZXJ0YXQpXFxuXCIpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVN0eWxlRWxlbWVudCAoc3R5bGUpIHtcblx0aWYgKHN0eWxlLnBhcmVudE5vZGUgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblx0c3R5bGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZSk7XG5cblx0dmFyIGlkeCA9IHN0eWxlc0luc2VydGVkQXRUb3AuaW5kZXhPZihzdHlsZSk7XG5cdGlmKGlkeCA+PSAwKSB7XG5cdFx0c3R5bGVzSW5zZXJ0ZWRBdFRvcC5zcGxpY2UoaWR4LCAxKTtcblx0fVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHlsZUVsZW1lbnQgKG9wdGlvbnMpIHtcblx0dmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuXG5cdG9wdGlvbnMuYXR0cnMudHlwZSA9IFwidGV4dC9jc3NcIjtcblxuXHRhZGRBdHRycyhzdHlsZSwgb3B0aW9ucy5hdHRycyk7XG5cdGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zLCBzdHlsZSk7XG5cblx0cmV0dXJuIHN0eWxlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVMaW5rRWxlbWVudCAob3B0aW9ucykge1xuXHR2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpO1xuXG5cdG9wdGlvbnMuYXR0cnMudHlwZSA9IFwidGV4dC9jc3NcIjtcblx0b3B0aW9ucy5hdHRycy5yZWwgPSBcInN0eWxlc2hlZXRcIjtcblxuXHRhZGRBdHRycyhsaW5rLCBvcHRpb25zLmF0dHJzKTtcblx0aW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMsIGxpbmspO1xuXG5cdHJldHVybiBsaW5rO1xufVxuXG5mdW5jdGlvbiBhZGRBdHRycyAoZWwsIGF0dHJzKSB7XG5cdE9iamVjdC5rZXlzKGF0dHJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcblx0XHRlbC5zZXRBdHRyaWJ1dGUoa2V5LCBhdHRyc1trZXldKTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGFkZFN0eWxlIChvYmosIG9wdGlvbnMpIHtcblx0dmFyIHN0eWxlLCB1cGRhdGUsIHJlbW92ZSwgcmVzdWx0O1xuXG5cdC8vIElmIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHdhcyBkZWZpbmVkLCBydW4gaXQgb24gdGhlIGNzc1xuXHRpZiAob3B0aW9ucy50cmFuc2Zvcm0gJiYgb2JqLmNzcykge1xuXHQgICAgcmVzdWx0ID0gb3B0aW9ucy50cmFuc2Zvcm0ob2JqLmNzcyk7XG5cblx0ICAgIGlmIChyZXN1bHQpIHtcblx0ICAgIFx0Ly8gSWYgdHJhbnNmb3JtIHJldHVybnMgYSB2YWx1ZSwgdXNlIHRoYXQgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgY3NzLlxuXHQgICAgXHQvLyBUaGlzIGFsbG93cyBydW5uaW5nIHJ1bnRpbWUgdHJhbnNmb3JtYXRpb25zIG9uIHRoZSBjc3MuXG5cdCAgICBcdG9iai5jc3MgPSByZXN1bHQ7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgXHQvLyBJZiB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uIHJldHVybnMgYSBmYWxzeSB2YWx1ZSwgZG9uJ3QgYWRkIHRoaXMgY3NzLlxuXHQgICAgXHQvLyBUaGlzIGFsbG93cyBjb25kaXRpb25hbCBsb2FkaW5nIG9mIGNzc1xuXHQgICAgXHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdCAgICBcdFx0Ly8gbm9vcFxuXHQgICAgXHR9O1xuXHQgICAgfVxuXHR9XG5cblx0aWYgKG9wdGlvbnMuc2luZ2xldG9uKSB7XG5cdFx0dmFyIHN0eWxlSW5kZXggPSBzaW5nbGV0b25Db3VudGVyKys7XG5cblx0XHRzdHlsZSA9IHNpbmdsZXRvbiB8fCAoc2luZ2xldG9uID0gY3JlYXRlU3R5bGVFbGVtZW50KG9wdGlvbnMpKTtcblxuXHRcdHVwZGF0ZSA9IGFwcGx5VG9TaW5nbGV0b25UYWcuYmluZChudWxsLCBzdHlsZSwgc3R5bGVJbmRleCwgZmFsc2UpO1xuXHRcdHJlbW92ZSA9IGFwcGx5VG9TaW5nbGV0b25UYWcuYmluZChudWxsLCBzdHlsZSwgc3R5bGVJbmRleCwgdHJ1ZSk7XG5cblx0fSBlbHNlIGlmIChcblx0XHRvYmouc291cmNlTWFwICYmXG5cdFx0dHlwZW9mIFVSTCA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIFVSTC5jcmVhdGVPYmplY3RVUkwgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBVUkwucmV2b2tlT2JqZWN0VVJMID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgQmxvYiA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIlxuXHQpIHtcblx0XHRzdHlsZSA9IGNyZWF0ZUxpbmtFbGVtZW50KG9wdGlvbnMpO1xuXHRcdHVwZGF0ZSA9IHVwZGF0ZUxpbmsuYmluZChudWxsLCBzdHlsZSwgb3B0aW9ucyk7XG5cdFx0cmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlKTtcblxuXHRcdFx0aWYoc3R5bGUuaHJlZikgVVJMLnJldm9rZU9iamVjdFVSTChzdHlsZS5ocmVmKTtcblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdHN0eWxlID0gY3JlYXRlU3R5bGVFbGVtZW50KG9wdGlvbnMpO1xuXHRcdHVwZGF0ZSA9IGFwcGx5VG9UYWcuYmluZChudWxsLCBzdHlsZSk7XG5cdFx0cmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlKTtcblx0XHR9O1xuXHR9XG5cblx0dXBkYXRlKG9iaik7XG5cblx0cmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZVN0eWxlIChuZXdPYmopIHtcblx0XHRpZiAobmV3T2JqKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG5ld09iai5jc3MgPT09IG9iai5jc3MgJiZcblx0XHRcdFx0bmV3T2JqLm1lZGlhID09PSBvYmoubWVkaWEgJiZcblx0XHRcdFx0bmV3T2JqLnNvdXJjZU1hcCA9PT0gb2JqLnNvdXJjZU1hcFxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dXBkYXRlKG9iaiA9IG5ld09iaik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlbW92ZSgpO1xuXHRcdH1cblx0fTtcbn1cblxudmFyIHJlcGxhY2VUZXh0ID0gKGZ1bmN0aW9uICgpIHtcblx0dmFyIHRleHRTdG9yZSA9IFtdO1xuXG5cdHJldHVybiBmdW5jdGlvbiAoaW5kZXgsIHJlcGxhY2VtZW50KSB7XG5cdFx0dGV4dFN0b3JlW2luZGV4XSA9IHJlcGxhY2VtZW50O1xuXG5cdFx0cmV0dXJuIHRleHRTdG9yZS5maWx0ZXIoQm9vbGVhbikuam9pbignXFxuJyk7XG5cdH07XG59KSgpO1xuXG5mdW5jdGlvbiBhcHBseVRvU2luZ2xldG9uVGFnIChzdHlsZSwgaW5kZXgsIHJlbW92ZSwgb2JqKSB7XG5cdHZhciBjc3MgPSByZW1vdmUgPyBcIlwiIDogb2JqLmNzcztcblxuXHRpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuXHRcdHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IHJlcGxhY2VUZXh0KGluZGV4LCBjc3MpO1xuXHR9IGVsc2Uge1xuXHRcdHZhciBjc3NOb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKTtcblx0XHR2YXIgY2hpbGROb2RlcyA9IHN0eWxlLmNoaWxkTm9kZXM7XG5cblx0XHRpZiAoY2hpbGROb2Rlc1tpbmRleF0pIHN0eWxlLnJlbW92ZUNoaWxkKGNoaWxkTm9kZXNbaW5kZXhdKTtcblxuXHRcdGlmIChjaGlsZE5vZGVzLmxlbmd0aCkge1xuXHRcdFx0c3R5bGUuaW5zZXJ0QmVmb3JlKGNzc05vZGUsIGNoaWxkTm9kZXNbaW5kZXhdKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c3R5bGUuYXBwZW5kQ2hpbGQoY3NzTm9kZSk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGFwcGx5VG9UYWcgKHN0eWxlLCBvYmopIHtcblx0dmFyIGNzcyA9IG9iai5jc3M7XG5cdHZhciBtZWRpYSA9IG9iai5tZWRpYTtcblxuXHRpZihtZWRpYSkge1xuXHRcdHN0eWxlLnNldEF0dHJpYnV0ZShcIm1lZGlhXCIsIG1lZGlhKVxuXHR9XG5cblx0aWYoc3R5bGUuc3R5bGVTaGVldCkge1xuXHRcdHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcblx0fSBlbHNlIHtcblx0XHR3aGlsZShzdHlsZS5maXJzdENoaWxkKSB7XG5cdFx0XHRzdHlsZS5yZW1vdmVDaGlsZChzdHlsZS5maXJzdENoaWxkKTtcblx0XHR9XG5cblx0XHRzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcblx0fVxufVxuXG5mdW5jdGlvbiB1cGRhdGVMaW5rIChsaW5rLCBvcHRpb25zLCBvYmopIHtcblx0dmFyIGNzcyA9IG9iai5jc3M7XG5cdHZhciBzb3VyY2VNYXAgPSBvYmouc291cmNlTWFwO1xuXG5cdC8qXG5cdFx0SWYgY29udmVydFRvQWJzb2x1dGVVcmxzIGlzbid0IGRlZmluZWQsIGJ1dCBzb3VyY2VtYXBzIGFyZSBlbmFibGVkXG5cdFx0YW5kIHRoZXJlIGlzIG5vIHB1YmxpY1BhdGggZGVmaW5lZCB0aGVuIGxldHMgdHVybiBjb252ZXJ0VG9BYnNvbHV0ZVVybHNcblx0XHRvbiBieSBkZWZhdWx0LiAgT3RoZXJ3aXNlIGRlZmF1bHQgdG8gdGhlIGNvbnZlcnRUb0Fic29sdXRlVXJscyBvcHRpb25cblx0XHRkaXJlY3RseVxuXHQqL1xuXHR2YXIgYXV0b0ZpeFVybHMgPSBvcHRpb25zLmNvbnZlcnRUb0Fic29sdXRlVXJscyA9PT0gdW5kZWZpbmVkICYmIHNvdXJjZU1hcDtcblxuXHRpZiAob3B0aW9ucy5jb252ZXJ0VG9BYnNvbHV0ZVVybHMgfHwgYXV0b0ZpeFVybHMpIHtcblx0XHRjc3MgPSBmaXhVcmxzKGNzcyk7XG5cdH1cblxuXHRpZiAoc291cmNlTWFwKSB7XG5cdFx0Ly8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjY2MDM4NzVcblx0XHRjc3MgKz0gXCJcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LFwiICsgYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSArIFwiICovXCI7XG5cdH1cblxuXHR2YXIgYmxvYiA9IG5ldyBCbG9iKFtjc3NdLCB7IHR5cGU6IFwidGV4dC9jc3NcIiB9KTtcblxuXHR2YXIgb2xkU3JjID0gbGluay5ocmVmO1xuXG5cdGxpbmsuaHJlZiA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG5cblx0aWYob2xkU3JjKSBVUkwucmV2b2tlT2JqZWN0VVJMKG9sZFNyYyk7XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qc1xuLy8gbW9kdWxlIGlkID0gNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSAyIDMiLCJpbXBvcnQgU3ltYm9sIGZyb20gJy4vX1N5bWJvbC5qcyc7XG5pbXBvcnQgZ2V0UmF3VGFnIGZyb20gJy4vX2dldFJhd1RhZy5qcyc7XG5pbXBvcnQgb2JqZWN0VG9TdHJpbmcgZnJvbSAnLi9fb2JqZWN0VG9TdHJpbmcuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUdldFRhZztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VHZXRUYWcuanMiLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNPYmplY3RMaWtlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc09iamVjdExpa2UuanMiLCJpbXBvcnQgbGF6eUluaXRpYWxpemUgZnJvbSAnLi4vbGF6eS1pbml0aWFsaXplJztcblxuY29uc3QgeyBkZWZpbmVQcm9wZXJ0eSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAgICAgICBnZXRPd25Qcm9wZXJ0eU5hbWVzLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgfSA9IE9iamVjdDtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVzY3JpcHRvcihkZXNjKSB7XG4gIGlmICghZGVzYyB8fCAhZGVzYy5oYXNPd25Qcm9wZXJ0eSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGtleXMgPSBbJ3ZhbHVlJywgJ2luaXRpYWxpemVyJywgJ2dldCcsICdzZXQnXTtcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgaWYgKGRlc2MuaGFzT3duUHJvcGVydHkoa2V5c1tpXSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29yYXRlKGhhbmRsZURlc2NyaXB0b3IsIGVudHJ5QXJncykge1xuICBpZiAoaXNEZXNjcmlwdG9yKGVudHJ5QXJnc1tlbnRyeUFyZ3MubGVuZ3RoIC0gMV0pKSB7XG4gICAgcmV0dXJuIGhhbmRsZURlc2NyaXB0b3IoLi4uZW50cnlBcmdzLCBbXSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBoYW5kbGVEZXNjcmlwdG9yKC4uLkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyksIGVudHJ5QXJncyk7XG4gICAgfTtcbiAgfVxufVxuXG5jbGFzcyBNZXRhIHtcbiAgQGxhenlJbml0aWFsaXplXG4gIGRlYm91bmNlVGltZW91dElkcyA9IHt9O1xuXG4gIEBsYXp5SW5pdGlhbGl6ZVxuICB0aHJvdHRsZVRpbWVvdXRJZHMgPSB7fTtcblxuICBAbGF6eUluaXRpYWxpemVcbiAgdGhyb3R0bGVQcmV2aW91c1RpbWVzdGFtcHMgPSB7fTtcblxuICBAbGF6eUluaXRpYWxpemVcbiAgdGhyb3R0bGVUcmFpbGluZ0FyZ3MgPSBudWxsO1xuXG4gIEBsYXp5SW5pdGlhbGl6ZVxuICBwcm9maWxlTGFzdFJhbiA9IG51bGw7XG59XG5cbmNvbnN0IE1FVEFfS0VZID0gKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicpXG4gID8gU3ltYm9sKCdfX2NvcmVfZGVjb3JhdG9yc19fJylcbiAgOiAnX19jb3JlX2RlY29yYXRvcnNfXyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhRm9yKG9iaikge1xuICBpZiAob2JqLmhhc093blByb3BlcnR5KE1FVEFfS0VZKSA9PT0gZmFsc2UpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShvYmosIE1FVEFfS0VZLCB7XG4gICAgICAvLyBEZWZhdWx0czogTk9UIGVudW1lcmFibGUsIGNvbmZpZ3VyYWJsZSwgb3Igd3JpdGFibGVcbiAgICAgIHZhbHVlOiBuZXcgTWV0YSgpXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gb2JqW01FVEFfS0VZXTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldE93bktleXMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbiAgICA/IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIGdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KVxuICAgICAgICAgIC5jb25jYXQoZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCkpO1xuICAgICAgfVxuICAgIDogZ2V0T3duUHJvcGVydHlOYW1lcztcblxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmopIHtcbiAgY29uc3QgZGVzY3MgPSB7fTtcblxuICBnZXRPd25LZXlzKG9iaikuZm9yRWFjaChcbiAgICBrZXkgPT4gKGRlc2NzW2tleV0gPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpKVxuICApO1xuXG4gIHJldHVybiBkZXNjcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRTZXR0ZXIoa2V5KSB7XG4gIHJldHVybiBmdW5jdGlvbiBzZXQobmV3VmFsdWUpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIC8vIElTIGVudW1lcmFibGUgd2hlbiByZWFzc2lnbmVkIGJ5IHRoZSBvdXRzaWRlIHdvcmRcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogbmV3VmFsdWVcbiAgICB9KTtcblxuICAgIHJldHVybiBuZXdWYWx1ZTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmQoZm4sIGNvbnRleHQpIHtcbiAgaWYgKGZuLmJpbmQpIHtcbiAgICByZXR1cm4gZm4uYmluZChjb250ZXh0KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gX19hdXRvYmluZF9fKCkge1xuICAgICAgcmV0dXJuIGZuLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3Qgd2FybiA9ICgoKSA9PiB7XG4gIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ29iamVjdCcgfHwgIWNvbnNvbGUgfHwgdHlwZW9mIGNvbnNvbGUud2FybiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiAoKSA9PiB7fTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmluZChjb25zb2xlLndhcm4sIGNvbnNvbGUpO1xuICB9XG59KSgpO1xuXG5jb25zdCBzZWVuRGVwcmVjYXRpb25zID0ge307XG5leHBvcnQgZnVuY3Rpb24gaW50ZXJuYWxEZXByZWNhdGlvbihtc2cpIHtcbiAgaWYgKHNlZW5EZXByZWNhdGlvbnNbbXNnXSAhPT0gdHJ1ZSkge1xuICAgIHNlZW5EZXByZWNhdGlvbnNbbXNnXSA9IHRydWU7XG4gICAgd2FybignREVQUkVDQVRJT046ICcgKyBtc2cpO1xuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1kZWNvcmF0b3JzL3NyYy9wcml2YXRlL3V0aWxzLmpzIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzT2JqZWN0O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc09iamVjdC5qcyIsImltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxuZXhwb3J0IGRlZmF1bHQgU3ltYm9sO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fU3ltYm9sLmpzIiwiaW1wb3J0IGZyZWVHbG9iYWwgZnJvbSAnLi9fZnJlZUdsb2JhbC5qcyc7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxuZXhwb3J0IGRlZmF1bHQgcm9vdDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3Jvb3QuanMiLCIvKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcSgnYScsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcShOYU4sIE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZXE7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2VxLmpzIiwiaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBpc0xlbmd0aCBmcm9tICcuL2lzTGVuZ3RoLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzQXJyYXlMaWtlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FycmF5TGlrZS5qcyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvSW50ZWdlcihkaXJ0eU51bWJlcikge1xuICBpZiAoZGlydHlOdW1iZXIgPT09IG51bGwgfHwgZGlydHlOdW1iZXIgPT09IHRydWUgfHwgZGlydHlOdW1iZXIgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuXG4gIHZhciBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuXG4gIGlmIChpc05hTihudW1iZXIpKSB7XG4gICAgcmV0dXJuIG51bWJlcjtcbiAgfVxuXG4gIHJldHVybiBudW1iZXIgPCAwID8gTWF0aC5jZWlsKG51bWJlcikgOiBNYXRoLmZsb29yKG51bWJlcik7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3RvSW50ZWdlci9pbmRleC5qcyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlcXVpcmVkQXJncyhyZXF1aXJlZCwgYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPCByZXF1aXJlZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocmVxdWlyZWQgKyAnIGFyZ3VtZW50JyArIHJlcXVpcmVkID4gMSA/ICdzJyA6ICcnICsgJyByZXF1aXJlZCwgYnV0IG9ubHkgJyArIGFyZ3MubGVuZ3RoICsgJyBwcmVzZW50Jyk7XG4gIH1cbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IEJvb2xlYW5Td2l0Y2ggZnJvbSAnLi9Cb29sZWFuU3dpdGNoJ1xuXG5leHBvcnQgZGVmYXVsdCBCb29sZWFuU3dpdGNoXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvQm9vbGVhblN3aXRjaC9pbmRleC5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBUZW1wbGF0ZVJlbmRlcmVyIGZyb20gJy4vVGVtcGxhdGVSZW5kZXJlcidcblxuZXhwb3J0IGRlZmF1bHQgVGVtcGxhdGVSZW5kZXJlclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL1RlbXBsYXRlUmVuZGVyZXIvaW5kZXguanMiLCJpbXBvcnQgZGVmaW5lUHJvcGVydHkgZnJvbSAnLi9fZGVmaW5lUHJvcGVydHkuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG4gKiB2YWx1ZSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIGRlZmluZVByb3BlcnR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlQXNzaWduVmFsdWU7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlQXNzaWduVmFsdWUuanMiLCJpbXBvcnQgZ2V0TmF0aXZlIGZyb20gJy4vX2dldE5hdGl2ZS5qcyc7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICB2YXIgZnVuYyA9IGdldE5hdGl2ZShPYmplY3QsICdkZWZpbmVQcm9wZXJ0eScpO1xuICAgIGZ1bmMoe30sICcnLCB7fSk7XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVQcm9wZXJ0eTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2RlZmluZVByb3BlcnR5LmpzIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzRnVuY3Rpb247XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzRnVuY3Rpb24uanMiLCIvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG5leHBvcnQgZGVmYXVsdCBmcmVlR2xvYmFsO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZnJlZUdsb2JhbC5qcyIsInZhciBnO1xyXG5cclxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcclxuZyA9IChmdW5jdGlvbigpIHtcclxuXHRyZXR1cm4gdGhpcztcclxufSkoKTtcclxuXHJcbnRyeSB7XHJcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXHJcblx0ZyA9IGcgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpIHx8ICgxLGV2YWwpKFwidGhpc1wiKTtcclxufSBjYXRjaChlKSB7XHJcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcclxuXHRpZih0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKVxyXG5cdFx0ZyA9IHdpbmRvdztcclxufVxyXG5cclxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxyXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xyXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGc7XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAod2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanMiLCJpbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5pbXBvcnQgb3ZlclJlc3QgZnJvbSAnLi9fb3ZlclJlc3QuanMnO1xuaW1wb3J0IHNldFRvU3RyaW5nIGZyb20gJy4vX3NldFRvU3RyaW5nLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZXN0YCB3aGljaCBkb2Vzbid0IHZhbGlkYXRlIG9yIGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVJlc3QoZnVuYywgc3RhcnQpIHtcbiAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCBpZGVudGl0eSksIGZ1bmMgKyAnJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VSZXN0O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVJlc3QuanMiLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICpcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpZGVudGl0eTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaWRlbnRpdHkuanMiLCIvKipcbiAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICovXG5mdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFwcGx5O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXBwbHkuanMiLCJpbXBvcnQgZXEgZnJvbSAnLi9lcS5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQgaXNJbmRleCBmcm9tICcuL19pc0luZGV4LmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGdpdmVuIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgdmFsdWUgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IGluZGV4IFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgaW5kZXggb3Iga2V5IGFyZ3VtZW50LlxuICogQHBhcmFtIHsqfSBvYmplY3QgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBvYmplY3QgYXJndW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJdGVyYXRlZUNhbGwodmFsdWUsIGluZGV4LCBvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0eXBlID0gdHlwZW9mIGluZGV4O1xuICBpZiAodHlwZSA9PSAnbnVtYmVyJ1xuICAgICAgICA/IChpc0FycmF5TGlrZShvYmplY3QpICYmIGlzSW5kZXgoaW5kZXgsIG9iamVjdC5sZW5ndGgpKVxuICAgICAgICA6ICh0eXBlID09ICdzdHJpbmcnICYmIGluZGV4IGluIG9iamVjdClcbiAgICAgICkge1xuICAgIHJldHVybiBlcShvYmplY3RbaW5kZXhdLCB2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0l0ZXJhdGVlQ2FsbDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzSXRlcmF0ZWVDYWxsLmpzIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTGVuZ3RoKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0xlbmd0aDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNMZW5ndGguanMiLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xudmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9TUFYX1NBRkVfSU5URUdFUl0gVGhlIHVwcGVyIGJvdW5kcyBvZiBhIHZhbGlkIGluZGV4LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcblxuICByZXR1cm4gISFsZW5ndGggJiZcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGUgIT0gJ3N5bWJvbCcgJiYgcmVJc1VpbnQudGVzdCh2YWx1ZSkpKSAmJlxuICAgICAgICAodmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzSW5kZXg7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc0luZGV4LmpzIiwiaW1wb3J0IGJhc2VUaW1lcyBmcm9tICcuL19iYXNlVGltZXMuanMnO1xuaW1wb3J0IGlzQXJndW1lbnRzIGZyb20gJy4vaXNBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc0J1ZmZlciBmcm9tICcuL2lzQnVmZmVyLmpzJztcbmltcG9ydCBpc0luZGV4IGZyb20gJy4vX2lzSW5kZXguanMnO1xuaW1wb3J0IGlzVHlwZWRBcnJheSBmcm9tICcuL2lzVHlwZWRBcnJheS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlMaWtlS2V5cztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5TGlrZUtleXMuanMiLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxuZXhwb3J0IGRlZmF1bHQgaXNBcnJheTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcnJheS5qcyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob3JpZ2luYWxNb2R1bGUpIHtcclxuXHRpZighb3JpZ2luYWxNb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XHJcblx0XHR2YXIgbW9kdWxlID0gT2JqZWN0LmNyZWF0ZShvcmlnaW5hbE1vZHVsZSk7XHJcblx0XHQvLyBtb2R1bGUucGFyZW50ID0gdW5kZWZpbmVkIGJ5IGRlZmF1bHRcclxuXHRcdGlmKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xyXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJsb2FkZWRcIiwge1xyXG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxyXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdHJldHVybiBtb2R1bGUubDtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImlkXCIsIHtcclxuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcclxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJleHBvcnRzXCIsIHtcclxuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcclxuXHRcdH0pO1xyXG5cdFx0bW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XHJcblx0fVxyXG5cdHJldHVybiBtb2R1bGU7XHJcbn07XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAod2VicGFjaykvYnVpbGRpbi9oYXJtb255LW1vZHVsZS5qcyIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNQcm90b3R5cGU7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc1Byb3RvdHlwZS5qcyIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5pbXBvcnQgaXNQbGFpbk9iamVjdCBmcm9tICcuL2lzUGxhaW5PYmplY3QuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgZG9tRXhjVGFnID0gJ1tvYmplY3QgRE9NRXhjZXB0aW9uXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFuIGBFcnJvcmAsIGBFdmFsRXJyb3JgLCBgUmFuZ2VFcnJvcmAsIGBSZWZlcmVuY2VFcnJvcmAsXG4gKiBgU3ludGF4RXJyb3JgLCBgVHlwZUVycm9yYCwgb3IgYFVSSUVycm9yYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gZXJyb3Igb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNFcnJvcihuZXcgRXJyb3IpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFcnJvcihFcnJvcik7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Vycm9yKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZXJyb3JUYWcgfHwgdGFnID09IGRvbUV4Y1RhZyB8fFxuICAgICh0eXBlb2YgdmFsdWUubWVzc2FnZSA9PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWUubmFtZSA9PSAnc3RyaW5nJyAmJiAhaXNQbGFpbk9iamVjdCh2YWx1ZSkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0Vycm9yO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0Vycm9yLmpzIiwiLyoqXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgYXJndW1lbnQgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IG92ZXJBcmc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19vdmVyQXJnLmpzIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TWFwKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlNYXA7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheU1hcC5qcyIsIi8qKiBVc2VkIHRvIG1hdGNoIHRlbXBsYXRlIGRlbGltaXRlcnMuICovXG52YXIgcmVJbnRlcnBvbGF0ZSA9IC88JT0oW1xcc1xcU10rPyklPi9nO1xuXG5leHBvcnQgZGVmYXVsdCByZUludGVycG9sYXRlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcmVJbnRlcnBvbGF0ZS5qcyIsImltcG9ydCBiYXNlVG9TdHJpbmcgZnJvbSAnLi9fYmFzZVRvU3RyaW5nLmpzJztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b1N0cmluZztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdG9TdHJpbmcuanMiLCJpbXBvcnQgeyBkZWNvcmF0ZSB9IGZyb20gJy4vcHJpdmF0ZS91dGlscyc7XG5cbmZ1bmN0aW9uIGhhbmRsZURlc2NyaXB0b3IodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpIHtcbiAgZGVzY3JpcHRvci53cml0YWJsZSA9IGZhbHNlO1xuICByZXR1cm4gZGVzY3JpcHRvcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVhZG9ubHkoLi4uYXJncykge1xuICByZXR1cm4gZGVjb3JhdGUoaGFuZGxlRGVzY3JpcHRvciwgYXJncyk7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1kZWNvcmF0b3JzL3NyYy9yZWFkb25seS5qcyIsImltcG9ydCB0elBhcnNlVGltZXpvbmUgZnJvbSAnLi4vX2xpYi90elBhcnNlVGltZXpvbmUnXG5pbXBvcnQgc3ViTWlsbGlzZWNvbmRzIGZyb20gJ2RhdGUtZm5zL2VzbS9zdWJNaWxsaXNlY29uZHMnXG5pbXBvcnQgdG9EYXRlIGZyb20gJy4uL3RvRGF0ZSdcblxuLyoqXG4gKiBAbmFtZSB1dGNUb1pvbmVkVGltZVxuICogQGNhdGVnb3J5IFRpbWUgWm9uZSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgYSBkYXRlL3RpbWUgcmVwcmVzZW50aW5nIGxvY2FsIHRpbWUgaW4gYSBnaXZlbiB0aW1lIHpvbmUgZnJvbSB0aGUgVVRDIGRhdGVcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgYSBkYXRlIGluc3RhbmNlIHdpdGggdmFsdWVzIHJlcHJlc2VudGluZyB0aGUgbG9jYWwgdGltZSBpbiB0aGUgdGltZSB6b25lXG4gKiBzcGVjaWZpZWQgb2YgdGhlIFVUQyB0aW1lIGZyb20gdGhlIGRhdGUgcHJvdmlkZWQuIEluIG90aGVyIHdvcmRzLCB3aGVuIHRoZSBuZXcgZGF0ZVxuICogaXMgZm9ybWF0dGVkIGl0IHdpbGwgc2hvdyB0aGUgZXF1aXZhbGVudCBob3VycyBpbiB0aGUgdGFyZ2V0IHRpbWUgem9uZSByZWdhcmRsZXNzXG4gKiBvZiB0aGUgY3VycmVudCBzeXN0ZW0gdGltZSB6b25lLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxTdHJpbmd8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgd2l0aCB0aGUgcmVsZXZhbnQgVVRDIHRpbWVcbiAqIEBwYXJhbSB7U3RyaW5nfSB0aW1lWm9uZSAtIHRoZSB0aW1lIHpvbmUgdG8gZ2V0IGxvY2FsIHRpbWUgZm9yLCBjYW4gYmUgYW4gb2Zmc2V0IG9yIElBTkEgdGltZSB6b25lXG4gKiBAcGFyYW0ge09wdGlvbnNXaXRoVFp9IFtvcHRpb25zXSAtIHRoZSBvYmplY3Qgd2l0aCBvcHRpb25zLiBTZWUgW09wdGlvbnNde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvT3B0aW9uc31cbiAqIEBwYXJhbSB7MHwxfDJ9IFtvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHM9Ml0gLSBwYXNzZWQgdG8gYHRvRGF0ZWAuIFNlZSBbdG9EYXRlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3RvRGF0ZX1cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgZXF1aXZhbGVudCB0aW1lIGluIHRoZSB0aW1lIHpvbmVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHNgIG11c3QgYmUgMCwgMSBvciAyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEluIEp1bmUgMTBhbSBVVEMgaXMgNmFtIGluIE5ldyBZb3JrICgtMDQ6MDApXG4gKiBjb25zdCByZXN1bHQgPSB1dGNUb1pvbmVkVGltZSgnMjAxNC0wNi0yNVQxMDowMDowMC4wMDBaJywgJ0FtZXJpY2EvTmV3X1lvcmsnKVxuICogLy89PiBKdW4gMjUgMjAxNCAwNjowMDowMFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1dGNUb1pvbmVkVGltZShkaXJ0eURhdGUsIHRpbWVab25lLCBvcHRpb25zKSB7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSwgb3B0aW9ucylcblxuICAvLyBUaGlzIGRhdGUgaGFzIHRoZSBVVEMgdGltZSB2YWx1ZXMgb2YgdGhlIGlucHV0IGRhdGUgYXQgdGhlIHN5c3RlbSB0aW1lIHpvbmVcbiAgdmFyIHV0Y0RhdGUgPSBuZXcgRGF0ZShcbiAgICBkYXRlLmdldFVUQ0Z1bGxZZWFyKCksXG4gICAgZGF0ZS5nZXRVVENNb250aCgpLFxuICAgIGRhdGUuZ2V0VVRDRGF0ZSgpLFxuICAgIGRhdGUuZ2V0VVRDSG91cnMoKSxcbiAgICBkYXRlLmdldFVUQ01pbnV0ZXMoKSxcbiAgICBkYXRlLmdldFVUQ1NlY29uZHMoKSxcbiAgICBkYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpXG4gIClcbiAgLy8gV2UganVzdCBuZWVkIHRvIGFwcGx5IHRoZSBvZmZzZXQgaW5kaWNhdGVkIGJ5IHRoZSB0aW1lIHpvbmUgdG8gdGhpcyBsb2NhbGl6ZWQgZGF0ZVxuICB2YXIgb2Zmc2V0TWlsbGlzZWNvbmRzID0gdHpQYXJzZVRpbWV6b25lKHRpbWVab25lLCBkYXRlKVxuXG4gIHJldHVybiBvZmZzZXRNaWxsaXNlY29uZHNcbiAgICA/IHN1Yk1pbGxpc2Vjb25kcyh1dGNEYXRlLCBvZmZzZXRNaWxsaXNlY29uZHMpXG4gICAgOiB1dGNEYXRlXG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMtdHovZXNtL3V0Y1RvWm9uZWRUaW1lL2luZGV4LmpzIiwiaW1wb3J0IHR6VG9rZW5pemVEYXRlIGZyb20gJy4uL3R6VG9rZW5pemVEYXRlL2luZGV4LmpzJ1xuXG52YXIgTUlMTElTRUNPTkRTX0lOX0hPVVIgPSAzNjAwMDAwXG52YXIgTUlMTElTRUNPTkRTX0lOX01JTlVURSA9IDYwMDAwXG5cbnZhciBwYXR0ZXJucyA9IHtcbiAgdGltZXpvbmU6IC8oW1orLV0uKikkLyxcbiAgdGltZXpvbmVaOiAvXihaKSQvLFxuICB0aW1lem9uZUhIOiAvXihbKy1dKShcXGR7Mn0pJC8sXG4gIHRpbWV6b25lSEhNTTogL14oWystXSkoXFxkezJ9KTo/KFxcZHsyfSkkLyxcbiAgdGltZXpvbmVJQU5BOiAvKFVUQ3woPzpbYS16QS1aXStcXC9bYS16QS1aX10rKD86XFwvW2EtekEtWl9dKyk/KSkkL1xufVxuXG4vLyBQYXJzZSB2YXJpb3VzIHRpbWUgem9uZSBvZmZzZXQgZm9ybWF0cyB0byBhbiBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0elBhcnNlVGltZXpvbmUodGltZXpvbmVTdHJpbmcsIGRhdGUpIHtcbiAgdmFyIHRva2VuXG4gIHZhciBhYnNvbHV0ZU9mZnNldFxuXG4gIC8vIFpcbiAgdG9rZW4gPSBwYXR0ZXJucy50aW1lem9uZVouZXhlYyh0aW1lem9uZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIHZhciBob3Vyc1xuXG4gIC8vIMKxaGhcbiAgdG9rZW4gPSBwYXR0ZXJucy50aW1lem9uZUhILmV4ZWModGltZXpvbmVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGhvdXJzID0gcGFyc2VJbnQodG9rZW5bMl0sIDEwKVxuXG4gICAgaWYgKCF2YWxpZGF0ZVRpbWV6b25lKGhvdXJzKSkge1xuICAgICAgcmV0dXJuIE5hTlxuICAgIH1cblxuICAgIGFic29sdXRlT2Zmc2V0ID0gaG91cnMgKiBNSUxMSVNFQ09ORFNfSU5fSE9VUlxuICAgIHJldHVybiB0b2tlblsxXSA9PT0gJysnID8gLWFic29sdXRlT2Zmc2V0IDogYWJzb2x1dGVPZmZzZXRcbiAgfVxuXG4gIC8vIMKxaGg6bW0gb3IgwrFoaG1tXG4gIHRva2VuID0gcGF0dGVybnMudGltZXpvbmVISE1NLmV4ZWModGltZXpvbmVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGhvdXJzID0gcGFyc2VJbnQodG9rZW5bMl0sIDEwKVxuICAgIHZhciBtaW51dGVzID0gcGFyc2VJbnQodG9rZW5bM10sIDEwKVxuXG4gICAgaWYgKCF2YWxpZGF0ZVRpbWV6b25lKGhvdXJzLCBtaW51dGVzKSkge1xuICAgICAgcmV0dXJuIE5hTlxuICAgIH1cblxuICAgIGFic29sdXRlT2Zmc2V0ID1cbiAgICAgIGhvdXJzICogTUlMTElTRUNPTkRTX0lOX0hPVVIgKyBtaW51dGVzICogTUlMTElTRUNPTkRTX0lOX01JTlVURVxuICAgIHJldHVybiB0b2tlblsxXSA9PT0gJysnID8gLWFic29sdXRlT2Zmc2V0IDogYWJzb2x1dGVPZmZzZXRcbiAgfVxuXG4gIC8vIElBTkEgdGltZSB6b25lXG4gIHRva2VuID0gcGF0dGVybnMudGltZXpvbmVJQU5BLmV4ZWModGltZXpvbmVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIC8vIHZhciBbZlllYXIsIGZNb250aCwgZkRheSwgZkhvdXIsIGZNaW51dGUsIGZTZWNvbmRdID0gdHpUb2tlbml6ZURhdGUoZGF0ZSwgdGltZXpvbmVTdHJpbmcpXG4gICAgdmFyIHRva2VucyA9IHR6VG9rZW5pemVEYXRlKGRhdGUsIHRpbWV6b25lU3RyaW5nKVxuICAgIHZhciBhc1VUQyA9IERhdGUuVVRDKFxuICAgICAgdG9rZW5zWzBdLFxuICAgICAgdG9rZW5zWzFdIC0gMSxcbiAgICAgIHRva2Vuc1syXSxcbiAgICAgIHRva2Vuc1szXSxcbiAgICAgIHRva2Vuc1s0XSxcbiAgICAgIHRva2Vuc1s1XVxuICAgIClcbiAgICB2YXIgdGltZXN0YW1wV2l0aE1zWmVyb2VkID0gZGF0ZS5nZXRUaW1lKCkgLSAoZGF0ZS5nZXRUaW1lKCkgJSAxMDAwKVxuICAgIHJldHVybiAtKGFzVVRDIC0gdGltZXN0YW1wV2l0aE1zWmVyb2VkKVxuICB9XG5cbiAgcmV0dXJuIDBcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVUaW1lem9uZShob3VycywgbWludXRlcykge1xuICBpZiAobWludXRlcyAhPSBudWxsICYmIChtaW51dGVzIDwgMCB8fCBtaW51dGVzID4gNTkpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zLXR6L2VzbS9fbGliL3R6UGFyc2VUaW1lem9uZS9pbmRleC5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IEV2ZW50c01peGluLCB3aXRoRXZlbnRzTWl4aW4gfSBmcm9tICcuL0V2ZW50c01peGluJ1xuXG5leHBvcnQgZGVmYXVsdCBFdmVudHNNaXhpblxuZXhwb3J0IHsgd2l0aEV2ZW50c01peGluIH1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9FdmVudHNNaXhpbi9pbmRleC5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBEYXRlVGltZUlucHV0IGZyb20gJy4vRGF0ZVRpbWVJbnB1dCdcblxuZXhwb3J0IGRlZmF1bHQgRGF0ZVRpbWVJbnB1dFxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0RhdGVUaW1lSW5wdXQvaW5kZXguanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgQm9vbGVhbkVkaXRvciBmcm9tICcuL0Jvb2xlYW5FZGl0b3InXG5pbXBvcnQgQm9vbGVhblJlbmRlcmVyIGZyb20gJy4vQm9vbGVhblJlbmRlcmVyJ1xuaW1wb3J0IEJvb2xlYW5GaWx0ZXIgZnJvbSAnLi9Cb29sZWFuRmlsdGVyJ1xuaW1wb3J0IE51bWJlckVkaXRvciBmcm9tICcuL051bWJlckVkaXRvcidcbmltcG9ydCBUZXh0RWRpdG9yIGZyb20gJy4vVGV4dEVkaXRvcidcbmltcG9ydCBUZW1wbGF0ZVJlbmRlcmVyIGZyb20gJy4vVGVtcGxhdGVSZW5kZXJlcidcbmltcG9ydCBJbWFnZVJlbmRlcmVyIGZyb20gJy4vSW1hZ2VSZW5kZXJlcidcbmltcG9ydCBEYXRlVGltZUZpbHRlciBmcm9tICcuL0RhdGVUaW1lRmlsdGVyJ1xuaW1wb3J0IERhdGVUaW1lRWRpdG9yIGZyb20gJy4vRGF0ZVRpbWVFZGl0b3InXG5cbmV4cG9ydCB7XG4gIEJvb2xlYW5FZGl0b3IsXG4gIEJvb2xlYW5SZW5kZXJlcixcbiAgQm9vbGVhbkZpbHRlcixcbiAgTnVtYmVyRWRpdG9yLFxuICBUZXh0RWRpdG9yLFxuICBUZW1wbGF0ZVJlbmRlcmVyLFxuICBJbWFnZVJlbmRlcmVyLFxuICBEYXRlVGltZUZpbHRlcixcbiAgRGF0ZVRpbWVFZGl0b3IsXG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvaW5kZXguanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgQm9vbGVhbkVkaXRvciBmcm9tICcuL0Jvb2xlYW5FZGl0b3InXG5cbmV4cG9ydCBkZWZhdWx0IEJvb2xlYW5FZGl0b3JcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9Cb29sZWFuRWRpdG9yL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IENvbXBvbmVudCBmcm9tICcuLi9Db21wb25lbnQnXG5pbXBvcnQgQm9vbGVhblN3aXRjaCBmcm9tICcuLi9Cb29sZWFuU3dpdGNoJ1xuXG4vKipcbiAqIEJvb2xlYW5zIEVkaXRvclxuICpcbiAqIEhhbmRsZSBib29sZWFuIHZhbHVlcyBFZGl0aW5nXG4gKlxuICogIyMgT3B0aW9uc1xuICpcbiAqIHwgTmFtZSAgICAgICAgICAgICAgICAgIFx0fCBEZWZhdWx0ICAgICBcdHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0fFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdHw6LS0tLS0tLS0tLS0tLTp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICoqYm9vbGVhblVzZWRUcnVlVmFsdWUqKiAgIHwgdW5kZWZpbmVkICAgIHwgdGhlIHZhbHVlIHRvIHJldHVybiB3aGVuIHRoZSBlZGl0b3IgY2hhbmdlcyB0aGUgY3VycmVudCBjZWxsIHZhbHVlIHRvIHRydWUuIGluIGNhc2UgaXQgaXMgdW5kZWZpbmVkIHRoZW4gd2UgdXNlIHRoZSBmaXJzdCBpdGVtIGluICoqYm9vbGVhblRydWVWYWx1ZVtdKipcbiAqIHwgKipib29sZWFuVXNlZEZhbHNlVmFsdWUqKiAgIHwgdW5kZWZpbmVkICAgIHwgdGhlIHZhbHVlIHRvIHJldHVybiB3aGVuIHRoZSBlZGl0b3IgY2hhbmdlcyB0aGUgY3VycmVudCBjZWxsIHZhbHVlIHRvIGZhbHNlLiBpbiBjYXNlIGl0IGlzIHVuZGVmaW5lZCB0aGVuIHdlIHVzZSB0aGUgZmlyc3QgaXRlbSBpbiAqKmJvb2xlYW5GYWxzZVZhbHVlW10qKlxuICogfCAqKmJvb2xlYW5UcnVlVmFsdWVbXSoqICAgICAgIHwgdHJ1ZShib29sKSAgXHR8IFRoZSBvcHRpb25zIGRlc2NyaWJlcyB3aGF0IGlzIGNvbnNpZGVyZWQgYHRydWVgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdHxcbiAqIHwgKipib29sZWFuRmFsc2VWYWx1ZVtdKiogICAgICB8IGZhbHNlKGJvb2wpIFx0fCBUaGUgb3B0aW9ucyBkZXNjcmliZXMgd2hhdCBpcyBjb25zaWRlcmVkIGBmYWxzZWBcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5jbGFzcyBCb29sZWFuRWRpdG9yIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqICBAaW5oZXJpdERvY1xuICAgKi9cbiAgaW5pdChwYXJhbXMpIHtcbiAgICBpZiAocGFyYW1zLmtleVByZXNzICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IEJvb2xlYW4ocGFyYW1zLmtleVByZXNzKVxuICAgIH0gZWxzZSBpZiAocGFyYW1zLmNoYXJQcmVzcyAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5fdmFsdWUgPSBCb29sZWFuKHBhcmFtcy5jaGFyUHJlc3MpXG4gICAgfVxuXG4gICAgdGhpcy5fdHJ1ZVZhbHVlID0gW10uY29uY2F0KFxuICAgICAgdGhpcy5nZXRPcHRpb24oJ2Jvb2xlYW5UcnVlVmFsdWUnLCBwYXJhbXMsIFt0cnVlXSlcbiAgICApXG5cbiAgICB0aGlzLl9mYWxzZVZhbHVlID0gW10uY29uY2F0KFxuICAgICAgdGhpcy5nZXRPcHRpb24oJ2Jvb2xlYW5GYWxzZVZhbHVlJywgcGFyYW1zLCBbZmFsc2VdKVxuICAgIClcblxuICAgIHRoaXMuX3JldHVyblRydWVWYWx1ZSA9IHRoaXMuZ2V0T3B0aW9uKFxuICAgICAgJ2Jvb2xlYW5Vc2VkVHJ1ZVZhbHVlJyxcbiAgICAgIHBhcmFtcyxcbiAgICAgIHRoaXMuX3RydWVWYWx1ZVswXVxuICAgIClcbiAgICB0aGlzLl9yZXR1cm5GYWxzZVZhbHVlID0gdGhpcy5nZXRPcHRpb24oXG4gICAgICAnYm9vbGVhblVzZWRGYWxzZVZhbHVlJyxcbiAgICAgIHBhcmFtcyxcbiAgICAgIHRoaXMuX2ZhbHNlVmFsdWVbMF1cbiAgICApXG5cbiAgICB0aGlzLl90cnVlVmFsdWUgPSB0aGlzLl90cnVlVmFsdWUubWFwKHggPT4gU3RyaW5nKHgpKVxuICAgIHRoaXMuX2ZhbHNlVmFsdWUgPSB0aGlzLl9mYWxzZVZhbHVlLm1hcCh4ID0+IFN0cmluZyh4KSlcblxuICAgIHRoaXMuZm9jdXNBZnRlckF0dGFjaGVkID0gcGFyYW1zLmNlbGxTdGFydGVkRWRpdFxuICAgIGlmICh0aGlzLmZvY3VzQWZ0ZXJBdHRhY2hlZCkge1xuICAgICAgbGV0IGtleVByZXNzQmFja3NwYWNlT3JEZWxldGUgPVxuICAgICAgICBwYXJhbXMua2V5UHJlc3MgPT0gMzIgfHwgcGFyYW1zLmtleVByZXNzID09IDQ2IC8vIHNwYWNlIC8vIGRlbGV0ZVxuXG4gICAgICBpZiAoa2V5UHJlc3NCYWNrc3BhY2VPckRlbGV0ZSkge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IGZhbHNlXG4gICAgICB9IGVsc2UgaWYgKHBhcmFtcy5jaGFyUHJlc3MgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBwYXJhbXMuY2hhclByZXNzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHBhcmFtcy52YWx1ZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHBhcmFtcy52YWx1ZVxuICAgIH1cblxuICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5fY29udmVydFZhbHVlKFxuICAgICAgdGhpcy5fdmFsdWUsXG4gICAgICB0aGlzLl90cnVlVmFsdWUsXG4gICAgICB0aGlzLl9mYWxzZVZhbHVlXG4gICAgKVxuXG4gICAgdGhpcy5fc3dpdGNoZXIgPSBuZXcgQm9vbGVhblN3aXRjaCh0aGlzLl92YWx1ZSwgc3dpdGNoZXIgPT4ge1xuICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLl9jb252ZXJ0VmFsdWUoXG4gICAgICAgIHN3aXRjaGVyLmlzQ2hlY2tlZCgpLFxuICAgICAgICB0aGlzLl90cnVlVmFsdWUsXG4gICAgICAgIHRoaXMuX2ZhbHNlVmFsdWVcbiAgICAgIClcbiAgICB9KVxuICAgIHRoaXMuX3N3aXRjaGVyLmluaXQocGFyYW1zKVxuICB9XG5cbiAgLyoqXG4gICAqICBAaW5oZXJpdERvY1xuICAgKi9cbiAgZ2V0R3VpKCkge1xuICAgIHJldHVybiB0aGlzLl9zd2l0Y2hlci5nZXRHdWkoKVxuICB9XG5cbiAgLyoqXG4gICAqICBAaW5oZXJpdERvY1xuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLl9zd2l0Y2hlci5kZXN0cm95KClcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNhbGxlZCBvbmNlIGFmdGVyIEdVSSBpcyBhdHRhY2hlZCB0byBET00uXG4gICAqIE1ha2Ugc3VyZSB0aGUgY29udGFpbmVyIGlzIGFsd2F5cyBmb2N1c2VkIGFuZCBsaXN0ZW5pbmcgdG8ga2V5IGNoYW5nZXNcbiAgICovXG4gIGFmdGVyR3VpQXR0YWNoZWQoKSB7XG4gICAgaWYgKHRoaXMuZm9jdXNBZnRlckF0dGFjaGVkKSB7XG4gICAgICB0aGlzLmZvY3VzSW4oKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZpbmFsIHZhbHVlIHRvIHRoZSBncmlkLCB0aGUgcmVzdWx0IG9mIHRoZSBlZGl0aW5nXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAqL1xuICBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWUgPyB0aGlzLl9yZXR1cm5UcnVlVmFsdWUgOiB0aGlzLl9yZXR1cm5GYWxzZVZhbHVlXG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjYWxsZWQgb25jZSBhZnRlciBpbml0aWFsaXplZCBhbmQgcmV0dXJucyBmYWxzZSBzbyB0aGUgZWRpdG9yIGFwcGVhcnMgaW4gdGhlIGNlbGxcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gYWx3YXlzIGZhbHNlXG4gICAqKi9cbiAgaXNQb3B1cCgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBkb2luZyBmdWxsIHJvdyBlZGl0LCB0aGVuIGdldHMgY2FsbGVkIHdoZW4gdGFiYmluZyBpbnRvIHRoZSBjZWxsLlxuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufVxuICAgKi9cbiAgZm9jdXNJbigpIHtcbiAgICB0aGlzLl9zd2l0Y2hlci5zZXREaXNhYmxlZChmYWxzZSlcbiAgICB0aGlzLl9zd2l0Y2hlci5mb2N1cygpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBkb2luZyBmdWxsIHJvdyBlZGl0LCB0aGVuIGdldHMgY2FsbGVkIHdoZW4gdGFiYmluZyBvdXQgb2YgdGhlIGNlbGwuXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAqL1xuICBmb2N1c091dCgpIHtcbiAgICB0aGlzLl9zd2l0Y2hlci5zZXREaXNhYmxlZCh0cnVlKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtCb29sZWFufSB2YWx1ZSB0aGUgY3VycmVudCBjZWxsIHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gdHJ1ZVZhbHVlIHRydWUgdmFsdWUgYWxpYXNcbiAgICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSBmYWxzZVZhbHVlIGZhbHNlIHZhbHVlIGFsaWFzXG4gICAqL1xuICBfY29udmVydFZhbHVlKHZhbHVlLCB0cnVlVmFsdWUsIGZhbHNlVmFsdWUpIHtcbiAgICBjb25zdCB2YWx1ZUFzU3RyaW5nID0gU3RyaW5nKHZhbHVlKVxuXG4gICAgcmV0dXJuIHRydWVWYWx1ZS5pbmRleE9mKHZhbHVlQXNTdHJpbmcpID4gLTFcbiAgICAgID8gdHJ1ZVxuICAgICAgOiBmYWxzZVZhbHVlLmluZGV4T2YodmFsdWVBc1N0cmluZykgPiAtMVxuICAgICAgPyBmYWxzZVxuICAgICAgOiB2YWx1ZVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvb2xlYW5FZGl0b3JcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9Cb29sZWFuRWRpdG9yL0Jvb2xlYW5FZGl0b3IuanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgKi9cblxuLyoqXG4gKiBUaGUgYmFzZSBjb21wb25lbnQgY2xhc3NcbiAqXG4gKiBUaGlzIGNsYXNzIGlzIHRoZSBhYnN0cmFjdCBjbGFzcyB3aGljaCBhbGwgY29tcG9uZW50cyBzaG91bGQgdXNlXG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqL1xuY2xhc3MgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgaHRtbCBlbGVtZW50XG4gICAqXG4gICAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgICovXG4gIF9ndWkgPSBudWxsXG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gICAqXG4gICAqIEByZXR1cm4gdm9pZFxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIGluaXQocGFyYW1zKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIFtpbml0XSBtZXRob2RgXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgRE9NIGVsZW1lbnQgb2YgdGhlIGNvbXBvbmVudCwgdGhpcyBpcyB3aGF0IHRoZSBncmlkIHB1dHMgaW50byB0aGUgY2VsbFxuICAgKlxuICAgKiBAcmV0dXJuIHtIVE1MRWxlbWVudH1cbiAgICovXG4gIGdldEd1aSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZ3VpXG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZC4gSWYgeW91ciBjdXN0b20gY29tcG9uZW50IG5lZWRzIHRvIGRvXG4gICAqIGFueSByZXNvdXJjZSBjbGVhbmluZyB1cCwgZG8gaXQgaGVyZS5cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgLy8gcGFzc1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIHJlcXVpcmVkIG9wdGlvbiB2YWx1ZVxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgdHJ5IHRvIGZpbmQgdGhlIHBhc3NlZCBvcHRpb24ncyB2YWx1ZSBpbiB0aGUgZm9sbG93aW5nIG9yZGVyXG4gICAqXG4gICAqICAxLiBwYXJhbXNcbiAgICogIDIuIFNlYXJjaCBgcGFyYW1zLmNvbERlZmBcbiAgICogIDMuIFNlYXJjaCBgcGFyYW1zLmNvbnRleHQuQUdyaWRDb21wb25lbnRzTWV0YUNvbmZpZ1tDT0xVTU5fSURdYCBvciBgcGFyYW1zLmNvbnRleHQubWV0YVtDT0xVTU5fSURdYFxuICAgKiAgNC4gU2VhcmNoIGBwYXJhbXMuY29udGV4dC5BR3JpZENvbXBvbmVudHNNZXRhQ29uZmlnYCBvciBgcGFyYW1zLmNvbnRleHQubWV0YWBcbiAgICogIDUuIFNlYXJjaCBgcGFyYW1zLmNvbnRleHRgXG4gICAqICA2LiBJZiBub25lIGZvdW5kIHJldHVybiB0aGUgZmFsbGJhY2tcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIG5hbWUgb2YgdGhlIG9wdGlvblxuICAgKiBAcGFyYW0ge3BhcmFtc30gcGFyYW1zIGFuIG9iamVjdCB1c2VkIHRvIHNlYXJjaCBmb3IgdGhlIG9wdGlvblxuICAgKiBAcGFyYW0ge1N0cmluZ30gZmFsbGJhY2sgYSB2YWx1ZSB0byByZXR1cm4gaW4gY2FzZSB0aGUgb3B0aW9uIGNhbiBub3QgYmUgZm91bmRcbiAgICovXG4gIGdldE9wdGlvbihuYW1lLCBwYXJhbXMsIGZhbGxiYWNrID0gbnVsbCkge1xuICAgIGxldCBvcHRpb25cblxuICAgIGlmIChwYXJhbXMgJiYgcGFyYW1zLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICBvcHRpb24gPSBwYXJhbXNbbmFtZV1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdHJ5IHRvIGZldGNoIGZyb20gdGhlIGNvbHVtbiBkZWYgZmlyc3RcbiAgICAgIGlmIChcbiAgICAgICAgcGFyYW1zLmhhc093blByb3BlcnR5KCdjb2xEZWYnKSAmJlxuICAgICAgICBwYXJhbXMuY29sRGVmLmhhc093blByb3BlcnR5KG5hbWUpXG4gICAgICApIHtcbiAgICAgICAgb3B0aW9uID0gcGFyYW1zLmNvbERlZltuYW1lXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdHJ5IHRvIGZldGNoIGZyb20gQUdyaWRDb21wb25lbnRzTWV0YUNvbmZpZ3xtZXRhIGluIHRoZSBjb250ZXh0XG4gICAgICAgIGxldCBBR3JpZENvbXBvbmVudHNNZXRhQ29uZmlnID0gbnVsbFxuICAgICAgICBpZiAocGFyYW1zLmhhc093blByb3BlcnR5KCdjb250ZXh0JykpIHtcbiAgICAgICAgICBBR3JpZENvbXBvbmVudHNNZXRhQ29uZmlnID1cbiAgICAgICAgICAgIHBhcmFtcy5jb250ZXh0LkFHcmlkQ29tcG9uZW50c01ldGFDb25maWcgfHwgcGFyYW1zLmNvbnRleHQubWV0YVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIEFHcmlkQ29tcG9uZW50c01ldGFDb25maWcgJiZcbiAgICAgICAgICBBR3JpZENvbXBvbmVudHNNZXRhQ29uZmlnLmhhc093blByb3BlcnR5KHBhcmFtcy5jb2x1bW4uY29sSWQpICYmXG4gICAgICAgICAgQUdyaWRDb21wb25lbnRzTWV0YUNvbmZpZ1twYXJhbXMuY29sdW1uLmNvbElkXS5oYXNPd25Qcm9wZXJ0eShuYW1lKVxuICAgICAgICApIHtcbiAgICAgICAgICBvcHRpb24gPSBBR3JpZENvbXBvbmVudHNNZXRhQ29uZmlnW3BhcmFtcy5jb2x1bW4uY29sSWRdW25hbWVdXG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgQUdyaWRDb21wb25lbnRzTWV0YUNvbmZpZyAmJlxuICAgICAgICAgIEFHcmlkQ29tcG9uZW50c01ldGFDb25maWcuaGFzT3duUHJvcGVydHkobmFtZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgb3B0aW9uID0gQUdyaWRDb21wb25lbnRzTWV0YUNvbmZpZ1tuYW1lXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHRyeSB0byBmZXRjaCBmcm9tIHRoZSBjb250ZXh0IG9iamVjdCBpdHNlbGZcbiAgICAgICAgICBjb25zdCBjb250ZXh0ID0gcGFyYW1zLmNvbnRleHRcbiAgICAgICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Lmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgICBvcHRpb24gPSBjb250ZXh0W25hbWVdXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRyeSB0byBjaGVjayBwYXJhbXMgaXRzZWxmIG9yIGZhbGxiYWNrIHRvIGRlZmF1bHRcbiAgICAgICAgICAgIG9wdGlvbiA9IGZhbGxiYWNrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVvZiBvcHRpb24gIT09ICd1bmRlZmluZWQnID8gb3B0aW9uIDogZmFsbGJhY2tcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgV2luZG93IEluc3RhbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7cGFyYW1zfSBwYXJhbXMgYW4gb2JqZWN0IHVzZWQgdG8gc2VhcmNoIGZvciB0aGUgd2luZG93IGluc3RhbmNlXG4gICAqXG4gICAqIEByZXR1cm4ge1dpbmRvd31cbiAgICovXG4gIGdldFdpbihwYXJhbXMpIHtcbiAgICBjb25zdCB3aW4gPSB0aGlzLmdldE9wdGlvbignd2luZG93JywgcGFyYW1zKSB8fCB3aW5kb3cgfHwgbnVsbFxuXG4gICAgaWYgKCF3aW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ3VycmVudCBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IHdpbmRvdycpXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpblxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkb2N1bWVudCBJbnN0YW5jZVxuICAgKlxuICAgKiBAcGFyYW0ge3BhcmFtc30gcGFyYW1zIGFuIG9iamVjdCB1c2VkIHRvIHNlYXJjaCBmb3IgdGhlIGRvY3VtZW50IGluc3RhbmNlXG4gICAqXG4gICAqIEByZXR1cm4ge0hUTUxEb2N1bWVudH1cbiAgICovXG4gIGdldERvYyhwYXJhbXMpIHtcbiAgICBjb25zdCBkb2MgPSB0aGlzLmdldE9wdGlvbignZG9jdW1lbnQnLCBwYXJhbXMpIHx8IGRvY3VtZW50IHx8IG51bGxcblxuICAgIGlmICghZG9jKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0N1cnJlbnQgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBkb2N1bWVudCcpXG4gICAgfVxuXG4gICAgcmV0dXJuIGRvY1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvbmVudFxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0NvbXBvbmVudC9Db21wb25lbnQuanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBhdXRvYmluZCwgb3ZlcnJpZGUgfSBmcm9tICdjb3JlLWRlY29yYXRvcnMnXG5pbXBvcnQgQ29tcG9uZW50IGZyb20gJy4uL0NvbXBvbmVudCdcbmltcG9ydCAnLi9zdHlsZS5zY3NzJ1xuXG4vKipcbiAqIEJvb2xlYW4gUmVuZGVyZXJcbiAqXG4gKiBTaW1wbGUgdG9nZ2xlIHN3aXRjaCB0byBoYW5kbGUgYm9vbGVhbiB2YWx1ZXNcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5jbGFzcyBCb29sZWFuU3dpdGNoIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBuZXcgQm9vbGVhblN3aXRjaCBDb21wb25lbnRcbiAgICpcbiAgICogQHBhcmFtIHtCb29sZWFufSBbaW5pdGlhbFZhbHVlID0gZmFsc2VdIHRoZSBkZWZhdWx0IHN0YXRlICwgY2hlY2tlZCBvciB1bmNoZWNrZWRcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2xpc3RlbmVyID0gbnVsbF0gYSBsaXN0ZW5lciB0byBiZSBjYWxsZWQgd2hlbiB0aGUgc3RhdGUgaXMgY2hhbmdlZFxuICAgKi9cbiAgY29uc3RydWN0b3IoaW5pdGlhbFZhbHVlID0gZmFsc2UsIGxpc3RlbmVyID0gbnVsbCkge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLnNldENoZWNrZWQoaW5pdGlhbFZhbHVlKVxuICAgIHRoaXMuc2V0TGlzdGVuZXIobGlzdGVuZXIpXG4gICAgdGhpcy5zZXREaXNhYmxlZChmYWxzZSlcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGluaGVyaXREb2NcbiAgICovXG4gIEBvdmVycmlkZVxuICBpbml0KHBhcmFtcykge1xuICAgIHRoaXMuX3BhcmFtcyA9IHBhcmFtc1xuICAgIHRoaXMuX29uQ2xpY2sgPSB0aGlzLl9vbkNsaWNrLmJpbmQodGhpcylcbiAgICB0aGlzLl9vbktleWRvd24gPSB0aGlzLl9vbktleWRvd24uYmluZCh0aGlzKVxuXG4gICAgdGhpcy5fZ3VpID0gdGhpcy5nZXREb2MocGFyYW1zKS5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIHRoaXMuX2d1aS5jbGFzc05hbWUgPSAnYm9vbFN3aXRjaF9fd3JhcHBlcidcbiAgICB0aGlzLl9ndWkudGFiSW5kZXggPSAtMVxuXG4gICAgdGhpcy5yZW5kZXIoKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgc3dpdGNoIHNsaWRlciBhbmQgaGlkZGVuIGlucHV0LlxuICAgKi9cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IGRvYyA9IHRoaXMuZ2V0RG9jKHRoaXMuX3BhcmFtcylcblxuICAgIGNvbnN0IGJvb2xTd2l0Y2ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIGJvb2xTd2l0Y2guY2xhc3NOYW1lID0gJ2Jvb2xTd2l0Y2gnXG5cbiAgICAvLyBpbnB1dFxuICAgIHRoaXMuX2lucHV0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2lucHV0JylcbiAgICB0aGlzLl9pbnB1dC5pZCA9IGBlbC0ke01hdGgucmFuZG9tKCl9YFxuICAgIHRoaXMuX2lucHV0Lm5hbWUgPSAnY2hlY2tib3gnXG4gICAgdGhpcy5faW5wdXQuY2xhc3NOYW1lID0gJ2Jvb2xTd2l0Y2hfX2NoZWNrYm94J1xuICAgIHRoaXMuX2lucHV0LnR5cGUgPSAnY2hlY2tib3gnXG4gICAgdGhpcy5faW5wdXQuY2hlY2tlZCA9IHRoaXMuaXNDaGVja2VkKClcbiAgICB0aGlzLl9pbnB1dC5kaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpXG4gICAgdGhpcy5faW5wdXQudGFiSW5kZXggPSAnMCdcblxuICAgIC8vIGxhYmVsXG4gICAgY29uc3QgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpXG4gICAgbGFiZWwuY2xhc3NOYW1lID0gJ2Jvb2xTd2l0Y2hfX2xhYmVsJ1xuICAgIGxhYmVsLmZvciA9IHRoaXMuX2lucHV0LmlkXG4gICAgbGFiZWwuaW5uZXJIVE1MID0gLyogaHRtbCAqLyBgXG4gICAgICA8c3BhbiBjbGFzcz1cImJvb2xTd2l0Y2hfX2lubmVyXCI+PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJib29sU3dpdGNoX19zd2l0Y2hcIj48L3NwYW4+XG4gICAgYFxuXG4gICAgLy8gYXR0YWNoZSBpbnB1dCBhbmQgc2xpZGVyIHRvIGNvbXBvbmVudFxuICAgIGJvb2xTd2l0Y2guYXBwZW5kQ2hpbGQodGhpcy5faW5wdXQpXG4gICAgYm9vbFN3aXRjaC5hcHBlbmRDaGlsZChsYWJlbClcblxuICAgIGJvb2xTd2l0Y2guYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrKVxuICAgIHRoaXMuX2d1aS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlkb3duKVxuXG4gICAgdGhpcy5fZ3VpLmFwcGVuZENoaWxkKGJvb2xTd2l0Y2gpXG4gIH1cblxuICAvKipcbiAgICogIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgZGVzdHJveSgpIHtcbiAgICBjb25zdCBib29sU3dpdGNoID0gdGhpcy5fZ3VpLnF1ZXJ5U2VsZWN0b3IoJy5ib29sU3dpdGNoJylcbiAgICBib29sU3dpdGNoLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25DbGljaylcbiAgICB0aGlzLl9ndWkucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5ZG93bilcbiAgfVxuXG4gIC8qKlxuICAgKiBGb2N1cyB0aGUgY29tcG9uZW50XG4gICAqL1xuICBmb2N1cygpIHtcbiAgICB0aGlzLl9ndWkuZm9jdXMoKVxuICAgIHRoaXMuX2lucHV0LmZvY3VzKClcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBsaXN0ZW5lciB0byBiZSBjYWxsZWQgd2hlbiB0aGUgc3dpdGNoIHN0YXRlIGlzIGNoYW5nZWRcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXJcbiAgICovXG4gIHNldExpc3RlbmVyKGxpc3RlbmVyKSB7XG4gICAgdGhpcy5fbGlzdGVuZXIgPSBsaXN0ZW5lclxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGlzdGVuZXIgaW5zdGFuY2UgLCBpZlxuICAgKlxuICAgKiBAcmV0dXJuIHtGdW5jdGlvbnxudWxsfVxuICAgKi9cbiAgZ2V0TGlzdGVuZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xpc3RlbmVyXG4gIH1cblxuICAvKipcbiAgICogU2V0IGNoZWNrZWRcbiAgICpcbiAgICogQHBhcmFtIHtCb29sZWFufSB2YWx1ZSB0cnVlIHRvIGNoZWNrICwgZmFsc2UgdG8gdW5jaGVja1xuICAgKi9cbiAgc2V0Q2hlY2tlZCh2YWx1ZSkge1xuICAgIHRoaXMuX2NoZWNrZWQgPSB2YWx1ZVxuICAgIGlmICh0aGlzLl9pbnB1dCkge1xuICAgICAgdGhpcy5faW5wdXQuY2hlY2tlZCA9IHZhbHVlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoZSBpZiBzd2l0Y2ggaXMgY2hlY2tlZFxuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufSAgdHJ1ZSB3aGVuIGNoZWNrZWQgLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGlzQ2hlY2tlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2hlY2tlZFxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgY29tcG9uZW50IHN0YXRlXG4gICAqL1xuICB0b2dnbGUoKSB7XG4gICAgdGhpcy5zZXRDaGVja2VkKCF0aGlzLmlzQ2hlY2tlZCgpKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBkaXNhYmxlZFxuICAgKlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IHZhbHVlIHRydWUgdG8gZGlzYWJsZWQgLCBmYWxzZSB0byBlbmFibGVcbiAgICovXG4gIHNldERpc2FibGVkKHZhbHVlKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZVxuICAgIGlmICh0aGlzLl9pbnB1dCkge1xuICAgICAgdGhpcy5faW5wdXQuZGlzYWJsZWQgPSB2YWx1ZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgc3dpdGNoIGlzIGRpc2FibGVkXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgd2hlbiBkaXNhYmxlZCAsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgaXNEaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBjbGljayBsaXN0ZW5lciBvZiB0aGUgc3dpdGNoLiBJdCB3aWxsIHRvZ2dsZSB0aGUgc3RhdGUgYW5kIGZpcmUgYW55IHJlZ2lzdGVyZWQgbGlzdGVuZXJcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZSB0aGUgZXZlbnQgb2JqZWN0XG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIEBhdXRvYmluZFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgX29uQ2xpY2soZSkge1xuICAgIGlmICh0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgdGhpcy50b2dnbGUoKVxuXG4gICAgaWYgKHRoaXMuX2xpc3RlbmVyKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcih0aGlzKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBrZXkgbGlzdGVuZXIgb2YgdGhlIHN3aXRjaC4gSXQgd2lsbCB0b2dnbGUgdGhlIHN0YXRlIHVzaW5nIGtleWJvYXJkIGtleXMgKGxlZnQgLCByaWdodCAsIHNwYWNlKVxuICAgKiBhbmQgZmlyZSBhbnkgcmVnaXN0ZXJlZCBsaXN0ZW5lclxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBlICB0aGUgZXZlbnQgb2JqZWN0XG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25LZXlkb3duKGUpIHtcbiAgICBpZiAodGhpcy5fZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IGtleSA9IGUud2hpY2ggfHwgZS5rZXlDb2RlXG5cbiAgICAvLyBzcGFjZVxuICAgIGlmIChrZXkgPT0gMzIpIHtcbiAgICAgIHRoaXMudG9nZ2xlKClcbiAgICAgIGlmICh0aGlzLl9saXN0ZW5lcikge1xuICAgICAgICB0aGlzLl9saXN0ZW5lcih0aGlzKVxuICAgICAgfVxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgICAvLyByaWdodFxuICAgIGVsc2UgaWYgKGtleSA9PSAzOSkge1xuICAgICAgdGhpcy5zZXRDaGVja2VkKHRydWUpXG4gICAgICBpZiAodGhpcy5fbGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5fbGlzdGVuZXIodGhpcylcbiAgICAgIH1cbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gICAgLy8gbGVmdFxuICAgIGVsc2UgaWYgKGtleSA9PSAzNykge1xuICAgICAgdGhpcy5zZXRDaGVja2VkKGZhbHNlKVxuICAgICAgaWYgKHRoaXMuX2xpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuX2xpc3RlbmVyKHRoaXMpXG4gICAgICB9XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvb2xlYW5Td2l0Y2hcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9Cb29sZWFuU3dpdGNoL0Jvb2xlYW5Td2l0Y2guanMiLCJpbXBvcnQgeyBkZWNvcmF0ZSwgY3JlYXRlRGVmYXVsdFNldHRlciB9IGZyb20gJy4vcHJpdmF0ZS91dGlscyc7XG5jb25zdCB7IGRlZmluZVByb3BlcnR5IH0gPSBPYmplY3Q7XG5cbmZ1bmN0aW9uIGhhbmRsZURlc2NyaXB0b3IodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpIHtcbiAgY29uc3QgeyBjb25maWd1cmFibGUsIGVudW1lcmFibGUsIGluaXRpYWxpemVyLCB2YWx1ZSB9ID0gZGVzY3JpcHRvcjtcbiAgcmV0dXJuIHtcbiAgICBjb25maWd1cmFibGUsXG4gICAgZW51bWVyYWJsZSxcblxuICAgIGdldCgpIHtcbiAgICAgIC8vIFRoaXMgaGFwcGVucyBpZiBzb21lb25lIGFjY2Vzc2VzIHRoZVxuICAgICAgLy8gcHJvcGVydHkgZGlyZWN0bHkgb24gdGhlIHByb3RvdHlwZVxuICAgICAgaWYgKHRoaXMgPT09IHRhcmdldCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJldCA9IGluaXRpYWxpemVyID8gaW5pdGlhbGl6ZXIuY2FsbCh0aGlzKSA6IHZhbHVlO1xuXG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIHtcbiAgICAgICAgY29uZmlndXJhYmxlLFxuICAgICAgICBlbnVtZXJhYmxlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IHJldFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcblxuICAgIHNldDogY3JlYXRlRGVmYXVsdFNldHRlcihrZXkpXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxhenlJbml0aWFsaXplKC4uLmFyZ3MpIHtcbiAgcmV0dXJuIGRlY29yYXRlKGhhbmRsZURlc2NyaXB0b3IsIGFyZ3MpO1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtZGVjb3JhdG9ycy9zcmMvbGF6eS1pbml0aWFsaXplLmpzIiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIik7XG5cbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuXG52YXIgdHJhbnNmb3JtO1xudmFyIGluc2VydEludG87XG5cblxuXG52YXIgb3B0aW9ucyA9IHtcImhtclwiOnRydWV9XG5cbm9wdGlvbnMudHJhbnNmb3JtID0gdHJhbnNmb3JtXG5vcHRpb25zLmluc2VydEludG8gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LnBhcmVudC5kb2N1bWVudC5oZWFkXG4gICAgICAgICAgICAgIH07XG5cbnZhciB1cGRhdGUgPSByZXF1aXJlKFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qc1wiKShjb250ZW50LCBvcHRpb25zKTtcblxuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG5cbmlmKG1vZHVsZS5ob3QpIHtcblx0bW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5zY3NzXCIpO1xuXG5cdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cblx0XHR2YXIgbG9jYWxzID0gKGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHZhciBrZXksIGlkeCA9IDA7XG5cblx0XHRcdGZvcihrZXkgaW4gYSkge1xuXHRcdFx0XHRpZighYiB8fCBhW2tleV0gIT09IGJba2V5XSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRpZHgrKztcblx0XHRcdH1cblxuXHRcdFx0Zm9yKGtleSBpbiBiKSBpZHgtLTtcblxuXHRcdFx0cmV0dXJuIGlkeCA9PT0gMDtcblx0XHR9KGNvbnRlbnQubG9jYWxzLCBuZXdDb250ZW50LmxvY2FscykpO1xuXG5cdFx0aWYoIWxvY2FscykgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGluZyBDU1MgSE1SIGR1ZSB0byBjaGFuZ2VkIGNzcy1tb2R1bGVzIGxvY2Fscy4nKTtcblxuXHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0fSk7XG5cblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0Jvb2xlYW5Td2l0Y2gvc3R5bGUuc2NzcyIsImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikoZmFsc2UpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiLmFnLWNlbGwtaW5saW5lLWVkaXRpbmcgLmJvb2xTd2l0Y2hfX3dyYXBwZXJ7bWFyZ2luOmF1dG8gMTFweH0uYm9vbFN3aXRjaF9fd3JhcHBlcntkaXNwbGF5OmZsZXg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTthbGlnbi1pdGVtczpjZW50ZXI7b3V0bGluZTpub25lO3BhZGRpbmctbGVmdDo2cHg7b3ZlcmZsb3c6aGlkZGVuOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmV9LmJvb2xTd2l0Y2h7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6NTVweDstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lfS5ib29sU3dpdGNoX19jaGVja2JveHtkaXNwbGF5Om5vbmV9LmJvb2xTd2l0Y2hfX2xhYmVse2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6aGlkZGVuO2N1cnNvcjpwb2ludGVyO2JvcmRlcjoycHggc29saWQgdmFyKC0tYWctaW5wdXQtYm9yZGVyLWNvbG9yLCB2YXIoLS1hZy1ib3JkZXItY29sb3IsICNiYWJmYzcpKTtib3JkZXItcmFkaXVzOjIwcHh9LmJvb2xTd2l0Y2hfX2lubmVye2Rpc3BsYXk6YmxvY2s7d2lkdGg6MjAwJTttYXJnaW4tbGVmdDotMTAwJTt0cmFuc2l0aW9uOm1hcmdpbiAwLjNzIGVhc2UtaW4gMHN9LmJvb2xTd2l0Y2hfX2lubmVyOmJlZm9yZSwuYm9vbFN3aXRjaF9faW5uZXI6YWZ0ZXJ7ZGlzcGxheTpibG9jaztmbG9hdDpsZWZ0O3dpZHRoOjUwJTtoZWlnaHQ6MTVweDtwYWRkaW5nOjA7bGluZS1oZWlnaHQ6MTVweDtmb250LXNpemU6MTRweDtjb2xvcjp3aGl0ZTtmb250LWZhbWlseTonU2Vnb2UgVUkgU3ltYm9sJywgVHJlYnVjaGV0LCBBcmlhbCwgc2Fucy1zZXJpZjtmb250LXdlaWdodDpib2xkO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uYm9vbFN3aXRjaF9faW5uZXI6YmVmb3Jle2NvbnRlbnQ6J1xcXFwyNzE0JztwYWRkaW5nLWxlZnQ6MTBweDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWFnLWNoZWNrYm94LWNoZWNrZWQtY29sb3IsIHZhcigtLWFnLWFscGluZS1hY3RpdmUtY29sb3IsICMyMTk2ZjMpKTtjb2xvcjojZmZmZmZmfS5ib29sU3dpdGNoX19pbm5lcjphZnRlcntjb250ZW50OidcXFxcMjcxOCc7cGFkZGluZy1yaWdodDoxMHB4O2JhY2tncm91bmQtY29sb3I6dmFyKC0tYWctYmFja2dyb3VuZC1jb2xvcik7Y29sb3I6dmFyKC0tYWctaW5wdXQtYm9yZGVyLWNvbG9yLCB2YXIoLS1hZy1ib3JkZXItY29sb3IsICNiYWJmYzcpKTt0ZXh0LWFsaWduOnJpZ2h0fS5ib29sU3dpdGNoX19zd2l0Y2h7ZGlzcGxheTpibG9jazt3aWR0aDoxOHB4O21hcmdpbjoxcHg7YmFja2dyb3VuZDojZmZmZmZmO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjM1cHg7Ym9yZGVyOjJweCBzb2xpZCB2YXIoLS1hZy1pbnB1dC1ib3JkZXItY29sb3IsIHZhcigtLWFnLWJvcmRlci1jb2xvciwgI2JhYmZjNykpO2JvcmRlci1yYWRpdXM6MjBweDt0cmFuc2l0aW9uOmFsbCAwLjNzIGVhc2UtaW4gMHN9LmJvb2xTd2l0Y2hfX2NoZWNrYm94OmNoZWNrZWQrLmJvb2xTd2l0Y2hfX2xhYmVsIC5ib29sU3dpdGNoX19pbm5lcnttYXJnaW4tbGVmdDowfS5ib29sU3dpdGNoX19jaGVja2JveDpjaGVja2VkKy5ib29sU3dpdGNoX19sYWJlbCAuYm9vbFN3aXRjaF9fc3dpdGNoe3JpZ2h0OjBweH1cXG5cIiwgXCJcIl0pO1xuXG4vLyBleHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyIS4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL0Jvb2xlYW5Td2l0Y2gvc3R5bGUuc2Nzc1xuLy8gbW9kdWxlIGlkID0gNDlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEgMiAzIiwiXG4vKipcbiAqIFdoZW4gc291cmNlIG1hcHMgYXJlIGVuYWJsZWQsIGBzdHlsZS1sb2FkZXJgIHVzZXMgYSBsaW5rIGVsZW1lbnQgd2l0aCBhIGRhdGEtdXJpIHRvXG4gKiBlbWJlZCB0aGUgY3NzIG9uIHRoZSBwYWdlLiBUaGlzIGJyZWFrcyBhbGwgcmVsYXRpdmUgdXJscyBiZWNhdXNlIG5vdyB0aGV5IGFyZSByZWxhdGl2ZSB0byBhXG4gKiBidW5kbGUgaW5zdGVhZCBvZiB0aGUgY3VycmVudCBwYWdlLlxuICpcbiAqIE9uZSBzb2x1dGlvbiBpcyB0byBvbmx5IHVzZSBmdWxsIHVybHMsIGJ1dCB0aGF0IG1heSBiZSBpbXBvc3NpYmxlLlxuICpcbiAqIEluc3RlYWQsIHRoaXMgZnVuY3Rpb24gXCJmaXhlc1wiIHRoZSByZWxhdGl2ZSB1cmxzIHRvIGJlIGFic29sdXRlIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBwYWdlIGxvY2F0aW9uLlxuICpcbiAqIEEgcnVkaW1lbnRhcnkgdGVzdCBzdWl0ZSBpcyBsb2NhdGVkIGF0IGB0ZXN0L2ZpeFVybHMuanNgIGFuZCBjYW4gYmUgcnVuIHZpYSB0aGUgYG5wbSB0ZXN0YCBjb21tYW5kLlxuICpcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3MpIHtcbiAgLy8gZ2V0IGN1cnJlbnQgbG9jYXRpb25cbiAgdmFyIGxvY2F0aW9uID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cubG9jYXRpb247XG5cbiAgaWYgKCFsb2NhdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcImZpeFVybHMgcmVxdWlyZXMgd2luZG93LmxvY2F0aW9uXCIpO1xuICB9XG5cblx0Ly8gYmxhbmsgb3IgbnVsbD9cblx0aWYgKCFjc3MgfHwgdHlwZW9mIGNzcyAhPT0gXCJzdHJpbmdcIikge1xuXHQgIHJldHVybiBjc3M7XG4gIH1cblxuICB2YXIgYmFzZVVybCA9IGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICsgbG9jYXRpb24uaG9zdDtcbiAgdmFyIGN1cnJlbnREaXIgPSBiYXNlVXJsICsgbG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXFwvW15cXC9dKiQvLCBcIi9cIik7XG5cblx0Ly8gY29udmVydCBlYWNoIHVybCguLi4pXG5cdC8qXG5cdFRoaXMgcmVndWxhciBleHByZXNzaW9uIGlzIGp1c3QgYSB3YXkgdG8gcmVjdXJzaXZlbHkgbWF0Y2ggYnJhY2tldHMgd2l0aGluXG5cdGEgc3RyaW5nLlxuXG5cdCAvdXJsXFxzKlxcKCAgPSBNYXRjaCBvbiB0aGUgd29yZCBcInVybFwiIHdpdGggYW55IHdoaXRlc3BhY2UgYWZ0ZXIgaXQgYW5kIHRoZW4gYSBwYXJlbnNcblx0ICAgKCAgPSBTdGFydCBhIGNhcHR1cmluZyBncm91cFxuXHQgICAgICg/OiAgPSBTdGFydCBhIG5vbi1jYXB0dXJpbmcgZ3JvdXBcblx0ICAgICAgICAgW14pKF0gID0gTWF0Y2ggYW55dGhpbmcgdGhhdCBpc24ndCBhIHBhcmVudGhlc2VzXG5cdCAgICAgICAgIHwgID0gT1Jcblx0ICAgICAgICAgXFwoICA9IE1hdGNoIGEgc3RhcnQgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICg/OiAgPSBTdGFydCBhbm90aGVyIG5vbi1jYXB0dXJpbmcgZ3JvdXBzXG5cdCAgICAgICAgICAgICAgICAgW14pKF0rICA9IE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgICAgIHwgID0gT1Jcblx0ICAgICAgICAgICAgICAgICBcXCggID0gTWF0Y2ggYSBzdGFydCBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgICAgICAgICBbXikoXSogID0gTWF0Y2ggYW55dGhpbmcgdGhhdCBpc24ndCBhIHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICAgICAgXFwpICA9IE1hdGNoIGEgZW5kIHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICApICA9IEVuZCBHcm91cFxuICAgICAgICAgICAgICAqXFwpID0gTWF0Y2ggYW55dGhpbmcgYW5kIHRoZW4gYSBjbG9zZSBwYXJlbnNcbiAgICAgICAgICApICA9IENsb3NlIG5vbi1jYXB0dXJpbmcgZ3JvdXBcbiAgICAgICAgICAqICA9IE1hdGNoIGFueXRoaW5nXG4gICAgICAgKSAgPSBDbG9zZSBjYXB0dXJpbmcgZ3JvdXBcblx0IFxcKSAgPSBNYXRjaCBhIGNsb3NlIHBhcmVuc1xuXG5cdCAvZ2kgID0gR2V0IGFsbCBtYXRjaGVzLCBub3QgdGhlIGZpcnN0LiAgQmUgY2FzZSBpbnNlbnNpdGl2ZS5cblx0ICovXG5cdHZhciBmaXhlZENzcyA9IGNzcy5yZXBsYWNlKC91cmxcXHMqXFwoKCg/OlteKShdfFxcKCg/OlteKShdK3xcXChbXikoXSpcXCkpKlxcKSkqKVxcKS9naSwgZnVuY3Rpb24oZnVsbE1hdGNoLCBvcmlnVXJsKSB7XG5cdFx0Ly8gc3RyaXAgcXVvdGVzIChpZiB0aGV5IGV4aXN0KVxuXHRcdHZhciB1bnF1b3RlZE9yaWdVcmwgPSBvcmlnVXJsXG5cdFx0XHQudHJpbSgpXG5cdFx0XHQucmVwbGFjZSgvXlwiKC4qKVwiJC8sIGZ1bmN0aW9uKG8sICQxKXsgcmV0dXJuICQxOyB9KVxuXHRcdFx0LnJlcGxhY2UoL14nKC4qKSckLywgZnVuY3Rpb24obywgJDEpeyByZXR1cm4gJDE7IH0pO1xuXG5cdFx0Ly8gYWxyZWFkeSBhIGZ1bGwgdXJsPyBubyBjaGFuZ2Vcblx0XHRpZiAoL14oI3xkYXRhOnxodHRwOlxcL1xcL3xodHRwczpcXC9cXC98ZmlsZTpcXC9cXC9cXC98XFxzKiQpL2kudGVzdCh1bnF1b3RlZE9yaWdVcmwpKSB7XG5cdFx0ICByZXR1cm4gZnVsbE1hdGNoO1xuXHRcdH1cblxuXHRcdC8vIGNvbnZlcnQgdGhlIHVybCB0byBhIGZ1bGwgdXJsXG5cdFx0dmFyIG5ld1VybDtcblxuXHRcdGlmICh1bnF1b3RlZE9yaWdVcmwuaW5kZXhPZihcIi8vXCIpID09PSAwKSB7XG5cdFx0ICBcdC8vVE9ETzogc2hvdWxkIHdlIGFkZCBwcm90b2NvbD9cblx0XHRcdG5ld1VybCA9IHVucXVvdGVkT3JpZ1VybDtcblx0XHR9IGVsc2UgaWYgKHVucXVvdGVkT3JpZ1VybC5pbmRleE9mKFwiL1wiKSA9PT0gMCkge1xuXHRcdFx0Ly8gcGF0aCBzaG91bGQgYmUgcmVsYXRpdmUgdG8gdGhlIGJhc2UgdXJsXG5cdFx0XHRuZXdVcmwgPSBiYXNlVXJsICsgdW5xdW90ZWRPcmlnVXJsOyAvLyBhbHJlYWR5IHN0YXJ0cyB3aXRoICcvJ1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBwYXRoIHNob3VsZCBiZSByZWxhdGl2ZSB0byBjdXJyZW50IGRpcmVjdG9yeVxuXHRcdFx0bmV3VXJsID0gY3VycmVudERpciArIHVucXVvdGVkT3JpZ1VybC5yZXBsYWNlKC9eXFwuXFwvLywgXCJcIik7IC8vIFN0cmlwIGxlYWRpbmcgJy4vJ1xuXHRcdH1cblxuXHRcdC8vIHNlbmQgYmFjayB0aGUgZml4ZWQgdXJsKC4uLilcblx0XHRyZXR1cm4gXCJ1cmwoXCIgKyBKU09OLnN0cmluZ2lmeShuZXdVcmwpICsgXCIpXCI7XG5cdH0pO1xuXG5cdC8vIHNlbmQgYmFjayB0aGUgZml4ZWQgY3NzXG5cdHJldHVybiBmaXhlZENzcztcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi91cmxzLmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IEJvb2xlYW5SZW5kZXJlciBmcm9tICcuL0Jvb2xlYW5SZW5kZXJlcidcblxuZXhwb3J0IGRlZmF1bHQgQm9vbGVhblJlbmRlcmVyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvQm9vbGVhblJlbmRlcmVyL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IENvbXBvbmVudCBmcm9tICcuLi9Db21wb25lbnQnXG5pbXBvcnQgQm9vbGVhblN3aXRjaCBmcm9tICcuLi9Cb29sZWFuU3dpdGNoJ1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgKi9cblxuLyoqXG4gKiBCb29sZWFucyBSZW5kZXJlclxuICpcbiAqIEhhbmRsZSBib29sZWFuIHZhbHVlcyBSZW5kZXJpbmdcbiAqXG4gKiAjIyBPcHRpb25zXG4gKlxuICogfCBOYW1lICAgICAgICAgICAgICAgICAgXHR8IERlZmF1bHQgICAgIFx0fCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx0fDotLS0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgKipib29sZWFuVHJ1ZVJlbmRlclZhbHVlKiogIFx0fCBzd2l0Y2ggICAgICBcdHwgVGhlIG9wdGlvbiBjb250cm9scyBob3cgdG8gcmVuZGVyIGB0cnVlYCB2YWx1ZXMuIDxicj4gKipzd2l0Y2gqKiBpcyBhIHNwZWNpYWwgdmFsdWUgdXNlZCB0byByZW5kZXIgdHJ1ZSB2YWx1ZXMgYXMgYSBzd2l0Y2ggY29tcG9uZW50ICBcdHxcbiAqIHwgKipib29sZWFuRmFsc2VSZW5kZXJWYWx1ZSoqIFx0fCBzd2l0Y2ggICAgICBcdHwgVGhlIG9wdGlvbiBjb250cm9scyBob3cgdG8gcmVuZGVyIGBmYWxzZWAgdmFsdWVzLiA8YnI+ICoqc3dpdGNoKiogaXMgYSBzcGVjaWFsIHZhbHVlIHVzZWQgdG8gcmVuZGVyIHRydWUgdmFsdWVzIGFzIGEgc3dpdGNoIGNvbXBvbmVudCBcdHxcbiAqIHwgKipib29sZWFuVHJ1ZVZhbHVlW10qKiAgICAgICB8IHRydWUoYm9vbCkgIFx0fCBUaGUgb3B0aW9ucyBkZXNjcmliZXMgd2hhdCBpcyBjb25zaWRlcmVkIGB0cnVlYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR8XG4gKiB8ICoqYm9vbGVhbkZhbHNlVmFsdWVbXSoqICAgICAgfCBmYWxzZShib29sKSBcdHwgVGhlIG9wdGlvbnMgZGVzY3JpYmVzIHdoYXQgaXMgY29uc2lkZXJlZCBgZmFsc2VgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0fFxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cbmNsYXNzIEJvb2xlYW5SZW5kZXJlciBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgbmV3IEJvb2xlYW5SZW5kZXJlclxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgLy8gd2lsbCB0aGlzIGFmZmVjdCBCQmogYnVpID9cbiAgICB0aGlzLl9ndWkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcbiAgICB0aGlzLl9ndWkuY2xhc3NOYW1lID0gJ2Jvb2xSZW5kZXJlcidcbiAgICB0aGlzLl9ndWkuc3R5bGUuZm9udEZhbWlseSA9XG4gICAgICAnXCJTZWdvZSBVSSBTeW1ib2xcIixUcmVidWNoZXQsIEFyaWFsLCBzYW5zLXNlcmlmJ1xuICB9XG5cbiAgLyoqXG4gICAqICBAaW5oZXJpdERvY1xuICAgKi9cbiAgaW5pdChwYXJhbXMpIHtcbiAgICB0aGlzLnJlZnJlc2gocGFyYW1zLCB0cnVlKVxuICB9XG5cbiAgLyoqXG4gICAqICBAaW5oZXJpdERvY1xuICAgKi9cbiAgZ2V0R3VpKCkge1xuICAgIHJldHVybiB0aGlzLl9ndWlcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGluaGVyaXREb2NcbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuX3N3aXRjaGVyKSB7XG4gICAgICB0aGlzLl9zd2l0Y2hlci5kZXN0cm95KClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaCB0aGUgY2VsbFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIGNlbGwgcmVuZGVyZXIgcGFyYW1zXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNJbml0IHRydWUgd2hlbiB0aGlzIG1ldGhvZCBpcyBiZWluZyBjYWxsZWQgaW4gYGluaXRgIHBoYXNlICwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgdGhlIHJlZnJlc2ggc3VjY2VlZGVkLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHJlZnJlc2gocGFyYW1zLCBpc0luaXQpIHtcbiAgICBsZXQgdmFsdWUgPSBwYXJhbXMudmFsdWVGb3JtYXR0ZWQgPyBwYXJhbXMudmFsdWVGb3JtYXR0ZWQgOiBwYXJhbXMudmFsdWVcblxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLl9ndWkuaW5uZXJIVE1MID0gJydcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpXG4gICAgICBjb25zdCBib29sZWFuVHJ1ZVJlbmRlclZhbHVlID0gU3RyaW5nKFxuICAgICAgICB0aGlzLmdldE9wdGlvbignYm9vbGVhblRydWVSZW5kZXJWYWx1ZScsIHBhcmFtcywgJ3N3aXRjaCcpXG4gICAgICApXG4gICAgICBjb25zdCBib29sZWFuRmFsc2VSZW5kZXJWYWx1ZSA9IFN0cmluZyhcbiAgICAgICAgdGhpcy5nZXRPcHRpb24oJ2Jvb2xlYW5GYWxzZVJlbmRlclZhbHVlJywgcGFyYW1zLCAnc3dpdGNoJylcbiAgICAgIClcbiAgICAgIGNvbnN0IGJvb2xlYW5UcnVlVmFsdWUgPSBbXVxuICAgICAgICAuY29uY2F0KHRoaXMuZ2V0T3B0aW9uKCdib29sZWFuVHJ1ZVZhbHVlJywgcGFyYW1zLCBbdHJ1ZV0pKVxuICAgICAgICAubWFwKHggPT4gU3RyaW5nKHgpKVxuICAgICAgY29uc3QgYm9vbGVhbkZhbHNlVmFsdWUgPSBbXVxuICAgICAgICAuY29uY2F0KHRoaXMuZ2V0T3B0aW9uKCdib29sZWFuRmFsc2VWYWx1ZScsIHBhcmFtcywgW2ZhbHNlXSkpXG4gICAgICAgIC5tYXAoeCA9PiBTdHJpbmcoeCkpXG5cbiAgICAgIC8vIGhhbmRsZSB0cnVlIHZhbHVlc1xuICAgICAgaWYgKGJvb2xlYW5UcnVlVmFsdWUuaW5kZXhPZih2YWx1ZSkgPiAtMSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWJvb2xlYW5UcnVlUmVuZGVyVmFsdWUubGVuZ3RoIHx8XG4gICAgICAgICAgYm9vbGVhblRydWVSZW5kZXJWYWx1ZSA9PT0gJ3N3aXRjaCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3Qgc3dpdGNoZXIgPSB0aGlzLl9nZXRTd2l0Y2hlcihwYXJhbXMpXG4gICAgICAgICAgc3dpdGNoZXIuc2V0Q2hlY2tlZCh0cnVlKVxuICAgICAgICAgIHRoaXMuX2d1aS5pbm5lckhUTUwgPSAnJ1xuICAgICAgICAgIHRoaXMuX2d1aS5hcHBlbmRDaGlsZChzd2l0Y2hlci5nZXRHdWkoKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9ndWkuaW5uZXJIVE1MID0gYm9vbGVhblRydWVSZW5kZXJWYWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBoYW5kbGUgZmFsc2UgdmFsdWVzXG4gICAgICBlbHNlIGlmIChib29sZWFuRmFsc2VWYWx1ZS5pbmRleE9mKHZhbHVlKSA+IC0xKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhYm9vbGVhbkZhbHNlUmVuZGVyVmFsdWUubGVuZ3RoIHx8XG4gICAgICAgICAgYm9vbGVhbkZhbHNlUmVuZGVyVmFsdWUgPT09ICdzd2l0Y2gnXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IHN3aXRjaGVyID0gdGhpcy5fZ2V0U3dpdGNoZXIocGFyYW1zKVxuICAgICAgICAgIHN3aXRjaGVyLnNldENoZWNrZWQoZmFsc2UpXG4gICAgICAgICAgdGhpcy5fZ3VpLmlubmVySFRNTCA9ICcnXG4gICAgICAgICAgdGhpcy5fZ3VpLmFwcGVuZENoaWxkKHN3aXRjaGVyLmdldEd1aSgpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX2d1aS5pbm5lckhUTUwgPSBib29sZWFuRmFsc2VSZW5kZXJWYWx1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9ndWkuaW5uZXJIVE1MID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzd2l0Y2ggaW5zdGFuY2UgaWYgYXZhaWxhYmxlICwgb3IgY3JlYXRlIGl0IG90aGVyd2lzZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW5Td2l0Y2h9IHN3aXRjaCBpbnN0YW5jZVxuICAgKi9cbiAgX2dldFN3aXRjaGVyKHBhcmFtcykge1xuICAgIGlmICghdGhpcy5fc3dpdGNoZXIpIHtcbiAgICAgIHRoaXMuX3N3aXRjaGVyID0gbmV3IEJvb2xlYW5Td2l0Y2goKVxuICAgICAgdGhpcy5fc3dpdGNoZXIuc2V0RGlzYWJsZWQodHJ1ZSlcbiAgICAgIHRoaXMuX3N3aXRjaGVyLmluaXQocGFyYW1zKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zd2l0Y2hlclxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvb2xlYW5SZW5kZXJlclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0Jvb2xlYW5SZW5kZXJlci9Cb29sZWFuUmVuZGVyZXIuanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgQm9vbGVhbkZpbHRlciBmcm9tICcuL0Jvb2xlYW5GaWx0ZXInXG5cbmV4cG9ydCBkZWZhdWx0IEJvb2xlYW5GaWx0ZXJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9Cb29sZWFuRmlsdGVyL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgYXV0b2JpbmQsIG92ZXJyaWRlIH0gZnJvbSAnY29yZS1kZWNvcmF0b3JzJ1xuaW1wb3J0IENvbXBvbmVudCBmcm9tICcuLi9Db21wb25lbnQnXG5pbXBvcnQgJy4vc3R5bGUuc2NzcydcblxuY29uc3QgdG9UaXRsZUNhc2UgPSBwaHJhc2UgPT4ge1xuICByZXR1cm4gcGhyYXNlXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAuc3BsaXQoJyAnKVxuICAgIC5tYXAod29yZCA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSlcbiAgICAuam9pbignICcpXG59XG5cbmNvbnN0IHN0cmlwSFRNTCA9IGh0bWwgPT4ge1xuICBjb25zdCB0bXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKVxuICB0bXAuaW5uZXJIVE1MID0gaHRtbFxuICByZXR1cm4gdG1wLnRleHRDb250ZW50IHx8IHRtcC5pbm5lclRleHQgfHwgJydcbn1cblxuLyoqXG4gKiBCb29sZWFucyBGaWx0ZXJcbiAqXG4gKiBIYW5kbGUgYm9vbGVhbiB2YWx1ZXMgRmlsdGVyaW5nXG4gKlxuICogIyMgT3B0aW9uc1xuICpcbiAqIHwgTmFtZSAgICAgICAgICAgICAgICAgIFx0fCBEZWZhdWx0ICAgICBcdHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0fFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdHw6LS0tLS0tLS0tLS0tLTp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICoqYm9vbGVhblVzZWRUcnVlVmFsdWUqKiAgIHwgdW5kZWZpbmVkICAgIHwgdGhlIHZhbHVlIHRvIHVzZSB3aGVuIHRoZSBmaWx0ZXIgZGlzcGxheXMgdGhlIHRydWUgc3RhdGUgLiBpbiBjYXNlIGl0IGlzIHVuZGVmaW5lZCB0aGVuIHdlIHVzZSB0aGUgZmlyc3QgaXRlbSBpbiAqKmJvb2xlYW5UcnVlVmFsdWVbXSoqXG4gKiB8ICoqYm9vbGVhblVzZWRGYWxzZVZhbHVlKiogICB8IHVuZGVmaW5lZCAgICB8IHRoZSB2YWx1ZSB0byB1c2Ugd2hlbiB0aGUgZmlsdGVyIGRpc3BsYXlzIHRoZSBmYWxzZSBzdGF0ZS4gaW4gY2FzZSBpdCBpcyB1bmRlZmluZWQgdGhlbiB3ZSB1c2UgdGhlIGZpcnN0IGl0ZW0gaW4gKipib29sZWFuRmFsc2VWYWx1ZVtdKipcbiAqIHwgKipib29sZWFuVHJ1ZVZhbHVlW10qKiAgICAgICB8IHRydWUoYm9vbCkgIFx0fCBUaGUgb3B0aW9ucyBkZXNjcmliZXMgd2hhdCBpcyBjb25zaWRlcmVkIGB0cnVlYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR8XG4gKiB8ICoqYm9vbGVhbkZhbHNlVmFsdWVbXSoqICAgICAgfCBmYWxzZShib29sKSBcdHwgVGhlIG9wdGlvbnMgZGVzY3JpYmVzIHdoYXQgaXMgY29uc2lkZXJlZCBgZmFsc2VgXG4gKiB8ICoqY2xlYXJCdXR0b24qKiAgIHwgZmFsc2UgICAgfCAgU2V0IHRvIHRydWUgdG8gaGF2ZSB0aGUgZmlsdGVyIHVzZSBhIENsZWFyIGJ1dHRvbi4gVGhlIENsZWFyIGJ1dHRvbiB3aWxsIGNsZWFyIHRoZSAoZm9ybSkgZGV0YWlscyBvZiB0aGUgZmlsdGVyIHdpdGhvdXQgcmVtb3ZpbmcgYW55IGFjdGl2ZSBmaWx0ZXJzIG9uIHRoZSBjb2x1bW4uXG4gKiB8ICoqYXBwbHlCdXR0b24qKiAgIHwgZmFsc2UgICAgfCAgU2V0IHRvIHRydWUgdG8gaGF2ZSB0aGUgZmlsdGVyIHVzZSBhbiBBcHBseSBidXR0b24uIElmIHRoZSBBcHBseSBidXR0b24gaXMgcHJlc2VudCwgdGhlbiB0aGUgZmlsdGVyIGlzIG9ubHkgYXBwbGllZCBhZnRlciB0aGUgdXNlciBoaXRzIHRoZSBBcHBseSBidXR0b24uXG4gKiB8ICoqcmVzZXRCdXR0b24qKiAgIHwgZmFsc2UgICAgfCAgU2V0IHRvIHRydWUgdG8gaGF2ZSB0aGUgZmlsdGVyIHVzZSBhIFJlc2V0IGJ1dHRvbi4gVGhlIFJlc2V0IGJ1dHRvbiB3aWxsIGNsZWFyIHRoZSBkZXRhaWxzIG9mIHRoZSBmaWx0ZXIgYW5kIGFueSBhY3RpdmUgZmlsdGVycyBvbiB0aGF0IGNvbHVtbi5cbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5jbGFzcyBCb29sZWFuRmlsdGVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIFRydWUgLCBmYWxzZSB0cmFuc2xhdGlvblxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgX2Jvb2xlYW5GaWx0ZXJUcmFuc2xhdGlvbiA9IHt9XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgbmV3IEJvb2xlYW5GaWx0ZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXMuX2d1aSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgdGhpcy5fZ3VpLmNsYXNzTmFtZSA9ICdib29sZWFuRmlsdGVyIGFnLWZpbHRlci1ib2R5LXdyYXBwZXInXG4gICAgdGhpcy5fZ3VpLnRhYkluZGV4ID0gJzAnXG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIEBvdmVycmlkZVxuICBpbml0KHBhcmFtcykge1xuICAgIGNvbnN0IHRyYW5zbGF0ZSA9IHBhcmFtcy5hcGkuZ3JpZE9wdGlvbnNXcmFwcGVyLmdldExvY2FsZVRleHRGdW5jKClcbiAgICBjb25zdCBpc0NsZWFyRmlsdGVyID0gdGhpcy5nZXRPcHRpb24oJ2NsZWFyQnV0dG9uJywgcGFyYW1zLCBmYWxzZSlcbiAgICBjb25zdCBpc1Jlc2V0QnV0dG9uID0gdGhpcy5nZXRPcHRpb24oJ3Jlc2V0QnV0dG9uJywgcGFyYW1zLCBmYWxzZSlcbiAgICBjb25zdCBpc0FwcGx5QnV0dG9uID0gdGhpcy5nZXRPcHRpb24oJ2FwcGx5QnV0dG9uJywgcGFyYW1zLCBmYWxzZSlcblxuICAgIHRoaXMuX3RydWVWYWx1ZSA9IFtdXG4gICAgICAuY29uY2F0KHRoaXMuZ2V0T3B0aW9uKCdib29sZWFuVHJ1ZVZhbHVlJywgcGFyYW1zLCBbdHJ1ZV0pKVxuICAgICAgLm1hcCh4ID0+IFN0cmluZyh4KSlcblxuICAgIHRoaXMuX2ZhbHNlVmFsdWUgPSBbXVxuICAgICAgLmNvbmNhdCh0aGlzLmdldE9wdGlvbignYm9vbGVhbkZhbHNlVmFsdWUnLCBwYXJhbXMsIFtmYWxzZV0pKVxuICAgICAgLm1hcCh4ID0+IFN0cmluZyh4KSlcblxuICAgIHRoaXMuX3VzZWRUcnVlVmFsdWUgPSBTdHJpbmcoXG4gICAgICB0aGlzLmdldE9wdGlvbignYm9vbGVhblVzZWRUcnVlVmFsdWUnLCBwYXJhbXMsIHRoaXMuX3RydWVWYWx1ZVswXSlcbiAgICApXG5cbiAgICB0aGlzLl91c2VkRmFsc2VWYWx1ZSA9IFN0cmluZyhcbiAgICAgIHRoaXMuZ2V0T3B0aW9uKCdib29sZWFuVXNlZEZhbHNlVmFsdWUnLCBwYXJhbXMsIHRoaXMuX2ZhbHNlVmFsdWVbMF0pXG4gICAgKVxuXG4gICAgdGhpcy5fYm9vbGVhbkZpbHRlclRyYW5zbGF0aW9uID0gdGhpcy5nZXRPcHRpb24oXG4gICAgICAnYm9vbGVhbkZpbHRlclRyYW5zbGF0aW9uJyxcbiAgICAgIHBhcmFtcyxcbiAgICAgIHtcbiAgICAgICAgdHJ1ZTogdHJhbnNsYXRlKFxuICAgICAgICAgICdib29sZWFuVHJ1ZScsXG4gICAgICAgICAgdG9UaXRsZUNhc2UoU3RyaW5nKHRoaXMuX3VzZWRUcnVlVmFsdWUpKVxuICAgICAgICApLFxuICAgICAgICBmYWxzZTogdHJhbnNsYXRlKFxuICAgICAgICAgICdib29sZWFuRmFsc2UnLFxuICAgICAgICAgIHRvVGl0bGVDYXNlKFN0cmluZyh0aGlzLl91c2VkRmFsc2VWYWx1ZSkpXG4gICAgICAgICksXG4gICAgICAgIHJlc2V0OiB0cmFuc2xhdGUoXG4gICAgICAgICAgJ2Jvb2xlYW5SZXNldCcsXG4gICAgICAgICAgdHJhbnNsYXRlKCdyZXNldEZpbHRlcicsICdSZXNldCBGaWx0ZXInKVxuICAgICAgICApLFxuICAgICAgfVxuICAgIClcblxuICAgIHRoaXMuX3BhcmFtcyA9IHBhcmFtc1xuICAgIHRoaXMuX2ZpbHRlclRleHQgPSBudWxsXG5cbiAgICB0aGlzLl9vblJhZGlvQ2hhbmdlID0gdGhpcy5fb25SYWRpb0NoYW5nZS5iaW5kKHRoaXMsIGlzQXBwbHlCdXR0b24pXG5cbiAgICAvLyBjcmVhdGUgYm9keVxuICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIGJvZHkuY2xhc3NOYW1lID0gJ2Jvb2xlYW5GaWx0ZXJfX2JvZHkgYWctZmlsdGVyLWJvZHknXG4gICAgYm9keS5zdHlsZS5wYWRkaW5nID0gJzVweCAxNXB4J1xuICAgIGJvZHkuaW5uZXJIVE1MID0gLyogaHRtbCAqLyBgXG4gICAgICA8ZGl2IGNsYXNzPVwiYm9vbGVhbkZpbHRlcl9fYm9keV9fbGFiZWxzXCI+XG5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYWctaW5wdXQtZmllbGQtbGFiZWwgYWctbGFiZWwgYWctcmFkaW8tYnV0dG9uLWxhYmVsXCI+ICAgICAgIFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFnLXdyYXBwZXItdHJ1ZSBhZy13cmFwcGVyIGFnLWlucHV0LXdyYXBwZXIgYWctcmFkaW8tYnV0dG9uLWlucHV0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwidHJ1ZS1pbnB1dCBhZy1pbnB1dC1maWVsZC1pbnB1dCBhZy1yYWRpby1idXR0b24taW5wdXRcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwiYm9vbGVhblwiIHZhbHVlPVwidHJ1ZVwiLz4gICAgICAgICAgICAgIFxuICAgICAgICAgIDwvZGl2PiBcbiAgICAgICAgICA8c3Bhbj4ke3RoaXMuX2Jvb2xlYW5GaWx0ZXJUcmFuc2xhdGlvbi50cnVlfTwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cblxuXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImFnLWlucHV0LWZpZWxkLWxhYmVsIGFnLWxhYmVsIGFnLXJhZGlvLWJ1dHRvbi1sYWJlbFwiPiAgICAgICBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZy13cmFwcGVyLWZhbHNlIGFnLXdyYXBwZXIgYWctaW5wdXQtd3JhcHBlciBhZy1yYWRpby1idXR0b24taW5wdXQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmYWxzZS1pbnB1dCBhZy1pbnB1dC1maWVsZC1pbnB1dCBhZy1yYWRpby1idXR0b24taW5wdXRcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwiYm9vbGVhblwiIHZhbHVlPVwiZmFsc2VcIi8+ICAgICAgICAgICAgICBcbiAgICAgICAgICA8L2Rpdj4gXG4gICAgICAgICAgPHNwYW4+JHt0aGlzLl9ib29sZWFuRmlsdGVyVHJhbnNsYXRpb24uZmFsc2V9PC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIFxuICAgICAgICAgICR7XG4gICAgICAgICAgICAhaXNSZXNldEJ1dHRvblxuICAgICAgICAgICAgICA/IC8qIGh0bWwgKi8gYFxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhZy1pbnB1dC1maWVsZC1sYWJlbCBhZy1sYWJlbCBhZy1yYWRpby1idXR0b24tbGFiZWxcIj4gICAgICAgXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWctd3JhcHBlci1yZXNldCBhZy13cmFwcGVyIGFnLWlucHV0LXdyYXBwZXIgYWctcmFkaW8tYnV0dG9uLWlucHV0LXdyYXBwZXIgYWctY2hlY2tlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJyZXNldC1pbnB1dCBhZy1pbnB1dC1maWVsZC1pbnB1dCBhZy1yYWRpby1idXR0b24taW5wdXRcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwiYm9vbGVhblwiIHZhbHVlPVwiXCIgY2hlY2tlZC8+ICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8L2Rpdj4gXG4gICAgICAgICAgICAgICAgPHNwYW4+JHt0aGlzLl9ib29sZWFuRmlsdGVyVHJhbnNsYXRpb24ucmVzZXR9PC9zcGFuPlxuICAgICAgICAgICAgICA8L2xhYmVsPiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgYFxuICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgfSAgICAgICBcbiAgICAgICAgPC9kaXY+XG4gICAgYFxuXG4gICAgYm9keS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9vblJhZGlvQ2hhbmdlKVxuXG4gICAgdGhpcy5fZ3VpLmFwcGVuZENoaWxkKGJvZHkpXG5cbiAgICAvLyBjcmVhdGUgYXBwbHkgZmlsdGVyIHBhbmVsXG4gICAgY29uc3QgYXBwbHlGaWx0ZXJQYW5lbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgYXBwbHlGaWx0ZXJQYW5lbC5jbGFzc05hbWUgPSBgYm9vbGVhbkZpbHRlcl9fYm9keV9fYXBwbHlQYW5lbCBhZy1maWx0ZXItYXBwbHktcGFuZWwgYWctaGlkZGVuYFxuICAgIGFwcGx5RmlsdGVyUGFuZWwuaW5uZXJIVE1MID0gLyogaHRtbCAqLyBgXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYWctc3RhbmRhcmQtYnV0dG9uIGFnLWZpbHRlci1hcHBseS1wYW5lbC1idXR0b24gY2xlYXIgJHshaXNDbGVhckZpbHRlciAmJlxuICAgICAgICAnYWctaGlkZGVuJ31cIiB0eXBlPVwiYnV0dG9uXCI+JHt0cmFuc2xhdGUoXG4gICAgICAnY2xlYXJGaWx0ZXInLFxuICAgICAgJ0NsZWFyIEZpbHRlcidcbiAgICApfTwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImFnLXN0YW5kYXJkLWJ1dHRvbiBhZy1maWx0ZXItYXBwbHktcGFuZWwtYnV0dG9uIHJlc2V0ICR7IWlzUmVzZXRCdXR0b24gJiZcbiAgICAgICAgJ2FnLWhpZGRlbid9XCIgdHlwZT1cImJ1dHRvblwiPiR7dHJhbnNsYXRlKFxuICAgICAgJ3Jlc2V0RmlsdGVyJyxcbiAgICAgICdSZXNldCBGaWx0ZXInXG4gICAgKX08L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJhZy1zdGFuZGFyZC1idXR0b24gYWctZmlsdGVyLWFwcGx5LXBhbmVsLWJ1dHRvbiBhcHBseSAkeyFpc0FwcGx5QnV0dG9uICYmXG4gICAgICAgICdhZy1oaWRkZW4nfVwiIHR5cGU9XCJidXR0b25cIj4ke3RyYW5zbGF0ZShcbiAgICAgICdhcHBseUZpbHRlcicsXG4gICAgICAnQXBwbHkgRmlsdGVyJ1xuICAgICl9PC9idXR0b24+XG4gICAgYFxuXG4gICAgaWYgKGlzQ2xlYXJGaWx0ZXIgfHwgaXNSZXNldEJ1dHRvbiB8fCBpc0FwcGx5QnV0dG9uKSB7XG4gICAgICBhcHBseUZpbHRlclBhbmVsLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWhpZGRlbicpXG4gICAgfVxuXG4gICAgYXBwbHlGaWx0ZXJQYW5lbC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2NsaWNrJyxcbiAgICAgIHRoaXMuX0FwcGx5RmlsdGVyUGFuZWxCdXR0b25DbGlja1xuICAgIClcblxuICAgIHRoaXMuX2d1aS5hcHBlbmRDaGlsZChhcHBseUZpbHRlclBhbmVsKVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLl9ndWlcbiAgICAgIC5xdWVyeVNlbGVjdG9yKCcuYm9vbGVhbkZpbHRlcl9fYm9keV9fbGFiZWxzJylcbiAgICAgIC5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9vblJhZGlvQ2hhbmdlKVxuXG4gICAgdGhpcy5fZ3VpXG4gICAgICAucXVlcnlTZWxlY3RvcignLmJvb2xlYW5GaWx0ZXJfX2JvZHlfX2FwcGx5UGFuZWwnKVxuICAgICAgLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fQXBwbHlGaWx0ZXJQYW5lbEJ1dHRvbkNsaWNrKVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgc2VsZWN0ZWQgZmlsdGVyIG1hdGNoZXMgdGhlIHBhc3NlZCBjZWxsIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIHdoZW4gcGFzcywgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBkb2VzRmlsdGVyUGFzcyhwYXJhbXMpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgY29uc3QgdmFsdWUgPSBTdHJpbmcoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICB0aGlzLl9wYXJhbXMuaGFzT3duUHJvcGVydHkoJ2ZpbHRlclZhbHVlR2V0dGVyJylcbiAgICAgICAgPyB0aGlzLl9wYXJhbXMuZmlsdGVyVmFsdWVHZXR0ZXIocGFyYW1zKVxuICAgICAgICA6IHRoaXMuX3BhcmFtcy52YWx1ZUdldHRlcihwYXJhbXMpXG4gICAgKVxuXG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlclRleHQgPT09ICd0cnVlJ1xuICAgICAgPyB0aGlzLl90cnVlVmFsdWUuaW5kZXhPZih2YWx1ZSkgPiAtMVxuICAgICAgOiB0aGlzLl9mYWxzZVZhbHVlLmluZGV4T2YodmFsdWUpID4gLTFcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRoZSBjb21wb25lbnQgaXMgYXBwbHlpbmcgYW55IGZpbHRlciBvbiB0aGUgY29sdW1uXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAqKi9cbiAgaXNGaWx0ZXJBY3RpdmUoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuX2ZpbHRlclRleHQgIT09IG51bGwgJiZcbiAgICAgIHRoaXMuX2ZpbHRlclRleHQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5fZmlsdGVyVGV4dCAhPT0gJydcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZmlsdGVyIHN0YXRlLiBJZiBmaWx0ZXIgaXMgbm90IGFjdGl2ZSwgdGhlbiBzaG91bGQgcmV0dXJuIG51bGwvdW5kZWZpbmVkLlxuICAgKiBUaGUgZ3JpZCBjYWxscyBnZXRNb2RlbCgpIG9uIGFsbCBhY3RpdmUgZmlsdGVycyB3aGVuIGdyaWRBcGkuZ2V0RmlsdGVyTW9kZWwoKSBpcyBjYWxsZWQuXG4gICAqXG4gICAqIEByZXR1cm4gT2JqZWN0IHwgbnVsbCB0aGUgZmlsdGVyIHN0YXRlXG4gICAqL1xuICBnZXRNb2RlbCgpIHtcbiAgICBpZiAoIXRoaXMuaXNGaWx0ZXJBY3RpdmUoKSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBjb25zdCBtb2RlbCA9IHsgdmFsdWU6IHRoaXMuX2ZpbHRlclRleHQsIGZpbHRlclR5cGU6ICdib29sZWFuJyB9XG4gICAgcmV0dXJuIG1vZGVsXG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZXMgdGhlIGZpbHRlciBzdGF0ZS4gQ2FsbGVkIGJ5IHRoZSBncmlkIGFmdGVyIGdyaWRBcGkuc2V0RmlsdGVyTW9kZWwobW9kZWwpIGlzIGNhbGxlZC5cbiAgICogVGhlIGdyaWQgd2lsbCBwYXNzIHVuZGVmaW5lZC9udWxsIHRvIGNsZWFyIHRoZSBmaWx0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVsbH0gbW9kZWxcbiAgICovXG4gIHNldE1vZGVsKG1vZGVsKSB7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zICovXG4gICAgdGhpcy5fZmlsdGVyVGV4dCA9IG1vZGVsICYmIG1vZGVsLmhhc093blByb3BlcnR5KCd2YWx1ZScpID8gbW9kZWwudmFsdWUgOiAnJ1xuXG4gICAgY29uc3QgZmlsdGVyVGV4dEFzU3RyaW5nID0gU3RyaW5nKHRoaXMuX2ZpbHRlclRleHQpXG4gICAgY29uc3QgYm9keSA9IHRoaXMuX2d1aS5xdWVyeVNlbGVjdG9yKCcuYm9vbGVhbkZpbHRlcl9fYm9keScpXG4gICAgYm9keS5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPVwicmFkaW9cIl0nKS5mb3JFYWNoKGkgPT4ge1xuICAgICAgaWYgKGkudmFsdWUgPT0gZmlsdGVyVGV4dEFzU3RyaW5nKSB7XG4gICAgICAgIGkuY2hlY2tlZCA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGkuY2hlY2tlZCA9IGZhbHNlXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZpbHRlciBtb2RlbCBhcyBwbGFpbiBzdHJpbmcgdG8gZGlzcGxheSBpbiB0aGUgZmxvYXRpbmcgZmlsdGVyIGlucHV0XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVsbH0gbW9kZWxcbiAgICovXG4gIGdldE1vZGVsQXNTdHJpbmcobW9kZWwpIHtcbiAgICBpZiAoIW1vZGVsKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyaXBIVE1MKFxuICAgICAgbW9kZWwudmFsdWUgPT09ICd0cnVlJ1xuICAgICAgICA/IHRoaXMuX2Jvb2xlYW5GaWx0ZXJUcmFuc2xhdGlvbi50cnVlXG4gICAgICAgIDogdGhpcy5fYm9vbGVhbkZpbHRlclRyYW5zbGF0aW9uLmZhbHNlXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBmaWx0ZXIgc3RhdGVcbiAgICovXG4gIHJlc2V0KCkge1xuICAgIGNvbnN0IGJvZHkgPSB0aGlzLl9ndWkucXVlcnlTZWxlY3RvcignLmJvb2xlYW5GaWx0ZXJfX2JvZHknKVxuICAgIGJvZHkucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbdHlwZT1cInJhZGlvXCJdJykuZm9yRWFjaChpID0+IHtcbiAgICAgIGkuY2hlY2tlZCA9IGZhbHNlXG4gICAgfSlcblxuICAgIGJvZHkucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItdHJ1ZScpLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWNoZWNrZWQnKVxuICAgIGJvZHkucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItZmFsc2UnKS5jbGFzc0xpc3QucmVtb3ZlKCdhZy1jaGVja2VkJylcbiAgICB0cnkge1xuICAgICAgYm9keS5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci1yZXNldCcpLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWNoZWNrZWQnKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8qIHBhc3MgKi9cbiAgICB9XG5cbiAgICB0aGlzLl9maWx0ZXJUZXh0ID0gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIExpc3RlbiB0byBzZWxlY3Rpb24gY2hhbmdlcyBpbiB0aGUgZmlsdGVyIHJhZGlvIGJ1dHRvbnMgYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBmaWx0ZXIgdGV4dFxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBlXG4gICAqL1xuICBfb25SYWRpb0NoYW5nZShpc0FwcGx5QnV0dG9uLCBlKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXRcbiAgICB0aGlzLl9maWx0ZXJUZXh0ID0gdGFyZ2V0LnZhbHVlXG5cbiAgICBjb25zdCBib2R5ID0gdGhpcy5fZ3VpLnF1ZXJ5U2VsZWN0b3IoJy5ib29sZWFuRmlsdGVyX19ib2R5JylcblxuICAgIGlmIChib2R5KSB7XG4gICAgICBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygndHJ1ZS1pbnB1dCcpKSB7XG4gICAgICAgIGJvZHkucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItdHJ1ZScpLmNsYXNzTGlzdC5hZGQoJ2FnLWNoZWNrZWQnKVxuICAgICAgICBib2R5LnF1ZXJ5U2VsZWN0b3IoJy5hZy13cmFwcGVyLWZhbHNlJykuY2xhc3NMaXN0LnJlbW92ZSgnYWctY2hlY2tlZCcpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYm9keS5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci1yZXNldCcpLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWNoZWNrZWQnKVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLyogcGFzcyAqL1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2ZhbHNlLWlucHV0JykpIHtcbiAgICAgICAgYm9keS5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci10cnVlJykuY2xhc3NMaXN0LnJlbW92ZSgnYWctY2hlY2tlZCcpXG4gICAgICAgIGJvZHkucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItZmFsc2UnKS5jbGFzc0xpc3QuYWRkKCdhZy1jaGVja2VkJylcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBib2R5LnF1ZXJ5U2VsZWN0b3IoJy5hZy13cmFwcGVyLXJlc2V0JykuY2xhc3NMaXN0LnJlbW92ZSgnYWctY2hlY2tlZCcpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvKiBwYXNzICovXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJvZHkucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItdHJ1ZScpLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWNoZWNrZWQnKVxuICAgICAgICBib2R5LnF1ZXJ5U2VsZWN0b3IoJy5hZy13cmFwcGVyLWZhbHNlJykuY2xhc3NMaXN0LnJlbW92ZSgnYWctY2hlY2tlZCcpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYm9keS5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci1yZXNldCcpLmNsYXNzTGlzdC5hZGQoJ2FnLWNoZWNrZWQnKVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLyogcGFzcyAqL1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZhbHNlID09PSBpc0FwcGx5QnV0dG9uKSB7XG4gICAgICB0aGlzLl9wYXJhbXMuZmlsdGVyQ2hhbmdlZENhbGxiYWNrKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIHRvIHRoZSBidXR0b24gY2xpY2tzIGluIHRoZSBidXR0b25zIHBhbmVsIGFuZCBhcHBseSB0aGUgY2hvc2VuIGFjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBlXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX0FwcGx5RmlsdGVyUGFuZWxCdXR0b25DbGljayhlKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXRcblxuICAgIGlmICh0YXJnZXQubm9kZU5hbWUgPT09ICdCVVRUT04nKSB7XG4gICAgICBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygncmVzZXQnKSkge1xuICAgICAgICB0aGlzLnJlc2V0KClcbiAgICAgICAgdGhpcy5fcGFyYW1zLmZpbHRlckNoYW5nZWRDYWxsYmFjaygpXG4gICAgICB9IGVsc2UgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2NsZWFyJykpIHtcbiAgICAgICAgdGhpcy5yZXNldCgpXG4gICAgICB9IGVsc2UgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2FwcGx5JykpIHtcbiAgICAgICAgdGhpcy5fcGFyYW1zLmZpbHRlckNoYW5nZWRDYWxsYmFjaygpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvb2xlYW5GaWx0ZXJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9Cb29sZWFuRmlsdGVyL0Jvb2xlYW5GaWx0ZXIuanMiLCJcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmhlYWRcbiAgICAgICAgICAgICAgfTtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2FscztcblxuaWYobW9kdWxlLmhvdCkge1xuXHRtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIik7XG5cblx0XHRpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcblxuXHRcdHZhciBsb2NhbHMgPSAoZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0dmFyIGtleSwgaWR4ID0gMDtcblxuXHRcdFx0Zm9yKGtleSBpbiBhKSB7XG5cdFx0XHRcdGlmKCFiIHx8IGFba2V5XSAhPT0gYltrZXldKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGlkeCsrO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3Ioa2V5IGluIGIpIGlkeC0tO1xuXG5cdFx0XHRyZXR1cm4gaWR4ID09PSAwO1xuXHRcdH0oY29udGVudC5sb2NhbHMsIG5ld0NvbnRlbnQubG9jYWxzKSk7XG5cblx0XHRpZighbG9jYWxzKSB0aHJvdyBuZXcgRXJyb3IoJ0Fib3J0aW5nIENTUyBITVIgZHVlIHRvIGNoYW5nZWQgY3NzLW1vZHVsZXMgbG9jYWxzLicpO1xuXG5cdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHR9KTtcblxuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvQm9vbGVhbkZpbHRlci9zdHlsZS5zY3NzIiwiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2xpYi9jc3MtYmFzZS5qc1wiKShmYWxzZSk7XG4vLyBpbXBvcnRzXG5cblxuLy8gbW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCIuYm9vbGVhbkZpbHRlcl9fYm9keV9fbGFiZWxzIGxhYmVse2Rpc3BsYXk6YmxvY2s7cGFkZGluZzo2cHh9LmJvb2xlYW5GaWx0ZXJfX2JvZHlfX2xhYmVscyBsYWJlbHtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6NnB4IDB9LmJvb2xlYW5GaWx0ZXJfX2JvZHlfX2xhYmVscyBsYWJlbCBzcGFue3BhZGRpbmctbGVmdDo2cHh9XFxuXCIsIFwiXCJdKTtcblxuLy8gZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlciEuL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9Cb29sZWFuRmlsdGVyL3N0eWxlLnNjc3Ncbi8vIG1vZHVsZSBpZCA9IDU2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIDIgMyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBOdW1iZXJFZGl0b3IgZnJvbSAnLi9OdW1iZXJFZGl0b3InXG5cbmV4cG9ydCBkZWZhdWx0IE51bWJlckVkaXRvclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL051bWJlckVkaXRvci9pbmRleC5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBDb21wb25lbnQgZnJvbSAnLi4vQ29tcG9uZW50J1xuaW1wb3J0IHsgYXV0b2JpbmQsIG92ZXJyaWRlIH0gZnJvbSAnY29yZS1kZWNvcmF0b3JzJ1xuXG5pbXBvcnQgJy4vc3R5bGUuc2NzcydcblxuLyoqXG4gKiBOdW1iZXJzIEVkaXRvclxuICpcbiAqIEhhbmRsZSBudW1iZXIgdmFsdWVzIEVkaXRpbmdcbiAqXG4gKiB8IE5hbWUgICAgICAgICAgICAgICAgICBcdHwgRGVmYXVsdCAgICAgXHR8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHR8Oi0tLS0tLS0tLS0tLS06fC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAqKm51bWJlck1pblZhbHVlKiogICB8IHVuZGVmaW5lZCAgICB8IG1pbiBhbGxvd2VkIHZhbHVlXG4gKiB8ICoqbnVtYmVyTWF4VmFsdWUqKiAgIHwgdW5kZWZpbmVkICAgIHwgbWF4IGFsbG93ZWQgdmFsdWVcbiAqIHwgKipudW1iZXJTdGVwVmFsdWUqKiAgICAgICB8IHVuZGVmaW5lZCAgXHR8IG51bWJlciBvZiBzdGVwIGJ5IGluY3JlbWVudCBvciBkZWNyZW1lbnRcbiAqIHwgKipudW1iZXJNYXNrKiogICAgICAgfCB1bmRlZmluZWQgIFx0fCBhIGJiaiBudW1iZXIgbWFzayB0byB2YWxpZGF0ZSB0aGUgbnVtYmVyIGFnYWluc3RcbiAqIHwqKm51bWJlckdyb3VwaW5nU2VwYXJhdG9yKiogfCAsIHwgYSBjaGFyIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGdyb3VwaW5nIHNlcGFyYXRvci4gVGhlIG9wdGlvbnMgaXMgdXNlZCBvbmx5IHdoZW4gKipudW1iZXJNYXNrKiogaXMgZGVmaW5lZCB8XG4gKiB8KipudW1iZXJEZWNpbWFsU2VwYXJhdG9yKiogfCAuIHwgYSBjaGFyIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGRlY2ltYWwgc2VwYXJhdG9yLiBUaGUgb3B0aW9ucyBpcyB1c2VkIG9ubHkgd2hlbiAqKm51bWJlck1hc2sqKiBpcyBkZWZpbmVkICB8XG4gKiB8KipudW1iZXJGb3JjZVRyYWlsaW5nWmVyb3MqKiB8IGZhbHNlIHwgQWZmZWN0cyB0aGUgb3V0cHV0IGJ5IHN3aXRjaGluZyB0aGUgd2F5IGEgbWFzayB3aXRoIFwiI1wiIGNoYXJhY3RlcnMgaW4gdGhlIHRyYWlsaW5nIHBvc2l0aW9ucyBpcyBmaWxsZWQuIGZvciBleGFtcGxlLCB0aGUgZnVuY3Rpb24gTnVtYmVyTWFzay5tYXNrKC4xMDpcIiMuIyNcIikgcmV0dXJucyAuMTAgaW5zdGVhZCBvZiAuMSAuIFRoZSBvcHRpb25zIGlzIHVzZWQgb25seSB3aGVuICoqbnVtYmVyTWFzayoqIGlzIGRlZmluZWR8XG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqL1xuY2xhc3MgTnVtYmVyRWRpdG9yIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqICBAaW5oZXJpdERvY1xuICAgKi9cbiAgQG92ZXJyaWRlXG4gIGluaXQocGFyYW1zKSB7XG4gICAgY29uc3QgbWluID0gdGhpcy5nZXRPcHRpb24oJ251bWJlck1pblZhbHVlJywgcGFyYW1zKVxuICAgIGNvbnN0IG1heCA9IHRoaXMuZ2V0T3B0aW9uKCdudW1iZXJNYXhWYWx1ZScsIHBhcmFtcylcbiAgICBjb25zdCBzdGVwID0gdGhpcy5nZXRPcHRpb24oJ251bWJlclN0ZXBWYWx1ZScsIHBhcmFtcylcbiAgICBjb25zdCBtYXNrID0gdGhpcy5nZXRPcHRpb24oJ251bWJlck1hc2snLCBwYXJhbXMpXG5cbiAgICBsZXQgc3RhcnRWYWx1ZVxuXG4gICAgdGhpcy5fZm9jdXNBZnRlckF0dGFjaGVkID0gcGFyYW1zLmNlbGxTdGFydGVkRWRpdFxuICAgIGlmICh0aGlzLl9mb2N1c0FmdGVyQXR0YWNoZWQpIHtcbiAgICAgIGxldCBrZXlQcmVzc0JhY2tzcGFjZU9yRGVsZXRlID1cbiAgICAgICAgcGFyYW1zLmtleVByZXNzID09IDMyIHx8IHBhcmFtcy5rZXlQcmVzcyA9PSA0NiAvLyBzcGFjZSAvLyBkZWxldGVcblxuICAgICAgaWYgKGtleVByZXNzQmFja3NwYWNlT3JEZWxldGUpIHtcbiAgICAgICAgc3RhcnRWYWx1ZSA9ICcnXG4gICAgICB9IGVsc2UgaWYgKHBhcmFtcy5jaGFyUHJlc3MpIHtcbiAgICAgICAgc3RhcnRWYWx1ZSA9IHBhcmFtcy5jaGFyUHJlc3NcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0VmFsdWUgPSBwYXJhbXMudmFsdWVcbiAgICAgICAgaWYgKHBhcmFtcy5rZXlQcmVzcyAhPSAxMTMpIHtcbiAgICAgICAgICAvL0YyXG4gICAgICAgICAgdGhpcy5faGlnaGxpZ2h0QWxsT25Gb2N1cyA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydFZhbHVlID0gcGFyYW1zLnZhbHVlXG4gICAgfVxuXG4gICAgLy8gbWFrZSBwYXJhbXMgaXQgYWNjZXNzaWJsZSBmcm9tIHRhbGwgbWV0aG9kc1xuICAgIHRoaXMuX3BhcmFtcyA9IHBhcmFtc1xuXG4gICAgLy8gY3JlYXRlIHRoZSBpbnB1dCB3cmFwcGVyXG4gICAgdGhpcy5fZ3VpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKVxuICAgIHRoaXMuX2d1aS5jbGFzc05hbWUgPSAnbnVtYmVyRWRpdG9yIGFnLWNlbGwtZWRpdC13cmFwcGVyJ1xuICAgIHRoaXMuX2d1aS50YWJJbmRleCA9ICcwJ1xuICAgIHRoaXMuX2d1aS5pbm5lckhUTUwgPSAvKiBodG1sICovIGBcbiAgICA8ZGl2IGNsYXNzPVwiYWctY2VsbC1lZGl0b3IgYWctbGFiZWxlZCBhZy1sYWJlbC1hbGlnbi1sZWZ0IGFnLXRleHQtZmllbGQgYWctaW5wdXQtZmllbGRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhZy13cmFwcGVyIGFnLWlucHV0LXdyYXBwZXIgYWctdGV4dC1maWVsZC1pbnB1dC13cmFwcGVyXCI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBgXG5cbiAgICAvLyBjcmVhdGUgdGhlIGlucHV0XG4gICAgdGhpcy5faW5wdXRHZW5lcmF0ZWRJZCA9IE1hdGgucmFuZG9tKClcbiAgICAgIC50b1N0cmluZygxNilcbiAgICAgIC5zbGljZSgyLCAxMCkgLy8gZ2VuZXJhdGUgcmFuZG9tIGlkXG4gICAgdGhpcy5faW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpXG4gICAgdGhpcy5faW5wdXQuY2xhc3NOYW1lID0gJ251bWJlckVkaXRvcl9faW5wdXQgYWctY2VsbC1lZGl0LWlucHV0J1xuICAgIHRoaXMuX2lucHV0LmlkID0gYGVsLSR7dGhpcy5faW5wdXRHZW5lcmF0ZWRJZH1gXG4gICAgdGhpcy5faW5wdXQudHlwZSA9IG1hc2sgPyAndGV4dCcgOiAnbnVtYmVyJ1xuICAgIHRoaXMuX2lucHV0LnZhbHVlID0gc3RhcnRWYWx1ZVxuICAgIHRoaXMuX2lucHV0LnRhYkluZGV4ID0gMFxuXG4gICAgLy8gcGxhY2UgdGhlIGlucHV0IGluc2lkZSB0aGUgd3JhcHBlclxuICAgIHRoaXMuX2d1aS5xdWVyeVNlbGVjdG9yKCcuYWctaW5wdXQtd3JhcHBlcicpLmFwcGVuZENoaWxkKHRoaXMuX2lucHV0KVxuXG4gICAgaWYgKG1pbiAhPT0gbnVsbCkge1xuICAgICAgbWFzayA/ICh0aGlzLl9pbnB1dC5kYXRhc2V0Lm1pbiA9IG1pbikgOiAodGhpcy5faW5wdXQubWluID0gbWluKVxuICAgIH1cblxuICAgIGlmIChtYXggIT09IG51bGwpIHtcbiAgICAgIG1hc2sgPyAodGhpcy5faW5wdXQuZGF0YXNldC5tYXggPSBtYXgpIDogKHRoaXMuX2lucHV0Lm1heCA9IG1heClcbiAgICB9XG5cbiAgICBpZiAoc3RlcCAhPT0gbnVsbCkge1xuICAgICAgbWFzayA/ICh0aGlzLl9pbnB1dC5kYXRhc2V0LnN0ZXAgPSBzdGVwKSA6ICh0aGlzLl9pbnB1dC5zdGVwID0gc3RlcClcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBhIG1hc2sgdGhlbiB3ZSB1c2UgdGhlIGBCYXNpcy5JbnB1dE1hc2tpbmcuTnVtYmVySW5wdXRgXG4gICAgaWYgKG1hc2spIHtcbiAgICAgIGNvbnN0IGdyb3VwaW5nU2VwYXJhdG9yID0gdGhpcy5nZXRPcHRpb24oXG4gICAgICAgICdudW1iZXJHcm91cGluZ1NlcGFyYXRvcicsXG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgdGhpcy5nZXRPcHRpb24oJ251bWJlckdyb3VwU2VwJywgcGFyYW1zKVxuICAgICAgKVxuICAgICAgY29uc3QgZGVjaW1hbFNlcGFyYXRvciA9IHRoaXMuZ2V0T3B0aW9uKFxuICAgICAgICAnbnVtYmVyRGVjaW1hbFNlcGFyYXRvcicsXG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgdGhpcy5nZXRPcHRpb24oJ251bWJlckRlY2ltYWxTZXAnLCBwYXJhbXMpXG4gICAgICApXG4gICAgICBjb25zdCBmb3JjZVRyYWlsaW5nWmVyb3MgPSB0aGlzLmdldE9wdGlvbihcbiAgICAgICAgJ251bWJlckZvcmNlVHJhaWxpbmdaZXJvcycsXG4gICAgICAgIHBhcmFtc1xuICAgICAgKVxuXG4gICAgICBpZiAoZ3JvdXBpbmdTZXBhcmF0b3IgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5faW5wdXQuZGF0YXNldC5ncm91cGluZ1NlcGFyYXRvciA9IGdyb3VwaW5nU2VwYXJhdG9yXG4gICAgICB9XG5cbiAgICAgIGlmIChkZWNpbWFsU2VwYXJhdG9yICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuX2lucHV0LmRhdGFzZXQuZGVjaW1hbFNlcGFyYXRvciA9IGRlY2ltYWxTZXBhcmF0b3JcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcmNlVHJhaWxpbmdaZXJvcyAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9pbnB1dC5kYXRhc2V0LmZvcmNlVHJhaWxpbmdaZXJvcyA9IGZvcmNlVHJhaWxpbmdaZXJvc1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pbnB1dC5kYXRhc2V0Lm1hc2sgPSBtYXNrXG4gICAgICB0aGlzLl9udW1iZXJJbnB1dCA9IG5ldyBCYXNpcy5JbnB1dE1hc2tpbmcuTnVtYmVySW5wdXQoe1xuICAgICAgICBlbGVtZW50czogW3RoaXMuX2lucHV0XSxcbiAgICAgICAgLy8gZG9jOiB0aGlzLmdldERvYyhwYXJhbXMpLFxuICAgICAgICBvblVwZGF0ZTogdGhpcy5fb25OdW1iZXJJbnB1dFVwZGF0ZSxcbiAgICAgICAgb25JbnZhbGlkOiB0aGlzLl9vbk51bWJlcklucHV0SW52YWxpZCxcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2lucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbklucHV0S2V5RG93blVwKVxuICAgICAgdGhpcy5faW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLl9vbklucHV0S2V5RG93blVwKVxuICAgICAgdGhpcy5faW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5fb25DaGFuZ2UpXG4gICAgfVxuXG4gICAgdGhpcy5fZ3VpLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbkNvbXBvbmVudEtleURvd24pXG5cbiAgICAvLyB1cGRhdGUgYGN1cnJlbnRWYWx1ZWAgdGhlIHZhbHVlIHdoaWNoIHRoaXMgY29tcG9uZW50IGlzIG1hbmFnaW5nXG4gICAgdGhpcy5fY3VycmVudFZhbHVlID0gc3RhcnRWYWx1ZVxuICAgIHRoaXMuX19pc01hc2tlZF9fID0gbWFzayAmJiBtYXNrLmxlbmd0aFxuICB9XG5cbiAgLyoqXG4gICAqICBAaW5oZXJpdERvY1xuICAgKi9cbiAgQG92ZXJyaWRlXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKCF0aGlzLl9faXNNYXNrZWRfXykge1xuICAgICAgdGhpcy5faW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uSW5wdXRLZXlEb3duVXApXG4gICAgICB0aGlzLl9pbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX29uSW5wdXRLZXlEb3duVXApXG4gICAgICB0aGlzLl9pbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9vbkNoYW5nZSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbnVtYmVySW5wdXQuZGVzdHJveSgpXG4gICAgfVxuXG4gICAgdGhpcy5fZ3VpLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbkNvbXBvbmVudEtleURvd24pXG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjYWxsZWQgb25jZSBhZnRlciBHVUkgaXMgYXR0YWNoZWQgdG8gRE9NLlxuICAgKlxuICAgKiBNYWtlIHN1cmUgY29udGFpbmVyIGlzIGFsd2F5cyBmb2N1c2VkIHRvIGxpc3RlbiB0byBrZXkgY2hhbmdlc1xuICAgKi9cbiAgYWZ0ZXJHdWlBdHRhY2hlZCgpIHtcbiAgICBpZiAoIXRoaXMuX19pc01hc2tlZF9fKSB7XG4gICAgICB0aGlzLl92YWxpZGF0ZUlucHV0KHRoaXMuX2lucHV0KVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9oaWdobGlnaHRBbGxPbkZvY3VzKSB7XG4gICAgICB0aGlzLl9pbnB1dC5zZWxlY3QoKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5fZm9jdXNBZnRlckF0dGFjaGVkKSB7XG4gICAgICAgIHRoaXMuZm9jdXNJbigpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBUaGUgY29tcG9uZW50IHZhbHVlXG4gICAqXG4gICAqIEByZXR1cm4ge051bWJlcn1cbiAgICovXG4gIGdldFZhbHVlKCkge1xuICAgIGNvbnN0IGNhc3RlZCA9IE51bWJlcih0aGlzLl9jdXJyZW50VmFsdWUpXG4gICAgY29uc3QgcmV0VmFsdWUgPSBpc05hTihjYXN0ZWQpID8gdGhpcy5fY3VycmVudFZhbHVlIDogY2FzdGVkXG4gICAgcmV0dXJuIHRoaXMuX19pc01hc2tlZF9fID8gcmV0VmFsdWUgOiB0aGlzLl9wYXJhbXMucGFyc2VWYWx1ZShyZXRWYWx1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBkb2luZyBmdWxsIHJvdyBlZGl0LCB0aGVuIGdldHMgY2FsbGVkIHdoZW4gdGFiYmluZyBpbnRvIHRoZSBjZWxsLlxuICAgKi9cbiAgZm9jdXNJbigpIHtcbiAgICBpZiAoIXRoaXMuX19pc01hc2tlZF9fKSB7XG4gICAgICB0aGlzLl9pbnB1dC5mb2N1cygpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2lucHV0LmNsaWNrKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjYWxsZWQgb25jZSBhZnRlciBpbml0aWFsaXplZCBhbmQgcmV0dXJucyBmYWxzZSBzbyB0aGUgZWRpdG9yIGFwcGVhcnMgaW4gdGhlIGNlbGxcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gYWx3YXlzIGZhbHNlXG4gICAqKi9cbiAgaXNQb3B1cCgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYGN1cnJlbnRWYWx1ZWAgd2hlbiB0aGUgY2hlY2tib3ggdmFsdWUgaXMgY2hhbmdlZFxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vbkNoYW5nZShldmVudCkge1xuICAgIGNvbnN0IGlzVmFsaWQgPSB0aGlzLl92YWxpZGF0ZUlucHV0KGV2ZW50LnRhcmdldClcbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgdGhpcy5fY3VycmVudFZhbHVlID0gdGhpcy5faW5wdXQudmFsdWVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBjdXJyZW50IHZhbHVlIHdoZW4gdGhlIE51bWJlcklucHV0IGNvbXBvbmVudHMgZmlyZSB0aGUgdXBkYXRlXG4gICAqIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gX21hc2tlZCAgdGhlIG1hc2tlZCB2YWx1ZVxuICAgKiBAcGFyYW0ge051bWJlcn0gdW5tYXNrZWQgIHRoZSB1bm1hc2tlZCB2YWx1ZVxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vbk51bWJlcklucHV0VXBkYXRlKF9tYXNrZWQsIHVubWFza2VkKSB7XG4gICAgdGhpcy5fY3VycmVudFZhbHVlID0gdW5tYXNrZWRcbiAgICB0aGlzLmZvY3VzSW4oKVxuICAgIC8vIHdlIHBhc3MgdGhlIGxhc3QgY2FwdHVyZWQgZXZlbnQgYmFjayB0byB0aGUgZ3JpZCB0byBoYW5kbGUgaXQgaW50ZXJuYWxseVxuICAgIGlmICh0aGlzLl9fbGFzdENvbXBvbmVudEtleWJvYXJkUHJlc3NfXykge1xuICAgICAgdGhpcy5fcGFyYW1zLm9uS2V5RG93bih0aGlzLl9fbGFzdENvbXBvbmVudEtleWJvYXJkUHJlc3NfXylcbiAgICAgIHRoaXMuX19sYXN0Q29tcG9uZW50S2V5Ym9hcmRQcmVzc19fID0gbnVsbFxuICAgIH1cbiAgfVxuICAvKipcbiAgICogT24gaW52YWxpZCBpbnB1dHMgLCB1cGRhdGUgdGhlIGlucHV0IHdpdGggYSBjdXN0b20gdmFsaWRpdHkgbWVzc2FnZVxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IGVycm9yIHRoZSBlcnJvciBtZXNzYWdlIHJlcG9ydGVkIGJ5IE51bWJlcklucHV0XG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGlucHV0IFRoZSBpbnB1dCBlbGVtZW50IHVzZWQgaW5zdGFuY2VcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25OdW1iZXJJbnB1dEludmFsaWQoZXJyb3IsIGlucHV0KSB7XG4gICAgdGhpcy5mb2N1c0luKClcbiAgICAvLyByZXN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZSBvZiB0aGUgY2VsbFxuICAgIHRoaXMuX2N1cnJlbnRWYWx1ZSA9IHRoaXMuX3BhcmFtcy52YWx1ZVxuICAgIGlmICh0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpbnB1dC5zZXRDdXN0b21WYWxpZGl0eShlcnJvcilcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXQuc2V0Q3VzdG9tVmFsaWRpdHkoZXJyb3IubWVzc2FnZSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FwdHVyZSBhbGwga2V5Ym9hcmQgZXZlbnRzIHRvIGFsbG93IHZhbHVlIHByb2Nlc3NpbmcgYnkgdGhlIE51bWJlcklucHV0IGNvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGVcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25Db21wb25lbnRLZXlEb3duKGUpIHtcbiAgICBjb25zdCBrZXkgPSBldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlXG5cbiAgICBjb25zdCBpc05hdmlnYXRpb25LZXkgPVxuICAgICAga2V5ID09PSAzNyB8fCAvLyBsZWZ0XG4gICAgICBrZXkgPT09IDM4IHx8IC8vIHVwXG4gICAgICBrZXkgPT09IDM5IHx8IC8vIHJpZ2h0XG4gICAgICBrZXkgPT09IDQwIHx8IC8vIGRvd25cbiAgICAgIGtleSA9PT0gMzMgfHwgLy8gcGFnZSB1cFxuICAgICAga2V5ID09PSAzNCB8fCAvLyBwYWdlIGRvd25cbiAgICAgIGtleSA9PT0gMzUgfHwgLy8gcGFnZSBob21lXG4gICAgICBrZXkgPT09IDM2IHx8IC8vIHBhZ2UgZW5kXG4gICAgICBrZXkgPT09IDEzIC8vIGVudGVyXG5cbiAgICBpZiAoaXNOYXZpZ2F0aW9uS2V5KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgLy8gc2F2ZSB0aGUgbGFzdCBjYXB0dXJlIGtleSBzbyBOdW1iZXJJbnB1dCBjYW4gcGFzcyBpdCBhZ2FpbiB0byB0aGUgZ3JpZC5cbiAgICAgIHRoaXMuX19sYXN0Q29tcG9uZW50S2V5Ym9hcmRQcmVzc19fID0gZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8ga2V5IGNoYW5nZXMgYW5kIHZhbGlkYXRlIHRoZSBpbnB1dFxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vbklucHV0S2V5RG93blVwKGV2ZW50KSB7XG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuX3ZhbGlkYXRlSW5wdXQoZXZlbnQudGFyZ2V0KVxuXG4gICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSBldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlXG5cbiAgICBpZiAoa2V5ID09IDM4IHx8IGtleSA9PSA0MCkge1xuICAgICAgLy8gdG9wIHwgZG93blxuICAgICAgdGhpcy5fY3VycmVudFZhbHVlID0gdGhpcy5faW5wdXQudmFsdWVcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfSBlbHNlIGlmIChrZXkgPT0gMTMgfHwga2V5ID09PSA5KSB7XG4gICAgICAvLyBlbnRlclxuICAgICAgdGhpcy5fY3VycmVudFZhbHVlID0gdGhpcy5faW5wdXQudmFsdWVcbiAgICB9XG5cbiAgICAvLyB3ZSBwYXNzIHRoZSBsYXN0IGNhcHR1cmVkIGV2ZW50IGJhY2sgdG8gdGhlIGdyaWQgdG8gaGFuZGxlIGl0IGludGVybmFsbHlcbiAgICBpZiAodGhpcy5fX2xhc3RDb21wb25lbnRLZXlib2FyZFByZXNzX18pIHtcbiAgICAgIHRoaXMuX3BhcmFtcy5vbktleURvd24odGhpcy5fX2xhc3RDb21wb25lbnRLZXlib2FyZFByZXNzX18pXG4gICAgICB0aGlzLl9fbGFzdENvbXBvbmVudEtleWJvYXJkUHJlc3NfXyA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIGdpdmVuIGlucHV0IGVsZW1lbnRcbiAgICpcbiAgICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBpbnB1dCBpbnB1dCBlbGVtZW50XG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgd2hlbiB2YWxpZCAsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgX3ZhbGlkYXRlSW5wdXQoaW5wdXQpIHtcbiAgICBjb25zdCBpc1ZhbGlkID0gaW5wdXQuY2hlY2tWYWxpZGl0eSgpXG5cbiAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5hZGQoJ2Jiai1tYXNrLWVycm9yJylcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUoJ2Jiai1tYXNrLXN1Y2Nlc3MnKVxuICAgICAgLy8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgdmFsdWVcbiAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZSA9IHRoaXMuX3BhcmFtcy52YWx1ZVxuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dC5jbGFzc0xpc3QucmVtb3ZlKCdiYmotbWFzay1lcnJvcicpXG4gICAgICBpbnB1dC5jbGFzc0xpc3QuYWRkKCdiYmotbWFzay1zdWNjZXNzJylcbiAgICB9XG5cbiAgICByZXR1cm4gaXNWYWxpZFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE51bWJlckVkaXRvclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL051bWJlckVkaXRvci9OdW1iZXJFZGl0b3IuanMiLCJcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmhlYWRcbiAgICAgICAgICAgICAgfTtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2FscztcblxuaWYobW9kdWxlLmhvdCkge1xuXHRtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIik7XG5cblx0XHRpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcblxuXHRcdHZhciBsb2NhbHMgPSAoZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0dmFyIGtleSwgaWR4ID0gMDtcblxuXHRcdFx0Zm9yKGtleSBpbiBhKSB7XG5cdFx0XHRcdGlmKCFiIHx8IGFba2V5XSAhPT0gYltrZXldKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGlkeCsrO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3Ioa2V5IGluIGIpIGlkeC0tO1xuXG5cdFx0XHRyZXR1cm4gaWR4ID09PSAwO1xuXHRcdH0oY29udGVudC5sb2NhbHMsIG5ld0NvbnRlbnQubG9jYWxzKSk7XG5cblx0XHRpZighbG9jYWxzKSB0aHJvdyBuZXcgRXJyb3IoJ0Fib3J0aW5nIENTUyBITVIgZHVlIHRvIGNoYW5nZWQgY3NzLW1vZHVsZXMgbG9jYWxzLicpO1xuXG5cdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHR9KTtcblxuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvTnVtYmVyRWRpdG9yL3N0eWxlLnNjc3MiLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKGZhbHNlKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi5udW1iZXJFZGl0b3J7b3ZlcmZsb3c6aGlkZGVufS5udW1iZXJFZGl0b3IgLm51bWJlcklucHV0TWFza19fd3JhcHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7ZGlzcGxheTpibG9jaztwYWRkaW5nOjA7bWFyZ2luOjA7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87YWxpZ24taXRlbXM6Y2VudGVyO2xpbmUtaGVpZ2h0Om5vcm1hbDtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW59Lm51bWJlckVkaXRvciAuYmJqLW1hc2stZXJyb3J7Ym94LXNoYWRvdzowIC0ycHggMCAjZTkxZTYzIGluc2V0fS5udW1iZXJFZGl0b3IgLmJiai1tYXNrLXN1Y2Nlc3N7Ym94LXNoYWRvdzowIC0ycHggMCAjNGNhZjUwIGluc2V0fS5udW1iZXJFZGl0b3JfX2lucHV0e3BhZGRpbmctbGVmdDo2cHg7Ym9yZGVyOnRoaW4gc29saWQgdmFyKC0tYWctaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yLCByZ2JhKDMzLDE1MCwyNDMsMC40KSk7Ym9yZGVyLXJhZGl1czozcHg7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjppbmhlcml0fS5hZy10aGVtZS1hbHBpbmUgLm51bWJlckVkaXRvcl9faW5wdXQsLmFnLXRoZW1lLWJhbGhhbSAubnVtYmVyRWRpdG9yX19pbnB1dCwuYWctdGhlbWUtbWF0ZXJpYWwgLm51bWJlckVkaXRvcl9faW5wdXR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yLCAjZmZmKX0uYWctdGhlbWUtYWxwaW5lLWRhcmsgLm51bWJlckVkaXRvcl9faW5wdXQsLmFnLXRoZW1lLWJhbGhhbS1kYXJrIC5udW1iZXJFZGl0b3JfX2lucHV0e2JhY2tncm91bmQtY29sb3I6dmFyKC0tYWctYmFja2dyb3VuZC1jb2xvciwgIzJkMzQzNil9XFxuXCIsIFwiXCJdKTtcblxuLy8gZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlciEuL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9OdW1iZXJFZGl0b3Ivc3R5bGUuc2Nzc1xuLy8gbW9kdWxlIGlkID0gNjBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEgMiAzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IFRleHRFZGl0b3IgZnJvbSAnLi9UZXh0RWRpdG9yJ1xuXG5leHBvcnQgZGVmYXVsdCBUZXh0RWRpdG9yXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvVGV4dEVkaXRvci9pbmRleC5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBDb21wb25lbnQgZnJvbSAnLi4vQ29tcG9uZW50J1xuaW1wb3J0IHsgYXV0b2JpbmQsIG92ZXJyaWRlIH0gZnJvbSAnY29yZS1kZWNvcmF0b3JzJ1xuXG5pbXBvcnQgJy4vc3R5bGUuc2NzcydcblxuLyoqXG4gKiBUZXh0IEVkaXRvclxuICpcbiAqIEhhbmRsZSB0ZXh0IHZhbHVlcyBFZGl0aW5nXG4gKlxuICogfCBOYW1lICAgICAgICAgICAgICAgICAgXHR8IERlZmF1bHQgICAgIFx0fCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx0fDotLS0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgKip0ZXh0UGF0dGVybioqICAgfCB1bmRlZmluZWQgICAgfCBBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IHRoZSBpbnB1dCdzIHZhbHVlIG11c3QgbWF0Y2ggaW4gb3JkZXIgZm9yIHRoZSB2YWx1ZSB0byBwYXNzIGNvbnN0cmFpbnQgdmFsaWRhdGlvblxuICogfCAqKnRleHRSZXF1aXJlZCoqICAgfCB1bmRlZmluZWQgICAgfCBCb29sZWFuLiBBIHZhbHVlIGlzIHJlcXVpcmVkIHRvIGNvbnNpZGVyIHRoZSBpbnB1dCB2YWxpZFxuICogfCAqKnRleHRNYXNrKiogICB8IHVuZGVmaW5lZCAgICB8IEEgYmJqIHN0cmluZyBtYXNrIHRvIHZhbGlkYXRlIHRoZSB2YWx1ZVxuICogfCAqKnRleHRUaXRsZSoqICAgfCBudWxsICAgIHwgVGhlIGlucHV0IHRpdGxlICwgd2hlbiBudWxsIGFuZCB0aGUgKip0ZXh0TWFzayoqIG9wdGlvbnMgaXMgZGVmaW5lZCAsIHRoZW4gd2UgdXNlIHRoZSBtYXNrIGFzIHRpdGxlICwgd2hlbiBzZXQgdG8gYGRlZmF1bHRgIHdlIHRoZSBicm93c2VyJ3MgZGVmYXVsdCB0aXRsZSAsIG90aGVyd2lzZSB0aGUgdmFsdWUgZGVmaW5lZCBpbiB0aGlzIG9wdGlvblxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cbmNsYXNzIFRleHRFZGl0b3IgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgaW5pdChwYXJhbXMpIHtcbiAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5nZXRPcHRpb24oJ3RleHRQYXR0ZXJuJywgcGFyYW1zKVxuICAgIGNvbnN0IHJlcXVpcmVkID0gdGhpcy5nZXRPcHRpb24oJ3RleHRSZXF1aXJlZCcsIHBhcmFtcylcbiAgICBjb25zdCBtYXNrID0gdGhpcy5nZXRPcHRpb24oJ3RleHRNYXNrJywgcGFyYW1zKVxuICAgIGNvbnN0IHRpdGxlID0gdGhpcy5nZXRPcHRpb24oJ3RleHRUaXRsZScsIHBhcmFtcylcblxuICAgIGxldCBzdGFydFZhbHVlXG5cbiAgICB0aGlzLl9mb2N1c0FmdGVyQXR0YWNoZWQgPSBwYXJhbXMuY2VsbFN0YXJ0ZWRFZGl0XG4gICAgaWYgKHRoaXMuX2ZvY3VzQWZ0ZXJBdHRhY2hlZCkge1xuICAgICAgbGV0IGtleVByZXNzQmFja3NwYWNlT3JEZWxldGUgPVxuICAgICAgICBwYXJhbXMua2V5UHJlc3MgPT0gMzIgfHwgcGFyYW1zLmtleVByZXNzID09IDQ2IC8vIHNwYWNlIC8vIGRlbGV0ZVxuXG4gICAgICBpZiAoa2V5UHJlc3NCYWNrc3BhY2VPckRlbGV0ZSkge1xuICAgICAgICBzdGFydFZhbHVlID0gJydcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLmNoYXJQcmVzcykge1xuICAgICAgICBzdGFydFZhbHVlID0gcGFyYW1zLmNoYXJQcmVzc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhcnRWYWx1ZSA9IHBhcmFtcy52YWx1ZVxuICAgICAgICBpZiAocGFyYW1zLmtleVByZXNzICE9IDExMykge1xuICAgICAgICAgIC8vRjJcbiAgICAgICAgICB0aGlzLl9oaWdobGlnaHRBbGxPbkZvY3VzID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0VmFsdWUgPSBwYXJhbXMudmFsdWVcbiAgICB9XG5cbiAgICB0aGlzLl9wYXJhbXMgPSBwYXJhbXNcblxuICAgIHRoaXMuX2d1aSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgdGhpcy5fZ3VpLmNsYXNzTmFtZSA9ICd0ZXh0RWRpdG9yIGFnLWNlbGwtZWRpdC13cmFwcGVyJ1xuICAgIHRoaXMuX2d1aS50YWJJbmRleCA9ICcwJ1xuICAgIHRoaXMuX2d1aS5pbm5lckhUTUwgPSAvKiBodG1sICovIGBcbiAgICA8ZGl2IGNsYXNzPVwiYWctY2VsbC1lZGl0b3IgYWctbGFiZWxlZCBhZy1sYWJlbC1hbGlnbi1sZWZ0IGFnLXRleHQtZmllbGQgYWctaW5wdXQtZmllbGRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhZy13cmFwcGVyIGFnLWlucHV0LXdyYXBwZXIgYWctdGV4dC1maWVsZC1pbnB1dC13cmFwcGVyXCI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBgXG5cbiAgICAvLyBpbnB1dFxuICAgIHRoaXMuX2lucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKVxuICAgIHRoaXMuX2lucHV0LmNsYXNzTmFtZSA9XG4gICAgICAndGV4dEVkaXRvcl9faW5wdXQgYWctY2VsbC1lZGl0LWlucHV0IGFnLWlucHV0LWZpZWxkLWlucHV0IGFnLXRleHQtZmllbGQtaW5wdXQnXG4gICAgdGhpcy5faW5wdXQuaWQgPSBgZWwtJHtNYXRoLnJhbmRvbSgpXG4gICAgICAudG9TdHJpbmcoMTYpXG4gICAgICAuc2xpY2UoMiwgMTApfWAgLy8gZ2VuZXJhdGUgcmFuZG9tIGlkXG4gICAgdGhpcy5faW5wdXQudHlwZSA9ICd0ZXh0J1xuICAgIHRoaXMuX2lucHV0LnZhbHVlID0gc3RhcnRWYWx1ZVxuICAgIHRoaXMuX2lucHV0LnRhYkluZGV4ID0gMFxuXG4gICAgdGhpcy5fZ3VpLnF1ZXJ5U2VsZWN0b3IoJy5hZy1pbnB1dC13cmFwcGVyJykuYXBwZW5kQ2hpbGQodGhpcy5faW5wdXQpXG5cbiAgICBpZiAocGF0dGVybiAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5faW5wdXQuc2V0QXR0cmlidXRlKCdwYXR0ZXJuJywgcGF0dGVybilcbiAgICB9XG5cbiAgICBpZiAocmVxdWlyZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuX2lucHV0LnNldEF0dHJpYnV0ZSgncmVxdWlyZWQnLCAncmVxdWlyZWQnKVxuICAgIH1cblxuICAgIGlmICh0aXRsZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKHRpdGxlICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgdGhpcy5faW5wdXQudGl0bGUgPSB0aXRsZVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobWFzaykge1xuICAgICAgdGhpcy5faW5wdXQudGl0bGUgPSBtYXNrXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgaXMgYSBtYXNrIHRoZW4gd2UgdXNlIHRoZSBgQmFzaXMuSW5wdXRNYXNraW5nLlRleHRJbnB1dGBcbiAgICBpZiAobWFzaykge1xuICAgICAgdGhpcy5faW5wdXQuZGF0YXNldC5tYXNrID0gbWFza1xuICAgICAgdGhpcy5fdGV4dElucHV0ID0gbmV3IEJhc2lzLklucHV0TWFza2luZy5UZXh0SW5wdXQoe1xuICAgICAgICBlbGVtZW50czogW3RoaXMuX2lucHV0XSxcbiAgICAgICAgZG9jOiB0aGlzLmdldERvYyhwYXJhbXMpLFxuICAgICAgICBvblVwZGF0ZTogdGhpcy5fb25UZXh0SW5wdXRVcGRhdGUsXG4gICAgICAgIG9uSW52YWxpZDogdGhpcy5fb25UZXh0SW5wdXRJbnZhbGlkLFxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uSW5wdXRLZXlEb3duVXApXG4gICAgICB0aGlzLl9pbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX29uSW5wdXRLZXlEb3duVXApXG4gICAgICB0aGlzLl9pbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuX29uQ2hhbmdlKVxuICAgICAgdGhpcy5faW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5fb25DaGFuZ2UpXG4gICAgfVxuXG4gICAgdGhpcy5fZ3VpLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbkNvbXBvbmVudEtleURvd24pXG5cbiAgICAvLyB1cGRhdGUgYGN1cnJlbnRWYWx1ZWAgdGhlIHZhbHVlIHdoaWNoIHRoaXMgY29tcG9uZW50IGlzIG1hbmFnaW5nXG4gICAgdGhpcy5fY3VycmVudFZhbHVlID0gc3RhcnRWYWx1ZVxuICAgIHRoaXMuX19pc01hc2tlZF9fID0gbWFzayAmJiBtYXNrLmxlbmd0aFxuICB9XG5cbiAgLyoqXG4gICAqICBAaW5oZXJpdERvY1xuICAgKi9cbiAgQG92ZXJyaWRlXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKCF0aGlzLl9faXNNYXNrZWRfXykge1xuICAgICAgdGhpcy5faW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uSW5wdXRLZXlEb3duVXApXG4gICAgICB0aGlzLl9pbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX29uSW5wdXRLZXlEb3duVXApXG4gICAgICB0aGlzLl9pbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuX29uQ2hhbmdlKVxuICAgICAgdGhpcy5faW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5fb25DaGFuZ2UpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3RleHRJbnB1dC5kZXN0cm95KClcbiAgICB9XG5cbiAgICB0aGlzLl9ndWkucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uQ29tcG9uZW50S2V5RG93bilcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNhbGxlZCBvbmNlIGFmdGVyIEdVSSBpcyBhdHRhY2hlZCB0byBET00uXG4gICAqXG4gICAqIE1ha2Ugc3VyZSBjb250YWluZXIgaXMgYWx3YXlzIGZvY3VzZWQgdG8gbGlzdGVuIHRvIGtleSBjaGFuZ2VzXG4gICAqL1xuICBhZnRlckd1aUF0dGFjaGVkKCkge1xuICAgIGlmICghdGhpcy5fX2lzTWFza2VkX18pIHtcbiAgICAgIHRoaXMuX3ZhbGlkYXRlSW5wdXQodGhpcy5faW5wdXQpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2hpZ2hsaWdodEFsbE9uRm9jdXMpIHtcbiAgICAgIHRoaXMuX2lucHV0LnNlbGVjdCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLl9mb2N1c0FmdGVyQXR0YWNoZWQpIHtcbiAgICAgICAgdGhpcy5mb2N1c0luKClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IFRoZSBjb21wb25lbnQgdmFsdWVcbiAgICpcbiAgICogQHJldHVybiB7TnVtYmVyfVxuICAgKi9cbiAgZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmFtcy5wYXJzZVZhbHVlKHRoaXMuX2N1cnJlbnRWYWx1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBkb2luZyBmdWxsIHJvdyBlZGl0LCB0aGVuIGdldHMgY2FsbGVkIHdoZW4gdGFiYmluZyBpbnRvIHRoZSBjZWxsLlxuICAgKi9cbiAgZm9jdXNJbigpIHtcbiAgICB0aGlzLl9pbnB1dC5mb2N1cygpXG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjYWxsZWQgb25jZSBhZnRlciBpbml0aWFsaXplZCBhbmQgcmV0dXJucyBmYWxzZSBzbyB0aGUgZWRpdG9yIGFwcGVhcnMgaW4gdGhlIGNlbGxcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gYWx3YXlzIGZhbHNlXG4gICAqKi9cbiAgaXNQb3B1cCgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGN1cnJlbnQgdmFsdWUgd2hlbiB0aGUgVGV4dElucHV0IGNvbXBvbmVudCBmaXJlcyB0aGUgdXBkYXRlXG4gICAqIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gX21hc2tlZCAgdGhlIG1hc2tlZCB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gdW5tYXNrZWQgIHRoZSB1bm1hc2tlZCB2YWx1ZVxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vblRleHRJbnB1dFVwZGF0ZShfbWFza2VkLCB1bm1hc2tlZCwgaW5wdXQpIHtcbiAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSB1bm1hc2tlZFxuICAgIGlucHV0LnNldEN1c3RvbVZhbGlkaXR5KCcnKVxuICAgIHRoaXMuZm9jdXNJbigpXG4gICAgLy8gd2UgcGFzcyB0aGUgbGFzdCBjYXB0dXJlZCBldmVudCBiYWNrIHRvIHRoZSBncmlkIHRvIGhhbmRsZSBpdCBpbnRlcm5hbGx5XG4gICAgaWYgKHRoaXMuX19sYXN0Q29tcG9uZW50S2V5Ym9hcmRQcmVzc19fKSB7XG4gICAgICB0aGlzLl9wYXJhbXMub25LZXlEb3duKHRoaXMuX19sYXN0Q29tcG9uZW50S2V5Ym9hcmRQcmVzc19fKVxuICAgICAgdGhpcy5fX2xhc3RDb21wb25lbnRLZXlib2FyZFByZXNzX18gPSBudWxsXG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBPbiBpbnZhbGlkIGlucHV0cyAsIHVwZGF0ZSB0aGUgaW5wdXQgd2l0aCBhIGN1c3RvbSB2YWxpZGl0eSBtZXNzYWdlXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gZXJyb3IgdGhlIGVycm9yIG1lc3NhZ2UgcmVwb3J0ZWQgYnkgVGV4dElucHV0XG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGlucHV0IFRoZSBpbnB1dCBlbGVtZW50IHVzZWQgaW5zdGFuY2VcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25UZXh0SW5wdXRJbnZhbGlkKGVycm9yLCBpbnB1dCkge1xuICAgIHRoaXMuZm9jdXNJbigpXG4gICAgLy8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgdmFsdWUgb2YgdGhlIGNlbGxcbiAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSB0aGlzLl9wYXJhbXMudmFsdWVcbiAgICBpZiAodHlwZW9mIGVycm9yID09PSAnc3RyaW5nJykge1xuICAgICAgaW5wdXQuc2V0Q3VzdG9tVmFsaWRpdHkoZXJyb3IpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhcHR1cmUgYWxsIGtleWJvYXJkIGV2ZW50cyB0byBhbGxvdyB2YWx1ZSBwcm9jZXNzaW5nIGJ5IHRoZSBOdW1iZXJJbnB1dCBjb21wb25lbnRcbiAgICpcbiAgICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBlXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX29uQ29tcG9uZW50S2V5RG93bihlKSB7XG4gICAgY29uc3Qga2V5ID0gZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZVxuXG4gICAgY29uc3QgaXNOYXZpZ2F0aW9uS2V5ID1cbiAgICAgIGtleSA9PT0gMzcgfHwgLy8gbGVmdFxuICAgICAga2V5ID09PSAzOCB8fCAvLyB1cFxuICAgICAga2V5ID09PSAzOSB8fCAvLyByaWdodFxuICAgICAga2V5ID09PSA0MCB8fCAvLyBkb3duXG4gICAgICBrZXkgPT09IDMzIHx8IC8vIHBhZ2UgdXBcbiAgICAgIGtleSA9PT0gMzQgfHwgLy8gcGFnZSBkb3duXG4gICAgICBrZXkgPT09IDM1IHx8IC8vIHBhZ2UgaG9tZVxuICAgICAga2V5ID09PSAzNiB8fCAvLyBwYWdlIGVuZFxuICAgICAga2V5ID09PSAxMyAvLyBlbnRlclxuXG4gICAgaWYgKGlzTmF2aWdhdGlvbktleSkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIC8vIHNhdmUgdGhlIGxhc3QgY2FwdHVyZSBrZXkgc28gTnVtYmVySW5wdXQgY2FuIHBhc3MgaXQgYWdhaW4gdG8gdGhlIGdyaWQuXG4gICAgICB0aGlzLl9fbGFzdENvbXBvbmVudEtleWJvYXJkUHJlc3NfXyA9IGVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIHRvIGtleSBjaGFuZ2VzIGFuZCB2YWxpZGF0ZSB0aGUgaW5wdXRcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25JbnB1dEtleURvd25VcChldmVudCkge1xuICAgIGNvbnN0IGlzVmFsaWQgPSB0aGlzLl92YWxpZGF0ZUlucHV0KGV2ZW50LnRhcmdldClcblxuICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qga2V5ID0gZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZVxuXG4gICAgaWYgKGtleSA9PSAxMyB8fCBrZXkgPT09IDkpIHtcbiAgICAgIC8vIGVudGVyXG4gICAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSB0aGlzLl9pbnB1dC52YWx1ZVxuICAgIH1cblxuICAgIC8vIHdlIHBhc3MgdGhlIGxhc3QgY2FwdHVyZWQgZXZlbnQgYmFjayB0byB0aGUgZ3JpZCB0byBoYW5kbGUgaXQgaW50ZXJuYWxseVxuICAgIGlmICh0aGlzLl9fbGFzdENvbXBvbmVudEtleWJvYXJkUHJlc3NfXykge1xuICAgICAgdGhpcy5fcGFyYW1zLm9uS2V5RG93bih0aGlzLl9fbGFzdENvbXBvbmVudEtleWJvYXJkUHJlc3NfXylcbiAgICAgIHRoaXMuX19sYXN0Q29tcG9uZW50S2V5Ym9hcmRQcmVzc19fID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYGN1cnJlbnRWYWx1ZWAgb24gdGhlIGlucHV0IHZhbHVlIGlzIGNoYW5nZWQgYW5kIGl0IGlzIHZhbGlkXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX29uQ2hhbmdlKGV2ZW50KSB7XG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuX3ZhbGlkYXRlSW5wdXQoZXZlbnQudGFyZ2V0KVxuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSB0aGlzLl9pbnB1dC52YWx1ZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgZ2l2ZW4gaW5wdXQgZWxlbWVudFxuICAgKlxuICAgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGlucHV0IGlucHV0IGVsZW1lbnRcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSB3aGVuIHZhbGlkICwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBfdmFsaWRhdGVJbnB1dChpbnB1dCkge1xuICAgIGNvbnN0IGlzVmFsaWQgPSBpbnB1dC5jaGVja1ZhbGlkaXR5KClcblxuICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgaW5wdXQuY2xhc3NMaXN0LmFkZCgnYmJqLW1hc2stZXJyb3InKVxuICAgICAgaW5wdXQuY2xhc3NMaXN0LnJlbW92ZSgnYmJqLW1hc2stc3VjY2VzcycpXG4gICAgICAvLyByZXN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZVxuICAgICAgdGhpcy5fY3VycmVudFZhbHVlID0gdGhpcy5fcGFyYW1zLnZhbHVlXG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUoJ2Jiai1tYXNrLWVycm9yJylcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5hZGQoJ2Jiai1tYXNrLXN1Y2Nlc3MnKVxuICAgIH1cblxuICAgIHJldHVybiBpc1ZhbGlkXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGV4dEVkaXRvclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL1RleHRFZGl0b3IvVGV4dEVkaXRvci5qcyIsIlxudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5zY3NzXCIpO1xuXG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcblxudmFyIHRyYW5zZm9ybTtcbnZhciBpbnNlcnRJbnRvO1xuXG5cblxudmFyIG9wdGlvbnMgPSB7XCJobXJcIjp0cnVlfVxuXG5vcHRpb25zLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVxub3B0aW9ucy5pbnNlcnRJbnRvID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuaGVhZFxuICAgICAgICAgICAgICB9O1xuXG52YXIgdXBkYXRlID0gcmVxdWlyZShcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcIikoY29udGVudCwgb3B0aW9ucyk7XG5cbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuXG5pZihtb2R1bGUuaG90KSB7XG5cdG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5zY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiKTtcblxuXHRcdGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuXG5cdFx0dmFyIGxvY2FscyA9IChmdW5jdGlvbihhLCBiKSB7XG5cdFx0XHR2YXIga2V5LCBpZHggPSAwO1xuXG5cdFx0XHRmb3Ioa2V5IGluIGEpIHtcblx0XHRcdFx0aWYoIWIgfHwgYVtrZXldICE9PSBiW2tleV0pIHJldHVybiBmYWxzZTtcblx0XHRcdFx0aWR4Kys7XG5cdFx0XHR9XG5cblx0XHRcdGZvcihrZXkgaW4gYikgaWR4LS07XG5cblx0XHRcdHJldHVybiBpZHggPT09IDA7XG5cdFx0fShjb250ZW50LmxvY2FscywgbmV3Q29udGVudC5sb2NhbHMpKTtcblxuXHRcdGlmKCFsb2NhbHMpIHRocm93IG5ldyBFcnJvcignQWJvcnRpbmcgQ1NTIEhNUiBkdWUgdG8gY2hhbmdlZCBjc3MtbW9kdWxlcyBsb2NhbHMuJyk7XG5cblx0XHR1cGRhdGUobmV3Q29udGVudCk7XG5cdH0pO1xuXG5cdG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbigpIHsgdXBkYXRlKCk7IH0pO1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9UZXh0RWRpdG9yL3N0eWxlLnNjc3MiLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKGZhbHNlKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi50ZXh0RWRpdG9ye292ZXJmbG93OmhpZGRlbn0udGV4dEVkaXRvciAudGV4dElucHV0TWFza19fd3JhcHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7ZGlzcGxheTpibG9jaztwYWRkaW5nOjA7bWFyZ2luOjA7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87YWxpZ24taXRlbXM6Y2VudGVyO2xpbmUtaGVpZ2h0Om5vcm1hbDtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW59LnRleHRFZGl0b3IgLmJiai1tYXNrLWVycm9ye2JveC1zaGFkb3c6MCAtMnB4IDAgI2U5MWU2MyBpbnNldH0udGV4dEVkaXRvciAuYmJqLW1hc2stc3VjY2Vzc3tib3gtc2hhZG93OjAgLTJweCAwICM0Y2FmNTAgaW5zZXR9LnRleHRFZGl0b3JfX2lucHV0e3BhZGRpbmctbGVmdDo2cHg7Ym9yZGVyOnRoaW4gc29saWQgdmFyKC0tYWctaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yLCByZ2JhKDMzLDE1MCwyNDMsMC40KSk7Ym9yZGVyLXJhZGl1czozcHg7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjppbmhlcml0fS5hZy10aGVtZS1hbHBpbmUgLnRleHRFZGl0b3JfX2lucHV0LC5hZy10aGVtZS1iYWxoYW0gLnRleHRFZGl0b3JfX2lucHV0LC5hZy10aGVtZS1tYXRlcmlhbCAudGV4dEVkaXRvcl9faW5wdXR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yLCAjZmZmKX0uYWctdGhlbWUtYWxwaW5lLWRhcmsgLnRleHRFZGl0b3JfX2lucHV0LC5hZy10aGVtZS1iYWxoYW0tZGFyayAudGV4dEVkaXRvcl9faW5wdXR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yLCAjMmQzNDM2KX1cXG5cIiwgXCJcIl0pO1xuXG4vLyBleHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyIS4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL1RleHRFZGl0b3Ivc3R5bGUuc2Nzc1xuLy8gbW9kdWxlIGlkID0gNjRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEgMiAzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IENvbXBvbmVudCBmcm9tICcuLi9Db21wb25lbnQnXG5pbXBvcnQgdGVtcGxhdGUgZnJvbSAnbG9kYXNoLWVzL3RlbXBsYXRlJ1xuXG4vKipcbiAqIE51bWJlcnMgRWRpdG9yXG4gKlxuICogSGFuZGxlIG51bWJlciB2YWx1ZXMgRWRpdGluZ1xuICpcbiAqIHwgTmFtZSAgICAgICAgICAgICAgICAgIFx0fCBEZWZhdWx0ICAgICBcdHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0fFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdHw6LS0tLS0tLS0tLS0tLTp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICoqcmVuZGVyVGVtcGxhdGUqKiAgIHwgdW5kZWZpbmVkICAgIHwgbG9kYXNoIHRlbXBsYXRlXG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqL1xuY2xhc3MgVGVtcGxhdGVSZW5kZXJlciBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgbmV3IFRlbXBsYXRlUmVuZGVyZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKClcblxuICAgIC8vIHdpbGwgdGhpcyBhZmZlY3QgQkJqIGJ1aSA/XG4gICAgdGhpcy5fZ3VpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICB0aGlzLl9ndWkuY2xhc3NOYW1lID0gJ3RlbXBsYXRlUmVuZGVyZXIgYWctY2VsbC13cmFwcGVyJ1xuICAgIHRoaXMuX2d1aS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xuICAgIHRoaXMuX2d1aS5zdHlsZS5oZWlnaHQgPSAnMTAwJSdcbiAgICB0aGlzLl9ndWkuc3R5bGUubGluZUhlaWdodCA9ICdub3JtYWwnXG4gIH1cblxuICAvKipcbiAgICogIEBpbmhlcml0RG9jXG4gICAqL1xuICBpbml0KHBhcmFtcykge1xuICAgIHRoaXMucmVmcmVzaChwYXJhbXMsIHRydWUpXG4gIH1cblxuICAvKipcbiAgICogIEBpbmhlcml0RG9jXG4gICAqL1xuICBnZXRHdWkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2d1aVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggdGhlIGNlbGwgbFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIGNlbGwgcmVuZGVyZXIgcGFyYW1zXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNJbml0IHRydWUgd2hlbiB0aGlzIG1ldGhvZCBpcyBiZWluZyBjYWxsZWQgaW4gYGluaXRgIHBoYXNlICwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgdGhlIHJlZnJlc2ggc3VjY2VlZGVkLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxuICAgKi9cbiAgcmVmcmVzaChwYXJhbXMsIGlzSW5pdCkge1xuICAgIGlmIChpc0luaXQpIHtcbiAgICAgIHRoaXMuX2NvbXBpbGVkVGVtcGxhdGUgPSB0ZW1wbGF0ZShcbiAgICAgICAgdGhpcy5nZXRPcHRpb24oJ3JlbmRlclRlbXBsYXRlJywgcGFyYW1zLCAnJylcbiAgICAgIClcbiAgICB9XG5cbiAgICBsZXQgY29udGVudFxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLl9jb21waWxlZFRlbXBsYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb250ZW50ID0gdGhpcy5fY29tcGlsZWRUZW1wbGF0ZSh7IHBhcmFtcyB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZW50ID0gcGFyYW1zLnZhbHVlRm9ybWF0dGVkID8gcGFyYW1zLnZhbHVlRm9ybWF0dGVkIDogcGFyYW1zLnZhbHVlXG4gICAgfVxuXG4gICAgdGhpcy5fZ3VpLmlubmVySFRNTCA9IGNvbnRlbnRcblxuICAgIHJldHVybiB0cnVlXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGVtcGxhdGVSZW5kZXJlclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL1RlbXBsYXRlUmVuZGVyZXIvVGVtcGxhdGVSZW5kZXJlci5qcyIsImltcG9ydCBhc3NpZ25JbldpdGggZnJvbSAnLi9hc3NpZ25JbldpdGguanMnO1xuaW1wb3J0IGF0dGVtcHQgZnJvbSAnLi9hdHRlbXB0LmpzJztcbmltcG9ydCBiYXNlVmFsdWVzIGZyb20gJy4vX2Jhc2VWYWx1ZXMuanMnO1xuaW1wb3J0IGN1c3RvbURlZmF1bHRzQXNzaWduSW4gZnJvbSAnLi9fY3VzdG9tRGVmYXVsdHNBc3NpZ25Jbi5qcyc7XG5pbXBvcnQgZXNjYXBlU3RyaW5nQ2hhciBmcm9tICcuL19lc2NhcGVTdHJpbmdDaGFyLmpzJztcbmltcG9ydCBpc0Vycm9yIGZyb20gJy4vaXNFcnJvci5qcyc7XG5pbXBvcnQgaXNJdGVyYXRlZUNhbGwgZnJvbSAnLi9faXNJdGVyYXRlZUNhbGwuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcbmltcG9ydCByZUludGVycG9sYXRlIGZyb20gJy4vX3JlSW50ZXJwb2xhdGUuanMnO1xuaW1wb3J0IHRlbXBsYXRlU2V0dGluZ3MgZnJvbSAnLi90ZW1wbGF0ZVNldHRpbmdzLmpzJztcbmltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggZW1wdHkgc3RyaW5nIGxpdGVyYWxzIGluIGNvbXBpbGVkIHRlbXBsYXRlIHNvdXJjZS4gKi9cbnZhciByZUVtcHR5U3RyaW5nTGVhZGluZyA9IC9cXGJfX3AgXFwrPSAnJzsvZyxcbiAgICByZUVtcHR5U3RyaW5nTWlkZGxlID0gL1xcYihfX3AgXFwrPSkgJycgXFwrL2csXG4gICAgcmVFbXB0eVN0cmluZ1RyYWlsaW5nID0gLyhfX2VcXCguKj9cXCl8XFxiX190XFwpKSBcXCtcXG4nJzsvZztcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoXG4gKiBbRVMgdGVtcGxhdGUgZGVsaW1pdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdGVtcGxhdGUtbGl0ZXJhbC1sZXhpY2FsLWNvbXBvbmVudHMpLlxuICovXG52YXIgcmVFc1RlbXBsYXRlID0gL1xcJFxceyhbXlxcXFx9XSooPzpcXFxcLlteXFxcXH1dKikqKVxcfS9nO1xuXG4vKiogVXNlZCB0byBlbnN1cmUgY2FwdHVyaW5nIG9yZGVyIG9mIHRlbXBsYXRlIGRlbGltaXRlcnMuICovXG52YXIgcmVOb01hdGNoID0gLygkXikvO1xuXG4vKiogVXNlZCB0byBtYXRjaCB1bmVzY2FwZWQgY2hhcmFjdGVycyBpbiBjb21waWxlZCBzdHJpbmcgbGl0ZXJhbHMuICovXG52YXIgcmVVbmVzY2FwZWRTdHJpbmcgPSAvWydcXG5cXHJcXHUyMDI4XFx1MjAyOVxcXFxdL2c7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNvbXBpbGVkIHRlbXBsYXRlIGZ1bmN0aW9uIHRoYXQgY2FuIGludGVycG9sYXRlIGRhdGEgcHJvcGVydGllc1xuICogaW4gXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlcnMsIEhUTUwtZXNjYXBlIGludGVycG9sYXRlZCBkYXRhIHByb3BlcnRpZXMgaW5cbiAqIFwiZXNjYXBlXCIgZGVsaW1pdGVycywgYW5kIGV4ZWN1dGUgSmF2YVNjcmlwdCBpbiBcImV2YWx1YXRlXCIgZGVsaW1pdGVycy4gRGF0YVxuICogcHJvcGVydGllcyBtYXkgYmUgYWNjZXNzZWQgYXMgZnJlZSB2YXJpYWJsZXMgaW4gdGhlIHRlbXBsYXRlLiBJZiBhIHNldHRpbmdcbiAqIG9iamVjdCBpcyBnaXZlbiwgaXQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGBfLnRlbXBsYXRlU2V0dGluZ3NgIHZhbHVlcy5cbiAqXG4gKiAqKk5vdGU6KiogSW4gdGhlIGRldmVsb3BtZW50IGJ1aWxkIGBfLnRlbXBsYXRlYCB1dGlsaXplc1xuICogW3NvdXJjZVVSTHNdKGh0dHA6Ly93d3cuaHRtbDVyb2Nrcy5jb20vZW4vdHV0b3JpYWxzL2RldmVsb3BlcnRvb2xzL3NvdXJjZW1hcHMvI3RvYy1zb3VyY2V1cmwpXG4gKiBmb3IgZWFzaWVyIGRlYnVnZ2luZy5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwcmVjb21waWxpbmcgdGVtcGxhdGVzIHNlZVxuICogW2xvZGFzaCdzIGN1c3RvbSBidWlsZHMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9sb2Rhc2guY29tL2N1c3RvbS1idWlsZHMpLlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIENocm9tZSBleHRlbnNpb24gc2FuZGJveGVzIHNlZVxuICogW0Nocm9tZSdzIGV4dGVuc2lvbnMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIuY2hyb21lLmNvbS9leHRlbnNpb25zL3NhbmRib3hpbmdFdmFsKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHRlbXBsYXRlIHN0cmluZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICogQHBhcmFtIHtSZWdFeHB9IFtvcHRpb25zLmVzY2FwZT1fLnRlbXBsYXRlU2V0dGluZ3MuZXNjYXBlXVxuICogIFRoZSBIVE1MIFwiZXNjYXBlXCIgZGVsaW1pdGVyLlxuICogQHBhcmFtIHtSZWdFeHB9IFtvcHRpb25zLmV2YWx1YXRlPV8udGVtcGxhdGVTZXR0aW5ncy5ldmFsdWF0ZV1cbiAqICBUaGUgXCJldmFsdWF0ZVwiIGRlbGltaXRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5pbXBvcnRzPV8udGVtcGxhdGVTZXR0aW5ncy5pbXBvcnRzXVxuICogIEFuIG9iamVjdCB0byBpbXBvcnQgaW50byB0aGUgdGVtcGxhdGUgYXMgZnJlZSB2YXJpYWJsZXMuXG4gKiBAcGFyYW0ge1JlZ0V4cH0gW29wdGlvbnMuaW50ZXJwb2xhdGU9Xy50ZW1wbGF0ZVNldHRpbmdzLmludGVycG9sYXRlXVxuICogIFRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnNvdXJjZVVSTD0ndGVtcGxhdGVTb3VyY2VzW25dJ11cbiAqICBUaGUgc291cmNlVVJMIG9mIHRoZSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy52YXJpYWJsZT0nb2JqJ11cbiAqICBUaGUgZGF0YSBvYmplY3QgdmFyaWFibGUgbmFtZS5cbiAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGNvbXBpbGVkIHRlbXBsYXRlIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBVc2UgdGhlIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIgdG8gY3JlYXRlIGEgY29tcGlsZWQgdGVtcGxhdGUuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyA8JT0gdXNlciAlPiEnKTtcbiAqIGNvbXBpbGVkKHsgJ3VzZXInOiAnZnJlZCcgfSk7XG4gKiAvLyA9PiAnaGVsbG8gZnJlZCEnXG4gKlxuICogLy8gVXNlIHRoZSBIVE1MIFwiZXNjYXBlXCIgZGVsaW1pdGVyIHRvIGVzY2FwZSBkYXRhIHByb3BlcnR5IHZhbHVlcy5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzxiPjwlLSB2YWx1ZSAlPjwvYj4nKTtcbiAqIGNvbXBpbGVkKHsgJ3ZhbHVlJzogJzxzY3JpcHQ+JyB9KTtcbiAqIC8vID0+ICc8Yj4mbHQ7c2NyaXB0Jmd0OzwvYj4nXG4gKlxuICogLy8gVXNlIHRoZSBcImV2YWx1YXRlXCIgZGVsaW1pdGVyIHRvIGV4ZWN1dGUgSmF2YVNjcmlwdCBhbmQgZ2VuZXJhdGUgSFRNTC5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlIF8uZm9yRWFjaCh1c2VycywgZnVuY3Rpb24odXNlcikgeyAlPjxsaT48JS0gdXNlciAlPjwvbGk+PCUgfSk7ICU+Jyk7XG4gKiBjb21waWxlZCh7ICd1c2Vycyc6IFsnZnJlZCcsICdiYXJuZXknXSB9KTtcbiAqIC8vID0+ICc8bGk+ZnJlZDwvbGk+PGxpPmJhcm5leTwvbGk+J1xuICpcbiAqIC8vIFVzZSB0aGUgaW50ZXJuYWwgYHByaW50YCBmdW5jdGlvbiBpbiBcImV2YWx1YXRlXCIgZGVsaW1pdGVycy5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlIHByaW50KFwiaGVsbG8gXCIgKyB1c2VyKTsgJT4hJyk7XG4gKiBjb21waWxlZCh7ICd1c2VyJzogJ2Jhcm5leScgfSk7XG4gKiAvLyA9PiAnaGVsbG8gYmFybmV5ISdcbiAqXG4gKiAvLyBVc2UgdGhlIEVTIHRlbXBsYXRlIGxpdGVyYWwgZGVsaW1pdGVyIGFzIGFuIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIuXG4gKiAvLyBEaXNhYmxlIHN1cHBvcnQgYnkgcmVwbGFjaW5nIHRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gJHsgdXNlciB9IScpO1xuICogY29tcGlsZWQoeyAndXNlcic6ICdwZWJibGVzJyB9KTtcbiAqIC8vID0+ICdoZWxsbyBwZWJibGVzISdcbiAqXG4gKiAvLyBVc2UgYmFja3NsYXNoZXMgdG8gdHJlYXQgZGVsaW1pdGVycyBhcyBwbGFpbiB0ZXh0LlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPCU9IFwiXFxcXDwlLSB2YWx1ZSAlXFxcXD5cIiAlPicpO1xuICogY29tcGlsZWQoeyAndmFsdWUnOiAnaWdub3JlZCcgfSk7XG4gKiAvLyA9PiAnPCUtIHZhbHVlICU+J1xuICpcbiAqIC8vIFVzZSB0aGUgYGltcG9ydHNgIG9wdGlvbiB0byBpbXBvcnQgYGpRdWVyeWAgYXMgYGpxYC5cbiAqIHZhciB0ZXh0ID0gJzwlIGpxLmVhY2godXNlcnMsIGZ1bmN0aW9uKHVzZXIpIHsgJT48bGk+PCUtIHVzZXIgJT48L2xpPjwlIH0pOyAlPic7XG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKHRleHQsIHsgJ2ltcG9ydHMnOiB7ICdqcSc6IGpRdWVyeSB9IH0pO1xuICogY29tcGlsZWQoeyAndXNlcnMnOiBbJ2ZyZWQnLCAnYmFybmV5J10gfSk7XG4gKiAvLyA9PiAnPGxpPmZyZWQ8L2xpPjxsaT5iYXJuZXk8L2xpPidcbiAqXG4gKiAvLyBVc2UgdGhlIGBzb3VyY2VVUkxgIG9wdGlvbiB0byBzcGVjaWZ5IGEgY3VzdG9tIHNvdXJjZVVSTCBmb3IgdGhlIHRlbXBsYXRlLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gPCU9IHVzZXIgJT4hJywgeyAnc291cmNlVVJMJzogJy9iYXNpYy9ncmVldGluZy5qc3QnIH0pO1xuICogY29tcGlsZWQoZGF0YSk7XG4gKiAvLyA9PiBGaW5kIHRoZSBzb3VyY2Ugb2YgXCJncmVldGluZy5qc3RcIiB1bmRlciB0aGUgU291cmNlcyB0YWIgb3IgUmVzb3VyY2VzIHBhbmVsIG9mIHRoZSB3ZWIgaW5zcGVjdG9yLlxuICpcbiAqIC8vIFVzZSB0aGUgYHZhcmlhYmxlYCBvcHRpb24gdG8gZW5zdXJlIGEgd2l0aC1zdGF0ZW1lbnQgaXNuJ3QgdXNlZCBpbiB0aGUgY29tcGlsZWQgdGVtcGxhdGUuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoaSA8JT0gZGF0YS51c2VyICU+IScsIHsgJ3ZhcmlhYmxlJzogJ2RhdGEnIH0pO1xuICogY29tcGlsZWQuc291cmNlO1xuICogLy8gPT4gZnVuY3Rpb24oZGF0YSkge1xuICogLy8gICB2YXIgX190LCBfX3AgPSAnJztcbiAqIC8vICAgX19wICs9ICdoaSAnICsgKChfX3QgPSAoIGRhdGEudXNlciApKSA9PSBudWxsID8gJycgOiBfX3QpICsgJyEnO1xuICogLy8gICByZXR1cm4gX19wO1xuICogLy8gfVxuICpcbiAqIC8vIFVzZSBjdXN0b20gdGVtcGxhdGUgZGVsaW1pdGVycy5cbiAqIF8udGVtcGxhdGVTZXR0aW5ncy5pbnRlcnBvbGF0ZSA9IC97eyhbXFxzXFxTXSs/KX19L2c7XG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyB7eyB1c2VyIH19IScpO1xuICogY29tcGlsZWQoeyAndXNlcic6ICdtdXN0YWNoZScgfSk7XG4gKiAvLyA9PiAnaGVsbG8gbXVzdGFjaGUhJ1xuICpcbiAqIC8vIFVzZSB0aGUgYHNvdXJjZWAgcHJvcGVydHkgdG8gaW5saW5lIGNvbXBpbGVkIHRlbXBsYXRlcyBmb3IgbWVhbmluZ2Z1bFxuICogLy8gbGluZSBudW1iZXJzIGluIGVycm9yIG1lc3NhZ2VzIGFuZCBzdGFjayB0cmFjZXMuXG4gKiBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnanN0LmpzJyksICdcXFxuICogICB2YXIgSlNUID0ge1xcXG4gKiAgICAgXCJtYWluXCI6ICcgKyBfLnRlbXBsYXRlKG1haW5UZXh0KS5zb3VyY2UgKyAnXFxcbiAqICAgfTtcXFxuICogJyk7XG4gKi9cbmZ1bmN0aW9uIHRlbXBsYXRlKHN0cmluZywgb3B0aW9ucywgZ3VhcmQpIHtcbiAgLy8gQmFzZWQgb24gSm9obiBSZXNpZydzIGB0bXBsYCBpbXBsZW1lbnRhdGlvblxuICAvLyAoaHR0cDovL2Vqb2huLm9yZy9ibG9nL2phdmFzY3JpcHQtbWljcm8tdGVtcGxhdGluZy8pXG4gIC8vIGFuZCBMYXVyYSBEb2t0b3JvdmEncyBkb1QuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9vbGFkby9kb1QpLlxuICB2YXIgc2V0dGluZ3MgPSB0ZW1wbGF0ZVNldHRpbmdzLmltcG9ydHMuXy50ZW1wbGF0ZVNldHRpbmdzIHx8IHRlbXBsYXRlU2V0dGluZ3M7XG5cbiAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHN0cmluZywgb3B0aW9ucywgZ3VhcmQpKSB7XG4gICAgb3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgfVxuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICBvcHRpb25zID0gYXNzaWduSW5XaXRoKHt9LCBvcHRpb25zLCBzZXR0aW5ncywgY3VzdG9tRGVmYXVsdHNBc3NpZ25Jbik7XG5cbiAgdmFyIGltcG9ydHMgPSBhc3NpZ25JbldpdGgoe30sIG9wdGlvbnMuaW1wb3J0cywgc2V0dGluZ3MuaW1wb3J0cywgY3VzdG9tRGVmYXVsdHNBc3NpZ25JbiksXG4gICAgICBpbXBvcnRzS2V5cyA9IGtleXMoaW1wb3J0cyksXG4gICAgICBpbXBvcnRzVmFsdWVzID0gYmFzZVZhbHVlcyhpbXBvcnRzLCBpbXBvcnRzS2V5cyk7XG5cbiAgdmFyIGlzRXNjYXBpbmcsXG4gICAgICBpc0V2YWx1YXRpbmcsXG4gICAgICBpbmRleCA9IDAsXG4gICAgICBpbnRlcnBvbGF0ZSA9IG9wdGlvbnMuaW50ZXJwb2xhdGUgfHwgcmVOb01hdGNoLFxuICAgICAgc291cmNlID0gXCJfX3AgKz0gJ1wiO1xuXG4gIC8vIENvbXBpbGUgdGhlIHJlZ2V4cCB0byBtYXRjaCBlYWNoIGRlbGltaXRlci5cbiAgdmFyIHJlRGVsaW1pdGVycyA9IFJlZ0V4cChcbiAgICAob3B0aW9ucy5lc2NhcGUgfHwgcmVOb01hdGNoKS5zb3VyY2UgKyAnfCcgK1xuICAgIGludGVycG9sYXRlLnNvdXJjZSArICd8JyArXG4gICAgKGludGVycG9sYXRlID09PSByZUludGVycG9sYXRlID8gcmVFc1RlbXBsYXRlIDogcmVOb01hdGNoKS5zb3VyY2UgKyAnfCcgK1xuICAgIChvcHRpb25zLmV2YWx1YXRlIHx8IHJlTm9NYXRjaCkuc291cmNlICsgJ3wkJ1xuICAsICdnJyk7XG5cbiAgLy8gVXNlIGEgc291cmNlVVJMIGZvciBlYXNpZXIgZGVidWdnaW5nLlxuICAvLyBUaGUgc291cmNlVVJMIGdldHMgaW5qZWN0ZWQgaW50byB0aGUgc291cmNlIHRoYXQncyBldmFsLWVkLCBzbyBiZSBjYXJlZnVsXG4gIC8vIHdpdGggbG9va3VwIChpbiBjYXNlIG9mIGUuZy4gcHJvdG90eXBlIHBvbGx1dGlvbiksIGFuZCBzdHJpcCBuZXdsaW5lcyBpZiBhbnkuXG4gIC8vIEEgbmV3bGluZSB3b3VsZG4ndCBiZSBhIHZhbGlkIHNvdXJjZVVSTCBhbnl3YXksIGFuZCBpdCdkIGVuYWJsZSBjb2RlIGluamVjdGlvbi5cbiAgdmFyIHNvdXJjZVVSTCA9IGhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3NvdXJjZVVSTCcpXG4gICAgPyAoJy8vIyBzb3VyY2VVUkw9JyArXG4gICAgICAgKG9wdGlvbnMuc291cmNlVVJMICsgJycpLnJlcGxhY2UoL1tcXHJcXG5dL2csICcgJykgK1xuICAgICAgICdcXG4nKVxuICAgIDogJyc7XG5cbiAgc3RyaW5nLnJlcGxhY2UocmVEZWxpbWl0ZXJzLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlVmFsdWUsIGludGVycG9sYXRlVmFsdWUsIGVzVGVtcGxhdGVWYWx1ZSwgZXZhbHVhdGVWYWx1ZSwgb2Zmc2V0KSB7XG4gICAgaW50ZXJwb2xhdGVWYWx1ZSB8fCAoaW50ZXJwb2xhdGVWYWx1ZSA9IGVzVGVtcGxhdGVWYWx1ZSk7XG5cbiAgICAvLyBFc2NhcGUgY2hhcmFjdGVycyB0aGF0IGNhbid0IGJlIGluY2x1ZGVkIGluIHN0cmluZyBsaXRlcmFscy5cbiAgICBzb3VyY2UgKz0gc3RyaW5nLnNsaWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UocmVVbmVzY2FwZWRTdHJpbmcsIGVzY2FwZVN0cmluZ0NoYXIpO1xuXG4gICAgLy8gUmVwbGFjZSBkZWxpbWl0ZXJzIHdpdGggc25pcHBldHMuXG4gICAgaWYgKGVzY2FwZVZhbHVlKSB7XG4gICAgICBpc0VzY2FwaW5nID0gdHJ1ZTtcbiAgICAgIHNvdXJjZSArPSBcIicgK1xcbl9fZShcIiArIGVzY2FwZVZhbHVlICsgXCIpICtcXG4nXCI7XG4gICAgfVxuICAgIGlmIChldmFsdWF0ZVZhbHVlKSB7XG4gICAgICBpc0V2YWx1YXRpbmcgPSB0cnVlO1xuICAgICAgc291cmNlICs9IFwiJztcXG5cIiArIGV2YWx1YXRlVmFsdWUgKyBcIjtcXG5fX3AgKz0gJ1wiO1xuICAgIH1cbiAgICBpZiAoaW50ZXJwb2xhdGVWYWx1ZSkge1xuICAgICAgc291cmNlICs9IFwiJyArXFxuKChfX3QgPSAoXCIgKyBpbnRlcnBvbGF0ZVZhbHVlICsgXCIpKSA9PSBudWxsID8gJycgOiBfX3QpICtcXG4nXCI7XG4gICAgfVxuICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuXG4gICAgLy8gVGhlIEpTIGVuZ2luZSBlbWJlZGRlZCBpbiBBZG9iZSBwcm9kdWN0cyBuZWVkcyBgbWF0Y2hgIHJldHVybmVkIGluXG4gICAgLy8gb3JkZXIgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBgb2Zmc2V0YCB2YWx1ZS5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH0pO1xuXG4gIHNvdXJjZSArPSBcIic7XFxuXCI7XG5cbiAgLy8gSWYgYHZhcmlhYmxlYCBpcyBub3Qgc3BlY2lmaWVkIHdyYXAgYSB3aXRoLXN0YXRlbWVudCBhcm91bmQgdGhlIGdlbmVyYXRlZFxuICAvLyBjb2RlIHRvIGFkZCB0aGUgZGF0YSBvYmplY3QgdG8gdGhlIHRvcCBvZiB0aGUgc2NvcGUgY2hhaW4uXG4gIC8vIExpa2Ugd2l0aCBzb3VyY2VVUkwsIHdlIHRha2UgY2FyZSB0byBub3QgY2hlY2sgdGhlIG9wdGlvbidzIHByb3RvdHlwZSxcbiAgLy8gYXMgdGhpcyBjb25maWd1cmF0aW9uIGlzIGEgY29kZSBpbmplY3Rpb24gdmVjdG9yLlxuICB2YXIgdmFyaWFibGUgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsICd2YXJpYWJsZScpICYmIG9wdGlvbnMudmFyaWFibGU7XG4gIGlmICghdmFyaWFibGUpIHtcbiAgICBzb3VyY2UgPSAnd2l0aCAob2JqKSB7XFxuJyArIHNvdXJjZSArICdcXG59XFxuJztcbiAgfVxuICAvLyBDbGVhbnVwIGNvZGUgYnkgc3RyaXBwaW5nIGVtcHR5IHN0cmluZ3MuXG4gIHNvdXJjZSA9IChpc0V2YWx1YXRpbmcgPyBzb3VyY2UucmVwbGFjZShyZUVtcHR5U3RyaW5nTGVhZGluZywgJycpIDogc291cmNlKVxuICAgIC5yZXBsYWNlKHJlRW1wdHlTdHJpbmdNaWRkbGUsICckMScpXG4gICAgLnJlcGxhY2UocmVFbXB0eVN0cmluZ1RyYWlsaW5nLCAnJDE7Jyk7XG5cbiAgLy8gRnJhbWUgY29kZSBhcyB0aGUgZnVuY3Rpb24gYm9keS5cbiAgc291cmNlID0gJ2Z1bmN0aW9uKCcgKyAodmFyaWFibGUgfHwgJ29iaicpICsgJykge1xcbicgK1xuICAgICh2YXJpYWJsZVxuICAgICAgPyAnJ1xuICAgICAgOiAnb2JqIHx8IChvYmogPSB7fSk7XFxuJ1xuICAgICkgK1xuICAgIFwidmFyIF9fdCwgX19wID0gJydcIiArXG4gICAgKGlzRXNjYXBpbmdcbiAgICAgICA/ICcsIF9fZSA9IF8uZXNjYXBlJ1xuICAgICAgIDogJydcbiAgICApICtcbiAgICAoaXNFdmFsdWF0aW5nXG4gICAgICA/ICcsIF9faiA9IEFycmF5LnByb3RvdHlwZS5qb2luO1xcbicgK1xuICAgICAgICBcImZ1bmN0aW9uIHByaW50KCkgeyBfX3AgKz0gX19qLmNhbGwoYXJndW1lbnRzLCAnJykgfVxcblwiXG4gICAgICA6ICc7XFxuJ1xuICAgICkgK1xuICAgIHNvdXJjZSArXG4gICAgJ3JldHVybiBfX3BcXG59JztcblxuICB2YXIgcmVzdWx0ID0gYXR0ZW1wdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gRnVuY3Rpb24oaW1wb3J0c0tleXMsIHNvdXJjZVVSTCArICdyZXR1cm4gJyArIHNvdXJjZSlcbiAgICAgIC5hcHBseSh1bmRlZmluZWQsIGltcG9ydHNWYWx1ZXMpO1xuICB9KTtcblxuICAvLyBQcm92aWRlIHRoZSBjb21waWxlZCBmdW5jdGlvbidzIHNvdXJjZSBieSBpdHMgYHRvU3RyaW5nYCBtZXRob2Qgb3JcbiAgLy8gdGhlIGBzb3VyY2VgIHByb3BlcnR5IGFzIGEgY29udmVuaWVuY2UgZm9yIGlubGluaW5nIGNvbXBpbGVkIHRlbXBsYXRlcy5cbiAgcmVzdWx0LnNvdXJjZSA9IHNvdXJjZTtcbiAgaWYgKGlzRXJyb3IocmVzdWx0KSkge1xuICAgIHRocm93IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCB0ZW1wbGF0ZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdGVtcGxhdGUuanMiLCJpbXBvcnQgY29weU9iamVjdCBmcm9tICcuL19jb3B5T2JqZWN0LmpzJztcbmltcG9ydCBjcmVhdGVBc3NpZ25lciBmcm9tICcuL19jcmVhdGVBc3NpZ25lci5qcyc7XG5pbXBvcnQga2V5c0luIGZyb20gJy4va2V5c0luLmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmFzc2lnbkluYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjdXN0b21pemVyYFxuICogd2hpY2ggaXMgaW52b2tlZCB0byBwcm9kdWNlIHRoZSBhc3NpZ25lZCB2YWx1ZXMuIElmIGBjdXN0b21pemVyYCByZXR1cm5zXG4gKiBgdW5kZWZpbmVkYCwgYXNzaWdubWVudCBpcyBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYFxuICogaXMgaW52b2tlZCB3aXRoIGZpdmUgYXJndW1lbnRzOiAob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlKS5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAYWxpYXMgZXh0ZW5kV2l0aFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHsuLi5PYmplY3R9IHNvdXJjZXMgVGhlIHNvdXJjZSBvYmplY3RzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqIEBzZWUgXy5hc3NpZ25XaXRoXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlKSB7XG4gKiAgIHJldHVybiBfLmlzVW5kZWZpbmVkKG9ialZhbHVlKSA/IHNyY1ZhbHVlIDogb2JqVmFsdWU7XG4gKiB9XG4gKlxuICogdmFyIGRlZmF1bHRzID0gXy5wYXJ0aWFsUmlnaHQoXy5hc3NpZ25JbldpdGgsIGN1c3RvbWl6ZXIpO1xuICpcbiAqIGRlZmF1bHRzKHsgJ2EnOiAxIH0sIHsgJ2InOiAyIH0sIHsgJ2EnOiAzIH0pO1xuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gKi9cbnZhciBhc3NpZ25JbldpdGggPSBjcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIpIHtcbiAgY29weU9iamVjdChzb3VyY2UsIGtleXNJbihzb3VyY2UpLCBvYmplY3QsIGN1c3RvbWl6ZXIpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGFzc2lnbkluV2l0aDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvYXNzaWduSW5XaXRoLmpzIiwiaW1wb3J0IGFzc2lnblZhbHVlIGZyb20gJy4vX2Fzc2lnblZhbHVlLmpzJztcbmltcG9ydCBiYXNlQXNzaWduVmFsdWUgZnJvbSAnLi9fYmFzZUFzc2lnblZhbHVlLmpzJztcblxuLyoqXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzIHRvIGNvcHkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGlzTmV3ID0gIW9iamVjdDtcbiAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuXG4gICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgfVxuICAgIGlmIChpc05ldykge1xuICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvcHlPYmplY3Q7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jb3B5T2JqZWN0LmpzIiwiaW1wb3J0IGJhc2VBc3NpZ25WYWx1ZSBmcm9tICcuL19iYXNlQXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgYHZhbHVlYCB0byBga2V5YCBvZiBgb2JqZWN0YCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbm90IGVxdWl2YWxlbnRcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICBpZiAoIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBhc3NpZ25WYWx1ZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Fzc2lnblZhbHVlLmpzIiwiaW1wb3J0IGJhc2VJc05hdGl2ZSBmcm9tICcuL19iYXNlSXNOYXRpdmUuanMnO1xuaW1wb3J0IGdldFZhbHVlIGZyb20gJy4vX2dldFZhbHVlLmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0TmF0aXZlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0TmF0aXZlLmpzIiwiaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBpc01hc2tlZCBmcm9tICcuL19pc01hc2tlZC5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5pbXBvcnQgdG9Tb3VyY2UgZnJvbSAnLi9fdG9Tb3VyY2UuanMnO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbik7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24odmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNOYXRpdmU7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNOYXRpdmUuanMiLCJpbXBvcnQgU3ltYm9sIGZyb20gJy4vX1N5bWJvbC5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VHZXRUYWdgIHdoaWNoIGlnbm9yZXMgYFN5bWJvbC50b1N0cmluZ1RhZ2AgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHtcbiAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuXG4gIHRyeSB7XG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgIHZhciB1bm1hc2tlZCA9IHRydWU7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICBpZiAodW5tYXNrZWQpIHtcbiAgICBpZiAoaXNPd24pIHtcbiAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0UmF3VGFnO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0UmF3VGFnLmpzIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG9iamVjdFRvU3RyaW5nO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb2JqZWN0VG9TdHJpbmcuanMiLCJpbXBvcnQgY29yZUpzRGF0YSBmcm9tICcuL19jb3JlSnNEYXRhLmpzJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNNYXNrZWQ7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc01hc2tlZC5qcyIsImltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5leHBvcnQgZGVmYXVsdCBjb3JlSnNEYXRhO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29yZUpzRGF0YS5qcyIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9Tb3VyY2U7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL190b1NvdXJjZS5qcyIsIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRWYWx1ZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFZhbHVlLmpzIiwiaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcbmltcG9ydCBpc0l0ZXJhdGVlQ2FsbCBmcm9tICcuL19pc0l0ZXJhdGVlQ2FsbC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uYXNzaWduYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gYXNzaWduZXIgVGhlIGZ1bmN0aW9uIHRvIGFzc2lnbiB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhc3NpZ25lciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQXNzaWduZXIoYXNzaWduZXIpIHtcbiAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCwgc291cmNlcykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBzb3VyY2VzLmxlbmd0aCxcbiAgICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA+IDEgPyBzb3VyY2VzW2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkLFxuICAgICAgICBndWFyZCA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzWzJdIDogdW5kZWZpbmVkO1xuXG4gICAgY3VzdG9taXplciA9IChhc3NpZ25lci5sZW5ndGggPiAzICYmIHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicpXG4gICAgICA/IChsZW5ndGgtLSwgY3VzdG9taXplcilcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHNvdXJjZXNbMF0sIHNvdXJjZXNbMV0sIGd1YXJkKSkge1xuICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiBjdXN0b21pemVyO1xuICAgICAgbGVuZ3RoID0gMTtcbiAgICB9XG4gICAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIHZhciBzb3VyY2UgPSBzb3VyY2VzW2luZGV4XTtcbiAgICAgIGlmIChzb3VyY2UpIHtcbiAgICAgICAgYXNzaWduZXIob2JqZWN0LCBzb3VyY2UsIGluZGV4LCBjdXN0b21pemVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUFzc2lnbmVyO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY3JlYXRlQXNzaWduZXIuanMiLCJpbXBvcnQgYXBwbHkgZnJvbSAnLi9fYXBwbHkuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBvdmVyUmVzdDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX292ZXJSZXN0LmpzIiwiaW1wb3J0IGJhc2VTZXRUb1N0cmluZyBmcm9tICcuL19iYXNlU2V0VG9TdHJpbmcuanMnO1xuaW1wb3J0IHNob3J0T3V0IGZyb20gJy4vX3Nob3J0T3V0LmpzJztcblxuLyoqXG4gKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgZnVuY2AgdG8gcmV0dXJuIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIHNldFRvU3RyaW5nID0gc2hvcnRPdXQoYmFzZVNldFRvU3RyaW5nKTtcblxuZXhwb3J0IGRlZmF1bHQgc2V0VG9TdHJpbmc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zZXRUb1N0cmluZy5qcyIsImltcG9ydCBjb25zdGFudCBmcm9tICcuL2NvbnN0YW50LmpzJztcbmltcG9ydCBkZWZpbmVQcm9wZXJ0eSBmcm9tICcuL19kZWZpbmVQcm9wZXJ0eS5qcyc7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYHNldFRvU3RyaW5nYCB3aXRob3V0IHN1cHBvcnQgZm9yIGhvdCBsb29wIHNob3J0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIGJhc2VTZXRUb1N0cmluZyA9ICFkZWZpbmVQcm9wZXJ0eSA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgc3RyaW5nKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jLCAndG9TdHJpbmcnLCB7XG4gICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgJ2VudW1lcmFibGUnOiBmYWxzZSxcbiAgICAndmFsdWUnOiBjb25zdGFudChzdHJpbmcpLFxuICAgICd3cml0YWJsZSc6IHRydWVcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBiYXNlU2V0VG9TdHJpbmc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlU2V0VG9TdHJpbmcuanMiLCIvKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYHZhbHVlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGZyb20gdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbnN0YW50IGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5jb25zdGFudCh7ICdhJzogMSB9KSk7XG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0cyk7XG4gKiAvLyA9PiBbeyAnYSc6IDEgfSwgeyAnYSc6IDEgfV1cbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzWzBdID09PSBvYmplY3RzWzFdKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29uc3RhbnQ7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2NvbnN0YW50LmpzIiwiLyoqIFVzZWQgdG8gZGV0ZWN0IGhvdCBmdW5jdGlvbnMgYnkgbnVtYmVyIG9mIGNhbGxzIHdpdGhpbiBhIHNwYW4gb2YgbWlsbGlzZWNvbmRzLiAqL1xudmFyIEhPVF9DT1VOVCA9IDgwMCxcbiAgICBIT1RfU1BBTiA9IDE2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQnbGwgc2hvcnQgb3V0IGFuZCBpbnZva2UgYGlkZW50aXR5YCBpbnN0ZWFkXG4gKiBvZiBgZnVuY2Agd2hlbiBpdCdzIGNhbGxlZCBgSE9UX0NPVU5UYCBvciBtb3JlIHRpbWVzIGluIGBIT1RfU1BBTmBcbiAqIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzaG9ydGFibGUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcbiAgdmFyIGNvdW50ID0gMCxcbiAgICAgIGxhc3RDYWxsZWQgPSAwO1xuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhbXAgPSBuYXRpdmVOb3coKSxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcblxuICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgaWYgKCsrY291bnQgPj0gSE9UX0NPVU5UKSB7XG4gICAgICAgIHJldHVybiBhcmd1bWVudHNbMF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvdW50ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBzaG9ydE91dDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3Nob3J0T3V0LmpzIiwiaW1wb3J0IGFycmF5TGlrZUtleXMgZnJvbSAnLi9fYXJyYXlMaWtlS2V5cy5qcyc7XG5pbXBvcnQgYmFzZUtleXNJbiBmcm9tICcuL19iYXNlS2V5c0luLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL2lzQXJyYXlMaWtlLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5c0luKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCwgdHJ1ZSkgOiBiYXNlS2V5c0luKG9iamVjdCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGtleXNJbjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMva2V5c0luLmpzIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXG4gKiBvciBtYXggYXJyYXkgbGVuZ3RoIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUaW1lcyhuLCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVRpbWVzO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRpbWVzLmpzIiwiaW1wb3J0IGJhc2VJc0FyZ3VtZW50cyBmcm9tICcuL19iYXNlSXNBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBpc0FyZ3VtZW50cztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcmd1bWVudHMuanMiLCJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBhcmdzVGFnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNBcmd1bWVudHM7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNBcmd1bWVudHMuanMiLCJpbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcbmltcG9ydCBzdHViRmFsc2UgZnJvbSAnLi9zdHViRmFsc2UuanMnO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbmV4cG9ydCBkZWZhdWx0IGlzQnVmZmVyO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0J1ZmZlci5qcyIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxuICovXG5mdW5jdGlvbiBzdHViRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3R1YkZhbHNlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9zdHViRmFsc2UuanMiLCJpbXBvcnQgYmFzZUlzVHlwZWRBcnJheSBmcm9tICcuL19iYXNlSXNUeXBlZEFycmF5LmpzJztcbmltcG9ydCBiYXNlVW5hcnkgZnJvbSAnLi9fYmFzZVVuYXJ5LmpzJztcbmltcG9ydCBub2RlVXRpbCBmcm9tICcuL19ub2RlVXRpbC5qcyc7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzVHlwZWRBcnJheSA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzVHlwZWRBcnJheTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShuZXcgVWludDhBcnJheSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkoW10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzVHlwZWRBcnJheSA9IG5vZGVJc1R5cGVkQXJyYXkgPyBiYXNlVW5hcnkobm9kZUlzVHlwZWRBcnJheSkgOiBiYXNlSXNUeXBlZEFycmF5O1xuXG5leHBvcnQgZGVmYXVsdCBpc1R5cGVkQXJyYXk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzVHlwZWRBcnJheS5qcyIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzTGVuZ3RoIGZyb20gJy4vaXNMZW5ndGguanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUlzVHlwZWRBcnJheTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc1R5cGVkQXJyYXkuanMiLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VVbmFyeTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VVbmFyeS5qcyIsImltcG9ydCBmcmVlR2xvYmFsIGZyb20gJy4vX2ZyZWVHbG9iYWwuanMnO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5leHBvcnQgZGVmYXVsdCBub2RlVXRpbDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25vZGVVdGlsLmpzIiwiaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IGlzUHJvdG90eXBlIGZyb20gJy4vX2lzUHJvdG90eXBlLmpzJztcbmltcG9ydCBuYXRpdmVLZXlzSW4gZnJvbSAnLi9fbmF0aXZlS2V5c0luLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXNJbihvYmplY3QpO1xuICB9XG4gIHZhciBpc1Byb3RvID0gaXNQcm90b3R5cGUob2JqZWN0KSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoIShrZXkgPT0gJ2NvbnN0cnVjdG9yJyAmJiAoaXNQcm90byB8fCAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUtleXNJbjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VLZXlzSW4uanMiLCIvKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZVxuICogW2BPYmplY3Qua2V5c2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChvYmplY3QgIT0gbnVsbCkge1xuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbmF0aXZlS2V5c0luO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbmF0aXZlS2V5c0luLmpzIiwiaW1wb3J0IGFwcGx5IGZyb20gJy4vX2FwcGx5LmpzJztcbmltcG9ydCBiYXNlUmVzdCBmcm9tICcuL19iYXNlUmVzdC5qcyc7XG5pbXBvcnQgaXNFcnJvciBmcm9tICcuL2lzRXJyb3IuanMnO1xuXG4vKipcbiAqIEF0dGVtcHRzIHRvIGludm9rZSBgZnVuY2AsIHJldHVybmluZyBlaXRoZXIgdGhlIHJlc3VsdCBvciB0aGUgY2F1Z2h0IGVycm9yXG4gKiBvYmplY3QuIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQgdG8gYGZ1bmNgIHdoZW4gaXQncyBpbnZva2VkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhdHRlbXB0LlxuICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYGZ1bmNgIHJlc3VsdCBvciBlcnJvciBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIEF2b2lkIHRocm93aW5nIGVycm9ycyBmb3IgaW52YWxpZCBzZWxlY3RvcnMuXG4gKiB2YXIgZWxlbWVudHMgPSBfLmF0dGVtcHQoZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAqICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICogfSwgJz5fPicpO1xuICpcbiAqIGlmIChfLmlzRXJyb3IoZWxlbWVudHMpKSB7XG4gKiAgIGVsZW1lbnRzID0gW107XG4gKiB9XG4gKi9cbnZhciBhdHRlbXB0ID0gYmFzZVJlc3QoZnVuY3Rpb24oZnVuYywgYXJncykge1xuICB0cnkge1xuICAgIHJldHVybiBhcHBseShmdW5jLCB1bmRlZmluZWQsIGFyZ3MpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGlzRXJyb3IoZSkgPyBlIDogbmV3IEVycm9yKGUpO1xuICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgYXR0ZW1wdDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvYXR0ZW1wdC5qcyIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGdldFByb3RvdHlwZSBmcm9tICcuL19nZXRQcm90b3R5cGUuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGluZmVyIHRoZSBgT2JqZWN0YCBjb25zdHJ1Y3Rvci4gKi9cbnZhciBvYmplY3RDdG9yU3RyaW5nID0gZnVuY1RvU3RyaW5nLmNhbGwoT2JqZWN0KTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgdGhhdCBpcywgYW4gb2JqZWN0IGNyZWF0ZWQgYnkgdGhlXG4gKiBgT2JqZWN0YCBjb25zdHJ1Y3RvciBvciBvbmUgd2l0aCBhIGBbW1Byb3RvdHlwZV1dYCBvZiBgbnVsbGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjguMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogfVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChuZXcgRm9vKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdCh7ICd4JzogMCwgJ3knOiAwIH0pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgfHwgYmFzZUdldFRhZyh2YWx1ZSkgIT0gb2JqZWN0VGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwcm90byA9IGdldFByb3RvdHlwZSh2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBDdG9yID0gaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgJ2NvbnN0cnVjdG9yJykgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmXG4gICAgZnVuY1RvU3RyaW5nLmNhbGwoQ3RvcikgPT0gb2JqZWN0Q3RvclN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNQbGFpbk9iamVjdDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNQbGFpbk9iamVjdC5qcyIsImltcG9ydCBvdmVyQXJnIGZyb20gJy4vX292ZXJBcmcuanMnO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBnZXRQcm90b3R5cGUgPSBvdmVyQXJnKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KTtcblxuZXhwb3J0IGRlZmF1bHQgZ2V0UHJvdG90eXBlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0UHJvdG90eXBlLmpzIiwiaW1wb3J0IGFycmF5TWFwIGZyb20gJy4vX2FycmF5TWFwLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy52YWx1ZXNgIGFuZCBgXy52YWx1ZXNJbmAgd2hpY2ggY3JlYXRlcyBhblxuICogYXJyYXkgb2YgYG9iamVjdGAgcHJvcGVydHkgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3BlcnR5IG5hbWVzXG4gKiBvZiBgcHJvcHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgbmFtZXMgdG8gZ2V0IHZhbHVlcyBmb3IuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VWYWx1ZXMob2JqZWN0LCBwcm9wcykge1xuICByZXR1cm4gYXJyYXlNYXAocHJvcHMsIGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBvYmplY3Rba2V5XTtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VWYWx1ZXM7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVmFsdWVzLmpzIiwiaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgYnkgYF8uZGVmYXVsdHNgIHRvIGN1c3RvbWl6ZSBpdHMgYF8uYXNzaWduSW5gIHVzZSB0byBhc3NpZ24gcHJvcGVydGllc1xuICogb2Ygc291cmNlIG9iamVjdHMgdG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdCBmb3IgYWxsIGRlc3RpbmF0aW9uIHByb3BlcnRpZXNcbiAqIHRoYXQgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSBvYmpWYWx1ZSBUaGUgZGVzdGluYXRpb24gdmFsdWUuXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSBzb3VyY2UgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHBhcmVudCBvYmplY3Qgb2YgYG9ialZhbHVlYC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGN1c3RvbURlZmF1bHRzQXNzaWduSW4ob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCkge1xuICBpZiAob2JqVmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgKGVxKG9ialZhbHVlLCBvYmplY3RQcm90b1trZXldKSAmJiAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSB7XG4gICAgcmV0dXJuIHNyY1ZhbHVlO1xuICB9XG4gIHJldHVybiBvYmpWYWx1ZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3VzdG9tRGVmYXVsdHNBc3NpZ25JbjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2N1c3RvbURlZmF1bHRzQXNzaWduSW4uanMiLCIvKiogVXNlZCB0byBlc2NhcGUgY2hhcmFjdGVycyBmb3IgaW5jbHVzaW9uIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy4gKi9cbnZhciBzdHJpbmdFc2NhcGVzID0ge1xuICAnXFxcXCc6ICdcXFxcJyxcbiAgXCInXCI6IFwiJ1wiLFxuICAnXFxuJzogJ24nLFxuICAnXFxyJzogJ3InLFxuICAnXFx1MjAyOCc6ICd1MjAyOCcsXG4gICdcXHUyMDI5JzogJ3UyMDI5J1xufTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLnRlbXBsYXRlYCB0byBlc2NhcGUgY2hhcmFjdGVycyBmb3IgaW5jbHVzaW9uIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGNociBUaGUgbWF0Y2hlZCBjaGFyYWN0ZXIgdG8gZXNjYXBlLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBjaGFyYWN0ZXIuXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVN0cmluZ0NoYXIoY2hyKSB7XG4gIHJldHVybiAnXFxcXCcgKyBzdHJpbmdFc2NhcGVzW2Nocl07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGVzY2FwZVN0cmluZ0NoYXI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19lc2NhcGVTdHJpbmdDaGFyLmpzIiwiaW1wb3J0IGFycmF5TGlrZUtleXMgZnJvbSAnLi9fYXJyYXlMaWtlS2V5cy5qcyc7XG5pbXBvcnQgYmFzZUtleXMgZnJvbSAnLi9fYmFzZUtleXMuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXG4gKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5cyhuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLmtleXMoJ2hpJyk7XG4gKiAvLyA9PiBbJzAnLCAnMSddXG4gKi9cbmZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQga2V5cztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMva2V5cy5qcyIsImltcG9ydCBpc1Byb3RvdHlwZSBmcm9tICcuL19pc1Byb3RvdHlwZS5qcyc7XG5pbXBvcnQgbmF0aXZlS2V5cyBmcm9tICcuL19uYXRpdmVLZXlzLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VLZXlzKG9iamVjdCkge1xuICBpZiAoIWlzUHJvdG90eXBlKG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyhvYmplY3QpO1xuICB9XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGtleSAhPSAnY29uc3RydWN0b3InKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlS2V5cztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VLZXlzLmpzIiwiaW1wb3J0IG92ZXJBcmcgZnJvbSAnLi9fb3ZlckFyZy5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVLZXlzID0gb3ZlckFyZyhPYmplY3Qua2V5cywgT2JqZWN0KTtcblxuZXhwb3J0IGRlZmF1bHQgbmF0aXZlS2V5cztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25hdGl2ZUtleXMuanMiLCJpbXBvcnQgZXNjYXBlIGZyb20gJy4vZXNjYXBlLmpzJztcbmltcG9ydCByZUVzY2FwZSBmcm9tICcuL19yZUVzY2FwZS5qcyc7XG5pbXBvcnQgcmVFdmFsdWF0ZSBmcm9tICcuL19yZUV2YWx1YXRlLmpzJztcbmltcG9ydCByZUludGVycG9sYXRlIGZyb20gJy4vX3JlSW50ZXJwb2xhdGUuanMnO1xuXG4vKipcbiAqIEJ5IGRlZmF1bHQsIHRoZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzIHVzZWQgYnkgbG9kYXNoIGFyZSBsaWtlIHRob3NlIGluXG4gKiBlbWJlZGRlZCBSdWJ5IChFUkIpIGFzIHdlbGwgYXMgRVMyMDE1IHRlbXBsYXRlIHN0cmluZ3MuIENoYW5nZSB0aGVcbiAqIGZvbGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHR5cGUge09iamVjdH1cbiAqL1xudmFyIHRlbXBsYXRlU2V0dGluZ3MgPSB7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gZGV0ZWN0IGBkYXRhYCBwcm9wZXJ0eSB2YWx1ZXMgdG8gYmUgSFRNTC1lc2NhcGVkLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtSZWdFeHB9XG4gICAqL1xuICAnZXNjYXBlJzogcmVFc2NhcGUsXG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gZGV0ZWN0IGNvZGUgdG8gYmUgZXZhbHVhdGVkLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtSZWdFeHB9XG4gICAqL1xuICAnZXZhbHVhdGUnOiByZUV2YWx1YXRlLFxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGRldGVjdCBgZGF0YWAgcHJvcGVydHkgdmFsdWVzIHRvIGluamVjdC5cbiAgICpcbiAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5nc1xuICAgKiBAdHlwZSB7UmVnRXhwfVxuICAgKi9cbiAgJ2ludGVycG9sYXRlJzogcmVJbnRlcnBvbGF0ZSxcblxuICAvKipcbiAgICogVXNlZCB0byByZWZlcmVuY2UgdGhlIGRhdGEgb2JqZWN0IGluIHRoZSB0ZW1wbGF0ZSB0ZXh0LlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICAndmFyaWFibGUnOiAnJyxcblxuICAvKipcbiAgICogVXNlZCB0byBpbXBvcnQgdmFyaWFibGVzIGludG8gdGhlIGNvbXBpbGVkIHRlbXBsYXRlLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICAnaW1wb3J0cyc6IHtcblxuICAgIC8qKlxuICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBgbG9kYXNoYCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3MuaW1wb3J0c1xuICAgICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICAnXyc6IHsgJ2VzY2FwZSc6IGVzY2FwZSB9XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRlbXBsYXRlU2V0dGluZ3M7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RlbXBsYXRlU2V0dGluZ3MuanMiLCJpbXBvcnQgZXNjYXBlSHRtbENoYXIgZnJvbSAnLi9fZXNjYXBlSHRtbENoYXIuanMnO1xuaW1wb3J0IHRvU3RyaW5nIGZyb20gJy4vdG9TdHJpbmcuanMnO1xuXG4vKiogVXNlZCB0byBtYXRjaCBIVE1MIGVudGl0aWVzIGFuZCBIVE1MIGNoYXJhY3RlcnMuICovXG52YXIgcmVVbmVzY2FwZWRIdG1sID0gL1smPD5cIiddL2csXG4gICAgcmVIYXNVbmVzY2FwZWRIdG1sID0gUmVnRXhwKHJlVW5lc2NhcGVkSHRtbC5zb3VyY2UpO1xuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBjaGFyYWN0ZXJzIFwiJlwiLCBcIjxcIiwgXCI+XCIsICdcIicsIGFuZCBcIidcIiBpbiBgc3RyaW5nYCB0byB0aGVpclxuICogY29ycmVzcG9uZGluZyBIVE1MIGVudGl0aWVzLlxuICpcbiAqICoqTm90ZToqKiBObyBvdGhlciBjaGFyYWN0ZXJzIGFyZSBlc2NhcGVkLiBUbyBlc2NhcGUgYWRkaXRpb25hbFxuICogY2hhcmFjdGVycyB1c2UgYSB0aGlyZC1wYXJ0eSBsaWJyYXJ5IGxpa2UgW19oZV9dKGh0dHBzOi8vbXRocy5iZS9oZSkuXG4gKlxuICogVGhvdWdoIHRoZSBcIj5cIiBjaGFyYWN0ZXIgaXMgZXNjYXBlZCBmb3Igc3ltbWV0cnksIGNoYXJhY3RlcnMgbGlrZVxuICogXCI+XCIgYW5kIFwiL1wiIGRvbid0IG5lZWQgZXNjYXBpbmcgaW4gSFRNTCBhbmQgaGF2ZSBubyBzcGVjaWFsIG1lYW5pbmdcbiAqIHVubGVzcyB0aGV5J3JlIHBhcnQgb2YgYSB0YWcgb3IgdW5xdW90ZWQgYXR0cmlidXRlIHZhbHVlLiBTZWVcbiAqIFtNYXRoaWFzIEJ5bmVucydzIGFydGljbGVdKGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9hbWJpZ3VvdXMtYW1wZXJzYW5kcylcbiAqICh1bmRlciBcInNlbWktcmVsYXRlZCBmdW4gZmFjdFwiKSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFdoZW4gd29ya2luZyB3aXRoIEhUTUwgeW91IHNob3VsZCBhbHdheXNcbiAqIFtxdW90ZSBhdHRyaWJ1dGUgdmFsdWVzXShodHRwOi8vd29ua28uY29tL3Bvc3QvaHRtbC1lc2NhcGluZykgdG8gcmVkdWNlXG4gKiBYU1MgdmVjdG9ycy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5lc2NhcGUoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJyk7XG4gKiAvLyA9PiAnZnJlZCwgYmFybmV5LCAmYW1wOyBwZWJibGVzJ1xuICovXG5mdW5jdGlvbiBlc2NhcGUoc3RyaW5nKSB7XG4gIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gIHJldHVybiAoc3RyaW5nICYmIHJlSGFzVW5lc2NhcGVkSHRtbC50ZXN0KHN0cmluZykpXG4gICAgPyBzdHJpbmcucmVwbGFjZShyZVVuZXNjYXBlZEh0bWwsIGVzY2FwZUh0bWxDaGFyKVxuICAgIDogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBlc2NhcGU7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2VzY2FwZS5qcyIsImltcG9ydCBiYXNlUHJvcGVydHlPZiBmcm9tICcuL19iYXNlUHJvcGVydHlPZi5qcyc7XG5cbi8qKiBVc2VkIHRvIG1hcCBjaGFyYWN0ZXJzIHRvIEhUTUwgZW50aXRpZXMuICovXG52YXIgaHRtbEVzY2FwZXMgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmIzM5Oydcbn07XG5cbi8qKlxuICogVXNlZCBieSBgXy5lc2NhcGVgIHRvIGNvbnZlcnQgY2hhcmFjdGVycyB0byBIVE1MIGVudGl0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIGNoYXJhY3Rlci5cbiAqL1xudmFyIGVzY2FwZUh0bWxDaGFyID0gYmFzZVByb3BlcnR5T2YoaHRtbEVzY2FwZXMpO1xuXG5leHBvcnQgZGVmYXVsdCBlc2NhcGVIdG1sQ2hhcjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2VzY2FwZUh0bWxDaGFyLmpzIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wcm9wZXJ0eU9mYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUHJvcGVydHlPZihvYmplY3QpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlUHJvcGVydHlPZjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VQcm9wZXJ0eU9mLmpzIiwiaW1wb3J0IFN5bWJvbCBmcm9tICcuL19TeW1ib2wuanMnO1xuaW1wb3J0IGFycmF5TWFwIGZyb20gJy4vX2FycmF5TWFwLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNTeW1ib2wgZnJvbSAnLi9pc1N5bWJvbC5qcyc7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXG4gKiB2YWx1ZXMgdG8gZW1wdHkgc3RyaW5ncy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgY29udmVydCB2YWx1ZXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICByZXR1cm4gYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmluZykgKyAnJztcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VUb1N0cmluZztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VUb1N0cmluZy5qcyIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNTeW1ib2w7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzU3ltYm9sLmpzIiwiLyoqIFVzZWQgdG8gbWF0Y2ggdGVtcGxhdGUgZGVsaW1pdGVycy4gKi9cbnZhciByZUVzY2FwZSA9IC88JS0oW1xcc1xcU10rPyklPi9nO1xuXG5leHBvcnQgZGVmYXVsdCByZUVzY2FwZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3JlRXNjYXBlLmpzIiwiLyoqIFVzZWQgdG8gbWF0Y2ggdGVtcGxhdGUgZGVsaW1pdGVycy4gKi9cbnZhciByZUV2YWx1YXRlID0gLzwlKFtcXHNcXFNdKz8pJT4vZztcblxuZXhwb3J0IGRlZmF1bHQgcmVFdmFsdWF0ZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3JlRXZhbHVhdGUuanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgSW1hZ2VSZW5kZXJlciBmcm9tICcuL0ltYWdlUmVuZGVyZXInXG5cbmV4cG9ydCBkZWZhdWx0IEltYWdlUmVuZGVyZXJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9JbWFnZVJlbmRlcmVyL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IFRlbXBsYXRlUmVuZGVyZXIgZnJvbSAnLi4vVGVtcGxhdGVSZW5kZXJlcidcblxuLyoqXG4gKiBOdW1iZXJzIEVkaXRvclxuICpcbiAqIEhhbmRsZSBudW1iZXIgdmFsdWVzIEVkaXRpbmdcbiAqXG4gKiB8IE5hbWUgICAgICAgICAgICAgICAgICBcdHwgRGVmYXVsdCAgICAgXHR8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHR8Oi0tLS0tLS0tLS0tLS06fC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAqKmltYWdlUmVuZGVyZXJXaWR0aCoqICAgfCAyOHB4ICAgIHwgaW1hZ2Ugd2lkdGhcbiAqIHwgKippbWFnZVJlbmRlcmVySGVpZ2h0KiogICB8IDI4cHggICAgfCBpbWFnZSBoZWlnaHRcbiAqIHwgKippbWFnZVJlbmRlcmVyTGlzdCoqICAgICAgIHwge30gIFx0fCBhIGxpc3Qgb2Ygd2hpY2ggbWFwcyBpbWFnZXMgd2l0aCBjZWxsIHZhbHVlcyBhcyBKU09OIG9yIHBsYWluIEpTIG9iamVjdFxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKlxuICogQHNlZSBodHRwczovL2xvZGFzaC5jb20vZG9jcy80LjE3LjE1I3RlbXBsYXRlXG4gKi9cbmNsYXNzIEltYWdlUmVuZGVyZXIgZXh0ZW5kcyBUZW1wbGF0ZVJlbmRlcmVyIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICByZWZyZXNoKHBhcmFtcywgaXNJbml0KSB7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJhbXMudmFsdWVcbiAgICBjb25zdCBpbWFnZVdpZHRoID0gdGhpcy5nZXRPcHRpb24oJ2ltYWdlUmVuZGVyZXJXaWR0aCcsIHBhcmFtcywgJzI4cHgnKVxuICAgIGNvbnN0IGltYWdlSGVpZ2h0ID0gdGhpcy5nZXRPcHRpb24oJ2ltYWdlUmVuZGVyZXJIZWlnaHQnLCBwYXJhbXMsICcyOHB4JylcbiAgICBsZXQgaW1hZ2VMaXN0ID0gdGhpcy5nZXRPcHRpb24oJ2ltYWdlUmVuZGVyZXJMaXN0JywgcGFyYW1zKVxuXG4gICAgdHJ5IHtcbiAgICAgIGltYWdlTGlzdCA9IEpTT04ucGFyc2UoaW1hZ2VMaXN0KVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGltYWdlTGlzdCA9IGltYWdlTGlzdCB8fCB7fVxuICAgIH1cblxuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvdHlwZS1idWlsdGlucyAqL1xuICAgIGlmIChpbWFnZUxpc3QgJiYgaW1hZ2VMaXN0Lmhhc093blByb3BlcnR5KHZhbHVlKSkge1xuICAgICAgcGFyYW1zLnJlbmRlclRlbXBsYXRlID0gLypodG1sKi8gYFxuICAgICAgICA8aW1nIFxuICAgICAgICAgIHNyYz1cIiR7aW1hZ2VMaXN0W3BhcmFtcy52YWx1ZV19XCIgXG4gICAgICAgICAgd2lkdGg9XCIke2ltYWdlV2lkdGh9XCJcbiAgICAgICAgICBoZWlnaHQ9XCIke2ltYWdlSGVpZ2h0fVwiICBcbiAgICAgICAgLz5cbiAgICAgIGBcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyYW1zLnJlbmRlclRlbXBsYXRlID0gdmFsdWVcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIucmVmcmVzaChwYXJhbXMsIGlzSW5pdClcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbWFnZVJlbmRlcmVyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvSW1hZ2VSZW5kZXJlci9JbWFnZVJlbmRlcmVyLmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IERhdGVUaW1lRmlsdGVyIGZyb20gJy4vRGF0ZVRpbWVGaWx0ZXInXG5cbmV4cG9ydCBkZWZhdWx0IERhdGVUaW1lRmlsdGVyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvRGF0ZVRpbWVGaWx0ZXIvaW5kZXguanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBhdXRvYmluZCwgb3ZlcnJpZGUsIHJlYWRvbmx5IH0gZnJvbSAnY29yZS1kZWNvcmF0b3JzJ1xuaW1wb3J0IHV0Y1RvWm9uZWRUaW1lIGZyb20gJ2RhdGUtZm5zLXR6L3V0Y1RvWm9uZWRUaW1lJ1xuaW1wb3J0IHsgd2l0aEV2ZW50c01peGluIH0gZnJvbSAnLi4vRXZlbnRzTWl4aW4nXG5pbXBvcnQgRGF0ZVRpbWVJbnB1dCBmcm9tICcuLi9EYXRlVGltZUlucHV0J1xuaW1wb3J0IENvbXBvbmVudCBmcm9tICcuLi9Db21wb25lbnQnXG5pbXBvcnQgJy4vc3R5bGUuc2NzcydcblxuY29uc3QgVE9LRU5TID0ge1xuICBUT0tFTl9FUVVBTDogJ2VxdWFscycsXG4gIFRPS0VOX05PVF9FUVVBTDogJ25vdEVxdWFsJyxcbiAgVE9LRU5fTEVTUzogJ2xlc3NUaGFuJyxcbiAgVE9LRU5fR1JFQVRFUjogJ2dyZWF0ZXJUaGFuJyxcbiAgVE9LRU5fUkFOR0U6ICdpblJhbmdlJyxcbiAgVE9LRU5fQU5EOiAnQU5EJyxcbiAgVE9LRU5fT1I6ICdPUicsXG59XG5cbkB3aXRoRXZlbnRzTWl4aW5cbmNsYXNzIENvbmRpdGlvblBhbmVsIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIENvbnN0YW50IHdoaWNoIGRlc2NyaWJlcyB0aGUgZXZlbnQgbmFtZSB0aGF0IHdpbGwgYmUgZmlyZWQgd2hlbiB0aGUgb3B0aW9uXG4gICAqIHN0YXRlIGlzIGNoYW5nZWRcbiAgICpcbiAgICogQHR5cGUge1N0cmluZ31cbiAgICovXG4gIEByZWFkb25seVxuICBzdGF0aWMgT05fQ09ORElUSU9OX0NIQU5HRUQgPSAnQ29uZGl0aW9uUGFuZWwuT05fQ09ORElUSU9OX0NIQU5HRUQnXG4gIC8qKlxuICAgKiBUaGUgb3B0aW9uIHN0YXRlXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBAcmVhZG9ubHlcbiAgc3RhdGUgPSB7XG4gICAgdHlwZTogVE9LRU5TLlRPS0VOX0VRVUFMLFxuICAgIGZpbHRlcjogbnVsbCxcbiAgICBmaWx0ZXJUbzogbnVsbCxcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7RGF0ZVRpbWVJbnB1dH1cbiAgICovXG4gIF9maWx0ZXJUaW1lSW5wdXQgPSBuZXcgRGF0ZVRpbWVJbnB1dCgpXG5cbiAgLyoqXG4gICAqIEB0eXBlIHtEYXRlVGltZUlucHV0fVxuICAgKi9cbiAgX2ZpbHRlclRvRGF0ZVRpbWVJbnB1dCA9IG5ldyBEYXRlVGltZUlucHV0KClcblxuICAvKipcbiAgICogQW4gYXJyYXkgb2YgZW5hYmxlZCBmaWx0ZXIgdHlwZXNcbiAgICpcbiAgICogQHR5cGUge0FycmF5fVxuICAgKi9cbiAgX2ZpbHRlck9wdGlvbnMgPSBbXVxuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBlbmFibGVkIGZpbHRlciB0eXBlXG4gICAqXG4gICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAqL1xuICBfZGVmYXVsdE9wdGlvbiA9IC0xXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgQG92ZXJyaWRlXG4gIGluaXQocGFyYW1zKSB7XG4gICAgY29uc3QgdHJhbnNsYXRlID0gcGFyYW1zLmFwaS5ncmlkT3B0aW9uc1dyYXBwZXIuZ2V0TG9jYWxlVGV4dEZ1bmMoKVxuXG4gICAgdGhpcy5fZmlsdGVyT3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKCdmaWx0ZXJPcHRpb25zJywgcGFyYW1zLCBbXG4gICAgICBUT0tFTlMuVE9LRU5fRVFVQUwsXG4gICAgICBUT0tFTlMuVE9LRU5fTk9UX0VRVUFMLFxuICAgICAgVE9LRU5TLlRPS0VOX0xFU1MsXG4gICAgICBUT0tFTlMuVE9LRU5fR1JFQVRFUixcbiAgICAgIFRPS0VOUy5UT0tFTl9SQU5HRSxcbiAgICBdKVxuXG4gICAgdGhpcy5fZGVmYXVsdE9wdGlvbiA9IHRoaXMuZ2V0T3B0aW9uKFxuICAgICAgJ2RlZmF1bHRPcHRpb24nLFxuICAgICAgcGFyYW1zLFxuICAgICAgdGhpcy5fZmlsdGVyT3B0aW9ucy5pbmRleE9mKFRPS0VOUy5UT0tFTl9FUVVBTCkgPiAtMVxuICAgICAgICA/IFRPS0VOUy5UT0tFTl9FUVVBTFxuICAgICAgICA6IHRoaXMuX2ZpbHRlck9wdGlvbnNbMF1cbiAgICApXG5cbiAgICB0aGlzLnN0YXRlLnR5cGUgPSB0aGlzLl9kZWZhdWx0T3B0aW9uXG5cbiAgICBjb25zdCBvcHRpb25zVHJhbnNsYXRpb25zID0ge1xuICAgICAgW1RPS0VOUy5UT0tFTl9FUVVBTF06IHRyYW5zbGF0ZShUT0tFTlMuVE9LRU5fRVFVQUwsICdFcXVhbHMnKSxcbiAgICAgIFtUT0tFTlMuVE9LRU5fTk9UX0VRVUFMXTogdHJhbnNsYXRlKFRPS0VOUy5UT0tFTl9FUVVBTCwgJ05vdCBlcXVhbCcpLFxuICAgICAgW1RPS0VOUy5UT0tFTl9MRVNTXTogdHJhbnNsYXRlKFRPS0VOUy5UT0tFTl9MRVNTLCAnTGVzcyB0aGFuJyksXG4gICAgICBbVE9LRU5TLlRPS0VOX0dSRUFURVJdOiB0cmFuc2xhdGUoVE9LRU5TLlRPS0VOX0dSRUFURVIsICdHcmVhdGVyIHRoYW4nKSxcbiAgICAgIFtUT0tFTlMuVE9LRU5fUkFOR0VdOiB0cmFuc2xhdGUoVE9LRU5TLlRPS0VOX1JBTkdFLCAnSW4gcmFuZ2UnKSxcbiAgICB9XG5cbiAgICB0aGlzLl9ndWkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIHRoaXMuX2d1aS5jbGFzc05hbWUgPSAnZGF0ZVRpbWVGaWx0ZXIgYWctZmlsdGVyLWJvZHktd3JhcHBlcidcbiAgICB0aGlzLl9ndWkuaW5uZXJIVE1MID0gLyogaHRtbCAqLyBgXG4gICAgICA8c2VsZWN0IGNsYXNzPVwiYWctZmlsdGVyLXNlbGVjdCBkYXRlVGltZUZpbHRlcl9fc2VsZWN0XCIgICR7XG4gICAgICAgIHRoaXMuX2ZpbHRlck9wdGlvbnMubGVuZ3RoID09PSAxID8gJ2Rpc2FibGVkJyA6ICcnXG4gICAgICB9PlxuICAgICAgICAke3RoaXMuX2ZpbHRlck9wdGlvbnMubWFwKFxuICAgICAgICAgIG9wdGlvbiA9PiAvKiBodG1sICovIGBcbiAgICAgICAgICA8b3B0aW9uIFxuICAgICAgICAgICAgdmFsdWU9XCIke29wdGlvbn1cIiBcbiAgICAgICAgICAgICR7b3B0aW9uID09PSB0aGlzLl9kZWZhdWx0T3B0aW9uID8gJ3NlbGVjdGVkJyA6ICcnfVxuICAgICAgICAgID5cbiAgICAgICAgICAgICAgJHtvcHRpb25zVHJhbnNsYXRpb25zW29wdGlvbl19XG4gICAgICAgICAgPC9vcHRpb24+YFxuICAgICAgICApfVxuICAgICAgPC9zZWxlY3Q+XG4gICAgICA8ZGl2IGNsYXNzPVwiYWctZmlsdGVyLWJvZHlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFnLWZpbHRlci1kYXRlLWZyb21cIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhZy1maWx0ZXItZGF0ZS10byBhZy1oaWRkZW5cIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgXG5cbiAgICB0aGlzLl9maWx0ZXJUaW1lSW5wdXQuaW5pdChwYXJhbXMpXG4gICAgdGhpcy5fZmlsdGVyVGltZUlucHV0Lm9uKERhdGVUaW1lSW5wdXQuT05fREFURV9DSEFOR0VELCBzZWxlY3RlZERhdGUgPT4ge1xuICAgICAgdGhpcy5zdGF0ZS5maWx0ZXIgPSBzZWxlY3RlZERhdGVcbiAgICAgIHRoaXMubm90aWZ5KENvbmRpdGlvblBhbmVsLk9OX0NPTkRJVElPTl9DSEFOR0VELCB0aGlzLnN0YXRlKVxuICAgIH0pXG5cbiAgICB0aGlzLl9maWx0ZXJUb0RhdGVUaW1lSW5wdXQuaW5pdChwYXJhbXMpXG4gICAgdGhpcy5fZmlsdGVyVG9EYXRlVGltZUlucHV0Lm9uKFxuICAgICAgRGF0ZVRpbWVJbnB1dC5PTl9EQVRFX0NIQU5HRUQsXG4gICAgICBzZWxlY3RlZERhdGUgPT4ge1xuICAgICAgICB0aGlzLnN0YXRlLmZpbHRlclRvID0gc2VsZWN0ZWREYXRlXG4gICAgICAgIHRoaXMubm90aWZ5KENvbmRpdGlvblBhbmVsLk9OX0NPTkRJVElPTl9DSEFOR0VELCB0aGlzLnN0YXRlKVxuICAgICAgfVxuICAgIClcblxuICAgIHRoaXMuX2d1aVxuICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5hZy1maWx0ZXItZGF0ZS1mcm9tJylcbiAgICAgIC5hcHBlbmRDaGlsZCh0aGlzLl9maWx0ZXJUaW1lSW5wdXQuZ2V0R3VpKCkpXG4gICAgdGhpcy5fZ3VpXG4gICAgICAucXVlcnlTZWxlY3RvcignLmFnLWZpbHRlci1kYXRlLXRvJylcbiAgICAgIC5hcHBlbmRDaGlsZCh0aGlzLl9maWx0ZXJUb0RhdGVUaW1lSW5wdXQuZ2V0R3VpKCkpXG5cbiAgICBjb25zdCBzZWxlY3QgPSB0aGlzLl9ndWkucXVlcnlTZWxlY3RvcignLmFnLWZpbHRlci1zZWxlY3QnKVxuICAgIHNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9vblR5cGVDaGFuZ2UpXG5cbiAgICB0aGlzLnNldFN0YXRlKHRoaXMuX3N0YXRlKVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLm9mZihDb25kaXRpb25QYW5lbC5PTl9DT05ESVRJT05fQ0hBTkdFRClcbiAgICB0aGlzLl9maWx0ZXJUaW1lSW5wdXQuZGVzdHJveSgpXG4gICAgdGhpcy5fZmlsdGVyVG9EYXRlVGltZUlucHV0LmRlc3Ryb3koKVxuICAgIHRoaXMuX2d1aVxuICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5hZy1maWx0ZXItc2VsZWN0JylcbiAgICAgIC5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9vblR5cGVDaGFuZ2UpXG4gICAgdGhpcy5yZXNldCgpXG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIHN0YXRlXG4gICAqL1xuICByZXNldCgpIHtcbiAgICB0aGlzLnN0YXRlLmZpbHRlciA9IG51bGxcbiAgICB0aGlzLnN0YXRlLmZpbHRlclRvID0gbnVsbFxuICAgIHRoaXMuX2ZpbHRlclRpbWVJbnB1dC5yZXNldCgpXG4gICAgdGhpcy5fZmlsdGVyVG9EYXRlVGltZUlucHV0LnJlc2V0KClcblxuICAgIHRoaXMubm90aWZ5KENvbmRpdGlvblBhbmVsLk9OX0NPTkRJVElPTl9DSEFOR0VELCB0aGlzLnN0YXRlKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29uZGl0aW9uIHN0YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICAgKi9cbiAgc2V0U3RhdGUoc3RhdGUpIHtcbiAgICBzdGF0ZSA9IHN0YXRlIHx8IHt9XG4gICAgdGhpcy5zdGF0ZS5maWx0ZXIgPSBzdGF0ZS5maWx0ZXIgfHwgbnVsbFxuICAgIHRoaXMuc3RhdGUuZmlsdGVyVG8gPSBzdGF0ZS5maWx0ZXJUbyB8fCBudWxsXG4gICAgdGhpcy5zdGF0ZS50eXBlID0gc3RhdGUudHlwZSB8fCB0aGlzLl9kZWZhdWx0T3B0aW9uXG5cbiAgICBjb25zdCBndWkgPSB0aGlzLl9ndWlcbiAgICBjb25zdCBmaWx0ZXJPcHRpb25zID0gdGhpcy5fZmlsdGVyT3B0aW9uc1xuICAgIGNvbnN0IHNlbGVjdEVsID0gZ3VpLnF1ZXJ5U2VsZWN0b3IoJy5hZy1maWx0ZXItc2VsZWN0JylcbiAgICBjb25zdCBmaWx0ZXJJbnB1dCA9IHRoaXMuX2ZpbHRlclRpbWVJbnB1dFxuICAgIGNvbnN0IGZpbHRlclRvSW5wdXQgPSB0aGlzLl9maWx0ZXJUb0RhdGVUaW1lSW5wdXRcblxuICAgIHNlbGVjdEVsLnNlbGVjdGVkSW5kZXggPSBmaWx0ZXJPcHRpb25zLmluZGV4T2YodGhpcy5zdGF0ZS50eXBlKVxuICAgIGZpbHRlcklucHV0LnNldERhdGUodGhpcy5zdGF0ZS5maWx0ZXIpXG4gICAgZmlsdGVyVG9JbnB1dC5zZXREYXRlKHRoaXMuc3RhdGUuZmlsdGVyVG8pXG5cbiAgICAvLyB3ZSBmaXJlIG9uIGNoYW5nZSBldmVudCBpbiBjYXNlIHRoZSBmaWx0ZXIgb3B0aW9ucyBjb250YWluXG4gICAgLy8gb25lIG9wdGlvbiB3aGljaCBpcyBpbiBSYW5nZSBcImluUmFuZ2VcIlxuICAgIGlmICgnY3JlYXRlRXZlbnQnIGluIGRvY3VtZW50KSB7XG4gICAgICBjb25zdCBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnSFRNTEV2ZW50cycpXG4gICAgICBldnQuaW5pdEV2ZW50KCdjaGFuZ2UnLCBmYWxzZSwgdHJ1ZSlcbiAgICAgIHNlbGVjdEVsLmRpc3BhdGNoRXZlbnQoZXZ0KVxuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3RFbC5maXJlRXZlbnQoJ29uY2hhbmdlJylcbiAgICB9XG5cbiAgICB0aGlzLm5vdGlmeShDb25kaXRpb25QYW5lbC5PTl9DT05ESVRJT05fQ0hBTkdFRCwgdGhpcy5zdGF0ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHN0YXRlIHdpdGggdGhlIHNlbGVjdGVkIHR5cGVcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZVxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vblR5cGVDaGFuZ2UoZSkge1xuICAgIGNvbnN0IGVsID0gZS50YXJnZXRcbiAgICBjb25zdCBmaWx0ZXJEYXRlVG8gPSB0aGlzLl9ndWkucXVlcnlTZWxlY3RvcignLmFnLWZpbHRlci1kYXRlLXRvJylcblxuICAgIHRoaXMuc3RhdGUudHlwZSA9IGVsLm9wdGlvbnNbZWwuc2VsZWN0ZWRJbmRleF0udmFsdWVcblxuICAgIGlmICh0aGlzLnN0YXRlLnR5cGUgPT09IFRPS0VOUy5UT0tFTl9SQU5HRSkge1xuICAgICAgZmlsdGVyRGF0ZVRvLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWhpZGRlbicpXG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbHRlckRhdGVUby5jbGFzc0xpc3QuYWRkKCdhZy1oaWRkZW4nKVxuICAgIH1cblxuICAgIHRoaXMubm90aWZ5KENvbmRpdGlvblBhbmVsLk9OX0NPTkRJVElPTl9DSEFOR0VELCB0aGlzLnN0YXRlKVxuICB9XG59XG5cbkB3aXRoRXZlbnRzTWl4aW5cbmNsYXNzIEpvaW5Db25kaXRpb25QYW5lbCBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBDb25zdGFudCB3aGljaCBkZXNjcmliZXMgdGhlIGV2ZW50IG5hbWUgdGhhdCB3aWxsIGJlIGZpcmVkIHdoZW4gdGhlIGpvaW5cbiAgICogc3RhdGUgaXMgY2hhbmdlZFxuICAgKlxuICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgKi9cbiAgQHJlYWRvbmx5XG4gIHN0YXRpYyBPTl9KT0lOX0NPTkRJVElPTl9DSEFOR0VEID1cbiAgICAnSm9pbkNvbmRpdGlvblBhbmVsLk9OX0pPSU5fQ09ORElUSU9OX0NIQU5HRUQnXG4gIC8qKlxuICAgKiBUaGUgam9pbiBzdGF0ZVxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgQHJlYWRvbmx5XG4gIHN0YXRlID0ge1xuICAgIGNvbmRpdGlvbjE6IHt9LFxuICAgIGNvbmRpdGlvbjI6IHt9LFxuICAgIG9wZXJhdG9yOiBUT0tFTlMuVE9LRU5fT1IsXG4gIH1cblxuICAvKipcbiAgICogQHR5cGUge09wdGlvbn1cbiAgICovXG4gIF9maXJzdENvbmRpdGlvblBhbmVsID0gbmV3IENvbmRpdGlvblBhbmVsKClcblxuICAvKipcbiAgICogQHR5cGUge09wdGlvbn1cbiAgICovXG4gIF9zZWNvbmRDb25kaXRpb25QYW5lbCA9IG5ldyBDb25kaXRpb25QYW5lbCgpXG5cbiAgLyoqXG4gICAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgICovXG4gIF9vcGVyYXRvclBhbmVsID0gbnVsbFxuXG4gIC8qKlxuICAgKiBQYXJhbXMgcmVjZWl2ZWQgYWZ0ZXIgaW5pdFxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgX3BhcmFtcyA9IG51bGxcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgaW5pdChwYXJhbXMpIHtcbiAgICBjb25zdCB0cmFuc2xhdGUgPSBwYXJhbXMuYXBpLmdyaWRPcHRpb25zV3JhcHBlci5nZXRMb2NhbGVUZXh0RnVuYygpXG5cbiAgICB0aGlzLl9wYXJhbXMgPSBwYXJhbXNcblxuICAgIHRoaXMuX2ZpcnN0Q29uZGl0aW9uUGFuZWwuaW5pdChwYXJhbXMpXG4gICAgdGhpcy5fZmlyc3RDb25kaXRpb25QYW5lbC5vbihcbiAgICAgIENvbmRpdGlvblBhbmVsLk9OX0NPTkRJVElPTl9DSEFOR0VELFxuICAgICAgdGhpcy5fb25GaXJzdENvbmRpdGlvbkNoYW5nZWRcbiAgICApXG5cbiAgICB0aGlzLl9zZWNvbmRDb25kaXRpb25QYW5lbC5pbml0KHBhcmFtcylcbiAgICB0aGlzLl9zZWNvbmRDb25kaXRpb25QYW5lbC5vbihcbiAgICAgIENvbmRpdGlvblBhbmVsLk9OX0NPTkRJVElPTl9DSEFOR0VELFxuICAgICAgdGhpcy5fb25TZWNvbmRDb25kaXRpb25DaGFuZ2VkXG4gICAgKVxuICAgIHRoaXMuX3NlY29uZENvbmRpdGlvblBhbmVsLmdldEd1aSgpLmNsYXNzTGlzdC5hZGQoJ2FnLWhpZGRlbicpXG5cbiAgICB0aGlzLl9ndWkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIHRoaXMuX2d1aS5jbGFzc05hbWUgPSAnYWctZmlsdGVyLWJvZHktd3JhcHBlciBhZy1zaW1wbGUtZmlsdGVyLWJvZHktd3JhcHBlcidcbiAgICB0aGlzLl9ndWkuYXBwZW5kQ2hpbGQodGhpcy5fZmlyc3RDb25kaXRpb25QYW5lbC5nZXRHdWkoKSlcblxuICAgIC8vcHJldHRpZXItaWdub3JlXG4gICAgY29uc3QgaWRPbmUgPSAnXycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSksXG4gICAgICAgICAgaWRUd28gPSAnXycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSlcblxuICAgIHRoaXMuX29wZXJhdG9yUGFuZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIHRoaXMuX29wZXJhdG9yUGFuZWwuY2xhc3NOYW1lID0gJ2FnLWZpbHRlci1jb25kaXRpb24gYWctaGlkZGVuJ1xuICAgIHRoaXMuX29wZXJhdG9yUGFuZWwuaW5uZXJIVE1MID0gLyogaHRtbCAqLyBgXG4gICAgPGRpdiBjbGFzcz1cImFnLWZpbHRlci1jb25kaXRpb24tb3BlcmF0b3IgYWctZmlsdGVyLWNvbmRpdGlvbi1vcGVyYXRvci1hbmQgYWctbGFiZWxlZCBhZy1sYWJlbC1hbGlnbi1yaWdodCBhZy1yYWRpby1idXR0b24gYWctaW5wdXQtZmllbGRcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYWctaW5wdXQtZmllbGQtbGFiZWwgYWctbGFiZWwgYWctcmFkaW8tYnV0dG9uLWxhYmVsXCIgZm9yPVwiJHtpZE9uZX1cIj4gICAgICAgXG4gICAgICAgICAgJHt0cmFuc2xhdGUoJ2FuZENvbmRpdGlvbicsICdBTkQnKX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFnLXdyYXBwZXItYW5kIGFnLXdyYXBwZXIgYWctaW5wdXQtd3JhcHBlciBhZy1yYWRpby1idXR0b24taW5wdXQtd3JhcHBlciBhZy1jaGVja2VkXCI+XG4gICAgICAgICAgPGlucHV0IGlkPVwiJHtpZE9uZX1cIiBjbGFzcz1cIkFORCBhZy1pbnB1dC1maWVsZC1pbnB1dCBhZy1yYWRpby1idXR0b24taW5wdXRcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwib3JBbmRSYWRpb1wiIHZhbHVlPVwiJHtcbiAgICAgIFRPS0VOUy5UT0tFTl9BTkRcbiAgICB9XCIvPiAgICAgICAgICAgICAgXG4gICAgICAgIDwvZGl2PiBcbiAgICA8L2Rpdj4gICBcbiAgICBcbiAgICA8ZGl2IGNsYXNzPVwiYWctZmlsdGVyLWNvbmRpdGlvbi1vcGVyYXRvciBhZy1maWx0ZXItY29uZGl0aW9uLW9wZXJhdG9yLWFuZCBhZy1sYWJlbGVkIGFnLWxhYmVsLWFsaWduLXJpZ2h0IGFnLXJhZGlvLWJ1dHRvbiBhZy1pbnB1dC1maWVsZFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJhZy1pbnB1dC1maWVsZC1sYWJlbCBhZy1sYWJlbCBhZy1yYWRpby1idXR0b24tbGFiZWxcIiBmb3I9XCIke2lkVHdvfVwiPiAgICAgICBcbiAgICAgICAgICAke3RyYW5zbGF0ZSgnb3JDb25kaXRpb24nLCAnT1InKX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFnLXdyYXBwZXItb3IgYWctd3JhcHBlciBhZy1pbnB1dC13cmFwcGVyIGFnLXJhZGlvLWJ1dHRvbi1pbnB1dC13cmFwcGVyXCI+XG4gICAgICAgICAgPGlucHV0IGlkPVwiJHtpZFR3b31cIiBjbGFzcz1cIk9SIGFnLWlucHV0LWZpZWxkLWlucHV0IGFnLXJhZGlvLWJ1dHRvbi1pbnB1dFwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJvckFuZFJhZGlvXCIgdmFsdWU9XCIke1xuICAgICAgVE9LRU5TLlRPS0VOX09SXG4gICAgfVwiLz4gICAgICAgICAgICAgIFxuICAgICAgICA8L2Rpdj4gICAgICAgICBcbiAgICA8L2Rpdj4gICBcbiAgICBgXG4gICAgdGhpcy5fZ3VpLmFwcGVuZENoaWxkKHRoaXMuX29wZXJhdG9yUGFuZWwpXG4gICAgdGhpcy5fb3BlcmF0b3JQYW5lbC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9vbk9wZXJhdG9yQ2hhbmdlZClcblxuICAgIHRoaXMuX2d1aS5hcHBlbmRDaGlsZCh0aGlzLl9zZWNvbmRDb25kaXRpb25QYW5lbC5nZXRHdWkoKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgQG92ZXJyaWRlXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZmlyc3RDb25kaXRpb25QYW5lbC5kZXN0cm95KClcbiAgICB0aGlzLl9zZWNvbmRDb25kaXRpb25QYW5lbC5kZXN0cm95KClcbiAgICB0aGlzLl9vcGVyYXRvclBhbmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuX29uT3BlcmF0b3JDaGFuZ2VkKVxuICAgIHRoaXMub2ZmKEpvaW5Db25kaXRpb25QYW5lbC5PTl9KT0lOX0NPTkRJVElPTl9DSEFOR0VEKVxuICAgIHRoaXMucmVzZXQoKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBzdGF0ZVxuICAgKi9cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5fZmlyc3RDb25kaXRpb25QYW5lbC5yZXNldCgpXG4gICAgdGhpcy5fc2Vjb25kQ29uZGl0aW9uUGFuZWwucmVzZXQoKVxuICAgIHRoaXMubm90aWZ5KENvbmRpdGlvblBhbmVsLk9OX0NPTkRJVElPTl9DSEFOR0VELCB0aGlzLnN0YXRlKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29uZGl0aW9uIGpvaW4gc3RhdGVcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gICAqL1xuICBzZXRTdGF0ZShzdGF0ZSkge1xuICAgIHN0YXRlID0gc3RhdGUgfHwge31cbiAgICB0aGlzLnN0YXRlLm9wZXJhdG9yID0gc3RhdGUub3BlcmF0b3IgfHwgVE9LRU5TLlRPS0VOX09SXG4gICAgdGhpcy5zdGF0ZS5jb25kaXRpb24xID0gc3RhdGUuY29uZGl0aW9uMSB8fCBudWxsXG4gICAgdGhpcy5zdGF0ZS5jb25kaXRpb24yID0gc3RhdGUuY29uZGl0aW9uMiB8fCBudWxsXG5cbiAgICB0aGlzLl9maXJzdENvbmRpdGlvblBhbmVsLnNldFN0YXRlKHRoaXMuc3RhdGUuY29uZGl0aW9uMSlcbiAgICB0aGlzLl9zZWNvbmRDb25kaXRpb25QYW5lbC5zZXRTdGF0ZSh0aGlzLnN0YXRlLmNvbmRpdGlvbjIpXG4gICAgdGhpcy5fb3BlcmF0b3JQYW5lbC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCcpLmZvckVhY2goaW5wdXQgPT4ge1xuICAgICAgaWYgKGlucHV0LmNsYXNzTGlzdC5jb250YWlucyh0aGlzLnN0YXRlLm9wZXJhdG9yKSkge1xuICAgICAgICBpbnB1dC5jaGVja2VkID0gdHJ1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGZhbHNlXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMubm90aWZ5KEpvaW5Db25kaXRpb25QYW5lbC5PTl9KT0lOX0NPTkRJVElPTl9DSEFOR0VELCB0aGlzLnN0YXRlKVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgc2VsZWN0ZWQgY29uZGl0aW9uIHRvIHRoZSBjb21wb25lbnQgc3RhdGVyXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGVcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25PcGVyYXRvckNoYW5nZWQoZSkge1xuICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0XG5cbiAgICB0aGlzLnN0YXRlLm9wZXJhdG9yID0gdGFyZ2V0LnZhbHVlXG5cbiAgICBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnT1InKSkge1xuICAgICAgdGhpcy5fb3BlcmF0b3JQYW5lbFxuICAgICAgICAucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItb3InKVxuICAgICAgICAuY2xhc3NMaXN0LmFkZCgnYWctY2hlY2tlZCcpXG4gICAgICB0aGlzLl9vcGVyYXRvclBhbmVsXG4gICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci1hbmQnKVxuICAgICAgICAuY2xhc3NMaXN0LnJlbW92ZSgnYWctY2hlY2tlZCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX29wZXJhdG9yUGFuZWxcbiAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5hZy13cmFwcGVyLW9yJylcbiAgICAgICAgLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWNoZWNrZWQnKVxuICAgICAgdGhpcy5fb3BlcmF0b3JQYW5lbFxuICAgICAgICAucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItYW5kJylcbiAgICAgICAgLmNsYXNzTGlzdC5hZGQoJ2FnLWNoZWNrZWQnKVxuICAgIH1cblxuICAgIHRoaXMubm90aWZ5KEpvaW5Db25kaXRpb25QYW5lbC5PTl9KT0lOX0NPTkRJVElPTl9DSEFOR0VELCB0aGlzLnN0YXRlKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZSAgdGhlIG9wdGlvbiBzdGF0ZVxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vbkZpcnN0Q29uZGl0aW9uQ2hhbmdlZChzdGF0ZSkge1xuICAgIHRoaXMuc3RhdGUuY29uZGl0aW9uMSA9IHN0YXRlXG5cbiAgICBjb25zdCBzdXBwcmVzc0FuZE9yQ29uZGl0aW9uID0gdGhpcy5nZXRPcHRpb24oXG4gICAgICAnc3VwcHJlc3NBbmRPckNvbmRpdGlvbicsXG4gICAgICB0aGlzLl9wYXJhbXMsXG4gICAgICBmYWxzZVxuICAgIClcblxuICAgIGlmICghc3VwcHJlc3NBbmRPckNvbmRpdGlvbikge1xuICAgICAgY29uc3QgeyBmaWx0ZXIsIGZpbHRlclRvLCB0eXBlIH0gPSB0aGlzLnN0YXRlLmNvbmRpdGlvbjFcbiAgICAgIGNvbnN0IHNlY29uZENvbmRpdGlvbkd1aSA9IHRoaXMuX3NlY29uZENvbmRpdGlvblBhbmVsLmdldEd1aSgpXG4gICAgICBjb25zdCBvcGVyYXRvclBhbmVsR3VpID0gdGhpcy5fb3BlcmF0b3JQYW5lbFxuICAgICAgY29uc3QgY29uZGl0aW9uID1cbiAgICAgICAgdHlwZSA9PT0gVE9LRU5TLlRPS0VOX1JBTkdFID8gIWZpbHRlciB8fCAhZmlsdGVyVG8gOiAhZmlsdGVyXG5cbiAgICAgIGlmIChjb25kaXRpb24pIHtcbiAgICAgICAgc2Vjb25kQ29uZGl0aW9uR3VpLmNsYXNzTGlzdC5hZGQoJ2FnLWhpZGRlbicpXG4gICAgICAgIG9wZXJhdG9yUGFuZWxHdWkuY2xhc3NMaXN0LmFkZCgnYWctaGlkZGVuJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlY29uZENvbmRpdGlvbkd1aS5jbGFzc0xpc3QucmVtb3ZlKCdhZy1oaWRkZW4nKVxuICAgICAgICBvcGVyYXRvclBhbmVsR3VpLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWhpZGRlbicpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5ub3RpZnkoSm9pbkNvbmRpdGlvblBhbmVsLk9OX0pPSU5fQ09ORElUSU9OX0NIQU5HRUQsIHRoaXMuc3RhdGUpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRlICB0aGUgb3B0aW9uIHN0YXRlXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX29uU2Vjb25kQ29uZGl0aW9uQ2hhbmdlZChzdGF0ZSkge1xuICAgIHRoaXMuc3RhdGUuY29uZGl0aW9uMiA9IHN0YXRlXG4gICAgdGhpcy5ub3RpZnkoSm9pbkNvbmRpdGlvblBhbmVsLk9OX0pPSU5fQ09ORElUSU9OX0NIQU5HRUQsIHRoaXMuc3RhdGUpXG4gIH1cbn1cblxuLyoqXG4gKiBEYXRlVGltZSBGaWx0ZXJcbiAqXG4gKiAjIyBPcHRpb25zXG4gKlxuICogfCBOYW1lICAgICAgICAgICAgICAgICAgXHR8IERlZmF1bHQgICAgIFx0fCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx0fDotLS0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgKipkYXRlVGltZUVuYWJsZVRpbWUqKiAgIHwgZmFsc2UgICAgfCBlbmFibGUgLyBkaXNhYmxlIHRpbWVcbiAqIHwgKipkYXRlVGltZUVuYWJsZTI0SFIqKiAgIHwgZmFsc2UgICAgfCBlbmFibGUgLyBkaXNhYmxlIHRpbWUgMjQgZm9ybWF0XG4gKiB8ICoqZGF0ZVRpbWVFbmFibGVTZWNvbmRzKiogICB8IGZhbHNlICAgIHwgZW5hYmxlIC8gZGlzYWJsZSBzZWNvbmRzIG1hbmFnZW1lbnRcbiAqIHwgKipkYXRlVGltZUVuYWJsZUNhbGVuZGFyKiogICB8IGZhbHNlICAgIHwgZW5hYmxlIC8gZGlzYWJsZSBDYWxlbmRhci5cbiAqIHwgKipkYXRlVGltZU1hc2sqKiAgIHwgZmFsc2UgICAgfCBUaGUgbWFzayB1c2VkIHRvIGZvcm1hdCB0aGUgc2VsZWN0ZWQgZGF0ZVxuICogfCAqKmRhdGVUaW1lTWF4KiogICB8IHVuZGVmaW5lZCAgICB8ICBNYXggYWxsb3dlZCBkYXRlXG4gKiB8ICoqZGF0ZVRpbWVNaW4qKiAgIHwgdW5kZWZpbmVkICAgIHwgIE1pbiBhbGxvd2VkIGRhdGVcbiAqIHwgKipkYXRlVGltZUZvcm1hdHRlcioqICAgfCB1bmRlZmluZWQgICAgfCAgQSBmdW5jdGlvbiBvciBleHByZXNzaW9uIHRvIGZvcm1hdCB0aGUgZGF0ZSAoQHNlZSBzdXBwb3J0ZWQgcGFyYW0pXG4gKiB8ICoqZGF0ZVRpbWVMb2NhbGUqKiAgIHwgU3lzdGVtIGRlZmF1bHQgICAgfCAgQSBsb2NhbGUgdG8gdXNlIGZvciBkYXRlIGZvcm1hdHRpbmdcbiAqIHwgKipkYXRlVGltZURlZmF1bHRIb3VyKiogICB8IDEyICAgIHwgIEluaXRpYWwgdmFsdWUgb2YgdGhlIGhvdXIgZWxlbWVudC5cbiAqIHwgKipkYXRlVGltZURlZmF1bHRNaW51dGUqKiAgIHwgMCAgICB8ICBJbml0aWFsIHZhbHVlIG9mIHRoZSBtaW51dGUgZWxlbWVudC5cbiAqIHwgKipkYXRlVGltZURpc2FibGVNb2JpbGUqKiAgIHwgZmFsc2UgICAgfCAgU2V0IGRpc2FibGVNb2JpbGUgdG8gdHJ1ZSB0byBhbHdheXMgdXNlIHRoZSBub24tbmF0aXZlIHBpY2tlci5cbiAqIHwgKipkYXRlVGltZUVuYWJsZVdlZWtOdW1iZXIqKiAgIHwgdHJ1ZSAgICB8ICBFbmFibGVzIGRpc3BsYXkgb2Ygd2VlayBudW1iZXJzIGluIGNhbGVuZGFyLlxuICogfCAqKmZpbHRlck9wdGlvbnMqKiAgIHwgRXF1YWxzLCBHcmVhdGVyIFRoYW4sIExlc3MgVGhhbiwgTm90IEVxdWFscywgSW4gUmFuZ2UuICAgIHwgIFdoYXQgRmlsdGVyIE9wdGlvbnMgdG8gcHJlc2VudCB0byB0aGUgdXNlci5cbiAqIHwgKipkZWZhdWx0T3B0aW9uKiogICB8IEVxdWFscyAgICB8ICBUaGUgZGVmYXVsdCBGaWx0ZXIgT3B0aW9ucyB0byBiZSBzZWxlY3RlZC5cbiAqIHwgKipzdXBwcmVzc0FuZE9yQ29uZGl0aW9uKiogICB8IGZhbHNlICAgIHwgIElmIHRydWUsIHRoZSBmaWx0ZXIgd2lsbCBvbmx5IG9mZmVyIENvbmRpdGlvbiAxLlxuICogfCAqKmluUmFuZ2VJbmNsdXNpdmUqKiAgIHwgZmFsc2UgICAgfCAgSWYgdHJ1ZSB0aGVuIGRvaW5nICdpblJhbmdlJyBmaWx0ZXIgb3B0aW9uIHdpbGwgaW5jbHVkZSB2YWx1ZXMgZXF1YWwgdG8gdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIHJhbmdlLlxuICogfCAqKmNsZWFyQnV0dG9uKiogICB8IGZhbHNlICAgIHwgIFNldCB0byB0cnVlIHRvIGhhdmUgdGhlIGZpbHRlciB1c2UgYSBDbGVhciBidXR0b24uIFRoZSBDbGVhciBidXR0b24gd2lsbCBjbGVhciB0aGUgKGZvcm0pIGRldGFpbHMgb2YgdGhlIGZpbHRlciB3aXRob3V0IHJlbW92aW5nIGFueSBhY3RpdmUgZmlsdGVycyBvbiB0aGUgY29sdW1uLlxuICogfCAqKmFwcGx5QnV0dG9uKiogICB8IGZhbHNlICAgIHwgIFNldCB0byB0cnVlIHRvIGhhdmUgdGhlIGZpbHRlciB1c2UgYW4gQXBwbHkgYnV0dG9uLiBJZiB0aGUgQXBwbHkgYnV0dG9uIGlzIHByZXNlbnQsIHRoZW4gdGhlIGZpbHRlciBpcyBvbmx5IGFwcGxpZWQgYWZ0ZXIgdGhlIHVzZXIgaGl0cyB0aGUgQXBwbHkgYnV0dG9uLlxuICogfCAqKnJlc2V0QnV0dG9uKiogICB8IGZhbHNlICAgIHwgIFNldCB0byB0cnVlIHRvIGhhdmUgdGhlIGZpbHRlciB1c2UgYSBSZXNldCBidXR0b24uIFRoZSBSZXNldCBidXR0b24gd2lsbCBjbGVhciB0aGUgZGV0YWlscyBvZiB0aGUgZmlsdGVyIGFuZCBhbnkgYWN0aXZlIGZpbHRlcnMgb24gdGhhdCBjb2x1bW4uXG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqL1xuY2xhc3MgRGF0ZVRpbWVGaWx0ZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogQHR5cGUge0pvaW59XG4gICAqL1xuICBfSm9pbkNvbmRpdGlvblBhbmVsID0gbmV3IEpvaW5Db25kaXRpb25QYW5lbCgpXG5cbiAgLyoqXG4gICAqIEpvaW4gcGFuZWwgc3RhdGVcbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIF9zdGF0ZSA9IHt9XG5cbiAgLyoqXG4gICAqIENvbXBvbmVudCBwYXJhbXNcbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIF9wYXJhbXMgPSB7fVxuXG4gIC8qKlxuICAgKiBBbiBvYmplY3Qgb2YgYWxsIHRoZSByZXF1aXJlZCBvcHRpb25zIGNhY2hlZCBmb3IgZG9lc0ZpbHRlclBhc3MgbWV0aG9kXG4gICAqL1xuICBfZG9lc0ZpbHRlclBhc3NPcHRpb25zID0gbnVsbFxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgQG92ZXJyaWRlXG4gIGluaXQocGFyYW1zKSB7XG4gICAgY29uc3QgdHJhbnNsYXRlID0gcGFyYW1zLmFwaS5ncmlkT3B0aW9uc1dyYXBwZXIuZ2V0TG9jYWxlVGV4dEZ1bmMoKVxuICAgIGNvbnN0IGlzQ2xlYXJGaWx0ZXIgPSB0aGlzLmdldE9wdGlvbignY2xlYXJCdXR0b24nLCBwYXJhbXMsIGZhbHNlKVxuICAgIGNvbnN0IGlzUmVzZXRCdXR0b24gPSB0aGlzLmdldE9wdGlvbigncmVzZXRCdXR0b24nLCBwYXJhbXMsIGZhbHNlKVxuICAgIGNvbnN0IGlzQXBwbHlCdXR0b24gPSB0aGlzLmdldE9wdGlvbignYXBwbHlCdXR0b24nLCBwYXJhbXMsIGZhbHNlKVxuXG4gICAgdGhpcy5fZ3VpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcblxuICAgIHRoaXMuX0pvaW5Db25kaXRpb25QYW5lbC5pbml0KHBhcmFtcylcbiAgICB0aGlzLl9Kb2luQ29uZGl0aW9uUGFuZWwub24oXG4gICAgICBKb2luQ29uZGl0aW9uUGFuZWwuT05fSk9JTl9DT05ESVRJT05fQ0hBTkdFRCxcbiAgICAgIHN0YXRlID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9fZGlzYWJsZVN0YXRlQ2hhbmdlTGlzdGVuZXIpIHtcbiAgICAgICAgICB0aGlzLl9vbkpvaW5Db25kaXRpb25QYW5lbFN0YXRlQ2hhbmdlZChzdGF0ZSwgaXNBcHBseUJ1dHRvbilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcblxuICAgIHRoaXMuX2d1aS5hcHBlbmRDaGlsZCh0aGlzLl9Kb2luQ29uZGl0aW9uUGFuZWwuZ2V0R3VpKCkpXG5cbiAgICBjb25zdCBhcHBseUZpbHRlclBhbmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICBhcHBseUZpbHRlclBhbmVsLmNsYXNzTmFtZSA9IGBhZy1maWx0ZXItYXBwbHktcGFuZWwgYWctaGlkZGVuYFxuICAgIGFwcGx5RmlsdGVyUGFuZWwuaW5uZXJIVE1MID0gLyogaHRtbCAqLyBgXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYWctc3RhbmRhcmQtYnV0dG9uIGFnLWZpbHRlci1hcHBseS1wYW5lbC1idXR0b24gY2xlYXIgJHshaXNDbGVhckZpbHRlciAmJlxuICAgICAgICAnYWctaGlkZGVuJ31cIiB0eXBlPVwiYnV0dG9uXCI+JHt0cmFuc2xhdGUoXG4gICAgICAnY2xlYXJGaWx0ZXInLFxuICAgICAgJ0NsZWFyIEZpbHRlcidcbiAgICApfTwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImFnLXN0YW5kYXJkLWJ1dHRvbiBhZy1maWx0ZXItYXBwbHktcGFuZWwtYnV0dG9uIHJlc2V0ICR7IWlzUmVzZXRCdXR0b24gJiZcbiAgICAgICAgJ2FnLWhpZGRlbid9XCIgdHlwZT1cImJ1dHRvblwiPiR7dHJhbnNsYXRlKFxuICAgICAgJ3Jlc2V0RmlsdGVyJyxcbiAgICAgICdSZXNldCBGaWx0ZXInXG4gICAgKX08L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJhZy1zdGFuZGFyZC1idXR0b24gYWctZmlsdGVyLWFwcGx5LXBhbmVsLWJ1dHRvbiBhcHBseSAkeyFpc0FwcGx5QnV0dG9uICYmXG4gICAgICAgICdhZy1oaWRkZW4nfVwiIHR5cGU9XCJidXR0b25cIj4ke3RyYW5zbGF0ZShcbiAgICAgICdhcHBseUZpbHRlcicsXG4gICAgICAnQXBwbHkgRmlsdGVyJ1xuICAgICl9PC9idXR0b24+XG4gICAgYFxuXG4gICAgaWYgKGlzQ2xlYXJGaWx0ZXIgfHwgaXNSZXNldEJ1dHRvbiB8fCBpc0FwcGx5QnV0dG9uKSB7XG4gICAgICBhcHBseUZpbHRlclBhbmVsLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWhpZGRlbicpXG4gICAgfVxuXG4gICAgYXBwbHlGaWx0ZXJQYW5lbC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2NsaWNrJyxcbiAgICAgIHRoaXMuX0FwcGx5RmlsdGVyUGFuZWxCdXR0b25DbGlja1xuICAgIClcblxuICAgIHRoaXMuX2d1aS5hcHBlbmRDaGlsZChhcHBseUZpbHRlclBhbmVsKVxuXG4gICAgdGhpcy5fc3RhdGUgPSB0aGlzLl9Kb2luQ29uZGl0aW9uUGFuZWwuc3RhdGVcbiAgICB0aGlzLl9wYXJhbXMgPSBwYXJhbXNcblxuICAgIHRoaXMuX2RvZXNGaWx0ZXJQYXNzT3B0aW9ucyA9IHtcbiAgICAgIGVuYWJsZVRpbWU6IHRoaXMuZ2V0T3B0aW9uKCdkYXRlVGltZUVuYWJsZVRpbWUnLCB0aGlzLl9wYXJhbXMsIHRydWUpLFxuICAgICAgaW5SYW5nZUluY2x1c2l2ZTogdGhpcy5nZXRPcHRpb24oJ2luUmFuZ2VJbmNsdXNpdmUnLCB0aGlzLl9wYXJhbXMsIGZhbHNlKSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgIHZhbHVlR2V0dGVyOiB0aGlzLl9wYXJhbXMuaGFzT3duUHJvcGVydHkoJ2ZpbHRlclZhbHVlR2V0dGVyJylcbiAgICAgICAgPyB0aGlzLl9wYXJhbXMuZmlsdGVyVmFsdWVHZXR0ZXJcbiAgICAgICAgOiB0aGlzLl9wYXJhbXMudmFsdWVHZXR0ZXIsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLl9Kb2luQ29uZGl0aW9uUGFuZWwuZGVzdHJveSgpXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBzZWxlY3RlZCBmaWx0ZXIgbWF0Y2hlcyB0aGUgcGFzc2VkIGNlbGwgZGF0YVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgd2hlbiBwYXNzLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGRvZXNGaWx0ZXJQYXNzKHBhcmFtcykge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZG9lc0ZpbHRlclBhc3NPcHRpb25zLnZhbHVlR2V0dGVyKHBhcmFtcylcbiAgICBjb25zdCB7IGNvbmRpdGlvbjEsIGNvbmRpdGlvbjIsIG9wZXJhdG9yIH0gPSB0aGlzLl9zdGF0ZVxuICAgIGNvbnN0IGRvZXNQYXNzRmlyc3RDb25kaXRpb24gPSB0aGlzLl9kb2VzUGFzc0NvbmRpdGlvbihjb25kaXRpb24xLCB2YWx1ZSlcbiAgICBjb25zdCBkb2VzUGFzc1NlY29uZENvbmRpdGlvbiA9IHRoaXMuX2RvZXNQYXNzQ29uZGl0aW9uKGNvbmRpdGlvbjIsIHZhbHVlKVxuXG4gICAgcmV0dXJuIG9wZXJhdG9yID09PSBUT0tFTlMuVE9LRU5fT1JcbiAgICAgID8gZG9lc1Bhc3NGaXJzdENvbmRpdGlvbiB8fCBkb2VzUGFzc1NlY29uZENvbmRpdGlvblxuICAgICAgOiBkb2VzUGFzc0ZpcnN0Q29uZGl0aW9uICYmIGRvZXNQYXNzU2Vjb25kQ29uZGl0aW9uXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciB0aGUgY29tcG9uZW50IGlzIGFwcGx5aW5nIGFueSBmaWx0ZXIgb24gdGhlIGNvbHVtblxuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufVxuICAgKiovXG4gIGlzRmlsdGVyQWN0aXZlKCkge1xuICAgIGNvbnN0IHsgY29uZGl0aW9uMSB9ID0gdGhpcy5fc3RhdGVcblxuICAgIGlmIChjb25kaXRpb24xICYmIGNvbmRpdGlvbjEuZmlsdGVyKSB7XG4gICAgICBpZiAoY29uZGl0aW9uMS5maWx0ZXJUbyAmJiBjb25kaXRpb24xLnR5cGUgPT09IFRPS0VOUy5UT0tFTl9SQU5HRSkge1xuICAgICAgICByZXR1cm4gY29uZGl0aW9uMS5maWx0ZXIgIT09IG51bGwgJiYgY29uZGl0aW9uMS5maWx0ZXJUbyAhPT0gbnVsbFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29uZGl0aW9uMS5maWx0ZXIgIT09IG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBmaWx0ZXIgc3RhdGUuIElmIGZpbHRlciBpcyBub3QgYWN0aXZlLCB0aGVuIHNob3VsZCByZXR1cm4gbnVsbC91bmRlZmluZWQuXG4gICAqIFRoZSBncmlkIGNhbGxzIGdldE1vZGVsKCkgb24gYWxsIGFjdGl2ZSBmaWx0ZXJzIHdoZW4gZ3JpZEFwaS5nZXRGaWx0ZXJNb2RlbCgpIGlzIGNhbGxlZC5cbiAgICpcbiAgICogQHJldHVybiBPYmplY3QgfCBudWxsIHRoZSBmaWx0ZXIgc3RhdGVcbiAgICovXG4gIGdldE1vZGVsKCkge1xuICAgIGNvbnN0IGNsb25lID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLl9zdGF0ZSkpXG4gICAgO1tjbG9uZS5jb25kaXRpb24xLCBjbG9uZS5jb25kaXRpb24yXS5mb3JFYWNoKChjb25kaXRpb24sIGkpID0+IHtcbiAgICAgIGlmIChjb25kaXRpb24uZmlsdGVyKSB7XG4gICAgICAgIGNvbmRpdGlvbi5maWx0ZXIgPSB0aGlzLl9zdGF0ZVtgY29uZGl0aW9uJHtpICsgMX1gXS5maWx0ZXIudG9JU09TdHJpbmcoKVxuICAgICAgfVxuICAgICAgaWYgKGNvbmRpdGlvbi5maWx0ZXJUbykge1xuICAgICAgICBjb25kaXRpb24uZmlsdGVyVG8gPSB0aGlzLl9zdGF0ZVtcbiAgICAgICAgICBgY29uZGl0aW9uJHtpICsgMX1gXG4gICAgICAgIF0uZmlsdGVyVG8udG9JU09TdHJpbmcoKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBjbG9uZS5maWx0ZXJUeXBlID0gJ2RhdGV0aW1lJ1xuICAgIGNsb25lLmNvbmRpdGlvbjEuZmlsdGVyVHlwZSA9ICdkYXRldGltZSdcbiAgICBjbG9uZS5jb25kaXRpb24yLmZpbHRlclR5cGUgPSAnZGF0ZXRpbWUnXG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgcmV0dXJuIGNsb25lLmhhc093blByb3BlcnR5KCdjb25kaXRpb24yJykgJiZcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgIGNsb25lLmNvbmRpdGlvbjIuaGFzT3duUHJvcGVydHkoJ2ZpbHRlcicpICYmXG4gICAgICBjbG9uZS5jb25kaXRpb24yLmZpbHRlclxuICAgICAgPyBjbG9uZVxuICAgICAgOiBjbG9uZS5jb25kaXRpb24xXG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZXMgdGhlIGZpbHRlciBzdGF0ZS4gQ2FsbGVkIGJ5IHRoZSBncmlkIGFmdGVyIGdyaWRBcGkuc2V0RmlsdGVyTW9kZWwobW9kZWwpIGlzIGNhbGxlZC5cbiAgICogVGhlIGdyaWQgd2lsbCBwYXNzIHVuZGVmaW5lZC9udWxsIHRvIGNsZWFyIHRoZSBmaWx0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVsbH0gbW9kZWxcbiAgICovXG4gIHNldE1vZGVsKG1vZGVsKSB7XG4gICAgaWYgKFxuICAgICAgbW9kZWwgJiZcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICFtb2RlbC5oYXNPd25Qcm9wZXJ0eSgnY29uZGl0aW9uMScpICYmXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICAhbW9kZWwuaGFzT3duUHJvcGVydHkoJ2NvbmRpdGlvbjInKVxuICAgICkge1xuICAgICAgbW9kZWwgPSB7XG4gICAgICAgIGNvbmRpdGlvbjE6IG1vZGVsLFxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9fZGlzYWJsZVN0YXRlQ2hhbmdlTGlzdGVuZXIgPSB0cnVlXG4gICAgdGhpcy5fSm9pbkNvbmRpdGlvblBhbmVsLnNldFN0YXRlKG1vZGVsKVxuICAgIHRoaXMuX19kaXNhYmxlU3RhdGVDaGFuZ2VMaXN0ZW5lciA9IGZhbHNlXG5cbiAgICB0aGlzLl9zdGF0ZSA9IHRoaXMuX0pvaW5Db25kaXRpb25QYW5lbC5zdGF0ZVxuICAgIDtbdGhpcy5fc3RhdGUuY29uZGl0aW9uMSwgdGhpcy5fc3RhdGUuY29uZGl0aW9uMl0uZm9yRWFjaChjb25kaXRpb24gPT4ge1xuICAgICAgaWYgKGNvbmRpdGlvbi5maWx0ZXIpIHtcbiAgICAgICAgY29uZGl0aW9uLmZpbHRlciA9IG5ldyBEYXRlKGNvbmRpdGlvbi5maWx0ZXIpXG4gICAgICB9XG4gICAgICBpZiAoY29uZGl0aW9uLmZpbHRlclRvKSB7XG4gICAgICAgIGNvbmRpdGlvbi5maWx0ZXJUbyA9IG5ldyBEYXRlKGNvbmRpdGlvbi5maWx0ZXJUbylcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZmlsdGVyIG1vZGVsIGFzIHBsYWluIHN0cmluZyB0byBkaXNwbGF5IGluIHRoZSBmbG9hdGluZyBmaWx0ZXIgaW5wdXRcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3QgfCBudWxsfSBtb2RlbFxuICAgKi9cbiAgZ2V0TW9kZWxBc1N0cmluZyhtb2RlbCkge1xuICAgIGlmICghbW9kZWwpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGVUaW1lTWFzayA9IHRoaXMuZ2V0T3B0aW9uKFxuICAgICAgJ2RhdGVUaW1lTWFzaycsXG4gICAgICB0aGlzLl9wYXJhbXMsXG4gICAgICAvLyBAdG9kbyBGaW5kIGEgYmV0dGVyIHdheSBmb3IgdGhpc1xuICAgICAgdGhpcy5fSm9pbkNvbmRpdGlvblBhbmVsLl9maXJzdENvbmRpdGlvblBhbmVsLl9maWx0ZXJUaW1lSW5wdXQucGlja2VyXG4gICAgICAgIC5jb25maWdbJ2RhdGVGb3JtYXQnXVxuICAgIClcbiAgICBjb25zdCBsb2NhbGUgPSB0aGlzLmdldE9wdGlvbihcbiAgICAgICdkYXRlVGltZUxvY2FsZScsXG4gICAgICB0aGlzLl9wYXJhbXMsXG4gICAgICBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlIHx8ICdlbi1VUydcbiAgICApXG5cbiAgICBjb25zdCB7IGNvbmRpdGlvbjEsIGNvbmRpdGlvbjIsIG9wZXJhdG9yIH0gPSBKU09OLnBhcnNlKFxuICAgICAgSlNPTi5zdHJpbmdpZnkobW9kZWwpXG4gICAgKVxuXG4gICAgO1tjb25kaXRpb24xLCBjb25kaXRpb24yXS5mb3JFYWNoKGNvbmRpdGlvbiA9PiB7XG4gICAgICBpZiAoY29uZGl0aW9uLmZpbHRlcikge1xuICAgICAgICBjb25kaXRpb24uZmlsdGVyID0gQkJqLk1hc2tzLkRhdGVNYXNrLm1hc2soXG4gICAgICAgICAgY29uZGl0aW9uLmZpbHRlcixcbiAgICAgICAgICBkYXRlVGltZU1hc2ssXG4gICAgICAgICAgbG9jYWxlXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmRpdGlvbi5maWx0ZXJUbykge1xuICAgICAgICBjb25kaXRpb24uZmlsdGVyVG8gPSBCQmouTWFza3MuRGF0ZU1hc2subWFzayhcbiAgICAgICAgICBjb25kaXRpb24uZmlsdGVyVG8sXG4gICAgICAgICAgZGF0ZVRpbWVNYXNrLFxuICAgICAgICAgIGxvY2FsZVxuICAgICAgICApXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNvbnN0IGZpcnN0Q29uZGl0aW9uQXNTdHJpbmcgPSBgJHtjb25kaXRpb24xLmZpbHRlciB8fCAnJ30gJHtcbiAgICAgIGNvbmRpdGlvbjEuZmlsdGVyVG8gPyAn4oaSICcgKyBjb25kaXRpb24xLmZpbHRlclRvIDogJydcbiAgICB9YFxuICAgIGNvbnN0IHNlY29uZENvbmRpdGlvbkFzU3RyaW5nID0gYCR7Y29uZGl0aW9uMi5maWx0ZXIgfHwgJyd9ICR7XG4gICAgICBjb25kaXRpb24yLmZpbHRlclRvID8gJ+KGkiAnICsgY29uZGl0aW9uMi5maWx0ZXJUbyA6ICcnXG4gICAgfWBcbiAgICBjb25zdCBvcGVyYXRvckFzU3RyaW5nID0gYCR7Y29uZGl0aW9uMi5maWx0ZXIgJiYgb3BlcmF0b3IgPyBvcGVyYXRvciA6ICcnfWBcblxuICAgIHJldHVybiBgJHtmaXJzdENvbmRpdGlvbkFzU3RyaW5nfSAke29wZXJhdG9yQXNTdHJpbmd9ICR7c2Vjb25kQ29uZGl0aW9uQXNTdHJpbmd9YC50cmltKClcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gdmFsdWUgcGFzc2VzIHRoZSBmaWx0ZXIgZGVmaW5lZCBpbiB0aGUgcGFzc2VkIENvbmRpdGlvblBhbmVsJ3Mgc3RhdGVcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmRpdGlvbiBjb25kaXRpb24gcGFuZWwgc3RhdGVcbiAgICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlIGNlbGwgdmFsdWVcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSB3aGVuIHBhc3MsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgX2RvZXNQYXNzQ29uZGl0aW9uKGNvbmRpdGlvbiwgdmFsdWUpIHtcbiAgICBpZiAoIWNvbmRpdGlvbi5maWx0ZXIgfHwgIXZhbHVlKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBjb25zdCB7IGZpbHRlciwgZmlsdGVyVG8sIHR5cGUgfSA9IGNvbmRpdGlvblxuICAgIGNvbnN0IHRpbWV6b25lID0gQkJqLk1hc2tzLlV0aWxzLkRhdGVzLmdldFRpbWV6b25lT3JPZmZzZXQoKVxuICAgIGNvbnN0IGluUmFuZ2VJbmNsdXNpdmUgPSB0aGlzLl9kb2VzRmlsdGVyUGFzc09wdGlvbnMuaW5SYW5nZUluY2x1c2l2ZVxuICAgIGNvbnN0IGVuYWJsZVRpbWUgPSB0aGlzLl9kb2VzRmlsdGVyUGFzc09wdGlvbnMuZW5hYmxlVGltZVxuICAgIGxldCBwYXNzZWQgPSBmYWxzZVxuXG4gICAgaWYgKEJCai5NYXNrcy5VdGlscy5EYXRlcy5JU19USU1FX1JFR0VYLnRlc3QodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlID0gQkJqLk1hc2tzLlV0aWxzLkRhdGVzLmZpeFNob3J0SVNPKHZhbHVlKVxuICAgICAgO1tmaWx0ZXIsIGZpbHRlclRvXS5mb3JFYWNoKGRhdGUgPT4ge1xuICAgICAgICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICBkYXRlLnNldEZ1bGxZZWFyKDE5NzApXG4gICAgICAgICAgZGF0ZS5zZXRNb250aCgwKVxuICAgICAgICAgIGRhdGUuc2V0RGF0ZSgxKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoQkJqLk1hc2tzLlV0aWxzLkRhdGVzLklTX0RBVEVfUkVHRVgudGVzdCh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gQkJqLk1hc2tzLlV0aWxzLkRhdGVzLmZpeFNob3J0SVNPKHZhbHVlKVxuICAgIH1cblxuICAgIC8vIGNvbnZlcnQgdGhlIGRhdGV0aW1lIGZyb20gdXRjIHRvIGxvY2FsZVxuICAgIHZhbHVlID0gdXRjVG9ab25lZFRpbWUodmFsdWUsIHRpbWV6b25lKVxuICAgIC8vIGZpcnN0RGF0ZSA9IGZpcnN0RGF0ZSA/IHpvbmVkVGltZVRvVXRjKGZpcnN0RGF0ZSAsIHRpbWV6b25lKSA6IGZpcnN0RGF0ZVxuICAgIC8vIHNlY29uZERhdGUgPSBzZWNvbmREYXRlID8gem9uZWRUaW1lVG9VdGMoc2Vjb25kRGF0ZSAsIHRpbWV6b25lKSA6IHNlY29uZERhdGVcblxuICAgIGlmICghZW5hYmxlVGltZSkge1xuICAgICAgLy8gcmVtb3ZlIHRoZSB0aW1lIHBvcnRpb24gZnJvbSB0aGUgZGF0ZVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dHJhLXNlbWlcbiAgICAgIDtbdmFsdWUsIGZpbHRlciwgZmlsdGVyVG9dLmZvckVhY2goZGF0ZSA9PiB7XG4gICAgICAgIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgIGRhdGUuc2V0SG91cnMoMClcbiAgICAgICAgICBkYXRlLnNldE1pbnV0ZXMoMClcbiAgICAgICAgICBkYXRlLnNldFNlY29uZHMoMClcbiAgICAgICAgICBkYXRlLnNldE1pbGxpc2Vjb25kcygwKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0eXBlID09PSBUT0tFTlMuVE9LRU5fRVFVQUwpIHtcbiAgICAgIHBhc3NlZCA9IGZpbHRlciA+IHZhbHVlID09PSBmYWxzZSAmJiBmaWx0ZXIgPCB2YWx1ZSA9PSBmYWxzZVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVE9LRU5TLlRPS0VOX05PVF9FUVVBTCkge1xuICAgICAgcGFzc2VkID0gIShmaWx0ZXIgPiB2YWx1ZSA9PT0gZmFsc2UgJiYgZmlsdGVyIDwgdmFsdWUgPT0gZmFsc2UpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBUT0tFTlMuVE9LRU5fR1JFQVRFUikge1xuICAgICAgcGFzc2VkID0gZmlsdGVyIDwgdmFsdWVcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRPS0VOUy5UT0tFTl9MRVNTKSB7XG4gICAgICBwYXNzZWQgPSBmaWx0ZXIgPiB2YWx1ZVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVE9LRU5TLlRPS0VOX1JBTkdFICYmIGZpbHRlclRvKSB7XG4gICAgICBpZiAoaW5SYW5nZUluY2x1c2l2ZSkge1xuICAgICAgICBwYXNzZWQgPVxuICAgICAgICAgICgoZmlsdGVyIDwgdmFsdWUgfHxcbiAgICAgICAgICAgIChmaWx0ZXIgPiB2YWx1ZSA9PT0gZmFsc2UgJiYgZmlsdGVyIDwgdmFsdWUgPT0gZmFsc2UpKSAmJlxuICAgICAgICAgICAgZmlsdGVyVG8gPiB2YWx1ZSkgfHxcbiAgICAgICAgICAoZmlsdGVyVG8gPiB2YWx1ZSA9PT0gZmFsc2UgJiYgZmlsdGVyVG8gPCB2YWx1ZSA9PSBmYWxzZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhc3NlZCA9IGZpbHRlciA8IHZhbHVlICYmIGZpbHRlclRvID4gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGFzc2VkXG4gIH1cblxuICAvKipcbiAgICogTGlzdCB0byBjbGljayBidXR0b24gZXZlbnQgb24gdGhlIGZpbHRlciBwYW5lbCBhbmQgZXhlY3V0ZSB0aGVcbiAgICogcmlnaHQgYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGVcbiAgICovXG4gIEBhdXRvYmluZFxuICBfQXBwbHlGaWx0ZXJQYW5lbEJ1dHRvbkNsaWNrKGUpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldFxuXG4gICAgaWYgKHRhcmdldC5ub2RlTmFtZSA9PT0gJ0JVVFRPTicpIHtcbiAgICAgIGlmICh0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdyZXNldCcpKSB7XG4gICAgICAgIHRoaXMuX0pvaW5Db25kaXRpb25QYW5lbC5yZXNldCgpXG4gICAgICAgIHRoaXMuX3BhcmFtcy5maWx0ZXJDaGFuZ2VkQ2FsbGJhY2soKVxuICAgICAgfSBlbHNlIGlmICh0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdjbGVhcicpKSB7XG4gICAgICAgIHRoaXMuX0pvaW5Db25kaXRpb25QYW5lbC5yZXNldCgpXG4gICAgICB9IGVsc2UgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2FwcGx5JykpIHtcbiAgICAgICAgdGhpcy5fcGFyYW1zLmZpbHRlckNoYW5nZWRDYWxsYmFjaygpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgZmlsdGVyIHN0YXRlIGFuZCBBcHBseSB0aGUgZmlsdGVyIGRlcGVuZGluZyBvblxuICAgKiB3aGV0aGVyIHRoZSBgaXNBcHBseUJ1dHRvbkFjdGl2ZWAgaXMgdHJ1ZSBvciBmYWxzZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAgICogQHBhcmFtIHtCb29sZWFufSBpc0FwcGx5QnV0dG9uQWN0aXZlXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX29uSm9pbkNvbmRpdGlvblBhbmVsU3RhdGVDaGFuZ2VkKHN0YXRlLCBpc0FwcGx5QnV0dG9uQWN0aXZlKSB7XG4gICAgdGhpcy5fc3RhdGUgPSBzdGF0ZVxuICAgIGlmIChmYWxzZSA9PT0gaXNBcHBseUJ1dHRvbkFjdGl2ZSkge1xuICAgICAgdGhpcy5fcGFyYW1zLmZpbHRlckNoYW5nZWRDYWxsYmFjaygpXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERhdGVUaW1lRmlsdGVyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvRGF0ZVRpbWVGaWx0ZXIvRGF0ZVRpbWVGaWx0ZXIuanMiLCIvKipcbiAqIFJldHVybnMgdGhlIFt5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZHNdIHRva2VucyBvZiB0aGUgcHJvdmlkZWRcbiAqIGBkYXRlYCBhcyBpdCB3aWxsIGJlIHJlbmRlcmVkIGluIHRoZSBgdGltZVpvbmVgLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0elRva2VuaXplRGF0ZShkYXRlLCB0aW1lWm9uZSkge1xuICB2YXIgZHRmID0gZ2V0RGF0ZVRpbWVGb3JtYXQodGltZVpvbmUpXG4gIHJldHVybiBkdGYuZm9ybWF0VG9QYXJ0cyA/IHBhcnRzT2Zmc2V0KGR0ZiwgZGF0ZSkgOiBoYWNreU9mZnNldChkdGYsIGRhdGUpXG59XG5cbnZhciB0eXBlVG9Qb3MgPSB7XG4gIHllYXI6IDAsXG4gIG1vbnRoOiAxLFxuICBkYXk6IDIsXG4gIGhvdXI6IDMsXG4gIG1pbnV0ZTogNCxcbiAgc2Vjb25kOiA1XG59XG5cbmZ1bmN0aW9uIHBhcnRzT2Zmc2V0KGR0ZiwgZGF0ZSkge1xuICB2YXIgZm9ybWF0dGVkID0gZHRmLmZvcm1hdFRvUGFydHMoZGF0ZSlcbiAgdmFyIGZpbGxlZCA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZm9ybWF0dGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHBvcyA9IHR5cGVUb1Bvc1tmb3JtYXR0ZWRbaV0udHlwZV1cblxuICAgIGlmIChwb3MgPj0gMCkge1xuICAgICAgZmlsbGVkW3Bvc10gPSBwYXJzZUludChmb3JtYXR0ZWRbaV0udmFsdWUsIDEwKVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmlsbGVkXG59XG5cbmZ1bmN0aW9uIGhhY2t5T2Zmc2V0KGR0ZiwgZGF0ZSkge1xuICB2YXIgZm9ybWF0dGVkID0gZHRmLmZvcm1hdChkYXRlKS5yZXBsYWNlKC9cXHUyMDBFL2csICcnKVxuICB2YXIgcGFyc2VkID0gLyhcXGQrKVxcLyhcXGQrKVxcLyhcXGQrKSw/IChcXGQrKTooXFxkKyk6KFxcZCspLy5leGVjKGZvcm1hdHRlZClcbiAgLy8gdmFyIFssIGZNb250aCwgZkRheSwgZlllYXIsIGZIb3VyLCBmTWludXRlLCBmU2Vjb25kXSA9IHBhcnNlZFxuICAvLyByZXR1cm4gW2ZZZWFyLCBmTW9udGgsIGZEYXksIGZIb3VyLCBmTWludXRlLCBmU2Vjb25kXVxuICByZXR1cm4gW3BhcnNlZFszXSwgcGFyc2VkWzFdLCBwYXJzZWRbMl0sIHBhcnNlZFs0XSwgcGFyc2VkWzVdLCBwYXJzZWRbNl1dXG59XG5cbi8vIEdldCBhIGNhY2hlZCBJbnRsLkRhdGVUaW1lRm9ybWF0IGluc3RhbmNlIGZvciB0aGUgSUFOQSBgdGltZVpvbmVgLiBUaGlzIGNhbiBiZSB1c2VkXG4vLyB0byBnZXQgZGV0ZXJtaW5pc3RpYyBsb2NhbCBkYXRlL3RpbWUgb3V0cHV0IGFjY29yZGluZyB0byB0aGUgYGVuLVVTYCBsb2NhbGUgd2hpY2hcbi8vIGNhbiBiZSB1c2VkIHRvIGV4dHJhY3QgbG9jYWwgdGltZSBwYXJ0cyBhcyBuZWNlc3NhcnkuXG52YXIgZHRmQ2FjaGUgPSB7fVxuZnVuY3Rpb24gZ2V0RGF0ZVRpbWVGb3JtYXQodGltZVpvbmUpIHtcbiAgaWYgKCFkdGZDYWNoZVt0aW1lWm9uZV0pIHtcbiAgICAvLyBOZXcgYnJvd3NlcnMgdXNlIGBob3VyQ3ljbGVgLCBJRSBhbmQgQ2hyb21lIDw3MyBkb2VzIG5vdCBzdXBwb3J0IGl0IGFuZCB1c2VzIGBob3VyMTJgXG4gICAgdmFyIHRlc3REYXRlRm9ybWF0dGVkID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoJ2VuLVVTJywge1xuICAgICAgaG91cjEyOiBmYWxzZSxcbiAgICAgIHRpbWVab25lOiAnQW1lcmljYS9OZXdfWW9yaycsXG4gICAgICB5ZWFyOiAnbnVtZXJpYycsXG4gICAgICBtb250aDogJzItZGlnaXQnLFxuICAgICAgZGF5OiAnMi1kaWdpdCcsXG4gICAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgIHNlY29uZDogJzItZGlnaXQnXG4gICAgfSkuZm9ybWF0KG5ldyBEYXRlKCcyMDE0LTA2LTI1VDA0OjAwOjAwLjEyM1onKSlcbiAgICB2YXIgaG91ckN5Y2xlU3VwcG9ydGVkID1cbiAgICAgIHRlc3REYXRlRm9ybWF0dGVkID09PSAnMDYvMjUvMjAxNCwgMDA6MDA6MDAnIHx8XG4gICAgICB0ZXN0RGF0ZUZvcm1hdHRlZCA9PT0gJ+KAjjA24oCOL+KAjjI14oCOL+KAjjIwMTTigI4g4oCOMDDigI464oCOMDDigI464oCOMDAnXG5cbiAgICBkdGZDYWNoZVt0aW1lWm9uZV0gPSBob3VyQ3ljbGVTdXBwb3J0ZWRcbiAgICAgID8gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoJ2VuLVVTJywge1xuICAgICAgICAgIGhvdXIxMjogZmFsc2UsXG4gICAgICAgICAgdGltZVpvbmU6IHRpbWVab25lLFxuICAgICAgICAgIHllYXI6ICdudW1lcmljJyxcbiAgICAgICAgICBtb250aDogJzItZGlnaXQnLFxuICAgICAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBzZWNvbmQ6ICcyLWRpZ2l0J1xuICAgICAgICB9KVxuICAgICAgOiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCgnZW4tVVMnLCB7XG4gICAgICAgICAgaG91ckN5Y2xlOiAnaDIzJyxcbiAgICAgICAgICB0aW1lWm9uZTogdGltZVpvbmUsXG4gICAgICAgICAgeWVhcjogJ251bWVyaWMnLFxuICAgICAgICAgIG1vbnRoOiAnMi1kaWdpdCcsXG4gICAgICAgICAgZGF5OiAnMi1kaWdpdCcsXG4gICAgICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgICAgIHNlY29uZDogJzItZGlnaXQnXG4gICAgICAgIH0pXG4gIH1cbiAgcmV0dXJuIGR0ZkNhY2hlW3RpbWVab25lXVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zLXR6L2VzbS9fbGliL3R6VG9rZW5pemVEYXRlL2luZGV4LmpzIiwiaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qcyc7XG5pbXBvcnQgYWRkTWlsbGlzZWNvbmRzIGZyb20gJy4uL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyc7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gJy4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzJztcbi8qKlxuICogQG5hbWUgc3ViTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiAjIyMgdjIuMC4wIGJyZWFraW5nIGNoYW5nZXM6XG4gKlxuICogLSBbQ2hhbmdlcyB0aGF0IGFyZSBjb21tb24gZm9yIHRoZSB3aG9sZSBsaWJyYXJ5XShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjQ29tbW9uLUNoYW5nZXMpLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgc3VidHJhY3RlZC4gUG9zaXRpdmUgZGVjaW1hbHMgd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmZsb29yYCwgZGVjaW1hbHMgbGVzcyB0aGFuIHplcm8gd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmNlaWxgLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBtaWxsaXNlY29uZHMgc3VidHJhY3RlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdWJ0cmFjdCA3NTAgbWlsbGlzZWNvbmRzIGZyb20gMTAgSnVseSAyMDE0IDEyOjQ1OjMwLjAwMDpcbiAqIHZhciByZXN1bHQgPSBzdWJNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NToyOS4yNTBcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdWJNaWxsaXNlY29uZHMoZGlydHlEYXRlLCBkaXJ0eUFtb3VudCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGFtb3VudCA9IHRvSW50ZWdlcihkaXJ0eUFtb3VudCk7XG4gIHJldHVybiBhZGRNaWxsaXNlY29uZHMoZGlydHlEYXRlLCAtYW1vdW50KTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsImltcG9ydCB0b0ludGVnZXIgZnJvbSAnLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanMnO1xuaW1wb3J0IHRvRGF0ZSBmcm9tICcuLi90b0RhdGUvaW5kZXguanMnO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tICcuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyc7XG4vKipcbiAqIEBuYW1lIGFkZE1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byBiZSBhZGRlZC4gUG9zaXRpdmUgZGVjaW1hbHMgd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmZsb29yYCwgZGVjaW1hbHMgbGVzcyB0aGFuIHplcm8gd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmNlaWxgLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBtaWxsaXNlY29uZHMgYWRkZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQWRkIDc1MCBtaWxsaXNlY29uZHMgdG8gMTAgSnVseSAyMDE0IDEyOjQ1OjMwLjAwMDpcbiAqIHZhciByZXN1bHQgPSBhZGRNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NTozMC43NTBcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRNaWxsaXNlY29uZHMoZGlydHlEYXRlLCBkaXJ0eUFtb3VudCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIHRpbWVzdGFtcCA9IHRvRGF0ZShkaXJ0eURhdGUpLmdldFRpbWUoKTtcbiAgdmFyIGFtb3VudCA9IHRvSW50ZWdlcihkaXJ0eUFtb3VudCk7XG4gIHJldHVybiBuZXcgRGF0ZSh0aW1lc3RhbXAgKyBhbW91bnQpO1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vYWRkTWlsbGlzZWNvbmRzL2luZGV4LmpzIiwiaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tICcuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyc7XG4vKipcbiAqIEBuYW1lIHRvRGF0ZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgaXRzIGNsb25lLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhIG51bWJlciwgaXQgaXMgdHJlYXRlZCBhcyBhIHRpbWVzdGFtcC5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgbm9uZSBvZiB0aGUgYWJvdmUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiAqKk5vdGUqKjogKmFsbCogRGF0ZSBhcmd1bWVudHMgcGFzc2VkIHRvIGFueSAqZGF0ZS1mbnMqIGZ1bmN0aW9uIGlzIHByb2Nlc3NlZCBieSBgdG9EYXRlYC5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBhcmd1bWVudCAtIHRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHBhcnNlZCBkYXRlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDbG9uZSB0aGUgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZShuZXcgRGF0ZSgyMDE0LCAxLCAxMSwgMTEsIDMwLCAzMCkpXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IHRoZSB0aW1lc3RhbXAgdG8gZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZSgxMzkyMDk4NDMwMDAwKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBhcmdTdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpOyAvLyBDbG9uZSB0aGUgZGF0ZVxuXG4gIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHwgdHlwZW9mIGFyZ3VtZW50ID09PSAnb2JqZWN0JyAmJiBhcmdTdHIgPT09ICdbb2JqZWN0IERhdGVdJykge1xuICAgIC8vIFByZXZlbnQgdGhlIGRhdGUgdG8gbG9zZSB0aGUgbWlsbGlzZWNvbmRzIHdoZW4gcGFzc2VkIHRvIG5ldyBEYXRlKCkgaW4gSUUxMFxuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudC5nZXRUaW1lKCkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ251bWJlcicgfHwgYXJnU3RyID09PSAnW29iamVjdCBOdW1iZXJdJykge1xuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCh0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IGFyZ1N0ciA9PT0gJ1tvYmplY3QgU3RyaW5nXScpICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcIlN0YXJ0aW5nIHdpdGggdjIuMC4wLWJldGEuMSBkYXRlLWZucyBkb2Vzbid0IGFjY2VwdCBzdHJpbmdzIGFzIGFyZ3VtZW50cy4gUGxlYXNlIHVzZSBgcGFyc2VJU09gIHRvIHBhcnNlIHN0cmluZ3MuIFNlZTogaHR0cHM6Ly9naXQuaW8vZmp1bGVcIik7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG5cbiAgICAgIGNvbnNvbGUud2FybihuZXcgRXJyb3IoKS5zdGFjayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gIH1cbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsImltcG9ydCB0b0ludGVnZXIgZnJvbSAnZGF0ZS1mbnMvZXNtL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzJ1xuaW1wb3J0IGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMgZnJvbSAnZGF0ZS1mbnMvZXNtL19saWIvZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcy9pbmRleC5qcydcbmltcG9ydCB0elBhcnNlVGltZXpvbmUgZnJvbSAnLi4vX2xpYi90elBhcnNlVGltZXpvbmUnXG5cbnZhciBNSUxMSVNFQ09ORFNfSU5fSE9VUiA9IDM2MDAwMDBcbnZhciBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFID0gNjAwMDBcbnZhciBERUZBVUxUX0FERElUSU9OQUxfRElHSVRTID0gMlxuXG52YXIgcGF0dGVybnMgPSB7XG4gIGRhdGVUaW1lRGVsaW1ldGVyOiAvW1QgXS8sXG4gIHBsYWluVGltZTogLzovLFxuICB0aW1lWm9uZURlbGltZXRlcjogL1taIF0vaSxcblxuICAvLyB5ZWFyIHRva2Vuc1xuICBZWTogL14oXFxkezJ9KSQvLFxuICBZWVk6IFtcbiAgICAvXihbKy1dXFxkezJ9KSQvLCAvLyAwIGFkZGl0aW9uYWwgZGlnaXRzXG4gICAgL14oWystXVxcZHszfSkkLywgLy8gMSBhZGRpdGlvbmFsIGRpZ2l0XG4gICAgL14oWystXVxcZHs0fSkkLyAvLyAyIGFkZGl0aW9uYWwgZGlnaXRzXG4gIF0sXG4gIFlZWVk6IC9eKFxcZHs0fSkvLFxuICBZWVlZWTogW1xuICAgIC9eKFsrLV1cXGR7NH0pLywgLy8gMCBhZGRpdGlvbmFsIGRpZ2l0c1xuICAgIC9eKFsrLV1cXGR7NX0pLywgLy8gMSBhZGRpdGlvbmFsIGRpZ2l0XG4gICAgL14oWystXVxcZHs2fSkvIC8vIDIgYWRkaXRpb25hbCBkaWdpdHNcbiAgXSxcblxuICAvLyBkYXRlIHRva2Vuc1xuICBNTTogL14tKFxcZHsyfSkkLyxcbiAgREREOiAvXi0/KFxcZHszfSkkLyxcbiAgTU1ERDogL14tPyhcXGR7Mn0pLT8oXFxkezJ9KSQvLFxuICBXd3c6IC9eLT9XKFxcZHsyfSkkLyxcbiAgV3d3RDogL14tP1coXFxkezJ9KS0/KFxcZHsxfSkkLyxcblxuICBISDogL14oXFxkezJ9KFsuLF1cXGQqKT8pJC8sXG4gIEhITU06IC9eKFxcZHsyfSk6PyhcXGR7Mn0oWy4sXVxcZCopPykkLyxcbiAgSEhNTVNTOiAvXihcXGR7Mn0pOj8oXFxkezJ9KTo/KFxcZHsyfShbLixdXFxkKik/KSQvLFxuXG4gIC8vIHRpbWV6b25lIHRva2VucyAodG8gaWRlbnRpZnkgdGhlIHByZXNlbmNlIG9mIGEgdHopXG4gIHRpbWV6b25lOiAvKFtaKy1dLip8IFVUQ3woPzpbYS16QS1aXStcXC9bYS16QS1aX10rKD86XFwvW2EtekEtWl9dKyk/KSkkL1xufVxuXG4vKipcbiAqIEBuYW1lIHRvRGF0ZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgaXRzIGNsb25lLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhIG51bWJlciwgaXQgaXMgdHJlYXRlZCBhcyBhIHRpbWVzdGFtcC5cbiAqXG4gKiBJZiBhbiBhcmd1bWVudCBpcyBhIHN0cmluZywgdGhlIGZ1bmN0aW9uIHRyaWVzIHRvIHBhcnNlIGl0LlxuICogRnVuY3Rpb24gYWNjZXB0cyBjb21wbGV0ZSBJU08gODYwMSBmb3JtYXRzIGFzIHdlbGwgYXMgcGFydGlhbCBpbXBsZW1lbnRhdGlvbnMuXG4gKiBJU08gODYwMTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMVxuICogSWYgdGhlIGZ1bmN0aW9uIGNhbm5vdCBwYXJzZSB0aGUgc3RyaW5nIG9yIHRoZSB2YWx1ZXMgYXJlIGludmFsaWQsIGl0IHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBub25lIG9mIHRoZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqICoqTm90ZSoqOiAqYWxsKiBEYXRlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYW55ICpkYXRlLWZucyogZnVuY3Rpb24gaXMgcHJvY2Vzc2VkIGJ5IGB0b0RhdGVgLlxuICogQWxsICpkYXRlLWZucyogZnVuY3Rpb25zIHdpbGwgdGhyb3cgYFJhbmdlRXJyb3JgIGlmIGBvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHNgIGlzIG5vdCAwLCAxLCAyIG9yIHVuZGVmaW5lZC5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8U3RyaW5nfE51bWJlcn0gYXJndW1lbnQgLSB0aGUgdmFsdWUgdG8gY29udmVydFxuICogQHBhcmFtIHtPcHRpb25zV2l0aFRafSBbb3B0aW9uc10gLSB0aGUgb2JqZWN0IHdpdGggb3B0aW9ucy4gU2VlIFtPcHRpb25zXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL09wdGlvbnN9XG4gKiBAcGFyYW0gezB8MXwyfSBbb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzPTJdIC0gdGhlIGFkZGl0aW9uYWwgbnVtYmVyIG9mIGRpZ2l0cyBpbiB0aGUgZXh0ZW5kZWQgeWVhciBmb3JtYXRcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy50aW1lWm9uZT0nJ10gLSB1c2VkIHRvIHNwZWNpZnkgdGhlIElBTkEgdGltZSB6b25lIG9mZnNldCBvZiBhIGRhdGUgU3RyaW5nLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBwYXJzZWQgZGF0ZSBpbiB0aGUgbG9jYWwgdGltZSB6b25lXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHNgIG11c3QgYmUgMCwgMSBvciAyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgc3RyaW5nICcyMDE0LTAyLTExVDExOjMwOjMwJyB0byBkYXRlOlxuICogdmFyIHJlc3VsdCA9IHRvRGF0ZSgnMjAxNC0wMi0xMVQxMTozMDozMCcpXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IHN0cmluZyAnKzAyMDE0MTAxJyB0byBkYXRlLFxuICogLy8gaWYgdGhlIGFkZGl0aW9uYWwgbnVtYmVyIG9mIGRpZ2l0cyBpbiB0aGUgZXh0ZW5kZWQgeWVhciBmb3JtYXQgaXMgMTpcbiAqIHZhciByZXN1bHQgPSB0b0RhdGUoJyswMjAxNDEwMScsIHthZGRpdGlvbmFsRGlnaXRzOiAxfSlcbiAqIC8vPT4gRnJpIEFwciAxMSAyMDE0IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvRGF0ZShhcmd1bWVudCwgZGlydHlPcHRpb25zKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgJyArIGFyZ3VtZW50cy5sZW5ndGggKyAnIHByZXNlbnQnXG4gICAgKVxuICB9XG5cbiAgaWYgKGFyZ3VtZW50ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgfVxuXG4gIHZhciBvcHRpb25zID0gZGlydHlPcHRpb25zIHx8IHt9XG5cbiAgdmFyIGFkZGl0aW9uYWxEaWdpdHMgPVxuICAgIG9wdGlvbnMuYWRkaXRpb25hbERpZ2l0cyA9PSBudWxsXG4gICAgICA/IERFRkFVTFRfQURESVRJT05BTF9ESUdJVFNcbiAgICAgIDogdG9JbnRlZ2VyKG9wdGlvbnMuYWRkaXRpb25hbERpZ2l0cylcbiAgaWYgKFxuICAgIGFkZGl0aW9uYWxEaWdpdHMgIT09IDIgJiZcbiAgICBhZGRpdGlvbmFsRGlnaXRzICE9PSAxICYmXG4gICAgYWRkaXRpb25hbERpZ2l0cyAhPT0gMFxuICApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignYWRkaXRpb25hbERpZ2l0cyBtdXN0IGJlIDAsIDEgb3IgMicpXG4gIH1cblxuICAvLyBDbG9uZSB0aGUgZGF0ZVxuICBpZiAoXG4gICAgYXJndW1lbnQgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ29iamVjdCcgJiZcbiAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudCkgPT09ICdbb2JqZWN0IERhdGVdJylcbiAgKSB7XG4gICAgLy8gUHJldmVudCB0aGUgZGF0ZSB0byBsb3NlIHRoZSBtaWxsaXNlY29uZHMgd2hlbiBwYXNzZWQgdG8gbmV3IERhdGUoKSBpbiBJRTEwXG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50LmdldFRpbWUoKSlcbiAgfSBlbHNlIGlmIChcbiAgICB0eXBlb2YgYXJndW1lbnQgPT09ICdudW1iZXInIHx8XG4gICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50KSA9PT0gJ1tvYmplY3QgTnVtYmVyXSdcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50KVxuICB9IGVsc2UgaWYgKFxuICAgICEoXG4gICAgICB0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8XG4gICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpID09PSAnW29iamVjdCBTdHJpbmddJ1xuICAgIClcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgfVxuXG4gIHZhciBkYXRlU3RyaW5ncyA9IHNwbGl0RGF0ZVN0cmluZyhhcmd1bWVudClcblxuICB2YXIgcGFyc2VZZWFyUmVzdWx0ID0gcGFyc2VZZWFyKGRhdGVTdHJpbmdzLmRhdGUsIGFkZGl0aW9uYWxEaWdpdHMpXG4gIHZhciB5ZWFyID0gcGFyc2VZZWFyUmVzdWx0LnllYXJcbiAgdmFyIHJlc3REYXRlU3RyaW5nID0gcGFyc2VZZWFyUmVzdWx0LnJlc3REYXRlU3RyaW5nXG5cbiAgdmFyIGRhdGUgPSBwYXJzZURhdGUocmVzdERhdGVTdHJpbmcsIHllYXIpXG5cbiAgaWYgKGlzTmFOKGRhdGUpKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgfVxuXG4gIGlmIChkYXRlKSB7XG4gICAgdmFyIHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpXG4gICAgdmFyIHRpbWUgPSAwXG4gICAgdmFyIG9mZnNldFxuXG4gICAgaWYgKGRhdGVTdHJpbmdzLnRpbWUpIHtcbiAgICAgIHRpbWUgPSBwYXJzZVRpbWUoZGF0ZVN0cmluZ3MudGltZSlcblxuICAgICAgaWYgKGlzTmFOKHRpbWUpKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRhdGVTdHJpbmdzLnRpbWV6b25lIHx8IG9wdGlvbnMudGltZVpvbmUpIHtcbiAgICAgIG9mZnNldCA9IHR6UGFyc2VUaW1lem9uZShcbiAgICAgICAgZGF0ZVN0cmluZ3MudGltZXpvbmUgfHwgb3B0aW9ucy50aW1lWm9uZSxcbiAgICAgICAgbmV3IERhdGUodGltZXN0YW1wICsgdGltZSlcbiAgICAgIClcbiAgICAgIGlmIChpc05hTihvZmZzZXQpKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGdldCBvZmZzZXQgYWNjdXJhdGUgdG8gaG91ciBpbiB0aW1lem9uZXMgdGhhdCBjaGFuZ2Ugb2Zmc2V0XG4gICAgICBvZmZzZXQgPSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKG5ldyBEYXRlKHRpbWVzdGFtcCArIHRpbWUpKVxuICAgICAgb2Zmc2V0ID0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhcbiAgICAgICAgbmV3IERhdGUodGltZXN0YW1wICsgdGltZSArIG9mZnNldClcbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERhdGUodGltZXN0YW1wICsgdGltZSArIG9mZnNldClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICB9XG59XG5cbmZ1bmN0aW9uIHNwbGl0RGF0ZVN0cmluZyhkYXRlU3RyaW5nKSB7XG4gIHZhciBkYXRlU3RyaW5ncyA9IHt9XG4gIHZhciBhcnJheSA9IGRhdGVTdHJpbmcuc3BsaXQocGF0dGVybnMuZGF0ZVRpbWVEZWxpbWV0ZXIpXG4gIHZhciB0aW1lU3RyaW5nXG5cbiAgaWYgKHBhdHRlcm5zLnBsYWluVGltZS50ZXN0KGFycmF5WzBdKSkge1xuICAgIGRhdGVTdHJpbmdzLmRhdGUgPSBudWxsXG4gICAgdGltZVN0cmluZyA9IGFycmF5WzBdXG4gIH0gZWxzZSB7XG4gICAgZGF0ZVN0cmluZ3MuZGF0ZSA9IGFycmF5WzBdXG4gICAgdGltZVN0cmluZyA9IGFycmF5WzFdXG4gICAgZGF0ZVN0cmluZ3MudGltZXpvbmUgPSBhcnJheVsyXVxuICAgIGlmIChwYXR0ZXJucy50aW1lWm9uZURlbGltZXRlci50ZXN0KGRhdGVTdHJpbmdzLmRhdGUpKSB7XG4gICAgICBkYXRlU3RyaW5ncy5kYXRlID0gZGF0ZVN0cmluZy5zcGxpdChwYXR0ZXJucy50aW1lWm9uZURlbGltZXRlcilbMF1cbiAgICAgIHRpbWVTdHJpbmcgPSBkYXRlU3RyaW5nLnN1YnN0cihkYXRlU3RyaW5ncy5kYXRlLmxlbmd0aCwgZGF0ZVN0cmluZy5sZW5ndGgpXG4gICAgfVxuICB9XG5cbiAgaWYgKHRpbWVTdHJpbmcpIHtcbiAgICB2YXIgdG9rZW4gPSBwYXR0ZXJucy50aW1lem9uZS5leGVjKHRpbWVTdHJpbmcpXG4gICAgaWYgKHRva2VuKSB7XG4gICAgICBkYXRlU3RyaW5ncy50aW1lID0gdGltZVN0cmluZy5yZXBsYWNlKHRva2VuWzFdLCAnJylcbiAgICAgIGRhdGVTdHJpbmdzLnRpbWV6b25lID0gdG9rZW5bMV1cbiAgICB9IGVsc2Uge1xuICAgICAgZGF0ZVN0cmluZ3MudGltZSA9IHRpbWVTdHJpbmdcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGF0ZVN0cmluZ3Ncbn1cblxuZnVuY3Rpb24gcGFyc2VZZWFyKGRhdGVTdHJpbmcsIGFkZGl0aW9uYWxEaWdpdHMpIHtcbiAgdmFyIHBhdHRlcm5ZWVkgPSBwYXR0ZXJucy5ZWVlbYWRkaXRpb25hbERpZ2l0c11cbiAgdmFyIHBhdHRlcm5ZWVlZWSA9IHBhdHRlcm5zLllZWVlZW2FkZGl0aW9uYWxEaWdpdHNdXG5cbiAgdmFyIHRva2VuXG5cbiAgLy8gWVlZWSBvciDCsVlZWVlZXG4gIHRva2VuID0gcGF0dGVybnMuWVlZWS5leGVjKGRhdGVTdHJpbmcpIHx8IHBhdHRlcm5ZWVlZWS5leGVjKGRhdGVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIHZhciB5ZWFyU3RyaW5nID0gdG9rZW5bMV1cbiAgICByZXR1cm4ge1xuICAgICAgeWVhcjogcGFyc2VJbnQoeWVhclN0cmluZywgMTApLFxuICAgICAgcmVzdERhdGVTdHJpbmc6IGRhdGVTdHJpbmcuc2xpY2UoeWVhclN0cmluZy5sZW5ndGgpXG4gICAgfVxuICB9XG5cbiAgLy8gWVkgb3IgwrFZWVlcbiAgdG9rZW4gPSBwYXR0ZXJucy5ZWS5leGVjKGRhdGVTdHJpbmcpIHx8IHBhdHRlcm5ZWVkuZXhlYyhkYXRlU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICB2YXIgY2VudHVyeVN0cmluZyA9IHRva2VuWzFdXG4gICAgcmV0dXJuIHtcbiAgICAgIHllYXI6IHBhcnNlSW50KGNlbnR1cnlTdHJpbmcsIDEwKSAqIDEwMCxcbiAgICAgIHJlc3REYXRlU3RyaW5nOiBkYXRlU3RyaW5nLnNsaWNlKGNlbnR1cnlTdHJpbmcubGVuZ3RoKVxuICAgIH1cbiAgfVxuXG4gIC8vIEludmFsaWQgSVNPLWZvcm1hdHRlZCB5ZWFyXG4gIHJldHVybiB7XG4gICAgeWVhcjogbnVsbFxuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlRGF0ZShkYXRlU3RyaW5nLCB5ZWFyKSB7XG4gIC8vIEludmFsaWQgSVNPLWZvcm1hdHRlZCB5ZWFyXG4gIGlmICh5ZWFyID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHZhciB0b2tlblxuICB2YXIgZGF0ZVxuICB2YXIgbW9udGhcbiAgdmFyIHdlZWtcblxuICAvLyBZWVlZXG4gIGlmIChkYXRlU3RyaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgIGRhdGUgPSBuZXcgRGF0ZSgwKVxuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeWVhcilcbiAgICByZXR1cm4gZGF0ZVxuICB9XG5cbiAgLy8gWVlZWS1NTVxuICB0b2tlbiA9IHBhdHRlcm5zLk1NLmV4ZWMoZGF0ZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgZGF0ZSA9IG5ldyBEYXRlKDApXG4gICAgbW9udGggPSBwYXJzZUludCh0b2tlblsxXSwgMTApIC0gMVxuXG4gICAgaWYgKCF2YWxpZGF0ZURhdGUoeWVhciwgbW9udGgpKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICAgIH1cblxuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeWVhciwgbW9udGgpXG4gICAgcmV0dXJuIGRhdGVcbiAgfVxuXG4gIC8vIFlZWVktREREIG9yIFlZWVlERERcbiAgdG9rZW4gPSBwYXR0ZXJucy5EREQuZXhlYyhkYXRlU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBkYXRlID0gbmV3IERhdGUoMClcbiAgICB2YXIgZGF5T2ZZZWFyID0gcGFyc2VJbnQodG9rZW5bMV0sIDEwKVxuXG4gICAgaWYgKCF2YWxpZGF0ZURheU9mWWVhckRhdGUoeWVhciwgZGF5T2ZZZWFyKSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgICB9XG5cbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIGRheU9mWWVhcilcbiAgICByZXR1cm4gZGF0ZVxuICB9XG5cbiAgLy8geXl5eS1NTS1kZCBvciBZWVlZTU1ERFxuICB0b2tlbiA9IHBhdHRlcm5zLk1NREQuZXhlYyhkYXRlU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBkYXRlID0gbmV3IERhdGUoMClcbiAgICBtb250aCA9IHBhcnNlSW50KHRva2VuWzFdLCAxMCkgLSAxXG4gICAgdmFyIGRheSA9IHBhcnNlSW50KHRva2VuWzJdLCAxMClcblxuICAgIGlmICghdmFsaWRhdGVEYXRlKHllYXIsIG1vbnRoLCBkYXkpKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICAgIH1cblxuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeWVhciwgbW9udGgsIGRheSlcbiAgICByZXR1cm4gZGF0ZVxuICB9XG5cbiAgLy8gWVlZWS1Xd3cgb3IgWVlZWVd3d1xuICB0b2tlbiA9IHBhdHRlcm5zLld3dy5leGVjKGRhdGVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIHdlZWsgPSBwYXJzZUludCh0b2tlblsxXSwgMTApIC0gMVxuXG4gICAgaWYgKCF2YWxpZGF0ZVdlZWtEYXRlKHllYXIsIHdlZWspKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICAgIH1cblxuICAgIHJldHVybiBkYXlPZklTT1dlZWtZZWFyKHllYXIsIHdlZWspXG4gIH1cblxuICAvLyBZWVlZLVd3dy1EIG9yIFlZWVlXd3dEXG4gIHRva2VuID0gcGF0dGVybnMuV3d3RC5leGVjKGRhdGVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIHdlZWsgPSBwYXJzZUludCh0b2tlblsxXSwgMTApIC0gMVxuICAgIHZhciBkYXlPZldlZWsgPSBwYXJzZUludCh0b2tlblsyXSwgMTApIC0gMVxuXG4gICAgaWYgKCF2YWxpZGF0ZVdlZWtEYXRlKHllYXIsIHdlZWssIGRheU9mV2VlaykpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgfVxuXG4gICAgcmV0dXJuIGRheU9mSVNPV2Vla1llYXIoeWVhciwgd2VlaywgZGF5T2ZXZWVrKVxuICB9XG5cbiAgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIGRhdGVcbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gcGFyc2VUaW1lKHRpbWVTdHJpbmcpIHtcbiAgdmFyIHRva2VuXG4gIHZhciBob3Vyc1xuICB2YXIgbWludXRlc1xuXG4gIC8vIGhoXG4gIHRva2VuID0gcGF0dGVybnMuSEguZXhlYyh0aW1lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBob3VycyA9IHBhcnNlRmxvYXQodG9rZW5bMV0ucmVwbGFjZSgnLCcsICcuJykpXG5cbiAgICBpZiAoIXZhbGlkYXRlVGltZShob3VycykpIHtcbiAgICAgIHJldHVybiBOYU5cbiAgICB9XG5cbiAgICByZXR1cm4gKGhvdXJzICUgMjQpICogTUlMTElTRUNPTkRTX0lOX0hPVVJcbiAgfVxuXG4gIC8vIGhoOm1tIG9yIGhobW1cbiAgdG9rZW4gPSBwYXR0ZXJucy5ISE1NLmV4ZWModGltZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgaG91cnMgPSBwYXJzZUludCh0b2tlblsxXSwgMTApXG4gICAgbWludXRlcyA9IHBhcnNlRmxvYXQodG9rZW5bMl0ucmVwbGFjZSgnLCcsICcuJykpXG5cbiAgICBpZiAoIXZhbGlkYXRlVGltZShob3VycywgbWludXRlcykpIHtcbiAgICAgIHJldHVybiBOYU5cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgKGhvdXJzICUgMjQpICogTUlMTElTRUNPTkRTX0lOX0hPVVIgKyBtaW51dGVzICogTUlMTElTRUNPTkRTX0lOX01JTlVURVxuICAgIClcbiAgfVxuXG4gIC8vIGhoOm1tOnNzIG9yIGhobW1zc1xuICB0b2tlbiA9IHBhdHRlcm5zLkhITU1TUy5leGVjKHRpbWVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGhvdXJzID0gcGFyc2VJbnQodG9rZW5bMV0sIDEwKVxuICAgIG1pbnV0ZXMgPSBwYXJzZUludCh0b2tlblsyXSwgMTApXG4gICAgdmFyIHNlY29uZHMgPSBwYXJzZUZsb2F0KHRva2VuWzNdLnJlcGxhY2UoJywnLCAnLicpKVxuXG4gICAgaWYgKCF2YWxpZGF0ZVRpbWUoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpKSB7XG4gICAgICByZXR1cm4gTmFOXG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIChob3VycyAlIDI0KSAqIE1JTExJU0VDT05EU19JTl9IT1VSICtcbiAgICAgIG1pbnV0ZXMgKiBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFICtcbiAgICAgIHNlY29uZHMgKiAxMDAwXG4gICAgKVxuICB9XG5cbiAgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHRpbWVcbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gZGF5T2ZJU09XZWVrWWVhcihpc29XZWVrWWVhciwgd2VlaywgZGF5KSB7XG4gIHdlZWsgPSB3ZWVrIHx8IDBcbiAgZGF5ID0gZGF5IHx8IDBcbiAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgwKVxuICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGlzb1dlZWtZZWFyLCAwLCA0KVxuICB2YXIgZm91cnRoT2ZKYW51YXJ5RGF5ID0gZGF0ZS5nZXRVVENEYXkoKSB8fCA3XG4gIHZhciBkaWZmID0gd2VlayAqIDcgKyBkYXkgKyAxIC0gZm91cnRoT2ZKYW51YXJ5RGF5XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIGRpZmYpXG4gIHJldHVybiBkYXRlXG59XG5cbi8vIFZhbGlkYXRpb24gZnVuY3Rpb25zXG5cbnZhciBEQVlTX0lOX01PTlRIID0gWzMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdXG52YXIgREFZU19JTl9NT05USF9MRUFQX1lFQVIgPSBbMzEsIDI5LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV1cblxuZnVuY3Rpb24gaXNMZWFwWWVhckluZGV4KHllYXIpIHtcbiAgcmV0dXJuIHllYXIgJSA0MDAgPT09IDAgfHwgKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSkge1xuICBpZiAobW9udGggPCAwIHx8IG1vbnRoID4gMTEpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChkYXRlICE9IG51bGwpIHtcbiAgICBpZiAoZGF0ZSA8IDEpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHZhciBpc0xlYXBZZWFyID0gaXNMZWFwWWVhckluZGV4KHllYXIpXG4gICAgaWYgKGlzTGVhcFllYXIgJiYgZGF0ZSA+IERBWVNfSU5fTU9OVEhfTEVBUF9ZRUFSW21vbnRoXSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGlmICghaXNMZWFwWWVhciAmJiBkYXRlID4gREFZU19JTl9NT05USFttb250aF0pIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRGF5T2ZZZWFyRGF0ZSh5ZWFyLCBkYXlPZlllYXIpIHtcbiAgaWYgKGRheU9mWWVhciA8IDEpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHZhciBpc0xlYXBZZWFyID0gaXNMZWFwWWVhckluZGV4KHllYXIpXG4gIGlmIChpc0xlYXBZZWFyICYmIGRheU9mWWVhciA+IDM2Nikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGlmICghaXNMZWFwWWVhciAmJiBkYXlPZlllYXIgPiAzNjUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlV2Vla0RhdGUoeWVhciwgd2VlaywgZGF5KSB7XG4gIGlmICh3ZWVrIDwgMCB8fCB3ZWVrID4gNTIpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChkYXkgIT0gbnVsbCAmJiAoZGF5IDwgMCB8fCBkYXkgPiA2KSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVUaW1lKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSB7XG4gIGlmIChob3VycyAhPSBudWxsICYmIChob3VycyA8IDAgfHwgaG91cnMgPj0gMjUpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAobWludXRlcyAhPSBudWxsICYmIChtaW51dGVzIDwgMCB8fCBtaW51dGVzID49IDYwKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKHNlY29uZHMgIT0gbnVsbCAmJiAoc2Vjb25kcyA8IDAgfHwgc2Vjb25kcyA+PSA2MCkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMtdHovZXNtL3RvRGF0ZS9pbmRleC5qcyIsInZhciBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFID0gNjAwMDA7XG5cbmZ1bmN0aW9uIGdldERhdGVNaWxsaXNlY29uZHNQYXJ0KGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpICUgTUlMTElTRUNPTkRTX0lOX01JTlVURTtcbn1cbi8qKlxuICogR29vZ2xlIENocm9tZSBhcyBvZiA2Ny4wLjMzOTYuODcgaW50cm9kdWNlZCB0aW1lem9uZXMgd2l0aCBvZmZzZXQgdGhhdCBpbmNsdWRlcyBzZWNvbmRzLlxuICogVGhleSB1c3VhbGx5IGFwcGVhciBmb3IgZGF0ZXMgdGhhdCBkZW5vdGUgdGltZSBiZWZvcmUgdGhlIHRpbWV6b25lcyB3ZXJlIGludHJvZHVjZWRcbiAqIChlLmcuIGZvciAnRXVyb3BlL1ByYWd1ZScgdGltZXpvbmUgdGhlIG9mZnNldCBpcyBHTVQrMDA6NTc6NDQgYmVmb3JlIDEgT2N0b2JlciAxODkxXG4gKiBhbmQgR01UKzAxOjAwOjAwIGFmdGVyIHRoYXQgZGF0ZSlcbiAqXG4gKiBEYXRlI2dldFRpbWV6b25lT2Zmc2V0IHJldHVybnMgdGhlIG9mZnNldCBpbiBtaW51dGVzIGFuZCB3b3VsZCByZXR1cm4gNTcgZm9yIHRoZSBleGFtcGxlIGFib3ZlLFxuICogd2hpY2ggd291bGQgbGVhZCB0byBpbmNvcnJlY3QgY2FsY3VsYXRpb25zLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdGltZXpvbmUgb2Zmc2V0IGluIG1pbGxpc2Vjb25kcyB0aGF0IHRha2VzIHNlY29uZHMgaW4gYWNjb3VudC5cbiAqL1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZGlydHlEYXRlKSB7XG4gIHZhciBkYXRlID0gbmV3IERhdGUoZGlydHlEYXRlLmdldFRpbWUoKSk7XG4gIHZhciBiYXNlVGltZXpvbmVPZmZzZXQgPSBNYXRoLmNlaWwoZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpKTtcbiAgZGF0ZS5zZXRTZWNvbmRzKDAsIDApO1xuICB2YXIgaGFzTmVnYXRpdmVVVENPZmZzZXQgPSBiYXNlVGltZXpvbmVPZmZzZXQgPiAwO1xuICB2YXIgbWlsbGlzZWNvbmRzUGFydE9mVGltZXpvbmVPZmZzZXQgPSBoYXNOZWdhdGl2ZVVUQ09mZnNldCA/IChNSUxMSVNFQ09ORFNfSU5fTUlOVVRFICsgZ2V0RGF0ZU1pbGxpc2Vjb25kc1BhcnQoZGF0ZSkpICUgTUlMTElTRUNPTkRTX0lOX01JTlVURSA6IGdldERhdGVNaWxsaXNlY29uZHNQYXJ0KGRhdGUpO1xuICByZXR1cm4gYmFzZVRpbWV6b25lT2Zmc2V0ICogTUlMTElTRUNPTkRTX0lOX01JTlVURSArIG1pbGxpc2Vjb25kc1BhcnRPZlRpbWV6b25lT2Zmc2V0O1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zICovXG5cbi8qKlxuICogRXZlbnRzIE1peGluXG4gKlxuICogQWxsb3cgY2xhc3NlcyB0byBoYXZlIHRoZWlyIG93biBldmVudHMgbWFuYWdlclxuICpcbiAqIEBwYXJhbSB7Q2xhc3N9IHN1cGVyQ2xhc3NcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5jb25zdCBFdmVudHNNaXhpbiA9IHN1cGVyQ2xhc3MgPT5cbiAgY2xhc3MgZXh0ZW5kcyBzdXBlckNsYXNzIHtcbiAgICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcmVnaXN0ZXJzIGhhbmRsZXJzXG4gICAgICpcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqL1xuICAgIF9faGFuZGxlcnMgPSB7fVxuXG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgYW4gZXZlbnQgaGFuZGxlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgZXZlbnQgbmFtZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgaGFuZGxlciBmdW5jdGlvblxuICAgICAqL1xuICAgIG9uKG5hbWUsIGhhbmRsZXIpIHtcbiAgICAgIHRoaXMuX19oYW5kbGVyc1tuYW1lXSA9IHRoaXMuX19oYW5kbGVyc1tuYW1lXSB8fCBbXVxuICAgICAgdGhpcy5fX2hhbmRsZXJzW25hbWVdLnB1c2goaGFuZGxlcilcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxlclxuICAgICAqXG4gICAgICogKipOb3RlIDoqKiBpZiBoYW5kbGVyIGlzIG5vdCBwcm92aWRlZCB0aGVuIGFsbCByZWdpc3RlcmVkIGhhbmRsZXIgZm9yIHRoZSBnaXZlbiBldmVudCB3aWxsIGJlIHJlbW92ZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIGV2ZW50IG5hbWVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIGhhbmRsZXIgZnVuY3Rpb25cbiAgICAgKi9cbiAgICBvZmYobmFtZSwgaGFuZGxlcikge1xuICAgICAgdGhpcy5fX2hhbmRsZXJzW25hbWVdID0gdGhpcy5fX2hhbmRsZXJzW25hbWVdIHx8IFtdXG4gICAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuX19oYW5kbGVyc1tuYW1lXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChjb25zdCByZWdpc3RlcmVkSGFuZGxlciBpbiB0aGlzLl9faGFuZGxlcnMpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLl9faGFuZGxlcnMuaGFzT3duUHJvcGVydHkocmVnaXN0ZXJlZEhhbmRsZXIpICYmXG4gICAgICAgICAgICB0aGlzLl9faGFuZGxlcnNbcmVnaXN0ZXJlZEhhbmRsZXJdID09PSBoYW5kbGVyXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fX2hhbmRsZXJzW25hbWVdXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTm90aWZ5IGhhbmRsZXJzXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBldmVudCBuYW1lXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGV2ZW50IHBheWxvYWRcbiAgICAgKi9cbiAgICBub3RpZnkobmFtZSwgcGF5bG9hZCkge1xuICAgICAgY29uc3QgaGFuZGxlcnMgPSB0aGlzLl9faGFuZGxlcnNbbmFtZV0gfHwgW11cbiAgICAgIGhhbmRsZXJzLmZvckVhY2goaGFuZGxlciA9PiB7XG4gICAgICAgIGhhbmRsZXIocGF5bG9hZClcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbi8qKlxuICogQW4gZXZlbnRzIG1peGluIGRlY29yYXRvclxuICpcbiAqIEBwYXJhbSB7Q2xhc3N9IHN1cGVyQ2xhc3NcbiAqXG4gKiBAc2VlIHtFdmVudHNNaXhpbn1cbiAqL1xuZnVuY3Rpb24gd2l0aEV2ZW50c01peGluKHN1cGVyQ2xhc3MpIHtcbiAgcmV0dXJuIEV2ZW50c01peGluKHN1cGVyQ2xhc3MpXG59XG5cbmV4cG9ydCBkZWZhdWx0IEV2ZW50c01peGluXG5leHBvcnQgeyBFdmVudHNNaXhpbiwgd2l0aEV2ZW50c01peGluIH1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9FdmVudHNNaXhpbi9FdmVudHNNaXhpbi5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGF1dG9iaW5kLCBvdmVycmlkZSwgcmVhZG9ubHkgfSBmcm9tICdjb3JlLWRlY29yYXRvcnMnXG5pbXBvcnQgeyB3aXRoRXZlbnRzTWl4aW4gfSBmcm9tICcuLi9FdmVudHNNaXhpbidcbmltcG9ydCBDb21wb25lbnQgZnJvbSAnLi4vQ29tcG9uZW50J1xuaW1wb3J0ICcuL3N0eWxlLnNjc3MnXG5cbi8qKlxuICogRGF0ZVRpbWVJbnB1dFxuICpcbiAqIFNpbXBsZSBEYXRlVGltZUlucHV0IGNvbXBvbmVudCB3aGljaCBpbnRlZ3JhdGVzIHRoZSBmbGF0cGlja3JcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5Ad2l0aEV2ZW50c01peGluXG5jbGFzcyBEYXRlVGltZUlucHV0IGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIENvbnN0YW50IHdoaWNoIGRlc2NyaWJlcyB0aGUgZXZlbnQgbmFtZSB0aGF0IHdpbGwgYmUgZmlyZWQgd2hlbiBhIGRhdGVcbiAgICogaXMgc2VsZWN0ZWQgdXNpbmcgdGhlIGRhdGUgcGlja2VyXG4gICAqXG4gICAqIEB0eXBlIHtTdHJpbmd9XG4gICAqL1xuICBAcmVhZG9ubHlcbiAgc3RhdGljIE9OX0RBVEVfQ0hBTkdFRCA9ICdEYXRlVGltZUlucHV0Lk9OX0RBVEVfQ0hBTkdFRCdcblxuICAvKipcbiAgICogVGhlIGRhdGUgcGlja2VyIGluc3RhbmNlXG4gICAqXG4gICAqIEB0eXBlIHtGbGF0cGlja3JGbn1cbiAgICovXG4gIHBpY2tlciA9IG51bGxcblxuICAvKipcbiAgICogVGhlIGxhc3Qgc2VsZWN0ZWQgZGF0ZVxuICAgKlxuICAgKiBAdHlwZSB7RGF0ZXxudWxsfVxuICAgKi9cbiAgc2VsZWN0ZWREYXRlID0gbnVsbFxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHJlY2VpdmVkIHBhcmFtcyB3aGVuIGluaXQgaXMgY2FsbGVkXG4gICAqc1xuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgX3BhcmFtcyA9IHt9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBuZXcgRGF0ZVRpbWVJbnB1dFxuICAgKlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IGlzRWRpdG9yIHdoZW4gdHJ1ZSAsIHRoZSBpbnB1dCB3aWxsIHN0eWxlZCB0byBmaXQgYXMgYSBjZWxsIGVkaXRvclxuICAgKi9cbiAgY29uc3RydWN0b3IoaXNFZGl0b3IgPSBmYWxzZSkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXMuX2d1aSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgdGhpcy5fZ3VpLmNsYXNzTmFtZSA9ICdhZy1jZWxsLWVkaXQtd3JhcHBlcidcbiAgICB0aGlzLl9ndWkuaW5uZXJIVE1MID0gLyogaHRtbCAqLyBgXG4gICAgPGRpdiBjbGFzcz1cImFnLWNlbGwtZWRpdG9yIGFnLWxhYmVsZWQgYWctbGFiZWwtYWxpZ24tbGVmdCBhZy10ZXh0LWZpZWxkIGFnLWlucHV0LWZpZWxkXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXRpbWVfX2lucHV0ICR7XG4gICAgICAgIGlzRWRpdG9yID8gJ2RhdGV0aW1lX19pbnB1dC0tZWRpdG9yICcgOiAnJ1xuICAgICAgfSBhZy13cmFwcGVyIGFnLWlucHV0LXdyYXBwZXIgYWctdGV4dC1maWVsZC1pbnB1dC13cmFwcGVyXCI+XG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZGF0ZXRpbWVfX2lucHV0X19pbnB1dCAke1xuICAgICAgICAgICAgaXNFZGl0b3IgPyAnYWctY2VsbC1lZGl0LWlucHV0ICcgOiAnJ1xuICAgICAgICAgIH0gYWctaW5wdXQtZmllbGQtaW5wdXQgYWctdGV4dC1maWVsZC1pbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgZGF0YS1pbnB1dD5cbiAgICAgICAgICA8YSBjbGFzcz1cImRhdGV0aW1lX19pbnB1dF9fY2xlYXJcIiBkYXRhLWNsZWFyPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJkYXRldGltZV9faW5wdXRfX2NsZWFyX19pY29uIGFnLWljb24gYWctaWNvbi1jcm9zc1wiPjwvaT5cbiAgICAgICAgICA8L2E+ICAgIFxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgYFxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIGluaXQocGFyYW1zKSB7XG4gICAgdGhpcy5fcGFyYW1zID0gcGFyYW1zXG4gICAgY29uc3QgZW5hYmxlVGltZSA9IHRoaXMuZ2V0T3B0aW9uKCdkYXRlVGltZUVuYWJsZVRpbWUnLCBwYXJhbXMsIHRydWUpXG4gICAgY29uc3QgdGltZV8yNGhyID0gdGhpcy5nZXRPcHRpb24oJ2RhdGVUaW1lRW5hYmxlMjRIUicsIHBhcmFtcywgdHJ1ZSlcbiAgICBjb25zdCBlbmFibGVTZWNvbmRzID0gdGhpcy5nZXRPcHRpb24oJ2RhdGVUaW1lRW5hYmxlU2Vjb25kcycsIHBhcmFtcywgZmFsc2UpXG4gICAgY29uc3Qgbm9DYWxlbmRhciA9ICF0aGlzLmdldE9wdGlvbignZGF0ZVRpbWVFbmFibGVDYWxlbmRhcicsIHBhcmFtcywgdHJ1ZSlcblxuICAgIGxldCBkYXRlRm9ybWF0ID0gdGhpcy5nZXRPcHRpb24oJ2RhdGVUaW1lTWFzaycsIHBhcmFtcylcblxuICAgIC8vIHRyeSB0byBnZW5lcmF0ZSBhIGRlZmF1bHQgZGF0ZSBmb3JtYXQgYmFzZWQgb24gdGhlIG9wdGlvbnNcbiAgICBpZiAoIWRhdGVGb3JtYXQpIHtcbiAgICAgIGRhdGVGb3JtYXQgPSBub0NhbGVuZGFyID8gJycgOiAnJVkvJU16LyVEeidcbiAgICAgIGlmIChlbmFibGVUaW1lKSB7XG4gICAgICAgIGRhdGVGb3JtYXQgKz0gdGltZV8yNGhyID8gJyAlSHo6JW16JyA6ICcgJWh6OiVteidcblxuICAgICAgICBpZiAoZW5hYmxlU2Vjb25kcykge1xuICAgICAgICAgIGRhdGVGb3JtYXQgKz0gJzolc3onXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBkYXRlRm9ybWF0ID0gZGF0ZUZvcm1hdC50cmltKClcblxuICAgIC8vIGluaXQgdGhlIGRhdGUgcGlja2VyXG4gICAgdGhpcy5waWNrZXIgPSBmbGF0cGlja3IodGhpcy5fZ3VpLCB7XG4gICAgICB3cmFwOiB0cnVlLFxuICAgICAgLy8gYWxsb3cgZW50ZXJpbmcgdGhlIGRhdGUgbWFudWFsbHkgcmVxdWlyZXMgZGF0ZSBwYXJzaW5nIGZyb20gc3RyaW5nXG4gICAgICAvLyB0aGlzIGlzIGEgdG91Z2ggdGhpbmcgYW5kIHJlcXVpcmVzIGxpYnMgbGlrZSBtb21lbnRcbiAgICAgIGFsbG93SW5wdXQ6IGZhbHNlLFxuICAgICAgb25DaGFuZ2U6IHRoaXMuX29uRGF0ZUNoYW5nZWQsXG4gICAgICBmb3JtYXREYXRlOiB0aGlzLmZvcm1hdERhdGUsXG4gICAgICBtYXhEYXRlOiB0aGlzLmdldE9wdGlvbignZGF0ZVRpbWVNYXgnLCBwYXJhbXMsIG51bGwpLFxuICAgICAgbWluRGF0ZTogdGhpcy5nZXRPcHRpb24oJ2RhdGVUaW1lTWluJywgcGFyYW1zLCBudWxsKSxcbiAgICAgIGRlZmF1bHRIb3VyOiB0aGlzLmdldE9wdGlvbignZGF0ZVRpbWVEZWZhdWx0SG91cicsIHBhcmFtcywgMTIpLFxuICAgICAgZGVmYXVsdE1pbnV0ZTogdGhpcy5nZXRPcHRpb24oJ2RhdGVUaW1lRGVmYXVsdE1pbnV0ZScsIHBhcmFtcywgMCksXG4gICAgICBkaXNhYmxlTW9iaWxlOiB0aGlzLmdldE9wdGlvbignZGF0ZVRpbWVEaXNhYmxlTW9iaWxlJywgcGFyYW1zLCBmYWxzZSksXG4gICAgICB3ZWVrTnVtYmVyczogdGhpcy5nZXRPcHRpb24oJ2RhdGVUaW1lRW5hYmxlV2Vla051bWJlcicsIHBhcmFtcywgZmFsc2UpLFxuICAgICAgbG9jYWxlOiB0aGlzLl9nZXRQaWNrZXJMb2NhbGUoKSxcbiAgICAgIG5vQ2FsZW5kYXIsXG4gICAgICBkYXRlRm9ybWF0LFxuICAgICAgZW5hYmxlVGltZSxcbiAgICAgIGVuYWJsZVNlY29uZHMsXG4gICAgICB0aW1lXzI0aHIsXG4gICAgfSlcblxuICAgIC8vIGZvcmNlIGRpYWxvZyBvdmVyZmxvd1xuICAgIHRoaXMucGlja2VyLmNhbGVuZGFyQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2FnLWN1c3RvbS1jb21wb25lbnQtcG9wdXAnKVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLnBpY2tlci5kZXN0cm95KClcbiAgICB0aGlzLm9mZihEYXRlVGltZUlucHV0Lk9OX0RBVEVfQ0hBTkdFRClcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHBpY2tlciBkYXRlXG4gICAqXG4gICAqIEBwYXJhbSB7RGF0ZXxTdHJpbmd9IHZhbHVlIHRoZSBkYXRlIHZhbHVlIHRvIHNldFxuICAgKi9cbiAgc2V0RGF0ZSh2YWx1ZSkge1xuICAgIHRoaXMucGlja2VyLnNldERhdGUodmFsdWUsIHRydWUpXG4gIH1cblxuICAvKipcbiAgICogT3BlbiBQaWNrZXJcbiAgICovXG4gIG9wZW4oKSB7XG4gICAgdGhpcy5waWNrZXIub3BlbigpXG4gICAgdGhpcy5fZ3VpLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykuZm9jdXMoKVxuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIHBpY2tlclxuICAgKi9cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5waWNrZXIuY2xvc2UoKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBwaWNrZXJcbiAgICovXG4gIHJlc2V0KCkge1xuICAgIC8qKiB0aGlzIGNoZWNrIGJlY2F1c2UgdGhlIHRlc3RzIGZhaWwgaGVyZSBmb3Igc29tZSByZWFzb25zICAqL1xuICAgIGlmICh0aGlzLnBpY2tlci5jb25maWcpIHtcbiAgICAgIHRoaXMucGlja2VyLmNsZWFyKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IHRoZSBkYXRlIHVzaW5nIGBCQmouTWFza3MuVHlwZXMuZGF0ZWBcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGRhdGUgZGF0ZSBhcyBhIHN0cmluZ1xuICAgKiBAcGFyYW0ge1N0cmluZ30gZm9ybWF0IEJCaiBkYXRlIGZvcm1hdFxuICAgKlxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IGZvcm1hdHRlZCBkYXRlIGFzIHN0cmluZ1xuICAgKi9cbiAgQGF1dG9iaW5kXG4gIGZvcm1hdERhdGUoZGF0ZSwgZm9ybWF0KSB7XG4gICAgY29uc3QgZGF0ZVRpbWVGb3JtYXR0ZXIgPSB0aGlzLmdldE9wdGlvbignZGF0ZVRpbWVGb3JtYXR0ZXInLCB0aGlzLl9wYXJhbXMpXG4gICAgY29uc3QgbG9jYWxlID0gdGhpcy5nZXRPcHRpb24oXG4gICAgICAnZGF0ZVRpbWVMb2NhbGUnLFxuICAgICAgdGhpcy5fcGFyYW1zLFxuICAgICAgSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZSB8fCAnZW4tVVMnXG4gICAgKVxuXG4gICAgaWYgKGRhdGVUaW1lRm9ybWF0dGVyKSB7XG4gICAgICBjb25zdCB0eXBlID0gdHlwZW9mIGRhdGVUaW1lRm9ybWF0dGVyXG4gICAgICBsZXQgZXhwcmVzc2lvbiA9IGRhdGVUaW1lRm9ybWF0dGVyXG5cbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgIGlmICghKGV4cHJlc3Npb24uaW5kZXhPZigncmV0dXJuJykgPj0gMCkpIHtcbiAgICAgICAgICAgIGV4cHJlc3Npb24gPSAncmV0dXJuICcgKyBleHByZXNzaW9uICsgJzsnXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbihcbiAgICAgICAgICAgICdkYXRlJyxcbiAgICAgICAgICAgICdmb3JtYXQnLFxuICAgICAgICAgICAgJ2xvY2FsZScsXG4gICAgICAgICAgICAnRGF0ZU1hc2snLFxuICAgICAgICAgICAgZXhwcmVzc2lvblxuICAgICAgICAgICkoZGF0ZSwgZm9ybWF0LCBsb2NhbGUsIEJCai5NYXNrcy5EYXRlTWFzaylcblxuICAgICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgICAgcmV0dXJuIGRhdGVUaW1lRm9ybWF0dGVyKGRhdGUsIGZvcm1hdCwgbG9jYWxlLCBCQmouTWFza3MuRGF0ZU1hc2spXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgZGF0ZVRpbWVGb3JtYXR0ZXIgZGVmaW5lZCBmb3IgY29sdW1uIFwiJHt0aGlzLl9wYXJhbXMuY29sRGVmLmZpZWxkfVwiLiBUaGUgZm9ybWF0dGVyIHNob3VsZCBiZSBhbiBleHByZXNzaW9uIG9yIHBsYWluIGZ1bmN0aW9uYFxuICAgICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFmb3JtYXQgfHwgKGZvcm1hdCAmJiBmb3JtYXQuaW5kZXhPZignJScpIDwgMCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBCQmouTWFza3MuRGF0ZU1hc2subWFzayhkYXRlLCBmb3JtYXQsIGxvY2FsZSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIHRvIGRhdGUgcGlja2VyIGNoYW5nZXMgYW5kIHVwZGF0ZSB0aGUgc2VsZWN0ZWQgZGF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBzZWxlY3RlZERhdGVzICBhcnJheSBvZiBzZWxlY3RlZCBkYXRlc1xuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vbkRhdGVDaGFuZ2VkKHNlbGVjdGVkRGF0ZXMpIHtcbiAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHNlbGVjdGVkRGF0ZXNbMF0gfHwgbnVsbFxuICAgIHRoaXMubm90aWZ5KERhdGVUaW1lSW5wdXQuT05fREFURV9DSEFOR0VELCB0aGlzLnNlbGVjdGVkRGF0ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcGlja2VyIGdsb2JhbCBsb2NhbGl6YXRpb24gd2hpY2ggd2lsbCB3b3JrIHdpdGggYW55IGxvY2FsZVxuICAgKlxuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqXG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mbGF0cGlja3IvZmxhdHBpY2tyL2Jsb2IvbWFzdGVyL3NyYy9sMTBuL2RlZmF1bHQudHNcbiAgICovXG4gIF9nZXRQaWNrZXJMb2NhbGUoKSB7XG4gICAgY29uc3QgbG9jYWxlID0gSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZSB8fCAnZW4tVVMnXG5cbiAgICBjb25zdCB3ZWVrRGF5c1Nob3J0ID0gW11cbiAgICBjb25zdCB3ZWVrRGF5c0xvbmcgPSBbXVxuXG4gICAgZm9yIChsZXQgZGF5ID0gNDsgZGF5IDwgMTE7IGRheSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMTk3MCwgMSAtIDEsIGRheSlcblxuICAgICAgd2Vla0RheXNTaG9ydC5wdXNoKFxuICAgICAgICBkYXRlXG4gICAgICAgICAgLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwge1xuICAgICAgICAgICAgd2Vla2RheTogJ3Nob3J0JyxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zcGxpdCgnLCcpWzBdIC8vIHRoZSBkYXRlLXRpbWUtZm9ybWF0LXRpbWV6b25lIHBvbHlmaWxsIGF0dGFjaCB0aGUgZGF0ZSBhbHNvXG4gICAgICApXG5cbiAgICAgIHdlZWtEYXlzTG9uZy5wdXNoKFxuICAgICAgICBkYXRlXG4gICAgICAgICAgLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwge1xuICAgICAgICAgICAgd2Vla2RheTogJ2xvbmcnLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNwbGl0KCcsJylbMF0gLy8gdGhlIGRhdGUtdGltZS1mb3JtYXQtdGltZXpvbmUgcG9seWZpbGwgYXR0YWNoIHRoZSBkYXRlIGFsc29cbiAgICAgIClcbiAgICB9XG5cbiAgICBjb25zdCBtb250aHNTaG9ydCA9IFtdXG4gICAgY29uc3QgbW9udGhzTG9uZyA9IFtdXG5cbiAgICBmb3IgKGxldCBtb250aCA9IDA7IG1vbnRoIDwgMTI7IG1vbnRoKyspIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgxOTcwLCBtb250aCwgNClcblxuICAgICAgbW9udGhzU2hvcnQucHVzaChcbiAgICAgICAgZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHtcbiAgICAgICAgICBtb250aDogJ3Nob3J0JyxcbiAgICAgICAgfSlcbiAgICAgIClcblxuICAgICAgbW9udGhzTG9uZy5wdXNoKFxuICAgICAgICBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwge1xuICAgICAgICAgIG1vbnRoOiAnbG9uZycsXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHdlZWtkYXlzOiB7XG4gICAgICAgIHNob3J0aGFuZDogd2Vla0RheXNTaG9ydCxcbiAgICAgICAgbG9uZ2hhbmQ6IHdlZWtEYXlzTG9uZyxcbiAgICAgIH0sXG4gICAgICBtb250aHM6IHtcbiAgICAgICAgc2hvcnRoYW5kOiBtb250aHNTaG9ydCxcbiAgICAgICAgbG9uZ2hhbmQ6IG1vbnRoc0xvbmcsXG4gICAgICB9LFxuICAgICAgZGF5c0luTW9udGg6IFszMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXSxcbiAgICAgIGZpcnN0RGF5T2ZXZWVrOiBCQmouTWFza3MuVXRpbHMuRGF0ZXMuZ2V0V2Vla1N0YXJ0QnlMb2NhbGUobG9jYWxlKSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgb3JkaW5hbDogbnVtYmVyID0+ICcnLFxuICAgICAgcmFuZ2VTZXBhcmF0b3I6ICcgICcsXG4gICAgICB3ZWVrQWJicmV2aWF0aW9uOiAnJyxcbiAgICAgIHNjcm9sbFRpdGxlOiAnJyxcbiAgICAgIHRvZ2dsZVRpdGxlOiAnJyxcbiAgICAgIGFtUE06IFsnQU0nLCAnUE0nXSxcbiAgICAgIHllYXJBcmlhTGFiZWw6ICcnLFxuICAgICAgaG91ckFyaWFMYWJlbDogJycsXG4gICAgICBtaW51dGVBcmlhTGFiZWw6ICcnLFxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEYXRlVGltZUlucHV0XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvRGF0ZVRpbWVJbnB1dC9EYXRlVGltZUlucHV0LmpzIiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIik7XG5cbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuXG52YXIgdHJhbnNmb3JtO1xudmFyIGluc2VydEludG87XG5cblxuXG52YXIgb3B0aW9ucyA9IHtcImhtclwiOnRydWV9XG5cbm9wdGlvbnMudHJhbnNmb3JtID0gdHJhbnNmb3JtXG5vcHRpb25zLmluc2VydEludG8gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LnBhcmVudC5kb2N1bWVudC5oZWFkXG4gICAgICAgICAgICAgIH07XG5cbnZhciB1cGRhdGUgPSByZXF1aXJlKFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qc1wiKShjb250ZW50LCBvcHRpb25zKTtcblxuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG5cbmlmKG1vZHVsZS5ob3QpIHtcblx0bW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5zY3NzXCIpO1xuXG5cdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cblx0XHR2YXIgbG9jYWxzID0gKGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHZhciBrZXksIGlkeCA9IDA7XG5cblx0XHRcdGZvcihrZXkgaW4gYSkge1xuXHRcdFx0XHRpZighYiB8fCBhW2tleV0gIT09IGJba2V5XSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRpZHgrKztcblx0XHRcdH1cblxuXHRcdFx0Zm9yKGtleSBpbiBiKSBpZHgtLTtcblxuXHRcdFx0cmV0dXJuIGlkeCA9PT0gMDtcblx0XHR9KGNvbnRlbnQubG9jYWxzLCBuZXdDb250ZW50LmxvY2FscykpO1xuXG5cdFx0aWYoIWxvY2FscykgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGluZyBDU1MgSE1SIGR1ZSB0byBjaGFuZ2VkIGNzcy1tb2R1bGVzIGxvY2Fscy4nKTtcblxuXHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0fSk7XG5cblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0RhdGVUaW1lSW5wdXQvc3R5bGUuc2NzcyIsImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikoZmFsc2UpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiLmRhdGV0aW1lX19pbnB1dHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6aGlkZGVuO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYWctaW5wdXQtYm9yZGVyLWNvbG9yLCB2YXIoLS1hZy1ib3JkZXItY29sb3IsICNiYWJmYzcpKTtib3JkZXItcmFkaXVzOjNweH0uZGF0ZXRpbWVfX2lucHV0OmZvY3VzLC5kYXRldGltZV9faW5wdXQ6YWN0aXZlLC5kYXRldGltZV9faW5wdXQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWFnLWlucHV0LWZvY3VzLWJvcmRlci1jb2xvciwgcmdiYSgzMywxNTAsMjQzLDAuNCkpfS5kYXRldGltZV9faW5wdXRfX2lucHV0e2ZsZXg6MTtwYWRkaW5nOjZweDtib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjppbmhlcml0fS5hZy10aGVtZS1hbHBpbmUgLmRhdGV0aW1lX19pbnB1dF9faW5wdXQsLmFnLXRoZW1lLWJhbGhhbSAuZGF0ZXRpbWVfX2lucHV0X19pbnB1dCwuYWctdGhlbWUtbWF0ZXJpYWwgLmRhdGV0aW1lX19pbnB1dF9faW5wdXR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yLCAjZmZmKX0uYWctdGhlbWUtYWxwaW5lLWRhcmsgLmRhdGV0aW1lX19pbnB1dF9faW5wdXQsLmFnLXRoZW1lLWJhbGhhbS1kYXJrIC5kYXRldGltZV9faW5wdXRfX2lucHV0e2JhY2tncm91bmQtY29sb3I6dmFyKC0tYWctYmFja2dyb3VuZC1jb2xvciwgIzJkMzQzNil9LmRhdGV0aW1lX19pbnB1dF9fY2xlYXJ7bWFyZ2luLWxlZnQ6MXB4O21hcmdpbi10b3A6MXB4O3BhZGRpbmc6NnB4O3RleHQtYWxpZ246Y2VudGVyO2JvcmRlcjpub25lO291dGxpbmU6bm9uZTtjdXJzb3I6cG9pbnRlcjtjb2xvcjppbmhlcml0fS5kYXRldGltZV9faW5wdXQtLWVkaXRvcntib3JkZXItY29sb3I6dmFyKC0tYWctaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yLCByZ2JhKDMzLDE1MCwyNDMsMC40KSl9LmRhdGV0aW1lX19pbnB1dC0tZWRpdG9yIC5kYXRldGltZV9faW5wdXRfX2lucHV0e3BhZGRpbmc6MDtwYWRkaW5nLWxlZnQ6NnB4fVxcblwiLCBcIlwiXSk7XG5cbi8vIGV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIhLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvRGF0ZVRpbWVJbnB1dC9zdHlsZS5zY3NzXG4vLyBtb2R1bGUgaWQgPSAxMjZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEgMiAzIiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIik7XG5cbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuXG52YXIgdHJhbnNmb3JtO1xudmFyIGluc2VydEludG87XG5cblxuXG52YXIgb3B0aW9ucyA9IHtcImhtclwiOnRydWV9XG5cbm9wdGlvbnMudHJhbnNmb3JtID0gdHJhbnNmb3JtXG5vcHRpb25zLmluc2VydEludG8gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LnBhcmVudC5kb2N1bWVudC5oZWFkXG4gICAgICAgICAgICAgIH07XG5cbnZhciB1cGRhdGUgPSByZXF1aXJlKFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qc1wiKShjb250ZW50LCBvcHRpb25zKTtcblxuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG5cbmlmKG1vZHVsZS5ob3QpIHtcblx0bW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5zY3NzXCIpO1xuXG5cdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cblx0XHR2YXIgbG9jYWxzID0gKGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHZhciBrZXksIGlkeCA9IDA7XG5cblx0XHRcdGZvcihrZXkgaW4gYSkge1xuXHRcdFx0XHRpZighYiB8fCBhW2tleV0gIT09IGJba2V5XSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRpZHgrKztcblx0XHRcdH1cblxuXHRcdFx0Zm9yKGtleSBpbiBiKSBpZHgtLTtcblxuXHRcdFx0cmV0dXJuIGlkeCA9PT0gMDtcblx0XHR9KGNvbnRlbnQubG9jYWxzLCBuZXdDb250ZW50LmxvY2FscykpO1xuXG5cdFx0aWYoIWxvY2FscykgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGluZyBDU1MgSE1SIGR1ZSB0byBjaGFuZ2VkIGNzcy1tb2R1bGVzIGxvY2Fscy4nKTtcblxuXHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0fSk7XG5cblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0RhdGVUaW1lRmlsdGVyL3N0eWxlLnNjc3MiLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKGZhbHNlKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi5kYXRlVGltZUZpbHRlciBzZWxlY3R7bWFyZ2luLWJvdHRvbTo5cHg7cGFkZGluZzo2cHg7Ym9yZGVyLXJhZGl1czozcHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1hZy1pbnB1dC1ib3JkZXItY29sb3IsIHZhcigtLWFnLWJvcmRlci1jb2xvciwgI2JhYmZjNykpO2NvbG9yOmluaGVyaXR9LmRhdGVUaW1lRmlsdGVyIHNlbGVjdDpmb2N1cywuZGF0ZVRpbWVGaWx0ZXIgc2VsZWN0OmFjdGl2ZXtib3JkZXItY29sb3I6dmFyKC0tYWctaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yLCByZ2JhKDMzLDE1MCwyNDMsMC40KSl9LmRhdGVUaW1lRmlsdGVyIHNlbGVjdCBvcHRpb257dGV4dC1pbmRlbnQ6NnB4fVxcblwiLCBcIlwiXSk7XG5cbi8vIGV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIhLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvRGF0ZVRpbWVGaWx0ZXIvc3R5bGUuc2Nzc1xuLy8gbW9kdWxlIGlkID0gMTI4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIDIgMyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBEYXRlVGltZUVkaXRvciBmcm9tICcuL0RhdGVUaW1lRWRpdG9yJ1xuXG5leHBvcnQgZGVmYXVsdCBEYXRlVGltZUVkaXRvclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0RhdGVUaW1lRWRpdG9yL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgYXV0b2JpbmQsIG92ZXJyaWRlIH0gZnJvbSAnY29yZS1kZWNvcmF0b3JzJ1xuaW1wb3J0IHV0Y1RvWm9uZWRUaW1lIGZyb20gJ2RhdGUtZm5zLXR6L3V0Y1RvWm9uZWRUaW1lJ1xuaW1wb3J0IERhdGVUaW1lSW5wdXQgZnJvbSAnLi4vRGF0ZVRpbWVJbnB1dCdcbmltcG9ydCBDb21wb25lbnQgZnJvbSAnLi4vQ29tcG9uZW50J1xuXG4vKipcbiAqIERhdGVUaW1lSW5wdXRcbiAqXG4gKiBTaW1wbGUgRGF0ZVRpbWVJbnB1dCBjb21wb25lbnQgd2hpY2ggaW50ZWdyYXRlcyB0aGUgZmxhdHBpY2tyXG4gKlxuICogIyMgT3B0aW9uc1xuICpcbiAqIHwgTmFtZSAgICAgICAgICAgICAgICAgIFx0fCBEZWZhdWx0ICAgICBcdHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0fFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdHw6LS0tLS0tLS0tLS0tLTp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICoqZGF0ZVRpbWVFbmFibGVUaW1lKiogICB8IGZhbHNlICAgIHwgZW5hYmxlIC8gZGlzYWJsZSB0aW1lXG4gKiB8ICoqZGF0ZVRpbWVFbmFibGUyNEhSKiogICB8IGZhbHNlICAgIHwgZW5hYmxlIC8gZGlzYWJsZSB0aW1lIDI0IGZvcm1hdFxuICogfCAqKmRhdGVUaW1lRW5hYmxlU2Vjb25kcyoqICAgfCBmYWxzZSAgICB8IGVuYWJsZSAvIGRpc2FibGUgc2Vjb25kcyBtYW5hZ2VtZW50XG4gKiB8ICoqZGF0ZVRpbWVFbmFibGVDYWxlbmRhcioqICAgfCBmYWxzZSAgICB8IGVuYWJsZSAvIGRpc2FibGUgQ2FsZW5kYXIuXG4gKiB8ICoqZGF0ZVRpbWVNYXNrKiogICB8IGZhbHNlICAgIHwgVGhlIG1hc2sgdXNlZCB0byBmb3JtYXQgdGhlIHNlbGVjdGVkIGRhdGVcbiAqIHwgKipkYXRlVGltZU1heCoqICAgfCB1bmRlZmluZWQgICAgfCAgTWF4IGFsbG93ZWQgZGF0ZVxuICogfCAqKmRhdGVUaW1lTWluKiogICB8IHVuZGVmaW5lZCAgICB8ICBNaW4gYWxsb3dlZCBkYXRlXG4gKiB8ICoqZGF0ZVRpbWVGb3JtYXR0ZXIqKiAgIHwgZmFsc2UgICAgfCAgQSBmdW5jdGlvbiBvciBleHByZXNzaW9uIHRvIGZvcm1hdCB0aGUgZGF0ZSAoQHNlZSBzdXBwb3J0ZWQgcGFyYW0pXG4gKiB8ICoqZGF0ZVRpbWVMb2NhbGUqKiAgIHwgU3lzdGVtIGRlZmF1bHQgICAgfCAgQSBsb2NhbGUgdG8gdXNlIGZvciBkYXRlIGZvcm1hdHRpbmdcbiAqIHwgKipkYXRlVGltZURlZmF1bHRIb3VyKiogICB8IDEyICAgIHwgIEluaXRpYWwgdmFsdWUgb2YgdGhlIGhvdXIgZWxlbWVudC5cbiAqIHwgKipkYXRlVGltZURlZmF1bHRNaW51dGUqKiAgIHwgMCAgICB8ICBJbml0aWFsIHZhbHVlIG9mIHRoZSBtaW51dGUgZWxlbWVudC5cbiAqIHwgKipkYXRlVGltZURpc2FibGVNb2JpbGUqKiAgIHwgZmFsc2UgICAgfCAgU2V0IGRpc2FibGVNb2JpbGUgdG8gdHJ1ZSB0byBhbHdheXMgdXNlIHRoZSBub24tbmF0aXZlIHBpY2tlci5cbiAqIHwgKipkYXRlVGltZUVuYWJsZVdlZWtOdW1iZXIqKiAgIHwgdHJ1ZSAgICB8ICBFbmFibGVzIGRpc3BsYXkgb2Ygd2VlayBudW1iZXJzIGluIGNhbGVuZGFyLlxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cbmNsYXNzIERhdGVUaW1lRWRpdG9yIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIEB0eXBlIHtEYXRlVGltZUlucHV0fVxuICAgKi9cbiAgX2lucHV0ID0gbmV3IERhdGVUaW1lSW5wdXQodHJ1ZSlcblxuICAvKipcbiAgICogQHR5cGUge1N0cmluZ31cbiAgICovXG4gIF92YWx1ZSA9IG51bGxcblxuICAvKipcbiAgICogUGFyYW1zIHJlY2VpdmVkIGluIGluaXRcbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIF9wYXJhbXMgPSBudWxsXG5cbiAgLyoqXG4gICAqIFRha2VzIGluY29tcGxldGUgaXNvIHN0cmluZyBhbmQgcmV0dXJuIGEgY29tcGxldGUgb25lXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBkYXRlIGluY29tcGxldGUgaXNvIHN0cmluZ1xuICAgKlxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IGNvbXBsZXRlIGlzbyBzdHJpbmdcbiAgICovXG4gIHN0YXRpYyBmaXhTaG9ydElTTyh2YWx1ZSkge1xuICAgIHJldHVybiBCQmouTWFza3MuVXRpbHMuRGF0ZXMuZml4U2hvcnRJU08odmFsdWUpXG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIEBvdmVycmlkZVxuICBpbml0KHBhcmFtcykge1xuICAgIHRoaXMuX3BhcmFtcyA9IHBhcmFtc1xuICAgIHRoaXMuZm9jdXNBZnRlckF0dGFjaGVkID0gcGFyYW1zLmNlbGxTdGFydGVkRWRpdFxuICAgIGlmICh0aGlzLmZvY3VzQWZ0ZXJBdHRhY2hlZCkge1xuICAgICAgbGV0IGtleVByZXNzQmFja3NwYWNlT3JEZWxldGUgPVxuICAgICAgICBwYXJhbXMua2V5UHJlc3MgPT0gMzIgfHwgcGFyYW1zLmtleVByZXNzID09IDQ2IC8vIHNwYWNlIC8vIGRlbGV0ZVxuXG4gICAgICBpZiAoa2V5UHJlc3NCYWNrc3BhY2VPckRlbGV0ZSkge1xuICAgICAgICB0aGlzLl92YWx1ZSA9ICcnXG4gICAgICB9IGVsc2UgaWYgKHBhcmFtcy5jaGFyUHJlc3MgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBwYXJhbXMuY2hhclByZXNzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHBhcmFtcy52YWx1ZVxuICAgICAgICBpZiAocGFyYW1zLmtleVByZXNzICE9IDExMykge1xuICAgICAgICAgIC8vRjJcbiAgICAgICAgICB0aGlzLmhpZ2hsaWdodEFsbE9uRm9jdXMgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdmFsdWUgPSBwYXJhbXMudmFsdWVcbiAgICB9XG5cbiAgICB0aGlzLl92YWx1ZSA9IERhdGVUaW1lRWRpdG9yLmZpeFNob3J0SVNPKHRoaXMuX3ZhbHVlKVxuICAgIHRoaXMuX2lucHV0LmluaXQocGFyYW1zKVxuICAgIHRoaXMuX2lucHV0Lm9uKERhdGVUaW1lSW5wdXQuT05fREFURV9DSEFOR0VELCB0aGlzLl9vbkRhdGVDaGFuZ2UpXG5cbiAgICBpZiAodGhpcy5fdmFsdWUpIHtcbiAgICAgIHRoaXMuX2lucHV0LnNldERhdGUoXG4gICAgICAgIHV0Y1RvWm9uZWRUaW1lKHRoaXMuX3ZhbHVlLCBCQmouTWFza3MuVXRpbHMuRGF0ZXMuZ2V0VGltZXpvbmVPck9mZnNldCgpKVxuICAgICAgKVxuICAgIH1cblxuICAgIHRoaXMuX2d1aSA9IHRoaXMuX2lucHV0LmdldEd1aSgpXG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIEBvdmVycmlkZVxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuX2lucHV0LmRlc3Ryb3koKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY2FsbGVkIG9uY2UgYWZ0ZXIgR1VJIGlzIGF0dGFjaGVkIHRvIERPTS5cbiAgICogTWFrZSBzdXJlIHRoZSBjb250YWluZXIgaXMgYWx3YXlzIGZvY3VzZWQgYW5kIGxpc3RlbmluZyB0byBrZXkgY2hhbmdlc1xuICAgKi9cbiAgYWZ0ZXJHdWlBdHRhY2hlZCgpIHtcbiAgICBpZiAodGhpcy5mb2N1c0FmdGVyQXR0YWNoZWQpIHtcbiAgICAgIHRoaXMuZm9jdXNJbigpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZmluYWwgdmFsdWUgdG8gdGhlIGdyaWQsIHRoZSByZXN1bHQgb2YgdGhlIGVkaXRpbmdcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn1cbiAgICovXG4gIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl9wYXJhbXMucGFyc2VWYWx1ZSh0aGlzLl92YWx1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNhbGxlZCBvbmNlIGFmdGVyIGluaXRpYWxpemVkIGFuZCByZXR1cm5zIGZhbHNlIHNvIHRoZSBlZGl0b3IgYXBwZWFycyBpbiB0aGUgY2VsbFxuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufSBhbHdheXMgZmFsc2VcbiAgICoqL1xuICBpc1BvcHVwKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIElmIGRvaW5nIGZ1bGwgcm93IGVkaXQsIHRoZW4gZ2V0cyBjYWxsZWQgd2hlbiB0YWJiaW5nIGludG8gdGhlIGNlbGwuXG4gICAqL1xuICBmb2N1c0luKCkge1xuICAgIHRoaXMuX2lucHV0Lm9wZW4oKVxuICB9XG5cbiAgLyoqXG4gICAqIElmIGRvaW5nIGZ1bGwgcm93IGVkaXQsIHRoZW4gZ2V0cyBjYWxsZWQgd2hlbiB0YWJiaW5nIG91dCBvZiB0aGUgY2VsbC5cbiAgICovXG4gIGZvY3VzT3V0KCkge1xuICAgIHRoaXMuX2lucHV0LmNsb3NlKClcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGVkaXRvciB2YWx1ZSB3aXRoIHNlbGVjdGVkIGRhdGUgZnJvbSB0aGUgaW5wdXRcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGRhdGVcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25EYXRlQ2hhbmdlKGRhdGUpIHtcbiAgICB0aGlzLl92YWx1ZSA9IGRhdGUgaW5zdGFuY2VvZiBEYXRlID8gZGF0ZS50b0lTT1N0cmluZygpIDogJydcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEYXRlVGltZUVkaXRvclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0RhdGVUaW1lRWRpdG9yL0RhdGVUaW1lRWRpdG9yLmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKiogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0N1c3RvbUV2ZW50L0N1c3RvbUV2ZW50ICAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dHJhLXNlbWlcbjsoZnVuY3Rpb24oKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93LkN1c3RvbUV2ZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0gLy9JZiBub3QgSUVcblxuICBmdW5jdGlvbiBDdXN0b21FdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgcGFyYW1zID0gcGFyYW1zIHx8IHsgYnViYmxlczogZmFsc2UsIGNhbmNlbGFibGU6IGZhbHNlLCBkZXRhaWw6IHVuZGVmaW5lZCB9XG4gICAgdmFyIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdDdXN0b21FdmVudCcpXG4gICAgZXZ0LmluaXRDdXN0b21FdmVudChldmVudCwgcGFyYW1zLmJ1YmJsZXMsIHBhcmFtcy5jYW5jZWxhYmxlLCBwYXJhbXMuZGV0YWlsKVxuICAgIHJldHVybiBldnRcbiAgfVxuXG4gIEN1c3RvbUV2ZW50LnByb3RvdHlwZSA9IHdpbmRvdy5FdmVudC5wcm90b3R5cGVcblxuICB3aW5kb3cuQ3VzdG9tRXZlbnQgPSBDdXN0b21FdmVudFxufSkoKVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAQmFzaXMuQWdHcmlkQ29tcG9uZW50cy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5pdC5qcydcbmV4cG9ydCAqIGZyb20gJy4vY29sdW1ucy5qcydcbmV4cG9ydCAqIGZyb20gJy4vcm93cy5qcydcbmV4cG9ydCAqIGZyb20gJy4vY2VsbHMuanMnXG5leHBvcnQgKiBmcm9tICcuL3N0YXRlLmpzJ1xuZXhwb3J0ICogZnJvbSAnLi90b29scGFuZWwuanMnXG5leHBvcnQgKiBmcm9tICcuL3N0YXR1c2Jhci5qcydcbmV4cG9ydCAqIGZyb20gJy4vb3ZlcmxheXMuanMnXG5leHBvcnQgKiBmcm9tICcuL2NvbnRleHQuanMnXG5leHBvcnQgKiBmcm9tICcuL2NoYXJ0cy5qcydcbmV4cG9ydCAqIGZyb20gJy4vanNzLmpzJ1xuZXhwb3J0ICogZnJvbSAnLi91dGlsaXRpZXMuanMnXG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBCYXNpcy5BZ0dyaWRDb21wb25lbnRzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfZXh0ZW5kQ29sdW1uRGVmaW5pdGlvbnMgfSBmcm9tICcuL2NvbHVtbnMnXG5pbXBvcnQgeyBnd19uYXZpZ2F0ZVRvTmV4dFJvdywgZ3dfZ2V0Um93Tm9kZUlkIH0gZnJvbSAnLi9yb3dzJ1xuaW1wb3J0IHsgZ3dfZ2V0Q29udGV4dE1lbnUgfSBmcm9tICcuL21lbnVzJ1xuaW1wb3J0IHsgZ3dfZ2V0Q2hhcnRUb29sYmFySXRlbXMgfSBmcm9tICcuL2NoYXJ0cydcbmltcG9ydCB7IGd3X2dldERvY3VtZW50LCBnd19nZXRXaW5kb3csIGd3X2FkZEdyaWQgfSBmcm9tICcuL3V0aWxpdGllcydcbmltcG9ydCB7XG4gIGd3X29uUm93Q2xpY2tlZCxcbiAgZ3dfb25Sb3dEb3VibGVDbGlja2VkLFxuICBnd19vblNlbGVjdGlvbkNoYW5nZWQsXG4gIGd3X29uUmFuZ2VTZWxlY3Rpb25DaGFuZ2VkLFxuICBnd19vbkNlbGxDbGlja0V2ZW50LFxuICBnd19vbkNlbGxFZGl0aW5nRXZlbnQsXG4gIGd3X29uUm93RWRpdGluZ0V2ZW50LFxuICBnd19vblJlYWR5RXZlbnQsXG4gIGd3X2RlYm91bmNlLFxufSBmcm9tICdldmVudHMnXG5pbXBvcnQgdGVtcGxhdGUgZnJvbSAnbG9kYXNoLWVzL3RlbXBsYXRlJ1xuaW1wb3J0IEhUTUxUb29sdGlwIGZyb20gJy4uL2NvbXBvbmVudHMvSFRNTFRvb2x0aXAuanMnXG5cbmNvbnN0IHsgZGVlcFBhcnNlSnNvbiB9ID0gcmVxdWlyZSgnZGVlcC1wYXJzZS1qc29uJylcblxuZXhwb3J0IGZ1bmN0aW9uIGd3X2luaXQob3B0aW9ucywgbGljZW5zZSwgZGF0YSkge1xuICBpZiAoYWdHcmlkLkxpY2Vuc2VNYW5hZ2VyICYmIGxpY2Vuc2UpIHtcbiAgICBhZ0dyaWQuTGljZW5zZU1hbmFnZXIuc2V0TGljZW5zZUtleShsaWNlbnNlKVxuICB9XG5cbiAgY29uc3QgaWQgPSBvcHRpb25zLmNvbnRleHQuaWRcbiAgY29uc3QgY29udGFpbmVyID0gZ3dfZ2V0RG9jdW1lbnQoKS5nZXRFbGVtZW50QnlJZChpZClcbiAgLy8gd2UgbWFrZSB0aGUgZ3JpZCBvcHRpb25zIGF2YWlsYWJsZSBhcyBzb29uIGFzIHBvc3NpYmxlXG4gIGNvbnN0IGdyaWQgPSBnd19hZGRHcmlkKGlkLCB7XG4gICAgY29udGFpbmVyLFxuICAgIG9wdGlvbnMsXG4gIH0pXG5cbiAgLy8gVE9ETzogdXNlIGFnIGdyaWQgZGVzdHJveVxuICBjb250YWluZXIuaW5uZXJIVE1MID0gJydcblxuICBjb25zdCBwYXJzZWRPcHRpb25zID0gZ3dfcGFyc2VPcHRpb25zKG9wdGlvbnMpXG4gIHBhcnNlZE9wdGlvbnMucm93RGF0YSA9IGRhdGFcblxuICBjb25zdCBpbnN0YW5jZSA9IG5ldyBhZ0dyaWQuR3JpZChjb250YWluZXIsIHBhcnNlZE9wdGlvbnMpXG4gIGdyaWQuaW5zdGFuY2UgPSBpbnN0YW5jZVxuICBncmlkLm9wdGlvbnMgPSBwYXJzZWRPcHRpb25zXG5cbiAgY29uc29sZS5sb2coXG4gICAgYCVjIEdyaWQgWyR7aWR9XSBzZXR0aW5ncyA6IGAsXG4gICAgJ2JhY2tncm91bmQ6ICMyMjI7IGNvbG9yOiAjYmFkYTU1JyxcbiAgICBwYXJzZWRPcHRpb25zXG4gIClcbn1cblxuLyoqXG4gKiBQYXJzZSBPcHRpb25zXG4gKlxuICogUGFyc2UgdGhlIGdyaWQgb3B0aW9ucyBhbmQgcmV0dXJuXG4gKiBhbiBvYmplY3Qgd2hpY2ggY2FuIGJlIHBhc3NlZCB0byB0aGUgZ3JpZFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIEdyaWQgb3B0aW9ucyBhcyBKc29uIE9iamVjdFxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gb3B0aW9ucyBvYmplY3RcbiAqL1xuZnVuY3Rpb24gZ3dfcGFyc2VPcHRpb25zKG9wdGlvbnMpIHtcbiAgY29uc3QgZGVlcFBhcnNlZE9wdGlvbnMgPSBkZWVwUGFyc2VKc29uKEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpKVxuICBjb25zdCBpZCA9IGRlZXBQYXJzZWRPcHRpb25zLmNvbnRleHQuaWRcbiAgY29uc3QgZ2V0RGF0YVBhdGhUZW1wbGF0ZSA9IGRlZXBQYXJzZWRPcHRpb25zLmNvbnRleHQuZ2V0RGF0YVBhdGggfHwgJydcbiAgLy8gVE9ETzogZG8gd2UgbmVlZCB0byBjb250cm9sIHRoaXMgc2V0dGluZyBmcm9tIEJCaiA/XG4gIGNvbnN0IGRlYm91bmNlRHVyYXRpb24gPSAyNTBcbiAgY29uc3QgZmluYWxPcHRpb25zID0ge1xuICAgIC4uLmRlZXBQYXJzZWRPcHRpb25zLFxuICAgIC4uLntcbiAgICAgIGdldERvY3VtZW50OiAoKSA9PiBnd19nZXREb2N1bWVudCgpLFxuICAgICAgb25DZWxsRWRpdGluZ1N0YXJ0ZWQ6IGUgPT4ge1xuICAgICAgICBnd19vbkNlbGxFZGl0aW5nRXZlbnQoaWQsIGUpXG4gICAgICB9LFxuICAgICAgb25DZWxsRWRpdGluZ1N0b3BwZWQ6IGUgPT4ge1xuICAgICAgICBnd19vbkNlbGxFZGl0aW5nRXZlbnQoaWQsIGUpXG4gICAgICB9LFxuICAgICAgb25DZWxsVmFsdWVDaGFuZ2VkOiBlID0+IHtcbiAgICAgICAgZ3dfb25DZWxsRWRpdGluZ0V2ZW50KGlkLCBlKVxuICAgICAgfSxcbiAgICAgIG9uUm93RWRpdGluZ1N0YXJ0ZWQ6IGUgPT4ge1xuICAgICAgICBnd19vblJvd0VkaXRpbmdFdmVudChpZCwgZSlcbiAgICAgIH0sXG4gICAgICBvblJvd1ZhbHVlQ2hhbmdlZDogZSA9PiB7XG4gICAgICAgIGd3X29uUm93RWRpdGluZ0V2ZW50KGlkLCBlKVxuICAgICAgfSxcbiAgICAgIG9uUm93RWRpdGluZ1N0b3BwZWQ6IGUgPT4ge1xuICAgICAgICBnd19vblJvd0VkaXRpbmdFdmVudChpZCwgZSlcbiAgICAgIH0sXG4gICAgICBvbkNlbGxDbGlja2VkOiBlID0+IHtcbiAgICAgICAgZ3dfb25DZWxsQ2xpY2tFdmVudChpZCwgZSlcbiAgICAgIH0sXG4gICAgICBvbkNlbGxEb3VibGVDbGlja2VkOiBlID0+IHtcbiAgICAgICAgZ3dfb25DZWxsQ2xpY2tFdmVudChpZCwgZSlcbiAgICAgIH0sXG4gICAgICBvbkdyaWRSZWFkeTogZSA9PiB7XG4gICAgICAgIGd3X29uUmVhZHlFdmVudChpZCwgZSlcbiAgICAgIH0sXG4gICAgICBnZXRSb3dOb2RlSWQ6IGRhdGEgPT4gZ3dfZ2V0Um93Tm9kZUlkKGlkLCBkYXRhKSxcbiAgICAgIGdldENvbnRleHRNZW51SXRlbXM6IHBhcmFtcyA9PiBnd19nZXRDb250ZXh0TWVudShpZCwgcGFyYW1zKSxcbiAgICAgIGdldENoYXJ0VG9vbGJhckl0ZW1zOiBnd19nZXRDaGFydFRvb2xiYXJJdGVtcyxcbiAgICAgIHBvcHVwUGFyZW50OiBnd19nZXREb2N1bWVudCgpLmJvZHksXG4gICAgICBvblJvd0RvdWJsZUNsaWNrZWQ6IGd3X2RlYm91bmNlKGd3X29uUm93RG91YmxlQ2xpY2tlZCwgZGVib3VuY2VEdXJhdGlvbiksXG4gICAgICBvblJvd0NsaWNrZWQ6IGd3X2RlYm91bmNlKGd3X29uUm93Q2xpY2tlZCwgZGVib3VuY2VEdXJhdGlvbiksXG4gICAgICBvblNlbGVjdGlvbkNoYW5nZWQ6IGd3X2RlYm91bmNlKGd3X29uU2VsZWN0aW9uQ2hhbmdlZCwgZGVib3VuY2VEdXJhdGlvbiksXG4gICAgICBvblJhbmdlU2VsZWN0aW9uQ2hhbmdlZDogZ3dfZGVib3VuY2UoXG4gICAgICAgIGd3X29uUmFuZ2VTZWxlY3Rpb25DaGFuZ2VkLFxuICAgICAgICBkZWJvdW5jZUR1cmF0aW9uXG4gICAgICApLFxuICAgICAgY29tcG9uZW50czoge1xuICAgICAgICBCb29sZWFuRmlsdGVyOiBCYXNpcy5BZ0dyaWRDb21wb25lbnRzLkJvb2xlYW5GaWx0ZXIsXG4gICAgICAgIEJvb2xlYW5SZW5kZXJlcjogQmFzaXMuQWdHcmlkQ29tcG9uZW50cy5Cb29sZWFuUmVuZGVyZXIsXG4gICAgICAgIEJvb2xlYW5FZGl0b3I6IEJhc2lzLkFnR3JpZENvbXBvbmVudHMuQm9vbGVhbkVkaXRvcixcbiAgICAgICAgTnVtYmVyRWRpdG9yOiBCYXNpcy5BZ0dyaWRDb21wb25lbnRzLk51bWJlckVkaXRvcixcbiAgICAgICAgVGV4dEVkaXRvcjogQmFzaXMuQWdHcmlkQ29tcG9uZW50cy5UZXh0RWRpdG9yLFxuICAgICAgICBEYXRlVGltZUVkaXRvcjogQmFzaXMuQWdHcmlkQ29tcG9uZW50cy5EYXRlVGltZUVkaXRvcixcbiAgICAgICAgRGF0ZVRpbWVGaWx0ZXI6IEJhc2lzLkFnR3JpZENvbXBvbmVudHMuRGF0ZVRpbWVGaWx0ZXIsXG4gICAgICAgIEltYWdlUmVuZGVyZXI6IEJhc2lzLkFnR3JpZENvbXBvbmVudHMuSW1hZ2VSZW5kZXJlcixcbiAgICAgICAgVGVtcGxhdGVSZW5kZXJlcjogQmFzaXMuQWdHcmlkQ29tcG9uZW50cy5UZW1wbGF0ZVJlbmRlcmVyLFxuICAgICAgICBIVE1MVG9vbHRpcDogSFRNTFRvb2x0aXAsXG4gICAgICB9LFxuICAgICAgY29udGV4dDoge1xuICAgICAgICAuLi5kZWVwUGFyc2VkT3B0aW9ucy5jb250ZXh0LFxuICAgICAgICAuLi57XG4gICAgICAgICAgZG9jdW1lbnQ6IGd3X2dldERvY3VtZW50KCksXG4gICAgICAgICAgd2luZG93OiBnd19nZXRXaW5kb3coKSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfVxuXG4gIGlmIChcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgZmluYWxPcHRpb25zLmNvbnRleHQuaGFzT3duUHJvcGVydHkoJ25hdmlnYXRlVG9OZXh0Q2VsbCcpICYmXG4gICAgZmluYWxPcHRpb25zLmNvbnRleHQubmF2aWdhdGVUb05leHRDZWxsXG4gICkge1xuICAgIGZpbmFsT3B0aW9ucy5uYXZpZ2F0ZVRvTmV4dENlbGwgPSBwYXJhbXMgPT4ge1xuICAgICAgcmV0dXJuIGd3X25hdmlnYXRlVG9OZXh0Um93KGlkLCBwYXJhbXMpXG4gICAgfVxuICB9XG5cbiAgaWYgKGdldERhdGFQYXRoVGVtcGxhdGUgJiYgZmluYWxPcHRpb25zLnRyZWVEYXRhKSB7XG4gICAgY29uc3QgZ2V0RGF0YVBhdGhUZW1wbGF0ZUNvbXBsaWVkID0gdGVtcGxhdGUoZ2V0RGF0YVBhdGhUZW1wbGF0ZSlcbiAgICBmaW5hbE9wdGlvbnMuZ2V0RGF0YVBhdGggPSBkYXRhID0+XG4gICAgICBnZXREYXRhUGF0aFRlbXBsYXRlQ29tcGxpZWQoeyBkYXRhOiBkYXRhIH0pXG4gIH1cblxuICAvLyBleHRlbmQgdGhlIGNvbHVtbiBkZWZpbml0aW9uc1xuICBnd19leHRlbmRDb2x1bW5EZWZpbml0aW9ucyhmaW5hbE9wdGlvbnMuY29sdW1uRGVmcylcblxuICByZXR1cm4gZmluYWxPcHRpb25zXG59XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGd3X2dldEdyaWQgfSBmcm9tICcuL3V0aWxpdGllcydcbmltcG9ydCB7IGd3X3BhcnNlTm9kZUZyb21FdmVudCwgZ3dfc2VuZEV2ZW50IH0gZnJvbSAnZXZlbnRzL3V0aWxpdGllcydcblxuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldENvbnRleHRNZW51KGdyaWRJZCwgcGFyYW1zKSB7XG4gIGNvbnN0IGJ1aWxkQ29udGV4dE1lbnVBY3Rpb24gPSAocGFyYW1zLCBpZCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjb25zdCBub2RlID0gZ3dfcGFyc2VOb2RlRnJvbUV2ZW50KHBhcmFtcylcbiAgICAgIGNvbnN0IGNvbElkID0gcGFyYW1zLmNvbHVtbi5jb2xJZFxuICAgICAgY29uc3QgdmFsdWUgPSBwYXJhbXMudmFsdWVcblxuICAgICAgZ3dfc2VuZEV2ZW50KFxuICAgICAgICBnd19nZXRHcmlkKGdyaWRJZCkub3B0aW9ucy5jb250ZXh0LFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2d3LmNvbnRleHRtZW51JyxcbiAgICAgICAgICBkZXRhaWw6IEpTT04uc3RyaW5naWZ5KHsgcjogbm9kZSwgYzogY29sSWQsIHY6IHZhbHVlLCBpOiBpZCB9KSxcbiAgICAgICAgfSxcbiAgICAgICAgaWRcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBjb25zdCBwYXJzZU1lbnUgPSBtZW51ID0+IHtcbiAgICBtZW51LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpdGVtWydhY3Rpb24nXSA9IGJ1aWxkQ29udGV4dE1lbnVBY3Rpb24ocGFyYW1zLCBpdGVtLmlkKVxuXG4gICAgICBpZiAoaXRlbVsnY3NzQ2xhc3NlcyddICYmICFBcnJheS5pc0FycmF5KGl0ZW1bJ2Nzc0NsYXNzZXMnXSkpIHtcbiAgICAgICAgaXRlbVsnY3NzQ2xhc3NlcyddID0gaXRlbVsnY3NzQ2xhc3NlcyddLnNwbGl0KCcgJylcbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW1bJ3N1Yk1lbnUnXSkge1xuICAgICAgICBpdGVtWydzdWJNZW51J10gPSBwYXJzZU1lbnUoaXRlbVsnc3ViTWVudSddKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gbWVudVxuICB9XG5cbiAgcmV0dXJuIHBhcnNlTWVudShnd19nZXRHcmlkKGdyaWRJZCkub3B0aW9ucy5jb250ZXh0LmNvbnRleHRNZW51KVxufVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQge1xuICBnd19vblJvd0NsaWNrZWQsXG4gIGd3X29uUm93RG91YmxlQ2xpY2tlZCxcbiAgZ3dfb25TZWxlY3Rpb25DaGFuZ2VkLFxuICBnd19vbkNlbGxDbGlja0V2ZW50LFxuICBnd19vblJhbmdlU2VsZWN0aW9uQ2hhbmdlZCxcbn0gZnJvbSAnLi9zZWxlY3Rpb25zJ1xuXG5pbXBvcnQgeyBnd19vbkNlbGxFZGl0aW5nRXZlbnQsIGd3X29uUm93RWRpdGluZ0V2ZW50IH0gZnJvbSAnLi9lZGl0aW5nJ1xuXG5pbXBvcnQgeyBnd19vblJlYWR5RXZlbnQgfSBmcm9tICcuL3JlYWR5J1xuXG5pbXBvcnQgeyBnd19kZWJvdW5jZSB9IGZyb20gJy4vdXRpbGl0aWVzJ1xuXG5leHBvcnQge1xuICBnd19vblJvd0NsaWNrZWQsXG4gIGd3X29uUm93RG91YmxlQ2xpY2tlZCxcbiAgZ3dfb25TZWxlY3Rpb25DaGFuZ2VkLFxuICBnd19vblJhbmdlU2VsZWN0aW9uQ2hhbmdlZCxcbiAgZ3dfb25DZWxsQ2xpY2tFdmVudCxcbiAgZ3dfb25DZWxsRWRpdGluZ0V2ZW50LFxuICBnd19vblJvd0VkaXRpbmdFdmVudCxcbiAgZ3dfb25SZWFkeUV2ZW50LFxuICBnd19kZWJvdW5jZSxcbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfc2VuZEV2ZW50LCBnd19wYXJzZU5vZGVGcm9tRXZlbnQgfSBmcm9tICcuL3V0aWxpdGllcydcbmltcG9ydCB7IGd3X2VzY2FwZSwgZ3dfZ2V0R3JpZCB9IGZyb20gJ2FwaS91dGlsaXRpZXMnXG5pbXBvcnQge1xuICBHV19FVkVOVF9ST1dfQ0xJQ0ssXG4gIEdXX0VWRU5UX1JPV19ET1VCTEVfQ0xJQ0ssXG4gIEdXX0VWRU5UX1JPV19TRUxFQ1QsXG4gIEdXX0VWRU5UX0NFTExfQ0xJQ0ssXG4gIEdXX0VWRU5UX0NFTExfRE9VQkxFX0NMSUNLLFxuICBHV19FVkVOVF9SQU5HRV9TRUxFQ1RJT05fQ0hBTkdFRCxcbn0gZnJvbSAnLi9jb25zdGFudHMnXG5cbmNvbnN0IENFTExfQ0xJQ0tJTkdfRVZFTlRTX01BUCA9IHtcbiAgY2VsbENsaWNrZWQ6IEdXX0VWRU5UX0NFTExfQ0xJQ0ssXG4gIGNlbGxEb3VibGVDbGlja2VkOiBHV19FVkVOVF9DRUxMX0RPVUJMRV9DTElDSyxcbn1cblxuLyoqXG4gKiBBbiBoYW5kbGVyIGZvciB0aGUgZ3JpZCBgcm93RG91YmxlQ2xpY2tlZGAgZXZlbnRcbiAqXG4gKiBUaGUgZnVuY3Rpb24gd2lsbCBzZW5kIGEgYmJqIGV2ZW50IHdpdGggYEdXX05PREVgIGFzIHBheWxvYWRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZSBUaGUgZXZlbnQncyBwYXlsb2FkXG4gKlxuICogQGxpc3RlbnMgYWdHcmlkLnJvd0RvdWJsZUNsaWNrZWRcbiAqIEBmaXJlcyBndy5yb3dEb3VibGVDbGlja1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfb25Sb3dEb3VibGVDbGlja2VkKGUpIHtcbiAgY29uc3QgY29udGV4dCA9IGUuYXBpLmdyaWRPcHRpb25zV3JhcHBlci5ncmlkT3B0aW9ucy5jb250ZXh0XG4gIGd3X3NlbmRFdmVudChcbiAgICBjb250ZXh0LFxuICAgIHtcbiAgICAgIHR5cGU6ICdndy5yb3dEb3VibGVDbGljaycsXG4gICAgICBkZXRhaWw6ICcnLFxuICAgIH0sXG4gICAgR1dfRVZFTlRfUk9XX0RPVUJMRV9DTElDS1xuICApXG59XG4vKipcbiAqIEEgaGFuZGxlciBmb3IgdGhlIGdyaWQgYHJvd0NsaWNrZWRgIGV2ZW50XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGUgIFRoZSBldmVudCBwYXlsb2FkXG4gKlxuICogQGxpc3RlbnMgYWdHcmlkLnJvd0NsaWNrZWRcbiAqIEBmaXJlcyBndy5yb3dDbGlja1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfb25Sb3dDbGlja2VkKGUpIHtcbiAgY29uc3QgY29udGV4dCA9IGUuYXBpLmdyaWRPcHRpb25zV3JhcHBlci5ncmlkT3B0aW9ucy5jb250ZXh0XG4gIGd3X3NlbmRFdmVudChcbiAgICBjb250ZXh0LFxuICAgIHtcbiAgICAgIHR5cGU6ICdndy5yb3dDbGljaycsXG4gICAgICBkZXRhaWw6ICcnLFxuICAgIH0sXG4gICAgR1dfRVZFTlRfUk9XX0NMSUNLXG4gIClcbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgZm9yIHRoZSBncmlkIGBzZWxlY3Rpb25DaGFuZ2VkYCBldmVudFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBlICBUaGUgZXZlbnQgcGF5bG9hZFxuICpcbiAqIEBsaXN0ZW5zIGFnR3JpZC5zZWxlY3Rpb25DaGFuZ2VkXG4gKiBAZmlyZXMgZ3cucm93U2VsZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19vblNlbGVjdGlvbkNoYW5nZWQoZSkge1xuICBjb25zdCBjb250ZXh0ID0gZS5hcGkuZ3JpZE9wdGlvbnNXcmFwcGVyLmdyaWRPcHRpb25zLmNvbnRleHRcbiAgZ3dfc2VuZEV2ZW50KFxuICAgIGNvbnRleHQsXG4gICAge1xuICAgICAgdHlwZTogJ2d3LnJvd1NlbGVjdCcsXG4gICAgICBkZXRhaWw6ICcnLFxuICAgIH0sXG4gICAgR1dfRVZFTlRfUk9XX1NFTEVDVFxuICApXG59XG5cbi8qKlxuICogQSBoYW5kbGVyIGZvciB0aGUgZ3JpZCBgcmFuZ2VTZWxlY3Rpb25DaGFuZ2VkYCBldmVudFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBlXG4gKlxuICogQGxpc3RlbnMgYWdHcmlkLnJhbmdlU2VsZWN0aW9uQ2hhbmdlZFxuICogQGZpcmVzIGd3LnJhbmdlU2VsZWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19vblJhbmdlU2VsZWN0aW9uQ2hhbmdlZChlKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBlLmFwaS5ncmlkT3B0aW9uc1dyYXBwZXIuZ3JpZE9wdGlvbnMuY29udGV4dFxuICBnd19zZW5kRXZlbnQoXG4gICAgY29udGV4dCxcbiAgICB7XG4gICAgICB0eXBlOiAnZ3cucmFuZ2VTZWxlY3Rpb24nLFxuICAgICAgZGV0YWlsOiAnJyxcbiAgICB9LFxuICAgIEdXX0VWRU5UX1JBTkdFX1NFTEVDVElPTl9DSEFOR0VEXG4gIClcbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgZm9yIHRoZSBncmlkIGBjZWxsQ2xpY2tFdmVudGAgJiBgY2VsbERvdWJsZUNsaWNrZWRgIGV2ZW50XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBlICBUaGUgZXZlbnQgcGF5bG9hZFxuICpcbiAqIEBsaXN0ZW5zIGFnR3JpZC5jZWxsQ2xpY2tFdmVudFxuICogQGxpc3RlbnMgYWdHcmlkLmNlbGxEb3VibGVDbGlja2VkXG4gKlxuICogQGZpcmVzIGd3LmNlbGxDbGlja2VkXG4gKiBAZmlyZXMgZ3cuY2VsbERvdWJsZUNsaWNrZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X29uQ2VsbENsaWNrRXZlbnQoaWQsIGUpIHtcbiAgY29uc3QgcGFyc2VkID0gZ3dfcGFyc2VOb2RlRnJvbUV2ZW50KGUpXG5cbiAgaWYgKHBhcnNlZCkge1xuICAgIGNvbnN0IHR5cGUgPSBlLnR5cGVcbiAgICBnd19zZW5kRXZlbnQoXG4gICAgICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbnRleHQsXG4gICAgICB7XG4gICAgICAgIHR5cGU6IGBndy4ke2UudHlwZX1gLFxuICAgICAgICBkZXRhaWw6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICByOiBwYXJzZWQsIC8vIHJvd1xuICAgICAgICAgIHY6IGd3X2VzY2FwZShlLnZhbHVlKSwgLy8gbmV3IHZhbHVlXG4gICAgICAgICAgbzogZ3dfZXNjYXBlKGUudmFsdWUpLCAvLyBvZGwgdmFsdWVcbiAgICAgICAgICBjOiBlLmNvbHVtbi5jb2xJZCwgLy8gY29sdW1uc1xuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgICBDRUxMX0NMSUNLSU5HX0VWRU5UU19NQVBbdHlwZV1cbiAgICApXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvdHlwZS1idWlsdGlucyAqL1xuLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19zZW5kRXZlbnQsIGd3X3BhcnNlTm9kZUZyb21FdmVudCB9IGZyb20gJy4vdXRpbGl0aWVzJ1xuaW1wb3J0IHsgZ3dfZXNjYXBlLCBnd19nZXRHcmlkIH0gZnJvbSAnYXBpL3V0aWxpdGllcydcbmltcG9ydCB7XG4gIEdXX0VWRU5UX0NFTExfRURJVElOR19TVEFSVEVELFxuICBHV19FVkVOVF9DRUxMX0VESVRJTkdfU1RPUFBFRCxcbiAgR1dfRVZFTlRfQ0VMTF9WQUxVRV9DSEFOR0VELFxuICBHV19FVkVOVF9ST1dfRURJVElOR19TVEFSVEVELFxuICBHV19FVkVOVF9ST1dfRURJVElOR19TVE9QUEVELFxuICBHV19FVkVOVF9ST1dfVkFMVUVfQ0hBTkdFRCxcbn0gZnJvbSAnLi9jb25zdGFudHMnXG5cbmNvbnN0IENFTExfRURJVElOR19FVkVOVFNfTUFQID0ge1xuICBjZWxsRWRpdGluZ1N0YXJ0ZWQ6IEdXX0VWRU5UX0NFTExfRURJVElOR19TVEFSVEVELFxuICBjZWxsRWRpdGluZ1N0b3BwZWQ6IEdXX0VWRU5UX0NFTExfRURJVElOR19TVE9QUEVELFxuICBjZWxsVmFsdWVDaGFuZ2VkOiBHV19FVkVOVF9DRUxMX1ZBTFVFX0NIQU5HRUQsXG59XG5cbmNvbnN0IFJPV19FRElUSU5HX0VWRU5UU19NQVAgPSB7XG4gIHJvd0VkaXRpbmdTdGFydGVkOiBHV19FVkVOVF9ST1dfRURJVElOR19TVEFSVEVELFxuICByb3dFZGl0aW5nU3RvcHBlZDogR1dfRVZFTlRfUk9XX0VESVRJTkdfU1RPUFBFRCxcbiAgcm93VmFsdWVDaGFuZ2VkOiBHV19FVkVOVF9ST1dfVkFMVUVfQ0hBTkdFRCxcbn1cblxuLyoqXG4gKiBBbiBoYW5kbGVyIGZvciB0aGUgZ3JpZCBgY2VsbEVkaXRpbmdTdGFydGVkYCAsIGBjZWxsRWRpdGluZ1N0b3BwZWRgIGFuZFxuICogYGNlbGxWYWx1ZUNoYW5nZWRgIGV2ZW50c1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge09iamVjdH0gZSAgVGhlIGV2ZW50IHBheWxvYWRcbiAqXG4gKiBAbGlzdGVucyBhZ0dyaWQuY2VsbEVkaXRpbmdTdGFydGVkXG4gKiBAbGlzdGVucyBhZ0dyaWQuY2VsbEVkaXRpbmdTdG9wcGVkXG4gKiBAbGlzdGVucyBhZ0dyaWQuY2VsbFZhbHVlQ2hhbmdlZFxuICpcbiAqIEBmaXJlcyBndy5jZWxsRWRpdGluZ1N0YXJ0ZWRcbiAqIEBmaXJlcyBndy5jZWxsRWRpdGluZ1N0b3BwZWRcbiAqIEBmaXJlcyBndy5jZWxsVmFsdWVDaGFuZ2VkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19vbkNlbGxFZGl0aW5nRXZlbnQoaWQsIGUpIHtcbiAgY29uc3QgdmFsdWUgPSBlLmhhc093blByb3BlcnR5KCduZXdWYWx1ZScpXG4gICAgPyBnd19lc2NhcGUoZS5uZXdWYWx1ZSlcbiAgICA6IGd3X2VzY2FwZShlLnZhbHVlKVxuICBjb25zdCBvbGRWYWx1ZSA9IGUuaGFzT3duUHJvcGVydHkoJ29sZFZhbHVlJylcbiAgICA/IGd3X2VzY2FwZShlLm9sZFZhbHVlKVxuICAgIDogZS5oYXNPd25Qcm9wZXJ0eSgnbmV3VmFsdWUnKVxuICAgID8gZ3dfZXNjYXBlKGUubmV3VmFsdWUpXG4gICAgOiBnd19lc2NhcGUoZS52YWx1ZSlcblxuICBpZiAodmFsdWUgPT0gb2xkVmFsdWUgJiYgZS50eXBlID09PSAnY2VsbFZhbHVlQ2hhbmdlZCcpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHBhcnNlZCA9IGd3X3BhcnNlTm9kZUZyb21FdmVudChlKVxuICBjb25zdCB0eXBlID0gZS50eXBlXG4gIGNvbnN0IGNvbElkID0gZS5jb2x1bW4uY29sSWRcblxuICBpZiAocGFyc2VkKSB7XG4gICAgZ3dfc2VuZEV2ZW50KFxuICAgICAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb250ZXh0LFxuICAgICAge1xuICAgICAgICB0eXBlOiBgZ3cuJHt0eXBlfWAsXG4gICAgICAgIGRldGFpbDogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIHI6IHsgLi4ucGFyc2VkLCAuLi57IGNyOiBlLmRhdGEgfSB9LCAvLyByb3cgKHdlIGFsd2F5cyBpbmNsdWRlIHRoZSBjbGllbnQgcm93IGRhdGEpXG4gICAgICAgICAgdjogdmFsdWUsIC8vIG5ldyB2YWx1ZVxuICAgICAgICAgIG86IG9sZFZhbHVlLCAvLyBvbGQgdmFsdWVcbiAgICAgICAgICBjOiBjb2xJZCwgLy8gY29sdW1uXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICAgIENFTExfRURJVElOR19FVkVOVFNfTUFQW3R5cGVdXG4gICAgKVxuICB9XG59XG5cbi8qKlxuICogQW4gaGFuZGxlciBmb3IgdGhlIGdyaWQgYHJvd0VkaXRpbmdTdGFydGVkYCAsIGByb3dFZGl0aW5nU3RvcHBlZGAgYW5kIGByb3dWYWx1ZUNoYW5nZWRgIGV2ZW50c1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge09iamVjdH0gZSAgVGhlIGV2ZW50IHBheWxvYWRcbiAqXG4gKiBAbGlzdGVucyBhZ0dyaWQucm93RWRpdGluZ1N0YXJ0ZWRcbiAqIEBsaXN0ZW5zIGFnR3JpZC5yb3dFZGl0aW5nU3RvcHBlZFxuICogQGxpc3RlbnMgYWdHcmlkLnJvd1ZhbHVlQ2hhbmdlZFxuICpcbiAqIEBmaXJlcyBndy5yb3dFZGl0aW5nU3RhcnRlZFxuICogQGZpcmVzIGd3LnJvd0VkaXRpbmdTdG9wcGVkXG4gKiBAZmlyZXMgZ3cucm93VmFsdWVDaGFuZ2VkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19vblJvd0VkaXRpbmdFdmVudChpZCwgZSkge1xuICBjb25zdCBwYXJzZWQgPSBnd19wYXJzZU5vZGVGcm9tRXZlbnQoZSlcblxuICBpZiAocGFyc2VkKSB7XG4gICAgY29uc3QgdHlwZSA9IGUudHlwZVxuICAgIGd3X3NlbmRFdmVudChcbiAgICAgIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29udGV4dCxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogYGd3LiR7ZS50eXBlfWAsXG4gICAgICAgIGRldGFpbDogSlNPTi5zdHJpbmdpZnkoeyAuLi5wYXJzZWQsIC4uLnsgY3I6IGUuZGF0YSB9IH0pLCAvLyByb3cgKHdlIGFsd2F5cyBpbmNsdWRlIHRoZSBjbGllbnQgcm93IGRhdGEpXG4gICAgICB9LFxuICAgICAgUk9XX0VESVRJTkdfRVZFTlRTX01BUFt0eXBlXVxuICAgIClcbiAgfVxufVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19kZWJvdW5jZSB9IGZyb20gJy4vdXRpbGl0aWVzJ1xuaW1wb3J0IHsgZ3dfb25TdGF0ZUNoYW5nZWQgfSBmcm9tICcuL3N0YXRlJ1xuaW1wb3J0IHsgZ3dfb25LZXlkb3duIH0gZnJvbSAnLi9rZXlib2FyZCdcbmltcG9ydCB7IGd3X2dldEdyaWQgfSBmcm9tICdhcGkvdXRpbGl0aWVzJ1xuXG4vKipcbiAqIE9uIFJlYWR5IEV2ZW50XG4gKlxuICogVGhlIG1ldGhvZCB3aWxsIGlnbm9yZSBmaXJzdCByZWFkeSBldmVudCBhbmQgdGhlbiByZWdpc3RlciBhIGRlYm91bmNlZCBzdGF0ZVxuICogY2FsbGJhY2sgdG8gc2VuZCBzdGF0ZSBldmVudHMgdG8gQkJqXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBlICBUaGUgZXZlbnQgcGF5bG9hZFxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbmV4cG9ydCBmdW5jdGlvbiBnd19vblJlYWR5RXZlbnQoaWQsIF9lKSB7XG4gIGNvbnN0IGdyaWQgPSBnd19nZXRHcmlkKGlkKVxuXG4gIC8vIHJlZ2lzdGVyIHN0YXRlIGRlYm91bmNlIG1vbml0b3JcbiAgY29uc3Qgc3RhdGVEZWJvdW5jZSA9IGd3X2RlYm91bmNlKGNoYW5nZUV2ZW50ID0+IHtcbiAgICBnd19vblN0YXRlQ2hhbmdlZChpZCwgY2hhbmdlRXZlbnQpXG4gIH0sIDUwMClcblxuICA7W1xuICAgICdzb3J0Q2hhbmdlZCcsXG4gICAgJ2ZpbHRlckNoYW5nZWQnLFxuICAgICdjb2x1bW5WaXNpYmxlJyxcbiAgICAnY29sdW1uUGlubmVkJyxcbiAgICAnY29sdW1uUmVzaXplZCcsXG4gICAgJ2NvbHVtbk1vdmVkJyxcbiAgICAnbmV3Q29sdW1uc0xvYWRlZCcsXG4gICAgJ2dyaWRDb2x1bW5zQ2hhbmdlZCcsXG4gICAgJ2Rpc3BsYXllZENvbHVtbnNDaGFuZ2VkJyxcbiAgICAndmlydHVhbENvbHVtbnNDaGFuZ2VkJyxcbiAgICAnY29sdW1uRXZlcnl0aGluZ0NoYW5nZWQnLFxuICAgIC8vJ2dyaWRTaXplQ2hhbmdlZCcsXG4gICAgJ2V4cGFuZE9yQ29sbGFwc2VBbGwnLFxuICAgIC8vJ3Rvb2xQYW5lbFZpc2libGVDaGFuZ2VkJ1xuICBdLmZvckVhY2goZXZlbnQgPT4ge1xuICAgIGdyaWQub3B0aW9ucy5hcGkuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgc3RhdGVEZWJvdW5jZSlcbiAgfSlcblxuICAvLyByZWdpc3RlciBrZXlib2FyZCBkZWJvdW5jZSBtb25pdG9yXG4gIGNvbnN0IGtleWJvYXJkRGVib3VuY2UgPSBnd19kZWJvdW5jZShrZXlkb3duRXZlbnQgPT4ge1xuICAgIGd3X29uS2V5ZG93bihpZCwga2V5ZG93bkV2ZW50KVxuICB9LCA1MDApXG5cbiAgZ3JpZC5jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGtleWJvYXJkRGVib3VuY2UpXG59XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGd3X3NlbmRFdmVudCB9IGZyb20gJy4vdXRpbGl0aWVzJ1xuaW1wb3J0IHsgZ3dfZ2V0R3JpZCB9IGZyb20gJ2FwaS91dGlsaXRpZXMnXG5pbXBvcnQgeyBHV19FVkVOVF9HUklEX1NUQVRFX0NIQU5HRSB9IGZyb20gJy4vY29uc3RhbnRzJ1xuXG4vKipcbiAqIEFuIGhhbmRsZXIgZm9yIHRoZSBncmlkIGBzdGF0ZUNoYW5nZWRgIGV2ZW50c1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge09iamVjdH0gZSAgVGhlIGV2ZW50IHBheWxvYWRcbiAqXG4gKiBAbGlzdGVucyBhZ0dyaWQuc3RhdGVDaGFuZ2VkXG4gKiBAbGlzdGVucyBhZ0dyaWQucm93RWRpdGluZ1N0b3BwZWRcbiAqXG4gKiBAZmlyZXMgZ3cuc3RhdGVDaGFuZ2VkXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuZXhwb3J0IGZ1bmN0aW9uIGd3X29uU3RhdGVDaGFuZ2VkKGlkLCBfZSkge1xuICBnd19zZW5kRXZlbnQoXG4gICAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb250ZXh0LFxuICAgIHtcbiAgICAgIHR5cGU6ICdndy5zdGF0ZUNoYW5nZWQnLFxuICAgICAgZGV0YWlsOiBbXSxcbiAgICB9LFxuICAgIEdXX0VWRU5UX0dSSURfU1RBVEVfQ0hBTkdFXG4gIClcbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfc2VuZEV2ZW50IH0gZnJvbSAnLi91dGlsaXRpZXMnXG5pbXBvcnQgeyBHV19FVkVOVF9LRVlQUkVTUyB9IGZyb20gJy4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgZ3dfZ2V0R3JpZCB9IGZyb20gJ2FwaS91dGlsaXRpZXMnXG5cbi8qKlxuICogQ29tcG9zZSBhIG1vZGVsIG9mIHRoZSBrZXlkb3duIGV2ZW50IGFuZCBzZW5kIGl0IHRvIEJCalxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCAgdGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtFdmVudH0ga2V5ZG93bkV2ZW50IGtleWRvd24gZXZlbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X29uS2V5ZG93bihpZCwga2V5ZG93bkV2ZW50KSB7XG4gIGd3X3NlbmRFdmVudChcbiAgICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbnRleHQsXG4gICAge1xuICAgICAgdHlwZTogYGd3LmtleXByZXNzYCxcbiAgICAgIGRldGFpbDogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBjOiBrZXlkb3duRXZlbnQua2V5LFxuICAgICAgICBrYzoga2V5ZG93bkV2ZW50LndoaWNoIHx8IE51bWJlcihrZXlkb3duRXZlbnQua2V5Q29kZSksXG4gICAgICAgIGFrOiBrZXlkb3duRXZlbnQuYWx0S2V5LFxuICAgICAgICBzazoga2V5ZG93bkV2ZW50LnNoaWZ0S2V5LFxuICAgICAgICBjazoga2V5ZG93bkV2ZW50LmN0cmxLZXksXG4gICAgICB9KSxcbiAgICB9LFxuICAgIEdXX0VWRU5UX0tFWVBSRVNTXG4gIClcbn1cbiIsImltcG9ydCBhc3NpZ25JbldpdGggZnJvbSAnLi9hc3NpZ25JbldpdGguanMnO1xuaW1wb3J0IGF0dGVtcHQgZnJvbSAnLi9hdHRlbXB0LmpzJztcbmltcG9ydCBiYXNlVmFsdWVzIGZyb20gJy4vX2Jhc2VWYWx1ZXMuanMnO1xuaW1wb3J0IGN1c3RvbURlZmF1bHRzQXNzaWduSW4gZnJvbSAnLi9fY3VzdG9tRGVmYXVsdHNBc3NpZ25Jbi5qcyc7XG5pbXBvcnQgZXNjYXBlU3RyaW5nQ2hhciBmcm9tICcuL19lc2NhcGVTdHJpbmdDaGFyLmpzJztcbmltcG9ydCBpc0Vycm9yIGZyb20gJy4vaXNFcnJvci5qcyc7XG5pbXBvcnQgaXNJdGVyYXRlZUNhbGwgZnJvbSAnLi9faXNJdGVyYXRlZUNhbGwuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcbmltcG9ydCByZUludGVycG9sYXRlIGZyb20gJy4vX3JlSW50ZXJwb2xhdGUuanMnO1xuaW1wb3J0IHRlbXBsYXRlU2V0dGluZ3MgZnJvbSAnLi90ZW1wbGF0ZVNldHRpbmdzLmpzJztcbmltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggZW1wdHkgc3RyaW5nIGxpdGVyYWxzIGluIGNvbXBpbGVkIHRlbXBsYXRlIHNvdXJjZS4gKi9cbnZhciByZUVtcHR5U3RyaW5nTGVhZGluZyA9IC9cXGJfX3AgXFwrPSAnJzsvZyxcbiAgICByZUVtcHR5U3RyaW5nTWlkZGxlID0gL1xcYihfX3AgXFwrPSkgJycgXFwrL2csXG4gICAgcmVFbXB0eVN0cmluZ1RyYWlsaW5nID0gLyhfX2VcXCguKj9cXCl8XFxiX190XFwpKSBcXCtcXG4nJzsvZztcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoXG4gKiBbRVMgdGVtcGxhdGUgZGVsaW1pdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdGVtcGxhdGUtbGl0ZXJhbC1sZXhpY2FsLWNvbXBvbmVudHMpLlxuICovXG52YXIgcmVFc1RlbXBsYXRlID0gL1xcJFxceyhbXlxcXFx9XSooPzpcXFxcLlteXFxcXH1dKikqKVxcfS9nO1xuXG4vKiogVXNlZCB0byBlbnN1cmUgY2FwdHVyaW5nIG9yZGVyIG9mIHRlbXBsYXRlIGRlbGltaXRlcnMuICovXG52YXIgcmVOb01hdGNoID0gLygkXikvO1xuXG4vKiogVXNlZCB0byBtYXRjaCB1bmVzY2FwZWQgY2hhcmFjdGVycyBpbiBjb21waWxlZCBzdHJpbmcgbGl0ZXJhbHMuICovXG52YXIgcmVVbmVzY2FwZWRTdHJpbmcgPSAvWydcXG5cXHJcXHUyMDI4XFx1MjAyOVxcXFxdL2c7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNvbXBpbGVkIHRlbXBsYXRlIGZ1bmN0aW9uIHRoYXQgY2FuIGludGVycG9sYXRlIGRhdGEgcHJvcGVydGllc1xuICogaW4gXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlcnMsIEhUTUwtZXNjYXBlIGludGVycG9sYXRlZCBkYXRhIHByb3BlcnRpZXMgaW5cbiAqIFwiZXNjYXBlXCIgZGVsaW1pdGVycywgYW5kIGV4ZWN1dGUgSmF2YVNjcmlwdCBpbiBcImV2YWx1YXRlXCIgZGVsaW1pdGVycy4gRGF0YVxuICogcHJvcGVydGllcyBtYXkgYmUgYWNjZXNzZWQgYXMgZnJlZSB2YXJpYWJsZXMgaW4gdGhlIHRlbXBsYXRlLiBJZiBhIHNldHRpbmdcbiAqIG9iamVjdCBpcyBnaXZlbiwgaXQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGBfLnRlbXBsYXRlU2V0dGluZ3NgIHZhbHVlcy5cbiAqXG4gKiAqKk5vdGU6KiogSW4gdGhlIGRldmVsb3BtZW50IGJ1aWxkIGBfLnRlbXBsYXRlYCB1dGlsaXplc1xuICogW3NvdXJjZVVSTHNdKGh0dHA6Ly93d3cuaHRtbDVyb2Nrcy5jb20vZW4vdHV0b3JpYWxzL2RldmVsb3BlcnRvb2xzL3NvdXJjZW1hcHMvI3RvYy1zb3VyY2V1cmwpXG4gKiBmb3IgZWFzaWVyIGRlYnVnZ2luZy5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwcmVjb21waWxpbmcgdGVtcGxhdGVzIHNlZVxuICogW2xvZGFzaCdzIGN1c3RvbSBidWlsZHMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9sb2Rhc2guY29tL2N1c3RvbS1idWlsZHMpLlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIENocm9tZSBleHRlbnNpb24gc2FuZGJveGVzIHNlZVxuICogW0Nocm9tZSdzIGV4dGVuc2lvbnMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIuY2hyb21lLmNvbS9leHRlbnNpb25zL3NhbmRib3hpbmdFdmFsKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHRlbXBsYXRlIHN0cmluZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICogQHBhcmFtIHtSZWdFeHB9IFtvcHRpb25zLmVzY2FwZT1fLnRlbXBsYXRlU2V0dGluZ3MuZXNjYXBlXVxuICogIFRoZSBIVE1MIFwiZXNjYXBlXCIgZGVsaW1pdGVyLlxuICogQHBhcmFtIHtSZWdFeHB9IFtvcHRpb25zLmV2YWx1YXRlPV8udGVtcGxhdGVTZXR0aW5ncy5ldmFsdWF0ZV1cbiAqICBUaGUgXCJldmFsdWF0ZVwiIGRlbGltaXRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5pbXBvcnRzPV8udGVtcGxhdGVTZXR0aW5ncy5pbXBvcnRzXVxuICogIEFuIG9iamVjdCB0byBpbXBvcnQgaW50byB0aGUgdGVtcGxhdGUgYXMgZnJlZSB2YXJpYWJsZXMuXG4gKiBAcGFyYW0ge1JlZ0V4cH0gW29wdGlvbnMuaW50ZXJwb2xhdGU9Xy50ZW1wbGF0ZVNldHRpbmdzLmludGVycG9sYXRlXVxuICogIFRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnNvdXJjZVVSTD0ndGVtcGxhdGVTb3VyY2VzW25dJ11cbiAqICBUaGUgc291cmNlVVJMIG9mIHRoZSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy52YXJpYWJsZT0nb2JqJ11cbiAqICBUaGUgZGF0YSBvYmplY3QgdmFyaWFibGUgbmFtZS5cbiAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGNvbXBpbGVkIHRlbXBsYXRlIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBVc2UgdGhlIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIgdG8gY3JlYXRlIGEgY29tcGlsZWQgdGVtcGxhdGUuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyA8JT0gdXNlciAlPiEnKTtcbiAqIGNvbXBpbGVkKHsgJ3VzZXInOiAnZnJlZCcgfSk7XG4gKiAvLyA9PiAnaGVsbG8gZnJlZCEnXG4gKlxuICogLy8gVXNlIHRoZSBIVE1MIFwiZXNjYXBlXCIgZGVsaW1pdGVyIHRvIGVzY2FwZSBkYXRhIHByb3BlcnR5IHZhbHVlcy5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzxiPjwlLSB2YWx1ZSAlPjwvYj4nKTtcbiAqIGNvbXBpbGVkKHsgJ3ZhbHVlJzogJzxzY3JpcHQ+JyB9KTtcbiAqIC8vID0+ICc8Yj4mbHQ7c2NyaXB0Jmd0OzwvYj4nXG4gKlxuICogLy8gVXNlIHRoZSBcImV2YWx1YXRlXCIgZGVsaW1pdGVyIHRvIGV4ZWN1dGUgSmF2YVNjcmlwdCBhbmQgZ2VuZXJhdGUgSFRNTC5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlIF8uZm9yRWFjaCh1c2VycywgZnVuY3Rpb24odXNlcikgeyAlPjxsaT48JS0gdXNlciAlPjwvbGk+PCUgfSk7ICU+Jyk7XG4gKiBjb21waWxlZCh7ICd1c2Vycyc6IFsnZnJlZCcsICdiYXJuZXknXSB9KTtcbiAqIC8vID0+ICc8bGk+ZnJlZDwvbGk+PGxpPmJhcm5leTwvbGk+J1xuICpcbiAqIC8vIFVzZSB0aGUgaW50ZXJuYWwgYHByaW50YCBmdW5jdGlvbiBpbiBcImV2YWx1YXRlXCIgZGVsaW1pdGVycy5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlIHByaW50KFwiaGVsbG8gXCIgKyB1c2VyKTsgJT4hJyk7XG4gKiBjb21waWxlZCh7ICd1c2VyJzogJ2Jhcm5leScgfSk7XG4gKiAvLyA9PiAnaGVsbG8gYmFybmV5ISdcbiAqXG4gKiAvLyBVc2UgdGhlIEVTIHRlbXBsYXRlIGxpdGVyYWwgZGVsaW1pdGVyIGFzIGFuIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIuXG4gKiAvLyBEaXNhYmxlIHN1cHBvcnQgYnkgcmVwbGFjaW5nIHRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gJHsgdXNlciB9IScpO1xuICogY29tcGlsZWQoeyAndXNlcic6ICdwZWJibGVzJyB9KTtcbiAqIC8vID0+ICdoZWxsbyBwZWJibGVzISdcbiAqXG4gKiAvLyBVc2UgYmFja3NsYXNoZXMgdG8gdHJlYXQgZGVsaW1pdGVycyBhcyBwbGFpbiB0ZXh0LlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPCU9IFwiXFxcXDwlLSB2YWx1ZSAlXFxcXD5cIiAlPicpO1xuICogY29tcGlsZWQoeyAndmFsdWUnOiAnaWdub3JlZCcgfSk7XG4gKiAvLyA9PiAnPCUtIHZhbHVlICU+J1xuICpcbiAqIC8vIFVzZSB0aGUgYGltcG9ydHNgIG9wdGlvbiB0byBpbXBvcnQgYGpRdWVyeWAgYXMgYGpxYC5cbiAqIHZhciB0ZXh0ID0gJzwlIGpxLmVhY2godXNlcnMsIGZ1bmN0aW9uKHVzZXIpIHsgJT48bGk+PCUtIHVzZXIgJT48L2xpPjwlIH0pOyAlPic7XG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKHRleHQsIHsgJ2ltcG9ydHMnOiB7ICdqcSc6IGpRdWVyeSB9IH0pO1xuICogY29tcGlsZWQoeyAndXNlcnMnOiBbJ2ZyZWQnLCAnYmFybmV5J10gfSk7XG4gKiAvLyA9PiAnPGxpPmZyZWQ8L2xpPjxsaT5iYXJuZXk8L2xpPidcbiAqXG4gKiAvLyBVc2UgdGhlIGBzb3VyY2VVUkxgIG9wdGlvbiB0byBzcGVjaWZ5IGEgY3VzdG9tIHNvdXJjZVVSTCBmb3IgdGhlIHRlbXBsYXRlLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gPCU9IHVzZXIgJT4hJywgeyAnc291cmNlVVJMJzogJy9iYXNpYy9ncmVldGluZy5qc3QnIH0pO1xuICogY29tcGlsZWQoZGF0YSk7XG4gKiAvLyA9PiBGaW5kIHRoZSBzb3VyY2Ugb2YgXCJncmVldGluZy5qc3RcIiB1bmRlciB0aGUgU291cmNlcyB0YWIgb3IgUmVzb3VyY2VzIHBhbmVsIG9mIHRoZSB3ZWIgaW5zcGVjdG9yLlxuICpcbiAqIC8vIFVzZSB0aGUgYHZhcmlhYmxlYCBvcHRpb24gdG8gZW5zdXJlIGEgd2l0aC1zdGF0ZW1lbnQgaXNuJ3QgdXNlZCBpbiB0aGUgY29tcGlsZWQgdGVtcGxhdGUuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoaSA8JT0gZGF0YS51c2VyICU+IScsIHsgJ3ZhcmlhYmxlJzogJ2RhdGEnIH0pO1xuICogY29tcGlsZWQuc291cmNlO1xuICogLy8gPT4gZnVuY3Rpb24oZGF0YSkge1xuICogLy8gICB2YXIgX190LCBfX3AgPSAnJztcbiAqIC8vICAgX19wICs9ICdoaSAnICsgKChfX3QgPSAoIGRhdGEudXNlciApKSA9PSBudWxsID8gJycgOiBfX3QpICsgJyEnO1xuICogLy8gICByZXR1cm4gX19wO1xuICogLy8gfVxuICpcbiAqIC8vIFVzZSBjdXN0b20gdGVtcGxhdGUgZGVsaW1pdGVycy5cbiAqIF8udGVtcGxhdGVTZXR0aW5ncy5pbnRlcnBvbGF0ZSA9IC97eyhbXFxzXFxTXSs/KX19L2c7XG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyB7eyB1c2VyIH19IScpO1xuICogY29tcGlsZWQoeyAndXNlcic6ICdtdXN0YWNoZScgfSk7XG4gKiAvLyA9PiAnaGVsbG8gbXVzdGFjaGUhJ1xuICpcbiAqIC8vIFVzZSB0aGUgYHNvdXJjZWAgcHJvcGVydHkgdG8gaW5saW5lIGNvbXBpbGVkIHRlbXBsYXRlcyBmb3IgbWVhbmluZ2Z1bFxuICogLy8gbGluZSBudW1iZXJzIGluIGVycm9yIG1lc3NhZ2VzIGFuZCBzdGFjayB0cmFjZXMuXG4gKiBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnanN0LmpzJyksICdcXFxuICogICB2YXIgSlNUID0ge1xcXG4gKiAgICAgXCJtYWluXCI6ICcgKyBfLnRlbXBsYXRlKG1haW5UZXh0KS5zb3VyY2UgKyAnXFxcbiAqICAgfTtcXFxuICogJyk7XG4gKi9cbmZ1bmN0aW9uIHRlbXBsYXRlKHN0cmluZywgb3B0aW9ucywgZ3VhcmQpIHtcbiAgLy8gQmFzZWQgb24gSm9obiBSZXNpZydzIGB0bXBsYCBpbXBsZW1lbnRhdGlvblxuICAvLyAoaHR0cDovL2Vqb2huLm9yZy9ibG9nL2phdmFzY3JpcHQtbWljcm8tdGVtcGxhdGluZy8pXG4gIC8vIGFuZCBMYXVyYSBEb2t0b3JvdmEncyBkb1QuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9vbGFkby9kb1QpLlxuICB2YXIgc2V0dGluZ3MgPSB0ZW1wbGF0ZVNldHRpbmdzLmltcG9ydHMuXy50ZW1wbGF0ZVNldHRpbmdzIHx8IHRlbXBsYXRlU2V0dGluZ3M7XG5cbiAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHN0cmluZywgb3B0aW9ucywgZ3VhcmQpKSB7XG4gICAgb3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgfVxuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICBvcHRpb25zID0gYXNzaWduSW5XaXRoKHt9LCBvcHRpb25zLCBzZXR0aW5ncywgY3VzdG9tRGVmYXVsdHNBc3NpZ25Jbik7XG5cbiAgdmFyIGltcG9ydHMgPSBhc3NpZ25JbldpdGgoe30sIG9wdGlvbnMuaW1wb3J0cywgc2V0dGluZ3MuaW1wb3J0cywgY3VzdG9tRGVmYXVsdHNBc3NpZ25JbiksXG4gICAgICBpbXBvcnRzS2V5cyA9IGtleXMoaW1wb3J0cyksXG4gICAgICBpbXBvcnRzVmFsdWVzID0gYmFzZVZhbHVlcyhpbXBvcnRzLCBpbXBvcnRzS2V5cyk7XG5cbiAgdmFyIGlzRXNjYXBpbmcsXG4gICAgICBpc0V2YWx1YXRpbmcsXG4gICAgICBpbmRleCA9IDAsXG4gICAgICBpbnRlcnBvbGF0ZSA9IG9wdGlvbnMuaW50ZXJwb2xhdGUgfHwgcmVOb01hdGNoLFxuICAgICAgc291cmNlID0gXCJfX3AgKz0gJ1wiO1xuXG4gIC8vIENvbXBpbGUgdGhlIHJlZ2V4cCB0byBtYXRjaCBlYWNoIGRlbGltaXRlci5cbiAgdmFyIHJlRGVsaW1pdGVycyA9IFJlZ0V4cChcbiAgICAob3B0aW9ucy5lc2NhcGUgfHwgcmVOb01hdGNoKS5zb3VyY2UgKyAnfCcgK1xuICAgIGludGVycG9sYXRlLnNvdXJjZSArICd8JyArXG4gICAgKGludGVycG9sYXRlID09PSByZUludGVycG9sYXRlID8gcmVFc1RlbXBsYXRlIDogcmVOb01hdGNoKS5zb3VyY2UgKyAnfCcgK1xuICAgIChvcHRpb25zLmV2YWx1YXRlIHx8IHJlTm9NYXRjaCkuc291cmNlICsgJ3wkJ1xuICAsICdnJyk7XG5cbiAgLy8gVXNlIGEgc291cmNlVVJMIGZvciBlYXNpZXIgZGVidWdnaW5nLlxuICAvLyBUaGUgc291cmNlVVJMIGdldHMgaW5qZWN0ZWQgaW50byB0aGUgc291cmNlIHRoYXQncyBldmFsLWVkLCBzbyBiZSBjYXJlZnVsXG4gIC8vIHdpdGggbG9va3VwIChpbiBjYXNlIG9mIGUuZy4gcHJvdG90eXBlIHBvbGx1dGlvbiksIGFuZCBzdHJpcCBuZXdsaW5lcyBpZiBhbnkuXG4gIC8vIEEgbmV3bGluZSB3b3VsZG4ndCBiZSBhIHZhbGlkIHNvdXJjZVVSTCBhbnl3YXksIGFuZCBpdCdkIGVuYWJsZSBjb2RlIGluamVjdGlvbi5cbiAgdmFyIHNvdXJjZVVSTCA9IGhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3NvdXJjZVVSTCcpXG4gICAgPyAoJy8vIyBzb3VyY2VVUkw9JyArXG4gICAgICAgKG9wdGlvbnMuc291cmNlVVJMICsgJycpLnJlcGxhY2UoL1tcXHJcXG5dL2csICcgJykgK1xuICAgICAgICdcXG4nKVxuICAgIDogJyc7XG5cbiAgc3RyaW5nLnJlcGxhY2UocmVEZWxpbWl0ZXJzLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlVmFsdWUsIGludGVycG9sYXRlVmFsdWUsIGVzVGVtcGxhdGVWYWx1ZSwgZXZhbHVhdGVWYWx1ZSwgb2Zmc2V0KSB7XG4gICAgaW50ZXJwb2xhdGVWYWx1ZSB8fCAoaW50ZXJwb2xhdGVWYWx1ZSA9IGVzVGVtcGxhdGVWYWx1ZSk7XG5cbiAgICAvLyBFc2NhcGUgY2hhcmFjdGVycyB0aGF0IGNhbid0IGJlIGluY2x1ZGVkIGluIHN0cmluZyBsaXRlcmFscy5cbiAgICBzb3VyY2UgKz0gc3RyaW5nLnNsaWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UocmVVbmVzY2FwZWRTdHJpbmcsIGVzY2FwZVN0cmluZ0NoYXIpO1xuXG4gICAgLy8gUmVwbGFjZSBkZWxpbWl0ZXJzIHdpdGggc25pcHBldHMuXG4gICAgaWYgKGVzY2FwZVZhbHVlKSB7XG4gICAgICBpc0VzY2FwaW5nID0gdHJ1ZTtcbiAgICAgIHNvdXJjZSArPSBcIicgK1xcbl9fZShcIiArIGVzY2FwZVZhbHVlICsgXCIpICtcXG4nXCI7XG4gICAgfVxuICAgIGlmIChldmFsdWF0ZVZhbHVlKSB7XG4gICAgICBpc0V2YWx1YXRpbmcgPSB0cnVlO1xuICAgICAgc291cmNlICs9IFwiJztcXG5cIiArIGV2YWx1YXRlVmFsdWUgKyBcIjtcXG5fX3AgKz0gJ1wiO1xuICAgIH1cbiAgICBpZiAoaW50ZXJwb2xhdGVWYWx1ZSkge1xuICAgICAgc291cmNlICs9IFwiJyArXFxuKChfX3QgPSAoXCIgKyBpbnRlcnBvbGF0ZVZhbHVlICsgXCIpKSA9PSBudWxsID8gJycgOiBfX3QpICtcXG4nXCI7XG4gICAgfVxuICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuXG4gICAgLy8gVGhlIEpTIGVuZ2luZSBlbWJlZGRlZCBpbiBBZG9iZSBwcm9kdWN0cyBuZWVkcyBgbWF0Y2hgIHJldHVybmVkIGluXG4gICAgLy8gb3JkZXIgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBgb2Zmc2V0YCB2YWx1ZS5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH0pO1xuXG4gIHNvdXJjZSArPSBcIic7XFxuXCI7XG5cbiAgLy8gSWYgYHZhcmlhYmxlYCBpcyBub3Qgc3BlY2lmaWVkIHdyYXAgYSB3aXRoLXN0YXRlbWVudCBhcm91bmQgdGhlIGdlbmVyYXRlZFxuICAvLyBjb2RlIHRvIGFkZCB0aGUgZGF0YSBvYmplY3QgdG8gdGhlIHRvcCBvZiB0aGUgc2NvcGUgY2hhaW4uXG4gIC8vIExpa2Ugd2l0aCBzb3VyY2VVUkwsIHdlIHRha2UgY2FyZSB0byBub3QgY2hlY2sgdGhlIG9wdGlvbidzIHByb3RvdHlwZSxcbiAgLy8gYXMgdGhpcyBjb25maWd1cmF0aW9uIGlzIGEgY29kZSBpbmplY3Rpb24gdmVjdG9yLlxuICB2YXIgdmFyaWFibGUgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsICd2YXJpYWJsZScpICYmIG9wdGlvbnMudmFyaWFibGU7XG4gIGlmICghdmFyaWFibGUpIHtcbiAgICBzb3VyY2UgPSAnd2l0aCAob2JqKSB7XFxuJyArIHNvdXJjZSArICdcXG59XFxuJztcbiAgfVxuICAvLyBDbGVhbnVwIGNvZGUgYnkgc3RyaXBwaW5nIGVtcHR5IHN0cmluZ3MuXG4gIHNvdXJjZSA9IChpc0V2YWx1YXRpbmcgPyBzb3VyY2UucmVwbGFjZShyZUVtcHR5U3RyaW5nTGVhZGluZywgJycpIDogc291cmNlKVxuICAgIC5yZXBsYWNlKHJlRW1wdHlTdHJpbmdNaWRkbGUsICckMScpXG4gICAgLnJlcGxhY2UocmVFbXB0eVN0cmluZ1RyYWlsaW5nLCAnJDE7Jyk7XG5cbiAgLy8gRnJhbWUgY29kZSBhcyB0aGUgZnVuY3Rpb24gYm9keS5cbiAgc291cmNlID0gJ2Z1bmN0aW9uKCcgKyAodmFyaWFibGUgfHwgJ29iaicpICsgJykge1xcbicgK1xuICAgICh2YXJpYWJsZVxuICAgICAgPyAnJ1xuICAgICAgOiAnb2JqIHx8IChvYmogPSB7fSk7XFxuJ1xuICAgICkgK1xuICAgIFwidmFyIF9fdCwgX19wID0gJydcIiArXG4gICAgKGlzRXNjYXBpbmdcbiAgICAgICA/ICcsIF9fZSA9IF8uZXNjYXBlJ1xuICAgICAgIDogJydcbiAgICApICtcbiAgICAoaXNFdmFsdWF0aW5nXG4gICAgICA/ICcsIF9faiA9IEFycmF5LnByb3RvdHlwZS5qb2luO1xcbicgK1xuICAgICAgICBcImZ1bmN0aW9uIHByaW50KCkgeyBfX3AgKz0gX19qLmNhbGwoYXJndW1lbnRzLCAnJykgfVxcblwiXG4gICAgICA6ICc7XFxuJ1xuICAgICkgK1xuICAgIHNvdXJjZSArXG4gICAgJ3JldHVybiBfX3BcXG59JztcblxuICB2YXIgcmVzdWx0ID0gYXR0ZW1wdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gRnVuY3Rpb24oaW1wb3J0c0tleXMsIHNvdXJjZVVSTCArICdyZXR1cm4gJyArIHNvdXJjZSlcbiAgICAgIC5hcHBseSh1bmRlZmluZWQsIGltcG9ydHNWYWx1ZXMpO1xuICB9KTtcblxuICAvLyBQcm92aWRlIHRoZSBjb21waWxlZCBmdW5jdGlvbidzIHNvdXJjZSBieSBpdHMgYHRvU3RyaW5nYCBtZXRob2Qgb3JcbiAgLy8gdGhlIGBzb3VyY2VgIHByb3BlcnR5IGFzIGEgY29udmVuaWVuY2UgZm9yIGlubGluaW5nIGNvbXBpbGVkIHRlbXBsYXRlcy5cbiAgcmVzdWx0LnNvdXJjZSA9IHNvdXJjZTtcbiAgaWYgKGlzRXJyb3IocmVzdWx0KSkge1xuICAgIHRocm93IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCB0ZW1wbGF0ZTtcbiIsImltcG9ydCBjb3B5T2JqZWN0IGZyb20gJy4vX2NvcHlPYmplY3QuanMnO1xuaW1wb3J0IGNyZWF0ZUFzc2lnbmVyIGZyb20gJy4vX2NyZWF0ZUFzc2lnbmVyLmpzJztcbmltcG9ydCBrZXlzSW4gZnJvbSAnLi9rZXlzSW4uanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uYXNzaWduSW5gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgXG4gKiB3aGljaCBpcyBpbnZva2VkIHRvIHByb2R1Y2UgdGhlIGFzc2lnbmVkIHZhbHVlcy4gSWYgYGN1c3RvbWl6ZXJgIHJldHVybnNcbiAqIGB1bmRlZmluZWRgLCBhc3NpZ25tZW50IGlzIGhhbmRsZWQgYnkgdGhlIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgXG4gKiBpcyBpbnZva2VkIHdpdGggZml2ZSBhcmd1bWVudHM6IChvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0LCBzb3VyY2UpLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBhbGlhcyBleHRlbmRXaXRoXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0gey4uLk9iamVjdH0gc291cmNlcyBUaGUgc291cmNlIG9iamVjdHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQHNlZSBfLmFzc2lnbldpdGhcbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUpIHtcbiAqICAgcmV0dXJuIF8uaXNVbmRlZmluZWQob2JqVmFsdWUpID8gc3JjVmFsdWUgOiBvYmpWYWx1ZTtcbiAqIH1cbiAqXG4gKiB2YXIgZGVmYXVsdHMgPSBfLnBhcnRpYWxSaWdodChfLmFzc2lnbkluV2l0aCwgY3VzdG9taXplcik7XG4gKlxuICogZGVmYXVsdHMoeyAnYSc6IDEgfSwgeyAnYic6IDIgfSwgeyAnYSc6IDMgfSk7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAqL1xudmFyIGFzc2lnbkluV2l0aCA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplcikge1xuICBjb3B5T2JqZWN0KHNvdXJjZSwga2V5c0luKHNvdXJjZSksIG9iamVjdCwgY3VzdG9taXplcik7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgYXNzaWduSW5XaXRoO1xuIiwiaW1wb3J0IGFzc2lnblZhbHVlIGZyb20gJy4vX2Fzc2lnblZhbHVlLmpzJztcbmltcG9ydCBiYXNlQXNzaWduVmFsdWUgZnJvbSAnLi9fYmFzZUFzc2lnblZhbHVlLmpzJztcblxuLyoqXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzIHRvIGNvcHkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGlzTmV3ID0gIW9iamVjdDtcbiAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuXG4gICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgfVxuICAgIGlmIChpc05ldykge1xuICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvcHlPYmplY3Q7XG4iLCJpbXBvcnQgYmFzZUFzc2lnblZhbHVlIGZyb20gJy4vX2Jhc2VBc3NpZ25WYWx1ZS5qcyc7XG5pbXBvcnQgZXEgZnJvbSAnLi9lcS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV07XG4gIGlmICghKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGVxKG9ialZhbHVlLCB2YWx1ZSkpIHx8XG4gICAgICAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSkge1xuICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFzc2lnblZhbHVlO1xuIiwiaW1wb3J0IGJhc2VJc05hdGl2ZSBmcm9tICcuL19iYXNlSXNOYXRpdmUuanMnO1xuaW1wb3J0IGdldFZhbHVlIGZyb20gJy4vX2dldFZhbHVlLmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0TmF0aXZlO1xuIiwiaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBpc01hc2tlZCBmcm9tICcuL19pc01hc2tlZC5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5pbXBvcnQgdG9Tb3VyY2UgZnJvbSAnLi9fdG9Tb3VyY2UuanMnO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbik7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24odmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNOYXRpdmU7XG4iLCJpbXBvcnQgU3ltYm9sIGZyb20gJy4vX1N5bWJvbC5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VHZXRUYWdgIHdoaWNoIGlnbm9yZXMgYFN5bWJvbC50b1N0cmluZ1RhZ2AgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHtcbiAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuXG4gIHRyeSB7XG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgIHZhciB1bm1hc2tlZCA9IHRydWU7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICBpZiAodW5tYXNrZWQpIHtcbiAgICBpZiAoaXNPd24pIHtcbiAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0UmF3VGFnO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG9iamVjdFRvU3RyaW5nO1xuIiwiaW1wb3J0IGNvcmVKc0RhdGEgZnJvbSAnLi9fY29yZUpzRGF0YS5qcyc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtZXRob2RzIG1hc3F1ZXJhZGluZyBhcyBuYXRpdmUuICovXG52YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcbiAgdmFyIHVpZCA9IC9bXi5dKyQvLmV4ZWMoY29yZUpzRGF0YSAmJiBjb3JlSnNEYXRhLmtleXMgJiYgY29yZUpzRGF0YS5rZXlzLklFX1BST1RPIHx8ICcnKTtcbiAgcmV0dXJuIHVpZCA/ICgnU3ltYm9sKHNyYylfMS4nICsgdWlkKSA6ICcnO1xufSgpKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGlzIG1hc2tlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XG4gIHJldHVybiAhIW1hc2tTcmNLZXkgJiYgKG1hc2tTcmNLZXkgaW4gZnVuYyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzTWFza2VkO1xuIiwiaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbnZhciBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbmV4cG9ydCBkZWZhdWx0IGNvcmVKc0RhdGE7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvU291cmNlO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldFZhbHVlO1xuIiwiaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcbmltcG9ydCBpc0l0ZXJhdGVlQ2FsbCBmcm9tICcuL19pc0l0ZXJhdGVlQ2FsbC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uYXNzaWduYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gYXNzaWduZXIgVGhlIGZ1bmN0aW9uIHRvIGFzc2lnbiB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhc3NpZ25lciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQXNzaWduZXIoYXNzaWduZXIpIHtcbiAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCwgc291cmNlcykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBzb3VyY2VzLmxlbmd0aCxcbiAgICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA+IDEgPyBzb3VyY2VzW2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkLFxuICAgICAgICBndWFyZCA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzWzJdIDogdW5kZWZpbmVkO1xuXG4gICAgY3VzdG9taXplciA9IChhc3NpZ25lci5sZW5ndGggPiAzICYmIHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicpXG4gICAgICA/IChsZW5ndGgtLSwgY3VzdG9taXplcilcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHNvdXJjZXNbMF0sIHNvdXJjZXNbMV0sIGd1YXJkKSkge1xuICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiBjdXN0b21pemVyO1xuICAgICAgbGVuZ3RoID0gMTtcbiAgICB9XG4gICAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIHZhciBzb3VyY2UgPSBzb3VyY2VzW2luZGV4XTtcbiAgICAgIGlmIChzb3VyY2UpIHtcbiAgICAgICAgYXNzaWduZXIob2JqZWN0LCBzb3VyY2UsIGluZGV4LCBjdXN0b21pemVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUFzc2lnbmVyO1xuIiwiaW1wb3J0IGFwcGx5IGZyb20gJy4vX2FwcGx5LmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIHJlc3QgYXJyYXkgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCB0cmFuc2Zvcm0pIHtcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIHN0YXJ0LCAwKSxcbiAgICAgICAgYXJyYXkgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFycmF5W2luZGV4XSA9IGFyZ3Nbc3RhcnQgKyBpbmRleF07XG4gICAgfVxuICAgIGluZGV4ID0gLTE7XG4gICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xuICAgICAgb3RoZXJBcmdzW2luZGV4XSA9IGFyZ3NbaW5kZXhdO1xuICAgIH1cbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcbiAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgb3ZlclJlc3Q7XG4iLCJpbXBvcnQgYmFzZVNldFRvU3RyaW5nIGZyb20gJy4vX2Jhc2VTZXRUb1N0cmluZy5qcyc7XG5pbXBvcnQgc2hvcnRPdXQgZnJvbSAnLi9fc2hvcnRPdXQuanMnO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGBmdW5jYCB0byByZXR1cm4gYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgc2V0VG9TdHJpbmcgPSBzaG9ydE91dChiYXNlU2V0VG9TdHJpbmcpO1xuXG5leHBvcnQgZGVmYXVsdCBzZXRUb1N0cmluZztcbiIsImltcG9ydCBjb25zdGFudCBmcm9tICcuL2NvbnN0YW50LmpzJztcbmltcG9ydCBkZWZpbmVQcm9wZXJ0eSBmcm9tICcuL19kZWZpbmVQcm9wZXJ0eS5qcyc7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYHNldFRvU3RyaW5nYCB3aXRob3V0IHN1cHBvcnQgZm9yIGhvdCBsb29wIHNob3J0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIGJhc2VTZXRUb1N0cmluZyA9ICFkZWZpbmVQcm9wZXJ0eSA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgc3RyaW5nKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jLCAndG9TdHJpbmcnLCB7XG4gICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgJ2VudW1lcmFibGUnOiBmYWxzZSxcbiAgICAndmFsdWUnOiBjb25zdGFudChzdHJpbmcpLFxuICAgICd3cml0YWJsZSc6IHRydWVcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBiYXNlU2V0VG9TdHJpbmc7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYHZhbHVlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGZyb20gdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbnN0YW50IGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5jb25zdGFudCh7ICdhJzogMSB9KSk7XG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0cyk7XG4gKiAvLyA9PiBbeyAnYSc6IDEgfSwgeyAnYSc6IDEgfV1cbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzWzBdID09PSBvYmplY3RzWzFdKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29uc3RhbnQ7XG4iLCIvKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXG52YXIgSE9UX0NPVU5UID0gODAwLFxuICAgIEhPVF9TUEFOID0gMTY7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVOb3cgPSBEYXRlLm5vdztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCdsbCBzaG9ydCBvdXQgYW5kIGludm9rZSBgaWRlbnRpdHlgIGluc3RlYWRcbiAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxuICogbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNob3J0YWJsZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gc2hvcnRPdXQoZnVuYykge1xuICB2YXIgY291bnQgPSAwLFxuICAgICAgbGFzdENhbGxlZCA9IDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxuICAgICAgICByZW1haW5pbmcgPSBIT1RfU1BBTiAtIChzdGFtcCAtIGxhc3RDYWxsZWQpO1xuXG4gICAgbGFzdENhbGxlZCA9IHN0YW1wO1xuICAgIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgICBpZiAoKytjb3VudCA+PSBIT1RfQ09VTlQpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNob3J0T3V0O1xuIiwiaW1wb3J0IGFycmF5TGlrZUtleXMgZnJvbSAnLi9fYXJyYXlMaWtlS2V5cy5qcyc7XG5pbXBvcnQgYmFzZUtleXNJbiBmcm9tICcuL19iYXNlS2V5c0luLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL2lzQXJyYXlMaWtlLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5c0luKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCwgdHJ1ZSkgOiBiYXNlS2V5c0luKG9iamVjdCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGtleXNJbjtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VUaW1lcztcbiIsImltcG9ydCBiYXNlSXNBcmd1bWVudHMgZnJvbSAnLi9fYmFzZUlzQXJndW1lbnRzLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhbiBgYXJndW1lbnRzYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcmd1bWVudHMgPSBiYXNlSXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPyBiYXNlSXNBcmd1bWVudHMgOiBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnY2FsbGVlJykgJiZcbiAgICAhcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgaXNBcmd1bWVudHM7XG4iLCJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBhcmdzVGFnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNBcmd1bWVudHM7XG4iLCJpbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcbmltcG9ydCBzdHViRmFsc2UgZnJvbSAnLi9zdHViRmFsc2UuanMnO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbmV4cG9ydCBkZWZhdWx0IGlzQnVmZmVyO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGBmYWxzZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEzLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRpbWVzKDIsIF8uc3R1YkZhbHNlKTtcbiAqIC8vID0+IFtmYWxzZSwgZmFsc2VdXG4gKi9cbmZ1bmN0aW9uIHN0dWJGYWxzZSgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHViRmFsc2U7XG4iLCJpbXBvcnQgYmFzZUlzVHlwZWRBcnJheSBmcm9tICcuL19iYXNlSXNUeXBlZEFycmF5LmpzJztcbmltcG9ydCBiYXNlVW5hcnkgZnJvbSAnLi9fYmFzZVVuYXJ5LmpzJztcbmltcG9ydCBub2RlVXRpbCBmcm9tICcuL19ub2RlVXRpbC5qcyc7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzVHlwZWRBcnJheSA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzVHlwZWRBcnJheTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShuZXcgVWludDhBcnJheSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkoW10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzVHlwZWRBcnJheSA9IG5vZGVJc1R5cGVkQXJyYXkgPyBiYXNlVW5hcnkobm9kZUlzVHlwZWRBcnJheSkgOiBiYXNlSXNUeXBlZEFycmF5O1xuXG5leHBvcnQgZGVmYXVsdCBpc1R5cGVkQXJyYXk7XG4iLCJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc0xlbmd0aCBmcm9tICcuL2lzTGVuZ3RoLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXG52YXIgdHlwZWRBcnJheVRhZ3MgPSB7fTtcbnR5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDhUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xudHlwZWRBcnJheVRhZ3NbYXJnc1RhZ10gPSB0eXBlZEFycmF5VGFnc1thcnJheVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZXJyb3JUYWddID0gdHlwZWRBcnJheVRhZ3NbZnVuY1RhZ10gPVxudHlwZWRBcnJheVRhZ3NbbWFwVGFnXSA9IHR5cGVkQXJyYXlUYWdzW251bWJlclRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbc2V0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3N0cmluZ1RhZ10gPVxudHlwZWRBcnJheVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1R5cGVkQXJyYXlgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJlxuICAgIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tiYXNlR2V0VGFnKHZhbHVlKV07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc1R5cGVkQXJyYXk7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VVbmFyeTtcbiIsImltcG9ydCBmcmVlR2xvYmFsIGZyb20gJy4vX2ZyZWVHbG9iYWwuanMnO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5leHBvcnQgZGVmYXVsdCBub2RlVXRpbDtcbiIsImltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCBpc1Byb3RvdHlwZSBmcm9tICcuL19pc1Byb3RvdHlwZS5qcyc7XG5pbXBvcnQgbmF0aXZlS2V5c0luIGZyb20gJy4vX25hdGl2ZUtleXNJbi5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c0luYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VLZXlzSW4ob2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzSW4ob2JqZWN0KTtcbiAgfVxuICB2YXIgaXNQcm90byA9IGlzUHJvdG90eXBlKG9iamVjdCksXG4gICAgICByZXN1bHQgPSBbXTtcblxuICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgaWYgKCEoa2V5ID09ICdjb25zdHJ1Y3RvcicgJiYgKGlzUHJvdG8gfHwgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VLZXlzSW47XG4iLCIvKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZVxuICogW2BPYmplY3Qua2V5c2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChvYmplY3QgIT0gbnVsbCkge1xuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbmF0aXZlS2V5c0luO1xuIiwiaW1wb3J0IGFwcGx5IGZyb20gJy4vX2FwcGx5LmpzJztcbmltcG9ydCBiYXNlUmVzdCBmcm9tICcuL19iYXNlUmVzdC5qcyc7XG5pbXBvcnQgaXNFcnJvciBmcm9tICcuL2lzRXJyb3IuanMnO1xuXG4vKipcbiAqIEF0dGVtcHRzIHRvIGludm9rZSBgZnVuY2AsIHJldHVybmluZyBlaXRoZXIgdGhlIHJlc3VsdCBvciB0aGUgY2F1Z2h0IGVycm9yXG4gKiBvYmplY3QuIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQgdG8gYGZ1bmNgIHdoZW4gaXQncyBpbnZva2VkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhdHRlbXB0LlxuICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYGZ1bmNgIHJlc3VsdCBvciBlcnJvciBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIEF2b2lkIHRocm93aW5nIGVycm9ycyBmb3IgaW52YWxpZCBzZWxlY3RvcnMuXG4gKiB2YXIgZWxlbWVudHMgPSBfLmF0dGVtcHQoZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAqICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICogfSwgJz5fPicpO1xuICpcbiAqIGlmIChfLmlzRXJyb3IoZWxlbWVudHMpKSB7XG4gKiAgIGVsZW1lbnRzID0gW107XG4gKiB9XG4gKi9cbnZhciBhdHRlbXB0ID0gYmFzZVJlc3QoZnVuY3Rpb24oZnVuYywgYXJncykge1xuICB0cnkge1xuICAgIHJldHVybiBhcHBseShmdW5jLCB1bmRlZmluZWQsIGFyZ3MpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGlzRXJyb3IoZSkgPyBlIDogbmV3IEVycm9yKGUpO1xuICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgYXR0ZW1wdDtcbiIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGdldFByb3RvdHlwZSBmcm9tICcuL19nZXRQcm90b3R5cGUuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGluZmVyIHRoZSBgT2JqZWN0YCBjb25zdHJ1Y3Rvci4gKi9cbnZhciBvYmplY3RDdG9yU3RyaW5nID0gZnVuY1RvU3RyaW5nLmNhbGwoT2JqZWN0KTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgdGhhdCBpcywgYW4gb2JqZWN0IGNyZWF0ZWQgYnkgdGhlXG4gKiBgT2JqZWN0YCBjb25zdHJ1Y3RvciBvciBvbmUgd2l0aCBhIGBbW1Byb3RvdHlwZV1dYCBvZiBgbnVsbGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjguMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogfVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChuZXcgRm9vKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdCh7ICd4JzogMCwgJ3knOiAwIH0pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgfHwgYmFzZUdldFRhZyh2YWx1ZSkgIT0gb2JqZWN0VGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwcm90byA9IGdldFByb3RvdHlwZSh2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBDdG9yID0gaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgJ2NvbnN0cnVjdG9yJykgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmXG4gICAgZnVuY1RvU3RyaW5nLmNhbGwoQ3RvcikgPT0gb2JqZWN0Q3RvclN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNQbGFpbk9iamVjdDtcbiIsImltcG9ydCBvdmVyQXJnIGZyb20gJy4vX292ZXJBcmcuanMnO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBnZXRQcm90b3R5cGUgPSBvdmVyQXJnKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KTtcblxuZXhwb3J0IGRlZmF1bHQgZ2V0UHJvdG90eXBlO1xuIiwiaW1wb3J0IGFycmF5TWFwIGZyb20gJy4vX2FycmF5TWFwLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy52YWx1ZXNgIGFuZCBgXy52YWx1ZXNJbmAgd2hpY2ggY3JlYXRlcyBhblxuICogYXJyYXkgb2YgYG9iamVjdGAgcHJvcGVydHkgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3BlcnR5IG5hbWVzXG4gKiBvZiBgcHJvcHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgbmFtZXMgdG8gZ2V0IHZhbHVlcyBmb3IuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VWYWx1ZXMob2JqZWN0LCBwcm9wcykge1xuICByZXR1cm4gYXJyYXlNYXAocHJvcHMsIGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBvYmplY3Rba2V5XTtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VWYWx1ZXM7XG4iLCJpbXBvcnQgZXEgZnJvbSAnLi9lcS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCBieSBgXy5kZWZhdWx0c2AgdG8gY3VzdG9taXplIGl0cyBgXy5hc3NpZ25JbmAgdXNlIHRvIGFzc2lnbiBwcm9wZXJ0aWVzXG4gKiBvZiBzb3VyY2Ugb2JqZWN0cyB0byB0aGUgZGVzdGluYXRpb24gb2JqZWN0IGZvciBhbGwgZGVzdGluYXRpb24gcHJvcGVydGllc1xuICogdGhhdCByZXNvbHZlIHRvIGB1bmRlZmluZWRgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IG9ialZhbHVlIFRoZSBkZXN0aW5hdGlvbiB2YWx1ZS5cbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHNvdXJjZSB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgcGFyZW50IG9iamVjdCBvZiBgb2JqVmFsdWVgLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gY3VzdG9tRGVmYXVsdHNBc3NpZ25JbihvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0KSB7XG4gIGlmIChvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAoZXEob2JqVmFsdWUsIG9iamVjdFByb3RvW2tleV0pICYmICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpIHtcbiAgICByZXR1cm4gc3JjVmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9ialZhbHVlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjdXN0b21EZWZhdWx0c0Fzc2lnbkluO1xuIiwiLyoqIFVzZWQgdG8gZXNjYXBlIGNoYXJhY3RlcnMgZm9yIGluY2x1c2lvbiBpbiBjb21waWxlZCBzdHJpbmcgbGl0ZXJhbHMuICovXG52YXIgc3RyaW5nRXNjYXBlcyA9IHtcbiAgJ1xcXFwnOiAnXFxcXCcsXG4gIFwiJ1wiOiBcIidcIixcbiAgJ1xcbic6ICduJyxcbiAgJ1xccic6ICdyJyxcbiAgJ1xcdTIwMjgnOiAndTIwMjgnLFxuICAnXFx1MjAyOSc6ICd1MjAyOSdcbn07XG5cbi8qKlxuICogVXNlZCBieSBgXy50ZW1wbGF0ZWAgdG8gZXNjYXBlIGNoYXJhY3RlcnMgZm9yIGluY2x1c2lvbiBpbiBjb21waWxlZCBzdHJpbmcgbGl0ZXJhbHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBjaHIgVGhlIG1hdGNoZWQgY2hhcmFjdGVyIHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgY2hhcmFjdGVyLlxuICovXG5mdW5jdGlvbiBlc2NhcGVTdHJpbmdDaGFyKGNocikge1xuICByZXR1cm4gJ1xcXFwnICsgc3RyaW5nRXNjYXBlc1tjaHJdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBlc2NhcGVTdHJpbmdDaGFyO1xuIiwiaW1wb3J0IGFycmF5TGlrZUtleXMgZnJvbSAnLi9fYXJyYXlMaWtlS2V5cy5qcyc7XG5pbXBvcnQgYmFzZUtleXMgZnJvbSAnLi9fYmFzZUtleXMuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXG4gKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5cyhuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLmtleXMoJ2hpJyk7XG4gKiAvLyA9PiBbJzAnLCAnMSddXG4gKi9cbmZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQga2V5cztcbiIsImltcG9ydCBpc1Byb3RvdHlwZSBmcm9tICcuL19pc1Byb3RvdHlwZS5qcyc7XG5pbXBvcnQgbmF0aXZlS2V5cyBmcm9tICcuL19uYXRpdmVLZXlzLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VLZXlzKG9iamVjdCkge1xuICBpZiAoIWlzUHJvdG90eXBlKG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyhvYmplY3QpO1xuICB9XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGtleSAhPSAnY29uc3RydWN0b3InKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlS2V5cztcbiIsImltcG9ydCBvdmVyQXJnIGZyb20gJy4vX292ZXJBcmcuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlS2V5cyA9IG92ZXJBcmcoT2JqZWN0LmtleXMsIE9iamVjdCk7XG5cbmV4cG9ydCBkZWZhdWx0IG5hdGl2ZUtleXM7XG4iLCJpbXBvcnQgZXNjYXBlIGZyb20gJy4vZXNjYXBlLmpzJztcbmltcG9ydCByZUVzY2FwZSBmcm9tICcuL19yZUVzY2FwZS5qcyc7XG5pbXBvcnQgcmVFdmFsdWF0ZSBmcm9tICcuL19yZUV2YWx1YXRlLmpzJztcbmltcG9ydCByZUludGVycG9sYXRlIGZyb20gJy4vX3JlSW50ZXJwb2xhdGUuanMnO1xuXG4vKipcbiAqIEJ5IGRlZmF1bHQsIHRoZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzIHVzZWQgYnkgbG9kYXNoIGFyZSBsaWtlIHRob3NlIGluXG4gKiBlbWJlZGRlZCBSdWJ5IChFUkIpIGFzIHdlbGwgYXMgRVMyMDE1IHRlbXBsYXRlIHN0cmluZ3MuIENoYW5nZSB0aGVcbiAqIGZvbGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHR5cGUge09iamVjdH1cbiAqL1xudmFyIHRlbXBsYXRlU2V0dGluZ3MgPSB7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gZGV0ZWN0IGBkYXRhYCBwcm9wZXJ0eSB2YWx1ZXMgdG8gYmUgSFRNTC1lc2NhcGVkLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtSZWdFeHB9XG4gICAqL1xuICAnZXNjYXBlJzogcmVFc2NhcGUsXG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gZGV0ZWN0IGNvZGUgdG8gYmUgZXZhbHVhdGVkLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtSZWdFeHB9XG4gICAqL1xuICAnZXZhbHVhdGUnOiByZUV2YWx1YXRlLFxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGRldGVjdCBgZGF0YWAgcHJvcGVydHkgdmFsdWVzIHRvIGluamVjdC5cbiAgICpcbiAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5nc1xuICAgKiBAdHlwZSB7UmVnRXhwfVxuICAgKi9cbiAgJ2ludGVycG9sYXRlJzogcmVJbnRlcnBvbGF0ZSxcblxuICAvKipcbiAgICogVXNlZCB0byByZWZlcmVuY2UgdGhlIGRhdGEgb2JqZWN0IGluIHRoZSB0ZW1wbGF0ZSB0ZXh0LlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICAndmFyaWFibGUnOiAnJyxcblxuICAvKipcbiAgICogVXNlZCB0byBpbXBvcnQgdmFyaWFibGVzIGludG8gdGhlIGNvbXBpbGVkIHRlbXBsYXRlLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICAnaW1wb3J0cyc6IHtcblxuICAgIC8qKlxuICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBgbG9kYXNoYCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3MuaW1wb3J0c1xuICAgICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICAnXyc6IHsgJ2VzY2FwZSc6IGVzY2FwZSB9XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRlbXBsYXRlU2V0dGluZ3M7XG4iLCJpbXBvcnQgZXNjYXBlSHRtbENoYXIgZnJvbSAnLi9fZXNjYXBlSHRtbENoYXIuanMnO1xuaW1wb3J0IHRvU3RyaW5nIGZyb20gJy4vdG9TdHJpbmcuanMnO1xuXG4vKiogVXNlZCB0byBtYXRjaCBIVE1MIGVudGl0aWVzIGFuZCBIVE1MIGNoYXJhY3RlcnMuICovXG52YXIgcmVVbmVzY2FwZWRIdG1sID0gL1smPD5cIiddL2csXG4gICAgcmVIYXNVbmVzY2FwZWRIdG1sID0gUmVnRXhwKHJlVW5lc2NhcGVkSHRtbC5zb3VyY2UpO1xuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBjaGFyYWN0ZXJzIFwiJlwiLCBcIjxcIiwgXCI+XCIsICdcIicsIGFuZCBcIidcIiBpbiBgc3RyaW5nYCB0byB0aGVpclxuICogY29ycmVzcG9uZGluZyBIVE1MIGVudGl0aWVzLlxuICpcbiAqICoqTm90ZToqKiBObyBvdGhlciBjaGFyYWN0ZXJzIGFyZSBlc2NhcGVkLiBUbyBlc2NhcGUgYWRkaXRpb25hbFxuICogY2hhcmFjdGVycyB1c2UgYSB0aGlyZC1wYXJ0eSBsaWJyYXJ5IGxpa2UgW19oZV9dKGh0dHBzOi8vbXRocy5iZS9oZSkuXG4gKlxuICogVGhvdWdoIHRoZSBcIj5cIiBjaGFyYWN0ZXIgaXMgZXNjYXBlZCBmb3Igc3ltbWV0cnksIGNoYXJhY3RlcnMgbGlrZVxuICogXCI+XCIgYW5kIFwiL1wiIGRvbid0IG5lZWQgZXNjYXBpbmcgaW4gSFRNTCBhbmQgaGF2ZSBubyBzcGVjaWFsIG1lYW5pbmdcbiAqIHVubGVzcyB0aGV5J3JlIHBhcnQgb2YgYSB0YWcgb3IgdW5xdW90ZWQgYXR0cmlidXRlIHZhbHVlLiBTZWVcbiAqIFtNYXRoaWFzIEJ5bmVucydzIGFydGljbGVdKGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9hbWJpZ3VvdXMtYW1wZXJzYW5kcylcbiAqICh1bmRlciBcInNlbWktcmVsYXRlZCBmdW4gZmFjdFwiKSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFdoZW4gd29ya2luZyB3aXRoIEhUTUwgeW91IHNob3VsZCBhbHdheXNcbiAqIFtxdW90ZSBhdHRyaWJ1dGUgdmFsdWVzXShodHRwOi8vd29ua28uY29tL3Bvc3QvaHRtbC1lc2NhcGluZykgdG8gcmVkdWNlXG4gKiBYU1MgdmVjdG9ycy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5lc2NhcGUoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJyk7XG4gKiAvLyA9PiAnZnJlZCwgYmFybmV5LCAmYW1wOyBwZWJibGVzJ1xuICovXG5mdW5jdGlvbiBlc2NhcGUoc3RyaW5nKSB7XG4gIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gIHJldHVybiAoc3RyaW5nICYmIHJlSGFzVW5lc2NhcGVkSHRtbC50ZXN0KHN0cmluZykpXG4gICAgPyBzdHJpbmcucmVwbGFjZShyZVVuZXNjYXBlZEh0bWwsIGVzY2FwZUh0bWxDaGFyKVxuICAgIDogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBlc2NhcGU7XG4iLCJpbXBvcnQgYmFzZVByb3BlcnR5T2YgZnJvbSAnLi9fYmFzZVByb3BlcnR5T2YuanMnO1xuXG4vKiogVXNlZCB0byBtYXAgY2hhcmFjdGVycyB0byBIVE1MIGVudGl0aWVzLiAqL1xudmFyIGh0bWxFc2NhcGVzID0ge1xuICAnJic6ICcmYW1wOycsXG4gICc8JzogJyZsdDsnLFxuICAnPic6ICcmZ3Q7JyxcbiAgJ1wiJzogJyZxdW90OycsXG4gIFwiJ1wiOiAnJiMzOTsnXG59O1xuXG4vKipcbiAqIFVzZWQgYnkgYF8uZXNjYXBlYCB0byBjb252ZXJ0IGNoYXJhY3RlcnMgdG8gSFRNTCBlbnRpdGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGNociBUaGUgbWF0Y2hlZCBjaGFyYWN0ZXIgdG8gZXNjYXBlLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBjaGFyYWN0ZXIuXG4gKi9cbnZhciBlc2NhcGVIdG1sQ2hhciA9IGJhc2VQcm9wZXJ0eU9mKGh0bWxFc2NhcGVzKTtcblxuZXhwb3J0IGRlZmF1bHQgZXNjYXBlSHRtbENoYXI7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5T2ZgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eU9mKG9iamVjdCkge1xuICByZXR1cm4gZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VQcm9wZXJ0eU9mO1xuIiwiaW1wb3J0IFN5bWJvbCBmcm9tICcuL19TeW1ib2wuanMnO1xuaW1wb3J0IGFycmF5TWFwIGZyb20gJy4vX2FycmF5TWFwLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNTeW1ib2wgZnJvbSAnLi9pc1N5bWJvbC5qcyc7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXG4gKiB2YWx1ZXMgdG8gZW1wdHkgc3RyaW5ncy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgY29udmVydCB2YWx1ZXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICByZXR1cm4gYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmluZykgKyAnJztcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VUb1N0cmluZztcbiIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNTeW1ib2w7XG4iLCIvKiogVXNlZCB0byBtYXRjaCB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLiAqL1xudmFyIHJlRXNjYXBlID0gLzwlLShbXFxzXFxTXSs/KSU+L2c7XG5cbmV4cG9ydCBkZWZhdWx0IHJlRXNjYXBlO1xuIiwiLyoqIFVzZWQgdG8gbWF0Y2ggdGVtcGxhdGUgZGVsaW1pdGVycy4gKi9cbnZhciByZUV2YWx1YXRlID0gLzwlKFtcXHNcXFNdKz8pJT4vZztcblxuZXhwb3J0IGRlZmF1bHQgcmVFdmFsdWF0ZTtcbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuLyoqXG4gKiBBbiBpbXByb3ZlZCB0b29sdGlwIGNvbXBvbmVudCB3aGljaCBzdXBwb3J0cyBIVE1MIGFuZCBiZWhhdmVzIHRoZSBzYW1lIGluIGJvdGggR1VJIGFuZCBCVUlcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXJcbiAqL1xuY2xhc3MgSFRNTFRvb2x0aXAge1xuICAvKipcbiAgICogQ29uc3RydWN0IHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyB0aGUgdG9vbHRpcCBjb21wb25lbnQgcGFyYW1zXG4gICAqL1xuICBpbml0KHBhcmFtcykge1xuICAgIGNvbnN0IGVHdWkgPSAodGhpcy5lR3VpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpXG4gICAgY29uc3QgdG9vbHRpcFZhbHVlR2V0dGVyID0gcGFyYW1zLmNvbERlZi50b29sdGlwVmFsdWVHZXR0ZXJcbiAgICBjb25zdCBpc0hlYWRlciA9IHBhcmFtcy5yb3dJbmRleCA9PT0gdW5kZWZpbmVkXG4gICAgY29uc3QgaXNHcm91cGVkSGVhZGVyID0gaXNIZWFkZXIgJiYgISFwYXJhbXMuY29sRGVmLmNoaWxkcmVuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgIGNvbnN0IGRhdGEgPVxuICAgICAgIWlzSGVhZGVyICYmICFpc0dyb3VwZWRIZWFkZXJcbiAgICAgICAgPyBwYXJhbXMuYXBpLmdldERpc3BsYXllZFJvd0F0SW5kZXgocGFyYW1zLnJvd0luZGV4KS5kYXRhXG4gICAgICAgIDogbnVsbFxuICAgIGNvbnN0IHRoZW1lID0gcGFyYW1zLmFwaS5ncmlkQ29yZS5lR3JpZERpdi5jbGFzc05hbWUuZW5kc1dpdGgoJ2RhcmsnKVxuICAgICAgPyAnZ3ctdG9vbHRpcC1kYXJrJ1xuICAgICAgOiAnZ3ctdG9vbHRpcC1saWdodCdcbiAgICBjb25zdCB0b29sdGlwRmllbGQgPSBwYXJhbXMuY29sRGVmLnRvb2x0aXBGaWVsZFxuICAgICAgPyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICAgIGRhdGEgJiYgZGF0YS5oYXNPd25Qcm9wZXJ0eShwYXJhbXMuY29sRGVmLnRvb2x0aXBGaWVsZClcbiAgICAgICAgPyBkYXRhW3BhcmFtcy5jb2xEZWYudG9vbHRpcEZpZWxkXVxuICAgICAgICA6IG51bGxcbiAgICAgIDogbnVsbFxuXG4gICAgY29uc3QgcGFzc2VkUGFyYW1zID0ge1xuICAgICAgLi4ucGFyYW1zLFxuICAgICAgLi4ueyBkYXRhIH0sXG4gICAgICAuLi57IGlzSGVhZGVyLCBpc0dyb3VwZWRIZWFkZXIsIHRvb2x0aXBGaWVsZCB9LFxuICAgIH1cblxuICAgIGVHdWkuY2xhc3NMaXN0LmFkZCgnZ3ctdG9vbHRpcCcsIHRoZW1lKVxuICAgIGVHdWkuaW5uZXJIVE1MID1cbiAgICAgIGlzSGVhZGVyIHx8IGlzR3JvdXBlZEhlYWRlclxuICAgICAgICA/IHBhcmFtcy52YWx1ZVxuICAgICAgICA6IHRvb2x0aXBGaWVsZFxuICAgICAgICA/IHRvb2x0aXBGaWVsZFxuICAgICAgICA6IHRvb2x0aXBWYWx1ZUdldHRlclxuICAgICAgICA/IHRvb2x0aXBWYWx1ZUdldHRlcihwYXNzZWRQYXJhbXMpXG4gICAgICAgIDogcGFyYW1zLnZhbHVlXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBndWkgSW5zdGFuY2VcbiAgICpcbiAgICogQHJldHVybiB7SFRNTEVsZW1lbnR9XG4gICAqL1xuICBnZXRHdWkoKSB7XG4gICAgcmV0dXJuIHRoaXMuZUd1aVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEhUTUxUb29sdGlwXG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGd3X2dldEdyaWQgfSBmcm9tICcuL3V0aWxpdGllcydcblxuZXhwb3J0IGZ1bmN0aW9uIGd3X3NldFN0YXRlKGlkLCBzdGF0ZSkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuXG4gIHRyeSB7XG4gICAgb3B0aW9ucy5jb2x1bW5BcGkuc2V0Q29sdW1uU3RhdGUoc3RhdGUuY29sdW1ucylcbiAgICBvcHRpb25zLmNvbHVtbkFwaS5zZXRDb2x1bW5Hcm91cFN0YXRlKHN0YXRlLmdyb3VwcylcbiAgICBvcHRpb25zLmFwaS5zZXRTb3J0TW9kZWwoc3RhdGUuc29ydClcbiAgICBvcHRpb25zLmFwaS5zZXRGaWx0ZXJNb2RlbChzdGF0ZS5maWx0ZXJzKVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gcGFyc2UgZ3JpZCBzdGF0ZSBmcm9tIEpTT04nLCBlKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnd19nZXRTdGF0ZShpZCkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuICBjb25zdCBjb2x1bW5zID0gb3B0aW9ucy5jb2x1bW5BcGkuZ2V0Q29sdW1uU3RhdGUoKVxuICBjb25zdCBncm91cHMgPSBvcHRpb25zLmNvbHVtbkFwaS5nZXRDb2x1bW5Hcm91cFN0YXRlKClcbiAgY29uc3Qgc29ydCA9IG9wdGlvbnMuYXBpLmdldFNvcnRNb2RlbCgpXG4gIGNvbnN0IGZpbHRlcnMgPSBvcHRpb25zLmFwaS5nZXRGaWx0ZXJNb2RlbCgpXG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgY29sdW1ucyxcbiAgICAgIGdyb3VwcyxcbiAgICAgIHNvcnQsXG4gICAgICBmaWx0ZXJzLFxuICAgIH0pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBjb252ZXJ0IHRoZSBncmlkIHN0YXRlIHRvIGpzb24nLCBlKVxuICB9XG59XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGd3X2dldEdyaWQgfSBmcm9tICcuL3V0aWxpdGllcydcblxuZXhwb3J0IGZ1bmN0aW9uIGd3X3NldFNpZGVCYXJWaXNpYmxlKGlkLCB2YWx1ZSkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5zZXRTaWRlQmFyVmlzaWJsZShCb29sZWFuKHZhbHVlKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGd3X29wZW5Ub29scGFuZWwoZ3JpZElkLCB0b29scGFuZWxJZCkge1xuICBnd19nZXRHcmlkKGdyaWRJZCkub3B0aW9ucy5hcGkub3BlblRvb2xQYW5lbCh0b29scGFuZWxJZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGd3X2Nsb3NlVG9vbHBhbmVsKGdyaWRJZCwgdG9vbHBhbmVsSWQpIHtcbiAgZ3dfZ2V0R3JpZChncmlkSWQpLm9wdGlvbnMuYXBpLmNsb3NlVG9vbFBhbmVsKHRvb2xwYW5lbElkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0RnVuY3Rpb25zUmVhZE9ubHkoaWQsIHJlYWRvbmx5KSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLnNldEZ1bmN0aW9uc1JlYWRPbmx5KEJvb2xlYW4ocmVhZG9ubHkpKVxufVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19nZXRHcmlkIH0gZnJvbSAnLi91dGlsaXRpZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRTdGF0dXNiYXJDb21wb25lbnRWaXNpYmlsaXR5KGlkLCBrZXksIHZpc2liaWxpdHkpIHtcbiAgZ3dfZ2V0R3JpZChpZClcbiAgICAub3B0aW9ucy5hcGkuZ2V0U3RhdHVzUGFuZWwoa2V5KVxuICAgIC5zZXRWaXNpYmxlKEJvb2xlYW4odmlzaWJpbGl0eSkpXG59XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGd3X2dldEdyaWQgfSBmcm9tICcuL3V0aWxpdGllcydcblxuLyoqXG4gKiBTaG93IGxvYWRpbmcgb3ZlcmxheVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2hvd0xvYWRpbmdPdmVybGF5KGlkKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLnNob3dMb2FkaW5nT3ZlcmxheSgpXG59XG5cbi8qKlxuICogU2hvdyAnbm8gcm93cycgb3ZlcmxheVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2hvd05vUm93c092ZXJsYXkoaWQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkuc2hvd05vUm93c092ZXJsYXkoKVxufVxuXG4vKipcbiAqIENsZWFyIGFsbCBvdmVybGF5c1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfaGlkZU92ZXJsYXkoaWQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkuaGlkZU92ZXJsYXkoKVxufVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19nZXRHcmlkIH0gZnJvbSAnLi91dGlsaXRpZXMnXG5cbi8qKlxuICogVXBkYXRlIGNvbnRleHRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtTdHJpbmd9IGtleSBUaGUgY29udGV4dCdzIGtleSB0byB1cGRhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZSAgVGhlIG5ldyBjb250ZXh0J3MgdmFsdWVcbiAqL1xuLy8gZXhwb3J0IGZ1bmN0aW9uIGd3X2xlZ2FjeVVwZGF0ZUNvbnRleHQoaWQsIGtleSwgdmFsdWUpIHtcbi8vIFx0Z3dfZ2V0R3JpZChpZClcbi8vIFx0XHQub3B0aW9uc1xuLy8gXHRcdC5jb250ZXh0W2tleV0gPSBKU09OLnBhcnNlKHZhbHVlKTtcbi8vIH1cblxuLyoqXG4gKiBVcGRhdGUgY29udGV4dFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dCBUaGUgbmV3IGNvbnRleHQgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd191cGRhdGVDb250ZXh0KGlkLCBjb250ZXh0KSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29udGV4dCA9IGNvbnRleHRcbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0ICdleHBvc2UtbG9hZGVyP2pzcyFqc3MvanNzLmpzJ1xuaW1wb3J0IHsgZ3dfZ2V0RG9jdW1lbnQgfSBmcm9tICcuL3V0aWxpdGllcydcblxuLyoqXG4gKiBBZGQgbmV3IHN0eWxlXG4gKlxuICogQWRkIG5ldyBzdHlsZSB0byB0aGUgZG9jdW1lbnRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3IgY3NzIHNlbGVjdG9yXG4gKiBAcGFyYW0ge1N0cmluZ30gcnVsZXMgSnNvbiBzdHJpbmcgZm9yIGFuIGFycmF5IG9mIHJ1bGVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRTdHlsZShzZWxlY3RvciwgcnVsZXMpIHtcbiAganNzLmZvckRvY3VtZW50KGd3X2dldERvY3VtZW50KCkpLnNldChzZWxlY3RvciwgSlNPTi5wYXJzZShydWxlcykpXG59XG5cbi8qKlxuICogUmVtb3ZlIHN0eWxlXG4gKlxuICogUmVtb3ZlIGFkZGVkIHN0eWxlIGZyb20gdGhlcyBkb2N1bWVudFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvciBjc3Mgc2VsZWN0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3JlbW92ZVN0eWxlKHNlbGVjdG9yKSB7XG4gIGpzcy5mb3JEb2N1bWVudChnd19nZXREb2N1bWVudCgpKS5yZW1vdmUoc2VsZWN0b3IpXG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbFtcImpzc1wiXSA9IHJlcXVpcmUoXCItIUQ6XFxcXEdpdGh1YlxcXFxCQmpHcmlkRXhXaWRnZXRcXFxcY2xpZW50XFxcXG5vZGVfbW9kdWxlc1xcXFxiYWJlbC1sb2FkZXJcXFxcbGliXFxcXGluZGV4LmpzPz9yZWYtLTQhLlxcXFxqc3MuanNcIik7IiwiLypcbiAqIEpTUyB2MC42IC0gSmF2YVNjcmlwdCBTdHlsZXNoZWV0c1xuICogaHR0cHM6Ly9naXRodWIuY29tL0JveDkvanNzXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDExLCBEYXZpZCBUYW5nXG4gKiBNSVQgTGljZW5zZWQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKVxuICovXG52YXIganNzID0gKGZ1bmN0aW9uKCkge1xuICAgIHZhciBhZGpTZWxBdHRyUmVnZXggPSAvKCg/OlxcLnwjKVteXFwuXFxzI10rKSgoPzpcXC58IylbXlxcLlxccyNdKykvZztcbiAgICB2YXIgZG91YmxlQ29sb25Qc2V1ZG9FbFJlZ2V4ID0gLyg6OikoYmVmb3JlfGFmdGVyfGZpcnN0LWxpbmV8Zmlyc3QtbGV0dGVyfHNlbGVjdGlvbikvO1xuICAgIHZhciBzaW5nbGVDb2xvblBzZXVkb0VsUmVnZXggPSAvKFteOl0pKDopKGJlZm9yZXxhZnRlcnxmaXJzdC1saW5lfGZpcnN0LWxldHRlcnxzZWxlY3Rpb24pLztcbiAgICB2YXIgc2luZ2xlQ29sb25Gb3JQc2V1ZG9FbGVtZW50czsgLy8gZmxhZyBmb3Igb2xkZXIgYnJvd3NlcnNcblxuICAgIGZ1bmN0aW9uIGdldFNlbGVjdG9yc0FuZFJ1bGVzKHNoZWV0KSB7XG4gICAgICAgIHZhciBydWxlcyA9IHNoZWV0LmNzc1J1bGVzIHx8IHNoZWV0LnJ1bGVzIHx8IFtdO1xuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAvLyBPbGRlciBicm93c2VycyBhbmQgRkYgcmVwb3J0IHBzZXVkbyBlbGVtZW50IHNlbGVjdG9ycyBpbiBhbiBvdXRkYXRlZCBmb3JtYXRcbiAgICAgICAgICAgIHZhciBzZWxlY3RvclRleHQgPSB0b0RvdWJsZUNvbG9uUHNldWRvRWxlbWVudHMocnVsZXNbaV0uc2VsZWN0b3JUZXh0KTtcbiAgICAgICAgICAgIGlmICghcmVzdWx0c1tzZWxlY3RvclRleHRdKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0c1tzZWxlY3RvclRleHRdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRzW3NlbGVjdG9yVGV4dF0ucHVzaCh7XG4gICAgICAgICAgICAgICAgc2hlZXQ6IHNoZWV0LFxuICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgIHN0eWxlOiBydWxlc1tpXS5zdHlsZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UnVsZXMoc2hlZXQsIHNlbGVjdG9yKSB7XG4gICAgICAgIHZhciBydWxlcyA9IHNoZWV0LmNzc1J1bGVzIHx8IHNoZWV0LnJ1bGVzIHx8IFtdO1xuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICAvLyBCcm93c2VycyByZXBvcnQgc2VsZWN0b3JzIGluIGxvd2VyY2FzZVxuICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9yLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBzZWxlY3RvclRleHQgPSBydWxlc1tpXS5zZWxlY3RvclRleHQ7XG4gICAgICAgICAgICAvLyBOb3RlIC0gY2VydGFpbiBydWxlcyAoZS5nLiBAcnVsZXMpIGRvbid0IGhhdmUgc2VsZWN0b3JUZXh0XG4gICAgICAgICAgICBpZiAoc2VsZWN0b3JUZXh0ICYmIChzZWxlY3RvclRleHQgPT0gc2VsZWN0b3IgfHwgc2VsZWN0b3JUZXh0ID09IHN3YXBBZGpTZWxBdHRyKHNlbGVjdG9yKSB8fCBzZWxlY3RvclRleHQgPT0gc3dhcFBzZXVkb0VsU3ludGF4KHNlbGVjdG9yKSkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBzaGVldDogc2hlZXQsXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZTogcnVsZXNbaV0uc3R5bGVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRSdWxlKHNoZWV0LCBzZWxlY3Rvcikge1xuICAgICAgICB2YXIgcnVsZXMgPSBzaGVldC5jc3NSdWxlcyB8fCBzaGVldC5ydWxlcyB8fCBbXTtcbiAgICAgICAgdmFyIGluZGV4ID0gcnVsZXMubGVuZ3RoO1xuICAgICAgICB2YXIgcHNldWRvRWxlbWVudFJ1bGUgPSBhZGRQc2V1ZG9FbGVtZW50UnVsZShzaGVldCwgc2VsZWN0b3IsIHJ1bGVzLCBpbmRleCk7XG5cbiAgICAgICAgaWYgKCFwc2V1ZG9FbGVtZW50UnVsZSkge1xuICAgICAgICAgICAgYWRkUnVsZVRvU2hlZXQoc2hlZXQsIHNlbGVjdG9yLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzaGVldDogc2hlZXQsXG4gICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICBzdHlsZTogcnVsZXNbaW5kZXhdLnN0eWxlXG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGFkZFJ1bGVUb1NoZWV0KHNoZWV0LCBzZWxlY3RvciwgaW5kZXgpIHtcbiAgICAgICAgaWYgKHNoZWV0Lmluc2VydFJ1bGUpIHtcbiAgICAgICAgICAgIHNoZWV0Lmluc2VydFJ1bGUoc2VsZWN0b3IgKyAnIHsgfScsIGluZGV4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNoZWV0LmFkZFJ1bGUoc2VsZWN0b3IsIG51bGwsIGluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZXMgc2luZ2xlIGNvbG9uIHN5bnRheCBmb3Igb2xkZXIgYnJvd3NlcnMgYW5kIGJ1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD05NDk2NTFcbiAgICBmdW5jdGlvbiBhZGRQc2V1ZG9FbGVtZW50UnVsZShzaGVldCwgc2VsZWN0b3IsIHJ1bGVzLCBpbmRleCkge1xuICAgICAgICB2YXIgZG91YmxlQ29sb25TZWxlY3RvcjtcbiAgICAgICAgdmFyIHNpbmdsZUNvbG9uU2VsZWN0b3I7XG5cbiAgICAgICAgaWYgKGRvdWJsZUNvbG9uUHNldWRvRWxSZWdleC5leGVjKHNlbGVjdG9yKSkge1xuICAgICAgICAgICAgZG91YmxlQ29sb25TZWxlY3RvciA9IHNlbGVjdG9yO1xuICAgICAgICAgICAgc2luZ2xlQ29sb25TZWxlY3RvciA9IHRvU2luZ2xlQ29sb25Qc2V1ZG9FbGVtZW50cyhzZWxlY3Rvcik7XG4gICAgICAgIH0gZWxzZSBpZiAoc2luZ2xlQ29sb25Qc2V1ZG9FbFJlZ2V4LmV4ZWMoc2VsZWN0b3IpKSB7XG4gICAgICAgICAgICBkb3VibGVDb2xvblNlbGVjdG9yID0gdG9Eb3VibGVDb2xvblBzZXVkb0VsZW1lbnRzKHNlbGVjdG9yKTtcbiAgICAgICAgICAgIHNpbmdsZUNvbG9uU2VsZWN0b3IgPSBzZWxlY3RvcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gTm90IGRlYWxpbmcgd2l0aCBhIHBzZXVkbyBlbGVtZW50XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXNpbmdsZUNvbG9uRm9yUHNldWRvRWxlbWVudHMpIHtcbiAgICAgICAgICAgIC8vIEFzc3VtZSBtb2Rlcm4gYnJvd3NlciBhbmQgdGhlbiBjaGVjayBpZiBzdWNjZXNzZnVsXG4gICAgICAgICAgICBhZGRSdWxlVG9TaGVldChzaGVldCwgZG91YmxlQ29sb25TZWxlY3RvciwgaW5kZXgpO1xuICAgICAgICAgICAgaWYgKHJ1bGVzLmxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgICAgICAgICAgIHNpbmdsZUNvbG9uRm9yUHNldWRvRWxlbWVudHMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzaW5nbGVDb2xvbkZvclBzZXVkb0VsZW1lbnRzKSB7XG4gICAgICAgICAgICBhZGRSdWxlVG9TaGVldChzaGVldCwgc2luZ2xlQ29sb25TZWxlY3RvciwgaW5kZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9Eb3VibGVDb2xvblBzZXVkb0VsZW1lbnRzKHNlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3Rvci5yZXBsYWNlKHNpbmdsZUNvbG9uUHNldWRvRWxSZWdleCwgZnVuY3Rpb24gKG1hdGNoLCBzdWJtYXRjaDEsIHN1Ym1hdGNoMiwgc3VibWF0Y2gzKSB7XG4gICAgICAgICAgICByZXR1cm4gc3VibWF0Y2gxICsgJzo6JyArIHN1Ym1hdGNoMztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9TaW5nbGVDb2xvblBzZXVkb0VsZW1lbnRzKHNlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3Rvci5yZXBsYWNlKGRvdWJsZUNvbG9uUHNldWRvRWxSZWdleCwgZnVuY3Rpb24obWF0Y2gsIHN1Ym1hdGNoMSwgc3VibWF0Y2gyKSB7XG4gICAgICAgICAgICByZXR1cm4gJzonICsgc3VibWF0Y2gyO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbW92ZVJ1bGUocnVsZSkge1xuICAgICAgICB2YXIgc2hlZXQgPSBydWxlLnNoZWV0O1xuICAgICAgICBpZiAoc2hlZXQuZGVsZXRlUnVsZSkge1xuICAgICAgICAgICAgc2hlZXQuZGVsZXRlUnVsZShydWxlLmluZGV4KTtcbiAgICAgICAgfSBlbHNlIGlmIChzaGVldC5yZW1vdmVSdWxlKSB7XG4gICAgICAgICAgICBzaGVldC5yZW1vdmVSdWxlKHJ1bGUuaW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXh0ZW5kKGRlc3QsIHNyYykge1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgICAgICAgICBpZiAoIXNyYy5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgZGVzdFtrZXldID0gc3JjW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWdncmVnYXRlU3R5bGVzKHJ1bGVzKSB7XG4gICAgICAgIHZhciBhZ2dyZWdhdGUgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZXh0ZW5kKGFnZ3JlZ2F0ZSwgZGVjbGFyZWRQcm9wZXJ0aWVzKHJ1bGVzW2ldLnN0eWxlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFnZ3JlZ2F0ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWNsYXJlZFByb3BlcnRpZXMoc3R5bGUpIHtcbiAgICAgICAgdmFyIGRlY2xhcmVkID0ge307XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGRlY2xhcmVkW3N0eWxlW2ldXSA9IHN0eWxlW3RvQ2FtZWxDYXNlKHN0eWxlW2ldKV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlY2xhcmVkO1xuICAgIH1cblxuICAgIC8vIElFOSBzdG9yZXMgcnVsZXMgd2l0aCBhdHRyaWJ1dGVzIChjbGFzc2VzIG9yIElEJ3MpIGFkamFjZW50IGluIHRoZSBvcHBvc2l0ZSBvcmRlciBhcyBkZWZpbmVkXG4gICAgLy8gY2F1c2luZyB0aGVtIHRvIG5vdCBiZSBmb3VuZCwgc28gdGhpcyBtZXRob2Qgc3dhcHMgWyN8Ll1zZWwxWyN8Ll1zZWwyIHRvIGJlY29tZSBbI3wuXXNlbDJbI3wuXXNlbDFcbiAgICBmdW5jdGlvbiBzd2FwQWRqU2VsQXR0cihzZWxlY3Rvcikge1xuICAgICAgICB2YXIgc3dhcCA9ICcnO1xuICAgICAgICB2YXIgbGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgIFxuICAgICAgICB3aGlsZSAoKG1hdGNoID0gYWRqU2VsQXR0clJlZ2V4LmV4ZWMoc2VsZWN0b3IpKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAobWF0Y2hbMF0gPT09ICcnKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgc3dhcCArPSBzZWxlY3Rvci5zdWJzdHJpbmcobGFzdEluZGV4LCBtYXRjaC5pbmRleCk7XG4gICAgICAgICAgICBzd2FwICs9IHNlbGVjdG9yLnN1YnN0cihtYXRjaC5pbmRleCArIG1hdGNoWzFdLmxlbmd0aCwgbWF0Y2hbMl0ubGVuZ3RoKTtcbiAgICAgICAgICAgIHN3YXAgKz0gc2VsZWN0b3Iuc3Vic3RyKG1hdGNoLmluZGV4LCBtYXRjaFsxXS5sZW5ndGgpO1xuICAgICAgICAgICAgbGFzdEluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgc3dhcCArPSBzZWxlY3Rvci5zdWJzdHIobGFzdEluZGV4KTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiBzd2FwO1xuICAgIH07XG5cbiAgICAvLyBGRiBhbmQgb2xkZXIgYnJvd3NlcnMgc3RvcmUgcnVsZXMgd2l0aCBwc2V1ZG8gZWxlbWVudHMgdXNpbmcgc2luZ2xlLWNvbG9uIHN5bnRheFxuICAgIGZ1bmN0aW9uIHN3YXBQc2V1ZG9FbFN5bnRheChzZWxlY3Rvcikge1xuICAgICAgICBpZiAoZG91YmxlQ29sb25Qc2V1ZG9FbFJlZ2V4LmV4ZWMoc2VsZWN0b3IpKSB7XG4gICAgICAgICAgICByZXR1cm4gdG9TaW5nbGVDb2xvblBzZXVkb0VsZW1lbnRzKHNlbGVjdG9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZWN0b3I7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0U3R5bGVQcm9wZXJ0aWVzKHJ1bGUsIHByb3BlcnRpZXMpIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHByb3BlcnRpZXNba2V5XTtcbiAgICAgICAgICAgIHZhciBpbXBvcnRhbnRJbmRleCA9IHZhbHVlLmluZGV4T2YoJyAhaW1wb3J0YW50Jyk7XG5cbiAgICAgICAgICAgIC8vIE1vZGVybiBicm93c2VycyBzZWVtIHRvIGhhbmRsZSBvdmVycmlkZXMgZmluZSwgYnV0IElFOSBkb2Vzbid0XG4gICAgICAgICAgICBydWxlLnN0eWxlLnJlbW92ZVByb3BlcnR5KGtleSk7IFxuICAgICAgICAgICAgaWYgKGltcG9ydGFudEluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgIHJ1bGUuc3R5bGUuc2V0UHJvcGVydHkoa2V5LCB2YWx1ZS5zdWJzdHIoMCwgaW1wb3J0YW50SW5kZXgpLCAnaW1wb3J0YW50Jyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJ1bGUuc3R5bGUuc2V0UHJvcGVydHkoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0NhbWVsQ2FzZShzdHIpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8tKFthLXpdKS9nLCBmdW5jdGlvbiAobWF0Y2gsIHN1Ym1hdGNoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3VibWF0Y2gudG9VcHBlckNhc2UoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdHJhbnNmb3JtQ2FtZWxDYXNlZFByb3BlcnR5TmFtZXMob2xkUHJvcHMpIHtcbiAgICAgICAgdmFyIG5ld1Byb3BzID0ge307XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBvbGRQcm9wcykge1xuICAgICAgICAgICAgbmV3UHJvcHNbdW5DYW1lbENhc2Uoa2V5KV0gPSBvbGRQcm9wc1trZXldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdQcm9wcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bkNhbWVsQ2FzZShzdHIpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oW0EtWl0pL2csIGZ1bmN0aW9uKG1hdGNoLCBzdWJtYXRjaCkge1xuICAgICAgICAgICAgcmV0dXJuICctJyArIHN1Ym1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciBKc3MgPSBmdW5jdGlvbihkb2MpIHtcbiAgICAgICAgdGhpcy5kb2MgPSBkb2M7XG4gICAgICAgIHRoaXMuaGVhZCA9IHRoaXMuZG9jLmhlYWQgfHwgdGhpcy5kb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgICAgICAgdGhpcy5zaGVldHMgPSB0aGlzLmRvYy5zdHlsZVNoZWV0cyB8fCBbXTtcbiAgICB9O1xuXG4gICAgSnNzLnByb3RvdHlwZSA9IHtcbiAgICAgICAgLy8gUmV0dXJucyBKU1MgcnVsZXMgKHNlbGVjdG9yIGlzIG9wdGlvbmFsKVxuICAgICAgICBnZXQ6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGVmYXVsdFNoZWV0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFnZ3JlZ2F0ZVN0eWxlcyhnZXRSdWxlcyh0aGlzLmRlZmF1bHRTaGVldCwgc2VsZWN0b3IpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBydWxlcyA9IGdldFNlbGVjdG9yc0FuZFJ1bGVzKHRoaXMuZGVmYXVsdFNoZWV0KTtcbiAgICAgICAgICAgIGZvciAoc2VsZWN0b3IgaW4gcnVsZXMpIHtcbiAgICAgICAgICAgICAgICBydWxlc1tzZWxlY3Rvcl0gPSBhZ2dyZWdhdGVTdHlsZXMocnVsZXNbc2VsZWN0b3JdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBydWxlcztcbiAgICAgICAgfSxcbiAgICAgICAgLy8gUmV0dXJucyBhbGwgcnVsZXMgKHNlbGVjdG9yIGlzIHJlcXVpcmVkKVxuICAgICAgICBnZXRBbGw6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gICAgICAgICAgICB2YXIgcHJvcGVydGllcyA9IHt9O1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNoZWV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGV4dGVuZChwcm9wZXJ0aWVzLCBhZ2dyZWdhdGVTdHlsZXMoZ2V0UnVsZXModGhpcy5zaGVldHNbaV0sIHNlbGVjdG9yKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIEFkZHMgSlNTIHJ1bGVzIGZvciB0aGUgc2VsZWN0b3IgYmFzZWQgb24gdGhlIGdpdmVuIHByb3BlcnRpZXNcbiAgICAgICAgc2V0OiBmdW5jdGlvbihzZWxlY3RvciwgcHJvcGVydGllcykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRlZmF1bHRTaGVldCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFNoZWV0ID0gdGhpcy5fY3JlYXRlU2hlZXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSB0cmFuc2Zvcm1DYW1lbENhc2VkUHJvcGVydHlOYW1lcyhwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIHZhciBydWxlcyA9IGdldFJ1bGVzKHRoaXMuZGVmYXVsdFNoZWV0LCBzZWxlY3Rvcik7XG4gICAgICAgICAgICBpZiAoIXJ1bGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJ1bGVzID0gW2FkZFJ1bGUodGhpcy5kZWZhdWx0U2hlZXQsIHNlbGVjdG9yKV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgc2V0U3R5bGVQcm9wZXJ0aWVzKHJ1bGVzW2ldLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gUmVtb3ZlcyBKU1MgcnVsZXMgKHNlbGVjdG9yIGlzIG9wdGlvbmFsKVxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGVmYXVsdFNoZWV0KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGlmICghc2VsZWN0b3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVTaGVldCh0aGlzLmRlZmF1bHRTaGVldCk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZGVmYXVsdFNoZWV0O1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBydWxlcyA9IGdldFJ1bGVzKHRoaXMuZGVmYXVsdFNoZWV0LCBzZWxlY3Rvcik7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlUnVsZShydWxlc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcnVsZXMubGVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBfY3JlYXRlU2hlZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHN0eWxlTm9kZSA9IHRoaXMuZG9jLmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICAgICAgICBzdHlsZU5vZGUudHlwZSA9ICd0ZXh0L2Nzcyc7XG4gICAgICAgICAgICBzdHlsZU5vZGUucmVsID0gJ3N0eWxlc2hlZXQnO1xuICAgICAgICAgICAgdGhpcy5oZWFkLmFwcGVuZENoaWxkKHN0eWxlTm9kZSk7XG4gICAgICAgICAgICByZXR1cm4gc3R5bGVOb2RlLnNoZWV0O1xuICAgICAgICB9LFxuICAgICAgICBfcmVtb3ZlU2hlZXQ6IGZ1bmN0aW9uKHNoZWV0KSB7XG4gICAgICAgICAgICB2YXIgbm9kZSA9IHNoZWV0Lm93bmVyTm9kZTtcbiAgICAgICAgICAgIG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgZXhwb3J0cyA9IG5ldyBKc3MoZG9jdW1lbnQpO1xuICAgIGV4cG9ydHMuZm9yRG9jdW1lbnQgPSBmdW5jdGlvbihkb2MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBKc3MoZG9jKTtcbiAgICB9O1xuICAgIHJldHVybiBleHBvcnRzO1xufSkoKTtcblxudHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMgJiYgKG1vZHVsZS5leHBvcnRzID0ganNzKTsgLy8gQ29tbW9uSlMgc3VwcG9ydCIsIlxudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi4vLi4vcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4vZmxhdHBpY2tyLmNzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmhlYWRcbiAgICAgICAgICAgICAgfTtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcIikoY29udGVudCwgb3B0aW9ucyk7XG5cbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuXG5pZihtb2R1bGUuaG90KSB7XG5cdG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi4vLi4vcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4vZmxhdHBpY2tyLmNzc1wiLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcyEuLi8uLi9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi9mbGF0cGlja3IuY3NzXCIpO1xuXG5cdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cblx0XHR2YXIgbG9jYWxzID0gKGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHZhciBrZXksIGlkeCA9IDA7XG5cblx0XHRcdGZvcihrZXkgaW4gYSkge1xuXHRcdFx0XHRpZighYiB8fCBhW2tleV0gIT09IGJba2V5XSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRpZHgrKztcblx0XHRcdH1cblxuXHRcdFx0Zm9yKGtleSBpbiBiKSBpZHgtLTtcblxuXHRcdFx0cmV0dXJuIGlkeCA9PT0gMDtcblx0XHR9KGNvbnRlbnQubG9jYWxzLCBuZXdDb250ZW50LmxvY2FscykpO1xuXG5cdFx0aWYoIWxvY2FscykgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGluZyBDU1MgSE1SIGR1ZSB0byBjaGFuZ2VkIGNzcy1tb2R1bGVzIGxvY2Fscy4nKTtcblxuXHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0fSk7XG5cblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59IiwibW9kdWxlLmV4cG9ydHMgPSBcIi5mbGF0cGlja3ItY2FsZW5kYXIge1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICBvcGFjaXR5OiAwO1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIHBhZGRpbmc6IDA7XFxuICAtd2Via2l0LWFuaW1hdGlvbjogbm9uZTtcXG4gICAgICAgICAgYW5pbWF0aW9uOiBub25lO1xcbiAgZGlyZWN0aW9uOiBsdHI7XFxuICBib3JkZXI6IDA7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBsaW5lLWhlaWdodDogMjRweDtcXG4gIGJvcmRlci1yYWRpdXM6IDVweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHdpZHRoOiAzMDcuODc1cHg7XFxuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAtbXMtdG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247XFxuICAgICAgdG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247XFxuICBiYWNrZ3JvdW5kOiAjZmZmO1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAxcHggMCAwICNlNmU2ZTYsIC0xcHggMCAwICNlNmU2ZTYsIDAgMXB4IDAgI2U2ZTZlNiwgMCAtMXB4IDAgI2U2ZTZlNiwgMCAzcHggMTNweCByZ2JhKDAsMCwwLDAuMDgpO1xcbiAgICAgICAgICBib3gtc2hhZG93OiAxcHggMCAwICNlNmU2ZTYsIC0xcHggMCAwICNlNmU2ZTYsIDAgMXB4IDAgI2U2ZTZlNiwgMCAtMXB4IDAgI2U2ZTZlNiwgMCAzcHggMTNweCByZ2JhKDAsMCwwLDAuMDgpO1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLm9wZW4sXFxuLmZsYXRwaWNrci1jYWxlbmRhci5pbmxpbmUge1xcbiAgb3BhY2l0eTogMTtcXG4gIG1heC1oZWlnaHQ6IDY0MHB4O1xcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5vcGVuIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHotaW5kZXg6IDk5OTk5O1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLmFuaW1hdGUub3BlbiB7XFxuICAtd2Via2l0LWFuaW1hdGlvbjogZnBGYWRlSW5Eb3duIDMwMG1zIGN1YmljLWJlemllcigwLjIzLCAxLCAwLjMyLCAxKTtcXG4gICAgICAgICAgYW5pbWF0aW9uOiBmcEZhZGVJbkRvd24gMzAwbXMgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpO1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLmlubGluZSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHRvcDogMnB4O1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLnN0YXRpYyB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IGNhbGMoMTAwJSArIDJweCk7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIuc3RhdGljLm9wZW4ge1xcbiAgei1pbmRleDogOTk5O1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIubXVsdGlNb250aCAuZmxhdHBpY2tyLWRheXMgLmRheUNvbnRhaW5lcjpudGgtY2hpbGQobisxKSAuZmxhdHBpY2tyLWRheS5pblJhbmdlOm50aC1jaGlsZCg3bis3KSB7XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcXG4gICAgICAgICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLm11bHRpTW9udGggLmZsYXRwaWNrci1kYXlzIC5kYXlDb250YWluZXI6bnRoLWNoaWxkKG4rMikgLmZsYXRwaWNrci1kYXkuaW5SYW5nZTpudGgtY2hpbGQoN24rMSkge1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAtMnB4IDAgMCAjZTZlNmU2LCA1cHggMCAwICNlNmU2ZTY7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IC0ycHggMCAwICNlNmU2ZTYsIDVweCAwIDAgI2U2ZTZlNjtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhciAuaGFzV2Vla3MgLmRheUNvbnRhaW5lcixcXG4uZmxhdHBpY2tyLWNhbGVuZGFyIC5oYXNUaW1lIC5kYXlDb250YWluZXIge1xcbiAgYm9yZGVyLWJvdHRvbTogMDtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhciAuaGFzV2Vla3MgLmRheUNvbnRhaW5lciB7XFxuICBib3JkZXItbGVmdDogMDtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5zaG93VGltZUlucHV0Lmhhc1RpbWUgLmZsYXRwaWNrci10aW1lIHtcXG4gIGhlaWdodDogNDBweDtcXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTZlNmU2O1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLm5vQ2FsZW5kYXIuaGFzVGltZSAuZmxhdHBpY2tyLXRpbWUge1xcbiAgaGVpZ2h0OiBhdXRvO1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyOmJlZm9yZSxcXG4uZmxhdHBpY2tyLWNhbGVuZGFyOmFmdGVyIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICBib3JkZXI6IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgY29udGVudDogJyc7XFxuICBoZWlnaHQ6IDA7XFxuICB3aWR0aDogMDtcXG4gIGxlZnQ6IDIycHg7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIucmlnaHRNb3N0OmJlZm9yZSxcXG4uZmxhdHBpY2tyLWNhbGVuZGFyLnJpZ2h0TW9zdDphZnRlciB7XFxuICBsZWZ0OiBhdXRvO1xcbiAgcmlnaHQ6IDIycHg7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXI6YmVmb3JlIHtcXG4gIGJvcmRlci13aWR0aDogNXB4O1xcbiAgbWFyZ2luOiAwIC01cHg7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXI6YWZ0ZXIge1xcbiAgYm9yZGVyLXdpZHRoOiA0cHg7XFxuICBtYXJnaW46IDAgLTRweDtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd1RvcDpiZWZvcmUsXFxuLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd1RvcDphZnRlciB7XFxuICBib3R0b206IDEwMCU7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIuYXJyb3dUb3A6YmVmb3JlIHtcXG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICNlNmU2ZTY7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIuYXJyb3dUb3A6YWZ0ZXIge1xcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd0JvdHRvbTpiZWZvcmUsXFxuLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd0JvdHRvbTphZnRlciB7XFxuICB0b3A6IDEwMCU7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIuYXJyb3dCb3R0b206YmVmb3JlIHtcXG4gIGJvcmRlci10b3AtY29sb3I6ICNlNmU2ZTY7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIuYXJyb3dCb3R0b206YWZ0ZXIge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2ZmZjtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhcjpmb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbn1cXG4uZmxhdHBpY2tyLXdyYXBwZXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbn1cXG4uZmxhdHBpY2tyLW1vbnRocyB7XFxuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcXG4gIGRpc3BsYXk6IC13ZWJraXQtZmxleDtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1tb250aCB7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIGNvbG9yOiByZ2JhKDAsMCwwLDAuOSk7XFxuICBmaWxsOiByZ2JhKDAsMCwwLDAuOSk7XFxuICBoZWlnaHQ6IDM0cHg7XFxuICBsaW5lLWhlaWdodDogMTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcXG4gIC13ZWJraXQtZmxleDogMTtcXG4gICAgICAtbXMtZmxleDogMTtcXG4gICAgICAgICAgZmxleDogMTtcXG59XFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1wcmV2LW1vbnRoLFxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbmV4dC1tb250aCB7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBoZWlnaHQ6IDM0cHg7XFxuICBwYWRkaW5nOiAxMHB4O1xcbiAgei1pbmRleDogMztcXG4gIGNvbG9yOiByZ2JhKDAsMCwwLDAuOSk7XFxuICBmaWxsOiByZ2JhKDAsMCwwLDAuOSk7XFxufVxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItcHJldi1tb250aC5mbGF0cGlja3ItZGlzYWJsZWQsXFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1uZXh0LW1vbnRoLmZsYXRwaWNrci1kaXNhYmxlZCB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLXByZXYtbW9udGggaSxcXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLW5leHQtbW9udGggaSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItcHJldi1tb250aC5mbGF0cGlja3ItcHJldi1tb250aCxcXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLW5leHQtbW9udGguZmxhdHBpY2tyLXByZXYtbW9udGgge1xcbi8qXFxuICAgICAgLypydGw6YmVnaW46aWdub3JlKi9cXG4vKlxcbiAgICAgICovXFxuICBsZWZ0OiAwO1xcbi8qXFxuICAgICAgLypydGw6ZW5kOmlnbm9yZSovXFxuLypcXG4gICAgICAqL1xcbn1cXG4vKlxcbiAgICAgIC8qcnRsOmJlZ2luOmlnbm9yZSovXFxuLypcXG4gICAgICAvKnJ0bDplbmQ6aWdub3JlKi9cXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLXByZXYtbW9udGguZmxhdHBpY2tyLW5leHQtbW9udGgsXFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1uZXh0LW1vbnRoLmZsYXRwaWNrci1uZXh0LW1vbnRoIHtcXG4vKlxcbiAgICAgIC8qcnRsOmJlZ2luOmlnbm9yZSovXFxuLypcXG4gICAgICAqL1xcbiAgcmlnaHQ6IDA7XFxuLypcXG4gICAgICAvKnJ0bDplbmQ6aWdub3JlKi9cXG4vKlxcbiAgICAgICovXFxufVxcbi8qXFxuICAgICAgLypydGw6YmVnaW46aWdub3JlKi9cXG4vKlxcbiAgICAgIC8qcnRsOmVuZDppZ25vcmUqL1xcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItcHJldi1tb250aDpob3ZlcixcXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLW5leHQtbW9udGg6aG92ZXIge1xcbiAgY29sb3I6ICM5NTllYTk7XFxufVxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItcHJldi1tb250aDpob3ZlciBzdmcsXFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1uZXh0LW1vbnRoOmhvdmVyIHN2ZyB7XFxuICBmaWxsOiAjZjY0NzQ3O1xcbn1cXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLXByZXYtbW9udGggc3ZnLFxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbmV4dC1tb250aCBzdmcge1xcbiAgd2lkdGg6IDE0cHg7XFxuICBoZWlnaHQ6IDE0cHg7XFxufVxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItcHJldi1tb250aCBzdmcgcGF0aCxcXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLW5leHQtbW9udGggc3ZnIHBhdGgge1xcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBmaWxsIDAuMXM7XFxuICB0cmFuc2l0aW9uOiBmaWxsIDAuMXM7XFxuICBmaWxsOiBpbmhlcml0O1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGhlaWdodDogYXV0bztcXG59XFxuLm51bUlucHV0V3JhcHBlciBpbnB1dCxcXG4ubnVtSW5wdXRXcmFwcGVyIHNwYW4ge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyIGlucHV0IHtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyIGlucHV0OjotbXMtY2xlYXIge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLm51bUlucHV0V3JhcHBlciBpbnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbixcXG4ubnVtSW5wdXRXcmFwcGVyIGlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uIHtcXG4gIG1hcmdpbjogMDtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG59XFxuLm51bUlucHV0V3JhcHBlciBzcGFuIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAwO1xcbiAgd2lkdGg6IDE0cHg7XFxuICBwYWRkaW5nOiAwIDRweCAwIDJweDtcXG4gIGhlaWdodDogNTAlO1xcbiAgbGluZS1oZWlnaHQ6IDUwJTtcXG4gIG9wYWNpdHk6IDA7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDU3LDU3LDU3LDAuMTUpO1xcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyIHNwYW46aG92ZXIge1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjEpO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyIHNwYW46YWN0aXZlIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4yKTtcXG59XFxuLm51bUlucHV0V3JhcHBlciBzcGFuOmFmdGVyIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgc3Bhbi5hcnJvd1VwIHtcXG4gIHRvcDogMDtcXG4gIGJvcmRlci1ib3R0b206IDA7XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgc3Bhbi5hcnJvd1VwOmFmdGVyIHtcXG4gIGJvcmRlci1sZWZ0OiA0cHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmlnaHQ6IDRweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1ib3R0b206IDRweCBzb2xpZCByZ2JhKDU3LDU3LDU3LDAuNik7XFxuICB0b3A6IDI2JTtcXG59XFxuLm51bUlucHV0V3JhcHBlciBzcGFuLmFycm93RG93biB7XFxuICB0b3A6IDUwJTtcXG59XFxuLm51bUlucHV0V3JhcHBlciBzcGFuLmFycm93RG93bjphZnRlciB7XFxuICBib3JkZXItbGVmdDogNHB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJpZ2h0OiA0cHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItdG9wOiA0cHggc29saWQgcmdiYSg1Nyw1Nyw1NywwLjYpO1xcbiAgdG9wOiA0MCU7XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgc3BhbiBzdmcge1xcbiAgd2lkdGg6IGluaGVyaXQ7XFxuICBoZWlnaHQ6IGF1dG87XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgc3BhbiBzdmcgcGF0aCB7XFxuICBmaWxsOiByZ2JhKDAsMCwwLDAuNSk7XFxufVxcbi5udW1JbnB1dFdyYXBwZXI6aG92ZXIge1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjA1KTtcXG59XFxuLm51bUlucHV0V3JhcHBlcjpob3ZlciBzcGFuIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCB7XFxuICBmb250LXNpemU6IDEzNSU7XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gIGZvbnQtd2VpZ2h0OiAzMDA7XFxuICBjb2xvcjogaW5oZXJpdDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHdpZHRoOiA3NSU7XFxuICBsZWZ0OiAxMi41JTtcXG4gIHBhZGRpbmc6IDcuNDhweCAwIDAgMDtcXG4gIGxpbmUtaGVpZ2h0OiAxO1xcbiAgaGVpZ2h0OiAzNHB4O1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDBweCwgMHB4LCAwcHgpO1xcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDBweCwgMHB4LCAwcHgpO1xcbn1cXG4uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGggc3Bhbi5jdXItbW9udGgge1xcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XFxuICBmb250LXdlaWdodDogNzAwO1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBtYXJnaW4tbGVmdDogMC41Y2g7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG4uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGggc3Bhbi5jdXItbW9udGg6aG92ZXIge1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjA1KTtcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIC5udW1JbnB1dFdyYXBwZXIge1xcbiAgd2lkdGg6IDZjaDtcXG4gIHdpZHRoOiA3Y2hcXFxcMDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIC5udW1JbnB1dFdyYXBwZXIgc3Bhbi5hcnJvd1VwOmFmdGVyIHtcXG4gIGJvcmRlci1ib3R0b20tY29sb3I6IHJnYmEoMCwwLDAsMC45KTtcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIC5udW1JbnB1dFdyYXBwZXIgc3Bhbi5hcnJvd0Rvd246YWZ0ZXIge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogcmdiYSgwLDAsMCwwLjkpO1xcbn1cXG4uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGggaW5wdXQuY3VyLXllYXIge1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBjb2xvcjogaW5oZXJpdDtcXG4gIGN1cnNvcjogdGV4dDtcXG4gIHBhZGRpbmc6IDAgMCAwIDAuNWNoO1xcbiAgbWFyZ2luOiAwO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgZm9udC1zaXplOiBpbmhlcml0O1xcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XFxuICBmb250LXdlaWdodDogMzAwO1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxuICBoZWlnaHQ6IGF1dG87XFxuICBib3JkZXI6IDA7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbiAgdmVydGljYWwtYWxpZ246IGluaXRpYWw7XFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRmaWVsZDtcXG4gIC1tb3otYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xcbiAgYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xcbn1cXG4uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGggaW5wdXQuY3VyLXllYXI6Zm9jdXMge1xcbiAgb3V0bGluZTogMDtcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIGlucHV0LmN1ci15ZWFyW2Rpc2FibGVkXSxcXG4uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGggaW5wdXQuY3VyLXllYXJbZGlzYWJsZWRdOmhvdmVyIHtcXG4gIGZvbnQtc2l6ZTogMTAwJTtcXG4gIGNvbG9yOiByZ2JhKDAsMCwwLDAuNSk7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG4uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGggLmZsYXRwaWNrci1tb250aERyb3Bkb3duLW1vbnRocyB7XFxuICBhcHBlYXJhbmNlOiBtZW51bGlzdDtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyOiBub25lO1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBjb2xvcjogaW5oZXJpdDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcXG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xcbiAgZm9udC13ZWlnaHQ6IDMwMDtcXG4gIGhlaWdodDogYXV0bztcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbiAgbWFyZ2luOiAtMXB4IDAgMCAwO1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIHBhZGRpbmc6IDAgMCAwIDAuNWNoO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgdmVydGljYWwtYWxpZ246IGluaXRpYWw7XFxuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IG1lbnVsaXN0O1xcbiAgLW1vei1hcHBlYXJhbmNlOiBtZW51bGlzdDtcXG4gIHdpZHRoOiBhdXRvO1xcbn1cXG4uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGggLmZsYXRwaWNrci1tb250aERyb3Bkb3duLW1vbnRoczpmb2N1cyxcXG4uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGggLmZsYXRwaWNrci1tb250aERyb3Bkb3duLW1vbnRoczphY3RpdmUge1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIC5mbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aHM6aG92ZXIge1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjA1KTtcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIC5mbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aHMgLmZsYXRwaWNrci1tb250aERyb3Bkb3duLW1vbnRoIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIHBhZGRpbmc6IDA7XFxufVxcbi5mbGF0cGlja3Itd2Vla2RheXMge1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcXG4gIGRpc3BsYXk6IC13ZWJraXQtZmxleDtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XFxuICAtd2Via2l0LWFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGhlaWdodDogMjhweDtcXG59XFxuLmZsYXRwaWNrci13ZWVrZGF5cyAuZmxhdHBpY2tyLXdlZWtkYXljb250YWluZXIge1xcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxuICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtd2Via2l0LWJveC1mbGV4OiAxO1xcbiAgLXdlYmtpdC1mbGV4OiAxO1xcbiAgICAgIC1tcy1mbGV4OiAxO1xcbiAgICAgICAgICBmbGV4OiAxO1xcbn1cXG5zcGFuLmZsYXRwaWNrci13ZWVrZGF5IHtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIGZvbnQtc2l6ZTogOTAlO1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICBjb2xvcjogcmdiYSgwLDAsMCwwLjU0KTtcXG4gIGxpbmUtaGVpZ2h0OiAxO1xcbiAgbWFyZ2luOiAwO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICAtd2Via2l0LWJveC1mbGV4OiAxO1xcbiAgLXdlYmtpdC1mbGV4OiAxO1xcbiAgICAgIC1tcy1mbGV4OiAxO1xcbiAgICAgICAgICBmbGV4OiAxO1xcbiAgZm9udC13ZWlnaHQ6IGJvbGRlcjtcXG59XFxuLmRheUNvbnRhaW5lcixcXG4uZmxhdHBpY2tyLXdlZWtzIHtcXG4gIHBhZGRpbmc6IDFweCAwIDAgMDtcXG59XFxuLmZsYXRwaWNrci1kYXlzIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcXG4gIGRpc3BsYXk6IC13ZWJraXQtZmxleDtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC13ZWJraXQtYm94LWFsaWduOiBzdGFydDtcXG4gIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxuICAgICAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0O1xcbiAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcXG4gIHdpZHRoOiAzMDcuODc1cHg7XFxufVxcbi5mbGF0cGlja3ItZGF5czpmb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbn1cXG4uZGF5Q29udGFpbmVyIHtcXG4gIHBhZGRpbmc6IDA7XFxuICBvdXRsaW5lOiAwO1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG4gIHdpZHRoOiAzMDcuODc1cHg7XFxuICBtaW4td2lkdGg6IDMwNy44NzVweDtcXG4gIG1heC13aWR0aDogMzA3Ljg3NXB4O1xcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcXG4gIGRpc3BsYXk6IC13ZWJraXQtZmxleDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtd2Via2l0LWZsZXgtd3JhcDogd3JhcDtcXG4gICAgICAgICAgZmxleC13cmFwOiB3cmFwO1xcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcXG4gIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XFxuICAtd2Via2l0LWp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcXG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwcHgsIDBweCwgMHB4KTtcXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwcHgsIDBweCwgMHB4KTtcXG4gIG9wYWNpdHk6IDE7XFxufVxcbi5kYXlDb250YWluZXIgKyAuZGF5Q29udGFpbmVyIHtcXG4gIC13ZWJraXQtYm94LXNoYWRvdzogLTFweCAwIDAgI2U2ZTZlNjtcXG4gICAgICAgICAgYm94LXNoYWRvdzogLTFweCAwIDAgI2U2ZTZlNjtcXG59XFxuLmZsYXRwaWNrci1kYXkge1xcbiAgYmFja2dyb3VuZDogbm9uZTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJhZGl1czogMTUwcHg7XFxuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBjb2xvcjogIzM5MzkzOTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICB3aWR0aDogMTQuMjg1NzE0MyU7XFxuICAtd2Via2l0LWZsZXgtYmFzaXM6IDE0LjI4NTcxNDMlO1xcbiAgICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiAxNC4yODU3MTQzJTtcXG4gICAgICAgICAgZmxleC1iYXNpczogMTQuMjg1NzE0MyU7XFxuICBtYXgtd2lkdGg6IDM5cHg7XFxuICBoZWlnaHQ6IDM5cHg7XFxuICBsaW5lLWhlaWdodDogMzlweDtcXG4gIG1hcmdpbjogMDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcXG4gIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuLmZsYXRwaWNrci1kYXkuaW5SYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5wcmV2TW9udGhEYXkuaW5SYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5uZXh0TW9udGhEYXkuaW5SYW5nZSxcXG4uZmxhdHBpY2tyLWRheS50b2RheS5pblJhbmdlLFxcbi5mbGF0cGlja3ItZGF5LnByZXZNb250aERheS50b2RheS5pblJhbmdlLFxcbi5mbGF0cGlja3ItZGF5Lm5leHRNb250aERheS50b2RheS5pblJhbmdlLFxcbi5mbGF0cGlja3ItZGF5OmhvdmVyLFxcbi5mbGF0cGlja3ItZGF5LnByZXZNb250aERheTpob3ZlcixcXG4uZmxhdHBpY2tyLWRheS5uZXh0TW9udGhEYXk6aG92ZXIsXFxuLmZsYXRwaWNrci1kYXk6Zm9jdXMsXFxuLmZsYXRwaWNrci1kYXkucHJldk1vbnRoRGF5OmZvY3VzLFxcbi5mbGF0cGlja3ItZGF5Lm5leHRNb250aERheTpmb2N1cyB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBvdXRsaW5lOiAwO1xcbiAgYmFja2dyb3VuZDogI2U2ZTZlNjtcXG4gIGJvcmRlci1jb2xvcjogI2U2ZTZlNjtcXG59XFxuLmZsYXRwaWNrci1kYXkudG9kYXkge1xcbiAgYm9yZGVyLWNvbG9yOiAjOTU5ZWE5O1xcbn1cXG4uZmxhdHBpY2tyLWRheS50b2RheTpob3ZlcixcXG4uZmxhdHBpY2tyLWRheS50b2RheTpmb2N1cyB7XFxuICBib3JkZXItY29sb3I6ICM5NTllYTk7XFxuICBiYWNrZ3JvdW5kOiAjOTU5ZWE5O1xcbiAgY29sb3I6ICNmZmY7XFxufVxcbi5mbGF0cGlja3ItZGF5LnNlbGVjdGVkLFxcbi5mbGF0cGlja3ItZGF5LnN0YXJ0UmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkuZW5kUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkuc2VsZWN0ZWQuaW5SYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlLmluUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkuZW5kUmFuZ2UuaW5SYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5zZWxlY3RlZDpmb2N1cyxcXG4uZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlOmZvY3VzLFxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlOmZvY3VzLFxcbi5mbGF0cGlja3ItZGF5LnNlbGVjdGVkOmhvdmVyLFxcbi5mbGF0cGlja3ItZGF5LnN0YXJ0UmFuZ2U6aG92ZXIsXFxuLmZsYXRwaWNrci1kYXkuZW5kUmFuZ2U6aG92ZXIsXFxuLmZsYXRwaWNrci1kYXkuc2VsZWN0ZWQucHJldk1vbnRoRGF5LFxcbi5mbGF0cGlja3ItZGF5LnN0YXJ0UmFuZ2UucHJldk1vbnRoRGF5LFxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlLnByZXZNb250aERheSxcXG4uZmxhdHBpY2tyLWRheS5zZWxlY3RlZC5uZXh0TW9udGhEYXksXFxuLmZsYXRwaWNrci1kYXkuc3RhcnRSYW5nZS5uZXh0TW9udGhEYXksXFxuLmZsYXRwaWNrci1kYXkuZW5kUmFuZ2UubmV4dE1vbnRoRGF5IHtcXG4gIGJhY2tncm91bmQ6ICM1NjlmZjc7XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJvcmRlci1jb2xvcjogIzU2OWZmNztcXG59XFxuLmZsYXRwaWNrci1kYXkuc2VsZWN0ZWQuc3RhcnRSYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlLnN0YXJ0UmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkuZW5kUmFuZ2Uuc3RhcnRSYW5nZSB7XFxuICBib3JkZXItcmFkaXVzOiA1MHB4IDAgMCA1MHB4O1xcbn1cXG4uZmxhdHBpY2tyLWRheS5zZWxlY3RlZC5lbmRSYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlLmVuZFJhbmdlLFxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlLmVuZFJhbmdlIHtcXG4gIGJvcmRlci1yYWRpdXM6IDAgNTBweCA1MHB4IDA7XFxufVxcbi5mbGF0cGlja3ItZGF5LnNlbGVjdGVkLnN0YXJ0UmFuZ2UgKyAuZW5kUmFuZ2U6bm90KDpudGgtY2hpbGQoN24rMSkpLFxcbi5mbGF0cGlja3ItZGF5LnN0YXJ0UmFuZ2Uuc3RhcnRSYW5nZSArIC5lbmRSYW5nZTpub3QoOm50aC1jaGlsZCg3bisxKSksXFxuLmZsYXRwaWNrci1kYXkuZW5kUmFuZ2Uuc3RhcnRSYW5nZSArIC5lbmRSYW5nZTpub3QoOm50aC1jaGlsZCg3bisxKSkge1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAtMTBweCAwIDAgIzU2OWZmNztcXG4gICAgICAgICAgYm94LXNoYWRvdzogLTEwcHggMCAwICM1NjlmZjc7XFxufVxcbi5mbGF0cGlja3ItZGF5LnNlbGVjdGVkLnN0YXJ0UmFuZ2UuZW5kUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkuc3RhcnRSYW5nZS5zdGFydFJhbmdlLmVuZFJhbmdlLFxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlLnN0YXJ0UmFuZ2UuZW5kUmFuZ2Uge1xcbiAgYm9yZGVyLXJhZGl1czogNTBweDtcXG59XFxuLmZsYXRwaWNrci1kYXkuaW5SYW5nZSB7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAtNXB4IDAgMCAjZTZlNmU2LCA1cHggMCAwICNlNmU2ZTY7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IC01cHggMCAwICNlNmU2ZTYsIDVweCAwIDAgI2U2ZTZlNjtcXG59XFxuLmZsYXRwaWNrci1kYXkuZmxhdHBpY2tyLWRpc2FibGVkLFxcbi5mbGF0cGlja3ItZGF5LmZsYXRwaWNrci1kaXNhYmxlZDpob3ZlcixcXG4uZmxhdHBpY2tyLWRheS5wcmV2TW9udGhEYXksXFxuLmZsYXRwaWNrci1kYXkubmV4dE1vbnRoRGF5LFxcbi5mbGF0cGlja3ItZGF5Lm5vdEFsbG93ZWQsXFxuLmZsYXRwaWNrci1kYXkubm90QWxsb3dlZC5wcmV2TW9udGhEYXksXFxuLmZsYXRwaWNrci1kYXkubm90QWxsb3dlZC5uZXh0TW9udGhEYXkge1xcbiAgY29sb3I6IHJnYmEoNTcsNTcsNTcsMC4zKTtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG59XFxuLmZsYXRwaWNrci1kYXkuZmxhdHBpY2tyLWRpc2FibGVkLFxcbi5mbGF0cGlja3ItZGF5LmZsYXRwaWNrci1kaXNhYmxlZDpob3ZlciB7XFxuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbiAgY29sb3I6IHJnYmEoNTcsNTcsNTcsMC4xKTtcXG59XFxuLmZsYXRwaWNrci1kYXkud2Vlay5zZWxlY3RlZCB7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAtNXB4IDAgMCAjNTY5ZmY3LCA1cHggMCAwICM1NjlmZjc7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IC01cHggMCAwICM1NjlmZjcsIDVweCAwIDAgIzU2OWZmNztcXG59XFxuLmZsYXRwaWNrci1kYXkuaGlkZGVuIHtcXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcXG59XFxuLnJhbmdlTW9kZSAuZmxhdHBpY2tyLWRheSB7XFxuICBtYXJnaW4tdG9wOiAxcHg7XFxufVxcbi5mbGF0cGlja3Itd2Vla3dyYXBwZXIge1xcbiAgZmxvYXQ6IGxlZnQ7XFxufVxcbi5mbGF0cGlja3Itd2Vla3dyYXBwZXIgLmZsYXRwaWNrci13ZWVrcyB7XFxuICBwYWRkaW5nOiAwIDEycHg7XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IDFweCAwIDAgI2U2ZTZlNjtcXG4gICAgICAgICAgYm94LXNoYWRvdzogMXB4IDAgMCAjZTZlNmU2O1xcbn1cXG4uZmxhdHBpY2tyLXdlZWt3cmFwcGVyIC5mbGF0cGlja3Itd2Vla2RheSB7XFxuICBmbG9hdDogbm9uZTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbGluZS1oZWlnaHQ6IDI4cHg7XFxufVxcbi5mbGF0cGlja3Itd2Vla3dyYXBwZXIgc3Bhbi5mbGF0cGlja3ItZGF5LFxcbi5mbGF0cGlja3Itd2Vla3dyYXBwZXIgc3Bhbi5mbGF0cGlja3ItZGF5OmhvdmVyIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtYXgtd2lkdGg6IG5vbmU7XFxuICBjb2xvcjogcmdiYSg1Nyw1Nyw1NywwLjMpO1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBib3JkZXI6IG5vbmU7XFxufVxcbi5mbGF0cGlja3ItaW5uZXJDb250YWluZXIge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcXG4gIGRpc3BsYXk6IC13ZWJraXQtZmxleDtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcbi5mbGF0cGlja3ItckNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBwYWRkaW5nOiAwO1xcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbn1cXG4uZmxhdHBpY2tyLXRpbWUge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgb3V0bGluZTogMDtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgaGVpZ2h0OiAwO1xcbiAgbGluZS1oZWlnaHQ6IDQwcHg7XFxuICBtYXgtaGVpZ2h0OiA0MHB4O1xcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xcbiAgZGlzcGxheTogLXdlYmtpdC1mbGV4O1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbn1cXG4uZmxhdHBpY2tyLXRpbWU6YWZ0ZXIge1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBkaXNwbGF5OiB0YWJsZTtcXG4gIGNsZWFyOiBib3RoO1xcbn1cXG4uZmxhdHBpY2tyLXRpbWUgLm51bUlucHV0V3JhcHBlciB7XFxuICAtd2Via2l0LWJveC1mbGV4OiAxO1xcbiAgLXdlYmtpdC1mbGV4OiAxO1xcbiAgICAgIC1tcy1mbGV4OiAxO1xcbiAgICAgICAgICBmbGV4OiAxO1xcbiAgd2lkdGg6IDQwJTtcXG4gIGhlaWdodDogNDBweDtcXG4gIGZsb2F0OiBsZWZ0O1xcbn1cXG4uZmxhdHBpY2tyLXRpbWUgLm51bUlucHV0V3JhcHBlciBzcGFuLmFycm93VXA6YWZ0ZXIge1xcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzM5MzkzOTtcXG59XFxuLmZsYXRwaWNrci10aW1lIC5udW1JbnB1dFdyYXBwZXIgc3Bhbi5hcnJvd0Rvd246YWZ0ZXIge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogIzM5MzkzOTtcXG59XFxuLmZsYXRwaWNrci10aW1lLmhhc1NlY29uZHMgLm51bUlucHV0V3JhcHBlciB7XFxuICB3aWR0aDogMjYlO1xcbn1cXG4uZmxhdHBpY2tyLXRpbWUudGltZTI0aHIgLm51bUlucHV0V3JhcHBlciB7XFxuICB3aWR0aDogNDklO1xcbn1cXG4uZmxhdHBpY2tyLXRpbWUgaW5wdXQge1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XFxuICBib3JkZXI6IDA7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG4gIGhlaWdodDogaW5oZXJpdDtcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbiAgY29sb3I6ICMzOTM5Mzk7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRmaWVsZDtcXG4gIC1tb3otYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xcbiAgYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xcbn1cXG4uZmxhdHBpY2tyLXRpbWUgaW5wdXQuZmxhdHBpY2tyLWhvdXIge1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxufVxcbi5mbGF0cGlja3ItdGltZSBpbnB1dC5mbGF0cGlja3ItbWludXRlLFxcbi5mbGF0cGlja3ItdGltZSBpbnB1dC5mbGF0cGlja3Itc2Vjb25kIHtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxufVxcbi5mbGF0cGlja3ItdGltZSBpbnB1dDpmb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbiAgYm9yZGVyOiAwO1xcbn1cXG4uZmxhdHBpY2tyLXRpbWUgLmZsYXRwaWNrci10aW1lLXNlcGFyYXRvcixcXG4uZmxhdHBpY2tyLXRpbWUgLmZsYXRwaWNrci1hbS1wbSB7XFxuICBoZWlnaHQ6IGluaGVyaXQ7XFxuICBmbG9hdDogbGVmdDtcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbiAgY29sb3I6ICMzOTM5Mzk7XFxuICBmb250LXdlaWdodDogYm9sZDtcXG4gIHdpZHRoOiAyJTtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAtd2Via2l0LWFsaWduLXNlbGY6IGNlbnRlcjtcXG4gICAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBjZW50ZXI7XFxuICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcXG59XFxuLmZsYXRwaWNrci10aW1lIC5mbGF0cGlja3ItYW0tcG0ge1xcbiAgb3V0bGluZTogMDtcXG4gIHdpZHRoOiAxOCU7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBmb250LXdlaWdodDogNDAwO1xcbn1cXG4uZmxhdHBpY2tyLXRpbWUgaW5wdXQ6aG92ZXIsXFxuLmZsYXRwaWNrci10aW1lIC5mbGF0cGlja3ItYW0tcG06aG92ZXIsXFxuLmZsYXRwaWNrci10aW1lIGlucHV0OmZvY3VzLFxcbi5mbGF0cGlja3ItdGltZSAuZmxhdHBpY2tyLWFtLXBtOmZvY3VzIHtcXG4gIGJhY2tncm91bmQ6ICNlZWU7XFxufVxcbi5mbGF0cGlja3ItaW5wdXRbcmVhZG9ubHldIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuQC13ZWJraXQta2V5ZnJhbWVzIGZwRmFkZUluRG93biB7XFxuICBmcm9tIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIC0yMHB4LCAwKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIC0yMHB4LCAwKTtcXG4gIH1cXG4gIHRvIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgZnBGYWRlSW5Eb3duIHtcXG4gIGZyb20ge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgLTIwcHgsIDApO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgLTIwcHgsIDApO1xcbiAgfVxcbiAgdG8ge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcXG4gIH1cXG59XFxuXCIiLCJcbi8qKlxuICogV2hlbiBzb3VyY2UgbWFwcyBhcmUgZW5hYmxlZCwgYHN0eWxlLWxvYWRlcmAgdXNlcyBhIGxpbmsgZWxlbWVudCB3aXRoIGEgZGF0YS11cmkgdG9cbiAqIGVtYmVkIHRoZSBjc3Mgb24gdGhlIHBhZ2UuIFRoaXMgYnJlYWtzIGFsbCByZWxhdGl2ZSB1cmxzIGJlY2F1c2Ugbm93IHRoZXkgYXJlIHJlbGF0aXZlIHRvIGFcbiAqIGJ1bmRsZSBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50IHBhZ2UuXG4gKlxuICogT25lIHNvbHV0aW9uIGlzIHRvIG9ubHkgdXNlIGZ1bGwgdXJscywgYnV0IHRoYXQgbWF5IGJlIGltcG9zc2libGUuXG4gKlxuICogSW5zdGVhZCwgdGhpcyBmdW5jdGlvbiBcImZpeGVzXCIgdGhlIHJlbGF0aXZlIHVybHMgdG8gYmUgYWJzb2x1dGUgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IHBhZ2UgbG9jYXRpb24uXG4gKlxuICogQSBydWRpbWVudGFyeSB0ZXN0IHN1aXRlIGlzIGxvY2F0ZWQgYXQgYHRlc3QvZml4VXJscy5qc2AgYW5kIGNhbiBiZSBydW4gdmlhIHRoZSBgbnBtIHRlc3RgIGNvbW1hbmQuXG4gKlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzcykge1xuICAvLyBnZXQgY3VycmVudCBsb2NhdGlvblxuICB2YXIgbG9jYXRpb24gPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5sb2NhdGlvbjtcblxuICBpZiAoIWxvY2F0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiZml4VXJscyByZXF1aXJlcyB3aW5kb3cubG9jYXRpb25cIik7XG4gIH1cblxuXHQvLyBibGFuayBvciBudWxsP1xuXHRpZiAoIWNzcyB8fCB0eXBlb2YgY3NzICE9PSBcInN0cmluZ1wiKSB7XG5cdCAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHZhciBiYXNlVXJsID0gbG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKyBsb2NhdGlvbi5ob3N0O1xuICB2YXIgY3VycmVudERpciA9IGJhc2VVcmwgKyBsb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9cXC9bXlxcL10qJC8sIFwiL1wiKTtcblxuXHQvLyBjb252ZXJ0IGVhY2ggdXJsKC4uLilcblx0Lypcblx0VGhpcyByZWd1bGFyIGV4cHJlc3Npb24gaXMganVzdCBhIHdheSB0byByZWN1cnNpdmVseSBtYXRjaCBicmFja2V0cyB3aXRoaW5cblx0YSBzdHJpbmcuXG5cblx0IC91cmxcXHMqXFwoICA9IE1hdGNoIG9uIHRoZSB3b3JkIFwidXJsXCIgd2l0aCBhbnkgd2hpdGVzcGFjZSBhZnRlciBpdCBhbmQgdGhlbiBhIHBhcmVuc1xuXHQgICAoICA9IFN0YXJ0IGEgY2FwdHVyaW5nIGdyb3VwXG5cdCAgICAgKD86ICA9IFN0YXJ0IGEgbm9uLWNhcHR1cmluZyBncm91cFxuXHQgICAgICAgICBbXikoXSAgPSBNYXRjaCBhbnl0aGluZyB0aGF0IGlzbid0IGEgcGFyZW50aGVzZXNcblx0ICAgICAgICAgfCAgPSBPUlxuXHQgICAgICAgICBcXCggID0gTWF0Y2ggYSBzdGFydCBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgKD86ICA9IFN0YXJ0IGFub3RoZXIgbm9uLWNhcHR1cmluZyBncm91cHNcblx0ICAgICAgICAgICAgICAgICBbXikoXSsgID0gTWF0Y2ggYW55dGhpbmcgdGhhdCBpc24ndCBhIHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICAgICAgfCAgPSBPUlxuXHQgICAgICAgICAgICAgICAgIFxcKCAgPSBNYXRjaCBhIHN0YXJ0IHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICAgICAgICAgIFteKShdKiAgPSBNYXRjaCBhbnl0aGluZyB0aGF0IGlzbid0IGEgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICAgICBcXCkgID0gTWF0Y2ggYSBlbmQgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICkgID0gRW5kIEdyb3VwXG4gICAgICAgICAgICAgICpcXCkgPSBNYXRjaCBhbnl0aGluZyBhbmQgdGhlbiBhIGNsb3NlIHBhcmVuc1xuICAgICAgICAgICkgID0gQ2xvc2Ugbm9uLWNhcHR1cmluZyBncm91cFxuICAgICAgICAgICogID0gTWF0Y2ggYW55dGhpbmdcbiAgICAgICApICA9IENsb3NlIGNhcHR1cmluZyBncm91cFxuXHQgXFwpICA9IE1hdGNoIGEgY2xvc2UgcGFyZW5zXG5cblx0IC9naSAgPSBHZXQgYWxsIG1hdGNoZXMsIG5vdCB0aGUgZmlyc3QuICBCZSBjYXNlIGluc2Vuc2l0aXZlLlxuXHQgKi9cblx0dmFyIGZpeGVkQ3NzID0gY3NzLnJlcGxhY2UoL3VybFxccypcXCgoKD86W14pKF18XFwoKD86W14pKF0rfFxcKFteKShdKlxcKSkqXFwpKSopXFwpL2dpLCBmdW5jdGlvbihmdWxsTWF0Y2gsIG9yaWdVcmwpIHtcblx0XHQvLyBzdHJpcCBxdW90ZXMgKGlmIHRoZXkgZXhpc3QpXG5cdFx0dmFyIHVucXVvdGVkT3JpZ1VybCA9IG9yaWdVcmxcblx0XHRcdC50cmltKClcblx0XHRcdC5yZXBsYWNlKC9eXCIoLiopXCIkLywgZnVuY3Rpb24obywgJDEpeyByZXR1cm4gJDE7IH0pXG5cdFx0XHQucmVwbGFjZSgvXicoLiopJyQvLCBmdW5jdGlvbihvLCAkMSl7IHJldHVybiAkMTsgfSk7XG5cblx0XHQvLyBhbHJlYWR5IGEgZnVsbCB1cmw/IG5vIGNoYW5nZVxuXHRcdGlmICgvXigjfGRhdGE6fGh0dHA6XFwvXFwvfGh0dHBzOlxcL1xcL3xmaWxlOlxcL1xcL1xcL3xcXHMqJCkvaS50ZXN0KHVucXVvdGVkT3JpZ1VybCkpIHtcblx0XHQgIHJldHVybiBmdWxsTWF0Y2g7XG5cdFx0fVxuXG5cdFx0Ly8gY29udmVydCB0aGUgdXJsIHRvIGEgZnVsbCB1cmxcblx0XHR2YXIgbmV3VXJsO1xuXG5cdFx0aWYgKHVucXVvdGVkT3JpZ1VybC5pbmRleE9mKFwiLy9cIikgPT09IDApIHtcblx0XHQgIFx0Ly9UT0RPOiBzaG91bGQgd2UgYWRkIHByb3RvY29sP1xuXHRcdFx0bmV3VXJsID0gdW5xdW90ZWRPcmlnVXJsO1xuXHRcdH0gZWxzZSBpZiAodW5xdW90ZWRPcmlnVXJsLmluZGV4T2YoXCIvXCIpID09PSAwKSB7XG5cdFx0XHQvLyBwYXRoIHNob3VsZCBiZSByZWxhdGl2ZSB0byB0aGUgYmFzZSB1cmxcblx0XHRcdG5ld1VybCA9IGJhc2VVcmwgKyB1bnF1b3RlZE9yaWdVcmw7IC8vIGFscmVhZHkgc3RhcnRzIHdpdGggJy8nXG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlIHRvIGN1cnJlbnQgZGlyZWN0b3J5XG5cdFx0XHRuZXdVcmwgPSBjdXJyZW50RGlyICsgdW5xdW90ZWRPcmlnVXJsLnJlcGxhY2UoL15cXC5cXC8vLCBcIlwiKTsgLy8gU3RyaXAgbGVhZGluZyAnLi8nXG5cdFx0fVxuXG5cdFx0Ly8gc2VuZCBiYWNrIHRoZSBmaXhlZCB1cmwoLi4uKVxuXHRcdHJldHVybiBcInVybChcIiArIEpTT04uc3RyaW5naWZ5KG5ld1VybCkgKyBcIilcIjtcblx0fSk7XG5cblx0Ly8gc2VuZCBiYWNrIHRoZSBmaXhlZCBjc3Ncblx0cmV0dXJuIGZpeGVkQ3NzO1xufTtcbiIsIlxudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi9jbGFzc2VzLmNzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmhlYWRcbiAgICAgICAgICAgICAgfTtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2FscztcblxuaWYobW9kdWxlLmhvdCkge1xuXHRtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4vY2xhc3Nlcy5jc3NcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi9jbGFzc2VzLmNzc1wiKTtcblxuXHRcdGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuXG5cdFx0dmFyIGxvY2FscyA9IChmdW5jdGlvbihhLCBiKSB7XG5cdFx0XHR2YXIga2V5LCBpZHggPSAwO1xuXG5cdFx0XHRmb3Ioa2V5IGluIGEpIHtcblx0XHRcdFx0aWYoIWIgfHwgYVtrZXldICE9PSBiW2tleV0pIHJldHVybiBmYWxzZTtcblx0XHRcdFx0aWR4Kys7XG5cdFx0XHR9XG5cblx0XHRcdGZvcihrZXkgaW4gYikgaWR4LS07XG5cblx0XHRcdHJldHVybiBpZHggPT09IDA7XG5cdFx0fShjb250ZW50LmxvY2FscywgbmV3Q29udGVudC5sb2NhbHMpKTtcblxuXHRcdGlmKCFsb2NhbHMpIHRocm93IG5ldyBFcnJvcignQWJvcnRpbmcgQ1NTIEhNUiBkdWUgdG8gY2hhbmdlZCBjc3MtbW9kdWxlcyBsb2NhbHMuJyk7XG5cblx0XHR1cGRhdGUobmV3Q29udGVudCk7XG5cdH0pO1xuXG5cdG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbigpIHsgdXBkYXRlKCk7IH0pO1xufSIsIm1vZHVsZS5leHBvcnRzID0gXCIvKlxcbiogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXFxuKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XFxuKlxcbiogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcXG4qIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxcbiovXFxuXFxuLmd3LWFsaWdubWVudC1jZWxsLXJpZ2h0LFxcbi5ndy1hbGlnbm1lbnQtY2VsbC1yaWdodCAuYWctY2VsbC12YWx1ZSB7XFxuICB0ZXh0LWFsaWduOiByaWdodDtcXG4gIC13ZWJraXQtYm94LXBhY2s6IGVuZDtcXG4gICAgICAtbXMtZmxleC1wYWNrOiBlbmQ7XFxuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XFxuICAtd2Via2l0LWJveC1mbGV4OiAxO1xcbiAgICAgIC1tcy1mbGV4OiAxO1xcbiAgICAgICAgICBmbGV4OiAxO1xcbn1cXG5cXG4uZ3ctYWxpZ25tZW50LWNlbGwtY2VudGVyLFxcbi5ndy1hbGlnbm1lbnQtY2VsbC1jZW50ZXIgLmFnLWNlbGwtdmFsdWUge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcXG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAtd2Via2l0LWJveC1mbGV4OiAxO1xcbiAgICAgIC1tcy1mbGV4OiAxO1xcbiAgICAgICAgICBmbGV4OiAxO1xcbn1cXG5cXG4uZ3ctYWxpZ25tZW50LWhlYWRlci1yaWdodCAuYWctaGVhZGVyLWNlbGwtbGFiZWwge1xcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiByZXZlcnNlO1xcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XFxuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcXG59XFxuXFxuLmd3LWFsaWdubWVudC1oZWFkZXItY2VudGVyIC5hZy1oZWFkZXItY2VsbC1sYWJlbCB7XFxuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XFxuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxufVxcblxcbi5ndy1hbGlnbm1lbnQtaGVhZGVyLXJpZ2h0IC5hZy1jZWxsLWxhYmVsLWNvbnRhaW5lcixcXG4uZ3ctYWxpZ25tZW50LWhlYWRlci1jZW50ZXIgLmFnLWNlbGwtbGFiZWwtY29udGFpbmVyIHtcXG4gIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcXG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbn1cXG5cXG4uZ3ctdG9vbHRpcCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICAtd2Via2l0LXRyYW5zaXRpb246IG9wYWNpdHkgMXM7XFxuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDFzO1xcbiAgYm9yZGVyLXJhZGl1czogMy4xcHg7XFxuICBwYWRkaW5nOiAxMHB4O1xcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDI2MG1zO1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAyNjBtcztcXG59XFxuXFxuLmd3LXRvb2x0aXAtbGlnaHQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCA2cHggcmdiYSgwLCAwLCAwLCAwLjI1KTtcXG4gICAgICAgICAgYm94LXNoYWRvdzogMCAwIDZweCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xcbn1cXG5cXG4uZ3ctdG9vbHRpcC1kYXJrIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxYzFmMjA7XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCA2cHggIzVjNWM1YztcXG4gICAgICAgICAgYm94LXNoYWRvdzogMCAwIDZweCAjNWM1YzVjO1xcbiAgY29sb3I6IHdoaXRlO1xcbn1cXG5cIiJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwaS91dGlsaXRpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2V2ZW50cy91dGlsaXRpZXMuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlR2V0VGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNPYmplY3RMaWtlLmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9tb2R1bGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RlZXAtcGFyc2UtanNvbi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZXZlbnRzL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzT2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1N5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19yb290LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvZXEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FycmF5TGlrZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmJqLW1hc2tzL3NyYy9TdHJpbmdNYXNrL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYmotbWFza3Mvc3JjL051bWJlck1hc2svaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwaS9jb2x1bW5zLmpzIiwid2VicGFjazovLy8uL3NyYy9leHByZXNzaW9uLmpzIiwid2VicGFjazovLy8uL3NyYy9hcGkvcm93cy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBpL2NoYXJ0cy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBpL2NlbGxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VBc3NpZ25WYWx1ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19kZWZpbmVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzRnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZnJlZUdsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlUmVzdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lkZW50aXR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FwcGx5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzSXRlcmF0ZWVDYWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNMZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheUxpa2VLZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc1Byb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzRXJyb3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb3ZlckFyZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheU1hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19yZUludGVycG9sYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzIiwid2VicGFjazovLy8uL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmJqLW1hc2tzL2Rpc3QvYmJqLW1hc2tzLmpzLWV4cG9zZWQiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Jiai1tYXNrcy9kaXN0L2Jiai1tYXNrcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFzaXMtaW5wdXQtbWFza2luZy9kaXN0L2Jhc2lzLWlucHV0LW1hc2tpbmcuanMtZXhwb3NlZCIsIndlYnBhY2s6Ly8vL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly8vd2VicGFjazovd2VicGFjay9ib290c3RyYXAgZmQ3ZjYwNDIxOTJlMTIzMmNmNjUiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6L2V4dGVybmFsIHtcImNvbW1vbmpzXCI6XCJiYmotbWFza3Mvc3JjL1N0cmluZ01hc2tcIixcImNvbW1vbmpzMlwiOlwiYmJqLW1hc2tzL3NyYy9TdHJpbmdNYXNrXCIsXCJhbWRcIjpcImJiai1tYXNrcy9zcmMvU3RyaW5nTWFza1wiLFwicm9vdFwiOltcIkJCalwiLFwiTWFza3NcIixcIlN0cmluZ01hc2tcIl19Iiwid2VicGFjazovLy8vc3JjL1RleHRJbnB1dC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9UZXh0SW5wdXQvVGV4dElucHV0LmpzIiwid2VicGFjazovLy8vc3JjL1RleHRJbnB1dC90b29scy5qcyIsIndlYnBhY2s6Ly8vL3NyYy9OdW1iZXJJbnB1dC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9OdW1iZXJJbnB1dC9OdW1iZXJJbnB1dC5qcyIsIndlYnBhY2s6Ly8vd2VicGFjazovZXh0ZXJuYWwge1wiY29tbW9uanNcIjpcImJiai1tYXNrcy9zcmMvTnVtYmVyTWFza1wiLFwiY29tbW9uanMyXCI6XCJiYmotbWFza3Mvc3JjL051bWJlck1hc2tcIixcImFtZFwiOlwiYmJqLW1hc2tzL3NyYy9OdW1iZXJNYXNrXCIsXCJyb290XCI6W1wiQkJqXCIsXCJNYXNrc1wiLFwiTnVtYmVyTWFza1wiXX0iLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Jiai1tYXNrcy9zcmMvU3RyaW5nTWFzay9TdHJpbmdNYXNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYmotbWFza3Mvc3JjL051bWJlck1hc2svTnVtYmVyTWFzay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZmxhdHBpY2tyL2Rpc3QvZmxhdHBpY2tyLmpzLWV4cG9zZWQiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2ZsYXRwaWNrci9kaXN0L2ZsYXRwaWNrci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFzaXMtYWdncmlkLWNvbXBvbmVudHMvZGlzdC9iYXNpcy1hZ2dyaWQtY29tcG9uZW50cy5qcy1leHBvc2VkIiwid2VicGFjazovLy93ZWJwYWNrOi93ZWJwYWNrL2Jvb3RzdHJhcCBiNzBmOGQ1ZjA2YzllYTZiMmU4ZiIsIndlYnBhY2s6Ly8vL3NyYy9Db21wb25lbnQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvY29yZS1kZWNvcmF0b3JzL3NyYy9hdXRvYmluZC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9jb3JlLWRlY29yYXRvcnMvc3JjL292ZXJyaWRlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUdldFRhZy5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNPYmplY3RMaWtlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2NvcmUtZGVjb3JhdG9ycy9zcmMvcHJpdmF0ZS91dGlscy5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNPYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19TeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19yb290LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9lcS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcnJheUxpa2UuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9Cb29sZWFuU3dpdGNoL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL1RlbXBsYXRlUmVuZGVyZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlQXNzaWduVmFsdWUuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19kZWZpbmVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNGdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2ZyZWVHbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlUmVzdC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaWRlbnRpdHkuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcHBseS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzSXRlcmF0ZWVDYWxsLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0xlbmd0aC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzSW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheUxpa2VLZXlzLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FycmF5LmpzIiwid2VicGFjazovLy8vKHdlYnBhY2spL2J1aWxkaW4vaGFybW9ueS1tb2R1bGUuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc1Byb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNFcnJvci5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX292ZXJBcmcuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheU1hcC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3JlSW50ZXJwb2xhdGUuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RvU3RyaW5nLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2NvcmUtZGVjb3JhdG9ycy9zcmMvcmVhZG9ubHkuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvZGF0ZS1mbnMtdHovZXNtL3V0Y1RvWm9uZWRUaW1lL2luZGV4LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2RhdGUtZm5zLXR6L2VzbS9fbGliL3R6UGFyc2VUaW1lem9uZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9FdmVudHNNaXhpbi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9EYXRlVGltZUlucHV0L2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL0Jvb2xlYW5FZGl0b3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9zcmMvQm9vbGVhbkVkaXRvci9Cb29sZWFuRWRpdG9yLmpzIiwid2VicGFjazovLy8vc3JjL0NvbXBvbmVudC9Db21wb25lbnQuanMiLCJ3ZWJwYWNrOi8vLy9zcmMvQm9vbGVhblN3aXRjaC9Cb29sZWFuU3dpdGNoLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2NvcmUtZGVjb3JhdG9ycy9zcmMvbGF6eS1pbml0aWFsaXplLmpzIiwid2VicGFjazovLy8vc3JjL0Jvb2xlYW5Td2l0Y2gvc3R5bGUuc2NzcyIsIndlYnBhY2s6Ly8vL3NyYy9Cb29sZWFuU3dpdGNoL3N0eWxlLnNjc3M/NzZhMyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL3VybHMuanMiLCJ3ZWJwYWNrOi8vLy9zcmMvQm9vbGVhblJlbmRlcmVyL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL0Jvb2xlYW5SZW5kZXJlci9Cb29sZWFuUmVuZGVyZXIuanMiLCJ3ZWJwYWNrOi8vLy9zcmMvQm9vbGVhbkZpbHRlci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9Cb29sZWFuRmlsdGVyL0Jvb2xlYW5GaWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy9zcmMvQm9vbGVhbkZpbHRlci9zdHlsZS5zY3NzIiwid2VicGFjazovLy8vc3JjL0Jvb2xlYW5GaWx0ZXIvc3R5bGUuc2Nzcz8wZDVlIiwid2VicGFjazovLy8vc3JjL051bWJlckVkaXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9OdW1iZXJFZGl0b3IvTnVtYmVyRWRpdG9yLmpzIiwid2VicGFjazovLy8vc3JjL051bWJlckVkaXRvci9zdHlsZS5zY3NzIiwid2VicGFjazovLy8vc3JjL051bWJlckVkaXRvci9zdHlsZS5zY3NzP2FhMGUiLCJ3ZWJwYWNrOi8vLy9zcmMvVGV4dEVkaXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9UZXh0RWRpdG9yL1RleHRFZGl0b3IuanMiLCJ3ZWJwYWNrOi8vLy9zcmMvVGV4dEVkaXRvci9zdHlsZS5zY3NzIiwid2VicGFjazovLy8vc3JjL1RleHRFZGl0b3Ivc3R5bGUuc2Nzcz8wOTFiIiwid2VicGFjazovLy8vc3JjL1RlbXBsYXRlUmVuZGVyZXIvVGVtcGxhdGVSZW5kZXJlci5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdGVtcGxhdGUuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2Fzc2lnbkluV2l0aC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NvcHlPYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hc3NpZ25WYWx1ZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldE5hdGl2ZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc05hdGl2ZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFJhd1RhZy5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX29iamVjdFRvU3RyaW5nLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNNYXNrZWQuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jb3JlSnNEYXRhLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fdG9Tb3VyY2UuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRWYWx1ZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NyZWF0ZUFzc2lnbmVyLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb3ZlclJlc3QuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zZXRUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VTZXRUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvY29uc3RhbnQuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zaG9ydE91dC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMva2V5c0luLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRpbWVzLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FyZ3VtZW50cy5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc0FyZ3VtZW50cy5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNCdWZmZXIuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3N0dWJGYWxzZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNUeXBlZEFycmF5LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzVHlwZWRBcnJheS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VVbmFyeS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25vZGVVdGlsLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUtleXNJbi5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25hdGl2ZUtleXNJbi5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvYXR0ZW1wdC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNQbGFpbk9iamVjdC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFByb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VWYWx1ZXMuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jdXN0b21EZWZhdWx0c0Fzc2lnbkluLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZXNjYXBlU3RyaW5nQ2hhci5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMva2V5cy5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VLZXlzLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbmF0aXZlS2V5cy5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdGVtcGxhdGVTZXR0aW5ncy5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvZXNjYXBlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZXNjYXBlSHRtbENoYXIuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlUHJvcGVydHlPZi5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNTeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19yZUVzY2FwZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3JlRXZhbHVhdGUuanMiLCJ3ZWJwYWNrOi8vLy9zcmMvSW1hZ2VSZW5kZXJlci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9JbWFnZVJlbmRlcmVyL0ltYWdlUmVuZGVyZXIuanMiLCJ3ZWJwYWNrOi8vLy9zcmMvRGF0ZVRpbWVGaWx0ZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9zcmMvRGF0ZVRpbWVGaWx0ZXIvRGF0ZVRpbWVGaWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvZGF0ZS1mbnMtdHovZXNtL19saWIvdHpUb2tlbml6ZURhdGUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vYWRkTWlsbGlzZWNvbmRzL2luZGV4LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS90b0RhdGUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvZGF0ZS1mbnMtdHovZXNtL3RvRGF0ZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL0V2ZW50c01peGluL0V2ZW50c01peGluLmpzIiwid2VicGFjazovLy8vc3JjL0RhdGVUaW1lSW5wdXQvRGF0ZVRpbWVJbnB1dC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9EYXRlVGltZUlucHV0L3N0eWxlLnNjc3MiLCJ3ZWJwYWNrOi8vLy9zcmMvRGF0ZVRpbWVJbnB1dC9zdHlsZS5zY3NzPzRmNjciLCJ3ZWJwYWNrOi8vLy9zcmMvRGF0ZVRpbWVGaWx0ZXIvc3R5bGUuc2NzcyIsIndlYnBhY2s6Ly8vL3NyYy9EYXRlVGltZUZpbHRlci9zdHlsZS5zY3NzPzc2ZmIiLCJ3ZWJwYWNrOi8vLy9zcmMvRGF0ZVRpbWVFZGl0b3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9zcmMvRGF0ZVRpbWVFZGl0b3IvRGF0ZVRpbWVFZGl0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BvbHlmaWxscy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBpL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9hcGkvaW5pdC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBpL21lbnVzLmpzIiwid2VicGFjazovLy8uL3NyYy9ldmVudHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2V2ZW50cy9zZWxlY3Rpb25zLmpzIiwid2VicGFjazovLy8uL3NyYy9ldmVudHMvZWRpdGluZy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZXZlbnRzL3JlYWR5LmpzIiwid2VicGFjazovLy8uL3NyYy9ldmVudHMvc3RhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2V2ZW50cy9rZXlib2FyZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RlbXBsYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvYXNzaWduSW5XaXRoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NvcHlPYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXNzaWduVmFsdWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0TmF0aXZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc05hdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRSYXdUYWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb2JqZWN0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNNYXNrZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29yZUpzRGF0YS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL190b1NvdXJjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRWYWx1ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jcmVhdGVBc3NpZ25lci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19vdmVyUmVzdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zZXRUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlU2V0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9jb25zdGFudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zaG9ydE91dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2tleXNJbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVGltZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FyZ3VtZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0J1ZmZlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3N0dWJGYWxzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzVHlwZWRBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNUeXBlZEFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VVbmFyeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19ub2RlVXRpbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlS2V5c0luLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25hdGl2ZUtleXNJbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2F0dGVtcHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1BsYWluT2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFByb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVmFsdWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2N1c3RvbURlZmF1bHRzQXNzaWduSW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZXNjYXBlU3RyaW5nQ2hhci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbmF0aXZlS2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RlbXBsYXRlU2V0dGluZ3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZXNjYXBlSHRtbENoYXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVByb3BlcnR5T2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRvU3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNTeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcmVFc2NhcGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcmVFdmFsdWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9IVE1MVG9vbHRpcC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBpL3N0YXRlLmpzIiwid2VicGFjazovLy8uL3NyYy9hcGkvdG9vbHBhbmVsLmpzIiwid2VicGFjazovLy8uL3NyYy9hcGkvc3RhdHVzYmFyLmpzIiwid2VicGFjazovLy8uL3NyYy9hcGkvb3ZlcmxheXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwaS9jb250ZXh0LmpzIiwid2VicGFjazovLy8uL3NyYy9hcGkvanNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9qc3MvanNzLmpzLWV4cG9zZWQiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2pzcy9qc3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2ZsYXRwaWNrci9kaXN0L2ZsYXRwaWNrci5jc3M/N2I2OCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZmxhdHBpY2tyL2Rpc3QvZmxhdHBpY2tyLmNzcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi91cmxzLmpzIiwid2VicGFjazovLy8uL3NyYy9zdHlsZS9jbGFzc2VzLmNzcz9iNzM4Iiwid2VicGFjazovLy8uL3NyYy9zdHlsZS9jbGFzc2VzLmNzcyJdLCJuYW1lcyI6WyJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsImd3X2dldEdyaWQiLCJpZCIsIndpbmRvdyIsIkJCakdyaWRFeFdpZGdldCIsImdyaWQiLCJyZWdpc3RlcmVkR3JpZHMiLCJKU09OIiwic3RyaW5naWZ5Iiwia2V5cyIsIlR5cGVFcnJvciIsIiRkb2MiLCJkb2N1bWVudCIsIiR3bmQiLCJyZXBsYWNlIiwiTWF0aCIsInJhbmRvbSIsInRvU3RyaW5nIiwib3B0aW9ucyIsImZ1bmMiLCJ3YWl0IiwiaW1tZWRpYXRlIiwidGltZW91dCIsImNvbnRleHQiLCJ0aGlzIiwiYXJncyIsImFyZ3VtZW50cyIsImxhdGVyIiwiYXBwbHkiLCJjYWxsTm93IiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsInBheWxvYWQiLCJldmVudElkIiwicmVnaXN0ZXJlZEludGVyZXN0cyIsImludGVyZXN0cyIsImluY2x1ZGVzIiwiZGl2IiwiZ3dfZ2V0RG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImJhc2lzRGlzcGF0Y2hDdXN0b21FdmVudCIsImUiLCJnd19wYXJzZU5vZGUiLCJub2RlIiwiZ3JvdXAiLCJnZXRSb3dOb2RlSWQiLCJyb3dQaW5uZWQiLCJkYXRhIiwieCIsInJvd0luZGV4IiwicGFyZW50IiwiY2hpbGRJbmRleCIsIkJvb2xlYW4iLCJzZWxlY3RlZCIsImNyIiwicHAiLCJnIiwiRnVuY3Rpb24iLCJzeW1Ub1N0cmluZ1RhZyIsInVuZGVmaW5lZCIsIndlYnBhY2tQb2x5ZmlsbCIsImRlcHJlY2F0ZSIsInBhdGhzIiwiY2hpbGRyZW4iLCJkZWVwUGFyc2VKc29uIiwianNvblN0cmluZyIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsInZhbCIsInJlZHVjZSIsIm9iaiIsInBhcnNlIiwiZXJyIiwidHlwZSIsInJvb3QiLCJmcmVlU2VsZiIsInNlbGYiLCJmcmVlR2xvYmFsIiwib3RoZXIiLCJsZW5ndGgiLCJTdHJpbmdNYXNrIiwiTnVtYmVyTWFzayIsImRlZmluaXRpb25zIiwiZGVlcFBhcnNlZERlZmluaXRpb25zIiwiZ3dfZXh0ZW5kQ29sdW1uRGVmaW5pdGlvbnMiLCJhcGkiLCJzZXRDb2x1bW5EZWZzIiwiY29sdW1uRGVmcyIsIndpZHRoIiwiY29sdW1uc0FQSSIsImNvbHVtbkFwaSIsInNpemVDb2x1bW5zVG9GaXQiLCJOdW1iZXIiLCJza2lwSGVhZGVyIiwiY29sdW1ucyIsImF1dG9TaXplQ29sdW1ucyIsImFsbENvbHVtbklkcyIsImdldEFsbENvbHVtbnMiLCJmb3JFYWNoIiwiY29sdW1uIiwicHVzaCIsImNvbElkIiwiY29sdW1uSWQiLCJlbnN1cmVDb2x1bW5WaXNpYmxlIiwic2V0Q29sdW1uV2lkdGgiLCJwaW4iLCJzZXRDb2x1bW5QaW5uZWQiLCJ0b0luZGV4IiwibW92ZUNvbHVtbiIsInNldCIsInNwbGl0IiwidHJpbSIsInJlbW92ZVJvd0dyb3VwQ29sdW1ucyIsImlzUGl2b3RNb2RlIiwic2V0UGl2b3RNb2RlIiwicmVtb3ZlUGl2b3RDb2x1bW5zIiwiYWRkVmFsdWVDb2x1bW5zIiwicmVtb3ZlVmFsdWVDb2x1bW5zIiwibW9kZWwiLCJhc0FycmF5IiwicGFyc2VkTW9kZWwiLCJzb3J0Iiwic2V0U29ydE1vZGVsIiwicmVkcmF3Um93cyIsInJlcXVpcmUiLCJfY29uZmlndXJlVG9vbHRpcHMiLCJkZWYiLCJ0b29sdGlwVmFsdWVHZXR0ZXJFeHByZXNzaW9uIiwidG9vbHRpcFZhbHVlR2V0dGVyIiwicGFyYW1zIiwiZ3dfZXhlY3V0ZUV4cHJlc3Npb24iLCJ0b29sdGlwQ29tcG9uZW50IiwiY2hpbGQiLCJjaGVja2JveFNlbGVjdGlvbiIsImd3X2lzU2hvd1NlbGVjdGlvbkNoZWNrYm94IiwiaGVhZGVyQ2hlY2tib3hTZWxlY3Rpb24iLCJnd19pc0hlYWRlckNoZWNrYm94U2VsZWN0aW9uIiwiZWRpdGFibGUiLCJwYXJhbSIsInNob3dTZWxlY3Rpb25DaGVja2JveCIsImdldEFsbEdyaWRDb2x1bW5zIiwiY29sRGVmIiwiZmllbGQiLCJncmlkT3B0aW9uc1dyYXBwZXIiLCJncmlkT3B0aW9ucyIsInNob3dIZWFkZXJTZWxlY3Rpb25DaGVja2JveCIsImd3X2NvbXBpbGVFeHByZXNzaW9uIiwiZXhwcmVzc2lvbiIsImV4cHJlc3Npb25DYWNoZSIsImZ1bmN0aW9uQm9keSIsImluZGV4T2YiLCJ0aGVGdW5jdGlvbiIsImphdmFTY3JpcHRGdW5jdGlvbiIsIm9sZFZhbHVlIiwibmV3VmFsdWUiLCJnZXRWYWx1ZSIsImNvbHVtbkdyb3VwIiwiY29uc29sZSIsImxvZyIsImZpbHRlciIsInNldFF1aWNrRmlsdGVyIiwiZXhwYW5kQWxsIiwiY29sbGFwc2VBbGwiLCJpbmRleCIsInBvc2l0aW9uIiwiZ2V0Um93Tm9kZSIsImVuc3VyZU5vZGVWaXNpYmxlIiwiZW5zdXJlSW5kZXhWaXNpYmxlIiwicHJldmlvdXNDZWxsIiwicHJldmlvdXNDZWxsUG9zaXRpb24iLCJzdWdnZXN0ZWROZXh0Q2VsbCIsIm5leHRDZWxsUG9zaXRpb24iLCJyb3ciLCJnZXREaXNwbGF5ZWRSb3dBdEluZGV4IiwiZ2V0Rmlyc3REaXNwbGF5ZWRSb3ciLCJzZXRTZWxlY3RlZCIsImZvckVhY2hOb2RlIiwiZ2V0TGFzdERpc3BsYXllZFJvdyIsIkVycm9yIiwianNvbiIsInNldFJvd0RhdGEiLCJyb3dEYXRhIiwidHJhbnNhY3Rpb24iLCJiYXRjaFVwZGF0ZSIsInJlbW92ZSIsIml0ZW1zIiwiYXBwbHlUcmFuc2FjdGlvbkFzeW5jIiwiYXBwbHlUcmFuc2FjdGlvbiIsImhlaWdodCIsInNldFJvd0hlaWdodCIsIm9uUm93SGVpZ2h0Q2hhbmdlZCIsIndhcm4iLCJyZXNldFJvd0hlaWdodHMiLCJyb3dzIiwiZm9yRWFjaE5vZGVBZnRlckZpbHRlckFuZFNvcnQiLCJTdHJpbmciLCJleHBhbmRlZCIsIm9uR3JvdXBFeHBhbmRlZE9yQ29sbGFwc2VkIiwiZmlsdGVyZWQiLCJzZWxlY3RBbGxGaWx0ZXJlZCIsInNlbGVjdEFsbCIsImRlc2VsZWN0QWxsRmlsdGVyZWQiLCJkZXNlbGVjdEFsbCIsImd3X2dldFNlbGVjdGVkUm93cyIsInBoYXNlIiwiZmlsdGVyRXhwcmVzc2lvbiIsInBhcnNlZCIsImdyaWRBcGkiLCJzZXRQaW5uZWRUb3BSb3dEYXRhIiwic2V0UGlubmVkQm90dG9tUm93RGF0YSIsIm5vZGVzIiwiZ2V0U2VsZWN0ZWROb2RlcyIsImNoYXJ0VG9vbGJhckl0ZW1zIiwicmFuZ2UiLCJwciIsImNlbGxSYW5nZSIsImd3X3BhcnNlQWRkQ2VsbFJhbmdlIiwicmVmIiwiY3JlYXRlUmFuZ2VDaGFydCIsInV1aWQiLCJnd191dWlkIiwiY3JlYXRlZF9jaGFydHMiLCJkZXN0cm95Q2hhcnQiLCJjb2xLZXkiLCJrZXlQcmVzcyIsImNoYXJQcmVzcyIsInN0YXJ0RWRpdGluZ0NlbGwiLCJjYW5jZWwiLCJzdG9wRWRpdGluZyIsInRhYlRvTmV4dENlbGwiLCJ0YWJUb1ByZXZpb3VzQ2VsbCIsImYiLCJmbG9hdGluZyIsImdldEVkaXRpbmdDZWxscyIsImxhc3RGb2N1c2VkQ2VsbCIsImdldEZvY3VzZWRDZWxsIiwiaXNJbnRlZ2VyIiwic2V0Rm9jdXNlZENlbGwiLCJyYW5nZXMiLCJnZXRDZWxsUmFuZ2VzIiwiZ2V0TW9kZWwiLCJyZXN1bHQiLCJhY2N1bXVsYXRvciIsImN1cnJlbnQiLCJzdGFySW5kZXgiLCJtaW4iLCJzdGFydFJvdyIsImVuZFJvdyIsImVuZEluZGV4IiwibWF4IiwiZ2V0Um93IiwicGFyc2VkTm9kZSIsImFkZENlbGxSYW5nZSIsImNsZWFyUmFuZ2VTZWxlY3Rpb24iLCJzdGFydCIsImVuZCIsInJvd1N0YXJ0SW5kZXgiLCJhYnMiLCJyb3dFbmRJbmRleCIsInRhZyIsImdsb2JhbCIsImlkZW50aXR5IiwidGhpc0FyZyIsInJlSXNVaW50IiwidGVzdCIsImluaGVyaXRlZCIsImlzQXJyIiwiaXNBcmciLCJpc0J1ZmYiLCJpc1R5cGUiLCJza2lwSW5kZXhlcyIsIm9iamVjdFByb3RvIiwiQ3RvciIsImNvbnN0cnVjdG9yIiwibWVzc2FnZSIsInRyYW5zZm9ybSIsImFyZyIsImFycmF5IiwiaXRlcmF0ZWUiLCJmbiIsIm1lbW8iLCJzdHlsZXNJbkRvbSIsImlzT2xkSUUiLCJhbGwiLCJhdG9iIiwiZ2V0VGFyZ2V0IiwidGFyZ2V0IiwicXVlcnlTZWxlY3RvciIsImdldEVsZW1lbnQiLCJzdHlsZVRhcmdldCIsIkhUTUxJRnJhbWVFbGVtZW50IiwiY29udGVudERvY3VtZW50IiwiaGVhZCIsInNpbmdsZXRvbiIsInNpbmdsZXRvbkNvdW50ZXIiLCJzdHlsZXNJbnNlcnRlZEF0VG9wIiwiZml4VXJscyIsImFkZFN0eWxlc1RvRG9tIiwic3R5bGVzIiwiaXRlbSIsImRvbVN0eWxlIiwicmVmcyIsImoiLCJwYXJ0cyIsImFkZFN0eWxlIiwibGlzdFRvU3R5bGVzIiwibGlzdCIsIm5ld1N0eWxlcyIsImJhc2UiLCJwYXJ0IiwiY3NzIiwibWVkaWEiLCJzb3VyY2VNYXAiLCJpbnNlcnRTdHlsZUVsZW1lbnQiLCJzdHlsZSIsImluc2VydEludG8iLCJsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcCIsImluc2VydEF0IiwibmV4dFNpYmxpbmciLCJpbnNlcnRCZWZvcmUiLCJhcHBlbmRDaGlsZCIsImZpcnN0Q2hpbGQiLCJiZWZvcmUiLCJyZW1vdmVTdHlsZUVsZW1lbnQiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJpZHgiLCJzcGxpY2UiLCJjcmVhdGVTdHlsZUVsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiYXR0cnMiLCJhZGRBdHRycyIsImVsIiwic2V0QXR0cmlidXRlIiwidXBkYXRlIiwic3R5bGVJbmRleCIsImFwcGx5VG9TaW5nbGV0b25UYWciLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJyZXZva2VPYmplY3RVUkwiLCJCbG9iIiwiYnRvYSIsImxpbmsiLCJyZWwiLCJjcmVhdGVMaW5rRWxlbWVudCIsInVwZGF0ZUxpbmsiLCJocmVmIiwiYXBwbHlUb1RhZyIsIm5ld09iaiIsIkRFQlVHIiwibmV3TGlzdCIsIm1heVJlbW92ZSIsInRleHRTdG9yZSIsInJlcGxhY2VUZXh0IiwicmVwbGFjZW1lbnQiLCJqb2luIiwic3R5bGVTaGVldCIsImNzc1RleHQiLCJjc3NOb2RlIiwiY3JlYXRlVGV4dE5vZGUiLCJjaGlsZE5vZGVzIiwiYXV0b0ZpeFVybHMiLCJjb252ZXJ0VG9BYnNvbHV0ZVVybHMiLCJ1bmVzY2FwZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImJsb2IiLCJvbGRTcmMiLCJmYWN0b3J5IiwiY29uZmlndXJhYmxlIiwiX193ZWJwYWNrX2V4cG9ydHNfXyIsImRpcnR5TnVtYmVyIiwiTmFOIiwibnVtYmVyIiwiaXNOYU4iLCJjZWlsIiwiZmxvb3IiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX051bWJlck1hc2tfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0ZU1hc2tfXyIsInRpbWV6b25lU3RyaW5nIiwiZGF0ZSIsInRva2VuIiwiYWJzb2x1dGVPZmZzZXQiLCJob3VycyIsInBhdHRlcm5zIiwidGltZXpvbmVaIiwiZXhlYyIsInRpbWV6b25lSEgiLCJ2YWxpZGF0ZVRpbWV6b25lIiwicGFyc2VJbnQiLCJ0aW1lem9uZUhITU0iLCJtaW51dGVzIiwidGltZXpvbmVJQU5BIiwidG9rZW5zIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX190elRva2VuaXplRGF0ZV9pbmRleF9qc19fIiwiYXNVVEMiLCJEYXRlIiwiVVRDIiwidGltZXN0YW1wV2l0aE1zWmVyb2VkIiwiZ2V0VGltZSIsInRpbWV6b25lIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdHJpbmdNYXNrX18iLCJVdGlscyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fRGF0ZU1hc2tfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fU3RyaW5nTWFza19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19UeXBlc19fIiwiRGF0ZXMiLCJnZXREYXlPZlllYXIiLCJnZXRXZWVrTnVtYmVyIiwiZ2V0V2Vla1N0YXJ0QnlMb2NhbGUiLCJJU19EQVRFX1JFR0VYIiwiSVNfVElNRV9SRUdFWCIsImZpeFNob3J0SVNPIiwiZ2V0VGltZXpvbmVPck9mZnNldCIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwicHJvcHMiLCJkZXNjcmlwdG9yIiwid3JpdGFibGUiLCJpbnN0YW5jZSIsIkNvbnN0cnVjdG9yIiwiX2NsYXNzQ2FsbENoZWNrIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwiX21hc2siLCJncm91cGluZ1NlcGFyYXRvciIsImRlY2ltYWxTZXBhcmF0b3IiLCJmb3JjZVRyYWlsaW5nWmVyb3MiLCJsb29zZSIsIm1hc2tMZW4iLCJzdHIiLCJtYXNrQmVmb3JlRGVjaW1hbCIsIm1hc2tBZnRlckRlY2ltYWwiLCJmb3VuZERlY2ltYWwiLCJjaGFyQXQiLCJudW0iLCJfcm91bmQiLCJieXRlcyIsIl90b0NoYXJBcnJheSIsImluTGVuIiwibnVtQmVmb3JlRGVjaW1hbCIsIm51bUFmdGVyRGVjaW1hbCIsIl9pIiwiX2kyIiwiZmlsbEJ5dGUiLCJmbG9hdEJ5dGUiLCJpblBvcyIsIm91dFBvcyIsImZsb2F0UG9zIiwiZmlsbEluaXQiLCJpc05lZ2F0aXZlIiwiX2dldFNpZ24iLCJlbWl0RGVjaW1hbCIsImZvdW5kWmVybyIsImZvdW5kRGlnaXQiLCJyZXQiLCJtYXNrUG9zIiwiX20iLCJwcmVjaXNpb24iLCJyZXZlcnNlU2hpZnQiLCJudW1BcnJheSIsIl9zaGlmdCIsInJvdW5kIiwic2lnbnVtIiwiY2hhcnMiLCJzdHJpbmciLCJjb25jYXQiLCJzdWJzdHJpbmciLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfZGF0ZV9mbnNfdHpfdXRjVG9ab25lZFRpbWVfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV93ZWVrc3RhcnRfXyIsImxvY2FsZSIsImdldEZ1bGxZZWFyIiwiZGlmZiIsImdldFRpbWV6b25lT2Zmc2V0Iiwib2Zmc2V0IiwibWF0Y2giLCJJbnRsIiwiRGF0ZVRpbWVGb3JtYXQiLCJyZXNvbHZlZE9wdGlvbnMiLCJ0aW1lWm9uZSIsInBhZCIsIndlZWtTdGFydCIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImRheU51bSIsImdldFVUQ0RheSIsInNldFVUQ0RhdGUiLCJnZXRVVENEYXRlIiwieWVhclN0YXJ0IiwiZ2V0VVRDRnVsbFllYXIiLCJEYXRlTWFzayIsImRhdGVPYmplY3QiLCJ0cmFuc2xhdGlvbiIsIl9idWlsZFRyYW5zbGF0aW9uIiwieWVhciIsIm1vbnRoIiwibW9udGhTaG9ydCIsImZvcm1hdCIsIm1vbnRoTG9uZyIsImRheSIsImRheVNob3J0Iiwid2Vla2RheSIsImRheUxvbmciLCJnZXRNaW51dGVzIiwic2Vjb25kcyIsImdldFNlY29uZHMiLCJnZXRIb3VycyIsImhvdXJzMjQiLCJkYXlPZlllYXIiLCJkYXlPZldlZWsiLCJnZXREYXkiLCJ3ZWVrTnVtYmVyIiwiayIsIlJlZ0V4cCIsImRhdGVEZXRhaWxzIiwiWXoiLCJzdWJzdHIiLCJZcyIsIllsIiwiWXAiLCJmcm9tQ2hhckNvZGUiLCJZZCIsIlkiLCJNeiIsIk1zIiwiTWwiLCJNcCIsIk1kIiwiTSIsIkR6IiwiRHMiLCJEbCIsIkRwIiwiRGQiLCJEIiwiSHoiLCJIcyIsIkhsIiwiSHAiLCJIZCIsIkgiLCJoeiIsImhvdXJzMTIiLCJocyIsImhsIiwiaHAiLCJoZCIsImgiLCJteiIsIm1zIiwibWwiLCJtcCIsIm1kIiwic3oiLCJzcyIsInNsIiwic3AiLCJzZCIsIlBQIiwiUCIsIkp6IiwiSnMiLCJKbCIsIkpkIiwiSiIsIld6IiwiV3MiLCJXbCIsIldwIiwiV2QiLCJXIiwid3oiLCJ3cyIsIndsIiwid3AiLCJ3ZCIsInciLCJkaXJ0eURhdGUiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3RvRGF0ZV9fIiwidXRjRGF0ZSIsImdldFVUQ01vbnRoIiwiZ2V0VVRDSG91cnMiLCJnZXRVVENNaW51dGVzIiwiZ2V0VVRDU2Vjb25kcyIsImdldFVUQ01pbGxpc2Vjb25kcyIsIm9mZnNldE1pbGxpc2Vjb25kcyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbGliX3R6UGFyc2VUaW1lem9uZV9fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2RhdGVfZm5zX2VzbV9zdWJNaWxsaXNlY29uZHNfXyIsImR0ZiIsImR0ZkNhY2hlIiwidGVzdERhdGVGb3JtYXR0ZWQiLCJob3VyMTIiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwiaG91ckN5Y2xlU3VwcG9ydGVkIiwiaG91ckN5Y2xlIiwiZ2V0RGF0ZVRpbWVGb3JtYXQiLCJmb3JtYXRUb1BhcnRzIiwiZm9ybWF0dGVkIiwiZmlsbGVkIiwicG9zIiwidHlwZVRvUG9zIiwicGFydHNPZmZzZXQiLCJoYWNreU9mZnNldCIsImRpcnR5QW1vdW50IiwiYW1vdW50IiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19saWJfdG9JbnRlZ2VyX2luZGV4X2pzX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2FkZE1pbGxpc2Vjb25kc19pbmRleF9qc19fIiwidGltZXN0YW1wIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX190b0RhdGVfaW5kZXhfanNfXyIsImFyZ3VtZW50IiwiYXJnU3RyIiwic3RhY2siLCJkaXJ0eU9wdGlvbnMiLCJhZGRpdGlvbmFsRGlnaXRzIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2RhdGVfZm5zX2VzbV9saWJfdG9JbnRlZ2VyX2luZGV4X2pzX18iLCJSYW5nZUVycm9yIiwiZGF0ZVN0cmluZ3MiLCJzcGxpdERhdGVTdHJpbmciLCJwYXJzZVllYXJSZXN1bHQiLCJwYXJzZVllYXIiLCJyZXN0RGF0ZVN0cmluZyIsInBhcnNlRGF0ZSIsInRpbWUiLCJwYXJzZVRpbWUiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2xpYl90elBhcnNlVGltZXpvbmVfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9kYXRlX2Zuc19lc21fbGliX2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHNfaW5kZXhfanNfXyIsImRhdGVUaW1lRGVsaW1ldGVyIiwicGxhaW5UaW1lIiwidGltZVpvbmVEZWxpbWV0ZXIiLCJZWSIsIllZWSIsIllZWVkiLCJZWVlZWSIsIk1NIiwiREREIiwiTU1ERCIsIld3dyIsIld3d0QiLCJISCIsIkhITU0iLCJISE1NU1MiLCJkYXRlU3RyaW5nIiwidGltZVN0cmluZyIsInBhdHRlcm5ZWVkiLCJwYXR0ZXJuWVlZWVkiLCJ5ZWFyU3RyaW5nIiwic2xpY2UiLCJjZW50dXJ5U3RyaW5nIiwid2VlayIsInNldFVUQ0Z1bGxZZWFyIiwidmFsaWRhdGVEYXRlIiwiaXNMZWFwWWVhciIsImlzTGVhcFllYXJJbmRleCIsInZhbGlkYXRlRGF5T2ZZZWFyRGF0ZSIsInZhbGlkYXRlV2Vla0RhdGUiLCJkYXlPZklTT1dlZWtZZWFyIiwidmFsaWRhdGVUaW1lIiwicGFyc2VGbG9hdCIsImlzb1dlZWtZZWFyIiwiREFZU19JTl9NT05USCIsIkRBWVNfSU5fTU9OVEhfTEVBUF9ZRUFSIiwiYmFzZVRpbWV6b25lT2Zmc2V0Iiwic2V0U2Vjb25kcyIsIm1pbGxpc2Vjb25kc1BhcnRPZlRpbWV6b25lT2Zmc2V0IiwiZ2V0V2Vla1N0YXJ0QnlMb2NhbGUkMSIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXBpX2pzX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2xhbmdSZWdpb25NYXBfanNfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fcmVnaW9uRGF5TWFwX2pzX18iLCJnZXRXZWVrU3RhcnRCeVJlZ2lvbiIsInJlZ2lvbkNvZGUiLCJyZWdpb25EYXlNYXAiLCJjb2RlIiwidG9VcHBlckNhc2UiLCJsYW5nUmVnaW9uTWFwIiwiY291bnRyeSIsInRvTG93ZXJDYXNlIiwibGFuZ3VhZ2UiLCJlbiIsInpoIiwiemhfaGFucyIsImhhbnMiLCJ3dXUiLCJoc24iLCJoYWsiLCJuYW4iLCJnYW4iLCJoaSIsInRlIiwibXIiLCJ0YSIsImd1Iiwia24iLCJvciIsInBhX2d1cnUiLCJiaG8iLCJhd2EiLCJhcyIsIm13ciIsIm1haSIsIm1hZyIsImJnYyIsImhuZSIsImRjYyIsImR6IiwidG4iLCJhbSIsIm9tIiwicXVjIiwianYiLCJzdSIsIm1hZCIsIm1zX2FyYWIiLCJnYSIsImhlIiwiamFtIiwiamEiLCJrbSIsImtvIiwibG8iLCJtaCIsIm15IiwibXQiLCJuZSIsImZpbCIsImNlYiIsImlsbyIsInVyIiwicGEiLCJwYV9hcmFiIiwiYXJhYiIsImxhaCIsInBzIiwic2RfYXJhYiIsInNrciIsImduIiwidGgiLCJ0dHMiLCJhZWIiLCJ6aF9oYW50IiwiaGFudCIsInNtIiwienUiLCJzbiIsImFycSIsImFyIiwiYXJ6IiwiZmEiLCJhel9hcmFiIiwiYXJ5IiwiYm4iLCJya3QiLCJkdiIsIkFHIiwiQVRHIiwiMjgiLCJBUiIsIkFSRyIsIjMyIiwiQVMiLCJBU00iLCIxNiIsIkFVIiwiQVVTIiwiMzYiLCJCUiIsIkJSQSIsIjc2IiwiQlMiLCJCSFMiLCI0NCIsIkJUIiwiQlROIiwiNjQiLCJCVyIsIkJXQSIsIjcyIiwiQloiLCJCTFoiLCI4NCIsIkNBIiwiQ0FOIiwiMTI0IiwiQ04iLCJDSE4iLCIxNTYiLCJDTyIsIkNPTCIsIjE3MCIsIkRNIiwiRE1BIiwiMjEyIiwiRE8iLCJET00iLCIyMTQiLCJFVCIsIkVUSCIsIjIzMSIsIkdUIiwiR1RNIiwiMzIwIiwiR1UiLCJHVU0iLCIzMTYiLCJISyIsIkhLRyIsIjM0NCIsIkhOIiwiSE5EIiwiMzQwIiwiSUQiLCJJRE4iLCIzNjAiLCJJRSIsIklSTCIsIjM3MiIsIklMIiwiSVNSIiwiMzc2IiwiSU4iLCJJTkQiLCIzNTYiLCJKTSIsIkpBTSIsIjM4OCIsIkpQIiwiSlBOIiwiMzkyIiwiS0UiLCJLRU4iLCI0MDQiLCJLSCIsIktITSIsIjExNiIsIktSIiwiS09SIiwiNDEwIiwiTEEiLCJMQTAiLCI0MTgiLCJNSCIsIk1ITCIsIjU4NCIsIk1NUiIsIjEwNCIsIk1PIiwiTUFDIiwiNDQ2IiwiTVQiLCJNTFQiLCI0NzAiLCJNWCIsIk1FWCIsIjQ4NCIsIk1aIiwiTU9aIiwiNTA4IiwiTkkiLCJOSUMiLCI1NTgiLCJOUCIsIk5QTCIsIjUyNCIsIk5aIiwiTlpMIiwiNTU0IiwiUEEiLCJQQU4iLCI1OTEiLCJQRSIsIlBFUiIsIjYwNCIsIlBIIiwiUEhMIiwiNjA4IiwiUEsiLCJQQUsiLCI1ODYiLCJQUiIsIlBSSSIsIjYzMCIsIlBZIiwiUFJZIiwiNjAwIiwiU0EiLCJTQVUiLCI2ODIiLCJTRyIsIlNHUCIsIjcwMiIsIlNWIiwiU0xWIiwiMjIyIiwiVEgiLCJUSEEiLCI3NjQiLCJUTiIsIlRVTiIsIjc4OCIsIlRUIiwiVFRPIiwiNzgwIiwiVFciLCJUV04iLCIxNTgiLCJVTSIsIlVNSSIsIjU4MSIsIlVTIiwiVVNBIiwiODQwIiwiVkUiLCJWRU4iLCI4NjIiLCJWSSIsIlZJUiIsIjg1MCIsIldTIiwiV1NNIiwiODgyIiwiWUUiLCJZRU0iLCI4ODciLCJaQSIsIlpBRiIsIjcxMCIsIlpXIiwiWldFIiwiNzE2IiwiQUUiLCJBUkUiLCI3ODQiLCJBRiIsIkFGRyIsIjQiLCJCSCIsIkJIUiIsIjQ4IiwiREoiLCJESkkiLCIyNjIiLCJEWiIsIkRaQSIsIjEyIiwiRUciLCJFR1kiLCI4MTgiLCJJUSIsIklSUSIsIjM2OCIsIklSIiwiSVJOIiwiMzY0IiwiSk8iLCJKT1IiLCI0MDAiLCJLVyIsIktXVCIsIjQxNCIsIkxZIiwiTEJZIiwiNDM0IiwiTUEiLCJNQVIiLCI1MDQiLCJPTSIsIk9NTiIsIjUxMiIsIlFBIiwiUUFUIiwiNjM0IiwiU0QiLCJTRE4iLCI3MjkiLCJTWSIsIlNZUiIsIjc2MCIsIkJEIiwiQkdEIiwiNTAiLCJNViIsIk1EViIsIjQ2MiIsImlzTnVtYmVyUmVnZXgiLCJpc1doaXRlc3BhY2VSZWdleCIsImlzTG93ZXJDYXNlIiwiaXNVcHBlckNhc2UiLCJwYXNzT3JUaHJvd0Vycm9yIiwiX2NoYXIiLCJzdHJMZW4iLCJtYXNrQnl0ZSIsIl9ieXRlIiwiX2J5dGUyIiwiX2J5dGUzIiwiX2J5dGU0IiwiX2J5dGU1IiwiX2J5dGU2IiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19UeXBlc19fIiwiVHlwZXMiLCJfbnVtYmVyIiwibWFzayIsIl9kYXRlIiwiZGVmaW5lIiwiVGV4dElucHV0IiwiZWxlbWVudHMiLCJkb2MiLCJjc3NDbGFzc0Vycm9yIiwiY3NzQ2xhc3NTdWNjZXNzIiwib25VcGRhdGUiLCJvbkludmFsaWQiLCJfb25LZXlzdHJva2UiLCJfb25Gb2N1cyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJpbnB1dCIsInBhcmVudENsYXNzIiwiaXNXcmFwcGVkIiwiaW5wdXRJZCIsImlucHV0TmFtZSIsIm9yaWdpbmFsUGF0dGVybiIsImRlZmF1bHRQYXR0ZXJuIiwiZ2VuZXJhdGVQYXR0ZXJuRnJvbU1hc2siLCJwYXR0ZXJuIiwid3JhcCIsInVubWFza0lucHV0IiwibWFza0lmTm90TWFza2VkIiwidW5tYXNrIiwiX3ZhbGlkYXRlSW5wdXQiLCJ0ZXh0SW5wdXQiLCJldmVudFR5cGUiLCJrZXlDb2RlIiwia2V5Q29udGVudCIsImluc2VydFBvc2l0aW9uIiwiZmluZENhcmV0UG9zaXRpb24iLCJtYXNrRXJyb3IiLCJzZWxlY3Rpb25TdGFydCIsInVubWFza2VkVmFsdWUiLCJlcnJvciIsImlzVmFsaWQiLCJ2YWx1ZU1hc2tlZCIsInZhbHVlVW5tYXNrZWQiLCJzdGF0ZSIsIlNVUFBPUlRFRF9NQVNLUyIsIklTX1VOSUNPREVfUFJPUEVSVFlfU1VQUE9SVEVEIiwiZXZhbCIsImlzTWFza2VkVmFsdWUiLCJjYWNoZUtleSIsIm1hc2tBc0FycnkiLCJyZWdleCIsIm1hc2tlZFZhbHVlIiwibWFza0FzQXJyYXkiLCJtYXNrZWRWYWx1ZUFzQXJyYXkiLCJ1bm1hc2tlZCIsIk51bWJlcklucHV0IiwiY291bnREZWNpbWFscyIsIl9hY3R1YWxJbnB1dEhhbmRsZXIiLCJfdW5tYXNrZWRJbnB1dEhhbmRsZXIiLCJhY3R1YWxJbnB1dCIsImFjdHVhbElucHV0SWQiLCJhY3R1YWxJbnB1dE5hbWUiLCJhY3R1YWxJbnB1dFN0ZXAiLCJhY3R1YWxJbnB1dE1heCIsImFjdHVhbElucHV0TWluIiwiYWN0dWFsSW5wdXRHcm91cGluZ1NlcGFyYXRvciIsImFjdHVhbElucHV0RGVjaW1hbFNlcGFyYXRvciIsImFjdHVhbElucHV0Rm9yY2VUcmFpbGluZ1plcm9zIiwiYWN0dWFsSW5wdXRNYXNrIiwiYWN0dWFsSW5wdXRDbGFzc2VzIiwiYWN0dWFsSW5wdXRSZXF1aXJlZCIsInVubWFza2VkSW5wdXQiLCJkZWNpbWFscyIsInN0ZXAiLCJ3cmFwcGVyIiwicmVzdG9yZSIsImNoYXIiLCJieXRlIiwiX19hc3NpZ24iLCJhc3NpZ24iLCJIT09LUyIsImRlZmF1bHRzIiwiX2Rpc2FibGUiLCJfZW5hYmxlIiwiYWxsb3dJbnB1dCIsImFsdEZvcm1hdCIsImFsdElucHV0IiwiYWx0SW5wdXRDbGFzcyIsImFuaW1hdGUiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJhcmlhRGF0ZUZvcm1hdCIsImNsaWNrT3BlbnMiLCJjbG9zZU9uU2VsZWN0IiwiY29uanVuY3Rpb24iLCJkYXRlRm9ybWF0IiwiZGVmYXVsdEhvdXIiLCJkZWZhdWx0TWludXRlIiwiZGVmYXVsdFNlY29uZHMiLCJkaXNhYmxlIiwiZGlzYWJsZU1vYmlsZSIsImVuYWJsZSIsImVuYWJsZVNlY29uZHMiLCJlbmFibGVUaW1lIiwiZXJyb3JIYW5kbGVyIiwiZ2V0V2VlayIsImdpdmVuRGF0ZSIsInNldEhvdXJzIiwic2V0RGF0ZSIsIndlZWsxIiwiaG91ckluY3JlbWVudCIsImlnbm9yZWRGb2N1c0VsZW1lbnRzIiwiaW5saW5lIiwibWludXRlSW5jcmVtZW50IiwibW9udGhTZWxlY3RvclR5cGUiLCJuZXh0QXJyb3ciLCJub0NhbGVuZGFyIiwibm93Iiwib25DaGFuZ2UiLCJvbkNsb3NlIiwib25EYXlDcmVhdGUiLCJvbkRlc3Ryb3kiLCJvbktleURvd24iLCJvbk1vbnRoQ2hhbmdlIiwib25PcGVuIiwib25QYXJzZUNvbmZpZyIsIm9uUmVhZHkiLCJvblZhbHVlVXBkYXRlIiwib25ZZWFyQ2hhbmdlIiwib25QcmVDYWxlbmRhclBvc2l0aW9uIiwicGx1Z2lucyIsInBvc2l0aW9uRWxlbWVudCIsInByZXZBcnJvdyIsInNob3J0aGFuZEN1cnJlbnRNb250aCIsInNob3dNb250aHMiLCJzdGF0aWMiLCJ0aW1lXzI0aHIiLCJ3ZWVrTnVtYmVycyIsImVuZ2xpc2giLCJ3ZWVrZGF5cyIsInNob3J0aGFuZCIsImxvbmdoYW5kIiwibW9udGhzIiwiZGF5c0luTW9udGgiLCJmaXJzdERheU9mV2VlayIsIm9yZGluYWwiLCJudGgiLCJyYW5nZVNlcGFyYXRvciIsIndlZWtBYmJyZXZpYXRpb24iLCJzY3JvbGxUaXRsZSIsInRvZ2dsZVRpdGxlIiwiYW1QTSIsInllYXJBcmlhTGFiZWwiLCJob3VyQXJpYUxhYmVsIiwibWludXRlQXJpYUxhYmVsIiwiaW50IiwiYm9vbCIsImRlYm91bmNlIiwiYXJyYXlpZnkiLCJ0b2dnbGVDbGFzcyIsImVsZW0iLCJjbGFzc05hbWUiLCJjbGFzc0xpc3QiLCJhZGQiLCJjb250ZW50IiwidGV4dENvbnRlbnQiLCJjbGVhck5vZGUiLCJjcmVhdGVOdW1iZXJJbnB1dCIsImlucHV0Q2xhc3NOYW1lIiwib3B0cyIsIm51bUlucHV0IiwiYXJyb3dVcCIsImFycm93RG93biIsImRvTm90aGluZyIsIm1vbnRoVG9TdHIiLCJtb250aE51bWJlciIsInJldkZvcm1hdCIsIkYiLCJkYXRlT2JqIiwibW9udGhOYW1lIiwic2V0TW9udGgiLCJHIiwiSyIsInNob3J0TW9udGgiLCJTIiwiVSIsIl8iLCJ1bml4U2Vjb25kcyIsIndlZWtOdW0iLCJzZXRGdWxsWWVhciIsIloiLCJJU09EYXRlIiwic2V0TWludXRlcyIsInUiLCJ1bml4TWlsbFNlY29uZHMiLCJ5IiwidG9rZW5SZWdleCIsImZvcm1hdHMiLCJ0b0lTT1N0cmluZyIsImNyZWF0ZURhdGVGb3JtYXR0ZXIiLCJfYSIsIl9iIiwiY29uZmlnIiwiX2MiLCJsMTBuIiwiZnJtdCIsIm92ZXJyaWRlTG9jYWxlIiwiZm9ybWF0RGF0ZSIsImFyciIsImNyZWF0ZURhdGVQYXJzZXIiLCJnaXZlbkZvcm1hdCIsInRpbWVsZXNzIiwiY3VzdG9tTG9jYWxlIiwicGFyc2VkRGF0ZSIsImRhdGVPcmlnIiwidG9GaXhlZCIsImRhdGVzdHIiLCJtYXRjaGVkIiwib3BzIiwibWF0Y2hJbmRleCIsInJlZ2V4U3RyIiwidG9rZW5fMSIsImlzQmFja1NsYXNoIiwiZXNjYXBlZCIsImNvbXBhcmVEYXRlcyIsImRhdGUxIiwiZGF0ZTIiLCJkdXJhdGlvbiIsIkZsYXRwaWNrckluc3RhbmNlIiwiZWxlbWVudCIsImluc3RhbmNlQ29uZmlnIiwiZmxhdHBpY2tyIiwiZGVmYXVsdENvbmZpZyIsImJpbmRUb0luc3RhbmNlIiwic2V0Q2FsZW5kYXJXaWR0aCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImNhbGVuZGFyQ29udGFpbmVyIiwidmlzaWJpbGl0eSIsImRpc3BsYXkiLCJkYXlzQ29udGFpbmVyIiwiZGF5c1dpZHRoIiwiZGF5cyIsIm9mZnNldFdpZHRoIiwid2Vla1dyYXBwZXIiLCJyZW1vdmVQcm9wZXJ0eSIsInVwZGF0ZVRpbWUiLCJzZWxlY3RlZERhdGVzIiwic2V0RGVmYXVsdFRpbWUiLCJwcmV2ZW50RGVmYXVsdCIsImlzS2V5RG93biIsImdldEF0dHJpYnV0ZSIsImN1clZhbHVlIiwiZGVsdGEiLCJ3aGljaCIsImlzSG91ckVsZW0iLCJob3VyRWxlbWVudCIsImlzTWludXRlRWxlbSIsIm1pbnV0ZUVsZW1lbnQiLCJpbmNyZW1lbnROdW1JbnB1dCIsInRpbWVXcmFwcGVyIiwicHJldlZhbHVlIiwiX2lucHV0Iiwic2V0SG91cnNGcm9tSW5wdXRzIiwidXBkYXRlVmFsdWUiLCJfZGVib3VuY2VkQ2hhbmdlIiwic2Vjb25kRWxlbWVudCIsImxpbWl0TWluSG91cnMiLCJtaW5UaW1lIiwibWluRGF0ZSIsIm1pbkRhdGVIYXNUaW1lIiwibGF0ZXN0U2VsZWN0ZWREYXRlT2JqIiwibWF4VGltZSIsIm1heERhdGUiLCJtYXhEYXRlSGFzVGltZSIsInNldEhvdXJzRnJvbURhdGUiLCJzZXREZWZhdWx0SG91cnMiLCJtaW5IciIsIm1pbk1pbnV0ZXMiLCJtYXhIciIsIm1heE1pbnV0ZXMiLCJpc01vYmlsZSIsIm9uWWVhcklucHV0IiwiZXZlbnQiLCJjaGFuZ2VZZWFyIiwiaGFuZGxlciIsImV2IiwiYWRkRXZlbnRMaXN0ZW5lciIsIl9oYW5kbGVycyIsIm9uQ2xpY2siLCJldnQiLCJ0cmlnZ2VyQ2hhbmdlIiwidHJpZ2dlckV2ZW50IiwianVtcFRvRGF0ZSIsImp1bXBEYXRlIiwianVtcFRvIiwib2xkWWVhciIsImN1cnJlbnRZZWFyIiwib2xkTW9udGgiLCJjdXJyZW50TW9udGgiLCJidWlsZE1vbnRoU3dpdGNoIiwicmVkcmF3IiwidGltZUluY3JlbWVudCIsImNvbnRhaW5zIiwiaW5wdXRFbGVtIiwiY3JlYXRlRXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwiY3JlYXRlRGF5IiwiZGF5TnVtYmVyIiwiZGF0ZUlzRW5hYmxlZCIsImlzRW5hYmxlZCIsImRheUVsZW1lbnQiLCIkaSIsInRvZGF5RGF0ZUVsZW0iLCJ0YWJJbmRleCIsImlzRGF0ZVNlbGVjdGVkIiwic2VsZWN0ZWREYXRlRWxlbSIsImlzRGF0ZUluUmFuZ2UiLCJpbnNlcnRBZGphY2VudEhUTUwiLCJmb2N1c09uRGF5RWxlbSIsInRhcmdldE5vZGUiLCJmb2N1cyIsIm9uTW91c2VPdmVyIiwiZ2V0Rmlyc3RBdmFpbGFibGVEYXkiLCJzdGFydE1vbnRoIiwiZW5kTW9udGgiLCJzdGFydEluZGV4IiwiZm9jdXNPbkRheSIsImRheUZvY3VzZWQiLCJpc0luVmlldyIsImFjdGl2ZUVsZW1lbnQiLCJib2R5Iiwic3RhcnRFbGVtIiwiZ2l2ZW5Nb250aCIsImxvb3BEZWx0YSIsIm51bU1vbnRoRGF5cyIsImNoYW5nZU1vbnRoIiwiZ2V0TmV4dEF2YWlsYWJsZURheSIsImJ1aWxkTW9udGhEYXlzIiwiZmlyc3RPZk1vbnRoIiwicHJldk1vbnRoRGF5cyIsInV0aWxzIiwiZ2V0RGF5c0luTW9udGgiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwiaXNNdWx0aU1vbnRoIiwicHJldk1vbnRoRGF5Q2xhc3MiLCJuZXh0TW9udGhEYXlDbGFzcyIsImRheUluZGV4IiwiZGF5Q29udGFpbmVyIiwiYnVpbGREYXlzIiwiZnJhZyIsInNob3VsZEJ1aWxkTW9udGgiLCJtb250aHNEcm9wZG93bkNvbnRhaW5lciIsImlubmVySFRNTCIsImJ1aWxkTW9udGgiLCJtb250aEVsZW1lbnQiLCJjb250YWluZXIiLCJtb250aE5hdkZyYWdtZW50Iiwic2VsZWN0ZWRNb250aCIsInllYXJJbnB1dCIsInRhYmluZGV4IiwieWVhckVsZW1lbnQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImRpc2FibGVkIiwiYnVpbGRNb250aHMiLCJtb250aE5hdiIsInByZXZNb250aE5hdiIsInllYXJFbGVtZW50cyIsIm1vbnRoRWxlbWVudHMiLCJuZXh0TW9udGhOYXYiLCJidWlsZFdlZWtkYXlzIiwid2Vla2RheUNvbnRhaW5lciIsInVwZGF0ZVdlZWtkYXlzIiwiaXNPZmZzZXQiLCJfaGlkZVByZXZNb250aEFycm93IiwiX2hpZGVOZXh0TW9udGhBcnJvdyIsInVwZGF0ZU5hdmlnYXRpb25DdXJyZW50TW9udGgiLCJpc0NhbGVuZGFyRWxlbSIsImFwcGVuZFRvIiwiZG9jdW1lbnRDbGljayIsImlzT3BlbiIsImV2ZW50VGFyZ2V0XzEiLCJjb21wb3NlZFBhdGgiLCJnZXRFdmVudFRhcmdldCIsImlzQ2FsZW5kYXJFbGVtZW50IiwiaXNJbnB1dCIsInBhdGgiLCJsb3N0Rm9jdXMiLCJyZWxhdGVkVGFyZ2V0IiwiaXNJZ25vcmVkIiwic29tZSIsInRpbWVDb250YWluZXIiLCJjbG9zZSIsImNsZWFyIiwibmV3WWVhciIsIm5ld1llYXJOdW0iLCJpc05ld1llYXIiLCJkYXRlVG9DaGVjayIsImZyb20iLCJ0byIsImFsbG93S2V5ZG93biIsImFsbG93SW5saW5lS2V5ZG93biIsImJsdXIiLCJvcGVuIiwiaXNUaW1lT2JqIiwiZm9jdXNBbmRDbG9zZSIsInNlbGVjdERhdGUiLCJkZWx0YV8xIiwiY3RybEtleSIsInN0b3BQcm9wYWdhdGlvbiIsImN1cnJlbnRZZWFyRWxlbWVudCIsImVsZW1zIiwicGx1Z2luRWxlbWVudHMiLCJzaGlmdEtleSIsImhvdmVyRGF0ZSIsImZpcnN0RWxlbWVudENoaWxkIiwiaW5pdGlhbERhdGUiLCJyYW5nZVN0YXJ0RGF0ZSIsInJhbmdlRW5kRGF0ZSIsImNvbnRhaW5zRGlzYWJsZWQiLCJtaW5SYW5nZSIsIm1heFJhbmdlIiwiX2xvb3BfMSIsInRzIiwidHMxIiwidHMyIiwiZGF5RWxlbSIsIm91dE9mUmFuZ2UiLCJvblJlc2l6ZSIsInBvc2l0aW9uQ2FsZW5kYXIiLCJtaW5NYXhEYXRlU2V0dGVyIiwiaW52ZXJzZURhdGVPYmoiLCJyZW1vdmVBdHRyaWJ1dGUiLCJzZXR1cExvY2FsZSIsImwxMG5zIiwiZGF0YXNldCIsImN1c3RvbVBvc2l0aW9uRWxlbWVudCIsIl9wb3NpdGlvbkVsZW1lbnQiLCJjYWxlbmRhckhlaWdodCIsImFjYyIsIm9mZnNldEhlaWdodCIsImNhbGVuZGFyV2lkdGgiLCJjb25maWdQb3MiLCJjb25maWdQb3NWZXJ0aWNhbCIsImNvbmZpZ1Bvc0hvcml6b250YWwiLCJpbnB1dEJvdW5kcyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImRpc3RhbmNlRnJvbUJvdHRvbSIsImlubmVySGVpZ2h0IiwiYm90dG9tIiwic2hvd09uVG9wIiwidG9wIiwicGFnZVlPZmZzZXQiLCJsZWZ0IiwicGFnZVhPZmZzZXQiLCJyaWdodCIsInJpZ2h0TW9zdCIsImNlbnRlck1vc3QiLCJzdHlsZVNoZWV0cyIsImJvZHlXaWR0aCIsImNlbnRlckxlZnQiLCJjZW50ZXJJbmRleCIsImNzc1J1bGVzIiwiY2VudGVyU3R5bGUiLCJpbnNlcnRSdWxlIiwiY2VudGVyQmVmb3JlIiwibXNNYXhUb3VjaFBvaW50cyIsImZpbmRQYXJlbnQiLCJjb25kaXRpb24iLCJzZWxlY3RlZERhdGUiLCJzaG91bGRDaGFuZ2VNb250aCIsInNlbGVjdGVkSW5kZXgiLCJhIiwiYiIsInNob3dUaW1lSW5wdXQiLCJzaW5nbGUiLCJsb2FkZWRQbHVnaW5zIiwiX2JpbmQiLCJfc2V0SG91cnNGcm9tRGF0ZSIsIl9wb3NpdGlvbkNhbGVuZGFyIiwidHJpZ2dlckNoYW5nZUV2ZW50IiwidG9Jbml0aWFsIiwibW9iaWxlSW5wdXQiLCJfaW5pdGlhbERhdGUiLCJfY3JlYXRlRWxlbWVudCIsImRlc3Ryb3kiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibGFzdENoaWxkIiwiX3R5cGUiLCJjbGljayIsIndhc09wZW4iLCJzZWxlY3QiLCJvcHRpb24iLCJDQUxMQkFDS1MiLCJzZXRTZWxlY3RlZERhdGUiLCJ0b2dnbGUiLCJpbnB1dERhdGUiLCJkYXRlcyIsInBhcnNlRGF0ZVJ1bGVzIiwicnVsZSIsImhvb2tzIiwiaW5pdEV2ZW50IiwiZ2V0RGF0ZVN0ciIsImRPYmoiLCJtb2JpbGVGb3JtYXRTdHIiLCJvbk1vbnRoTmF2Q2xpY2siLCJpc1ByZXZNb250aCIsImlzTmV4dE1vbnRoIiwiYm9vbE9wdHMiLCJ1c2VyQ29uZmlnIiwidGltZU1vZGUiLCJkZWZhdWx0RGF0ZUZvcm1hdCIsImRlZmF1bHRBbHRGb3JtYXQiLCJfbWluRGF0ZSIsIl9tYXhEYXRlIiwibWluTWF4VGltZVNldHRlciIsIl9taW5UaW1lIiwiX21heFRpbWUiLCJob29rIiwicGx1Z2luQ29uZiIsInBhcnNlQ29uZmlnIiwibm9kZU5hbWUiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwicHJlbG9hZGVkRGF0ZSIsImRlZmF1bHREYXRlIiwiX3Nob3dUaW1lSW5wdXQiLCJzZXR1cERhdGVzIiwieXIiLCJmcmFnbWVudCIsIl9faGlkZVByZXZNb250aEFycm93IiwiX19oaWRlTmV4dE1vbnRoQXJyb3ciLCJpbm5lckNvbnRhaW5lciIsImJ1aWxkV2Vla3MiLCJyQ29udGFpbmVyIiwic2VwYXJhdG9yIiwiaG91cklucHV0IiwibWludXRlSW5wdXQiLCJtaWxpdGFyeTJhbXBtIiwic2Vjb25kSW5wdXQiLCJ0aXRsZSIsImJ1aWxkVGltZSIsImN1c3RvbUFwcGVuZCIsIm5vZGVUeXBlIiwiYnVpbGQiLCJpbnB1dFR5cGUiLCJkZWZhdWx0VmFsdWUiLCJzZXR1cE1vYmlsZSIsImRlYm91bmNlZFJlc2l6ZSIsIm9udG91Y2hzdGFydCIsImNhcHR1cmUiLCJiaW5kRXZlbnRzIiwiaXNTYWZhcmkiLCJpbml0IiwiX2ZsYXRwaWNrciIsIm5vZGVMaXN0IiwiSFRNTEVsZW1lbnQiLCJpbnN0YW5jZXMiLCJzb3VyY2UiLCJhcmdzXzEiLCJIVE1MQ29sbGVjdGlvbiIsIk5vZGVMaXN0Iiwic2VsZWN0b3IiLCJOb2RlIiwibG9jYWxpemUiLCJzZXREZWZhdWx0cyIsImpRdWVyeSIsImZwX2luY3IiLCJDb21wb25lbnQiLCJoYW5kbGUiLCJnZXRQcm90b3R5cGVPZiIsImRlc2NzIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImtsYXNzIiwiZ2V0T3duS2V5cyIsImRlc2MiLCJhdXRvYmluZE1ldGhvZCIsIlN5bnRheEVycm9yIiwiV2Vha01hcCIsIm1hcFN0b3JlIiwic3VwZXJTdG9yZSIsImdldEJvdW5kU3VwZXIiLCJib3VuZEZuIiwiY3JlYXRlRGVmYXVsdFNldHRlciIsImF1dG9iaW5kQ2xhc3MiLCJkZWNvcmF0ZSIsIkZVTkNUSU9OX1JFR0VYUCIsIlN5bnRheEVycm9yUmVwb3J0ZXIiLCJwYXJlbnRLbGFzcyIsImNoaWxkS2xhc3MiLCJwYXJlbnREZXNjcmlwdG9yIiwiY2hpbGREZXNjcmlwdG9yIiwidG9waWMiLCJfZXh0cmFjdEZ1bmN0aW9uU2lnbmF0dXJlIiwiX2dldFRvcGljIiwiX2V4dHJhY3RUb3BpY1NpZ25hdHVyZSIsIm1zZyIsInJlcG9ydGVyIiwicGFyZW50VHlwZSIsImdldERlc2NyaXB0b3JUeXBlIiwiY2hpbGRUeXBlIiwicGFyZW50VmFsdWVUeXBlIiwiY2hpbGRWYWx1ZVR5cGUiLCJjaGVja0Z1bmN0aW9uU2lnbmF0dXJlcyIsImNoZWNrRGF0YURlc2NyaXB0b3JzIiwicGFyZW50SGFzR2V0dGVyIiwiY2hpbGRIYXNHZXR0ZXIiLCJwYXJlbnRIYXNTZXR0ZXIiLCJjaGlsZEhhc1NldHRlciIsImNoZWNrQWNjZXNzb3JEZXNjcmlwdG9ycyIsInN1Z2dlc3Rpb25UcmFuc2Zvcm1zIiwic3VwZXJLbGFzcyIsInN1cGVyRGVzY3JpcHRvciIsInN1Z2dlc3RlZEtleSIsInN1Z2dlc3Rpb24iLCJmaW5kUG9zc2libGVBbHRlcm5hdGl2ZXMiLCJjaGVja0Rlc2NyaXB0b3JzIiwiY3NzTWFwcGluZyIsInVzZVNvdXJjZU1hcCIsInNvdXJjZU1hcHBpbmciLCJzb3VyY2VVUkxzIiwiY3NzV2l0aE1hcHBpbmdUb1N0cmluZyIsImFscmVhZHlJbXBvcnRlZE1vZHVsZXMiLCJtZWRpYVF1ZXJ5IiwiYmFzZUdldFRhZyIsImdldFJhd1RhZyIsIm9iamVjdFRvU3RyaW5nIiwiaXNPYmplY3RMaWtlIiwiaXNEZXNjcmlwdG9yIiwiZW50cnlBcmdzIiwiaGFuZGxlRGVzY3JpcHRvciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImdldE93blByb3BlcnR5TmFtZXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJsYXp5SW5pdGlhbGl6ZSIsImlzT2JqZWN0IiwiZXEiLCJpc0FycmF5TGlrZSIsImlzTGVuZ3RoIiwiaXNGdW5jdGlvbiIsIkJvb2xlYW5Td2l0Y2giLCJUZW1wbGF0ZVJlbmRlcmVyIiwiYmFzZUFzc2lnblZhbHVlIiwiZ2V0TmF0aXZlIiwiYmFzZVJlc3QiLCJzZXRUb1N0cmluZyIsIm92ZXJSZXN0IiwiaXNJdGVyYXRlZUNhbGwiLCJpc0luZGV4IiwiYXJyYXlMaWtlS2V5cyIsImlzQXJndW1lbnRzIiwiaXNCdWZmZXIiLCJpc1R5cGVkQXJyYXkiLCJiYXNlVGltZXMiLCJvcmlnaW5hbE1vZHVsZSIsImlzUHJvdG90eXBlIiwiaXNFcnJvciIsImlzUGxhaW5PYmplY3QiLCJvdmVyQXJnIiwiYXJyYXlNYXAiLCJyZUludGVycG9sYXRlIiwiYmFzZVRvU3RyaW5nIiwidG9EYXRlIiwidHpQYXJzZVRpbWV6b25lIiwic3ViTWlsbGlzZWNvbmRzIiwidHpUb2tlbml6ZURhdGUiLCJFdmVudHNNaXhpbiIsIkRhdGVUaW1lSW5wdXQiLCJCb29sZWFuRWRpdG9yIiwiZ2V0T3B0aW9uIiwiX3RydWVWYWx1ZSIsIl9mYWxzZVZhbHVlIiwiX2NvbnZlcnRWYWx1ZSIsInN3aXRjaGVyIiwiX3N3aXRjaGVyIiwiX3ZhbHVlIiwidHJ1ZVZhbHVlIiwiZmFsc2VWYWx1ZSIsInZhbHVlQXNTdHJpbmciLCJfZ3VpIiwiZmFsbGJhY2siLCJBR3JpZENvbXBvbmVudHNNZXRhQ29uZmlnIiwid2luIiwiaW5pdGlhbFZhbHVlIiwibGlzdGVuZXIiLCJfb25DbGljayIsIl9vbktleWRvd24iLCJnZXREb2MiLCJib29sU3dpdGNoIiwibGFiZWwiLCJvdmVycmlkZSIsImF1dG9iaW5kIiwiaW5pdGlhbGl6ZXIiLCJsb2NhdGlvbiIsImJhc2VVcmwiLCJjdXJyZW50RGlyIiwidW5xdW90ZWRPcmlnVXJsIiwib3JpZ1VybCIsIm5ld1VybCIsIkJvb2xlYW5SZW5kZXJlciIsImlzSW5pdCIsImJvb2xlYW5UcnVlUmVuZGVyVmFsdWUiLCJib29sZWFuRmFsc2VSZW5kZXJWYWx1ZSIsImJvb2xlYW5UcnVlVmFsdWUiLCJib29sZWFuRmFsc2VWYWx1ZSIsIl9nZXRTd2l0Y2hlciIsIkJvb2xlYW5GaWx0ZXIiLCJ0b1RpdGxlQ2FzZSIsInBocmFzZSIsIndvcmQiLCJfYm9vbGVhbkZpbHRlclRyYW5zbGF0aW9uIiwidHJhbnNsYXRlIiwiaXNDbGVhckZpbHRlciIsImlzUmVzZXRCdXR0b24iLCJpc0FwcGx5QnV0dG9uIiwidHJ1ZSIsImZhbHNlIiwicmVzZXQiLCJfb25SYWRpb0NoYW5nZSIsImFwcGx5RmlsdGVyUGFuZWwiLCJfcGFyYW1zIiwiZmlsdGVyVmFsdWVHZXR0ZXIiLCJ2YWx1ZUdldHRlciIsIl9maWx0ZXJUZXh0IiwiZmlsdGVyVHlwZSIsImZpbHRlclRleHRBc1N0cmluZyIsImh0bWwiLCJ0bXAiLCJOdW1iZXJFZGl0b3IiLCJzdGFydFZhbHVlIiwiQmFzaXMiLCJfb25OdW1iZXJJbnB1dEludmFsaWQiLCJjYXN0ZWQiLCJyZXRWYWx1ZSIsIl9faXNNYXNrZWRfXyIsInBhcnNlVmFsdWUiLCJfbWFza2VkIiwiVGV4dEVkaXRvciIsIl9vblRleHRJbnB1dEludmFsaWQiLCJ0ZW1wbGF0ZSIsIl9jb21waWxlZFRlbXBsYXRlIiwicmVFbXB0eVN0cmluZ0xlYWRpbmciLCJyZUVtcHR5U3RyaW5nTWlkZGxlIiwicmVFbXB0eVN0cmluZ1RyYWlsaW5nIiwicmVFc1RlbXBsYXRlIiwicmVOb01hdGNoIiwicmVVbmVzY2FwZWRTdHJpbmciLCJzZXR0aW5ncyIsInRlbXBsYXRlU2V0dGluZ3MiLCJndWFyZCIsImFzc2lnbkluV2l0aCIsImN1c3RvbURlZmF1bHRzQXNzaWduSW4iLCJpbXBvcnRzIiwiaW1wb3J0c0tleXMiLCJpbXBvcnRzVmFsdWVzIiwiYmFzZVZhbHVlcyIsImludGVycG9sYXRlIiwicmVEZWxpbWl0ZXJzIiwic291cmNlVVJMIiwiaW50ZXJwb2xhdGVWYWx1ZSIsImVzY2FwZVN0cmluZ0NoYXIiLCJpc0VzY2FwaW5nIiwiZXNjYXBlVmFsdWUiLCJpc0V2YWx1YXRpbmciLCJldmFsdWF0ZVZhbHVlIiwidmFyaWFibGUiLCJhdHRlbXB0IiwiY3JlYXRlQXNzaWduZXIiLCJjb3B5T2JqZWN0Iiwia2V5c0luIiwiaXNOZXciLCJjdXN0b21pemVyIiwiYXNzaWduVmFsdWUiLCJvYmpWYWx1ZSIsImJhc2VJc05hdGl2ZSIsInJlSXNIb3N0Q3RvciIsImZ1bmNQcm90byIsImZ1bmNUb1N0cmluZyIsInJlSXNOYXRpdmUiLCJpc01hc2tlZCIsInRvU291cmNlIiwibmF0aXZlT2JqZWN0VG9TdHJpbmciLCJpc093biIsInVpZCIsIm1hc2tTcmNLZXkiLCJjb3JlSnNEYXRhIiwic291cmNlcyIsImFzc2lnbmVyIiwibmF0aXZlTWF4Iiwib3RoZXJBcmdzIiwic2hvcnRPdXQiLCJiYXNlU2V0VG9TdHJpbmciLCJjb25zdGFudCIsIm5hdGl2ZU5vdyIsImNvdW50IiwibGFzdENhbGxlZCIsInN0YW1wIiwicmVtYWluaW5nIiwiYmFzZUtleXNJbiIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiYmFzZUlzQXJndW1lbnRzIiwiZnJlZUV4cG9ydHMiLCJmcmVlTW9kdWxlIiwiQnVmZmVyIiwic3R1YkZhbHNlIiwibm9kZUlzVHlwZWRBcnJheSIsIm5vZGVVdGlsIiwiYmFzZVVuYXJ5IiwiYmFzZUlzVHlwZWRBcnJheSIsInR5cGVkQXJyYXlUYWdzIiwiZnJlZVByb2Nlc3MiLCJ0eXBlcyIsIm5hdGl2ZUtleXNJbiIsImlzUHJvdG8iLCJvYmplY3RDdG9yU3RyaW5nIiwicHJvdG8iLCJnZXRQcm90b3R5cGUiLCJzdHJpbmdFc2NhcGVzIiwiYmFzZUtleXMiLCJuYXRpdmVLZXlzIiwicmVFc2NhcGUiLCJyZUV2YWx1YXRlIiwiZXNjYXBlIiwicmVVbmVzY2FwZWRIdG1sIiwicmVIYXNVbmVzY2FwZWRIdG1sIiwiZXNjYXBlSHRtbENoYXIiLCJiYXNlUHJvcGVydHlPZiIsInN5bWJvbFByb3RvIiwic3ltYm9sVG9TdHJpbmciLCJpc1N5bWJvbCIsIkltYWdlUmVuZGVyZXIiLCJpbWFnZVdpZHRoIiwiaW1hZ2VIZWlnaHQiLCJpbWFnZUxpc3QiLCJEYXRlVGltZUZpbHRlciIsIlRPS0VOUyIsIkNvbmRpdGlvblBhbmVsIiwid2l0aEV2ZW50c01peGluIiwiX2ZpbHRlclRpbWVJbnB1dCIsIl9maWx0ZXJUb0RhdGVUaW1lSW5wdXQiLCJfZmlsdGVyT3B0aW9ucyIsIl9kZWZhdWx0T3B0aW9uIiwib3B0aW9uc1RyYW5zbGF0aW9ucyIsImd1aSIsImZpbHRlck9wdGlvbnMiLCJzZWxlY3RFbCIsImZpbHRlcklucHV0IiwiZmlsdGVyVG9JbnB1dCIsImZpbHRlckRhdGVUbyIsIk9OX0NPTkRJVElPTl9DSEFOR0VEIiwicmVhZG9ubHkiLCJmaWx0ZXJUbyIsIkpvaW5Db25kaXRpb25QYW5lbCIsIl9maXJzdENvbmRpdGlvblBhbmVsIiwiX3NlY29uZENvbmRpdGlvblBhbmVsIiwiX29wZXJhdG9yUGFuZWwiLCJpZE9uZSIsImlkVHdvIiwic2Vjb25kQ29uZGl0aW9uR3VpIiwib3BlcmF0b3JQYW5lbEd1aSIsIk9OX0pPSU5fQ09ORElUSU9OX0NIQU5HRUQiLCJjb25kaXRpb24xIiwiY29uZGl0aW9uMiIsIm9wZXJhdG9yIiwiX0pvaW5Db25kaXRpb25QYW5lbCIsIl9zdGF0ZSIsIl9kb2VzRmlsdGVyUGFzc09wdGlvbnMiLCJpblJhbmdlSW5jbHVzaXZlIiwiZG9lc1Bhc3NGaXJzdENvbmRpdGlvbiIsIl9kb2VzUGFzc0NvbmRpdGlvbiIsImRvZXNQYXNzU2Vjb25kQ29uZGl0aW9uIiwiY2xvbmUiLCJkYXRlVGltZU1hc2siLCJCQmoiLCJmaXJzdENvbmRpdGlvbkFzU3RyaW5nIiwic2Vjb25kQ29uZGl0aW9uQXNTdHJpbmciLCJvcGVyYXRvckFzU3RyaW5nIiwicGFzc2VkIiwidXRjVG9ab25lZFRpbWUiLCJpc0FwcGx5QnV0dG9uQWN0aXZlIiwicmVxdWlyZWRBcmdzIiwidG9JbnRlZ2VyIiwiYWRkTWlsbGlzZWNvbmRzIiwiZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyIsImdldERhdGVNaWxsaXNlY29uZHNQYXJ0Iiwic3VwZXJDbGFzcyIsIl9faGFuZGxlcnMiLCJyZWdpc3RlcmVkSGFuZGxlciIsImhhbmRsZXJzIiwiaXNFZGl0b3IiLCJwaWNrZXIiLCJkYXRlVGltZUZvcm1hdHRlciIsIndlZWtEYXlzU2hvcnQiLCJ3ZWVrRGF5c0xvbmciLCJtb250aHNTaG9ydCIsIm1vbnRoc0xvbmciLCJPTl9EQVRFX0NIQU5HRUQiLCJEYXRlVGltZUVkaXRvciIsIkN1c3RvbUV2ZW50IiwiYnViYmxlcyIsImNhbmNlbGFibGUiLCJkZXRhaWwiLCJpbml0Q3VzdG9tRXZlbnQiLCJFdmVudCIsImxpY2Vuc2UiLCJhZ0dyaWQiLCJMaWNlbnNlTWFuYWdlciIsInNldExpY2Vuc2VLZXkiLCJnd19hZGRHcmlkIiwicGFyc2VkT3B0aW9ucyIsImRlZXBQYXJzZWRPcHRpb25zIiwiZ2V0RGF0YVBhdGhUZW1wbGF0ZSIsImdldERhdGFQYXRoIiwiZmluYWxPcHRpb25zIiwiZ2V0RG9jdW1lbnQiLCJvbkNlbGxFZGl0aW5nU3RhcnRlZCIsImd3X29uQ2VsbEVkaXRpbmdFdmVudCIsIm9uQ2VsbEVkaXRpbmdTdG9wcGVkIiwib25DZWxsVmFsdWVDaGFuZ2VkIiwib25Sb3dFZGl0aW5nU3RhcnRlZCIsImd3X29uUm93RWRpdGluZ0V2ZW50Iiwib25Sb3dWYWx1ZUNoYW5nZWQiLCJvblJvd0VkaXRpbmdTdG9wcGVkIiwib25DZWxsQ2xpY2tlZCIsImd3X29uQ2VsbENsaWNrRXZlbnQiLCJvbkNlbGxEb3VibGVDbGlja2VkIiwib25HcmlkUmVhZHkiLCJnd19vblJlYWR5RXZlbnQiLCJnd19nZXRSb3dOb2RlSWQiLCJnZXRDb250ZXh0TWVudUl0ZW1zIiwiZ3dfZ2V0Q29udGV4dE1lbnUiLCJnZXRDaGFydFRvb2xiYXJJdGVtcyIsImd3X2dldENoYXJ0VG9vbGJhckl0ZW1zIiwicG9wdXBQYXJlbnQiLCJvblJvd0RvdWJsZUNsaWNrZWQiLCJnd19kZWJvdW5jZSIsImd3X29uUm93RG91YmxlQ2xpY2tlZCIsIm9uUm93Q2xpY2tlZCIsImd3X29uUm93Q2xpY2tlZCIsIm9uU2VsZWN0aW9uQ2hhbmdlZCIsImd3X29uU2VsZWN0aW9uQ2hhbmdlZCIsIm9uUmFuZ2VTZWxlY3Rpb25DaGFuZ2VkIiwiZ3dfb25SYW5nZVNlbGVjdGlvbkNoYW5nZWQiLCJjb21wb25lbnRzIiwiQWdHcmlkQ29tcG9uZW50cyIsIkhUTUxUb29sdGlwIiwiZ3dfZ2V0V2luZG93IiwibmF2aWdhdGVUb05leHRDZWxsIiwiZ3dfbmF2aWdhdGVUb05leHRSb3ciLCJ0cmVlRGF0YSIsImdldERhdGFQYXRoVGVtcGxhdGVDb21wbGllZCIsImd3X3BhcnNlT3B0aW9ucyIsIkdyaWQiLCJncmlkSWQiLCJwYXJzZU1lbnUiLCJtZW51IiwiZ3dfcGFyc2VOb2RlRnJvbUV2ZW50IiwiZ3dfc2VuZEV2ZW50IiwidiIsImJ1aWxkQ29udGV4dE1lbnVBY3Rpb24iLCJjb250ZXh0TWVudSIsIkdXX0VWRU5UX1JPV19ET1VCTEVfQ0xJQ0siLCJHV19FVkVOVF9ST1dfQ0xJQ0siLCJHV19FVkVOVF9ST1dfU0VMRUNUIiwiR1dfRVZFTlRfUkFOR0VfU0VMRUNUSU9OX0NIQU5HRUQiLCJnd19lc2NhcGUiLCJDRUxMX0NMSUNLSU5HX0VWRU5UU19NQVAiLCJjZWxsQ2xpY2tlZCIsIkdXX0VWRU5UX0NFTExfQ0xJQ0siLCJjZWxsRG91YmxlQ2xpY2tlZCIsIkdXX0VWRU5UX0NFTExfRE9VQkxFX0NMSUNLIiwiQ0VMTF9FRElUSU5HX0VWRU5UU19NQVAiLCJST1dfRURJVElOR19FVkVOVFNfTUFQIiwiY2VsbEVkaXRpbmdTdGFydGVkIiwiR1dfRVZFTlRfQ0VMTF9FRElUSU5HX1NUQVJURUQiLCJjZWxsRWRpdGluZ1N0b3BwZWQiLCJHV19FVkVOVF9DRUxMX0VESVRJTkdfU1RPUFBFRCIsImNlbGxWYWx1ZUNoYW5nZWQiLCJHV19FVkVOVF9DRUxMX1ZBTFVFX0NIQU5HRUQiLCJyb3dFZGl0aW5nU3RhcnRlZCIsIkdXX0VWRU5UX1JPV19FRElUSU5HX1NUQVJURUQiLCJyb3dFZGl0aW5nU3RvcHBlZCIsIkdXX0VWRU5UX1JPV19FRElUSU5HX1NUT1BQRUQiLCJyb3dWYWx1ZUNoYW5nZWQiLCJHV19FVkVOVF9ST1dfVkFMVUVfQ0hBTkdFRCIsIl9lIiwic3RhdGVEZWJvdW5jZSIsImNoYW5nZUV2ZW50IiwiZ3dfb25TdGF0ZUNoYW5nZWQiLCJrZXlib2FyZERlYm91bmNlIiwia2V5ZG93bkV2ZW50IiwiZ3dfb25LZXlkb3duIiwiR1dfRVZFTlRfR1JJRF9TVEFURV9DSEFOR0UiLCJrYyIsImFrIiwiYWx0S2V5Iiwic2siLCJjayIsIkdXX0VWRU5UX0tFWVBSRVNTIiwiZXZhbHVhdGUiLCJlc1RlbXBsYXRlVmFsdWUiLCJzcmNJbmRleCIsIklFX1BST1RPIiwicHJvY2VzcyIsImJpbmRpbmciLCJzcmNWYWx1ZSIsImNociIsImVHdWkiLCJpc0hlYWRlciIsImlzR3JvdXBlZEhlYWRlciIsInRoZW1lIiwiZ3JpZENvcmUiLCJlR3JpZERpdiIsImVuZHNXaXRoIiwidG9vbHRpcEZpZWxkIiwicGFzc2VkUGFyYW1zIiwic2V0Q29sdW1uU3RhdGUiLCJzZXRDb2x1bW5Hcm91cFN0YXRlIiwiZ3JvdXBzIiwic2V0RmlsdGVyTW9kZWwiLCJmaWx0ZXJzIiwiZ2V0Q29sdW1uU3RhdGUiLCJnZXRDb2x1bW5Hcm91cFN0YXRlIiwiZ2V0U29ydE1vZGVsIiwiZ2V0RmlsdGVyTW9kZWwiLCJzZXRTaWRlQmFyVmlzaWJsZSIsInRvb2xwYW5lbElkIiwib3BlblRvb2xQYW5lbCIsImNsb3NlVG9vbFBhbmVsIiwic2V0RnVuY3Rpb25zUmVhZE9ubHkiLCJnZXRTdGF0dXNQYW5lbCIsInNldFZpc2libGUiLCJzaG93TG9hZGluZ092ZXJsYXkiLCJzaG93Tm9Sb3dzT3ZlcmxheSIsImhpZGVPdmVybGF5IiwicnVsZXMiLCJqc3MiLCJmb3JEb2N1bWVudCIsInNpbmdsZUNvbG9uRm9yUHNldWRvRWxlbWVudHMiLCJhZGpTZWxBdHRyUmVnZXgiLCJkb3VibGVDb2xvblBzZXVkb0VsUmVnZXgiLCJzaW5nbGVDb2xvblBzZXVkb0VsUmVnZXgiLCJnZXRSdWxlcyIsInNoZWV0IiwicmVzdWx0cyIsInNlbGVjdG9yVGV4dCIsInN3YXBBZGpTZWxBdHRyIiwic3dhcFBzZXVkb0VsU3ludGF4IiwiYWRkUnVsZSIsImRvdWJsZUNvbG9uU2VsZWN0b3IiLCJzaW5nbGVDb2xvblNlbGVjdG9yIiwidG9TaW5nbGVDb2xvblBzZXVkb0VsZW1lbnRzIiwidG9Eb3VibGVDb2xvblBzZXVkb0VsZW1lbnRzIiwiYWRkUnVsZVRvU2hlZXQiLCJhZGRQc2V1ZG9FbGVtZW50UnVsZSIsInN1Ym1hdGNoMSIsInN1Ym1hdGNoMiIsInN1Ym1hdGNoMyIsImV4dGVuZCIsImRlc3QiLCJzcmMiLCJhZ2dyZWdhdGVTdHlsZXMiLCJhZ2dyZWdhdGUiLCJkZWNsYXJlZFByb3BlcnRpZXMiLCJkZWNsYXJlZCIsInRvQ2FtZWxDYXNlIiwic3dhcCIsImxhc3RJbmRleCIsInNldFN0eWxlUHJvcGVydGllcyIsInByb3BlcnRpZXMiLCJpbXBvcnRhbnRJbmRleCIsInNldFByb3BlcnR5Iiwic3VibWF0Y2giLCJ1bkNhbWVsQ2FzZSIsIkpzcyIsInNoZWV0cyIsImRlZmF1bHRTaGVldCIsImdldFNlbGVjdG9yc0FuZFJ1bGVzIiwiZ2V0QWxsIiwiX2NyZWF0ZVNoZWV0Iiwib2xkUHJvcHMiLCJuZXdQcm9wcyIsInRyYW5zZm9ybUNhbWVsQ2FzZWRQcm9wZXJ0eU5hbWVzIiwiX3JlbW92ZVNoZWV0IiwiZGVsZXRlUnVsZSIsInJlbW92ZVJ1bGUiLCJzdHlsZU5vZGUiLCJvd25lck5vZGUiLCJsb2NhbHMiLCJwcm90b2NvbCIsImhvc3QiLCJwYXRobmFtZSIsImZ1bGxNYXRjaCIsIiQxIl0sIm1hcHBpbmdzIjoiNERBQ0UsSUFBSUEsRUFBbUIsR0FHdkIsU0FBU0MsRUFBb0JDLEdBRzVCLEdBQUdGLEVBQWlCRSxHQUNuQixPQUFPRixFQUFpQkUsR0FBVUMsUUFHbkMsSUFBSUMsRUFBU0osRUFBaUJFLEdBQVksQ0FDekNHLEVBQUdILEVBQ0hJLEdBQUcsRUFDSEgsUUFBUyxJQVVWLE9BTkFJLEVBQVFMLEdBQVVNLEtBQUtKLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVNGLEdBRy9ERyxFQUFPRSxHQUFJLEVBR0pGLEVBQU9ELFFBMERmLE9BckRBRixFQUFvQlEsRUFBSUYsRUFHeEJOLEVBQW9CUyxFQUFJVixFQUd4QkMs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QUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsSUFBSyxFQUNMaE4sR0FBSSxFQUNKaU4sSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxFQUFHLEVBQ0hDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxHQUFJLEVBQ0pDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxFQUNMQyxJQUFLLEVBQ0xDLEdBQUksRUFDSkMsSUFBSyxF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S0FBTzVZLEVBQVM2WSxLQUM5QzNZLEVBQWFELEVBQVVELEVBQVM4WSxTQUFTemhFLFFBQVEsWUFBYSxLQTJEbkUsT0EvQmV5UyxFQUFJelMsUUFBUSx1REFBdUQsU0FBUzBoRSxFQUFXM1ksR0FFckcsSUFXSUMsRUFYQUYsRUFBa0JDLEVBQ3BCN2lELE9BQ0FsRyxRQUFRLFlBQVksU0FBU3BDLEVBQUcrakUsR0FBSyxPQUFPQSxLQUM1QzNoRSxRQUFRLFlBQVksU0FBU3BDLEVBQUcrakUsR0FBSyxPQUFPQSxLQUc5QyxNQUFJLG9EQUFvRGh5RCxLQUFLbTVDLEdBQ3BENFksR0FRUjFZLEVBRnFDLElBQWxDRixFQUFnQnJnRCxRQUFRLE1BRWxCcWdELEVBQ2tDLElBQWpDQSxFQUFnQnJnRCxRQUFRLEtBRXpCbWdELEVBQVVFLEVBR1ZELEVBQWFDLEVBQWdCOW9ELFFBQVEsUUFBUyxJQUlqRCxPQUFTUCxLQUFLQyxVQUFVc3BELEdBQVUsVSxnQkNsRjNDLElBQUlyaEIsRUFBVSxFQUFRLEtBRUEsaUJBQVpBLElBQXNCQSxFQUFVLENBQUMsQ0FBQ3pxQyxFQUFPQyxFQUFJd3FDLEVBQVMsTUFPaEUsSUFBSXZuQyxFQUFVLENBQUMsS0FBTSxFQUVyQixlQVBJa1EsRUFRSixXQUFxQixXQUNMLE9BQU9qUixPQUFPK0MsT0FBT3RDLFNBQVN5UixPQUdqQyxFQUFRLEdBQVIsQ0FBNkRvMkIsRUFBU3ZuQyxHQUVoRnVuQyxFQUFRMjVCLFNBQVFwa0UsRUFBT0QsUUFBVTBxQyxFQUFRMjVCLFMsY0NuQjVDcGtFLEVBQU9ELFFBQVUiLCJmaWxlIjoiYmJqLWdyaWQtd2lkZ2V0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDM5KTtcbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QEJhc2lzLkFnR3JpZENvbXBvbmVudHMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKipcbiAqIEdldCBkb2N1bWVudFxuICpcbiAqIEdldCB0aGUgZG9jdW1lbnQgaW5zdGFuY2UgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IEJCaiBlbnZcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IERvY3VtZW50IGluc3RhbmNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19nZXREb2N1bWVudCgpIHtcbiAgcmV0dXJuIHR5cGVvZiAkZG9jICE9PSAndW5kZWZpbmVkJyA/ICRkb2MgOiBkb2N1bWVudFxufVxuXG4vKipcbiAqIEdldCB3aW5kb3dcbiAqXG4gKiBHZXQgdGhlIHdpbmRvdyBpbnN0YW5jZSBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgQkJqIGVudlxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gV2luZG93IGluc3RhbmNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19nZXRXaW5kb3coKSB7XG4gIHJldHVybiB0eXBlb2YgJHduZCAhPT0gJ3VuZGVmaW5lZCcgPyAkd25kIDogd2luZG93XG59XG5cbi8qKlxuICogRXNjYXBlIFZhbHVlXG4gKlxuICogQ2hhbmdlIG51bGwgYW5kIHVuZGVmaW5lZCB0byBlbXB0eSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSBlc2NhcGVkIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19lc2NhcGUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6ICcnXG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSB1bmlxdWUgdXVpZFxuICogQHNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMDUwMzQvY3JlYXRlLWd1aWQtdXVpZC1pbi1qYXZhc2NyaXB0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd191dWlkKCkge1xuICByZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbihjKSB7XG4gICAgdmFyIHIgPSAoTWF0aC5yYW5kb20oKSAqIDE2KSB8IDAsXG4gICAgICB2ID0gYyA9PSAneCcgPyByIDogKHIgJiAweDMpIHwgMHg4XG4gICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpXG4gIH0pXG59XG5cbi8qKlxuICogR2V0IEdyaWRcbiAqXG4gKiBSZXRyaWV2ZSB0aGUgZ3JpZCBpbnN0YW5jZSBmcm9tIGB3aW5kb3cuQkJqR3JpZEV4V2lkZ2V0YCBhcnJheVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCdzIGlkXG4gKlxuICogQHJldHVybiB7T2JqZWN0fG51bGx9IFRoZSBncmlkJ3MgaW5zdGFuY2Ugb2ZyIG51bGxcbiAqIEB0aHJvd3MgVHlwZUVycm9yIHdoZW4gdGhlIGdyaWQgaW5zdGFuY2UgaXMgbm90IGZvdW5kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19nZXRHcmlkKGlkKSB7XG4gIHdpbmRvdy5CQmpHcmlkRXhXaWRnZXQgPSB3aW5kb3cuQkJqR3JpZEV4V2lkZ2V0IHx8IHt9XG4gIGNvbnN0IGdyaWQgPSB3aW5kb3cuQkJqR3JpZEV4V2lkZ2V0W2lkXSB8fCBudWxsXG5cbiAgaWYgKCFncmlkKSB7XG4gICAgY29uc3QgcmVnaXN0ZXJlZEdyaWRzID0gSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMod2luZG93LkJCakdyaWRFeFdpZGdldCkpXG4gICAgLy9nZXRGdW5jQXJncyhmdW5jKS5mb3JFYWNoKChrZXksIGkpID0+IGFyZ3NPYmpba2V5XSA9IGFyZ3NbaV0pO1xuXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgIGBcXG5cXG5bR3JpZCBOb3QgRm91bmRdIFRoZSBtZXRob2QgYXNrZWQgZm9yIG5vbi1leGlzdGVudCBncmlkIGluc3RhbmNlLlxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuUmVxdWlyZWQgR3JpZCBJZCA6ICR7aWR9ICAgXG5SZWdpc3RlcmVkIEdyaWRzIDogJHtyZWdpc3RlcmVkR3JpZHN9XG5gXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGdyaWRcbn1cblxuLyoqXG4gKiBBZGQgR3JpZFxuICpcbiAqIFN0b3JlIGEgbmV3IGdyaWQgaW5zdGFuY2UgYnkgaW4gdGhlIGB3aW5kb3cuQkJqR3JpZEV4V2lkZ2V0YCBhcnJheVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAgVGhlIGdyaWQncyBvcHRpb25zXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBTdG9yZWQgZ3JpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfYWRkR3JpZChpZCwgb3B0aW9ucykge1xuICB3aW5kb3cuQkJqR3JpZEV4V2lkZ2V0ID0gd2luZG93LkJCakdyaWRFeFdpZGdldCB8fCB7fVxuICB3aW5kb3cuQkJqR3JpZEV4V2lkZ2V0W2lkXSA9IG9wdGlvbnNcblxuICByZXR1cm4gZ3dfZ2V0R3JpZChpZClcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvdHlwZS1idWlsdGlucyAqL1xuLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19nZXREb2N1bWVudCB9IGZyb20gJ2FwaS91dGlsaXRpZXMnXG5cbi8qKiBodHRwczovL2Rhdmlkd2Fsc2gubmFtZS9qYXZhc2NyaXB0LWRlYm91bmNlLWZ1bmN0aW9uICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfZGVib3VuY2UoZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7XG4gIHZhciB0aW1lb3V0XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgY29udGV4dCA9IHRoaXMsXG4gICAgICBhcmdzID0gYXJndW1lbnRzXG4gICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICB0aW1lb3V0ID0gbnVsbFxuICAgICAgaWYgKCFpbW1lZGlhdGUpIHtcbiAgICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKVxuICAgICAgfVxuICAgIH1cbiAgICB2YXIgY2FsbE5vdyA9IGltbWVkaWF0ZSAmJiAhdGltZW91dFxuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KVxuICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KVxuICAgIGlmIChjYWxsTm93KSB7XG4gICAgICBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogU2VuZCBhbiBldmVudCB0byBCQmogc2lkZVxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGNvbnRleHQgdGhlIGdyaWQncyBjb250ZXh0XG4gKiBAcGFyYW0geyp9IHBheWxvYWQgdGhlIGV2ZW50IHBheWxvYWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudElkIHRoZSBldmVudCdzIGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19zZW5kRXZlbnQoY29udGV4dCwgcGF5bG9hZCA9IHt9LCBldmVudElkID0gW10pIHtcbiAgY29uc3QgcmVnaXN0ZXJlZEludGVyZXN0cyA9IGNvbnRleHQuaW50ZXJlc3RzIHx8IFtdXG5cbiAgaWYgKHJlZ2lzdGVyZWRJbnRlcmVzdHMuaW5jbHVkZXMoZXZlbnRJZCkpIHtcbiAgICBjb25zdCBkaXYgPSBnd19nZXREb2N1bWVudCgpLmdldEVsZW1lbnRCeUlkKGAke2NvbnRleHQuaWR9YClcbiAgICB3aW5kb3cuYmFzaXNEaXNwYXRjaEN1c3RvbUV2ZW50KGRpdiwgcGF5bG9hZClcbiAgfVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEJCakdyaWRFeFdpZGdldFJvd1xuICpcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpZFxuICogQHByb3BlcnR5IHtudW1iZXJ9IGluZGV4XG4gKiBAcHJvcGVydHkge251bWJlcn0gcGFyZW50S2V5XG4gKiBAcHJvcGVydHkge251bWJlcn0gY2hpbGRJbmRleFxuICogQHByb3BlcnR5IHtib29sZWFufSBzZWxlY3RlZFxuICovXG5cbi8qKlxuICogUGFyc2UgYSBub2RlIGFzIEJCakdyaWRFeFdpZGdldFJvd1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBub2RlIGFnIGdyaWQgbm9kZVxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQgIGFnIGdyaWQgY29udGV4dFxuICpcbiAqIEByZXR1cm5zIHtCQmpHcmlkRXhXaWRnZXRSb3d8Qm9vbGVhbn0gb2JqZWN0IGZvcm1hdHRlZCBhcyBCQmpHcmlkRXhXaWRnZXRSb3cuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIGlmIHRoZSBub2RlIGlzIGZvciBncm91cCBub2RlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19wYXJzZU5vZGUobm9kZSwgY29udGV4dCkge1xuICBpZiAodHJ1ZSA9PT0gbm9kZS5ncm91cCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9IC8vIHdlIGRvIG5vdCBtYW5hZ2UgZ3JvdXBzXG5cbiAgY29uc3QgZ2V0Um93Tm9kZUlkID0gbm9kZS5yb3dQaW5uZWQgPyAnX19ST1dfSU5ERVgnIDogY29udGV4dC5nZXRSb3dOb2RlSWRcblxuICByZXR1cm4ge1xuICAgIGk6XG4gICAgICBjb250ZXh0Lmhhc093blByb3BlcnR5KCdnZXRSb3dOb2RlSWQnKSAmJiBub2RlLmRhdGFbZ2V0Um93Tm9kZUlkXVxuICAgICAgICA/IG5vZGUuZGF0YVtnZXRSb3dOb2RlSWRdXG4gICAgICAgIDogbm9kZS5pZCwgLy8gaWRcbiAgICB4OiBub2RlLnJvd0luZGV4LCAvLyBpbmRleFxuICAgIHA6XG4gICAgICBub2RlLmhhc093blByb3BlcnR5KCdwYXJlbnQnKSAmJiBub2RlLnBhcmVudC5oYXNPd25Qcm9wZXJ0eSgna2V5JylcbiAgICAgICAgPyBub2RlLnBhcmVudC5rZXlcbiAgICAgICAgOiAnJywgLy8gcGFyZW50IGtleVxuICAgIGM6IG5vZGUucm93UGlubmVkID8gLTEgOiBub2RlLmNoaWxkSW5kZXgsIC8vY2hpbGRJbmRleFxuICAgIHM6IEJvb2xlYW4obm9kZS5zZWxlY3RlZCksIC8vIHNlbGVjdGVkXG4gICAgLy8gY2xpZW50IHJvd1xuICAgIGNyOlxuICAgICAgY29udGV4dC5oYXNPd25Qcm9wZXJ0eSgnaW5jbHVkZUNsaWVudFJvd0RhdGEnKSAmJlxuICAgICAgY29udGV4dFsnaW5jbHVkZUNsaWVudFJvd0RhdGEnXSA9PT0gdHJ1ZVxuICAgICAgICA/IG5vZGUuZGF0YVxuICAgICAgICA6IG51bGwsXG4gICAgcHA6IG5vZGUucm93UGlubmVkLCAvLyBwaW4gcG9zaXRpb25cbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlIG5vZGUgZnJvbSBldmVudFxuICpcbiAqIFBhcnNlIG5vZGUgaW4gdGhlIHBhU3NlZCBldmVudCBhcyBCQmpHcmlkRXhXaWRnZXRSb3dcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZVxuICpcbiAqIEByZXR1cm5zIHtCQmpHcmlkRXhXaWRnZXRSb3d9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19wYXJzZU5vZGVGcm9tRXZlbnQoZSkge1xuICByZXR1cm4gZ3dfcGFyc2VOb2RlKGUubm9kZSwgZS5jb250ZXh0KVxufVxuIiwidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIiwiaW1wb3J0IFN5bWJvbCBmcm9tICcuL19TeW1ib2wuanMnO1xuaW1wb3J0IGdldFJhd1RhZyBmcm9tICcuL19nZXRSYXdUYWcuanMnO1xuaW1wb3J0IG9iamVjdFRvU3RyaW5nIGZyb20gJy4vX29iamVjdFRvU3RyaW5nLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXSc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgfVxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXG4gICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VHZXRUYWc7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNPYmplY3RMaWtlO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihtb2R1bGUpIHtcblx0aWYgKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XG5cdFx0bW9kdWxlLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKCkge307XG5cdFx0bW9kdWxlLnBhdGhzID0gW107XG5cdFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XG5cdFx0aWYgKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwibG9hZGVkXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmw7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJpZFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdG1vZHVsZS53ZWJwYWNrUG9seWZpbGwgPSAxO1xuXHR9XG5cdHJldHVybiBtb2R1bGU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyoqXG4gKiBbUmVjdXJzaXZlbHkgcGFyc2VzIGEgc3RyaW5naWZpZWQgSlNPTl1cbiAqIEBwYXJhbSAge1t0eXBlXX0ganNvblN0cmluZyBbc3RyaW5naWZpZWQganNvbiB0byBwYXJzZV1cbiAqIEByZXR1cm4ge1t0eXBlXX0gICAgICAgICAgICBbbm9ybWFsaXplZCBKYXZhc2NyaXB0IG9iamVjdF1cbiAqL1xuZnVuY3Rpb24gZGVlcFBhcnNlSnNvbihqc29uU3RyaW5nKSB7XG4gIC8vIGlmIG5vdCBzdHJpbmdpZmllZCBqc29uIHJhdGhlciBhIHNpbXBsZSBzdHJpbmcgdmFsdWUgdGhlbiBKU09OLnBhcnNlIHdpbGwgdGhyb3cgZXJyb3JcbiAgLy8gb3RoZXJ3aXNlIGNvbnRpbnVlIHJlY3Vyc2lvblxuICBpZiAodHlwZW9mIGpzb25TdHJpbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBkZWVwUGFyc2VKc29uKEpTT04ucGFyc2UoanNvblN0cmluZykpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIGpzb25TdHJpbmc7XG4gICAgfVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoanNvblN0cmluZykpIHtcbiAgICAvLyBpZiBhbiBhcnJheSBpcyByZWNlaXZlZCwgbWFwIG92ZXIgdGhlIGFycmF5IGFuZCBkZWVwUGFyc2UgZWFjaCB2YWx1ZVxuICAgIHJldHVybiBqc29uU3RyaW5nLm1hcCh2YWwgPT4gZGVlcFBhcnNlSnNvbih2YWwpKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YganNvblN0cmluZyA9PT0gJ29iamVjdCcgJiYganNvblN0cmluZyAhPT0gbnVsbCkge1xuICAgIC8vIGlmIGFuIG9iamVjdCBpcyByZWNlaXZlZCB0aGVuIGRlZXBQYXJzZSBlYWNoIGVsZW1lbnQgaW4gdGhlIG9iamVjdFxuICAgIC8vIHR5cGVvZiBudWxsIHJldHVybnMgJ29iamVjdCcgdG9vLCBzbyB3ZSBoYXZlIHRvIGVsaW1pbmF0ZSB0aGF0XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGpzb25TdHJpbmcpLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgICAgIG9ialtrZXldID0gZGVlcFBhcnNlSnNvbihqc29uU3RyaW5nW2tleV0pO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LCB7fSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gb3RoZXJ3aXNlIHJldHVybiB3aGF0ZXZlciB3YXMgcmVjZWl2ZWRcbiAgICByZXR1cm4ganNvblN0cmluZztcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgZGVlcFBhcnNlSnNvbiB9O1xuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vLyBzZWxlY3Rpb24gY29uc3RhbnRzXG5leHBvcnQgY29uc3QgR1dfRVZFTlRfUk9XX1NFTEVDVCA9IDY5XG5leHBvcnQgY29uc3QgR1dfRVZFTlRfUk9XX0NMSUNLID0gNTAxMVxuZXhwb3J0IGNvbnN0IEdXX0VWRU5UX1JPV19ET1VCTEVfQ0xJQ0sgPSA1MlxuZXhwb3J0IGNvbnN0IEdXX0VWRU5UX0NFTExfQ0xJQ0sgPSA1MDAxXG5leHBvcnQgY29uc3QgR1dfRVZFTlRfQ0VMTF9ET1VCTEVfQ0xJQ0sgPSA1MDAyXG5cbi8vIGVkaXRpbmcgY29uc3RhbnRzXG5leHBvcnQgY29uc3QgR1dfRVZFTlRfQ0VMTF9FRElUSU5HX1NUQVJURUQgPSA1MDAzXG5leHBvcnQgY29uc3QgR1dfRVZFTlRfQ0VMTF9FRElUSU5HX1NUT1BQRUQgPSA1MDA0XG5leHBvcnQgY29uc3QgR1dfRVZFTlRfQ0VMTF9WQUxVRV9DSEFOR0VEID0gNTAwNVxuZXhwb3J0IGNvbnN0IEdXX0VWRU5UX1JPV19FRElUSU5HX1NUQVJURUQgPSA1MDA2XG5leHBvcnQgY29uc3QgR1dfRVZFTlRfUk9XX0VESVRJTkdfU1RPUFBFRCA9IDUwMDdcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9ST1dfVkFMVUVfQ0hBTkdFRCA9IDUwMTJcblxuLy8gc3RhdGUgY29uc3RhbnRzXG5leHBvcnQgY29uc3QgR1dfRVZFTlRfR1JJRF9TVEFURV9DSEFOR0UgPSA1MDA4XG5cbi8vIHJhbmdlIHNlbGVjdGlvblxuZXhwb3J0IGNvbnN0IEdXX0VWRU5UX1JBTkdFX1NFTEVDVElPTl9DSEFOR0VEID0gNTAwOVxuXG4vLyBrZXlib2FyZCBldmVudHNcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9LRVlQUkVTUyA9IDUwMTBcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc09iamVjdDtcbiIsImltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxuZXhwb3J0IGRlZmF1bHQgU3ltYm9sO1xuIiwiaW1wb3J0IGZyZWVHbG9iYWwgZnJvbSAnLi9fZnJlZUdsb2JhbC5qcyc7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxuZXhwb3J0IGRlZmF1bHQgcm9vdDtcbiIsIi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBlcTtcbiIsImltcG9ydCBpc0Z1bmN0aW9uIGZyb20gJy4vaXNGdW5jdGlvbi5qcyc7XG5pbXBvcnQgaXNMZW5ndGggZnJvbSAnLi9pc0xlbmd0aC5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0FycmF5TGlrZTtcbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYmotbWFza3MgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgU3RyaW5nTWFzayBmcm9tICcuL1N0cmluZ01hc2snXG5cbmV4cG9ydCBkZWZhdWx0IFN0cmluZ01hc2tcbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYmotbWFza3MgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgTnVtYmVyTWFzayBmcm9tICcuL051bWJlck1hc2snXG5cbmV4cG9ydCBkZWZhdWx0IE51bWJlck1hc2tcbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QEJhc2lzLkFnR3JpZENvbXBvbmVudHMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19nZXRHcmlkIH0gZnJvbSAnLi91dGlsaXRpZXMnXG5pbXBvcnQgeyBnd19leGVjdXRlRXhwcmVzc2lvbiB9IGZyb20gJy4uL2V4cHJlc3Npb24nXG5jb25zdCB7IGRlZXBQYXJzZUpzb24gfSA9IHJlcXVpcmUoJ2RlZXAtcGFyc2UtanNvbicpXG5cbi8qKlxuICogU2V0dXAgdGhlIHRvb2x0aXAgdmFsdWUgZ2V0dGVyIGFuZCB0b29sdGlwIGNvbXBvbmVudCBmb3IgdGhlIHBhc3NlZCBjb2x1bW4gZGVmaW5pdGlvbiAsIGlmIHRoZSBjb2x1bW4gZGVmaW5pdGlvbiBpcyBhIGdyb3VwXG4gKiB0aGVuIHRoZSBmdW5jdGlvbiB3aWxsIGxvb3Agb3ZlciBhbGwgaXRzIGNoaWxkcmVuIGFuZCBzZXR1cCB0aGUgZXhwcmVzc2lvbiBhbmQgdGhlIGNvbXBvbmVudCB0b28uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlZiBjb2x1bW4gZGVmaW5pdGlvbiBvYmplY3RcbiAqL1xuZnVuY3Rpb24gX2NvbmZpZ3VyZVRvb2x0aXBzKGRlZikge1xuICBjb25zdCB0b29sdGlwVmFsdWVHZXR0ZXJFeHByZXNzaW9uID0gZGVmLnRvb2x0aXBWYWx1ZUdldHRlclxuICBpZiAodG9vbHRpcFZhbHVlR2V0dGVyRXhwcmVzc2lvbikge1xuICAgIGRlZi50b29sdGlwVmFsdWVHZXR0ZXIgPSBwYXJhbXMgPT5cbiAgICAgIGd3X2V4ZWN1dGVFeHByZXNzaW9uKHRvb2x0aXBWYWx1ZUdldHRlckV4cHJlc3Npb24sIHBhcmFtcylcbiAgfVxuXG4gIGRlZi50b29sdGlwQ29tcG9uZW50ID0gJ0hUTUxUb29sdGlwJ1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgaWYgKGRlZi5oYXNPd25Qcm9wZXJ0eSgnY2hpbGRyZW4nKSkge1xuICAgIGRlZi5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IF9jb25maWd1cmVUb29sdGlwcyhjaGlsZCkpXG4gIH1cbn1cbi8qKlxuICogRXh0ZW5kIHRoZSBjb2x1bW4gZGVmaW5pdGlvbnNcbiAqXG4gKiBFeHRlbmQgdGhlIGNvbHVtbiBkZWZpbml0aW9ucyB3aXRoIG9wdGlvbnMgd2hpY2ggY2FuIG5vdCBiZSBoYW5kbGVkIGluIEJCalxuICogKGV4OiBhdHRhY2hpbmcgY2FsbGJhY2tzKVxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGRlZmluaXRpb25zIGFycmF5IG9mIGNvbHVtbiBkZWZpbml0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfZXh0ZW5kQ29sdW1uRGVmaW5pdGlvbnMoZGVmaW5pdGlvbnMpIHtcbiAgZm9yIChsZXQgaSBpbiBkZWZpbml0aW9ucykge1xuICAgIGNvbnN0IGRlZiA9IGRlZmluaXRpb25zW2ldXG5cbiAgICBkZWYuY2hlY2tib3hTZWxlY3Rpb24gPSBkZWYuY2hlY2tib3hTZWxlY3Rpb24gfHwgZ3dfaXNTaG93U2VsZWN0aW9uQ2hlY2tib3hcbiAgICBkZWYuaGVhZGVyQ2hlY2tib3hTZWxlY3Rpb24gPVxuICAgICAgZGVmLmhlYWRlckNoZWNrYm94U2VsZWN0aW9uIHx8IGd3X2lzSGVhZGVyQ2hlY2tib3hTZWxlY3Rpb25cbiAgICBfY29uZmlndXJlVG9vbHRpcHMoZGVmKVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgIGlmIChkZWYuaGFzT3duUHJvcGVydHkoJ2VkaXRhYmxlJykgJiYgdHlwZW9mIGRlZi5lZGl0YWJsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGVkaXRhYmxlID0gZGVmLmVkaXRhYmxlXG4gICAgICBkZWYuZWRpdGFibGUgPSBwYXJhbXMgPT4gZ3dfZXhlY3V0ZUV4cHJlc3Npb24oZWRpdGFibGUsIHBhcmFtcylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBVcGRhdGUgdGhlIGNvbHVtbiBkZWZpbml0aW9uc1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCBpZFxuICogQHBhcmFtIHtBcnJheX0gZGVmaW5pdGlvbnMgYXJyYXkgb2YgY29sdW1uIGRlZmluaXRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRDb2x1bW5EZWZpbml0aW9ucyhpZCwgZGVmaW5pdGlvbnMpIHtcbiAgY29uc3QgZ3JpZCA9IGd3X2dldEdyaWQoaWQpXG4gIGNvbnN0IGRlZXBQYXJzZWREZWZpbml0aW9ucyA9IGRlZXBQYXJzZUpzb24oSlNPTi5zdHJpbmdpZnkoZGVmaW5pdGlvbnMpKVxuXG4gIGd3X2V4dGVuZENvbHVtbkRlZmluaXRpb25zKGRlZXBQYXJzZWREZWZpbml0aW9ucylcblxuICBncmlkLm9wdGlvbnMuYXBpLnNldENvbHVtbkRlZnMoZGVlcFBhcnNlZERlZmluaXRpb25zKVxuICBncmlkLm9wdGlvbnMuY29sdW1uRGVmcyA9IGRlZXBQYXJzZWREZWZpbml0aW9uc1xufVxuXG4vKipcbiAqIE1ha2UgdGhlIGN1cnJlbnRseSB2aXNpYmxlIGNvbHVtbnMgZml0IHRoZSBzY3JlZW5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtOdW1iZXJ9IHRoZSB3aWR0aCB0byB1c2UgdG8gZml0IGFsbCBjb2x1bW5zIGluXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19zaXplQ29sdW1uc1RvRml0KGlkLCB3aWR0aCkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuICBjb25zdCBhcGkgPSBvcHRpb25zLmFwaVxuICBjb25zdCBjb2x1bW5zQVBJID0gb3B0aW9ucy5jb2x1bW5BcGlcbiAgaWYgKHdpZHRoKSB7XG4gICAgY29sdW1uc0FQSS5zaXplQ29sdW1uc1RvRml0KE51bWJlcih3aWR0aCkpXG4gIH0gZWxzZSB7XG4gICAgYXBpLnNpemVDb2x1bW5zVG9GaXQoKVxuICB9XG59XG5cbi8qKlxuICogV29yayBvdXQgdGhlIGJlc3Qgd2lkdGggdG8gZml0IHRoZSBjb250ZW50cyBvZiB0aGUgY2VsbHMgaW4gdGhlIGNvbHVtbi5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtCb29sZWFufSBbc2tpcEhlYWRlcj1mYWxzZV0gd2hlbiB0cnVlIGluZGljYXRlIHRoYXQgdGhlIGhlYWRlciBjb250ZW50IChoZWFkZXJOYW1lKSBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgd2hlblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0aW5nIHRoZSB3aWR0aCBvZiB0aGUgY29sdW1uXG4gKiBAcGFyYW0ge0FycmF5fG51bGx9IFtjb2x1bW5zPW51bGxdIGFuIGFycmF5IG9mIGNvbHVtbnMgaWRzIHRvIGF1dG8gc2l6ZSBvciBudWxsIHRvIGF1dG8gc2l6ZSBhbGwgY29sdW1uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfYXV0b1NpemVDb2x1bW5zKGlkLCBza2lwSGVhZGVyID0gZmFsc2UsIGNvbHVtbnMgPSBudWxsKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG4gIGNvbnN0IGNvbHVtbnNBUEkgPSBvcHRpb25zLmNvbHVtbkFwaVxuXG4gIGlmICghKGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGgpKSB7XG4gICAgY29uc3QgYWxsQ29sdW1uSWRzID0gW11cblxuICAgIGNvbHVtbnNBUEkuZ2V0QWxsQ29sdW1ucygpLmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgIGFsbENvbHVtbklkcy5wdXNoKGNvbHVtbi5jb2xJZClcbiAgICB9KVxuXG4gICAgY29sdW1uc0FQSS5hdXRvU2l6ZUNvbHVtbnMoYWxsQ29sdW1uSWRzLCBCb29sZWFuKHNraXBIZWFkZXIpKVxuICB9IGVsc2Uge1xuICAgIGNvbHVtbnNBUEkuYXV0b1NpemVDb2x1bW5zKGNvbHVtbnMsIEJvb2xlYW4oc2tpcEhlYWRlcikpXG4gIH1cbn1cbi8qKlxuICogRW5zdXJlcyB0aGUgY29sdW1uIGlzIHZpc2libGUsIHNjcm9sbGluZyB0aGUgdGFibGUgaWYgbmVlZGVkLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCAgdGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbHVtbklkICB0aGUgY29sdW1uIGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19lbnN1cmVDb2x1bW5WaXNpYmxlKGlkLCBjb2x1bW5JZCkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5lbnN1cmVDb2x1bW5WaXNpYmxlKGNvbHVtbklkKVxufVxuXG4vKipcbiAqIFNldCBDb2x1bW4gV2lkdGhcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb2x1bW5JZCBUaGUgY29sdW1uIGlkXG4gKiBAcGFyYW0ge051bWJlcnxTdHJpbmd9IHdpZHRoIFRoZSBuZXcgY29sdW1uIHdpZHRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRDb2x1bW5XaWR0aChpZCwgY29sdW1uSWQsIHdpZHRoKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29sdW1uQXBpLnNldENvbHVtbldpZHRoKGNvbHVtbklkLCBOdW1iZXIod2lkdGgpKVxufVxuXG4vKipcbiAqIFBpbiBDb2x1bW5cbiAqXG4gKiBQaW4gYSBjb2x1bW4gdG8gYSBzcGVjaWZpYyBkaXJlY3Rpb25cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb2x1bW5JZCBUaGUgY29sdW1uIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gcGluIFRoZSBwaW4gZGlyZWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19waW5Db2x1bW4oaWQsIGNvbHVtbklkLCBwaW4pIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb2x1bW5BcGkuc2V0Q29sdW1uUGlubmVkKGNvbHVtbklkLCBwaW4pXG59XG5cbi8qKlxuICogTW92ZSBDb2x1bW5cbiAqXG4gKiBNb3ZlIGNvbHVtbiB0byBhIHNwZWNpZmljIGluZGV4XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gY29sdW1uSWQgVGhlIGNvbHVtbiBpZFxuICogQHBhcmFtIHtOdW1iZXJ8U3RyaW5nfSB0b0luZGV4IFRoZSBuZXcgY29sdW1uIGluZGV4XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19tb3ZlQ29sdW1uKGlkLCBjb2x1bW5JZCwgdG9JbmRleCkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbHVtbkFwaS5tb3ZlQ29sdW1uKGNvbHVtbklkLCB0b0luZGV4KVxufVxuXG4vKipcbiAqIFNob3cgLyBIaWRlIHNlbGVjdGlvbiBjaGVja2JveCBiYXNlZCBvbiB0aGUgZmlyc3QgY29sdW1uXG4gKlxuICogVGhlIGZ1bmN0aW9uIG1ha2Ugc3VyZSB0aGF0IHRoZSBzZWxlY3Rpb24gY2hlY2tib3ggaXMgYWx3YXlzIHNob3duIG9uIHRoZVxuICogZmlyc3QgY29sdW1uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtXG4gKlxuICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSB3aGVuIGZpcnN0IGNvbHVtbiAsIGZhbHNlIGlmIG5vdCB0aGUgZmlyc3QgY29sdW1uIG9yIGlmIHRoZVxuICogICAgICAgICAgICAgICAgICAgZ3JpZCdzIGBDb250ZXh0LnNob3dTZWxlY3Rpb25DaGVja2JveGAgaXMgZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2lzU2hvd1NlbGVjdGlvbkNoZWNrYm94KHBhcmFtKSB7XG4gIGlmICghcGFyYW0uY29udGV4dC5zaG93U2VsZWN0aW9uQ2hlY2tib3gpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGNvbnN0IGNvbHVtbnMgPSBwYXJhbS5jb2x1bW5BcGkuZ2V0QWxsR3JpZENvbHVtbnMoKVxuXG4gIHJldHVybiBjb2x1bW5zWzBdLmNvbERlZi5maWVsZCA9PT0gcGFyYW0uY29sRGVmLmZpZWxkXG59XG5cbi8qKlxuICogU2hvdyAvIEhpZGUgaGVhZGVyIHNlbGVjdGlvbiBjaGVja2JveCBiYXNlZCBvbiB0aGUgZmlyc3QgY29sdW1uXG4gKlxuICogVGhlIGZ1bmN0aW9uIG1ha2Ugc3VyZSB0aGF0IHRoZSBoZWFkZXIgc2VsZWN0aW9uIGNoZWNrYm94IGlzIGFsd2F5cyBzaG93biBvbiB0aGVcbiAqIGZpcnN0IGNvbHVtblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbVxuICpcbiAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgd2hlbiBmaXJzdCBjb2x1bW4gLCBmYWxzZSBpZiBub3QgdGhlIGZpcnN0IGNvbHVtbiBvciBpZiB0aGVcbiAqICAgICAgICAgICAgICAgICAgIGdyaWQncyBgQ29udGV4dC5zaG93SGVhZGVyU2VsZWN0aW9uQ2hlY2tib3hgIGlzIGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19pc0hlYWRlckNoZWNrYm94U2VsZWN0aW9uKHBhcmFtKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBwYXJhbS5hcGkuZ3JpZE9wdGlvbnNXcmFwcGVyLmdyaWRPcHRpb25zLmNvbnRleHRcblxuICBpZiAoIWNvbnRleHQuc2hvd0hlYWRlclNlbGVjdGlvbkNoZWNrYm94KSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb25zdCBjb2x1bW5zID0gcGFyYW0uY29sdW1uQXBpLmdldEFsbEdyaWRDb2x1bW5zKClcblxuICByZXR1cm4gY29sdW1uc1swXS5jb2xEZWYuZmllbGQgPT09IHBhcmFtLmNvbERlZi5maWVsZFxufVxuXG4vKipcbiAqIEVuYWJsZSByb3cgZ3JvdXBpbmcgZm9yIGNvbHVtbnNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb2x1bW5zICBhIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgY29sdW1uc1xuICogQHBhcmFtIHtCb29sZWFufSBzZXQgIFdoZW4gdHJ1ZSAsIGBzZXRSb3dHcm91cENvbHVtbnNgIHdpbGwgYmUgdXNlZCAsIGBhZGRSb3dHcm91cENvbHVtbnNgIG90aGVyd2lzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfYWRkUm93R3JvdXBDb2x1bW4oaWQsIGNvbHVtbnMsIHNldCkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbHVtbkFwaVtcbiAgICBzZXQgPyAnc2V0Um93R3JvdXBDb2x1bW5zJyA6ICdhZGRSb3dHcm91cENvbHVtbnMnXG4gIF0oY29sdW1ucy5zcGxpdCgnLCcpLm1hcChpID0+IGkudHJpbSgpKSlcbn1cblxuLyoqXG4gKiBEaXNhYmxlIHJvdyBncm91cGluZyBmb3IgY29sdW1uc1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCBpZFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbHVtbnMgIGEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBjb2x1bW5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19yZW1vdmVSb3dHcm91cENvbHVtbihpZCwgY29sdW1ucykge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbHVtbkFwaS5yZW1vdmVSb3dHcm91cENvbHVtbnMoXG4gICAgY29sdW1ucy5zcGxpdCgnLCcpLm1hcChpID0+IGkudHJpbSgpKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnd19nZXRQaXZvdE1vZGUoaWQpIHtcbiAgcmV0dXJuIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29sdW1uQXBpLmlzUGl2b3RNb2RlKClcbn1cblxuLyoqXG4gKiBFbmFibGUgLyBkaXNiYWxlIHBpdm90IG1vZGVcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQgaWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gbW9kZSB3aGVuIHRydWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3NldFBpdm90TW9kZShpZCwgbW9kZSkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbHVtbkFwaS5zZXRQaXZvdE1vZGUoISFOdW1iZXIobW9kZSkpXG59XG5cbi8qKlxuICogRW5hYmxlIHBpdm90IGZvciBjb2x1bW5zXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gY29sdW1ucyAgYSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGNvbHVtbnNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gc2V0ICBXaGVuIHRydWUgLCBgYWRkUGl2b3RDb2x1bW5zYCB3aWxsIGJlIHVzZWQgLCBgc2V0UGl2b3RDb2x1bW5zYCBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2FkZFBpdm90Q29sdW1ucyhpZCwgY29sdW1ucywgc2V0KSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29sdW1uQXBpW3NldCA/ICdzZXRQaXZvdENvbHVtbnMnIDogJ2FkZFBpdm90Q29sdW1ucyddKFxuICAgIGNvbHVtbnMuc3BsaXQoJywnKS5tYXAoaSA9PiBpLnRyaW0oKSlcbiAgKVxufVxuXG4vKipcbiAqIERpc2FibGUgcGl2b3QgZm9yIGNvbHVtbnNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb2x1bW5zICBhIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgY29sdW1uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfcmVtb3ZlUGl2b3RDb2x1bW5zKGlkLCBjb2x1bW5zKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29sdW1uQXBpLnJlbW92ZVBpdm90Q29sdW1ucyhcbiAgICBjb2x1bW5zLnNwbGl0KCcsJykubWFwKGkgPT4gaS50cmltKCkpXG4gIClcbn1cblxuLyoqXG4gKiBFbmFibGUgdmFsdWUgZm9yIGNvbHVtbnNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb2x1bW5zICBhIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgY29sdW1uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfYWRkVmFsdWVDb2x1bW5zKGlkLCBjb2x1bW5zKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29sdW1uQXBpLmFkZFZhbHVlQ29sdW1ucyhcbiAgICBjb2x1bW5zLnNwbGl0KCcsJykubWFwKGkgPT4gaS50cmltKCkpXG4gIClcbn1cblxuLyoqXG4gKiBEaXNhYmxlIHZhbHVlIGZvciBjb2x1bW5zXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gY29sdW1ucyAgYSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGNvbHVtbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3JlbW92ZVZhbHVlQ29sdW1ucyhpZCwgY29sdW1ucykge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbHVtbkFwaS5yZW1vdmVWYWx1ZUNvbHVtbnMoXG4gICAgY29sdW1ucy5zcGxpdCgnLCcpLm1hcChpID0+IGkudHJpbSgpKVxuICApXG59XG5cbi8qKlxuICogU2V0IHRoZSBjb2x1bW4gc29ydGluZyBtb2RlbFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCBpZFxuICogQHBhcmFtIHtTdHJpbmd9IG1vZGVsIG1vZGVsIGFzIGpzb24gYXJyYXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3NldFNvcnRNb2RlbChpZCwgbW9kZWwpIHtcbiAgY29uc3QgYXNBcnJheSA9IEpTT04ucGFyc2UobW9kZWwpXG4gIGNvbnN0IHBhcnNlZE1vZGVsID0gW11cbiAgYXNBcnJheS5mb3JFYWNoKGkgPT4ge1xuICAgIGZvciAoY29uc3Qga2V5IGluIGkpIHtcbiAgICAgIHBhcnNlZE1vZGVsLnB1c2goe1xuICAgICAgICBjb2xJZDoga2V5LFxuICAgICAgICBzb3J0OiBpW2tleV0sXG4gICAgICB9KVxuICAgIH1cbiAgfSlcblxuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5zZXRTb3J0TW9kZWwocGFyc2VkTW9kZWwpXG59XG5cbi8qKlxuICogUmVkcmF3cyB0aGUgaGVhZGVyLiBVc2VmdWwgaWYgYSBjb2x1bW4gbmFtZSBjaGFuZ2VzLFxuICogb3Igc29tZXRoaW5nIGVsc2UgdGhhdCBjaGFuZ2VzIGhvdyB0aGUgY29sdW1uIGhlYWRlciBpcyBkaXNwbGF5ZWQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIGdyaWQncyBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfcmVmcmVzaEhlYWRlcihpZCkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5yZWRyYXdSb3dzKClcbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuLyoqXG4gKiBCdWlsZCBhIGpzIGZ1bmN0aW9uIGZyb20gdGhlIGdpdmVuIGV4cHJlc3Npb25cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXhwcmVzc2lvblxuICpcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfY29tcGlsZUV4cHJlc3Npb24oZXhwcmVzc2lvbikge1xuICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGV4cHJlc3Npb24gY2FjaGUgaGFzIGJlZW4gaW5pdGlhbGl6ZWRcbiAgaWYgKHR5cGVvZiBnd19jb21waWxlRXhwcmVzc2lvbi5leHByZXNzaW9uQ2FjaGUgPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBnd19jb21waWxlRXhwcmVzc2lvbi5leHByZXNzaW9uQ2FjaGUgPSBbXVxuICB9XG5cbiAgLy8gY2hlY2sgY2FjaGUgZmlyc3RcbiAgaWYgKGd3X2NvbXBpbGVFeHByZXNzaW9uLmV4cHJlc3Npb25DYWNoZVtleHByZXNzaW9uXSkge1xuICAgIHJldHVybiBnd19jb21waWxlRXhwcmVzc2lvbi5leHByZXNzaW9uQ2FjaGVbZXhwcmVzc2lvbl1cbiAgfVxuXG4gIC8vIGlmIG5vdCBmb3VuZCBpbiBjYWNoZSwgcmV0dXJuIHRoZSBmdW5jdGlvblxuICBsZXQgZnVuY3Rpb25Cb2R5ID0gbnVsbFxuICAvLyBpZiB0aGUgZXhwcmVzc2lvbiBoYXMgdGhlICdyZXR1cm4nIHdvcmQgaW4gaXQsIHRoZW4gdXNlIGFzIGlzLFxuICAvLyBpZiBub3QsIHRoZW4gd3JhcCBpdCB3aXRoIHJldHVybiBhbmQgJzsnIHRvIG1ha2UgYSBmdW5jdGlvblxuICBpZiAoZXhwcmVzc2lvbi5pbmRleE9mKCdyZXR1cm4nKSA+PSAwKSB7XG4gICAgZnVuY3Rpb25Cb2R5ID0gZXhwcmVzc2lvblxuICB9IGVsc2Uge1xuICAgIGZ1bmN0aW9uQm9keSA9ICdyZXR1cm4gJyArIGV4cHJlc3Npb24gKyAnOydcbiAgfVxuXG4gIGNvbnN0IHRoZUZ1bmN0aW9uID0gbmV3IEZ1bmN0aW9uKFxuICAgICd4LCBjdHgsIG9sZFZhbHVlLCBuZXdWYWx1ZSwgdmFsdWUsIG5vZGUsIGRhdGEsIGNvbERlZiwgcm93SW5kZXgsIGFwaSwgY29sdW1uQXBpLCBnZXRWYWx1ZSwgY29sdW1uLCBjb2x1bW5Hcm91cCcsXG4gICAgZnVuY3Rpb25Cb2R5XG4gIClcblxuICAvLyBzdG9yZSBpbiBjYWNoZVxuICBnd19jb21waWxlRXhwcmVzc2lvbi5leHByZXNzaW9uQ2FjaGVbZXhwcmVzc2lvbl0gPSB0aGVGdW5jdGlvblxuXG4gIHJldHVybiB0aGVGdW5jdGlvblxufVxuXG4vKipcbiAqIEJ1aWxkIGFuZCBleGVjdXRlZCBhbiBleHByZXNzaW9uIHdpdGggdGhlIHBhc3NlZCBwYXJhbXNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXhwcmVzc2lvblxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICpcbiAqIEByZXR1cm4gbWl4ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2V4ZWN1dGVFeHByZXNzaW9uKGV4cHJlc3Npb24sIHBhcmFtcykge1xuICB0cnkge1xuICAgIGNvbnN0IGphdmFTY3JpcHRGdW5jdGlvbiA9IGd3X2NvbXBpbGVFeHByZXNzaW9uKGV4cHJlc3Npb24pXG4gICAgLy8gdGhlIHBhcmFtcyBkb24ndCBoYXZlIGFsbCB0aGVzZSB2YWx1ZXMsIHJhdGhlciB3ZSBhZGQgZXZlcnkgcG9zc2libGVcbiAgICAvLyB2YWx1ZSBhIHBhcmFtcyBjYW4gaGF2ZSwgd2hpY2ggbWFrZXMgd2hhdGV2ZXIgaXMgaW4gdGhlIHBhcmFtcyBhdmFpbGFibGUuXG4gICAgY29uc3QgcmVzdWx0ID0gamF2YVNjcmlwdEZ1bmN0aW9uKFxuICAgICAgcGFyYW1zLnZhbHVlLFxuICAgICAgcGFyYW1zLmNvbnRleHQsXG4gICAgICBwYXJhbXMub2xkVmFsdWUsXG4gICAgICBwYXJhbXMubmV3VmFsdWUsXG4gICAgICBwYXJhbXMudmFsdWUsXG4gICAgICBwYXJhbXMubm9kZSxcbiAgICAgIHBhcmFtcy5kYXRhLFxuICAgICAgcGFyYW1zLmNvbERlZixcbiAgICAgIHBhcmFtcy5yb3dJbmRleCxcbiAgICAgIHBhcmFtcy5hcGksXG4gICAgICBwYXJhbXMuY29sdW1uQXBpLFxuICAgICAgcGFyYW1zLmdldFZhbHVlLFxuICAgICAgcGFyYW1zLmNvbHVtbixcbiAgICAgIHBhcmFtcy5jb2x1bW5Hcm91cFxuICAgIClcbiAgICByZXR1cm4gcmVzdWx0XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyB0aGUgZXhwcmVzc2lvbiBmYWlsZWQsIHdoaWNoIGNhbiBoYXBwZW4sIGFzIGl0J3MgdGhlIGNsaWVudCB0aGF0XG4gICAgLy8gcHJvdmlkZXMgdGhlIGV4cHJlc3Npb24uIHNvIHByaW50IGEgbmljZSBtZXNzYWdlXG4gICAgY29uc29sZS5sb2coJ1Byb2Nlc3Npbmcgb2YgdGhlIGV4cHJlc3Npb24gZmFpbGVkJylcbiAgICBjb25zb2xlLmxvZygnRXhwcmVzc2lvbiA9ICcgKyBleHByZXNzaW9uKVxuICAgIGNvbnNvbGUubG9nKCdQYXJhbXMgPScsIHBhcmFtcylcbiAgICBjb25zb2xlLmxvZygnRXhjZXB0aW9uID0gJyArIGUpXG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAQmFzaXMuQWdHcmlkQ29tcG9uZW50cy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGd3X2dldEdyaWQgfSBmcm9tICcuL3V0aWxpdGllcydcbmltcG9ydCB7IGd3X3BhcnNlTm9kZSB9IGZyb20gJ2V2ZW50cy91dGlsaXRpZXMnXG5pbXBvcnQgeyBnd19leGVjdXRlRXhwcmVzc2lvbiB9IGZyb20gJy4uL2V4cHJlc3Npb24nXG5cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRRdWlja0ZpbHRlcihpZCwgZmlsdGVyKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLnNldFF1aWNrRmlsdGVyKGZpbHRlcilcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGd3X2V4cGFuZEFsbChpZCkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5leHBhbmRBbGwoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3dfY29sbGFwc2VBbGwoaWQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkuY29sbGFwc2VBbGwoKVxufVxuLyoqXG4gKiBFbnN1cmVzIHRoZSByb3cgaW5kZXggaXMgdmlzaWJsZSBieSB2ZXJ0aWNhbGx5IHNjcm9sbGluZyB0aGUgZ3JpZFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCAgdGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSBpbmRleCB0aGUgcm93IGluZGV4IG9yIGtleVxuICogQHBhcmFtIHtTdHJpbmd9IHBvc2l0aW9uIHsndG9wJywgJ21pZGRsZScsICdib3R0b20nLCB1bmRlZmluZWQvbnVsbH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2Vuc3VyZUluZGV4VmlzaWJsZShpZCwgaW5kZXgsIHBvc2l0aW9uKSB7XG4gIGNvbnN0IGFwaSA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpXG4gIGNvbnN0IG5vZGUgPSBhcGkuZ2V0Um93Tm9kZShpbmRleClcblxuICBpZiAobm9kZSkge1xuICAgIGFwaS5lbnN1cmVOb2RlVmlzaWJsZShub2RlLCBwb3NpdGlvbilcbiAgfSBlbHNlIHtcbiAgICBhcGkuZW5zdXJlSW5kZXhWaXNpYmxlKE51bWJlcihpbmRleCksIHBvc2l0aW9uKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnd19uYXZpZ2F0ZVRvTmV4dFJvdyhpZCwgcGFyYW1zKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG4gIGxldCBwcmV2aW91c0NlbGwgPSBwYXJhbXMucHJldmlvdXNDZWxsUG9zaXRpb25cbiAgbGV0IHN1Z2dlc3RlZE5leHRDZWxsID0gcGFyYW1zLm5leHRDZWxsUG9zaXRpb25cblxuICBjb25zdCBLRVlfVVAgPSAzOFxuICBjb25zdCBLRVlfRE9XTiA9IDQwXG4gIGNvbnN0IEtFWV9MRUZUID0gMzdcbiAgY29uc3QgS0VZX1JJR0hUID0gMzlcblxuICBzd2l0Y2ggKHBhcmFtcy5rZXkpIHtcbiAgICBjYXNlIEtFWV9ET1dOOlxuICAgICAgLy8gc2V0IHNlbGVjdGVkIGNlbGwgb24gY3VycmVudCBjZWxsICsgMVxuICAgICAgaWYgKHN1Z2dlc3RlZE5leHRDZWxsICYmICFzdWdnZXN0ZWROZXh0Q2VsbC5yb3dQaW5uZWQpIHtcbiAgICAgICAgaWYgKHByZXZpb3VzQ2VsbC5yb3dQaW5uZWQpIHtcbiAgICAgICAgICBjb25zdCByb3cgPSBvcHRpb25zLmFwaS5nZXREaXNwbGF5ZWRSb3dBdEluZGV4KFxuICAgICAgICAgICAgb3B0aW9ucy5hcGkuZ2V0Rmlyc3REaXNwbGF5ZWRSb3coKVxuICAgICAgICAgIClcbiAgICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgICByb3cuc2V0U2VsZWN0ZWQodHJ1ZSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3B0aW9ucy5hcGkuZm9yRWFjaE5vZGUobm9kZSA9PiB7XG4gICAgICAgICAgICBpZiAocHJldmlvdXNDZWxsLnJvd0luZGV4ICsgMSA9PT0gbm9kZS5yb3dJbmRleCkge1xuICAgICAgICAgICAgICBub2RlLnNldFNlbGVjdGVkKHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3VnZ2VzdGVkTmV4dENlbGxcbiAgICBjYXNlIEtFWV9VUDpcbiAgICAgIC8vIHNldCBzZWxlY3RlZCBjZWxsIG9uIGN1cnJlbnQgY2VsbCAtIDFcbiAgICAgIGlmIChzdWdnZXN0ZWROZXh0Q2VsbCAmJiAhc3VnZ2VzdGVkTmV4dENlbGwucm93UGlubmVkKSB7XG4gICAgICAgIGlmIChwcmV2aW91c0NlbGwucm93UGlubmVkKSB7XG4gICAgICAgICAgY29uc3Qgcm93ID0gb3B0aW9ucy5hcGkuZ2V0RGlzcGxheWVkUm93QXRJbmRleChcbiAgICAgICAgICAgIG9wdGlvbnMuYXBpLmdldExhc3REaXNwbGF5ZWRSb3coKVxuICAgICAgICAgIClcbiAgICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgICByb3cuc2V0U2VsZWN0ZWQodHJ1ZSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3B0aW9ucy5hcGkuZm9yRWFjaE5vZGUobm9kZSA9PiB7XG4gICAgICAgICAgICBpZiAocHJldmlvdXNDZWxsLnJvd0luZGV4IC0gMSA9PT0gbm9kZS5yb3dJbmRleCkge1xuICAgICAgICAgICAgICBub2RlLnNldFNlbGVjdGVkKHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Z2dlc3RlZE5leHRDZWxsXG4gICAgY2FzZSBLRVlfTEVGVDpcbiAgICBjYXNlIEtFWV9SSUdIVDpcbiAgICAgIHJldHVybiBzdWdnZXN0ZWROZXh0Q2VsbFxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBoYXZlIHN1cGVyIHN0cmFuZ2Uga2V5Ym9hcmQnKVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHJvdyBiYXNlZCBvbiBgZ2V0Um93Tm9kZUlkYCBjb25maWcgZGVmaW5lZCBpbiB0aGUgZ3JpZCBjb250ZXh0XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhICB0aGUgZGF0YSByb3dcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldFJvd05vZGVJZChpZCwgZGF0YSkge1xuICByZXR1cm4gZGF0YVtnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbnRleHQuZ2V0Um93Tm9kZUlkXVxufVxuXG4vKipcbiAqIFVwZGF0ZSB0aGUgZ3JpZCdzIGRhdGEgc2V0XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBqc29uIGpzb24gb2JqZWN0IHdoaWNoIGNvbnRhaW5zIHRoZSBuZXcgZGF0YXNldCB0byB1cGRhdGUgdGhlIGdyaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3NldFJvd0RhdGEoaWQsIGpzb24pIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcblxuICBvcHRpb25zLmFwaS5zZXRSb3dEYXRhKGpzb24pXG4gIG9wdGlvbnMucm93RGF0YSA9IGpzb25cbn1cblxuLyoqXG4gKiBVcGRhdGUgdGhlIGdyaWQgd2l0aCBhIHRyYW5zYWN0aW9uIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCAgdGhlIGdyaWQgaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSB0cmFuc2FjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfdXBkYXRlUm93RGF0YShpZCwgdHJhbnNhY3Rpb24sIGJhdGNoVXBkYXRlKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG5cbiAgaWYgKHRyYW5zYWN0aW9uLnJlbW92ZS5sZW5ndGgpIHtcbiAgICBsZXQgaXRlbXMgPSBbXVxuXG4gICAgdHJhbnNhY3Rpb24ucmVtb3ZlLmZvckVhY2goaW5kZXggPT4ge1xuICAgICAgaXRlbXMucHVzaChvcHRpb25zLmFwaS5nZXRSb3dOb2RlKGluZGV4KS5kYXRhKVxuICAgIH0pXG5cbiAgICB0cmFuc2FjdGlvbi5yZW1vdmUgPSBpdGVtc1xuICB9XG5cbiAgaWYgKCFiYXRjaFVwZGF0ZSkge1xuICAgIG9wdGlvbnMuYXBpLmFwcGx5VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pXG4gIH0gZWxzZSB7XG4gICAgb3B0aW9ucy5hcGkuYXBwbHlUcmFuc2FjdGlvbkFzeW5jKHRyYW5zYWN0aW9uKVxuICB9XG59XG5cbi8qKlxuICogU2V0IHRoZSBoZWlnaHQgb2YgYWxsIHJvd3NcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQgaWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBoZWlnaHQgdGhlIHJvdyBoZWlnaHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3NldFJvd3NIZWlnaHQoaWQsIGhlaWdodCkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuICBjb25zdCBhcGkgPSBvcHRpb25zLmFwaVxuXG4gIGFwaS5mb3JFYWNoTm9kZShyb3cgPT4ge1xuICAgIHJvdy5zZXRSb3dIZWlnaHQoaGVpZ2h0KVxuICB9KVxuXG4gIGFwaS5vblJvd0hlaWdodENoYW5nZWQoKVxufVxuXG4vKipcbiAqIFNldCB0aGUgZ2l2ZW4gcm93IGhlaWdodFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCBpZFxuICogQHBhcmFtIHtOdW1iZXJ8U3RyaW5nfSBpbmRleCB0aGUgcm93IGluZGV4IG9yIGtleVxuICogQHBhcmFtIHtOdW1iZXJ9IGhlaWdodCB0aGUgbmV3IGhlaWdodFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0Um93SGVpZ2h0KGlkLCBpbmRleCwgaGVpZ2h0KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG4gIGNvbnN0IGFwaSA9IG9wdGlvbnMuYXBpXG4gIGNvbnN0IHJvdyA9IGFwaS5nZXRSb3dOb2RlKGluZGV4KSB8fCBhcGkuZ2V0RGlzcGxheWVkUm93QXRJbmRleChpbmRleClcblxuICBpZiAocm93KSB7XG4gICAgcm93LnNldFJvd0hlaWdodChoZWlnaHQpXG4gICAgb3B0aW9ucy5hcGkub25Sb3dIZWlnaHRDaGFuZ2VkKClcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLndhcm4oYEZhaWxlZCB0byBzZXQgaGVpZ2h0IGZvciByb3cgJHtpbmRleH0uIFJvdyBjYW5ub3QgYmUgZm91bmRgKVxuICB9XG59XG5cbi8qKlxuICogUmVzZXQgdGhlIHJvdyBoZWlnaHRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgIHRoZSBncmlkIGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19yZXNldFJvd0hlaWdodHMoaWQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkucmVzZXRSb3dIZWlnaHRzKClcbn1cblxuLyoqXG4gKiBTZWxlY3Qgcm93IG9yIG1vcmUgYmFzZWQgb24gdGhlIHJvdyBpZCBvciBpbmRleFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge0FycmF5fSByb3dzIGFuIGFycmF5IG9mIHJvdyBrZXlzIGFuZCBpbmRleGVzIHRvIHNlbGVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0U2VsZWN0ZWRSb3dzKGlkLCByb3dzKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG4gIGNvbnN0IGFwaSA9IG9wdGlvbnMuYXBpXG5cbiAgYXBpLmZvckVhY2hOb2RlQWZ0ZXJGaWx0ZXJBbmRTb3J0KG5vZGUgPT4ge1xuICAgIGlmIChcbiAgICAgIHJvd3MuaW5kZXhPZihTdHJpbmcobm9kZS5yb3dJbmRleCkpID4gLTEgfHxcbiAgICAgIHJvd3MuaW5kZXhPZihTdHJpbmcobm9kZS5pZCkpID4gLTFcbiAgICApIHtcbiAgICAgIG5vZGUuc2V0U2VsZWN0ZWQodHJ1ZSlcbiAgICAgIG5vZGUuZXhwYW5kZWQgPSB0cnVlXG4gICAgfVxuICB9KVxuXG4gIGFwaS5vbkdyb3VwRXhwYW5kZWRPckNvbGxhcHNlZCgpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnd19zZWxlY3RBbGwoaWQsIGZpbHRlcmVkKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG5cbiAgaWYgKDEgPT09IGZpbHRlcmVkKSB7XG4gICAgb3B0aW9ucy5hcGkuc2VsZWN0QWxsRmlsdGVyZWQoKVxuICB9IGVsc2Uge1xuICAgIG9wdGlvbnMuYXBpLnNlbGVjdEFsbCgpXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGd3X2Rlc2VsZWN0QWxsKGlkLCBmaWx0ZXJlZCkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuXG4gIGlmICgxID09PSBmaWx0ZXJlZCkge1xuICAgIG9wdGlvbnMuYXBpLmRlc2VsZWN0QWxsRmlsdGVyZWQoKVxuICB9IGVsc2Uge1xuICAgIG9wdGlvbnMuYXBpLmRlc2VsZWN0QWxsKClcbiAgfVxufVxuXG4vKipcbiAqIEdldCB0aGUgY3VycmVudCBzZWxlY3RlZCByb3dzXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGlkIGdyaWQncyBpZFxuICpcbiAqIEByZXR1cm5zIHtTdHJpbmd9ICBzZWxlY3RlZCByb3dzIGFzIEpTT05cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldFNlbGVjdGVkUm93cyhpZCkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuICBjb25zdCBub2RlcyA9IG9wdGlvbnMuYXBpLmdldFNlbGVjdGVkTm9kZXMoKVxuICBsZXQgcGFyc2VkID0gW11cblxuICBub2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgIHBhcnNlZC5wdXNoKGd3X3BhcnNlTm9kZShub2RlLCBvcHRpb25zLmNvbnRleHQpKVxuICB9KVxuXG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShwYXJzZWQpXG59XG5cbi8qKlxuICogR2V0IHRoZSBsYXN0IHNlbGVjdGVkIHJvd1xuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBpZCBncmlkJ3MgaWRcbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzZWxlY3RlZCByb3cgYXMgSlNPTlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfZ2V0U2VsZWN0ZWRSb3coaWQpIHtcbiAgY29uc3Qgcm93cyA9IEpTT04ucGFyc2UoZ3dfZ2V0U2VsZWN0ZWRSb3dzKGlkKSlcblxuICBpZiAocm93cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocm93c1tyb3dzLmxlbmd0aCAtIDFdKVxuICB9XG5cbiAgcmV0dXJuICcnXG59XG5cbi8qKlxuICogR2V0IHRoZSByb3cgYnkgaXRzIGlkIG9yIGluZGV4XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIGdyaWQncyBpZFxuICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSBpbmRleFxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcm93IGFzIEpTT05cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldFJvdyhpZCwgaW5kZXgpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFxuICAgIGd3X3BhcnNlTm9kZShvcHRpb25zLmFwaS5nZXRSb3dOb2RlKGluZGV4KSwgb3B0aW9ucy5jb250ZXh0KVxuICApXG59XG5cbi8qKlxuICogR2V0IHJvd3MgZnJvbSB0aGUgZ3JpZFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gcGhhc2UgVGhlIHJvd3MgcGhhc2VcbiAqIEBwYXJhbSB7U3RyaW5nfSBmaWx0ZXJFeHByZXNzaW9uIEEgZmlsdGVyIGV4cHJlc3Npb25cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IEpzb24gc3RyaW5naWZpZWQgYXJyYXkgb2Ygcm93c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfZ2V0Um93cyhpZCwgcGhhc2UsIGZpbHRlckV4cHJlc3Npb24pIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcbiAgY29uc3QgcGFyc2VkID0gW11cblxuICBvcHRpb25zLmFwaVtwaGFzZV0obm9kZSA9PiB7XG4gICAgaWYgKCFub2RlLmdyb3VwKSB7XG4gICAgICBpZiAoZmlsdGVyRXhwcmVzc2lvbikge1xuICAgICAgICBjb25zdCBjYW5Qcm9jZXNzID0gZ3dfZXhlY3V0ZUV4cHJlc3Npb24oZmlsdGVyRXhwcmVzc2lvbiwge1xuICAgICAgICAgIHZhbHVlOiBub2RlLmRhdGEsXG4gICAgICAgICAgY29udGV4dDogb3B0aW9ucy5jb250ZXh0LFxuICAgICAgICAgIG9sZFZhbHVlOiBudWxsLFxuICAgICAgICAgIG5ld1ZhbHVlOiBudWxsLFxuICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgZGF0YTogbm9kZS5kYXRhLFxuICAgICAgICAgIGNvbERlZjogbnVsbCxcbiAgICAgICAgICByb3dJbmRleDogbm9kZS5yb3dJbmRleCxcbiAgICAgICAgICBhcGk6IG5vZGUuZ3JpZEFwaSxcbiAgICAgICAgICBjb2x1bW5BcGk6IG5vZGUuY29sdW1uQXBpLFxuICAgICAgICAgIGdldFZhbHVlOiAoKSA9PiBub2RlLmRhdGEsXG4gICAgICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgICAgIGNvbHVtbkdyb3VwOlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgICAgICAgbm9kZS5oYXNPd25Qcm9wZXJ0eSgncGFyZW50JykgJiYgbm9kZS5wYXJlbnQuaGFzT3duUHJvcGVydHkoJ2tleScpXG4gICAgICAgICAgICAgID8gbm9kZS5wYXJlbnQua2V5XG4gICAgICAgICAgICAgIDogJycsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGNhblByb2Nlc3MpIHtcbiAgICAgICAgICBwYXJzZWQucHVzaChnd19wYXJzZU5vZGUobm9kZSwgb3B0aW9ucy5jb250ZXh0KSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkLnB1c2goZ3dfcGFyc2VOb2RlKG5vZGUsIG9wdGlvbnMuY29udGV4dCkpXG4gICAgICB9XG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShwYXJzZWQpXG59XG5cbi8qKlxuICogR2V0cyB0aGUgZ3JpZCB0byByZW1vdmUgYSByb3cgZnJvbSB0aGUgRE9NIGFuZCByZWNyZWF0ZSBpdCBhZ2FpbiBmcm9tIHNjcmF0Y2guXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIGdyaWQncyBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfcmVkcmF3Um93cyhpZCkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5yZWRyYXdSb3dzKClcbn1cblxuLyoqXG4gKiBQaW4gYW4gYXJyYXkgb2YgdG93IHRvIHRoZSB0b3Agb2YgdGhlIGdyaWRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtBcnJheX0gZGF0YSBhcnJheSBvZiByb3dzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRQaW5uZWRUb3BSb3dEYXRhKGlkLCBkYXRhKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLnNldFBpbm5lZFRvcFJvd0RhdGEoZGF0YSlcbn1cblxuLyoqXG4gKiBQaW4gYW4gYXJyYXkgb2YgdG93IHRvIHRoZSBib3R0b20gb2YgdGhlIGdyaWRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtBcnJheX0gZGF0YSBhcnJheSBvZiByb3dzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRQaW5uZWRCb3R0b21Sb3dEYXRhKGlkLCBkYXRhKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLnNldFBpbm5lZEJvdHRvbVJvd0RhdGEoZGF0YSlcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvdHlwZS1idWlsdGlucyAqL1xuLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19nZXRHcmlkLCBnd191dWlkIH0gZnJvbSAnYXBpL3V0aWxpdGllcydcbmltcG9ydCB7IGd3X3BhcnNlQWRkQ2VsbFJhbmdlIH0gZnJvbSAnYXBpL2NlbGxzJ1xuXG5jb25zdCB7IGRlZXBQYXJzZUpzb24gfSA9IHJlcXVpcmUoJ2RlZXAtcGFyc2UtanNvbicpXG5cbi8qKlxuICogVGhlIGFycmF5IGNvbnRhaW5zIHJlZmVyZW5jZXMgdG8gY3JlYXRlZCBjaGFydHMgZnJvbSBCQmouXG4gKiBFdmVyeSByZWZlcmVuY2UgaXMgYSBDaGFydFJlZiBvYmplY3Qgd2hpY2ggcHJvdmlkZXMgdGhlIGFwcGxpY2F0aW9uIHdpdGggdGhlXG4gKiBkZXN0cm95Q2hhcnQoKSBtZXRob2QgdGhhdCBpcyByZXF1aXJlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiB3YW50cyB0byBkaXNwb3NlIHRoZSBjaGFydC5cbiAqL1xuXG4vKipcbiAqIFJldHVybiB0aGUgY2hhcnQgdG9vbGJhciBpdGVtcyBkZWZpbmVkIGluIHRoZSBncmlkJ3MgY29udGV4dFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXkgb2Ygc3VwcG9ydGVkIGNoYXJ0IGl0ZW1zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19nZXRDaGFydFRvb2xiYXJJdGVtcyhwYXJhbXMpIHtcbiAgcmV0dXJuIChcbiAgICBwYXJhbXMuYXBpLmdyaWRPcHRpb25zV3JhcHBlci5ncmlkT3B0aW9ucy5jb250ZXh0LmNoYXJ0VG9vbGJhckl0ZW1zIHx8IFtdXG4gIClcbn1cblxuLyoqXG4gKiBBZGQgbmV3IGNoYXJ0IHJhbmdlXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIGdyaWQncyBpZFxuICogQHBhcmFtIHtPYmplY3R9IHJhbmdlICBib3VuZGVkIG9yIHVuYm91bmRlZCByYW5nZSBtb2RlbFxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gYSB1bmlxdWUgaWQgZm9yIHRoZSBnZW5lcmF0ZSBjaGFydFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfYWRkQ2hhcnRSYW5nZShpZCwgcmFuZ2UpIHtcbiAgY29uc3QgZ3JpZCA9IGd3X2dldEdyaWQoaWQpXG4gIGNvbnN0IG9wdGlvbnMgPSBncmlkLm9wdGlvbnNcbiAgY29uc3QgcHIgPSBkZWVwUGFyc2VKc29uKEpTT04uc3RyaW5naWZ5KHJhbmdlKSlcblxuICBwci5jZWxsUmFuZ2UgPSBnd19wYXJzZUFkZENlbGxSYW5nZShvcHRpb25zLCBwci5jZWxsUmFuZ2UpXG5cbiAgY29uc3QgcmVmID0gb3B0aW9ucy5hcGkuY3JlYXRlUmFuZ2VDaGFydChwcilcbiAgY29uc3QgdXVpZCA9IGd3X3V1aWQoKVxuXG4gIGdyaWQuY3JlYXRlZF9jaGFydHMgPSBncmlkLmNyZWF0ZWRfY2hhcnRzIHx8IHt9XG4gIGdyaWQuY3JlYXRlZF9jaGFydHNbdXVpZF0gPSByZWZcblxuICByZXR1cm4gdXVpZFxufVxuXG4vKipcbiAqIERlc3Ryb3kgY3JlYXRlZCBjaGFydHNcbiAqXG4gKiBEZXN0cm95IGFscmVhZHkgY3JlYXRlZCBjaGFydCBieSBpZCBvciBhbGwgY3JlYXRlZCBjaGFydHNcbiAqIHdoZW4gdGhlIGB1dWlkYCBpcyBvbWl0dGVkLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSB1dWlkIFRoZSBjaGFydCdzIGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19kZXN0cm95Q2hhcnQoaWQsIHV1aWQpIHtcbiAgY29uc3QgZ3JpZCA9IGd3X2dldEdyaWQoaWQpXG5cbiAgaWYgKHV1aWQpIHtcbiAgICBpZiAoXG4gICAgICBncmlkLmhhc093blByb3BlcnR5KCdjcmVhdGVkX2NoYXJ0cycpICYmXG4gICAgICBncmlkLmNyZWF0ZWRfY2hhcnRzLmhhc093blByb3BlcnR5KHV1aWQpXG4gICAgKSB7XG4gICAgICBncmlkLmNyZWF0ZWRfY2hhcnRzW3V1aWRdLmRlc3Ryb3lDaGFydCgpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChncmlkLmhhc093blByb3BlcnR5KCdjcmVhdGVkX2NoYXJ0cycpKSB7XG4gICAgICBmb3IgKGNvbnN0IGkgaW4gZ3JpZC5jcmVhdGVkX2NoYXJ0cykge1xuICAgICAgICBpZiAoZ3JpZC5jcmVhdGVkX2NoYXJ0cy5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgICAgIGNvbnN0IGNoYXJ0ID0gZ3JpZC5jcmVhdGVkX2NoYXJ0c1tpXVxuICAgICAgICAgIGNoYXJ0LmRlc3Ryb3lDaGFydCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfZ2V0R3JpZCB9IGZyb20gJy4vdXRpbGl0aWVzJ1xuaW1wb3J0IHsgZ3dfcGFyc2VOb2RlIH0gZnJvbSAnZXZlbnRzL3V0aWxpdGllcydcblxuY29uc3QgeyBkZWVwUGFyc2VKc29uIH0gPSByZXF1aXJlKCdkZWVwLXBhcnNlLWpzb24nKVxuXG4vKipcbiAqIFN0YXJ0IGNlbGwgZWRpdGluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge1N0cmluZ3xudW1iZXJ9IHJvdyBUaGUgcm93IGluZGV4IG9yIGtleVxuICogQHBhcmFtIHtTdHJpbmd9IGNvbEtleSBUaGUgY29sdW1uJ3Mga2V5XG4gKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IGtleVByZXNzICBLZXkgcHJlc3NcbiAqIEBwYXJhbSB7U3RyaW5nfSBjaGFyUHJlc3NcbiAqIEBwYXJhbSB7U3RyaW5nfSByb3dQaW5uZWQgU2V0IHRvICd0b3AnIG9yICdib3R0b20nIHRvIHN0YXJ0ZWQgZWRpdGluZyBhIHBpbm5lZCByb3dcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3N0YXJ0RWRpdGluZ0NlbGwoXG4gIGlkLFxuICByb3csXG4gIGNvbEtleSxcbiAga2V5UHJlc3MsXG4gIGNoYXJQcmVzcyxcbiAgcm93UGlubmVkXG4pIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcbiAgY29uc3QgYXBpID0gb3B0aW9ucy5hcGlcbiAgY29uc3Qgbm9kZSA9IGFwaS5nZXRSb3dOb2RlKHJvdykgfHwgYXBpLmdldERpc3BsYXllZFJvd0F0SW5kZXgocm93KVxuXG4gIG9wdGlvbnMuYXBpLnN0YXJ0RWRpdGluZ0NlbGwoe1xuICAgIHJvd0luZGV4OiBub2RlLnJvd0luZGV4LFxuICAgIGtleVByZXNzOiBOdW1iZXIoa2V5UHJlc3MpLFxuICAgIGNvbEtleSxcbiAgICBjaGFyUHJlc3MsXG4gICAgcm93UGlubmVkLFxuICB9KVxufVxuXG4vKipcbiAqIFN0b3AgY2VsbCBlZGl0aW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gY2FuY2VsIHdoZW4gdHJ1ZSBjYW5jZWwgZWRpdHMgLCBzYXZlIGVkaXRzIG90aGVyd2lzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc3RvcEVkaXRpbmcoaWQsIGNhbmNlbCkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5zdG9wRWRpdGluZyhjYW5jZWwpXG59XG5cbi8qKlxuICogTmF2aWdhdGVzIHRoZSBncmlkIGZvY3VzIHRvIHRoZSBuZXh0IGNlbGwsIGFzIGlmIHRhYmJpbmcuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkICB0aGUgZ3JpZCBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfdGFiVG9OZXh0Q2VsbChpZCkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS50YWJUb05leHRDZWxsKClcbn1cblxuLyoqXG4gKiBOYXZpZ2F0ZXMgdGhlIGdyaWQgZm9jdXMgdG8gdGhlIHByZXZpb3VzIGNlbGwsIGFzIGlmIHNoaWZ0LXRhYmJpbmcuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkICB0aGUgZ3JpZCBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfdGFiVG9QcmV2aW91c0NlbGwoaWQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkudGFiVG9QcmV2aW91c0NlbGwoKVxufVxuXG4vKipcbiAqIFNldCBGb2N1cyBvbiB0aGUgZ2l2ZW4gcm93IGFuZCBjb2x1bW5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSByb3cgVGhlIHJvdydzIGluZGV4L2lkXG4gKiBAcGFyYW0ge1N0cmluZ30gY29sdW1uIFRoZSBjb2x1bW4gaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBmbG9hdGluZyBudWxsLCAndG9wJywgb3IgJ2JvdHRvbScuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRGb2N1c2VkQ2VsbChpZCwgcm93LCBjb2x1bW4sIGZsb2F0aW5nID0gbnVsbCkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuXG4gIC8vIGlnbm9yZSBmb2N1cyBjYWxscyBpZiBlZGl0aW5nXG4gIGlmIChvcHRpb25zLmFwaS5nZXRFZGl0aW5nQ2VsbHMoKS5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBsZXQgciwgYywgZlxuICBpZiAocm93ID09IC0xKSB7XG4gICAgLy8gdHJ5IHRvIHJldGFpbiB0aGUgZm9jdXNcbiAgICBjb25zdCBsYXN0Rm9jdXNlZENlbGwgPSBvcHRpb25zLmFwaS5nZXRGb2N1c2VkQ2VsbCgpXG5cbiAgICBpZiAobGFzdEZvY3VzZWRDZWxsKSB7XG4gICAgICByID0gbGFzdEZvY3VzZWRDZWxsLnJvd0luZGV4XG4gICAgICBjID0gbGFzdEZvY3VzZWRDZWxsLmNvbHVtbi5jb2xJZFxuICAgICAgZiA9IGxhc3RGb2N1c2VkQ2VsbC5yb3dQaW5uZWRcbiAgICB9IGVsc2Uge1xuICAgICAgciA9IDBcbiAgICAgIGMgPSBvcHRpb25zLmNvbHVtbkFwaS5nZXRBbGxHcmlkQ29sdW1ucygpWzBdLmNvbElkXG4gICAgICBmID0gZmxvYXRpbmdcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgciA9ICFyb3dcbiAgICAgID8gMFxuICAgICAgOiBOdW1iZXIuaXNJbnRlZ2VyKCtyb3cpXG4gICAgICA/ICtyb3dcbiAgICAgIDogb3B0aW9ucy5hcGkuZ2V0Um93Tm9kZShyb3cpLnJvd0luZGV4XG4gICAgYyA9IGNvbHVtbiA/IGNvbHVtbiA6IG9wdGlvbnMuY29sdW1uQXBpLmdldEFsbEdyaWRDb2x1bW5zKClbMF0uY29sSWRcbiAgICBmID0gZmxvYXRpbmdcbiAgfVxuXG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLnNldEZvY3VzZWRDZWxsKHIsIGMsIGYpXG59XG5cbi8qKlxuICogR2V0IFJhbmdlIFNlbGVjdGlvbnNcbiAqXG4gKiBUaGUgbWV0aG9kIHdpbGwgY3JlYXRlIGEgcmFuZ2UganNvbiBtb2RlbCBmb3IgZWFjaCByYW5nZSB3aGljaCBjYW4gYmUgcGFyc2VkIGluIEJCaiBzaWRlLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBpZCBncmlkJ3MgaWRcbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzZWxlY3RlZCByYW5nZXMgYXMgSlNPTlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfZ2V0UmFuZ2VTZWxlY3Rpb25zKGlkKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG4gIGNvbnN0IGNvbnRleHQgPSBvcHRpb25zLmNvbnRleHRcbiAgY29uc3QgYXBpID0gb3B0aW9ucy5hcGlcbiAgY29uc3QgcmFuZ2VzID0gYXBpLmdldENlbGxSYW5nZXMoKVxuICBjb25zdCBtb2RlbCA9IGFwaS5nZXRNb2RlbCgpXG4gIGxldCByZXN1bHQgPSBbXVxuXG4gIHJhbmdlcy5mb3JFYWNoKHJhbmdlID0+IHtcbiAgICAvLyBjb25zdCBzdGFydCA9IGd3X3BhcnNlTm9kZShtb2RlbC5nZXRSb3cocmFuZ2Uuc3RhcnRSb3cucm93SW5kZXgpLCBvcHRpb25zLmNvbnRleHQpO1xuICAgIC8vIGNvbnN0IGVuZCA9IGd3X3BhcnNlTm9kZShtb2RlbC5nZXRSb3cocmFuZ2UuZW5kUm93LnJvd0luZGV4KSwgb3B0aW9ucy5jb250ZXh0KTtcblxuICAgIC8vaWYgKHN0YXJ0ICE9PSBmYWxzZSAmJiBlbmQgIT09IGZhbHNlKSB7XG4gICAgY29uc3QgY29sdW1ucyA9IHJhbmdlLmNvbHVtbnNcbiAgICAgIC5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjdXJyZW50KSA9PiB7XG4gICAgICAgIGlmICgnYWctR3JpZC1BdXRvQ29sdW1uJyAhPT0gY3VycmVudC5jb2xJZCkge1xuICAgICAgICAgIGFjY3VtdWxhdG9yLnB1c2goY3VycmVudC5jb2xJZClcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvclxuICAgICAgfSwgW10pXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG5cbiAgICBjb25zdCBzdGFySW5kZXggPSBNYXRoLm1pbihyYW5nZS5zdGFydFJvdy5yb3dJbmRleCwgcmFuZ2UuZW5kUm93LnJvd0luZGV4KVxuICAgIGNvbnN0IGVuZEluZGV4ID0gTWF0aC5tYXgocmFuZ2Uuc3RhcnRSb3cucm93SW5kZXgsIHJhbmdlLmVuZFJvdy5yb3dJbmRleClcbiAgICBjb25zdCByb3dzID0gW11cblxuICAgIGZvciAobGV0IHJvd0luZGV4ID0gc3RhckluZGV4OyByb3dJbmRleCA8PSBlbmRJbmRleDsgcm93SW5kZXgrKykge1xuICAgICAgY29uc3Qgbm9kZSA9IG1vZGVsLmdldFJvdyhyb3dJbmRleClcbiAgICAgIGlmIChub2RlKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZE5vZGUgPSBnd19wYXJzZU5vZGUobm9kZSwgY29udGV4dClcbiAgICAgICAgaWYgKHBhcnNlZE5vZGUpIHtcbiAgICAgICAgICByb3dzLnB1c2gocGFyc2VkTm9kZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyb3dzLmxlbmd0aCAmJiBjb2x1bW5zLmxlbmd0aCkge1xuICAgICAgcmVzdWx0LnB1c2goeyByOiByb3dzLCBjOiBjb2x1bW5zIH0pXG4gICAgfVxuICAgIC8vfVxuICB9KVxuXG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShyZXN1bHQpXG59XG5cbi8qKlxuICogUGFyc2UgdGhlIGNlbGxzIHJhbmdlIGluIGEgZm9ybWF0IHRoZSBncmlkIGNhbiB1bmRlcnN0YW5kIHdoZW4gaXQgaXMgcGFzc2VkXG4gKiB0byBgYXBpLmFkZENlbGxSYW5nZWBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBUaGUgZ3JpZCdzIG9wdGlvbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSByYW5nZSAgYm91bmRlZCBvciB1bmJvdW5kZWQgcmFuZ2UgbW9kZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3BhcnNlQWRkQ2VsbFJhbmdlKG9wdGlvbnMsIHJhbmdlKSB7XG4gIGNvbnN0IHByID0gZGVlcFBhcnNlSnNvbihKU09OLnN0cmluZ2lmeShyYW5nZSkpXG4gIGNvbnN0IHN0YXJ0ID0gIShwci5zdGFydCB8fCBudWxsKVxuICAgID8gMFxuICAgIDogTnVtYmVyLmlzSW50ZWdlcigrcHIuc3RhcnQpXG4gICAgPyArcHIuc3RhcnRcbiAgICA6IG9wdGlvbnMuYXBpLmdldFJvd05vZGUocHIuc3RhcnQpLnJvd0luZGV4XG4gIGNvbnN0IGVuZCA9ICEocHIuZW5kIHx8IG51bGwpXG4gICAgPyBvcHRpb25zLnJvd0RhdGEubGVuZ3RoIC0gMVxuICAgIDogTnVtYmVyLmlzSW50ZWdlcigrcHIuZW5kKVxuICAgID8gK3ByLmVuZFxuICAgIDogb3B0aW9ucy5hcGkuZ2V0Um93Tm9kZShwci5lbmQpLnJvd0luZGV4XG5cbiAgcmV0dXJuIHtcbiAgICByb3dTdGFydEluZGV4OiBNYXRoLmFicyhzdGFydCksXG4gICAgcm93RW5kSW5kZXg6IE1hdGguYWJzKGVuZCksXG4gICAgY29sdW1uczogcHIuY29sdW1ucyxcbiAgfVxufVxuLyoqXG4gKiBBZGQgbmV3IGNlbGwgcmFuZ2VcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge09iamVjdH0gcmFuZ2UgIGJvdW5kZWQgb3IgdW5ib3VuZGVkIHJhbmdlIG1vZGVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19hZGRDZWxsUmFuZ2UoaWQsIHJhbmdlKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG4gIG9wdGlvbnMuYXBpLmFkZENlbGxSYW5nZShnd19wYXJzZUFkZENlbGxSYW5nZShvcHRpb25zLCByYW5nZSkpXG59XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBzZWxlY3RlZCByYW5nZS5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgZ3JpZCdzIGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19jbGVhclJhbmdlU2VsZWN0aW9uKGlkKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLmNsZWFyUmFuZ2VTZWxlY3Rpb24oKVxufVxuIiwiaW1wb3J0IGRlZmluZVByb3BlcnR5IGZyb20gJy4vX2RlZmluZVByb3BlcnR5LmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYXNzaWduVmFsdWVgIGFuZCBgYXNzaWduTWVyZ2VWYWx1ZWAgd2l0aG91dFxuICogdmFsdWUgY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSA9PSAnX19wcm90b19fJyAmJiBkZWZpbmVQcm9wZXJ0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KG9iamVjdCwga2V5LCB7XG4gICAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAgICdlbnVtZXJhYmxlJzogdHJ1ZSxcbiAgICAgICd2YWx1ZSc6IHZhbHVlLFxuICAgICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUFzc2lnblZhbHVlO1xuIiwiaW1wb3J0IGdldE5hdGl2ZSBmcm9tICcuL19nZXROYXRpdmUuanMnO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgdmFyIGZ1bmMgPSBnZXROYXRpdmUoT2JqZWN0LCAnZGVmaW5lUHJvcGVydHknKTtcbiAgICBmdW5jKHt9LCAnJywge30pO1xuICAgIHJldHVybiBmdW5jO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lUHJvcGVydHk7XG4iLCJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNGdW5jdGlvbjtcbiIsIi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbmV4cG9ydCBkZWZhdWx0IGZyZWVHbG9iYWw7XG4iLCJpbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5pbXBvcnQgb3ZlclJlc3QgZnJvbSAnLi9fb3ZlclJlc3QuanMnO1xuaW1wb3J0IHNldFRvU3RyaW5nIGZyb20gJy4vX3NldFRvU3RyaW5nLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZXN0YCB3aGljaCBkb2Vzbid0IHZhbGlkYXRlIG9yIGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVJlc3QoZnVuYywgc3RhcnQpIHtcbiAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCBpZGVudGl0eSksIGZ1bmMgKyAnJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VSZXN0O1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBmaXJzdCBhcmd1bWVudCBpdCByZWNlaXZlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBBbnkgdmFsdWUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyBgdmFsdWVgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqXG4gKiBjb25zb2xlLmxvZyhfLmlkZW50aXR5KG9iamVjdCkgPT09IG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlkZW50aXR5KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaWRlbnRpdHk7XG4iLCIvKipcbiAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICovXG5mdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFwcGx5O1xuIiwiaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGlzSW5kZXggZnJvbSAnLi9faXNJbmRleC5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIHZhbHVlIGFyZ3VtZW50LlxuICogQHBhcmFtIHsqfSBpbmRleCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIGluZGV4IG9yIGtleSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gb2JqZWN0IFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgb2JqZWN0IGFyZ3VtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSXRlcmF0ZWVDYWxsKHZhbHVlLCBpbmRleCwgb2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdHlwZSA9IHR5cGVvZiBpbmRleDtcbiAgaWYgKHR5cGUgPT0gJ251bWJlcidcbiAgICAgICAgPyAoaXNBcnJheUxpa2Uob2JqZWN0KSAmJiBpc0luZGV4KGluZGV4LCBvYmplY3QubGVuZ3RoKSlcbiAgICAgICAgOiAodHlwZSA9PSAnc3RyaW5nJyAmJiBpbmRleCBpbiBvYmplY3QpXG4gICAgICApIHtcbiAgICByZXR1cm4gZXEob2JqZWN0W2luZGV4XSwgdmFsdWUpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNJdGVyYXRlZUNhbGw7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNMZW5ndGgoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcbiAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzTGVuZ3RoO1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0luZGV4O1xuIiwiaW1wb3J0IGJhc2VUaW1lcyBmcm9tICcuL19iYXNlVGltZXMuanMnO1xuaW1wb3J0IGlzQXJndW1lbnRzIGZyb20gJy4vaXNBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc0J1ZmZlciBmcm9tICcuL2lzQnVmZmVyLmpzJztcbmltcG9ydCBpc0luZGV4IGZyb20gJy4vX2lzSW5kZXguanMnO1xuaW1wb3J0IGlzVHlwZWRBcnJheSBmcm9tICcuL2lzVHlwZWRBcnJheS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlMaWtlS2V5cztcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5leHBvcnQgZGVmYXVsdCBpc0FycmF5O1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYSBwcm90b3R5cGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzUHJvdG90eXBlKHZhbHVlKSB7XG4gIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXG4gICAgICBwcm90byA9ICh0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IucHJvdG90eXBlKSB8fCBvYmplY3RQcm90bztcblxuICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1Byb3RvdHlwZTtcbiIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5pbXBvcnQgaXNQbGFpbk9iamVjdCBmcm9tICcuL2lzUGxhaW5PYmplY3QuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgZG9tRXhjVGFnID0gJ1tvYmplY3QgRE9NRXhjZXB0aW9uXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFuIGBFcnJvcmAsIGBFdmFsRXJyb3JgLCBgUmFuZ2VFcnJvcmAsIGBSZWZlcmVuY2VFcnJvcmAsXG4gKiBgU3ludGF4RXJyb3JgLCBgVHlwZUVycm9yYCwgb3IgYFVSSUVycm9yYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gZXJyb3Igb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNFcnJvcihuZXcgRXJyb3IpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFcnJvcihFcnJvcik7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Vycm9yKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZXJyb3JUYWcgfHwgdGFnID09IGRvbUV4Y1RhZyB8fFxuICAgICh0eXBlb2YgdmFsdWUubWVzc2FnZSA9PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWUubmFtZSA9PSAnc3RyaW5nJyAmJiAhaXNQbGFpbk9iamVjdCh2YWx1ZSkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0Vycm9yO1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgYXJndW1lbnQgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IG92ZXJBcmc7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheU1hcDtcbiIsIi8qKiBVc2VkIHRvIG1hdGNoIHRlbXBsYXRlIGRlbGltaXRlcnMuICovXG52YXIgcmVJbnRlcnBvbGF0ZSA9IC88JT0oW1xcc1xcU10rPyklPi9nO1xuXG5leHBvcnQgZGVmYXVsdCByZUludGVycG9sYXRlO1xuIiwiaW1wb3J0IGJhc2VUb1N0cmluZyBmcm9tICcuL19iYXNlVG9TdHJpbmcuanMnO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcuIEFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZCBmb3IgYG51bGxgXG4gKiBhbmQgYHVuZGVmaW5lZGAgdmFsdWVzLiBUaGUgc2lnbiBvZiBgLTBgIGlzIHByZXNlcnZlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9TdHJpbmcobnVsbCk7XG4gKiAvLyA9PiAnJ1xuICpcbiAqIF8udG9TdHJpbmcoLTApO1xuICogLy8gPT4gJy0wJ1xuICpcbiAqIF8udG9TdHJpbmcoWzEsIDIsIDNdKTtcbiAqIC8vID0+ICcxLDIsMydcbiAqL1xuZnVuY3Rpb24gdG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAnJyA6IGJhc2VUb1N0cmluZyh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvU3RyaW5nO1xuIiwiLypcblx0TUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcblx0QXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cblxudmFyIHN0eWxlc0luRG9tID0ge307XG5cbnZhclx0bWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuXHR2YXIgbWVtbztcblxuXHRyZXR1cm4gZnVuY3Rpb24gKCkge1xuXHRcdGlmICh0eXBlb2YgbWVtbyA9PT0gXCJ1bmRlZmluZWRcIikgbWVtbyA9IGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0cmV0dXJuIG1lbW87XG5cdH07XG59O1xuXG52YXIgaXNPbGRJRSA9IG1lbW9pemUoZnVuY3Rpb24gKCkge1xuXHQvLyBUZXN0IGZvciBJRSA8PSA5IGFzIHByb3Bvc2VkIGJ5IEJyb3dzZXJoYWNrc1xuXHQvLyBAc2VlIGh0dHA6Ly9icm93c2VyaGFja3MuY29tLyNoYWNrLWU3MWQ4NjkyZjY1MzM0MTczZmVlNzE1YzIyMmNiODA1XG5cdC8vIFRlc3RzIGZvciBleGlzdGVuY2Ugb2Ygc3RhbmRhcmQgZ2xvYmFscyBpcyB0byBhbGxvdyBzdHlsZS1sb2FkZXJcblx0Ly8gdG8gb3BlcmF0ZSBjb3JyZWN0bHkgaW50byBub24tc3RhbmRhcmQgZW52aXJvbm1lbnRzXG5cdC8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2stY29udHJpYi9zdHlsZS1sb2FkZXIvaXNzdWVzLzE3N1xuXHRyZXR1cm4gd2luZG93ICYmIGRvY3VtZW50ICYmIGRvY3VtZW50LmFsbCAmJiAhd2luZG93LmF0b2I7XG59KTtcblxudmFyIGdldFRhcmdldCA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTtcbn07XG5cbnZhciBnZXRFbGVtZW50ID0gKGZ1bmN0aW9uIChmbikge1xuXHR2YXIgbWVtbyA9IHt9O1xuXG5cdHJldHVybiBmdW5jdGlvbih0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBwYXNzaW5nIGZ1bmN0aW9uIGluIG9wdGlvbnMsIHRoZW4gdXNlIGl0IGZvciByZXNvbHZlIFwiaGVhZFwiIGVsZW1lbnQuXG4gICAgICAgICAgICAgICAgLy8gVXNlZnVsIGZvciBTaGFkb3cgUm9vdCBzdHlsZSBpLmVcbiAgICAgICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAgICAgLy8gICBpbnNlcnRJbnRvOiBmdW5jdGlvbiAoKSB7IHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2Zvb1wiKS5zaGFkb3dSb290IH1cbiAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZW1vW3RhcmdldF0gPT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdHZhciBzdHlsZVRhcmdldCA9IGdldFRhcmdldC5jYWxsKHRoaXMsIHRhcmdldCk7XG5cdFx0XHQvLyBTcGVjaWFsIGNhc2UgdG8gcmV0dXJuIGhlYWQgb2YgaWZyYW1lIGluc3RlYWQgb2YgaWZyYW1lIGl0c2VsZlxuXHRcdFx0aWYgKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCAmJiBzdHlsZVRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG5cdFx0XHRcdFx0Ly8gZHVlIHRvIGNyb3NzLW9yaWdpbiByZXN0cmljdGlvbnNcblx0XHRcdFx0XHRzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuXHRcdFx0XHR9IGNhdGNoKGUpIHtcblx0XHRcdFx0XHRzdHlsZVRhcmdldCA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG1lbW9bdGFyZ2V0XSA9IHN0eWxlVGFyZ2V0O1xuXHRcdH1cblx0XHRyZXR1cm4gbWVtb1t0YXJnZXRdXG5cdH07XG59KSgpO1xuXG52YXIgc2luZ2xldG9uID0gbnVsbDtcbnZhclx0c2luZ2xldG9uQ291bnRlciA9IDA7XG52YXJcdHN0eWxlc0luc2VydGVkQXRUb3AgPSBbXTtcblxudmFyXHRmaXhVcmxzID0gcmVxdWlyZShcIi4vdXJsc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihsaXN0LCBvcHRpb25zKSB7XG5cdGlmICh0eXBlb2YgREVCVUcgIT09IFwidW5kZWZpbmVkXCIgJiYgREVCVUcpIHtcblx0XHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgc3R5bGUtbG9hZGVyIGNhbm5vdCBiZSB1c2VkIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnRcIik7XG5cdH1cblxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRvcHRpb25zLmF0dHJzID0gdHlwZW9mIG9wdGlvbnMuYXR0cnMgPT09IFwib2JqZWN0XCIgPyBvcHRpb25zLmF0dHJzIDoge307XG5cblx0Ly8gRm9yY2Ugc2luZ2xlLXRhZyBzb2x1dGlvbiBvbiBJRTYtOSwgd2hpY2ggaGFzIGEgaGFyZCBsaW1pdCBvbiB0aGUgIyBvZiA8c3R5bGU+XG5cdC8vIHRhZ3MgaXQgd2lsbCBhbGxvdyBvbiBhIHBhZ2Vcblx0aWYgKCFvcHRpb25zLnNpbmdsZXRvbiAmJiB0eXBlb2Ygb3B0aW9ucy5zaW5nbGV0b24gIT09IFwiYm9vbGVhblwiKSBvcHRpb25zLnNpbmdsZXRvbiA9IGlzT2xkSUUoKTtcblxuXHQvLyBCeSBkZWZhdWx0LCBhZGQgPHN0eWxlPiB0YWdzIHRvIHRoZSA8aGVhZD4gZWxlbWVudFxuICAgICAgICBpZiAoIW9wdGlvbnMuaW5zZXJ0SW50bykgb3B0aW9ucy5pbnNlcnRJbnRvID0gXCJoZWFkXCI7XG5cblx0Ly8gQnkgZGVmYXVsdCwgYWRkIDxzdHlsZT4gdGFncyB0byB0aGUgYm90dG9tIG9mIHRoZSB0YXJnZXRcblx0aWYgKCFvcHRpb25zLmluc2VydEF0KSBvcHRpb25zLmluc2VydEF0ID0gXCJib3R0b21cIjtcblxuXHR2YXIgc3R5bGVzID0gbGlzdFRvU3R5bGVzKGxpc3QsIG9wdGlvbnMpO1xuXG5cdGFkZFN0eWxlc1RvRG9tKHN0eWxlcywgb3B0aW9ucyk7XG5cblx0cmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZSAobmV3TGlzdCkge1xuXHRcdHZhciBtYXlSZW1vdmUgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgaXRlbSA9IHN0eWxlc1tpXTtcblx0XHRcdHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdO1xuXG5cdFx0XHRkb21TdHlsZS5yZWZzLS07XG5cdFx0XHRtYXlSZW1vdmUucHVzaChkb21TdHlsZSk7XG5cdFx0fVxuXG5cdFx0aWYobmV3TGlzdCkge1xuXHRcdFx0dmFyIG5ld1N0eWxlcyA9IGxpc3RUb1N0eWxlcyhuZXdMaXN0LCBvcHRpb25zKTtcblx0XHRcdGFkZFN0eWxlc1RvRG9tKG5ld1N0eWxlcywgb3B0aW9ucyk7XG5cdFx0fVxuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtYXlSZW1vdmUubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBkb21TdHlsZSA9IG1heVJlbW92ZVtpXTtcblxuXHRcdFx0aWYoZG9tU3R5bGUucmVmcyA9PT0gMCkge1xuXHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSBkb21TdHlsZS5wYXJ0c1tqXSgpO1xuXG5cdFx0XHRcdGRlbGV0ZSBzdHlsZXNJbkRvbVtkb21TdHlsZS5pZF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufTtcblxuZnVuY3Rpb24gYWRkU3R5bGVzVG9Eb20gKHN0eWxlcywgb3B0aW9ucykge1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBpdGVtID0gc3R5bGVzW2ldO1xuXHRcdHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdO1xuXG5cdFx0aWYoZG9tU3R5bGUpIHtcblx0XHRcdGRvbVN0eWxlLnJlZnMrKztcblxuXHRcdFx0Zm9yKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGRvbVN0eWxlLnBhcnRzW2pdKGl0ZW0ucGFydHNbal0pO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IoOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRkb21TdHlsZS5wYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0sIG9wdGlvbnMpKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIHBhcnRzID0gW107XG5cblx0XHRcdGZvcih2YXIgaiA9IDA7IGogPCBpdGVtLnBhcnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdHBhcnRzLnB1c2goYWRkU3R5bGUoaXRlbS5wYXJ0c1tqXSwgb3B0aW9ucykpO1xuXHRcdFx0fVxuXG5cdFx0XHRzdHlsZXNJbkRvbVtpdGVtLmlkXSA9IHtpZDogaXRlbS5pZCwgcmVmczogMSwgcGFydHM6IHBhcnRzfTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gbGlzdFRvU3R5bGVzIChsaXN0LCBvcHRpb25zKSB7XG5cdHZhciBzdHlsZXMgPSBbXTtcblx0dmFyIG5ld1N0eWxlcyA9IHt9O1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBpdGVtID0gbGlzdFtpXTtcblx0XHR2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcblx0XHR2YXIgY3NzID0gaXRlbVsxXTtcblx0XHR2YXIgbWVkaWEgPSBpdGVtWzJdO1xuXHRcdHZhciBzb3VyY2VNYXAgPSBpdGVtWzNdO1xuXHRcdHZhciBwYXJ0ID0ge2NzczogY3NzLCBtZWRpYTogbWVkaWEsIHNvdXJjZU1hcDogc291cmNlTWFwfTtcblxuXHRcdGlmKCFuZXdTdHlsZXNbaWRdKSBzdHlsZXMucHVzaChuZXdTdHlsZXNbaWRdID0ge2lkOiBpZCwgcGFydHM6IFtwYXJ0XX0pO1xuXHRcdGVsc2UgbmV3U3R5bGVzW2lkXS5wYXJ0cy5wdXNoKHBhcnQpO1xuXHR9XG5cblx0cmV0dXJuIHN0eWxlcztcbn1cblxuZnVuY3Rpb24gaW5zZXJ0U3R5bGVFbGVtZW50IChvcHRpb25zLCBzdHlsZSkge1xuXHR2YXIgdGFyZ2V0ID0gZ2V0RWxlbWVudChvcHRpb25zLmluc2VydEludG8pXG5cblx0aWYgKCF0YXJnZXQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGEgc3R5bGUgdGFyZ2V0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGZvciB0aGUgJ2luc2VydEludG8nIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcblx0fVxuXG5cdHZhciBsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcCA9IHN0eWxlc0luc2VydGVkQXRUb3Bbc3R5bGVzSW5zZXJ0ZWRBdFRvcC5sZW5ndGggLSAxXTtcblxuXHRpZiAob3B0aW9ucy5pbnNlcnRBdCA9PT0gXCJ0b3BcIikge1xuXHRcdGlmICghbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3ApIHtcblx0XHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoc3R5bGUsIHRhcmdldC5maXJzdENoaWxkKTtcblx0XHR9IGVsc2UgaWYgKGxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wLm5leHRTaWJsaW5nKSB7XG5cdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcC5uZXh0U2libGluZyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cdFx0fVxuXHRcdHN0eWxlc0luc2VydGVkQXRUb3AucHVzaChzdHlsZSk7XG5cdH0gZWxzZSBpZiAob3B0aW9ucy5pbnNlcnRBdCA9PT0gXCJib3R0b21cIikge1xuXHRcdHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwib2JqZWN0XCIgJiYgb3B0aW9ucy5pbnNlcnRBdC5iZWZvcmUpIHtcblx0XHR2YXIgbmV4dFNpYmxpbmcgPSBnZXRFbGVtZW50KG9wdGlvbnMuaW5zZXJ0SW50byArIFwiIFwiICsgb3B0aW9ucy5pbnNlcnRBdC5iZWZvcmUpO1xuXHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoc3R5bGUsIG5leHRTaWJsaW5nKTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJbU3R5bGUgTG9hZGVyXVxcblxcbiBJbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgJ2luc2VydEF0JyAoJ29wdGlvbnMuaW5zZXJ0QXQnKSBmb3VuZC5cXG4gTXVzdCBiZSAndG9wJywgJ2JvdHRvbScsIG9yIE9iamVjdC5cXG4gKGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrLWNvbnRyaWIvc3R5bGUtbG9hZGVyI2luc2VydGF0KVxcblwiKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW1vdmVTdHlsZUVsZW1lbnQgKHN0eWxlKSB7XG5cdGlmIChzdHlsZS5wYXJlbnROb2RlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cdHN0eWxlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGUpO1xuXG5cdHZhciBpZHggPSBzdHlsZXNJbnNlcnRlZEF0VG9wLmluZGV4T2Yoc3R5bGUpO1xuXHRpZihpZHggPj0gMCkge1xuXHRcdHN0eWxlc0luc2VydGVkQXRUb3Auc3BsaWNlKGlkeCwgMSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlU3R5bGVFbGVtZW50IChvcHRpb25zKSB7XG5cdHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcblxuXHRvcHRpb25zLmF0dHJzLnR5cGUgPSBcInRleHQvY3NzXCI7XG5cblx0YWRkQXR0cnMoc3R5bGUsIG9wdGlvbnMuYXR0cnMpO1xuXHRpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucywgc3R5bGUpO1xuXG5cdHJldHVybiBzdHlsZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTGlua0VsZW1lbnQgKG9wdGlvbnMpIHtcblx0dmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcblxuXHRvcHRpb25zLmF0dHJzLnR5cGUgPSBcInRleHQvY3NzXCI7XG5cdG9wdGlvbnMuYXR0cnMucmVsID0gXCJzdHlsZXNoZWV0XCI7XG5cblx0YWRkQXR0cnMobGluaywgb3B0aW9ucy5hdHRycyk7XG5cdGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zLCBsaW5rKTtcblxuXHRyZXR1cm4gbGluaztcbn1cblxuZnVuY3Rpb24gYWRkQXR0cnMgKGVsLCBhdHRycykge1xuXHRPYmplY3Qua2V5cyhhdHRycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0ZWwuc2V0QXR0cmlidXRlKGtleSwgYXR0cnNba2V5XSk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBhZGRTdHlsZSAob2JqLCBvcHRpb25zKSB7XG5cdHZhciBzdHlsZSwgdXBkYXRlLCByZW1vdmUsIHJlc3VsdDtcblxuXHQvLyBJZiBhIHRyYW5zZm9ybSBmdW5jdGlvbiB3YXMgZGVmaW5lZCwgcnVuIGl0IG9uIHRoZSBjc3Ncblx0aWYgKG9wdGlvbnMudHJhbnNmb3JtICYmIG9iai5jc3MpIHtcblx0ICAgIHJlc3VsdCA9IG9wdGlvbnMudHJhbnNmb3JtKG9iai5jc3MpO1xuXG5cdCAgICBpZiAocmVzdWx0KSB7XG5cdCAgICBcdC8vIElmIHRyYW5zZm9ybSByZXR1cm5zIGEgdmFsdWUsIHVzZSB0aGF0IGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGNzcy5cblx0ICAgIFx0Ly8gVGhpcyBhbGxvd3MgcnVubmluZyBydW50aW1lIHRyYW5zZm9ybWF0aW9ucyBvbiB0aGUgY3NzLlxuXHQgICAgXHRvYmouY3NzID0gcmVzdWx0O1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0Ly8gSWYgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbiByZXR1cm5zIGEgZmFsc3kgdmFsdWUsIGRvbid0IGFkZCB0aGlzIGNzcy5cblx0ICAgIFx0Ly8gVGhpcyBhbGxvd3MgY29uZGl0aW9uYWwgbG9hZGluZyBvZiBjc3Ncblx0ICAgIFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHQgICAgXHRcdC8vIG5vb3Bcblx0ICAgIFx0fTtcblx0ICAgIH1cblx0fVxuXG5cdGlmIChvcHRpb25zLnNpbmdsZXRvbikge1xuXHRcdHZhciBzdHlsZUluZGV4ID0gc2luZ2xldG9uQ291bnRlcisrO1xuXG5cdFx0c3R5bGUgPSBzaW5nbGV0b24gfHwgKHNpbmdsZXRvbiA9IGNyZWF0ZVN0eWxlRWxlbWVudChvcHRpb25zKSk7XG5cblx0XHR1cGRhdGUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGUsIHN0eWxlSW5kZXgsIGZhbHNlKTtcblx0XHRyZW1vdmUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGUsIHN0eWxlSW5kZXgsIHRydWUpO1xuXG5cdH0gZWxzZSBpZiAoXG5cdFx0b2JqLnNvdXJjZU1hcCAmJlxuXHRcdHR5cGVvZiBVUkwgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBVUkwuY3JlYXRlT2JqZWN0VVJMID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgVVJMLnJldm9rZU9iamVjdFVSTCA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIEJsb2IgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBidG9hID09PSBcImZ1bmN0aW9uXCJcblx0KSB7XG5cdFx0c3R5bGUgPSBjcmVhdGVMaW5rRWxlbWVudChvcHRpb25zKTtcblx0XHR1cGRhdGUgPSB1cGRhdGVMaW5rLmJpbmQobnVsbCwgc3R5bGUsIG9wdGlvbnMpO1xuXHRcdHJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZSk7XG5cblx0XHRcdGlmKHN0eWxlLmhyZWYpIFVSTC5yZXZva2VPYmplY3RVUkwoc3R5bGUuaHJlZik7XG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRzdHlsZSA9IGNyZWF0ZVN0eWxlRWxlbWVudChvcHRpb25zKTtcblx0XHR1cGRhdGUgPSBhcHBseVRvVGFnLmJpbmQobnVsbCwgc3R5bGUpO1xuXHRcdHJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZSk7XG5cdFx0fTtcblx0fVxuXG5cdHVwZGF0ZShvYmopO1xuXG5cdHJldHVybiBmdW5jdGlvbiB1cGRhdGVTdHlsZSAobmV3T2JqKSB7XG5cdFx0aWYgKG5ld09iaikge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRuZXdPYmouY3NzID09PSBvYmouY3NzICYmXG5cdFx0XHRcdG5ld09iai5tZWRpYSA9PT0gb2JqLm1lZGlhICYmXG5cdFx0XHRcdG5ld09iai5zb3VyY2VNYXAgPT09IG9iai5zb3VyY2VNYXBcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHVwZGF0ZShvYmogPSBuZXdPYmopO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZW1vdmUoKTtcblx0XHR9XG5cdH07XG59XG5cbnZhciByZXBsYWNlVGV4dCA9IChmdW5jdGlvbiAoKSB7XG5cdHZhciB0ZXh0U3RvcmUgPSBbXTtcblxuXHRyZXR1cm4gZnVuY3Rpb24gKGluZGV4LCByZXBsYWNlbWVudCkge1xuXHRcdHRleHRTdG9yZVtpbmRleF0gPSByZXBsYWNlbWVudDtcblxuXHRcdHJldHVybiB0ZXh0U3RvcmUuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ1xcbicpO1xuXHR9O1xufSkoKTtcblxuZnVuY3Rpb24gYXBwbHlUb1NpbmdsZXRvblRhZyAoc3R5bGUsIGluZGV4LCByZW1vdmUsIG9iaikge1xuXHR2YXIgY3NzID0gcmVtb3ZlID8gXCJcIiA6IG9iai5jc3M7XG5cblx0aWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcblx0XHRzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSByZXBsYWNlVGV4dChpbmRleCwgY3NzKTtcblx0fSBlbHNlIHtcblx0XHR2YXIgY3NzTm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcyk7XG5cdFx0dmFyIGNoaWxkTm9kZXMgPSBzdHlsZS5jaGlsZE5vZGVzO1xuXG5cdFx0aWYgKGNoaWxkTm9kZXNbaW5kZXhdKSBzdHlsZS5yZW1vdmVDaGlsZChjaGlsZE5vZGVzW2luZGV4XSk7XG5cblx0XHRpZiAoY2hpbGROb2Rlcy5sZW5ndGgpIHtcblx0XHRcdHN0eWxlLmluc2VydEJlZm9yZShjc3NOb2RlLCBjaGlsZE5vZGVzW2luZGV4XSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN0eWxlLmFwcGVuZENoaWxkKGNzc05vZGUpO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBhcHBseVRvVGFnIChzdHlsZSwgb2JqKSB7XG5cdHZhciBjc3MgPSBvYmouY3NzO1xuXHR2YXIgbWVkaWEgPSBvYmoubWVkaWE7XG5cblx0aWYobWVkaWEpIHtcblx0XHRzdHlsZS5zZXRBdHRyaWJ1dGUoXCJtZWRpYVwiLCBtZWRpYSlcblx0fVxuXG5cdGlmKHN0eWxlLnN0eWxlU2hlZXQpIHtcblx0XHRzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG5cdH0gZWxzZSB7XG5cdFx0d2hpbGUoc3R5bGUuZmlyc3RDaGlsZCkge1xuXHRcdFx0c3R5bGUucmVtb3ZlQ2hpbGQoc3R5bGUuZmlyc3RDaGlsZCk7XG5cdFx0fVxuXG5cdFx0c3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlTGluayAobGluaywgb3B0aW9ucywgb2JqKSB7XG5cdHZhciBjc3MgPSBvYmouY3NzO1xuXHR2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcDtcblxuXHQvKlxuXHRcdElmIGNvbnZlcnRUb0Fic29sdXRlVXJscyBpc24ndCBkZWZpbmVkLCBidXQgc291cmNlbWFwcyBhcmUgZW5hYmxlZFxuXHRcdGFuZCB0aGVyZSBpcyBubyBwdWJsaWNQYXRoIGRlZmluZWQgdGhlbiBsZXRzIHR1cm4gY29udmVydFRvQWJzb2x1dGVVcmxzXG5cdFx0b24gYnkgZGVmYXVsdC4gIE90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBjb252ZXJ0VG9BYnNvbHV0ZVVybHMgb3B0aW9uXG5cdFx0ZGlyZWN0bHlcblx0Ki9cblx0dmFyIGF1dG9GaXhVcmxzID0gb3B0aW9ucy5jb252ZXJ0VG9BYnNvbHV0ZVVybHMgPT09IHVuZGVmaW5lZCAmJiBzb3VyY2VNYXA7XG5cblx0aWYgKG9wdGlvbnMuY29udmVydFRvQWJzb2x1dGVVcmxzIHx8IGF1dG9GaXhVcmxzKSB7XG5cdFx0Y3NzID0gZml4VXJscyhjc3MpO1xuXHR9XG5cblx0aWYgKHNvdXJjZU1hcCkge1xuXHRcdC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI2NjAzODc1XG5cdFx0Y3NzICs9IFwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIiArIGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSkgKyBcIiAqL1wiO1xuXHR9XG5cblx0dmFyIGJsb2IgPSBuZXcgQmxvYihbY3NzXSwgeyB0eXBlOiBcInRleHQvY3NzXCIgfSk7XG5cblx0dmFyIG9sZFNyYyA9IGxpbmsuaHJlZjtcblxuXHRsaW5rLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuXG5cdGlmKG9sZFNyYykgVVJMLnJldm9rZU9iamVjdFVSTChvbGRTcmMpO1xufVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgJ2V4cG9zZS1sb2FkZXI/QkJqLk1hc2tzIWJiai1tYXNrcy9kaXN0L2Jiai1tYXNrcy5qcydcbmltcG9ydCAnZXhwb3NlLWxvYWRlcj9CYXNpcy5JbnB1dE1hc2tpbmchYmFzaXMtaW5wdXQtbWFza2luZy9kaXN0L2Jhc2lzLWlucHV0LW1hc2tpbmcuanMnXG5pbXBvcnQgJ2V4cG9zZS1sb2FkZXI/ZmxhdHBpY2tyIWZsYXRwaWNrci9kaXN0L2ZsYXRwaWNrci5qcydcbmltcG9ydCAnZXhwb3NlLWxvYWRlcj9CYXNpcy5BZ0dyaWRDb21wb25lbnRzIWJhc2lzLWFnZ3JpZC1jb21wb25lbnRzL2Rpc3QvYmFzaXMtYWdncmlkLWNvbXBvbmVudHMuanMnXG5cbnJlcXVpcmUoJ2ZsYXRwaWNrci9kaXN0L2ZsYXRwaWNrci5jc3MnKVxucmVxdWlyZSgnLi9zdHlsZS9jbGFzc2VzLmNzcycpXG5cbmV4cG9ydCAqIGZyb20gJy4vcG9seWZpbGxzLmpzJ1xuZXhwb3J0ICogZnJvbSAnLi9hcGknXG4iLCJpZighZ2xvYmFsW1wiQkJqXCJdKSBnbG9iYWxbXCJCQmpcIl0gPSB7fTtcbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsW1wiQkJqXCJdW1wiTWFza3NcIl0gPSByZXF1aXJlKFwiLSFEOlxcXFxHaXRodWJcXFxcQkJqR3JpZEV4V2lkZ2V0XFxcXGNsaWVudFxcXFxub2RlX21vZHVsZXNcXFxcYmFiZWwtbG9hZGVyXFxcXGxpYlxcXFxpbmRleC5qcz8/cmVmLS00IS5cXFxcYmJqLW1hc2tzLmpzXCIpOyIsIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIk1hc2tzXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIkJCalwiXSA9IHJvb3RbXCJCQmpcIl0gfHwge30sIHJvb3RbXCJCQmpcIl1bXCJNYXNrc1wiXSA9IGZhY3RvcnkoKTtcbn0pKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4vKioqKioqLyBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4vKioqKioqLyBcdFx0XHRcdGdldDogZ2V0dGVyXG4vKioqKioqLyBcdFx0XHR9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNSk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIChbXG4vKiAwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSB0b0ludGVnZXI7XG5mdW5jdGlvbiB0b0ludGVnZXIoZGlydHlOdW1iZXIpIHtcbiAgaWYgKGRpcnR5TnVtYmVyID09PSBudWxsIHx8IGRpcnR5TnVtYmVyID09PSB0cnVlIHx8IGRpcnR5TnVtYmVyID09PSBmYWxzZSkge1xuICAgIHJldHVybiBOYU47XG4gIH1cblxuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcblxuICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgIHJldHVybiBudW1iZXI7XG4gIH1cblxuICByZXR1cm4gbnVtYmVyIDwgMCA/IE1hdGguY2VpbChudW1iZXIpIDogTWF0aC5mbG9vcihudW1iZXIpO1xufVxuXG4vKioqLyB9KSxcbi8qIDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19OdW1iZXJNYXNrX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xuLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJiai1tYXNrcyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19OdW1iZXJNYXNrX19bXCJhXCIgLyogZGVmYXVsdCAqL10pO1xuXG4vKioqLyB9KSxcbi8qIDIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0RhdGVNYXNrX19bXCJlXCJdOyB9KTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImdcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0RhdGVNYXNrX19bXCJnXCJdOyB9KTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImhcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0RhdGVNYXNrX19bXCJoXCJdOyB9KTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0RhdGVNYXNrX19bXCJhXCJdOyB9KTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0RhdGVNYXNrX19bXCJiXCJdOyB9KTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0RhdGVNYXNrX19bXCJkXCJdOyB9KTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImZcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0RhdGVNYXNrX19bXCJmXCJdOyB9KTtcbi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYmotbWFza3MgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImNcIl0gPSAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fW1wiY1wiIC8qIGRlZmF1bHQgKi9dKTtcblxuLyoqKi8gfSksXG4vKiAzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSB0elBhcnNlVGltZXpvbmU7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX190elRva2VuaXplRGF0ZV9pbmRleF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcblxuXG52YXIgTUlMTElTRUNPTkRTX0lOX0hPVVIgPSAzNjAwMDAwXG52YXIgTUlMTElTRUNPTkRTX0lOX01JTlVURSA9IDYwMDAwXG5cbnZhciBwYXR0ZXJucyA9IHtcbiAgdGltZXpvbmU6IC8oW1orLV0uKikkLyxcbiAgdGltZXpvbmVaOiAvXihaKSQvLFxuICB0aW1lem9uZUhIOiAvXihbKy1dKShcXGR7Mn0pJC8sXG4gIHRpbWV6b25lSEhNTTogL14oWystXSkoXFxkezJ9KTo/KFxcZHsyfSkkLyxcbiAgdGltZXpvbmVJQU5BOiAvKFVUQ3woPzpbYS16QS1aXStcXC9bYS16QS1aX10rKD86XFwvW2EtekEtWl9dKyk/KSkkL1xufVxuXG4vLyBQYXJzZSB2YXJpb3VzIHRpbWUgem9uZSBvZmZzZXQgZm9ybWF0cyB0byBhbiBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzXG5mdW5jdGlvbiB0elBhcnNlVGltZXpvbmUodGltZXpvbmVTdHJpbmcsIGRhdGUpIHtcbiAgdmFyIHRva2VuXG4gIHZhciBhYnNvbHV0ZU9mZnNldFxuXG4gIC8vIFpcbiAgdG9rZW4gPSBwYXR0ZXJucy50aW1lem9uZVouZXhlYyh0aW1lem9uZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIHZhciBob3Vyc1xuXG4gIC8vIMKxaGhcbiAgdG9rZW4gPSBwYXR0ZXJucy50aW1lem9uZUhILmV4ZWModGltZXpvbmVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGhvdXJzID0gcGFyc2VJbnQodG9rZW5bMl0sIDEwKVxuXG4gICAgaWYgKCF2YWxpZGF0ZVRpbWV6b25lKGhvdXJzKSkge1xuICAgICAgcmV0dXJuIE5hTlxuICAgIH1cblxuICAgIGFic29sdXRlT2Zmc2V0ID0gaG91cnMgKiBNSUxMSVNFQ09ORFNfSU5fSE9VUlxuICAgIHJldHVybiB0b2tlblsxXSA9PT0gJysnID8gLWFic29sdXRlT2Zmc2V0IDogYWJzb2x1dGVPZmZzZXRcbiAgfVxuXG4gIC8vIMKxaGg6bW0gb3IgwrFoaG1tXG4gIHRva2VuID0gcGF0dGVybnMudGltZXpvbmVISE1NLmV4ZWModGltZXpvbmVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGhvdXJzID0gcGFyc2VJbnQodG9rZW5bMl0sIDEwKVxuICAgIHZhciBtaW51dGVzID0gcGFyc2VJbnQodG9rZW5bM10sIDEwKVxuXG4gICAgaWYgKCF2YWxpZGF0ZVRpbWV6b25lKGhvdXJzLCBtaW51dGVzKSkge1xuICAgICAgcmV0dXJuIE5hTlxuICAgIH1cblxuICAgIGFic29sdXRlT2Zmc2V0ID1cbiAgICAgIGhvdXJzICogTUlMTElTRUNPTkRTX0lOX0hPVVIgKyBtaW51dGVzICogTUlMTElTRUNPTkRTX0lOX01JTlVURVxuICAgIHJldHVybiB0b2tlblsxXSA9PT0gJysnID8gLWFic29sdXRlT2Zmc2V0IDogYWJzb2x1dGVPZmZzZXRcbiAgfVxuXG4gIC8vIElBTkEgdGltZSB6b25lXG4gIHRva2VuID0gcGF0dGVybnMudGltZXpvbmVJQU5BLmV4ZWModGltZXpvbmVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIC8vIHZhciBbZlllYXIsIGZNb250aCwgZkRheSwgZkhvdXIsIGZNaW51dGUsIGZTZWNvbmRdID0gdHpUb2tlbml6ZURhdGUoZGF0ZSwgdGltZXpvbmVTdHJpbmcpXG4gICAgdmFyIHRva2VucyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3R6VG9rZW5pemVEYXRlX2luZGV4X2pzX19bXCJhXCIgLyogZGVmYXVsdCAqL10pKGRhdGUsIHRpbWV6b25lU3RyaW5nKVxuICAgIHZhciBhc1VUQyA9IERhdGUuVVRDKFxuICAgICAgdG9rZW5zWzBdLFxuICAgICAgdG9rZW5zWzFdIC0gMSxcbiAgICAgIHRva2Vuc1syXSxcbiAgICAgIHRva2Vuc1szXSxcbiAgICAgIHRva2Vuc1s0XSxcbiAgICAgIHRva2Vuc1s1XVxuICAgIClcbiAgICB2YXIgdGltZXN0YW1wV2l0aE1zWmVyb2VkID0gZGF0ZS5nZXRUaW1lKCkgLSAoZGF0ZS5nZXRUaW1lKCkgJSAxMDAwKVxuICAgIHJldHVybiAtKGFzVVRDIC0gdGltZXN0YW1wV2l0aE1zWmVyb2VkKVxuICB9XG5cbiAgcmV0dXJuIDBcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVUaW1lem9uZShob3VycywgbWludXRlcykge1xuICBpZiAobWludXRlcyAhPSBudWxsICYmIChtaW51dGVzIDwgMCB8fCBtaW51dGVzID4gNTkpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5cbi8qKiovIH0pLFxuLyogNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N0cmluZ01hc2tfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xuLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJiai1tYXNrcyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdHJpbmdNYXNrX19bXCJhXCIgLyogZGVmYXVsdCAqL10pO1xuXG4vKioqLyB9KSxcbi8qIDUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVXRpbHNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBVdGlsczsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19OdW1iZXJNYXNrX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fRGF0ZU1hc2tfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19TdHJpbmdNYXNrX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fVHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjApO1xuLyogaGFybW9ueSByZWV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVHlwZXNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1R5cGVzX19bXCJhXCJdOyB9KTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk51bWJlck1hc2tcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX051bWJlck1hc2tfX1tcImFcIl07IH0pO1xuLyogaGFybW9ueSByZWV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRGF0ZU1hc2tcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX0RhdGVNYXNrX19bXCJjXCJdOyB9KTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN0cmluZ01hc2tcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1N0cmluZ01hc2tfX1tcImFcIl07IH0pO1xuLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJiai1tYXNrcyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cblxuXG5cbnZhciBVdGlscyA9IHtcbiAgRGF0ZXM6IHtcbiAgICBnZXREYXlPZlllYXI6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fRGF0ZU1hc2tfX1tcImVcIiAvKiBnZXREYXlPZlllYXIgKi9dLFxuICAgIGdldFdlZWtOdW1iZXI6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fRGF0ZU1hc2tfX1tcImdcIiAvKiBnZXRXZWVrTnVtYmVyICovXSxcbiAgICBnZXRXZWVrU3RhcnRCeUxvY2FsZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19EYXRlTWFza19fW1wiaFwiIC8qIGdldFdlZWtTdGFydEJ5TG9jYWxlICovXSxcbiAgICBJU19EQVRFX1JFR0VYOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX0RhdGVNYXNrX19bXCJhXCIgLyogSVNfREFURV9SRUdFWCAqL10sXG4gICAgSVNfVElNRV9SRUdFWDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19EYXRlTWFza19fW1wiYlwiIC8qIElTX1RJTUVfUkVHRVggKi9dLFxuICAgIGZpeFNob3J0SVNPOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX0RhdGVNYXNrX19bXCJkXCIgLyogZml4U2hvcnRJU08gKi9dLFxuICAgIGdldFRpbWV6b25lT3JPZmZzZXQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fRGF0ZU1hc2tfX1tcImZcIiAvKiBnZXRUaW1lem9uZU9yT2Zmc2V0ICovXVxuICB9XG59O1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1R5cGVzX19bXCJhXCIgLyogZGVmYXVsdCAqL10pO1xuXG5cbi8qKiovIH0pLFxuLyogNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJiai1tYXNrcyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbi8qKlxuICogTnVtYmVyTWFza1xuICpcbiAqIEEgamF2YXNjcmlwdCBpbXBsZW1lbnRhdGlvbiBmb3IgQkJqIG51bWJlcnMgbWFza2luZ1xuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cbnZhciBOdW1iZXJNYXNrID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTnVtYmVyTWFzaygpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTnVtYmVyTWFzayk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoTnVtYmVyTWFzaywgbnVsbCwgW3tcbiAgICBrZXk6IFwibWFza1wiLFxuXG4gICAgLyoqXG4gICAgICogTWFzayB0aGUgZ2l2ZW4gbnVtYmVyIHdpdGggdGhlIGdpdmVuIG1hc2sgYWNjb3JkaW5nIHRvIEJCaiBydWxlc1xuICAgICAqXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IG51bWJlciB0aGUgbnVtYmVyIHRvIGZvcm1hdFxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtYXNrIHRoZSBtYXNrIHRvIHVzZSBmb3IgZm9ybWF0dGluZ1xuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbZ3JvdXBpbmdTZXBhcmF0b3I9LF0gLSBhIGNoYXIgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgZ3JvdXBpbmcgc2VwYXJhdG9yXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFtkZWNpbWFsU2VwYXJhdG9yPS5dICAtIGEgY2hhciB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBkZWNpbWFsIHNlcGFyYXRvclxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW2ZvcmNlVHJhaWxpbmdaZXJvcz1mYWxzZV0gLSBBZmZlY3RzIHRoZSBvdXRwdXQgYnkgc3dpdGNoaW5nIHRoZSB3YXkgYSBtYXNrIHdpdGggXCIjXCIgY2hhcmFjdGVycyBpbiB0aGUgdHJhaWxpbmcgcG9zaXRpb25zIGlzIGZpbGxlZC5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZXhhbXBsZSwgdGhlIGZ1bmN0aW9uIGBOdW1iZXJNYXNrLm1hc2soLjEwOlwiIy4jI1wiKWAgcmV0dXJucyBgIC4xMGAgaW5zdGVhZCBvZiBgIC4xIGBcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtsb29zZT10cnVlXSB3aGVuIHRydWUgLCBlcnJvcnMgd2lsbCBiZSBpZ25vcmVkIGFuZCB0aGUgbWV0aG9kIHdpbGwgdHJ5IGF0IGFwcGx5IHRoZSBtYXNrXG4gICAgICogICAgICAgICAgICAgICAgYW55d2F5ICwgb3RoZXJ3aXNlIGl0IHdpbGwgc3RvcCBhdCBmaXJzdCBlcnJvciBhbmQgdGhyb3cgaXQuXG4gICAgICogXG4gICAgICogQHRocm93cyB7TWFza0Vycm9yfSBvbmx5IGlmIGxvb3NlIGlzIGRpc2FibGVkXG4gICAgICogXG4gICAgICogQHJldHVybnMge1N0cmluZ30gdGhlIG1hc2tlZCBudW1iZXJcbiAgICAgKi9cbiAgICB2YWx1ZTogZnVuY3Rpb24gbWFzayhudW1iZXIsIF9tYXNrKSB7XG4gICAgICB2YXIgZ3JvdXBpbmdTZXBhcmF0b3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6ICcsJztcbiAgICAgIHZhciBkZWNpbWFsU2VwYXJhdG9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiAnLic7XG4gICAgICB2YXIgZm9yY2VUcmFpbGluZ1plcm9zID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiBmYWxzZTtcbiAgICAgIHZhciBsb29zZSA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzVdIDogdHJ1ZTtcbiAgICAgIHZhciBtYXNrTGVuID0gX21hc2subGVuZ3RoO1xuXG4gICAgICBpZiAoMCA9PT0gbWFza0xlbikge1xuICAgICAgICBpZiAobG9vc2UpIHJldHVybiBzdHI7IC8vIGZyaWVuZGx5IHNpbGVudCBmYWlsXG4gICAgICAgIGVsc2UgdGhyb3cge1xuICAgICAgICAgICAgbmFtZTogJ01hc2tFcnJvcicsXG4gICAgICAgICAgICBtZXNzYWdlOiBcIk1hc2tFcnJvcjogTWFzayBpcyBlbXB0eVwiXG4gICAgICAgICAgfTtcbiAgICAgIH0gLy8gR2V0IG1hZ25pdHVkZSBhbmQgcHJlY2lzaW9uIG9mIE1BU0tcblxuXG4gICAgICB2YXIgbWFza0JlZm9yZURlY2ltYWwgPSAwO1xuICAgICAgdmFyIG1hc2tBZnRlckRlY2ltYWwgPSAwO1xuICAgICAgdmFyIGZvdW5kRGVjaW1hbCA9IGZhbHNlO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hc2tMZW47ICsraSkge1xuICAgICAgICB2YXIgbSA9IF9tYXNrLmNoYXJBdChpKTtcblxuICAgICAgICBpZiAobSA9PSAnMCcgfHwgbSA9PSAnIycpIHtcbiAgICAgICAgICBpZiAoZm91bmREZWNpbWFsKSArK21hc2tBZnRlckRlY2ltYWw7ZWxzZSArK21hc2tCZWZvcmVEZWNpbWFsO1xuICAgICAgICB9IGVsc2UgaWYgKG0gPT0gJy4nKSBmb3VuZERlY2ltYWwgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgbnVtID0gTnVtYmVyTWFzay5fcm91bmQobnVtYmVyLCBtYXNrQWZ0ZXJEZWNpbWFsKTtcblxuICAgICAgdmFyIGJ5dGVzID0gTnVtYmVyTWFzay5fdG9DaGFyQXJyYXkobnVtKTsgLy8gR2V0IG1hZ25pdHVkZSBhbmQgcHJlY2lzaW9uIG9mIE5VTUJFUlxuXG5cbiAgICAgIHZhciBpbkxlbiA9IGJ5dGVzLmxlbmd0aDtcbiAgICAgIHZhciBudW1CZWZvcmVEZWNpbWFsID0gMDtcbiAgICAgIHZhciBudW1BZnRlckRlY2ltYWwgPSAwO1xuICAgICAgZm91bmREZWNpbWFsID0gZmFsc2U7XG5cbiAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBpbkxlbjsgKytfaSkge1xuICAgICAgICBpZiAoYnl0ZXNbX2ldID09ICcuJykgZm91bmREZWNpbWFsID0gdHJ1ZTtlbHNlIHtcbiAgICAgICAgICBpZiAoZm91bmREZWNpbWFsKSArK251bUFmdGVyRGVjaW1hbDtlbHNlICsrbnVtQmVmb3JlRGVjaW1hbDtcbiAgICAgICAgfVxuICAgICAgfSAvLyBhbHdheXMgaWdub3JlIG1hc2sgb3ZlcmZsb3dcblxuXG4gICAgICBpZiAobnVtQmVmb3JlRGVjaW1hbCA+IG1hc2tCZWZvcmVEZWNpbWFsKSB7XG4gICAgICAgIGlmIChsb29zZSkgcmV0dXJuIG51bWJlci50b1N0cmluZygpOyAvLyBmcmllbmRseSBzaWxlbnQgZmFpbFxuICAgICAgICBlbHNlIHRocm93IHtcbiAgICAgICAgICAgIG5hbWU6ICdNYXNrRXJyb3InLFxuICAgICAgICAgICAgbWVzc2FnZTogXCJNYXNrRXJyb3I6IE51bWJlciBpcyB0b28gbGFyZ2UgZm9yIG1hc2tcIlxuICAgICAgICAgIH07XG4gICAgICB9IC8vIHJvdW5kIGlmIG1hc2sgaXMgZm9yIGEgbG93ZXIgcHJlY2lzaW9uIG51bWJlclxuXG5cbiAgICAgIGlmIChudW1BZnRlckRlY2ltYWwgPiBtYXNrQWZ0ZXJEZWNpbWFsKSB7XG4gICAgICAgIG51bSA9IE51bWJlck1hc2suX3JvdW5kKG51bSwgbWFza0FmdGVyRGVjaW1hbCk7XG4gICAgICAgIGJ5dGVzID0gTnVtYmVyTWFzay5fdG9DaGFyQXJyYXkobnVtKTtcbiAgICAgICAgaW5MZW4gPSBieXRlcy5sZW5ndGg7IC8vIEdldCBuZXcgbWFnbml0dWRlIGFuZCBwcmVjaXNpb24gb2YgTlVNQkVSXG5cbiAgICAgICAgbnVtQmVmb3JlRGVjaW1hbCA9IDA7XG4gICAgICAgIG51bUFmdGVyRGVjaW1hbCA9IDA7XG4gICAgICAgIGZvdW5kRGVjaW1hbCA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IGluTGVuOyArK19pMikge1xuICAgICAgICAgIGlmIChieXRlc1tfaTJdID09ICcuJykgZm91bmREZWNpbWFsID0gdHJ1ZTtlbHNlIHtcbiAgICAgICAgICAgIGlmIChmb3VuZERlY2ltYWwpICsrbnVtQWZ0ZXJEZWNpbWFsO2Vsc2UgKytudW1CZWZvcmVEZWNpbWFsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBhbHdheXMgaWdub3JlIG1hc2sgb3ZlcmZsb3dcblxuXG4gICAgICAgIGlmIChudW1CZWZvcmVEZWNpbWFsID4gbWFza0JlZm9yZURlY2ltYWwpIHtcbiAgICAgICAgICBpZiAobG9vc2UpIHJldHVybiBudW1iZXIudG9TdHJpbmcoKTsgLy8gZnJpZW5kbHkgc2lsZW50IGZhaWxcbiAgICAgICAgICBlbHNlIHRocm93IHtcbiAgICAgICAgICAgICAgbmFtZTogJ01hc2tFcnJvcicsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IFwiTWFza0Vycm9yOiBOdW1iZXIgaXMgdG9vIGxhcmdlIGZvciBtYXNrXCJcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGZpbGxCeXRlID0gJyAnLFxuICAgICAgICAgIGZsb2F0Qnl0ZSA9ICcgJztcbiAgICAgIHZhciBpblBvcyA9IDAsXG4gICAgICAgICAgb3V0UG9zID0gMCxcbiAgICAgICAgICBmbG9hdFBvcyA9IDA7XG4gICAgICBpZiAoX21hc2suY2hhckF0KDApID09ICcqJykgZmlsbEJ5dGUgPSAnKic7XG4gICAgICB2YXIgZmlsbEluaXQgPSBmaWxsQnl0ZTtcbiAgICAgIHZhciBpc05lZ2F0aXZlID0gTnVtYmVyTWFzay5fZ2V0U2lnbihudW0pIDwgMDtcbiAgICAgIHZhciBlbWl0RGVjaW1hbCA9IGluTGVuID4gMCB8fCBfbWFzay5pbmRleE9mKCcwJykgPj0gMDtcbiAgICAgIHZhciBmb3VuZFplcm8gPSBmYWxzZTtcbiAgICAgIHZhciBmb3VuZERpZ2l0ID0gZmFsc2U7XG4gICAgICB2YXIgY3VycmVuY3kgPSBmYWxzZTtcbiAgICAgIGZvdW5kRGVjaW1hbCA9IGZhbHNlO1xuICAgICAgdmFyIHJldCA9IG5ldyBBcnJheShtYXNrTGVuKTtcblxuICAgICAgZm9yICh2YXIgbWFza1BvcyA9IDA7IG1hc2tQb3MgPCBtYXNrTGVuOyArK21hc2tQb3MpIHtcbiAgICAgICAgdmFyIF9tID0gX21hc2suY2hhckF0KG1hc2tQb3MpO1xuXG4gICAgICAgIHN3aXRjaCAoX20pIHtcbiAgICAgICAgICBjYXNlICcwJzpcbiAgICAgICAgICAgIC0tbWFza0JlZm9yZURlY2ltYWw7XG5cbiAgICAgICAgICAgIGlmIChtYXNrQmVmb3JlRGVjaW1hbCA8IG51bUJlZm9yZURlY2ltYWwgJiYgaW5Qb3MgPCBpbkxlbikge1xuICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9IGJ5dGVzW2luUG9zXTtcbiAgICAgICAgICAgICAgKytpblBvcztcbiAgICAgICAgICAgICAgZm91bmREaWdpdCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9ICcwJztcbiAgICAgICAgICAgICAgZm91bmRaZXJvID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgKytvdXRQb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJyMnOlxuICAgICAgICAgICAgLS1tYXNrQmVmb3JlRGVjaW1hbDtcblxuICAgICAgICAgICAgaWYgKG1hc2tCZWZvcmVEZWNpbWFsIDwgbnVtQmVmb3JlRGVjaW1hbCAmJiBpblBvcyA8IGluTGVuKSB7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gYnl0ZXNbaW5Qb3NdO1xuICAgICAgICAgICAgICArK2luUG9zO1xuICAgICAgICAgICAgICBmb3VuZERpZ2l0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZm91bmREZWNpbWFsICYmIGZvcmNlVHJhaWxpbmdaZXJvcyAmJiBOdW1iZXJNYXNrLl9nZXRTaWduKG51bSkgIT0gMCA/ICcwJyA6IGZpbGxCeXRlO1xuICAgICAgICAgICAgICBpZiAoIWZvdW5kRGVjaW1hbCkgZmxvYXRQb3MgPSBtYXNrUG9zO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICArK291dFBvcztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnLCc6XG4gICAgICAgICAgICBpZiAoZm91bmRaZXJvIHx8IGluUG9zID4gMCkgcmV0W291dFBvc10gPSBncm91cGluZ1NlcGFyYXRvcjtlbHNlIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSBmaWxsQnl0ZTtcbiAgICAgICAgICAgICAgaWYgKCFmb3VuZERlY2ltYWwpIGZsb2F0UG9zID0gbWFza1BvcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICsrb3V0UG9zO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICctJzpcbiAgICAgICAgICAgIGlmICghZm91bmREaWdpdCAmJiBmbG9hdEJ5dGUgPT0gJyAnKSB7XG4gICAgICAgICAgICAgIGlmIChpc05lZ2F0aXZlKSBmbG9hdEJ5dGUgPSAnLSc7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZmlsbEJ5dGU7XG4gICAgICAgICAgICAgIGZsb2F0UG9zID0gZm91bmREZWNpbWFsID8gLTEgOiBtYXNrUG9zO1xuICAgICAgICAgICAgfSBlbHNlIHJldFtvdXRQb3NdID0gaXNOZWdhdGl2ZSA/ICctJyA6IGZpbGxCeXRlO1xuXG4gICAgICAgICAgICArK291dFBvcztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnKyc6XG4gICAgICAgICAgICBpZiAoIWZvdW5kRGlnaXQgJiYgZmxvYXRCeXRlID09ICcgJykge1xuICAgICAgICAgICAgICBmbG9hdEJ5dGUgPSBpc05lZ2F0aXZlID8gJy0nIDogJysnO1xuICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9IGZpbGxCeXRlO1xuICAgICAgICAgICAgICBmbG9hdFBvcyA9IGZvdW5kRGVjaW1hbCA/IC0xIDogbWFza1BvcztcbiAgICAgICAgICAgIH0gZWxzZSByZXRbb3V0UG9zXSA9IGlzTmVnYXRpdmUgPyAnLScgOiAnKyc7XG5cbiAgICAgICAgICAgICsrb3V0UG9zO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICckJzpcbiAgICAgICAgICAgIGlmICghZm91bmREaWdpdCAmJiBmbG9hdEJ5dGUgPT0gJyAnKSB7XG4gICAgICAgICAgICAgIGZsb2F0Qnl0ZSA9ICckJztcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSBmaWxsQnl0ZTtcbiAgICAgICAgICAgICAgZmxvYXRQb3MgPSBmb3VuZERlY2ltYWwgPyAtMSA6IG1hc2tQb3M7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9ICckJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgKytvdXRQb3M7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAvLyBjYXNlICcmJzpcbiAgICAgICAgICAvLyAgIGN1cnJlbmN5ID0gdHJ1ZVxuICAgICAgICAgIC8vICAgaWYgKCFmb3VuZERpZ2l0ICYmIGZsb2F0Qnl0ZSA9PSAnICcpIHtcbiAgICAgICAgICAvLyAgICAgZmxvYXRCeXRlID0gJyYnXG4gICAgICAgICAgLy8gICAgIHJldFtvdXRQb3NdID0gZmlsbEJ5dGVcbiAgICAgICAgICAvLyAgICAgZmxvYXRQb3MgPSBmb3VuZERlY2ltYWwgPyAtMSA6IG1hc2tQb3NcbiAgICAgICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gICAgIHJldFtvdXRQb3NdID0gJyYnXG4gICAgICAgICAgLy8gICB9XG4gICAgICAgICAgLy8gICArK291dFBvc1xuICAgICAgICAgIC8vICAgYnJlYWtcbiAgICAgICAgICAvLyBjYXNlICdAJzpcbiAgICAgICAgICAvLyAgIGN1cnJlbmN5ID0gdHJ1ZVxuICAgICAgICAgIC8vICAgaWYgKCFmb3VuZERpZ2l0ICYmIGZsb2F0Qnl0ZSA9PSAnICcpIHtcbiAgICAgICAgICAvLyAgICAgZmxvYXRCeXRlID0gJ0AnXG4gICAgICAgICAgLy8gICAgIHJldFtvdXRQb3NdID0gZmlsbEJ5dGVcbiAgICAgICAgICAvLyAgICAgZmxvYXRQb3MgPSBmb3VuZERlY2ltYWwgPyAtMSA6IG1hc2tQb3NcbiAgICAgICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gICAgIHJldFtvdXRQb3NdID0gJ0AnXG4gICAgICAgICAgLy8gICB9XG4gICAgICAgICAgLy8gICArK291dFBvc1xuICAgICAgICAgIC8vICAgYnJlYWtcblxuICAgICAgICAgIGNhc2UgJygnOlxuICAgICAgICAgICAgaWYgKCFmb3VuZERpZ2l0ICYmIGZsb2F0Qnl0ZSA9PSAnICcpIHtcbiAgICAgICAgICAgICAgaWYgKGlzTmVnYXRpdmUpIGZsb2F0Qnl0ZSA9ICcoJztcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSBmaWxsQnl0ZTtcbiAgICAgICAgICAgICAgZmxvYXRQb3MgPSBmb3VuZERlY2ltYWwgPyAtMSA6IG1hc2tQb3M7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoaXNOZWdhdGl2ZSkge1xuICAgICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJygnO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZm91bmREZWNpbWFsID8gJyAnIDogZmlsbEJ5dGU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgKytvdXRQb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJyknOlxuICAgICAgICAgICAgaWYgKGlzTmVnYXRpdmUpIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnKSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9IGZvdW5kRGVjaW1hbCA/ICcgJyA6IGZpbGxCeXRlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICArK291dFBvcztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnQyc6XG4gICAgICAgICAgICBpZiAobWFza1BvcyA8IG1hc2tMZW4gLSAxICYmIF9tYXNrLmNoYXJBdChtYXNrUG9zICsgMSkgPT0gJ1InKSB7XG4gICAgICAgICAgICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnQyc7XG4gICAgICAgICAgICAgICAgcmV0W291dFBvcyArIDFdID0gJ1InO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJyAnO1xuICAgICAgICAgICAgICAgIHJldFtvdXRQb3MgKyAxXSA9ICcgJztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIG91dFBvcyArPSAyO1xuICAgICAgICAgICAgICArK21hc2tQb3M7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9ICdDJztcbiAgICAgICAgICAgICAgKytvdXRQb3M7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICBpZiAobWFza1BvcyA8IG1hc2tMZW4gLSAxICYmIF9tYXNrLmNoYXJBdChtYXNrUG9zICsgMSkgPT0gJ1InKSB7XG4gICAgICAgICAgICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnQyc7XG4gICAgICAgICAgICAgICAgcmV0W291dFBvcyArIDFdID0gJ1InO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJ0QnO1xuICAgICAgICAgICAgICAgIHJldFtvdXRQb3MgKyAxXSA9ICdSJztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIG91dFBvcyArPSAyO1xuICAgICAgICAgICAgICArK21hc2tQb3M7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9ICdEJztcbiAgICAgICAgICAgICAgKytvdXRQb3M7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnKic6XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9ICcqJztcbiAgICAgICAgICAgICsrb3V0UG9zO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICcuJzpcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZW1pdERlY2ltYWwgPyBkZWNpbWFsU2VwYXJhdG9yIDogZmlsbEJ5dGU7XG4gICAgICAgICAgICBmaWxsQnl0ZSA9ICcgJztcbiAgICAgICAgICAgIGZvdW5kRGVjaW1hbCA9IHRydWU7XG4gICAgICAgICAgICArK2luUG9zO1xuICAgICAgICAgICAgKytvdXRQb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ0InOlxuICAgICAgICAgICAgcmV0W291dFBvc10gPSAnICc7XG4gICAgICAgICAgICArK291dFBvcztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gX207XG4gICAgICAgICAgICArK291dFBvcztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmbG9hdEJ5dGUgIT0gJyAnKSB7XG4gICAgICAgIGlmIChmbG9hdFBvcyA8IDApIGZsb2F0UG9zID0gb3V0UG9zO1xuXG4gICAgICAgIHdoaWxlIChmbG9hdFBvcyA+PSBtYXNrTGVuKSB7XG4gICAgICAgICAgLS1mbG9hdFBvcztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXRbZmxvYXRQb3NdID09IGZpbGxJbml0KSByZXRbZmxvYXRQb3NdID0gZmxvYXRCeXRlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmV0LmpvaW4oJycpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfc2hpZnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3NoaWZ0KG51bWJlciwgcHJlY2lzaW9uLCByZXZlcnNlU2hpZnQpIHtcbiAgICAgIGlmIChyZXZlcnNlU2hpZnQpIHByZWNpc2lvbiA9IC1wcmVjaXNpb247XG4gICAgICB2YXIgbnVtQXJyYXkgPSAoJycgKyBudW1iZXIpLnNwbGl0KCdlJyk7XG4gICAgICByZXR1cm4gKyhudW1BcnJheVswXSArICdlJyArIChudW1BcnJheVsxXSA/ICtudW1BcnJheVsxXSArIHByZWNpc2lvbiA6IHByZWNpc2lvbikpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfcm91bmRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3JvdW5kKG51bWJlciwgcHJlY2lzaW9uKSB7XG4gICAgICByZXR1cm4gTnVtYmVyTWFzay5fc2hpZnQoTWF0aC5yb3VuZChOdW1iZXJNYXNrLl9zaGlmdChudW1iZXIsIHByZWNpc2lvbiwgZmFsc2UpKSwgcHJlY2lzaW9uLCB0cnVlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX3RvQ2hhckFycmF5XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF90b0NoYXJBcnJheShudW1iZXIpIHtcbiAgICAgIHZhciBzaWdudW0gPSBOdW1iZXJNYXNrLl9nZXRTaWduKG51bWJlcik7XG5cbiAgICAgIHZhciBjaGFycyA9IFtdO1xuXG4gICAgICBpZiAoc2lnbnVtICE9PSAwKSB7XG4gICAgICAgIHZhciBzdHJpbmcgPSBzaWdudW0gPCAwID8gXCJcIi5jb25jYXQoLTEgKiBudW1iZXIudG9TdHJpbmcoKSkgOiBudW1iZXIudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKHN0cmluZy5sZW5ndGggPiAxICYmIHN0cmluZy5jaGFyQXQoMCkgPT0gJzAnKSBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyaW5nKDEpOyAvLyBUaGUgc3RyaW5nIGNvbnRhaW5zIG9ubHkgWzAtOV0gYW5kICcuJ1xuXG4gICAgICAgIGNoYXJzID0gc3RyaW5nLnNwbGl0KCcnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNoYXJzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBzaWduIG9mIGEgbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge051bWJlcn0geCBudW1iZXJcbiAgICAgKiBAcmV0dXJucyB7TnVtYmVyfSBBIG51bWJlciByZXByZXNlbnRpbmcgdGhlIHNpZ24gb2YgdGhlIGdpdmVuIGFyZ3VtZW50LlxuICAgICAqICAgICAgICAgICAgICAgICAgIElmIHRoZSBhcmd1bWVudCBpcyBhIHBvc2l0aXZlIG51bWJlciwgbmVnYXRpdmUgbnVtYmVyLCBwb3NpdGl2ZSB6ZXJvXG4gICAgICogICAgICAgICAgICAgICAgICAgb3IgbmVnYXRpdmUgemVybywgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDEsIC0xLCAwIG9yIC0wIHJlc3BlY3RpdmVseS5cbiAgICAgKiAgICAgICAgICAgICAgICAgICBPdGhlcndpc2UsIE5hTiBpcyByZXR1cm5lZC5cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcIl9nZXRTaWduXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9nZXRTaWduKHgpIHtcbiAgICAgIHJldHVybiAoeCA+IDApIC0gKHggPCAwKSB8fCAreDtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gTnVtYmVyTWFzaztcbn0oKTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IChOdW1iZXJNYXNrKTtcblxuLyoqKi8gfSksXG4vKiA3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBJU19USU1FX1JFR0VYOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gSVNfREFURV9SRUdFWDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiaFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldFdlZWtTdGFydEJ5TG9jYWxlOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0RGF5T2ZZZWFyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZml4U2hvcnRJU087IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImZcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRUaW1lem9uZU9yT2Zmc2V0OyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJnXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0V2Vla051bWJlcjsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2RhdGVfZm5zX3R6X3V0Y1RvWm9uZWRUaW1lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV93ZWVrc3RhcnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG4vKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmJqLW1hc2tzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuXG52YXIgSVNfVElNRV9SRUdFWCA9IC9eKDJbMC0zXXxbMDFdWzAtOV0pOj8oWzAtNV1bMC05XSk6PyhbMC01XVswLTldKShafFsrLV0oPzoyWzAtM118WzAxXVswLTldKSg/Ojo/KD86WzAtNV1bMC05XSkpPykkLztcbnZhciBJU19EQVRFX1JFR0VYID0gL14oKFsxMl1cXGR7M30pLSgwWzEtOV18MVswLTJdKS0oMFsxLTldfFsxMl1cXGR8M1swMV0pKFp8WystXSg/OjJbMC0zXXxbMDFdWzAtOV0pKD86Oj8oPzpbMC01XVswLTldKSk/KSkkLztcbi8qKlxuICogRmluZCBvdXQgd2hlbiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrIGJhc2VkIG9uIHRoZSBwYXNzZWQgbG9jYWxlXG4gKlxuICogQHBhcmFtIHtsb2NhbGV9IGxvY2FsZVxuICpcbiAqIEByZXR1cm4ge051bWJlcn0gYSBudW1iZXIgMCA9IHN1bmRheSAsIDEgPSBtb25kYXkgLCAuLi4uXG4gKi9cblxudmFyIGdldFdlZWtTdGFydEJ5TG9jYWxlID0gZnVuY3Rpb24gZ2V0V2Vla1N0YXJ0QnlMb2NhbGUobG9jYWxlKSB7XG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3dlZWtzdGFydF9fW1wiYVwiIC8qIGdldFdlZWtTdGFydEJ5TG9jYWxlICovXSkobG9jYWxlKTtcbn07XG4vKipcbiAqICBHZXQgZGF5IG51bWJlciBpbiB0aGUgeWVhciBvZiB0aGUgcGFzc2VkIGRhdGVcbiAqXG4gKiBAcGFyYW0ge0RhdGV9IGRhdGVcbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGRheSBudW1iZXJcbiAqL1xuXG52YXIgZ2V0RGF5T2ZZZWFyID0gZnVuY3Rpb24gZ2V0RGF5T2ZZZWFyKGRhdGUpIHtcbiAgdmFyIHN0YXJ0ID0gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCAwLCAwKTtcbiAgdmFyIGRpZmYgPSBkYXRlIC0gc3RhcnQgKyAoc3RhcnQuZ2V0VGltZXpvbmVPZmZzZXQoKSAtIGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSkgKiA2MCAqIDEwMDA7XG4gIHZhciBvbmVEYXkgPSAxMDAwICogNjAgKiA2MCAqIDI0O1xuICB2YXIgZGF5ID0gTWF0aC5mbG9vcihkaWZmIC8gb25lRGF5KTtcbiAgcmV0dXJuIGRheTtcbn07XG4vKipcbiAqIFRha2VzIGluY29tcGxldGUgaXNvIHN0cmluZyBhbmQgcmV0dXJuIGEgY29tcGxldGUgb25lXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGRhdGUgaW5jb21wbGV0ZSBpc28gc3RyaW5nXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSBjb21wbGV0ZSBpc28gc3RyaW5nXG4gKi9cblxudmFyIGZpeFNob3J0SVNPID0gZnVuY3Rpb24gZml4U2hvcnRJU08oZGF0ZSkge1xuICB2YXIgdmFsdWUgPSBkYXRlO1xuICB2YXIgb2Zmc2V0ID0gKHZhbHVlLm1hdGNoKC96JHxbK1xcLV1cXGRcXGQ6XFxkXFxkJC9pKSB8fCBbXSlbMF07XG5cbiAgaWYgKCFvZmZzZXQpIHtcbiAgICBvZmZzZXQgPSAnWic7XG4gICAgdmFsdWUgKz0gb2Zmc2V0O1xuICB9XG5cbiAgaWYgKElTX1RJTUVfUkVHRVgudGVzdCh2YWx1ZSkpIHtcbiAgICB2YWx1ZSA9IFwiMTk3MC0wMS0wMVRcIi5jb25jYXQodmFsdWUpO1xuICB9IGVsc2UgaWYgKElTX0RBVEVfUkVHRVgudGVzdCh2YWx1ZSkpIHtcbiAgICB2YWx1ZSA9IFwiXCIuY29uY2F0KHZhbHVlLnNwbGl0KG9mZnNldClbMF0sIFwiVDAwOjAwOjAwXCIpLmNvbmNhdChvZmZzZXQpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufTtcbi8qKlxuICogR2V0IHRoZSBicm93c2VyIHRpbWV6b25lIG5hbWUgLCBpZiBub3Qgc3VwcG9ydGVkIHRoZW4gdGhlIGJyb3dzZXJcbiAqIHRpbWV6b25lIG9mZnNldCBmb3JtYXR0ZWRcbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHRpbWV6b25lIG9mIG9mZnNldFxuICovXG5cbnZhciBnZXRUaW1lem9uZU9yT2Zmc2V0ID0gZnVuY3Rpb24gZ2V0VGltZXpvbmVPck9mZnNldCgpIHtcbiAgdmFyIHRpbWV6b25lID0gSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLnRpbWVab25lO1xuXG4gIGlmICghdGltZXpvbmUpIHtcbiAgICB2YXIgcGFkID0gZnVuY3Rpb24gcGFkKG51bWJlciwgbGVuZ3RoKSB7XG4gICAgICB2YXIgc3RyID0gJycgKyBudW1iZXI7XG5cbiAgICAgIHdoaWxlIChzdHIubGVuZ3RoIDwgbGVuZ3RoKSB7XG4gICAgICAgIHN0ciA9ICcwJyArIHN0cjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9O1xuXG4gICAgdmFyIG9mZnNldCA9IG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBvZmZzZXQgPSAob2Zmc2V0IDwgMCA/ICcrJyA6ICctJykgKyAvLyBOb3RlIHRoZSByZXZlcnNlZCBzaWduIVxuICAgIHBhZChwYXJzZUludChNYXRoLmFicyhvZmZzZXQgLyA2MCkpLCAyKSArIHBhZChNYXRoLmFicyhvZmZzZXQgJSA2MCksIDIpO1xuICAgIHJldHVybiBvZmZzZXQ7XG4gIH1cblxuICByZXR1cm4gdGltZXpvbmU7XG59O1xuLyoqXG4gKiBHZXQgdGhlIFdlZWsgTnVtYmVyIGluIHRoZSBwYXNzZWQgZGF0ZVxuICpcbiAqIEBwYXJhbSB7RGF0ZX0gZGF0ZSAtIERhdGUgb2JqZWN0XG4gKiBAcGFyYW0ge051bWJlcn0gd2Vla1N0YXJ0IEEgbnVtYmVyIHdoaWNoIGRlZmluZXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayAoMCAgPSBzdW5kYXkgLCAxID0gbW9uZGF5ICwgLi4uKVxuICpcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHRoZSB3ZWVrIG51bWJlclxuICovXG5cbnZhciBnZXRXZWVrTnVtYmVyID0gZnVuY3Rpb24gZ2V0V2Vla051bWJlcihkYXRlLCB3ZWVrU3RhcnQpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZShEYXRlLlVUQyhkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpKTtcbiAgdmFyIGRheU51bSA9IGQuZ2V0VVRDRGF5KCkgLSAod2Vla1N0YXJ0IC0gMSkgfHwgNztcbiAgZC5zZXRVVENEYXRlKGQuZ2V0VVRDRGF0ZSgpICsgNCAtIGRheU51bSk7XG4gIHZhciB5ZWFyU3RhcnQgPSBuZXcgRGF0ZShEYXRlLlVUQyhkLmdldFVUQ0Z1bGxZZWFyKCksIDAsIDEpKTtcbiAgcmV0dXJuIE1hdGguY2VpbCgoKGQgLSB5ZWFyU3RhcnQpIC8gODY0MDAwMDAgKyAxKSAvIDcpO1xufTtcbi8qKlxuICogRGF0ZU1hc2tcbiAqXG4gKiBBIGphdmFzY3JpcHQgaW1wbGVtZW50YXRpb24gZm9yIEJCaiBkYXRlcyBtYXNraW5nXG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqL1xuXG52YXIgRGF0ZU1hc2sgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBEYXRlTWFzaygpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRGF0ZU1hc2spO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKERhdGVNYXNrLCBudWxsLCBbe1xuICAgIGtleTogXCJtYXNrXCIsXG5cbiAgICAvKipcbiAgICAgKiBNYXNrIGRhdGVcbiAgICAgKlxuICAgICAqIE1hc2sgdGhlIHBhc3NlZCBkYXRlIHdpdGggdGhlIHBhc3NlZCBtYXNrXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZGF0ZSBkYXRlIGFzIGEgc3RyaW5nXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG1hc2sgbWFzayBhcyBhIHN0cmluZ1xuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbbG9jYWxlPUJyb3dzZXIncyBsb2NhbGVdIHRoZSBsYW5ndWFnZSB0byB1c2UgZXgoZW4tVVMpLiBkZWZhdWx0IGlzIHRvIHRoZSBzeXN0ZW0gbGFuZ3VhZ2VcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW3RpbWV6b25lPVN5c3RlbSB0aW1lem9uZV0gdGhlIHRpbWUgem9uZSBkZXNjcmlwdG9yIChlLmcuIEFtZXJpY2EvTG9zX0FuZ2VsZXMpLiBkZWZhdWx0IHRvIHRoZSBzeXN0ZW1cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXpvbmVcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1N0cmluZ30gYSBkYXRlIG1hc2tlZCB3aXRoIHRoZSBnaXZlbiBtYXNrXG4gICAgICovXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG1hc2soZGF0ZSwgX21hc2ssIGxvY2FsZSwgdGltZXpvbmUpIHtcbiAgICAgIGlmICghZGF0ZSkgcmV0dXJuICcnO1xuICAgICAgaWYgKCFfbWFzaykgcmV0dXJuIGRhdGU7XG4gICAgICB0aW1lem9uZSA9IHRpbWV6b25lIHx8IGdldFRpbWV6b25lT3JPZmZzZXQoKTtcbiAgICAgIGxvY2FsZSA9IGxvY2FsZSB8fCBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlIHx8ICdlbi1VUyc7IC8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgY29tcGxldGUgaXNvIHN0cmluZ1xuXG4gICAgICBkYXRlID0gZGF0ZSBpbnN0YW5jZW9mIERhdGUgPyBkYXRlIDogZml4U2hvcnRJU08oZGF0ZSk7XG4gICAgICB2YXIgZGF0ZU9iamVjdCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfZGF0ZV9mbnNfdHpfdXRjVG9ab25lZFRpbWVfX1tcImFcIiAvKiBkZWZhdWx0ICovXSkoZGF0ZSwgdGltZXpvbmUpO1xuXG4gICAgICB2YXIgdHJhbnNsYXRpb24gPSBEYXRlTWFzay5fYnVpbGRUcmFuc2xhdGlvbih7XG4gICAgICAgIHllYXI6IGRhdGVPYmplY3QuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgbW9udGg6IGRhdGVPYmplY3QuZ2V0TW9udGgoKSArIDEsXG4gICAgICAgIG1vbnRoU2hvcnQ6IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KFtsb2NhbGVdLCB7XG4gICAgICAgICAgbW9udGg6ICdzaG9ydCdcbiAgICAgICAgfSkuZm9ybWF0KGRhdGVPYmplY3QpLFxuICAgICAgICBtb250aExvbmc6IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KFtsb2NhbGVdLCB7XG4gICAgICAgICAgbW9udGg6ICdsb25nJ1xuICAgICAgICB9KS5mb3JtYXQoZGF0ZU9iamVjdCksXG4gICAgICAgIGRheTogZGF0ZU9iamVjdC5nZXREYXRlKCksXG4gICAgICAgIGRheVNob3J0OiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChbbG9jYWxlXSwge1xuICAgICAgICAgIHdlZWtkYXk6ICdzaG9ydCdcbiAgICAgICAgfSkuZm9ybWF0KGRhdGVPYmplY3QpLFxuICAgICAgICBkYXlMb25nOiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChbbG9jYWxlXSwge1xuICAgICAgICAgIHdlZWtkYXk6ICdsb25nJ1xuICAgICAgICB9KS5mb3JtYXQoZGF0ZU9iamVjdCksXG4gICAgICAgIG1pbnV0ZXM6IGRhdGVPYmplY3QuZ2V0TWludXRlcygpLFxuICAgICAgICBzZWNvbmRzOiBkYXRlT2JqZWN0LmdldFNlY29uZHMoKSxcblxuICAgICAgICBnZXQgaG91cnMyNCgpIHtcbiAgICAgICAgICByZXR1cm4gZGF0ZU9iamVjdC5nZXRIb3VycygpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldCBob3VyczEyKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmhvdXJzMjQgJSAxMiB8fCAxMjtcbiAgICAgICAgfSxcblxuICAgICAgICBkYXlPZlllYXI6IGdldERheU9mWWVhcihkYXRlT2JqZWN0KSxcbiAgICAgICAgZGF5T2ZXZWVrOiBkYXRlT2JqZWN0LmdldERheSgpICsgMSxcbiAgICAgICAgLy8gU3VuZGF5ID0gMSBpbiBCQmogYnV0IFN1bmRheSA9IDAgaW4gSlNcbiAgICAgICAgd2Vla051bWJlcjogZ2V0V2Vla051bWJlcihkYXRlT2JqZWN0LCBnZXRXZWVrU3RhcnRCeUxvY2FsZShsb2NhbGUpKSxcbiAgICAgICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgICAgIHRpbWV6b25lOiB0aW1lem9uZVxuICAgICAgfSk7XG5cbiAgICAgIHZhciByZXN1bHQgPSBfbWFzaztcblxuICAgICAgZm9yICh2YXIgayBpbiB0cmFuc2xhdGlvbikge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZShuZXcgUmVnRXhwKCcoJScgKyBrICsgJyknLCAnZycpLCB0cmFuc2xhdGlvbltrXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCBhIG1hcCBvYmplY3Qgd2hpY2ggY29udGFpbnMgYWxsIHBvc3NpYmxlIGZvcm1zIG9mIG1hc2tzXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0ZURldGFpbHMgZGF0ZVxuICAgICAqXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBmb3JtcyBtYXNrc1xuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwiX2J1aWxkVHJhbnNsYXRpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2J1aWxkVHJhbnNsYXRpb24oZGF0ZURldGFpbHMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC8vIHllYXJcbiAgICAgICAgWXo6IGRhdGVEZXRhaWxzLnllYXIudG9TdHJpbmcoKS5zdWJzdHIoLTIpLFxuICAgICAgICBZczogZGF0ZURldGFpbHMueWVhcixcbiAgICAgICAgWWw6IGRhdGVEZXRhaWxzLnllYXIsXG4gICAgICAgIFlwOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGRhdGVEZXRhaWxzLnllYXIpLFxuICAgICAgICBZZDogZGF0ZURldGFpbHMueWVhcixcbiAgICAgICAgWTogZGF0ZURldGFpbHMueWVhcixcbiAgICAgICAgLy8gbW9udGhcbiAgICAgICAgTXo6IFN0cmluZyhkYXRlRGV0YWlscy5tb250aCkubGVuZ3RoID09IDEgPyAnMCcgKyBkYXRlRGV0YWlscy5tb250aCA6IGRhdGVEZXRhaWxzLm1vbnRoLFxuICAgICAgICBNczogZGF0ZURldGFpbHMubW9udGhTaG9ydCxcbiAgICAgICAgTWw6IGRhdGVEZXRhaWxzLm1vbnRoTG9uZyxcbiAgICAgICAgTXA6IFN0cmluZy5mcm9tQ2hhckNvZGUoZGF0ZURldGFpbHMubW9udGgpLFxuICAgICAgICBNZDogZGF0ZURldGFpbHMubW9udGgsXG4gICAgICAgIE06IGRhdGVEZXRhaWxzLm1vbnRoLFxuICAgICAgICAvLyBkYXlcbiAgICAgICAgRHo6IFN0cmluZyhkYXRlRGV0YWlscy5kYXkpLmxlbmd0aCA9PSAxID8gJzAnICsgZGF0ZURldGFpbHMuZGF5IDogZGF0ZURldGFpbHMuZGF5LFxuICAgICAgICBEczogZGF0ZURldGFpbHMuZGF5U2hvcnQsXG4gICAgICAgIERsOiBkYXRlRGV0YWlscy5kYXlMb25nLFxuICAgICAgICBEcDogU3RyaW5nLmZyb21DaGFyQ29kZShkYXRlRGV0YWlscy5kYXkpLFxuICAgICAgICBEZDogZGF0ZURldGFpbHMuZGF5LFxuICAgICAgICBEOiBkYXRlRGV0YWlscy5kYXksXG4gICAgICAgIC8vIGhvdXIgMjRcbiAgICAgICAgSHo6IFN0cmluZyhkYXRlRGV0YWlscy5ob3VyczI0KS5sZW5ndGggPT0gMSA/ICcwJyArIGRhdGVEZXRhaWxzLmhvdXJzMjQgOiBkYXRlRGV0YWlscy5ob3VyczI0LFxuICAgICAgICBIczogZGF0ZURldGFpbHMuaG91cnMyNCxcbiAgICAgICAgSGw6IGRhdGVEZXRhaWxzLmhvdXJzMjQsXG4gICAgICAgIEhwOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGRhdGVEZXRhaWxzLmhvdXJzMjQpLFxuICAgICAgICBIZDogZGF0ZURldGFpbHMuaG91cnMyNCxcbiAgICAgICAgSDogZGF0ZURldGFpbHMuaG91cnMyNCxcbiAgICAgICAgLy8gaG91ciAxMlxuICAgICAgICBoejogU3RyaW5nKGRhdGVEZXRhaWxzLmhvdXJzMTIpLmxlbmd0aCA9PSAxID8gJzAnICsgZGF0ZURldGFpbHMuaG91cnMxMiA6IGRhdGVEZXRhaWxzLmhvdXJzMTIsXG4gICAgICAgIGhzOiBkYXRlRGV0YWlscy5ob3VyczEyLFxuICAgICAgICBobDogZGF0ZURldGFpbHMuaG91cnMxMixcbiAgICAgICAgaHA6IFN0cmluZy5mcm9tQ2hhckNvZGUoZGF0ZURldGFpbHMuaG91cnMxMiksXG4gICAgICAgIGhkOiBkYXRlRGV0YWlscy5ob3VyczEyLFxuICAgICAgICBoOiBkYXRlRGV0YWlscy5ob3VyczEyLFxuICAgICAgICAvLyBtaW51dGVzXG4gICAgICAgIG16OiBTdHJpbmcoZGF0ZURldGFpbHMubWludXRlcykubGVuZ3RoID09IDEgPyAnMCcgKyBkYXRlRGV0YWlscy5taW51dGVzIDogZGF0ZURldGFpbHMubWludXRlcyxcbiAgICAgICAgbXM6IGRhdGVEZXRhaWxzLm1pbnV0ZXMsXG4gICAgICAgIG1sOiBkYXRlRGV0YWlscy5taW51dGVzLFxuICAgICAgICBtcDogU3RyaW5nLmZyb21DaGFyQ29kZShkYXRlRGV0YWlscy5taW51dGVzKSxcbiAgICAgICAgbWQ6IGRhdGVEZXRhaWxzLm1pbnV0ZXMsXG4gICAgICAgIG06IGRhdGVEZXRhaWxzLm1pbnV0ZXMsXG4gICAgICAgIC8vIHNlY29uZHNcbiAgICAgICAgc3o6IFN0cmluZyhkYXRlRGV0YWlscy5zZWNvbmRzKS5sZW5ndGggPT0gMSA/ICcwJyArIGRhdGVEZXRhaWxzLnNlY29uZHMgOiBkYXRlRGV0YWlscy5zZWNvbmRzLFxuICAgICAgICBzczogZGF0ZURldGFpbHMuc2Vjb25kcyxcbiAgICAgICAgc2w6IGRhdGVEZXRhaWxzLnNlY29uZHMsXG4gICAgICAgIHNwOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGRhdGVEZXRhaWxzLnNlY29uZHMpLFxuICAgICAgICBzZDogZGF0ZURldGFpbHMuc2Vjb25kcyxcbiAgICAgICAgczogZGF0ZURldGFpbHMuc2Vjb25kcyxcbiAgICAgICAgLy8gQU0gLCBQTVxuICAgICAgICBQUDogZGF0ZURldGFpbHMuaG91cnMyNCA+IDEyID8gJ1BNJyA6ICdQTScsXG4gICAgICAgIFA6IGRhdGVEZXRhaWxzLmhvdXJzMjQgPiAxMiA/ICdQTScgOiAnQU0nLFxuICAgICAgICBwcDogZGF0ZURldGFpbHMuaG91cnMyNCA+IDEyID8gJ3BtJyA6ICdhbScsXG4gICAgICAgIHA6IGRhdGVEZXRhaWxzLmhvdXJzMjQgPiAxMiA/ICdwbScgOiAnYW0nLFxuICAgICAgICAvLyBEYXkgb2YgWWVhclxuICAgICAgICBKejogU3RyaW5nKGRhdGVEZXRhaWxzLmRheU9mWWVhcikubGVuZ3RoID09IDEgPyAnMCcgKyBkYXRlRGV0YWlscy5kYXlPZlllYXIgOiBkYXRlRGV0YWlscy5kYXlPZlllYXIsXG4gICAgICAgIEpzOiBkYXRlRGV0YWlscy5kYXlPZlllYXIsXG4gICAgICAgIEpsOiBkYXRlRGV0YWlscy5kYXlPZlllYXIsXG4gICAgICAgIEpkOiBkYXRlRGV0YWlscy5kYXlPZlllYXIsXG4gICAgICAgIEo6IGRhdGVEZXRhaWxzLmRheU9mWWVhcixcbiAgICAgICAgLy8gRGF5IE9mIFdlZWtcbiAgICAgICAgV3o6IFN0cmluZyhkYXRlRGV0YWlscy5kYXlPZldlZWspLmxlbmd0aCA9PSAxID8gJzAnICsgZGF0ZURldGFpbHMuZGF5T2ZXZWVrIDogZGF0ZURldGFpbHMuZGF5T2ZXZWVrLFxuICAgICAgICBXczogZGF0ZURldGFpbHMuZGF5T2ZXZWVrLFxuICAgICAgICBXbDogZGF0ZURldGFpbHMuZGF5T2ZXZWVrLFxuICAgICAgICBXcDogU3RyaW5nLmZyb21DaGFyQ29kZShkYXRlRGV0YWlscy5kYXlPZldlZWspLFxuICAgICAgICBXZDogZGF0ZURldGFpbHMuZGF5T2ZXZWVrLFxuICAgICAgICBXOiBkYXRlRGV0YWlscy5kYXlPZldlZWssXG4gICAgICAgIC8vIHdlZWsgbnVtYmVyXG4gICAgICAgIHd6OiBTdHJpbmcoZGF0ZURldGFpbHMud2Vla051bWJlcikubGVuZ3RoID09IDEgPyAnMCcgKyBkYXRlRGV0YWlscy53ZWVrTnVtYmVyIDogZGF0ZURldGFpbHMud2Vla051bWJlcixcbiAgICAgICAgd3M6IGRhdGVEZXRhaWxzLndlZWtOdW1iZXIsXG4gICAgICAgIHdsOiBkYXRlRGV0YWlscy53ZWVrTnVtYmVyLFxuICAgICAgICB3cDogU3RyaW5nLmZyb21DaGFyQ29kZShkYXRlRGV0YWlscy53ZWVrTnVtYmVyKSxcbiAgICAgICAgd2Q6IGRhdGVEZXRhaWxzLndlZWtOdW1iZXIsXG4gICAgICAgIHc6IGRhdGVEZXRhaWxzLndlZWtOdW1iZXJcbiAgICAgIH07XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIERhdGVNYXNrO1xufSgpO1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJjXCJdID0gKERhdGVNYXNrKTtcblxuLyoqKi8gfSksXG4vKiA4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSB1dGNUb1pvbmVkVGltZTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2xpYl90elBhcnNlVGltZXpvbmVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2RhdGVfZm5zX2VzbV9zdWJNaWxsaXNlY29uZHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fdG9EYXRlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcblxuXG5cblxuLyoqXG4gKiBAbmFtZSB1dGNUb1pvbmVkVGltZVxuICogQGNhdGVnb3J5IFRpbWUgWm9uZSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgYSBkYXRlL3RpbWUgcmVwcmVzZW50aW5nIGxvY2FsIHRpbWUgaW4gYSBnaXZlbiB0aW1lIHpvbmUgZnJvbSB0aGUgVVRDIGRhdGVcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgYSBkYXRlIGluc3RhbmNlIHdpdGggdmFsdWVzIHJlcHJlc2VudGluZyB0aGUgbG9jYWwgdGltZSBpbiB0aGUgdGltZSB6b25lXG4gKiBzcGVjaWZpZWQgb2YgdGhlIFVUQyB0aW1lIGZyb20gdGhlIGRhdGUgcHJvdmlkZWQuIEluIG90aGVyIHdvcmRzLCB3aGVuIHRoZSBuZXcgZGF0ZVxuICogaXMgZm9ybWF0dGVkIGl0IHdpbGwgc2hvdyB0aGUgZXF1aXZhbGVudCBob3VycyBpbiB0aGUgdGFyZ2V0IHRpbWUgem9uZSByZWdhcmRsZXNzXG4gKiBvZiB0aGUgY3VycmVudCBzeXN0ZW0gdGltZSB6b25lLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxTdHJpbmd8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgd2l0aCB0aGUgcmVsZXZhbnQgVVRDIHRpbWVcbiAqIEBwYXJhbSB7U3RyaW5nfSB0aW1lWm9uZSAtIHRoZSB0aW1lIHpvbmUgdG8gZ2V0IGxvY2FsIHRpbWUgZm9yLCBjYW4gYmUgYW4gb2Zmc2V0IG9yIElBTkEgdGltZSB6b25lXG4gKiBAcGFyYW0ge09wdGlvbnNXaXRoVFp9IFtvcHRpb25zXSAtIHRoZSBvYmplY3Qgd2l0aCBvcHRpb25zLiBTZWUgW09wdGlvbnNde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvT3B0aW9uc31cbiAqIEBwYXJhbSB7MHwxfDJ9IFtvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHM9Ml0gLSBwYXNzZWQgdG8gYHRvRGF0ZWAuIFNlZSBbdG9EYXRlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3RvRGF0ZX1cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgZXF1aXZhbGVudCB0aW1lIGluIHRoZSB0aW1lIHpvbmVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHNgIG11c3QgYmUgMCwgMSBvciAyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEluIEp1bmUgMTBhbSBVVEMgaXMgNmFtIGluIE5ldyBZb3JrICgtMDQ6MDApXG4gKiBjb25zdCByZXN1bHQgPSB1dGNUb1pvbmVkVGltZSgnMjAxNC0wNi0yNVQxMDowMDowMC4wMDBaJywgJ0FtZXJpY2EvTmV3X1lvcmsnKVxuICogLy89PiBKdW4gMjUgMjAxNCAwNjowMDowMFxuICovXG5mdW5jdGlvbiB1dGNUb1pvbmVkVGltZShkaXJ0eURhdGUsIHRpbWVab25lLCBvcHRpb25zKSB7XG4gIHZhciBkYXRlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fdG9EYXRlX19bXCJhXCIgLyogZGVmYXVsdCAqL10pKGRpcnR5RGF0ZSwgb3B0aW9ucylcblxuICAvLyBUaGlzIGRhdGUgaGFzIHRoZSBVVEMgdGltZSB2YWx1ZXMgb2YgdGhlIGlucHV0IGRhdGUgYXQgdGhlIHN5c3RlbSB0aW1lIHpvbmVcbiAgdmFyIHV0Y0RhdGUgPSBuZXcgRGF0ZShcbiAgICBkYXRlLmdldFVUQ0Z1bGxZZWFyKCksXG4gICAgZGF0ZS5nZXRVVENNb250aCgpLFxuICAgIGRhdGUuZ2V0VVRDRGF0ZSgpLFxuICAgIGRhdGUuZ2V0VVRDSG91cnMoKSxcbiAgICBkYXRlLmdldFVUQ01pbnV0ZXMoKSxcbiAgICBkYXRlLmdldFVUQ1NlY29uZHMoKSxcbiAgICBkYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpXG4gIClcbiAgLy8gV2UganVzdCBuZWVkIHRvIGFwcGx5IHRoZSBvZmZzZXQgaW5kaWNhdGVkIGJ5IHRoZSB0aW1lIHpvbmUgdG8gdGhpcyBsb2NhbGl6ZWQgZGF0ZVxuICB2YXIgb2Zmc2V0TWlsbGlzZWNvbmRzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbGliX3R6UGFyc2VUaW1lem9uZV9fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKSh0aW1lWm9uZSwgZGF0ZSlcblxuICByZXR1cm4gb2Zmc2V0TWlsbGlzZWNvbmRzXG4gICAgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2RhdGVfZm5zX2VzbV9zdWJNaWxsaXNlY29uZHNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSkodXRjRGF0ZSwgb2Zmc2V0TWlsbGlzZWNvbmRzKVxuICAgIDogdXRjRGF0ZVxufVxuXG5cbi8qKiovIH0pLFxuLyogOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gdHpUb2tlbml6ZURhdGU7XG4vKipcbiAqIFJldHVybnMgdGhlIFt5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZHNdIHRva2VucyBvZiB0aGUgcHJvdmlkZWRcbiAqIGBkYXRlYCBhcyBpdCB3aWxsIGJlIHJlbmRlcmVkIGluIHRoZSBgdGltZVpvbmVgLlxuICovXG5mdW5jdGlvbiB0elRva2VuaXplRGF0ZShkYXRlLCB0aW1lWm9uZSkge1xuICB2YXIgZHRmID0gZ2V0RGF0ZVRpbWVGb3JtYXQodGltZVpvbmUpXG4gIHJldHVybiBkdGYuZm9ybWF0VG9QYXJ0cyA/IHBhcnRzT2Zmc2V0KGR0ZiwgZGF0ZSkgOiBoYWNreU9mZnNldChkdGYsIGRhdGUpXG59XG5cbnZhciB0eXBlVG9Qb3MgPSB7XG4gIHllYXI6IDAsXG4gIG1vbnRoOiAxLFxuICBkYXk6IDIsXG4gIGhvdXI6IDMsXG4gIG1pbnV0ZTogNCxcbiAgc2Vjb25kOiA1XG59XG5cbmZ1bmN0aW9uIHBhcnRzT2Zmc2V0KGR0ZiwgZGF0ZSkge1xuICB2YXIgZm9ybWF0dGVkID0gZHRmLmZvcm1hdFRvUGFydHMoZGF0ZSlcbiAgdmFyIGZpbGxlZCA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZm9ybWF0dGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHBvcyA9IHR5cGVUb1Bvc1tmb3JtYXR0ZWRbaV0udHlwZV1cblxuICAgIGlmIChwb3MgPj0gMCkge1xuICAgICAgZmlsbGVkW3Bvc10gPSBwYXJzZUludChmb3JtYXR0ZWRbaV0udmFsdWUsIDEwKVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmlsbGVkXG59XG5cbmZ1bmN0aW9uIGhhY2t5T2Zmc2V0KGR0ZiwgZGF0ZSkge1xuICB2YXIgZm9ybWF0dGVkID0gZHRmLmZvcm1hdChkYXRlKS5yZXBsYWNlKC9cXHUyMDBFL2csICcnKVxuICB2YXIgcGFyc2VkID0gLyhcXGQrKVxcLyhcXGQrKVxcLyhcXGQrKSw/IChcXGQrKTooXFxkKyk6KFxcZCspLy5leGVjKGZvcm1hdHRlZClcbiAgLy8gdmFyIFssIGZNb250aCwgZkRheSwgZlllYXIsIGZIb3VyLCBmTWludXRlLCBmU2Vjb25kXSA9IHBhcnNlZFxuICAvLyByZXR1cm4gW2ZZZWFyLCBmTW9udGgsIGZEYXksIGZIb3VyLCBmTWludXRlLCBmU2Vjb25kXVxuICByZXR1cm4gW3BhcnNlZFszXSwgcGFyc2VkWzFdLCBwYXJzZWRbMl0sIHBhcnNlZFs0XSwgcGFyc2VkWzVdLCBwYXJzZWRbNl1dXG59XG5cbi8vIEdldCBhIGNhY2hlZCBJbnRsLkRhdGVUaW1lRm9ybWF0IGluc3RhbmNlIGZvciB0aGUgSUFOQSBgdGltZVpvbmVgLiBUaGlzIGNhbiBiZSB1c2VkXG4vLyB0byBnZXQgZGV0ZXJtaW5pc3RpYyBsb2NhbCBkYXRlL3RpbWUgb3V0cHV0IGFjY29yZGluZyB0byB0aGUgYGVuLVVTYCBsb2NhbGUgd2hpY2hcbi8vIGNhbiBiZSB1c2VkIHRvIGV4dHJhY3QgbG9jYWwgdGltZSBwYXJ0cyBhcyBuZWNlc3NhcnkuXG52YXIgZHRmQ2FjaGUgPSB7fVxuZnVuY3Rpb24gZ2V0RGF0ZVRpbWVGb3JtYXQodGltZVpvbmUpIHtcbiAgaWYgKCFkdGZDYWNoZVt0aW1lWm9uZV0pIHtcbiAgICAvLyBOZXcgYnJvd3NlcnMgdXNlIGBob3VyQ3ljbGVgLCBJRSBhbmQgQ2hyb21lIDw3MyBkb2VzIG5vdCBzdXBwb3J0IGl0IGFuZCB1c2VzIGBob3VyMTJgXG4gICAgdmFyIHRlc3REYXRlRm9ybWF0dGVkID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoJ2VuLVVTJywge1xuICAgICAgaG91cjEyOiBmYWxzZSxcbiAgICAgIHRpbWVab25lOiAnQW1lcmljYS9OZXdfWW9yaycsXG4gICAgICB5ZWFyOiAnbnVtZXJpYycsXG4gICAgICBtb250aDogJzItZGlnaXQnLFxuICAgICAgZGF5OiAnMi1kaWdpdCcsXG4gICAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgIHNlY29uZDogJzItZGlnaXQnXG4gICAgfSkuZm9ybWF0KG5ldyBEYXRlKCcyMDE0LTA2LTI1VDA0OjAwOjAwLjEyM1onKSlcbiAgICB2YXIgaG91ckN5Y2xlU3VwcG9ydGVkID1cbiAgICAgIHRlc3REYXRlRm9ybWF0dGVkID09PSAnMDYvMjUvMjAxNCwgMDA6MDA6MDAnIHx8XG4gICAgICB0ZXN0RGF0ZUZvcm1hdHRlZCA9PT0gJ+KAjjA24oCOL+KAjjI14oCOL+KAjjIwMTTigI4g4oCOMDDigI464oCOMDDigI464oCOMDAnXG5cbiAgICBkdGZDYWNoZVt0aW1lWm9uZV0gPSBob3VyQ3ljbGVTdXBwb3J0ZWRcbiAgICAgID8gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoJ2VuLVVTJywge1xuICAgICAgICAgIGhvdXIxMjogZmFsc2UsXG4gICAgICAgICAgdGltZVpvbmU6IHRpbWVab25lLFxuICAgICAgICAgIHllYXI6ICdudW1lcmljJyxcbiAgICAgICAgICBtb250aDogJzItZGlnaXQnLFxuICAgICAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBzZWNvbmQ6ICcyLWRpZ2l0J1xuICAgICAgICB9KVxuICAgICAgOiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCgnZW4tVVMnLCB7XG4gICAgICAgICAgaG91ckN5Y2xlOiAnaDIzJyxcbiAgICAgICAgICB0aW1lWm9uZTogdGltZVpvbmUsXG4gICAgICAgICAgeWVhcjogJ251bWVyaWMnLFxuICAgICAgICAgIG1vbnRoOiAnMi1kaWdpdCcsXG4gICAgICAgICAgZGF5OiAnMi1kaWdpdCcsXG4gICAgICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgICAgIHNlY29uZDogJzItZGlnaXQnXG4gICAgICAgIH0pXG4gIH1cbiAgcmV0dXJuIGR0ZkNhY2hlW3RpbWVab25lXVxufVxuXG5cbi8qKiovIH0pLFxuLyogMTAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IHN1Yk1pbGxpc2Vjb25kcztcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2xpYl90b0ludGVnZXJfaW5kZXhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19hZGRNaWxsaXNlY29uZHNfaW5kZXhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xuXG5cbi8qKlxuICogQG5hbWUgc3ViTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiAjIyMgdjIuMC4wIGJyZWFraW5nIGNoYW5nZXM6XG4gKlxuICogLSBbQ2hhbmdlcyB0aGF0IGFyZSBjb21tb24gZm9yIHRoZSB3aG9sZSBsaWJyYXJ5XShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjQ29tbW9uLUNoYW5nZXMpLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgc3VidHJhY3RlZFxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBtaWxsaXNlY29uZHMgc3VidHJhY3RlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdWJ0cmFjdCA3NTAgbWlsbGlzZWNvbmRzIGZyb20gMTAgSnVseSAyMDE0IDEyOjQ1OjMwLjAwMDpcbiAqIHZhciByZXN1bHQgPSBzdWJNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NToyOS4yNTBcbiAqL1xuXG5mdW5jdGlvbiBzdWJNaWxsaXNlY29uZHMoZGlydHlEYXRlLCBkaXJ0eUFtb3VudCkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCcyIGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgJyArIGFyZ3VtZW50cy5sZW5ndGggKyAnIHByZXNlbnQnKTtcbiAgfVxuXG4gIHZhciBhbW91bnQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19saWJfdG9JbnRlZ2VyX2luZGV4X2pzX19bXCJhXCIgLyogZGVmYXVsdCAqL10pKGRpcnR5QW1vdW50KTtcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2FkZE1pbGxpc2Vjb25kc19pbmRleF9qc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShkaXJ0eURhdGUsIC1hbW91bnQpO1xufVxuXG4vKioqLyB9KSxcbi8qIDExICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSBhZGRNaWxsaXNlY29uZHM7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19saWJfdG9JbnRlZ2VyX2luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdG9EYXRlX2luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTtcblxuXG4vKipcbiAqIEBuYW1lIGFkZE1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byBiZSBhZGRlZFxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBtaWxsaXNlY29uZHMgYWRkZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQWRkIDc1MCBtaWxsaXNlY29uZHMgdG8gMTAgSnVseSAyMDE0IDEyOjQ1OjMwLjAwMDpcbiAqIHZhciByZXN1bHQgPSBhZGRNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NTozMC43NTBcbiAqL1xuXG5mdW5jdGlvbiBhZGRNaWxsaXNlY29uZHMoZGlydHlEYXRlLCBkaXJ0eUFtb3VudCkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCcyIGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgJyArIGFyZ3VtZW50cy5sZW5ndGggKyAnIHByZXNlbnQnKTtcbiAgfVxuXG4gIHZhciB0aW1lc3RhbXAgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX190b0RhdGVfaW5kZXhfanNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSkoZGlydHlEYXRlKS5nZXRUaW1lKCk7XG4gIHZhciBhbW91bnQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19saWJfdG9JbnRlZ2VyX2luZGV4X2pzX19bXCJhXCIgLyogZGVmYXVsdCAqL10pKGRpcnR5QW1vdW50KTtcbiAgcmV0dXJuIG5ldyBEYXRlKHRpbWVzdGFtcCArIGFtb3VudCk7XG59XG5cbi8qKiovIH0pLFxuLyogMTIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IHRvRGF0ZTtcbi8qKlxuICogQG5hbWUgdG9EYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdHMgY2xvbmUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCBpdCBpcyB0cmVhdGVkIGFzIGEgdGltZXN0YW1wLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBub25lIG9mIHRoZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqICoqTm90ZSoqOiAqYWxsKiBEYXRlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYW55ICpkYXRlLWZucyogZnVuY3Rpb24gaXMgcHJvY2Vzc2VkIGJ5IGB0b0RhdGVgLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGFyZ3VtZW50IC0gdGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgcGFyc2VkIGRhdGUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENsb25lIHRoZSBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKG5ldyBEYXRlKDIwMTQsIDEsIDExLCAxMSwgMzAsIDMwKSlcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgdGhlIHRpbWVzdGFtcCB0byBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKDEzOTIwOTg0MzAwMDApXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICovXG5mdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgJyArIGFyZ3VtZW50cy5sZW5ndGggKyAnIHByZXNlbnQnKTtcbiAgfVxuXG4gIHZhciBhcmdTdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpOyAvLyBDbG9uZSB0aGUgZGF0ZVxuXG4gIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHwgdHlwZW9mIGFyZ3VtZW50ID09PSAnb2JqZWN0JyAmJiBhcmdTdHIgPT09ICdbb2JqZWN0IERhdGVdJykge1xuICAgIC8vIFByZXZlbnQgdGhlIGRhdGUgdG8gbG9zZSB0aGUgbWlsbGlzZWNvbmRzIHdoZW4gcGFzc2VkIHRvIG5ldyBEYXRlKCkgaW4gSUUxMFxuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudC5nZXRUaW1lKCkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ251bWJlcicgfHwgYXJnU3RyID09PSAnW29iamVjdCBOdW1iZXJdJykge1xuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCh0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IGFyZ1N0ciA9PT0gJ1tvYmplY3QgU3RyaW5nXScpICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcIlN0YXJ0aW5nIHdpdGggdjIuMC4wLWJldGEuMSBkYXRlLWZucyBkb2Vzbid0IGFjY2VwdCBzdHJpbmdzIGFzIGFyZ3VtZW50cy4gUGxlYXNlIHVzZSBgcGFyc2VJU09gIHRvIHBhcnNlIHN0cmluZ3MuIFNlZTogaHR0cHM6Ly9naXQuaW8vZmp1bGVcIik7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG5cbiAgICAgIGNvbnNvbGUud2FybihuZXcgRXJyb3IoKS5zdGFjayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gIH1cbn1cblxuLyoqKi8gfSksXG4vKiAxMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gdG9EYXRlO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9kYXRlX2Zuc19lc21fbGliX3RvSW50ZWdlcl9pbmRleF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfZGF0ZV9mbnNfZXNtX2xpYl9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzX2luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2xpYl90elBhcnNlVGltZXpvbmVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG5cblxuXG5cbnZhciBNSUxMSVNFQ09ORFNfSU5fSE9VUiA9IDM2MDAwMDBcbnZhciBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFID0gNjAwMDBcbnZhciBERUZBVUxUX0FERElUSU9OQUxfRElHSVRTID0gMlxuXG52YXIgcGF0dGVybnMgPSB7XG4gIGRhdGVUaW1lRGVsaW1ldGVyOiAvW1QgXS8sXG4gIHBsYWluVGltZTogLzovLFxuICB0aW1lWm9uZURlbGltZXRlcjogL1taIF0vaSxcblxuICAvLyB5ZWFyIHRva2Vuc1xuICBZWTogL14oXFxkezJ9KSQvLFxuICBZWVk6IFtcbiAgICAvXihbKy1dXFxkezJ9KSQvLCAvLyAwIGFkZGl0aW9uYWwgZGlnaXRzXG4gICAgL14oWystXVxcZHszfSkkLywgLy8gMSBhZGRpdGlvbmFsIGRpZ2l0XG4gICAgL14oWystXVxcZHs0fSkkLyAvLyAyIGFkZGl0aW9uYWwgZGlnaXRzXG4gIF0sXG4gIFlZWVk6IC9eKFxcZHs0fSkvLFxuICBZWVlZWTogW1xuICAgIC9eKFsrLV1cXGR7NH0pLywgLy8gMCBhZGRpdGlvbmFsIGRpZ2l0c1xuICAgIC9eKFsrLV1cXGR7NX0pLywgLy8gMSBhZGRpdGlvbmFsIGRpZ2l0XG4gICAgL14oWystXVxcZHs2fSkvIC8vIDIgYWRkaXRpb25hbCBkaWdpdHNcbiAgXSxcblxuICAvLyBkYXRlIHRva2Vuc1xuICBNTTogL14tKFxcZHsyfSkkLyxcbiAgREREOiAvXi0/KFxcZHszfSkkLyxcbiAgTU1ERDogL14tPyhcXGR7Mn0pLT8oXFxkezJ9KSQvLFxuICBXd3c6IC9eLT9XKFxcZHsyfSkkLyxcbiAgV3d3RDogL14tP1coXFxkezJ9KS0/KFxcZHsxfSkkLyxcblxuICBISDogL14oXFxkezJ9KFsuLF1cXGQqKT8pJC8sXG4gIEhITU06IC9eKFxcZHsyfSk6PyhcXGR7Mn0oWy4sXVxcZCopPykkLyxcbiAgSEhNTVNTOiAvXihcXGR7Mn0pOj8oXFxkezJ9KTo/KFxcZHsyfShbLixdXFxkKik/KSQvLFxuXG4gIC8vIHRpbWV6b25lIHRva2VucyAodG8gaWRlbnRpZnkgdGhlIHByZXNlbmNlIG9mIGEgdHopXG4gIHRpbWV6b25lOiAvKFtaKy1dLip8IFVUQ3woPzpbYS16QS1aXStcXC9bYS16QS1aX10rKD86XFwvW2EtekEtWl9dKyk/KSkkL1xufVxuXG4vKipcbiAqIEBuYW1lIHRvRGF0ZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgaXRzIGNsb25lLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhIG51bWJlciwgaXQgaXMgdHJlYXRlZCBhcyBhIHRpbWVzdGFtcC5cbiAqXG4gKiBJZiBhbiBhcmd1bWVudCBpcyBhIHN0cmluZywgdGhlIGZ1bmN0aW9uIHRyaWVzIHRvIHBhcnNlIGl0LlxuICogRnVuY3Rpb24gYWNjZXB0cyBjb21wbGV0ZSBJU08gODYwMSBmb3JtYXRzIGFzIHdlbGwgYXMgcGFydGlhbCBpbXBsZW1lbnRhdGlvbnMuXG4gKiBJU08gODYwMTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMVxuICogSWYgdGhlIGZ1bmN0aW9uIGNhbm5vdCBwYXJzZSB0aGUgc3RyaW5nIG9yIHRoZSB2YWx1ZXMgYXJlIGludmFsaWQsIGl0IHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBub25lIG9mIHRoZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqICoqTm90ZSoqOiAqYWxsKiBEYXRlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYW55ICpkYXRlLWZucyogZnVuY3Rpb24gaXMgcHJvY2Vzc2VkIGJ5IGB0b0RhdGVgLlxuICogQWxsICpkYXRlLWZucyogZnVuY3Rpb25zIHdpbGwgdGhyb3cgYFJhbmdlRXJyb3JgIGlmIGBvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHNgIGlzIG5vdCAwLCAxLCAyIG9yIHVuZGVmaW5lZC5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8U3RyaW5nfE51bWJlcn0gYXJndW1lbnQgLSB0aGUgdmFsdWUgdG8gY29udmVydFxuICogQHBhcmFtIHtPcHRpb25zV2l0aFRafSBbb3B0aW9uc10gLSB0aGUgb2JqZWN0IHdpdGggb3B0aW9ucy4gU2VlIFtPcHRpb25zXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL09wdGlvbnN9XG4gKiBAcGFyYW0gezB8MXwyfSBbb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzPTJdIC0gdGhlIGFkZGl0aW9uYWwgbnVtYmVyIG9mIGRpZ2l0cyBpbiB0aGUgZXh0ZW5kZWQgeWVhciBmb3JtYXRcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy50aW1lWm9uZT0nJ10gLSB1c2VkIHRvIHNwZWNpZnkgdGhlIElBTkEgdGltZSB6b25lIG9mZnNldCBvZiBhIGRhdGUgU3RyaW5nLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBwYXJzZWQgZGF0ZSBpbiB0aGUgbG9jYWwgdGltZSB6b25lXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHNgIG11c3QgYmUgMCwgMSBvciAyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgc3RyaW5nICcyMDE0LTAyLTExVDExOjMwOjMwJyB0byBkYXRlOlxuICogdmFyIHJlc3VsdCA9IHRvRGF0ZSgnMjAxNC0wMi0xMVQxMTozMDozMCcpXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IHN0cmluZyAnKzAyMDE0MTAxJyB0byBkYXRlLFxuICogLy8gaWYgdGhlIGFkZGl0aW9uYWwgbnVtYmVyIG9mIGRpZ2l0cyBpbiB0aGUgZXh0ZW5kZWQgeWVhciBmb3JtYXQgaXMgMTpcbiAqIHZhciByZXN1bHQgPSB0b0RhdGUoJyswMjAxNDEwMScsIHthZGRpdGlvbmFsRGlnaXRzOiAxfSlcbiAqIC8vPT4gRnJpIEFwciAxMSAyMDE0IDAwOjAwOjAwXG4gKi9cbmZ1bmN0aW9uIHRvRGF0ZShhcmd1bWVudCwgZGlydHlPcHRpb25zKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgJyArIGFyZ3VtZW50cy5sZW5ndGggKyAnIHByZXNlbnQnXG4gICAgKVxuICB9XG5cbiAgaWYgKGFyZ3VtZW50ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgfVxuXG4gIHZhciBvcHRpb25zID0gZGlydHlPcHRpb25zIHx8IHt9XG5cbiAgdmFyIGFkZGl0aW9uYWxEaWdpdHMgPVxuICAgIG9wdGlvbnMuYWRkaXRpb25hbERpZ2l0cyA9PSBudWxsXG4gICAgICA/IERFRkFVTFRfQURESVRJT05BTF9ESUdJVFNcbiAgICAgIDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9kYXRlX2Zuc19lc21fbGliX3RvSW50ZWdlcl9pbmRleF9qc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHMpXG4gIGlmIChcbiAgICBhZGRpdGlvbmFsRGlnaXRzICE9PSAyICYmXG4gICAgYWRkaXRpb25hbERpZ2l0cyAhPT0gMSAmJlxuICAgIGFkZGl0aW9uYWxEaWdpdHMgIT09IDBcbiAgKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2FkZGl0aW9uYWxEaWdpdHMgbXVzdCBiZSAwLCAxIG9yIDInKVxuICB9XG5cbiAgLy8gQ2xvbmUgdGhlIGRhdGVcbiAgaWYgKFxuICAgIGFyZ3VtZW50IGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICh0eXBlb2YgYXJndW1lbnQgPT09ICdvYmplY3QnICYmXG4gICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpID09PSAnW29iamVjdCBEYXRlXScpXG4gICkge1xuICAgIC8vIFByZXZlbnQgdGhlIGRhdGUgdG8gbG9zZSB0aGUgbWlsbGlzZWNvbmRzIHdoZW4gcGFzc2VkIHRvIG5ldyBEYXRlKCkgaW4gSUUxMFxuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudC5nZXRUaW1lKCkpXG4gIH0gZWxzZSBpZiAoXG4gICAgdHlwZW9mIGFyZ3VtZW50ID09PSAnbnVtYmVyJyB8fFxuICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudCkgPT09ICdbb2JqZWN0IE51bWJlcl0nXG4gICkge1xuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudClcbiAgfSBlbHNlIGlmIChcbiAgICAhKFxuICAgICAgdHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJyB8fFxuICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSdcbiAgICApXG4gICkge1xuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gIH1cblxuICB2YXIgZGF0ZVN0cmluZ3MgPSBzcGxpdERhdGVTdHJpbmcoYXJndW1lbnQpXG5cbiAgdmFyIHBhcnNlWWVhclJlc3VsdCA9IHBhcnNlWWVhcihkYXRlU3RyaW5ncy5kYXRlLCBhZGRpdGlvbmFsRGlnaXRzKVxuICB2YXIgeWVhciA9IHBhcnNlWWVhclJlc3VsdC55ZWFyXG4gIHZhciByZXN0RGF0ZVN0cmluZyA9IHBhcnNlWWVhclJlc3VsdC5yZXN0RGF0ZVN0cmluZ1xuXG4gIHZhciBkYXRlID0gcGFyc2VEYXRlKHJlc3REYXRlU3RyaW5nLCB5ZWFyKVxuXG4gIGlmIChpc05hTihkYXRlKSkge1xuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gIH1cblxuICBpZiAoZGF0ZSkge1xuICAgIHZhciB0aW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKVxuICAgIHZhciB0aW1lID0gMFxuICAgIHZhciBvZmZzZXRcblxuICAgIGlmIChkYXRlU3RyaW5ncy50aW1lKSB7XG4gICAgICB0aW1lID0gcGFyc2VUaW1lKGRhdGVTdHJpbmdzLnRpbWUpXG5cbiAgICAgIGlmIChpc05hTih0aW1lKSkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkYXRlU3RyaW5ncy50aW1lem9uZSB8fCBvcHRpb25zLnRpbWVab25lKSB7XG4gICAgICBvZmZzZXQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19saWJfdHpQYXJzZVRpbWV6b25lX19bXCJhXCIgLyogZGVmYXVsdCAqL10pKFxuICAgICAgICBkYXRlU3RyaW5ncy50aW1lem9uZSB8fCBvcHRpb25zLnRpbWVab25lLFxuICAgICAgICBuZXcgRGF0ZSh0aW1lc3RhbXAgKyB0aW1lKVxuICAgICAgKVxuICAgICAgaWYgKGlzTmFOKG9mZnNldCkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZ2V0IG9mZnNldCBhY2N1cmF0ZSB0byBob3VyIGluIHRpbWV6b25lcyB0aGF0IGNoYW5nZSBvZmZzZXRcbiAgICAgIG9mZnNldCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfZGF0ZV9mbnNfZXNtX2xpYl9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzX2luZGV4X2pzX19bXCJhXCIgLyogZGVmYXVsdCAqL10pKG5ldyBEYXRlKHRpbWVzdGFtcCArIHRpbWUpKVxuICAgICAgb2Zmc2V0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9kYXRlX2Zuc19lc21fbGliX2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHNfaW5kZXhfanNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSkoXG4gICAgICAgIG5ldyBEYXRlKHRpbWVzdGFtcCArIHRpbWUgKyBvZmZzZXQpXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBEYXRlKHRpbWVzdGFtcCArIHRpbWUgKyBvZmZzZXQpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgfVxufVxuXG5mdW5jdGlvbiBzcGxpdERhdGVTdHJpbmcoZGF0ZVN0cmluZykge1xuICB2YXIgZGF0ZVN0cmluZ3MgPSB7fVxuICB2YXIgYXJyYXkgPSBkYXRlU3RyaW5nLnNwbGl0KHBhdHRlcm5zLmRhdGVUaW1lRGVsaW1ldGVyKVxuICB2YXIgdGltZVN0cmluZ1xuXG4gIGlmIChwYXR0ZXJucy5wbGFpblRpbWUudGVzdChhcnJheVswXSkpIHtcbiAgICBkYXRlU3RyaW5ncy5kYXRlID0gbnVsbFxuICAgIHRpbWVTdHJpbmcgPSBhcnJheVswXVxuICB9IGVsc2Uge1xuICAgIGRhdGVTdHJpbmdzLmRhdGUgPSBhcnJheVswXVxuICAgIHRpbWVTdHJpbmcgPSBhcnJheVsxXVxuICAgIGRhdGVTdHJpbmdzLnRpbWV6b25lID0gYXJyYXlbMl1cbiAgICBpZiAocGF0dGVybnMudGltZVpvbmVEZWxpbWV0ZXIudGVzdChkYXRlU3RyaW5ncy5kYXRlKSkge1xuICAgICAgZGF0ZVN0cmluZ3MuZGF0ZSA9IGRhdGVTdHJpbmcuc3BsaXQocGF0dGVybnMudGltZVpvbmVEZWxpbWV0ZXIpWzBdXG4gICAgICB0aW1lU3RyaW5nID0gZGF0ZVN0cmluZy5zdWJzdHIoZGF0ZVN0cmluZ3MuZGF0ZS5sZW5ndGgsIGRhdGVTdHJpbmcubGVuZ3RoKVxuICAgIH1cbiAgfVxuXG4gIGlmICh0aW1lU3RyaW5nKSB7XG4gICAgdmFyIHRva2VuID0gcGF0dGVybnMudGltZXpvbmUuZXhlYyh0aW1lU3RyaW5nKVxuICAgIGlmICh0b2tlbikge1xuICAgICAgZGF0ZVN0cmluZ3MudGltZSA9IHRpbWVTdHJpbmcucmVwbGFjZSh0b2tlblsxXSwgJycpXG4gICAgICBkYXRlU3RyaW5ncy50aW1lem9uZSA9IHRva2VuWzFdXG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGVTdHJpbmdzLnRpbWUgPSB0aW1lU3RyaW5nXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRhdGVTdHJpbmdzXG59XG5cbmZ1bmN0aW9uIHBhcnNlWWVhcihkYXRlU3RyaW5nLCBhZGRpdGlvbmFsRGlnaXRzKSB7XG4gIHZhciBwYXR0ZXJuWVlZID0gcGF0dGVybnMuWVlZW2FkZGl0aW9uYWxEaWdpdHNdXG4gIHZhciBwYXR0ZXJuWVlZWVkgPSBwYXR0ZXJucy5ZWVlZWVthZGRpdGlvbmFsRGlnaXRzXVxuXG4gIHZhciB0b2tlblxuXG4gIC8vIFlZWVkgb3IgwrFZWVlZWVxuICB0b2tlbiA9IHBhdHRlcm5zLllZWVkuZXhlYyhkYXRlU3RyaW5nKSB8fCBwYXR0ZXJuWVlZWVkuZXhlYyhkYXRlU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICB2YXIgeWVhclN0cmluZyA9IHRva2VuWzFdXG4gICAgcmV0dXJuIHtcbiAgICAgIHllYXI6IHBhcnNlSW50KHllYXJTdHJpbmcsIDEwKSxcbiAgICAgIHJlc3REYXRlU3RyaW5nOiBkYXRlU3RyaW5nLnNsaWNlKHllYXJTdHJpbmcubGVuZ3RoKVxuICAgIH1cbiAgfVxuXG4gIC8vIFlZIG9yIMKxWVlZXG4gIHRva2VuID0gcGF0dGVybnMuWVkuZXhlYyhkYXRlU3RyaW5nKSB8fCBwYXR0ZXJuWVlZLmV4ZWMoZGF0ZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgdmFyIGNlbnR1cnlTdHJpbmcgPSB0b2tlblsxXVxuICAgIHJldHVybiB7XG4gICAgICB5ZWFyOiBwYXJzZUludChjZW50dXJ5U3RyaW5nLCAxMCkgKiAxMDAsXG4gICAgICByZXN0RGF0ZVN0cmluZzogZGF0ZVN0cmluZy5zbGljZShjZW50dXJ5U3RyaW5nLmxlbmd0aClcbiAgICB9XG4gIH1cblxuICAvLyBJbnZhbGlkIElTTy1mb3JtYXR0ZWQgeWVhclxuICByZXR1cm4ge1xuICAgIHllYXI6IG51bGxcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZURhdGUoZGF0ZVN0cmluZywgeWVhcikge1xuICAvLyBJbnZhbGlkIElTTy1mb3JtYXR0ZWQgeWVhclxuICBpZiAoeWVhciA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICB2YXIgdG9rZW5cbiAgdmFyIGRhdGVcbiAgdmFyIG1vbnRoXG4gIHZhciB3ZWVrXG5cbiAgLy8gWVlZWVxuICBpZiAoZGF0ZVN0cmluZy5sZW5ndGggPT09IDApIHtcbiAgICBkYXRlID0gbmV3IERhdGUoMClcbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKHllYXIpXG4gICAgcmV0dXJuIGRhdGVcbiAgfVxuXG4gIC8vIFlZWVktTU1cbiAgdG9rZW4gPSBwYXR0ZXJucy5NTS5leGVjKGRhdGVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGRhdGUgPSBuZXcgRGF0ZSgwKVxuICAgIG1vbnRoID0gcGFyc2VJbnQodG9rZW5bMV0sIDEwKSAtIDFcblxuICAgIGlmICghdmFsaWRhdGVEYXRlKHllYXIsIG1vbnRoKSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgICB9XG5cbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKHllYXIsIG1vbnRoKVxuICAgIHJldHVybiBkYXRlXG4gIH1cblxuICAvLyBZWVlZLURERCBvciBZWVlZREREXG4gIHRva2VuID0gcGF0dGVybnMuRERELmV4ZWMoZGF0ZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgZGF0ZSA9IG5ldyBEYXRlKDApXG4gICAgdmFyIGRheU9mWWVhciA9IHBhcnNlSW50KHRva2VuWzFdLCAxMClcblxuICAgIGlmICghdmFsaWRhdGVEYXlPZlllYXJEYXRlKHllYXIsIGRheU9mWWVhcikpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgfVxuXG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCBkYXlPZlllYXIpXG4gICAgcmV0dXJuIGRhdGVcbiAgfVxuXG4gIC8vIHl5eXktTU0tZGQgb3IgWVlZWU1NRERcbiAgdG9rZW4gPSBwYXR0ZXJucy5NTURELmV4ZWMoZGF0ZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgZGF0ZSA9IG5ldyBEYXRlKDApXG4gICAgbW9udGggPSBwYXJzZUludCh0b2tlblsxXSwgMTApIC0gMVxuICAgIHZhciBkYXkgPSBwYXJzZUludCh0b2tlblsyXSwgMTApXG5cbiAgICBpZiAoIXZhbGlkYXRlRGF0ZSh5ZWFyLCBtb250aCwgZGF5KSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgICB9XG5cbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXkpXG4gICAgcmV0dXJuIGRhdGVcbiAgfVxuXG4gIC8vIFlZWVktV3d3IG9yIFlZWVlXd3dcbiAgdG9rZW4gPSBwYXR0ZXJucy5Xd3cuZXhlYyhkYXRlU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICB3ZWVrID0gcGFyc2VJbnQodG9rZW5bMV0sIDEwKSAtIDFcblxuICAgIGlmICghdmFsaWRhdGVXZWVrRGF0ZSh5ZWFyLCB3ZWVrKSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgICB9XG5cbiAgICByZXR1cm4gZGF5T2ZJU09XZWVrWWVhcih5ZWFyLCB3ZWVrKVxuICB9XG5cbiAgLy8gWVlZWS1Xd3ctRCBvciBZWVlZV3d3RFxuICB0b2tlbiA9IHBhdHRlcm5zLld3d0QuZXhlYyhkYXRlU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICB3ZWVrID0gcGFyc2VJbnQodG9rZW5bMV0sIDEwKSAtIDFcbiAgICB2YXIgZGF5T2ZXZWVrID0gcGFyc2VJbnQodG9rZW5bMl0sIDEwKSAtIDFcblxuICAgIGlmICghdmFsaWRhdGVXZWVrRGF0ZSh5ZWFyLCB3ZWVrLCBkYXlPZldlZWspKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICAgIH1cblxuICAgIHJldHVybiBkYXlPZklTT1dlZWtZZWFyKHllYXIsIHdlZWssIGRheU9mV2VlaylcbiAgfVxuXG4gIC8vIEludmFsaWQgSVNPLWZvcm1hdHRlZCBkYXRlXG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIHBhcnNlVGltZSh0aW1lU3RyaW5nKSB7XG4gIHZhciB0b2tlblxuICB2YXIgaG91cnNcbiAgdmFyIG1pbnV0ZXNcblxuICAvLyBoaFxuICB0b2tlbiA9IHBhdHRlcm5zLkhILmV4ZWModGltZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgaG91cnMgPSBwYXJzZUZsb2F0KHRva2VuWzFdLnJlcGxhY2UoJywnLCAnLicpKVxuXG4gICAgaWYgKCF2YWxpZGF0ZVRpbWUoaG91cnMpKSB7XG4gICAgICByZXR1cm4gTmFOXG4gICAgfVxuXG4gICAgcmV0dXJuIChob3VycyAlIDI0KSAqIE1JTExJU0VDT05EU19JTl9IT1VSXG4gIH1cblxuICAvLyBoaDptbSBvciBoaG1tXG4gIHRva2VuID0gcGF0dGVybnMuSEhNTS5leGVjKHRpbWVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGhvdXJzID0gcGFyc2VJbnQodG9rZW5bMV0sIDEwKVxuICAgIG1pbnV0ZXMgPSBwYXJzZUZsb2F0KHRva2VuWzJdLnJlcGxhY2UoJywnLCAnLicpKVxuXG4gICAgaWYgKCF2YWxpZGF0ZVRpbWUoaG91cnMsIG1pbnV0ZXMpKSB7XG4gICAgICByZXR1cm4gTmFOXG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIChob3VycyAlIDI0KSAqIE1JTExJU0VDT05EU19JTl9IT1VSICsgbWludXRlcyAqIE1JTExJU0VDT05EU19JTl9NSU5VVEVcbiAgICApXG4gIH1cblxuICAvLyBoaDptbTpzcyBvciBoaG1tc3NcbiAgdG9rZW4gPSBwYXR0ZXJucy5ISE1NU1MuZXhlYyh0aW1lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBob3VycyA9IHBhcnNlSW50KHRva2VuWzFdLCAxMClcbiAgICBtaW51dGVzID0gcGFyc2VJbnQodG9rZW5bMl0sIDEwKVxuICAgIHZhciBzZWNvbmRzID0gcGFyc2VGbG9hdCh0b2tlblszXS5yZXBsYWNlKCcsJywgJy4nKSlcblxuICAgIGlmICghdmFsaWRhdGVUaW1lKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSkge1xuICAgICAgcmV0dXJuIE5hTlxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAoaG91cnMgJSAyNCkgKiBNSUxMSVNFQ09ORFNfSU5fSE9VUiArXG4gICAgICBtaW51dGVzICogTUlMTElTRUNPTkRTX0lOX01JTlVURSArXG4gICAgICBzZWNvbmRzICogMTAwMFxuICAgIClcbiAgfVxuXG4gIC8vIEludmFsaWQgSVNPLWZvcm1hdHRlZCB0aW1lXG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIGRheU9mSVNPV2Vla1llYXIoaXNvV2Vla1llYXIsIHdlZWssIGRheSkge1xuICB3ZWVrID0gd2VlayB8fCAwXG4gIGRheSA9IGRheSB8fCAwXG4gIHZhciBkYXRlID0gbmV3IERhdGUoMClcbiAgZGF0ZS5zZXRVVENGdWxsWWVhcihpc29XZWVrWWVhciwgMCwgNClcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeURheSA9IGRhdGUuZ2V0VVRDRGF5KCkgfHwgN1xuICB2YXIgZGlmZiA9IHdlZWsgKiA3ICsgZGF5ICsgMSAtIGZvdXJ0aE9mSmFudWFyeURheVxuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgKyBkaWZmKVxuICByZXR1cm4gZGF0ZVxufVxuXG4vLyBWYWxpZGF0aW9uIGZ1bmN0aW9uc1xuXG52YXIgREFZU19JTl9NT05USCA9IFszMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXVxudmFyIERBWVNfSU5fTU9OVEhfTEVBUF9ZRUFSID0gWzMxLCAyOSwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdXG5cbmZ1bmN0aW9uIGlzTGVhcFllYXJJbmRleCh5ZWFyKSB7XG4gIHJldHVybiB5ZWFyICUgNDAwID09PSAwIHx8ICh5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwKVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZURhdGUoeWVhciwgbW9udGgsIGRhdGUpIHtcbiAgaWYgKG1vbnRoIDwgMCB8fCBtb250aCA+IDExKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAoZGF0ZSAhPSBudWxsKSB7XG4gICAgaWYgKGRhdGUgPCAxKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICB2YXIgaXNMZWFwWWVhciA9IGlzTGVhcFllYXJJbmRleCh5ZWFyKVxuICAgIGlmIChpc0xlYXBZZWFyICYmIGRhdGUgPiBEQVlTX0lOX01PTlRIX0xFQVBfWUVBUlttb250aF0pIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICBpZiAoIWlzTGVhcFllYXIgJiYgZGF0ZSA+IERBWVNfSU5fTU9OVEhbbW9udGhdKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZURheU9mWWVhckRhdGUoeWVhciwgZGF5T2ZZZWFyKSB7XG4gIGlmIChkYXlPZlllYXIgPCAxKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICB2YXIgaXNMZWFwWWVhciA9IGlzTGVhcFllYXJJbmRleCh5ZWFyKVxuICBpZiAoaXNMZWFwWWVhciAmJiBkYXlPZlllYXIgPiAzNjYpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBpZiAoIWlzTGVhcFllYXIgJiYgZGF5T2ZZZWFyID4gMzY1KSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVdlZWtEYXRlKHllYXIsIHdlZWssIGRheSkge1xuICBpZiAod2VlayA8IDAgfHwgd2VlayA+IDUyKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAoZGF5ICE9IG51bGwgJiYgKGRheSA8IDAgfHwgZGF5ID4gNikpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGltZShob3VycywgbWludXRlcywgc2Vjb25kcykge1xuICBpZiAoaG91cnMgIT0gbnVsbCAmJiAoaG91cnMgPCAwIHx8IGhvdXJzID49IDI1KSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKG1pbnV0ZXMgIT0gbnVsbCAmJiAobWludXRlcyA8IDAgfHwgbWludXRlcyA+PSA2MCkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChzZWNvbmRzICE9IG51bGwgJiYgKHNlY29uZHMgPCAwIHx8IHNlY29uZHMgPj0gNjApKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5cbi8qKiovIH0pLFxuLyogMTQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHM7XG52YXIgTUlMTElTRUNPTkRTX0lOX01JTlVURSA9IDYwMDAwO1xuLyoqXG4gKiBHb29nbGUgQ2hyb21lIGFzIG9mIDY3LjAuMzM5Ni44NyBpbnRyb2R1Y2VkIHRpbWV6b25lcyB3aXRoIG9mZnNldCB0aGF0IGluY2x1ZGVzIHNlY29uZHMuXG4gKiBUaGV5IHVzdWFsbHkgYXBwZWFyIGZvciBkYXRlcyB0aGF0IGRlbm90ZSB0aW1lIGJlZm9yZSB0aGUgdGltZXpvbmVzIHdlcmUgaW50cm9kdWNlZFxuICogKGUuZy4gZm9yICdFdXJvcGUvUHJhZ3VlJyB0aW1lem9uZSB0aGUgb2Zmc2V0IGlzIEdNVCswMDo1Nzo0NCBiZWZvcmUgMSBPY3RvYmVyIDE4OTFcbiAqIGFuZCBHTVQrMDE6MDA6MDAgYWZ0ZXIgdGhhdCBkYXRlKVxuICpcbiAqIERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgYW5kIHdvdWxkIHJldHVybiA1NyBmb3IgdGhlIGV4YW1wbGUgYWJvdmUsXG4gKiB3aGljaCB3b3VsZCBsZWFkIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lem9uZSBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzIHRoYXQgdGFrZXMgc2Vjb25kcyBpbiBhY2NvdW50LlxuICovXG5cbmZ1bmN0aW9uIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZGlydHlEYXRlKSB7XG4gIHZhciBkYXRlID0gbmV3IERhdGUoZGlydHlEYXRlLmdldFRpbWUoKSk7XG4gIHZhciBiYXNlVGltZXpvbmVPZmZzZXQgPSBNYXRoLmNlaWwoZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpKTtcbiAgZGF0ZS5zZXRTZWNvbmRzKDAsIDApO1xuICB2YXIgbWlsbGlzZWNvbmRzUGFydE9mVGltZXpvbmVPZmZzZXQgPSBkYXRlLmdldFRpbWUoKSAlIE1JTExJU0VDT05EU19JTl9NSU5VVEU7XG4gIHJldHVybiBiYXNlVGltZXpvbmVPZmZzZXQgKiBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFICsgbWlsbGlzZWNvbmRzUGFydE9mVGltZXpvbmVPZmZzZXQ7XG59XG5cbi8qKiovIH0pLFxuLyogMTUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgZ2V0V2Vla1N0YXJ0QnlSZWdpb24gKi9cbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0V2Vla1N0YXJ0QnlMb2NhbGUkMTsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hcGlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fbGFuZ1JlZ2lvbk1hcF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19yZWdpb25EYXlNYXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpO1xuXG5cblxuXG5mdW5jdGlvbiBnZXRXZWVrU3RhcnRCeVJlZ2lvbiQxKHJlZ2lvbkNvZGUpIHtcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXBpX2pzX19bXCJiXCIgLyogZ2V0V2Vla1N0YXJ0QnlSZWdpb24gKi9dKShyZWdpb25Db2RlLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3JlZ2lvbkRheU1hcF9qc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKTtcbn1cblxuZnVuY3Rpb24gZ2V0V2Vla1N0YXJ0QnlMb2NhbGUkMShsb2NhbGUpIHtcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXBpX2pzX19bXCJhXCIgLyogZ2V0V2Vla1N0YXJ0QnlMb2NhbGUgKi9dKShsb2NhbGUsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fbGFuZ1JlZ2lvbk1hcF9qc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3JlZ2lvbkRheU1hcF9qc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKTtcbn1cblxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1tYWluLmpzLm1hcFxuXG5cbi8qKiovIH0pLFxuLyogMTYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYlwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldFdlZWtTdGFydEJ5UmVnaW9uOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0V2Vla1N0YXJ0QnlMb2NhbGU7IH0pO1xuZnVuY3Rpb24gZ2V0V2Vla1N0YXJ0QnlSZWdpb24ocmVnaW9uQ29kZSwgcmVnaW9uRGF5TWFwKSB7XG4gICAgdmFyIGNvZGUgPSByZWdpb25EYXlNYXBbdHlwZW9mIHJlZ2lvbkNvZGUgPT09ICdzdHJpbmcnID8gcmVnaW9uQ29kZS50b1VwcGVyQ2FzZSgpIDogcmVnaW9uQ29kZV07XG4gICAgcmV0dXJuIHR5cGVvZiBjb2RlID09PSAnbnVtYmVyJyA/IGNvZGUgOiAxO1xufVxuXG5mdW5jdGlvbiBnZXRXZWVrU3RhcnRCeUxvY2FsZShsb2NhbGUsIGxhbmdSZWdpb25NYXAsIHJlZ2lvbkRheU1hcCkge1xuICAgIGlmIChsb2NhbGUpIHtcbiAgICAgICAgdmFyIGRhdGEgPSBsb2NhbGUudG9Mb3dlckNhc2UoKS5zcGxpdCgvWy1fXS8pO1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSBkYXRhWzBdO1xuICAgICAgICB2YXIgY291bnRyeTtcbiAgICAgICAgaWYgKGRhdGFbMV0gJiYgZGF0YVsxXS5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgIGxhbmd1YWdlICs9IFwiX1wiICsgKGRhdGFbMV0pO1xuICAgICAgICAgICAgY291bnRyeSA9IGRhdGFbMl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb3VudHJ5ID0gZGF0YVsxXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvdW50cnkpIHtcbiAgICAgICAgICAgIGNvdW50cnkgPSBsYW5nUmVnaW9uTWFwW2xhbmd1YWdlXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY291bnRyeSkge1xuICAgICAgICAgICAgcmV0dXJuIGdldFdlZWtTdGFydEJ5UmVnaW9uKGNvdW50cnkubWF0Y2goL15cXGQrJC8pID8gTnVtYmVyKGNvdW50cnkpIDogY291bnRyeSwgcmVnaW9uRGF5TWFwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gMTtcbn1cblxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcGkuanMubWFwXG5cblxuLyoqKi8gfSksXG4vKiAxNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbnZhciBsYW5nUmVnaW9uTWFwID0ge1xuICAgIGVuOiAnVVMnLFxuICAgIHpoOiAnQ04nLFxuICAgIHpoX2hhbnM6ICdDTicsXG4gICAgaGFuczogJ0NOJyxcbiAgICB3dXU6ICdDTicsXG4gICAgaHNuOiAnQ04nLFxuICAgIGhhazogJ0NOJyxcbiAgICBuYW46ICdDTicsXG4gICAgZ2FuOiAnQ04nLFxuICAgIGhpOiAnSU4nLFxuICAgIHRlOiAnSU4nLFxuICAgIG1yOiAnSU4nLFxuICAgIHRhOiAnSU4nLFxuICAgIGd1OiAnSU4nLFxuICAgIGtuOiAnSU4nLFxuICAgIG9yOiAnSU4nLFxuICAgIG1sOiAnSU4nLFxuICAgIHBhX2d1cnU6ICdJTicsXG4gICAgYmhvOiAnSU4nLFxuICAgIGF3YTogJ0lOJyxcbiAgICBhczogJ0lOJyxcbiAgICBtd3I6ICdJTicsXG4gICAgbWFpOiAnSU4nLFxuICAgIG1hZzogJ0lOJyxcbiAgICBiZ2M6ICdJTicsXG4gICAgaG5lOiAnSU4nLFxuICAgIGRjYzogJ0lOJyxcbiAgICBkejogJ0JUJyxcbiAgICB0bjogJ0JXJyxcbiAgICBhbTogJ0VUJyxcbiAgICBvbTogJ0VUJyxcbiAgICBxdWM6ICdHVCcsXG4gICAgaWQ6ICdJRCcsXG4gICAganY6ICdJRCcsXG4gICAgc3U6ICdJRCcsXG4gICAgbWFkOiAnSUQnLFxuICAgIG1zX2FyYWI6ICdJRCcsXG4gICAgZ2E6ICdJRScsXG4gICAgaGU6ICdJTCcsXG4gICAgamFtOiAnSk0nLFxuICAgIGphOiAnSlAnLFxuICAgIGttOiAnS0gnLFxuICAgIGtvOiAnS1InLFxuICAgIGxvOiAnTEEnLFxuICAgIG1oOiAnTUgnLFxuICAgIG15OiAnTU0nLFxuICAgIG10OiAnTVQnLFxuICAgIG5lOiAnTlAnLFxuICAgIGZpbDogJ1BIJyxcbiAgICBjZWI6ICdQSCcsXG4gICAgaWxvOiAnUEgnLFxuICAgIHVyOiAnUEsnLFxuICAgIHBhOiAnUEsnLFxuICAgIHBhX2FyYWI6ICdQSycsXG4gICAgYXJhYjogJ1BLJyxcbiAgICBsYWg6ICdQSycsXG4gICAgcHM6ICdQSycsXG4gICAgc2Q6ICdQSycsXG4gICAgc2RfYXJhYjogJ1BLJyxcbiAgICBza3I6ICdQSycsXG4gICAgZ246ICdQWScsXG4gICAgdGg6ICdUSCcsXG4gICAgdHRzOiAnVEgnLFxuICAgIGFlYjogJ1ROJyxcbiAgICB6aF9oYW50OiAnVFcnLFxuICAgIGhhbnQ6ICdUVycsXG4gICAgc206ICdXUycsXG4gICAgenU6ICdaQScsXG4gICAgc246ICdaVycsXG4gICAgYXJxOiAnRFonLFxuICAgIGFyOiAnRUcnLFxuICAgIGFyejogJ0VHJyxcbiAgICBmYTogJ0lSJyxcbiAgICBhel9hcmFiOiAnSVInLFxuICAgIGFyeTogJ01BJyxcbiAgICBibjogJ0JEJyxcbiAgICBya3Q6ICdCRCcsXG4gICAgZHY6ICdNVidcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAobGFuZ1JlZ2lvbk1hcCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sYW5nUmVnaW9uTWFwLmpzLm1hcFxuXG5cbi8qKiovIH0pLFxuLyogMTggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG52YXIgcmVnaW9uRGF5TWFwID0ge1xuICAgIEFHOiAwLFxuICAgIEFURzogMCxcbiAgICAyODogMCxcbiAgICBBUjogMCxcbiAgICBBUkc6IDAsXG4gICAgMzI6IDAsXG4gICAgQVM6IDAsXG4gICAgQVNNOiAwLFxuICAgIDE2OiAwLFxuICAgIEFVOiAwLFxuICAgIEFVUzogMCxcbiAgICAzNjogMCxcbiAgICBCUjogMCxcbiAgICBCUkE6IDAsXG4gICAgNzY6IDAsXG4gICAgQlM6IDAsXG4gICAgQkhTOiAwLFxuICAgIDQ0OiAwLFxuICAgIEJUOiAwLFxuICAgIEJUTjogMCxcbiAgICA2NDogMCxcbiAgICBCVzogMCxcbiAgICBCV0E6IDAsXG4gICAgNzI6IDAsXG4gICAgQlo6IDAsXG4gICAgQkxaOiAwLFxuICAgIDg0OiAwLFxuICAgIENBOiAwLFxuICAgIENBTjogMCxcbiAgICAxMjQ6IDAsXG4gICAgQ046IDAsXG4gICAgQ0hOOiAwLFxuICAgIDE1NjogMCxcbiAgICBDTzogMCxcbiAgICBDT0w6IDAsXG4gICAgMTcwOiAwLFxuICAgIERNOiAwLFxuICAgIERNQTogMCxcbiAgICAyMTI6IDAsXG4gICAgRE86IDAsXG4gICAgRE9NOiAwLFxuICAgIDIxNDogMCxcbiAgICBFVDogMCxcbiAgICBFVEg6IDAsXG4gICAgMjMxOiAwLFxuICAgIEdUOiAwLFxuICAgIEdUTTogMCxcbiAgICAzMjA6IDAsXG4gICAgR1U6IDAsXG4gICAgR1VNOiAwLFxuICAgIDMxNjogMCxcbiAgICBISzogMCxcbiAgICBIS0c6IDAsXG4gICAgMzQ0OiAwLFxuICAgIEhOOiAwLFxuICAgIEhORDogMCxcbiAgICAzNDA6IDAsXG4gICAgSUQ6IDAsXG4gICAgSUROOiAwLFxuICAgIDM2MDogMCxcbiAgICBJRTogMCxcbiAgICBJUkw6IDAsXG4gICAgMzcyOiAwLFxuICAgIElMOiAwLFxuICAgIElTUjogMCxcbiAgICAzNzY6IDAsXG4gICAgSU46IDAsXG4gICAgSU5EOiAwLFxuICAgIDM1NjogMCxcbiAgICBKTTogMCxcbiAgICBKQU06IDAsXG4gICAgMzg4OiAwLFxuICAgIEpQOiAwLFxuICAgIEpQTjogMCxcbiAgICAzOTI6IDAsXG4gICAgS0U6IDAsXG4gICAgS0VOOiAwLFxuICAgIDQwNDogMCxcbiAgICBLSDogMCxcbiAgICBLSE06IDAsXG4gICAgMTE2OiAwLFxuICAgIEtSOiAwLFxuICAgIEtPUjogMCxcbiAgICA0MTA6IDAsXG4gICAgTEE6IDAsXG4gICAgTEEwOiAwLFxuICAgIDQxODogMCxcbiAgICBNSDogMCxcbiAgICBNSEw6IDAsXG4gICAgNTg0OiAwLFxuICAgIE1NOiAwLFxuICAgIE1NUjogMCxcbiAgICAxMDQ6IDAsXG4gICAgTU86IDAsXG4gICAgTUFDOiAwLFxuICAgIDQ0NjogMCxcbiAgICBNVDogMCxcbiAgICBNTFQ6IDAsXG4gICAgNDcwOiAwLFxuICAgIE1YOiAwLFxuICAgIE1FWDogMCxcbiAgICA0ODQ6IDAsXG4gICAgTVo6IDAsXG4gICAgTU9aOiAwLFxuICAgIDUwODogMCxcbiAgICBOSTogMCxcbiAgICBOSUM6IDAsXG4gICAgNTU4OiAwLFxuICAgIE5QOiAwLFxuICAgIE5QTDogMCxcbiAgICA1MjQ6IDAsXG4gICAgTlo6IDAsXG4gICAgTlpMOiAwLFxuICAgIDU1NDogMCxcbiAgICBQQTogMCxcbiAgICBQQU46IDAsXG4gICAgNTkxOiAwLFxuICAgIFBFOiAwLFxuICAgIFBFUjogMCxcbiAgICA2MDQ6IDAsXG4gICAgUEg6IDAsXG4gICAgUEhMOiAwLFxuICAgIDYwODogMCxcbiAgICBQSzogMCxcbiAgICBQQUs6IDAsXG4gICAgNTg2OiAwLFxuICAgIFBSOiAwLFxuICAgIFBSSTogMCxcbiAgICA2MzA6IDAsXG4gICAgUFk6IDAsXG4gICAgUFJZOiAwLFxuICAgIDYwMDogMCxcbiAgICBTQTogMCxcbiAgICBTQVU6IDAsXG4gICAgNjgyOiAwLFxuICAgIFNHOiAwLFxuICAgIFNHUDogMCxcbiAgICA3MDI6IDAsXG4gICAgU1Y6IDAsXG4gICAgU0xWOiAwLFxuICAgIDIyMjogMCxcbiAgICBUSDogMCxcbiAgICBUSEE6IDAsXG4gICAgNzY0OiAwLFxuICAgIFROOiAwLFxuICAgIFRVTjogMCxcbiAgICA3ODg6IDAsXG4gICAgVFQ6IDAsXG4gICAgVFRPOiAwLFxuICAgIDc4MDogMCxcbiAgICBUVzogMCxcbiAgICBUV046IDAsXG4gICAgMTU4OiAwLFxuICAgIFVNOiAwLFxuICAgIFVNSTogMCxcbiAgICA1ODE6IDAsXG4gICAgVVM6IDAsXG4gICAgVVNBOiAwLFxuICAgIDg0MDogMCxcbiAgICBWRTogMCxcbiAgICBWRU46IDAsXG4gICAgODYyOiAwLFxuICAgIFZJOiAwLFxuICAgIFZJUjogMCxcbiAgICA4NTA6IDAsXG4gICAgV1M6IDAsXG4gICAgV1NNOiAwLFxuICAgIDg4MjogMCxcbiAgICBZRTogMCxcbiAgICBZRU06IDAsXG4gICAgODg3OiAwLFxuICAgIFpBOiAwLFxuICAgIFpBRjogMCxcbiAgICA3MTA6IDAsXG4gICAgWlc6IDAsXG4gICAgWldFOiAwLFxuICAgIDcxNjogMCxcbiAgICBBRTogNixcbiAgICBBUkU6IDYsXG4gICAgNzg0OiA2LFxuICAgIEFGOiA2LFxuICAgIEFGRzogNixcbiAgICA0OiA2LFxuICAgIEJIOiA2LFxuICAgIEJIUjogNixcbiAgICA0ODogNixcbiAgICBESjogNixcbiAgICBESkk6IDYsXG4gICAgMjYyOiA2LFxuICAgIERaOiA2LFxuICAgIERaQTogNixcbiAgICAxMjogNixcbiAgICBFRzogNixcbiAgICBFR1k6IDYsXG4gICAgODE4OiA2LFxuICAgIElROiA2LFxuICAgIElSUTogNixcbiAgICAzNjg6IDYsXG4gICAgSVI6IDYsXG4gICAgSVJOOiA2LFxuICAgIDM2NDogNixcbiAgICBKTzogNixcbiAgICBKT1I6IDYsXG4gICAgNDAwOiA2LFxuICAgIEtXOiA2LFxuICAgIEtXVDogNixcbiAgICA0MTQ6IDYsXG4gICAgTFk6IDYsXG4gICAgTEJZOiA2LFxuICAgIDQzNDogNixcbiAgICBNQTogNixcbiAgICBNQVI6IDYsXG4gICAgNTA0OiA2LFxuICAgIE9NOiA2LFxuICAgIE9NTjogNixcbiAgICA1MTI6IDYsXG4gICAgUUE6IDYsXG4gICAgUUFUOiA2LFxuICAgIDYzNDogNixcbiAgICBTRDogNixcbiAgICBTRE46IDYsXG4gICAgNzI5OiA2LFxuICAgIFNZOiA2LFxuICAgIFNZUjogNixcbiAgICA3NjA6IDYsXG4gICAgQkQ6IDUsXG4gICAgQkdEOiA1LFxuICAgIDUwOiA1LFxuICAgIE1WOiA1LFxuICAgIE1EVjogNSxcbiAgICA0NjI6IDVcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAocmVnaW9uRGF5TWFwKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZ2lvbkRheU1hcC5qcy5tYXBcblxuXG4vKioqLyB9KSxcbi8qIDE5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG4vKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmJqLW1hc2tzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cbnZhciBpc051bWJlclJlZ2V4ID0gL15cXGQrJC87XG52YXIgaXNXaGl0ZXNwYWNlUmVnZXggPSAvXFxzLztcbnZhciBwdW5jdHVhdGlvbkxpc3QgPSAnIVwiIyQlJlxcJygpKissLS4vOjs8PT4/QFtdXl9ge3x9fic7XG4vKipcbiAqIENoZWNrIGlmIHRoZSBnaXZlbiBzdHJpbmcgaXMgaW4gbG93ZXIgY2FzZVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqL1xuXG52YXIgaXNMb3dlckNhc2UgPSBmdW5jdGlvbiBpc0xvd2VyQ2FzZShzdHIpIHtcbiAgcmV0dXJuIHN0ciA9PSBzdHIudG9Mb3dlckNhc2UoKSAmJiBzdHIgIT0gc3RyLnRvVXBwZXJDYXNlKCk7XG59O1xuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGluIHVwcGVyIGNhc2VcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKi9cblxuXG52YXIgaXNVcHBlckNhc2UgPSBmdW5jdGlvbiBpc1VwcGVyQ2FzZShzdHIpIHtcbiAgcmV0dXJuIHN0ciA9PSBzdHIudG9VcHBlckNhc2UoKSAmJiBzdHIgIT0gc3RyLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgcGFzc09yVGhyb3dFcnJvciA9IGZ1bmN0aW9uIHBhc3NPclRocm93RXJyb3IobG9vc2UsIHJldCwgaSwgc3RyKSB7XG4gIGlmICghbG9vc2UpIHtcbiAgICB2YXIgX2NoYXIgPSBzdHIuY2hhckF0KGkpO1xuXG4gICAgdmFyIHBvcyA9IGkgKyAxO1xuICAgIHRocm93IHtcbiAgICAgIG5hbWU6ICdTdHJpbmdNYXNrRXJyb3InLFxuICAgICAgbWVzc2FnZTogXCJTdHJpbmdNYXNrRXJyb3I6IGVycm9yIGFwcGx5aW5nIG1hc2sgYXQgcG9zaXRpb24gXFxcIlwiLmNvbmNhdChwb3MsIFwiXFxcIiAsIGNoYXIgXFxcIlwiKS5jb25jYXQoX2NoYXIsIFwiXFxcIlwiKSxcbiAgICAgIHBvczogcG9zLFxuICAgICAgXCJjaGFyXCI6IF9jaGFyXG4gICAgfTtcbiAgfSBlbHNlIHJldFtpXSA9ICcgJztcbn07XG4vKipcbiAqIE51bWJlck1hc2tcbiAqXG4gKiBBIGphdmFzY3JpcHQgaW1wbGVtZW50YXRpb24gZm9yIEJCaiBudW1iZXJzIG1hc2tpbmdcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5cblxudmFyIFN0cmluZ01hc2sgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTdHJpbmdNYXNrKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdHJpbmdNYXNrKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdHJpbmdNYXNrLCBudWxsLCBbe1xuICAgIGtleTogXCJtYXNrXCIsXG5cbiAgICAvKipcbiAgICAgKiBNYXNrIHRoZSBnaXZlbiBzdHJpbmcgd2l0aCB0aGUgZ2l2ZW4gbWFzayBhY2NvcmRpbmcgdG8gQkJqIHJ1bGVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gc3RyIHRoZSBzdHJpbmcgdG8gbWFza1xuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtYXNrIHRoZSBtYXNrIHRvIHVzZSBmb3IgZm9ybWF0dGluZ1xuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW2xvb3NlPXRydWVdIHdoZW4gdHJ1ZSAsIGVycm9ycyB3aWxsIGJlIGlnbm9yZWQgYW5kIHRoZSBtZXRob2Qgd2lsbCB0cnkgYXQgYXBwbHkgdGhlIG1hc2tcbiAgICAgKiAgICAgICAgICAgICAgICBhbnl3YXkgLCBvdGhlcndpc2UgaXQgd2lsbCBzdG9wIGF0IGZpcnN0IGVycm9yIGFuZCB0aHJvdyBpdC5cbiAgICAgKiBcbiAgICAgKiBAdGhyb3dzIHtNYXNrSXNUb29TaG9ydEVycm9yfVxuICAgICAqIEB0aHJvd3Mge1N0cmluZ01hc2tFcnJvcn1cbiAgICAgKiBAdGhyb3dzIHtNYXNrRXJyb3J9XG4gICAgICogXG4gICAgICogQHJldHVybnMge1N0cmluZ30gdGhlIG1hc2tlZCBzdHJpbmdcbiAgICAgKi9cbiAgICB2YWx1ZTogZnVuY3Rpb24gbWFzayhzdHIsIF9tYXNrKSB7XG4gICAgICB2YXIgbG9vc2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHRydWU7XG4gICAgICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgICAgIF9tYXNrID0gU3RyaW5nKF9tYXNrKTtcbiAgICAgIHZhciBtYXNrTGVuID0gX21hc2subGVuZ3RoO1xuICAgICAgdmFyIHN0ckxlbiA9IHN0ci5sZW5ndGg7XG5cbiAgICAgIGlmIChzdHJMZW4gPiBtYXNrTGVuKSB7XG4gICAgICAgIGlmIChsb29zZSkgcmV0dXJuIHN0cjsgLy8gZnJpZW5kbHkgc2lsZW50IGZhaWxcbiAgICAgICAgZWxzZSB0aHJvdyB7XG4gICAgICAgICAgICBuYW1lOiAnTWFza0lzVG9vU2hvcnRFcnJvcicsXG4gICAgICAgICAgICBtZXNzYWdlOiBcIk1hc2tJc1Rvb1Nob3J0RXJyb3I6IE1hc2sgaXMgc2hvcnRlciB0aGFuIHRoZSBwYXNzZWQgc3RyaW5nXCJcbiAgICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB2YXIgcmV0ID0gbmV3IEFycmF5KG1hc2tMZW4pO1xuICAgICAgdmFyIHBvcyA9IDA7IC8vIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIHN0clxuXG4gICAgICB2YXIgbWFza0J5dGUgPSAnJztcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXNrTGVuOyBpKyspIHtcbiAgICAgICAgbWFza0J5dGUgPSBfbWFzay5jaGFyQXQoaSk7XG5cbiAgICAgICAgc3dpdGNoIChtYXNrQnl0ZSkge1xuICAgICAgICAgIGNhc2UgJ1gnOlxuICAgICAgICAgICAgLy8gbWF0Y2ggYW55IGNoYXJhY3RlclxuICAgICAgICAgICAgcmV0W2ldID0gcG9zIDwgc3RyTGVuID8gc3RyLmNoYXJBdChwb3MpIDogJyAnO1xuICAgICAgICAgICAgKytwb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ0EnOlxuICAgICAgICAgICAgLy8gbWF0Y2ggbGV0dGVyOyBmb3JjZSB1cHBlciBjYXNlXG4gICAgICAgICAgICBpZiAocG9zIDwgc3RyTGVuKSB7XG4gICAgICAgICAgICAgIHZhciBfYnl0ZSA9IHN0ci5jaGFyQXQocG9zKTtcblxuICAgICAgICAgICAgICBpZiAoaXNVcHBlckNhc2UoX2J5dGUpKSByZXRbaV0gPSBfYnl0ZTtlbHNlIGlmIChpc0xvd2VyQ2FzZShfYnl0ZSkpIHJldFtpXSA9IF9ieXRlLnRvVXBwZXJDYXNlKCk7ZWxzZSBwYXNzT3JUaHJvd0Vycm9yKGxvb3NlLCByZXQsIGksIHN0cik7XG4gICAgICAgICAgICB9IGVsc2UgcmV0W2ldID0gJyAnO1xuXG4gICAgICAgICAgICArK3BvcztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnYSc6XG4gICAgICAgICAgICAvLyBtYXRjaCBsZXR0ZXJcbiAgICAgICAgICAgIGlmIChwb3MgPCBzdHJMZW4pIHtcbiAgICAgICAgICAgICAgdmFyIF9ieXRlMiA9IHN0ci5jaGFyQXQocG9zKTtcblxuICAgICAgICAgICAgICBpZiAoaXNVcHBlckNhc2UoX2J5dGUyKSB8fCBpc0xvd2VyQ2FzZShfYnl0ZTIpKSByZXRbaV0gPSBfYnl0ZTI7ZWxzZSBwYXNzT3JUaHJvd0Vycm9yKGxvb3NlLCByZXQsIGksIHN0cik7XG4gICAgICAgICAgICB9IGVsc2UgcmV0W2ldID0gJyAnO1xuXG4gICAgICAgICAgICArK3BvcztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnMCc6XG4gICAgICAgICAgICAvLyBtYXRjaCBkaWdpdFxuICAgICAgICAgICAgaWYgKHBvcyA8IHN0ckxlbikge1xuICAgICAgICAgICAgICB2YXIgX2J5dGUzID0gc3RyLmNoYXJBdChwb3MpO1xuXG4gICAgICAgICAgICAgIGlmIChpc051bWJlclJlZ2V4LnRlc3QoX2J5dGUzKSkgcmV0W2ldID0gX2J5dGUzO2Vsc2UgcGFzc09yVGhyb3dFcnJvcihsb29zZSwgcmV0LCBpLCBzdHIpO1xuICAgICAgICAgICAgfSBlbHNlIHJldFtpXSA9ICcgJztcblxuICAgICAgICAgICAgKytwb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ1onOlxuICAgICAgICAgICAgLy8gbWF0Y2ggbGV0dGVyIG9yIGRpZ2l0OyBmb3JjZSB1cHBlciBjYXNlXG4gICAgICAgICAgICBpZiAocG9zIDwgc3RyTGVuKSB7XG4gICAgICAgICAgICAgIHZhciBfYnl0ZTQgPSBzdHIuY2hhckF0KHBvcyk7XG5cbiAgICAgICAgICAgICAgaWYgKGlzVXBwZXJDYXNlKF9ieXRlNCkgfHwgaXNOdW1iZXJSZWdleC50ZXN0KF9ieXRlNCkpIHJldFtpXSA9IF9ieXRlNDtlbHNlIGlmIChpc0xvd2VyQ2FzZShfYnl0ZTQpKSByZXRbaV0gPSBfYnl0ZTQudG9VcHBlckNhc2UoKTtlbHNlIHBhc3NPclRocm93RXJyb3IobG9vc2UsIHJldCwgaSwgc3RyKTtcbiAgICAgICAgICAgIH0gZWxzZSByZXRbaV0gPSAnICc7XG5cbiAgICAgICAgICAgICsrcG9zO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICd6JzpcbiAgICAgICAgICAgIC8vIG1hdGNoIGxldHRlciBvciBkaWdpdFxuICAgICAgICAgICAgaWYgKHBvcyA8IHN0ckxlbikge1xuICAgICAgICAgICAgICB2YXIgX2J5dGU1ID0gc3RyLmNoYXJBdChwb3MpO1xuXG4gICAgICAgICAgICAgIGlmIChpc1VwcGVyQ2FzZShfYnl0ZTUpIHx8IGlzTG93ZXJDYXNlKF9ieXRlNSkgfHwgaXNOdW1iZXJSZWdleC50ZXN0KF9ieXRlNSkpIHJldFtpXSA9IF9ieXRlNTtlbHNlIHBhc3NPclRocm93RXJyb3IobG9vc2UsIHJldCwgaSwgc3RyKTtcbiAgICAgICAgICAgIH0gZWxzZSByZXRbaV0gPSAnICc7XG5cbiAgICAgICAgICAgICsrcG9zO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ1UnOlxuICAgICAgICAgICAgLy8gbWF0Y2ggbGV0dGVyIChmb3JjZSB1cHBlciBjYXNlKSwgZGlnaXQsIHdoaXRlc3BhY2Ugb3IgcHVuY3R1YXRpb24uXG4gICAgICAgICAgICBpZiAocG9zIDwgc3RyTGVuKSB7XG4gICAgICAgICAgICAgIHZhciBfYnl0ZTYgPSBzdHIuY2hhckF0KHBvcyk7XG5cbiAgICAgICAgICAgICAgaWYgKGlzTG93ZXJDYXNlKF9ieXRlNikpIHJldFtpXSA9IF9ieXRlNi50b1VwcGVyQ2FzZSgpO2Vsc2UgaWYgKGlzVXBwZXJDYXNlKF9ieXRlNikgfHwgaXNOdW1iZXJSZWdleC50ZXN0KF9ieXRlNikgfHwgaXNXaGl0ZXNwYWNlUmVnZXgudGVzdChfYnl0ZTYpIHx8IHB1bmN0dWF0aW9uTGlzdC5pbmRleE9mKF9ieXRlNikgPiAtMSkgcmV0W2ldID0gX2J5dGU2O2Vsc2UgcGFzc09yVGhyb3dFcnJvcihsb29zZSwgcmV0LCBpLCBzdHIpO1xuICAgICAgICAgICAgfSBlbHNlIHJldFtpXSA9ICcgJztcblxuICAgICAgICAgICAgKytwb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXRbaV0gPSBtYXNrQnl0ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwb3MgPCBzdHJMZW4pIHtcbiAgICAgICAgaWYgKCFsb29zZSkge1xuICAgICAgICAgIHRocm93IHtcbiAgICAgICAgICAgIG5hbWU6ICdNYXNrRXJyb3InLFxuICAgICAgICAgICAgbWVzc2FnZTogJ01hc2sgY2Fubm90IGJlIGFwcGxpZWQnXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmV0LmpvaW4oJycpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdHJpbmdNYXNrO1xufSgpO1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKFN0cmluZ01hc2spO1xuXG4vKioqLyB9KSxcbi8qIDIwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fVHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjEpO1xuLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJiai1tYXNrcyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19UeXBlc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKTtcblxuLyoqKi8gfSksXG4vKiAyMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX051bWJlck1hc2tfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19EYXRlTWFza19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1N0cmluZ01hc2tfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYmotbWFza3MgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5cblxuLyoqXG4gKiBUeXBlc1xuICpcbiAqIEJCaiBtYXNrcyBmYWN0b3J5XG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqL1xuXG52YXIgVHlwZXMgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBUeXBlcygpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVHlwZXMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFR5cGVzLCBudWxsLCBbe1xuICAgIGtleTogXCJudW1iZXJcIixcblxuICAgIC8qKlxuICAgICAqIE1hc2sgdGhlIGdpdmVuIG51bWJlciB3aXRoIHRoZSBnaXZlbiBtYXNrIGFjY29yZGluZyB0byBCQmogcnVsZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBudW1iZXIgdGhlIG51bWJlciB0byBmb3JtYXRcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWFzayB0aGUgbWFzayB0byB1c2UgZm9yIGZvcm1hdHRpbmdcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW2dyb3VwaW5nU2VwYXJhdG9yPSxdIC0gYSBjaGFyIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGdyb3VwaW5nIHNlcGFyYXRvclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbZGVjaW1hbFNlcGFyYXRvcj0uXSAgLSBhIGNoYXIgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgZGVjaW1hbCBzZXBhcmF0b3JcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtmb3JjZVRyYWlsaW5nWmVyb3M9ZmFsc2VdIC0gQWZmZWN0cyB0aGUgb3V0cHV0IGJ5IHN3aXRjaGluZyB0aGUgd2F5IGEgbWFzayB3aXRoIFwiI1wiIGNoYXJhY3RlcnMgaW4gdGhlIHRyYWlsaW5nIHBvc2l0aW9ucyBpcyBmaWxsZWQuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGV4YW1wbGUsIHRoZSBmdW5jdGlvbiBgTnVtYmVyTWFzay5tYXNrKC4xMDpcIiMuIyNcIilgIHJldHVybnMgYCAuMTBgIGluc3RlYWQgb2YgYCAuMSBgXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBbbG9vc2U9dHJ1ZV0gd2hlbiB0cnVlICwgZXJyb3JzIHdpbGwgYmUgaWdub3JlZCBhbmQgdGhlIG1ldGhvZCB3aWxsIHRyeSBhdCBhcHBseSB0aGUgbWFza1xuICAgICAqICAgICAgICAgICAgICAgIGFueXdheSAsIG90aGVyd2lzZSBpdCB3aWxsIHN0b3AgYXQgZmlyc3QgZXJyb3IgYW5kIHRocm93IGl0LlxuICAgICAqXG4gICAgICogQHJldHVybnMge1N0cmluZ30gdGhlIG1hc2tlZCBudW1iZXJcbiAgICAgKi9cbiAgICB2YWx1ZTogZnVuY3Rpb24gbnVtYmVyKF9udW1iZXIsIG1hc2spIHtcbiAgICAgIHZhciBncm91cGluZ1NlcGFyYXRvciA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogJywnO1xuICAgICAgdmFyIGRlY2ltYWxTZXBhcmF0b3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6ICcuJztcbiAgICAgIHZhciBmb3JjZVRyYWlsaW5nWmVyb3MgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IGZhbHNlO1xuICAgICAgdmFyIGxvb3NlID0gYXJndW1lbnRzLmxlbmd0aCA+IDUgJiYgYXJndW1lbnRzWzVdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNV0gOiB0cnVlO1xuICAgICAgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTnVtYmVyTWFza19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dLm1hc2soX251bWJlciwgbWFzaywgZ3JvdXBpbmdTZXBhcmF0b3IsIGRlY2ltYWxTZXBhcmF0b3IsIGZvcmNlVHJhaWxpbmdaZXJvcywgbG9vc2UpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYXNrIGEgZGF0ZSBhY2NvcmRpbmcgdG8gYmJqIG1hc2tpbmcgcnVsZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBkYXRlIGRhdGUgYXMgYSBzdHJpbmdcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWFzayBtYXNrIGFzIGEgc3RyaW5nXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFtsb2NhbGU9QnJvd3NlcidzIGxvY2FsZV0gdGhlIGxhbmd1YWdlIHRvIHVzZSBleChlbi1VUykuIGRlZmF1bHQgaXMgdG8gdGhlIHN5c3RlbSBsYW5ndWFnZVxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbdGltZXpvbmU9U3lzdGVtIHRpbWV6b25lXSB0aGUgdGltZSB6b25lIGRlc2NyaXB0b3IgKGUuZy4gQW1lcmljYS9Mb3NfQW5nZWxlcykuIGRlZmF1bHQgdG8gdGhlIHN5c3RlbVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lem9uZVxuICAgICAqXG4gICAgICogQHJldHVybiB7U3RyaW5nfSBudW1iZXIgbWFza2VkIHdpdGggdGhlIGdpdmVuIG1hc2tcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcImRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGF0ZShfZGF0ZSwgbWFzaywgbG9jYWxlLCB0aW1lem9uZSkge1xuICAgICAgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fRGF0ZU1hc2tfX1tcImNcIiAvKiBkZWZhdWx0ICovXS5tYXNrKF9kYXRlLCBtYXNrLCBsb2NhbGUsIHRpbWV6b25lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFzayB0aGUgZ2l2ZW4gc3RyaW5nIHdpdGggdGhlIGdpdmVuIG1hc2sgYWNjb3JkaW5nIHRvIEJCaiBydWxlc1xuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHN0ciB0aGUgc3RyaW5nIHRvIG1hc2tcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWFzayB0aGUgbWFzayB0byB1c2UgZm9yIGZvcm1hdHRpbmdcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtsb29zZT10cnVlXSB3aGVuIHRydWUgLCBlcnJvcnMgd2lsbCBiZSBpZ25vcmVkIGFuZCB0aGUgbWV0aG9kIHdpbGwgdHJ5IGF0IGFwcGx5IHRoZSBtYXNrXG4gICAgICogICAgICAgICAgICAgICAgYW55d2F5ICwgb3RoZXJ3aXNlIGl0IHdpbGwgc3RvcCBhdCBmaXJzdCBlcnJvciBhbmQgdGhyb3cgaXQuXG4gICAgICpcbiAgICAgKiBAdGhyb3dzIHtNYXNrSXNUb29TaG9ydEVycm9yfVxuICAgICAqIEB0aHJvd3Mge1N0cmluZ01hc2tFcnJvcn1cbiAgICAgKiBAdGhyb3dzIHtNYXNrRXJyb3J9XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSB0aGUgbWFza2VkIHN0cmluZ1xuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwic3RyaW5nXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHN0cmluZyhzdHIsIG1hc2spIHtcbiAgICAgIHZhciBsb29zZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogdHJ1ZTtcbiAgICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1N0cmluZ01hc2tfX1tcImFcIiAvKiBkZWZhdWx0ICovXS5tYXNrKHN0ciwgbWFzaywgbG9vc2UpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBUeXBlcztcbn0oKTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IChUeXBlcyk7XG5cbi8qKiovIH0pXG4vKioqKioqLyBdKTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmJqLW1hc2tzLmpzLm1hcCIsImlmKCFnbG9iYWxbXCJCYXNpc1wiXSkgZ2xvYmFsW1wiQmFzaXNcIl0gPSB7fTtcbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsW1wiQmFzaXNcIl1bXCJJbnB1dE1hc2tpbmdcIl0gPSByZXF1aXJlKFwiLSFEOlxcXFxHaXRodWJcXFxcQkJqR3JpZEV4V2lkZ2V0XFxcXGNsaWVudFxcXFxub2RlX21vZHVsZXNcXFxcYmFiZWwtbG9hZGVyXFxcXGxpYlxcXFxpbmRleC5qcz8/cmVmLS00IS5cXFxcYmFzaXMtaW5wdXQtbWFza2luZy5qc1wiKTsiLCIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJBZ0dyaWRDb21wb25lbnRzXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIkJhc2lzXCJdID0gcm9vdFtcIkJhc2lzXCJdIHx8IHt9LCByb290W1wiQmFzaXNcIl1bXCJBZ0dyaWRDb21wb25lbnRzXCJdID0gZmFjdG9yeSgpO1xufSkodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHRoaXMsIGZ1bmN0aW9uKCkge1xucmV0dXJuIFxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCBmZDdmNjA0MjE5MmUxMjMyY2Y2NSIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8wX187XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwge1wiY29tbW9uanNcIjpcImJiai1tYXNrcy9zcmMvU3RyaW5nTWFza1wiLFwiY29tbW9uanMyXCI6XCJiYmotbWFza3Mvc3JjL1N0cmluZ01hc2tcIixcImFtZFwiOlwiYmJqLW1hc2tzL3NyYy9TdHJpbmdNYXNrXCIsXCJyb290XCI6W1wiQkJqXCIsXCJNYXNrc1wiLFwiU3RyaW5nTWFza1wiXX1cbi8vIG1vZHVsZSBpZCA9IDBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiLCIvKlxyXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1pbnB1dC1tYXNraW5nIGxpYi5cclxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxyXG4gKlxyXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxyXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cclxuICovXHJcblxyXG5pbXBvcnQgVGV4dElucHV0IGZyb20gJy4vVGV4dElucHV0J1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGV4dElucHV0XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9UZXh0SW5wdXQvaW5kZXguanMiLCIvKlxyXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1pbnB1dC1tYXNraW5nIGxpYi5cclxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxyXG4gKlxyXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxyXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cclxuICovXHJcblxyXG5pbXBvcnQgU3RyaW5nTWFzayBmcm9tICdiYmotbWFza3Mvc3JjL1N0cmluZ01hc2snXHJcbmltcG9ydCB7XHJcbiAgbWFza0lmTm90TWFza2VkLFxyXG4gIHVubWFzayxcclxuICBmaW5kQ2FyZXRQb3NpdGlvbixcclxuICBnZW5lcmF0ZVBhdHRlcm5Gcm9tTWFzayxcclxufSBmcm9tICcuL3Rvb2xzLmpzJ1xyXG5cclxuLyoqXHJcbiAqIFRoZSBgVGV4dElucHV0YCB3aWxsIHdyYXAgdGV4dCBpbnB1dHMgYW5kIGFwcGx5IHRoZSBnaXZlbiBbYmJqIHN0cmluZyBtYXNrXShodHRwczovL2dpdGh1Yi5jb20vQmFzaXNIdWIvYmJqLW1hc2tzI3N0cmluZy1tYXNrcylcclxuICpcclxuICogKipPcHRpb25zKipcclxuICpcclxuICogX09wdGlvbnMgY2FuIGJlIHBhc3NlZCB2aWEgZGF0YSBhdHRyaWJ1dGVzIC4gRm9yIGRhdGEgYXR0cmlidXRlcywgYXBwZW5kIHRoZSBvcHRpb24gbmFtZSB0byBkYXRhLSwgYXMgaW4gZGF0YS1tYXNrX1xyXG4gKlxyXG4gKiB8IE9wdGlvbiAgICB8IERlZmF1bHQgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogfC0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XHJcbiAqIHwgbWFzayB8ICAgICAgICAgfCBUaGUgYmJqIHN0cmluZyBtYXNrIEBzZWUgW0JCaiBTdHJpbmcgTWFza3NdKGh0dHBzOi8vZ2l0aHViLmNvbS9CYXNpc0h1Yi9iYmotbWFza3Mjc3RyaW5nLW1hc2tzKSB8XHJcbiAqXHJcbiAqICA8YnI+XHJcbiAqXHJcbiAqICoqRXhhbXBsZSA6KipcclxuICogYGBgaHRtbFxyXG4gKiAgPGlucHV0IGNsYXNzPVwiYmJqLXRleHQtbWFza2VkXCIgbmFtZT1cInRlc3RcIiBpZD1cInRlc3RcIiB2YWx1ZT1cImVkMjNcIiBkYXRhLW1hc2s9XCJBQS0wMFwiPlxyXG4gKlxyXG4gKiAgPHNjcmlwdD5cclxuICogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uIChlKSB7XHJcbiAqICAgICAgbmV3IEJhc2lzLklucHV0TWFza2luZy5UZXh0SW5wdXQoe1xyXG4gKiAgICAgICAgIG9uVXBkYXRlOiAobWFza2VkVmFsdWUgLCByYXdWYWx1ZSAsIGlucHV0KSA9PiB7XHJcbiAqICAgICAgICAgICAgLy8gZG8gc29tZXRoaW5nXHJcbiAqICAgICAgICAgfSxcclxuICogICAgICAgICBvbkludmFsaWQ6IChlcnIgLCBpbnB1dCkgPT4ge1xyXG4gKiAgICAgICAgICAgIC8vIGRvIHNvbWV0aGluZ1xyXG4gKiAgICAgICAgIH1cclxuICogICAgICB9KVxyXG4gKiAgICB9KVxyXG4gKiAgPC9zY3JpcHQ+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxyXG4gKi9cclxuY2xhc3MgVGV4dElucHV0IHtcclxuICAvKipcclxuICAgKiBDb25zdHJ1Y3QgbmV3IFRleHRJbnB1dFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHs/T2JqZWN0fSBvcHRpb25zIC0gVGhlIGlucHV0IG9wdGlvbnMuXHJcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudHxTdHJpbmd9IFtvcHRpb25zLmVsZW1lbnRzPVwiLmJiai10ZXh0LW1hc2tlZFwiXSAtIFRoZSBjbGFzcyBuYW1lIG9yIHRoZSBub2RlIHRvIHVzZVxyXG4gICAqIEBwYXJhbSB7SFRNTERvY3VtZW50fSBbb3B0aW9ucy5kb2N1bWVudD1kb2N1bWVudF0gLSBEb2N1bWVudCBpbnN0YW5jZSB0byB1c2VcclxuICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuY3NzQ2xhc3NFcnJvcj1cImJiai1tYXNrLWVycm9yXCJdIC0gQSBjc3MgY2xhc3MgdG8gYXR0YWNoIHRvIHRoZSBpbnB1dCB3aGVuIGl0IGlzIGludmFsaWRcclxuICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuY3NzQ2xhc3NTdWNjZXNzPVwiYmJqLW1hc2stc3VjY2Vzc1wiXSAtIEEgY3NzIGNsYXNzIHRvIGF0dGFjaCB0byB0aGUgaW5wdXQgd2hlbiBpdCBpcyB2YWxpZCBhZnRlciB0aGUgdXNlciBpbnRlcmFjdGlvblxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLm9uVXBkYXRlPW51bGxdIC0gQSBjYWxsYmFjayB0byBiZSBjYWxsZWQgb24gdGhlIG5ldyBtYXNrZWQgdmFsdWUgaXMgc2V0XHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMub25JbnZhbGlkPW51bGxdIC0gQSBjYWxsYmFjayB0byBiZSBjYWxsZWQgb24gdGhlIGlucHV0IG9yIHRoZSBtYXNrIGlzIGludmFsaWRcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcclxuICAgIHRoaXMub3B0aW9ucyA9IHtcclxuICAgICAgLi4ue1xyXG4gICAgICAgIGVsZW1lbnRzOiAnLmJiai10ZXh0LW1hc2tlZCcsXHJcbiAgICAgICAgZG9jOiBkb2N1bWVudCxcclxuICAgICAgICBjc3NDbGFzc0Vycm9yOiAnYmJqLW1hc2stZXJyb3InLFxyXG4gICAgICAgIGNzc0NsYXNzU3VjY2VzczogJ2Jiai1tYXNrLXN1Y2Nlc3MnLFxyXG4gICAgICAgIG9uVXBkYXRlOiBudWxsLFxyXG4gICAgICAgIG9uSW52YWxpZDogbnVsbCxcclxuICAgICAgfSxcclxuICAgICAgLi4ub3B0aW9ucyxcclxuICAgIH1cclxuICAgIHRoaXMuX29uS2V5c3Ryb2tlID0gdGhpcy5fb25LZXlzdHJva2UuYmluZCh0aGlzKVxyXG4gICAgdGhpcy5fb25Gb2N1cyA9IHRoaXMuX29uRm9jdXMuYmluZCh0aGlzKVxyXG4gICAgdGhpcy5yZWZyZXNoKClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemUgdGhlIGNvbXBvbmVudCBhbmQgd3JhcCB0aGUgaW5wdXQgZWxlbWVudHMgZm9yIG1hc2tpbmcgaW4gY2FzZVxyXG4gICAqIHRoZXkgYXJlIG5vdCB3cmFwcGVkIHlldFxyXG4gICAqL1xyXG4gIHJlZnJlc2goKSB7XHJcbiAgICBjb25zdCBlbGVtZW50cyA9XHJcbiAgICAgIHR5cGVvZiB0aGlzLm9wdGlvbnMuZWxlbWVudHMgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgPyB0aGlzLm9wdGlvbnMuZG9jLnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5vcHRpb25zLmVsZW1lbnRzKVxyXG4gICAgICAgIDogdGhpcy5vcHRpb25zLmVsZW1lbnRzXHJcbiAgICBsZXQgaW5wdXQsIHBhcmVudENsYXNzXHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpbnB1dCA9IGVsZW1lbnRzW2ldXHJcbiAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcclxuICAgICAgICBwYXJlbnRDbGFzcyA9IGlucHV0LnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKCdjbGFzcycpXHJcblxyXG4gICAgICAgIGlmICghaW5wdXQuZ2V0QXR0cmlidXRlKCdpZCcpKSB7XHJcbiAgICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICAgIGBCQmpNYXNraW5nOiBJbnB1dCBoYXMgbm8gSUQuIFdpdGhvdXQgYW4gSUQgdGhlIGlucHV0IGNhbm5vdCBiZSBtYXNrZWRgLFxyXG4gICAgICAgICAgICBpbnB1dFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgY29udGludWVcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHdlIGRvbid0IGluaXRpYWxpemUgdGhlIGlucHV0J3Mgd3JhcCB0d2ljZVxyXG4gICAgICAgIGNvbnN0IGlzV3JhcHBlZCA9XHJcbiAgICAgICAgICBwYXJlbnRDbGFzcyAmJiBwYXJlbnRDbGFzcy5pbmRleE9mKCd0ZXh0SW5wdXRNYXNrX193cmFwJykgPiAtMVxyXG4gICAgICAgIHRoaXMuX3dyYXAoaW5wdXQsIGlzV3JhcHBlZClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBgQkJqTWFza2luZzogSW52YWxpZCBpbnB1dCBlbGVtZW50LiBUaGUgZWxlbWVudCB3aWxsIGJlIGlnbm9yZWRgLFxyXG4gICAgICAgICAgaW5wdXRcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVud3JhcCB0aGUgaW5wdXQgZWxlbWVudHMgYW5kIHJlbW92ZSBhdHRhY2hlZCBsaXN0ZW5lcnNcclxuICAgKi9cclxuICBkZXN0cm95KCkge1xyXG4gICAgY29uc3QgZWxlbWVudHMgPVxyXG4gICAgICB0eXBlb2YgdGhpcy5vcHRpb25zLmVsZW1lbnRzID09PSAnc3RyaW5nJ1xyXG4gICAgICAgID8gdGhpcy5vcHRpb25zLmRvYy5xdWVyeVNlbGVjdG9yQWxsKHRoaXMub3B0aW9ucy5lbGVtZW50cylcclxuICAgICAgICA6IHRoaXMub3B0aW9ucy5lbGVtZW50c1xyXG5cclxuICAgIGxldCBpbnB1dCwgcGFyZW50LCBwYXJlbnRDbGFzc1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaW5wdXQgPSBlbGVtZW50c1tpXVxyXG4gICAgICBwYXJlbnQgPSBpbnB1dC5wYXJlbnROb2RlXHJcbiAgICAgIHBhcmVudENsYXNzID0gcGFyZW50LmdldEF0dHJpYnV0ZSgnY2xhc3MnKVxyXG5cclxuICAgICAgaWYgKHBhcmVudENsYXNzICYmIHBhcmVudENsYXNzLmluZGV4T2YoJ3RleHRJbnB1dE1hc2tfX3dyYXAnKSA+IC0xKSB7XHJcbiAgICAgICAgdGhpcy5fdW53cmFwKHBhcmVudClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIHRoZSB0ZXh0IG1hc2tpbmcgaW5wdXQgd3JhcHBlclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBpbnB1dCB0aGUgaW5wdXQgZWxlbWVudFxyXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNXcmFwcGVkIHdoZW4gdHJ1ZSB0aGUgaW5wdXQgaXMgYWxyZWFkeSB3cmFwcGVkIGFuZCB3ZSBuZWVkIHRvIGFkZCB3aGF0IGlzXHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2luZyBvbmx5XHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7SFRNTFNwYW5FbGVtZW50fSB0aGUgd3JhcCBlbGVtZW50XHJcbiAgICpcclxuICAgKiBAcHJvdGVjdGVkXHJcbiAgICovXHJcbiAgX3dyYXAoaW5wdXQsIGlzV3JhcHBlZCkge1xyXG4gICAgY29uc3QgaW5wdXRJZCA9IGlucHV0LmdldEF0dHJpYnV0ZSgnaWQnKSxcclxuICAgICAgaW5wdXROYW1lID0gaW5wdXQuZ2V0QXR0cmlidXRlKCduYW1lJyksXHJcbiAgICAgIG1hc2sgPSBpbnB1dC5kYXRhc2V0Lm1hc2sgfHwgJycsXHJcbiAgICAgIG9yaWdpbmFsUGF0dGVybiA9IGlucHV0LnBhdHRlcm4sXHJcbiAgICAgIGRlZmF1bHRQYXR0ZXJuID0gZ2VuZXJhdGVQYXR0ZXJuRnJvbU1hc2sobWFzayksXHJcbiAgICAgIHBhdHRlcm4gPSBvcmlnaW5hbFBhdHRlcm4gfHwgZGVmYXVsdFBhdHRlcm5cclxuXHJcbiAgICBsZXQgd3JhcCA9IG51bGwsXHJcbiAgICAgIHVubWFza0lucHV0ID0gbnVsbFxyXG5cclxuICAgIGlmICghaXNXcmFwcGVkKSB7XHJcbiAgICAgIHdyYXAgPSB0aGlzLm9wdGlvbnMuZG9jLmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKVxyXG4gICAgICB1bm1hc2tJbnB1dCA9IHRoaXMub3B0aW9ucy5kb2MuY3JlYXRlRWxlbWVudCgnaW5wdXQnKSAvLyBoaWRkZW4gaW5wdXQgd2l0aCB0aGUgdW5tYXNrZWQgdmFsdWVzIGZvciBmb3Jtc1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgd3JhcCA9IGlucHV0LnBhcmVudE5vZGVcclxuICAgICAgdW5tYXNrSW5wdXQgPSB3cmFwLnF1ZXJ5U2VsZWN0b3IoJy50ZXh0SW5wdXRNYXNrX191bm1hc2tlZElucHV0JylcclxuICAgIH1cclxuXHJcbiAgICAvLyBjb25maWd1cmUgdGhlIGFjdHVhbCBpbnB1dFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGlucHV0LnZhbHVlID0gbWFza0lmTm90TWFza2VkKGlucHV0LnZhbHVlLCBtYXNrKVxyXG4gICAgaW5wdXQucGF0dGVybiA9IHBhdHRlcm5cclxuICAgIGlucHV0LmNsYXNzTGlzdC5hZGQoJ3RleHRJbnB1dE1hc2tfX3RleHRJbnB1dCcpXHJcbiAgICBpbnB1dC5kYXRhc2V0Lm1hc2sgPSBtYXNrXHJcbiAgICBpbnB1dC5kYXRhc2V0LnZhbHVlVW5tYXNrZWQgPSB1bm1hc2soaW5wdXQudmFsdWUsIG1hc2spXHJcbiAgICBpZiAob3JpZ2luYWxQYXR0ZXJuICYmIG9yaWdpbmFsUGF0dGVybiAhPT0gZGVmYXVsdFBhdHRlcm4pIHtcclxuICAgICAgaW5wdXQuZGF0YXNldC5pc0N1c3RvbVBhdHRlcm4gPSB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpc1dyYXBwZWQpIHtcclxuICAgICAgaWYgKCEoaW5wdXQuaGFzQXR0cmlidXRlKCdyZWFkb25seScpIHx8IGlucHV0Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZScpKSkge1xyXG4gICAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5fb25LZXlzdHJva2UpXHJcbiAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5cHJlc3MnLCB0aGlzLl9vbktleXN0cm9rZSlcclxuICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdwYXN0ZScsIHRoaXMuX29uS2V5c3Ryb2tlKVxyXG4gICAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCB0aGlzLl9vbkZvY3VzKVxyXG4gICAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25Gb2N1cylcclxuICAgICAgfVxyXG4gICAgICBpbnB1dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh3cmFwLCBpbnB1dCkgLy8gbW92ZSB0aGUgaW5wdXQgb3V0c2lkZSB0aGUgd3JhcHBlclxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl92YWxpZGF0ZUlucHV0KGlucHV0KSkge1xyXG4gICAgICB0aGlzLl9fZmlyZU9uVXBkYXRlKGlucHV0LnZhbHVlLCBpbnB1dC5kYXRhc2V0LnZhbHVlVW5tYXNrZWQsIGlucHV0KVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNvbmZpZ3VyZSB0aGUgdW5tYXNrZWQgaW5wdXRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIHVubWFza0lucHV0LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpXHJcbiAgICB1bm1hc2tJbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnaGlkZGVuJylcclxuICAgIHVubWFza0lucHV0LmNsYXNzTGlzdC5hZGQoJ3RleHRJbnB1dE1hc2tfX3VubWFza2VkSW5wdXQnKVxyXG4gICAgdW5tYXNrSW5wdXQudmFsdWUgPSBpbnB1dC5kYXRhc2V0LnZhbHVlVW5tYXNrZWRcclxuICAgIGlmIChpbnB1dElkKSB1bm1hc2tJbnB1dC5zZXRBdHRyaWJ1dGUoJ2lkJywgYCR7aW5wdXRJZH0tdW5tYXNrZWRgKVxyXG4gICAgaWYgKGlucHV0TmFtZSkgdW5tYXNrSW5wdXQuc2V0QXR0cmlidXRlKCduYW1lJywgYCR7aW5wdXROYW1lfS11bm1hc2tlZGApXHJcblxyXG4gICAgaWYgKCFpc1dyYXBwZWQpIHtcclxuICAgICAgLy8gY29uZmlndXJlIHRoZSB3cmFwcGVyXHJcbiAgICAgIHdyYXAuc2V0QXR0cmlidXRlKCdjbGFzcycsICd0ZXh0SW5wdXRNYXNrX193cmFwJylcclxuICAgICAgd3JhcC5hcHBlbmRDaGlsZCh1bm1hc2tJbnB1dClcclxuICAgICAgd3JhcC5hcHBlbmRDaGlsZChpbnB1dClcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gd3JhcFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVW53cmFwIHRoZSBtYXNrZWQgaW5wdXQgYW5kIHJlbW92ZSB0aGUgdmFsdWUgY2hhbmdlZCBsaXN0ZW5lclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtIVE1MU3BhbkVsZW1lbnR9IHRleHRJbnB1dCB0aGUgd3JhcHBlciBzcGFuIGluc3RhbmNlXHJcbiAgICpcclxuICAgKiBAcHJvdGVjdGVkXHJcbiAgICovXHJcbiAgX3Vud3JhcCh0ZXh0SW5wdXQpIHtcclxuICAgIHRleHRJbnB1dC5yZW1vdmVDaGlsZChcclxuICAgICAgdGV4dElucHV0LnF1ZXJ5U2VsZWN0b3IoJy50ZXh0SW5wdXRNYXNrX191bm1hc2tlZElucHV0JylcclxuICAgIClcclxuXHJcbiAgICBjb25zdCBpbnB1dCA9IHRleHRJbnB1dC5xdWVyeVNlbGVjdG9yKCcudGV4dElucHV0TWFza19fdGV4dElucHV0JylcclxuICAgIGlucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5fb25LZXlzdHJva2UpXHJcbiAgICBpbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlwcmVzcycsIHRoaXMuX29uS2V5c3Ryb2tlKVxyXG4gICAgaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGFzdGUnLCB0aGlzLl9vbktleXN0cm9rZSlcclxuICAgIGlucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCB0aGlzLl9vbkZvY3VzKVxyXG4gICAgaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkZvY3VzKVxyXG4gICAgZGVsZXRlIGlucHV0LmRhdGFzZXQudmFsdWVVbm1hc2tlZFxyXG4gICAgaWYgKCFpbnB1dC5kYXRhc2V0LmlzQ3VzdG9tUGF0dGVybikge1xyXG4gICAgICBpbnB1dC5yZW1vdmVBdHRyaWJ1dGUoJ3BhdHRlcm4nKVxyXG4gICAgICBkZWxldGUgaW5wdXQuZGF0YXNldC5pc0N1c3RvbVBhdHRlcm5cclxuICAgIH1cclxuXHJcbiAgICBpbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc0Vycm9yKVxyXG5cclxuICAgIHRleHRJbnB1dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShpbnB1dCwgdGV4dElucHV0KVxyXG4gICAgdGV4dElucHV0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGV4dElucHV0KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuIHRvIGV2ZXJ5IGtleXN0cm9rZSBvbiB0aGUgaW5wdXQgYW5kIHVwZGF0ZSB0aGUgbWFza2VkIGFuZCB0aGUgdW5tYXNrZWQgdmFsdWVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RXZlbnR9IGVcclxuICAgKlxyXG4gICAqIEBwcm90ZWN0ZWRcclxuICAgKi9cclxuICBfb25LZXlzdHJva2UoZSkge1xyXG4gICAgaWYgKGUuY3RybEtleSB8fCBlLnNoaWZ0S2V5IHx8IGUuYWx0S2V5IHx8IGUubWV0YUtleSkgcmV0dXJuXHJcbiAgICBpZihlLmtleUNvZGUgIT09IDEzKSBlLnByZXZlbnREZWZhdWx0KClcclxuICAgIFxyXG4gICAgY29uc3QgaW5wdXQgPSBlLnRhcmdldCxcclxuICAgICAgbWFzayA9IGlucHV0LmRhdGFzZXQubWFzayB8fCB0aGlzLm9wdGlvbnMubWFzayxcclxuICAgICAgZXZlbnRUeXBlID0gZS50eXBlXHJcblxyXG4gICAgaW5wdXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NFcnJvcilcclxuICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzU3VjY2VzcylcclxuICAgIGlucHV0LnNldEN1c3RvbVZhbGlkaXR5KCcnKTtcclxuXHJcbiAgICBsZXQgdmFsdWUgPSBpbnB1dC52YWx1ZSxcclxuICAgICAga2V5Q29kZSA9IGUua2V5Q29kZSxcclxuICAgICAga2V5Q29udGVudCA9IGUua2V5IHx8IGUuY29kZS5yZXBsYWNlKC9bXjAtOV0vZywgJycpLFxyXG4gICAgICBrZXkgPSBrZXlDb250ZW50ID8gKGtleUNvbnRlbnQubGVuZ3RoID4gMSA/ICcnIDoga2V5Q29udGVudCkgOiAnJyxcclxuICAgICAgaW5zZXJ0UG9zaXRpb24gPSBmaW5kQ2FyZXRQb3NpdGlvbih2YWx1ZSwgbWFzayksXHJcbiAgICAgIG5ld1ZhbHVlLFxyXG4gICAgICB1bm1hc2tlZFZhbHVlLFxyXG4gICAgICBtYXNrRXJyb3IgPSBmYWxzZVxyXG5cclxuICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XHJcbiAgICAgIGNhc2UgJ3Bhc3RlJzpcclxuICAgICAgICBuZXdWYWx1ZSA9IG1hc2tJZk5vdE1hc2tlZChcclxuICAgICAgICAgIChlLmNsaXBib2FyZERhdGEgfHwgd2luZG93LmNsaXBib2FyZERhdGEpLmdldERhdGEoJ1RleHQnKSxcclxuICAgICAgICAgIG1hc2tcclxuICAgICAgICApXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAna2V5dXAnOlxyXG4gICAgICAgIG5ld1ZhbHVlID0gdmFsdWVcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICdrZXlwcmVzcyc6XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uU3RhcnQgPSBpbnB1dC5zZWxlY3Rpb25TdGFydFxyXG4gICAgICAgIGlmIChzZWxlY3Rpb25TdGFydCAhPT0gaW5zZXJ0UG9zaXRpb24pIGluc2VydFBvc2l0aW9uID0gc2VsZWN0aW9uU3RhcnRcclxuXHJcbiAgICAgICAgbmV3VmFsdWUgPVxyXG4gICAgICAgICAgdmFsdWUuc3Vic3RyKDAsIGluc2VydFBvc2l0aW9uKSArIGtleSArIHZhbHVlLnN1YnN0cihpbnNlcnRQb3NpdGlvbilcclxuICAgICAgICBicmVha1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrXHJcbiAgICB9XHJcblxyXG4gICAgdW5tYXNrZWRWYWx1ZSA9IHVubWFzayhuZXdWYWx1ZSwgbWFzaylcclxuXHJcbiAgICBpZiAoWzM1LCAzNiwgMzcsIDM4LCAzOSwgNDBdLmluZGV4T2Yoa2V5Q29kZSkgPT09IC0xKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgaW5wdXQudmFsdWUgPSBTdHJpbmdNYXNrLm1hc2sodW5tYXNrZWRWYWx1ZSwgbWFzaywgZmFsc2UpXHJcbiAgICAgICAgaWYodGhpcy5fdmFsaWRhdGVJbnB1dChpbnB1dCkpIHtcclxuICAgICAgICAgIGlucHV0LmRhdGFzZXQudmFsdWVVbm1hc2tlZCA9IHVubWFza2VkVmFsdWVcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5kb2MucXVlcnlTZWxlY3RvcihcclxuICAgICAgICAgICAgYCMke2lucHV0LmdldEF0dHJpYnV0ZSgnaWQnKX0tdW5tYXNrZWRgXHJcbiAgICAgICAgICApLnZhbHVlID0gdW5tYXNrZWRWYWx1ZVxyXG4gICAgICAgICAgdGhpcy5fX2FwcGx5Q3NzQ2xhc3NTdGF0ZShpbnB1dCwgJ3N1Y2Nlc3MnKVxyXG4gICAgICAgICAgdGhpcy5fX2ZpcmVPblVwZGF0ZShpbnB1dC52YWx1ZSwgaW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkLCBpbnB1dClcclxuICAgICAgICB9XHJcbiAgICAgICAgbWFza0Vycm9yID0gZmFsc2VcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICB0aGlzLl9fYXBwbHlDc3NDbGFzc1N0YXRlKGlucHV0LCAnZXJyb3InKVxyXG4gICAgICAgIHRoaXMuX19maXJlT25JbnZhbGlkKGVycm9yLCBpbnB1dClcclxuICAgICAgICBtYXNrRXJyb3IgPSB0cnVlXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuX3VwZGF0ZUNhcmV0UG9zaXRpb24oaW5wdXQsIG1hc2spXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFtYXNrRXJyb3IpIHRoaXMuX3ZhbGlkYXRlSW5wdXQoaW5wdXQpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMaXN0ZW4gdG8gZm9jdXMgZXZlbnRzIG9uIHRoZSBpbnB1dCBhbmQgdXBkYXRlIHRoZSBjYXJldCBwb3NpdGlvblxyXG4gICAqIHdoZXJlIHRoZSBuZXh0IGNoYXIgc2hvdWxkIGJlIGluc2VydGVkIGFjY29yZGluZyB0byB0aGUgbWFza1xyXG4gICAqXHJcbiAgICogQHBhcmFtIHtGb2N1c0V2ZW50fSBlXHJcbiAgICpcclxuICAgKiBAcHJvdGVjdGVkXHJcbiAgICovXHJcbiAgX29uRm9jdXMoZSkge1xyXG4gICAgY29uc3QgaW5wdXQgPSBlLnRhcmdldFxyXG4gICAgY29uc3QgbWFzayA9IGlucHV0LmRhdGFzZXQubWFzayB8fCB0aGlzLm9wdGlvbnMubWFza1xyXG4gICAgdGhpcy5fdXBkYXRlQ2FyZXRQb3NpdGlvbihpbnB1dCwgbWFzaylcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgY2FyZXQgcG9zaXRpb24gb24gdGhlIGlucHV0IGJhc2VkIG9uIHRoZSBnaXZlbiBtYXNrXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGlucHV0IGluc3RhbmNlXHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1hc2sgIGJiaiBzdHJpbmdcclxuICAgKlxyXG4gICAqIEBwcm90ZWN0ZWRcclxuICAgKi9cclxuICBfdXBkYXRlQ2FyZXRQb3NpdGlvbihpbnB1dCwgbWFzaykge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gZmluZENhcmV0UG9zaXRpb24oaW5wdXQudmFsdWUsIG1hc2spXHJcbiAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKHBvc2l0aW9uLCBwb3NpdGlvbilcclxuICAgIH0sIDApXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcmlnZ2VyIGBjaGVja1ZhbGlkaXR5YCBvbiB0aGUgaW5wdXRcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7SFRNTElucHV0RWxlbWVudH0gaW5wdXRcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIHdoZW4gdmFsaWQgLCBmYWxzZSBvdGhlcndpc2VcclxuICAgKlxyXG4gICAqIEBwcm90ZWN0ZWRcclxuICAgKi9cclxuICBfdmFsaWRhdGVJbnB1dChpbnB1dCkge1xyXG4gICAgY29uc3QgaXNWYWxpZCA9IGlucHV0LmNoZWNrVmFsaWRpdHkoKVxyXG5cclxuICAgIGlmIChpc1ZhbGlkKSB7XHJcbiAgICAgIHRoaXMuX19hcHBseUNzc0NsYXNzU3RhdGUoaW5wdXQsICdzdWNjZXNzJylcclxuICAgICAgaW5wdXQuc2V0Q3VzdG9tVmFsaWRpdHkoJycpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9fYXBwbHlDc3NDbGFzc1N0YXRlKGlucHV0LCAnZXJyb3InKVxyXG4gICAgICB0aGlzLl9fZmlyZU9uSW52YWxpZChpbnB1dC52YWxpZGF0aW9uTWVzc2FnZSwgaW5wdXQpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGlzVmFsaWRcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX19maXJlT25VcGRhdGUodmFsdWVNYXNrZWQsIHZhbHVlVW5tYXNrZWQsIGlucHV0KSB7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLm9uVXBkYXRlKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5vblVwZGF0ZSh2YWx1ZU1hc2tlZCwgdmFsdWVVbm1hc2tlZCwgaW5wdXQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9fZmlyZU9uSW52YWxpZChlcnJvciwgaW5wdXQpIHtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMub25JbnZhbGlkKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5vbkludmFsaWQoZXJyb3IsIGlucHV0KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfX2FwcGx5Q3NzQ2xhc3NTdGF0ZShpbnB1dCwgc3RhdGUpIHtcclxuICAgIGlmIChpbnB1dC5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykgfHwgaW5wdXQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKSB7XHJcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzU3VjY2VzcylcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChzdGF0ZSA9PT0gJ3N1Y2Nlc3MnKSB7XHJcbiAgICAgICAgaW5wdXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NFcnJvcilcclxuICAgICAgICBpbnB1dC5jbGFzc0xpc3QuYWRkKHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3MpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChzdGF0ZSA9PT0gJ2Vycm9yJykge1xyXG4gICAgICAgIGlucHV0LmNsYXNzTGlzdC5hZGQodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICAgICAgaW5wdXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NTdWNjZXNzKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUZXh0SW5wdXRcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL1RleHRJbnB1dC9UZXh0SW5wdXQuanMiLCIvKlxyXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1pbnB1dC1tYXNraW5nIGxpYi5cclxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxyXG4gKlxyXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxyXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cclxuICovXHJcblxyXG5pbXBvcnQgU3RyaW5nTWFzayBmcm9tICdiYmotbWFza3Mvc3JjL1N0cmluZ01hc2snXHJcblxyXG5jb25zdCBTVVBQT1JURURfTUFTS1MgPSBbJ1gnLCAnYScsICdBJywgJzAnLCAneicsICdaJywgJ1UnXVxyXG4vKipcclxuICogV2hlbiB0cnVlICwgdGhlbiB0aGUgYnJvd3NlciBzdXBwb3J0cyBVbmljb2RlIFByb3BlcnR5IEVzY2FwZXNcclxuICogb3RoZXJ3aXNlIGl0IGlzIGZhbHNlIFxyXG4gKiBcclxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXJlZ2V4cC11bmljb2RlLXByb3BlcnR5LWVzY2FwZXN9XHJcbiAqL1xyXG5sZXQgSVNfVU5JQ09ERV9QUk9QRVJUWV9TVVBQT1JURUQgPSBmYWxzZVxyXG50cnkge1xyXG4gIGV2YWwoJy9cXFxccHtMfS91JylcclxuICBJU19VTklDT0RFX1BST1BFUlRZX1NVUFBPUlRFRCA9IHRydWVcclxufSBjYXRjaCAoZXJyKSB7XHJcbiAgSVNfVU5JQ09ERV9QUk9QRVJUWV9TVVBQT1JURUQgPSBmYWxzZVxyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIG1hc2tlZCB3aXRoIHRoZSBnaXZlbiBtYXNrIG9yIG5vdFxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWUgbWFza2VkIG9yIHVubWFza2VkIHZhbHVlXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBtYXNrICBhIGJiaiBtYXNrXHJcbiAqXHJcbiAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgd2hlbiB0aGUgdmFsdWUgaXMgbWFza2VkIHdpdGggZ2l2ZW4gbWFzayAsIGZhbHNlIG90aGVyd2lzZVxyXG4gKi9cclxuY29uc3QgaXNNYXNrZWRWYWx1ZSA9ICh2YWx1ZSwgbWFzaykgPT4ge1xyXG4gIGlmICh0eXBlb2YgaXNNYXNrZWRWYWx1ZS5fX0NBQ0hFX18gPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBpc01hc2tlZFZhbHVlLl9fQ0FDSEVfXyA9IHt9XHJcbiAgfVxyXG5cclxuICBjb25zdCBjYWNoZUtleSA9IGAke3ZhbHVlfS0ke21hc2t9YFxyXG5cclxuICBpZiAoIWlzTWFza2VkVmFsdWUuX19DQUNIRV9fW2NhY2hlS2V5XSkge1xyXG4gICAgY29uc3QgdW5tYXNrZWRWYWx1ZSA9IHVubWFzayh2YWx1ZSwgbWFzaylcclxuICAgIGlzTWFza2VkVmFsdWUuX19DQUNIRV9fW2NhY2hlS2V5XSA9XHJcbiAgICAgIHZhbHVlID09PSBTdHJpbmdNYXNrLm1hc2sodW5tYXNrZWRWYWx1ZSwgbWFzaylcclxuICB9XHJcblxyXG4gIHJldHVybiBpc01hc2tlZFZhbHVlLl9fQ0FDSEVfX1tjYWNoZUtleV1cclxufVxyXG5cclxuLyoqXHJcbiAqIE1hc2sgdGhlIGdpdmVuIHZhbHVlIHdpdGggdGhlIGdpdmVuIG1hc2sgaW4gY2FzZSB0aGUgdmFsdWUgaXMgbm90IGFscmVhZHkgbWFza2VkIHdpdGggdGhlXHJcbiAqIGdpdmVuIG1hc2tcclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlIG1hc2tlZCBvciB1bm1hc2tlZCB2YWx1ZVxyXG4gKiBAcGFyYW0ge1N0cmluZ30gbWFzayAgYSBiYmogbWFza1xyXG4gKlxyXG4gKiBAcmV0dXJuIHtTdHJpbmd9IGEgbWFza2VkIHZhbHVlXHJcbiAqL1xyXG5jb25zdCBtYXNrSWZOb3RNYXNrZWQgPSAodmFsdWUsIG1hc2spID0+IHtcclxuICBpZiAodHlwZW9mIG1hc2tJZk5vdE1hc2tlZC5fX0NBQ0hFX18gPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBtYXNrSWZOb3RNYXNrZWQuX19DQUNIRV9fID0ge31cclxuICB9XHJcblxyXG4gIGNvbnN0IGNhY2hlS2V5ID0gYCR7dmFsdWV9LSR7bWFza31gXHJcblxyXG4gIGlmICghbWFza0lmTm90TWFza2VkLl9fQ0FDSEVfX1tjYWNoZUtleV0pIHtcclxuICAgIGlmIChpc01hc2tlZFZhbHVlKHZhbHVlLCBtYXNrKSkge1xyXG4gICAgICBtYXNrSWZOb3RNYXNrZWQuX19DQUNIRV9fW2NhY2hlS2V5XSA9IHZhbHVlXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIG1hc2tJZk5vdE1hc2tlZC5fX0NBQ0hFX19bY2FjaGVLZXldID0gU3RyaW5nTWFzay5tYXNrKFxyXG4gICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICBtYXNrLFxyXG4gICAgICAgICAgZmFsc2VcclxuICAgICAgICApXHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBtYXNrSWZOb3RNYXNrZWQuX19DQUNIRV9fW2NhY2hlS2V5XSA9IFN0cmluZ01hc2subWFzaygnJywgbWFzaylcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG1hc2tJZk5vdE1hc2tlZC5fX0NBQ0hFX19bY2FjaGVLZXldXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZW5lcmF0ZSBhIHJlZ2V4IHBhdHRlciBiYXNlZCBvbiB0aGUgZ2l2ZSB0YXNrXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBtYXNrICBiYmogc3RyaW5nIG1hc2tcclxuICpcclxuICogQHJldHVybiB7U3RyaW5nfSByZWdleCBmb3IgdGhlIGdpdmUgbWFza1xyXG4gKi9cclxuY29uc3QgZ2VuZXJhdGVQYXR0ZXJuRnJvbU1hc2sgPSBtYXNrID0+IHtcclxuICBpZiAodHlwZW9mIGdlbmVyYXRlUGF0dGVybkZyb21NYXNrLl9fQ0FDSEVfXyA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIGdlbmVyYXRlUGF0dGVybkZyb21NYXNrLl9fQ0FDSEVfXyA9IHt9XHJcbiAgfVxyXG5cclxuICBjb25zdCBjYWNoZUtleSA9IG1hc2tcclxuXHJcbiAgaWYgKCFnZW5lcmF0ZVBhdHRlcm5Gcm9tTWFzay5fX0NBQ0hFX19bY2FjaGVLZXldKSB7XHJcbiAgICBjb25zdCBtYXNrQXNBcnJ5ID0gbWFzay5zcGxpdCgnJylcclxuICAgIGxldCByZWdleCA9ICcnXHJcbiAgICBtYXNrQXNBcnJ5LmZvckVhY2goYyA9PiB7XHJcbiAgICAgIHN3aXRjaCAoYykge1xyXG4gICAgICAgIGNhc2UgJ1gnOlxyXG4gICAgICAgICAgcmVnZXggKz0gJyhbXiAtfl0pJ1xyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICdhJzpcclxuICAgICAgICBjYXNlICdBJzpcclxuICAgICAgICAgIC8vIGh0dHBzOi8vbW90aGVyZWZmLmluL3JlZ2V4cHUjaW5wdXQ9dmFyK3JlZ2V4KyUzRCsvJTVDcCU3QkwlN0QvdSUzQiZ1bmljb2RlUHJvcGVydHlFc2NhcGU9MVxyXG4gICAgICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTUwMDMzL3JlZ3VsYXItZXhwcmVzc2lvbi10by1tYXRjaC1ub24tYXNjaWktY2hhcmFjdGVycyNhbnN3ZXItNDg5MDI3NjVcclxuICAgICAgICAgIHJlZ2V4ICs9IElTX1VOSUNPREVfUFJPUEVSVFlfU1VQUE9SVEVEXHJcbiAgICAgICAgICAgID8gJ1xcXFxwe0x9J1xyXG4gICAgICAgICAgICA6ICcoKD86W0EtWmEtelxceEFBXFx4QjVcXHhCQVxceEMwLVxceEQ2XFx4RDgtXFx4RjZcXHhGOC1cXHUwMkMxXFx1MDJDNi1cXHUwMkQxXFx1MDJFMC1cXHUwMkU0XFx1MDJFQ1xcdTAyRUVcXHUwMzcwLVxcdTAzNzRcXHUwMzc2XFx1MDM3N1xcdTAzN0EtXFx1MDM3RFxcdTAzN0ZcXHUwMzg2XFx1MDM4OC1cXHUwMzhBXFx1MDM4Q1xcdTAzOEUtXFx1MDNBMVxcdTAzQTMtXFx1MDNGNVxcdTAzRjctXFx1MDQ4MVxcdTA0OEEtXFx1MDUyRlxcdTA1MzEtXFx1MDU1NlxcdTA1NTlcXHUwNTYwLVxcdTA1ODhcXHUwNUQwLVxcdTA1RUFcXHUwNUVGLVxcdTA1RjJcXHUwNjIwLVxcdTA2NEFcXHUwNjZFXFx1MDY2RlxcdTA2NzEtXFx1MDZEM1xcdTA2RDVcXHUwNkU1XFx1MDZFNlxcdTA2RUVcXHUwNkVGXFx1MDZGQS1cXHUwNkZDXFx1MDZGRlxcdTA3MTBcXHUwNzEyLVxcdTA3MkZcXHUwNzRELVxcdTA3QTVcXHUwN0IxXFx1MDdDQS1cXHUwN0VBXFx1MDdGNFxcdTA3RjVcXHUwN0ZBXFx1MDgwMC1cXHUwODE1XFx1MDgxQVxcdTA4MjRcXHUwODI4XFx1MDg0MC1cXHUwODU4XFx1MDg2MC1cXHUwODZBXFx1MDhBMC1cXHUwOEI0XFx1MDhCNi1cXHUwOEJEXFx1MDkwNC1cXHUwOTM5XFx1MDkzRFxcdTA5NTBcXHUwOTU4LVxcdTA5NjFcXHUwOTcxLVxcdTA5ODBcXHUwOTg1LVxcdTA5OENcXHUwOThGXFx1MDk5MFxcdTA5OTMtXFx1MDlBOFxcdTA5QUEtXFx1MDlCMFxcdTA5QjJcXHUwOUI2LVxcdTA5QjlcXHUwOUJEXFx1MDlDRVxcdTA5RENcXHUwOUREXFx1MDlERi1cXHUwOUUxXFx1MDlGMFxcdTA5RjFcXHUwOUZDXFx1MEEwNS1cXHUwQTBBXFx1MEEwRlxcdTBBMTBcXHUwQTEzLVxcdTBBMjhcXHUwQTJBLVxcdTBBMzBcXHUwQTMyXFx1MEEzM1xcdTBBMzVcXHUwQTM2XFx1MEEzOFxcdTBBMzlcXHUwQTU5LVxcdTBBNUNcXHUwQTVFXFx1MEE3Mi1cXHUwQTc0XFx1MEE4NS1cXHUwQThEXFx1MEE4Ri1cXHUwQTkxXFx1MEE5My1cXHUwQUE4XFx1MEFBQS1cXHUwQUIwXFx1MEFCMlxcdTBBQjNcXHUwQUI1LVxcdTBBQjlcXHUwQUJEXFx1MEFEMFxcdTBBRTBcXHUwQUUxXFx1MEFGOVxcdTBCMDUtXFx1MEIwQ1xcdTBCMEZcXHUwQjEwXFx1MEIxMy1cXHUwQjI4XFx1MEIyQS1cXHUwQjMwXFx1MEIzMlxcdTBCMzNcXHUwQjM1LVxcdTBCMzlcXHUwQjNEXFx1MEI1Q1xcdTBCNURcXHUwQjVGLVxcdTBCNjFcXHUwQjcxXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkQwXFx1MEMwNS1cXHUwQzBDXFx1MEMwRS1cXHUwQzEwXFx1MEMxMi1cXHUwQzI4XFx1MEMyQS1cXHUwQzM5XFx1MEMzRFxcdTBDNTgtXFx1MEM1QVxcdTBDNjBcXHUwQzYxXFx1MEM4MFxcdTBDODUtXFx1MEM4Q1xcdTBDOEUtXFx1MEM5MFxcdTBDOTItXFx1MENBOFxcdTBDQUEtXFx1MENCM1xcdTBDQjUtXFx1MENCOVxcdTBDQkRcXHUwQ0RFXFx1MENFMFxcdTBDRTFcXHUwQ0YxXFx1MENGMlxcdTBEMDUtXFx1MEQwQ1xcdTBEMEUtXFx1MEQxMFxcdTBEMTItXFx1MEQzQVxcdTBEM0RcXHUwRDRFXFx1MEQ1NC1cXHUwRDU2XFx1MEQ1Ri1cXHUwRDYxXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4NS1cXHUwRDk2XFx1MEQ5QS1cXHUwREIxXFx1MERCMy1cXHUwREJCXFx1MERCRFxcdTBEQzAtXFx1MERDNlxcdTBFMDEtXFx1MEUzMFxcdTBFMzJcXHUwRTMzXFx1MEU0MC1cXHUwRTQ2XFx1MEU4MVxcdTBFODJcXHUwRTg0XFx1MEU4Ni1cXHUwRThBXFx1MEU4Qy1cXHUwRUEzXFx1MEVBNVxcdTBFQTctXFx1MEVCMFxcdTBFQjJcXHUwRUIzXFx1MEVCRFxcdTBFQzAtXFx1MEVDNFxcdTBFQzZcXHUwRURDLVxcdTBFREZcXHUwRjAwXFx1MEY0MC1cXHUwRjQ3XFx1MEY0OS1cXHUwRjZDXFx1MEY4OC1cXHUwRjhDXFx1MTAwMC1cXHUxMDJBXFx1MTAzRlxcdTEwNTAtXFx1MTA1NVxcdTEwNUEtXFx1MTA1RFxcdTEwNjFcXHUxMDY1XFx1MTA2NlxcdTEwNkUtXFx1MTA3MFxcdTEwNzUtXFx1MTA4MVxcdTEwOEVcXHUxMEEwLVxcdTEwQzVcXHUxMEM3XFx1MTBDRFxcdTEwRDAtXFx1MTBGQVxcdTEwRkMtXFx1MTI0OFxcdTEyNEEtXFx1MTI0RFxcdTEyNTAtXFx1MTI1NlxcdTEyNThcXHUxMjVBLVxcdTEyNURcXHUxMjYwLVxcdTEyODhcXHUxMjhBLVxcdTEyOERcXHUxMjkwLVxcdTEyQjBcXHUxMkIyLVxcdTEyQjVcXHUxMkI4LVxcdTEyQkVcXHUxMkMwXFx1MTJDMi1cXHUxMkM1XFx1MTJDOC1cXHUxMkQ2XFx1MTJEOC1cXHUxMzEwXFx1MTMxMi1cXHUxMzE1XFx1MTMxOC1cXHUxMzVBXFx1MTM4MC1cXHUxMzhGXFx1MTNBMC1cXHUxM0Y1XFx1MTNGOC1cXHUxM0ZEXFx1MTQwMS1cXHUxNjZDXFx1MTY2Ri1cXHUxNjdGXFx1MTY4MS1cXHUxNjlBXFx1MTZBMC1cXHUxNkVBXFx1MTZGMS1cXHUxNkY4XFx1MTcwMC1cXHUxNzBDXFx1MTcwRS1cXHUxNzExXFx1MTcyMC1cXHUxNzMxXFx1MTc0MC1cXHUxNzUxXFx1MTc2MC1cXHUxNzZDXFx1MTc2RS1cXHUxNzcwXFx1MTc4MC1cXHUxN0IzXFx1MTdEN1xcdTE3RENcXHUxODIwLVxcdTE4NzhcXHUxODgwLVxcdTE4ODRcXHUxODg3LVxcdTE4QThcXHUxOEFBXFx1MThCMC1cXHUxOEY1XFx1MTkwMC1cXHUxOTFFXFx1MTk1MC1cXHUxOTZEXFx1MTk3MC1cXHUxOTc0XFx1MTk4MC1cXHUxOUFCXFx1MTlCMC1cXHUxOUM5XFx1MUEwMC1cXHUxQTE2XFx1MUEyMC1cXHUxQTU0XFx1MUFBN1xcdTFCMDUtXFx1MUIzM1xcdTFCNDUtXFx1MUI0QlxcdTFCODMtXFx1MUJBMFxcdTFCQUVcXHUxQkFGXFx1MUJCQS1cXHUxQkU1XFx1MUMwMC1cXHUxQzIzXFx1MUM0RC1cXHUxQzRGXFx1MUM1QS1cXHUxQzdEXFx1MUM4MC1cXHUxQzg4XFx1MUM5MC1cXHUxQ0JBXFx1MUNCRC1cXHUxQ0JGXFx1MUNFOS1cXHUxQ0VDXFx1MUNFRS1cXHUxQ0YzXFx1MUNGNVxcdTFDRjZcXHUxQ0ZBXFx1MUQwMC1cXHUxREJGXFx1MUUwMC1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwNzFcXHUyMDdGXFx1MjA5MC1cXHUyMDlDXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOS1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTJEXFx1MjEyRi1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxODNcXHUyMTg0XFx1MkMwMC1cXHUyQzJFXFx1MkMzMC1cXHUyQzVFXFx1MkM2MC1cXHUyQ0U0XFx1MkNFQi1cXHUyQ0VFXFx1MkNGMlxcdTJDRjNcXHUyRDAwLVxcdTJEMjVcXHUyRDI3XFx1MkQyRFxcdTJEMzAtXFx1MkQ2N1xcdTJENkZcXHUyRDgwLVxcdTJEOTZcXHUyREEwLVxcdTJEQTZcXHUyREE4LVxcdTJEQUVcXHUyREIwLVxcdTJEQjZcXHUyREI4LVxcdTJEQkVcXHUyREMwLVxcdTJEQzZcXHUyREM4LVxcdTJEQ0VcXHUyREQwLVxcdTJERDZcXHUyREQ4LVxcdTJEREVcXHUyRTJGXFx1MzAwNVxcdTMwMDZcXHUzMDMxLVxcdTMwMzVcXHUzMDNCXFx1MzAzQ1xcdTMwNDEtXFx1MzA5NlxcdTMwOUQtXFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkMtXFx1MzBGRlxcdTMxMDUtXFx1MzEyRlxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCQVxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCNVxcdTRFMDAtXFx1OUZFRlxcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYxRlxcdUE2MkFcXHVBNjJCXFx1QTY0MC1cXHVBNjZFXFx1QTY3Ri1cXHVBNjlEXFx1QTZBMC1cXHVBNkU1XFx1QTcxNy1cXHVBNzFGXFx1QTcyMi1cXHVBNzg4XFx1QTc4Qi1cXHVBN0JGXFx1QTdDMi1cXHVBN0M2XFx1QTdGNy1cXHVBODAxXFx1QTgwMy1cXHVBODA1XFx1QTgwNy1cXHVBODBBXFx1QTgwQy1cXHVBODIyXFx1QTg0MC1cXHVBODczXFx1QTg4Mi1cXHVBOEIzXFx1QThGMi1cXHVBOEY3XFx1QThGQlxcdUE4RkRcXHVBOEZFXFx1QTkwQS1cXHVBOTI1XFx1QTkzMC1cXHVBOTQ2XFx1QTk2MC1cXHVBOTdDXFx1QTk4NC1cXHVBOUIyXFx1QTlDRlxcdUE5RTAtXFx1QTlFNFxcdUE5RTYtXFx1QTlFRlxcdUE5RkEtXFx1QTlGRVxcdUFBMDAtXFx1QUEyOFxcdUFBNDAtXFx1QUE0MlxcdUFBNDQtXFx1QUE0QlxcdUFBNjAtXFx1QUE3NlxcdUFBN0FcXHVBQTdFLVxcdUFBQUZcXHVBQUIxXFx1QUFCNVxcdUFBQjZcXHVBQUI5LVxcdUFBQkRcXHVBQUMwXFx1QUFDMlxcdUFBREItXFx1QUFERFxcdUFBRTAtXFx1QUFFQVxcdUFBRjItXFx1QUFGNFxcdUFCMDEtXFx1QUIwNlxcdUFCMDktXFx1QUIwRVxcdUFCMTEtXFx1QUIxNlxcdUFCMjAtXFx1QUIyNlxcdUFCMjgtXFx1QUIyRVxcdUFCMzAtXFx1QUI1QVxcdUFCNUMtXFx1QUI2N1xcdUFCNzAtXFx1QUJFMlxcdUFDMDAtXFx1RDdBM1xcdUQ3QjAtXFx1RDdDNlxcdUQ3Q0ItXFx1RDdGQlxcdUY5MDAtXFx1RkE2RFxcdUZBNzAtXFx1RkFEOVxcdUZCMDAtXFx1RkIwNlxcdUZCMTMtXFx1RkIxN1xcdUZCMURcXHVGQjFGLVxcdUZCMjhcXHVGQjJBLVxcdUZCMzZcXHVGQjM4LVxcdUZCM0NcXHVGQjNFXFx1RkI0MFxcdUZCNDFcXHVGQjQzXFx1RkI0NFxcdUZCNDYtXFx1RkJCMVxcdUZCRDMtXFx1RkQzRFxcdUZENTAtXFx1RkQ4RlxcdUZEOTItXFx1RkRDN1xcdUZERjAtXFx1RkRGQlxcdUZFNzAtXFx1RkU3NFxcdUZFNzYtXFx1RkVGQ1xcdUZGMjEtXFx1RkYzQVxcdUZGNDEtXFx1RkY1QVxcdUZGNjYtXFx1RkZCRVxcdUZGQzItXFx1RkZDN1xcdUZGQ0EtXFx1RkZDRlxcdUZGRDItXFx1RkZEN1xcdUZGREEtXFx1RkZEQ118XFx1RDgwMFtcXHVEQzAwLVxcdURDMEJcXHVEQzBELVxcdURDMjZcXHVEQzI4LVxcdURDM0FcXHVEQzNDXFx1REMzRFxcdURDM0YtXFx1REM0RFxcdURDNTAtXFx1REM1RFxcdURDODAtXFx1RENGQVxcdURFODAtXFx1REU5Q1xcdURFQTAtXFx1REVEMFxcdURGMDAtXFx1REYxRlxcdURGMkQtXFx1REY0MFxcdURGNDItXFx1REY0OVxcdURGNTAtXFx1REY3NVxcdURGODAtXFx1REY5RFxcdURGQTAtXFx1REZDM1xcdURGQzgtXFx1REZDRl18XFx1RDgwMVtcXHVEQzAwLVxcdURDOURcXHVEQ0IwLVxcdURDRDNcXHVEQ0Q4LVxcdURDRkJcXHVERDAwLVxcdUREMjdcXHVERDMwLVxcdURENjNcXHVERTAwLVxcdURGMzZcXHVERjQwLVxcdURGNTVcXHVERjYwLVxcdURGNjddfFxcdUQ4MDJbXFx1REMwMC1cXHVEQzA1XFx1REMwOFxcdURDMEEtXFx1REMzNVxcdURDMzdcXHVEQzM4XFx1REMzQ1xcdURDM0YtXFx1REM1NVxcdURDNjAtXFx1REM3NlxcdURDODAtXFx1REM5RVxcdURDRTAtXFx1RENGMlxcdURDRjRcXHVEQ0Y1XFx1REQwMC1cXHVERDE1XFx1REQyMC1cXHVERDM5XFx1REQ4MC1cXHVEREI3XFx1RERCRVxcdUREQkZcXHVERTAwXFx1REUxMC1cXHVERTEzXFx1REUxNS1cXHVERTE3XFx1REUxOS1cXHVERTM1XFx1REU2MC1cXHVERTdDXFx1REU4MC1cXHVERTlDXFx1REVDMC1cXHVERUM3XFx1REVDOS1cXHVERUU0XFx1REYwMC1cXHVERjM1XFx1REY0MC1cXHVERjU1XFx1REY2MC1cXHVERjcyXFx1REY4MC1cXHVERjkxXXxcXHVEODAzW1xcdURDMDAtXFx1REM0OFxcdURDODAtXFx1RENCMlxcdURDQzAtXFx1RENGMlxcdUREMDAtXFx1REQyM1xcdURGMDAtXFx1REYxQ1xcdURGMjdcXHVERjMwLVxcdURGNDVcXHVERkUwLVxcdURGRjZdfFxcdUQ4MDRbXFx1REMwMy1cXHVEQzM3XFx1REM4My1cXHVEQ0FGXFx1RENEMC1cXHVEQ0U4XFx1REQwMy1cXHVERDI2XFx1REQ0NFxcdURENTAtXFx1REQ3MlxcdURENzZcXHVERDgzLVxcdUREQjJcXHVEREMxLVxcdUREQzRcXHVERERBXFx1REREQ1xcdURFMDAtXFx1REUxMVxcdURFMTMtXFx1REUyQlxcdURFODAtXFx1REU4NlxcdURFODhcXHVERThBLVxcdURFOERcXHVERThGLVxcdURFOURcXHVERTlGLVxcdURFQThcXHVERUIwLVxcdURFREVcXHVERjA1LVxcdURGMENcXHVERjBGXFx1REYxMFxcdURGMTMtXFx1REYyOFxcdURGMkEtXFx1REYzMFxcdURGMzJcXHVERjMzXFx1REYzNS1cXHVERjM5XFx1REYzRFxcdURGNTBcXHVERjVELVxcdURGNjFdfFxcdUQ4MDVbXFx1REMwMC1cXHVEQzM0XFx1REM0Ny1cXHVEQzRBXFx1REM1RlxcdURDODAtXFx1RENBRlxcdURDQzRcXHVEQ0M1XFx1RENDN1xcdUREODAtXFx1RERBRVxcdURERDgtXFx1REREQlxcdURFMDAtXFx1REUyRlxcdURFNDRcXHVERTgwLVxcdURFQUFcXHVERUI4XFx1REYwMC1cXHVERjFBXXxcXHVEODA2W1xcdURDMDAtXFx1REMyQlxcdURDQTAtXFx1RENERlxcdURDRkZcXHVEREEwLVxcdUREQTdcXHVEREFBLVxcdURERDBcXHVEREUxXFx1RERFM1xcdURFMDBcXHVERTBCLVxcdURFMzJcXHVERTNBXFx1REU1MFxcdURFNUMtXFx1REU4OVxcdURFOURcXHVERUMwLVxcdURFRjhdfFxcdUQ4MDdbXFx1REMwMC1cXHVEQzA4XFx1REMwQS1cXHVEQzJFXFx1REM0MFxcdURDNzItXFx1REM4RlxcdUREMDAtXFx1REQwNlxcdUREMDhcXHVERDA5XFx1REQwQi1cXHVERDMwXFx1REQ0NlxcdURENjAtXFx1REQ2NVxcdURENjdcXHVERDY4XFx1REQ2QS1cXHVERDg5XFx1REQ5OFxcdURFRTAtXFx1REVGMl18XFx1RDgwOFtcXHVEQzAwLVxcdURGOTldfFxcdUQ4MDlbXFx1REM4MC1cXHVERDQzXXxbXFx1RDgwQ1xcdUQ4MUMtXFx1RDgyMFxcdUQ4NDAtXFx1RDg2OFxcdUQ4NkEtXFx1RDg2Q1xcdUQ4NkYtXFx1RDg3MlxcdUQ4NzQtXFx1RDg3OV1bXFx1REMwMC1cXHVERkZGXXxcXHVEODBEW1xcdURDMDAtXFx1REMyRV18XFx1RDgxMVtcXHVEQzAwLVxcdURFNDZdfFxcdUQ4MUFbXFx1REMwMC1cXHVERTM4XFx1REU0MC1cXHVERTVFXFx1REVEMC1cXHVERUVEXFx1REYwMC1cXHVERjJGXFx1REY0MC1cXHVERjQzXFx1REY2My1cXHVERjc3XFx1REY3RC1cXHVERjhGXXxcXHVEODFCW1xcdURFNDAtXFx1REU3RlxcdURGMDAtXFx1REY0QVxcdURGNTBcXHVERjkzLVxcdURGOUZcXHVERkUwXFx1REZFMVxcdURGRTNdfFxcdUQ4MjFbXFx1REMwMC1cXHVERkY3XXxcXHVEODIyW1xcdURDMDAtXFx1REVGMl18XFx1RDgyQ1tcXHVEQzAwLVxcdUREMUVcXHVERDUwLVxcdURENTJcXHVERDY0LVxcdURENjdcXHVERDcwLVxcdURFRkJdfFxcdUQ4MkZbXFx1REMwMC1cXHVEQzZBXFx1REM3MC1cXHVEQzdDXFx1REM4MC1cXHVEQzg4XFx1REM5MC1cXHVEQzk5XXxcXHVEODM1W1xcdURDMDAtXFx1REM1NFxcdURDNTYtXFx1REM5Q1xcdURDOUVcXHVEQzlGXFx1RENBMlxcdURDQTVcXHVEQ0E2XFx1RENBOS1cXHVEQ0FDXFx1RENBRS1cXHVEQ0I5XFx1RENCQlxcdURDQkQtXFx1RENDM1xcdURDQzUtXFx1REQwNVxcdUREMDctXFx1REQwQVxcdUREMEQtXFx1REQxNFxcdUREMTYtXFx1REQxQ1xcdUREMUUtXFx1REQzOVxcdUREM0ItXFx1REQzRVxcdURENDAtXFx1REQ0NFxcdURENDZcXHVERDRBLVxcdURENTBcXHVERDUyLVxcdURFQTVcXHVERUE4LVxcdURFQzBcXHVERUMyLVxcdURFREFcXHVERURDLVxcdURFRkFcXHVERUZDLVxcdURGMTRcXHVERjE2LVxcdURGMzRcXHVERjM2LVxcdURGNEVcXHVERjUwLVxcdURGNkVcXHVERjcwLVxcdURGODhcXHVERjhBLVxcdURGQThcXHVERkFBLVxcdURGQzJcXHVERkM0LVxcdURGQ0JdfFxcdUQ4MzhbXFx1REQwMC1cXHVERDJDXFx1REQzNy1cXHVERDNEXFx1REQ0RVxcdURFQzAtXFx1REVFQl18XFx1RDgzQVtcXHVEQzAwLVxcdURDQzRcXHVERDAwLVxcdURENDNcXHVERDRCXXxcXHVEODNCW1xcdURFMDAtXFx1REUwM1xcdURFMDUtXFx1REUxRlxcdURFMjFcXHVERTIyXFx1REUyNFxcdURFMjdcXHVERTI5LVxcdURFMzJcXHVERTM0LVxcdURFMzdcXHVERTM5XFx1REUzQlxcdURFNDJcXHVERTQ3XFx1REU0OVxcdURFNEJcXHVERTRELVxcdURFNEZcXHVERTUxXFx1REU1MlxcdURFNTRcXHVERTU3XFx1REU1OVxcdURFNUJcXHVERTVEXFx1REU1RlxcdURFNjFcXHVERTYyXFx1REU2NFxcdURFNjctXFx1REU2QVxcdURFNkMtXFx1REU3MlxcdURFNzQtXFx1REU3N1xcdURFNzktXFx1REU3Q1xcdURFN0VcXHVERTgwLVxcdURFODlcXHVERThCLVxcdURFOUJcXHVERUExLVxcdURFQTNcXHVERUE1LVxcdURFQTlcXHVERUFCLVxcdURFQkJdfFxcdUQ4NjlbXFx1REMwMC1cXHVERUQ2XFx1REYwMC1cXHVERkZGXXxcXHVEODZEW1xcdURDMDAtXFx1REYzNFxcdURGNDAtXFx1REZGRl18XFx1RDg2RVtcXHVEQzAwLVxcdURDMURcXHVEQzIwLVxcdURGRkZdfFxcdUQ4NzNbXFx1REMwMC1cXHVERUExXFx1REVCMC1cXHVERkZGXXxcXHVEODdBW1xcdURDMDAtXFx1REZFMF18XFx1RDg3RVtcXHVEQzAwLVxcdURFMURdKSknXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgJzAnOlxyXG4gICAgICAgICAgcmVnZXggKz0gJyhbMC05XSknXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgJ3onOlxyXG4gICAgICAgIGNhc2UgJ1onOlxyXG4gICAgICAgICAgcmVnZXggKz0gSVNfVU5JQ09ERV9QUk9QRVJUWV9TVVBQT1JURURcclxuICAgICAgICAgICAgPyAnKFswLTldfFxcXFxwe0x9KSdcclxuICAgICAgICAgICAgOiAnKFswLTldfCg/OltBLVphLXpcXHhBQVxceEI1XFx4QkFcXHhDMC1cXHhENlxceEQ4LVxceEY2XFx4RjgtXFx1MDJDMVxcdTAyQzYtXFx1MDJEMVxcdTAyRTAtXFx1MDJFNFxcdTAyRUNcXHUwMkVFXFx1MDM3MC1cXHUwMzc0XFx1MDM3NlxcdTAzNzdcXHUwMzdBLVxcdTAzN0RcXHUwMzdGXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzRjVcXHUwM0Y3LVxcdTA0ODFcXHUwNDhBLVxcdTA1MkZcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MC1cXHUwNTg4XFx1MDVEMC1cXHUwNUVBXFx1MDVFRi1cXHUwNUYyXFx1MDYyMC1cXHUwNjRBXFx1MDY2RVxcdTA2NkZcXHUwNjcxLVxcdTA2RDNcXHUwNkQ1XFx1MDZFNVxcdTA2RTZcXHUwNkVFXFx1MDZFRlxcdTA2RkEtXFx1MDZGQ1xcdTA2RkZcXHUwNzEwXFx1MDcxMi1cXHUwNzJGXFx1MDc0RC1cXHUwN0E1XFx1MDdCMVxcdTA3Q0EtXFx1MDdFQVxcdTA3RjRcXHUwN0Y1XFx1MDdGQVxcdTA4MDAtXFx1MDgxNVxcdTA4MUFcXHUwODI0XFx1MDgyOFxcdTA4NDAtXFx1MDg1OFxcdTA4NjAtXFx1MDg2QVxcdTA4QTAtXFx1MDhCNFxcdTA4QjYtXFx1MDhCRFxcdTA5MDQtXFx1MDkzOVxcdTA5M0RcXHUwOTUwXFx1MDk1OC1cXHUwOTYxXFx1MDk3MS1cXHUwOTgwXFx1MDk4NS1cXHUwOThDXFx1MDk4RlxcdTA5OTBcXHUwOTkzLVxcdTA5QThcXHUwOUFBLVxcdTA5QjBcXHUwOUIyXFx1MDlCNi1cXHUwOUI5XFx1MDlCRFxcdTA5Q0VcXHUwOURDXFx1MDlERFxcdTA5REYtXFx1MDlFMVxcdTA5RjBcXHUwOUYxXFx1MDlGQ1xcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNzItXFx1MEE3NFxcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCRFxcdTBBRDBcXHUwQUUwXFx1MEFFMVxcdTBBRjlcXHUwQjA1LVxcdTBCMENcXHUwQjBGXFx1MEIxMFxcdTBCMTMtXFx1MEIyOFxcdTBCMkEtXFx1MEIzMFxcdTBCMzJcXHUwQjMzXFx1MEIzNS1cXHUwQjM5XFx1MEIzRFxcdTBCNUNcXHUwQjVEXFx1MEI1Ri1cXHUwQjYxXFx1MEI3MVxcdTBCODNcXHUwQjg1LVxcdTBCOEFcXHUwQjhFLVxcdTBCOTBcXHUwQjkyLVxcdTBCOTVcXHUwQjk5XFx1MEI5QVxcdTBCOUNcXHUwQjlFXFx1MEI5RlxcdTBCQTNcXHUwQkE0XFx1MEJBOC1cXHUwQkFBXFx1MEJBRS1cXHUwQkI5XFx1MEJEMFxcdTBDMDUtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzOVxcdTBDM0RcXHUwQzU4LVxcdTBDNUFcXHUwQzYwXFx1MEM2MVxcdTBDODBcXHUwQzg1LVxcdTBDOENcXHUwQzhFLVxcdTBDOTBcXHUwQzkyLVxcdTBDQThcXHUwQ0FBLVxcdTBDQjNcXHUwQ0I1LVxcdTBDQjlcXHUwQ0JEXFx1MENERVxcdTBDRTBcXHUwQ0UxXFx1MENGMVxcdTBDRjJcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNEXFx1MEQ0RVxcdTBENTQtXFx1MEQ1NlxcdTBENUYtXFx1MEQ2MVxcdTBEN0EtXFx1MEQ3RlxcdTBEODUtXFx1MEQ5NlxcdTBEOUEtXFx1MERCMVxcdTBEQjMtXFx1MERCQlxcdTBEQkRcXHUwREMwLVxcdTBEQzZcXHUwRTAxLVxcdTBFMzBcXHUwRTMyXFx1MEUzM1xcdTBFNDAtXFx1MEU0NlxcdTBFODFcXHUwRTgyXFx1MEU4NFxcdTBFODYtXFx1MEU4QVxcdTBFOEMtXFx1MEVBM1xcdTBFQTVcXHUwRUE3LVxcdTBFQjBcXHUwRUIyXFx1MEVCM1xcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGNDAtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGODgtXFx1MEY4Q1xcdTEwMDAtXFx1MTAyQVxcdTEwM0ZcXHUxMDUwLVxcdTEwNTVcXHUxMDVBLVxcdTEwNURcXHUxMDYxXFx1MTA2NVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxMEQwLVxcdTEwRkFcXHUxMEZDLVxcdTEyNDhcXHUxMjRBLVxcdTEyNERcXHUxMjUwLVxcdTEyNTZcXHUxMjU4XFx1MTI1QS1cXHUxMjVEXFx1MTI2MC1cXHUxMjg4XFx1MTI4QS1cXHUxMjhEXFx1MTI5MC1cXHUxMkIwXFx1MTJCMi1cXHUxMkI1XFx1MTJCOC1cXHUxMkJFXFx1MTJDMFxcdTEyQzItXFx1MTJDNVxcdTEyQzgtXFx1MTJENlxcdTEyRDgtXFx1MTMxMFxcdTEzMTItXFx1MTMxNVxcdTEzMTgtXFx1MTM1QVxcdTEzODAtXFx1MTM4RlxcdTEzQTAtXFx1MTNGNVxcdTEzRjgtXFx1MTNGRFxcdTE0MDEtXFx1MTY2Q1xcdTE2NkYtXFx1MTY3RlxcdTE2ODEtXFx1MTY5QVxcdTE2QTAtXFx1MTZFQVxcdTE2RjEtXFx1MTZGOFxcdTE3MDAtXFx1MTcwQ1xcdTE3MEUtXFx1MTcxMVxcdTE3MjAtXFx1MTczMVxcdTE3NDAtXFx1MTc1MVxcdTE3NjAtXFx1MTc2Q1xcdTE3NkUtXFx1MTc3MFxcdTE3ODAtXFx1MTdCM1xcdTE3RDdcXHUxN0RDXFx1MTgyMC1cXHUxODc4XFx1MTg4MC1cXHUxODg0XFx1MTg4Ny1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxRVxcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QjAtXFx1MTlDOVxcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFBQTdcXHUxQjA1LVxcdTFCMzNcXHUxQjQ1LVxcdTFCNEJcXHUxQjgzLVxcdTFCQTBcXHUxQkFFXFx1MUJBRlxcdTFCQkEtXFx1MUJFNVxcdTFDMDAtXFx1MUMyM1xcdTFDNEQtXFx1MUM0RlxcdTFDNUEtXFx1MUM3RFxcdTFDODAtXFx1MUM4OFxcdTFDOTAtXFx1MUNCQVxcdTFDQkQtXFx1MUNCRlxcdTFDRTktXFx1MUNFQ1xcdTFDRUUtXFx1MUNGM1xcdTFDRjVcXHUxQ0Y2XFx1MUNGQVxcdTFEMDAtXFx1MURCRlxcdTFFMDAtXFx1MUYxNVxcdTFGMTgtXFx1MUYxRFxcdTFGMjAtXFx1MUY0NVxcdTFGNDgtXFx1MUY0RFxcdTFGNTAtXFx1MUY1N1xcdTFGNTlcXHUxRjVCXFx1MUY1RFxcdTFGNUYtXFx1MUY3RFxcdTFGODAtXFx1MUZCNFxcdTFGQjYtXFx1MUZCQ1xcdTFGQkVcXHUxRkMyLVxcdTFGQzRcXHUxRkM2LVxcdTFGQ0NcXHUxRkQwLVxcdTFGRDNcXHUxRkQ2LVxcdTFGREJcXHUxRkUwLVxcdTFGRUNcXHUxRkYyLVxcdTFGRjRcXHUxRkY2LVxcdTFGRkNcXHUyMDcxXFx1MjA3RlxcdTIwOTAtXFx1MjA5Q1xcdTIxMDJcXHUyMTA3XFx1MjEwQS1cXHUyMTEzXFx1MjExNVxcdTIxMTktXFx1MjExRFxcdTIxMjRcXHUyMTI2XFx1MjEyOFxcdTIxMkEtXFx1MjEyRFxcdTIxMkYtXFx1MjEzOVxcdTIxM0MtXFx1MjEzRlxcdTIxNDUtXFx1MjE0OVxcdTIxNEVcXHUyMTgzXFx1MjE4NFxcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNFRVxcdTJDRjJcXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ4MC1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MkUyRlxcdTMwMDVcXHUzMDA2XFx1MzAzMS1cXHUzMDM1XFx1MzAzQlxcdTMwM0NcXHUzMDQxLVxcdTMwOTZcXHUzMDlELVxcdTMwOUZcXHUzMEExLVxcdTMwRkFcXHUzMEZDLVxcdTMwRkZcXHUzMTA1LVxcdTMxMkZcXHUzMTMxLVxcdTMxOEVcXHUzMUEwLVxcdTMxQkFcXHUzMUYwLVxcdTMxRkZcXHUzNDAwLVxcdTREQjVcXHU0RTAwLVxcdTlGRUZcXHVBMDAwLVxcdUE0OENcXHVBNEQwLVxcdUE0RkRcXHVBNTAwLVxcdUE2MENcXHVBNjEwLVxcdUE2MUZcXHVBNjJBXFx1QTYyQlxcdUE2NDAtXFx1QTY2RVxcdUE2N0YtXFx1QTY5RFxcdUE2QTAtXFx1QTZFNVxcdUE3MTctXFx1QTcxRlxcdUE3MjItXFx1QTc4OFxcdUE3OEItXFx1QTdCRlxcdUE3QzItXFx1QTdDNlxcdUE3RjctXFx1QTgwMVxcdUE4MDMtXFx1QTgwNVxcdUE4MDctXFx1QTgwQVxcdUE4MEMtXFx1QTgyMlxcdUE4NDAtXFx1QTg3M1xcdUE4ODItXFx1QThCM1xcdUE4RjItXFx1QThGN1xcdUE4RkJcXHVBOEZEXFx1QThGRVxcdUE5MEEtXFx1QTkyNVxcdUE5MzAtXFx1QTk0NlxcdUE5NjAtXFx1QTk3Q1xcdUE5ODQtXFx1QTlCMlxcdUE5Q0ZcXHVBOUUwLVxcdUE5RTRcXHVBOUU2LVxcdUE5RUZcXHVBOUZBLVxcdUE5RkVcXHVBQTAwLVxcdUFBMjhcXHVBQTQwLVxcdUFBNDJcXHVBQTQ0LVxcdUFBNEJcXHVBQTYwLVxcdUFBNzZcXHVBQTdBXFx1QUE3RS1cXHVBQUFGXFx1QUFCMVxcdUFBQjVcXHVBQUI2XFx1QUFCOS1cXHVBQUJEXFx1QUFDMFxcdUFBQzJcXHVBQURCLVxcdUFBRERcXHVBQUUwLVxcdUFBRUFcXHVBQUYyLVxcdUFBRjRcXHVBQjAxLVxcdUFCMDZcXHVBQjA5LVxcdUFCMEVcXHVBQjExLVxcdUFCMTZcXHVBQjIwLVxcdUFCMjZcXHVBQjI4LVxcdUFCMkVcXHVBQjMwLVxcdUFCNUFcXHVBQjVDLVxcdUFCNjdcXHVBQjcwLVxcdUFCRTJcXHVBQzAwLVxcdUQ3QTNcXHVEN0IwLVxcdUQ3QzZcXHVEN0NCLVxcdUQ3RkJcXHVGOTAwLVxcdUZBNkRcXHVGQTcwLVxcdUZBRDlcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGQjFEXFx1RkIxRi1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjIxLVxcdUZGM0FcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGRENdfFxcdUQ4MDBbXFx1REMwMC1cXHVEQzBCXFx1REMwRC1cXHVEQzI2XFx1REMyOC1cXHVEQzNBXFx1REMzQ1xcdURDM0RcXHVEQzNGLVxcdURDNERcXHVEQzUwLVxcdURDNURcXHVEQzgwLVxcdURDRkFcXHVERTgwLVxcdURFOUNcXHVERUEwLVxcdURFRDBcXHVERjAwLVxcdURGMUZcXHVERjJELVxcdURGNDBcXHVERjQyLVxcdURGNDlcXHVERjUwLVxcdURGNzVcXHVERjgwLVxcdURGOURcXHVERkEwLVxcdURGQzNcXHVERkM4LVxcdURGQ0ZdfFxcdUQ4MDFbXFx1REMwMC1cXHVEQzlEXFx1RENCMC1cXHVEQ0QzXFx1RENEOC1cXHVEQ0ZCXFx1REQwMC1cXHVERDI3XFx1REQzMC1cXHVERDYzXFx1REUwMC1cXHVERjM2XFx1REY0MC1cXHVERjU1XFx1REY2MC1cXHVERjY3XXxcXHVEODAyW1xcdURDMDAtXFx1REMwNVxcdURDMDhcXHVEQzBBLVxcdURDMzVcXHVEQzM3XFx1REMzOFxcdURDM0NcXHVEQzNGLVxcdURDNTVcXHVEQzYwLVxcdURDNzZcXHVEQzgwLVxcdURDOUVcXHVEQ0UwLVxcdURDRjJcXHVEQ0Y0XFx1RENGNVxcdUREMDAtXFx1REQxNVxcdUREMjAtXFx1REQzOVxcdUREODAtXFx1RERCN1xcdUREQkVcXHVEREJGXFx1REUwMFxcdURFMTAtXFx1REUxM1xcdURFMTUtXFx1REUxN1xcdURFMTktXFx1REUzNVxcdURFNjAtXFx1REU3Q1xcdURFODAtXFx1REU5Q1xcdURFQzAtXFx1REVDN1xcdURFQzktXFx1REVFNFxcdURGMDAtXFx1REYzNVxcdURGNDAtXFx1REY1NVxcdURGNjAtXFx1REY3MlxcdURGODAtXFx1REY5MV18XFx1RDgwM1tcXHVEQzAwLVxcdURDNDhcXHVEQzgwLVxcdURDQjJcXHVEQ0MwLVxcdURDRjJcXHVERDAwLVxcdUREMjNcXHVERjAwLVxcdURGMUNcXHVERjI3XFx1REYzMC1cXHVERjQ1XFx1REZFMC1cXHVERkY2XXxcXHVEODA0W1xcdURDMDMtXFx1REMzN1xcdURDODMtXFx1RENBRlxcdURDRDAtXFx1RENFOFxcdUREMDMtXFx1REQyNlxcdURENDRcXHVERDUwLVxcdURENzJcXHVERDc2XFx1REQ4My1cXHVEREIyXFx1RERDMS1cXHVEREM0XFx1REREQVxcdURERENcXHVERTAwLVxcdURFMTFcXHVERTEzLVxcdURFMkJcXHVERTgwLVxcdURFODZcXHVERTg4XFx1REU4QS1cXHVERThEXFx1REU4Ri1cXHVERTlEXFx1REU5Ri1cXHVERUE4XFx1REVCMC1cXHVERURFXFx1REYwNS1cXHVERjBDXFx1REYwRlxcdURGMTBcXHVERjEzLVxcdURGMjhcXHVERjJBLVxcdURGMzBcXHVERjMyXFx1REYzM1xcdURGMzUtXFx1REYzOVxcdURGM0RcXHVERjUwXFx1REY1RC1cXHVERjYxXXxcXHVEODA1W1xcdURDMDAtXFx1REMzNFxcdURDNDctXFx1REM0QVxcdURDNUZcXHVEQzgwLVxcdURDQUZcXHVEQ0M0XFx1RENDNVxcdURDQzdcXHVERDgwLVxcdUREQUVcXHVEREQ4LVxcdUREREJcXHVERTAwLVxcdURFMkZcXHVERTQ0XFx1REU4MC1cXHVERUFBXFx1REVCOFxcdURGMDAtXFx1REYxQV18XFx1RDgwNltcXHVEQzAwLVxcdURDMkJcXHVEQ0EwLVxcdURDREZcXHVEQ0ZGXFx1RERBMC1cXHVEREE3XFx1RERBQS1cXHVEREQwXFx1RERFMVxcdURERTNcXHVERTAwXFx1REUwQi1cXHVERTMyXFx1REUzQVxcdURFNTBcXHVERTVDLVxcdURFODlcXHVERTlEXFx1REVDMC1cXHVERUY4XXxcXHVEODA3W1xcdURDMDAtXFx1REMwOFxcdURDMEEtXFx1REMyRVxcdURDNDBcXHVEQzcyLVxcdURDOEZcXHVERDAwLVxcdUREMDZcXHVERDA4XFx1REQwOVxcdUREMEItXFx1REQzMFxcdURENDZcXHVERDYwLVxcdURENjVcXHVERDY3XFx1REQ2OFxcdURENkEtXFx1REQ4OVxcdUREOThcXHVERUUwLVxcdURFRjJdfFxcdUQ4MDhbXFx1REMwMC1cXHVERjk5XXxcXHVEODA5W1xcdURDODAtXFx1REQ0M118W1xcdUQ4MENcXHVEODFDLVxcdUQ4MjBcXHVEODQwLVxcdUQ4NjhcXHVEODZBLVxcdUQ4NkNcXHVEODZGLVxcdUQ4NzJcXHVEODc0LVxcdUQ4NzldW1xcdURDMDAtXFx1REZGRl18XFx1RDgwRFtcXHVEQzAwLVxcdURDMkVdfFxcdUQ4MTFbXFx1REMwMC1cXHVERTQ2XXxcXHVEODFBW1xcdURDMDAtXFx1REUzOFxcdURFNDAtXFx1REU1RVxcdURFRDAtXFx1REVFRFxcdURGMDAtXFx1REYyRlxcdURGNDAtXFx1REY0M1xcdURGNjMtXFx1REY3N1xcdURGN0QtXFx1REY4Rl18XFx1RDgxQltcXHVERTQwLVxcdURFN0ZcXHVERjAwLVxcdURGNEFcXHVERjUwXFx1REY5My1cXHVERjlGXFx1REZFMFxcdURGRTFcXHVERkUzXXxcXHVEODIxW1xcdURDMDAtXFx1REZGN118XFx1RDgyMltcXHVEQzAwLVxcdURFRjJdfFxcdUQ4MkNbXFx1REMwMC1cXHVERDFFXFx1REQ1MC1cXHVERDUyXFx1REQ2NC1cXHVERDY3XFx1REQ3MC1cXHVERUZCXXxcXHVEODJGW1xcdURDMDAtXFx1REM2QVxcdURDNzAtXFx1REM3Q1xcdURDODAtXFx1REM4OFxcdURDOTAtXFx1REM5OV18XFx1RDgzNVtcXHVEQzAwLVxcdURDNTRcXHVEQzU2LVxcdURDOUNcXHVEQzlFXFx1REM5RlxcdURDQTJcXHVEQ0E1XFx1RENBNlxcdURDQTktXFx1RENBQ1xcdURDQUUtXFx1RENCOVxcdURDQkJcXHVEQ0JELVxcdURDQzNcXHVEQ0M1LVxcdUREMDVcXHVERDA3LVxcdUREMEFcXHVERDBELVxcdUREMTRcXHVERDE2LVxcdUREMUNcXHVERDFFLVxcdUREMzlcXHVERDNCLVxcdUREM0VcXHVERDQwLVxcdURENDRcXHVERDQ2XFx1REQ0QS1cXHVERDUwXFx1REQ1Mi1cXHVERUE1XFx1REVBOC1cXHVERUMwXFx1REVDMi1cXHVERURBXFx1REVEQy1cXHVERUZBXFx1REVGQy1cXHVERjE0XFx1REYxNi1cXHVERjM0XFx1REYzNi1cXHVERjRFXFx1REY1MC1cXHVERjZFXFx1REY3MC1cXHVERjg4XFx1REY4QS1cXHVERkE4XFx1REZBQS1cXHVERkMyXFx1REZDNC1cXHVERkNCXXxcXHVEODM4W1xcdUREMDAtXFx1REQyQ1xcdUREMzctXFx1REQzRFxcdURENEVcXHVERUMwLVxcdURFRUJdfFxcdUQ4M0FbXFx1REMwMC1cXHVEQ0M0XFx1REQwMC1cXHVERDQzXFx1REQ0Ql18XFx1RDgzQltcXHVERTAwLVxcdURFMDNcXHVERTA1LVxcdURFMUZcXHVERTIxXFx1REUyMlxcdURFMjRcXHVERTI3XFx1REUyOS1cXHVERTMyXFx1REUzNC1cXHVERTM3XFx1REUzOVxcdURFM0JcXHVERTQyXFx1REU0N1xcdURFNDlcXHVERTRCXFx1REU0RC1cXHVERTRGXFx1REU1MVxcdURFNTJcXHVERTU0XFx1REU1N1xcdURFNTlcXHVERTVCXFx1REU1RFxcdURFNUZcXHVERTYxXFx1REU2MlxcdURFNjRcXHVERTY3LVxcdURFNkFcXHVERTZDLVxcdURFNzJcXHVERTc0LVxcdURFNzdcXHVERTc5LVxcdURFN0NcXHVERTdFXFx1REU4MC1cXHVERTg5XFx1REU4Qi1cXHVERTlCXFx1REVBMS1cXHVERUEzXFx1REVBNS1cXHVERUE5XFx1REVBQi1cXHVERUJCXXxcXHVEODY5W1xcdURDMDAtXFx1REVENlxcdURGMDAtXFx1REZGRl18XFx1RDg2RFtcXHVEQzAwLVxcdURGMzRcXHVERjQwLVxcdURGRkZdfFxcdUQ4NkVbXFx1REMwMC1cXHVEQzFEXFx1REMyMC1cXHVERkZGXXxcXHVEODczW1xcdURDMDAtXFx1REVBMVxcdURFQjAtXFx1REZGRl18XFx1RDg3QVtcXHVEQzAwLVxcdURGRTBdfFxcdUQ4N0VbXFx1REMwMC1cXHVERTFEXSkpJ1xyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICdVJzpcclxuICAgICAgICAgIHJlZ2V4ICs9IElTX1VOSUNPREVfUFJPUEVSVFlfU1VQUE9SVEVEXHJcbiAgICAgICAgICAgID8gJygoWzAtOV0pfChcXFxccyl8KFsuLC8jISQlXiYqOzp7fT0tX2B+KCldKXwoXFxcXHB7TH0pKSdcclxuICAgICAgICAgICAgOiAnKChbMC05XSl8KFxcXFxzKXwoWy4sLyMhJCVeJio7Ont9PS1fYH4oKV0pfCg/OltBLVphLXpcXHhBQVxceEI1XFx4QkFcXHhDMC1cXHhENlxceEQ4LVxceEY2XFx4RjgtXFx1MDJDMVxcdTAyQzYtXFx1MDJEMVxcdTAyRTAtXFx1MDJFNFxcdTAyRUNcXHUwMkVFXFx1MDM3MC1cXHUwMzc0XFx1MDM3NlxcdTAzNzdcXHUwMzdBLVxcdTAzN0RcXHUwMzdGXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzRjVcXHUwM0Y3LVxcdTA0ODFcXHUwNDhBLVxcdTA1MkZcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MC1cXHUwNTg4XFx1MDVEMC1cXHUwNUVBXFx1MDVFRi1cXHUwNUYyXFx1MDYyMC1cXHUwNjRBXFx1MDY2RVxcdTA2NkZcXHUwNjcxLVxcdTA2RDNcXHUwNkQ1XFx1MDZFNVxcdTA2RTZcXHUwNkVFXFx1MDZFRlxcdTA2RkEtXFx1MDZGQ1xcdTA2RkZcXHUwNzEwXFx1MDcxMi1cXHUwNzJGXFx1MDc0RC1cXHUwN0E1XFx1MDdCMVxcdTA3Q0EtXFx1MDdFQVxcdTA3RjRcXHUwN0Y1XFx1MDdGQVxcdTA4MDAtXFx1MDgxNVxcdTA4MUFcXHUwODI0XFx1MDgyOFxcdTA4NDAtXFx1MDg1OFxcdTA4NjAtXFx1MDg2QVxcdTA4QTAtXFx1MDhCNFxcdTA4QjYtXFx1MDhCRFxcdTA5MDQtXFx1MDkzOVxcdTA5M0RcXHUwOTUwXFx1MDk1OC1cXHUwOTYxXFx1MDk3MS1cXHUwOTgwXFx1MDk4NS1cXHUwOThDXFx1MDk4RlxcdTA5OTBcXHUwOTkzLVxcdTA5QThcXHUwOUFBLVxcdTA5QjBcXHUwOUIyXFx1MDlCNi1cXHUwOUI5XFx1MDlCRFxcdTA5Q0VcXHUwOURDXFx1MDlERFxcdTA5REYtXFx1MDlFMVxcdTA5RjBcXHUwOUYxXFx1MDlGQ1xcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNzItXFx1MEE3NFxcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCRFxcdTBBRDBcXHUwQUUwXFx1MEFFMVxcdTBBRjlcXHUwQjA1LVxcdTBCMENcXHUwQjBGXFx1MEIxMFxcdTBCMTMtXFx1MEIyOFxcdTBCMkEtXFx1MEIzMFxcdTBCMzJcXHUwQjMzXFx1MEIzNS1cXHUwQjM5XFx1MEIzRFxcdTBCNUNcXHUwQjVEXFx1MEI1Ri1cXHUwQjYxXFx1MEI3MVxcdTBCODNcXHUwQjg1LVxcdTBCOEFcXHUwQjhFLVxcdTBCOTBcXHUwQjkyLVxcdTBCOTVcXHUwQjk5XFx1MEI5QVxcdTBCOUNcXHUwQjlFXFx1MEI5RlxcdTBCQTNcXHUwQkE0XFx1MEJBOC1cXHUwQkFBXFx1MEJBRS1cXHUwQkI5XFx1MEJEMFxcdTBDMDUtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzOVxcdTBDM0RcXHUwQzU4LVxcdTBDNUFcXHUwQzYwXFx1MEM2MVxcdTBDODBcXHUwQzg1LVxcdTBDOENcXHUwQzhFLVxcdTBDOTBcXHUwQzkyLVxcdTBDQThcXHUwQ0FBLVxcdTBDQjNcXHUwQ0I1LVxcdTBDQjlcXHUwQ0JEXFx1MENERVxcdTBDRTBcXHUwQ0UxXFx1MENGMVxcdTBDRjJcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNEXFx1MEQ0RVxcdTBENTQtXFx1MEQ1NlxcdTBENUYtXFx1MEQ2MVxcdTBEN0EtXFx1MEQ3RlxcdTBEODUtXFx1MEQ5NlxcdTBEOUEtXFx1MERCMVxcdTBEQjMtXFx1MERCQlxcdTBEQkRcXHUwREMwLVxcdTBEQzZcXHUwRTAxLVxcdTBFMzBcXHUwRTMyXFx1MEUzM1xcdTBFNDAtXFx1MEU0NlxcdTBFODFcXHUwRTgyXFx1MEU4NFxcdTBFODYtXFx1MEU4QVxcdTBFOEMtXFx1MEVBM1xcdTBFQTVcXHUwRUE3LVxcdTBFQjBcXHUwRUIyXFx1MEVCM1xcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGNDAtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGODgtXFx1MEY4Q1xcdTEwMDAtXFx1MTAyQVxcdTEwM0ZcXHUxMDUwLVxcdTEwNTVcXHUxMDVBLVxcdTEwNURcXHUxMDYxXFx1MTA2NVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxMEQwLVxcdTEwRkFcXHUxMEZDLVxcdTEyNDhcXHUxMjRBLVxcdTEyNERcXHUxMjUwLVxcdTEyNTZcXHUxMjU4XFx1MTI1QS1cXHUxMjVEXFx1MTI2MC1cXHUxMjg4XFx1MTI4QS1cXHUxMjhEXFx1MTI5MC1cXHUxMkIwXFx1MTJCMi1cXHUxMkI1XFx1MTJCOC1cXHUxMkJFXFx1MTJDMFxcdTEyQzItXFx1MTJDNVxcdTEyQzgtXFx1MTJENlxcdTEyRDgtXFx1MTMxMFxcdTEzMTItXFx1MTMxNVxcdTEzMTgtXFx1MTM1QVxcdTEzODAtXFx1MTM4RlxcdTEzQTAtXFx1MTNGNVxcdTEzRjgtXFx1MTNGRFxcdTE0MDEtXFx1MTY2Q1xcdTE2NkYtXFx1MTY3RlxcdTE2ODEtXFx1MTY5QVxcdTE2QTAtXFx1MTZFQVxcdTE2RjEtXFx1MTZGOFxcdTE3MDAtXFx1MTcwQ1xcdTE3MEUtXFx1MTcxMVxcdTE3MjAtXFx1MTczMVxcdTE3NDAtXFx1MTc1MVxcdTE3NjAtXFx1MTc2Q1xcdTE3NkUtXFx1MTc3MFxcdTE3ODAtXFx1MTdCM1xcdTE3RDdcXHUxN0RDXFx1MTgyMC1cXHUxODc4XFx1MTg4MC1cXHUxODg0XFx1MTg4Ny1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxRVxcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QjAtXFx1MTlDOVxcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFBQTdcXHUxQjA1LVxcdTFCMzNcXHUxQjQ1LVxcdTFCNEJcXHUxQjgzLVxcdTFCQTBcXHUxQkFFXFx1MUJBRlxcdTFCQkEtXFx1MUJFNVxcdTFDMDAtXFx1MUMyM1xcdTFDNEQtXFx1MUM0RlxcdTFDNUEtXFx1MUM3RFxcdTFDODAtXFx1MUM4OFxcdTFDOTAtXFx1MUNCQVxcdTFDQkQtXFx1MUNCRlxcdTFDRTktXFx1MUNFQ1xcdTFDRUUtXFx1MUNGM1xcdTFDRjVcXHUxQ0Y2XFx1MUNGQVxcdTFEMDAtXFx1MURCRlxcdTFFMDAtXFx1MUYxNVxcdTFGMTgtXFx1MUYxRFxcdTFGMjAtXFx1MUY0NVxcdTFGNDgtXFx1MUY0RFxcdTFGNTAtXFx1MUY1N1xcdTFGNTlcXHUxRjVCXFx1MUY1RFxcdTFGNUYtXFx1MUY3RFxcdTFGODAtXFx1MUZCNFxcdTFGQjYtXFx1MUZCQ1xcdTFGQkVcXHUxRkMyLVxcdTFGQzRcXHUxRkM2LVxcdTFGQ0NcXHUxRkQwLVxcdTFGRDNcXHUxRkQ2LVxcdTFGREJcXHUxRkUwLVxcdTFGRUNcXHUxRkYyLVxcdTFGRjRcXHUxRkY2LVxcdTFGRkNcXHUyMDcxXFx1MjA3RlxcdTIwOTAtXFx1MjA5Q1xcdTIxMDJcXHUyMTA3XFx1MjEwQS1cXHUyMTEzXFx1MjExNVxcdTIxMTktXFx1MjExRFxcdTIxMjRcXHUyMTI2XFx1MjEyOFxcdTIxMkEtXFx1MjEyRFxcdTIxMkYtXFx1MjEzOVxcdTIxM0MtXFx1MjEzRlxcdTIxNDUtXFx1MjE0OVxcdTIxNEVcXHUyMTgzXFx1MjE4NFxcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNFRVxcdTJDRjJcXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ4MC1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MkUyRlxcdTMwMDVcXHUzMDA2XFx1MzAzMS1cXHUzMDM1XFx1MzAzQlxcdTMwM0NcXHUzMDQxLVxcdTMwOTZcXHUzMDlELVxcdTMwOUZcXHUzMEExLVxcdTMwRkFcXHUzMEZDLVxcdTMwRkZcXHUzMTA1LVxcdTMxMkZcXHUzMTMxLVxcdTMxOEVcXHUzMUEwLVxcdTMxQkFcXHUzMUYwLVxcdTMxRkZcXHUzNDAwLVxcdTREQjVcXHU0RTAwLVxcdTlGRUZcXHVBMDAwLVxcdUE0OENcXHVBNEQwLVxcdUE0RkRcXHVBNTAwLVxcdUE2MENcXHVBNjEwLVxcdUE2MUZcXHVBNjJBXFx1QTYyQlxcdUE2NDAtXFx1QTY2RVxcdUE2N0YtXFx1QTY5RFxcdUE2QTAtXFx1QTZFNVxcdUE3MTctXFx1QTcxRlxcdUE3MjItXFx1QTc4OFxcdUE3OEItXFx1QTdCRlxcdUE3QzItXFx1QTdDNlxcdUE3RjctXFx1QTgwMVxcdUE4MDMtXFx1QTgwNVxcdUE4MDctXFx1QTgwQVxcdUE4MEMtXFx1QTgyMlxcdUE4NDAtXFx1QTg3M1xcdUE4ODItXFx1QThCM1xcdUE4RjItXFx1QThGN1xcdUE4RkJcXHVBOEZEXFx1QThGRVxcdUE5MEEtXFx1QTkyNVxcdUE5MzAtXFx1QTk0NlxcdUE5NjAtXFx1QTk3Q1xcdUE5ODQtXFx1QTlCMlxcdUE5Q0ZcXHVBOUUwLVxcdUE5RTRcXHVBOUU2LVxcdUE5RUZcXHVBOUZBLVxcdUE5RkVcXHVBQTAwLVxcdUFBMjhcXHVBQTQwLVxcdUFBNDJcXHVBQTQ0LVxcdUFBNEJcXHVBQTYwLVxcdUFBNzZcXHVBQTdBXFx1QUE3RS1cXHVBQUFGXFx1QUFCMVxcdUFBQjVcXHVBQUI2XFx1QUFCOS1cXHVBQUJEXFx1QUFDMFxcdUFBQzJcXHVBQURCLVxcdUFBRERcXHVBQUUwLVxcdUFBRUFcXHVBQUYyLVxcdUFBRjRcXHVBQjAxLVxcdUFCMDZcXHVBQjA5LVxcdUFCMEVcXHVBQjExLVxcdUFCMTZcXHVBQjIwLVxcdUFCMjZcXHVBQjI4LVxcdUFCMkVcXHVBQjMwLVxcdUFCNUFcXHVBQjVDLVxcdUFCNjdcXHVBQjcwLVxcdUFCRTJcXHVBQzAwLVxcdUQ3QTNcXHVEN0IwLVxcdUQ3QzZcXHVEN0NCLVxcdUQ3RkJcXHVGOTAwLVxcdUZBNkRcXHVGQTcwLVxcdUZBRDlcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGQjFEXFx1RkIxRi1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjIxLVxcdUZGM0FcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGRENdfFxcdUQ4MDBbXFx1REMwMC1cXHVEQzBCXFx1REMwRC1cXHVEQzI2XFx1REMyOC1cXHVEQzNBXFx1REMzQ1xcdURDM0RcXHVEQzNGLVxcdURDNERcXHVEQzUwLVxcdURDNURcXHVEQzgwLVxcdURDRkFcXHVERTgwLVxcdURFOUNcXHVERUEwLVxcdURFRDBcXHVERjAwLVxcdURGMUZcXHVERjJELVxcdURGNDBcXHVERjQyLVxcdURGNDlcXHVERjUwLVxcdURGNzVcXHVERjgwLVxcdURGOURcXHVERkEwLVxcdURGQzNcXHVERkM4LVxcdURGQ0ZdfFxcdUQ4MDFbXFx1REMwMC1cXHVEQzlEXFx1RENCMC1cXHVEQ0QzXFx1RENEOC1cXHVEQ0ZCXFx1REQwMC1cXHVERDI3XFx1REQzMC1cXHVERDYzXFx1REUwMC1cXHVERjM2XFx1REY0MC1cXHVERjU1XFx1REY2MC1cXHVERjY3XXxcXHVEODAyW1xcdURDMDAtXFx1REMwNVxcdURDMDhcXHVEQzBBLVxcdURDMzVcXHVEQzM3XFx1REMzOFxcdURDM0NcXHVEQzNGLVxcdURDNTVcXHVEQzYwLVxcdURDNzZcXHVEQzgwLVxcdURDOUVcXHVEQ0UwLVxcdURDRjJcXHVEQ0Y0XFx1RENGNVxcdUREMDAtXFx1REQxNVxcdUREMjAtXFx1REQzOVxcdUREODAtXFx1RERCN1xcdUREQkVcXHVEREJGXFx1REUwMFxcdURFMTAtXFx1REUxM1xcdURFMTUtXFx1REUxN1xcdURFMTktXFx1REUzNVxcdURFNjAtXFx1REU3Q1xcdURFODAtXFx1REU5Q1xcdURFQzAtXFx1REVDN1xcdURFQzktXFx1REVFNFxcdURGMDAtXFx1REYzNVxcdURGNDAtXFx1REY1NVxcdURGNjAtXFx1REY3MlxcdURGODAtXFx1REY5MV18XFx1RDgwM1tcXHVEQzAwLVxcdURDNDhcXHVEQzgwLVxcdURDQjJcXHVEQ0MwLVxcdURDRjJcXHVERDAwLVxcdUREMjNcXHVERjAwLVxcdURGMUNcXHVERjI3XFx1REYzMC1cXHVERjQ1XFx1REZFMC1cXHVERkY2XXxcXHVEODA0W1xcdURDMDMtXFx1REMzN1xcdURDODMtXFx1RENBRlxcdURDRDAtXFx1RENFOFxcdUREMDMtXFx1REQyNlxcdURENDRcXHVERDUwLVxcdURENzJcXHVERDc2XFx1REQ4My1cXHVEREIyXFx1RERDMS1cXHVEREM0XFx1REREQVxcdURERENcXHVERTAwLVxcdURFMTFcXHVERTEzLVxcdURFMkJcXHVERTgwLVxcdURFODZcXHVERTg4XFx1REU4QS1cXHVERThEXFx1REU4Ri1cXHVERTlEXFx1REU5Ri1cXHVERUE4XFx1REVCMC1cXHVERURFXFx1REYwNS1cXHVERjBDXFx1REYwRlxcdURGMTBcXHVERjEzLVxcdURGMjhcXHVERjJBLVxcdURGMzBcXHVERjMyXFx1REYzM1xcdURGMzUtXFx1REYzOVxcdURGM0RcXHVERjUwXFx1REY1RC1cXHVERjYxXXxcXHVEODA1W1xcdURDMDAtXFx1REMzNFxcdURDNDctXFx1REM0QVxcdURDNUZcXHVEQzgwLVxcdURDQUZcXHVEQ0M0XFx1RENDNVxcdURDQzdcXHVERDgwLVxcdUREQUVcXHVEREQ4LVxcdUREREJcXHVERTAwLVxcdURFMkZcXHVERTQ0XFx1REU4MC1cXHVERUFBXFx1REVCOFxcdURGMDAtXFx1REYxQV18XFx1RDgwNltcXHVEQzAwLVxcdURDMkJcXHVEQ0EwLVxcdURDREZcXHVEQ0ZGXFx1RERBMC1cXHVEREE3XFx1RERBQS1cXHVEREQwXFx1RERFMVxcdURERTNcXHVERTAwXFx1REUwQi1cXHVERTMyXFx1REUzQVxcdURFNTBcXHVERTVDLVxcdURFODlcXHVERTlEXFx1REVDMC1cXHVERUY4XXxcXHVEODA3W1xcdURDMDAtXFx1REMwOFxcdURDMEEtXFx1REMyRVxcdURDNDBcXHVEQzcyLVxcdURDOEZcXHVERDAwLVxcdUREMDZcXHVERDA4XFx1REQwOVxcdUREMEItXFx1REQzMFxcdURENDZcXHVERDYwLVxcdURENjVcXHVERDY3XFx1REQ2OFxcdURENkEtXFx1REQ4OVxcdUREOThcXHVERUUwLVxcdURFRjJdfFxcdUQ4MDhbXFx1REMwMC1cXHVERjk5XXxcXHVEODA5W1xcdURDODAtXFx1REQ0M118W1xcdUQ4MENcXHVEODFDLVxcdUQ4MjBcXHVEODQwLVxcdUQ4NjhcXHVEODZBLVxcdUQ4NkNcXHVEODZGLVxcdUQ4NzJcXHVEODc0LVxcdUQ4NzldW1xcdURDMDAtXFx1REZGRl18XFx1RDgwRFtcXHVEQzAwLVxcdURDMkVdfFxcdUQ4MTFbXFx1REMwMC1cXHVERTQ2XXxcXHVEODFBW1xcdURDMDAtXFx1REUzOFxcdURFNDAtXFx1REU1RVxcdURFRDAtXFx1REVFRFxcdURGMDAtXFx1REYyRlxcdURGNDAtXFx1REY0M1xcdURGNjMtXFx1REY3N1xcdURGN0QtXFx1REY4Rl18XFx1RDgxQltcXHVERTQwLVxcdURFN0ZcXHVERjAwLVxcdURGNEFcXHVERjUwXFx1REY5My1cXHVERjlGXFx1REZFMFxcdURGRTFcXHVERkUzXXxcXHVEODIxW1xcdURDMDAtXFx1REZGN118XFx1RDgyMltcXHVEQzAwLVxcdURFRjJdfFxcdUQ4MkNbXFx1REMwMC1cXHVERDFFXFx1REQ1MC1cXHVERDUyXFx1REQ2NC1cXHVERDY3XFx1REQ3MC1cXHVERUZCXXxcXHVEODJGW1xcdURDMDAtXFx1REM2QVxcdURDNzAtXFx1REM3Q1xcdURDODAtXFx1REM4OFxcdURDOTAtXFx1REM5OV18XFx1RDgzNVtcXHVEQzAwLVxcdURDNTRcXHVEQzU2LVxcdURDOUNcXHVEQzlFXFx1REM5RlxcdURDQTJcXHVEQ0E1XFx1RENBNlxcdURDQTktXFx1RENBQ1xcdURDQUUtXFx1RENCOVxcdURDQkJcXHVEQ0JELVxcdURDQzNcXHVEQ0M1LVxcdUREMDVcXHVERDA3LVxcdUREMEFcXHVERDBELVxcdUREMTRcXHVERDE2LVxcdUREMUNcXHVERDFFLVxcdUREMzlcXHVERDNCLVxcdUREM0VcXHVERDQwLVxcdURENDRcXHVERDQ2XFx1REQ0QS1cXHVERDUwXFx1REQ1Mi1cXHVERUE1XFx1REVBOC1cXHVERUMwXFx1REVDMi1cXHVERURBXFx1REVEQy1cXHVERUZBXFx1REVGQy1cXHVERjE0XFx1REYxNi1cXHVERjM0XFx1REYzNi1cXHVERjRFXFx1REY1MC1cXHVERjZFXFx1REY3MC1cXHVERjg4XFx1REY4QS1cXHVERkE4XFx1REZBQS1cXHVERkMyXFx1REZDNC1cXHVERkNCXXxcXHVEODM4W1xcdUREMDAtXFx1REQyQ1xcdUREMzctXFx1REQzRFxcdURENEVcXHVERUMwLVxcdURFRUJdfFxcdUQ4M0FbXFx1REMwMC1cXHVEQ0M0XFx1REQwMC1cXHVERDQzXFx1REQ0Ql18XFx1RDgzQltcXHVERTAwLVxcdURFMDNcXHVERTA1LVxcdURFMUZcXHVERTIxXFx1REUyMlxcdURFMjRcXHVERTI3XFx1REUyOS1cXHVERTMyXFx1REUzNC1cXHVERTM3XFx1REUzOVxcdURFM0JcXHVERTQyXFx1REU0N1xcdURFNDlcXHVERTRCXFx1REU0RC1cXHVERTRGXFx1REU1MVxcdURFNTJcXHVERTU0XFx1REU1N1xcdURFNTlcXHVERTVCXFx1REU1RFxcdURFNUZcXHVERTYxXFx1REU2MlxcdURFNjRcXHVERTY3LVxcdURFNkFcXHVERTZDLVxcdURFNzJcXHVERTc0LVxcdURFNzdcXHVERTc5LVxcdURFN0NcXHVERTdFXFx1REU4MC1cXHVERTg5XFx1REU4Qi1cXHVERTlCXFx1REVBMS1cXHVERUEzXFx1REVBNS1cXHVERUE5XFx1REVBQi1cXHVERUJCXXxcXHVEODY5W1xcdURDMDAtXFx1REVENlxcdURGMDAtXFx1REZGRl18XFx1RDg2RFtcXHVEQzAwLVxcdURGMzRcXHVERjQwLVxcdURGRkZdfFxcdUQ4NkVbXFx1REMwMC1cXHVEQzFEXFx1REMyMC1cXHVERkZGXXxcXHVEODczW1xcdURDMDAtXFx1REVBMVxcdURFQjAtXFx1REZGRl18XFx1RDg3QVtcXHVEQzAwLVxcdURGRTBdfFxcdUQ4N0VbXFx1REMwMC1cXHVERTFEXSkpJ1xyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgcmVnZXggKz0gYy5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgJ1xcXFwkJicpXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIGdlbmVyYXRlUGF0dGVybkZyb21NYXNrLl9fQ0FDSEVfX1tjYWNoZUtleV0gPSByZWdleFxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGdlbmVyYXRlUGF0dGVybkZyb21NYXNrLl9fQ0FDSEVfX1tjYWNoZUtleV1cclxufVxyXG5cclxuLyoqXHJcbiAqIFVubWFzayB0aGUgZ2l2ZW4gdmFsdWVcclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IG1hc2tlZFZhbHVlIG1hc2tlZCBzdHJpbmdcclxuICogQHBhcmFtIHtTdHJpbmd9IG1hc2sgIHRoZSB1c2VkIG1hc2sgdG8gcHJvZHVjZSB0aGUgbWFza2VkIHN0cmluZ1xyXG4gKi9cclxuY29uc3QgdW5tYXNrID0gKG1hc2tlZFZhbHVlLCBtYXNrKSA9PiB7XHJcbiAgaWYgKHR5cGVvZiB1bm1hc2suX19DQUNIRV9fID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgdW5tYXNrLl9fQ0FDSEVfXyA9IHt9XHJcbiAgfVxyXG5cclxuICBjb25zdCBjYWNoZUtleSA9IGAke21hc2tlZFZhbHVlfS0ke21hc2t9YFxyXG5cclxuICBpZiAoIXVubWFzay5fX0NBQ0hFX19bY2FjaGVLZXldKSB7XHJcbiAgICBjb25zdCBtYXNrQXNBcnJheSA9IG1hc2suc3BsaXQoJycpXHJcbiAgICBjb25zdCBtYXNrZWRWYWx1ZUFzQXJyYXkgPSBtYXNrZWRWYWx1ZS5zcGxpdCgnJylcclxuXHJcbiAgICBsZXQgdW5tYXNrZWQgPSAnJ1xyXG5cclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBtYXNrZWRWYWx1ZUFzQXJyYXkubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGNvbnN0IGVsID0gbWFza2VkVmFsdWVBc0FycmF5W2luZGV4XVxyXG4gICAgICBjb25zdCBtYXNrID0gbWFza0FzQXJyYXlbaW5kZXhdXHJcbiAgICAgIGNvbnN0IGVsSGFzTWFzayA9IFNVUFBPUlRFRF9NQVNLUy5pbmRleE9mKG1hc2spID4gLTFcclxuICAgICAgaWYgKGVsSGFzTWFzaykge1xyXG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBuZXcgUmVnRXhwKFxyXG4gICAgICAgICAgZ2VuZXJhdGVQYXR0ZXJuRnJvbU1hc2sobWFzayksXHJcbiAgICAgICAgICBJU19VTklDT0RFX1BST1BFUlRZX1NVUFBPUlRFRCA/ICd1JyA6ICcnXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGlmIChwYXR0ZXJuLnRlc3QoZWwpKSB1bm1hc2tlZCArPSBlbFxyXG4gICAgICAgIGVsc2UgYnJlYWtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVubWFzay5fX0NBQ0hFX19bY2FjaGVLZXldID0gdW5tYXNrZWQudG9Mb2NhbGVMb3dlckNhc2UoKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHVubWFzay5fX0NBQ0hFX19bY2FjaGVLZXldXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHaXZlbiB0aGUgbWFza2VkIHN0cmluZyAsIGZpbmQgdGhlIG5leHQgY2FyZXQgcG9zaXRpb24gZGVwZW5kaW5nIG9uXHJcbiAqIHdoYXQgaXMgbWlzc2luZyB0byBjb21wbGV0ZSB0aGUgbWFza1xyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gbWFza2VkVmFsdWUgbWFza2VkIHN0cmluZ1xyXG4gKiBAcGFyYW0ge1N0cmluZ30gbWFzayAgdGhlIHVzZWQgbWFzayB0byBwcm9kdWNlIHRoZSBtYXNrZWQgc3RyaW5nXHJcbiAqL1xyXG5jb25zdCBmaW5kQ2FyZXRQb3NpdGlvbiA9IChtYXNrZWRWYWx1ZSwgbWFzaykgPT4ge1xyXG4gIGlmICh0eXBlb2YgZmluZENhcmV0UG9zaXRpb24uX19DQUNIRV9fID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgZmluZENhcmV0UG9zaXRpb24uX19DQUNIRV9fID0ge31cclxuICB9XHJcblxyXG4gIGNvbnN0IGNhY2hlS2V5ID0gYCR7bWFza2VkVmFsdWV9LSR7bWFza31gXHJcbiAgaWYgKCFmaW5kQ2FyZXRQb3NpdGlvbi5fX0NBQ0hFX19bY2FjaGVLZXldKSB7XHJcbiAgICBjb25zdCBtYXNrQXNBcnJheSA9IG1hc2suc3BsaXQoJycpXHJcbiAgICBsZXQgbWFza2VkVmFsdWVBc0FycmF5ID0gbWFza2VkVmFsdWUuc3BsaXQoJycpXHJcbiAgICBpZiAobWFza2VkVmFsdWVBc0FycmF5Lmxlbmd0aCA8IG1hc2tBc0FycmF5Lmxlbmd0aCkge1xyXG4gICAgICBtYXNrZWRWYWx1ZUFzQXJyYXkgPSBtYXNrZWRWYWx1ZUFzQXJyYXkuY29uY2F0KFxyXG4gICAgICAgIG5ldyBBcnJheShtYXNrQXNBcnJheS5sZW5ndGggLSBtYXNrZWRWYWx1ZUFzQXJyYXkubGVuZ3RoKS5qb2luKCcgJykuc3BsaXQoJycpXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcG9zaXRpb24gPSAtMVxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG1hc2tBc0FycmF5Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBjb25zdCBlbCA9IG1hc2tBc0FycmF5W2luZGV4XVxyXG4gICAgICBpZiAoZWwgIT09IG1hc2tlZFZhbHVlQXNBcnJheVtpbmRleF0pIHtcclxuICAgICAgICAvLyBpZiAobWFza2VkVmFsdWVBc0FycmF5W2luZGV4XSA9PT0gJyAnKSByZXR1cm4gaW5kZXhcclxuICAgICAgICBpZiAoU1VQUE9SVEVEX01BU0tTLmluZGV4T2YoZWwpID4gLTEpIHtcclxuICAgICAgICAgIGNvbnN0IHBhdHRlcm4gPSBuZXcgUmVnRXhwKFxyXG4gICAgICAgICAgICBnZW5lcmF0ZVBhdHRlcm5Gcm9tTWFzayhlbCksXHJcbiAgICAgICAgICAgIElTX1VOSUNPREVfUFJPUEVSVFlfU1VQUE9SVEVEID8gJ3UnIDogJydcclxuICAgICAgICAgIClcclxuXHJcbiAgICAgICAgICBpZiAoIXBhdHRlcm4udGVzdChtYXNrZWRWYWx1ZUFzQXJyYXlbaW5kZXhdKSkge1xyXG4gICAgICAgICAgICBwb3NpdGlvbiA9IGluZGV4XHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZmluZENhcmV0UG9zaXRpb24uX19DQUNIRV9fW2NhY2hlS2V5XSA9XHJcbiAgICAgIHBvc2l0aW9uIDwgMCA/IG1hc2tlZFZhbHVlQXNBcnJheS5sZW5ndGggOiBwb3NpdGlvblxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZpbmRDYXJldFBvc2l0aW9uLl9fQ0FDSEVfX1tjYWNoZUtleV1cclxufVxyXG5cclxuZXhwb3J0IHtcclxuICBpc01hc2tlZFZhbHVlLFxyXG4gIG1hc2tJZk5vdE1hc2tlZCxcclxuICB1bm1hc2ssXHJcbiAgZmluZENhcmV0UG9zaXRpb24sXHJcbiAgZ2VuZXJhdGVQYXR0ZXJuRnJvbU1hc2ssXHJcbiAgSVNfVU5JQ09ERV9QUk9QRVJUWV9TVVBQT1JURUQsXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL1RleHRJbnB1dC90b29scy5qcyIsIi8qXHJcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWlucHV0LW1hc2tpbmcgbGliLlxyXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XHJcbiAqXHJcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXHJcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxyXG4gKi9cclxuXHJcbmltcG9ydCBOdW1iZXJJbnB1dCBmcm9tICcuL051bWJlcklucHV0J1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTnVtYmVySW5wdXRcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL051bWJlcklucHV0L2luZGV4LmpzIiwiLypcclxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtaW5wdXQtbWFza2luZyBsaWIuXHJcbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cclxuICpcclxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcclxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXHJcbiAqL1xyXG5cclxuaW1wb3J0IE51bWJlck1hc2sgZnJvbSAnYmJqLW1hc2tzL3NyYy9OdW1iZXJNYXNrJ1xyXG5cclxuY29uc3QgY291bnREZWNpbWFscyA9IHZhbHVlID0+IHtcclxuICBpZiAodmFsdWUgJSAxICE9IDApIHtcclxuICAgIGNvbnN0IHNwbGl0ID0gdmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnLicpXHJcbiAgICBpZiAoc3BsaXQubGVuZ3RoID09PSAyKSByZXR1cm4gc3BsaXRbMV0ubGVuZ3RoXHJcbiAgfVxyXG4gIHJldHVybiAwXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUaGUgYE51bWJlcklucHV0YCB3aWxsIHdyYXAgdGV4dCBpbnB1dHMgYW5kIGFwcGx5IHRoZSBnaXZlbiBbYmJqIE51bWJlciBtYXNrXShodHRwczovL2dpdGh1Yi5jb20vQmFzaXNIdWIvYmJqLW1hc2tzI251bWJlci1tYXNrcylcclxuICpcclxuICogKipPcHRpb25zKipcclxuICpcclxuICogX09wdGlvbnMgY2FuIGJlIHBhc3NlZCB2aWEgZGF0YSBhdHRyaWJ1dGVzIC4gRm9yIGRhdGEgYXR0cmlidXRlcywgYXBwZW5kIHRoZSBvcHRpb24gbmFtZSB0byBkYXRhLSwgYXMgaW4gZGF0YS1tYXNrX1xyXG4gKlxyXG4gKiB8IE9wdGlvbiAgICB8IERlZmF1bHQgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogfC0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XHJcbiAqIHwgbWFzayB8ICAgICAgICAgfCBUaGUgYmJqIG51bWJlciBtYXNrIEBzZWUgW0JCaiBOdW1iZXIgTWFza3NdKGh0dHBzOi8vZ2l0aHViLmNvbS9CYXNpc0h1Yi9iYmotbWFza3MjbnVtYmVyLW1hc2tzKSB8XHJcbiAqIHwgbWluIHwgICAgICAgICB8IFRoZSBtYXhpbXVtIHZhbHVlIHRvIGFjY2VwdCBmb3IgdGhpcyBpbnB1dHxcclxuICogfCBtYXggfCAgICAgICAgIHwgVGhlIG1pbmltdW0gdmFsdWUgdG8gYWNjZXB0IGZvciB0aGlzIGlucHV0fFxyXG4gKiB8IHN0ZXAgfCAgICAgICAgIHwgQSBzdGVwcGluZyBpbnRlcnZhbCB0byB1c2Ugd2hlbiB1c2luZyB1cCBhbmQgZG93biBhcnJvd3MgdG8gYWRqdXN0IHRoZSB2YWx1ZSwgYXMgd2VsbCBhcyBmb3IgdmFsaWRhdGlvbnxcclxuICogfGdyb3VwaW5nLXNlcGFyYXRvciB8ICwgfCBhIGNoYXIgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgZ3JvdXBpbmcgc2VwYXJhdG9yIHxcclxuICogfGRlY2ltYWwtc2VwYXJhdG9yIHwgLiB8IGEgY2hhciB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBkZWNpbWFsIHNlcGFyYXRvciB8XHJcbiAqIHxmb3JjZS10cmFpbGluZy16ZXJvcyB8IGZhbHNlIHwgQWZmZWN0cyB0aGUgb3V0cHV0IGJ5IHN3aXRjaGluZyB0aGUgd2F5IGEgbWFzayB3aXRoIFwiI1wiIGNoYXJhY3RlcnMgaW4gdGhlIHRyYWlsaW5nIHBvc2l0aW9ucyBpcyBmaWxsZWQuIGZvciBleGFtcGxlLCB0aGUgZnVuY3Rpb24gTnVtYmVyTWFzay5tYXNrKC4xMDpcIiMuIyNcIikgcmV0dXJucyAuMTAgaW5zdGVhZCBvZiAuMXxcclxuICpcclxuICogIDxicj5cclxuICpcclxuICogKipFeGFtcGxlIDoqKlxyXG4gKiBgYGBodG1sXHJcbiAqICA8aW5wdXQgY2xhc3M9XCJiYmotbnVtYmVyLW1hc2tlZFwiIG5hbWU9XCJ0ZXN0XCIgaWQ9XCJ0ZXN0XCIgdmFsdWU9XCIxMjM0XCIgZGF0YS1tYXNrPVwiIyMsIyMwXCI+XHJcbiAqXHJcbiAqICA8c2NyaXB0PlxyXG4gKiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24gKGUpIHtcclxuICogICAgICBuZXcgQmFzaXMuSW5wdXRNYXNraW5nLk51bWJlcklucHV0KHtcclxuICpcclxuICogICAgICAgICAvLyBAcGFyYW0ge1N0cmluZ30gdmFsdWVNYXNrZWQgIG1hc2tlZCB2YWx1ZVxyXG4gKiAgICAgICAgIC8vIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZVVubWFza2VkICBvcmlnaW5hbCB2YWx1ZVxyXG4gKiAgICAgICAgIC8vIEBwYXJhbSB7SFRNTElucHV0RWxlbWVudH0gaW5wdXQgdGhlIGFjdHVhbCBpbnB1dCBpbnN0YW5jZVxyXG4gKiAgICAgICAgIG9uVXBkYXRlOiAodmFsdWVNYXNrZWQsIHZhbHVlVW5tYXNrZWQsIGlucHV0LCBpc0FwcGxpZWQsIGlzSW5pdGlhbCkgPT4ge1xyXG4gKiAgICAgICAgICAgIC8vIGRvIHNvbWV0aGluZ1xyXG4gKiAgICAgICAgIH0sXHJcbiAqXHJcbiAqICAgICAgICAgLy8gQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBlcnJvciBsYXN0IG9jY3VycmVkIGVycm9yLiBjb3VsZCBiZSBtYXNrIGVycm9yIG9yIHZhbGlkYXRpb24gZXJyb3JcclxuICogICAgICAgICAvLyBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGlucHV0IHRoZSBhY3R1YWwgaW5wdXQgaW5zdGFuY2VcclxuICogICAgICAgICBvbkludmFsaWQ6IChlcnIgLCBpbnB1dCkgPT4ge1xyXG4gKiAgICAgICAgICAgIC8vIGRvIHNvbWV0aGluZ1xyXG4gKiAgICAgICAgIH1cclxuICogICAgICB9KVxyXG4gKiAgICB9KVxyXG4gKiAgPC9zY3JpcHQ+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxyXG4gKi9cclxuY2xhc3MgTnVtYmVySW5wdXQge1xyXG4gIC8qKlxyXG4gICAqIENvbnN0cnVjdCBuZXcgTnVtYmVySW5wdXRcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7P09iamVjdH0gb3B0aW9ucyAtIFRoZSBpbnB1dCBvcHRpb25zLlxyXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8U3RyaW5nfSBbb3B0aW9ucy5lbGVtZW50cz1cIi5iYmotbnVtYmVyLW1hc2tlZFwiXSAtIFRoZSBjbGFzcyBuYW1lIG9yIHRoZSBub2RlIHRvIHVzZVxyXG4gICAqIEBwYXJhbSB7SFRNTERvY3VtZW50fSBbb3B0aW9ucy5kb2N1bWVudD1kb2N1bWVudF0gLSBEb2N1bWVudCBpbnN0YW5jZSB0byB1c2VcclxuICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuY3NzQ2xhc3NFcnJvcj1cImJiai1tYXNrLWVycm9yXCJdIC0gQSBjc3MgY2xhc3MgdG8gYXR0YWNoIHRvIHRoZSBpbnB1dCB3aGVuIGl0IGlzIGludmFsaWRcclxuICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuY3NzQ2xhc3NTdWNjZXNzPVwiYmJqLW1hc2stc3VjY2Vzc1wiXSAtIEEgY3NzIGNsYXNzIHRvIGF0dGFjaCB0byB0aGUgaW5wdXQgd2hlbiBpdCBpcyB2YWxpZCBhZnRlciB0aGUgdXNlciBpbnRlcmFjdGlvblxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLm9uVXBkYXRlPW51bGxdIC0gQSBjYWxsYmFjayB0byBiZSBjYWxsZWQgb24gdGhlIG5ldyBtYXNrZWQgdmFsdWUgaXMgc2V0XHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMub25JbnZhbGlkPW51bGxdIC0gQSBjYWxsYmFjayB0byBiZSBjYWxsZWQgb24gdGhlIGlucHV0IG9yIHRoZSBtYXNrIGlzIGludmFsaWRcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcclxuICAgIHRoaXMub3B0aW9ucyA9IHtcclxuICAgICAgLi4ue1xyXG4gICAgICAgIGVsZW1lbnRzOiAnLmJiai1udW1iZXItbWFza2VkJyxcclxuICAgICAgICBkb2M6IGRvY3VtZW50LFxyXG4gICAgICAgIGNzc0NsYXNzRXJyb3I6ICdiYmotbWFzay1lcnJvcicsXHJcbiAgICAgICAgY3NzQ2xhc3NTdWNjZXNzOiAnYmJqLW1hc2stc3VjY2VzcycsXHJcbiAgICAgICAgb25VcGRhdGU6IG51bGwsXHJcbiAgICAgICAgb25JbnZhbGlkOiBudWxsLFxyXG4gICAgICB9LFxyXG4gICAgICAuLi5vcHRpb25zLFxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2FjdHVhbElucHV0SGFuZGxlciA9IHRoaXMuX2FjdHVhbElucHV0SGFuZGxlci5iaW5kKHRoaXMpXHJcbiAgICB0aGlzLl91bm1hc2tlZElucHV0SGFuZGxlciA9IHRoaXMuX3VubWFza2VkSW5wdXRIYW5kbGVyLmJpbmQodGhpcylcclxuICAgIHRoaXMucmVmcmVzaCgpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplIHRoZSBjb21wb25lbnQgYW5kIHdyYXAgdGhlIGlucHV0IGVsZW1lbnRzIGZvciBtYXNraW5nIGluIGNhc2VcclxuICAgKiB0aGV5IGFyZSBub3Qgd3JhcHBlZCB5ZXRcclxuICAgKi9cclxuICByZWZyZXNoKCkge1xyXG4gICAgY29uc3QgZWxlbWVudHMgPVxyXG4gICAgICB0eXBlb2YgdGhpcy5vcHRpb25zLmVsZW1lbnRzID09PSAnc3RyaW5nJ1xyXG4gICAgICAgID8gdGhpcy5vcHRpb25zLmRvYy5xdWVyeVNlbGVjdG9yQWxsKHRoaXMub3B0aW9ucy5lbGVtZW50cylcclxuICAgICAgICA6IHRoaXMub3B0aW9ucy5lbGVtZW50c1xyXG4gICAgbGV0IGlucHV0LCBwYXJlbnRDbGFzc1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaW5wdXQgPSBlbGVtZW50c1tpXVxyXG4gICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSB7XHJcbiAgICAgICAgcGFyZW50Q2xhc3MgPSBpbnB1dC5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZSgnY2xhc3MnKVxyXG5cclxuICAgICAgICBpZiAoIWlucHV0LmdldEF0dHJpYnV0ZSgnaWQnKSkge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgICBgQkJqTWFza2luZzogSW5wdXQgaGFzIG5vIElELiBXaXRob3V0IGFuIElEIHRoZSBpbnB1dCBjYW5ub3QgYmUgbWFza2VkYCxcclxuICAgICAgICAgICAgaW5wdXRcclxuICAgICAgICAgIClcclxuICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB3ZSBkb24ndCBpbml0aWFsaXplIHRoZSBpbnB1dCdzIHdyYXAgdHdpY2VcclxuICAgICAgICBjb25zdCBpc1dyYXBwZWQgPVxyXG4gICAgICAgICAgcGFyZW50Q2xhc3MgJiYgcGFyZW50Q2xhc3MuaW5kZXhPZignbnVtYmVySW5wdXRNYXNrX193cmFwJykgPiAtMVxyXG4gICAgICAgIHRoaXMuX3dyYXAoaW5wdXQsIGlzV3JhcHBlZClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBgQkJqTWFza2luZzogSW52YWxpZCBpbnB1dCBlbGVtZW50LiBUaGUgZWxlbWVudCB3aWxsIGJlIGlnbm9yZWRgLFxyXG4gICAgICAgICAgaW5wdXRcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVud3JhcCB0aGUgaW5wdXQgZWxlbWVudHMgYW5kIHJlbW92ZSBhdHRhY2hlZCBsaXN0ZW5lcnNcclxuICAgKi9cclxuICBkZXN0cm95KCkge1xyXG4gICAgY29uc3QgZWxlbWVudHMgPVxyXG4gICAgICB0eXBlb2YgdGhpcy5vcHRpb25zLmVsZW1lbnRzID09PSAnc3RyaW5nJ1xyXG4gICAgICAgID8gdGhpcy5vcHRpb25zLmRvYy5xdWVyeVNlbGVjdG9yQWxsKHRoaXMub3B0aW9ucy5lbGVtZW50cylcclxuICAgICAgICA6IHRoaXMub3B0aW9ucy5lbGVtZW50c1xyXG5cclxuICAgIGxldCBpbnB1dCwgcGFyZW50LCBwYXJlbnRDbGFzc1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaW5wdXQgPSBlbGVtZW50c1tpXVxyXG4gICAgICBwYXJlbnQgPSBpbnB1dC5wYXJlbnROb2RlXHJcbiAgICAgIHBhcmVudENsYXNzID0gcGFyZW50LmdldEF0dHJpYnV0ZSgnY2xhc3MnKVxyXG5cclxuICAgICAgaWYgKHBhcmVudENsYXNzICYmIHBhcmVudENsYXNzLmluZGV4T2YoJ251bWJlcklucHV0TWFza19fd3JhcCcpID4gLTEpIHtcclxuICAgICAgICB0aGlzLl91bndyYXAocGFyZW50KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgdGhlIG51bWJlciBtYXNraW5nIGlucHV0IHdyYXBwZXJcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7SFRNTElucHV0RWxlbWVudH0gYWN0dWFsSW5wdXQgdGhlIGlucHV0IGVsZW1lbnRcclxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IGlzV3JhcHBlZCB3aGVuIHRydWUgdGhlIGlucHV0IGlzIGFscmVhZHkgd3JhcHBlZCBhbmQgd2UgbmVlZCB0byBhZGQgd2hhdCBpc1xyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pc3Npbmcgb25seVxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0hUTUxTcGFuRWxlbWVudH0gd3JhcHBlciBpbnN0YW5jZVxyXG4gICAqXHJcbiAgICogQHByb3RlY3RlZFxyXG4gICAqL1xyXG4gIF93cmFwKGFjdHVhbElucHV0LCBpc1dyYXBwZWQpIHtcclxuICAgIGNvbnN0IGFjdHVhbElucHV0SWQgPSBhY3R1YWxJbnB1dC5nZXRBdHRyaWJ1dGUoJ2lkJyksXHJcbiAgICAgIGFjdHVhbElucHV0TmFtZSA9IGFjdHVhbElucHV0LmdldEF0dHJpYnV0ZSgnbmFtZScpLFxyXG4gICAgICBhY3R1YWxJbnB1dFN0ZXAgPSBhY3R1YWxJbnB1dC5kYXRhc2V0LnN0ZXAgfHwgbnVsbCxcclxuICAgICAgYWN0dWFsSW5wdXRNYXggPSBhY3R1YWxJbnB1dC5kYXRhc2V0Lm1heCB8fCBudWxsLFxyXG4gICAgICBhY3R1YWxJbnB1dE1pbiA9IGFjdHVhbElucHV0LmRhdGFzZXQubWluIHx8IG51bGwsXHJcbiAgICAgIGFjdHVhbElucHV0R3JvdXBpbmdTZXBhcmF0b3IgPVxyXG4gICAgICAgIGFjdHVhbElucHV0LmRhdGFzZXQuZ3JvdXBpbmdTZXBhcmF0b3IgfHwgJywnLFxyXG4gICAgICBhY3R1YWxJbnB1dERlY2ltYWxTZXBhcmF0b3IgPSBhY3R1YWxJbnB1dC5kYXRhc2V0LmRlY2ltYWxTZXBhcmF0b3IgfHwgJy4nLFxyXG4gICAgICBhY3R1YWxJbnB1dEZvcmNlVHJhaWxpbmdaZXJvcyA9XHJcbiAgICAgICAgYWN0dWFsSW5wdXQuZGF0YXNldC5mb3JjZVRyYWlsaW5nWmVyb3MgfHwgbnVsbCxcclxuICAgICAgYWN0dWFsSW5wdXRNYXNrID0gYWN0dWFsSW5wdXQuZGF0YXNldC5tYXNrIHx8ICcnLFxyXG4gICAgICBhY3R1YWxJbnB1dENsYXNzZXMgPSBhY3R1YWxJbnB1dC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJyksXHJcbiAgICAgIGFjdHVhbElucHV0UmVxdWlyZWQgPSBhY3R1YWxJbnB1dC5nZXRBdHRyaWJ1dGUoJ3JlcXVpcmVkJykgfHwgbnVsbFxyXG5cclxuICAgIGxldCB3cmFwID0gbnVsbCxcclxuICAgICAgdW5tYXNrZWRJbnB1dCA9IG51bGxcclxuXHJcbiAgICBpZiAoIWlzV3JhcHBlZCkge1xyXG4gICAgICB3cmFwID0gdGhpcy5vcHRpb25zLmRvYy5jcmVhdGVFbGVtZW50KCdzcGFuJylcclxuICAgICAgdW5tYXNrZWRJbnB1dCA9IHRoaXMub3B0aW9ucy5kb2MuY3JlYXRlRWxlbWVudCgnaW5wdXQnKSAvLyBoaWRkZW4gaW5wdXQgd2l0aCB0aGUgdW5tYXNrZWQgdmFsdWVzIGZvciBmb3Jtc1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgd3JhcCA9IGFjdHVhbElucHV0LnBhcmVudE5vZGVcclxuICAgICAgdW5tYXNrZWRJbnB1dCA9IHdyYXAucXVlcnlTZWxlY3RvcignLm51bWJlcklucHV0TWFza19fdW5tYXNrZWRJbnB1dCcpXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY29uZmlndXJlIHRoZSBhY3R1YWwgaW5wdXRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBpZiAoIWlzV3JhcHBlZCkge1xyXG4gICAgICBhY3R1YWxJbnB1dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh3cmFwLCBhY3R1YWxJbnB1dCkgLy8gbW92ZSB0aGUgaW5wdXQgb3V0c2lkZSB0aGUgd3JhcHBlclxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIShcclxuICAgICAgICAgIGFjdHVhbElucHV0Lmhhc0F0dHJpYnV0ZSgncmVhZG9ubHknKSB8fFxyXG4gICAgICAgICAgYWN0dWFsSW5wdXQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpXHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICBhY3R1YWxJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX2FjdHVhbElucHV0SGFuZGxlcilcclxuICAgICAgICBhY3R1YWxJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c2luJywgdGhpcy5fYWN0dWFsSW5wdXRIYW5kbGVyKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWN0dWFsSW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkID0gYWN0dWFsSW5wdXQudmFsdWUgfHwgMFxyXG4gICAgYWN0dWFsSW5wdXQuZGF0YXNldC5ncm91cGluZ1NlcGFyYXRvciA9IGFjdHVhbElucHV0R3JvdXBpbmdTZXBhcmF0b3JcclxuICAgIGFjdHVhbElucHV0LmRhdGFzZXQuZGVjaW1hbFNlcGFyYXRvciA9IGFjdHVhbElucHV0RGVjaW1hbFNlcGFyYXRvclxyXG4gICAgYWN0dWFsSW5wdXQuZGF0YXNldC5mb3JjZVRyYWlsaW5nWmVyb3MgPSBhY3R1YWxJbnB1dEZvcmNlVHJhaWxpbmdaZXJvc1xyXG4gICAgYWN0dWFsSW5wdXQudmFsdWUgPSBOdW1iZXJNYXNrLm1hc2soXHJcbiAgICAgIGFjdHVhbElucHV0LmRhdGFzZXQudmFsdWVVbm1hc2tlZCxcclxuICAgICAgYWN0dWFsSW5wdXRNYXNrLFxyXG4gICAgICBhY3R1YWxJbnB1dEdyb3VwaW5nU2VwYXJhdG9yLFxyXG4gICAgICBhY3R1YWxJbnB1dERlY2ltYWxTZXBhcmF0b3IsXHJcbiAgICAgIGFjdHVhbElucHV0Rm9yY2VUcmFpbGluZ1plcm9zXHJcbiAgICApLnRyaW0oKVxyXG4gICAgYWN0dWFsSW5wdXQuY2xhc3NMaXN0LmFkZChcclxuICAgICAgJ251bWJlcklucHV0TWFza19fdGV4dElucHV0JyxcclxuICAgICAgdGhpcy5vcHRpb25zLmNzc0NsYXNzU3VjY2Vzc1xyXG4gICAgKVxyXG5cclxuICAgIC8vIGNvbmZpZ3VyZSB0aGUgdW5tYXNrZWQgaW5wdXRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIHVubWFza2VkSW5wdXQudmFsdWUgPSBhY3R1YWxJbnB1dC5kYXRhc2V0LnZhbHVlVW5tYXNrZWRcclxuICAgIHVubWFza2VkSW5wdXQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJylcclxuICAgIHVubWFza2VkSW5wdXQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ2hpZGRlbicpXHJcbiAgICB1bm1hc2tlZElucHV0LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBhY3R1YWxJbnB1dENsYXNzZXMpXHJcbiAgICBpZiAoYWN0dWFsSW5wdXRJZClcclxuICAgICAgdW5tYXNrZWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ2lkJywgYCR7YWN0dWFsSW5wdXRJZH0tdW5tYXNrZWRgKVxyXG4gICAgaWYgKGFjdHVhbElucHV0TmFtZSlcclxuICAgICAgdW5tYXNrZWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ25hbWUnLCBgJHthY3R1YWxJbnB1dE5hbWV9LXVubWFza2VkYClcclxuICAgIGlmIChhY3R1YWxJbnB1dFJlcXVpcmVkKSB1bm1hc2tlZElucHV0LnNldEF0dHJpYnV0ZSgncmVxdWlyZWQnLCAncmVxdWlyZWQnKVxyXG5cclxuICAgIGlmIChhY3R1YWxJbnB1dFN0ZXApIHVubWFza2VkSW5wdXQuc2V0QXR0cmlidXRlKCdzdGVwJywgYWN0dWFsSW5wdXRTdGVwKVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnN0IGRlY2ltYWxzID0gY291bnREZWNpbWFscyh1bm1hc2tlZElucHV0LnZhbHVlKVxyXG4gICAgICBsZXQgc3RlcCA9ICcxJ1xyXG4gICAgICBpZiAoZGVjaW1hbHMgPiAwKSB7XHJcbiAgICAgICAgc3RlcCA9IGAuJHtBcnJheShkZWNpbWFscykuam9pbignMCcpfTFgXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHVubWFza2VkSW5wdXQuc2V0QXR0cmlidXRlKCdzdGVwJywgc3RlcClcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYWN0dWFsSW5wdXRNaW4pIHVubWFza2VkSW5wdXQuc2V0QXR0cmlidXRlKCdtaW4nLCBhY3R1YWxJbnB1dE1pbilcclxuICAgIGlmIChhY3R1YWxJbnB1dE1heCkgdW5tYXNrZWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ21heCcsIGFjdHVhbElucHV0TWF4KVxyXG4gICAgdW5tYXNrZWRJbnB1dC5kYXRhc2V0LmlucHV0SWQgPSBhY3R1YWxJbnB1dElkXHJcbiAgICB1bm1hc2tlZElucHV0LmRhdGFzZXQubWFzayA9IGFjdHVhbElucHV0TWFza1xyXG4gICAgdW5tYXNrZWRJbnB1dC5kYXRhc2V0Lmdyb3VwaW5nU2VwYXJhdG9yID0gYWN0dWFsSW5wdXRHcm91cGluZ1NlcGFyYXRvclxyXG4gICAgdW5tYXNrZWRJbnB1dC5kYXRhc2V0LmRlY2ltYWxTZXBhcmF0b3IgPSBhY3R1YWxJbnB1dERlY2ltYWxTZXBhcmF0b3JcclxuICAgIGlmIChhY3R1YWxJbnB1dEZvcmNlVHJhaWxpbmdaZXJvcylcclxuICAgICAgdW5tYXNrZWRJbnB1dC5kYXRhc2V0LmZvcmNlVHJhaWxpbmdaZXJvcyA9IGFjdHVhbElucHV0Rm9yY2VUcmFpbGluZ1plcm9zXHJcblxyXG4gICAgaWYgKCFpc1dyYXBwZWQpIHtcclxuICAgICAgdW5tYXNrZWRJbnB1dC5jbGFzc0xpc3QuYWRkKCdudW1iZXJJbnB1dE1hc2tfX3VubWFza2VkSW5wdXQnKVxyXG4gICAgICB1bm1hc2tlZElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl91bm1hc2tlZElucHV0SGFuZGxlcilcclxuICAgICAgdW5tYXNrZWRJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX3VubWFza2VkSW5wdXRIYW5kbGVyKVxyXG4gICAgICB1bm1hc2tlZElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgdGhpcy5fdW5tYXNrZWRJbnB1dEhhbmRsZXIpXHJcblxyXG4gICAgICAvLyBjb25maWd1cmUgdGhlIHdyYXBwZXJcclxuICAgICAgd3JhcC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ251bWJlcklucHV0TWFza19fd3JhcCcpXHJcbiAgICAgIHdyYXAuYXBwZW5kQ2hpbGQodW5tYXNrZWRJbnB1dClcclxuICAgICAgd3JhcC5hcHBlbmRDaGlsZChhY3R1YWxJbnB1dClcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWlzTmFOKE51bWJlcihhY3R1YWxJbnB1dC5kYXRhc2V0LnZhbHVlVW5tYXNrZWQpKSkge1xyXG4gICAgICBpZiAodGhpcy5fdmFsaWRhdGVJbnB1dCh1bm1hc2tlZElucHV0LCBhY3R1YWxJbnB1dCkpIHtcclxuICAgICAgICB0aGlzLl9fZmlyZU9uVXBkYXRlKFxyXG4gICAgICAgICAgYWN0dWFsSW5wdXQudmFsdWUsXHJcbiAgICAgICAgICBhY3R1YWxJbnB1dC5kYXRhc2V0LnZhbHVlVW5tYXNrZWQsXHJcbiAgICAgICAgICBhY3R1YWxJbnB1dFxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYWN0dWFsSW5wdXQuY2xhc3NMaXN0LmFkZCh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NFcnJvcilcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gd3JhcFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVW53cmFwIHRoZSBtYXNrZWQgaW5wdXQgYW5kIHJlbW92ZSB0aGUgdmFsdWUgY2hhbmdlZCBsaXN0ZW5lclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtIVE1MU3BhbkVsZW1lbnR9IHdyYXBwZXIgdGhlIHdyYXBwZXIgc3BhbiBpbnN0YW5jZVxyXG4gICAqXHJcbiAgICogQHByb3RlY3RlZFxyXG4gICAqL1xyXG4gIF91bndyYXAod3JhcHBlcikge1xyXG4gICAgY29uc3QgYWN0dWFsSW5wdXQgPSB3cmFwcGVyLnF1ZXJ5U2VsZWN0b3IoJy5udW1iZXJJbnB1dE1hc2tfX3RleHRJbnB1dCcpLFxyXG4gICAgICBhY3R1YWxJbnB1dElkID0gYWN0dWFsSW5wdXQuaWQsXHJcbiAgICAgIHVubWFza2VkSW5wdXQgPSB3cmFwcGVyLnF1ZXJ5U2VsZWN0b3IoYCMke2FjdHVhbElucHV0SWR9LXVubWFza2VkYClcclxuXHJcbiAgICB1bm1hc2tlZElucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5fdW5tYXNrZWRJbnB1dEhhbmRsZXIpXHJcbiAgICB1bm1hc2tlZElucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXByZXNzJywgdGhpcy5fdW5tYXNrZWRJbnB1dEhhbmRsZXIpXHJcbiAgICB1bm1hc2tlZElucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgdGhpcy5fdW5tYXNrZWRJbnB1dEhhbmRsZXIpXHJcblxyXG4gICAgd3JhcHBlci5yZW1vdmVDaGlsZCh1bm1hc2tlZElucHV0KVxyXG5cclxuICAgIGFjdHVhbElucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fYWN0dWFsSW5wdXRIYW5kbGVyKVxyXG4gICAgYWN0dWFsSW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsIHRoaXMuX2FjdHVhbElucHV0SGFuZGxlcilcclxuICAgIGFjdHVhbElucHV0LmNsYXNzTGlzdC5yZW1vdmUoJ251bWJlcklucHV0TWFza19fdGV4dElucHV0JylcclxuICAgIGFjdHVhbElucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICBhY3R1YWxJbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3MpXHJcbiAgICBkZWxldGUgYWN0dWFsSW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkXHJcblxyXG4gICAgd3JhcHBlci5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhY3R1YWxJbnB1dCwgd3JhcHBlcilcclxuICAgIHdyYXBwZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh3cmFwcGVyKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuIHRvIGNsaWNrIGFuZCBmb2N1c2luIGV2ZW50IG9uIHRoZSBhY3R1YWwgaW5wdXQgYW5kIHRvZ2dsZSB0aGUgbnVtYmVyIGlucHV0XHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0V2ZW50fSBlXHJcbiAgICpcclxuICAgKiBAcHJvdGVjdGVkXHJcbiAgICovXHJcbiAgX2FjdHVhbElucHV0SGFuZGxlcihlKSB7XHJcbiAgICBjb25zdCBhY3R1YWxJbnB1dCA9IGUudGFyZ2V0LFxyXG4gICAgICBhY3R1YWxJbnB1dElkID0gYWN0dWFsSW5wdXQuaWQsXHJcbiAgICAgIHVubWFza2VkSW5wdXQgPSB0aGlzLm9wdGlvbnMuZG9jLnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgYCMke2FjdHVhbElucHV0SWR9LXVubWFza2VkYFxyXG4gICAgICApXHJcblxyXG4gICAgYWN0dWFsSW5wdXQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJylcclxuICAgIGFjdHVhbElucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICdoaWRkZW4nKVxyXG5cclxuICAgIHVubWFza2VkSW5wdXQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpXHJcbiAgICB1bm1hc2tlZElucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICdudW1iZXInKVxyXG4gICAgdGhpcy5fdmFsaWRhdGVJbnB1dCh1bm1hc2tlZElucHV0LCBhY3R1YWxJbnB1dClcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB1bm1hc2tlZElucHV0LmZvY3VzKClcclxuICAgICAgY29uc3QgbGVuZ3RoID0gU3RyaW5nKHVubWFza2VkSW5wdXQudmFsdWUpLmxlbmd0aFxyXG4gICAgICB1bm1hc2tlZElucHV0LnR5cGUgPSAndGV4dCdcclxuICAgICAgdW5tYXNrZWRJbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShsZW5ndGgsIGxlbmd0aClcclxuICAgICAgdW5tYXNrZWRJbnB1dC50eXBlID0gJ251bWJlcidcclxuICAgIH0sIDApXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMaXN0ZW4gdG8gdGhlIHVubWFza2VkIGlucHV0IGtleWRvd24gYW5kIGZvY3Vzb3V0IGV2ZW50cyBhbmQgY2hlY2tcclxuICAgKiBpZiB0aGUgaW5wdXQgdmFsdWUgY2FuIGJlIG1hc2tlZCBvciBub3RcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RXZlbnR9IGVcclxuICAgKlxyXG4gICAqIEBwcm90ZWN0ZWRcclxuICAgKi9cclxuICBfdW5tYXNrZWRJbnB1dEhhbmRsZXIoZSkge1xyXG4gICAgY29uc3QgdW5tYXNrZWRJbnB1dCA9IGUudGFyZ2V0LFxyXG4gICAgICBrZXlDb2RlID0gZS5rZXlDb2RlLFxyXG4gICAgICBtYXNrID0gdW5tYXNrZWRJbnB1dC5kYXRhc2V0Lm1hc2ssXHJcbiAgICAgIGdyb3VwaW5nU2VwYXJhdG9yID0gdW5tYXNrZWRJbnB1dC5kYXRhc2V0Lmdyb3VwaW5nU2VwYXJhdG9yLFxyXG4gICAgICBkZWNpbWFsU2VwYXJhdG9yID0gdW5tYXNrZWRJbnB1dC5kYXRhc2V0LmRlY2ltYWxTZXBhcmF0b3IsXHJcbiAgICAgIGZvcmNlVHJhaWxpbmdaZXJvcyA9IHVubWFza2VkSW5wdXQuZGF0YXNldC5mb3JjZVRyYWlsaW5nWmVyb3MsXHJcbiAgICAgIGFjdHVhbElucHV0SWQgPSB1bm1hc2tlZElucHV0LmRhdGFzZXQuaW5wdXRJZCxcclxuICAgICAgYWN0dWFsSW5wdXQgPSB0aGlzLm9wdGlvbnMuZG9jLnF1ZXJ5U2VsZWN0b3IoYCMke2FjdHVhbElucHV0SWR9YClcclxuXHJcbiAgICBsZXQgcmVzdG9yZSA9IGZhbHNlLFxyXG4gICAgICBhcHBseSA9IGZhbHNlLFxyXG4gICAgICBtYXNrZWRWYWx1ZSA9IGZhbHNlLFxyXG4gICAgICBpc1ZhbGlkID0gdGhpcy5fdmFsaWRhdGVJbnB1dCh1bm1hc2tlZElucHV0LCBhY3R1YWxJbnB1dClcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBtYXNrZWRWYWx1ZSA9IE51bWJlck1hc2subWFzayhcclxuICAgICAgICB1bm1hc2tlZElucHV0LnZhbHVlIHx8IDAsXHJcbiAgICAgICAgbWFzayxcclxuICAgICAgICBncm91cGluZ1NlcGFyYXRvcixcclxuICAgICAgICBkZWNpbWFsU2VwYXJhdG9yLFxyXG4gICAgICAgIGZvcmNlVHJhaWxpbmdaZXJvcyxcclxuICAgICAgICBmYWxzZVxyXG4gICAgICApLnRyaW0oKVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBtYXNrZWRWYWx1ZSA9IGZhbHNlXHJcbiAgICAgIHRoaXMuX19hcHBseUNzc0NsYXNzU3RhdGUodW5tYXNrZWRJbnB1dCwgYWN0dWFsSW5wdXQsICdlcnJvcicpXHJcbiAgICAgIHRoaXMuX19maXJlT25JbnZhbGlkKGUsIGFjdHVhbElucHV0KVxyXG4gICAgfVxyXG5cclxuICAgIHJlc3RvcmUgPSBbMTMsIDI3XS5pbmRleE9mKGtleUNvZGUpID4gLTEgfHwgZS50eXBlID09PSAnZm9jdXNvdXQnXHJcbiAgICBhcHBseSA9IG1hc2tlZFZhbHVlICYmIGlzVmFsaWRcclxuXHJcbiAgICBpZiAocmVzdG9yZSkge1xyXG4gICAgICB1bm1hc2tlZElucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICAgIHVubWFza2VkSW5wdXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NTdWNjZXNzKVxyXG5cclxuICAgICAgdW5tYXNrZWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKVxyXG4gICAgICB1bm1hc2tlZElucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICdoaWRkZW4nKVxyXG5cclxuICAgICAgYWN0dWFsSW5wdXQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpXHJcbiAgICAgIGFjdHVhbElucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0JylcclxuXHJcbiAgICAgIGFjdHVhbElucHV0LmNsYXNzTGlzdC5hZGQodGhpcy5vcHRpb25zLmNzc0NsYXNzU3VjY2VzcylcclxuXHJcbiAgICAgIGlmIChhcHBseSkge1xyXG4gICAgICAgIGFjdHVhbElucHV0LnZhbHVlID0gbWFza2VkVmFsdWVcclxuICAgICAgICBhY3R1YWxJbnB1dC5kYXRhc2V0LnZhbHVlVW5tYXNrZWQgPSB1bm1hc2tlZElucHV0LnZhbHVlXHJcbiAgICAgICAgdGhpcy5fX2ZpcmVPblVwZGF0ZShtYXNrZWRWYWx1ZSwgdW5tYXNrZWRJbnB1dC52YWx1ZSwgYWN0dWFsSW5wdXQpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdW5tYXNrZWRJbnB1dC52YWx1ZSA9IGFjdHVhbElucHV0LmRhdGFzZXQudmFsdWVVbm1hc2tlZFxyXG4gICAgICAgIHRoaXMuX19hcHBseUNzc0NsYXNzU3RhdGUodW5tYXNrZWRJbnB1dCwgYWN0dWFsSW5wdXQsICdzdWNjZXNzJylcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJpZ2dlciBgY2hlY2tWYWxpZGl0eWAgb24gdGhlIGlucHV0XHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IHVubWFza2VkSW5wdXRcclxuICAgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGFjdHVhbElucHV0XHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSB3aGVuIHZhbGlkICwgZmFsc2Ugb3RoZXJ3aXNlXHJcbiAgICpcclxuICAgKiBAcHJvdGVjdGVkXHJcbiAgICovXHJcbiAgX3ZhbGlkYXRlSW5wdXQodW5tYXNrZWRJbnB1dCwgYWN0dWFsSW5wdXQpIHtcclxuICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxyXG4gICAgY29uc3QgdmFsdWUgPSBOdW1iZXIodW5tYXNrZWRJbnB1dC52YWx1ZSlcclxuICAgIGlmICh1bm1hc2tlZElucHV0LmdldEF0dHJpYnV0ZSgndHlwZScpID09PSAnaGlkZGVuJyAmJiAhaXNOYU4odmFsdWUpKSB7XHJcbiAgICAgIGNvbnN0IG1heCA9IHVubWFza2VkSW5wdXQuZ2V0QXR0cmlidXRlKCdtYXgnKVxyXG4gICAgICBjb25zdCBtaW4gPSB1bm1hc2tlZElucHV0LmdldEF0dHJpYnV0ZSgnbWluJylcclxuICAgICAgY29uc3Qgc3RlcCA9IHVubWFza2VkSW5wdXQuZ2V0QXR0cmlidXRlKCdzdGVwJylcclxuXHJcbiAgICAgIGlmIChtaW4pIGlzVmFsaWQgPSBpc1ZhbGlkICYmIHZhbHVlID49IE51bWJlcihtaW4pXHJcbiAgICAgIGlmIChtYXgpIGlzVmFsaWQgPSBpc1ZhbGlkICYmIHZhbHVlIDw9IE51bWJlcihtYXgpXHJcblxyXG4gICAgICBpZiAoc3RlcClcclxuICAgICAgICBpc1ZhbGlkID1cclxuICAgICAgICAgIGlzVmFsaWQgJiYgY291bnREZWNpbWFscyhzdGVwKSA9PT0gY291bnREZWNpbWFscyh1bm1hc2tlZElucHV0LnZhbHVlKVxyXG4gICAgfSBlbHNlIGlzVmFsaWQgPSB1bm1hc2tlZElucHV0LmNoZWNrVmFsaWRpdHkoKVxyXG5cclxuICAgIGlmIChpc1ZhbGlkKSB7XHJcbiAgICAgIHRoaXMuX19hcHBseUNzc0NsYXNzU3RhdGUodW5tYXNrZWRJbnB1dCwgYWN0dWFsSW5wdXQsICdzdWNjZXNzJylcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX19hcHBseUNzc0NsYXNzU3RhdGUodW5tYXNrZWRJbnB1dCwgYWN0dWFsSW5wdXQsICdlcnJvcicpXHJcbiAgICAgIHRoaXMuX19maXJlT25JbnZhbGlkKFxyXG4gICAgICAgIHVubWFza2VkSW5wdXQudmFsaWRhdGlvbk1lc3NhZ2UgfHwgJ1ZhbGlkaXR5IGNoZWNrIGZhaWxzJyxcclxuICAgICAgICBhY3R1YWxJbnB1dFxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGlzVmFsaWRcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZU1hc2tlZCAgbWFza2VkIHZhbHVlXHJcbiAgICogQHBhcmFtIHtOdW1iZXJ9IHZhbHVlVW5tYXNrZWQgIG9yaWdpbmFsIHZhbHVlXHJcbiAgICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBpbnB1dCB0aGUgYWN0dWFsIGlucHV0IGluc3RhbmNlXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9fZmlyZU9uVXBkYXRlKHZhbHVlTWFza2VkLCB2YWx1ZVVubWFza2VkLCBpbnB1dCkge1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5vblVwZGF0ZSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMub25VcGRhdGUodmFsdWVNYXNrZWQsIHZhbHVlVW5tYXNrZWQsIGlucHV0KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBlcnJvciBsYXN0IG9jY3VycmVkIGVycm9yLiBjb3VsZCBiZSBtYXNrIGVycm9yIG9yIHZhbGlkYXRpb24gZXJyb3JcclxuICAgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGlucHV0IHRoZSBhY3R1YWwgaW5wdXQgaW5zdGFuY2VcclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX19maXJlT25JbnZhbGlkKGVycm9yLCBpbnB1dCkge1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5vbkludmFsaWQpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLm9uSW52YWxpZChlcnJvciwgaW5wdXQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9fYXBwbHlDc3NDbGFzc1N0YXRlKHVubWFza2VkSW5wdXQsIGFjdHVhbElucHV0LCBzdGF0ZSkge1xyXG4gICAgaWYgKFxyXG4gICAgICBhY3R1YWxJbnB1dC5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykgfHxcclxuICAgICAgYWN0dWFsSW5wdXQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpXHJcbiAgICApIHtcclxuICAgICAgYWN0dWFsSW5wdXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NFcnJvcilcclxuICAgICAgYWN0dWFsSW5wdXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NTdWNjZXNzKVxyXG5cclxuICAgICAgdW5tYXNrZWRJbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc0Vycm9yKVxyXG4gICAgICB1bm1hc2tlZElucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzU3VjY2VzcylcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChzdGF0ZSA9PT0gJ3N1Y2Nlc3MnKSB7XHJcbiAgICAgICAgYWN0dWFsSW5wdXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NFcnJvcilcclxuICAgICAgICBhY3R1YWxJbnB1dC5jbGFzc0xpc3QuYWRkKHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3MpXHJcblxyXG4gICAgICAgIHVubWFza2VkSW5wdXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NFcnJvcilcclxuICAgICAgICB1bm1hc2tlZElucHV0LmNsYXNzTGlzdC5hZGQodGhpcy5vcHRpb25zLmNzc0NsYXNzU3VjY2VzcylcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHN0YXRlID09PSAnZXJyb3InKSB7XHJcbiAgICAgICAgYWN0dWFsSW5wdXQuY2xhc3NMaXN0LmFkZCh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NFcnJvcilcclxuICAgICAgICBhY3R1YWxJbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3MpXHJcblxyXG4gICAgICAgIHVubWFza2VkSW5wdXQuY2xhc3NMaXN0LmFkZCh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NFcnJvcilcclxuICAgICAgICB1bm1hc2tlZElucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzU3VjY2VzcylcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTnVtYmVySW5wdXRcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL051bWJlcklucHV0L051bWJlcklucHV0LmpzIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzdfXztcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCB7XCJjb21tb25qc1wiOlwiYmJqLW1hc2tzL3NyYy9OdW1iZXJNYXNrXCIsXCJjb21tb25qczJcIjpcImJiai1tYXNrcy9zcmMvTnVtYmVyTWFza1wiLFwiYW1kXCI6XCJiYmotbWFza3Mvc3JjL051bWJlck1hc2tcIixcInJvb3RcIjpbXCJCQmpcIixcIk1hc2tzXCIsXCJOdW1iZXJNYXNrXCJdfVxuLy8gbW9kdWxlIGlkID0gN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYmotbWFza3MgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5jb25zdCBpc051bWJlclJlZ2V4ID0gL15cXGQrJC9cbmNvbnN0IGlzV2hpdGVzcGFjZVJlZ2V4ID0gL1xccy9cbmNvbnN0IHB1bmN0dWF0aW9uTGlzdCA9ICchXCIjJCUmXFwnKCkqKywtLi86Ozw9Pj9AW11eX2B7fH1+J1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBnaXZlbiBzdHJpbmcgaXMgaW4gbG93ZXIgY2FzZVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqL1xuY29uc3QgaXNMb3dlckNhc2UgPSBzdHIgPT4ge1xuICByZXR1cm4gc3RyID09IHN0ci50b0xvd2VyQ2FzZSgpICYmIHN0ciAhPSBzdHIudG9VcHBlckNhc2UoKVxufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBnaXZlbiBzdHJpbmcgaXMgaW4gdXBwZXIgY2FzZVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqL1xuY29uc3QgaXNVcHBlckNhc2UgPSBzdHIgPT4ge1xuICByZXR1cm4gc3RyID09IHN0ci50b1VwcGVyQ2FzZSgpICYmIHN0ciAhPSBzdHIudG9Mb3dlckNhc2UoKVxufVxuXG5jb25zdCBwYXNzT3JUaHJvd0Vycm9yID0gKGxvb3NlLCByZXQsIGksIHN0cikgPT4ge1xuICBpZiAoIWxvb3NlKSB7XG4gICAgY29uc3QgY2hhciA9IHN0ci5jaGFyQXQoaSlcbiAgICBjb25zdCBwb3MgPSBpICsgMVxuICAgIHRocm93IHtcbiAgICAgIG5hbWU6ICdTdHJpbmdNYXNrRXJyb3InLFxuICAgICAgbWVzc2FnZTogYFN0cmluZ01hc2tFcnJvcjogZXJyb3IgYXBwbHlpbmcgbWFzayBhdCBwb3NpdGlvbiBcIiR7cG9zfVwiICwgY2hhciBcIiR7Y2hhcn1cImAsXG4gICAgICBwb3MsXG4gICAgICBjaGFyXG4gICAgfVxuICB9IGVsc2UgcmV0W2ldID0gJyAnXG59XG5cbi8qKlxuICogTnVtYmVyTWFza1xuICpcbiAqIEEgamF2YXNjcmlwdCBpbXBsZW1lbnRhdGlvbiBmb3IgQkJqIG51bWJlcnMgbWFza2luZ1xuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cbmNsYXNzIFN0cmluZ01hc2sge1xuICAvKipcbiAgICogTWFzayB0aGUgZ2l2ZW4gc3RyaW5nIHdpdGggdGhlIGdpdmVuIG1hc2sgYWNjb3JkaW5nIHRvIEJCaiBydWxlc1xuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gc3RyIHRoZSBzdHJpbmcgdG8gbWFza1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbWFzayB0aGUgbWFzayB0byB1c2UgZm9yIGZvcm1hdHRpbmdcbiAgICogQHBhcmFtIHtCb29sZWFufSBbbG9vc2U9dHJ1ZV0gd2hlbiB0cnVlICwgZXJyb3JzIHdpbGwgYmUgaWdub3JlZCBhbmQgdGhlIG1ldGhvZCB3aWxsIHRyeSBhdCBhcHBseSB0aGUgbWFza1xuICAgKiAgICAgICAgICAgICAgICBhbnl3YXkgLCBvdGhlcndpc2UgaXQgd2lsbCBzdG9wIGF0IGZpcnN0IGVycm9yIGFuZCB0aHJvdyBpdC5cbiAgICogXG4gICAqIEB0aHJvd3Mge01hc2tJc1Rvb1Nob3J0RXJyb3J9XG4gICAqIEB0aHJvd3Mge1N0cmluZ01hc2tFcnJvcn1cbiAgICogQHRocm93cyB7TWFza0Vycm9yfVxuICAgKiBcbiAgICogQHJldHVybnMge1N0cmluZ30gdGhlIG1hc2tlZCBzdHJpbmdcbiAgICovXG4gIHN0YXRpYyBtYXNrKHN0ciwgbWFzaywgbG9vc2UgPSB0cnVlKSB7XG4gICAgc3RyID0gU3RyaW5nKHN0cilcbiAgICBtYXNrID0gU3RyaW5nKG1hc2spXG4gICAgY29uc3QgbWFza0xlbiA9IG1hc2subGVuZ3RoXG4gICAgY29uc3Qgc3RyTGVuID0gc3RyLmxlbmd0aFxuXG4gICAgaWYgKHN0ckxlbiA+IG1hc2tMZW4pIHtcbiAgICAgIGlmIChsb29zZSkgcmV0dXJuIHN0clxuICAgICAgLy8gZnJpZW5kbHkgc2lsZW50IGZhaWxcbiAgICAgIGVsc2VcbiAgICAgICAgdGhyb3cge1xuICAgICAgICAgIG5hbWU6ICdNYXNrSXNUb29TaG9ydEVycm9yJyxcbiAgICAgICAgICBtZXNzYWdlOiBgTWFza0lzVG9vU2hvcnRFcnJvcjogTWFzayBpcyBzaG9ydGVyIHRoYW4gdGhlIHBhc3NlZCBzdHJpbmdgXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXQgPSBuZXcgQXJyYXkobWFza0xlbilcbiAgICBsZXQgcG9zID0gMCAvLyB0byBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBzdHJcbiAgICBsZXQgbWFza0J5dGUgPSAnJ1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXNrTGVuOyBpKyspIHtcbiAgICAgIG1hc2tCeXRlID0gbWFzay5jaGFyQXQoaSlcbiAgICAgIHN3aXRjaCAobWFza0J5dGUpIHtcbiAgICAgICAgY2FzZSAnWCc6IC8vIG1hdGNoIGFueSBjaGFyYWN0ZXJcbiAgICAgICAgICByZXRbaV0gPSBwb3MgPCBzdHJMZW4gPyBzdHIuY2hhckF0KHBvcykgOiAnICdcbiAgICAgICAgICArK3Bvc1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSAnQSc6IC8vIG1hdGNoIGxldHRlcjsgZm9yY2UgdXBwZXIgY2FzZVxuICAgICAgICAgIGlmIChwb3MgPCBzdHJMZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGJ5dGUgPSBzdHIuY2hhckF0KHBvcylcbiAgICAgICAgICAgIGlmIChpc1VwcGVyQ2FzZShieXRlKSkgcmV0W2ldID0gYnl0ZVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNMb3dlckNhc2UoYnl0ZSkpIHJldFtpXSA9IGJ5dGUudG9VcHBlckNhc2UoKVxuICAgICAgICAgICAgZWxzZSBwYXNzT3JUaHJvd0Vycm9yKGxvb3NlLCByZXQsIGksIHN0cilcbiAgICAgICAgICB9IGVsc2UgcmV0W2ldID0gJyAnXG4gICAgICAgICAgKytwb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJ2EnOiAvLyBtYXRjaCBsZXR0ZXJcbiAgICAgICAgICBpZiAocG9zIDwgc3RyTGVuKSB7XG4gICAgICAgICAgICBjb25zdCBieXRlID0gc3RyLmNoYXJBdChwb3MpXG4gICAgICAgICAgICBpZiAoaXNVcHBlckNhc2UoYnl0ZSkgfHwgaXNMb3dlckNhc2UoYnl0ZSkpIHJldFtpXSA9IGJ5dGVcbiAgICAgICAgICAgIGVsc2UgcGFzc09yVGhyb3dFcnJvcihsb29zZSwgcmV0LCBpLCBzdHIpXG4gICAgICAgICAgfSBlbHNlIHJldFtpXSA9ICcgJ1xuICAgICAgICAgICsrcG9zXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnMCc6IC8vIG1hdGNoIGRpZ2l0XG4gICAgICAgICAgaWYgKHBvcyA8IHN0ckxlbikge1xuICAgICAgICAgICAgY29uc3QgYnl0ZSA9IHN0ci5jaGFyQXQocG9zKVxuICAgICAgICAgICAgaWYgKGlzTnVtYmVyUmVnZXgudGVzdChieXRlKSkgcmV0W2ldID0gYnl0ZVxuICAgICAgICAgICAgZWxzZSBwYXNzT3JUaHJvd0Vycm9yKGxvb3NlLCByZXQsIGksIHN0cilcbiAgICAgICAgICB9IGVsc2UgcmV0W2ldID0gJyAnXG4gICAgICAgICAgKytwb3NcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdaJzogLy8gbWF0Y2ggbGV0dGVyIG9yIGRpZ2l0OyBmb3JjZSB1cHBlciBjYXNlXG4gICAgICAgICAgaWYgKHBvcyA8IHN0ckxlbikge1xuICAgICAgICAgICAgY29uc3QgYnl0ZSA9IHN0ci5jaGFyQXQocG9zKVxuICAgICAgICAgICAgaWYgKGlzVXBwZXJDYXNlKGJ5dGUpIHx8IGlzTnVtYmVyUmVnZXgudGVzdChieXRlKSkgcmV0W2ldID0gYnl0ZVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNMb3dlckNhc2UoYnl0ZSkpIHJldFtpXSA9IGJ5dGUudG9VcHBlckNhc2UoKVxuICAgICAgICAgICAgZWxzZSBwYXNzT3JUaHJvd0Vycm9yKGxvb3NlLCByZXQsIGksIHN0cilcbiAgICAgICAgICB9IGVsc2UgcmV0W2ldID0gJyAnXG4gICAgICAgICAgKytwb3NcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICd6JzogLy8gbWF0Y2ggbGV0dGVyIG9yIGRpZ2l0XG4gICAgICAgICAgaWYgKHBvcyA8IHN0ckxlbikge1xuICAgICAgICAgICAgY29uc3QgYnl0ZSA9IHN0ci5jaGFyQXQocG9zKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBpc1VwcGVyQ2FzZShieXRlKSB8fFxuICAgICAgICAgICAgICBpc0xvd2VyQ2FzZShieXRlKSB8fFxuICAgICAgICAgICAgICBpc051bWJlclJlZ2V4LnRlc3QoYnl0ZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgcmV0W2ldID0gYnl0ZVxuICAgICAgICAgICAgZWxzZSBwYXNzT3JUaHJvd0Vycm9yKGxvb3NlLCByZXQsIGksIHN0cilcbiAgICAgICAgICB9IGVsc2UgcmV0W2ldID0gJyAnXG4gICAgICAgICAgKytwb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnVSc6IC8vIG1hdGNoIGxldHRlciAoZm9yY2UgdXBwZXIgY2FzZSksIGRpZ2l0LCB3aGl0ZXNwYWNlIG9yIHB1bmN0dWF0aW9uLlxuICAgICAgICAgIGlmIChwb3MgPCBzdHJMZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGJ5dGUgPSBzdHIuY2hhckF0KHBvcylcbiAgICAgICAgICAgIGlmIChpc0xvd2VyQ2FzZShieXRlKSkgcmV0W2ldID0gYnl0ZS50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAgICAgaXNVcHBlckNhc2UoYnl0ZSkgfHxcbiAgICAgICAgICAgICAgaXNOdW1iZXJSZWdleC50ZXN0KGJ5dGUpIHx8XG4gICAgICAgICAgICAgIGlzV2hpdGVzcGFjZVJlZ2V4LnRlc3QoYnl0ZSkgfHxcbiAgICAgICAgICAgICAgcHVuY3R1YXRpb25MaXN0LmluZGV4T2YoYnl0ZSkgPiAtMVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICByZXRbaV0gPSBieXRlXG4gICAgICAgICAgICBlbHNlIHBhc3NPclRocm93RXJyb3IobG9vc2UsIHJldCwgaSwgc3RyKVxuICAgICAgICAgIH0gZWxzZSByZXRbaV0gPSAnICdcbiAgICAgICAgICArK3Bvc1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0W2ldID0gbWFza0J5dGVcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwb3MgPCBzdHJMZW4pIHtcbiAgICAgIGlmICghbG9vc2UpIHtcbiAgICAgICAgdGhyb3cgeyBuYW1lOiAnTWFza0Vycm9yJywgbWVzc2FnZTogJ01hc2sgY2Fubm90IGJlIGFwcGxpZWQnIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmV0LmpvaW4oJycpXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3RyaW5nTWFza1xuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJiai1tYXNrcyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbi8qKlxuICogTnVtYmVyTWFza1xuICpcbiAqIEEgamF2YXNjcmlwdCBpbXBsZW1lbnRhdGlvbiBmb3IgQkJqIG51bWJlcnMgbWFza2luZ1xuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cbmNsYXNzIE51bWJlck1hc2sge1xuICAvKipcbiAgICogTWFzayB0aGUgZ2l2ZW4gbnVtYmVyIHdpdGggdGhlIGdpdmVuIG1hc2sgYWNjb3JkaW5nIHRvIEJCaiBydWxlc1xuICAgKlxuICAgKiBAcGFyYW0ge051bWJlcn0gbnVtYmVyIHRoZSBudW1iZXIgdG8gZm9ybWF0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtYXNrIHRoZSBtYXNrIHRvIHVzZSBmb3IgZm9ybWF0dGluZ1xuICAgKiBAcGFyYW0ge1N0cmluZ30gW2dyb3VwaW5nU2VwYXJhdG9yPSxdIC0gYSBjaGFyIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGdyb3VwaW5nIHNlcGFyYXRvclxuICAgKiBAcGFyYW0ge1N0cmluZ30gW2RlY2ltYWxTZXBhcmF0b3I9Ll0gIC0gYSBjaGFyIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGRlY2ltYWwgc2VwYXJhdG9yXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW2ZvcmNlVHJhaWxpbmdaZXJvcz1mYWxzZV0gLSBBZmZlY3RzIHRoZSBvdXRwdXQgYnkgc3dpdGNoaW5nIHRoZSB3YXkgYSBtYXNrIHdpdGggXCIjXCIgY2hhcmFjdGVycyBpbiB0aGUgdHJhaWxpbmcgcG9zaXRpb25zIGlzIGZpbGxlZC5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGV4YW1wbGUsIHRoZSBmdW5jdGlvbiBgTnVtYmVyTWFzay5tYXNrKC4xMDpcIiMuIyNcIilgIHJldHVybnMgYCAuMTBgIGluc3RlYWQgb2YgYCAuMSBgXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW2xvb3NlPXRydWVdIHdoZW4gdHJ1ZSAsIGVycm9ycyB3aWxsIGJlIGlnbm9yZWQgYW5kIHRoZSBtZXRob2Qgd2lsbCB0cnkgYXQgYXBwbHkgdGhlIG1hc2tcbiAgICogICAgICAgICAgICAgICAgYW55d2F5ICwgb3RoZXJ3aXNlIGl0IHdpbGwgc3RvcCBhdCBmaXJzdCBlcnJvciBhbmQgdGhyb3cgaXQuXG4gICAqIFxuICAgKiBAdGhyb3dzIHtNYXNrRXJyb3J9IG9ubHkgaWYgbG9vc2UgaXMgZGlzYWJsZWRcbiAgICogXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IHRoZSBtYXNrZWQgbnVtYmVyXG4gICAqL1xuICBzdGF0aWMgbWFzayhcbiAgICBudW1iZXIsXG4gICAgbWFzayxcbiAgICBncm91cGluZ1NlcGFyYXRvciA9ICcsJyxcbiAgICBkZWNpbWFsU2VwYXJhdG9yID0gJy4nLFxuICAgIGZvcmNlVHJhaWxpbmdaZXJvcyA9IGZhbHNlLFxuICAgIGxvb3NlID0gdHJ1ZVxuICApIHtcbiAgICBjb25zdCBtYXNrTGVuID0gbWFzay5sZW5ndGhcbiAgICBpZiAoMCA9PT0gbWFza0xlbikge1xuICAgICAgaWYgKGxvb3NlKSByZXR1cm4gc3RyXG4gICAgICAvLyBmcmllbmRseSBzaWxlbnQgZmFpbFxuICAgICAgZWxzZVxuICAgICAgICB0aHJvdyB7XG4gICAgICAgICAgbmFtZTogJ01hc2tFcnJvcicsXG4gICAgICAgICAgbWVzc2FnZTogYE1hc2tFcnJvcjogTWFzayBpcyBlbXB0eWBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEdldCBtYWduaXR1ZGUgYW5kIHByZWNpc2lvbiBvZiBNQVNLXG4gICAgbGV0IG1hc2tCZWZvcmVEZWNpbWFsID0gMFxuICAgIGxldCBtYXNrQWZ0ZXJEZWNpbWFsID0gMFxuICAgIGxldCBmb3VuZERlY2ltYWwgPSBmYWxzZVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWFza0xlbjsgKytpKSB7XG4gICAgICBjb25zdCBtID0gbWFzay5jaGFyQXQoaSlcbiAgICAgIGlmIChtID09ICcwJyB8fCBtID09ICcjJykge1xuICAgICAgICBpZiAoZm91bmREZWNpbWFsKSArK21hc2tBZnRlckRlY2ltYWxcbiAgICAgICAgZWxzZSArK21hc2tCZWZvcmVEZWNpbWFsXG4gICAgICB9IGVsc2UgaWYgKG0gPT0gJy4nKSBmb3VuZERlY2ltYWwgPSB0cnVlXG4gICAgfVxuXG4gICAgbGV0IG51bSA9IE51bWJlck1hc2suX3JvdW5kKG51bWJlciwgbWFza0FmdGVyRGVjaW1hbClcbiAgICBsZXQgYnl0ZXMgPSBOdW1iZXJNYXNrLl90b0NoYXJBcnJheShudW0pXG5cbiAgICAvLyBHZXQgbWFnbml0dWRlIGFuZCBwcmVjaXNpb24gb2YgTlVNQkVSXG4gICAgbGV0IGluTGVuID0gYnl0ZXMubGVuZ3RoXG4gICAgbGV0IG51bUJlZm9yZURlY2ltYWwgPSAwXG4gICAgbGV0IG51bUFmdGVyRGVjaW1hbCA9IDBcbiAgICBmb3VuZERlY2ltYWwgPSBmYWxzZVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5MZW47ICsraSkge1xuICAgICAgaWYgKGJ5dGVzW2ldID09ICcuJykgZm91bmREZWNpbWFsID0gdHJ1ZVxuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChmb3VuZERlY2ltYWwpICsrbnVtQWZ0ZXJEZWNpbWFsXG4gICAgICAgIGVsc2UgKytudW1CZWZvcmVEZWNpbWFsXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYWx3YXlzIGlnbm9yZSBtYXNrIG92ZXJmbG93XG4gICAgaWYgKG51bUJlZm9yZURlY2ltYWwgPiBtYXNrQmVmb3JlRGVjaW1hbCkge1xuICAgICAgaWYgKGxvb3NlKSByZXR1cm4gbnVtYmVyLnRvU3RyaW5nKClcbiAgICAgIC8vIGZyaWVuZGx5IHNpbGVudCBmYWlsXG4gICAgICBlbHNlXG4gICAgICAgIHRocm93IHtcbiAgICAgICAgICBuYW1lOiAnTWFza0Vycm9yJyxcbiAgICAgICAgICBtZXNzYWdlOiBgTWFza0Vycm9yOiBOdW1iZXIgaXMgdG9vIGxhcmdlIGZvciBtYXNrYFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gcm91bmQgaWYgbWFzayBpcyBmb3IgYSBsb3dlciBwcmVjaXNpb24gbnVtYmVyXG4gICAgaWYgKG51bUFmdGVyRGVjaW1hbCA+IG1hc2tBZnRlckRlY2ltYWwpIHtcbiAgICAgIG51bSA9IE51bWJlck1hc2suX3JvdW5kKG51bSwgbWFza0FmdGVyRGVjaW1hbClcbiAgICAgIGJ5dGVzID0gTnVtYmVyTWFzay5fdG9DaGFyQXJyYXkobnVtKVxuICAgICAgaW5MZW4gPSBieXRlcy5sZW5ndGhcblxuICAgICAgLy8gR2V0IG5ldyBtYWduaXR1ZGUgYW5kIHByZWNpc2lvbiBvZiBOVU1CRVJcbiAgICAgIG51bUJlZm9yZURlY2ltYWwgPSAwXG4gICAgICBudW1BZnRlckRlY2ltYWwgPSAwXG4gICAgICBmb3VuZERlY2ltYWwgPSBmYWxzZVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbkxlbjsgKytpKSB7XG4gICAgICAgIGlmIChieXRlc1tpXSA9PSAnLicpIGZvdW5kRGVjaW1hbCA9IHRydWVcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKGZvdW5kRGVjaW1hbCkgKytudW1BZnRlckRlY2ltYWxcbiAgICAgICAgICBlbHNlICsrbnVtQmVmb3JlRGVjaW1hbFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGFsd2F5cyBpZ25vcmUgbWFzayBvdmVyZmxvd1xuICAgICAgaWYgKG51bUJlZm9yZURlY2ltYWwgPiBtYXNrQmVmb3JlRGVjaW1hbCkge1xuICAgICAgICBpZiAobG9vc2UpIHJldHVybiBudW1iZXIudG9TdHJpbmcoKVxuICAgICAgICAvLyBmcmllbmRseSBzaWxlbnQgZmFpbFxuICAgICAgICBlbHNlXG4gICAgICAgICAgdGhyb3cge1xuICAgICAgICAgICAgbmFtZTogJ01hc2tFcnJvcicsXG4gICAgICAgICAgICBtZXNzYWdlOiBgTWFza0Vycm9yOiBOdW1iZXIgaXMgdG9vIGxhcmdlIGZvciBtYXNrYFxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgZmlsbEJ5dGUgPSAnICcsXG4gICAgICBmbG9hdEJ5dGUgPSAnICdcbiAgICBsZXQgaW5Qb3MgPSAwLFxuICAgICAgb3V0UG9zID0gMCxcbiAgICAgIGZsb2F0UG9zID0gMFxuICAgIGlmIChtYXNrLmNoYXJBdCgwKSA9PSAnKicpIGZpbGxCeXRlID0gJyonXG5cbiAgICBjb25zdCBmaWxsSW5pdCA9IGZpbGxCeXRlXG4gICAgY29uc3QgaXNOZWdhdGl2ZSA9IE51bWJlck1hc2suX2dldFNpZ24obnVtKSA8IDBcbiAgICBsZXQgZW1pdERlY2ltYWwgPSBpbkxlbiA+IDAgfHwgbWFzay5pbmRleE9mKCcwJykgPj0gMFxuICAgIGxldCBmb3VuZFplcm8gPSBmYWxzZVxuICAgIGxldCBmb3VuZERpZ2l0ID0gZmFsc2VcbiAgICBsZXQgY3VycmVuY3kgPSBmYWxzZVxuICAgIGZvdW5kRGVjaW1hbCA9IGZhbHNlXG5cbiAgICBsZXQgcmV0ID0gbmV3IEFycmF5KG1hc2tMZW4pXG5cbiAgICBmb3IgKGxldCBtYXNrUG9zID0gMDsgbWFza1BvcyA8IG1hc2tMZW47ICsrbWFza1Bvcykge1xuICAgICAgbGV0IG0gPSBtYXNrLmNoYXJBdChtYXNrUG9zKVxuICAgICAgc3dpdGNoIChtKSB7XG4gICAgICAgIGNhc2UgJzAnOlxuICAgICAgICAgIC0tbWFza0JlZm9yZURlY2ltYWxcbiAgICAgICAgICBpZiAobWFza0JlZm9yZURlY2ltYWwgPCBudW1CZWZvcmVEZWNpbWFsICYmIGluUG9zIDwgaW5MZW4pIHtcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gYnl0ZXNbaW5Qb3NdXG4gICAgICAgICAgICArK2luUG9zXG4gICAgICAgICAgICBmb3VuZERpZ2l0ID0gdHJ1ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9ICcwJ1xuICAgICAgICAgICAgZm91bmRaZXJvID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICArK291dFBvc1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSAnIyc6XG4gICAgICAgICAgLS1tYXNrQmVmb3JlRGVjaW1hbFxuICAgICAgICAgIGlmIChtYXNrQmVmb3JlRGVjaW1hbCA8IG51bUJlZm9yZURlY2ltYWwgJiYgaW5Qb3MgPCBpbkxlbikge1xuICAgICAgICAgICAgcmV0W291dFBvc10gPSBieXRlc1tpblBvc11cbiAgICAgICAgICAgICsraW5Qb3NcbiAgICAgICAgICAgIGZvdW5kRGlnaXQgPSB0cnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID1cbiAgICAgICAgICAgICAgZm91bmREZWNpbWFsICYmXG4gICAgICAgICAgICAgIGZvcmNlVHJhaWxpbmdaZXJvcyAmJlxuICAgICAgICAgICAgICBOdW1iZXJNYXNrLl9nZXRTaWduKG51bSkgIT0gMFxuICAgICAgICAgICAgICAgID8gJzAnXG4gICAgICAgICAgICAgICAgOiBmaWxsQnl0ZVxuICAgICAgICAgICAgaWYgKCFmb3VuZERlY2ltYWwpIGZsb2F0UG9zID0gbWFza1Bvc1xuICAgICAgICAgIH1cbiAgICAgICAgICArK291dFBvc1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSAnLCc6XG4gICAgICAgICAgaWYgKGZvdW5kWmVybyB8fCBpblBvcyA+IDApIHJldFtvdXRQb3NdID0gZ3JvdXBpbmdTZXBhcmF0b3JcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZmlsbEJ5dGVcbiAgICAgICAgICAgIGlmICghZm91bmREZWNpbWFsKSBmbG9hdFBvcyA9IG1hc2tQb3NcbiAgICAgICAgICB9XG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJy0nOlxuICAgICAgICAgIGlmICghZm91bmREaWdpdCAmJiBmbG9hdEJ5dGUgPT0gJyAnKSB7XG4gICAgICAgICAgICBpZiAoaXNOZWdhdGl2ZSkgZmxvYXRCeXRlID0gJy0nXG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9IGZpbGxCeXRlXG4gICAgICAgICAgICBmbG9hdFBvcyA9IGZvdW5kRGVjaW1hbCA/IC0xIDogbWFza1Bvc1xuICAgICAgICAgIH0gZWxzZSByZXRbb3V0UG9zXSA9IGlzTmVnYXRpdmUgPyAnLScgOiBmaWxsQnl0ZVxuICAgICAgICAgICsrb3V0UG9zXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICcrJzpcbiAgICAgICAgICBpZiAoIWZvdW5kRGlnaXQgJiYgZmxvYXRCeXRlID09ICcgJykge1xuICAgICAgICAgICAgZmxvYXRCeXRlID0gaXNOZWdhdGl2ZSA/ICctJyA6ICcrJ1xuICAgICAgICAgICAgcmV0W291dFBvc10gPSBmaWxsQnl0ZVxuICAgICAgICAgICAgZmxvYXRQb3MgPSBmb3VuZERlY2ltYWwgPyAtMSA6IG1hc2tQb3NcbiAgICAgICAgICB9IGVsc2UgcmV0W291dFBvc10gPSBpc05lZ2F0aXZlID8gJy0nIDogJysnXG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJyQnOlxuICAgICAgICAgIGlmICghZm91bmREaWdpdCAmJiBmbG9hdEJ5dGUgPT0gJyAnKSB7XG4gICAgICAgICAgICBmbG9hdEJ5dGUgPSAnJCdcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZmlsbEJ5dGVcbiAgICAgICAgICAgIGZsb2F0UG9zID0gZm91bmREZWNpbWFsID8gLTEgOiBtYXNrUG9zXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJyQnXG4gICAgICAgICAgfVxuICAgICAgICAgICsrb3V0UG9zXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICAvLyBjYXNlICcmJzpcbiAgICAgICAgLy8gICBjdXJyZW5jeSA9IHRydWVcbiAgICAgICAgLy8gICBpZiAoIWZvdW5kRGlnaXQgJiYgZmxvYXRCeXRlID09ICcgJykge1xuICAgICAgICAvLyAgICAgZmxvYXRCeXRlID0gJyYnXG4gICAgICAgIC8vICAgICByZXRbb3V0UG9zXSA9IGZpbGxCeXRlXG4gICAgICAgIC8vICAgICBmbG9hdFBvcyA9IGZvdW5kRGVjaW1hbCA/IC0xIDogbWFza1Bvc1xuICAgICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICByZXRbb3V0UG9zXSA9ICcmJ1xuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gICArK291dFBvc1xuICAgICAgICAvLyAgIGJyZWFrXG5cbiAgICAgICAgLy8gY2FzZSAnQCc6XG4gICAgICAgIC8vICAgY3VycmVuY3kgPSB0cnVlXG4gICAgICAgIC8vICAgaWYgKCFmb3VuZERpZ2l0ICYmIGZsb2F0Qnl0ZSA9PSAnICcpIHtcbiAgICAgICAgLy8gICAgIGZsb2F0Qnl0ZSA9ICdAJ1xuICAgICAgICAvLyAgICAgcmV0W291dFBvc10gPSBmaWxsQnl0ZVxuICAgICAgICAvLyAgICAgZmxvYXRQb3MgPSBmb3VuZERlY2ltYWwgPyAtMSA6IG1hc2tQb3NcbiAgICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgICAvLyAgICAgcmV0W291dFBvc10gPSAnQCdcbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vICAgKytvdXRQb3NcbiAgICAgICAgLy8gICBicmVha1xuXG4gICAgICAgIGNhc2UgJygnOlxuICAgICAgICAgIGlmICghZm91bmREaWdpdCAmJiBmbG9hdEJ5dGUgPT0gJyAnKSB7XG4gICAgICAgICAgICBpZiAoaXNOZWdhdGl2ZSkgZmxvYXRCeXRlID0gJygnXG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9IGZpbGxCeXRlXG4gICAgICAgICAgICBmbG9hdFBvcyA9IGZvdW5kRGVjaW1hbCA/IC0xIDogbWFza1Bvc1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXNOZWdhdGl2ZSkge1xuICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9ICcoJ1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSBmb3VuZERlY2ltYWwgPyAnICcgOiBmaWxsQnl0ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICArK291dFBvc1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSAnKSc6XG4gICAgICAgICAgaWYgKGlzTmVnYXRpdmUpIHtcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJyknXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZm91bmREZWNpbWFsID8gJyAnIDogZmlsbEJ5dGVcbiAgICAgICAgICB9XG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJ0MnOlxuICAgICAgICAgIGlmIChtYXNrUG9zIDwgbWFza0xlbiAtIDEgJiYgbWFzay5jaGFyQXQobWFza1BvcyArIDEpID09ICdSJykge1xuICAgICAgICAgICAgaWYgKGlzTmVnYXRpdmUpIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnQydcbiAgICAgICAgICAgICAgcmV0W291dFBvcyArIDFdID0gJ1InXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9ICcgJ1xuICAgICAgICAgICAgICByZXRbb3V0UG9zICsgMV0gPSAnICdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dFBvcyArPSAyXG4gICAgICAgICAgICArK21hc2tQb3NcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0W291dFBvc10gPSAnQydcbiAgICAgICAgICAgICsrb3V0UG9zXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgIGlmIChtYXNrUG9zIDwgbWFza0xlbiAtIDEgJiYgbWFzay5jaGFyQXQobWFza1BvcyArIDEpID09ICdSJykge1xuICAgICAgICAgICAgaWYgKGlzTmVnYXRpdmUpIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnQydcbiAgICAgICAgICAgICAgcmV0W291dFBvcyArIDFdID0gJ1InXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9ICdEJ1xuICAgICAgICAgICAgICByZXRbb3V0UG9zICsgMV0gPSAnUidcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dFBvcyArPSAyXG4gICAgICAgICAgICArK21hc2tQb3NcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0W291dFBvc10gPSAnRCdcbiAgICAgICAgICAgICsrb3V0UG9zXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSAnKic6XG4gICAgICAgICAgcmV0W291dFBvc10gPSAnKidcbiAgICAgICAgICArK291dFBvc1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSAnLic6XG4gICAgICAgICAgcmV0W291dFBvc10gPSBlbWl0RGVjaW1hbCA/IGRlY2ltYWxTZXBhcmF0b3IgOiBmaWxsQnl0ZVxuICAgICAgICAgIGZpbGxCeXRlID0gJyAnXG4gICAgICAgICAgZm91bmREZWNpbWFsID0gdHJ1ZVxuICAgICAgICAgICsraW5Qb3NcbiAgICAgICAgICArK291dFBvc1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSAnQic6XG4gICAgICAgICAgcmV0W291dFBvc10gPSAnICdcbiAgICAgICAgICArK291dFBvc1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXRbb3V0UG9zXSA9IG1cbiAgICAgICAgICArK291dFBvc1xuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZsb2F0Qnl0ZSAhPSAnICcpIHtcbiAgICAgIGlmIChmbG9hdFBvcyA8IDApIGZsb2F0UG9zID0gb3V0UG9zXG4gICAgICB3aGlsZSAoZmxvYXRQb3MgPj0gbWFza0xlbikgLS1mbG9hdFBvc1xuICAgICAgaWYgKHJldFtmbG9hdFBvc10gPT0gZmlsbEluaXQpIHJldFtmbG9hdFBvc10gPSBmbG9hdEJ5dGVcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0LmpvaW4oJycpXG4gIH1cblxuICBzdGF0aWMgX3NoaWZ0KG51bWJlciwgcHJlY2lzaW9uLCByZXZlcnNlU2hpZnQpIHtcbiAgICBpZiAocmV2ZXJzZVNoaWZ0KSBwcmVjaXNpb24gPSAtcHJlY2lzaW9uXG4gICAgdmFyIG51bUFycmF5ID0gKCcnICsgbnVtYmVyKS5zcGxpdCgnZScpXG4gICAgcmV0dXJuICsoXG4gICAgICBudW1BcnJheVswXSArXG4gICAgICAnZScgK1xuICAgICAgKG51bUFycmF5WzFdID8gK251bUFycmF5WzFdICsgcHJlY2lzaW9uIDogcHJlY2lzaW9uKVxuICAgIClcbiAgfVxuXG4gIHN0YXRpYyBfcm91bmQobnVtYmVyLCBwcmVjaXNpb24pIHtcbiAgICByZXR1cm4gTnVtYmVyTWFzay5fc2hpZnQoXG4gICAgICBNYXRoLnJvdW5kKE51bWJlck1hc2suX3NoaWZ0KG51bWJlciwgcHJlY2lzaW9uLCBmYWxzZSkpLFxuICAgICAgcHJlY2lzaW9uLFxuICAgICAgdHJ1ZVxuICAgIClcbiAgfVxuXG4gIHN0YXRpYyBfdG9DaGFyQXJyYXkobnVtYmVyKSB7XG4gICAgY29uc3Qgc2lnbnVtID0gTnVtYmVyTWFzay5fZ2V0U2lnbihudW1iZXIpXG4gICAgbGV0IGNoYXJzID0gW11cblxuICAgIGlmIChzaWdudW0gIT09IDApIHtcbiAgICAgIGxldCBzdHJpbmcgPSBzaWdudW0gPCAwID8gYCR7LTEgKiBudW1iZXIudG9TdHJpbmcoKX1gIDogbnVtYmVyLnRvU3RyaW5nKClcblxuICAgICAgaWYgKHN0cmluZy5sZW5ndGggPiAxICYmIHN0cmluZy5jaGFyQXQoMCkgPT0gJzAnKVxuICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyaW5nKDEpXG5cbiAgICAgIC8vIFRoZSBzdHJpbmcgY29udGFpbnMgb25seSBbMC05XSBhbmQgJy4nXG4gICAgICBjaGFycyA9IHN0cmluZy5zcGxpdCgnJylcbiAgICB9XG5cbiAgICByZXR1cm4gY2hhcnNcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzaWduIG9mIGEgbnVtYmVyXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB4IG51bWJlclxuICAgKiBAcmV0dXJucyB7TnVtYmVyfSBBIG51bWJlciByZXByZXNlbnRpbmcgdGhlIHNpZ24gb2YgdGhlIGdpdmVuIGFyZ3VtZW50LlxuICAgKiAgICAgICAgICAgICAgICAgICBJZiB0aGUgYXJndW1lbnQgaXMgYSBwb3NpdGl2ZSBudW1iZXIsIG5lZ2F0aXZlIG51bWJlciwgcG9zaXRpdmUgemVyb1xuICAgKiAgICAgICAgICAgICAgICAgICBvciBuZWdhdGl2ZSB6ZXJvLCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gMSwgLTEsIDAgb3IgLTAgcmVzcGVjdGl2ZWx5LlxuICAgKiAgICAgICAgICAgICAgICAgICBPdGhlcndpc2UsIE5hTiBpcyByZXR1cm5lZC5cbiAgICovXG4gIHN0YXRpYyBfZ2V0U2lnbih4KSB7XG4gICAgcmV0dXJuICh4ID4gMCkgLSAoeCA8IDApIHx8ICt4XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTnVtYmVyTWFza1xuIiwibW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxbXCJmbGF0cGlja3JcIl0gPSByZXF1aXJlKFwiLSFEOlxcXFxHaXRodWJcXFxcQkJqR3JpZEV4V2lkZ2V0XFxcXGNsaWVudFxcXFxub2RlX21vZHVsZXNcXFxcYmFiZWwtbG9hZGVyXFxcXGxpYlxcXFxpbmRleC5qcz8/cmVmLS00IS5cXFxcZmxhdHBpY2tyLmpzXCIpOyIsIi8qIGZsYXRwaWNrciB2NC42LjMsIEBsaWNlbnNlIE1JVCAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgICAoZ2xvYmFsID0gZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5mbGF0cGlja3IgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCBmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2VcclxuICAgIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXHJcbiAgICBMaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG5cclxuICAgIFRISVMgQ09ERSBJUyBQUk9WSURFRCBPTiBBTiAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcclxuICAgIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcclxuICAgIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsXHJcbiAgICBNRVJDSEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULlxyXG5cclxuICAgIFNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xyXG4gICAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4gICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuXHJcbiAgICB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0O1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICB9O1xuXG4gICAgdmFyIEhPT0tTID0gW1xuICAgICAgICBcIm9uQ2hhbmdlXCIsXG4gICAgICAgIFwib25DbG9zZVwiLFxuICAgICAgICBcIm9uRGF5Q3JlYXRlXCIsXG4gICAgICAgIFwib25EZXN0cm95XCIsXG4gICAgICAgIFwib25LZXlEb3duXCIsXG4gICAgICAgIFwib25Nb250aENoYW5nZVwiLFxuICAgICAgICBcIm9uT3BlblwiLFxuICAgICAgICBcIm9uUGFyc2VDb25maWdcIixcbiAgICAgICAgXCJvblJlYWR5XCIsXG4gICAgICAgIFwib25WYWx1ZVVwZGF0ZVwiLFxuICAgICAgICBcIm9uWWVhckNoYW5nZVwiLFxuICAgICAgICBcIm9uUHJlQ2FsZW5kYXJQb3NpdGlvblwiLFxuICAgIF07XG4gICAgdmFyIGRlZmF1bHRzID0ge1xuICAgICAgICBfZGlzYWJsZTogW10sXG4gICAgICAgIF9lbmFibGU6IFtdLFxuICAgICAgICBhbGxvd0lucHV0OiBmYWxzZSxcbiAgICAgICAgYWx0Rm9ybWF0OiBcIkYgaiwgWVwiLFxuICAgICAgICBhbHRJbnB1dDogZmFsc2UsXG4gICAgICAgIGFsdElucHV0Q2xhc3M6IFwiZm9ybS1jb250cm9sIGlucHV0XCIsXG4gICAgICAgIGFuaW1hdGU6IHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJNU0lFXCIpID09PSAtMSxcbiAgICAgICAgYXJpYURhdGVGb3JtYXQ6IFwiRiBqLCBZXCIsXG4gICAgICAgIGNsaWNrT3BlbnM6IHRydWUsXG4gICAgICAgIGNsb3NlT25TZWxlY3Q6IHRydWUsXG4gICAgICAgIGNvbmp1bmN0aW9uOiBcIiwgXCIsXG4gICAgICAgIGRhdGVGb3JtYXQ6IFwiWS1tLWRcIixcbiAgICAgICAgZGVmYXVsdEhvdXI6IDEyLFxuICAgICAgICBkZWZhdWx0TWludXRlOiAwLFxuICAgICAgICBkZWZhdWx0U2Vjb25kczogMCxcbiAgICAgICAgZGlzYWJsZTogW10sXG4gICAgICAgIGRpc2FibGVNb2JpbGU6IGZhbHNlLFxuICAgICAgICBlbmFibGU6IFtdLFxuICAgICAgICBlbmFibGVTZWNvbmRzOiBmYWxzZSxcbiAgICAgICAgZW5hYmxlVGltZTogZmFsc2UsXG4gICAgICAgIGVycm9ySGFuZGxlcjogZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihlcnIpO1xuICAgICAgICB9LFxuICAgICAgICBnZXRXZWVrOiBmdW5jdGlvbiAoZ2l2ZW5EYXRlKSB7XG4gICAgICAgICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKGdpdmVuRGF0ZS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgICAgICAgIC8vIFRodXJzZGF5IGluIGN1cnJlbnQgd2VlayBkZWNpZGVzIHRoZSB5ZWFyLlxuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMyAtICgoZGF0ZS5nZXREYXkoKSArIDYpICUgNykpO1xuICAgICAgICAgICAgLy8gSmFudWFyeSA0IGlzIGFsd2F5cyBpbiB3ZWVrIDEuXG4gICAgICAgICAgICB2YXIgd2VlazEgPSBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIDAsIDQpO1xuICAgICAgICAgICAgLy8gQWRqdXN0IHRvIFRodXJzZGF5IGluIHdlZWsgMSBhbmQgY291bnQgbnVtYmVyIG9mIHdlZWtzIGZyb20gZGF0ZSB0byB3ZWVrMS5cbiAgICAgICAgICAgIHJldHVybiAoMSArXG4gICAgICAgICAgICAgICAgTWF0aC5yb3VuZCgoKGRhdGUuZ2V0VGltZSgpIC0gd2VlazEuZ2V0VGltZSgpKSAvIDg2NDAwMDAwIC1cbiAgICAgICAgICAgICAgICAgICAgMyArXG4gICAgICAgICAgICAgICAgICAgICgod2VlazEuZ2V0RGF5KCkgKyA2KSAlIDcpKSAvXG4gICAgICAgICAgICAgICAgICAgIDcpKTtcbiAgICAgICAgfSxcbiAgICAgICAgaG91ckluY3JlbWVudDogMSxcbiAgICAgICAgaWdub3JlZEZvY3VzRWxlbWVudHM6IFtdLFxuICAgICAgICBpbmxpbmU6IGZhbHNlLFxuICAgICAgICBsb2NhbGU6IFwiZGVmYXVsdFwiLFxuICAgICAgICBtaW51dGVJbmNyZW1lbnQ6IDUsXG4gICAgICAgIG1vZGU6IFwic2luZ2xlXCIsXG4gICAgICAgIG1vbnRoU2VsZWN0b3JUeXBlOiBcImRyb3Bkb3duXCIsXG4gICAgICAgIG5leHRBcnJvdzogXCI8c3ZnIHZlcnNpb249JzEuMScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB4bWxuczp4bGluaz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycgdmlld0JveD0nMCAwIDE3IDE3Jz48Zz48L2c+PHBhdGggZD0nTTEzLjIwNyA4LjQ3MmwtNy44NTQgNy44NTQtMC43MDctMC43MDcgNy4xNDYtNy4xNDYtNy4xNDYtNy4xNDggMC43MDctMC43MDcgNy44NTQgNy44NTR6JyAvPjwvc3ZnPlwiLFxuICAgICAgICBub0NhbGVuZGFyOiBmYWxzZSxcbiAgICAgICAgbm93OiBuZXcgRGF0ZSgpLFxuICAgICAgICBvbkNoYW5nZTogW10sXG4gICAgICAgIG9uQ2xvc2U6IFtdLFxuICAgICAgICBvbkRheUNyZWF0ZTogW10sXG4gICAgICAgIG9uRGVzdHJveTogW10sXG4gICAgICAgIG9uS2V5RG93bjogW10sXG4gICAgICAgIG9uTW9udGhDaGFuZ2U6IFtdLFxuICAgICAgICBvbk9wZW46IFtdLFxuICAgICAgICBvblBhcnNlQ29uZmlnOiBbXSxcbiAgICAgICAgb25SZWFkeTogW10sXG4gICAgICAgIG9uVmFsdWVVcGRhdGU6IFtdLFxuICAgICAgICBvblllYXJDaGFuZ2U6IFtdLFxuICAgICAgICBvblByZUNhbGVuZGFyUG9zaXRpb246IFtdLFxuICAgICAgICBwbHVnaW5zOiBbXSxcbiAgICAgICAgcG9zaXRpb246IFwiYXV0b1wiLFxuICAgICAgICBwb3NpdGlvbkVsZW1lbnQ6IHVuZGVmaW5lZCxcbiAgICAgICAgcHJldkFycm93OiBcIjxzdmcgdmVyc2lvbj0nMS4xJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyB2aWV3Qm94PScwIDAgMTcgMTcnPjxnPjwvZz48cGF0aCBkPSdNNS4yMDcgOC40NzFsNy4xNDYgNy4xNDctMC43MDcgMC43MDctNy44NTMtNy44NTQgNy44NTQtNy44NTMgMC43MDcgMC43MDctNy4xNDcgNy4xNDZ6JyAvPjwvc3ZnPlwiLFxuICAgICAgICBzaG9ydGhhbmRDdXJyZW50TW9udGg6IGZhbHNlLFxuICAgICAgICBzaG93TW9udGhzOiAxLFxuICAgICAgICBzdGF0aWM6IGZhbHNlLFxuICAgICAgICB0aW1lXzI0aHI6IGZhbHNlLFxuICAgICAgICB3ZWVrTnVtYmVyczogZmFsc2UsXG4gICAgICAgIHdyYXA6IGZhbHNlXG4gICAgfTtcblxuICAgIHZhciBlbmdsaXNoID0ge1xuICAgICAgICB3ZWVrZGF5czoge1xuICAgICAgICAgICAgc2hvcnRoYW5kOiBbXCJTdW5cIiwgXCJNb25cIiwgXCJUdWVcIiwgXCJXZWRcIiwgXCJUaHVcIiwgXCJGcmlcIiwgXCJTYXRcIl0sXG4gICAgICAgICAgICBsb25naGFuZDogW1xuICAgICAgICAgICAgICAgIFwiU3VuZGF5XCIsXG4gICAgICAgICAgICAgICAgXCJNb25kYXlcIixcbiAgICAgICAgICAgICAgICBcIlR1ZXNkYXlcIixcbiAgICAgICAgICAgICAgICBcIldlZG5lc2RheVwiLFxuICAgICAgICAgICAgICAgIFwiVGh1cnNkYXlcIixcbiAgICAgICAgICAgICAgICBcIkZyaWRheVwiLFxuICAgICAgICAgICAgICAgIFwiU2F0dXJkYXlcIixcbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzOiB7XG4gICAgICAgICAgICBzaG9ydGhhbmQ6IFtcbiAgICAgICAgICAgICAgICBcIkphblwiLFxuICAgICAgICAgICAgICAgIFwiRmViXCIsXG4gICAgICAgICAgICAgICAgXCJNYXJcIixcbiAgICAgICAgICAgICAgICBcIkFwclwiLFxuICAgICAgICAgICAgICAgIFwiTWF5XCIsXG4gICAgICAgICAgICAgICAgXCJKdW5cIixcbiAgICAgICAgICAgICAgICBcIkp1bFwiLFxuICAgICAgICAgICAgICAgIFwiQXVnXCIsXG4gICAgICAgICAgICAgICAgXCJTZXBcIixcbiAgICAgICAgICAgICAgICBcIk9jdFwiLFxuICAgICAgICAgICAgICAgIFwiTm92XCIsXG4gICAgICAgICAgICAgICAgXCJEZWNcIixcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBsb25naGFuZDogW1xuICAgICAgICAgICAgICAgIFwiSmFudWFyeVwiLFxuICAgICAgICAgICAgICAgIFwiRmVicnVhcnlcIixcbiAgICAgICAgICAgICAgICBcIk1hcmNoXCIsXG4gICAgICAgICAgICAgICAgXCJBcHJpbFwiLFxuICAgICAgICAgICAgICAgIFwiTWF5XCIsXG4gICAgICAgICAgICAgICAgXCJKdW5lXCIsXG4gICAgICAgICAgICAgICAgXCJKdWx5XCIsXG4gICAgICAgICAgICAgICAgXCJBdWd1c3RcIixcbiAgICAgICAgICAgICAgICBcIlNlcHRlbWJlclwiLFxuICAgICAgICAgICAgICAgIFwiT2N0b2JlclwiLFxuICAgICAgICAgICAgICAgIFwiTm92ZW1iZXJcIixcbiAgICAgICAgICAgICAgICBcIkRlY2VtYmVyXCIsXG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIGRheXNJbk1vbnRoOiBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV0sXG4gICAgICAgIGZpcnN0RGF5T2ZXZWVrOiAwLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnRoKSB7XG4gICAgICAgICAgICB2YXIgcyA9IG50aCAlIDEwMDtcbiAgICAgICAgICAgIGlmIChzID4gMyAmJiBzIDwgMjEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwidGhcIjtcbiAgICAgICAgICAgIHN3aXRjaCAocyAlIDEwKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJzdFwiO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibmRcIjtcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcInJkXCI7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwidGhcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmFuZ2VTZXBhcmF0b3I6IFwiIHRvIFwiLFxuICAgICAgICB3ZWVrQWJicmV2aWF0aW9uOiBcIldrXCIsXG4gICAgICAgIHNjcm9sbFRpdGxlOiBcIlNjcm9sbCB0byBpbmNyZW1lbnRcIixcbiAgICAgICAgdG9nZ2xlVGl0bGU6IFwiQ2xpY2sgdG8gdG9nZ2xlXCIsXG4gICAgICAgIGFtUE06IFtcIkFNXCIsIFwiUE1cIl0sXG4gICAgICAgIHllYXJBcmlhTGFiZWw6IFwiWWVhclwiLFxuICAgICAgICBob3VyQXJpYUxhYmVsOiBcIkhvdXJcIixcbiAgICAgICAgbWludXRlQXJpYUxhYmVsOiBcIk1pbnV0ZVwiLFxuICAgICAgICB0aW1lXzI0aHI6IGZhbHNlXG4gICAgfTtcblxuICAgIHZhciBwYWQgPSBmdW5jdGlvbiAobnVtYmVyKSB7IHJldHVybiAoXCIwXCIgKyBudW1iZXIpLnNsaWNlKC0yKTsgfTtcbiAgICB2YXIgaW50ID0gZnVuY3Rpb24gKGJvb2wpIHsgcmV0dXJuIChib29sID09PSB0cnVlID8gMSA6IDApOyB9O1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7XG4gICAgICAgIGlmIChpbW1lZGlhdGUgPT09IHZvaWQgMCkgeyBpbW1lZGlhdGUgPSBmYWxzZTsgfVxuICAgICAgICB2YXIgdGltZW91dDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBjb250ZXh0ID0gdGhpcywgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgIHRpbWVvdXQgIT09IG51bGwgJiYgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoIWltbWVkaWF0ZSlcbiAgICAgICAgICAgICAgICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgICAgIH0sIHdhaXQpO1xuICAgICAgICAgICAgaWYgKGltbWVkaWF0ZSAmJiAhdGltZW91dClcbiAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICB2YXIgYXJyYXlpZnkgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBBcnJheSA/IG9iaiA6IFtvYmpdO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiB0b2dnbGVDbGFzcyhlbGVtLCBjbGFzc05hbWUsIGJvb2wpIHtcbiAgICAgICAgaWYgKGJvb2wgPT09IHRydWUpXG4gICAgICAgICAgICByZXR1cm4gZWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XG4gICAgICAgIGVsZW0uY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRhZywgY2xhc3NOYW1lLCBjb250ZW50KSB7XG4gICAgICAgIHZhciBlID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTtcbiAgICAgICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lIHx8IFwiXCI7XG4gICAgICAgIGNvbnRlbnQgPSBjb250ZW50IHx8IFwiXCI7XG4gICAgICAgIGUuY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICAgICAgICBpZiAoY29udGVudCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgZS50ZXh0Q29udGVudCA9IGNvbnRlbnQ7XG4gICAgICAgIHJldHVybiBlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjbGVhck5vZGUobm9kZSkge1xuICAgICAgICB3aGlsZSAobm9kZS5maXJzdENoaWxkKVxuICAgICAgICAgICAgbm9kZS5yZW1vdmVDaGlsZChub2RlLmZpcnN0Q2hpbGQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kUGFyZW50KG5vZGUsIGNvbmRpdGlvbikge1xuICAgICAgICBpZiAoY29uZGl0aW9uKG5vZGUpKVxuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIGVsc2UgaWYgKG5vZGUucGFyZW50Tm9kZSlcbiAgICAgICAgICAgIHJldHVybiBmaW5kUGFyZW50KG5vZGUucGFyZW50Tm9kZSwgY29uZGl0aW9uKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gbm90aGluZyBmb3VuZFxuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVOdW1iZXJJbnB1dChpbnB1dENsYXNzTmFtZSwgb3B0cykge1xuICAgICAgICB2YXIgd3JhcHBlciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJudW1JbnB1dFdyYXBwZXJcIiksIG51bUlucHV0ID0gY3JlYXRlRWxlbWVudChcImlucHV0XCIsIFwibnVtSW5wdXQgXCIgKyBpbnB1dENsYXNzTmFtZSksIGFycm93VXAgPSBjcmVhdGVFbGVtZW50KFwic3BhblwiLCBcImFycm93VXBcIiksIGFycm93RG93biA9IGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiYXJyb3dEb3duXCIpO1xuICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKFwiTVNJRSA5LjBcIikgPT09IC0xKSB7XG4gICAgICAgICAgICBudW1JbnB1dC50eXBlID0gXCJudW1iZXJcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG51bUlucHV0LnR5cGUgPSBcInRleHRcIjtcbiAgICAgICAgICAgIG51bUlucHV0LnBhdHRlcm4gPSBcIlxcXFxkKlwiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gb3B0cylcbiAgICAgICAgICAgICAgICBudW1JbnB1dC5zZXRBdHRyaWJ1dGUoa2V5LCBvcHRzW2tleV0pO1xuICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKG51bUlucHV0KTtcbiAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChhcnJvd1VwKTtcbiAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChhcnJvd0Rvd24pO1xuICAgICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RXZlbnRUYXJnZXQoZXZlbnQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBldmVudC5jb21wb3NlZFBhdGggPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdmFyIHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcbiAgICAgICAgICAgIHJldHVybiBwYXRoWzBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudC50YXJnZXQ7XG4gICAgfVxuXG4gICAgdmFyIGRvTm90aGluZyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfTtcbiAgICB2YXIgbW9udGhUb1N0ciA9IGZ1bmN0aW9uIChtb250aE51bWJlciwgc2hvcnRoYW5kLCBsb2NhbGUpIHsgcmV0dXJuIGxvY2FsZS5tb250aHNbc2hvcnRoYW5kID8gXCJzaG9ydGhhbmRcIiA6IFwibG9uZ2hhbmRcIl1bbW9udGhOdW1iZXJdOyB9O1xuICAgIHZhciByZXZGb3JtYXQgPSB7XG4gICAgICAgIEQ6IGRvTm90aGluZyxcbiAgICAgICAgRjogZnVuY3Rpb24gKGRhdGVPYmosIG1vbnRoTmFtZSwgbG9jYWxlKSB7XG4gICAgICAgICAgICBkYXRlT2JqLnNldE1vbnRoKGxvY2FsZS5tb250aHMubG9uZ2hhbmQuaW5kZXhPZihtb250aE5hbWUpKTtcbiAgICAgICAgfSxcbiAgICAgICAgRzogZnVuY3Rpb24gKGRhdGVPYmosIGhvdXIpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0SG91cnMocGFyc2VGbG9hdChob3VyKSk7XG4gICAgICAgIH0sXG4gICAgICAgIEg6IGZ1bmN0aW9uIChkYXRlT2JqLCBob3VyKSB7XG4gICAgICAgICAgICBkYXRlT2JqLnNldEhvdXJzKHBhcnNlRmxvYXQoaG91cikpO1xuICAgICAgICB9LFxuICAgICAgICBKOiBmdW5jdGlvbiAoZGF0ZU9iaiwgZGF5KSB7XG4gICAgICAgICAgICBkYXRlT2JqLnNldERhdGUocGFyc2VGbG9hdChkYXkpKTtcbiAgICAgICAgfSxcbiAgICAgICAgSzogZnVuY3Rpb24gKGRhdGVPYmosIGFtUE0sIGxvY2FsZSkge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRIb3VycygoZGF0ZU9iai5nZXRIb3VycygpICUgMTIpICtcbiAgICAgICAgICAgICAgICAxMiAqIGludChuZXcgUmVnRXhwKGxvY2FsZS5hbVBNWzFdLCBcImlcIikudGVzdChhbVBNKSkpO1xuICAgICAgICB9LFxuICAgICAgICBNOiBmdW5jdGlvbiAoZGF0ZU9iaiwgc2hvcnRNb250aCwgbG9jYWxlKSB7XG4gICAgICAgICAgICBkYXRlT2JqLnNldE1vbnRoKGxvY2FsZS5tb250aHMuc2hvcnRoYW5kLmluZGV4T2Yoc2hvcnRNb250aCkpO1xuICAgICAgICB9LFxuICAgICAgICBTOiBmdW5jdGlvbiAoZGF0ZU9iaiwgc2Vjb25kcykge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRTZWNvbmRzKHBhcnNlRmxvYXQoc2Vjb25kcykpO1xuICAgICAgICB9LFxuICAgICAgICBVOiBmdW5jdGlvbiAoXywgdW5peFNlY29uZHMpIHsgcmV0dXJuIG5ldyBEYXRlKHBhcnNlRmxvYXQodW5peFNlY29uZHMpICogMTAwMCk7IH0sXG4gICAgICAgIFc6IGZ1bmN0aW9uIChkYXRlT2JqLCB3ZWVrTnVtLCBsb2NhbGUpIHtcbiAgICAgICAgICAgIHZhciB3ZWVrTnVtYmVyID0gcGFyc2VJbnQod2Vla051bSk7XG4gICAgICAgICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKGRhdGVPYmouZ2V0RnVsbFllYXIoKSwgMCwgMiArICh3ZWVrTnVtYmVyIC0gMSkgKiA3LCAwLCAwLCAwLCAwKTtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIGRhdGUuZ2V0RGF5KCkgKyBsb2NhbGUuZmlyc3REYXlPZldlZWspO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICAgIH0sXG4gICAgICAgIFk6IGZ1bmN0aW9uIChkYXRlT2JqLCB5ZWFyKSB7XG4gICAgICAgICAgICBkYXRlT2JqLnNldEZ1bGxZZWFyKHBhcnNlRmxvYXQoeWVhcikpO1xuICAgICAgICB9LFxuICAgICAgICBaOiBmdW5jdGlvbiAoXywgSVNPRGF0ZSkgeyByZXR1cm4gbmV3IERhdGUoSVNPRGF0ZSk7IH0sXG4gICAgICAgIGQ6IGZ1bmN0aW9uIChkYXRlT2JqLCBkYXkpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0RGF0ZShwYXJzZUZsb2F0KGRheSkpO1xuICAgICAgICB9LFxuICAgICAgICBoOiBmdW5jdGlvbiAoZGF0ZU9iaiwgaG91cikge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRIb3VycyhwYXJzZUZsb2F0KGhvdXIpKTtcbiAgICAgICAgfSxcbiAgICAgICAgaTogZnVuY3Rpb24gKGRhdGVPYmosIG1pbnV0ZXMpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0TWludXRlcyhwYXJzZUZsb2F0KG1pbnV0ZXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgajogZnVuY3Rpb24gKGRhdGVPYmosIGRheSkge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXREYXRlKHBhcnNlRmxvYXQoZGF5KSk7XG4gICAgICAgIH0sXG4gICAgICAgIGw6IGRvTm90aGluZyxcbiAgICAgICAgbTogZnVuY3Rpb24gKGRhdGVPYmosIG1vbnRoKSB7XG4gICAgICAgICAgICBkYXRlT2JqLnNldE1vbnRoKHBhcnNlRmxvYXQobW9udGgpIC0gMSk7XG4gICAgICAgIH0sXG4gICAgICAgIG46IGZ1bmN0aW9uIChkYXRlT2JqLCBtb250aCkge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRNb250aChwYXJzZUZsb2F0KG1vbnRoKSAtIDEpO1xuICAgICAgICB9LFxuICAgICAgICBzOiBmdW5jdGlvbiAoZGF0ZU9iaiwgc2Vjb25kcykge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRTZWNvbmRzKHBhcnNlRmxvYXQoc2Vjb25kcykpO1xuICAgICAgICB9LFxuICAgICAgICB1OiBmdW5jdGlvbiAoXywgdW5peE1pbGxTZWNvbmRzKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUocGFyc2VGbG9hdCh1bml4TWlsbFNlY29uZHMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgdzogZG9Ob3RoaW5nLFxuICAgICAgICB5OiBmdW5jdGlvbiAoZGF0ZU9iaiwgeWVhcikge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRGdWxsWWVhcigyMDAwICsgcGFyc2VGbG9hdCh5ZWFyKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHZhciB0b2tlblJlZ2V4ID0ge1xuICAgICAgICBEOiBcIihcXFxcdyspXCIsXG4gICAgICAgIEY6IFwiKFxcXFx3KylcIixcbiAgICAgICAgRzogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICAgICAgSDogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICAgICAgSjogXCIoXFxcXGRcXFxcZHxcXFxcZClcXFxcdytcIixcbiAgICAgICAgSzogXCJcIixcbiAgICAgICAgTTogXCIoXFxcXHcrKVwiLFxuICAgICAgICBTOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgICAgICBVOiBcIiguKylcIixcbiAgICAgICAgVzogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICAgICAgWTogXCIoXFxcXGR7NH0pXCIsXG4gICAgICAgIFo6IFwiKC4rKVwiLFxuICAgICAgICBkOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgICAgICBoOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgICAgICBpOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgICAgICBqOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgICAgICBsOiBcIihcXFxcdyspXCIsXG4gICAgICAgIG06IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgICAgIG46IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgICAgIHM6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgICAgIHU6IFwiKC4rKVwiLFxuICAgICAgICB3OiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgICAgICB5OiBcIihcXFxcZHsyfSlcIlxuICAgIH07XG4gICAgdmFyIGZvcm1hdHMgPSB7XG4gICAgICAgIC8vIGdldCB0aGUgZGF0ZSBpbiBVVENcbiAgICAgICAgWjogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKTsgfSxcbiAgICAgICAgLy8gd2Vla2RheSBuYW1lLCBzaG9ydCwgZS5nLiBUaHVcbiAgICAgICAgRDogZnVuY3Rpb24gKGRhdGUsIGxvY2FsZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5cy5zaG9ydGhhbmRbZm9ybWF0cy53KGRhdGUsIGxvY2FsZSwgb3B0aW9ucyldO1xuICAgICAgICB9LFxuICAgICAgICAvLyBmdWxsIG1vbnRoIG5hbWUgZS5nLiBKYW51YXJ5XG4gICAgICAgIEY6IGZ1bmN0aW9uIChkYXRlLCBsb2NhbGUsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBtb250aFRvU3RyKGZvcm1hdHMubihkYXRlLCBsb2NhbGUsIG9wdGlvbnMpIC0gMSwgZmFsc2UsIGxvY2FsZSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIHBhZGRlZCBob3VyIDEtMTJcbiAgICAgICAgRzogZnVuY3Rpb24gKGRhdGUsIGxvY2FsZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIHBhZChmb3JtYXRzLmgoZGF0ZSwgbG9jYWxlLCBvcHRpb25zKSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGhvdXJzIHdpdGggbGVhZGluZyB6ZXJvIGUuZy4gMDNcbiAgICAgICAgSDogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIHBhZChkYXRlLmdldEhvdXJzKCkpOyB9LFxuICAgICAgICAvLyBkYXkgKDEtMzApIHdpdGggb3JkaW5hbCBzdWZmaXggZS5nLiAxc3QsIDJuZFxuICAgICAgICBKOiBmdW5jdGlvbiAoZGF0ZSwgbG9jYWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLm9yZGluYWwgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gZGF0ZS5nZXREYXRlKCkgKyBsb2NhbGUub3JkaW5hbChkYXRlLmdldERhdGUoKSlcbiAgICAgICAgICAgICAgICA6IGRhdGUuZ2V0RGF0ZSgpO1xuICAgICAgICB9LFxuICAgICAgICAvLyBBTS9QTVxuICAgICAgICBLOiBmdW5jdGlvbiAoZGF0ZSwgbG9jYWxlKSB7IHJldHVybiBsb2NhbGUuYW1QTVtpbnQoZGF0ZS5nZXRIb3VycygpID4gMTEpXTsgfSxcbiAgICAgICAgLy8gc2hvcnRoYW5kIG1vbnRoIGUuZy4gSmFuLCBTZXAsIE9jdCwgZXRjXG4gICAgICAgIE06IGZ1bmN0aW9uIChkYXRlLCBsb2NhbGUpIHtcbiAgICAgICAgICAgIHJldHVybiBtb250aFRvU3RyKGRhdGUuZ2V0TW9udGgoKSwgdHJ1ZSwgbG9jYWxlKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gc2Vjb25kcyAwMC01OVxuICAgICAgICBTOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gcGFkKGRhdGUuZ2V0U2Vjb25kcygpKTsgfSxcbiAgICAgICAgLy8gdW5peCB0aW1lc3RhbXBcbiAgICAgICAgVTogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIGRhdGUuZ2V0VGltZSgpIC8gMTAwMDsgfSxcbiAgICAgICAgVzogZnVuY3Rpb24gKGRhdGUsIF8sIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmdldFdlZWsoZGF0ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGZ1bGwgeWVhciBlLmcuIDIwMTZcbiAgICAgICAgWTogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIGRhdGUuZ2V0RnVsbFllYXIoKTsgfSxcbiAgICAgICAgLy8gZGF5IGluIG1vbnRoLCBwYWRkZWQgKDAxLTMwKVxuICAgICAgICBkOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gcGFkKGRhdGUuZ2V0RGF0ZSgpKTsgfSxcbiAgICAgICAgLy8gaG91ciBmcm9tIDEtMTIgKGFtL3BtKVxuICAgICAgICBoOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gKGRhdGUuZ2V0SG91cnMoKSAlIDEyID8gZGF0ZS5nZXRIb3VycygpICUgMTIgOiAxMik7IH0sXG4gICAgICAgIC8vIG1pbnV0ZXMsIHBhZGRlZCB3aXRoIGxlYWRpbmcgemVybyBlLmcuIDA5XG4gICAgICAgIGk6IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBwYWQoZGF0ZS5nZXRNaW51dGVzKCkpOyB9LFxuICAgICAgICAvLyBkYXkgaW4gbW9udGggKDEtMzApXG4gICAgICAgIGo6IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBkYXRlLmdldERhdGUoKTsgfSxcbiAgICAgICAgLy8gd2Vla2RheSBuYW1lLCBmdWxsLCBlLmcuIFRodXJzZGF5XG4gICAgICAgIGw6IGZ1bmN0aW9uIChkYXRlLCBsb2NhbGUpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXMubG9uZ2hhbmRbZGF0ZS5nZXREYXkoKV07XG4gICAgICAgIH0sXG4gICAgICAgIC8vIHBhZGRlZCBtb250aCBudW1iZXIgKDAxLTEyKVxuICAgICAgICBtOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gcGFkKGRhdGUuZ2V0TW9udGgoKSArIDEpOyB9LFxuICAgICAgICAvLyB0aGUgbW9udGggbnVtYmVyICgxLTEyKVxuICAgICAgICBuOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gZGF0ZS5nZXRNb250aCgpICsgMTsgfSxcbiAgICAgICAgLy8gc2Vjb25kcyAwLTU5XG4gICAgICAgIHM6IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBkYXRlLmdldFNlY29uZHMoKTsgfSxcbiAgICAgICAgLy8gVW5peCBNaWxsaXNlY29uZHNcbiAgICAgICAgdTogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIGRhdGUuZ2V0VGltZSgpOyB9LFxuICAgICAgICAvLyBudW1iZXIgb2YgdGhlIGRheSBvZiB0aGUgd2Vla1xuICAgICAgICB3OiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gZGF0ZS5nZXREYXkoKTsgfSxcbiAgICAgICAgLy8gbGFzdCB0d28gZGlnaXRzIG9mIHllYXIgZS5nLiAxNiBmb3IgMjAxNlxuICAgICAgICB5OiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gU3RyaW5nKGRhdGUuZ2V0RnVsbFllYXIoKSkuc3Vic3RyaW5nKDIpOyB9XG4gICAgfTtcblxuICAgIHZhciBjcmVhdGVEYXRlRm9ybWF0dGVyID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciBfYiA9IF9hLmNvbmZpZywgY29uZmlnID0gX2IgPT09IHZvaWQgMCA/IGRlZmF1bHRzIDogX2IsIF9jID0gX2EubDEwbiwgbDEwbiA9IF9jID09PSB2b2lkIDAgPyBlbmdsaXNoIDogX2M7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZGF0ZU9iaiwgZnJtdCwgb3ZlcnJpZGVMb2NhbGUpIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUgPSBvdmVycmlkZUxvY2FsZSB8fCBsMTBuO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5mb3JtYXREYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLmZvcm1hdERhdGUoZGF0ZU9iaiwgZnJtdCwgbG9jYWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmcm10XG4gICAgICAgICAgICAgICAgLnNwbGl0KFwiXCIpXG4gICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoYywgaSwgYXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHNbY10gJiYgYXJyW2kgLSAxXSAhPT0gXCJcXFxcXCJcbiAgICAgICAgICAgICAgICAgICAgPyBmb3JtYXRzW2NdKGRhdGVPYmosIGxvY2FsZSwgY29uZmlnKVxuICAgICAgICAgICAgICAgICAgICA6IGMgIT09IFwiXFxcXFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmpvaW4oXCJcIik7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgY3JlYXRlRGF0ZVBhcnNlciA9IGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgX2IgPSBfYS5jb25maWcsIGNvbmZpZyA9IF9iID09PSB2b2lkIDAgPyBkZWZhdWx0cyA6IF9iLCBfYyA9IF9hLmwxMG4sIGwxMG4gPSBfYyA9PT0gdm9pZCAwID8gZW5nbGlzaCA6IF9jO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGUsIGdpdmVuRm9ybWF0LCB0aW1lbGVzcywgY3VzdG9tTG9jYWxlKSB7XG4gICAgICAgICAgICBpZiAoZGF0ZSAhPT0gMCAmJiAhZGF0ZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdmFyIGxvY2FsZSA9IGN1c3RvbUxvY2FsZSB8fCBsMTBuO1xuICAgICAgICAgICAgdmFyIHBhcnNlZERhdGU7XG4gICAgICAgICAgICB2YXIgZGF0ZU9yaWcgPSBkYXRlO1xuICAgICAgICAgICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlKVxuICAgICAgICAgICAgICAgIHBhcnNlZERhdGUgPSBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgZGF0ZSAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICAgIGRhdGUudG9GaXhlZCAhPT0gdW5kZWZpbmVkIC8vIHRpbWVzdGFtcFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhIGNvcHlcbiAgICAgICAgICAgICAgICBwYXJzZWREYXRlID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgZGF0ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIC8vIGRhdGUgc3RyaW5nXG4gICAgICAgICAgICAgICAgdmFyIGZvcm1hdCA9IGdpdmVuRm9ybWF0IHx8IChjb25maWcgfHwgZGVmYXVsdHMpLmRhdGVGb3JtYXQ7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGVzdHIgPSBTdHJpbmcoZGF0ZSkudHJpbSgpO1xuICAgICAgICAgICAgICAgIGlmIChkYXRlc3RyID09PSBcInRvZGF5XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkRGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVsZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoL1okLy50ZXN0KGRhdGVzdHIpIHx8XG4gICAgICAgICAgICAgICAgICAgIC9HTVQkLy50ZXN0KGRhdGVzdHIpIC8vIGRhdGVzdHJpbmdzIHcvIHRpbWV6b25lXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBwYXJzZWREYXRlID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29uZmlnICYmIGNvbmZpZy5wYXJzZURhdGUpXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZERhdGUgPSBjb25maWcucGFyc2VEYXRlKGRhdGUsIGZvcm1hdCk7XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZERhdGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgIWNvbmZpZyB8fCAhY29uZmlnLm5vQ2FsZW5kYXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSwgMCwgMSwgMCwgMCwgMCwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG5ldyBEYXRlKG5ldyBEYXRlKCkuc2V0SG91cnMoMCwgMCwgMCwgMCkpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2hlZCA9IHZvaWQgMCwgb3BzID0gW107XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBtYXRjaEluZGV4ID0gMCwgcmVnZXhTdHIgPSBcIlwiOyBpIDwgZm9ybWF0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW5fMSA9IGZvcm1hdFtpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc0JhY2tTbGFzaCA9IHRva2VuXzEgPT09IFwiXFxcXFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVzY2FwZWQgPSBmb3JtYXRbaSAtIDFdID09PSBcIlxcXFxcIiB8fCBpc0JhY2tTbGFzaDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlblJlZ2V4W3Rva2VuXzFdICYmICFlc2NhcGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXhTdHIgKz0gdG9rZW5SZWdleFt0b2tlbl8xXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBuZXcgUmVnRXhwKHJlZ2V4U3RyKS5leGVjKGRhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCAmJiAobWF0Y2hlZCA9IHRydWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wc1t0b2tlbl8xICE9PSBcIllcIiA/IFwicHVzaFwiIDogXCJ1bnNoaWZ0XCJdKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuOiByZXZGb3JtYXRbdG9rZW5fMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWw6IG1hdGNoWysrbWF0Y2hJbmRleF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWlzQmFja1NsYXNoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4U3RyICs9IFwiLlwiOyAvLyBkb24ndCByZWFsbHkgY2FyZVxuICAgICAgICAgICAgICAgICAgICAgICAgb3BzLmZvckVhY2goZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuID0gX2EuZm4sIHZhbCA9IF9hLnZhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHBhcnNlZERhdGUgPSBmbihwYXJzZWREYXRlLCB2YWwsIGxvY2FsZSkgfHwgcGFyc2VkRGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwYXJzZWREYXRlID0gbWF0Y2hlZCA/IHBhcnNlZERhdGUgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgIGlmICghKHBhcnNlZERhdGUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihwYXJzZWREYXRlLmdldFRpbWUoKSkpKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLmVycm9ySGFuZGxlcihuZXcgRXJyb3IoXCJJbnZhbGlkIGRhdGUgcHJvdmlkZWQ6IFwiICsgZGF0ZU9yaWcpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRpbWVsZXNzID09PSB0cnVlKVxuICAgICAgICAgICAgICAgIHBhcnNlZERhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VkRGF0ZTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIENvbXB1dGUgdGhlIGRpZmZlcmVuY2UgaW4gZGF0ZXMsIG1lYXN1cmVkIGluIG1zXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29tcGFyZURhdGVzKGRhdGUxLCBkYXRlMiwgdGltZWxlc3MpIHtcbiAgICAgICAgaWYgKHRpbWVsZXNzID09PSB2b2lkIDApIHsgdGltZWxlc3MgPSB0cnVlOyB9XG4gICAgICAgIGlmICh0aW1lbGVzcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiAobmV3IERhdGUoZGF0ZTEuZ2V0VGltZSgpKS5zZXRIb3VycygwLCAwLCAwLCAwKSAtXG4gICAgICAgICAgICAgICAgbmV3IERhdGUoZGF0ZTIuZ2V0VGltZSgpKS5zZXRIb3VycygwLCAwLCAwLCAwKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGUxLmdldFRpbWUoKSAtIGRhdGUyLmdldFRpbWUoKTtcbiAgICB9XG4gICAgdmFyIGlzQmV0d2VlbiA9IGZ1bmN0aW9uICh0cywgdHMxLCB0czIpIHtcbiAgICAgICAgcmV0dXJuIHRzID4gTWF0aC5taW4odHMxLCB0czIpICYmIHRzIDwgTWF0aC5tYXgodHMxLCB0czIpO1xuICAgIH07XG4gICAgdmFyIGR1cmF0aW9uID0ge1xuICAgICAgICBEQVk6IDg2NDAwMDAwXG4gICAgfTtcblxuICAgIGlmICh0eXBlb2YgT2JqZWN0LmFzc2lnbiAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24gPSBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICBhcmdzW19pIC0gMV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3RcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHNvdXJjZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IHJldHVybiAodGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XSk7IH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKHZhciBfYSA9IDAsIGFyZ3NfMSA9IGFyZ3M7IF9hIDwgYXJnc18xLmxlbmd0aDsgX2ErKykge1xuICAgICAgICAgICAgICAgIHZhciBzb3VyY2UgPSBhcmdzXzFbX2FdO1xuICAgICAgICAgICAgICAgIF9sb29wXzEoc291cmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIERFQk9VTkNFRF9DSEFOR0VfTVMgPSAzMDA7XG4gICAgZnVuY3Rpb24gRmxhdHBpY2tySW5zdGFuY2UoZWxlbWVudCwgaW5zdGFuY2VDb25maWcpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB7XG4gICAgICAgICAgICBjb25maWc6IF9fYXNzaWduKHt9LCBkZWZhdWx0cywgZmxhdHBpY2tyLmRlZmF1bHRDb25maWcpLFxuICAgICAgICAgICAgbDEwbjogZW5nbGlzaFxuICAgICAgICB9O1xuICAgICAgICBzZWxmLnBhcnNlRGF0ZSA9IGNyZWF0ZURhdGVQYXJzZXIoeyBjb25maWc6IHNlbGYuY29uZmlnLCBsMTBuOiBzZWxmLmwxMG4gfSk7XG4gICAgICAgIHNlbGYuX2hhbmRsZXJzID0gW107XG4gICAgICAgIHNlbGYucGx1Z2luRWxlbWVudHMgPSBbXTtcbiAgICAgICAgc2VsZi5sb2FkZWRQbHVnaW5zID0gW107XG4gICAgICAgIHNlbGYuX2JpbmQgPSBiaW5kO1xuICAgICAgICBzZWxmLl9zZXRIb3Vyc0Zyb21EYXRlID0gc2V0SG91cnNGcm9tRGF0ZTtcbiAgICAgICAgc2VsZi5fcG9zaXRpb25DYWxlbmRhciA9IHBvc2l0aW9uQ2FsZW5kYXI7XG4gICAgICAgIHNlbGYuY2hhbmdlTW9udGggPSBjaGFuZ2VNb250aDtcbiAgICAgICAgc2VsZi5jaGFuZ2VZZWFyID0gY2hhbmdlWWVhcjtcbiAgICAgICAgc2VsZi5jbGVhciA9IGNsZWFyO1xuICAgICAgICBzZWxmLmNsb3NlID0gY2xvc2U7XG4gICAgICAgIHNlbGYuX2NyZWF0ZUVsZW1lbnQgPSBjcmVhdGVFbGVtZW50O1xuICAgICAgICBzZWxmLmRlc3Ryb3kgPSBkZXN0cm95O1xuICAgICAgICBzZWxmLmlzRW5hYmxlZCA9IGlzRW5hYmxlZDtcbiAgICAgICAgc2VsZi5qdW1wVG9EYXRlID0ganVtcFRvRGF0ZTtcbiAgICAgICAgc2VsZi5vcGVuID0gb3BlbjtcbiAgICAgICAgc2VsZi5yZWRyYXcgPSByZWRyYXc7XG4gICAgICAgIHNlbGYuc2V0ID0gc2V0O1xuICAgICAgICBzZWxmLnNldERhdGUgPSBzZXREYXRlO1xuICAgICAgICBzZWxmLnRvZ2dsZSA9IHRvZ2dsZTtcbiAgICAgICAgZnVuY3Rpb24gc2V0dXBIZWxwZXJGdW5jdGlvbnMoKSB7XG4gICAgICAgICAgICBzZWxmLnV0aWxzID0ge1xuICAgICAgICAgICAgICAgIGdldERheXNJbk1vbnRoOiBmdW5jdGlvbiAobW9udGgsIHlyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtb250aCA9PT0gdm9pZCAwKSB7IG1vbnRoID0gc2VsZi5jdXJyZW50TW9udGg7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHlyID09PSB2b2lkIDApIHsgeXIgPSBzZWxmLmN1cnJlbnRZZWFyOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChtb250aCA9PT0gMSAmJiAoKHlyICUgNCA9PT0gMCAmJiB5ciAlIDEwMCAhPT0gMCkgfHwgeXIgJSA0MDAgPT09IDApKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDI5O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5sMTBuLmRheXNJbk1vbnRoW21vbnRoXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICAgICAgICBzZWxmLmVsZW1lbnQgPSBzZWxmLmlucHV0ID0gZWxlbWVudDtcbiAgICAgICAgICAgIHNlbGYuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgICAgICBwYXJzZUNvbmZpZygpO1xuICAgICAgICAgICAgc2V0dXBMb2NhbGUoKTtcbiAgICAgICAgICAgIHNldHVwSW5wdXRzKCk7XG4gICAgICAgICAgICBzZXR1cERhdGVzKCk7XG4gICAgICAgICAgICBzZXR1cEhlbHBlckZ1bmN0aW9ucygpO1xuICAgICAgICAgICAgaWYgKCFzZWxmLmlzTW9iaWxlKVxuICAgICAgICAgICAgICAgIGJ1aWxkKCk7XG4gICAgICAgICAgICBiaW5kRXZlbnRzKCk7XG4gICAgICAgICAgICBpZiAoc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCB8fCBzZWxmLmNvbmZpZy5ub0NhbGVuZGFyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmVuYWJsZVRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0SG91cnNGcm9tRGF0ZShzZWxmLmNvbmZpZy5ub0NhbGVuZGFyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqIHx8IHNlbGYuY29uZmlnLm1pbkRhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdXBkYXRlVmFsdWUoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0Q2FsZW5kYXJXaWR0aCgpO1xuICAgICAgICAgICAgc2VsZi5zaG93VGltZUlucHV0ID1cbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID4gMCB8fCBzZWxmLmNvbmZpZy5ub0NhbGVuZGFyO1xuICAgICAgICAgICAgdmFyIGlzU2FmYXJpID0gL14oKD8hY2hyb21lfGFuZHJvaWQpLikqc2FmYXJpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICAgICAgICAgIC8qIFRPRE86IGludmVzdGlnYXRlIHRoaXMgZnVydGhlclxuICAgICAgICBcbiAgICAgICAgICAgICAgQ3VycmVudGx5LCB0aGVyZSBpcyB3ZWlyZCBwb3NpdGlvbmluZyBiZWhhdmlvciBpbiBzYWZhcmkgY2F1c2luZyBwYWdlc1xuICAgICAgICAgICAgICB0byBzY3JvbGwgdXAuIGh0dHBzOi8vZ2l0aHViLmNvbS9jaG1sbi9mbGF0cGlja3IvaXNzdWVzLzU2M1xuICAgICAgICBcbiAgICAgICAgICAgICAgSG93ZXZlciwgbW9zdCBicm93c2VycyBhcmUgbm90IFNhZmFyaSBhbmQgcG9zaXRpb25pbmcgaXMgZXhwZW5zaXZlIHdoZW4gdXNlZFxuICAgICAgICAgICAgICBpbiBzY2FsZS4gaHR0cHM6Ly9naXRodWIuY29tL2NobWxuL2ZsYXRwaWNrci9pc3N1ZXMvMTA5NlxuICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmICghc2VsZi5pc01vYmlsZSAmJiBpc1NhZmFyaSkge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uQ2FsZW5kYXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uUmVhZHlcIik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYmluZFRvSW5zdGFuY2UoZm4pIHtcbiAgICAgICAgICAgIHJldHVybiBmbi5iaW5kKHNlbGYpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldENhbGVuZGFyV2lkdGgoKSB7XG4gICAgICAgICAgICB2YXIgY29uZmlnID0gc2VsZi5jb25maWc7XG4gICAgICAgICAgICBpZiAoY29uZmlnLndlZWtOdW1iZXJzID09PSBmYWxzZSAmJiBjb25maWcuc2hvd01vbnRocyA9PT0gMSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBlbHNlIGlmIChjb25maWcubm9DYWxlbmRhciAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5jYWxlbmRhckNvbnRhaW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmRheXNDb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRheXNXaWR0aCA9IChzZWxmLmRheXMub2Zmc2V0V2lkdGggKyAxKSAqIGNvbmZpZy5zaG93TW9udGhzO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kYXlzQ29udGFpbmVyLnN0eWxlLndpZHRoID0gZGF5c1dpZHRoICsgXCJweFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS53aWR0aCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5c1dpZHRoICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYud2Vla1dyYXBwZXIgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLndlZWtXcmFwcGVyLm9mZnNldFdpZHRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJweFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcInZpc2liaWxpdHlcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnN0eWxlLnJlbW92ZVByb3BlcnR5KFwiZGlzcGxheVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgaGFuZGxlciBmb3IgYWxsIGV2ZW50cyB0YXJnZXRpbmcgdGhlIHRpbWUgaW5wdXRzXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiB1cGRhdGVUaW1lKGUpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc2V0RGVmYXVsdFRpbWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlICE9PSB1bmRlZmluZWQgJiYgZS50eXBlICE9PSBcImJsdXJcIikge1xuICAgICAgICAgICAgICAgIHRpbWVXcmFwcGVyKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHByZXZWYWx1ZSA9IHNlbGYuX2lucHV0LnZhbHVlO1xuICAgICAgICAgICAgc2V0SG91cnNGcm9tSW5wdXRzKCk7XG4gICAgICAgICAgICB1cGRhdGVWYWx1ZSgpO1xuICAgICAgICAgICAgaWYgKHNlbGYuX2lucHV0LnZhbHVlICE9PSBwcmV2VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9kZWJvdW5jZWRDaGFuZ2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhbXBtMm1pbGl0YXJ5KGhvdXIsIGFtUE0pIHtcbiAgICAgICAgICAgIHJldHVybiAoaG91ciAlIDEyKSArIDEyICogaW50KGFtUE0gPT09IHNlbGYubDEwbi5hbVBNWzFdKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBtaWxpdGFyeTJhbXBtKGhvdXIpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoaG91ciAlIDI0KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAxMjtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaG91ciAlIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTeW5jcyB0aGUgc2VsZWN0ZWQgZGF0ZSBvYmplY3QgdGltZSB3aXRoIHVzZXIncyB0aW1lIGlucHV0XG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBzZXRIb3Vyc0Zyb21JbnB1dHMoKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5ob3VyRWxlbWVudCA9PT0gdW5kZWZpbmVkIHx8IHNlbGYubWludXRlRWxlbWVudCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciBob3VycyA9IChwYXJzZUludChzZWxmLmhvdXJFbGVtZW50LnZhbHVlLnNsaWNlKC0yKSwgMTApIHx8IDApICUgMjQsIG1pbnV0ZXMgPSAocGFyc2VJbnQoc2VsZi5taW51dGVFbGVtZW50LnZhbHVlLCAxMCkgfHwgMCkgJSA2MCwgc2Vjb25kcyA9IHNlbGYuc2Vjb25kRWxlbWVudCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyAocGFyc2VJbnQoc2VsZi5zZWNvbmRFbGVtZW50LnZhbHVlLCAxMCkgfHwgMCkgJSA2MFxuICAgICAgICAgICAgICAgIDogMDtcbiAgICAgICAgICAgIGlmIChzZWxmLmFtUE0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGhvdXJzID0gYW1wbTJtaWxpdGFyeShob3Vycywgc2VsZi5hbVBNLnRleHRDb250ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBsaW1pdE1pbkhvdXJzID0gc2VsZi5jb25maWcubWluVGltZSAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgKHNlbGYuY29uZmlnLm1pbkRhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5taW5EYXRlSGFzVGltZSAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiAmJlxuICAgICAgICAgICAgICAgICAgICBjb21wYXJlRGF0ZXMoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmosIHNlbGYuY29uZmlnLm1pbkRhdGUsIHRydWUpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgMCk7XG4gICAgICAgICAgICB2YXIgbGltaXRNYXhIb3VycyA9IHNlbGYuY29uZmlnLm1heFRpbWUgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgIChzZWxmLmNvbmZpZy5tYXhEYXRlICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYubWF4RGF0ZUhhc1RpbWUgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogJiZcbiAgICAgICAgICAgICAgICAgICAgY29tcGFyZURhdGVzKHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqLCBzZWxmLmNvbmZpZy5tYXhEYXRlLCB0cnVlKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgIDApO1xuICAgICAgICAgICAgaWYgKGxpbWl0TWF4SG91cnMpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWF4VGltZSA9IHNlbGYuY29uZmlnLm1heFRpbWUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLm1heFRpbWVcbiAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy5tYXhEYXRlO1xuICAgICAgICAgICAgICAgIGhvdXJzID0gTWF0aC5taW4oaG91cnMsIG1heFRpbWUuZ2V0SG91cnMoKSk7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzID09PSBtYXhUaW1lLmdldEhvdXJzKCkpXG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSBNYXRoLm1pbihtaW51dGVzLCBtYXhUaW1lLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgICAgICAgICAgaWYgKG1pbnV0ZXMgPT09IG1heFRpbWUuZ2V0TWludXRlcygpKVxuICAgICAgICAgICAgICAgICAgICBzZWNvbmRzID0gTWF0aC5taW4oc2Vjb25kcywgbWF4VGltZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxpbWl0TWluSG91cnMpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWluVGltZSA9IHNlbGYuY29uZmlnLm1pblRpbWUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLm1pblRpbWVcbiAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy5taW5EYXRlO1xuICAgICAgICAgICAgICAgIGhvdXJzID0gTWF0aC5tYXgoaG91cnMsIG1pblRpbWUuZ2V0SG91cnMoKSk7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzID09PSBtaW5UaW1lLmdldEhvdXJzKCkpXG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSBNYXRoLm1heChtaW51dGVzLCBtaW5UaW1lLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgICAgICAgICAgaWYgKG1pbnV0ZXMgPT09IG1pblRpbWUuZ2V0TWludXRlcygpKVxuICAgICAgICAgICAgICAgICAgICBzZWNvbmRzID0gTWF0aC5tYXgoc2Vjb25kcywgbWluVGltZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTeW5jcyB0aW1lIGlucHV0IHZhbHVlcyB3aXRoIGEgZGF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gc2V0SG91cnNGcm9tRGF0ZShkYXRlT2JqKSB7XG4gICAgICAgICAgICB2YXIgZGF0ZSA9IGRhdGVPYmogfHwgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmo7XG4gICAgICAgICAgICBpZiAoZGF0ZSlcbiAgICAgICAgICAgICAgICBzZXRIb3VycyhkYXRlLmdldEhvdXJzKCksIGRhdGUuZ2V0TWludXRlcygpLCBkYXRlLmdldFNlY29uZHMoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0RGVmYXVsdEhvdXJzKCkge1xuICAgICAgICAgICAgdmFyIGhvdXJzID0gc2VsZi5jb25maWcuZGVmYXVsdEhvdXI7XG4gICAgICAgICAgICB2YXIgbWludXRlcyA9IHNlbGYuY29uZmlnLmRlZmF1bHRNaW51dGU7XG4gICAgICAgICAgICB2YXIgc2Vjb25kcyA9IHNlbGYuY29uZmlnLmRlZmF1bHRTZWNvbmRzO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1pbkRhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHZhciBtaW5IciA9IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0SG91cnMoKTtcbiAgICAgICAgICAgICAgICB2YXIgbWluTWludXRlcyA9IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0TWludXRlcygpO1xuICAgICAgICAgICAgICAgIGhvdXJzID0gTWF0aC5tYXgoaG91cnMsIG1pbkhyKTtcbiAgICAgICAgICAgICAgICBpZiAoaG91cnMgPT09IG1pbkhyKVxuICAgICAgICAgICAgICAgICAgICBtaW51dGVzID0gTWF0aC5tYXgobWluTWludXRlcywgbWludXRlcyk7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzID09PSBtaW5IciAmJiBtaW51dGVzID09PSBtaW5NaW51dGVzKVxuICAgICAgICAgICAgICAgICAgICBzZWNvbmRzID0gc2VsZi5jb25maWcubWluRGF0ZS5nZXRTZWNvbmRzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubWF4RGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1heEhyID0gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRIb3VycygpO1xuICAgICAgICAgICAgICAgIHZhciBtYXhNaW51dGVzID0gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICAgICAgICAgICAgaG91cnMgPSBNYXRoLm1pbihob3VycywgbWF4SHIpO1xuICAgICAgICAgICAgICAgIGlmIChob3VycyA9PT0gbWF4SHIpXG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSBNYXRoLm1pbihtYXhNaW51dGVzLCBtaW51dGVzKTtcbiAgICAgICAgICAgICAgICBpZiAoaG91cnMgPT09IG1heEhyICYmIG1pbnV0ZXMgPT09IG1heE1pbnV0ZXMpXG4gICAgICAgICAgICAgICAgICAgIHNlY29uZHMgPSBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldFNlY29uZHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldEhvdXJzKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyB0aGUgaG91cnMsIG1pbnV0ZXMsIGFuZCBvcHRpb25hbGx5IHNlY29uZHNcbiAgICAgICAgICogb2YgdGhlIGxhdGVzdCBzZWxlY3RlZCBkYXRlIG9iamVjdCBhbmQgdGhlXG4gICAgICAgICAqIGNvcnJlc3BvbmRpbmcgdGltZSBpbnB1dHNcbiAgICAgICAgICogQHBhcmFtIHtOdW1iZXJ9IGhvdXJzIHRoZSBob3VyLiB3aGV0aGVyIGl0cyBtaWxpdGFyeVxuICAgICAgICAgKiAgICAgICAgICAgICAgICAgb3IgYW0tcG0gZ2V0cyBpbmZlcnJlZCBmcm9tIGNvbmZpZ1xuICAgICAgICAgKiBAcGFyYW0ge051bWJlcn0gbWludXRlcyB0aGUgbWludXRlc1xuICAgICAgICAgKiBAcGFyYW0ge051bWJlcn0gc2Vjb25kcyB0aGUgc2Vjb25kcyAob3B0aW9uYWwpXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBzZXRIb3Vycyhob3VycywgbWludXRlcywgc2Vjb25kcykge1xuICAgICAgICAgICAgaWYgKHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iai5zZXRIb3Vycyhob3VycyAlIDI0LCBtaW51dGVzLCBzZWNvbmRzIHx8IDAsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzZWxmLmhvdXJFbGVtZW50IHx8ICFzZWxmLm1pbnV0ZUVsZW1lbnQgfHwgc2VsZi5pc01vYmlsZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50LnZhbHVlID0gcGFkKCFzZWxmLmNvbmZpZy50aW1lXzI0aHJcbiAgICAgICAgICAgICAgICA/ICgoMTIgKyBob3VycykgJSAxMikgKyAxMiAqIGludChob3VycyAlIDEyID09PSAwKVxuICAgICAgICAgICAgICAgIDogaG91cnMpO1xuICAgICAgICAgICAgc2VsZi5taW51dGVFbGVtZW50LnZhbHVlID0gcGFkKG1pbnV0ZXMpO1xuICAgICAgICAgICAgaWYgKHNlbGYuYW1QTSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHNlbGYuYW1QTS50ZXh0Q29udGVudCA9IHNlbGYubDEwbi5hbVBNW2ludChob3VycyA+PSAxMildO1xuICAgICAgICAgICAgaWYgKHNlbGYuc2Vjb25kRWxlbWVudCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHNlbGYuc2Vjb25kRWxlbWVudC52YWx1ZSA9IHBhZChzZWNvbmRzKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogSGFuZGxlcyB0aGUgeWVhciBpbnB1dCBhbmQgaW5jcmVtZW50aW5nIGV2ZW50c1xuICAgICAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudCB0aGUga2V5dXAgb3IgaW5jcmVtZW50IGV2ZW50XG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBvblllYXJJbnB1dChldmVudCkge1xuICAgICAgICAgICAgdmFyIHllYXIgPSBwYXJzZUludChldmVudC50YXJnZXQudmFsdWUpICsgKGV2ZW50LmRlbHRhIHx8IDApO1xuICAgICAgICAgICAgaWYgKHllYXIgLyAxMDAwID4gMSB8fFxuICAgICAgICAgICAgICAgIChldmVudC5rZXkgPT09IFwiRW50ZXJcIiAmJiAhL1teXFxkXS8udGVzdCh5ZWFyLnRvU3RyaW5nKCkpKSkge1xuICAgICAgICAgICAgICAgIGNoYW5nZVllYXIoeWVhcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEVzc2VudGlhbGx5IGFkZEV2ZW50TGlzdGVuZXIgKyB0cmFja2luZ1xuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgdGhlIGVsZW1lbnQgdG8gYWRkRXZlbnRMaXN0ZW5lciB0b1xuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgdGhlIGV2ZW50IG5hbWVcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciB0aGUgZXZlbnQgaGFuZGxlclxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gYmluZChlbGVtZW50LCBldmVudCwgaGFuZGxlciwgb3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgQXJyYXkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LmZvckVhY2goZnVuY3Rpb24gKGV2KSB7IHJldHVybiBiaW5kKGVsZW1lbnQsIGV2LCBoYW5kbGVyLCBvcHRpb25zKTsgfSk7XG4gICAgICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50LmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IHJldHVybiBiaW5kKGVsLCBldmVudCwgaGFuZGxlciwgb3B0aW9ucyk7IH0pO1xuICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyLCBvcHRpb25zKTtcbiAgICAgICAgICAgIHNlbGYuX2hhbmRsZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgICAgIGhhbmRsZXI6IGhhbmRsZXIsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgbW91c2Vkb3duIGhhbmRsZXIgd2hpY2ggbWltaWNzIGNsaWNrLlxuICAgICAgICAgKiBNaW5pbWl6ZXMgbGF0ZW5jeSwgc2luY2Ugd2UgZG9uJ3QgbmVlZCB0byB3YWl0IGZvciBtb3VzZXVwIGluIG1vc3QgY2FzZXMuXG4gICAgICAgICAqIEFsc28sIGF2b2lkcyBoYW5kbGluZyByaWdodCBjbGlja3MuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgdGhlIGV2ZW50IGhhbmRsZXJcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIG9uQ2xpY2soaGFuZGxlcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChldnQpIHtcbiAgICAgICAgICAgICAgICBldnQud2hpY2ggPT09IDEgJiYgaGFuZGxlcihldnQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0cmlnZ2VyQ2hhbmdlKCkge1xuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25DaGFuZ2VcIik7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFkZHMgYWxsIHRoZSBuZWNlc3NhcnkgZXZlbnQgbGlzdGVuZXJzXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBiaW5kRXZlbnRzKCkge1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLndyYXApIHtcbiAgICAgICAgICAgICAgICBbXCJvcGVuXCIsIFwiY2xvc2VcIiwgXCJ0b2dnbGVcIiwgXCJjbGVhclwiXS5mb3JFYWNoKGZ1bmN0aW9uIChldnQpIHtcbiAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChzZWxmLmVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLVwiICsgZXZ0ICsgXCJdXCIpLCBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiaW5kKGVsLCBcImNsaWNrXCIsIHNlbGZbZXZ0XSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuaXNNb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBzZXR1cE1vYmlsZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBkZWJvdW5jZWRSZXNpemUgPSBkZWJvdW5jZShvblJlc2l6ZSwgNTApO1xuICAgICAgICAgICAgc2VsZi5fZGVib3VuY2VkQ2hhbmdlID0gZGVib3VuY2UodHJpZ2dlckNoYW5nZSwgREVCT1VOQ0VEX0NIQU5HRV9NUyk7XG4gICAgICAgICAgICBpZiAoc2VsZi5kYXlzQ29udGFpbmVyICYmICEvaVBob25lfGlQYWR8aVBvZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpXG4gICAgICAgICAgICAgICAgYmluZChzZWxmLmRheXNDb250YWluZXIsIFwibW91c2VvdmVyXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBvbk1vdXNlT3ZlcihlLnRhcmdldCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBiaW5kKHdpbmRvdy5kb2N1bWVudC5ib2R5LCBcImtleWRvd25cIiwgb25LZXlEb3duKTtcbiAgICAgICAgICAgIGlmICghc2VsZi5jb25maWcuaW5saW5lICYmICFzZWxmLmNvbmZpZy5zdGF0aWMpXG4gICAgICAgICAgICAgICAgYmluZCh3aW5kb3csIFwicmVzaXplXCIsIGRlYm91bmNlZFJlc2l6ZSk7XG4gICAgICAgICAgICBpZiAod2luZG93Lm9udG91Y2hzdGFydCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGJpbmQod2luZG93LmRvY3VtZW50LCBcInRvdWNoc3RhcnRcIiwgZG9jdW1lbnRDbGljayk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYmluZCh3aW5kb3cuZG9jdW1lbnQsIFwibW91c2Vkb3duXCIsIG9uQ2xpY2soZG9jdW1lbnRDbGljaykpO1xuICAgICAgICAgICAgYmluZCh3aW5kb3cuZG9jdW1lbnQsIFwiZm9jdXNcIiwgZG9jdW1lbnRDbGljaywgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmNsaWNrT3BlbnMgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBiaW5kKHNlbGYuX2lucHV0LCBcImZvY3VzXCIsIHNlbGYub3Blbik7XG4gICAgICAgICAgICAgICAgYmluZChzZWxmLl9pbnB1dCwgXCJtb3VzZWRvd25cIiwgb25DbGljayhzZWxmLm9wZW4pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmRheXNDb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGJpbmQoc2VsZi5tb250aE5hdiwgXCJtb3VzZWRvd25cIiwgb25DbGljayhvbk1vbnRoTmF2Q2xpY2spKTtcbiAgICAgICAgICAgICAgICBiaW5kKHNlbGYubW9udGhOYXYsIFtcImtleXVwXCIsIFwiaW5jcmVtZW50XCJdLCBvblllYXJJbnB1dCk7XG4gICAgICAgICAgICAgICAgYmluZChzZWxmLmRheXNDb250YWluZXIsIFwibW91c2Vkb3duXCIsIG9uQ2xpY2soc2VsZWN0RGF0ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYudGltZUNvbnRhaW5lciAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgc2VsZi5taW51dGVFbGVtZW50ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB2YXIgc2VsVGV4dCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlLnRhcmdldC5zZWxlY3QoKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJpbmQoc2VsZi50aW1lQ29udGFpbmVyLCBbXCJpbmNyZW1lbnRcIl0sIHVwZGF0ZVRpbWUpO1xuICAgICAgICAgICAgICAgIGJpbmQoc2VsZi50aW1lQ29udGFpbmVyLCBcImJsdXJcIiwgdXBkYXRlVGltZSwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIGJpbmQoc2VsZi50aW1lQ29udGFpbmVyLCBcIm1vdXNlZG93blwiLCBvbkNsaWNrKHRpbWVJbmNyZW1lbnQpKTtcbiAgICAgICAgICAgICAgICBiaW5kKFtzZWxmLmhvdXJFbGVtZW50LCBzZWxmLm1pbnV0ZUVsZW1lbnRdLCBbXCJmb2N1c1wiLCBcImNsaWNrXCJdLCBzZWxUZXh0KTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5zZWNvbmRFbGVtZW50ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIGJpbmQoc2VsZi5zZWNvbmRFbGVtZW50LCBcImZvY3VzXCIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuc2Vjb25kRWxlbWVudCAmJiBzZWxmLnNlY29uZEVsZW1lbnQuc2VsZWN0KCk7IH0pO1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmFtUE0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBiaW5kKHNlbGYuYW1QTSwgXCJtb3VzZWRvd25cIiwgb25DbGljayhmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlVGltZShlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJDaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogU2V0IHRoZSBjYWxlbmRhciB2aWV3IHRvIGEgcGFydGljdWxhciBkYXRlLlxuICAgICAgICAgKiBAcGFyYW0ge0RhdGV9IGp1bXBEYXRlIHRoZSBkYXRlIHRvIHNldCB0aGUgdmlldyB0b1xuICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHRyaWdnZXJDaGFuZ2UgaWYgY2hhbmdlIGV2ZW50cyBzaG91bGQgYmUgdHJpZ2dlcmVkXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBqdW1wVG9EYXRlKGp1bXBEYXRlLCB0cmlnZ2VyQ2hhbmdlKSB7XG4gICAgICAgICAgICB2YXIganVtcFRvID0ganVtcERhdGUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gc2VsZi5wYXJzZURhdGUoanVtcERhdGUpXG4gICAgICAgICAgICAgICAgOiBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiB8fFxuICAgICAgICAgICAgICAgICAgICAoc2VsZi5jb25maWcubWluRGF0ZSAmJiBzZWxmLmNvbmZpZy5taW5EYXRlID4gc2VsZi5ub3dcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi5jb25maWcubWluRGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy5tYXhEYXRlICYmIHNlbGYuY29uZmlnLm1heERhdGUgPCBzZWxmLm5vd1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi5jb25maWcubWF4RGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc2VsZi5ub3cpO1xuICAgICAgICAgICAgdmFyIG9sZFllYXIgPSBzZWxmLmN1cnJlbnRZZWFyO1xuICAgICAgICAgICAgdmFyIG9sZE1vbnRoID0gc2VsZi5jdXJyZW50TW9udGg7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChqdW1wVG8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyID0ganVtcFRvLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudE1vbnRoID0ganVtcFRvLmdldE1vbnRoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgICAgIGUubWVzc2FnZSA9IFwiSW52YWxpZCBkYXRlIHN1cHBsaWVkOiBcIiArIGp1bXBUbztcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5lcnJvckhhbmRsZXIoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSAmJiBzZWxmLmN1cnJlbnRZZWFyICE9PSBvbGRZZWFyKSB7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25ZZWFyQ2hhbmdlXCIpO1xuICAgICAgICAgICAgICAgIGJ1aWxkTW9udGhTd2l0Y2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlICYmXG4gICAgICAgICAgICAgICAgKHNlbGYuY3VycmVudFllYXIgIT09IG9sZFllYXIgfHwgc2VsZi5jdXJyZW50TW9udGggIT09IG9sZE1vbnRoKSkge1xuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uTW9udGhDaGFuZ2VcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLnJlZHJhdygpO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgdXAvZG93biBhcnJvdyBoYW5kbGVyIGZvciB0aW1lIGlucHV0c1xuICAgICAgICAgKiBAcGFyYW0ge0V2ZW50fSBlIHRoZSBjbGljayBldmVudFxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gdGltZUluY3JlbWVudChlKSB7XG4gICAgICAgICAgICBpZiAofmUudGFyZ2V0LmNsYXNzTmFtZS5pbmRleE9mKFwiYXJyb3dcIikpXG4gICAgICAgICAgICAgICAgaW5jcmVtZW50TnVtSW5wdXQoZSwgZS50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYXJyb3dVcFwiKSA/IDEgOiAtMSk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluY3JlbWVudHMvZGVjcmVtZW50cyB0aGUgdmFsdWUgb2YgaW5wdXQgYXNzb2NpLVxuICAgICAgICAgKiBhdGVkIHdpdGggdGhlIHVwL2Rvd24gYXJyb3cgYnkgZGlzcGF0Y2hpbmcgYW5cbiAgICAgICAgICogXCJpbmNyZW1lbnRcIiBldmVudCBvbiB0aGUgaW5wdXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RXZlbnR9IGUgdGhlIGNsaWNrIGV2ZW50XG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBkZWx0YSB0aGUgZGlmZiAodXN1YWxseSAxIG9yIC0xKVxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGlucHV0RWxlbSB0aGUgaW5wdXQgZWxlbWVudFxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gaW5jcmVtZW50TnVtSW5wdXQoZSwgZGVsdGEsIGlucHV0RWxlbSkge1xuICAgICAgICAgICAgdmFyIHRhcmdldCA9IGUgJiYgZS50YXJnZXQ7XG4gICAgICAgICAgICB2YXIgaW5wdXQgPSBpbnB1dEVsZW0gfHxcbiAgICAgICAgICAgICAgICAodGFyZ2V0ICYmIHRhcmdldC5wYXJlbnROb2RlICYmIHRhcmdldC5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpO1xuICAgICAgICAgICAgdmFyIGV2ZW50ID0gY3JlYXRlRXZlbnQoXCJpbmNyZW1lbnRcIik7XG4gICAgICAgICAgICBldmVudC5kZWx0YSA9IGRlbHRhO1xuICAgICAgICAgICAgaW5wdXQgJiYgaW5wdXQuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYnVpbGQoKSB7XG4gICAgICAgICAgICB2YXIgZnJhZ21lbnQgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3ItY2FsZW5kYXJcIik7XG4gICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnRhYkluZGV4ID0gLTE7XG4gICAgICAgICAgICBpZiAoIXNlbGYuY29uZmlnLm5vQ2FsZW5kYXIpIHtcbiAgICAgICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChidWlsZE1vbnRoTmF2KCkpO1xuICAgICAgICAgICAgICAgIHNlbGYuaW5uZXJDb250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLWlubmVyQ29udGFpbmVyXCIpO1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy53ZWVrTnVtYmVycykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2EgPSBidWlsZFdlZWtzKCksIHdlZWtXcmFwcGVyID0gX2Eud2Vla1dyYXBwZXIsIHdlZWtOdW1iZXJzID0gX2Eud2Vla051bWJlcnM7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuaW5uZXJDb250YWluZXIuYXBwZW5kQ2hpbGQod2Vla1dyYXBwZXIpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLndlZWtOdW1iZXJzID0gd2Vla051bWJlcnM7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYud2Vla1dyYXBwZXIgPSB3ZWVrV3JhcHBlcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2VsZi5yQ29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci1yQ29udGFpbmVyXCIpO1xuICAgICAgICAgICAgICAgIHNlbGYuckNvbnRhaW5lci5hcHBlbmRDaGlsZChidWlsZFdlZWtkYXlzKCkpO1xuICAgICAgICAgICAgICAgIGlmICghc2VsZi5kYXlzQ29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZGF5c0NvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3ItZGF5c1wiKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5kYXlzQ29udGFpbmVyLnRhYkluZGV4ID0gLTE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJ1aWxkRGF5cygpO1xuICAgICAgICAgICAgICAgIHNlbGYuckNvbnRhaW5lci5hcHBlbmRDaGlsZChzZWxmLmRheXNDb250YWluZXIpO1xuICAgICAgICAgICAgICAgIHNlbGYuaW5uZXJDb250YWluZXIuYXBwZW5kQ2hpbGQoc2VsZi5yQ29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChzZWxmLmlubmVyQ29udGFpbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5lbmFibGVUaW1lKSB7XG4gICAgICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoYnVpbGRUaW1lKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJyYW5nZU1vZGVcIiwgc2VsZi5jb25maWcubW9kZSA9PT0gXCJyYW5nZVwiKTtcbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwiYW5pbWF0ZVwiLCBzZWxmLmNvbmZpZy5hbmltYXRlID09PSB0cnVlKTtcbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwibXVsdGlNb250aFwiLCBzZWxmLmNvbmZpZy5zaG93TW9udGhzID4gMSk7XG4gICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmFwcGVuZENoaWxkKGZyYWdtZW50KTtcbiAgICAgICAgICAgIHZhciBjdXN0b21BcHBlbmQgPSBzZWxmLmNvbmZpZy5hcHBlbmRUbyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcuYXBwZW5kVG8ubm9kZVR5cGUgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5pbmxpbmUgfHwgc2VsZi5jb25maWcuc3RhdGljKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKHNlbGYuY29uZmlnLmlubGluZSA/IFwiaW5saW5lXCIgOiBcInN0YXRpY1wiKTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuaW5saW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY3VzdG9tQXBwZW5kICYmIHNlbGYuZWxlbWVudC5wYXJlbnROb2RlKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIHNlbGYuX2lucHV0Lm5leHRTaWJsaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2VsZi5jb25maWcuYXBwZW5kVG8gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmFwcGVuZFRvLmFwcGVuZENoaWxkKHNlbGYuY2FsZW5kYXJDb250YWluZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuc3RhdGljKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB3cmFwcGVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci13cmFwcGVyXCIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5lbGVtZW50LnBhcmVudE5vZGUpXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUod3JhcHBlciwgc2VsZi5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChzZWxmLmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5hbHRJbnB1dClcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoc2VsZi5hbHRJbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoc2VsZi5jYWxlbmRhckNvbnRhaW5lcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzZWxmLmNvbmZpZy5zdGF0aWMgJiYgIXNlbGYuY29uZmlnLmlubGluZSlcbiAgICAgICAgICAgICAgICAoc2VsZi5jb25maWcuYXBwZW5kVG8gIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLmFwcGVuZFRvXG4gICAgICAgICAgICAgICAgICAgIDogd2luZG93LmRvY3VtZW50LmJvZHkpLmFwcGVuZENoaWxkKHNlbGYuY2FsZW5kYXJDb250YWluZXIpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZURheShjbGFzc05hbWUsIGRhdGUsIGRheU51bWJlciwgaSkge1xuICAgICAgICAgICAgdmFyIGRhdGVJc0VuYWJsZWQgPSBpc0VuYWJsZWQoZGF0ZSwgdHJ1ZSksIGRheUVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KFwic3BhblwiLCBcImZsYXRwaWNrci1kYXkgXCIgKyBjbGFzc05hbWUsIGRhdGUuZ2V0RGF0ZSgpLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgZGF5RWxlbWVudC5kYXRlT2JqID0gZGF0ZTtcbiAgICAgICAgICAgIGRheUVsZW1lbnQuJGkgPSBpO1xuICAgICAgICAgICAgZGF5RWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsIHNlbGYuZm9ybWF0RGF0ZShkYXRlLCBzZWxmLmNvbmZpZy5hcmlhRGF0ZUZvcm1hdCkpO1xuICAgICAgICAgICAgaWYgKGNsYXNzTmFtZS5pbmRleE9mKFwiaGlkZGVuXCIpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIGNvbXBhcmVEYXRlcyhkYXRlLCBzZWxmLm5vdykgPT09IDApIHtcbiAgICAgICAgICAgICAgICBzZWxmLnRvZGF5RGF0ZUVsZW0gPSBkYXlFbGVtZW50O1xuICAgICAgICAgICAgICAgIGRheUVsZW1lbnQuY2xhc3NMaXN0LmFkZChcInRvZGF5XCIpO1xuICAgICAgICAgICAgICAgIGRheUVsZW1lbnQuc2V0QXR0cmlidXRlKFwiYXJpYS1jdXJyZW50XCIsIFwiZGF0ZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRlSXNFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgZGF5RWxlbWVudC50YWJJbmRleCA9IC0xO1xuICAgICAgICAgICAgICAgIGlmIChpc0RhdGVTZWxlY3RlZChkYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXlFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJzZWxlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVFbGVtID0gZGF5RWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1vZGUgPT09IFwicmFuZ2VcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3MoZGF5RWxlbWVudCwgXCJzdGFydFJhbmdlXCIsIHNlbGYuc2VsZWN0ZWREYXRlc1swXSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVEYXRlcyhkYXRlLCBzZWxmLnNlbGVjdGVkRGF0ZXNbMF0sIHRydWUpID09PSAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKGRheUVsZW1lbnQsIFwiZW5kUmFuZ2VcIiwgc2VsZi5zZWxlY3RlZERhdGVzWzFdICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyZURhdGVzKGRhdGUsIHNlbGYuc2VsZWN0ZWREYXRlc1sxXSwgdHJ1ZSkgPT09IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gXCJuZXh0TW9udGhEYXlcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXlFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJpblJhbmdlXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF5RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiZmxhdHBpY2tyLWRpc2FibGVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1vZGUgPT09IFwicmFuZ2VcIikge1xuICAgICAgICAgICAgICAgIGlmIChpc0RhdGVJblJhbmdlKGRhdGUpICYmICFpc0RhdGVTZWxlY3RlZChkYXRlKSlcbiAgICAgICAgICAgICAgICAgICAgZGF5RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiaW5SYW5nZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLndlZWtOdW1iZXJzICYmXG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcuc2hvd01vbnRocyA9PT0gMSAmJlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZSAhPT0gXCJwcmV2TW9udGhEYXlcIiAmJlxuICAgICAgICAgICAgICAgIGRheU51bWJlciAlIDcgPT09IDEpIHtcbiAgICAgICAgICAgICAgICBzZWxmLndlZWtOdW1iZXJzLmluc2VydEFkamFjZW50SFRNTChcImJlZm9yZWVuZFwiLCBcIjxzcGFuIGNsYXNzPSdmbGF0cGlja3ItZGF5Jz5cIiArIHNlbGYuY29uZmlnLmdldFdlZWsoZGF0ZSkgKyBcIjwvc3Bhbj5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbkRheUNyZWF0ZVwiLCBkYXlFbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybiBkYXlFbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGZvY3VzT25EYXlFbGVtKHRhcmdldE5vZGUpIHtcbiAgICAgICAgICAgIHRhcmdldE5vZGUuZm9jdXMoKTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpXG4gICAgICAgICAgICAgICAgb25Nb3VzZU92ZXIodGFyZ2V0Tm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZ2V0Rmlyc3RBdmFpbGFibGVEYXkoZGVsdGEpIHtcbiAgICAgICAgICAgIHZhciBzdGFydE1vbnRoID0gZGVsdGEgPiAwID8gMCA6IHNlbGYuY29uZmlnLnNob3dNb250aHMgLSAxO1xuICAgICAgICAgICAgdmFyIGVuZE1vbnRoID0gZGVsdGEgPiAwID8gc2VsZi5jb25maWcuc2hvd01vbnRocyA6IC0xO1xuICAgICAgICAgICAgZm9yICh2YXIgbSA9IHN0YXJ0TW9udGg7IG0gIT0gZW5kTW9udGg7IG0gKz0gZGVsdGEpIHtcbiAgICAgICAgICAgICAgICB2YXIgbW9udGggPSBzZWxmLmRheXNDb250YWluZXIuY2hpbGRyZW5bbV07XG4gICAgICAgICAgICAgICAgdmFyIHN0YXJ0SW5kZXggPSBkZWx0YSA+IDAgPyAwIDogbW9udGguY2hpbGRyZW4ubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICB2YXIgZW5kSW5kZXggPSBkZWx0YSA+IDAgPyBtb250aC5jaGlsZHJlbi5sZW5ndGggOiAtMTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleDsgaSAhPSBlbmRJbmRleDsgaSArPSBkZWx0YSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IG1vbnRoLmNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYy5jbGFzc05hbWUuaW5kZXhPZihcImhpZGRlblwiKSA9PT0gLTEgJiYgaXNFbmFibGVkKGMuZGF0ZU9iaikpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGdldE5leHRBdmFpbGFibGVEYXkoY3VycmVudCwgZGVsdGEpIHtcbiAgICAgICAgICAgIHZhciBnaXZlbk1vbnRoID0gY3VycmVudC5jbGFzc05hbWUuaW5kZXhPZihcIk1vbnRoXCIpID09PSAtMVxuICAgICAgICAgICAgICAgID8gY3VycmVudC5kYXRlT2JqLmdldE1vbnRoKClcbiAgICAgICAgICAgICAgICA6IHNlbGYuY3VycmVudE1vbnRoO1xuICAgICAgICAgICAgdmFyIGVuZE1vbnRoID0gZGVsdGEgPiAwID8gc2VsZi5jb25maWcuc2hvd01vbnRocyA6IC0xO1xuICAgICAgICAgICAgdmFyIGxvb3BEZWx0YSA9IGRlbHRhID4gMCA/IDEgOiAtMTtcbiAgICAgICAgICAgIGZvciAodmFyIG0gPSBnaXZlbk1vbnRoIC0gc2VsZi5jdXJyZW50TW9udGg7IG0gIT0gZW5kTW9udGg7IG0gKz0gbG9vcERlbHRhKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1vbnRoID0gc2VsZi5kYXlzQ29udGFpbmVyLmNoaWxkcmVuW21dO1xuICAgICAgICAgICAgICAgIHZhciBzdGFydEluZGV4ID0gZ2l2ZW5Nb250aCAtIHNlbGYuY3VycmVudE1vbnRoID09PSBtXG4gICAgICAgICAgICAgICAgICAgID8gY3VycmVudC4kaSArIGRlbHRhXG4gICAgICAgICAgICAgICAgICAgIDogZGVsdGEgPCAwXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG1vbnRoLmNoaWxkcmVuLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgIDogMDtcbiAgICAgICAgICAgICAgICB2YXIgbnVtTW9udGhEYXlzID0gbW9udGguY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4OyBpID49IDAgJiYgaSA8IG51bU1vbnRoRGF5cyAmJiBpICE9IChkZWx0YSA+IDAgPyBudW1Nb250aERheXMgOiAtMSk7IGkgKz0gbG9vcERlbHRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjID0gbW9udGguY2hpbGRyZW5baV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChjLmNsYXNzTmFtZS5pbmRleE9mKFwiaGlkZGVuXCIpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgaXNFbmFibGVkKGMuZGF0ZU9iaikgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIE1hdGguYWJzKGN1cnJlbnQuJGkgLSBpKSA+PSBNYXRoLmFicyhkZWx0YSkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9jdXNPbkRheUVsZW0oYyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5jaGFuZ2VNb250aChsb29wRGVsdGEpO1xuICAgICAgICAgICAgZm9jdXNPbkRheShnZXRGaXJzdEF2YWlsYWJsZURheShsb29wRGVsdGEpLCAwKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZm9jdXNPbkRheShjdXJyZW50LCBvZmZzZXQpIHtcbiAgICAgICAgICAgIHZhciBkYXlGb2N1c2VkID0gaXNJblZpZXcoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCB8fCBkb2N1bWVudC5ib2R5KTtcbiAgICAgICAgICAgIHZhciBzdGFydEVsZW0gPSBjdXJyZW50ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IGN1cnJlbnRcbiAgICAgICAgICAgICAgICA6IGRheUZvY3VzZWRcbiAgICAgICAgICAgICAgICAgICAgPyBkb2N1bWVudC5hY3RpdmVFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIDogc2VsZi5zZWxlY3RlZERhdGVFbGVtICE9PSB1bmRlZmluZWQgJiYgaXNJblZpZXcoc2VsZi5zZWxlY3RlZERhdGVFbGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLnNlbGVjdGVkRGF0ZUVsZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIDogc2VsZi50b2RheURhdGVFbGVtICE9PSB1bmRlZmluZWQgJiYgaXNJblZpZXcoc2VsZi50b2RheURhdGVFbGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi50b2RheURhdGVFbGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBnZXRGaXJzdEF2YWlsYWJsZURheShvZmZzZXQgPiAwID8gMSA6IC0xKTtcbiAgICAgICAgICAgIGlmIChzdGFydEVsZW0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5faW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICAgIGlmICghZGF5Rm9jdXNlZClcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9jdXNPbkRheUVsZW0oc3RhcnRFbGVtKTtcbiAgICAgICAgICAgIGdldE5leHRBdmFpbGFibGVEYXkoc3RhcnRFbGVtLCBvZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkTW9udGhEYXlzKHllYXIsIG1vbnRoKSB7XG4gICAgICAgICAgICB2YXIgZmlyc3RPZk1vbnRoID0gKG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxKS5nZXREYXkoKSAtIHNlbGYubDEwbi5maXJzdERheU9mV2VlayArIDcpICUgNztcbiAgICAgICAgICAgIHZhciBwcmV2TW9udGhEYXlzID0gc2VsZi51dGlscy5nZXREYXlzSW5Nb250aCgobW9udGggLSAxICsgMTIpICUgMTIpO1xuICAgICAgICAgICAgdmFyIGRheXNJbk1vbnRoID0gc2VsZi51dGlscy5nZXREYXlzSW5Nb250aChtb250aCksIGRheXMgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLCBpc011bHRpTW9udGggPSBzZWxmLmNvbmZpZy5zaG93TW9udGhzID4gMSwgcHJldk1vbnRoRGF5Q2xhc3MgPSBpc011bHRpTW9udGggPyBcInByZXZNb250aERheSBoaWRkZW5cIiA6IFwicHJldk1vbnRoRGF5XCIsIG5leHRNb250aERheUNsYXNzID0gaXNNdWx0aU1vbnRoID8gXCJuZXh0TW9udGhEYXkgaGlkZGVuXCIgOiBcIm5leHRNb250aERheVwiO1xuICAgICAgICAgICAgdmFyIGRheU51bWJlciA9IHByZXZNb250aERheXMgKyAxIC0gZmlyc3RPZk1vbnRoLCBkYXlJbmRleCA9IDA7XG4gICAgICAgICAgICAvLyBwcmVwZW5kIGRheXMgZnJvbSB0aGUgZW5kaW5nIG9mIHByZXZpb3VzIG1vbnRoXG4gICAgICAgICAgICBmb3IgKDsgZGF5TnVtYmVyIDw9IHByZXZNb250aERheXM7IGRheU51bWJlcisrLCBkYXlJbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgZGF5cy5hcHBlbmRDaGlsZChjcmVhdGVEYXkocHJldk1vbnRoRGF5Q2xhc3MsIG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF5TnVtYmVyKSwgZGF5TnVtYmVyLCBkYXlJbmRleCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU3RhcnQgYXQgMSBzaW5jZSB0aGVyZSBpcyBubyAwdGggZGF5XG4gICAgICAgICAgICBmb3IgKGRheU51bWJlciA9IDE7IGRheU51bWJlciA8PSBkYXlzSW5Nb250aDsgZGF5TnVtYmVyKyssIGRheUluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBkYXlzLmFwcGVuZENoaWxkKGNyZWF0ZURheShcIlwiLCBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF5TnVtYmVyKSwgZGF5TnVtYmVyLCBkYXlJbmRleCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYXBwZW5kIGRheXMgZnJvbSB0aGUgbmV4dCBtb250aFxuICAgICAgICAgICAgZm9yICh2YXIgZGF5TnVtID0gZGF5c0luTW9udGggKyAxOyBkYXlOdW0gPD0gNDIgLSBmaXJzdE9mTW9udGggJiZcbiAgICAgICAgICAgICAgICAoc2VsZi5jb25maWcuc2hvd01vbnRocyA9PT0gMSB8fCBkYXlJbmRleCAlIDcgIT09IDApOyBkYXlOdW0rKywgZGF5SW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGRheXMuYXBwZW5kQ2hpbGQoY3JlYXRlRGF5KG5leHRNb250aERheUNsYXNzLCBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIGRheU51bSAlIGRheXNJbk1vbnRoKSwgZGF5TnVtLCBkYXlJbmRleCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy91cGRhdGVOYXZpZ2F0aW9uQ3VycmVudE1vbnRoKCk7XG4gICAgICAgICAgICB2YXIgZGF5Q29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImRheUNvbnRhaW5lclwiKTtcbiAgICAgICAgICAgIGRheUNvbnRhaW5lci5hcHBlbmRDaGlsZChkYXlzKTtcbiAgICAgICAgICAgIHJldHVybiBkYXlDb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYnVpbGREYXlzKCkge1xuICAgICAgICAgICAgaWYgKHNlbGYuZGF5c0NvbnRhaW5lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2xlYXJOb2RlKHNlbGYuZGF5c0NvbnRhaW5lcik7XG4gICAgICAgICAgICAvLyBUT0RPOiB3ZWVrIG51bWJlcnMgZm9yIGVhY2ggbW9udGhcbiAgICAgICAgICAgIGlmIChzZWxmLndlZWtOdW1iZXJzKVxuICAgICAgICAgICAgICAgIGNsZWFyTm9kZShzZWxmLndlZWtOdW1iZXJzKTtcbiAgICAgICAgICAgIHZhciBmcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLmNvbmZpZy5zaG93TW9udGhzOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKHNlbGYuY3VycmVudFllYXIsIHNlbGYuY3VycmVudE1vbnRoLCAxKTtcbiAgICAgICAgICAgICAgICBkLnNldE1vbnRoKHNlbGYuY3VycmVudE1vbnRoICsgaSk7XG4gICAgICAgICAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChidWlsZE1vbnRoRGF5cyhkLmdldEZ1bGxZZWFyKCksIGQuZ2V0TW9udGgoKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5kYXlzQ29udGFpbmVyLmFwcGVuZENoaWxkKGZyYWcpO1xuICAgICAgICAgICAgc2VsZi5kYXlzID0gc2VsZi5kYXlzQ29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubW9kZSA9PT0gXCJyYW5nZVwiICYmIHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBvbk1vdXNlT3ZlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkTW9udGhTd2l0Y2goKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuc2hvd01vbnRocyA+IDEgfHxcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5tb250aFNlbGVjdG9yVHlwZSAhPT0gXCJkcm9wZG93blwiKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciBzaG91bGRCdWlsZE1vbnRoID0gZnVuY3Rpb24gKG1vbnRoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1pbkRhdGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyID09PSBzZWxmLmNvbmZpZy5taW5EYXRlLmdldEZ1bGxZZWFyKCkgJiZcbiAgICAgICAgICAgICAgICAgICAgbW9udGggPCBzZWxmLmNvbmZpZy5taW5EYXRlLmdldE1vbnRoKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gIShzZWxmLmNvbmZpZy5tYXhEYXRlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9PT0gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRGdWxsWWVhcigpICYmXG4gICAgICAgICAgICAgICAgICAgIG1vbnRoID4gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRNb250aCgpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzZWxmLm1vbnRoc0Ryb3Bkb3duQ29udGFpbmVyLnRhYkluZGV4ID0gLTE7XG4gICAgICAgICAgICBzZWxmLm1vbnRoc0Ryb3Bkb3duQ29udGFpbmVyLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNob3VsZEJ1aWxkTW9udGgoaSkpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHZhciBtb250aCA9IGNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwgXCJmbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aFwiKTtcbiAgICAgICAgICAgICAgICBtb250aC52YWx1ZSA9IG5ldyBEYXRlKHNlbGYuY3VycmVudFllYXIsIGkpLmdldE1vbnRoKCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICBtb250aC50ZXh0Q29udGVudCA9IG1vbnRoVG9TdHIoaSwgc2VsZi5jb25maWcuc2hvcnRoYW5kQ3VycmVudE1vbnRoLCBzZWxmLmwxMG4pO1xuICAgICAgICAgICAgICAgIG1vbnRoLnRhYkluZGV4ID0gLTE7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY3VycmVudE1vbnRoID09PSBpKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vbnRoLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2VsZi5tb250aHNEcm9wZG93bkNvbnRhaW5lci5hcHBlbmRDaGlsZChtb250aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYnVpbGRNb250aCgpIHtcbiAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLW1vbnRoXCIpO1xuICAgICAgICAgICAgdmFyIG1vbnRoTmF2RnJhZ21lbnQgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgICAgICAgdmFyIG1vbnRoRWxlbWVudDtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5zaG93TW9udGhzID4gMSB8fFxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1vbnRoU2VsZWN0b3JUeXBlID09PSBcInN0YXRpY1wiKSB7XG4gICAgICAgICAgICAgICAgbW9udGhFbGVtZW50ID0gY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJjdXItbW9udGhcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxmLm1vbnRoc0Ryb3Bkb3duQ29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcInNlbGVjdFwiLCBcImZsYXRwaWNrci1tb250aERyb3Bkb3duLW1vbnRoc1wiKTtcbiAgICAgICAgICAgICAgICBiaW5kKHNlbGYubW9udGhzRHJvcGRvd25Db250YWluZXIsIFwiY2hhbmdlXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkTW9udGggPSBwYXJzZUludCh0YXJnZXQudmFsdWUsIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGFuZ2VNb250aChzZWxlY3RlZE1vbnRoIC0gc2VsZi5jdXJyZW50TW9udGgpO1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbk1vbnRoQ2hhbmdlXCIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJ1aWxkTW9udGhTd2l0Y2goKTtcbiAgICAgICAgICAgICAgICBtb250aEVsZW1lbnQgPSBzZWxmLm1vbnRoc0Ryb3Bkb3duQ29udGFpbmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHllYXJJbnB1dCA9IGNyZWF0ZU51bWJlcklucHV0KFwiY3VyLXllYXJcIiwgeyB0YWJpbmRleDogXCItMVwiIH0pO1xuICAgICAgICAgICAgdmFyIHllYXJFbGVtZW50ID0geWVhcklucHV0LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaW5wdXRcIilbMF07XG4gICAgICAgICAgICB5ZWFyRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsIHNlbGYubDEwbi55ZWFyQXJpYUxhYmVsKTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5taW5EYXRlKSB7XG4gICAgICAgICAgICAgICAgeWVhckVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWluXCIsIHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tYXhEYXRlKSB7XG4gICAgICAgICAgICAgICAgeWVhckVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWF4XCIsIHNlbGYuY29uZmlnLm1heERhdGUuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICB5ZWFyRWxlbWVudC5kaXNhYmxlZCA9XG4gICAgICAgICAgICAgICAgICAgICEhc2VsZi5jb25maWcubWluRGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcubWluRGF0ZS5nZXRGdWxsWWVhcigpID09PSBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgY3VycmVudE1vbnRoID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci1jdXJyZW50LW1vbnRoXCIpO1xuICAgICAgICAgICAgY3VycmVudE1vbnRoLmFwcGVuZENoaWxkKG1vbnRoRWxlbWVudCk7XG4gICAgICAgICAgICBjdXJyZW50TW9udGguYXBwZW5kQ2hpbGQoeWVhcklucHV0KTtcbiAgICAgICAgICAgIG1vbnRoTmF2RnJhZ21lbnQuYXBwZW5kQ2hpbGQoY3VycmVudE1vbnRoKTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChtb250aE5hdkZyYWdtZW50KTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyOiBjb250YWluZXIsXG4gICAgICAgICAgICAgICAgeWVhckVsZW1lbnQ6IHllYXJFbGVtZW50LFxuICAgICAgICAgICAgICAgIG1vbnRoRWxlbWVudDogbW9udGhFbGVtZW50XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkTW9udGhzKCkge1xuICAgICAgICAgICAgY2xlYXJOb2RlKHNlbGYubW9udGhOYXYpO1xuICAgICAgICAgICAgc2VsZi5tb250aE5hdi5hcHBlbmRDaGlsZChzZWxmLnByZXZNb250aE5hdik7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuc2hvd01vbnRocykge1xuICAgICAgICAgICAgICAgIHNlbGYueWVhckVsZW1lbnRzID0gW107XG4gICAgICAgICAgICAgICAgc2VsZi5tb250aEVsZW1lbnRzID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBtID0gc2VsZi5jb25maWcuc2hvd01vbnRoczsgbS0tOykge1xuICAgICAgICAgICAgICAgIHZhciBtb250aCA9IGJ1aWxkTW9udGgoKTtcbiAgICAgICAgICAgICAgICBzZWxmLnllYXJFbGVtZW50cy5wdXNoKG1vbnRoLnllYXJFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBzZWxmLm1vbnRoRWxlbWVudHMucHVzaChtb250aC5tb250aEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHNlbGYubW9udGhOYXYuYXBwZW5kQ2hpbGQobW9udGguY29udGFpbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYubW9udGhOYXYuYXBwZW5kQ2hpbGQoc2VsZi5uZXh0TW9udGhOYXYpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkTW9udGhOYXYoKSB7XG4gICAgICAgICAgICBzZWxmLm1vbnRoTmF2ID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci1tb250aHNcIik7XG4gICAgICAgICAgICBzZWxmLnllYXJFbGVtZW50cyA9IFtdO1xuICAgICAgICAgICAgc2VsZi5tb250aEVsZW1lbnRzID0gW107XG4gICAgICAgICAgICBzZWxmLnByZXZNb250aE5hdiA9IGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiZmxhdHBpY2tyLXByZXYtbW9udGhcIik7XG4gICAgICAgICAgICBzZWxmLnByZXZNb250aE5hdi5pbm5lckhUTUwgPSBzZWxmLmNvbmZpZy5wcmV2QXJyb3c7XG4gICAgICAgICAgICBzZWxmLm5leHRNb250aE5hdiA9IGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiZmxhdHBpY2tyLW5leHQtbW9udGhcIik7XG4gICAgICAgICAgICBzZWxmLm5leHRNb250aE5hdi5pbm5lckhUTUwgPSBzZWxmLmNvbmZpZy5uZXh0QXJyb3c7XG4gICAgICAgICAgICBidWlsZE1vbnRocygpO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYsIFwiX2hpZGVQcmV2TW9udGhBcnJvd1wiLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLl9faGlkZVByZXZNb250aEFycm93OyB9LFxuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKGJvb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuX19oaWRlUHJldk1vbnRoQXJyb3cgIT09IGJvb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYucHJldk1vbnRoTmF2LCBcImZsYXRwaWNrci1kaXNhYmxlZFwiLCBib29sKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19oaWRlUHJldk1vbnRoQXJyb3cgPSBib29sO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZiwgXCJfaGlkZU5leHRNb250aEFycm93XCIsIHtcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuX19oaWRlTmV4dE1vbnRoQXJyb3c7IH0sXG4gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoYm9vbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5fX2hpZGVOZXh0TW9udGhBcnJvdyAhPT0gYm9vbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5uZXh0TW9udGhOYXYsIFwiZmxhdHBpY2tyLWRpc2FibGVkXCIsIGJvb2wpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2hpZGVOZXh0TW9udGhBcnJvdyA9IGJvb2w7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXJFbGVtZW50ID0gc2VsZi55ZWFyRWxlbWVudHNbMF07XG4gICAgICAgICAgICB1cGRhdGVOYXZpZ2F0aW9uQ3VycmVudE1vbnRoKCk7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi5tb250aE5hdjtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBidWlsZFRpbWUoKSB7XG4gICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJoYXNUaW1lXCIpO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm5vQ2FsZW5kYXIpXG4gICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwibm9DYWxlbmRhclwiKTtcbiAgICAgICAgICAgIHNlbGYudGltZUNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3ItdGltZVwiKTtcbiAgICAgICAgICAgIHNlbGYudGltZUNvbnRhaW5lci50YWJJbmRleCA9IC0xO1xuICAgICAgICAgICAgdmFyIHNlcGFyYXRvciA9IGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiZmxhdHBpY2tyLXRpbWUtc2VwYXJhdG9yXCIsIFwiOlwiKTtcbiAgICAgICAgICAgIHZhciBob3VySW5wdXQgPSBjcmVhdGVOdW1iZXJJbnB1dChcImZsYXRwaWNrci1ob3VyXCIsIHtcbiAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogc2VsZi5sMTBuLmhvdXJBcmlhTGFiZWxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudCA9IGhvdXJJbnB1dC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlucHV0XCIpWzBdO1xuICAgICAgICAgICAgdmFyIG1pbnV0ZUlucHV0ID0gY3JlYXRlTnVtYmVySW5wdXQoXCJmbGF0cGlja3ItbWludXRlXCIsIHtcbiAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogc2VsZi5sMTBuLm1pbnV0ZUFyaWFMYWJlbFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQgPSBtaW51dGVJbnB1dC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlucHV0XCIpWzBdO1xuICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudC50YWJJbmRleCA9IHNlbGYubWludXRlRWxlbWVudC50YWJJbmRleCA9IC0xO1xuICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudC52YWx1ZSA9IHBhZChzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9ialxuICAgICAgICAgICAgICAgID8gc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmouZ2V0SG91cnMoKVxuICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcudGltZV8yNGhyXG4gICAgICAgICAgICAgICAgICAgID8gc2VsZi5jb25maWcuZGVmYXVsdEhvdXJcbiAgICAgICAgICAgICAgICAgICAgOiBtaWxpdGFyeTJhbXBtKHNlbGYuY29uZmlnLmRlZmF1bHRIb3VyKSk7XG4gICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQudmFsdWUgPSBwYWQoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmpcbiAgICAgICAgICAgICAgICA/IHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqLmdldE1pbnV0ZXMoKVxuICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcuZGVmYXVsdE1pbnV0ZSk7XG4gICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50LnNldEF0dHJpYnV0ZShcInN0ZXBcIiwgc2VsZi5jb25maWcuaG91ckluY3JlbWVudC50b1N0cmluZygpKTtcbiAgICAgICAgICAgIHNlbGYubWludXRlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJzdGVwXCIsIHNlbGYuY29uZmlnLm1pbnV0ZUluY3JlbWVudC50b1N0cmluZygpKTtcbiAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWluXCIsIHNlbGYuY29uZmlnLnRpbWVfMjRociA/IFwiMFwiIDogXCIxXCIpO1xuICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtYXhcIiwgc2VsZi5jb25maWcudGltZV8yNGhyID8gXCIyM1wiIDogXCIxMlwiKTtcbiAgICAgICAgICAgIHNlbGYubWludXRlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtaW5cIiwgXCIwXCIpO1xuICAgICAgICAgICAgc2VsZi5taW51dGVFbGVtZW50LnNldEF0dHJpYnV0ZShcIm1heFwiLCBcIjU5XCIpO1xuICAgICAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLmFwcGVuZENoaWxkKGhvdXJJbnB1dCk7XG4gICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuYXBwZW5kQ2hpbGQoc2VwYXJhdG9yKTtcbiAgICAgICAgICAgIHNlbGYudGltZUNvbnRhaW5lci5hcHBlbmRDaGlsZChtaW51dGVJbnB1dCk7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcudGltZV8yNGhyKVxuICAgICAgICAgICAgICAgIHNlbGYudGltZUNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwidGltZTI0aHJcIik7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuZW5hYmxlU2Vjb25kcykge1xuICAgICAgICAgICAgICAgIHNlbGYudGltZUNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwiaGFzU2Vjb25kc1wiKTtcbiAgICAgICAgICAgICAgICB2YXIgc2Vjb25kSW5wdXQgPSBjcmVhdGVOdW1iZXJJbnB1dChcImZsYXRwaWNrci1zZWNvbmRcIik7XG4gICAgICAgICAgICAgICAgc2VsZi5zZWNvbmRFbGVtZW50ID0gc2Vjb25kSW5wdXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKVswXTtcbiAgICAgICAgICAgICAgICBzZWxmLnNlY29uZEVsZW1lbnQudmFsdWUgPSBwYWQoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmpcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iai5nZXRTZWNvbmRzKClcbiAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy5kZWZhdWx0U2Vjb25kcyk7XG4gICAgICAgICAgICAgICAgc2VsZi5zZWNvbmRFbGVtZW50LnNldEF0dHJpYnV0ZShcInN0ZXBcIiwgc2VsZi5taW51dGVFbGVtZW50LmdldEF0dHJpYnV0ZShcInN0ZXBcIikpO1xuICAgICAgICAgICAgICAgIHNlbGYuc2Vjb25kRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtaW5cIiwgXCIwXCIpO1xuICAgICAgICAgICAgICAgIHNlbGYuc2Vjb25kRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtYXhcIiwgXCI1OVwiKTtcbiAgICAgICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJmbGF0cGlja3ItdGltZS1zZXBhcmF0b3JcIiwgXCI6XCIpKTtcbiAgICAgICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuYXBwZW5kQ2hpbGQoc2Vjb25kSW5wdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzZWxmLmNvbmZpZy50aW1lXzI0aHIpIHtcbiAgICAgICAgICAgICAgICAvLyBhZGQgc2VsZi5hbVBNIGlmIGFwcHJvcHJpYXRlXG4gICAgICAgICAgICAgICAgc2VsZi5hbVBNID0gY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJmbGF0cGlja3ItYW0tcG1cIiwgc2VsZi5sMTBuLmFtUE1baW50KChzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9ialxuICAgICAgICAgICAgICAgICAgICA/IHNlbGYuaG91ckVsZW1lbnQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy5kZWZhdWx0SG91cikgPiAxMSldKTtcbiAgICAgICAgICAgICAgICBzZWxmLmFtUE0udGl0bGUgPSBzZWxmLmwxMG4udG9nZ2xlVGl0bGU7XG4gICAgICAgICAgICAgICAgc2VsZi5hbVBNLnRhYkluZGV4ID0gLTE7XG4gICAgICAgICAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLmFwcGVuZENoaWxkKHNlbGYuYW1QTSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2VsZi50aW1lQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkV2Vla2RheXMoKSB7XG4gICAgICAgICAgICBpZiAoIXNlbGYud2Vla2RheUNvbnRhaW5lcilcbiAgICAgICAgICAgICAgICBzZWxmLndlZWtkYXlDb250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLXdlZWtkYXlzXCIpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGNsZWFyTm9kZShzZWxmLndlZWtkYXlDb250YWluZXIpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHNlbGYuY29uZmlnLnNob3dNb250aHM7IGktLTspIHtcbiAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci13ZWVrZGF5Y29udGFpbmVyXCIpO1xuICAgICAgICAgICAgICAgIHNlbGYud2Vla2RheUNvbnRhaW5lci5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdXBkYXRlV2Vla2RheXMoKTtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLndlZWtkYXlDb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlV2Vla2RheXMoKSB7XG4gICAgICAgICAgICBpZiAoIXNlbGYud2Vla2RheUNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBmaXJzdERheU9mV2VlayA9IHNlbGYubDEwbi5maXJzdERheU9mV2VlaztcbiAgICAgICAgICAgIHZhciB3ZWVrZGF5cyA9IHNlbGYubDEwbi53ZWVrZGF5cy5zaG9ydGhhbmQuc2xpY2UoKTtcbiAgICAgICAgICAgIGlmIChmaXJzdERheU9mV2VlayA+IDAgJiYgZmlyc3REYXlPZldlZWsgPCB3ZWVrZGF5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5cyA9IHdlZWtkYXlzLnNwbGljZShmaXJzdERheU9mV2Vlaywgd2Vla2RheXMubGVuZ3RoKS5jb25jYXQod2Vla2RheXMuc3BsaWNlKDAsIGZpcnN0RGF5T2ZXZWVrKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gc2VsZi5jb25maWcuc2hvd01vbnRoczsgaS0tOykge1xuICAgICAgICAgICAgICAgIHNlbGYud2Vla2RheUNvbnRhaW5lci5jaGlsZHJlbltpXS5pbm5lckhUTUwgPSBcIlxcbiAgICAgIDxzcGFuIGNsYXNzPSdmbGF0cGlja3Itd2Vla2RheSc+XFxuICAgICAgICBcIiArIHdlZWtkYXlzLmpvaW4oXCI8L3NwYW4+PHNwYW4gY2xhc3M9J2ZsYXRwaWNrci13ZWVrZGF5Jz5cIikgKyBcIlxcbiAgICAgIDwvc3Bhbj5cXG4gICAgICBcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBmdW5jdGlvbiBidWlsZFdlZWtzKCkge1xuICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwiaGFzV2Vla3NcIik7XG4gICAgICAgICAgICB2YXIgd2Vla1dyYXBwZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLXdlZWt3cmFwcGVyXCIpO1xuICAgICAgICAgICAgd2Vla1dyYXBwZXIuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJmbGF0cGlja3Itd2Vla2RheVwiLCBzZWxmLmwxMG4ud2Vla0FiYnJldmlhdGlvbikpO1xuICAgICAgICAgICAgdmFyIHdlZWtOdW1iZXJzID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci13ZWVrc1wiKTtcbiAgICAgICAgICAgIHdlZWtXcmFwcGVyLmFwcGVuZENoaWxkKHdlZWtOdW1iZXJzKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgd2Vla1dyYXBwZXI6IHdlZWtXcmFwcGVyLFxuICAgICAgICAgICAgICAgIHdlZWtOdW1iZXJzOiB3ZWVrTnVtYmVyc1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjaGFuZ2VNb250aCh2YWx1ZSwgaXNPZmZzZXQpIHtcbiAgICAgICAgICAgIGlmIChpc09mZnNldCA9PT0gdm9pZCAwKSB7IGlzT2Zmc2V0ID0gdHJ1ZTsgfVxuICAgICAgICAgICAgdmFyIGRlbHRhID0gaXNPZmZzZXQgPyB2YWx1ZSA6IHZhbHVlIC0gc2VsZi5jdXJyZW50TW9udGg7XG4gICAgICAgICAgICBpZiAoKGRlbHRhIDwgMCAmJiBzZWxmLl9oaWRlUHJldk1vbnRoQXJyb3cgPT09IHRydWUpIHx8XG4gICAgICAgICAgICAgICAgKGRlbHRhID4gMCAmJiBzZWxmLl9oaWRlTmV4dE1vbnRoQXJyb3cgPT09IHRydWUpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHNlbGYuY3VycmVudE1vbnRoICs9IGRlbHRhO1xuICAgICAgICAgICAgaWYgKHNlbGYuY3VycmVudE1vbnRoIDwgMCB8fCBzZWxmLmN1cnJlbnRNb250aCA+IDExKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhciArPSBzZWxmLmN1cnJlbnRNb250aCA+IDExID8gMSA6IC0xO1xuICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudE1vbnRoID0gKHNlbGYuY3VycmVudE1vbnRoICsgMTIpICUgMTI7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25ZZWFyQ2hhbmdlXCIpO1xuICAgICAgICAgICAgICAgIGJ1aWxkTW9udGhTd2l0Y2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1aWxkRGF5cygpO1xuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25Nb250aENoYW5nZVwiKTtcbiAgICAgICAgICAgIHVwZGF0ZU5hdmlnYXRpb25DdXJyZW50TW9udGgoKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjbGVhcih0cmlnZ2VyQ2hhbmdlRXZlbnQsIHRvSW5pdGlhbCkge1xuICAgICAgICAgICAgaWYgKHRyaWdnZXJDaGFuZ2VFdmVudCA9PT0gdm9pZCAwKSB7IHRyaWdnZXJDaGFuZ2VFdmVudCA9IHRydWU7IH1cbiAgICAgICAgICAgIGlmICh0b0luaXRpYWwgPT09IHZvaWQgMCkgeyB0b0luaXRpYWwgPSB0cnVlOyB9XG4gICAgICAgICAgICBzZWxmLmlucHV0LnZhbHVlID0gXCJcIjtcbiAgICAgICAgICAgIGlmIChzZWxmLmFsdElucHV0ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC52YWx1ZSA9IFwiXCI7XG4gICAgICAgICAgICBpZiAoc2VsZi5tb2JpbGVJbnB1dCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQudmFsdWUgPSBcIlwiO1xuICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzID0gW107XG4gICAgICAgICAgICBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmICh0b0luaXRpYWwgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyID0gc2VsZi5faW5pdGlhbERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRNb250aCA9IHNlbGYuX2luaXRpYWxEYXRlLmdldE1vbnRoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLnNob3dUaW1lSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5lbmFibGVUaW1lID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgc2V0RGVmYXVsdEhvdXJzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLnJlZHJhdygpO1xuICAgICAgICAgICAgaWYgKHRyaWdnZXJDaGFuZ2VFdmVudClcbiAgICAgICAgICAgICAgICAvLyB0cmlnZ2VyQ2hhbmdlRXZlbnQgaXMgdHJ1ZSAoZGVmYXVsdCkgb3IgYW4gRXZlbnRcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbkNoYW5nZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjbG9zZSgpIHtcbiAgICAgICAgICAgIHNlbGYuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIXNlbGYuaXNNb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jYWxlbmRhckNvbnRhaW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShcIm9wZW5cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzZWxmLl9pbnB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0LmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25DbG9zZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25EZXN0cm95XCIpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHNlbGYuX2hhbmRsZXJzLmxlbmd0aDsgaS0tOykge1xuICAgICAgICAgICAgICAgIHZhciBoID0gc2VsZi5faGFuZGxlcnNbaV07XG4gICAgICAgICAgICAgICAgaC5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoaC5ldmVudCwgaC5oYW5kbGVyLCBoLm9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5faGFuZGxlcnMgPSBbXTtcbiAgICAgICAgICAgIGlmIChzZWxmLm1vYmlsZUlucHV0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYubW9iaWxlSW5wdXQucGFyZW50Tm9kZSlcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNlbGYubW9iaWxlSW5wdXQpO1xuICAgICAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzZWxmLmNhbGVuZGFyQ29udGFpbmVyICYmIHNlbGYuY2FsZW5kYXJDb250YWluZXIucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5zdGF0aWMgJiYgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB3cmFwcGVyID0gc2VsZi5jYWxlbmRhckNvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgICAgICAgICAgICAgICAgICB3cmFwcGVyLmxhc3RDaGlsZCAmJiB3cmFwcGVyLnJlbW92ZUNoaWxkKHdyYXBwZXIubGFzdENoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdyYXBwZXIucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHdyYXBwZXIuZmlyc3RDaGlsZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHdyYXBwZXIuZmlyc3RDaGlsZCwgd3JhcHBlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQod3JhcHBlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2VsZi5jYWxlbmRhckNvbnRhaW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5hbHRJbnB1dCkge1xuICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQudHlwZSA9IFwidGV4dFwiO1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmFsdElucHV0LnBhcmVudE5vZGUpXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzZWxmLmFsdElucHV0KTtcbiAgICAgICAgICAgICAgICBkZWxldGUgc2VsZi5hbHRJbnB1dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmlucHV0KSB7XG4gICAgICAgICAgICAgICAgc2VsZi5pbnB1dC50eXBlID0gc2VsZi5pbnB1dC5fdHlwZTtcbiAgICAgICAgICAgICAgICBzZWxmLmlucHV0LmNsYXNzTGlzdC5yZW1vdmUoXCJmbGF0cGlja3ItaW5wdXRcIik7XG4gICAgICAgICAgICAgICAgc2VsZi5pbnB1dC5yZW1vdmVBdHRyaWJ1dGUoXCJyZWFkb25seVwiKTtcbiAgICAgICAgICAgICAgICBzZWxmLmlucHV0LnZhbHVlID0gXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIl9zaG93VGltZUlucHV0XCIsXG4gICAgICAgICAgICAgICAgXCJsYXRlc3RTZWxlY3RlZERhdGVPYmpcIixcbiAgICAgICAgICAgICAgICBcIl9oaWRlTmV4dE1vbnRoQXJyb3dcIixcbiAgICAgICAgICAgICAgICBcIl9oaWRlUHJldk1vbnRoQXJyb3dcIixcbiAgICAgICAgICAgICAgICBcIl9faGlkZU5leHRNb250aEFycm93XCIsXG4gICAgICAgICAgICAgICAgXCJfX2hpZGVQcmV2TW9udGhBcnJvd1wiLFxuICAgICAgICAgICAgICAgIFwiaXNNb2JpbGVcIixcbiAgICAgICAgICAgICAgICBcImlzT3BlblwiLFxuICAgICAgICAgICAgICAgIFwic2VsZWN0ZWREYXRlRWxlbVwiLFxuICAgICAgICAgICAgICAgIFwibWluRGF0ZUhhc1RpbWVcIixcbiAgICAgICAgICAgICAgICBcIm1heERhdGVIYXNUaW1lXCIsXG4gICAgICAgICAgICAgICAgXCJkYXlzXCIsXG4gICAgICAgICAgICAgICAgXCJkYXlzQ29udGFpbmVyXCIsXG4gICAgICAgICAgICAgICAgXCJfaW5wdXRcIixcbiAgICAgICAgICAgICAgICBcIl9wb3NpdGlvbkVsZW1lbnRcIixcbiAgICAgICAgICAgICAgICBcImlubmVyQ29udGFpbmVyXCIsXG4gICAgICAgICAgICAgICAgXCJyQ29udGFpbmVyXCIsXG4gICAgICAgICAgICAgICAgXCJtb250aE5hdlwiLFxuICAgICAgICAgICAgICAgIFwidG9kYXlEYXRlRWxlbVwiLFxuICAgICAgICAgICAgICAgIFwiY2FsZW5kYXJDb250YWluZXJcIixcbiAgICAgICAgICAgICAgICBcIndlZWtkYXlDb250YWluZXJcIixcbiAgICAgICAgICAgICAgICBcInByZXZNb250aE5hdlwiLFxuICAgICAgICAgICAgICAgIFwibmV4dE1vbnRoTmF2XCIsXG4gICAgICAgICAgICAgICAgXCJtb250aHNEcm9wZG93bkNvbnRhaW5lclwiLFxuICAgICAgICAgICAgICAgIFwiY3VycmVudE1vbnRoRWxlbWVudFwiLFxuICAgICAgICAgICAgICAgIFwiY3VycmVudFllYXJFbGVtZW50XCIsXG4gICAgICAgICAgICAgICAgXCJuYXZpZ2F0aW9uQ3VycmVudE1vbnRoXCIsXG4gICAgICAgICAgICAgICAgXCJzZWxlY3RlZERhdGVFbGVtXCIsXG4gICAgICAgICAgICAgICAgXCJjb25maWdcIixcbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzZWxmW2tdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoXykgeyB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpc0NhbGVuZGFyRWxlbShlbGVtKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuYXBwZW5kVG8gJiYgc2VsZi5jb25maWcuYXBwZW5kVG8uY29udGFpbnMoZWxlbSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi5jYWxlbmRhckNvbnRhaW5lci5jb250YWlucyhlbGVtKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBkb2N1bWVudENsaWNrKGUpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmlzT3BlbiAmJiAhc2VsZi5jb25maWcuaW5saW5lKSB7XG4gICAgICAgICAgICAgICAgdmFyIGV2ZW50VGFyZ2V0XzEgPSBnZXRFdmVudFRhcmdldChlKTtcbiAgICAgICAgICAgICAgICB2YXIgaXNDYWxlbmRhckVsZW1lbnQgPSBpc0NhbGVuZGFyRWxlbShldmVudFRhcmdldF8xKTtcbiAgICAgICAgICAgICAgICB2YXIgaXNJbnB1dCA9IGV2ZW50VGFyZ2V0XzEgPT09IHNlbGYuaW5wdXQgfHxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRUYXJnZXRfMSA9PT0gc2VsZi5hbHRJbnB1dCB8fFxuICAgICAgICAgICAgICAgICAgICBzZWxmLmVsZW1lbnQuY29udGFpbnMoZXZlbnRUYXJnZXRfMSkgfHxcbiAgICAgICAgICAgICAgICAgICAgLy8gd2ViIGNvbXBvbmVudHNcbiAgICAgICAgICAgICAgICAgICAgLy8gZS5wYXRoIGlzIG5vdCBwcmVzZW50IGluIGFsbCBicm93c2Vycy4gY2lyY3VtdmVudGluZyB0eXBlY2hlY2tzXG4gICAgICAgICAgICAgICAgICAgIChlLnBhdGggJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucGF0aC5pbmRleE9mICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAofmUucGF0aC5pbmRleE9mKHNlbGYuaW5wdXQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfmUucGF0aC5pbmRleE9mKHNlbGYuYWx0SW5wdXQpKSk7XG4gICAgICAgICAgICAgICAgdmFyIGxvc3RGb2N1cyA9IGUudHlwZSA9PT0gXCJibHVyXCJcbiAgICAgICAgICAgICAgICAgICAgPyBpc0lucHV0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnJlbGF0ZWRUYXJnZXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICFpc0NhbGVuZGFyRWxlbShlLnJlbGF0ZWRUYXJnZXQpXG4gICAgICAgICAgICAgICAgICAgIDogIWlzSW5wdXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICFpc0NhbGVuZGFyRWxlbWVudCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIWlzQ2FsZW5kYXJFbGVtKGUucmVsYXRlZFRhcmdldCk7XG4gICAgICAgICAgICAgICAgdmFyIGlzSWdub3JlZCA9ICFzZWxmLmNvbmZpZy5pZ25vcmVkRm9jdXNFbGVtZW50cy5zb21lKGZ1bmN0aW9uIChlbGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmNvbnRhaW5zKGV2ZW50VGFyZ2V0XzEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChsb3N0Rm9jdXMgJiYgaXNJZ25vcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLnRpbWVDb250YWluZXIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5taW51dGVFbGVtZW50ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlVGltZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1vZGUgPT09IFwicmFuZ2VcIiAmJiBzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNsZWFyKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVkcmF3KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2hhbmdlWWVhcihuZXdZZWFyKSB7XG4gICAgICAgICAgICBpZiAoIW5ld1llYXIgfHxcbiAgICAgICAgICAgICAgICAoc2VsZi5jb25maWcubWluRGF0ZSAmJiBuZXdZZWFyIDwgc2VsZi5jb25maWcubWluRGF0ZS5nZXRGdWxsWWVhcigpKSB8fFxuICAgICAgICAgICAgICAgIChzZWxmLmNvbmZpZy5tYXhEYXRlICYmIG5ld1llYXIgPiBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldEZ1bGxZZWFyKCkpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciBuZXdZZWFyTnVtID0gbmV3WWVhciwgaXNOZXdZZWFyID0gc2VsZi5jdXJyZW50WWVhciAhPT0gbmV3WWVhck51bTtcbiAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXIgPSBuZXdZZWFyTnVtIHx8IHNlbGYuY3VycmVudFllYXI7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubWF4RGF0ZSAmJlxuICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXIgPT09IHNlbGYuY29uZmlnLm1heERhdGUuZ2V0RnVsbFllYXIoKSkge1xuICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudE1vbnRoID0gTWF0aC5taW4oc2VsZi5jb25maWcubWF4RGF0ZS5nZXRNb250aCgpLCBzZWxmLmN1cnJlbnRNb250aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzZWxmLmNvbmZpZy5taW5EYXRlICYmXG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9PT0gc2VsZi5jb25maWcubWluRGF0ZS5nZXRGdWxsWWVhcigpKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50TW9udGggPSBNYXRoLm1heChzZWxmLmNvbmZpZy5taW5EYXRlLmdldE1vbnRoKCksIHNlbGYuY3VycmVudE1vbnRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc05ld1llYXIpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnJlZHJhdygpO1xuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uWWVhckNoYW5nZVwiKTtcbiAgICAgICAgICAgICAgICBidWlsZE1vbnRoU3dpdGNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNFbmFibGVkKGRhdGUsIHRpbWVsZXNzKSB7XG4gICAgICAgICAgICBpZiAodGltZWxlc3MgPT09IHZvaWQgMCkgeyB0aW1lbGVzcyA9IHRydWU7IH1cbiAgICAgICAgICAgIHZhciBkYXRlVG9DaGVjayA9IHNlbGYucGFyc2VEYXRlKGRhdGUsIHVuZGVmaW5lZCwgdGltZWxlc3MpOyAvLyB0aW1lbGVzc1xuICAgICAgICAgICAgaWYgKChzZWxmLmNvbmZpZy5taW5EYXRlICYmXG4gICAgICAgICAgICAgICAgZGF0ZVRvQ2hlY2sgJiZcbiAgICAgICAgICAgICAgICBjb21wYXJlRGF0ZXMoZGF0ZVRvQ2hlY2ssIHNlbGYuY29uZmlnLm1pbkRhdGUsIHRpbWVsZXNzICE9PSB1bmRlZmluZWQgPyB0aW1lbGVzcyA6ICFzZWxmLm1pbkRhdGVIYXNUaW1lKSA8IDApIHx8XG4gICAgICAgICAgICAgICAgKHNlbGYuY29uZmlnLm1heERhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgZGF0ZVRvQ2hlY2sgJiZcbiAgICAgICAgICAgICAgICAgICAgY29tcGFyZURhdGVzKGRhdGVUb0NoZWNrLCBzZWxmLmNvbmZpZy5tYXhEYXRlLCB0aW1lbGVzcyAhPT0gdW5kZWZpbmVkID8gdGltZWxlc3MgOiAhc2VsZi5tYXhEYXRlSGFzVGltZSkgPiAwKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuZW5hYmxlLmxlbmd0aCA9PT0gMCAmJiBzZWxmLmNvbmZpZy5kaXNhYmxlLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChkYXRlVG9DaGVjayA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHZhciBib29sID0gc2VsZi5jb25maWcuZW5hYmxlLmxlbmd0aCA+IDAsIGFycmF5ID0gYm9vbCA/IHNlbGYuY29uZmlnLmVuYWJsZSA6IHNlbGYuY29uZmlnLmRpc2FibGU7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgZCA9IHZvaWQgMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZCA9IGFycmF5W2ldO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgICAgICAgICAgIGQoZGF0ZVRvQ2hlY2spIC8vIGRpc2FibGVkIGJ5IGZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm9vbDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChkIGluc3RhbmNlb2YgRGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICBkYXRlVG9DaGVjayAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIGQuZ2V0VGltZSgpID09PSBkYXRlVG9DaGVjay5nZXRUaW1lKCkpXG4gICAgICAgICAgICAgICAgICAgIC8vIGRpc2FibGVkIGJ5IGRhdGVcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJvb2w7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGQgPT09IFwic3RyaW5nXCIgJiYgZGF0ZVRvQ2hlY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBkaXNhYmxlZCBieSBkYXRlIHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VkID0gc2VsZi5wYXJzZURhdGUoZCwgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZCAmJiBwYXJzZWQuZ2V0VGltZSgpID09PSBkYXRlVG9DaGVjay5nZXRUaW1lKClcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYm9vbFxuICAgICAgICAgICAgICAgICAgICAgICAgOiAhYm9vbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgLy8gZGlzYWJsZWQgYnkgcmFuZ2VcbiAgICAgICAgICAgICAgICB0eXBlb2YgZCA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgICAgICAgICBkYXRlVG9DaGVjayAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIGQuZnJvbSAmJlxuICAgICAgICAgICAgICAgICAgICBkLnRvICYmXG4gICAgICAgICAgICAgICAgICAgIGRhdGVUb0NoZWNrLmdldFRpbWUoKSA+PSBkLmZyb20uZ2V0VGltZSgpICYmXG4gICAgICAgICAgICAgICAgICAgIGRhdGVUb0NoZWNrLmdldFRpbWUoKSA8PSBkLnRvLmdldFRpbWUoKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJvb2w7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gIWJvb2w7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNJblZpZXcoZWxlbSkge1xuICAgICAgICAgICAgaWYgKHNlbGYuZGF5c0NvbnRhaW5lciAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybiAoZWxlbS5jbGFzc05hbWUuaW5kZXhPZihcImhpZGRlblwiKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5kYXlzQ29udGFpbmVyLmNvbnRhaW5zKGVsZW0pKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBvbktleURvd24oZSkge1xuICAgICAgICAgICAgLy8gZS5rZXkgICAgICAgICAgICAgICAgICAgICAgZS5rZXlDb2RlXG4gICAgICAgICAgICAvLyBcIkJhY2tzcGFjZVwiICAgICAgICAgICAgICAgICAgICAgICAgOFxuICAgICAgICAgICAgLy8gXCJUYWJcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDlcbiAgICAgICAgICAgIC8vIFwiRW50ZXJcIiAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzXG4gICAgICAgICAgICAvLyBcIkVzY2FwZVwiICAgICAoSUUgXCJFc2NcIikgICAgICAgICAgIDI3XG4gICAgICAgICAgICAvLyBcIkFycm93TGVmdFwiICAoSUUgXCJMZWZ0XCIpICAgICAgICAgIDM3XG4gICAgICAgICAgICAvLyBcIkFycm93VXBcIiAgICAoSUUgXCJVcFwiKSAgICAgICAgICAgIDM4XG4gICAgICAgICAgICAvLyBcIkFycm93UmlnaHRcIiAoSUUgXCJSaWdodFwiKSAgICAgICAgIDM5XG4gICAgICAgICAgICAvLyBcIkFycm93RG93blwiICAoSUUgXCJEb3duXCIpICAgICAgICAgIDQwXG4gICAgICAgICAgICAvLyBcIkRlbGV0ZVwiICAgICAoSUUgXCJEZWxcIikgICAgICAgICAgIDQ2XG4gICAgICAgICAgICB2YXIgaXNJbnB1dCA9IGUudGFyZ2V0ID09PSBzZWxmLl9pbnB1dDtcbiAgICAgICAgICAgIHZhciBhbGxvd0lucHV0ID0gc2VsZi5jb25maWcuYWxsb3dJbnB1dDtcbiAgICAgICAgICAgIHZhciBhbGxvd0tleWRvd24gPSBzZWxmLmlzT3BlbiAmJiAoIWFsbG93SW5wdXQgfHwgIWlzSW5wdXQpO1xuICAgICAgICAgICAgdmFyIGFsbG93SW5saW5lS2V5ZG93biA9IHNlbGYuY29uZmlnLmlubGluZSAmJiBpc0lucHV0ICYmICFhbGxvd0lucHV0O1xuICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMTMgJiYgaXNJbnB1dCkge1xuICAgICAgICAgICAgICAgIGlmIChhbGxvd0lucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0RGF0ZShzZWxmLl9pbnB1dC52YWx1ZSwgdHJ1ZSwgZS50YXJnZXQgPT09IHNlbGYuYWx0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi5jb25maWcuYWx0Rm9ybWF0XG4gICAgICAgICAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLmRhdGVGb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS50YXJnZXQuYmx1cigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5vcGVuKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNDYWxlbmRhckVsZW0oZS50YXJnZXQpIHx8XG4gICAgICAgICAgICAgICAgYWxsb3dLZXlkb3duIHx8XG4gICAgICAgICAgICAgICAgYWxsb3dJbmxpbmVLZXlkb3duKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlzVGltZU9iaiA9ICEhc2VsZi50aW1lQ29udGFpbmVyICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYudGltZUNvbnRhaW5lci5jb250YWlucyhlLnRhcmdldCk7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChlLmtleUNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1RpbWVPYmopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlVGltZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzQW5kQ2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3REYXRlKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjc6IC8vIGVzY2FwZVxuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNBbmRDbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0NjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0lucHV0ICYmICFzZWxmLmNvbmZpZy5hbGxvd0lucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1RpbWVPYmogJiYgIWlzSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuZGF5c0NvbnRhaW5lciAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbGxvd0lucHV0ID09PSBmYWxzZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgaXNJblZpZXcoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsdGFfMSA9IGUua2V5Q29kZSA9PT0gMzkgPyAxIDogLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZS5jdHJsS2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNPbkRheSh1bmRlZmluZWQsIGRlbHRhXzEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VNb250aChkZWx0YV8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzT25EYXkoZ2V0Rmlyc3RBdmFpbGFibGVEYXkoMSksIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2VsZi5ob3VyRWxlbWVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWx0YSA9IGUua2V5Q29kZSA9PT0gNDAgPyAxIDogLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHNlbGYuZGF5c0NvbnRhaW5lciAmJiBlLnRhcmdldC4kaSAhPT0gdW5kZWZpbmVkKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudGFyZ2V0ID09PSBzZWxmLmlucHV0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS50YXJnZXQgPT09IHNlbGYuYWx0SW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5jdHJsS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZVllYXIoc2VsZi5jdXJyZW50WWVhciAtIGRlbHRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNPbkRheShnZXRGaXJzdEF2YWlsYWJsZURheSgxKSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpc1RpbWVPYmopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzT25EYXkodW5kZWZpbmVkLCBkZWx0YSAqIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS50YXJnZXQgPT09IHNlbGYuY3VycmVudFllYXJFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlWWVhcihzZWxmLmN1cnJlbnRZZWFyIC0gZGVsdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2VsZi5jb25maWcuZW5hYmxlVGltZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNUaW1lT2JqICYmIHNlbGYuaG91ckVsZW1lbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVUaW1lKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RlYm91bmNlZENoYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1RpbWVPYmopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbXMgPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWludXRlRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWNvbmRFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFtUE0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KHNlbGYucGx1Z2luRWxlbWVudHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHg7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gZWxlbXMuaW5kZXhPZihlLnRhcmdldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBlbGVtc1tpICsgKGUuc2hpZnRLZXkgPyAtMSA6IDEpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGFyZ2V0IHx8IHNlbGYuX2lucHV0KS5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFzZWxmLmNvbmZpZy5ub0NhbGVuZGFyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kYXlzQ29udGFpbmVyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kYXlzQ29udGFpbmVyLmNvbnRhaW5zKGUudGFyZ2V0KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuYW1QTSAhPT0gdW5kZWZpbmVkICYmIGUudGFyZ2V0ID09PSBzZWxmLmFtUE0pIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGUua2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2Ugc2VsZi5sMTBuLmFtUE1bMF0uY2hhckF0KDApOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIHNlbGYubDEwbi5hbVBNWzBdLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpOlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hbVBNLnRleHRDb250ZW50ID0gc2VsZi5sMTBuLmFtUE1bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRIb3Vyc0Zyb21JbnB1dHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBzZWxmLmwxMG4uYW1QTVsxXS5jaGFyQXQoMCk6XG4gICAgICAgICAgICAgICAgICAgIGNhc2Ugc2VsZi5sMTBuLmFtUE1bMV0uY2hhckF0KDApLnRvTG93ZXJDYXNlKCk6XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFtUE0udGV4dENvbnRlbnQgPSBzZWxmLmwxMG4uYW1QTVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEhvdXJzRnJvbUlucHV0cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0lucHV0IHx8IGlzQ2FsZW5kYXJFbGVtKGUudGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uS2V5RG93blwiLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBvbk1vdXNlT3ZlcihlbGVtKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCAhPT0gMSB8fFxuICAgICAgICAgICAgICAgIChlbGVtICYmXG4gICAgICAgICAgICAgICAgICAgICghZWxlbS5jbGFzc0xpc3QuY29udGFpbnMoXCJmbGF0cGlja3ItZGF5XCIpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTGlzdC5jb250YWlucyhcImZsYXRwaWNrci1kaXNhYmxlZFwiKSkpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciBob3ZlckRhdGUgPSBlbGVtXG4gICAgICAgICAgICAgICAgPyBlbGVtLmRhdGVPYmouZ2V0VGltZSgpXG4gICAgICAgICAgICAgICAgOiBzZWxmLmRheXMuZmlyc3RFbGVtZW50Q2hpbGQuZGF0ZU9iai5nZXRUaW1lKCksIGluaXRpYWxEYXRlID0gc2VsZi5wYXJzZURhdGUoc2VsZi5zZWxlY3RlZERhdGVzWzBdLCB1bmRlZmluZWQsIHRydWUpLmdldFRpbWUoKSwgcmFuZ2VTdGFydERhdGUgPSBNYXRoLm1pbihob3ZlckRhdGUsIHNlbGYuc2VsZWN0ZWREYXRlc1swXS5nZXRUaW1lKCkpLCByYW5nZUVuZERhdGUgPSBNYXRoLm1heChob3ZlckRhdGUsIHNlbGYuc2VsZWN0ZWREYXRlc1swXS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgdmFyIGNvbnRhaW5zRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBtaW5SYW5nZSA9IDAsIG1heFJhbmdlID0gMDtcbiAgICAgICAgICAgIGZvciAodmFyIHQgPSByYW5nZVN0YXJ0RGF0ZTsgdCA8IHJhbmdlRW5kRGF0ZTsgdCArPSBkdXJhdGlvbi5EQVkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzRW5hYmxlZChuZXcgRGF0ZSh0KSwgdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbnNEaXNhYmxlZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluc0Rpc2FibGVkIHx8ICh0ID4gcmFuZ2VTdGFydERhdGUgJiYgdCA8IHJhbmdlRW5kRGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0IDwgaW5pdGlhbERhdGUgJiYgKCFtaW5SYW5nZSB8fCB0ID4gbWluUmFuZ2UpKVxuICAgICAgICAgICAgICAgICAgICAgICAgbWluUmFuZ2UgPSB0O1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0ID4gaW5pdGlhbERhdGUgJiYgKCFtYXhSYW5nZSB8fCB0IDwgbWF4UmFuZ2UpKVxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4UmFuZ2UgPSB0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAodmFyIG0gPSAwOyBtIDwgc2VsZi5jb25maWcuc2hvd01vbnRoczsgbSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1vbnRoID0gc2VsZi5kYXlzQ29udGFpbmVyLmNoaWxkcmVuW21dO1xuICAgICAgICAgICAgICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKGksIGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRheUVsZW0gPSBtb250aC5jaGlsZHJlbltpXSwgZGF0ZSA9IGRheUVsZW0uZGF0ZU9iajtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgb3V0T2ZSYW5nZSA9IChtaW5SYW5nZSA+IDAgJiYgdGltZXN0YW1wIDwgbWluUmFuZ2UpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAobWF4UmFuZ2UgPiAwICYmIHRpbWVzdGFtcCA+IG1heFJhbmdlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG91dE9mUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRheUVsZW0uY2xhc3NMaXN0LmFkZChcIm5vdEFsbG93ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBbXCJpblJhbmdlXCIsIFwic3RhcnRSYW5nZVwiLCBcImVuZFJhbmdlXCJdLmZvckVhY2goZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXlFbGVtLmNsYXNzTGlzdC5yZW1vdmUoYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY29udGFpbnNEaXNhYmxlZCAmJiAhb3V0T2ZSYW5nZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XG4gICAgICAgICAgICAgICAgICAgIFtcInN0YXJ0UmFuZ2VcIiwgXCJpblJhbmdlXCIsIFwiZW5kUmFuZ2VcIiwgXCJub3RBbGxvd2VkXCJdLmZvckVhY2goZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRheUVsZW0uY2xhc3NMaXN0LnJlbW92ZShjKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NMaXN0LmFkZChob3ZlckRhdGUgPD0gc2VsZi5zZWxlY3RlZERhdGVzWzBdLmdldFRpbWUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJzdGFydFJhbmdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiZW5kUmFuZ2VcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5pdGlhbERhdGUgPCBob3ZlckRhdGUgJiYgdGltZXN0YW1wID09PSBpbml0aWFsRGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXlFbGVtLmNsYXNzTGlzdC5hZGQoXCJzdGFydFJhbmdlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5pdGlhbERhdGUgPiBob3ZlckRhdGUgJiYgdGltZXN0YW1wID09PSBpbml0aWFsRGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXlFbGVtLmNsYXNzTGlzdC5hZGQoXCJlbmRSYW5nZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aW1lc3RhbXAgPj0gbWluUmFuZ2UgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF4UmFuZ2UgPT09IDAgfHwgdGltZXN0YW1wIDw9IG1heFJhbmdlKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQmV0d2Vlbih0aW1lc3RhbXAsIGluaXRpYWxEYXRlLCBob3ZlckRhdGUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheUVsZW0uY2xhc3NMaXN0LmFkZChcImluUmFuZ2VcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gbW9udGguY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIF9sb29wXzEoaSwgbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG9uUmVzaXplKCkge1xuICAgICAgICAgICAgaWYgKHNlbGYuaXNPcGVuICYmICFzZWxmLmNvbmZpZy5zdGF0aWMgJiYgIXNlbGYuY29uZmlnLmlubGluZSlcbiAgICAgICAgICAgICAgICBwb3NpdGlvbkNhbGVuZGFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0RGVmYXVsdFRpbWUoKSB7XG4gICAgICAgICAgICBzZWxmLnNldERhdGUoc2VsZi5jb25maWcubWluRGF0ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShzZWxmLmNvbmZpZy5taW5EYXRlLmdldFRpbWUoKSlcbiAgICAgICAgICAgICAgICA6IG5ldyBEYXRlKCksIHRydWUpO1xuICAgICAgICAgICAgc2V0RGVmYXVsdEhvdXJzKCk7XG4gICAgICAgICAgICB1cGRhdGVWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG9wZW4oZSwgcG9zaXRpb25FbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAocG9zaXRpb25FbGVtZW50ID09PSB2b2lkIDApIHsgcG9zaXRpb25FbGVtZW50ID0gc2VsZi5fcG9zaXRpb25FbGVtZW50OyB9XG4gICAgICAgICAgICBpZiAoc2VsZi5pc01vYmlsZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgZS50YXJnZXQgJiYgZS50YXJnZXQuYmx1cigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5tb2JpbGVJbnB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC5jbGljaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbk9wZW5cIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuX2lucHV0LmRpc2FibGVkIHx8IHNlbGYuY29uZmlnLmlubGluZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgd2FzT3BlbiA9IHNlbGYuaXNPcGVuO1xuICAgICAgICAgICAgc2VsZi5pc09wZW4gPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCF3YXNPcGVuKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwib3BlblwiKTtcbiAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dC5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uT3BlblwiKTtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbkNhbGVuZGFyKHBvc2l0aW9uRWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuZW5hYmxlVGltZSA9PT0gdHJ1ZSAmJiBzZWxmLmNvbmZpZy5ub0NhbGVuZGFyID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0RGVmYXVsdFRpbWUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmFsbG93SW5wdXQgPT09IGZhbHNlICYmXG4gICAgICAgICAgICAgICAgICAgIChlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICFzZWxmLnRpbWVDb250YWluZXIuY29udGFpbnMoZS5yZWxhdGVkVGFyZ2V0KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLmhvdXJFbGVtZW50LnNlbGVjdCgpOyB9LCA1MCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG1pbk1heERhdGVTZXR0ZXIodHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGVPYmogPSAoc2VsZi5jb25maWdbXCJfXCIgKyB0eXBlICsgXCJEYXRlXCJdID0gc2VsZi5wYXJzZURhdGUoZGF0ZSwgc2VsZi5jb25maWcuZGF0ZUZvcm1hdCkpO1xuICAgICAgICAgICAgICAgIHZhciBpbnZlcnNlRGF0ZU9iaiA9IHNlbGYuY29uZmlnW1wiX1wiICsgKHR5cGUgPT09IFwibWluXCIgPyBcIm1heFwiIDogXCJtaW5cIikgKyBcIkRhdGVcIl07XG4gICAgICAgICAgICAgICAgaWYgKGRhdGVPYmogIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmW3R5cGUgPT09IFwibWluXCIgPyBcIm1pbkRhdGVIYXNUaW1lXCIgOiBcIm1heERhdGVIYXNUaW1lXCJdID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVPYmouZ2V0SG91cnMoKSA+IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlT2JqLmdldE1pbnV0ZXMoKSA+IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlT2JqLmdldFNlY29uZHMoKSA+IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzZWxmLnNlbGVjdGVkRGF0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzID0gc2VsZi5zZWxlY3RlZERhdGVzLmZpbHRlcihmdW5jdGlvbiAoZCkgeyByZXR1cm4gaXNFbmFibGVkKGQpOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoICYmIHR5cGUgPT09IFwibWluXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRIb3Vyc0Zyb21EYXRlKGRhdGVPYmopO1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5kYXlzQ29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZHJhdygpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0ZU9iaiAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhckVsZW1lbnRbdHlwZV0gPSBkYXRlT2JqLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhckVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKHR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyRWxlbWVudC5kaXNhYmxlZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAhIWludmVyc2VEYXRlT2JqICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZU9iaiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52ZXJzZURhdGVPYmouZ2V0RnVsbFllYXIoKSA9PT0gZGF0ZU9iai5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcGFyc2VDb25maWcoKSB7XG4gICAgICAgICAgICB2YXIgYm9vbE9wdHMgPSBbXG4gICAgICAgICAgICAgICAgXCJ3cmFwXCIsXG4gICAgICAgICAgICAgICAgXCJ3ZWVrTnVtYmVyc1wiLFxuICAgICAgICAgICAgICAgIFwiYWxsb3dJbnB1dFwiLFxuICAgICAgICAgICAgICAgIFwiY2xpY2tPcGVuc1wiLFxuICAgICAgICAgICAgICAgIFwidGltZV8yNGhyXCIsXG4gICAgICAgICAgICAgICAgXCJlbmFibGVUaW1lXCIsXG4gICAgICAgICAgICAgICAgXCJub0NhbGVuZGFyXCIsXG4gICAgICAgICAgICAgICAgXCJhbHRJbnB1dFwiLFxuICAgICAgICAgICAgICAgIFwic2hvcnRoYW5kQ3VycmVudE1vbnRoXCIsXG4gICAgICAgICAgICAgICAgXCJpbmxpbmVcIixcbiAgICAgICAgICAgICAgICBcInN0YXRpY1wiLFxuICAgICAgICAgICAgICAgIFwiZW5hYmxlU2Vjb25kc1wiLFxuICAgICAgICAgICAgICAgIFwiZGlzYWJsZU1vYmlsZVwiLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIHZhciB1c2VyQ29uZmlnID0gX19hc3NpZ24oe30sIGluc3RhbmNlQ29uZmlnLCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGVsZW1lbnQuZGF0YXNldCB8fCB7fSkpKTtcbiAgICAgICAgICAgIHZhciBmb3JtYXRzID0ge307XG4gICAgICAgICAgICBzZWxmLmNvbmZpZy5wYXJzZURhdGUgPSB1c2VyQ29uZmlnLnBhcnNlRGF0ZTtcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLmZvcm1hdERhdGUgPSB1c2VyQ29uZmlnLmZvcm1hdERhdGU7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZi5jb25maWcsIFwiZW5hYmxlXCIsIHtcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuY29uZmlnLl9lbmFibGU7IH0sXG4gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoZGF0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcuX2VuYWJsZSA9IHBhcnNlRGF0ZVJ1bGVzKGRhdGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLmNvbmZpZywgXCJkaXNhYmxlXCIsIHtcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuY29uZmlnLl9kaXNhYmxlOyB9LFxuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKGRhdGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLl9kaXNhYmxlID0gcGFyc2VEYXRlUnVsZXMoZGF0ZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHRpbWVNb2RlID0gdXNlckNvbmZpZy5tb2RlID09PSBcInRpbWVcIjtcbiAgICAgICAgICAgIGlmICghdXNlckNvbmZpZy5kYXRlRm9ybWF0ICYmICh1c2VyQ29uZmlnLmVuYWJsZVRpbWUgfHwgdGltZU1vZGUpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRlZmF1bHREYXRlRm9ybWF0ID0gZmxhdHBpY2tyLmRlZmF1bHRDb25maWcuZGF0ZUZvcm1hdCB8fCBkZWZhdWx0cy5kYXRlRm9ybWF0O1xuICAgICAgICAgICAgICAgIGZvcm1hdHMuZGF0ZUZvcm1hdCA9XG4gICAgICAgICAgICAgICAgICAgIHVzZXJDb25maWcubm9DYWxlbmRhciB8fCB0aW1lTW9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBcIkg6aVwiICsgKHVzZXJDb25maWcuZW5hYmxlU2Vjb25kcyA/IFwiOlNcIiA6IFwiXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGRlZmF1bHREYXRlRm9ybWF0ICsgXCIgSDppXCIgKyAodXNlckNvbmZpZy5lbmFibGVTZWNvbmRzID8gXCI6U1wiIDogXCJcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodXNlckNvbmZpZy5hbHRJbnB1dCAmJlxuICAgICAgICAgICAgICAgICh1c2VyQ29uZmlnLmVuYWJsZVRpbWUgfHwgdGltZU1vZGUpICYmXG4gICAgICAgICAgICAgICAgIXVzZXJDb25maWcuYWx0Rm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGRlZmF1bHRBbHRGb3JtYXQgPSBmbGF0cGlja3IuZGVmYXVsdENvbmZpZy5hbHRGb3JtYXQgfHwgZGVmYXVsdHMuYWx0Rm9ybWF0O1xuICAgICAgICAgICAgICAgIGZvcm1hdHMuYWx0Rm9ybWF0ID1cbiAgICAgICAgICAgICAgICAgICAgdXNlckNvbmZpZy5ub0NhbGVuZGFyIHx8IHRpbWVNb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFwiaDppXCIgKyAodXNlckNvbmZpZy5lbmFibGVTZWNvbmRzID8gXCI6UyBLXCIgOiBcIiBLXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGRlZmF1bHRBbHRGb3JtYXQgKyAoXCIgaDppXCIgKyAodXNlckNvbmZpZy5lbmFibGVTZWNvbmRzID8gXCI6U1wiIDogXCJcIikgKyBcIiBLXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF1c2VyQ29uZmlnLmFsdElucHV0Q2xhc3MpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5hbHRJbnB1dENsYXNzID1cbiAgICAgICAgICAgICAgICAgICAgc2VsZi5pbnB1dC5jbGFzc05hbWUgKyBcIiBcIiArIHNlbGYuY29uZmlnLmFsdElucHV0Q2xhc3M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZi5jb25maWcsIFwibWluRGF0ZVwiLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLmNvbmZpZy5fbWluRGF0ZTsgfSxcbiAgICAgICAgICAgICAgICBzZXQ6IG1pbk1heERhdGVTZXR0ZXIoXCJtaW5cIilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYuY29uZmlnLCBcIm1heERhdGVcIiwge1xuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VsZi5jb25maWcuX21heERhdGU7IH0sXG4gICAgICAgICAgICAgICAgc2V0OiBtaW5NYXhEYXRlU2V0dGVyKFwibWF4XCIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBtaW5NYXhUaW1lU2V0dGVyID0gZnVuY3Rpb24gKHR5cGUpIHsgcmV0dXJuIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ1t0eXBlID09PSBcIm1pblwiID8gXCJfbWluVGltZVwiIDogXCJfbWF4VGltZVwiXSA9IHNlbGYucGFyc2VEYXRlKHZhbCwgXCJIOmk6U1wiKTtcbiAgICAgICAgICAgIH07IH07XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZi5jb25maWcsIFwibWluVGltZVwiLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLmNvbmZpZy5fbWluVGltZTsgfSxcbiAgICAgICAgICAgICAgICBzZXQ6IG1pbk1heFRpbWVTZXR0ZXIoXCJtaW5cIilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYuY29uZmlnLCBcIm1heFRpbWVcIiwge1xuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VsZi5jb25maWcuX21heFRpbWU7IH0sXG4gICAgICAgICAgICAgICAgc2V0OiBtaW5NYXhUaW1lU2V0dGVyKFwibWF4XCIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICh1c2VyQ29uZmlnLm1vZGUgPT09IFwidGltZVwiKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcubm9DYWxlbmRhciA9IHRydWU7XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcuZW5hYmxlVGltZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHNlbGYuY29uZmlnLCBmb3JtYXRzLCB1c2VyQ29uZmlnKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm9vbE9wdHMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWdbYm9vbE9wdHNbaV1dID1cbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWdbYm9vbE9wdHNbaV1dID09PSB0cnVlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ1tib29sT3B0c1tpXV0gPT09IFwidHJ1ZVwiO1xuICAgICAgICAgICAgSE9PS1MuZmlsdGVyKGZ1bmN0aW9uIChob29rKSB7IHJldHVybiBzZWxmLmNvbmZpZ1tob29rXSAhPT0gdW5kZWZpbmVkOyB9KS5mb3JFYWNoKGZ1bmN0aW9uIChob29rKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWdbaG9va10gPSBhcnJheWlmeShzZWxmLmNvbmZpZ1tob29rXSB8fCBbXSkubWFwKGJpbmRUb0luc3RhbmNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2VsZi5pc01vYmlsZSA9XG4gICAgICAgICAgICAgICAgIXNlbGYuY29uZmlnLmRpc2FibGVNb2JpbGUgJiZcbiAgICAgICAgICAgICAgICAgICAgIXNlbGYuY29uZmlnLmlubGluZSAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5tb2RlID09PSBcInNpbmdsZVwiICYmXG4gICAgICAgICAgICAgICAgICAgICFzZWxmLmNvbmZpZy5kaXNhYmxlLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICAhc2VsZi5jb25maWcuZW5hYmxlLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICAhc2VsZi5jb25maWcud2Vla051bWJlcnMgJiZcbiAgICAgICAgICAgICAgICAgICAgL0FuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLmNvbmZpZy5wbHVnaW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHBsdWdpbkNvbmYgPSBzZWxmLmNvbmZpZy5wbHVnaW5zW2ldKHNlbGYpIHx8IHt9O1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBwbHVnaW5Db25mKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChIT09LUy5pbmRleE9mKGtleSkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWdba2V5XSA9IGFycmF5aWZ5KHBsdWdpbkNvbmZba2V5XSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGJpbmRUb0luc3RhbmNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoc2VsZi5jb25maWdba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHVzZXJDb25maWdba2V5XSA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnW2tleV0gPSBwbHVnaW5Db25mW2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25QYXJzZUNvbmZpZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXR1cExvY2FsZSgpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2VsZi5jb25maWcubG9jYWxlICE9PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGZsYXRwaWNrci5sMTBuc1tzZWxmLmNvbmZpZy5sb2NhbGVdID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmVycm9ySGFuZGxlcihuZXcgRXJyb3IoXCJmbGF0cGlja3I6IGludmFsaWQgbG9jYWxlIFwiICsgc2VsZi5jb25maWcubG9jYWxlKSk7XG4gICAgICAgICAgICBzZWxmLmwxMG4gPSBfX2Fzc2lnbih7fSwgZmxhdHBpY2tyLmwxMG5zW1wiZGVmYXVsdFwiXSwgKHR5cGVvZiBzZWxmLmNvbmZpZy5sb2NhbGUgPT09IFwib2JqZWN0XCJcbiAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLmxvY2FsZVxuICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcubG9jYWxlICE9PSBcImRlZmF1bHRcIlxuICAgICAgICAgICAgICAgICAgICA/IGZsYXRwaWNrci5sMTBuc1tzZWxmLmNvbmZpZy5sb2NhbGVdXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkKSk7XG4gICAgICAgICAgICB0b2tlblJlZ2V4LksgPSBcIihcIiArIHNlbGYubDEwbi5hbVBNWzBdICsgXCJ8XCIgKyBzZWxmLmwxMG4uYW1QTVsxXSArIFwifFwiICsgc2VsZi5sMTBuLmFtUE1bMF0udG9Mb3dlckNhc2UoKSArIFwifFwiICsgc2VsZi5sMTBuLmFtUE1bMV0udG9Mb3dlckNhc2UoKSArIFwiKVwiO1xuICAgICAgICAgICAgdmFyIHVzZXJDb25maWcgPSBfX2Fzc2lnbih7fSwgaW5zdGFuY2VDb25maWcsIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZWxlbWVudC5kYXRhc2V0IHx8IHt9KSkpO1xuICAgICAgICAgICAgaWYgKHVzZXJDb25maWcudGltZV8yNGhyID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICBmbGF0cGlja3IuZGVmYXVsdENvbmZpZy50aW1lXzI0aHIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLnRpbWVfMjRociA9IHNlbGYubDEwbi50aW1lXzI0aHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLmZvcm1hdERhdGUgPSBjcmVhdGVEYXRlRm9ybWF0dGVyKHNlbGYpO1xuICAgICAgICAgICAgc2VsZi5wYXJzZURhdGUgPSBjcmVhdGVEYXRlUGFyc2VyKHsgY29uZmlnOiBzZWxmLmNvbmZpZywgbDEwbjogc2VsZi5sMTBuIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHBvc2l0aW9uQ2FsZW5kYXIoY3VzdG9tUG9zaXRpb25FbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5jYWxlbmRhckNvbnRhaW5lciA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uUHJlQ2FsZW5kYXJQb3NpdGlvblwiKTtcbiAgICAgICAgICAgIHZhciBwb3NpdGlvbkVsZW1lbnQgPSBjdXN0b21Qb3NpdGlvbkVsZW1lbnQgfHwgc2VsZi5fcG9zaXRpb25FbGVtZW50O1xuICAgICAgICAgICAgdmFyIGNhbGVuZGFySGVpZ2h0ID0gQXJyYXkucHJvdG90eXBlLnJlZHVjZS5jYWxsKHNlbGYuY2FsZW5kYXJDb250YWluZXIuY2hpbGRyZW4sIChmdW5jdGlvbiAoYWNjLCBjaGlsZCkgeyByZXR1cm4gYWNjICsgY2hpbGQub2Zmc2V0SGVpZ2h0OyB9KSwgMCksIGNhbGVuZGFyV2lkdGggPSBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLm9mZnNldFdpZHRoLCBjb25maWdQb3MgPSBzZWxmLmNvbmZpZy5wb3NpdGlvbi5zcGxpdChcIiBcIiksIGNvbmZpZ1Bvc1ZlcnRpY2FsID0gY29uZmlnUG9zWzBdLCBjb25maWdQb3NIb3Jpem9udGFsID0gY29uZmlnUG9zLmxlbmd0aCA+IDEgPyBjb25maWdQb3NbMV0gOiBudWxsLCBpbnB1dEJvdW5kcyA9IHBvc2l0aW9uRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgZGlzdGFuY2VGcm9tQm90dG9tID0gd2luZG93LmlubmVySGVpZ2h0IC0gaW5wdXRCb3VuZHMuYm90dG9tLCBzaG93T25Ub3AgPSBjb25maWdQb3NWZXJ0aWNhbCA9PT0gXCJhYm92ZVwiIHx8XG4gICAgICAgICAgICAgICAgKGNvbmZpZ1Bvc1ZlcnRpY2FsICE9PSBcImJlbG93XCIgJiZcbiAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2VGcm9tQm90dG9tIDwgY2FsZW5kYXJIZWlnaHQgJiZcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRCb3VuZHMudG9wID4gY2FsZW5kYXJIZWlnaHQpO1xuICAgICAgICAgICAgdmFyIHRvcCA9IHdpbmRvdy5wYWdlWU9mZnNldCArXG4gICAgICAgICAgICAgICAgaW5wdXRCb3VuZHMudG9wICtcbiAgICAgICAgICAgICAgICAoIXNob3dPblRvcCA/IHBvc2l0aW9uRWxlbWVudC5vZmZzZXRIZWlnaHQgKyAyIDogLWNhbGVuZGFySGVpZ2h0IC0gMik7XG4gICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcImFycm93VG9wXCIsICFzaG93T25Ub3ApO1xuICAgICAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJhcnJvd0JvdHRvbVwiLCBzaG93T25Ub3ApO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmlubGluZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgbGVmdCA9IHdpbmRvdy5wYWdlWE9mZnNldCArXG4gICAgICAgICAgICAgICAgaW5wdXRCb3VuZHMubGVmdCAtXG4gICAgICAgICAgICAgICAgKGNvbmZpZ1Bvc0hvcml6b250YWwgIT0gbnVsbCAmJiBjb25maWdQb3NIb3Jpem9udGFsID09PSBcImNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgID8gKGNhbGVuZGFyV2lkdGggLSBpbnB1dEJvdW5kcy53aWR0aCkgLyAyXG4gICAgICAgICAgICAgICAgICAgIDogMCk7XG4gICAgICAgICAgICB2YXIgcmlnaHQgPSB3aW5kb3cuZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aCAtICh3aW5kb3cucGFnZVhPZmZzZXQgKyBpbnB1dEJvdW5kcy5yaWdodCk7XG4gICAgICAgICAgICB2YXIgcmlnaHRNb3N0ID0gbGVmdCArIGNhbGVuZGFyV2lkdGggPiB3aW5kb3cuZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgIHZhciBjZW50ZXJNb3N0ID0gcmlnaHQgKyBjYWxlbmRhcldpZHRoID4gd2luZG93LmRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcInJpZ2h0TW9zdFwiLCByaWdodE1vc3QpO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLnN0YXRpYylcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnN0eWxlLnRvcCA9IHRvcCArIFwicHhcIjtcbiAgICAgICAgICAgIGlmICghcmlnaHRNb3N0KSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gbGVmdCArIFwicHhcIjtcbiAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnN0eWxlLnJpZ2h0ID0gXCJhdXRvXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghY2VudGVyTW9zdCkge1xuICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUubGVmdCA9IFwiYXV0b1wiO1xuICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUucmlnaHQgPSByaWdodCArIFwicHhcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBkb2MgPSBkb2N1bWVudC5zdHlsZVNoZWV0c1swXTtcbiAgICAgICAgICAgICAgICAvLyBzb21lIHRlc3RpbmcgZW52aXJvbm1lbnRzIGRvbid0IGhhdmUgY3NzIHN1cHBvcnRcbiAgICAgICAgICAgICAgICBpZiAoZG9jID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB2YXIgYm9keVdpZHRoID0gd2luZG93LmRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICAgICAgdmFyIGNlbnRlckxlZnQgPSBNYXRoLm1heCgwLCBib2R5V2lkdGggLyAyIC0gY2FsZW5kYXJXaWR0aCAvIDIpO1xuICAgICAgICAgICAgICAgIHZhciBjZW50ZXJCZWZvcmUgPSBcIi5mbGF0cGlja3ItY2FsZW5kYXIuY2VudGVyTW9zdDpiZWZvcmVcIjtcbiAgICAgICAgICAgICAgICB2YXIgY2VudGVyQWZ0ZXIgPSBcIi5mbGF0cGlja3ItY2FsZW5kYXIuY2VudGVyTW9zdDphZnRlclwiO1xuICAgICAgICAgICAgICAgIHZhciBjZW50ZXJJbmRleCA9IGRvYy5jc3NSdWxlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdmFyIGNlbnRlclN0eWxlID0gXCJ7bGVmdDpcIiArIGlucHV0Qm91bmRzLmxlZnQgKyBcInB4O3JpZ2h0OmF1dG87fVwiO1xuICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwicmlnaHRNb3N0XCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcImNlbnRlck1vc3RcIiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgZG9jLmluc2VydFJ1bGUoY2VudGVyQmVmb3JlICsgXCIsXCIgKyBjZW50ZXJBZnRlciArIGNlbnRlclN0eWxlLCBjZW50ZXJJbmRleCk7XG4gICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gY2VudGVyTGVmdCArIFwicHhcIjtcbiAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnN0eWxlLnJpZ2h0ID0gXCJhdXRvXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcmVkcmF3KCkge1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm5vQ2FsZW5kYXIgfHwgc2VsZi5pc01vYmlsZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB1cGRhdGVOYXZpZ2F0aW9uQ3VycmVudE1vbnRoKCk7XG4gICAgICAgICAgICBidWlsZERheXMoKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBmb2N1c0FuZENsb3NlKCkge1xuICAgICAgICAgICAgc2VsZi5faW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKFwiTVNJRVwiKSAhPT0gLTEgfHxcbiAgICAgICAgICAgICAgICBuYXZpZ2F0b3IubXNNYXhUb3VjaFBvaW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgLy8gaGFjayAtIGJ1Z3MgaW4gdGhlIHdheSBJRSBoYW5kbGVzIGZvY3VzIGtlZXBzIHRoZSBjYWxlbmRhciBvcGVuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChzZWxmLmNsb3NlLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZWxlY3REYXRlKGUpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB2YXIgaXNTZWxlY3RhYmxlID0gZnVuY3Rpb24gKGRheSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXkuY2xhc3NMaXN0ICYmXG4gICAgICAgICAgICAgICAgICAgIGRheS5jbGFzc0xpc3QuY29udGFpbnMoXCJmbGF0cGlja3ItZGF5XCIpICYmXG4gICAgICAgICAgICAgICAgICAgICFkYXkuY2xhc3NMaXN0LmNvbnRhaW5zKFwiZmxhdHBpY2tyLWRpc2FibGVkXCIpICYmXG4gICAgICAgICAgICAgICAgICAgICFkYXkuY2xhc3NMaXN0LmNvbnRhaW5zKFwibm90QWxsb3dlZFwiKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgdCA9IGZpbmRQYXJlbnQoZS50YXJnZXQsIGlzU2VsZWN0YWJsZSk7XG4gICAgICAgICAgICBpZiAodCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSB0O1xuICAgICAgICAgICAgdmFyIHNlbGVjdGVkRGF0ZSA9IChzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiA9IG5ldyBEYXRlKHRhcmdldC5kYXRlT2JqLmdldFRpbWUoKSkpO1xuICAgICAgICAgICAgdmFyIHNob3VsZENoYW5nZU1vbnRoID0gKHNlbGVjdGVkRGF0ZS5nZXRNb250aCgpIDwgc2VsZi5jdXJyZW50TW9udGggfHxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZERhdGUuZ2V0TW9udGgoKSA+XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudE1vbnRoICsgc2VsZi5jb25maWcuc2hvd01vbnRocyAtIDEpICYmXG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcubW9kZSAhPT0gXCJyYW5nZVwiO1xuICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVFbGVtID0gdGFyZ2V0O1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1vZGUgPT09IFwic2luZ2xlXCIpXG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzID0gW3NlbGVjdGVkRGF0ZV07XG4gICAgICAgICAgICBlbHNlIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcIm11bHRpcGxlXCIpIHtcbiAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRJbmRleCA9IGlzRGF0ZVNlbGVjdGVkKHNlbGVjdGVkRGF0ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXgpXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcy5zcGxpY2UocGFyc2VJbnQoc2VsZWN0ZWRJbmRleCksIDEpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzLnB1c2goc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHNlbGYuY29uZmlnLm1vZGUgPT09IFwicmFuZ2VcIikge1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY2xlYXIoZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogPSBzZWxlY3RlZERhdGU7XG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzLnB1c2goc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgICAgICAvLyB1bmxlc3Mgc2VsZWN0aW5nIHNhbWUgZGF0ZSB0d2ljZSwgc29ydCBhc2NlbmRpbmdseVxuICAgICAgICAgICAgICAgIGlmIChjb21wYXJlRGF0ZXMoc2VsZWN0ZWREYXRlLCBzZWxmLnNlbGVjdGVkRGF0ZXNbMF0sIHRydWUpICE9PSAwKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS5nZXRUaW1lKCkgLSBiLmdldFRpbWUoKTsgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRIb3Vyc0Zyb21JbnB1dHMoKTtcbiAgICAgICAgICAgIGlmIChzaG91bGRDaGFuZ2VNb250aCkge1xuICAgICAgICAgICAgICAgIHZhciBpc05ld1llYXIgPSBzZWxmLmN1cnJlbnRZZWFyICE9PSBzZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyID0gc2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50TW9udGggPSBzZWxlY3RlZERhdGUuZ2V0TW9udGgoKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOZXdZZWFyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uWWVhckNoYW5nZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgYnVpbGRNb250aFN3aXRjaCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbk1vbnRoQ2hhbmdlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdXBkYXRlTmF2aWdhdGlvbkN1cnJlbnRNb250aCgpO1xuICAgICAgICAgICAgYnVpbGREYXlzKCk7XG4gICAgICAgICAgICB1cGRhdGVWYWx1ZSgpO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmVuYWJsZVRpbWUpXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiAoc2VsZi5zaG93VGltZUlucHV0ID0gdHJ1ZSk7IH0sIDUwKTtcbiAgICAgICAgICAgIC8vIG1haW50YWluIGZvY3VzXG4gICAgICAgICAgICBpZiAoIXNob3VsZENoYW5nZU1vbnRoICYmXG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcubW9kZSAhPT0gXCJyYW5nZVwiICYmXG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcuc2hvd01vbnRocyA9PT0gMSlcbiAgICAgICAgICAgICAgICBmb2N1c09uRGF5RWxlbSh0YXJnZXQpO1xuICAgICAgICAgICAgZWxzZSBpZiAoc2VsZi5zZWxlY3RlZERhdGVFbGVtICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZUVsZW0gJiYgc2VsZi5zZWxlY3RlZERhdGVFbGVtLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5ob3VyRWxlbWVudCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQgIT09IHVuZGVmaW5lZCAmJiBzZWxmLmhvdXJFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuY2xvc2VPblNlbGVjdCkge1xuICAgICAgICAgICAgICAgIHZhciBzaW5nbGUgPSBzZWxmLmNvbmZpZy5tb2RlID09PSBcInNpbmdsZVwiICYmICFzZWxmLmNvbmZpZy5lbmFibGVUaW1lO1xuICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IHNlbGYuY29uZmlnLm1vZGUgPT09IFwicmFuZ2VcIiAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAyICYmXG4gICAgICAgICAgICAgICAgICAgICFzZWxmLmNvbmZpZy5lbmFibGVUaW1lO1xuICAgICAgICAgICAgICAgIGlmIChzaW5nbGUgfHwgcmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNBbmRDbG9zZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyaWdnZXJDaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgQ0FMTEJBQ0tTID0ge1xuICAgICAgICAgICAgbG9jYWxlOiBbc2V0dXBMb2NhbGUsIHVwZGF0ZVdlZWtkYXlzXSxcbiAgICAgICAgICAgIHNob3dNb250aHM6IFtidWlsZE1vbnRocywgc2V0Q2FsZW5kYXJXaWR0aCwgYnVpbGRXZWVrZGF5c10sXG4gICAgICAgICAgICBtaW5EYXRlOiBbanVtcFRvRGF0ZV0sXG4gICAgICAgICAgICBtYXhEYXRlOiBbanVtcFRvRGF0ZV1cbiAgICAgICAgfTtcbiAgICAgICAgZnVuY3Rpb24gc2V0KG9wdGlvbiwgdmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb24gIT09IG51bGwgJiYgdHlwZW9mIG9wdGlvbiA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc2VsZi5jb25maWcsIG9wdGlvbik7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoQ0FMTEJBQ0tTW2tleV0gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIENBTExCQUNLU1trZXldLmZvckVhY2goZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHgoKTsgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWdbb3B0aW9uXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGlmIChDQUxMQkFDS1Nbb3B0aW9uXSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBDQUxMQkFDS1Nbb3B0aW9uXS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4KCk7IH0pO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKEhPT0tTLmluZGV4T2Yob3B0aW9uKSA+IC0xKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ1tvcHRpb25dID0gYXJyYXlpZnkodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5yZWRyYXcoKTtcbiAgICAgICAgICAgIHVwZGF0ZVZhbHVlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRTZWxlY3RlZERhdGUoaW5wdXREYXRlLCBmb3JtYXQpIHtcbiAgICAgICAgICAgIHZhciBkYXRlcyA9IFtdO1xuICAgICAgICAgICAgaWYgKGlucHV0RGF0ZSBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgICAgICAgICAgIGRhdGVzID0gaW5wdXREYXRlLm1hcChmdW5jdGlvbiAoZCkgeyByZXR1cm4gc2VsZi5wYXJzZURhdGUoZCwgZm9ybWF0KTsgfSk7XG4gICAgICAgICAgICBlbHNlIGlmIChpbnB1dERhdGUgaW5zdGFuY2VvZiBEYXRlIHx8IHR5cGVvZiBpbnB1dERhdGUgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgZGF0ZXMgPSBbc2VsZi5wYXJzZURhdGUoaW5wdXREYXRlLCBmb3JtYXQpXTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBpbnB1dERhdGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHNlbGYuY29uZmlnLm1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNpbmdsZVwiOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwidGltZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXMgPSBbc2VsZi5wYXJzZURhdGUoaW5wdXREYXRlLCBmb3JtYXQpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwibXVsdGlwbGVcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVzID0gaW5wdXREYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KHNlbGYuY29uZmlnLmNvbmp1bmN0aW9uKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIHNlbGYucGFyc2VEYXRlKGRhdGUsIGZvcm1hdCk7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJyYW5nZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXMgPSBpbnB1dERhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoc2VsZi5sMTBuLnJhbmdlU2VwYXJhdG9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIHNlbGYucGFyc2VEYXRlKGRhdGUsIGZvcm1hdCk7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcuZXJyb3JIYW5kbGVyKG5ldyBFcnJvcihcIkludmFsaWQgZGF0ZSBzdXBwbGllZDogXCIgKyBKU09OLnN0cmluZ2lmeShpbnB1dERhdGUpKSk7XG4gICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMgPSBkYXRlcy5maWx0ZXIoZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGQgaW5zdGFuY2VvZiBEYXRlICYmIGlzRW5hYmxlZChkLCBmYWxzZSk7IH0pO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1vZGUgPT09IFwicmFuZ2VcIilcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS5nZXRUaW1lKCkgLSBiLmdldFRpbWUoKTsgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0RGF0ZShkYXRlLCB0cmlnZ2VyQ2hhbmdlLCBmb3JtYXQpIHtcbiAgICAgICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlID09PSB2b2lkIDApIHsgdHJpZ2dlckNoYW5nZSA9IGZhbHNlOyB9XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSB2b2lkIDApIHsgZm9ybWF0ID0gc2VsZi5jb25maWcuZGF0ZUZvcm1hdDsgfVxuICAgICAgICAgICAgaWYgKChkYXRlICE9PSAwICYmICFkYXRlKSB8fCAoZGF0ZSBpbnN0YW5jZW9mIEFycmF5ICYmIGRhdGUubGVuZ3RoID09PSAwKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5jbGVhcih0cmlnZ2VyQ2hhbmdlKTtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkRGF0ZShkYXRlLCBmb3JtYXQpO1xuICAgICAgICAgICAgc2VsZi5zaG93VGltZUlucHV0ID0gc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA+IDA7XG4gICAgICAgICAgICBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiA9XG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzW3NlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIHNlbGYucmVkcmF3KCk7XG4gICAgICAgICAgICBqdW1wVG9EYXRlKCk7XG4gICAgICAgICAgICBzZXRIb3Vyc0Zyb21EYXRlKCk7XG4gICAgICAgICAgICBpZiAoc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHNlbGYuY2xlYXIoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdXBkYXRlVmFsdWUodHJpZ2dlckNoYW5nZSk7XG4gICAgICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSlcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbkNoYW5nZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBwYXJzZURhdGVSdWxlcyhhcnIpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnJcbiAgICAgICAgICAgICAgICAuc2xpY2UoKVxuICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJ1bGUgPT09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHJ1bGUgPT09IFwibnVtYmVyXCIgfHxcbiAgICAgICAgICAgICAgICAgICAgcnVsZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYucGFyc2VEYXRlKHJ1bGUsIHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJ1bGUgJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHJ1bGUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICAgICAgICAgcnVsZS5mcm9tICYmXG4gICAgICAgICAgICAgICAgICAgIHJ1bGUudG8pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tOiBzZWxmLnBhcnNlRGF0ZShydWxlLmZyb20sIHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0bzogc2VsZi5wYXJzZURhdGUocnVsZS50bywgdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBydWxlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4OyB9KTsgLy8gcmVtb3ZlIGZhbHN5IHZhbHVlc1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldHVwRGF0ZXMoKSB7XG4gICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMgPSBbXTtcbiAgICAgICAgICAgIHNlbGYubm93ID0gc2VsZi5wYXJzZURhdGUoc2VsZi5jb25maWcubm93KSB8fCBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBJRTExIHNldHRpbmcgcGxhY2Vob2xkZXIgYXMgdGhlIGlucHV0J3MgdmFsdWVcbiAgICAgICAgICAgIHZhciBwcmVsb2FkZWREYXRlID0gc2VsZi5jb25maWcuZGVmYXVsdERhdGUgfHxcbiAgICAgICAgICAgICAgICAoKHNlbGYuaW5wdXQubm9kZU5hbWUgPT09IFwiSU5QVVRcIiB8fFxuICAgICAgICAgICAgICAgICAgICBzZWxmLmlucHV0Lm5vZGVOYW1lID09PSBcIlRFWFRBUkVBXCIpICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQucGxhY2Vob2xkZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5pbnB1dC52YWx1ZSA9PT0gc2VsZi5pbnB1dC5wbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmlucHV0LnZhbHVlKTtcbiAgICAgICAgICAgIGlmIChwcmVsb2FkZWREYXRlKVxuICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkRGF0ZShwcmVsb2FkZWREYXRlLCBzZWxmLmNvbmZpZy5kYXRlRm9ybWF0KTtcbiAgICAgICAgICAgIHNlbGYuX2luaXRpYWxEYXRlID1cbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICA/IHNlbGYuc2VsZWN0ZWREYXRlc1swXVxuICAgICAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLm1pbkRhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0VGltZSgpID4gc2VsZi5ub3cuZ2V0VGltZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLm1pbkRhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcubWF4RGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1heERhdGUuZ2V0VGltZSgpIDwgc2VsZi5ub3cuZ2V0VGltZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5tYXhEYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxmLm5vdztcbiAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXIgPSBzZWxmLl9pbml0aWFsRGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgc2VsZi5jdXJyZW50TW9udGggPSBzZWxmLl9pbml0aWFsRGF0ZS5nZXRNb250aCgpO1xuICAgICAgICAgICAgaWYgKHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgIHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqID0gc2VsZi5zZWxlY3RlZERhdGVzWzBdO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1pblRpbWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5taW5UaW1lID0gc2VsZi5wYXJzZURhdGUoc2VsZi5jb25maWcubWluVGltZSwgXCJIOmlcIik7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubWF4VGltZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1heFRpbWUgPSBzZWxmLnBhcnNlRGF0ZShzZWxmLmNvbmZpZy5tYXhUaW1lLCBcIkg6aVwiKTtcbiAgICAgICAgICAgIHNlbGYubWluRGF0ZUhhc1RpbWUgPVxuICAgICAgICAgICAgICAgICEhc2VsZi5jb25maWcubWluRGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICAoc2VsZi5jb25maWcubWluRGF0ZS5nZXRIb3VycygpID4gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcubWluRGF0ZS5nZXRNaW51dGVzKCkgPiAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5taW5EYXRlLmdldFNlY29uZHMoKSA+IDApO1xuICAgICAgICAgICAgc2VsZi5tYXhEYXRlSGFzVGltZSA9XG4gICAgICAgICAgICAgICAgISFzZWxmLmNvbmZpZy5tYXhEYXRlICYmXG4gICAgICAgICAgICAgICAgICAgIChzZWxmLmNvbmZpZy5tYXhEYXRlLmdldEhvdXJzKCkgPiAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldE1pbnV0ZXMoKSA+IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1heERhdGUuZ2V0U2Vjb25kcygpID4gMCk7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZiwgXCJzaG93VGltZUlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuX3Nob3dUaW1lSW5wdXQ7IH0sXG4gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoYm9vbCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl9zaG93VGltZUlucHV0ID0gYm9vbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuY2FsZW5kYXJDb250YWluZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcInNob3dUaW1lSW5wdXRcIiwgYm9vbCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuaXNPcGVuICYmIHBvc2l0aW9uQ2FsZW5kYXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXR1cElucHV0cygpIHtcbiAgICAgICAgICAgIHNlbGYuaW5wdXQgPSBzZWxmLmNvbmZpZy53cmFwXG4gICAgICAgICAgICAgICAgPyBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbZGF0YS1pbnB1dF1cIilcbiAgICAgICAgICAgICAgICA6IGVsZW1lbnQ7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgaWYgKCFzZWxmLmlucHV0KSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcuZXJyb3JIYW5kbGVyKG5ldyBFcnJvcihcIkludmFsaWQgaW5wdXQgZWxlbWVudCBzcGVjaWZpZWRcIikpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGhhY2s6IHN0b3JlIHByZXZpb3VzIHR5cGUgdG8gcmVzdG9yZSBpdCBhZnRlciBkZXN0cm95KClcbiAgICAgICAgICAgIHNlbGYuaW5wdXQuX3R5cGUgPSBzZWxmLmlucHV0LnR5cGU7XG4gICAgICAgICAgICBzZWxmLmlucHV0LnR5cGUgPSBcInRleHRcIjtcbiAgICAgICAgICAgIHNlbGYuaW5wdXQuY2xhc3NMaXN0LmFkZChcImZsYXRwaWNrci1pbnB1dFwiKTtcbiAgICAgICAgICAgIHNlbGYuX2lucHV0ID0gc2VsZi5pbnB1dDtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5hbHRJbnB1dCkge1xuICAgICAgICAgICAgICAgIC8vIHJlcGxpY2F0ZSBzZWxmLmVsZW1lbnRcbiAgICAgICAgICAgICAgICBzZWxmLmFsdElucHV0ID0gY3JlYXRlRWxlbWVudChzZWxmLmlucHV0Lm5vZGVOYW1lLCBzZWxmLmNvbmZpZy5hbHRJbnB1dENsYXNzKTtcbiAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dCA9IHNlbGYuYWx0SW5wdXQ7XG4gICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC5wbGFjZWhvbGRlciA9IHNlbGYuaW5wdXQucGxhY2Vob2xkZXI7XG4gICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC5kaXNhYmxlZCA9IHNlbGYuaW5wdXQuZGlzYWJsZWQ7XG4gICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC5yZXF1aXJlZCA9IHNlbGYuaW5wdXQucmVxdWlyZWQ7XG4gICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC50YWJJbmRleCA9IHNlbGYuaW5wdXQudGFiSW5kZXg7XG4gICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC50eXBlID0gXCJ0ZXh0XCI7XG4gICAgICAgICAgICAgICAgc2VsZi5pbnB1dC5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwiaGlkZGVuXCIpO1xuICAgICAgICAgICAgICAgIGlmICghc2VsZi5jb25maWcuc3RhdGljICYmIHNlbGYuaW5wdXQucGFyZW50Tm9kZSlcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5pbnB1dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzZWxmLmFsdElucHV0LCBzZWxmLmlucHV0Lm5leHRTaWJsaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2VsZi5jb25maWcuYWxsb3dJbnB1dClcbiAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dC5zZXRBdHRyaWJ1dGUoXCJyZWFkb25seVwiLCBcInJlYWRvbmx5XCIpO1xuICAgICAgICAgICAgc2VsZi5fcG9zaXRpb25FbGVtZW50ID0gc2VsZi5jb25maWcucG9zaXRpb25FbGVtZW50IHx8IHNlbGYuX2lucHV0O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldHVwTW9iaWxlKCkge1xuICAgICAgICAgICAgdmFyIGlucHV0VHlwZSA9IHNlbGYuY29uZmlnLmVuYWJsZVRpbWVcbiAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLm5vQ2FsZW5kYXJcbiAgICAgICAgICAgICAgICAgICAgPyBcInRpbWVcIlxuICAgICAgICAgICAgICAgICAgICA6IFwiZGF0ZXRpbWUtbG9jYWxcIlxuICAgICAgICAgICAgICAgIDogXCJkYXRlXCI7XG4gICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0ID0gY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHNlbGYuaW5wdXQuY2xhc3NOYW1lICsgXCIgZmxhdHBpY2tyLW1vYmlsZVwiKTtcbiAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQuc3RlcCA9IHNlbGYuaW5wdXQuZ2V0QXR0cmlidXRlKFwic3RlcFwiKSB8fCBcImFueVwiO1xuICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC50YWJJbmRleCA9IDE7XG4gICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LnR5cGUgPSBpbnB1dFR5cGU7XG4gICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LmRpc2FibGVkID0gc2VsZi5pbnB1dC5kaXNhYmxlZDtcbiAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQucmVxdWlyZWQgPSBzZWxmLmlucHV0LnJlcXVpcmVkO1xuICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC5wbGFjZWhvbGRlciA9IHNlbGYuaW5wdXQucGxhY2Vob2xkZXI7XG4gICAgICAgICAgICBzZWxmLm1vYmlsZUZvcm1hdFN0ciA9XG4gICAgICAgICAgICAgICAgaW5wdXRUeXBlID09PSBcImRhdGV0aW1lLWxvY2FsXCJcbiAgICAgICAgICAgICAgICAgICAgPyBcIlktbS1kXFxcXFRIOmk6U1wiXG4gICAgICAgICAgICAgICAgICAgIDogaW5wdXRUeXBlID09PSBcImRhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyBcIlktbS1kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJIOmk6U1wiO1xuICAgICAgICAgICAgaWYgKHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC5kZWZhdWx0VmFsdWUgPSBzZWxmLm1vYmlsZUlucHV0LnZhbHVlID0gc2VsZi5mb3JtYXREYXRlKHNlbGYuc2VsZWN0ZWREYXRlc1swXSwgc2VsZi5tb2JpbGVGb3JtYXRTdHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1pbkRhdGUpXG4gICAgICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC5taW4gPSBzZWxmLmZvcm1hdERhdGUoc2VsZi5jb25maWcubWluRGF0ZSwgXCJZLW0tZFwiKTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tYXhEYXRlKVxuICAgICAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQubWF4ID0gc2VsZi5mb3JtYXREYXRlKHNlbGYuY29uZmlnLm1heERhdGUsIFwiWS1tLWRcIik7XG4gICAgICAgICAgICBzZWxmLmlucHV0LnR5cGUgPSBcImhpZGRlblwiO1xuICAgICAgICAgICAgaWYgKHNlbGYuYWx0SW5wdXQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBzZWxmLmFsdElucHV0LnR5cGUgPSBcImhpZGRlblwiO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5pbnB1dC5wYXJlbnROb2RlKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmlucHV0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHNlbGYubW9iaWxlSW5wdXQsIHNlbGYuaW5wdXQubmV4dFNpYmxpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9hKSB7IH1cbiAgICAgICAgICAgIGJpbmQoc2VsZi5tb2JpbGVJbnB1dCwgXCJjaGFuZ2VcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnNldERhdGUoZS50YXJnZXQudmFsdWUsIGZhbHNlLCBzZWxmLm1vYmlsZUZvcm1hdFN0cik7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25DaGFuZ2VcIik7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25DbG9zZVwiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHRvZ2dsZShlKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5pc09wZW4gPT09IHRydWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2xvc2UoKTtcbiAgICAgICAgICAgIHNlbGYub3BlbihlKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0cmlnZ2VyRXZlbnQoZXZlbnQsIGRhdGEpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBpbnN0YW5jZSBoYXMgYmVlbiBkZXN0cm95ZWQgYWxyZWFkeSwgYWxsIGhvb2tzIGhhdmUgYmVlbiByZW1vdmVkXG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgaG9va3MgPSBzZWxmLmNvbmZpZ1tldmVudF07XG4gICAgICAgICAgICBpZiAoaG9va3MgIT09IHVuZGVmaW5lZCAmJiBob29rcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGhvb2tzW2ldICYmIGkgPCBob29rcy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICAgICAgaG9va3NbaV0oc2VsZi5zZWxlY3RlZERhdGVzLCBzZWxmLmlucHV0LnZhbHVlLCBzZWxmLCBkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChldmVudCA9PT0gXCJvbkNoYW5nZVwiKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5pbnB1dC5kaXNwYXRjaEV2ZW50KGNyZWF0ZUV2ZW50KFwiY2hhbmdlXCIpKTtcbiAgICAgICAgICAgICAgICAvLyBtYW55IGZyb250LWVuZCBmcmFtZXdvcmtzIGJpbmQgdG8gdGhlIGlucHV0IGV2ZW50XG4gICAgICAgICAgICAgICAgc2VsZi5pbnB1dC5kaXNwYXRjaEV2ZW50KGNyZWF0ZUV2ZW50KFwiaW5wdXRcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZUV2ZW50KG5hbWUpIHtcbiAgICAgICAgICAgIHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJFdmVudFwiKTtcbiAgICAgICAgICAgIGUuaW5pdEV2ZW50KG5hbWUsIHRydWUsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNEYXRlU2VsZWN0ZWQoZGF0ZSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoY29tcGFyZURhdGVzKHNlbGYuc2VsZWN0ZWREYXRlc1tpXSwgZGF0ZSkgPT09IDApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIlwiICsgaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpc0RhdGVJblJhbmdlKGRhdGUpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlICE9PSBcInJhbmdlXCIgfHwgc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA8IDIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIChjb21wYXJlRGF0ZXMoZGF0ZSwgc2VsZi5zZWxlY3RlZERhdGVzWzBdKSA+PSAwICYmXG4gICAgICAgICAgICAgICAgY29tcGFyZURhdGVzKGRhdGUsIHNlbGYuc2VsZWN0ZWREYXRlc1sxXSkgPD0gMCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlTmF2aWdhdGlvbkN1cnJlbnRNb250aCgpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5ub0NhbGVuZGFyIHx8IHNlbGYuaXNNb2JpbGUgfHwgIXNlbGYubW9udGhOYXYpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgc2VsZi55ZWFyRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAoeWVhckVsZW1lbnQsIGkpIHtcbiAgICAgICAgICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKHNlbGYuY3VycmVudFllYXIsIHNlbGYuY3VycmVudE1vbnRoLCAxKTtcbiAgICAgICAgICAgICAgICBkLnNldE1vbnRoKHNlbGYuY3VycmVudE1vbnRoICsgaSk7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLnNob3dNb250aHMgPiAxIHx8XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1vbnRoU2VsZWN0b3JUeXBlID09PSBcInN0YXRpY1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubW9udGhFbGVtZW50c1tpXS50ZXh0Q29udGVudCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBtb250aFRvU3RyKGQuZ2V0TW9udGgoKSwgc2VsZi5jb25maWcuc2hvcnRoYW5kQ3VycmVudE1vbnRoLCBzZWxmLmwxMG4pICsgXCIgXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLm1vbnRoc0Ryb3Bkb3duQ29udGFpbmVyLnZhbHVlID0gZC5nZXRNb250aCgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHllYXJFbGVtZW50LnZhbHVlID0gZC5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNlbGYuX2hpZGVQcmV2TW9udGhBcnJvdyA9XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcubWluRGF0ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIChzZWxmLmN1cnJlbnRZZWFyID09PSBzZWxmLmNvbmZpZy5taW5EYXRlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi5jdXJyZW50TW9udGggPD0gc2VsZi5jb25maWcubWluRGF0ZS5nZXRNb250aCgpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHNlbGYuY3VycmVudFllYXIgPCBzZWxmLmNvbmZpZy5taW5EYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgc2VsZi5faGlkZU5leHRNb250aEFycm93ID1cbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5tYXhEYXRlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgKHNlbGYuY3VycmVudFllYXIgPT09IHNlbGYuY29uZmlnLm1heERhdGUuZ2V0RnVsbFllYXIoKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmN1cnJlbnRNb250aCArIDEgPiBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldE1vbnRoKClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogc2VsZi5jdXJyZW50WWVhciA+IHNlbGYuY29uZmlnLm1heERhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZ2V0RGF0ZVN0cihmb3JtYXQpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLnNlbGVjdGVkRGF0ZXNcbiAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChkT2JqKSB7IHJldHVybiBzZWxmLmZvcm1hdERhdGUoZE9iaiwgZm9ybWF0KTsgfSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChkLCBpLCBhcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5jb25maWcubW9kZSAhPT0gXCJyYW5nZVwiIHx8XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmVuYWJsZVRpbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgYXJyLmluZGV4T2YoZCkgPT09IGk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5qb2luKHNlbGYuY29uZmlnLm1vZGUgIT09IFwicmFuZ2VcIlxuICAgICAgICAgICAgICAgID8gc2VsZi5jb25maWcuY29uanVuY3Rpb25cbiAgICAgICAgICAgICAgICA6IHNlbGYubDEwbi5yYW5nZVNlcGFyYXRvcik7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVwZGF0ZXMgdGhlIHZhbHVlcyBvZiBpbnB1dHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjYWxlbmRhclxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlVmFsdWUodHJpZ2dlckNoYW5nZSkge1xuICAgICAgICAgICAgaWYgKHRyaWdnZXJDaGFuZ2UgPT09IHZvaWQgMCkgeyB0cmlnZ2VyQ2hhbmdlID0gdHJ1ZTsgfVxuICAgICAgICAgICAgaWYgKHNlbGYubW9iaWxlSW5wdXQgIT09IHVuZGVmaW5lZCAmJiBzZWxmLm1vYmlsZUZvcm1hdFN0cikge1xuICAgICAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQudmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGYuZm9ybWF0RGF0ZShzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiwgc2VsZi5tb2JpbGVGb3JtYXRTdHIpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLmlucHV0LnZhbHVlID0gZ2V0RGF0ZVN0cihzZWxmLmNvbmZpZy5kYXRlRm9ybWF0KTtcbiAgICAgICAgICAgIGlmIChzZWxmLmFsdElucHV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmFsdElucHV0LnZhbHVlID0gZ2V0RGF0ZVN0cihzZWxmLmNvbmZpZy5hbHRGb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRyaWdnZXJDaGFuZ2UgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uVmFsdWVVcGRhdGVcIik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gb25Nb250aE5hdkNsaWNrKGUpIHtcbiAgICAgICAgICAgIHZhciBpc1ByZXZNb250aCA9IHNlbGYucHJldk1vbnRoTmF2LmNvbnRhaW5zKGUudGFyZ2V0KTtcbiAgICAgICAgICAgIHZhciBpc05leHRNb250aCA9IHNlbGYubmV4dE1vbnRoTmF2LmNvbnRhaW5zKGUudGFyZ2V0KTtcbiAgICAgICAgICAgIGlmIChpc1ByZXZNb250aCB8fCBpc05leHRNb250aCkge1xuICAgICAgICAgICAgICAgIGNoYW5nZU1vbnRoKGlzUHJldk1vbnRoID8gLTEgOiAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHNlbGYueWVhckVsZW1lbnRzLmluZGV4T2YoZS50YXJnZXQpID49IDApIHtcbiAgICAgICAgICAgICAgICBlLnRhcmdldC5zZWxlY3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcImFycm93VXBcIikpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNoYW5nZVllYXIoc2VsZi5jdXJyZW50WWVhciArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZS50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYXJyb3dEb3duXCIpKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jaGFuZ2VZZWFyKHNlbGYuY3VycmVudFllYXIgLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0aW1lV3JhcHBlcihlKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB2YXIgaXNLZXlEb3duID0gZS50eXBlID09PSBcImtleWRvd25cIiwgaW5wdXQgPSBlLnRhcmdldDtcbiAgICAgICAgICAgIGlmIChzZWxmLmFtUE0gIT09IHVuZGVmaW5lZCAmJiBlLnRhcmdldCA9PT0gc2VsZi5hbVBNKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5hbVBNLnRleHRDb250ZW50ID1cbiAgICAgICAgICAgICAgICAgICAgc2VsZi5sMTBuLmFtUE1baW50KHNlbGYuYW1QTS50ZXh0Q29udGVudCA9PT0gc2VsZi5sMTBuLmFtUE1bMF0pXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBtaW4gPSBwYXJzZUZsb2F0KGlucHV0LmdldEF0dHJpYnV0ZShcIm1pblwiKSksIG1heCA9IHBhcnNlRmxvYXQoaW5wdXQuZ2V0QXR0cmlidXRlKFwibWF4XCIpKSwgc3RlcCA9IHBhcnNlRmxvYXQoaW5wdXQuZ2V0QXR0cmlidXRlKFwic3RlcFwiKSksIGN1clZhbHVlID0gcGFyc2VJbnQoaW5wdXQudmFsdWUsIDEwKSwgZGVsdGEgPSBlLmRlbHRhIHx8XG4gICAgICAgICAgICAgICAgKGlzS2V5RG93biA/IChlLndoaWNoID09PSAzOCA/IDEgOiAtMSkgOiAwKTtcbiAgICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IGN1clZhbHVlICsgc3RlcCAqIGRlbHRhO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dC52YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpbnB1dC52YWx1ZS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICB2YXIgaXNIb3VyRWxlbSA9IGlucHV0ID09PSBzZWxmLmhvdXJFbGVtZW50LCBpc01pbnV0ZUVsZW0gPSBpbnB1dCA9PT0gc2VsZi5taW51dGVFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChuZXdWYWx1ZSA8IG1pbikge1xuICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXggK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQoIWlzSG91ckVsZW0pICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KGlzSG91ckVsZW0pICYmIGludCghc2VsZi5hbVBNKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc01pbnV0ZUVsZW0pXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnROdW1JbnB1dCh1bmRlZmluZWQsIC0xLCBzZWxmLmhvdXJFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobmV3VmFsdWUgPiBtYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgPT09IHNlbGYuaG91ckVsZW1lbnQgPyBuZXdWYWx1ZSAtIG1heCAtIGludCghc2VsZi5hbVBNKSA6IG1pbjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWludXRlRWxlbSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudE51bUlucHV0KHVuZGVmaW5lZCwgMSwgc2VsZi5ob3VyRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmFtUE0gJiZcbiAgICAgICAgICAgICAgICAgICAgaXNIb3VyRWxlbSAmJlxuICAgICAgICAgICAgICAgICAgICAoc3RlcCA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXdWYWx1ZSArIGN1clZhbHVlID09PSAyM1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBNYXRoLmFicyhuZXdWYWx1ZSAtIGN1clZhbHVlKSA+IHN0ZXApKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuYW1QTS50ZXh0Q29udGVudCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmwxMG4uYW1QTVtpbnQoc2VsZi5hbVBNLnRleHRDb250ZW50ID09PSBzZWxmLmwxMG4uYW1QTVswXSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IHBhZChuZXdWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaW5pdCgpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBmdW5jdGlvbiBfZmxhdHBpY2tyKG5vZGVMaXN0LCBjb25maWcpIHtcbiAgICAgICAgLy8gc3RhdGljIGxpc3RcbiAgICAgICAgdmFyIG5vZGVzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlXG4gICAgICAgICAgICAuY2FsbChub2RlTGlzdClcbiAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudDsgfSk7XG4gICAgICAgIHZhciBpbnN0YW5jZXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuZ2V0QXR0cmlidXRlKFwiZGF0YS1mcC1vbWl0XCIpICE9PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5fZmxhdHBpY2tyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5fZmxhdHBpY2tyLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5fZmxhdHBpY2tyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBub2RlLl9mbGF0cGlja3IgPSBGbGF0cGlja3JJbnN0YW5jZShub2RlLCBjb25maWcgfHwge30pO1xuICAgICAgICAgICAgICAgIGluc3RhbmNlcy5wdXNoKG5vZGUuX2ZsYXRwaWNrcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlcy5sZW5ndGggPT09IDEgPyBpbnN0YW5jZXNbMF0gOiBpbnN0YW5jZXM7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBIVE1MRWxlbWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICB0eXBlb2YgSFRNTENvbGxlY3Rpb24gIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgdHlwZW9mIE5vZGVMaXN0ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIC8vIGJyb3dzZXIgZW52XG4gICAgICAgIEhUTUxDb2xsZWN0aW9uLnByb3RvdHlwZS5mbGF0cGlja3IgPSBOb2RlTGlzdC5wcm90b3R5cGUuZmxhdHBpY2tyID0gZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICAgICAgcmV0dXJuIF9mbGF0cGlja3IodGhpcywgY29uZmlnKTtcbiAgICAgICAgfTtcbiAgICAgICAgSFRNTEVsZW1lbnQucHJvdG90eXBlLmZsYXRwaWNrciA9IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgICAgIHJldHVybiBfZmxhdHBpY2tyKFt0aGlzXSwgY29uZmlnKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICB2YXIgZmxhdHBpY2tyID0gZnVuY3Rpb24gKHNlbGVjdG9yLCBjb25maWcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIF9mbGF0cGlja3Iod2luZG93LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpLCBjb25maWcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlbGVjdG9yIGluc3RhbmNlb2YgTm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIF9mbGF0cGlja3IoW3NlbGVjdG9yXSwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBfZmxhdHBpY2tyKHNlbGVjdG9yLCBjb25maWcpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGZsYXRwaWNrci5kZWZhdWx0Q29uZmlnID0ge307XG4gICAgZmxhdHBpY2tyLmwxMG5zID0ge1xuICAgICAgICBlbjogX19hc3NpZ24oe30sIGVuZ2xpc2gpLFxuICAgICAgICBcImRlZmF1bHRcIjogX19hc3NpZ24oe30sIGVuZ2xpc2gpXG4gICAgfTtcbiAgICBmbGF0cGlja3IubG9jYWxpemUgPSBmdW5jdGlvbiAobDEwbikge1xuICAgICAgICBmbGF0cGlja3IubDEwbnNbXCJkZWZhdWx0XCJdID0gX19hc3NpZ24oe30sIGZsYXRwaWNrci5sMTBuc1tcImRlZmF1bHRcIl0sIGwxMG4pO1xuICAgIH07XG4gICAgZmxhdHBpY2tyLnNldERlZmF1bHRzID0gZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICBmbGF0cGlja3IuZGVmYXVsdENvbmZpZyA9IF9fYXNzaWduKHt9LCBmbGF0cGlja3IuZGVmYXVsdENvbmZpZywgY29uZmlnKTtcbiAgICB9O1xuICAgIGZsYXRwaWNrci5wYXJzZURhdGUgPSBjcmVhdGVEYXRlUGFyc2VyKHt9KTtcbiAgICBmbGF0cGlja3IuZm9ybWF0RGF0ZSA9IGNyZWF0ZURhdGVGb3JtYXR0ZXIoe30pO1xuICAgIGZsYXRwaWNrci5jb21wYXJlRGF0ZXMgPSBjb21wYXJlRGF0ZXM7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGpRdWVyeSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgalF1ZXJ5LmZuICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGpRdWVyeS5mbi5mbGF0cGlja3IgPSBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgICAgICByZXR1cm4gX2ZsYXRwaWNrcih0aGlzLCBjb25maWcpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2NhbWVsY2FzZVxuICAgIERhdGUucHJvdG90eXBlLmZwX2luY3IgPSBmdW5jdGlvbiAoZGF5cykge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUodGhpcy5nZXRGdWxsWWVhcigpLCB0aGlzLmdldE1vbnRoKCksIHRoaXMuZ2V0RGF0ZSgpICsgKHR5cGVvZiBkYXlzID09PSBcInN0cmluZ1wiID8gcGFyc2VJbnQoZGF5cywgMTApIDogZGF5cykpO1xuICAgIH07XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgd2luZG93LmZsYXRwaWNrciA9IGZsYXRwaWNrcjtcbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdHBpY2tyO1xuXG59KSk7XG4iLCJpZighZ2xvYmFsW1wiQmFzaXNcIl0pIGdsb2JhbFtcIkJhc2lzXCJdID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbFtcIkJhc2lzXCJdW1wiQWdHcmlkQ29tcG9uZW50c1wiXSA9IHJlcXVpcmUoXCItIUQ6XFxcXEdpdGh1YlxcXFxCQmpHcmlkRXhXaWRnZXRcXFxcY2xpZW50XFxcXG5vZGVfbW9kdWxlc1xcXFxiYWJlbC1sb2FkZXJcXFxcbGliXFxcXGluZGV4LmpzPz9yZWYtLTQhLlxcXFxiYXNpcy1hZ2dyaWQtY29tcG9uZW50cy5qc1wiKTsiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA0Mik7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgYjcwZjhkNWYwNmM5ZWE2YjJlOGYiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgQ29tcG9uZW50IGZyb20gJy4vQ29tcG9uZW50J1xuXG5leHBvcnQgZGVmYXVsdCBDb21wb25lbnRcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9Db21wb25lbnQvaW5kZXguanMiLCJpbXBvcnQgeyBkZWNvcmF0ZSwgY3JlYXRlRGVmYXVsdFNldHRlcixcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycywgZ2V0T3duS2V5cywgYmluZCB9IGZyb20gJy4vcHJpdmF0ZS91dGlscyc7XG5jb25zdCB7IGRlZmluZVByb3BlcnR5LCBnZXRQcm90b3R5cGVPZiB9ID0gT2JqZWN0O1xuXG5sZXQgbWFwU3RvcmU7XG5cbmZ1bmN0aW9uIGdldEJvdW5kU3VwZXIob2JqLCBmbikge1xuICBpZiAodHlwZW9mIFdlYWtNYXAgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFVzaW5nIEBhdXRvYmluZCBvbiAke2ZuLm5hbWV9KCkgcmVxdWlyZXMgV2Vha01hcCBzdXBwb3J0IGR1ZSB0byBpdHMgdXNlIG9mIHN1cGVyLiR7Zm4ubmFtZX0oKVxuICAgICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qYXlwaGVscHMvY29yZS1kZWNvcmF0b3JzLmpzL2lzc3Vlcy8yMGBcbiAgICApO1xuICB9XG5cbiAgaWYgKCFtYXBTdG9yZSkge1xuICAgICBtYXBTdG9yZSA9IG5ldyBXZWFrTWFwKCk7XG4gIH1cblxuICBpZiAobWFwU3RvcmUuaGFzKG9iaikgPT09IGZhbHNlKSB7XG4gICAgbWFwU3RvcmUuc2V0KG9iaiwgbmV3IFdlYWtNYXAoKSk7XG4gIH1cblxuICBjb25zdCBzdXBlclN0b3JlID0gbWFwU3RvcmUuZ2V0KG9iaik7XG5cbiAgaWYgKHN1cGVyU3RvcmUuaGFzKGZuKSA9PT0gZmFsc2UpIHtcbiAgICBzdXBlclN0b3JlLnNldChmbiwgYmluZChmbiwgb2JqKSk7XG4gIH1cblxuICByZXR1cm4gc3VwZXJTdG9yZS5nZXQoZm4pO1xufVxuXG5mdW5jdGlvbiBhdXRvYmluZENsYXNzKGtsYXNzKSB7XG4gIGNvbnN0IGRlc2NzID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhrbGFzcy5wcm90b3R5cGUpO1xuICBjb25zdCBrZXlzID0gZ2V0T3duS2V5cyhkZXNjcyk7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgY29uc3QgZGVzYyA9IGRlc2NzW2tleV07XG5cbiAgICBpZiAodHlwZW9mIGRlc2MudmFsdWUgIT09ICdmdW5jdGlvbicgfHwga2V5ID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBkZWZpbmVQcm9wZXJ0eShrbGFzcy5wcm90b3R5cGUsIGtleSwgYXV0b2JpbmRNZXRob2Qoa2xhc3MucHJvdG90eXBlLCBrZXksIGRlc2MpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhdXRvYmluZE1ldGhvZCh0YXJnZXQsIGtleSwgeyB2YWx1ZTogZm4sIGNvbmZpZ3VyYWJsZSwgZW51bWVyYWJsZSB9KSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYEBhdXRvYmluZCBjYW4gb25seSBiZSB1c2VkIG9uIGZ1bmN0aW9ucywgbm90OiAke2ZufWApO1xuICB9XG5cbiAgY29uc3QgeyBjb25zdHJ1Y3RvciB9ID0gdGFyZ2V0O1xuXG4gIHJldHVybiB7XG4gICAgY29uZmlndXJhYmxlLFxuICAgIGVudW1lcmFibGUsXG5cbiAgICBnZXQoKSB7XG4gICAgICAvLyBDbGFzcy5wcm90b3R5cGUua2V5IGxvb2t1cFxuICAgICAgLy8gU29tZW9uZSBhY2Nlc3NlcyB0aGUgcHJvcGVydHkgZGlyZWN0bHkgb24gdGhlIHByb3RvdHlwZSBvbiB3aGljaCBpdCBpc1xuICAgICAgLy8gYWN0dWFsbHkgZGVmaW5lZCBvbiwgaS5lLiBDbGFzcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoa2V5KVxuICAgICAgaWYgKHRoaXMgPT09IHRhcmdldCkge1xuICAgICAgICByZXR1cm4gZm47XG4gICAgICB9XG5cbiAgICAgIC8vIENsYXNzLnByb3RvdHlwZS5rZXkgbG9va3VwXG4gICAgICAvLyBTb21lb25lIGFjY2Vzc2VzIHRoZSBwcm9wZXJ0eSBkaXJlY3RseSBvbiBhIHByb3RvdHlwZSBidXQgaXQgd2FzIGZvdW5kXG4gICAgICAvLyB1cCB0aGUgY2hhaW4sIG5vdCBkZWZpbmVkIGRpcmVjdGx5IG9uIGl0XG4gICAgICAvLyBpLmUuIENsYXNzLnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShrZXkpID09IGZhbHNlICYmIGtleSBpbiBDbGFzcy5wcm90b3R5cGVcbiAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yICE9PSBjb25zdHJ1Y3RvciAmJiBnZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvciA9PT0gY29uc3RydWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgfVxuXG4gICAgICAvLyBBdXRvYm91bmQgbWV0aG9kIGNhbGxpbmcgc3VwZXIuc2FtZU1ldGhvZCgpIHdoaWNoIGlzIGFsc28gYXV0b2JvdW5kIGFuZCBzbyBvbi5cbiAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yICE9PSBjb25zdHJ1Y3RvciAmJiBrZXkgaW4gdGhpcy5jb25zdHJ1Y3Rvci5wcm90b3R5cGUpIHtcbiAgICAgICAgcmV0dXJuIGdldEJvdW5kU3VwZXIodGhpcywgZm4pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBib3VuZEZuID0gYmluZChmbiwgdGhpcyk7XG5cbiAgICAgIGRlZmluZVByb3BlcnR5KHRoaXMsIGtleSwge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAvLyBOT1QgZW51bWVyYWJsZSB3aGVuIGl0J3MgYSBib3VuZCBtZXRob2RcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHZhbHVlOiBib3VuZEZuXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGJvdW5kRm47XG4gICAgfSxcbiAgICBzZXQ6IGNyZWF0ZURlZmF1bHRTZXR0ZXIoa2V5KVxuICB9O1xufVxuXG5mdW5jdGlvbiBoYW5kbGUoYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gYXV0b2JpbmRDbGFzcyguLi5hcmdzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYXV0b2JpbmRNZXRob2QoLi4uYXJncyk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYXV0b2JpbmQoLi4uYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGhhbmRsZShhcmd1bWVudHMpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGhhbmRsZShhcmdzKTtcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtZGVjb3JhdG9ycy9zcmMvYXV0b2JpbmQuanMiLCJpbXBvcnQgeyBkZWNvcmF0ZSB9IGZyb20gJy4vcHJpdmF0ZS91dGlscyc7XG5cbmNvbnN0IEdFTkVSSUNfRlVOQ1RJT05fRVJST1IgPSAne2NoaWxkfSBkb2VzIG5vdCBwcm9wZXJseSBvdmVycmlkZSB7cGFyZW50fSc7XG5jb25zdCBGVU5DVElPTl9SRUdFWFAgPSAvXmZ1bmN0aW9uIChbXyRhLXpBLVpcXHhBMC1cXHVGRkZGXVtfJGEtekEtWjAtOVxceEEwLVxcdUZGRkZdKik/KFxcKFteXFwpXSpcXCkpW1xcc1xcU10rJC87XG5cbmNsYXNzIFN5bnRheEVycm9yUmVwb3J0ZXIge1xuICBwYXJlbnRLbGFzcztcbiAgY2hpbGRLbGFzcztcbiAgcGFyZW50RGVzY3JpcHRvcjtcbiAgY2hpbGREZXNjcmlwdG9yO1xuICBcbiAgZ2V0IGtleSgpIHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZERlc2NyaXB0b3Iua2V5OyAgXG4gIH1cbiAgXG4gIGdldCBwYXJlbnROb3RhdGlvbigpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5wYXJlbnRLbGFzcy5jb25zdHJ1Y3Rvci5uYW1lfSMke3RoaXMucGFyZW50UHJvcGVydHlTaWduYXR1cmV9YDtcbiAgfVxuXG4gIGdldCBjaGlsZE5vdGF0aW9uKCkge1xuICAgIHJldHVybiBgJHt0aGlzLmNoaWxkS2xhc3MuY29uc3RydWN0b3IubmFtZX0jJHt0aGlzLmNoaWxkUHJvcGVydHlTaWduYXR1cmV9YDtcbiAgfVxuICBcbiAgZ2V0IHBhcmVudFRvcGljKCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRUb3BpYyh0aGlzLnBhcmVudERlc2NyaXB0b3IpO1xuICB9XG4gIFxuICBnZXQgY2hpbGRUb3BpYygpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0VG9waWModGhpcy5jaGlsZERlc2NyaXB0b3IpO1xuICB9XG4gIFxuICBfZ2V0VG9waWMoZGVzY3JpcHRvcikge1xuICAgIGlmIChkZXNjcmlwdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsOyAgXG4gICAgfVxuICAgIFxuICAgIGlmICgndmFsdWUnIGluIGRlc2NyaXB0b3IpIHtcbiAgICAgIHJldHVybiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH1cbiAgICBcbiAgICBpZiAoJ2dldCcgaW4gZGVzY3JpcHRvcikge1xuICAgICAgcmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuICAgIH1cbiAgICBcbiAgICBpZiAoJ3NldCcgaW4gZGVzY3JpcHRvcikge1xuICAgICAgcmV0dXJuIGRlc2NyaXB0b3Iuc2V0O1xuICAgIH1cbiAgfVxuICBcbiAgZ2V0IHBhcmVudFByb3BlcnR5U2lnbmF0dXJlKCkge1xuICAgIHJldHVybiB0aGlzLl9leHRyYWN0VG9waWNTaWduYXR1cmUodGhpcy5wYXJlbnRUb3BpYyk7IFxuICB9XG4gIFxuICBnZXQgY2hpbGRQcm9wZXJ0eVNpZ25hdHVyZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZXh0cmFjdFRvcGljU2lnbmF0dXJlKHRoaXMuY2hpbGRUb3BpYyk7IFxuICB9XG4gIFxuICBfZXh0cmFjdFRvcGljU2lnbmF0dXJlKHRvcGljKSB7XG4gICAgc3dpdGNoICh0eXBlb2YgdG9waWMpIHtcbiAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dHJhY3RGdW5jdGlvblNpZ25hdHVyZSh0b3BpYyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5rZXk7XG4gICAgfVxuICB9XG4gIFxuICBfZXh0cmFjdEZ1bmN0aW9uU2lnbmF0dXJlKGZuKSB7XG4gICAgcmV0dXJuIGZuXG4gICAgICAudG9TdHJpbmcoKVxuICAgICAgLnJlcGxhY2UoXG4gICAgICAgIEZVTkNUSU9OX1JFR0VYUCxcbiAgICAgICAgKG1hdGNoLCBuYW1lID0gdGhpcy5rZXksIHBhcmFtcykgPT4gbmFtZSArIHBhcmFtc1xuICAgICAgKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHBhcmVudEtsYXNzLCBjaGlsZEtsYXNzLCBwYXJlbnREZXNjcmlwdG9yLCBjaGlsZERlc2NyaXB0b3IpIHtcbiAgICB0aGlzLnBhcmVudEtsYXNzID0gcGFyZW50S2xhc3M7XG4gICAgdGhpcy5jaGlsZEtsYXNzID0gY2hpbGRLbGFzcztcbiAgICB0aGlzLnBhcmVudERlc2NyaXB0b3IgPSBwYXJlbnREZXNjcmlwdG9yO1xuICAgIHRoaXMuY2hpbGREZXNjcmlwdG9yID0gY2hpbGREZXNjcmlwdG9yO1xuICB9XG4gIFxuICBhc3NlcnQoY29uZGl0aW9uLCBtc2cgPSAnJykge1xuICAgIGlmIChjb25kaXRpb24gIT09IHRydWUpIHtcbiAgICAgIHRoaXMuZXJyb3IoR0VORVJJQ19GVU5DVElPTl9FUlJPUiArIG1zZyk7XG4gICAgfVxuICB9XG4gIFxuICBlcnJvcihtc2cpIHtcbiAgICBtc2cgPSBtc2dcbiAgICAgIC8vIFJlcGxhY2UgbGF6aWx5LCBiZWNhdXNlIHRoZXkgYWN0dWFsbHkgbWlnaHQgbm90XG4gICAgICAvLyBiZSBhdmFpbGFibGUgaW4gYWxsIGNhc2VzXG4gICAgICAucmVwbGFjZSgne3BhcmVudH0nLCBtID0+IHRoaXMucGFyZW50Tm90YXRpb24pXG4gICAgICAucmVwbGFjZSgne2NoaWxkfScsIG0gPT4gdGhpcy5jaGlsZE5vdGF0aW9uKTtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IobXNnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREZXNjcmlwdG9yVHlwZShkZXNjcmlwdG9yKSB7XG4gIGlmIChkZXNjcmlwdG9yLmhhc093blByb3BlcnR5KCd2YWx1ZScpKSB7XG4gICAgcmV0dXJuICdkYXRhJztcbiAgfVxuXG4gIGlmIChkZXNjcmlwdG9yLmhhc093blByb3BlcnR5KCdnZXQnKSB8fCBkZXNjcmlwdG9yLmhhc093blByb3BlcnR5KCdzZXQnKSkge1xuICAgIHJldHVybiAnYWNjZXNzb3InO1xuICB9XG5cbiAgLy8gSWYgbm9uZSBvZiB0aGVtIGV4aXN0LCBicm93c2VycyB0cmVhdCBpdCBhc1xuICAvLyBhIGRhdGEgZGVzY3JpcHRvciB3aXRoIGEgdmFsdWUgb2YgYHVuZGVmaW5lZGBcbiAgcmV0dXJuICdkYXRhJztcbn1cblxuZnVuY3Rpb24gY2hlY2tGdW5jdGlvblNpZ25hdHVyZXMocGFyZW50LCBjaGlsZCwgcmVwb3J0ZXIpIHtcbiAgcmVwb3J0ZXIuYXNzZXJ0KHBhcmVudC5sZW5ndGggPT09IGNoaWxkLmxlbmd0aCk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrRGF0YURlc2NyaXB0b3JzKHBhcmVudCwgY2hpbGQsIHJlcG9ydGVyKSB7XG4gIGNvbnN0IHBhcmVudFZhbHVlVHlwZSA9IHR5cGVvZiBwYXJlbnQudmFsdWU7XG4gIGNvbnN0IGNoaWxkVmFsdWVUeXBlID0gdHlwZW9mIGNoaWxkLnZhbHVlO1xuICBcbiAgaWYgKHBhcmVudFZhbHVlVHlwZSA9PT0gJ3VuZGVmaW5lZCcgJiYgY2hpbGRWYWx1ZVR5cGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gY2xhc3MgcHJvcGVydGllcyBjYW4gYmUgYW55IGV4cHJlc3Npb24sIHdoaWNoIGlzbid0IHJhbiB1bnRpbCB0aGVcbiAgICAvLyB0aGUgaW5zdGFuY2UgaXMgY3JlYXRlZCwgc28gd2UgY2FuJ3QgcmVsaWFibHkgZ2V0IHR5cGUgaW5mb3JtYXRpb25cbiAgICAvLyBmb3IgdGhlbSB5ZXQgKHBlciBzcGVjKS4gUGVyaGFwcyB3aGVuIEJhYmVsIGluY2x1ZGVzIGZsb3ctdHlwZSBpbmZvXG4gICAgLy8gaW4gcnVudGltZT8gVHJpZWQgcmVnZXggc29sdXRpb25zLCBidXQgc3VwZXIgaGFja3kgYW5kIG9ubHkgZmVhc2libGVcbiAgICAvLyBvbiBwcmltaXRpdmVzLCB3aGljaCBpcyBjb25mdXNpbmcgZm9yIHVzYWdlLi4uXG4gICAgcmVwb3J0ZXIuZXJyb3IoYGRlc2NyaXB0b3IgdmFsdWVzIGFyZSBib3RoIHVuZGVmaW5lZC4gKGNsYXNzIHByb3BlcnRpZXMgYXJlIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZCknYCk7XG4gIH1cbiAgXG4gIGlmIChwYXJlbnRWYWx1ZVR5cGUgIT09IGNoaWxkVmFsdWVUeXBlKSB7XG4gICAgY29uc3QgaXNGdW5jdGlvbk92ZXJVbmRlZmluZWQgPSAoY2hpbGRWYWx1ZVR5cGUgPT09ICdmdW5jdGlvbicgJiYgcGFyZW50VmFsdWVUeXBlID09PSB1bmRlZmluZWQpO1xuICAgIC8vIEV2ZW4gdGhvdWdoIHdlIGRvbid0IHN1cHBvcnQgY2xhc3MgcHJvcGVydGllcywgdGhpc1xuICAgIC8vIHdpbGwgc3RpbGwgaGFuZGxlIG1vcmUgdGhhbiBqdXN0IGZ1bmN0aW9ucywganVzdCBpbiBjYXNlLlxuICAgIC8vIFNoYWRvd2luZyBhbiB1bmRlZmluZWQgdmFsdWUgaXMgYW4gZXJyb3IgaWYgdGhlIGluaGVyaXRlZFxuICAgIC8vIHZhbHVlIHdhcyB1bmRlZmluZWQgKHVzdWFsbHkgYSBjbGFzcyBwcm9wZXJ0eSwgbm90IGEgbWV0aG9kKVxuICAgIGlmIChpc0Z1bmN0aW9uT3ZlclVuZGVmaW5lZCB8fCBwYXJlbnRWYWx1ZVR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVwb3J0ZXIuZXJyb3IoYHZhbHVlIHR5cGVzIGRvIG5vdCBtYXRjaC4ge3BhcmVudH0gaXMgXCIke3BhcmVudFZhbHVlVHlwZX1cIiwge2NoaWxkfSBpcyBcIiR7Y2hpbGRWYWx1ZVR5cGV9XCJgKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8vIFN3aXRjaCwgaW4gcHJlcGFyYXRpb24gZm9yIHN1cHBvcnRpbmcgbW9yZSB0eXBlc1xuICBzd2l0Y2ggKGNoaWxkVmFsdWVUeXBlKSB7XG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgY2hlY2tGdW5jdGlvblNpZ25hdHVyZXMocGFyZW50LnZhbHVlLCBjaGlsZC52YWx1ZSwgcmVwb3J0ZXIpO1xuICAgICAgYnJlYWs7XG4gICAgICBcbiAgICBkZWZhdWx0OlxuICAgICAgcmVwb3J0ZXIuZXJyb3IoYFVuZXhwZWN0ZWQgZXJyb3IuIFBsZWFzZSBmaWxlIGEgYnVnIHdpdGg6IHtwYXJlbnR9IGlzIFwiJHtwYXJlbnRWYWx1ZVR5cGV9XCIsIHtjaGlsZH0gaXMgXCIke2NoaWxkVmFsdWVUeXBlfVwiYCk7XG4gICAgICBicmVhaztcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0FjY2Vzc29yRGVzY3JpcHRvcnMocGFyZW50LCBjaGlsZCwgcmVwb3J0ZXIpIHtcbiAgY29uc3QgcGFyZW50SGFzR2V0dGVyID0gdHlwZW9mIHBhcmVudC5nZXQgPT09ICdmdW5jdGlvbic7XG4gIGNvbnN0IGNoaWxkSGFzR2V0dGVyID0gdHlwZW9mIGNoaWxkLmdldCA9PT0gJ2Z1bmN0aW9uJztcbiAgY29uc3QgcGFyZW50SGFzU2V0dGVyID0gdHlwZW9mIHBhcmVudC5zZXQgPT09ICdmdW5jdGlvbic7XG4gIGNvbnN0IGNoaWxkSGFzU2V0dGVyID0gdHlwZW9mIGNoaWxkLnNldCA9PT0gJ2Z1bmN0aW9uJztcbiAgXG4gIGlmIChwYXJlbnRIYXNHZXR0ZXIgfHwgY2hpbGRIYXNHZXR0ZXIpIHtcbiAgICBpZiAoIXBhcmVudEhhc0dldHRlciAmJiBwYXJlbnRIYXNTZXR0ZXIpIHtcbiAgICAgIHJlcG9ydGVyLmVycm9yKGB7cGFyZW50fSBpcyBzZXR0ZXIgYnV0IHtjaGlsZH0gaXMgZ2V0dGVyYCk7XG4gICAgfVxuICAgIFxuICAgIGlmICghY2hpbGRIYXNHZXR0ZXIgJiYgY2hpbGRIYXNTZXR0ZXIpIHtcbiAgICAgIHJlcG9ydGVyLmVycm9yKGB7cGFyZW50fSBpcyBnZXR0ZXIgYnV0IHtjaGlsZH0gaXMgc2V0dGVyYCk7XG4gICAgfVxuICAgIFxuICAgIGNoZWNrRnVuY3Rpb25TaWduYXR1cmVzKHBhcmVudC5nZXQsIGNoaWxkLmdldCwgcmVwb3J0ZXIpO1xuICB9XG4gIFxuICBpZiAocGFyZW50SGFzU2V0dGVyIHx8IGNoaWxkSGFzU2V0dGVyKSB7XG4gICAgaWYgKCFwYXJlbnRIYXNTZXR0ZXIgJiYgcGFyZW50SGFzR2V0dGVyKSB7XG4gICAgICByZXBvcnRlci5lcnJvcihge3BhcmVudH0gaXMgZ2V0dGVyIGJ1dCB7Y2hpbGR9IGlzIHNldHRlcmApO1xuICAgIH1cbiAgICBcbiAgICBpZiAoIWNoaWxkSGFzU2V0dGVyICYmIGNoaWxkSGFzR2V0dGVyKSB7XG4gICAgICByZXBvcnRlci5lcnJvcihge3BhcmVudH0gaXMgc2V0dGVyIGJ1dCB7Y2hpbGR9IGlzIGdldHRlcmApO1xuICAgIH1cbiAgICBcbiAgICBjaGVja0Z1bmN0aW9uU2lnbmF0dXJlcyhwYXJlbnQuc2V0LCBjaGlsZC5zZXQsIHJlcG9ydGVyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0Rlc2NyaXB0b3JzKHBhcmVudCwgY2hpbGQsIHJlcG9ydGVyKSB7XG4gIGNvbnN0IHBhcmVudFR5cGUgPSBnZXREZXNjcmlwdG9yVHlwZShwYXJlbnQpO1xuICBjb25zdCBjaGlsZFR5cGUgPSBnZXREZXNjcmlwdG9yVHlwZShjaGlsZCk7XG5cbiAgaWYgKHBhcmVudFR5cGUgIT09IGNoaWxkVHlwZSkge1xuICAgIHJlcG9ydGVyLmVycm9yKGBkZXNjcmlwdG9yIHR5cGVzIGRvIG5vdCBtYXRjaC4ge3BhcmVudH0gaXMgXCIke3BhcmVudFR5cGV9XCIsIHtjaGlsZH0gaXMgXCIke2NoaWxkVHlwZX1cImApO1xuICB9XG5cbiAgc3dpdGNoIChjaGlsZFR5cGUpIHtcbiAgICBjYXNlICdkYXRhJzpcbiAgICAgIGNoZWNrRGF0YURlc2NyaXB0b3JzKHBhcmVudCwgY2hpbGQsIHJlcG9ydGVyKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnYWNjZXNzb3InOlxuICAgICAgY2hlY2tBY2Nlc3NvckRlc2NyaXB0b3JzKHBhcmVudCwgY2hpbGQsIHJlcG9ydGVyKTtcbiAgICAgIGJyZWFrO1xuICB9XG59XG5cbmNvbnN0IHN1Z2dlc3Rpb25UcmFuc2Zvcm1zID0gW1xuICBrZXkgPT4ga2V5LnRvTG93ZXJDYXNlKCksXG4gIGtleSA9PiBrZXkudG9VcHBlckNhc2UoKSxcbiAga2V5ID0+IGtleSArICdzJyxcbiAga2V5ID0+IGtleS5zbGljZSgwLCAtMSksXG4gIGtleSA9PiBrZXkuc2xpY2UoMSwga2V5Lmxlbmd0aCksXG5dO1xuXG5mdW5jdGlvbiBmaW5kUG9zc2libGVBbHRlcm5hdGl2ZXMoc3VwZXJLbGFzcywga2V5KSB7XG4gIGZvciAobGV0IGkgPSAwLCBsID0gc3VnZ2VzdGlvblRyYW5zZm9ybXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgY29uc3QgZm4gPSBzdWdnZXN0aW9uVHJhbnNmb3Jtc1tpXTtcbiAgICBjb25zdCBzdWdnZXN0aW9uID0gZm4oa2V5KTtcblxuICAgIGlmIChzdWdnZXN0aW9uIGluIHN1cGVyS2xhc3MpIHtcbiAgICAgIHJldHVybiBzdWdnZXN0aW9uO1xuICAgIH1cbiAgfVxuICBcbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZURlc2NyaXB0b3IodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpIHtcbiAgZGVzY3JpcHRvci5rZXkgPSBrZXk7XG4gIGNvbnN0IHN1cGVyS2xhc3MgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KTtcbiAgY29uc3Qgc3VwZXJEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzdXBlcktsYXNzLCBrZXkpO1xuICBjb25zdCByZXBvcnRlciA9IG5ldyBTeW50YXhFcnJvclJlcG9ydGVyKHN1cGVyS2xhc3MsIHRhcmdldCwgc3VwZXJEZXNjcmlwdG9yLCBkZXNjcmlwdG9yKTtcbiAgXG4gIGlmIChzdXBlckRlc2NyaXB0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHN1Z2dlc3RlZEtleSA9IGZpbmRQb3NzaWJsZUFsdGVybmF0aXZlcyhzdXBlcktsYXNzLCBrZXkpO1xuICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSBzdWdnZXN0ZWRLZXkgPyBgXFxuXFxuICBEaWQgeW91IG1lYW4gXCIke3N1Z2dlc3RlZEtleX1cIj9gIDogJyc7XG4gICAgcmVwb3J0ZXIuZXJyb3IoYE5vIGRlc2NyaXB0b3IgbWF0Y2hpbmcge2NoaWxkfSB3YXMgZm91bmQgb24gdGhlIHByb3RvdHlwZSBjaGFpbi4ke3N1Z2dlc3Rpb259YCk7XG4gIH1cbiAgXG4gIGNoZWNrRGVzY3JpcHRvcnMoc3VwZXJEZXNjcmlwdG9yLCBkZXNjcmlwdG9yLCByZXBvcnRlcik7XG4gIFxuICByZXR1cm4gZGVzY3JpcHRvcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb3ZlcnJpZGUoLi4uYXJncykge1xuICByZXR1cm4gZGVjb3JhdGUoaGFuZGxlRGVzY3JpcHRvciwgYXJncyk7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1kZWNvcmF0b3JzL3NyYy9vdmVycmlkZS5qcyIsIi8qXG5cdE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG5cdEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG4vLyBjc3MgYmFzZSBjb2RlLCBpbmplY3RlZCBieSB0aGUgY3NzLWxvYWRlclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih1c2VTb3VyY2VNYXApIHtcblx0dmFyIGxpc3QgPSBbXTtcblxuXHQvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG5cdGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcblx0XHRcdHZhciBjb250ZW50ID0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtLCB1c2VTb3VyY2VNYXApO1xuXHRcdFx0aWYoaXRlbVsyXSkge1xuXHRcdFx0XHRyZXR1cm4gXCJAbWVkaWEgXCIgKyBpdGVtWzJdICsgXCJ7XCIgKyBjb250ZW50ICsgXCJ9XCI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gY29udGVudDtcblx0XHRcdH1cblx0XHR9KS5qb2luKFwiXCIpO1xuXHR9O1xuXG5cdC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG5cdGxpc3QuaSA9IGZ1bmN0aW9uKG1vZHVsZXMsIG1lZGlhUXVlcnkpIHtcblx0XHRpZih0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIilcblx0XHRcdG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsIFwiXCJdXTtcblx0XHR2YXIgYWxyZWFkeUltcG9ydGVkTW9kdWxlcyA9IHt9O1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgaWQgPSB0aGlzW2ldWzBdO1xuXHRcdFx0aWYodHlwZW9mIGlkID09PSBcIm51bWJlclwiKVxuXHRcdFx0XHRhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG5cdFx0fVxuXHRcdGZvcihpID0gMDsgaSA8IG1vZHVsZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBpdGVtID0gbW9kdWxlc1tpXTtcblx0XHRcdC8vIHNraXAgYWxyZWFkeSBpbXBvcnRlZCBtb2R1bGVcblx0XHRcdC8vIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgbm90IDEwMCUgcGVyZmVjdCBmb3Igd2VpcmQgbWVkaWEgcXVlcnkgY29tYmluYXRpb25zXG5cdFx0XHQvLyAgd2hlbiBhIG1vZHVsZSBpcyBpbXBvcnRlZCBtdWx0aXBsZSB0aW1lcyB3aXRoIGRpZmZlcmVudCBtZWRpYSBxdWVyaWVzLlxuXHRcdFx0Ly8gIEkgaG9wZSB0aGlzIHdpbGwgbmV2ZXIgb2NjdXIgKEhleSB0aGlzIHdheSB3ZSBoYXZlIHNtYWxsZXIgYnVuZGxlcylcblx0XHRcdGlmKHR5cGVvZiBpdGVtWzBdICE9PSBcIm51bWJlclwiIHx8ICFhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG5cdFx0XHRcdGlmKG1lZGlhUXVlcnkgJiYgIWl0ZW1bMl0pIHtcblx0XHRcdFx0XHRpdGVtWzJdID0gbWVkaWFRdWVyeTtcblx0XHRcdFx0fSBlbHNlIGlmKG1lZGlhUXVlcnkpIHtcblx0XHRcdFx0XHRpdGVtWzJdID0gXCIoXCIgKyBpdGVtWzJdICsgXCIpIGFuZCAoXCIgKyBtZWRpYVF1ZXJ5ICsgXCIpXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0bGlzdC5wdXNoKGl0ZW0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGxpc3Q7XG59O1xuXG5mdW5jdGlvbiBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0sIHVzZVNvdXJjZU1hcCkge1xuXHR2YXIgY29udGVudCA9IGl0ZW1bMV0gfHwgJyc7XG5cdHZhciBjc3NNYXBwaW5nID0gaXRlbVszXTtcblx0aWYgKCFjc3NNYXBwaW5nKSB7XG5cdFx0cmV0dXJuIGNvbnRlbnQ7XG5cdH1cblxuXHRpZiAodXNlU291cmNlTWFwICYmIHR5cGVvZiBidG9hID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIHNvdXJjZU1hcHBpbmcgPSB0b0NvbW1lbnQoY3NzTWFwcGluZyk7XG5cdFx0dmFyIHNvdXJjZVVSTHMgPSBjc3NNYXBwaW5nLnNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0XHRcdHJldHVybiAnLyojIHNvdXJjZVVSTD0nICsgY3NzTWFwcGluZy5zb3VyY2VSb290ICsgc291cmNlICsgJyAqLydcblx0XHR9KTtcblxuXHRcdHJldHVybiBbY29udGVudF0uY29uY2F0KHNvdXJjZVVSTHMpLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oJ1xcbicpO1xuXHR9XG5cblx0cmV0dXJuIFtjb250ZW50XS5qb2luKCdcXG4nKTtcbn1cblxuLy8gQWRhcHRlZCBmcm9tIGNvbnZlcnQtc291cmNlLW1hcCAoTUlUKVxuZnVuY3Rpb24gdG9Db21tZW50KHNvdXJjZU1hcCkge1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcblx0dmFyIGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSk7XG5cdHZhciBkYXRhID0gJ3NvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LCcgKyBiYXNlNjQ7XG5cblx0cmV0dXJuICcvKiMgJyArIGRhdGEgKyAnICovJztcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2xpYi9jc3MtYmFzZS5qcyIsIi8qXG5cdE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG5cdEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG5cbnZhciBzdHlsZXNJbkRvbSA9IHt9O1xuXG52YXJcdG1lbW9pemUgPSBmdW5jdGlvbiAoZm4pIHtcblx0dmFyIG1lbW87XG5cblx0cmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0XHRpZiAodHlwZW9mIG1lbW8gPT09IFwidW5kZWZpbmVkXCIpIG1lbW8gPSBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdHJldHVybiBtZW1vO1xuXHR9O1xufTtcblxudmFyIGlzT2xkSUUgPSBtZW1vaXplKGZ1bmN0aW9uICgpIHtcblx0Ly8gVGVzdCBmb3IgSUUgPD0gOSBhcyBwcm9wb3NlZCBieSBCcm93c2VyaGFja3Ncblx0Ly8gQHNlZSBodHRwOi8vYnJvd3NlcmhhY2tzLmNvbS8jaGFjay1lNzFkODY5MmY2NTMzNDE3M2ZlZTcxNWMyMjJjYjgwNVxuXHQvLyBUZXN0cyBmb3IgZXhpc3RlbmNlIG9mIHN0YW5kYXJkIGdsb2JhbHMgaXMgdG8gYWxsb3cgc3R5bGUtbG9hZGVyXG5cdC8vIHRvIG9wZXJhdGUgY29ycmVjdGx5IGludG8gbm9uLXN0YW5kYXJkIGVudmlyb25tZW50c1xuXHQvLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrLWNvbnRyaWIvc3R5bGUtbG9hZGVyL2lzc3Vlcy8xNzdcblx0cmV0dXJuIHdpbmRvdyAmJiBkb2N1bWVudCAmJiBkb2N1bWVudC5hbGwgJiYgIXdpbmRvdy5hdG9iO1xufSk7XG5cbnZhciBnZXRUYXJnZXQgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7XG59O1xuXG52YXIgZ2V0RWxlbWVudCA9IChmdW5jdGlvbiAoZm4pIHtcblx0dmFyIG1lbW8gPSB7fTtcblxuXHRyZXR1cm4gZnVuY3Rpb24odGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgcGFzc2luZyBmdW5jdGlvbiBpbiBvcHRpb25zLCB0aGVuIHVzZSBpdCBmb3IgcmVzb2x2ZSBcImhlYWRcIiBlbGVtZW50LlxuICAgICAgICAgICAgICAgIC8vIFVzZWZ1bCBmb3IgU2hhZG93IFJvb3Qgc3R5bGUgaS5lXG4gICAgICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgICAgIC8vICAgaW5zZXJ0SW50bzogZnVuY3Rpb24gKCkgeyByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNmb29cIikuc2hhZG93Um9vdCB9XG4gICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVtb1t0YXJnZXRdID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR2YXIgc3R5bGVUYXJnZXQgPSBnZXRUYXJnZXQuY2FsbCh0aGlzLCB0YXJnZXQpO1xuXHRcdFx0Ly8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcblx0XHRcdGlmICh3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQgJiYgc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHQvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuXHRcdFx0XHRcdC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG5cdFx0XHRcdFx0c3R5bGVUYXJnZXQgPSBzdHlsZVRhcmdldC5jb250ZW50RG9jdW1lbnQuaGVhZDtcblx0XHRcdFx0fSBjYXRjaChlKSB7XG5cdFx0XHRcdFx0c3R5bGVUYXJnZXQgPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRtZW1vW3RhcmdldF0gPSBzdHlsZVRhcmdldDtcblx0XHR9XG5cdFx0cmV0dXJuIG1lbW9bdGFyZ2V0XVxuXHR9O1xufSkoKTtcblxudmFyIHNpbmdsZXRvbiA9IG51bGw7XG52YXJcdHNpbmdsZXRvbkNvdW50ZXIgPSAwO1xudmFyXHRzdHlsZXNJbnNlcnRlZEF0VG9wID0gW107XG5cbnZhclx0Zml4VXJscyA9IHJlcXVpcmUoXCIuL3VybHNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obGlzdCwgb3B0aW9ucykge1xuXHRpZiAodHlwZW9mIERFQlVHICE9PSBcInVuZGVmaW5lZFwiICYmIERFQlVHKSB7XG5cdFx0aWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHN0eWxlLWxvYWRlciBjYW5ub3QgYmUgdXNlZCBpbiBhIG5vbi1icm93c2VyIGVudmlyb25tZW50XCIpO1xuXHR9XG5cblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0b3B0aW9ucy5hdHRycyA9IHR5cGVvZiBvcHRpb25zLmF0dHJzID09PSBcIm9iamVjdFwiID8gb3B0aW9ucy5hdHRycyA6IHt9O1xuXG5cdC8vIEZvcmNlIHNpbmdsZS10YWcgc29sdXRpb24gb24gSUU2LTksIHdoaWNoIGhhcyBhIGhhcmQgbGltaXQgb24gdGhlICMgb2YgPHN0eWxlPlxuXHQvLyB0YWdzIGl0IHdpbGwgYWxsb3cgb24gYSBwYWdlXG5cdGlmICghb3B0aW9ucy5zaW5nbGV0b24gJiYgdHlwZW9mIG9wdGlvbnMuc2luZ2xldG9uICE9PSBcImJvb2xlYW5cIikgb3B0aW9ucy5zaW5nbGV0b24gPSBpc09sZElFKCk7XG5cblx0Ly8gQnkgZGVmYXVsdCwgYWRkIDxzdHlsZT4gdGFncyB0byB0aGUgPGhlYWQ+IGVsZW1lbnRcbiAgICAgICAgaWYgKCFvcHRpb25zLmluc2VydEludG8pIG9wdGlvbnMuaW5zZXJ0SW50byA9IFwiaGVhZFwiO1xuXG5cdC8vIEJ5IGRlZmF1bHQsIGFkZCA8c3R5bGU+IHRhZ3MgdG8gdGhlIGJvdHRvbSBvZiB0aGUgdGFyZ2V0XG5cdGlmICghb3B0aW9ucy5pbnNlcnRBdCkgb3B0aW9ucy5pbnNlcnRBdCA9IFwiYm90dG9tXCI7XG5cblx0dmFyIHN0eWxlcyA9IGxpc3RUb1N0eWxlcyhsaXN0LCBvcHRpb25zKTtcblxuXHRhZGRTdHlsZXNUb0RvbShzdHlsZXMsIG9wdGlvbnMpO1xuXG5cdHJldHVybiBmdW5jdGlvbiB1cGRhdGUgKG5ld0xpc3QpIHtcblx0XHR2YXIgbWF5UmVtb3ZlID0gW107XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGl0ZW0gPSBzdHlsZXNbaV07XG5cdFx0XHR2YXIgZG9tU3R5bGUgPSBzdHlsZXNJbkRvbVtpdGVtLmlkXTtcblxuXHRcdFx0ZG9tU3R5bGUucmVmcy0tO1xuXHRcdFx0bWF5UmVtb3ZlLnB1c2goZG9tU3R5bGUpO1xuXHRcdH1cblxuXHRcdGlmKG5ld0xpc3QpIHtcblx0XHRcdHZhciBuZXdTdHlsZXMgPSBsaXN0VG9TdHlsZXMobmV3TGlzdCwgb3B0aW9ucyk7XG5cdFx0XHRhZGRTdHlsZXNUb0RvbShuZXdTdHlsZXMsIG9wdGlvbnMpO1xuXHRcdH1cblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbWF5UmVtb3ZlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgZG9tU3R5bGUgPSBtYXlSZW1vdmVbaV07XG5cblx0XHRcdGlmKGRvbVN0eWxlLnJlZnMgPT09IDApIHtcblx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBkb21TdHlsZS5wYXJ0cy5sZW5ndGg7IGorKykgZG9tU3R5bGUucGFydHNbal0oKTtcblxuXHRcdFx0XHRkZWxldGUgc3R5bGVzSW5Eb21bZG9tU3R5bGUuaWRdO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn07XG5cbmZ1bmN0aW9uIGFkZFN0eWxlc1RvRG9tIChzdHlsZXMsIG9wdGlvbnMpIHtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgaXRlbSA9IHN0eWxlc1tpXTtcblx0XHR2YXIgZG9tU3R5bGUgPSBzdHlsZXNJbkRvbVtpdGVtLmlkXTtcblxuXHRcdGlmKGRvbVN0eWxlKSB7XG5cdFx0XHRkb21TdHlsZS5yZWZzKys7XG5cblx0XHRcdGZvcih2YXIgaiA9IDA7IGogPCBkb21TdHlsZS5wYXJ0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRkb21TdHlsZS5wYXJ0c1tqXShpdGVtLnBhcnRzW2pdKTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yKDsgaiA8IGl0ZW0ucGFydHMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0ZG9tU3R5bGUucGFydHMucHVzaChhZGRTdHlsZShpdGVtLnBhcnRzW2pdLCBvcHRpb25zKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciBwYXJ0cyA9IFtdO1xuXG5cdFx0XHRmb3IodmFyIGogPSAwOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRwYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0sIG9wdGlvbnMpKTtcblx0XHRcdH1cblxuXHRcdFx0c3R5bGVzSW5Eb21baXRlbS5pZF0gPSB7aWQ6IGl0ZW0uaWQsIHJlZnM6IDEsIHBhcnRzOiBwYXJ0c307XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGxpc3RUb1N0eWxlcyAobGlzdCwgb3B0aW9ucykge1xuXHR2YXIgc3R5bGVzID0gW107XG5cdHZhciBuZXdTdHlsZXMgPSB7fTtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgaXRlbSA9IGxpc3RbaV07XG5cdFx0dmFyIGlkID0gb3B0aW9ucy5iYXNlID8gaXRlbVswXSArIG9wdGlvbnMuYmFzZSA6IGl0ZW1bMF07XG5cdFx0dmFyIGNzcyA9IGl0ZW1bMV07XG5cdFx0dmFyIG1lZGlhID0gaXRlbVsyXTtcblx0XHR2YXIgc291cmNlTWFwID0gaXRlbVszXTtcblx0XHR2YXIgcGFydCA9IHtjc3M6IGNzcywgbWVkaWE6IG1lZGlhLCBzb3VyY2VNYXA6IHNvdXJjZU1hcH07XG5cblx0XHRpZighbmV3U3R5bGVzW2lkXSkgc3R5bGVzLnB1c2gobmV3U3R5bGVzW2lkXSA9IHtpZDogaWQsIHBhcnRzOiBbcGFydF19KTtcblx0XHRlbHNlIG5ld1N0eWxlc1tpZF0ucGFydHMucHVzaChwYXJ0KTtcblx0fVxuXG5cdHJldHVybiBzdHlsZXM7XG59XG5cbmZ1bmN0aW9uIGluc2VydFN0eWxlRWxlbWVudCAob3B0aW9ucywgc3R5bGUpIHtcblx0dmFyIHRhcmdldCA9IGdldEVsZW1lbnQob3B0aW9ucy5pbnNlcnRJbnRvKVxuXG5cdGlmICghdGFyZ2V0KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnRJbnRvJyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG5cdH1cblxuXHR2YXIgbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3AgPSBzdHlsZXNJbnNlcnRlZEF0VG9wW3N0eWxlc0luc2VydGVkQXRUb3AubGVuZ3RoIC0gMV07XG5cblx0aWYgKG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwidG9wXCIpIHtcblx0XHRpZiAoIWxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wKSB7XG5cdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKHN0eWxlLCB0YXJnZXQuZmlyc3RDaGlsZCk7XG5cdFx0fSBlbHNlIGlmIChsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcC5uZXh0U2libGluZykge1xuXHRcdFx0dGFyZ2V0Lmluc2VydEJlZm9yZShzdHlsZSwgbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3AubmV4dFNpYmxpbmcpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuXHRcdH1cblx0XHRzdHlsZXNJbnNlcnRlZEF0VG9wLnB1c2goc3R5bGUpO1xuXHR9IGVsc2UgaWYgKG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwiYm90dG9tXCIpIHtcblx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zLmluc2VydEF0ID09PSBcIm9iamVjdFwiICYmIG9wdGlvbnMuaW5zZXJ0QXQuYmVmb3JlKSB7XG5cdFx0dmFyIG5leHRTaWJsaW5nID0gZ2V0RWxlbWVudChvcHRpb25zLmluc2VydEludG8gKyBcIiBcIiArIG9wdGlvbnMuaW5zZXJ0QXQuYmVmb3JlKTtcblx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBuZXh0U2libGluZyk7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiW1N0eWxlIExvYWRlcl1cXG5cXG4gSW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICdpbnNlcnRBdCcgKCdvcHRpb25zLmluc2VydEF0JykgZm91bmQuXFxuIE11c3QgYmUgJ3RvcCcsICdib3R0b20nLCBvciBPYmplY3QuXFxuIChodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay1jb250cmliL3N0eWxlLWxvYWRlciNpbnNlcnRhdClcXG5cIik7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50IChzdHlsZSkge1xuXHRpZiAoc3R5bGUucGFyZW50Tm9kZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXHRzdHlsZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlKTtcblxuXHR2YXIgaWR4ID0gc3R5bGVzSW5zZXJ0ZWRBdFRvcC5pbmRleE9mKHN0eWxlKTtcblx0aWYoaWR4ID49IDApIHtcblx0XHRzdHlsZXNJbnNlcnRlZEF0VG9wLnNwbGljZShpZHgsIDEpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0eWxlRWxlbWVudCAob3B0aW9ucykge1xuXHR2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG5cblx0b3B0aW9ucy5hdHRycy50eXBlID0gXCJ0ZXh0L2Nzc1wiO1xuXG5cdGFkZEF0dHJzKHN0eWxlLCBvcHRpb25zLmF0dHJzKTtcblx0aW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMsIHN0eWxlKTtcblxuXHRyZXR1cm4gc3R5bGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxpbmtFbGVtZW50IChvcHRpb25zKSB7XG5cdHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIik7XG5cblx0b3B0aW9ucy5hdHRycy50eXBlID0gXCJ0ZXh0L2Nzc1wiO1xuXHRvcHRpb25zLmF0dHJzLnJlbCA9IFwic3R5bGVzaGVldFwiO1xuXG5cdGFkZEF0dHJzKGxpbmssIG9wdGlvbnMuYXR0cnMpO1xuXHRpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucywgbGluayk7XG5cblx0cmV0dXJuIGxpbms7XG59XG5cbmZ1bmN0aW9uIGFkZEF0dHJzIChlbCwgYXR0cnMpIHtcblx0T2JqZWN0LmtleXMoYXR0cnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuXHRcdGVsLnNldEF0dHJpYnV0ZShrZXksIGF0dHJzW2tleV0pO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gYWRkU3R5bGUgKG9iaiwgb3B0aW9ucykge1xuXHR2YXIgc3R5bGUsIHVwZGF0ZSwgcmVtb3ZlLCByZXN1bHQ7XG5cblx0Ly8gSWYgYSB0cmFuc2Zvcm0gZnVuY3Rpb24gd2FzIGRlZmluZWQsIHJ1biBpdCBvbiB0aGUgY3NzXG5cdGlmIChvcHRpb25zLnRyYW5zZm9ybSAmJiBvYmouY3NzKSB7XG5cdCAgICByZXN1bHQgPSBvcHRpb25zLnRyYW5zZm9ybShvYmouY3NzKTtcblxuXHQgICAgaWYgKHJlc3VsdCkge1xuXHQgICAgXHQvLyBJZiB0cmFuc2Zvcm0gcmV0dXJucyBhIHZhbHVlLCB1c2UgdGhhdCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBjc3MuXG5cdCAgICBcdC8vIFRoaXMgYWxsb3dzIHJ1bm5pbmcgcnVudGltZSB0cmFuc2Zvcm1hdGlvbnMgb24gdGhlIGNzcy5cblx0ICAgIFx0b2JqLmNzcyA9IHJlc3VsdDtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdC8vIElmIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24gcmV0dXJucyBhIGZhbHN5IHZhbHVlLCBkb24ndCBhZGQgdGhpcyBjc3MuXG5cdCAgICBcdC8vIFRoaXMgYWxsb3dzIGNvbmRpdGlvbmFsIGxvYWRpbmcgb2YgY3NzXG5cdCAgICBcdHJldHVybiBmdW5jdGlvbigpIHtcblx0ICAgIFx0XHQvLyBub29wXG5cdCAgICBcdH07XG5cdCAgICB9XG5cdH1cblxuXHRpZiAob3B0aW9ucy5zaW5nbGV0b24pIHtcblx0XHR2YXIgc3R5bGVJbmRleCA9IHNpbmdsZXRvbkNvdW50ZXIrKztcblxuXHRcdHN0eWxlID0gc2luZ2xldG9uIHx8IChzaW5nbGV0b24gPSBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucykpO1xuXG5cdFx0dXBkYXRlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCBmYWxzZSk7XG5cdFx0cmVtb3ZlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCB0cnVlKTtcblxuXHR9IGVsc2UgaWYgKFxuXHRcdG9iai5zb3VyY2VNYXAgJiZcblx0XHR0eXBlb2YgVVJMID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgVVJMLmNyZWF0ZU9iamVjdFVSTCA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIFVSTC5yZXZva2VPYmplY3RVUkwgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBCbG9iID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiXG5cdCkge1xuXHRcdHN0eWxlID0gY3JlYXRlTGlua0VsZW1lbnQob3B0aW9ucyk7XG5cdFx0dXBkYXRlID0gdXBkYXRlTGluay5iaW5kKG51bGwsIHN0eWxlLCBvcHRpb25zKTtcblx0XHRyZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpO1xuXG5cdFx0XHRpZihzdHlsZS5ocmVmKSBVUkwucmV2b2tlT2JqZWN0VVJMKHN0eWxlLmhyZWYpO1xuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0c3R5bGUgPSBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucyk7XG5cdFx0dXBkYXRlID0gYXBwbHlUb1RhZy5iaW5kKG51bGwsIHN0eWxlKTtcblx0XHRyZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpO1xuXHRcdH07XG5cdH1cblxuXHR1cGRhdGUob2JqKTtcblxuXHRyZXR1cm4gZnVuY3Rpb24gdXBkYXRlU3R5bGUgKG5ld09iaikge1xuXHRcdGlmIChuZXdPYmopIHtcblx0XHRcdGlmIChcblx0XHRcdFx0bmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJlxuXHRcdFx0XHRuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJlxuXHRcdFx0XHRuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR1cGRhdGUob2JqID0gbmV3T2JqKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVtb3ZlKCk7XG5cdFx0fVxuXHR9O1xufVxuXG52YXIgcmVwbGFjZVRleHQgPSAoZnVuY3Rpb24gKCkge1xuXHR2YXIgdGV4dFN0b3JlID0gW107XG5cblx0cmV0dXJuIGZ1bmN0aW9uIChpbmRleCwgcmVwbGFjZW1lbnQpIHtcblx0XHR0ZXh0U3RvcmVbaW5kZXhdID0gcmVwbGFjZW1lbnQ7XG5cblx0XHRyZXR1cm4gdGV4dFN0b3JlLmZpbHRlcihCb29sZWFuKS5qb2luKCdcXG4nKTtcblx0fTtcbn0pKCk7XG5cbmZ1bmN0aW9uIGFwcGx5VG9TaW5nbGV0b25UYWcgKHN0eWxlLCBpbmRleCwgcmVtb3ZlLCBvYmopIHtcblx0dmFyIGNzcyA9IHJlbW92ZSA/IFwiXCIgOiBvYmouY3NzO1xuXG5cdGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG5cdFx0c3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gcmVwbGFjZVRleHQoaW5kZXgsIGNzcyk7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIGNzc05vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpO1xuXHRcdHZhciBjaGlsZE5vZGVzID0gc3R5bGUuY2hpbGROb2RlcztcblxuXHRcdGlmIChjaGlsZE5vZGVzW2luZGV4XSkgc3R5bGUucmVtb3ZlQ2hpbGQoY2hpbGROb2Rlc1tpbmRleF0pO1xuXG5cdFx0aWYgKGNoaWxkTm9kZXMubGVuZ3RoKSB7XG5cdFx0XHRzdHlsZS5pbnNlcnRCZWZvcmUoY3NzTm9kZSwgY2hpbGROb2Rlc1tpbmRleF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdHlsZS5hcHBlbmRDaGlsZChjc3NOb2RlKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gYXBwbHlUb1RhZyAoc3R5bGUsIG9iaikge1xuXHR2YXIgY3NzID0gb2JqLmNzcztcblx0dmFyIG1lZGlhID0gb2JqLm1lZGlhO1xuXG5cdGlmKG1lZGlhKSB7XG5cdFx0c3R5bGUuc2V0QXR0cmlidXRlKFwibWVkaWFcIiwgbWVkaWEpXG5cdH1cblxuXHRpZihzdHlsZS5zdHlsZVNoZWV0KSB7XG5cdFx0c3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuXHR9IGVsc2Uge1xuXHRcdHdoaWxlKHN0eWxlLmZpcnN0Q2hpbGQpIHtcblx0XHRcdHN0eWxlLnJlbW92ZUNoaWxkKHN0eWxlLmZpcnN0Q2hpbGQpO1xuXHRcdH1cblxuXHRcdHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUxpbmsgKGxpbmssIG9wdGlvbnMsIG9iaikge1xuXHR2YXIgY3NzID0gb2JqLmNzcztcblx0dmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXA7XG5cblx0Lypcblx0XHRJZiBjb252ZXJ0VG9BYnNvbHV0ZVVybHMgaXNuJ3QgZGVmaW5lZCwgYnV0IHNvdXJjZW1hcHMgYXJlIGVuYWJsZWRcblx0XHRhbmQgdGhlcmUgaXMgbm8gcHVibGljUGF0aCBkZWZpbmVkIHRoZW4gbGV0cyB0dXJuIGNvbnZlcnRUb0Fic29sdXRlVXJsc1xuXHRcdG9uIGJ5IGRlZmF1bHQuICBPdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgY29udmVydFRvQWJzb2x1dGVVcmxzIG9wdGlvblxuXHRcdGRpcmVjdGx5XG5cdCovXG5cdHZhciBhdXRvRml4VXJscyA9IG9wdGlvbnMuY29udmVydFRvQWJzb2x1dGVVcmxzID09PSB1bmRlZmluZWQgJiYgc291cmNlTWFwO1xuXG5cdGlmIChvcHRpb25zLmNvbnZlcnRUb0Fic29sdXRlVXJscyB8fCBhdXRvRml4VXJscykge1xuXHRcdGNzcyA9IGZpeFVybHMoY3NzKTtcblx0fVxuXG5cdGlmIChzb3VyY2VNYXApIHtcblx0XHQvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yNjYwMzg3NVxuXHRcdGNzcyArPSBcIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIgKyBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpICsgXCIgKi9cIjtcblx0fVxuXG5cdHZhciBibG9iID0gbmV3IEJsb2IoW2Nzc10sIHsgdHlwZTogXCJ0ZXh0L2Nzc1wiIH0pO1xuXG5cdHZhciBvbGRTcmMgPSBsaW5rLmhyZWY7XG5cblx0bGluay5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblxuXHRpZihvbGRTcmMpIFVSTC5yZXZva2VPYmplY3RVUkwob2xkU3JjKTtcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXG4vLyBtb2R1bGUgaWQgPSA0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIDIgMyIsImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcbmltcG9ydCBnZXRSYXdUYWcgZnJvbSAnLi9fZ2V0UmF3VGFnLmpzJztcbmltcG9ydCBvYmplY3RUb1N0cmluZyBmcm9tICcuL19vYmplY3RUb1N0cmluZy5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlR2V0VGFnO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUdldFRhZy5qcyIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc09iamVjdExpa2U7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzT2JqZWN0TGlrZS5qcyIsImltcG9ydCBsYXp5SW5pdGlhbGl6ZSBmcm9tICcuLi9sYXp5LWluaXRpYWxpemUnO1xuXG5jb25zdCB7IGRlZmluZVByb3BlcnR5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG4gICAgICAgIGdldE93blByb3BlcnR5TmFtZXMsIGdldE93blByb3BlcnR5U3ltYm9scyB9ID0gT2JqZWN0O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNEZXNjcmlwdG9yKGRlc2MpIHtcbiAgaWYgKCFkZXNjIHx8ICFkZXNjLmhhc093blByb3BlcnR5KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qga2V5cyA9IFsndmFsdWUnLCAnaW5pdGlhbGl6ZXInLCAnZ2V0JywgJ3NldCddO1xuXG4gIGZvciAobGV0IGkgPSAwLCBsID0ga2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAoZGVzYy5oYXNPd25Qcm9wZXJ0eShrZXlzW2ldKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb3JhdGUoaGFuZGxlRGVzY3JpcHRvciwgZW50cnlBcmdzKSB7XG4gIGlmIChpc0Rlc2NyaXB0b3IoZW50cnlBcmdzW2VudHJ5QXJncy5sZW5ndGggLSAxXSkpIHtcbiAgICByZXR1cm4gaGFuZGxlRGVzY3JpcHRvciguLi5lbnRyeUFyZ3MsIFtdKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGhhbmRsZURlc2NyaXB0b3IoLi4uQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSwgZW50cnlBcmdzKTtcbiAgICB9O1xuICB9XG59XG5cbmNsYXNzIE1ldGEge1xuICBAbGF6eUluaXRpYWxpemVcbiAgZGVib3VuY2VUaW1lb3V0SWRzID0ge307XG5cbiAgQGxhenlJbml0aWFsaXplXG4gIHRocm90dGxlVGltZW91dElkcyA9IHt9O1xuXG4gIEBsYXp5SW5pdGlhbGl6ZVxuICB0aHJvdHRsZVByZXZpb3VzVGltZXN0YW1wcyA9IHt9O1xuXG4gIEBsYXp5SW5pdGlhbGl6ZVxuICB0aHJvdHRsZVRyYWlsaW5nQXJncyA9IG51bGw7XG5cbiAgQGxhenlJbml0aWFsaXplXG4gIHByb2ZpbGVMYXN0UmFuID0gbnVsbDtcbn1cblxuY29uc3QgTUVUQV9LRVkgPSAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJylcbiAgPyBTeW1ib2woJ19fY29yZV9kZWNvcmF0b3JzX18nKVxuICA6ICdfX2NvcmVfZGVjb3JhdG9yc19fJztcblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFGb3Iob2JqKSB7XG4gIGlmIChvYmouaGFzT3duUHJvcGVydHkoTUVUQV9LRVkpID09PSBmYWxzZSkge1xuICAgIGRlZmluZVByb3BlcnR5KG9iaiwgTUVUQV9LRVksIHtcbiAgICAgIC8vIERlZmF1bHRzOiBOT1QgZW51bWVyYWJsZSwgY29uZmlndXJhYmxlLCBvciB3cml0YWJsZVxuICAgICAgdmFsdWU6IG5ldyBNZXRhKClcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBvYmpbTUVUQV9LRVldO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0T3duS2V5cyA9IGdldE93blByb3BlcnR5U3ltYm9sc1xuICAgID8gZnVuY3Rpb24gKG9iamVjdCkge1xuICAgICAgICByZXR1cm4gZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QpXG4gICAgICAgICAgLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KSk7XG4gICAgICB9XG4gICAgOiBnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iaikge1xuICBjb25zdCBkZXNjcyA9IHt9O1xuXG4gIGdldE93bktleXMob2JqKS5mb3JFYWNoKFxuICAgIGtleSA9PiAoZGVzY3Nba2V5XSA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSkpXG4gICk7XG5cbiAgcmV0dXJuIGRlc2NzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGVmYXVsdFNldHRlcihrZXkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNldChuZXdWYWx1ZSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgLy8gSVMgZW51bWVyYWJsZSB3aGVuIHJlYXNzaWduZWQgYnkgdGhlIG91dHNpZGUgd29yZFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBuZXdWYWx1ZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ld1ZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmluZChmbiwgY29udGV4dCkge1xuICBpZiAoZm4uYmluZCkge1xuICAgIHJldHVybiBmbi5iaW5kKGNvbnRleHQpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmdW5jdGlvbiBfX2F1dG9iaW5kX18oKSB7XG4gICAgICByZXR1cm4gZm4uYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCB3YXJuID0gKCgpID0+IHtcbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAnb2JqZWN0JyB8fCAhY29uc29sZSB8fCB0eXBlb2YgY29uc29sZS53YXJuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuICgpID0+IHt9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBiaW5kKGNvbnNvbGUud2FybiwgY29uc29sZSk7XG4gIH1cbn0pKCk7XG5cbmNvbnN0IHNlZW5EZXByZWNhdGlvbnMgPSB7fTtcbmV4cG9ydCBmdW5jdGlvbiBpbnRlcm5hbERlcHJlY2F0aW9uKG1zZykge1xuICBpZiAoc2VlbkRlcHJlY2F0aW9uc1ttc2ddICE9PSB0cnVlKSB7XG4gICAgc2VlbkRlcHJlY2F0aW9uc1ttc2ddID0gdHJ1ZTtcbiAgICB3YXJuKCdERVBSRUNBVElPTjogJyArIG1zZyk7XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWRlY29yYXRvcnMvc3JjL3ByaXZhdGUvdXRpbHMuanMiLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNPYmplY3Q7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzT2JqZWN0LmpzIiwiaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5leHBvcnQgZGVmYXVsdCBTeW1ib2w7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19TeW1ib2wuanMiLCJpbXBvcnQgZnJlZUdsb2JhbCBmcm9tICcuL19mcmVlR2xvYmFsLmpzJztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5leHBvcnQgZGVmYXVsdCByb290O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcm9vdC5qcyIsIi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBlcTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvZXEuanMiLCJpbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGlzTGVuZ3RoIGZyb20gJy4vaXNMZW5ndGguanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNBcnJheUxpa2U7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJyYXlMaWtlLmpzIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9JbnRlZ2VyKGRpcnR5TnVtYmVyKSB7XG4gIGlmIChkaXJ0eU51bWJlciA9PT0gbnVsbCB8fCBkaXJ0eU51bWJlciA9PT0gdHJ1ZSB8fCBkaXJ0eU51bWJlciA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gTmFOO1xuICB9XG5cbiAgdmFyIG51bWJlciA9IE51bWJlcihkaXJ0eU51bWJlcik7XG5cbiAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG5cbiAgcmV0dXJuIG51bWJlciA8IDAgPyBNYXRoLmNlaWwobnVtYmVyKSA6IE1hdGguZmxvb3IobnVtYmVyKTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVxdWlyZWRBcmdzKHJlcXVpcmVkLCBhcmdzKSB7XG4gIGlmIChhcmdzLmxlbmd0aCA8IHJlcXVpcmVkKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihyZXF1aXJlZCArICcgYXJndW1lbnQnICsgcmVxdWlyZWQgPiAxID8gJ3MnIDogJycgKyAnIHJlcXVpcmVkLCBidXQgb25seSAnICsgYXJncy5sZW5ndGggKyAnIHByZXNlbnQnKTtcbiAgfVxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgQm9vbGVhblN3aXRjaCBmcm9tICcuL0Jvb2xlYW5Td2l0Y2gnXG5cbmV4cG9ydCBkZWZhdWx0IEJvb2xlYW5Td2l0Y2hcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9Cb29sZWFuU3dpdGNoL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IFRlbXBsYXRlUmVuZGVyZXIgZnJvbSAnLi9UZW1wbGF0ZVJlbmRlcmVyJ1xuXG5leHBvcnQgZGVmYXVsdCBUZW1wbGF0ZVJlbmRlcmVyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvVGVtcGxhdGVSZW5kZXJlci9pbmRleC5qcyIsImltcG9ydCBkZWZpbmVQcm9wZXJ0eSBmcm9tICcuL19kZWZpbmVQcm9wZXJ0eS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcbiAqIHZhbHVlIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgZGVmaW5lUHJvcGVydHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuICAgICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgICAnZW51bWVyYWJsZSc6IHRydWUsXG4gICAgICAndmFsdWUnOiB2YWx1ZSxcbiAgICAgICd3cml0YWJsZSc6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VBc3NpZ25WYWx1ZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VBc3NpZ25WYWx1ZS5qcyIsImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZVByb3BlcnR5O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZGVmaW5lUHJvcGVydHkuanMiLCJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNGdW5jdGlvbjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNGdW5jdGlvbi5qcyIsIi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbmV4cG9ydCBkZWZhdWx0IGZyZWVHbG9iYWw7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19mcmVlR2xvYmFsLmpzIiwidmFyIGc7XHJcblxyXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxyXG5nID0gKGZ1bmN0aW9uKCkge1xyXG5cdHJldHVybiB0aGlzO1xyXG59KSgpO1xyXG5cclxudHJ5IHtcclxuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcclxuXHRnID0gZyB8fCBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCkgfHwgKDEsZXZhbCkoXCJ0aGlzXCIpO1xyXG59IGNhdGNoKGUpIHtcclxuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxyXG5cdGlmKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpXHJcblx0XHRnID0gd2luZG93O1xyXG59XHJcblxyXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXHJcbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXHJcbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZztcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vICh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsImltcG9ydCBpZGVudGl0eSBmcm9tICcuL2lkZW50aXR5LmpzJztcbmltcG9ydCBvdmVyUmVzdCBmcm9tICcuL19vdmVyUmVzdC5qcyc7XG5pbXBvcnQgc2V0VG9TdHJpbmcgZnJvbSAnLi9fc2V0VG9TdHJpbmcuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlc3RgIHdoaWNoIGRvZXNuJ3QgdmFsaWRhdGUgb3IgY29lcmNlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUmVzdChmdW5jLCBzdGFydCkge1xuICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgc3RhcnQsIGlkZW50aXR5KSwgZnVuYyArICcnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVJlc3Q7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlUmVzdC5qcyIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKlxuICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlkZW50aXR5O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pZGVudGl0eS5qcyIsIi8qKlxuICogQSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gYEZ1bmN0aW9uI2FwcGx5YCwgdGhpcyBmdW5jdGlvbiBpbnZva2VzIGBmdW5jYFxuICogd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgIGFuZCB0aGUgYXJndW1lbnRzIG9mIGBhcmdzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpIHtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnKTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgfVxuICByZXR1cm4gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXBwbHk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcHBseS5qcyIsImltcG9ydCBlcSBmcm9tICcuL2VxLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCBpc0luZGV4IGZyb20gJy4vX2lzSW5kZXguanMnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSB2YWx1ZSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gIGlmICh0eXBlID09ICdudW1iZXInXG4gICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxuICAgICAgKSB7XG4gICAgcmV0dXJuIGVxKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzSXRlcmF0ZWVDYWxsO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNJdGVyYXRlZUNhbGwuanMiLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNMZW5ndGgoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcbiAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzTGVuZ3RoO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0xlbmd0aC5qcyIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovXG52YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXGQqKSQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBpbmRleC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuXG4gIHJldHVybiAhIWxlbmd0aCAmJlxuICAgICh0eXBlID09ICdudW1iZXInIHx8XG4gICAgICAodHlwZSAhPSAnc3ltYm9sJyAmJiByZUlzVWludC50ZXN0KHZhbHVlKSkpICYmXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNJbmRleDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzSW5kZXguanMiLCJpbXBvcnQgYmFzZVRpbWVzIGZyb20gJy4vX2Jhc2VUaW1lcy5qcyc7XG5pbXBvcnQgaXNBcmd1bWVudHMgZnJvbSAnLi9pc0FyZ3VtZW50cy5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzQnVmZmVyIGZyb20gJy4vaXNCdWZmZXIuanMnO1xuaW1wb3J0IGlzSW5kZXggZnJvbSAnLi9faXNJbmRleC5qcyc7XG5pbXBvcnQgaXNUeXBlZEFycmF5IGZyb20gJy4vaXNUeXBlZEFycmF5LmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpLFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICBpc1R5cGUgPSAhaXNBcnIgJiYgIWlzQXJnICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHZhbHVlKSxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAhKHNraXBJbmRleGVzICYmIChcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgLy8gTm9kZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMuXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgIChpc1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9PSAnYnl0ZU9mZnNldCcpKSB8fFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheUxpa2VLZXlzO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlMaWtlS2V5cy5qcyIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5leHBvcnQgZGVmYXVsdCBpc0FycmF5O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FycmF5LmpzIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvcmlnaW5hbE1vZHVsZSkge1xyXG5cdGlmKCFvcmlnaW5hbE1vZHVsZS53ZWJwYWNrUG9seWZpbGwpIHtcclxuXHRcdHZhciBtb2R1bGUgPSBPYmplY3QuY3JlYXRlKG9yaWdpbmFsTW9kdWxlKTtcclxuXHRcdC8vIG1vZHVsZS5wYXJlbnQgPSB1bmRlZmluZWQgYnkgZGVmYXVsdFxyXG5cdFx0aWYoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XHJcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImxvYWRlZFwiLCB7XHJcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXHJcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5sO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwiaWRcIiwge1xyXG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxyXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdHJldHVybiBtb2R1bGUuaTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImV4cG9ydHNcIiwge1xyXG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxyXG5cdFx0fSk7XHJcblx0XHRtb2R1bGUud2VicGFja1BvbHlmaWxsID0gMTtcclxuXHR9XHJcblx0cmV0dXJuIG1vZHVsZTtcclxufTtcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vICh3ZWJwYWNrKS9idWlsZGluL2hhcm1vbnktbW9kdWxlLmpzIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYSBwcm90b3R5cGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzUHJvdG90eXBlKHZhbHVlKSB7XG4gIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXG4gICAgICBwcm90byA9ICh0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IucHJvdG90eXBlKSB8fCBvYmplY3RQcm90bztcblxuICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1Byb3RvdHlwZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzUHJvdG90eXBlLmpzIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcbmltcG9ydCBpc1BsYWluT2JqZWN0IGZyb20gJy4vaXNQbGFpbk9iamVjdC5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBkb21FeGNUYWcgPSAnW29iamVjdCBET01FeGNlcHRpb25dJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gYEVycm9yYCwgYEV2YWxFcnJvcmAsIGBSYW5nZUVycm9yYCwgYFJlZmVyZW5jZUVycm9yYCxcbiAqIGBTeW50YXhFcnJvcmAsIGBUeXBlRXJyb3JgLCBvciBgVVJJRXJyb3JgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBlcnJvciBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0Vycm9yKG5ldyBFcnJvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Vycm9yKEVycm9yKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRXJyb3IodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBlcnJvclRhZyB8fCB0YWcgPT0gZG9tRXhjVGFnIHx8XG4gICAgKHR5cGVvZiB2YWx1ZS5tZXNzYWdlID09ICdzdHJpbmcnICYmIHR5cGVvZiB2YWx1ZS5uYW1lID09ICdzdHJpbmcnICYmICFpc1BsYWluT2JqZWN0KHZhbHVlKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzRXJyb3I7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzRXJyb3IuanMiLCIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgb3ZlckFyZztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX292ZXJBcmcuanMiLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheU1hcDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5TWFwLmpzIiwiLyoqIFVzZWQgdG8gbWF0Y2ggdGVtcGxhdGUgZGVsaW1pdGVycy4gKi9cbnZhciByZUludGVycG9sYXRlID0gLzwlPShbXFxzXFxTXSs/KSU+L2c7XG5cbmV4cG9ydCBkZWZhdWx0IHJlSW50ZXJwb2xhdGU7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19yZUludGVycG9sYXRlLmpzIiwiaW1wb3J0IGJhc2VUb1N0cmluZyBmcm9tICcuL19iYXNlVG9TdHJpbmcuanMnO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcuIEFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZCBmb3IgYG51bGxgXG4gKiBhbmQgYHVuZGVmaW5lZGAgdmFsdWVzLiBUaGUgc2lnbiBvZiBgLTBgIGlzIHByZXNlcnZlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9TdHJpbmcobnVsbCk7XG4gKiAvLyA9PiAnJ1xuICpcbiAqIF8udG9TdHJpbmcoLTApO1xuICogLy8gPT4gJy0wJ1xuICpcbiAqIF8udG9TdHJpbmcoWzEsIDIsIDNdKTtcbiAqIC8vID0+ICcxLDIsMydcbiAqL1xuZnVuY3Rpb24gdG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAnJyA6IGJhc2VUb1N0cmluZyh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvU3RyaW5nO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90b1N0cmluZy5qcyIsImltcG9ydCB7IGRlY29yYXRlIH0gZnJvbSAnLi9wcml2YXRlL3V0aWxzJztcblxuZnVuY3Rpb24gaGFuZGxlRGVzY3JpcHRvcih0YXJnZXQsIGtleSwgZGVzY3JpcHRvcikge1xuICBkZXNjcmlwdG9yLndyaXRhYmxlID0gZmFsc2U7XG4gIHJldHVybiBkZXNjcmlwdG9yO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWFkb25seSguLi5hcmdzKSB7XG4gIHJldHVybiBkZWNvcmF0ZShoYW5kbGVEZXNjcmlwdG9yLCBhcmdzKTtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWRlY29yYXRvcnMvc3JjL3JlYWRvbmx5LmpzIiwiaW1wb3J0IHR6UGFyc2VUaW1lem9uZSBmcm9tICcuLi9fbGliL3R6UGFyc2VUaW1lem9uZSdcbmltcG9ydCBzdWJNaWxsaXNlY29uZHMgZnJvbSAnZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcydcbmltcG9ydCB0b0RhdGUgZnJvbSAnLi4vdG9EYXRlJ1xuXG4vKipcbiAqIEBuYW1lIHV0Y1RvWm9uZWRUaW1lXG4gKiBAY2F0ZWdvcnkgVGltZSBab25lIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCBhIGRhdGUvdGltZSByZXByZXNlbnRpbmcgbG9jYWwgdGltZSBpbiBhIGdpdmVuIHRpbWUgem9uZSBmcm9tIHRoZSBVVEMgZGF0ZVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyBhIGRhdGUgaW5zdGFuY2Ugd2l0aCB2YWx1ZXMgcmVwcmVzZW50aW5nIHRoZSBsb2NhbCB0aW1lIGluIHRoZSB0aW1lIHpvbmVcbiAqIHNwZWNpZmllZCBvZiB0aGUgVVRDIHRpbWUgZnJvbSB0aGUgZGF0ZSBwcm92aWRlZC4gSW4gb3RoZXIgd29yZHMsIHdoZW4gdGhlIG5ldyBkYXRlXG4gKiBpcyBmb3JtYXR0ZWQgaXQgd2lsbCBzaG93IHRoZSBlcXVpdmFsZW50IGhvdXJzIGluIHRoZSB0YXJnZXQgdGltZSB6b25lIHJlZ2FyZGxlc3NcbiAqIG9mIHRoZSBjdXJyZW50IHN5c3RlbSB0aW1lIHpvbmUuXG4gKlxuICogQHBhcmFtIHtEYXRlfFN0cmluZ3xOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB3aXRoIHRoZSByZWxldmFudCBVVEMgdGltZVxuICogQHBhcmFtIHtTdHJpbmd9IHRpbWVab25lIC0gdGhlIHRpbWUgem9uZSB0byBnZXQgbG9jYWwgdGltZSBmb3IsIGNhbiBiZSBhbiBvZmZzZXQgb3IgSUFOQSB0aW1lIHpvbmVcbiAqIEBwYXJhbSB7T3B0aW9uc1dpdGhUWn0gW29wdGlvbnNdIC0gdGhlIG9iamVjdCB3aXRoIG9wdGlvbnMuIFNlZSBbT3B0aW9uc117QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9PcHRpb25zfVxuICogQHBhcmFtIHswfDF8Mn0gW29wdGlvbnMuYWRkaXRpb25hbERpZ2l0cz0yXSAtIHBhc3NlZCB0byBgdG9EYXRlYC4gU2VlIFt0b0RhdGVde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvdG9EYXRlfVxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBlcXVpdmFsZW50IHRpbWUgaW4gdGhlIHRpbWUgem9uZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMuYWRkaXRpb25hbERpZ2l0c2AgbXVzdCBiZSAwLCAxIG9yIDJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSW4gSnVuZSAxMGFtIFVUQyBpcyA2YW0gaW4gTmV3IFlvcmsgKC0wNDowMClcbiAqIGNvbnN0IHJlc3VsdCA9IHV0Y1RvWm9uZWRUaW1lKCcyMDE0LTA2LTI1VDEwOjAwOjAwLjAwMFonLCAnQW1lcmljYS9OZXdfWW9yaycpXG4gKiAvLz0+IEp1biAyNSAyMDE0IDA2OjAwOjAwXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHV0Y1RvWm9uZWRUaW1lKGRpcnR5RGF0ZSwgdGltZVpvbmUsIG9wdGlvbnMpIHtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlLCBvcHRpb25zKVxuXG4gIC8vIFRoaXMgZGF0ZSBoYXMgdGhlIFVUQyB0aW1lIHZhbHVlcyBvZiB0aGUgaW5wdXQgZGF0ZSBhdCB0aGUgc3lzdGVtIHRpbWUgem9uZVxuICB2YXIgdXRjRGF0ZSA9IG5ldyBEYXRlKFxuICAgIGRhdGUuZ2V0VVRDRnVsbFllYXIoKSxcbiAgICBkYXRlLmdldFVUQ01vbnRoKCksXG4gICAgZGF0ZS5nZXRVVENEYXRlKCksXG4gICAgZGF0ZS5nZXRVVENIb3VycygpLFxuICAgIGRhdGUuZ2V0VVRDTWludXRlcygpLFxuICAgIGRhdGUuZ2V0VVRDU2Vjb25kcygpLFxuICAgIGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKClcbiAgKVxuICAvLyBXZSBqdXN0IG5lZWQgdG8gYXBwbHkgdGhlIG9mZnNldCBpbmRpY2F0ZWQgYnkgdGhlIHRpbWUgem9uZSB0byB0aGlzIGxvY2FsaXplZCBkYXRlXG4gIHZhciBvZmZzZXRNaWxsaXNlY29uZHMgPSB0elBhcnNlVGltZXpvbmUodGltZVpvbmUsIGRhdGUpXG5cbiAgcmV0dXJuIG9mZnNldE1pbGxpc2Vjb25kc1xuICAgID8gc3ViTWlsbGlzZWNvbmRzKHV0Y0RhdGUsIG9mZnNldE1pbGxpc2Vjb25kcylcbiAgICA6IHV0Y0RhdGVcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9kYXRlLWZucy10ei9lc20vdXRjVG9ab25lZFRpbWUvaW5kZXguanMiLCJpbXBvcnQgdHpUb2tlbml6ZURhdGUgZnJvbSAnLi4vdHpUb2tlbml6ZURhdGUvaW5kZXguanMnXG5cbnZhciBNSUxMSVNFQ09ORFNfSU5fSE9VUiA9IDM2MDAwMDBcbnZhciBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFID0gNjAwMDBcblxudmFyIHBhdHRlcm5zID0ge1xuICB0aW1lem9uZTogLyhbWistXS4qKSQvLFxuICB0aW1lem9uZVo6IC9eKFopJC8sXG4gIHRpbWV6b25lSEg6IC9eKFsrLV0pKFxcZHsyfSkkLyxcbiAgdGltZXpvbmVISE1NOiAvXihbKy1dKShcXGR7Mn0pOj8oXFxkezJ9KSQvLFxuICB0aW1lem9uZUlBTkE6IC8oVVRDfCg/OlthLXpBLVpdK1xcL1thLXpBLVpfXSsoPzpcXC9bYS16QS1aX10rKT8pKSQvXG59XG5cbi8vIFBhcnNlIHZhcmlvdXMgdGltZSB6b25lIG9mZnNldCBmb3JtYXRzIHRvIGFuIG9mZnNldCBpbiBtaWxsaXNlY29uZHNcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHR6UGFyc2VUaW1lem9uZSh0aW1lem9uZVN0cmluZywgZGF0ZSkge1xuICB2YXIgdG9rZW5cbiAgdmFyIGFic29sdXRlT2Zmc2V0XG5cbiAgLy8gWlxuICB0b2tlbiA9IHBhdHRlcm5zLnRpbWV6b25lWi5leGVjKHRpbWV6b25lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICByZXR1cm4gMFxuICB9XG5cbiAgdmFyIGhvdXJzXG5cbiAgLy8gwrFoaFxuICB0b2tlbiA9IHBhdHRlcm5zLnRpbWV6b25lSEguZXhlYyh0aW1lem9uZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgaG91cnMgPSBwYXJzZUludCh0b2tlblsyXSwgMTApXG5cbiAgICBpZiAoIXZhbGlkYXRlVGltZXpvbmUoaG91cnMpKSB7XG4gICAgICByZXR1cm4gTmFOXG4gICAgfVxuXG4gICAgYWJzb2x1dGVPZmZzZXQgPSBob3VycyAqIE1JTExJU0VDT05EU19JTl9IT1VSXG4gICAgcmV0dXJuIHRva2VuWzFdID09PSAnKycgPyAtYWJzb2x1dGVPZmZzZXQgOiBhYnNvbHV0ZU9mZnNldFxuICB9XG5cbiAgLy8gwrFoaDptbSBvciDCsWhobW1cbiAgdG9rZW4gPSBwYXR0ZXJucy50aW1lem9uZUhITU0uZXhlYyh0aW1lem9uZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgaG91cnMgPSBwYXJzZUludCh0b2tlblsyXSwgMTApXG4gICAgdmFyIG1pbnV0ZXMgPSBwYXJzZUludCh0b2tlblszXSwgMTApXG5cbiAgICBpZiAoIXZhbGlkYXRlVGltZXpvbmUoaG91cnMsIG1pbnV0ZXMpKSB7XG4gICAgICByZXR1cm4gTmFOXG4gICAgfVxuXG4gICAgYWJzb2x1dGVPZmZzZXQgPVxuICAgICAgaG91cnMgKiBNSUxMSVNFQ09ORFNfSU5fSE9VUiArIG1pbnV0ZXMgKiBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFXG4gICAgcmV0dXJuIHRva2VuWzFdID09PSAnKycgPyAtYWJzb2x1dGVPZmZzZXQgOiBhYnNvbHV0ZU9mZnNldFxuICB9XG5cbiAgLy8gSUFOQSB0aW1lIHpvbmVcbiAgdG9rZW4gPSBwYXR0ZXJucy50aW1lem9uZUlBTkEuZXhlYyh0aW1lem9uZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgLy8gdmFyIFtmWWVhciwgZk1vbnRoLCBmRGF5LCBmSG91ciwgZk1pbnV0ZSwgZlNlY29uZF0gPSB0elRva2VuaXplRGF0ZShkYXRlLCB0aW1lem9uZVN0cmluZylcbiAgICB2YXIgdG9rZW5zID0gdHpUb2tlbml6ZURhdGUoZGF0ZSwgdGltZXpvbmVTdHJpbmcpXG4gICAgdmFyIGFzVVRDID0gRGF0ZS5VVEMoXG4gICAgICB0b2tlbnNbMF0sXG4gICAgICB0b2tlbnNbMV0gLSAxLFxuICAgICAgdG9rZW5zWzJdLFxuICAgICAgdG9rZW5zWzNdLFxuICAgICAgdG9rZW5zWzRdLFxuICAgICAgdG9rZW5zWzVdXG4gICAgKVxuICAgIHZhciB0aW1lc3RhbXBXaXRoTXNaZXJvZWQgPSBkYXRlLmdldFRpbWUoKSAtIChkYXRlLmdldFRpbWUoKSAlIDEwMDApXG4gICAgcmV0dXJuIC0oYXNVVEMgLSB0aW1lc3RhbXBXaXRoTXNaZXJvZWQpXG4gIH1cblxuICByZXR1cm4gMFxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVRpbWV6b25lKGhvdXJzLCBtaW51dGVzKSB7XG4gIGlmIChtaW51dGVzICE9IG51bGwgJiYgKG1pbnV0ZXMgPCAwIHx8IG1pbnV0ZXMgPiA1OSkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMtdHovZXNtL19saWIvdHpQYXJzZVRpbWV6b25lL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgRXZlbnRzTWl4aW4sIHdpdGhFdmVudHNNaXhpbiB9IGZyb20gJy4vRXZlbnRzTWl4aW4nXG5cbmV4cG9ydCBkZWZhdWx0IEV2ZW50c01peGluXG5leHBvcnQgeyB3aXRoRXZlbnRzTWl4aW4gfVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0V2ZW50c01peGluL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IERhdGVUaW1lSW5wdXQgZnJvbSAnLi9EYXRlVGltZUlucHV0J1xuXG5leHBvcnQgZGVmYXVsdCBEYXRlVGltZUlucHV0XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvRGF0ZVRpbWVJbnB1dC9pbmRleC5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBCb29sZWFuRWRpdG9yIGZyb20gJy4vQm9vbGVhbkVkaXRvcidcbmltcG9ydCBCb29sZWFuUmVuZGVyZXIgZnJvbSAnLi9Cb29sZWFuUmVuZGVyZXInXG5pbXBvcnQgQm9vbGVhbkZpbHRlciBmcm9tICcuL0Jvb2xlYW5GaWx0ZXInXG5pbXBvcnQgTnVtYmVyRWRpdG9yIGZyb20gJy4vTnVtYmVyRWRpdG9yJ1xuaW1wb3J0IFRleHRFZGl0b3IgZnJvbSAnLi9UZXh0RWRpdG9yJ1xuaW1wb3J0IFRlbXBsYXRlUmVuZGVyZXIgZnJvbSAnLi9UZW1wbGF0ZVJlbmRlcmVyJ1xuaW1wb3J0IEltYWdlUmVuZGVyZXIgZnJvbSAnLi9JbWFnZVJlbmRlcmVyJ1xuaW1wb3J0IERhdGVUaW1lRmlsdGVyIGZyb20gJy4vRGF0ZVRpbWVGaWx0ZXInXG5pbXBvcnQgRGF0ZVRpbWVFZGl0b3IgZnJvbSAnLi9EYXRlVGltZUVkaXRvcidcblxuZXhwb3J0IHtcbiAgQm9vbGVhbkVkaXRvcixcbiAgQm9vbGVhblJlbmRlcmVyLFxuICBCb29sZWFuRmlsdGVyLFxuICBOdW1iZXJFZGl0b3IsXG4gIFRleHRFZGl0b3IsXG4gIFRlbXBsYXRlUmVuZGVyZXIsXG4gIEltYWdlUmVuZGVyZXIsXG4gIERhdGVUaW1lRmlsdGVyLFxuICBEYXRlVGltZUVkaXRvcixcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9pbmRleC5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBCb29sZWFuRWRpdG9yIGZyb20gJy4vQm9vbGVhbkVkaXRvcidcblxuZXhwb3J0IGRlZmF1bHQgQm9vbGVhbkVkaXRvclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0Jvb2xlYW5FZGl0b3IvaW5kZXguanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgQ29tcG9uZW50IGZyb20gJy4uL0NvbXBvbmVudCdcbmltcG9ydCBCb29sZWFuU3dpdGNoIGZyb20gJy4uL0Jvb2xlYW5Td2l0Y2gnXG5cbi8qKlxuICogQm9vbGVhbnMgRWRpdG9yXG4gKlxuICogSGFuZGxlIGJvb2xlYW4gdmFsdWVzIEVkaXRpbmdcbiAqXG4gKiAjIyBPcHRpb25zXG4gKlxuICogfCBOYW1lICAgICAgICAgICAgICAgICAgXHR8IERlZmF1bHQgICAgIFx0fCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx0fDotLS0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgKipib29sZWFuVXNlZFRydWVWYWx1ZSoqICAgfCB1bmRlZmluZWQgICAgfCB0aGUgdmFsdWUgdG8gcmV0dXJuIHdoZW4gdGhlIGVkaXRvciBjaGFuZ2VzIHRoZSBjdXJyZW50IGNlbGwgdmFsdWUgdG8gdHJ1ZS4gaW4gY2FzZSBpdCBpcyB1bmRlZmluZWQgdGhlbiB3ZSB1c2UgdGhlIGZpcnN0IGl0ZW0gaW4gKipib29sZWFuVHJ1ZVZhbHVlW10qKlxuICogfCAqKmJvb2xlYW5Vc2VkRmFsc2VWYWx1ZSoqICAgfCB1bmRlZmluZWQgICAgfCB0aGUgdmFsdWUgdG8gcmV0dXJuIHdoZW4gdGhlIGVkaXRvciBjaGFuZ2VzIHRoZSBjdXJyZW50IGNlbGwgdmFsdWUgdG8gZmFsc2UuIGluIGNhc2UgaXQgaXMgdW5kZWZpbmVkIHRoZW4gd2UgdXNlIHRoZSBmaXJzdCBpdGVtIGluICoqYm9vbGVhbkZhbHNlVmFsdWVbXSoqXG4gKiB8ICoqYm9vbGVhblRydWVWYWx1ZVtdKiogICAgICAgfCB0cnVlKGJvb2wpICBcdHwgVGhlIG9wdGlvbnMgZGVzY3JpYmVzIHdoYXQgaXMgY29uc2lkZXJlZCBgdHJ1ZWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0fFxuICogfCAqKmJvb2xlYW5GYWxzZVZhbHVlW10qKiAgICAgIHwgZmFsc2UoYm9vbCkgXHR8IFRoZSBvcHRpb25zIGRlc2NyaWJlcyB3aGF0IGlzIGNvbnNpZGVyZWQgYGZhbHNlYFxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cbmNsYXNzIEJvb2xlYW5FZGl0b3IgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogIEBpbmhlcml0RG9jXG4gICAqL1xuICBpbml0KHBhcmFtcykge1xuICAgIGlmIChwYXJhbXMua2V5UHJlc3MgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gQm9vbGVhbihwYXJhbXMua2V5UHJlc3MpXG4gICAgfSBlbHNlIGlmIChwYXJhbXMuY2hhclByZXNzICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IEJvb2xlYW4ocGFyYW1zLmNoYXJQcmVzcylcbiAgICB9XG5cbiAgICB0aGlzLl90cnVlVmFsdWUgPSBbXS5jb25jYXQoXG4gICAgICB0aGlzLmdldE9wdGlvbignYm9vbGVhblRydWVWYWx1ZScsIHBhcmFtcywgW3RydWVdKVxuICAgIClcblxuICAgIHRoaXMuX2ZhbHNlVmFsdWUgPSBbXS5jb25jYXQoXG4gICAgICB0aGlzLmdldE9wdGlvbignYm9vbGVhbkZhbHNlVmFsdWUnLCBwYXJhbXMsIFtmYWxzZV0pXG4gICAgKVxuXG4gICAgdGhpcy5fcmV0dXJuVHJ1ZVZhbHVlID0gdGhpcy5nZXRPcHRpb24oXG4gICAgICAnYm9vbGVhblVzZWRUcnVlVmFsdWUnLFxuICAgICAgcGFyYW1zLFxuICAgICAgdGhpcy5fdHJ1ZVZhbHVlWzBdXG4gICAgKVxuICAgIHRoaXMuX3JldHVybkZhbHNlVmFsdWUgPSB0aGlzLmdldE9wdGlvbihcbiAgICAgICdib29sZWFuVXNlZEZhbHNlVmFsdWUnLFxuICAgICAgcGFyYW1zLFxuICAgICAgdGhpcy5fZmFsc2VWYWx1ZVswXVxuICAgIClcblxuICAgIHRoaXMuX3RydWVWYWx1ZSA9IHRoaXMuX3RydWVWYWx1ZS5tYXAoeCA9PiBTdHJpbmcoeCkpXG4gICAgdGhpcy5fZmFsc2VWYWx1ZSA9IHRoaXMuX2ZhbHNlVmFsdWUubWFwKHggPT4gU3RyaW5nKHgpKVxuXG4gICAgdGhpcy5mb2N1c0FmdGVyQXR0YWNoZWQgPSBwYXJhbXMuY2VsbFN0YXJ0ZWRFZGl0XG4gICAgaWYgKHRoaXMuZm9jdXNBZnRlckF0dGFjaGVkKSB7XG4gICAgICBsZXQga2V5UHJlc3NCYWNrc3BhY2VPckRlbGV0ZSA9XG4gICAgICAgIHBhcmFtcy5rZXlQcmVzcyA9PSAzMiB8fCBwYXJhbXMua2V5UHJlc3MgPT0gNDYgLy8gc3BhY2UgLy8gZGVsZXRlXG5cbiAgICAgIGlmIChrZXlQcmVzc0JhY2tzcGFjZU9yRGVsZXRlKSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gZmFsc2VcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLmNoYXJQcmVzcyAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHBhcmFtcy5jaGFyUHJlc3NcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gcGFyYW1zLnZhbHVlXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gcGFyYW1zLnZhbHVlXG4gICAgfVxuXG4gICAgdGhpcy5fdmFsdWUgPSB0aGlzLl9jb252ZXJ0VmFsdWUoXG4gICAgICB0aGlzLl92YWx1ZSxcbiAgICAgIHRoaXMuX3RydWVWYWx1ZSxcbiAgICAgIHRoaXMuX2ZhbHNlVmFsdWVcbiAgICApXG5cbiAgICB0aGlzLl9zd2l0Y2hlciA9IG5ldyBCb29sZWFuU3dpdGNoKHRoaXMuX3ZhbHVlLCBzd2l0Y2hlciA9PiB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX2NvbnZlcnRWYWx1ZShcbiAgICAgICAgc3dpdGNoZXIuaXNDaGVja2VkKCksXG4gICAgICAgIHRoaXMuX3RydWVWYWx1ZSxcbiAgICAgICAgdGhpcy5fZmFsc2VWYWx1ZVxuICAgICAgKVxuICAgIH0pXG4gICAgdGhpcy5fc3dpdGNoZXIuaW5pdChwYXJhbXMpXG4gIH1cblxuICAvKipcbiAgICogIEBpbmhlcml0RG9jXG4gICAqL1xuICBnZXRHdWkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N3aXRjaGVyLmdldEd1aSgpXG4gIH1cblxuICAvKipcbiAgICogIEBpbmhlcml0RG9jXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIHRoaXMuX3N3aXRjaGVyLmRlc3Ryb3koKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY2FsbGVkIG9uY2UgYWZ0ZXIgR1VJIGlzIGF0dGFjaGVkIHRvIERPTS5cbiAgICogTWFrZSBzdXJlIHRoZSBjb250YWluZXIgaXMgYWx3YXlzIGZvY3VzZWQgYW5kIGxpc3RlbmluZyB0byBrZXkgY2hhbmdlc1xuICAgKi9cbiAgYWZ0ZXJHdWlBdHRhY2hlZCgpIHtcbiAgICBpZiAodGhpcy5mb2N1c0FmdGVyQXR0YWNoZWQpIHtcbiAgICAgIHRoaXMuZm9jdXNJbigpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZmluYWwgdmFsdWUgdG8gdGhlIGdyaWQsIHRoZSByZXN1bHQgb2YgdGhlIGVkaXRpbmdcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn1cbiAgICovXG4gIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZSA/IHRoaXMuX3JldHVyblRydWVWYWx1ZSA6IHRoaXMuX3JldHVybkZhbHNlVmFsdWVcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNhbGxlZCBvbmNlIGFmdGVyIGluaXRpYWxpemVkIGFuZCByZXR1cm5zIGZhbHNlIHNvIHRoZSBlZGl0b3IgYXBwZWFycyBpbiB0aGUgY2VsbFxuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufSBhbHdheXMgZmFsc2VcbiAgICoqL1xuICBpc1BvcHVwKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIElmIGRvaW5nIGZ1bGwgcm93IGVkaXQsIHRoZW4gZ2V0cyBjYWxsZWQgd2hlbiB0YWJiaW5nIGludG8gdGhlIGNlbGwuXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAqL1xuICBmb2N1c0luKCkge1xuICAgIHRoaXMuX3N3aXRjaGVyLnNldERpc2FibGVkKGZhbHNlKVxuICAgIHRoaXMuX3N3aXRjaGVyLmZvY3VzKClcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLyoqXG4gICAqIElmIGRvaW5nIGZ1bGwgcm93IGVkaXQsIHRoZW4gZ2V0cyBjYWxsZWQgd2hlbiB0YWJiaW5nIG91dCBvZiB0aGUgY2VsbC5cbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn1cbiAgICovXG4gIGZvY3VzT3V0KCkge1xuICAgIHRoaXMuX3N3aXRjaGVyLnNldERpc2FibGVkKHRydWUpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IHZhbHVlIHRoZSBjdXJyZW50IGNlbGwgdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSB0cnVlVmFsdWUgdHJ1ZSB2YWx1ZSBhbGlhc1xuICAgKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IGZhbHNlVmFsdWUgZmFsc2UgdmFsdWUgYWxpYXNcbiAgICovXG4gIF9jb252ZXJ0VmFsdWUodmFsdWUsIHRydWVWYWx1ZSwgZmFsc2VWYWx1ZSkge1xuICAgIGNvbnN0IHZhbHVlQXNTdHJpbmcgPSBTdHJpbmcodmFsdWUpXG5cbiAgICByZXR1cm4gdHJ1ZVZhbHVlLmluZGV4T2YodmFsdWVBc1N0cmluZykgPiAtMVxuICAgICAgPyB0cnVlXG4gICAgICA6IGZhbHNlVmFsdWUuaW5kZXhPZih2YWx1ZUFzU3RyaW5nKSA+IC0xXG4gICAgICA/IGZhbHNlXG4gICAgICA6IHZhbHVlXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQm9vbGVhbkVkaXRvclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0Jvb2xlYW5FZGl0b3IvQm9vbGVhbkVkaXRvci5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvdHlwZS1idWlsdGlucyAqL1xuXG4vKipcbiAqIFRoZSBiYXNlIGNvbXBvbmVudCBjbGFzc1xuICpcbiAqIFRoaXMgY2xhc3MgaXMgdGhlIGFic3RyYWN0IGNsYXNzIHdoaWNoIGFsbCBjb21wb25lbnRzIHNob3VsZCB1c2VcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5jbGFzcyBDb21wb25lbnQge1xuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCBodG1sIGVsZW1lbnRcbiAgICpcbiAgICogQHR5cGUge0hUTUxFbGVtZW50fVxuICAgKi9cbiAgX2d1aSA9IG51bGxcblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAgICpcbiAgICogQHJldHVybiB2b2lkXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgaW5pdChwYXJhbXMpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IGRvZXMgbm90IGltcGxlbWVudCB0aGUgW2luaXRdIG1ldGhvZGBcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBET00gZWxlbWVudCBvZiB0aGUgY29tcG9uZW50LCB0aGlzIGlzIHdoYXQgdGhlIGdyaWQgcHV0cyBpbnRvIHRoZSBjZWxsXG4gICAqXG4gICAqIEByZXR1cm4ge0hUTUxFbGVtZW50fVxuICAgKi9cbiAgZ2V0R3VpKCkge1xuICAgIHJldHVybiB0aGlzLl9ndWlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkLiBJZiB5b3VyIGN1c3RvbSBjb21wb25lbnQgbmVlZHMgdG8gZG9cbiAgICogYW55IHJlc291cmNlIGNsZWFuaW5nIHVwLCBkbyBpdCBoZXJlLlxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICAvLyBwYXNzXG4gIH1cblxuICAvKipcbiAgICogRmluZCB0aGUgcmVxdWlyZWQgb3B0aW9uIHZhbHVlXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gd2lsbCB0cnkgdG8gZmluZCB0aGUgcGFzc2VkIG9wdGlvbidzIHZhbHVlIGluIHRoZSBmb2xsb3dpbmcgb3JkZXJcbiAgICpcbiAgICogIDEuIHBhcmFtc1xuICAgKiAgMi4gU2VhcmNoIGBwYXJhbXMuY29sRGVmYFxuICAgKiAgMy4gU2VhcmNoIGBwYXJhbXMuY29udGV4dC5BR3JpZENvbXBvbmVudHNNZXRhQ29uZmlnW0NPTFVNTl9JRF1gIG9yIGBwYXJhbXMuY29udGV4dC5tZXRhW0NPTFVNTl9JRF1gXG4gICAqICA0LiBTZWFyY2ggYHBhcmFtcy5jb250ZXh0LkFHcmlkQ29tcG9uZW50c01ldGFDb25maWdgIG9yIGBwYXJhbXMuY29udGV4dC5tZXRhYFxuICAgKiAgNS4gU2VhcmNoIGBwYXJhbXMuY29udGV4dGBcbiAgICogIDYuIElmIG5vbmUgZm91bmQgcmV0dXJuIHRoZSBmYWxsYmFja1xuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSB0aGUgbmFtZSBvZiB0aGUgb3B0aW9uXG4gICAqIEBwYXJhbSB7cGFyYW1zfSBwYXJhbXMgYW4gb2JqZWN0IHVzZWQgdG8gc2VhcmNoIGZvciB0aGUgb3B0aW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBmYWxsYmFjayBhIHZhbHVlIHRvIHJldHVybiBpbiBjYXNlIHRoZSBvcHRpb24gY2FuIG5vdCBiZSBmb3VuZFxuICAgKi9cbiAgZ2V0T3B0aW9uKG5hbWUsIHBhcmFtcywgZmFsbGJhY2sgPSBudWxsKSB7XG4gICAgbGV0IG9wdGlvblxuXG4gICAgaWYgKHBhcmFtcyAmJiBwYXJhbXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIG9wdGlvbiA9IHBhcmFtc1tuYW1lXVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0cnkgdG8gZmV0Y2ggZnJvbSB0aGUgY29sdW1uIGRlZiBmaXJzdFxuICAgICAgaWYgKFxuICAgICAgICBwYXJhbXMuaGFzT3duUHJvcGVydHkoJ2NvbERlZicpICYmXG4gICAgICAgIHBhcmFtcy5jb2xEZWYuaGFzT3duUHJvcGVydHkobmFtZSlcbiAgICAgICkge1xuICAgICAgICBvcHRpb24gPSBwYXJhbXMuY29sRGVmW25hbWVdXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0cnkgdG8gZmV0Y2ggZnJvbSBBR3JpZENvbXBvbmVudHNNZXRhQ29uZmlnfG1ldGEgaW4gdGhlIGNvbnRleHRcbiAgICAgICAgbGV0IEFHcmlkQ29tcG9uZW50c01ldGFDb25maWcgPSBudWxsXG4gICAgICAgIGlmIChwYXJhbXMuaGFzT3duUHJvcGVydHkoJ2NvbnRleHQnKSkge1xuICAgICAgICAgIEFHcmlkQ29tcG9uZW50c01ldGFDb25maWcgPVxuICAgICAgICAgICAgcGFyYW1zLmNvbnRleHQuQUdyaWRDb21wb25lbnRzTWV0YUNvbmZpZyB8fCBwYXJhbXMuY29udGV4dC5tZXRhXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgQUdyaWRDb21wb25lbnRzTWV0YUNvbmZpZyAmJlxuICAgICAgICAgIEFHcmlkQ29tcG9uZW50c01ldGFDb25maWcuaGFzT3duUHJvcGVydHkocGFyYW1zLmNvbHVtbi5jb2xJZCkgJiZcbiAgICAgICAgICBBR3JpZENvbXBvbmVudHNNZXRhQ29uZmlnW3BhcmFtcy5jb2x1bW4uY29sSWRdLmhhc093blByb3BlcnR5KG5hbWUpXG4gICAgICAgICkge1xuICAgICAgICAgIG9wdGlvbiA9IEFHcmlkQ29tcG9uZW50c01ldGFDb25maWdbcGFyYW1zLmNvbHVtbi5jb2xJZF1bbmFtZV1cbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBBR3JpZENvbXBvbmVudHNNZXRhQ29uZmlnICYmXG4gICAgICAgICAgQUdyaWRDb21wb25lbnRzTWV0YUNvbmZpZy5oYXNPd25Qcm9wZXJ0eShuYW1lKVxuICAgICAgICApIHtcbiAgICAgICAgICBvcHRpb24gPSBBR3JpZENvbXBvbmVudHNNZXRhQ29uZmlnW25hbWVdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gdHJ5IHRvIGZldGNoIGZyb20gdGhlIGNvbnRleHQgb2JqZWN0IGl0c2VsZlxuICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBwYXJhbXMuY29udGV4dFxuICAgICAgICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICAgIG9wdGlvbiA9IGNvbnRleHRbbmFtZV1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdHJ5IHRvIGNoZWNrIHBhcmFtcyBpdHNlbGYgb3IgZmFsbGJhY2sgdG8gZGVmYXVsdFxuICAgICAgICAgICAgb3B0aW9uID0gZmFsbGJhY2tcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZW9mIG9wdGlvbiAhPT0gJ3VuZGVmaW5lZCcgPyBvcHRpb24gOiBmYWxsYmFja1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBXaW5kb3cgSW5zdGFuY2VcbiAgICpcbiAgICogQHBhcmFtIHtwYXJhbXN9IHBhcmFtcyBhbiBvYmplY3QgdXNlZCB0byBzZWFyY2ggZm9yIHRoZSB3aW5kb3cgaW5zdGFuY2VcbiAgICpcbiAgICogQHJldHVybiB7V2luZG93fVxuICAgKi9cbiAgZ2V0V2luKHBhcmFtcykge1xuICAgIGNvbnN0IHdpbiA9IHRoaXMuZ2V0T3B0aW9uKCd3aW5kb3cnLCBwYXJhbXMpIHx8IHdpbmRvdyB8fCBudWxsXG5cbiAgICBpZiAoIXdpbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDdXJyZW50IGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgd2luZG93JylcbiAgICB9XG5cbiAgICByZXR1cm4gd2luXG4gIH1cblxuICAvKipcbiAgICogR2V0IGRvY3VtZW50IEluc3RhbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7cGFyYW1zfSBwYXJhbXMgYW4gb2JqZWN0IHVzZWQgdG8gc2VhcmNoIGZvciB0aGUgZG9jdW1lbnQgaW5zdGFuY2VcbiAgICpcbiAgICogQHJldHVybiB7SFRNTERvY3VtZW50fVxuICAgKi9cbiAgZ2V0RG9jKHBhcmFtcykge1xuICAgIGNvbnN0IGRvYyA9IHRoaXMuZ2V0T3B0aW9uKCdkb2N1bWVudCcsIHBhcmFtcykgfHwgZG9jdW1lbnQgfHwgbnVsbFxuXG4gICAgaWYgKCFkb2MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ3VycmVudCBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IGRvY3VtZW50JylcbiAgICB9XG5cbiAgICByZXR1cm4gZG9jXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9uZW50XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvQ29tcG9uZW50L0NvbXBvbmVudC5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGF1dG9iaW5kLCBvdmVycmlkZSB9IGZyb20gJ2NvcmUtZGVjb3JhdG9ycydcbmltcG9ydCBDb21wb25lbnQgZnJvbSAnLi4vQ29tcG9uZW50J1xuaW1wb3J0ICcuL3N0eWxlLnNjc3MnXG5cbi8qKlxuICogQm9vbGVhbiBSZW5kZXJlclxuICpcbiAqIFNpbXBsZSB0b2dnbGUgc3dpdGNoIHRvIGhhbmRsZSBib29sZWFuIHZhbHVlc1xuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cbmNsYXNzIEJvb2xlYW5Td2l0Y2ggZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogQ29uc3RydWN0IG5ldyBCb29sZWFuU3dpdGNoIENvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtpbml0aWFsVmFsdWUgPSBmYWxzZV0gdGhlIGRlZmF1bHQgc3RhdGUgLCBjaGVja2VkIG9yIHVuY2hlY2tlZFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbbGlzdGVuZXIgPSBudWxsXSBhIGxpc3RlbmVyIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBzdGF0ZSBpcyBjaGFuZ2VkXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihpbml0aWFsVmFsdWUgPSBmYWxzZSwgbGlzdGVuZXIgPSBudWxsKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuc2V0Q2hlY2tlZChpbml0aWFsVmFsdWUpXG4gICAgdGhpcy5zZXRMaXN0ZW5lcihsaXN0ZW5lcilcbiAgICB0aGlzLnNldERpc2FibGVkKGZhbHNlKVxuICB9XG5cbiAgLyoqXG4gICAqICBAaW5oZXJpdERvY1xuICAgKi9cbiAgQG92ZXJyaWRlXG4gIGluaXQocGFyYW1zKSB7XG4gICAgdGhpcy5fcGFyYW1zID0gcGFyYW1zXG4gICAgdGhpcy5fb25DbGljayA9IHRoaXMuX29uQ2xpY2suYmluZCh0aGlzKVxuICAgIHRoaXMuX29uS2V5ZG93biA9IHRoaXMuX29uS2V5ZG93bi5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLl9ndWkgPSB0aGlzLmdldERvYyhwYXJhbXMpLmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgdGhpcy5fZ3VpLmNsYXNzTmFtZSA9ICdib29sU3dpdGNoX193cmFwcGVyJ1xuICAgIHRoaXMuX2d1aS50YWJJbmRleCA9IC0xXG5cbiAgICB0aGlzLnJlbmRlcigpXG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIHRoZSBzd2l0Y2ggc2xpZGVyIGFuZCBoaWRkZW4gaW5wdXQuXG4gICAqL1xuICByZW5kZXIoKSB7XG4gICAgY29uc3QgZG9jID0gdGhpcy5nZXREb2ModGhpcy5fcGFyYW1zKVxuXG4gICAgY29uc3QgYm9vbFN3aXRjaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgYm9vbFN3aXRjaC5jbGFzc05hbWUgPSAnYm9vbFN3aXRjaCdcblxuICAgIC8vIGlucHV0XG4gICAgdGhpcy5faW5wdXQgPSBkb2MuY3JlYXRlRWxlbWVudCgnaW5wdXQnKVxuICAgIHRoaXMuX2lucHV0LmlkID0gYGVsLSR7TWF0aC5yYW5kb20oKX1gXG4gICAgdGhpcy5faW5wdXQubmFtZSA9ICdjaGVja2JveCdcbiAgICB0aGlzLl9pbnB1dC5jbGFzc05hbWUgPSAnYm9vbFN3aXRjaF9fY2hlY2tib3gnXG4gICAgdGhpcy5faW5wdXQudHlwZSA9ICdjaGVja2JveCdcbiAgICB0aGlzLl9pbnB1dC5jaGVja2VkID0gdGhpcy5pc0NoZWNrZWQoKVxuICAgIHRoaXMuX2lucHV0LmRpc2FibGVkID0gdGhpcy5pc0Rpc2FibGVkKClcbiAgICB0aGlzLl9pbnB1dC50YWJJbmRleCA9ICcwJ1xuXG4gICAgLy8gbGFiZWxcbiAgICBjb25zdCBsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJylcbiAgICBsYWJlbC5jbGFzc05hbWUgPSAnYm9vbFN3aXRjaF9fbGFiZWwnXG4gICAgbGFiZWwuZm9yID0gdGhpcy5faW5wdXQuaWRcbiAgICBsYWJlbC5pbm5lckhUTUwgPSAvKiBodG1sICovIGBcbiAgICAgIDxzcGFuIGNsYXNzPVwiYm9vbFN3aXRjaF9faW5uZXJcIj48L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cImJvb2xTd2l0Y2hfX3N3aXRjaFwiPjwvc3Bhbj5cbiAgICBgXG5cbiAgICAvLyBhdHRhY2hlIGlucHV0IGFuZCBzbGlkZXIgdG8gY29tcG9uZW50XG4gICAgYm9vbFN3aXRjaC5hcHBlbmRDaGlsZCh0aGlzLl9pbnB1dClcbiAgICBib29sU3dpdGNoLmFwcGVuZENoaWxkKGxhYmVsKVxuXG4gICAgYm9vbFN3aXRjaC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX29uQ2xpY2spXG4gICAgdGhpcy5fZ3VpLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleWRvd24pXG5cbiAgICB0aGlzLl9ndWkuYXBwZW5kQ2hpbGQoYm9vbFN3aXRjaClcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGluaGVyaXREb2NcbiAgICovXG4gIEBvdmVycmlkZVxuICBkZXN0cm95KCkge1xuICAgIGNvbnN0IGJvb2xTd2l0Y2ggPSB0aGlzLl9ndWkucXVlcnlTZWxlY3RvcignLmJvb2xTd2l0Y2gnKVxuICAgIGJvb2xTd2l0Y2gucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrKVxuICAgIHRoaXMuX2d1aS5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlkb3duKVxuICB9XG5cbiAgLyoqXG4gICAqIEZvY3VzIHRoZSBjb21wb25lbnRcbiAgICovXG4gIGZvY3VzKCkge1xuICAgIHRoaXMuX2d1aS5mb2N1cygpXG4gICAgdGhpcy5faW5wdXQuZm9jdXMoKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhIGxpc3RlbmVyIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBzd2l0Y2ggc3RhdGUgaXMgY2hhbmdlZFxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lclxuICAgKi9cbiAgc2V0TGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgICB0aGlzLl9saXN0ZW5lciA9IGxpc3RlbmVyXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsaXN0ZW5lciBpbnN0YW5jZSAsIGlmXG4gICAqXG4gICAqIEByZXR1cm4ge0Z1bmN0aW9ufG51bGx9XG4gICAqL1xuICBnZXRMaXN0ZW5lcigpIHtcbiAgICByZXR1cm4gdGhpcy5fbGlzdGVuZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgY2hlY2tlZFxuICAgKlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IHZhbHVlIHRydWUgdG8gY2hlY2sgLCBmYWxzZSB0byB1bmNoZWNrXG4gICAqL1xuICBzZXRDaGVja2VkKHZhbHVlKSB7XG4gICAgdGhpcy5fY2hlY2tlZCA9IHZhbHVlXG4gICAgaWYgKHRoaXMuX2lucHV0KSB7XG4gICAgICB0aGlzLl9pbnB1dC5jaGVja2VkID0gdmFsdWVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdGhlIGlmIHN3aXRjaCBpcyBjaGVja2VkXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59ICB0cnVlIHdoZW4gY2hlY2tlZCAsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgaXNDaGVja2VkKCkge1xuICAgIHJldHVybiB0aGlzLl9jaGVja2VkXG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlIHRoZSBjb21wb25lbnQgc3RhdGVcbiAgICovXG4gIHRvZ2dsZSgpIHtcbiAgICB0aGlzLnNldENoZWNrZWQoIXRoaXMuaXNDaGVja2VkKCkpXG4gIH1cblxuICAvKipcbiAgICogU2V0IGRpc2FibGVkXG4gICAqXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gdmFsdWUgdHJ1ZSB0byBkaXNhYmxlZCAsIGZhbHNlIHRvIGVuYWJsZVxuICAgKi9cbiAgc2V0RGlzYWJsZWQodmFsdWUpIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlXG4gICAgaWYgKHRoaXMuX2lucHV0KSB7XG4gICAgICB0aGlzLl9pbnB1dC5kaXNhYmxlZCA9IHZhbHVlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBzd2l0Y2ggaXMgZGlzYWJsZWRcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSB3aGVuIGRpc2FibGVkICwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBpc0Rpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZFxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IGNsaWNrIGxpc3RlbmVyIG9mIHRoZSBzd2l0Y2guIEl0IHdpbGwgdG9nZ2xlIHRoZSBzdGF0ZSBhbmQgZmlyZSBhbnkgcmVnaXN0ZXJlZCBsaXN0ZW5lclxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBlIHRoZSBldmVudCBvYmplY3RcbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBfb25DbGljayhlKSB7XG4gICAgaWYgKHRoaXMuX2Rpc2FibGVkKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICB0aGlzLnRvZ2dsZSgpXG5cbiAgICBpZiAodGhpcy5fbGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVyKHRoaXMpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IGtleSBsaXN0ZW5lciBvZiB0aGUgc3dpdGNoLiBJdCB3aWxsIHRvZ2dsZSB0aGUgc3RhdGUgdXNpbmcga2V5Ym9hcmQga2V5cyAobGVmdCAsIHJpZ2h0ICwgc3BhY2UpXG4gICAqIGFuZCBmaXJlIGFueSByZWdpc3RlcmVkIGxpc3RlbmVyXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGUgIHRoZSBldmVudCBvYmplY3RcbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vbktleWRvd24oZSkge1xuICAgIGlmICh0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgY29uc3Qga2V5ID0gZS53aGljaCB8fCBlLmtleUNvZGVcblxuICAgIC8vIHNwYWNlXG4gICAgaWYgKGtleSA9PSAzMikge1xuICAgICAgdGhpcy50b2dnbGUoKVxuICAgICAgaWYgKHRoaXMuX2xpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuX2xpc3RlbmVyKHRoaXMpXG4gICAgICB9XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICAgIC8vIHJpZ2h0XG4gICAgZWxzZSBpZiAoa2V5ID09IDM5KSB7XG4gICAgICB0aGlzLnNldENoZWNrZWQodHJ1ZSlcbiAgICAgIGlmICh0aGlzLl9saXN0ZW5lcikge1xuICAgICAgICB0aGlzLl9saXN0ZW5lcih0aGlzKVxuICAgICAgfVxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgICAvLyBsZWZ0XG4gICAgZWxzZSBpZiAoa2V5ID09IDM3KSB7XG4gICAgICB0aGlzLnNldENoZWNrZWQoZmFsc2UpXG4gICAgICBpZiAodGhpcy5fbGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5fbGlzdGVuZXIodGhpcylcbiAgICAgIH1cbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQm9vbGVhblN3aXRjaFxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0Jvb2xlYW5Td2l0Y2gvQm9vbGVhblN3aXRjaC5qcyIsImltcG9ydCB7IGRlY29yYXRlLCBjcmVhdGVEZWZhdWx0U2V0dGVyIH0gZnJvbSAnLi9wcml2YXRlL3V0aWxzJztcbmNvbnN0IHsgZGVmaW5lUHJvcGVydHkgfSA9IE9iamVjdDtcblxuZnVuY3Rpb24gaGFuZGxlRGVzY3JpcHRvcih0YXJnZXQsIGtleSwgZGVzY3JpcHRvcikge1xuICBjb25zdCB7IGNvbmZpZ3VyYWJsZSwgZW51bWVyYWJsZSwgaW5pdGlhbGl6ZXIsIHZhbHVlIH0gPSBkZXNjcmlwdG9yO1xuICByZXR1cm4ge1xuICAgIGNvbmZpZ3VyYWJsZSxcbiAgICBlbnVtZXJhYmxlLFxuXG4gICAgZ2V0KCkge1xuICAgICAgLy8gVGhpcyBoYXBwZW5zIGlmIHNvbWVvbmUgYWNjZXNzZXMgdGhlXG4gICAgICAvLyBwcm9wZXJ0eSBkaXJlY3RseSBvbiB0aGUgcHJvdG90eXBlXG4gICAgICBpZiAodGhpcyA9PT0gdGFyZ2V0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmV0ID0gaW5pdGlhbGl6ZXIgPyBpbml0aWFsaXplci5jYWxsKHRoaXMpIDogdmFsdWU7XG5cbiAgICAgIGRlZmluZVByb3BlcnR5KHRoaXMsIGtleSwge1xuICAgICAgICBjb25maWd1cmFibGUsXG4gICAgICAgIGVudW1lcmFibGUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogcmV0XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9LFxuXG4gICAgc2V0OiBjcmVhdGVEZWZhdWx0U2V0dGVyKGtleSlcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGF6eUluaXRpYWxpemUoLi4uYXJncykge1xuICByZXR1cm4gZGVjb3JhdGUoaGFuZGxlRGVzY3JpcHRvciwgYXJncyk7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1kZWNvcmF0b3JzL3NyYy9sYXp5LWluaXRpYWxpemUuanMiLCJcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmhlYWRcbiAgICAgICAgICAgICAgfTtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2FscztcblxuaWYobW9kdWxlLmhvdCkge1xuXHRtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIik7XG5cblx0XHRpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcblxuXHRcdHZhciBsb2NhbHMgPSAoZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0dmFyIGtleSwgaWR4ID0gMDtcblxuXHRcdFx0Zm9yKGtleSBpbiBhKSB7XG5cdFx0XHRcdGlmKCFiIHx8IGFba2V5XSAhPT0gYltrZXldKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGlkeCsrO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3Ioa2V5IGluIGIpIGlkeC0tO1xuXG5cdFx0XHRyZXR1cm4gaWR4ID09PSAwO1xuXHRcdH0oY29udGVudC5sb2NhbHMsIG5ld0NvbnRlbnQubG9jYWxzKSk7XG5cblx0XHRpZighbG9jYWxzKSB0aHJvdyBuZXcgRXJyb3IoJ0Fib3J0aW5nIENTUyBITVIgZHVlIHRvIGNoYW5nZWQgY3NzLW1vZHVsZXMgbG9jYWxzLicpO1xuXG5cdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHR9KTtcblxuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvQm9vbGVhblN3aXRjaC9zdHlsZS5zY3NzIiwiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2xpYi9jc3MtYmFzZS5qc1wiKShmYWxzZSk7XG4vLyBpbXBvcnRzXG5cblxuLy8gbW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCIuYWctY2VsbC1pbmxpbmUtZWRpdGluZyAuYm9vbFN3aXRjaF9fd3JhcHBlcnttYXJnaW46YXV0byAxMXB4fS5ib29sU3dpdGNoX193cmFwcGVye2Rpc3BsYXk6ZmxleDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2FsaWduLWl0ZW1zOmNlbnRlcjtvdXRsaW5lOm5vbmU7cGFkZGluZy1sZWZ0OjZweDtvdmVyZmxvdzpoaWRkZW47LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZX0uYm9vbFN3aXRjaHtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDo1NXB4Oy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmV9LmJvb2xTd2l0Y2hfX2NoZWNrYm94e2Rpc3BsYXk6bm9uZX0uYm9vbFN3aXRjaF9fbGFiZWx7ZGlzcGxheTpibG9jaztvdmVyZmxvdzpoaWRkZW47Y3Vyc29yOnBvaW50ZXI7Ym9yZGVyOjJweCBzb2xpZCB2YXIoLS1hZy1pbnB1dC1ib3JkZXItY29sb3IsIHZhcigtLWFnLWJvcmRlci1jb2xvciwgI2JhYmZjNykpO2JvcmRlci1yYWRpdXM6MjBweH0uYm9vbFN3aXRjaF9faW5uZXJ7ZGlzcGxheTpibG9jazt3aWR0aDoyMDAlO21hcmdpbi1sZWZ0Oi0xMDAlO3RyYW5zaXRpb246bWFyZ2luIDAuM3MgZWFzZS1pbiAwc30uYm9vbFN3aXRjaF9faW5uZXI6YmVmb3JlLC5ib29sU3dpdGNoX19pbm5lcjphZnRlcntkaXNwbGF5OmJsb2NrO2Zsb2F0OmxlZnQ7d2lkdGg6NTAlO2hlaWdodDoxNXB4O3BhZGRpbmc6MDtsaW5lLWhlaWdodDoxNXB4O2ZvbnQtc2l6ZToxNHB4O2NvbG9yOndoaXRlO2ZvbnQtZmFtaWx5OidTZWdvZSBVSSBTeW1ib2wnLCBUcmVidWNoZXQsIEFyaWFsLCBzYW5zLXNlcmlmO2ZvbnQtd2VpZ2h0OmJvbGQ7Ym94LXNpemluZzpib3JkZXItYm94fS5ib29sU3dpdGNoX19pbm5lcjpiZWZvcmV7Y29udGVudDonXFxcXDI3MTQnO3BhZGRpbmctbGVmdDoxMHB4O2JhY2tncm91bmQtY29sb3I6dmFyKC0tYWctY2hlY2tib3gtY2hlY2tlZC1jb2xvciwgdmFyKC0tYWctYWxwaW5lLWFjdGl2ZS1jb2xvciwgIzIxOTZmMykpO2NvbG9yOiNmZmZmZmZ9LmJvb2xTd2l0Y2hfX2lubmVyOmFmdGVye2NvbnRlbnQ6J1xcXFwyNzE4JztwYWRkaW5nLXJpZ2h0OjEwcHg7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjp2YXIoLS1hZy1pbnB1dC1ib3JkZXItY29sb3IsIHZhcigtLWFnLWJvcmRlci1jb2xvciwgI2JhYmZjNykpO3RleHQtYWxpZ246cmlnaHR9LmJvb2xTd2l0Y2hfX3N3aXRjaHtkaXNwbGF5OmJsb2NrO3dpZHRoOjE4cHg7bWFyZ2luOjFweDtiYWNrZ3JvdW5kOiNmZmZmZmY7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7cmlnaHQ6MzVweDtib3JkZXI6MnB4IHNvbGlkIHZhcigtLWFnLWlucHV0LWJvcmRlci1jb2xvciwgdmFyKC0tYWctYm9yZGVyLWNvbG9yLCAjYmFiZmM3KSk7Ym9yZGVyLXJhZGl1czoyMHB4O3RyYW5zaXRpb246YWxsIDAuM3MgZWFzZS1pbiAwc30uYm9vbFN3aXRjaF9fY2hlY2tib3g6Y2hlY2tlZCsuYm9vbFN3aXRjaF9fbGFiZWwgLmJvb2xTd2l0Y2hfX2lubmVye21hcmdpbi1sZWZ0OjB9LmJvb2xTd2l0Y2hfX2NoZWNrYm94OmNoZWNrZWQrLmJvb2xTd2l0Y2hfX2xhYmVsIC5ib29sU3dpdGNoX19zd2l0Y2h7cmlnaHQ6MHB4fVxcblwiLCBcIlwiXSk7XG5cbi8vIGV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIhLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvQm9vbGVhblN3aXRjaC9zdHlsZS5zY3NzXG4vLyBtb2R1bGUgaWQgPSA0OVxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSAyIDMiLCJcbi8qKlxuICogV2hlbiBzb3VyY2UgbWFwcyBhcmUgZW5hYmxlZCwgYHN0eWxlLWxvYWRlcmAgdXNlcyBhIGxpbmsgZWxlbWVudCB3aXRoIGEgZGF0YS11cmkgdG9cbiAqIGVtYmVkIHRoZSBjc3Mgb24gdGhlIHBhZ2UuIFRoaXMgYnJlYWtzIGFsbCByZWxhdGl2ZSB1cmxzIGJlY2F1c2Ugbm93IHRoZXkgYXJlIHJlbGF0aXZlIHRvIGFcbiAqIGJ1bmRsZSBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50IHBhZ2UuXG4gKlxuICogT25lIHNvbHV0aW9uIGlzIHRvIG9ubHkgdXNlIGZ1bGwgdXJscywgYnV0IHRoYXQgbWF5IGJlIGltcG9zc2libGUuXG4gKlxuICogSW5zdGVhZCwgdGhpcyBmdW5jdGlvbiBcImZpeGVzXCIgdGhlIHJlbGF0aXZlIHVybHMgdG8gYmUgYWJzb2x1dGUgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IHBhZ2UgbG9jYXRpb24uXG4gKlxuICogQSBydWRpbWVudGFyeSB0ZXN0IHN1aXRlIGlzIGxvY2F0ZWQgYXQgYHRlc3QvZml4VXJscy5qc2AgYW5kIGNhbiBiZSBydW4gdmlhIHRoZSBgbnBtIHRlc3RgIGNvbW1hbmQuXG4gKlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzcykge1xuICAvLyBnZXQgY3VycmVudCBsb2NhdGlvblxuICB2YXIgbG9jYXRpb24gPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5sb2NhdGlvbjtcblxuICBpZiAoIWxvY2F0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiZml4VXJscyByZXF1aXJlcyB3aW5kb3cubG9jYXRpb25cIik7XG4gIH1cblxuXHQvLyBibGFuayBvciBudWxsP1xuXHRpZiAoIWNzcyB8fCB0eXBlb2YgY3NzICE9PSBcInN0cmluZ1wiKSB7XG5cdCAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHZhciBiYXNlVXJsID0gbG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKyBsb2NhdGlvbi5ob3N0O1xuICB2YXIgY3VycmVudERpciA9IGJhc2VVcmwgKyBsb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9cXC9bXlxcL10qJC8sIFwiL1wiKTtcblxuXHQvLyBjb252ZXJ0IGVhY2ggdXJsKC4uLilcblx0Lypcblx0VGhpcyByZWd1bGFyIGV4cHJlc3Npb24gaXMganVzdCBhIHdheSB0byByZWN1cnNpdmVseSBtYXRjaCBicmFja2V0cyB3aXRoaW5cblx0YSBzdHJpbmcuXG5cblx0IC91cmxcXHMqXFwoICA9IE1hdGNoIG9uIHRoZSB3b3JkIFwidXJsXCIgd2l0aCBhbnkgd2hpdGVzcGFjZSBhZnRlciBpdCBhbmQgdGhlbiBhIHBhcmVuc1xuXHQgICAoICA9IFN0YXJ0IGEgY2FwdHVyaW5nIGdyb3VwXG5cdCAgICAgKD86ICA9IFN0YXJ0IGEgbm9uLWNhcHR1cmluZyBncm91cFxuXHQgICAgICAgICBbXikoXSAgPSBNYXRjaCBhbnl0aGluZyB0aGF0IGlzbid0IGEgcGFyZW50aGVzZXNcblx0ICAgICAgICAgfCAgPSBPUlxuXHQgICAgICAgICBcXCggID0gTWF0Y2ggYSBzdGFydCBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgKD86ICA9IFN0YXJ0IGFub3RoZXIgbm9uLWNhcHR1cmluZyBncm91cHNcblx0ICAgICAgICAgICAgICAgICBbXikoXSsgID0gTWF0Y2ggYW55dGhpbmcgdGhhdCBpc24ndCBhIHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICAgICAgfCAgPSBPUlxuXHQgICAgICAgICAgICAgICAgIFxcKCAgPSBNYXRjaCBhIHN0YXJ0IHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICAgICAgICAgIFteKShdKiAgPSBNYXRjaCBhbnl0aGluZyB0aGF0IGlzbid0IGEgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICAgICBcXCkgID0gTWF0Y2ggYSBlbmQgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICkgID0gRW5kIEdyb3VwXG4gICAgICAgICAgICAgICpcXCkgPSBNYXRjaCBhbnl0aGluZyBhbmQgdGhlbiBhIGNsb3NlIHBhcmVuc1xuICAgICAgICAgICkgID0gQ2xvc2Ugbm9uLWNhcHR1cmluZyBncm91cFxuICAgICAgICAgICogID0gTWF0Y2ggYW55dGhpbmdcbiAgICAgICApICA9IENsb3NlIGNhcHR1cmluZyBncm91cFxuXHQgXFwpICA9IE1hdGNoIGEgY2xvc2UgcGFyZW5zXG5cblx0IC9naSAgPSBHZXQgYWxsIG1hdGNoZXMsIG5vdCB0aGUgZmlyc3QuICBCZSBjYXNlIGluc2Vuc2l0aXZlLlxuXHQgKi9cblx0dmFyIGZpeGVkQ3NzID0gY3NzLnJlcGxhY2UoL3VybFxccypcXCgoKD86W14pKF18XFwoKD86W14pKF0rfFxcKFteKShdKlxcKSkqXFwpKSopXFwpL2dpLCBmdW5jdGlvbihmdWxsTWF0Y2gsIG9yaWdVcmwpIHtcblx0XHQvLyBzdHJpcCBxdW90ZXMgKGlmIHRoZXkgZXhpc3QpXG5cdFx0dmFyIHVucXVvdGVkT3JpZ1VybCA9IG9yaWdVcmxcblx0XHRcdC50cmltKClcblx0XHRcdC5yZXBsYWNlKC9eXCIoLiopXCIkLywgZnVuY3Rpb24obywgJDEpeyByZXR1cm4gJDE7IH0pXG5cdFx0XHQucmVwbGFjZSgvXicoLiopJyQvLCBmdW5jdGlvbihvLCAkMSl7IHJldHVybiAkMTsgfSk7XG5cblx0XHQvLyBhbHJlYWR5IGEgZnVsbCB1cmw/IG5vIGNoYW5nZVxuXHRcdGlmICgvXigjfGRhdGE6fGh0dHA6XFwvXFwvfGh0dHBzOlxcL1xcL3xmaWxlOlxcL1xcL1xcL3xcXHMqJCkvaS50ZXN0KHVucXVvdGVkT3JpZ1VybCkpIHtcblx0XHQgIHJldHVybiBmdWxsTWF0Y2g7XG5cdFx0fVxuXG5cdFx0Ly8gY29udmVydCB0aGUgdXJsIHRvIGEgZnVsbCB1cmxcblx0XHR2YXIgbmV3VXJsO1xuXG5cdFx0aWYgKHVucXVvdGVkT3JpZ1VybC5pbmRleE9mKFwiLy9cIikgPT09IDApIHtcblx0XHQgIFx0Ly9UT0RPOiBzaG91bGQgd2UgYWRkIHByb3RvY29sP1xuXHRcdFx0bmV3VXJsID0gdW5xdW90ZWRPcmlnVXJsO1xuXHRcdH0gZWxzZSBpZiAodW5xdW90ZWRPcmlnVXJsLmluZGV4T2YoXCIvXCIpID09PSAwKSB7XG5cdFx0XHQvLyBwYXRoIHNob3VsZCBiZSByZWxhdGl2ZSB0byB0aGUgYmFzZSB1cmxcblx0XHRcdG5ld1VybCA9IGJhc2VVcmwgKyB1bnF1b3RlZE9yaWdVcmw7IC8vIGFscmVhZHkgc3RhcnRzIHdpdGggJy8nXG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlIHRvIGN1cnJlbnQgZGlyZWN0b3J5XG5cdFx0XHRuZXdVcmwgPSBjdXJyZW50RGlyICsgdW5xdW90ZWRPcmlnVXJsLnJlcGxhY2UoL15cXC5cXC8vLCBcIlwiKTsgLy8gU3RyaXAgbGVhZGluZyAnLi8nXG5cdFx0fVxuXG5cdFx0Ly8gc2VuZCBiYWNrIHRoZSBmaXhlZCB1cmwoLi4uKVxuXHRcdHJldHVybiBcInVybChcIiArIEpTT04uc3RyaW5naWZ5KG5ld1VybCkgKyBcIilcIjtcblx0fSk7XG5cblx0Ly8gc2VuZCBiYWNrIHRoZSBmaXhlZCBjc3Ncblx0cmV0dXJuIGZpeGVkQ3NzO1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL3VybHMuanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgQm9vbGVhblJlbmRlcmVyIGZyb20gJy4vQm9vbGVhblJlbmRlcmVyJ1xuXG5leHBvcnQgZGVmYXVsdCBCb29sZWFuUmVuZGVyZXJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9Cb29sZWFuUmVuZGVyZXIvaW5kZXguanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgQ29tcG9uZW50IGZyb20gJy4uL0NvbXBvbmVudCdcbmltcG9ydCBCb29sZWFuU3dpdGNoIGZyb20gJy4uL0Jvb2xlYW5Td2l0Y2gnXG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvdHlwZS1idWlsdGlucyAqL1xuXG4vKipcbiAqIEJvb2xlYW5zIFJlbmRlcmVyXG4gKlxuICogSGFuZGxlIGJvb2xlYW4gdmFsdWVzIFJlbmRlcmluZ1xuICpcbiAqICMjIE9wdGlvbnNcbiAqXG4gKiB8IE5hbWUgICAgICAgICAgICAgICAgICBcdHwgRGVmYXVsdCAgICAgXHR8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHR8Oi0tLS0tLS0tLS0tLS06fC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAqKmJvb2xlYW5UcnVlUmVuZGVyVmFsdWUqKiAgXHR8IHN3aXRjaCAgICAgIFx0fCBUaGUgb3B0aW9uIGNvbnRyb2xzIGhvdyB0byByZW5kZXIgYHRydWVgIHZhbHVlcy4gPGJyPiAqKnN3aXRjaCoqIGlzIGEgc3BlY2lhbCB2YWx1ZSB1c2VkIHRvIHJlbmRlciB0cnVlIHZhbHVlcyBhcyBhIHN3aXRjaCBjb21wb25lbnQgIFx0fFxuICogfCAqKmJvb2xlYW5GYWxzZVJlbmRlclZhbHVlKiogXHR8IHN3aXRjaCAgICAgIFx0fCBUaGUgb3B0aW9uIGNvbnRyb2xzIGhvdyB0byByZW5kZXIgYGZhbHNlYCB2YWx1ZXMuIDxicj4gKipzd2l0Y2gqKiBpcyBhIHNwZWNpYWwgdmFsdWUgdXNlZCB0byByZW5kZXIgdHJ1ZSB2YWx1ZXMgYXMgYSBzd2l0Y2ggY29tcG9uZW50IFx0fFxuICogfCAqKmJvb2xlYW5UcnVlVmFsdWVbXSoqICAgICAgIHwgdHJ1ZShib29sKSAgXHR8IFRoZSBvcHRpb25zIGRlc2NyaWJlcyB3aGF0IGlzIGNvbnNpZGVyZWQgYHRydWVgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdHxcbiAqIHwgKipib29sZWFuRmFsc2VWYWx1ZVtdKiogICAgICB8IGZhbHNlKGJvb2wpIFx0fCBUaGUgb3B0aW9ucyBkZXNjcmliZXMgd2hhdCBpcyBjb25zaWRlcmVkIGBmYWxzZWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR8XG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqL1xuY2xhc3MgQm9vbGVhblJlbmRlcmVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBuZXcgQm9vbGVhblJlbmRlcmVyXG4gICAqL1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpXG5cbiAgICAvLyB3aWxsIHRoaXMgYWZmZWN0IEJCaiBidWkgP1xuICAgIHRoaXMuX2d1aSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKVxuICAgIHRoaXMuX2d1aS5jbGFzc05hbWUgPSAnYm9vbFJlbmRlcmVyJ1xuICAgIHRoaXMuX2d1aS5zdHlsZS5mb250RmFtaWx5ID1cbiAgICAgICdcIlNlZ29lIFVJIFN5bWJvbFwiLFRyZWJ1Y2hldCwgQXJpYWwsIHNhbnMtc2VyaWYnXG4gIH1cblxuICAvKipcbiAgICogIEBpbmhlcml0RG9jXG4gICAqL1xuICBpbml0KHBhcmFtcykge1xuICAgIHRoaXMucmVmcmVzaChwYXJhbXMsIHRydWUpXG4gIH1cblxuICAvKipcbiAgICogIEBpbmhlcml0RG9jXG4gICAqL1xuICBnZXRHdWkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2d1aVxuICB9XG5cbiAgLyoqXG4gICAqICBAaW5oZXJpdERvY1xuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5fc3dpdGNoZXIpIHtcbiAgICAgIHRoaXMuX3N3aXRjaGVyLmRlc3Ryb3koKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoIHRoZSBjZWxsXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgY2VsbCByZW5kZXJlciBwYXJhbXNcbiAgICogQHBhcmFtIHtCb29sZWFufSBpc0luaXQgdHJ1ZSB3aGVuIHRoaXMgbWV0aG9kIGlzIGJlaW5nIGNhbGxlZCBpbiBgaW5pdGAgcGhhc2UgLCBmYWxzZSBvdGhlcndpc2VcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgcmVmcmVzaCBzdWNjZWVkZWQsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgcmVmcmVzaChwYXJhbXMsIGlzSW5pdCkge1xuICAgIGxldCB2YWx1ZSA9IHBhcmFtcy52YWx1ZUZvcm1hdHRlZCA/IHBhcmFtcy52YWx1ZUZvcm1hdHRlZCA6IHBhcmFtcy52YWx1ZVxuXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMuX2d1aS5pbm5lckhUTUwgPSAnJ1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSlcbiAgICAgIGNvbnN0IGJvb2xlYW5UcnVlUmVuZGVyVmFsdWUgPSBTdHJpbmcoXG4gICAgICAgIHRoaXMuZ2V0T3B0aW9uKCdib29sZWFuVHJ1ZVJlbmRlclZhbHVlJywgcGFyYW1zLCAnc3dpdGNoJylcbiAgICAgIClcbiAgICAgIGNvbnN0IGJvb2xlYW5GYWxzZVJlbmRlclZhbHVlID0gU3RyaW5nKFxuICAgICAgICB0aGlzLmdldE9wdGlvbignYm9vbGVhbkZhbHNlUmVuZGVyVmFsdWUnLCBwYXJhbXMsICdzd2l0Y2gnKVxuICAgICAgKVxuICAgICAgY29uc3QgYm9vbGVhblRydWVWYWx1ZSA9IFtdXG4gICAgICAgIC5jb25jYXQodGhpcy5nZXRPcHRpb24oJ2Jvb2xlYW5UcnVlVmFsdWUnLCBwYXJhbXMsIFt0cnVlXSkpXG4gICAgICAgIC5tYXAoeCA9PiBTdHJpbmcoeCkpXG4gICAgICBjb25zdCBib29sZWFuRmFsc2VWYWx1ZSA9IFtdXG4gICAgICAgIC5jb25jYXQodGhpcy5nZXRPcHRpb24oJ2Jvb2xlYW5GYWxzZVZhbHVlJywgcGFyYW1zLCBbZmFsc2VdKSlcbiAgICAgICAgLm1hcCh4ID0+IFN0cmluZyh4KSlcblxuICAgICAgLy8gaGFuZGxlIHRydWUgdmFsdWVzXG4gICAgICBpZiAoYm9vbGVhblRydWVWYWx1ZS5pbmRleE9mKHZhbHVlKSA+IC0xKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhYm9vbGVhblRydWVSZW5kZXJWYWx1ZS5sZW5ndGggfHxcbiAgICAgICAgICBib29sZWFuVHJ1ZVJlbmRlclZhbHVlID09PSAnc3dpdGNoJ1xuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBzd2l0Y2hlciA9IHRoaXMuX2dldFN3aXRjaGVyKHBhcmFtcylcbiAgICAgICAgICBzd2l0Y2hlci5zZXRDaGVja2VkKHRydWUpXG4gICAgICAgICAgdGhpcy5fZ3VpLmlubmVySFRNTCA9ICcnXG4gICAgICAgICAgdGhpcy5fZ3VpLmFwcGVuZENoaWxkKHN3aXRjaGVyLmdldEd1aSgpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX2d1aS5pbm5lckhUTUwgPSBib29sZWFuVHJ1ZVJlbmRlclZhbHVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGhhbmRsZSBmYWxzZSB2YWx1ZXNcbiAgICAgIGVsc2UgaWYgKGJvb2xlYW5GYWxzZVZhbHVlLmluZGV4T2YodmFsdWUpID4gLTEpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFib29sZWFuRmFsc2VSZW5kZXJWYWx1ZS5sZW5ndGggfHxcbiAgICAgICAgICBib29sZWFuRmFsc2VSZW5kZXJWYWx1ZSA9PT0gJ3N3aXRjaCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3Qgc3dpdGNoZXIgPSB0aGlzLl9nZXRTd2l0Y2hlcihwYXJhbXMpXG4gICAgICAgICAgc3dpdGNoZXIuc2V0Q2hlY2tlZChmYWxzZSlcbiAgICAgICAgICB0aGlzLl9ndWkuaW5uZXJIVE1MID0gJydcbiAgICAgICAgICB0aGlzLl9ndWkuYXBwZW5kQ2hpbGQoc3dpdGNoZXIuZ2V0R3VpKCkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fZ3VpLmlubmVySFRNTCA9IGJvb2xlYW5GYWxzZVJlbmRlclZhbHVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2d1aS5pbm5lckhUTUwgPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKipcbiAgICogR2V0IHN3aXRjaCBpbnN0YW5jZSBpZiBhdmFpbGFibGUgLCBvciBjcmVhdGUgaXQgb3RoZXJ3aXNlXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhblN3aXRjaH0gc3dpdGNoIGluc3RhbmNlXG4gICAqL1xuICBfZ2V0U3dpdGNoZXIocGFyYW1zKSB7XG4gICAgaWYgKCF0aGlzLl9zd2l0Y2hlcikge1xuICAgICAgdGhpcy5fc3dpdGNoZXIgPSBuZXcgQm9vbGVhblN3aXRjaCgpXG4gICAgICB0aGlzLl9zd2l0Y2hlci5zZXREaXNhYmxlZCh0cnVlKVxuICAgICAgdGhpcy5fc3dpdGNoZXIuaW5pdChwYXJhbXMpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3N3aXRjaGVyXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQm9vbGVhblJlbmRlcmVyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvQm9vbGVhblJlbmRlcmVyL0Jvb2xlYW5SZW5kZXJlci5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBCb29sZWFuRmlsdGVyIGZyb20gJy4vQm9vbGVhbkZpbHRlcidcblxuZXhwb3J0IGRlZmF1bHQgQm9vbGVhbkZpbHRlclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0Jvb2xlYW5GaWx0ZXIvaW5kZXguanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBhdXRvYmluZCwgb3ZlcnJpZGUgfSBmcm9tICdjb3JlLWRlY29yYXRvcnMnXG5pbXBvcnQgQ29tcG9uZW50IGZyb20gJy4uL0NvbXBvbmVudCdcbmltcG9ydCAnLi9zdHlsZS5zY3NzJ1xuXG5jb25zdCB0b1RpdGxlQ2FzZSA9IHBocmFzZSA9PiB7XG4gIHJldHVybiBwaHJhc2VcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5zcGxpdCgnICcpXG4gICAgLm1hcCh3b3JkID0+IHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpKVxuICAgIC5qb2luKCcgJylcbn1cblxuY29uc3Qgc3RyaXBIVE1MID0gaHRtbCA9PiB7XG4gIGNvbnN0IHRtcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpXG4gIHRtcC5pbm5lckhUTUwgPSBodG1sXG4gIHJldHVybiB0bXAudGV4dENvbnRlbnQgfHwgdG1wLmlubmVyVGV4dCB8fCAnJ1xufVxuXG4vKipcbiAqIEJvb2xlYW5zIEZpbHRlclxuICpcbiAqIEhhbmRsZSBib29sZWFuIHZhbHVlcyBGaWx0ZXJpbmdcbiAqXG4gKiAjIyBPcHRpb25zXG4gKlxuICogfCBOYW1lICAgICAgICAgICAgICAgICAgXHR8IERlZmF1bHQgICAgIFx0fCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx0fDotLS0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgKipib29sZWFuVXNlZFRydWVWYWx1ZSoqICAgfCB1bmRlZmluZWQgICAgfCB0aGUgdmFsdWUgdG8gdXNlIHdoZW4gdGhlIGZpbHRlciBkaXNwbGF5cyB0aGUgdHJ1ZSBzdGF0ZSAuIGluIGNhc2UgaXQgaXMgdW5kZWZpbmVkIHRoZW4gd2UgdXNlIHRoZSBmaXJzdCBpdGVtIGluICoqYm9vbGVhblRydWVWYWx1ZVtdKipcbiAqIHwgKipib29sZWFuVXNlZEZhbHNlVmFsdWUqKiAgIHwgdW5kZWZpbmVkICAgIHwgdGhlIHZhbHVlIHRvIHVzZSB3aGVuIHRoZSBmaWx0ZXIgZGlzcGxheXMgdGhlIGZhbHNlIHN0YXRlLiBpbiBjYXNlIGl0IGlzIHVuZGVmaW5lZCB0aGVuIHdlIHVzZSB0aGUgZmlyc3QgaXRlbSBpbiAqKmJvb2xlYW5GYWxzZVZhbHVlW10qKlxuICogfCAqKmJvb2xlYW5UcnVlVmFsdWVbXSoqICAgICAgIHwgdHJ1ZShib29sKSAgXHR8IFRoZSBvcHRpb25zIGRlc2NyaWJlcyB3aGF0IGlzIGNvbnNpZGVyZWQgYHRydWVgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdHxcbiAqIHwgKipib29sZWFuRmFsc2VWYWx1ZVtdKiogICAgICB8IGZhbHNlKGJvb2wpIFx0fCBUaGUgb3B0aW9ucyBkZXNjcmliZXMgd2hhdCBpcyBjb25zaWRlcmVkIGBmYWxzZWBcbiAqIHwgKipjbGVhckJ1dHRvbioqICAgfCBmYWxzZSAgICB8ICBTZXQgdG8gdHJ1ZSB0byBoYXZlIHRoZSBmaWx0ZXIgdXNlIGEgQ2xlYXIgYnV0dG9uLiBUaGUgQ2xlYXIgYnV0dG9uIHdpbGwgY2xlYXIgdGhlIChmb3JtKSBkZXRhaWxzIG9mIHRoZSBmaWx0ZXIgd2l0aG91dCByZW1vdmluZyBhbnkgYWN0aXZlIGZpbHRlcnMgb24gdGhlIGNvbHVtbi5cbiAqIHwgKiphcHBseUJ1dHRvbioqICAgfCBmYWxzZSAgICB8ICBTZXQgdG8gdHJ1ZSB0byBoYXZlIHRoZSBmaWx0ZXIgdXNlIGFuIEFwcGx5IGJ1dHRvbi4gSWYgdGhlIEFwcGx5IGJ1dHRvbiBpcyBwcmVzZW50LCB0aGVuIHRoZSBmaWx0ZXIgaXMgb25seSBhcHBsaWVkIGFmdGVyIHRoZSB1c2VyIGhpdHMgdGhlIEFwcGx5IGJ1dHRvbi5cbiAqIHwgKipyZXNldEJ1dHRvbioqICAgfCBmYWxzZSAgICB8ICBTZXQgdG8gdHJ1ZSB0byBoYXZlIHRoZSBmaWx0ZXIgdXNlIGEgUmVzZXQgYnV0dG9uLiBUaGUgUmVzZXQgYnV0dG9uIHdpbGwgY2xlYXIgdGhlIGRldGFpbHMgb2YgdGhlIGZpbHRlciBhbmQgYW55IGFjdGl2ZSBmaWx0ZXJzIG9uIHRoYXQgY29sdW1uLlxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cbmNsYXNzIEJvb2xlYW5GaWx0ZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogVHJ1ZSAsIGZhbHNlIHRyYW5zbGF0aW9uXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBfYm9vbGVhbkZpbHRlclRyYW5zbGF0aW9uID0ge31cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBuZXcgQm9vbGVhbkZpbHRlclxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpcy5fZ3VpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICB0aGlzLl9ndWkuY2xhc3NOYW1lID0gJ2Jvb2xlYW5GaWx0ZXIgYWctZmlsdGVyLWJvZHktd3JhcHBlcidcbiAgICB0aGlzLl9ndWkudGFiSW5kZXggPSAnMCdcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgQG92ZXJyaWRlXG4gIGluaXQocGFyYW1zKSB7XG4gICAgY29uc3QgdHJhbnNsYXRlID0gcGFyYW1zLmFwaS5ncmlkT3B0aW9uc1dyYXBwZXIuZ2V0TG9jYWxlVGV4dEZ1bmMoKVxuICAgIGNvbnN0IGlzQ2xlYXJGaWx0ZXIgPSB0aGlzLmdldE9wdGlvbignY2xlYXJCdXR0b24nLCBwYXJhbXMsIGZhbHNlKVxuICAgIGNvbnN0IGlzUmVzZXRCdXR0b24gPSB0aGlzLmdldE9wdGlvbigncmVzZXRCdXR0b24nLCBwYXJhbXMsIGZhbHNlKVxuICAgIGNvbnN0IGlzQXBwbHlCdXR0b24gPSB0aGlzLmdldE9wdGlvbignYXBwbHlCdXR0b24nLCBwYXJhbXMsIGZhbHNlKVxuXG4gICAgdGhpcy5fdHJ1ZVZhbHVlID0gW11cbiAgICAgIC5jb25jYXQodGhpcy5nZXRPcHRpb24oJ2Jvb2xlYW5UcnVlVmFsdWUnLCBwYXJhbXMsIFt0cnVlXSkpXG4gICAgICAubWFwKHggPT4gU3RyaW5nKHgpKVxuXG4gICAgdGhpcy5fZmFsc2VWYWx1ZSA9IFtdXG4gICAgICAuY29uY2F0KHRoaXMuZ2V0T3B0aW9uKCdib29sZWFuRmFsc2VWYWx1ZScsIHBhcmFtcywgW2ZhbHNlXSkpXG4gICAgICAubWFwKHggPT4gU3RyaW5nKHgpKVxuXG4gICAgdGhpcy5fdXNlZFRydWVWYWx1ZSA9IFN0cmluZyhcbiAgICAgIHRoaXMuZ2V0T3B0aW9uKCdib29sZWFuVXNlZFRydWVWYWx1ZScsIHBhcmFtcywgdGhpcy5fdHJ1ZVZhbHVlWzBdKVxuICAgIClcblxuICAgIHRoaXMuX3VzZWRGYWxzZVZhbHVlID0gU3RyaW5nKFxuICAgICAgdGhpcy5nZXRPcHRpb24oJ2Jvb2xlYW5Vc2VkRmFsc2VWYWx1ZScsIHBhcmFtcywgdGhpcy5fZmFsc2VWYWx1ZVswXSlcbiAgICApXG5cbiAgICB0aGlzLl9ib29sZWFuRmlsdGVyVHJhbnNsYXRpb24gPSB0aGlzLmdldE9wdGlvbihcbiAgICAgICdib29sZWFuRmlsdGVyVHJhbnNsYXRpb24nLFxuICAgICAgcGFyYW1zLFxuICAgICAge1xuICAgICAgICB0cnVlOiB0cmFuc2xhdGUoXG4gICAgICAgICAgJ2Jvb2xlYW5UcnVlJyxcbiAgICAgICAgICB0b1RpdGxlQ2FzZShTdHJpbmcodGhpcy5fdXNlZFRydWVWYWx1ZSkpXG4gICAgICAgICksXG4gICAgICAgIGZhbHNlOiB0cmFuc2xhdGUoXG4gICAgICAgICAgJ2Jvb2xlYW5GYWxzZScsXG4gICAgICAgICAgdG9UaXRsZUNhc2UoU3RyaW5nKHRoaXMuX3VzZWRGYWxzZVZhbHVlKSlcbiAgICAgICAgKSxcbiAgICAgICAgcmVzZXQ6IHRyYW5zbGF0ZShcbiAgICAgICAgICAnYm9vbGVhblJlc2V0JyxcbiAgICAgICAgICB0cmFuc2xhdGUoJ3Jlc2V0RmlsdGVyJywgJ1Jlc2V0IEZpbHRlcicpXG4gICAgICAgICksXG4gICAgICB9XG4gICAgKVxuXG4gICAgdGhpcy5fcGFyYW1zID0gcGFyYW1zXG4gICAgdGhpcy5fZmlsdGVyVGV4dCA9IG51bGxcblxuICAgIHRoaXMuX29uUmFkaW9DaGFuZ2UgPSB0aGlzLl9vblJhZGlvQ2hhbmdlLmJpbmQodGhpcywgaXNBcHBseUJ1dHRvbilcblxuICAgIC8vIGNyZWF0ZSBib2R5XG4gICAgY29uc3QgYm9keSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgYm9keS5jbGFzc05hbWUgPSAnYm9vbGVhbkZpbHRlcl9fYm9keSBhZy1maWx0ZXItYm9keSdcbiAgICBib2R5LnN0eWxlLnBhZGRpbmcgPSAnNXB4IDE1cHgnXG4gICAgYm9keS5pbm5lckhUTUwgPSAvKiBodG1sICovIGBcbiAgICAgIDxkaXYgY2xhc3M9XCJib29sZWFuRmlsdGVyX19ib2R5X19sYWJlbHNcIj5cblxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJhZy1pbnB1dC1maWVsZC1sYWJlbCBhZy1sYWJlbCBhZy1yYWRpby1idXR0b24tbGFiZWxcIj4gICAgICAgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWctd3JhcHBlci10cnVlIGFnLXdyYXBwZXIgYWctaW5wdXQtd3JhcHBlciBhZy1yYWRpby1idXR0b24taW5wdXQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJ0cnVlLWlucHV0IGFnLWlucHV0LWZpZWxkLWlucHV0IGFnLXJhZGlvLWJ1dHRvbi1pbnB1dFwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJib29sZWFuXCIgdmFsdWU9XCJ0cnVlXCIvPiAgICAgICAgICAgICAgXG4gICAgICAgICAgPC9kaXY+IFxuICAgICAgICAgIDxzcGFuPiR7dGhpcy5fYm9vbGVhbkZpbHRlclRyYW5zbGF0aW9uLnRydWV9PC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuXG5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYWctaW5wdXQtZmllbGQtbGFiZWwgYWctbGFiZWwgYWctcmFkaW8tYnV0dG9uLWxhYmVsXCI+ICAgICAgIFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFnLXdyYXBwZXItZmFsc2UgYWctd3JhcHBlciBhZy1pbnB1dC13cmFwcGVyIGFnLXJhZGlvLWJ1dHRvbi1pbnB1dC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZhbHNlLWlucHV0IGFnLWlucHV0LWZpZWxkLWlucHV0IGFnLXJhZGlvLWJ1dHRvbi1pbnB1dFwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJib29sZWFuXCIgdmFsdWU9XCJmYWxzZVwiLz4gICAgICAgICAgICAgIFxuICAgICAgICAgIDwvZGl2PiBcbiAgICAgICAgICA8c3Bhbj4ke3RoaXMuX2Jvb2xlYW5GaWx0ZXJUcmFuc2xhdGlvbi5mYWxzZX08L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgXG4gICAgICAgICAgJHtcbiAgICAgICAgICAgICFpc1Jlc2V0QnV0dG9uXG4gICAgICAgICAgICAgID8gLyogaHRtbCAqLyBgXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImFnLWlucHV0LWZpZWxkLWxhYmVsIGFnLWxhYmVsIGFnLXJhZGlvLWJ1dHRvbi1sYWJlbFwiPiAgICAgICBcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZy13cmFwcGVyLXJlc2V0IGFnLXdyYXBwZXIgYWctaW5wdXQtd3JhcHBlciBhZy1yYWRpby1idXR0b24taW5wdXQtd3JhcHBlciBhZy1jaGVja2VkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInJlc2V0LWlucHV0IGFnLWlucHV0LWZpZWxkLWlucHV0IGFnLXJhZGlvLWJ1dHRvbi1pbnB1dFwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJib29sZWFuXCIgdmFsdWU9XCJcIiBjaGVja2VkLz4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDwvZGl2PiBcbiAgICAgICAgICAgICAgICA8c3Bhbj4ke3RoaXMuX2Jvb2xlYW5GaWx0ZXJUcmFuc2xhdGlvbi5yZXNldH08L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBgXG4gICAgICAgICAgICAgIDogJydcbiAgICAgICAgICB9ICAgICAgIFxuICAgICAgICA8L2Rpdj5cbiAgICBgXG5cbiAgICBib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuX29uUmFkaW9DaGFuZ2UpXG5cbiAgICB0aGlzLl9ndWkuYXBwZW5kQ2hpbGQoYm9keSlcblxuICAgIC8vIGNyZWF0ZSBhcHBseSBmaWx0ZXIgcGFuZWxcbiAgICBjb25zdCBhcHBseUZpbHRlclBhbmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICBhcHBseUZpbHRlclBhbmVsLmNsYXNzTmFtZSA9IGBib29sZWFuRmlsdGVyX19ib2R5X19hcHBseVBhbmVsIGFnLWZpbHRlci1hcHBseS1wYW5lbCBhZy1oaWRkZW5gXG4gICAgYXBwbHlGaWx0ZXJQYW5lbC5pbm5lckhUTUwgPSAvKiBodG1sICovIGBcbiAgICAgIDxidXR0b24gY2xhc3M9XCJhZy1zdGFuZGFyZC1idXR0b24gYWctZmlsdGVyLWFwcGx5LXBhbmVsLWJ1dHRvbiBjbGVhciAkeyFpc0NsZWFyRmlsdGVyICYmXG4gICAgICAgICdhZy1oaWRkZW4nfVwiIHR5cGU9XCJidXR0b25cIj4ke3RyYW5zbGF0ZShcbiAgICAgICdjbGVhckZpbHRlcicsXG4gICAgICAnQ2xlYXIgRmlsdGVyJ1xuICAgICl9PC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYWctc3RhbmRhcmQtYnV0dG9uIGFnLWZpbHRlci1hcHBseS1wYW5lbC1idXR0b24gcmVzZXQgJHshaXNSZXNldEJ1dHRvbiAmJlxuICAgICAgICAnYWctaGlkZGVuJ31cIiB0eXBlPVwiYnV0dG9uXCI+JHt0cmFuc2xhdGUoXG4gICAgICAncmVzZXRGaWx0ZXInLFxuICAgICAgJ1Jlc2V0IEZpbHRlcidcbiAgICApfTwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImFnLXN0YW5kYXJkLWJ1dHRvbiBhZy1maWx0ZXItYXBwbHktcGFuZWwtYnV0dG9uIGFwcGx5ICR7IWlzQXBwbHlCdXR0b24gJiZcbiAgICAgICAgJ2FnLWhpZGRlbid9XCIgdHlwZT1cImJ1dHRvblwiPiR7dHJhbnNsYXRlKFxuICAgICAgJ2FwcGx5RmlsdGVyJyxcbiAgICAgICdBcHBseSBGaWx0ZXInXG4gICAgKX08L2J1dHRvbj5cbiAgICBgXG5cbiAgICBpZiAoaXNDbGVhckZpbHRlciB8fCBpc1Jlc2V0QnV0dG9uIHx8IGlzQXBwbHlCdXR0b24pIHtcbiAgICAgIGFwcGx5RmlsdGVyUGFuZWwuY2xhc3NMaXN0LnJlbW92ZSgnYWctaGlkZGVuJylcbiAgICB9XG5cbiAgICBhcHBseUZpbHRlclBhbmVsLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAnY2xpY2snLFxuICAgICAgdGhpcy5fQXBwbHlGaWx0ZXJQYW5lbEJ1dHRvbkNsaWNrXG4gICAgKVxuXG4gICAgdGhpcy5fZ3VpLmFwcGVuZENoaWxkKGFwcGx5RmlsdGVyUGFuZWwpXG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIEBvdmVycmlkZVxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuX2d1aVxuICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5ib29sZWFuRmlsdGVyX19ib2R5X19sYWJlbHMnKVxuICAgICAgLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuX29uUmFkaW9DaGFuZ2UpXG5cbiAgICB0aGlzLl9ndWlcbiAgICAgIC5xdWVyeVNlbGVjdG9yKCcuYm9vbGVhbkZpbHRlcl9fYm9keV9fYXBwbHlQYW5lbCcpXG4gICAgICAucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9BcHBseUZpbHRlclBhbmVsQnV0dG9uQ2xpY2spXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBzZWxlY3RlZCBmaWx0ZXIgbWF0Y2hlcyB0aGUgcGFzc2VkIGNlbGwgZGF0YVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgd2hlbiBwYXNzLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGRvZXNGaWx0ZXJQYXNzKHBhcmFtcykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICBjb25zdCB2YWx1ZSA9IFN0cmluZyhcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgIHRoaXMuX3BhcmFtcy5oYXNPd25Qcm9wZXJ0eSgnZmlsdGVyVmFsdWVHZXR0ZXInKVxuICAgICAgICA/IHRoaXMuX3BhcmFtcy5maWx0ZXJWYWx1ZUdldHRlcihwYXJhbXMpXG4gICAgICAgIDogdGhpcy5fcGFyYW1zLnZhbHVlR2V0dGVyKHBhcmFtcylcbiAgICApXG5cbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyVGV4dCA9PT0gJ3RydWUnXG4gICAgICA/IHRoaXMuX3RydWVWYWx1ZS5pbmRleE9mKHZhbHVlKSA+IC0xXG4gICAgICA6IHRoaXMuX2ZhbHNlVmFsdWUuaW5kZXhPZih2YWx1ZSkgPiAtMVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBhcHBseWluZyBhbnkgZmlsdGVyIG9uIHRoZSBjb2x1bW5cbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn1cbiAgICoqL1xuICBpc0ZpbHRlckFjdGl2ZSgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5fZmlsdGVyVGV4dCAhPT0gbnVsbCAmJlxuICAgICAgdGhpcy5fZmlsdGVyVGV4dCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLl9maWx0ZXJUZXh0ICE9PSAnJ1xuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBmaWx0ZXIgc3RhdGUuIElmIGZpbHRlciBpcyBub3QgYWN0aXZlLCB0aGVuIHNob3VsZCByZXR1cm4gbnVsbC91bmRlZmluZWQuXG4gICAqIFRoZSBncmlkIGNhbGxzIGdldE1vZGVsKCkgb24gYWxsIGFjdGl2ZSBmaWx0ZXJzIHdoZW4gZ3JpZEFwaS5nZXRGaWx0ZXJNb2RlbCgpIGlzIGNhbGxlZC5cbiAgICpcbiAgICogQHJldHVybiBPYmplY3QgfCBudWxsIHRoZSBmaWx0ZXIgc3RhdGVcbiAgICovXG4gIGdldE1vZGVsKCkge1xuICAgIGlmICghdGhpcy5pc0ZpbHRlckFjdGl2ZSgpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGNvbnN0IG1vZGVsID0geyB2YWx1ZTogdGhpcy5fZmlsdGVyVGV4dCwgZmlsdGVyVHlwZTogJ2Jvb2xlYW4nIH1cbiAgICByZXR1cm4gbW9kZWxcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlcyB0aGUgZmlsdGVyIHN0YXRlLiBDYWxsZWQgYnkgdGhlIGdyaWQgYWZ0ZXIgZ3JpZEFwaS5zZXRGaWx0ZXJNb2RlbChtb2RlbCkgaXMgY2FsbGVkLlxuICAgKiBUaGUgZ3JpZCB3aWxsIHBhc3MgdW5kZWZpbmVkL251bGwgdG8gY2xlYXIgdGhlIGZpbHRlci5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3QgfCBudWxsfSBtb2RlbFxuICAgKi9cbiAgc2V0TW9kZWwobW9kZWwpIHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgKi9cbiAgICB0aGlzLl9maWx0ZXJUZXh0ID0gbW9kZWwgJiYgbW9kZWwuaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykgPyBtb2RlbC52YWx1ZSA6ICcnXG5cbiAgICBjb25zdCBmaWx0ZXJUZXh0QXNTdHJpbmcgPSBTdHJpbmcodGhpcy5fZmlsdGVyVGV4dClcbiAgICBjb25zdCBib2R5ID0gdGhpcy5fZ3VpLnF1ZXJ5U2VsZWN0b3IoJy5ib29sZWFuRmlsdGVyX19ib2R5JylcbiAgICBib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9XCJyYWRpb1wiXScpLmZvckVhY2goaSA9PiB7XG4gICAgICBpZiAoaS52YWx1ZSA9PSBmaWx0ZXJUZXh0QXNTdHJpbmcpIHtcbiAgICAgICAgaS5jaGVja2VkID0gdHJ1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaS5jaGVja2VkID0gZmFsc2VcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZmlsdGVyIG1vZGVsIGFzIHBsYWluIHN0cmluZyB0byBkaXNwbGF5IGluIHRoZSBmbG9hdGluZyBmaWx0ZXIgaW5wdXRcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3QgfCBudWxsfSBtb2RlbFxuICAgKi9cbiAgZ2V0TW9kZWxBc1N0cmluZyhtb2RlbCkge1xuICAgIGlmICghbW9kZWwpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cblxuICAgIHJldHVybiBzdHJpcEhUTUwoXG4gICAgICBtb2RlbC52YWx1ZSA9PT0gJ3RydWUnXG4gICAgICAgID8gdGhpcy5fYm9vbGVhbkZpbHRlclRyYW5zbGF0aW9uLnRydWVcbiAgICAgICAgOiB0aGlzLl9ib29sZWFuRmlsdGVyVHJhbnNsYXRpb24uZmFsc2VcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIGZpbHRlciBzdGF0ZVxuICAgKi9cbiAgcmVzZXQoKSB7XG4gICAgY29uc3QgYm9keSA9IHRoaXMuX2d1aS5xdWVyeVNlbGVjdG9yKCcuYm9vbGVhbkZpbHRlcl9fYm9keScpXG4gICAgYm9keS5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPVwicmFkaW9cIl0nKS5mb3JFYWNoKGkgPT4ge1xuICAgICAgaS5jaGVja2VkID0gZmFsc2VcbiAgICB9KVxuXG4gICAgYm9keS5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci10cnVlJykuY2xhc3NMaXN0LnJlbW92ZSgnYWctY2hlY2tlZCcpXG4gICAgYm9keS5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci1mYWxzZScpLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWNoZWNrZWQnKVxuICAgIHRyeSB7XG4gICAgICBib2R5LnF1ZXJ5U2VsZWN0b3IoJy5hZy13cmFwcGVyLXJlc2V0JykuY2xhc3NMaXN0LnJlbW92ZSgnYWctY2hlY2tlZCcpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLyogcGFzcyAqL1xuICAgIH1cblxuICAgIHRoaXMuX2ZpbHRlclRleHQgPSBudWxsXG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIHRvIHNlbGVjdGlvbiBjaGFuZ2VzIGluIHRoZSBmaWx0ZXIgcmFkaW8gYnV0dG9ucyBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IGZpbHRlciB0ZXh0XG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGVcbiAgICovXG4gIF9vblJhZGlvQ2hhbmdlKGlzQXBwbHlCdXR0b24sIGUpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldFxuICAgIHRoaXMuX2ZpbHRlclRleHQgPSB0YXJnZXQudmFsdWVcblxuICAgIGNvbnN0IGJvZHkgPSB0aGlzLl9ndWkucXVlcnlTZWxlY3RvcignLmJvb2xlYW5GaWx0ZXJfX2JvZHknKVxuXG4gICAgaWYgKGJvZHkpIHtcbiAgICAgIGlmICh0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCd0cnVlLWlucHV0JykpIHtcbiAgICAgICAgYm9keS5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci10cnVlJykuY2xhc3NMaXN0LmFkZCgnYWctY2hlY2tlZCcpXG4gICAgICAgIGJvZHkucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItZmFsc2UnKS5jbGFzc0xpc3QucmVtb3ZlKCdhZy1jaGVja2VkJylcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBib2R5LnF1ZXJ5U2VsZWN0b3IoJy5hZy13cmFwcGVyLXJlc2V0JykuY2xhc3NMaXN0LnJlbW92ZSgnYWctY2hlY2tlZCcpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvKiBwYXNzICovXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnZmFsc2UtaW5wdXQnKSkge1xuICAgICAgICBib2R5LnF1ZXJ5U2VsZWN0b3IoJy5hZy13cmFwcGVyLXRydWUnKS5jbGFzc0xpc3QucmVtb3ZlKCdhZy1jaGVja2VkJylcbiAgICAgICAgYm9keS5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci1mYWxzZScpLmNsYXNzTGlzdC5hZGQoJ2FnLWNoZWNrZWQnKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGJvZHkucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItcmVzZXQnKS5jbGFzc0xpc3QucmVtb3ZlKCdhZy1jaGVja2VkJylcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8qIHBhc3MgKi9cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYm9keS5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci10cnVlJykuY2xhc3NMaXN0LnJlbW92ZSgnYWctY2hlY2tlZCcpXG4gICAgICAgIGJvZHkucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItZmFsc2UnKS5jbGFzc0xpc3QucmVtb3ZlKCdhZy1jaGVja2VkJylcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBib2R5LnF1ZXJ5U2VsZWN0b3IoJy5hZy13cmFwcGVyLXJlc2V0JykuY2xhc3NMaXN0LmFkZCgnYWctY2hlY2tlZCcpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvKiBwYXNzICovXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZmFsc2UgPT09IGlzQXBwbHlCdXR0b24pIHtcbiAgICAgIHRoaXMuX3BhcmFtcy5maWx0ZXJDaGFuZ2VkQ2FsbGJhY2soKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gdGhlIGJ1dHRvbiBjbGlja3MgaW4gdGhlIGJ1dHRvbnMgcGFuZWwgYW5kIGFwcGx5IHRoZSBjaG9zZW4gYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGVcbiAgICovXG4gIEBhdXRvYmluZFxuICBfQXBwbHlGaWx0ZXJQYW5lbEJ1dHRvbkNsaWNrKGUpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldFxuXG4gICAgaWYgKHRhcmdldC5ub2RlTmFtZSA9PT0gJ0JVVFRPTicpIHtcbiAgICAgIGlmICh0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdyZXNldCcpKSB7XG4gICAgICAgIHRoaXMucmVzZXQoKVxuICAgICAgICB0aGlzLl9wYXJhbXMuZmlsdGVyQ2hhbmdlZENhbGxiYWNrKClcbiAgICAgIH0gZWxzZSBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnY2xlYXInKSkge1xuICAgICAgICB0aGlzLnJlc2V0KClcbiAgICAgIH0gZWxzZSBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnYXBwbHknKSkge1xuICAgICAgICB0aGlzLl9wYXJhbXMuZmlsdGVyQ2hhbmdlZENhbGxiYWNrKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQm9vbGVhbkZpbHRlclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0Jvb2xlYW5GaWx0ZXIvQm9vbGVhbkZpbHRlci5qcyIsIlxudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5zY3NzXCIpO1xuXG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcblxudmFyIHRyYW5zZm9ybTtcbnZhciBpbnNlcnRJbnRvO1xuXG5cblxudmFyIG9wdGlvbnMgPSB7XCJobXJcIjp0cnVlfVxuXG5vcHRpb25zLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVxub3B0aW9ucy5pbnNlcnRJbnRvID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuaGVhZFxuICAgICAgICAgICAgICB9O1xuXG52YXIgdXBkYXRlID0gcmVxdWlyZShcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcIikoY29udGVudCwgb3B0aW9ucyk7XG5cbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuXG5pZihtb2R1bGUuaG90KSB7XG5cdG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5zY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiKTtcblxuXHRcdGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuXG5cdFx0dmFyIGxvY2FscyA9IChmdW5jdGlvbihhLCBiKSB7XG5cdFx0XHR2YXIga2V5LCBpZHggPSAwO1xuXG5cdFx0XHRmb3Ioa2V5IGluIGEpIHtcblx0XHRcdFx0aWYoIWIgfHwgYVtrZXldICE9PSBiW2tleV0pIHJldHVybiBmYWxzZTtcblx0XHRcdFx0aWR4Kys7XG5cdFx0XHR9XG5cblx0XHRcdGZvcihrZXkgaW4gYikgaWR4LS07XG5cblx0XHRcdHJldHVybiBpZHggPT09IDA7XG5cdFx0fShjb250ZW50LmxvY2FscywgbmV3Q29udGVudC5sb2NhbHMpKTtcblxuXHRcdGlmKCFsb2NhbHMpIHRocm93IG5ldyBFcnJvcignQWJvcnRpbmcgQ1NTIEhNUiBkdWUgdG8gY2hhbmdlZCBjc3MtbW9kdWxlcyBsb2NhbHMuJyk7XG5cblx0XHR1cGRhdGUobmV3Q29udGVudCk7XG5cdH0pO1xuXG5cdG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbigpIHsgdXBkYXRlKCk7IH0pO1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9Cb29sZWFuRmlsdGVyL3N0eWxlLnNjc3MiLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKGZhbHNlKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi5ib29sZWFuRmlsdGVyX19ib2R5X19sYWJlbHMgbGFiZWx7ZGlzcGxheTpibG9jaztwYWRkaW5nOjZweH0uYm9vbGVhbkZpbHRlcl9fYm9keV9fbGFiZWxzIGxhYmVse2Rpc3BsYXk6YmxvY2s7cGFkZGluZzo2cHggMH0uYm9vbGVhbkZpbHRlcl9fYm9keV9fbGFiZWxzIGxhYmVsIHNwYW57cGFkZGluZy1sZWZ0OjZweH1cXG5cIiwgXCJcIl0pO1xuXG4vLyBleHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyIS4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL0Jvb2xlYW5GaWx0ZXIvc3R5bGUuc2Nzc1xuLy8gbW9kdWxlIGlkID0gNTZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEgMiAzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IE51bWJlckVkaXRvciBmcm9tICcuL051bWJlckVkaXRvcidcblxuZXhwb3J0IGRlZmF1bHQgTnVtYmVyRWRpdG9yXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvTnVtYmVyRWRpdG9yL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IENvbXBvbmVudCBmcm9tICcuLi9Db21wb25lbnQnXG5pbXBvcnQgeyBhdXRvYmluZCwgb3ZlcnJpZGUgfSBmcm9tICdjb3JlLWRlY29yYXRvcnMnXG5cbmltcG9ydCAnLi9zdHlsZS5zY3NzJ1xuXG4vKipcbiAqIE51bWJlcnMgRWRpdG9yXG4gKlxuICogSGFuZGxlIG51bWJlciB2YWx1ZXMgRWRpdGluZ1xuICpcbiAqIHwgTmFtZSAgICAgICAgICAgICAgICAgIFx0fCBEZWZhdWx0ICAgICBcdHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0fFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdHw6LS0tLS0tLS0tLS0tLTp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICoqbnVtYmVyTWluVmFsdWUqKiAgIHwgdW5kZWZpbmVkICAgIHwgbWluIGFsbG93ZWQgdmFsdWVcbiAqIHwgKipudW1iZXJNYXhWYWx1ZSoqICAgfCB1bmRlZmluZWQgICAgfCBtYXggYWxsb3dlZCB2YWx1ZVxuICogfCAqKm51bWJlclN0ZXBWYWx1ZSoqICAgICAgIHwgdW5kZWZpbmVkICBcdHwgbnVtYmVyIG9mIHN0ZXAgYnkgaW5jcmVtZW50IG9yIGRlY3JlbWVudFxuICogfCAqKm51bWJlck1hc2sqKiAgICAgICB8IHVuZGVmaW5lZCAgXHR8IGEgYmJqIG51bWJlciBtYXNrIHRvIHZhbGlkYXRlIHRoZSBudW1iZXIgYWdhaW5zdFxuICogfCoqbnVtYmVyR3JvdXBpbmdTZXBhcmF0b3IqKiB8ICwgfCBhIGNoYXIgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgZ3JvdXBpbmcgc2VwYXJhdG9yLiBUaGUgb3B0aW9ucyBpcyB1c2VkIG9ubHkgd2hlbiAqKm51bWJlck1hc2sqKiBpcyBkZWZpbmVkIHxcbiAqIHwqKm51bWJlckRlY2ltYWxTZXBhcmF0b3IqKiB8IC4gfCBhIGNoYXIgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgZGVjaW1hbCBzZXBhcmF0b3IuIFRoZSBvcHRpb25zIGlzIHVzZWQgb25seSB3aGVuICoqbnVtYmVyTWFzayoqIGlzIGRlZmluZWQgIHxcbiAqIHwqKm51bWJlckZvcmNlVHJhaWxpbmdaZXJvcyoqIHwgZmFsc2UgfCBBZmZlY3RzIHRoZSBvdXRwdXQgYnkgc3dpdGNoaW5nIHRoZSB3YXkgYSBtYXNrIHdpdGggXCIjXCIgY2hhcmFjdGVycyBpbiB0aGUgdHJhaWxpbmcgcG9zaXRpb25zIGlzIGZpbGxlZC4gZm9yIGV4YW1wbGUsIHRoZSBmdW5jdGlvbiBOdW1iZXJNYXNrLm1hc2soLjEwOlwiIy4jI1wiKSByZXR1cm5zIC4xMCBpbnN0ZWFkIG9mIC4xIC4gVGhlIG9wdGlvbnMgaXMgdXNlZCBvbmx5IHdoZW4gKipudW1iZXJNYXNrKiogaXMgZGVmaW5lZHxcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5jbGFzcyBOdW1iZXJFZGl0b3IgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgaW5pdChwYXJhbXMpIHtcbiAgICBjb25zdCBtaW4gPSB0aGlzLmdldE9wdGlvbignbnVtYmVyTWluVmFsdWUnLCBwYXJhbXMpXG4gICAgY29uc3QgbWF4ID0gdGhpcy5nZXRPcHRpb24oJ251bWJlck1heFZhbHVlJywgcGFyYW1zKVxuICAgIGNvbnN0IHN0ZXAgPSB0aGlzLmdldE9wdGlvbignbnVtYmVyU3RlcFZhbHVlJywgcGFyYW1zKVxuICAgIGNvbnN0IG1hc2sgPSB0aGlzLmdldE9wdGlvbignbnVtYmVyTWFzaycsIHBhcmFtcylcblxuICAgIGxldCBzdGFydFZhbHVlXG5cbiAgICB0aGlzLl9mb2N1c0FmdGVyQXR0YWNoZWQgPSBwYXJhbXMuY2VsbFN0YXJ0ZWRFZGl0XG4gICAgaWYgKHRoaXMuX2ZvY3VzQWZ0ZXJBdHRhY2hlZCkge1xuICAgICAgbGV0IGtleVByZXNzQmFja3NwYWNlT3JEZWxldGUgPVxuICAgICAgICBwYXJhbXMua2V5UHJlc3MgPT0gMzIgfHwgcGFyYW1zLmtleVByZXNzID09IDQ2IC8vIHNwYWNlIC8vIGRlbGV0ZVxuXG4gICAgICBpZiAoa2V5UHJlc3NCYWNrc3BhY2VPckRlbGV0ZSkge1xuICAgICAgICBzdGFydFZhbHVlID0gJydcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLmNoYXJQcmVzcykge1xuICAgICAgICBzdGFydFZhbHVlID0gcGFyYW1zLmNoYXJQcmVzc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhcnRWYWx1ZSA9IHBhcmFtcy52YWx1ZVxuICAgICAgICBpZiAocGFyYW1zLmtleVByZXNzICE9IDExMykge1xuICAgICAgICAgIC8vRjJcbiAgICAgICAgICB0aGlzLl9oaWdobGlnaHRBbGxPbkZvY3VzID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0VmFsdWUgPSBwYXJhbXMudmFsdWVcbiAgICB9XG5cbiAgICAvLyBtYWtlIHBhcmFtcyBpdCBhY2Nlc3NpYmxlIGZyb20gdGFsbCBtZXRob2RzXG4gICAgdGhpcy5fcGFyYW1zID0gcGFyYW1zXG5cbiAgICAvLyBjcmVhdGUgdGhlIGlucHV0IHdyYXBwZXJcbiAgICB0aGlzLl9ndWkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpXG4gICAgdGhpcy5fZ3VpLmNsYXNzTmFtZSA9ICdudW1iZXJFZGl0b3IgYWctY2VsbC1lZGl0LXdyYXBwZXInXG4gICAgdGhpcy5fZ3VpLnRhYkluZGV4ID0gJzAnXG4gICAgdGhpcy5fZ3VpLmlubmVySFRNTCA9IC8qIGh0bWwgKi8gYFxuICAgIDxkaXYgY2xhc3M9XCJhZy1jZWxsLWVkaXRvciBhZy1sYWJlbGVkIGFnLWxhYmVsLWFsaWduLWxlZnQgYWctdGV4dC1maWVsZCBhZy1pbnB1dC1maWVsZFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImFnLXdyYXBwZXIgYWctaW5wdXQtd3JhcHBlciBhZy10ZXh0LWZpZWxkLWlucHV0LXdyYXBwZXJcIj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIGBcblxuICAgIC8vIGNyZWF0ZSB0aGUgaW5wdXRcbiAgICB0aGlzLl9pbnB1dEdlbmVyYXRlZElkID0gTWF0aC5yYW5kb20oKVxuICAgICAgLnRvU3RyaW5nKDE2KVxuICAgICAgLnNsaWNlKDIsIDEwKSAvLyBnZW5lcmF0ZSByYW5kb20gaWRcbiAgICB0aGlzLl9pbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JylcbiAgICB0aGlzLl9pbnB1dC5jbGFzc05hbWUgPSAnbnVtYmVyRWRpdG9yX19pbnB1dCBhZy1jZWxsLWVkaXQtaW5wdXQnXG4gICAgdGhpcy5faW5wdXQuaWQgPSBgZWwtJHt0aGlzLl9pbnB1dEdlbmVyYXRlZElkfWBcbiAgICB0aGlzLl9pbnB1dC50eXBlID0gbWFzayA/ICd0ZXh0JyA6ICdudW1iZXInXG4gICAgdGhpcy5faW5wdXQudmFsdWUgPSBzdGFydFZhbHVlXG4gICAgdGhpcy5faW5wdXQudGFiSW5kZXggPSAwXG5cbiAgICAvLyBwbGFjZSB0aGUgaW5wdXQgaW5zaWRlIHRoZSB3cmFwcGVyXG4gICAgdGhpcy5fZ3VpLnF1ZXJ5U2VsZWN0b3IoJy5hZy1pbnB1dC13cmFwcGVyJykuYXBwZW5kQ2hpbGQodGhpcy5faW5wdXQpXG5cbiAgICBpZiAobWluICE9PSBudWxsKSB7XG4gICAgICBtYXNrID8gKHRoaXMuX2lucHV0LmRhdGFzZXQubWluID0gbWluKSA6ICh0aGlzLl9pbnB1dC5taW4gPSBtaW4pXG4gICAgfVxuXG4gICAgaWYgKG1heCAhPT0gbnVsbCkge1xuICAgICAgbWFzayA/ICh0aGlzLl9pbnB1dC5kYXRhc2V0Lm1heCA9IG1heCkgOiAodGhpcy5faW5wdXQubWF4ID0gbWF4KVxuICAgIH1cblxuICAgIGlmIChzdGVwICE9PSBudWxsKSB7XG4gICAgICBtYXNrID8gKHRoaXMuX2lucHV0LmRhdGFzZXQuc3RlcCA9IHN0ZXApIDogKHRoaXMuX2lucHV0LnN0ZXAgPSBzdGVwKVxuICAgIH1cblxuICAgIC8vIElmIHRoZXJlIGlzIGEgbWFzayB0aGVuIHdlIHVzZSB0aGUgYEJhc2lzLklucHV0TWFza2luZy5OdW1iZXJJbnB1dGBcbiAgICBpZiAobWFzaykge1xuICAgICAgY29uc3QgZ3JvdXBpbmdTZXBhcmF0b3IgPSB0aGlzLmdldE9wdGlvbihcbiAgICAgICAgJ251bWJlckdyb3VwaW5nU2VwYXJhdG9yJyxcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICB0aGlzLmdldE9wdGlvbignbnVtYmVyR3JvdXBTZXAnLCBwYXJhbXMpXG4gICAgICApXG4gICAgICBjb25zdCBkZWNpbWFsU2VwYXJhdG9yID0gdGhpcy5nZXRPcHRpb24oXG4gICAgICAgICdudW1iZXJEZWNpbWFsU2VwYXJhdG9yJyxcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICB0aGlzLmdldE9wdGlvbignbnVtYmVyRGVjaW1hbFNlcCcsIHBhcmFtcylcbiAgICAgIClcbiAgICAgIGNvbnN0IGZvcmNlVHJhaWxpbmdaZXJvcyA9IHRoaXMuZ2V0T3B0aW9uKFxuICAgICAgICAnbnVtYmVyRm9yY2VUcmFpbGluZ1plcm9zJyxcbiAgICAgICAgcGFyYW1zXG4gICAgICApXG5cbiAgICAgIGlmIChncm91cGluZ1NlcGFyYXRvciAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9pbnB1dC5kYXRhc2V0Lmdyb3VwaW5nU2VwYXJhdG9yID0gZ3JvdXBpbmdTZXBhcmF0b3JcbiAgICAgIH1cblxuICAgICAgaWYgKGRlY2ltYWxTZXBhcmF0b3IgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5faW5wdXQuZGF0YXNldC5kZWNpbWFsU2VwYXJhdG9yID0gZGVjaW1hbFNlcGFyYXRvclxuICAgICAgfVxuXG4gICAgICBpZiAoZm9yY2VUcmFpbGluZ1plcm9zICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuX2lucHV0LmRhdGFzZXQuZm9yY2VUcmFpbGluZ1plcm9zID0gZm9yY2VUcmFpbGluZ1plcm9zXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2lucHV0LmRhdGFzZXQubWFzayA9IG1hc2tcbiAgICAgIHRoaXMuX251bWJlcklucHV0ID0gbmV3IEJhc2lzLklucHV0TWFza2luZy5OdW1iZXJJbnB1dCh7XG4gICAgICAgIGVsZW1lbnRzOiBbdGhpcy5faW5wdXRdLFxuICAgICAgICAvLyBkb2M6IHRoaXMuZ2V0RG9jKHBhcmFtcyksXG4gICAgICAgIG9uVXBkYXRlOiB0aGlzLl9vbk51bWJlcklucHV0VXBkYXRlLFxuICAgICAgICBvbkludmFsaWQ6IHRoaXMuX29uTnVtYmVySW5wdXRJbnZhbGlkLFxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uSW5wdXRLZXlEb3duVXApXG4gICAgICB0aGlzLl9pbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX29uSW5wdXRLZXlEb3duVXApXG4gICAgICB0aGlzLl9pbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9vbkNoYW5nZSlcbiAgICB9XG5cbiAgICB0aGlzLl9ndWkuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uQ29tcG9uZW50S2V5RG93bilcblxuICAgIC8vIHVwZGF0ZSBgY3VycmVudFZhbHVlYCB0aGUgdmFsdWUgd2hpY2ggdGhpcyBjb21wb25lbnQgaXMgbWFuYWdpbmdcbiAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSBzdGFydFZhbHVlXG4gICAgdGhpcy5fX2lzTWFza2VkX18gPSBtYXNrICYmIG1hc2subGVuZ3RoXG4gIH1cblxuICAvKipcbiAgICogIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgZGVzdHJveSgpIHtcbiAgICBpZiAoIXRoaXMuX19pc01hc2tlZF9fKSB7XG4gICAgICB0aGlzLl9pbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25JbnB1dEtleURvd25VcClcbiAgICAgIHRoaXMuX2lucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5fb25JbnB1dEtleURvd25VcClcbiAgICAgIHRoaXMuX2lucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuX29uQ2hhbmdlKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9udW1iZXJJbnB1dC5kZXN0cm95KClcbiAgICB9XG5cbiAgICB0aGlzLl9ndWkucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uQ29tcG9uZW50S2V5RG93bilcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNhbGxlZCBvbmNlIGFmdGVyIEdVSSBpcyBhdHRhY2hlZCB0byBET00uXG4gICAqXG4gICAqIE1ha2Ugc3VyZSBjb250YWluZXIgaXMgYWx3YXlzIGZvY3VzZWQgdG8gbGlzdGVuIHRvIGtleSBjaGFuZ2VzXG4gICAqL1xuICBhZnRlckd1aUF0dGFjaGVkKCkge1xuICAgIGlmICghdGhpcy5fX2lzTWFza2VkX18pIHtcbiAgICAgIHRoaXMuX3ZhbGlkYXRlSW5wdXQodGhpcy5faW5wdXQpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2hpZ2hsaWdodEFsbE9uRm9jdXMpIHtcbiAgICAgIHRoaXMuX2lucHV0LnNlbGVjdCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLl9mb2N1c0FmdGVyQXR0YWNoZWQpIHtcbiAgICAgICAgdGhpcy5mb2N1c0luKClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IFRoZSBjb21wb25lbnQgdmFsdWVcbiAgICpcbiAgICogQHJldHVybiB7TnVtYmVyfVxuICAgKi9cbiAgZ2V0VmFsdWUoKSB7XG4gICAgY29uc3QgY2FzdGVkID0gTnVtYmVyKHRoaXMuX2N1cnJlbnRWYWx1ZSlcbiAgICBjb25zdCByZXRWYWx1ZSA9IGlzTmFOKGNhc3RlZCkgPyB0aGlzLl9jdXJyZW50VmFsdWUgOiBjYXN0ZWRcbiAgICByZXR1cm4gdGhpcy5fX2lzTWFza2VkX18gPyByZXRWYWx1ZSA6IHRoaXMuX3BhcmFtcy5wYXJzZVZhbHVlKHJldFZhbHVlKVxuICB9XG5cbiAgLyoqXG4gICAqIElmIGRvaW5nIGZ1bGwgcm93IGVkaXQsIHRoZW4gZ2V0cyBjYWxsZWQgd2hlbiB0YWJiaW5nIGludG8gdGhlIGNlbGwuXG4gICAqL1xuICBmb2N1c0luKCkge1xuICAgIGlmICghdGhpcy5fX2lzTWFza2VkX18pIHtcbiAgICAgIHRoaXMuX2lucHV0LmZvY3VzKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faW5wdXQuY2xpY2soKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNhbGxlZCBvbmNlIGFmdGVyIGluaXRpYWxpemVkIGFuZCByZXR1cm5zIGZhbHNlIHNvIHRoZSBlZGl0b3IgYXBwZWFycyBpbiB0aGUgY2VsbFxuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufSBhbHdheXMgZmFsc2VcbiAgICoqL1xuICBpc1BvcHVwKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBgY3VycmVudFZhbHVlYCB3aGVuIHRoZSBjaGVja2JveCB2YWx1ZSBpcyBjaGFuZ2VkXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX29uQ2hhbmdlKGV2ZW50KSB7XG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuX3ZhbGlkYXRlSW5wdXQoZXZlbnQudGFyZ2V0KVxuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSB0aGlzLl9pbnB1dC52YWx1ZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGN1cnJlbnQgdmFsdWUgd2hlbiB0aGUgTnVtYmVySW5wdXQgY29tcG9uZW50cyBmaXJlIHRoZSB1cGRhdGVcbiAgICogZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBfbWFza2VkICB0aGUgbWFza2VkIHZhbHVlXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB1bm1hc2tlZCAgdGhlIHVubWFza2VkIHZhbHVlXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX29uTnVtYmVySW5wdXRVcGRhdGUoX21hc2tlZCwgdW5tYXNrZWQpIHtcbiAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSB1bm1hc2tlZFxuICAgIHRoaXMuZm9jdXNJbigpXG4gICAgLy8gd2UgcGFzcyB0aGUgbGFzdCBjYXB0dXJlZCBldmVudCBiYWNrIHRvIHRoZSBncmlkIHRvIGhhbmRsZSBpdCBpbnRlcm5hbGx5XG4gICAgaWYgKHRoaXMuX19sYXN0Q29tcG9uZW50S2V5Ym9hcmRQcmVzc19fKSB7XG4gICAgICB0aGlzLl9wYXJhbXMub25LZXlEb3duKHRoaXMuX19sYXN0Q29tcG9uZW50S2V5Ym9hcmRQcmVzc19fKVxuICAgICAgdGhpcy5fX2xhc3RDb21wb25lbnRLZXlib2FyZFByZXNzX18gPSBudWxsXG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBPbiBpbnZhbGlkIGlucHV0cyAsIHVwZGF0ZSB0aGUgaW5wdXQgd2l0aCBhIGN1c3RvbSB2YWxpZGl0eSBtZXNzYWdlXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gZXJyb3IgdGhlIGVycm9yIG1lc3NhZ2UgcmVwb3J0ZWQgYnkgTnVtYmVySW5wdXRcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gaW5wdXQgVGhlIGlucHV0IGVsZW1lbnQgdXNlZCBpbnN0YW5jZVxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vbk51bWJlcklucHV0SW52YWxpZChlcnJvciwgaW5wdXQpIHtcbiAgICB0aGlzLmZvY3VzSW4oKVxuICAgIC8vIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHZhbHVlIG9mIHRoZSBjZWxsXG4gICAgdGhpcy5fY3VycmVudFZhbHVlID0gdGhpcy5fcGFyYW1zLnZhbHVlXG4gICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlucHV0LnNldEN1c3RvbVZhbGlkaXR5KGVycm9yKVxuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dC5zZXRDdXN0b21WYWxpZGl0eShlcnJvci5tZXNzYWdlKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYXB0dXJlIGFsbCBrZXlib2FyZCBldmVudHMgdG8gYWxsb3cgdmFsdWUgcHJvY2Vzc2luZyBieSB0aGUgTnVtYmVySW5wdXQgY29tcG9uZW50XG4gICAqXG4gICAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZVxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vbkNvbXBvbmVudEtleURvd24oZSkge1xuICAgIGNvbnN0IGtleSA9IGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGVcblxuICAgIGNvbnN0IGlzTmF2aWdhdGlvbktleSA9XG4gICAgICBrZXkgPT09IDM3IHx8IC8vIGxlZnRcbiAgICAgIGtleSA9PT0gMzggfHwgLy8gdXBcbiAgICAgIGtleSA9PT0gMzkgfHwgLy8gcmlnaHRcbiAgICAgIGtleSA9PT0gNDAgfHwgLy8gZG93blxuICAgICAga2V5ID09PSAzMyB8fCAvLyBwYWdlIHVwXG4gICAgICBrZXkgPT09IDM0IHx8IC8vIHBhZ2UgZG93blxuICAgICAga2V5ID09PSAzNSB8fCAvLyBwYWdlIGhvbWVcbiAgICAgIGtleSA9PT0gMzYgfHwgLy8gcGFnZSBlbmRcbiAgICAgIGtleSA9PT0gMTMgLy8gZW50ZXJcblxuICAgIGlmIChpc05hdmlnYXRpb25LZXkpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAvLyBzYXZlIHRoZSBsYXN0IGNhcHR1cmUga2V5IHNvIE51bWJlcklucHV0IGNhbiBwYXNzIGl0IGFnYWluIHRvIHRoZSBncmlkLlxuICAgICAgdGhpcy5fX2xhc3RDb21wb25lbnRLZXlib2FyZFByZXNzX18gPSBlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExpc3RlbiB0byBrZXkgY2hhbmdlcyBhbmQgdmFsaWRhdGUgdGhlIGlucHV0XG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX29uSW5wdXRLZXlEb3duVXAoZXZlbnQpIHtcbiAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy5fdmFsaWRhdGVJbnB1dChldmVudC50YXJnZXQpXG5cbiAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGtleSA9IGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGVcblxuICAgIGlmIChrZXkgPT0gMzggfHwga2V5ID09IDQwKSB7XG4gICAgICAvLyB0b3AgfCBkb3duXG4gICAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSB0aGlzLl9pbnB1dC52YWx1ZVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9IGVsc2UgaWYgKGtleSA9PSAxMyB8fCBrZXkgPT09IDkpIHtcbiAgICAgIC8vIGVudGVyXG4gICAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSB0aGlzLl9pbnB1dC52YWx1ZVxuICAgIH1cblxuICAgIC8vIHdlIHBhc3MgdGhlIGxhc3QgY2FwdHVyZWQgZXZlbnQgYmFjayB0byB0aGUgZ3JpZCB0byBoYW5kbGUgaXQgaW50ZXJuYWxseVxuICAgIGlmICh0aGlzLl9fbGFzdENvbXBvbmVudEtleWJvYXJkUHJlc3NfXykge1xuICAgICAgdGhpcy5fcGFyYW1zLm9uS2V5RG93bih0aGlzLl9fbGFzdENvbXBvbmVudEtleWJvYXJkUHJlc3NfXylcbiAgICAgIHRoaXMuX19sYXN0Q29tcG9uZW50S2V5Ym9hcmRQcmVzc19fID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgZ2l2ZW4gaW5wdXQgZWxlbWVudFxuICAgKlxuICAgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGlucHV0IGlucHV0IGVsZW1lbnRcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSB3aGVuIHZhbGlkICwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBfdmFsaWRhdGVJbnB1dChpbnB1dCkge1xuICAgIGNvbnN0IGlzVmFsaWQgPSBpbnB1dC5jaGVja1ZhbGlkaXR5KClcblxuICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgaW5wdXQuY2xhc3NMaXN0LmFkZCgnYmJqLW1hc2stZXJyb3InKVxuICAgICAgaW5wdXQuY2xhc3NMaXN0LnJlbW92ZSgnYmJqLW1hc2stc3VjY2VzcycpXG4gICAgICAvLyByZXN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZVxuICAgICAgdGhpcy5fY3VycmVudFZhbHVlID0gdGhpcy5fcGFyYW1zLnZhbHVlXG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUoJ2Jiai1tYXNrLWVycm9yJylcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5hZGQoJ2Jiai1tYXNrLXN1Y2Nlc3MnKVxuICAgIH1cblxuICAgIHJldHVybiBpc1ZhbGlkXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTnVtYmVyRWRpdG9yXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvTnVtYmVyRWRpdG9yL051bWJlckVkaXRvci5qcyIsIlxudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5zY3NzXCIpO1xuXG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcblxudmFyIHRyYW5zZm9ybTtcbnZhciBpbnNlcnRJbnRvO1xuXG5cblxudmFyIG9wdGlvbnMgPSB7XCJobXJcIjp0cnVlfVxuXG5vcHRpb25zLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVxub3B0aW9ucy5pbnNlcnRJbnRvID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuaGVhZFxuICAgICAgICAgICAgICB9O1xuXG52YXIgdXBkYXRlID0gcmVxdWlyZShcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcIikoY29udGVudCwgb3B0aW9ucyk7XG5cbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuXG5pZihtb2R1bGUuaG90KSB7XG5cdG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5zY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiKTtcblxuXHRcdGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuXG5cdFx0dmFyIGxvY2FscyA9IChmdW5jdGlvbihhLCBiKSB7XG5cdFx0XHR2YXIga2V5LCBpZHggPSAwO1xuXG5cdFx0XHRmb3Ioa2V5IGluIGEpIHtcblx0XHRcdFx0aWYoIWIgfHwgYVtrZXldICE9PSBiW2tleV0pIHJldHVybiBmYWxzZTtcblx0XHRcdFx0aWR4Kys7XG5cdFx0XHR9XG5cblx0XHRcdGZvcihrZXkgaW4gYikgaWR4LS07XG5cblx0XHRcdHJldHVybiBpZHggPT09IDA7XG5cdFx0fShjb250ZW50LmxvY2FscywgbmV3Q29udGVudC5sb2NhbHMpKTtcblxuXHRcdGlmKCFsb2NhbHMpIHRocm93IG5ldyBFcnJvcignQWJvcnRpbmcgQ1NTIEhNUiBkdWUgdG8gY2hhbmdlZCBjc3MtbW9kdWxlcyBsb2NhbHMuJyk7XG5cblx0XHR1cGRhdGUobmV3Q29udGVudCk7XG5cdH0pO1xuXG5cdG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbigpIHsgdXBkYXRlKCk7IH0pO1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9OdW1iZXJFZGl0b3Ivc3R5bGUuc2NzcyIsImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikoZmFsc2UpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiLm51bWJlckVkaXRvcntvdmVyZmxvdzpoaWRkZW59Lm51bWJlckVkaXRvciAubnVtYmVySW5wdXRNYXNrX193cmFwe3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6MDttYXJnaW46MDtkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0bzthbGlnbi1pdGVtczpjZW50ZXI7bGluZS1oZWlnaHQ6bm9ybWFsO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn0ubnVtYmVyRWRpdG9yIC5iYmotbWFzay1lcnJvcntib3gtc2hhZG93OjAgLTJweCAwICNlOTFlNjMgaW5zZXR9Lm51bWJlckVkaXRvciAuYmJqLW1hc2stc3VjY2Vzc3tib3gtc2hhZG93OjAgLTJweCAwICM0Y2FmNTAgaW5zZXR9Lm51bWJlckVkaXRvcl9faW5wdXR7cGFkZGluZy1sZWZ0OjZweDtib3JkZXI6dGhpbiBzb2xpZCB2YXIoLS1hZy1pbnB1dC1mb2N1cy1ib3JkZXItY29sb3IsIHJnYmEoMzMsMTUwLDI0MywwLjQpKTtib3JkZXItcmFkaXVzOjNweDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWFnLWJhY2tncm91bmQtY29sb3IpO2NvbG9yOmluaGVyaXR9LmFnLXRoZW1lLWFscGluZSAubnVtYmVyRWRpdG9yX19pbnB1dCwuYWctdGhlbWUtYmFsaGFtIC5udW1iZXJFZGl0b3JfX2lucHV0LC5hZy10aGVtZS1tYXRlcmlhbCAubnVtYmVyRWRpdG9yX19pbnB1dHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWFnLWJhY2tncm91bmQtY29sb3IsICNmZmYpfS5hZy10aGVtZS1hbHBpbmUtZGFyayAubnVtYmVyRWRpdG9yX19pbnB1dCwuYWctdGhlbWUtYmFsaGFtLWRhcmsgLm51bWJlckVkaXRvcl9faW5wdXR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yLCAjMmQzNDM2KX1cXG5cIiwgXCJcIl0pO1xuXG4vLyBleHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyIS4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL051bWJlckVkaXRvci9zdHlsZS5zY3NzXG4vLyBtb2R1bGUgaWQgPSA2MFxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSAyIDMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgVGV4dEVkaXRvciBmcm9tICcuL1RleHRFZGl0b3InXG5cbmV4cG9ydCBkZWZhdWx0IFRleHRFZGl0b3JcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9UZXh0RWRpdG9yL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IENvbXBvbmVudCBmcm9tICcuLi9Db21wb25lbnQnXG5pbXBvcnQgeyBhdXRvYmluZCwgb3ZlcnJpZGUgfSBmcm9tICdjb3JlLWRlY29yYXRvcnMnXG5cbmltcG9ydCAnLi9zdHlsZS5zY3NzJ1xuXG4vKipcbiAqIFRleHQgRWRpdG9yXG4gKlxuICogSGFuZGxlIHRleHQgdmFsdWVzIEVkaXRpbmdcbiAqXG4gKiB8IE5hbWUgICAgICAgICAgICAgICAgICBcdHwgRGVmYXVsdCAgICAgXHR8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHR8Oi0tLS0tLS0tLS0tLS06fC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAqKnRleHRQYXR0ZXJuKiogICB8IHVuZGVmaW5lZCAgICB8IEEgcmVndWxhciBleHByZXNzaW9uIHRoYXQgdGhlIGlucHV0J3MgdmFsdWUgbXVzdCBtYXRjaCBpbiBvcmRlciBmb3IgdGhlIHZhbHVlIHRvIHBhc3MgY29uc3RyYWludCB2YWxpZGF0aW9uXG4gKiB8ICoqdGV4dFJlcXVpcmVkKiogICB8IHVuZGVmaW5lZCAgICB8IEJvb2xlYW4uIEEgdmFsdWUgaXMgcmVxdWlyZWQgdG8gY29uc2lkZXIgdGhlIGlucHV0IHZhbGlkXG4gKiB8ICoqdGV4dE1hc2sqKiAgIHwgdW5kZWZpbmVkICAgIHwgQSBiYmogc3RyaW5nIG1hc2sgdG8gdmFsaWRhdGUgdGhlIHZhbHVlXG4gKiB8ICoqdGV4dFRpdGxlKiogICB8IG51bGwgICAgfCBUaGUgaW5wdXQgdGl0bGUgLCB3aGVuIG51bGwgYW5kIHRoZSAqKnRleHRNYXNrKiogb3B0aW9ucyBpcyBkZWZpbmVkICwgdGhlbiB3ZSB1c2UgdGhlIG1hc2sgYXMgdGl0bGUgLCB3aGVuIHNldCB0byBgZGVmYXVsdGAgd2UgdGhlIGJyb3dzZXIncyBkZWZhdWx0IHRpdGxlICwgb3RoZXJ3aXNlIHRoZSB2YWx1ZSBkZWZpbmVkIGluIHRoaXMgb3B0aW9uXG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqL1xuY2xhc3MgVGV4dEVkaXRvciBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiAgQGluaGVyaXREb2NcbiAgICovXG4gIEBvdmVycmlkZVxuICBpbml0KHBhcmFtcykge1xuICAgIGNvbnN0IHBhdHRlcm4gPSB0aGlzLmdldE9wdGlvbigndGV4dFBhdHRlcm4nLCBwYXJhbXMpXG4gICAgY29uc3QgcmVxdWlyZWQgPSB0aGlzLmdldE9wdGlvbigndGV4dFJlcXVpcmVkJywgcGFyYW1zKVxuICAgIGNvbnN0IG1hc2sgPSB0aGlzLmdldE9wdGlvbigndGV4dE1hc2snLCBwYXJhbXMpXG4gICAgY29uc3QgdGl0bGUgPSB0aGlzLmdldE9wdGlvbigndGV4dFRpdGxlJywgcGFyYW1zKVxuXG4gICAgbGV0IHN0YXJ0VmFsdWVcblxuICAgIHRoaXMuX2ZvY3VzQWZ0ZXJBdHRhY2hlZCA9IHBhcmFtcy5jZWxsU3RhcnRlZEVkaXRcbiAgICBpZiAodGhpcy5fZm9jdXNBZnRlckF0dGFjaGVkKSB7XG4gICAgICBsZXQga2V5UHJlc3NCYWNrc3BhY2VPckRlbGV0ZSA9XG4gICAgICAgIHBhcmFtcy5rZXlQcmVzcyA9PSAzMiB8fCBwYXJhbXMua2V5UHJlc3MgPT0gNDYgLy8gc3BhY2UgLy8gZGVsZXRlXG5cbiAgICAgIGlmIChrZXlQcmVzc0JhY2tzcGFjZU9yRGVsZXRlKSB7XG4gICAgICAgIHN0YXJ0VmFsdWUgPSAnJ1xuICAgICAgfSBlbHNlIGlmIChwYXJhbXMuY2hhclByZXNzKSB7XG4gICAgICAgIHN0YXJ0VmFsdWUgPSBwYXJhbXMuY2hhclByZXNzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydFZhbHVlID0gcGFyYW1zLnZhbHVlXG4gICAgICAgIGlmIChwYXJhbXMua2V5UHJlc3MgIT0gMTEzKSB7XG4gICAgICAgICAgLy9GMlxuICAgICAgICAgIHRoaXMuX2hpZ2hsaWdodEFsbE9uRm9jdXMgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnRWYWx1ZSA9IHBhcmFtcy52YWx1ZVxuICAgIH1cblxuICAgIHRoaXMuX3BhcmFtcyA9IHBhcmFtc1xuXG4gICAgdGhpcy5fZ3VpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICB0aGlzLl9ndWkuY2xhc3NOYW1lID0gJ3RleHRFZGl0b3IgYWctY2VsbC1lZGl0LXdyYXBwZXInXG4gICAgdGhpcy5fZ3VpLnRhYkluZGV4ID0gJzAnXG4gICAgdGhpcy5fZ3VpLmlubmVySFRNTCA9IC8qIGh0bWwgKi8gYFxuICAgIDxkaXYgY2xhc3M9XCJhZy1jZWxsLWVkaXRvciBhZy1sYWJlbGVkIGFnLWxhYmVsLWFsaWduLWxlZnQgYWctdGV4dC1maWVsZCBhZy1pbnB1dC1maWVsZFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImFnLXdyYXBwZXIgYWctaW5wdXQtd3JhcHBlciBhZy10ZXh0LWZpZWxkLWlucHV0LXdyYXBwZXJcIj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIGBcblxuICAgIC8vIGlucHV0XG4gICAgdGhpcy5faW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpXG4gICAgdGhpcy5faW5wdXQuY2xhc3NOYW1lID1cbiAgICAgICd0ZXh0RWRpdG9yX19pbnB1dCBhZy1jZWxsLWVkaXQtaW5wdXQgYWctaW5wdXQtZmllbGQtaW5wdXQgYWctdGV4dC1maWVsZC1pbnB1dCdcbiAgICB0aGlzLl9pbnB1dC5pZCA9IGBlbC0ke01hdGgucmFuZG9tKClcbiAgICAgIC50b1N0cmluZygxNilcbiAgICAgIC5zbGljZSgyLCAxMCl9YCAvLyBnZW5lcmF0ZSByYW5kb20gaWRcbiAgICB0aGlzLl9pbnB1dC50eXBlID0gJ3RleHQnXG4gICAgdGhpcy5faW5wdXQudmFsdWUgPSBzdGFydFZhbHVlXG4gICAgdGhpcy5faW5wdXQudGFiSW5kZXggPSAwXG5cbiAgICB0aGlzLl9ndWkucXVlcnlTZWxlY3RvcignLmFnLWlucHV0LXdyYXBwZXInKS5hcHBlbmRDaGlsZCh0aGlzLl9pbnB1dClcblxuICAgIGlmIChwYXR0ZXJuICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl9pbnB1dC5zZXRBdHRyaWJ1dGUoJ3BhdHRlcm4nLCBwYXR0ZXJuKVxuICAgIH1cblxuICAgIGlmIChyZXF1aXJlZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5faW5wdXQuc2V0QXR0cmlidXRlKCdyZXF1aXJlZCcsICdyZXF1aXJlZCcpXG4gICAgfVxuXG4gICAgaWYgKHRpdGxlICE9PSBudWxsKSB7XG4gICAgICBpZiAodGl0bGUgIT09ICdkZWZhdWx0Jykge1xuICAgICAgICB0aGlzLl9pbnB1dC50aXRsZSA9IHRpdGxlXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChtYXNrKSB7XG4gICAgICB0aGlzLl9pbnB1dC50aXRsZSA9IG1hc2tcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBhIG1hc2sgdGhlbiB3ZSB1c2UgdGhlIGBCYXNpcy5JbnB1dE1hc2tpbmcuVGV4dElucHV0YFxuICAgIGlmIChtYXNrKSB7XG4gICAgICB0aGlzLl9pbnB1dC5kYXRhc2V0Lm1hc2sgPSBtYXNrXG4gICAgICB0aGlzLl90ZXh0SW5wdXQgPSBuZXcgQmFzaXMuSW5wdXRNYXNraW5nLlRleHRJbnB1dCh7XG4gICAgICAgIGVsZW1lbnRzOiBbdGhpcy5faW5wdXRdLFxuICAgICAgICBkb2M6IHRoaXMuZ2V0RG9jKHBhcmFtcyksXG4gICAgICAgIG9uVXBkYXRlOiB0aGlzLl9vblRleHRJbnB1dFVwZGF0ZSxcbiAgICAgICAgb25JbnZhbGlkOiB0aGlzLl9vblRleHRJbnB1dEludmFsaWQsXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9pbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25JbnB1dEtleURvd25VcClcbiAgICAgIHRoaXMuX2lucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5fb25JbnB1dEtleURvd25VcClcbiAgICAgIHRoaXMuX2lucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgdGhpcy5fb25DaGFuZ2UpXG4gICAgICB0aGlzLl9pbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9vbkNoYW5nZSlcbiAgICB9XG5cbiAgICB0aGlzLl9ndWkuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uQ29tcG9uZW50S2V5RG93bilcblxuICAgIC8vIHVwZGF0ZSBgY3VycmVudFZhbHVlYCB0aGUgdmFsdWUgd2hpY2ggdGhpcyBjb21wb25lbnQgaXMgbWFuYWdpbmdcbiAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSBzdGFydFZhbHVlXG4gICAgdGhpcy5fX2lzTWFza2VkX18gPSBtYXNrICYmIG1hc2subGVuZ3RoXG4gIH1cblxuICAvKipcbiAgICogIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgZGVzdHJveSgpIHtcbiAgICBpZiAoIXRoaXMuX19pc01hc2tlZF9fKSB7XG4gICAgICB0aGlzLl9pbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25JbnB1dEtleURvd25VcClcbiAgICAgIHRoaXMuX2lucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5fb25JbnB1dEtleURvd25VcClcbiAgICAgIHRoaXMuX2lucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2lucHV0JywgdGhpcy5fb25DaGFuZ2UpXG4gICAgICB0aGlzLl9pbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9vbkNoYW5nZSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdGV4dElucHV0LmRlc3Ryb3koKVxuICAgIH1cblxuICAgIHRoaXMuX2d1aS5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25Db21wb25lbnRLZXlEb3duKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY2FsbGVkIG9uY2UgYWZ0ZXIgR1VJIGlzIGF0dGFjaGVkIHRvIERPTS5cbiAgICpcbiAgICogTWFrZSBzdXJlIGNvbnRhaW5lciBpcyBhbHdheXMgZm9jdXNlZCB0byBsaXN0ZW4gdG8ga2V5IGNoYW5nZXNcbiAgICovXG4gIGFmdGVyR3VpQXR0YWNoZWQoKSB7XG4gICAgaWYgKCF0aGlzLl9faXNNYXNrZWRfXykge1xuICAgICAgdGhpcy5fdmFsaWRhdGVJbnB1dCh0aGlzLl9pbnB1dClcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGlnaGxpZ2h0QWxsT25Gb2N1cykge1xuICAgICAgdGhpcy5faW5wdXQuc2VsZWN0KClcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuX2ZvY3VzQWZ0ZXJBdHRhY2hlZCkge1xuICAgICAgICB0aGlzLmZvY3VzSW4oKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgVGhlIGNvbXBvbmVudCB2YWx1ZVxuICAgKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9XG4gICAqL1xuICBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyYW1zLnBhcnNlVmFsdWUodGhpcy5fY3VycmVudFZhbHVlKVxuICB9XG5cbiAgLyoqXG4gICAqIElmIGRvaW5nIGZ1bGwgcm93IGVkaXQsIHRoZW4gZ2V0cyBjYWxsZWQgd2hlbiB0YWJiaW5nIGludG8gdGhlIGNlbGwuXG4gICAqL1xuICBmb2N1c0luKCkge1xuICAgIHRoaXMuX2lucHV0LmZvY3VzKClcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNhbGxlZCBvbmNlIGFmdGVyIGluaXRpYWxpemVkIGFuZCByZXR1cm5zIGZhbHNlIHNvIHRoZSBlZGl0b3IgYXBwZWFycyBpbiB0aGUgY2VsbFxuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufSBhbHdheXMgZmFsc2VcbiAgICoqL1xuICBpc1BvcHVwKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgY3VycmVudCB2YWx1ZSB3aGVuIHRoZSBUZXh0SW5wdXQgY29tcG9uZW50IGZpcmVzIHRoZSB1cGRhdGVcbiAgICogZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBfbWFza2VkICB0aGUgbWFza2VkIHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB1bm1hc2tlZCAgdGhlIHVubWFza2VkIHZhbHVlXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX29uVGV4dElucHV0VXBkYXRlKF9tYXNrZWQsIHVubWFza2VkLCBpbnB1dCkge1xuICAgIHRoaXMuX2N1cnJlbnRWYWx1ZSA9IHVubWFza2VkXG4gICAgaW5wdXQuc2V0Q3VzdG9tVmFsaWRpdHkoJycpXG4gICAgdGhpcy5mb2N1c0luKClcbiAgICAvLyB3ZSBwYXNzIHRoZSBsYXN0IGNhcHR1cmVkIGV2ZW50IGJhY2sgdG8gdGhlIGdyaWQgdG8gaGFuZGxlIGl0IGludGVybmFsbHlcbiAgICBpZiAodGhpcy5fX2xhc3RDb21wb25lbnRLZXlib2FyZFByZXNzX18pIHtcbiAgICAgIHRoaXMuX3BhcmFtcy5vbktleURvd24odGhpcy5fX2xhc3RDb21wb25lbnRLZXlib2FyZFByZXNzX18pXG4gICAgICB0aGlzLl9fbGFzdENvbXBvbmVudEtleWJvYXJkUHJlc3NfXyA9IG51bGxcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIE9uIGludmFsaWQgaW5wdXRzICwgdXBkYXRlIHRoZSBpbnB1dCB3aXRoIGEgY3VzdG9tIHZhbGlkaXR5IG1lc3NhZ2VcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBlcnJvciB0aGUgZXJyb3IgbWVzc2FnZSByZXBvcnRlZCBieSBUZXh0SW5wdXRcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gaW5wdXQgVGhlIGlucHV0IGVsZW1lbnQgdXNlZCBpbnN0YW5jZVxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vblRleHRJbnB1dEludmFsaWQoZXJyb3IsIGlucHV0KSB7XG4gICAgdGhpcy5mb2N1c0luKClcbiAgICAvLyByZXN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZSBvZiB0aGUgY2VsbFxuICAgIHRoaXMuX2N1cnJlbnRWYWx1ZSA9IHRoaXMuX3BhcmFtcy52YWx1ZVxuICAgIGlmICh0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpbnB1dC5zZXRDdXN0b21WYWxpZGl0eShlcnJvcilcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FwdHVyZSBhbGwga2V5Ym9hcmQgZXZlbnRzIHRvIGFsbG93IHZhbHVlIHByb2Nlc3NpbmcgYnkgdGhlIE51bWJlcklucHV0IGNvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGVcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25Db21wb25lbnRLZXlEb3duKGUpIHtcbiAgICBjb25zdCBrZXkgPSBldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlXG5cbiAgICBjb25zdCBpc05hdmlnYXRpb25LZXkgPVxuICAgICAga2V5ID09PSAzNyB8fCAvLyBsZWZ0XG4gICAgICBrZXkgPT09IDM4IHx8IC8vIHVwXG4gICAgICBrZXkgPT09IDM5IHx8IC8vIHJpZ2h0XG4gICAgICBrZXkgPT09IDQwIHx8IC8vIGRvd25cbiAgICAgIGtleSA9PT0gMzMgfHwgLy8gcGFnZSB1cFxuICAgICAga2V5ID09PSAzNCB8fCAvLyBwYWdlIGRvd25cbiAgICAgIGtleSA9PT0gMzUgfHwgLy8gcGFnZSBob21lXG4gICAgICBrZXkgPT09IDM2IHx8IC8vIHBhZ2UgZW5kXG4gICAgICBrZXkgPT09IDEzIC8vIGVudGVyXG5cbiAgICBpZiAoaXNOYXZpZ2F0aW9uS2V5KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgLy8gc2F2ZSB0aGUgbGFzdCBjYXB0dXJlIGtleSBzbyBOdW1iZXJJbnB1dCBjYW4gcGFzcyBpdCBhZ2FpbiB0byB0aGUgZ3JpZC5cbiAgICAgIHRoaXMuX19sYXN0Q29tcG9uZW50S2V5Ym9hcmRQcmVzc19fID0gZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8ga2V5IGNoYW5nZXMgYW5kIHZhbGlkYXRlIHRoZSBpbnB1dFxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vbklucHV0S2V5RG93blVwKGV2ZW50KSB7XG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuX3ZhbGlkYXRlSW5wdXQoZXZlbnQudGFyZ2V0KVxuXG4gICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSBldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlXG5cbiAgICBpZiAoa2V5ID09IDEzIHx8IGtleSA9PT0gOSkge1xuICAgICAgLy8gZW50ZXJcbiAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZSA9IHRoaXMuX2lucHV0LnZhbHVlXG4gICAgfVxuXG4gICAgLy8gd2UgcGFzcyB0aGUgbGFzdCBjYXB0dXJlZCBldmVudCBiYWNrIHRvIHRoZSBncmlkIHRvIGhhbmRsZSBpdCBpbnRlcm5hbGx5XG4gICAgaWYgKHRoaXMuX19sYXN0Q29tcG9uZW50S2V5Ym9hcmRQcmVzc19fKSB7XG4gICAgICB0aGlzLl9wYXJhbXMub25LZXlEb3duKHRoaXMuX19sYXN0Q29tcG9uZW50S2V5Ym9hcmRQcmVzc19fKVxuICAgICAgdGhpcy5fX2xhc3RDb21wb25lbnRLZXlib2FyZFByZXNzX18gPSBudWxsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBgY3VycmVudFZhbHVlYCBvbiB0aGUgaW5wdXQgdmFsdWUgaXMgY2hhbmdlZCBhbmQgaXQgaXMgdmFsaWRcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25DaGFuZ2UoZXZlbnQpIHtcbiAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy5fdmFsaWRhdGVJbnB1dChldmVudC50YXJnZXQpXG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZSA9IHRoaXMuX2lucHV0LnZhbHVlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoZSBnaXZlbiBpbnB1dCBlbGVtZW50XG4gICAqXG4gICAqIEBwYXJhbSB7SFRNTElucHV0RWxlbWVudH0gaW5wdXQgaW5wdXQgZWxlbWVudFxuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIHdoZW4gdmFsaWQgLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIF92YWxpZGF0ZUlucHV0KGlucHV0KSB7XG4gICAgY29uc3QgaXNWYWxpZCA9IGlucHV0LmNoZWNrVmFsaWRpdHkoKVxuXG4gICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICBpbnB1dC5jbGFzc0xpc3QuYWRkKCdiYmotbWFzay1lcnJvcicpXG4gICAgICBpbnB1dC5jbGFzc0xpc3QucmVtb3ZlKCdiYmotbWFzay1zdWNjZXNzJylcbiAgICAgIC8vIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHZhbHVlXG4gICAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSB0aGlzLl9wYXJhbXMudmFsdWVcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXQuY2xhc3NMaXN0LnJlbW92ZSgnYmJqLW1hc2stZXJyb3InKVxuICAgICAgaW5wdXQuY2xhc3NMaXN0LmFkZCgnYmJqLW1hc2stc3VjY2VzcycpXG4gICAgfVxuXG4gICAgcmV0dXJuIGlzVmFsaWRcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUZXh0RWRpdG9yXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvVGV4dEVkaXRvci9UZXh0RWRpdG9yLmpzIiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIik7XG5cbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuXG52YXIgdHJhbnNmb3JtO1xudmFyIGluc2VydEludG87XG5cblxuXG52YXIgb3B0aW9ucyA9IHtcImhtclwiOnRydWV9XG5cbm9wdGlvbnMudHJhbnNmb3JtID0gdHJhbnNmb3JtXG5vcHRpb25zLmluc2VydEludG8gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LnBhcmVudC5kb2N1bWVudC5oZWFkXG4gICAgICAgICAgICAgIH07XG5cbnZhciB1cGRhdGUgPSByZXF1aXJlKFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qc1wiKShjb250ZW50LCBvcHRpb25zKTtcblxuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG5cbmlmKG1vZHVsZS5ob3QpIHtcblx0bW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5zY3NzXCIpO1xuXG5cdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cblx0XHR2YXIgbG9jYWxzID0gKGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHZhciBrZXksIGlkeCA9IDA7XG5cblx0XHRcdGZvcihrZXkgaW4gYSkge1xuXHRcdFx0XHRpZighYiB8fCBhW2tleV0gIT09IGJba2V5XSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRpZHgrKztcblx0XHRcdH1cblxuXHRcdFx0Zm9yKGtleSBpbiBiKSBpZHgtLTtcblxuXHRcdFx0cmV0dXJuIGlkeCA9PT0gMDtcblx0XHR9KGNvbnRlbnQubG9jYWxzLCBuZXdDb250ZW50LmxvY2FscykpO1xuXG5cdFx0aWYoIWxvY2FscykgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGluZyBDU1MgSE1SIGR1ZSB0byBjaGFuZ2VkIGNzcy1tb2R1bGVzIGxvY2Fscy4nKTtcblxuXHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0fSk7XG5cblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL1RleHRFZGl0b3Ivc3R5bGUuc2NzcyIsImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikoZmFsc2UpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiLnRleHRFZGl0b3J7b3ZlcmZsb3c6aGlkZGVufS50ZXh0RWRpdG9yIC50ZXh0SW5wdXRNYXNrX193cmFwe3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6MDttYXJnaW46MDtkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0bzthbGlnbi1pdGVtczpjZW50ZXI7bGluZS1oZWlnaHQ6bm9ybWFsO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn0udGV4dEVkaXRvciAuYmJqLW1hc2stZXJyb3J7Ym94LXNoYWRvdzowIC0ycHggMCAjZTkxZTYzIGluc2V0fS50ZXh0RWRpdG9yIC5iYmotbWFzay1zdWNjZXNze2JveC1zaGFkb3c6MCAtMnB4IDAgIzRjYWY1MCBpbnNldH0udGV4dEVkaXRvcl9faW5wdXR7cGFkZGluZy1sZWZ0OjZweDtib3JkZXI6dGhpbiBzb2xpZCB2YXIoLS1hZy1pbnB1dC1mb2N1cy1ib3JkZXItY29sb3IsIHJnYmEoMzMsMTUwLDI0MywwLjQpKTtib3JkZXItcmFkaXVzOjNweDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWFnLWJhY2tncm91bmQtY29sb3IpO2NvbG9yOmluaGVyaXR9LmFnLXRoZW1lLWFscGluZSAudGV4dEVkaXRvcl9faW5wdXQsLmFnLXRoZW1lLWJhbGhhbSAudGV4dEVkaXRvcl9faW5wdXQsLmFnLXRoZW1lLW1hdGVyaWFsIC50ZXh0RWRpdG9yX19pbnB1dHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWFnLWJhY2tncm91bmQtY29sb3IsICNmZmYpfS5hZy10aGVtZS1hbHBpbmUtZGFyayAudGV4dEVkaXRvcl9faW5wdXQsLmFnLXRoZW1lLWJhbGhhbS1kYXJrIC50ZXh0RWRpdG9yX19pbnB1dHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWFnLWJhY2tncm91bmQtY29sb3IsICMyZDM0MzYpfVxcblwiLCBcIlwiXSk7XG5cbi8vIGV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIhLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvVGV4dEVkaXRvci9zdHlsZS5zY3NzXG4vLyBtb2R1bGUgaWQgPSA2NFxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSAyIDMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgQ29tcG9uZW50IGZyb20gJy4uL0NvbXBvbmVudCdcbmltcG9ydCB0ZW1wbGF0ZSBmcm9tICdsb2Rhc2gtZXMvdGVtcGxhdGUnXG5cbi8qKlxuICogTnVtYmVycyBFZGl0b3JcbiAqXG4gKiBIYW5kbGUgbnVtYmVyIHZhbHVlcyBFZGl0aW5nXG4gKlxuICogfCBOYW1lICAgICAgICAgICAgICAgICAgXHR8IERlZmF1bHQgICAgIFx0fCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx0fDotLS0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgKipyZW5kZXJUZW1wbGF0ZSoqICAgfCB1bmRlZmluZWQgICAgfCBsb2Rhc2ggdGVtcGxhdGVcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5jbGFzcyBUZW1wbGF0ZVJlbmRlcmVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBuZXcgVGVtcGxhdGVSZW5kZXJlclxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgLy8gd2lsbCB0aGlzIGFmZmVjdCBCQmogYnVpID9cbiAgICB0aGlzLl9ndWkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIHRoaXMuX2d1aS5jbGFzc05hbWUgPSAndGVtcGxhdGVSZW5kZXJlciBhZy1jZWxsLXdyYXBwZXInXG4gICAgdGhpcy5fZ3VpLnN0eWxlLndpZHRoID0gJzEwMCUnXG4gICAgdGhpcy5fZ3VpLnN0eWxlLmhlaWdodCA9ICcxMDAlJ1xuICAgIHRoaXMuX2d1aS5zdHlsZS5saW5lSGVpZ2h0ID0gJ25vcm1hbCdcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGluaGVyaXREb2NcbiAgICovXG4gIGluaXQocGFyYW1zKSB7XG4gICAgdGhpcy5yZWZyZXNoKHBhcmFtcywgdHJ1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGluaGVyaXREb2NcbiAgICovXG4gIGdldEd1aSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZ3VpXG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaCB0aGUgY2VsbCBsXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgY2VsbCByZW5kZXJlciBwYXJhbXNcbiAgICogQHBhcmFtIHtCb29sZWFufSBpc0luaXQgdHJ1ZSB3aGVuIHRoaXMgbWV0aG9kIGlzIGJlaW5nIGNhbGxlZCBpbiBgaW5pdGAgcGhhc2UgLCBmYWxzZSBvdGhlcndpc2VcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgcmVmcmVzaCBzdWNjZWVkZWQsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXG4gICAqL1xuICByZWZyZXNoKHBhcmFtcywgaXNJbml0KSB7XG4gICAgaWYgKGlzSW5pdCkge1xuICAgICAgdGhpcy5fY29tcGlsZWRUZW1wbGF0ZSA9IHRlbXBsYXRlKFxuICAgICAgICB0aGlzLmdldE9wdGlvbigncmVuZGVyVGVtcGxhdGUnLCBwYXJhbXMsICcnKVxuICAgICAgKVxuICAgIH1cblxuICAgIGxldCBjb250ZW50XG5cbiAgICBpZiAodHlwZW9mIHRoaXMuX2NvbXBpbGVkVGVtcGxhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnRlbnQgPSB0aGlzLl9jb21waWxlZFRlbXBsYXRlKHsgcGFyYW1zIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRlbnQgPSBwYXJhbXMudmFsdWVGb3JtYXR0ZWQgPyBwYXJhbXMudmFsdWVGb3JtYXR0ZWQgOiBwYXJhbXMudmFsdWVcbiAgICB9XG5cbiAgICB0aGlzLl9ndWkuaW5uZXJIVE1MID0gY29udGVudFxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUZW1wbGF0ZVJlbmRlcmVyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvVGVtcGxhdGVSZW5kZXJlci9UZW1wbGF0ZVJlbmRlcmVyLmpzIiwiaW1wb3J0IGFzc2lnbkluV2l0aCBmcm9tICcuL2Fzc2lnbkluV2l0aC5qcyc7XG5pbXBvcnQgYXR0ZW1wdCBmcm9tICcuL2F0dGVtcHQuanMnO1xuaW1wb3J0IGJhc2VWYWx1ZXMgZnJvbSAnLi9fYmFzZVZhbHVlcy5qcyc7XG5pbXBvcnQgY3VzdG9tRGVmYXVsdHNBc3NpZ25JbiBmcm9tICcuL19jdXN0b21EZWZhdWx0c0Fzc2lnbkluLmpzJztcbmltcG9ydCBlc2NhcGVTdHJpbmdDaGFyIGZyb20gJy4vX2VzY2FwZVN0cmluZ0NoYXIuanMnO1xuaW1wb3J0IGlzRXJyb3IgZnJvbSAnLi9pc0Vycm9yLmpzJztcbmltcG9ydCBpc0l0ZXJhdGVlQ2FsbCBmcm9tICcuL19pc0l0ZXJhdGVlQ2FsbC5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuaW1wb3J0IHJlSW50ZXJwb2xhdGUgZnJvbSAnLi9fcmVJbnRlcnBvbGF0ZS5qcyc7XG5pbXBvcnQgdGVtcGxhdGVTZXR0aW5ncyBmcm9tICcuL3RlbXBsYXRlU2V0dGluZ3MuanMnO1xuaW1wb3J0IHRvU3RyaW5nIGZyb20gJy4vdG9TdHJpbmcuanMnO1xuXG4vKiogVXNlZCB0byBtYXRjaCBlbXB0eSBzdHJpbmcgbGl0ZXJhbHMgaW4gY29tcGlsZWQgdGVtcGxhdGUgc291cmNlLiAqL1xudmFyIHJlRW1wdHlTdHJpbmdMZWFkaW5nID0gL1xcYl9fcCBcXCs9ICcnOy9nLFxuICAgIHJlRW1wdHlTdHJpbmdNaWRkbGUgPSAvXFxiKF9fcCBcXCs9KSAnJyBcXCsvZyxcbiAgICByZUVtcHR5U3RyaW5nVHJhaWxpbmcgPSAvKF9fZVxcKC4qP1xcKXxcXGJfX3RcXCkpIFxcK1xcbicnOy9nO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2hcbiAqIFtFUyB0ZW1wbGF0ZSBkZWxpbWl0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10ZW1wbGF0ZS1saXRlcmFsLWxleGljYWwtY29tcG9uZW50cykuXG4gKi9cbnZhciByZUVzVGVtcGxhdGUgPSAvXFwkXFx7KFteXFxcXH1dKig/OlxcXFwuW15cXFxcfV0qKSopXFx9L2c7XG5cbi8qKiBVc2VkIHRvIGVuc3VyZSBjYXB0dXJpbmcgb3JkZXIgb2YgdGVtcGxhdGUgZGVsaW1pdGVycy4gKi9cbnZhciByZU5vTWF0Y2ggPSAvKCReKS87XG5cbi8qKiBVc2VkIHRvIG1hdGNoIHVuZXNjYXBlZCBjaGFyYWN0ZXJzIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy4gKi9cbnZhciByZVVuZXNjYXBlZFN0cmluZyA9IC9bJ1xcblxcclxcdTIwMjhcXHUyMDI5XFxcXF0vZztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY29tcGlsZWQgdGVtcGxhdGUgZnVuY3Rpb24gdGhhdCBjYW4gaW50ZXJwb2xhdGUgZGF0YSBwcm9wZXJ0aWVzXG4gKiBpbiBcImludGVycG9sYXRlXCIgZGVsaW1pdGVycywgSFRNTC1lc2NhcGUgaW50ZXJwb2xhdGVkIGRhdGEgcHJvcGVydGllcyBpblxuICogXCJlc2NhcGVcIiBkZWxpbWl0ZXJzLCBhbmQgZXhlY3V0ZSBKYXZhU2NyaXB0IGluIFwiZXZhbHVhdGVcIiBkZWxpbWl0ZXJzLiBEYXRhXG4gKiBwcm9wZXJ0aWVzIG1heSBiZSBhY2Nlc3NlZCBhcyBmcmVlIHZhcmlhYmxlcyBpbiB0aGUgdGVtcGxhdGUuIElmIGEgc2V0dGluZ1xuICogb2JqZWN0IGlzIGdpdmVuLCBpdCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgYF8udGVtcGxhdGVTZXR0aW5nc2AgdmFsdWVzLlxuICpcbiAqICoqTm90ZToqKiBJbiB0aGUgZGV2ZWxvcG1lbnQgYnVpbGQgYF8udGVtcGxhdGVgIHV0aWxpemVzXG4gKiBbc291cmNlVVJMc10oaHR0cDovL3d3dy5odG1sNXJvY2tzLmNvbS9lbi90dXRvcmlhbHMvZGV2ZWxvcGVydG9vbHMvc291cmNlbWFwcy8jdG9jLXNvdXJjZXVybClcbiAqIGZvciBlYXNpZXIgZGVidWdnaW5nLlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHByZWNvbXBpbGluZyB0ZW1wbGF0ZXMgc2VlXG4gKiBbbG9kYXNoJ3MgY3VzdG9tIGJ1aWxkcyBkb2N1bWVudGF0aW9uXShodHRwczovL2xvZGFzaC5jb20vY3VzdG9tLWJ1aWxkcykuXG4gKlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQ2hyb21lIGV4dGVuc2lvbiBzYW5kYm94ZXMgc2VlXG4gKiBbQ2hyb21lJ3MgZXh0ZW5zaW9ucyBkb2N1bWVudGF0aW9uXShodHRwczovL2RldmVsb3Blci5jaHJvbWUuY29tL2V4dGVuc2lvbnMvc2FuZGJveGluZ0V2YWwpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgdGVtcGxhdGUgc3RyaW5nLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gKiBAcGFyYW0ge1JlZ0V4cH0gW29wdGlvbnMuZXNjYXBlPV8udGVtcGxhdGVTZXR0aW5ncy5lc2NhcGVdXG4gKiAgVGhlIEhUTUwgXCJlc2NhcGVcIiBkZWxpbWl0ZXIuXG4gKiBAcGFyYW0ge1JlZ0V4cH0gW29wdGlvbnMuZXZhbHVhdGU9Xy50ZW1wbGF0ZVNldHRpbmdzLmV2YWx1YXRlXVxuICogIFRoZSBcImV2YWx1YXRlXCIgZGVsaW1pdGVyLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLmltcG9ydHM9Xy50ZW1wbGF0ZVNldHRpbmdzLmltcG9ydHNdXG4gKiAgQW4gb2JqZWN0IHRvIGltcG9ydCBpbnRvIHRoZSB0ZW1wbGF0ZSBhcyBmcmVlIHZhcmlhYmxlcy5cbiAqIEBwYXJhbSB7UmVnRXhwfSBbb3B0aW9ucy5pbnRlcnBvbGF0ZT1fLnRlbXBsYXRlU2V0dGluZ3MuaW50ZXJwb2xhdGVdXG4gKiAgVGhlIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuc291cmNlVVJMPSd0ZW1wbGF0ZVNvdXJjZXNbbl0nXVxuICogIFRoZSBzb3VyY2VVUkwgb2YgdGhlIGNvbXBpbGVkIHRlbXBsYXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnZhcmlhYmxlPSdvYmonXVxuICogIFRoZSBkYXRhIG9iamVjdCB2YXJpYWJsZSBuYW1lLlxuICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgY29tcGlsZWQgdGVtcGxhdGUgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIFVzZSB0aGUgXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlciB0byBjcmVhdGUgYSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hlbGxvIDwlPSB1c2VyICU+IScpO1xuICogY29tcGlsZWQoeyAndXNlcic6ICdmcmVkJyB9KTtcbiAqIC8vID0+ICdoZWxsbyBmcmVkISdcbiAqXG4gKiAvLyBVc2UgdGhlIEhUTUwgXCJlc2NhcGVcIiBkZWxpbWl0ZXIgdG8gZXNjYXBlIGRhdGEgcHJvcGVydHkgdmFsdWVzLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPGI+PCUtIHZhbHVlICU+PC9iPicpO1xuICogY29tcGlsZWQoeyAndmFsdWUnOiAnPHNjcmlwdD4nIH0pO1xuICogLy8gPT4gJzxiPiZsdDtzY3JpcHQmZ3Q7PC9iPidcbiAqXG4gKiAvLyBVc2UgdGhlIFwiZXZhbHVhdGVcIiBkZWxpbWl0ZXIgdG8gZXhlY3V0ZSBKYXZhU2NyaXB0IGFuZCBnZW5lcmF0ZSBIVE1MLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPCUgXy5mb3JFYWNoKHVzZXJzLCBmdW5jdGlvbih1c2VyKSB7ICU+PGxpPjwlLSB1c2VyICU+PC9saT48JSB9KTsgJT4nKTtcbiAqIGNvbXBpbGVkKHsgJ3VzZXJzJzogWydmcmVkJywgJ2Jhcm5leSddIH0pO1xuICogLy8gPT4gJzxsaT5mcmVkPC9saT48bGk+YmFybmV5PC9saT4nXG4gKlxuICogLy8gVXNlIHRoZSBpbnRlcm5hbCBgcHJpbnRgIGZ1bmN0aW9uIGluIFwiZXZhbHVhdGVcIiBkZWxpbWl0ZXJzLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPCUgcHJpbnQoXCJoZWxsbyBcIiArIHVzZXIpOyAlPiEnKTtcbiAqIGNvbXBpbGVkKHsgJ3VzZXInOiAnYmFybmV5JyB9KTtcbiAqIC8vID0+ICdoZWxsbyBiYXJuZXkhJ1xuICpcbiAqIC8vIFVzZSB0aGUgRVMgdGVtcGxhdGUgbGl0ZXJhbCBkZWxpbWl0ZXIgYXMgYW4gXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlci5cbiAqIC8vIERpc2FibGUgc3VwcG9ydCBieSByZXBsYWNpbmcgdGhlIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyAkeyB1c2VyIH0hJyk7XG4gKiBjb21waWxlZCh7ICd1c2VyJzogJ3BlYmJsZXMnIH0pO1xuICogLy8gPT4gJ2hlbGxvIHBlYmJsZXMhJ1xuICpcbiAqIC8vIFVzZSBiYWNrc2xhc2hlcyB0byB0cmVhdCBkZWxpbWl0ZXJzIGFzIHBsYWluIHRleHQuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCc8JT0gXCJcXFxcPCUtIHZhbHVlICVcXFxcPlwiICU+Jyk7XG4gKiBjb21waWxlZCh7ICd2YWx1ZSc6ICdpZ25vcmVkJyB9KTtcbiAqIC8vID0+ICc8JS0gdmFsdWUgJT4nXG4gKlxuICogLy8gVXNlIHRoZSBgaW1wb3J0c2Agb3B0aW9uIHRvIGltcG9ydCBgalF1ZXJ5YCBhcyBganFgLlxuICogdmFyIHRleHQgPSAnPCUganEuZWFjaCh1c2VycywgZnVuY3Rpb24odXNlcikgeyAlPjxsaT48JS0gdXNlciAlPjwvbGk+PCUgfSk7ICU+JztcbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUodGV4dCwgeyAnaW1wb3J0cyc6IHsgJ2pxJzogalF1ZXJ5IH0gfSk7XG4gKiBjb21waWxlZCh7ICd1c2Vycyc6IFsnZnJlZCcsICdiYXJuZXknXSB9KTtcbiAqIC8vID0+ICc8bGk+ZnJlZDwvbGk+PGxpPmJhcm5leTwvbGk+J1xuICpcbiAqIC8vIFVzZSB0aGUgYHNvdXJjZVVSTGAgb3B0aW9uIHRvIHNwZWNpZnkgYSBjdXN0b20gc291cmNlVVJMIGZvciB0aGUgdGVtcGxhdGUuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyA8JT0gdXNlciAlPiEnLCB7ICdzb3VyY2VVUkwnOiAnL2Jhc2ljL2dyZWV0aW5nLmpzdCcgfSk7XG4gKiBjb21waWxlZChkYXRhKTtcbiAqIC8vID0+IEZpbmQgdGhlIHNvdXJjZSBvZiBcImdyZWV0aW5nLmpzdFwiIHVuZGVyIHRoZSBTb3VyY2VzIHRhYiBvciBSZXNvdXJjZXMgcGFuZWwgb2YgdGhlIHdlYiBpbnNwZWN0b3IuXG4gKlxuICogLy8gVXNlIHRoZSBgdmFyaWFibGVgIG9wdGlvbiB0byBlbnN1cmUgYSB3aXRoLXN0YXRlbWVudCBpc24ndCB1c2VkIGluIHRoZSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hpIDwlPSBkYXRhLnVzZXIgJT4hJywgeyAndmFyaWFibGUnOiAnZGF0YScgfSk7XG4gKiBjb21waWxlZC5zb3VyY2U7XG4gKiAvLyA9PiBmdW5jdGlvbihkYXRhKSB7XG4gKiAvLyAgIHZhciBfX3QsIF9fcCA9ICcnO1xuICogLy8gICBfX3AgKz0gJ2hpICcgKyAoKF9fdCA9ICggZGF0YS51c2VyICkpID09IG51bGwgPyAnJyA6IF9fdCkgKyAnISc7XG4gKiAvLyAgIHJldHVybiBfX3A7XG4gKiAvLyB9XG4gKlxuICogLy8gVXNlIGN1c3RvbSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLlxuICogXy50ZW1wbGF0ZVNldHRpbmdzLmludGVycG9sYXRlID0gL3t7KFtcXHNcXFNdKz8pfX0vZztcbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hlbGxvIHt7IHVzZXIgfX0hJyk7XG4gKiBjb21waWxlZCh7ICd1c2VyJzogJ211c3RhY2hlJyB9KTtcbiAqIC8vID0+ICdoZWxsbyBtdXN0YWNoZSEnXG4gKlxuICogLy8gVXNlIHRoZSBgc291cmNlYCBwcm9wZXJ0eSB0byBpbmxpbmUgY29tcGlsZWQgdGVtcGxhdGVzIGZvciBtZWFuaW5nZnVsXG4gKiAvLyBsaW5lIG51bWJlcnMgaW4gZXJyb3IgbWVzc2FnZXMgYW5kIHN0YWNrIHRyYWNlcy5cbiAqIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICdqc3QuanMnKSwgJ1xcXG4gKiAgIHZhciBKU1QgPSB7XFxcbiAqICAgICBcIm1haW5cIjogJyArIF8udGVtcGxhdGUobWFpblRleHQpLnNvdXJjZSArICdcXFxuICogICB9O1xcXG4gKiAnKTtcbiAqL1xuZnVuY3Rpb24gdGVtcGxhdGUoc3RyaW5nLCBvcHRpb25zLCBndWFyZCkge1xuICAvLyBCYXNlZCBvbiBKb2huIFJlc2lnJ3MgYHRtcGxgIGltcGxlbWVudGF0aW9uXG4gIC8vIChodHRwOi8vZWpvaG4ub3JnL2Jsb2cvamF2YXNjcmlwdC1taWNyby10ZW1wbGF0aW5nLylcbiAgLy8gYW5kIExhdXJhIERva3Rvcm92YSdzIGRvVC5qcyAoaHR0cHM6Ly9naXRodWIuY29tL29sYWRvL2RvVCkuXG4gIHZhciBzZXR0aW5ncyA9IHRlbXBsYXRlU2V0dGluZ3MuaW1wb3J0cy5fLnRlbXBsYXRlU2V0dGluZ3MgfHwgdGVtcGxhdGVTZXR0aW5ncztcblxuICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc3RyaW5nLCBvcHRpb25zLCBndWFyZCkpIHtcbiAgICBvcHRpb25zID0gdW5kZWZpbmVkO1xuICB9XG4gIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gIG9wdGlvbnMgPSBhc3NpZ25JbldpdGgoe30sIG9wdGlvbnMsIHNldHRpbmdzLCBjdXN0b21EZWZhdWx0c0Fzc2lnbkluKTtcblxuICB2YXIgaW1wb3J0cyA9IGFzc2lnbkluV2l0aCh7fSwgb3B0aW9ucy5pbXBvcnRzLCBzZXR0aW5ncy5pbXBvcnRzLCBjdXN0b21EZWZhdWx0c0Fzc2lnbkluKSxcbiAgICAgIGltcG9ydHNLZXlzID0ga2V5cyhpbXBvcnRzKSxcbiAgICAgIGltcG9ydHNWYWx1ZXMgPSBiYXNlVmFsdWVzKGltcG9ydHMsIGltcG9ydHNLZXlzKTtcblxuICB2YXIgaXNFc2NhcGluZyxcbiAgICAgIGlzRXZhbHVhdGluZyxcbiAgICAgIGluZGV4ID0gMCxcbiAgICAgIGludGVycG9sYXRlID0gb3B0aW9ucy5pbnRlcnBvbGF0ZSB8fCByZU5vTWF0Y2gsXG4gICAgICBzb3VyY2UgPSBcIl9fcCArPSAnXCI7XG5cbiAgLy8gQ29tcGlsZSB0aGUgcmVnZXhwIHRvIG1hdGNoIGVhY2ggZGVsaW1pdGVyLlxuICB2YXIgcmVEZWxpbWl0ZXJzID0gUmVnRXhwKFxuICAgIChvcHRpb25zLmVzY2FwZSB8fCByZU5vTWF0Y2gpLnNvdXJjZSArICd8JyArXG4gICAgaW50ZXJwb2xhdGUuc291cmNlICsgJ3wnICtcbiAgICAoaW50ZXJwb2xhdGUgPT09IHJlSW50ZXJwb2xhdGUgPyByZUVzVGVtcGxhdGUgOiByZU5vTWF0Y2gpLnNvdXJjZSArICd8JyArXG4gICAgKG9wdGlvbnMuZXZhbHVhdGUgfHwgcmVOb01hdGNoKS5zb3VyY2UgKyAnfCQnXG4gICwgJ2cnKTtcblxuICAvLyBVc2UgYSBzb3VyY2VVUkwgZm9yIGVhc2llciBkZWJ1Z2dpbmcuXG4gIC8vIFRoZSBzb3VyY2VVUkwgZ2V0cyBpbmplY3RlZCBpbnRvIHRoZSBzb3VyY2UgdGhhdCdzIGV2YWwtZWQsIHNvIGJlIGNhcmVmdWxcbiAgLy8gd2l0aCBsb29rdXAgKGluIGNhc2Ugb2YgZS5nLiBwcm90b3R5cGUgcG9sbHV0aW9uKSwgYW5kIHN0cmlwIG5ld2xpbmVzIGlmIGFueS5cbiAgLy8gQSBuZXdsaW5lIHdvdWxkbid0IGJlIGEgdmFsaWQgc291cmNlVVJMIGFueXdheSwgYW5kIGl0J2QgZW5hYmxlIGNvZGUgaW5qZWN0aW9uLlxuICB2YXIgc291cmNlVVJMID0gaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCAnc291cmNlVVJMJylcbiAgICA/ICgnLy8jIHNvdXJjZVVSTD0nICtcbiAgICAgICAob3B0aW9ucy5zb3VyY2VVUkwgKyAnJykucmVwbGFjZSgvW1xcclxcbl0vZywgJyAnKSArXG4gICAgICAgJ1xcbicpXG4gICAgOiAnJztcblxuICBzdHJpbmcucmVwbGFjZShyZURlbGltaXRlcnMsIGZ1bmN0aW9uKG1hdGNoLCBlc2NhcGVWYWx1ZSwgaW50ZXJwb2xhdGVWYWx1ZSwgZXNUZW1wbGF0ZVZhbHVlLCBldmFsdWF0ZVZhbHVlLCBvZmZzZXQpIHtcbiAgICBpbnRlcnBvbGF0ZVZhbHVlIHx8IChpbnRlcnBvbGF0ZVZhbHVlID0gZXNUZW1wbGF0ZVZhbHVlKTtcblxuICAgIC8vIEVzY2FwZSBjaGFyYWN0ZXJzIHRoYXQgY2FuJ3QgYmUgaW5jbHVkZWQgaW4gc3RyaW5nIGxpdGVyYWxzLlxuICAgIHNvdXJjZSArPSBzdHJpbmcuc2xpY2UoaW5kZXgsIG9mZnNldCkucmVwbGFjZShyZVVuZXNjYXBlZFN0cmluZywgZXNjYXBlU3RyaW5nQ2hhcik7XG5cbiAgICAvLyBSZXBsYWNlIGRlbGltaXRlcnMgd2l0aCBzbmlwcGV0cy5cbiAgICBpZiAoZXNjYXBlVmFsdWUpIHtcbiAgICAgIGlzRXNjYXBpbmcgPSB0cnVlO1xuICAgICAgc291cmNlICs9IFwiJyArXFxuX19lKFwiICsgZXNjYXBlVmFsdWUgKyBcIikgK1xcbidcIjtcbiAgICB9XG4gICAgaWYgKGV2YWx1YXRlVmFsdWUpIHtcbiAgICAgIGlzRXZhbHVhdGluZyA9IHRydWU7XG4gICAgICBzb3VyY2UgKz0gXCInO1xcblwiICsgZXZhbHVhdGVWYWx1ZSArIFwiO1xcbl9fcCArPSAnXCI7XG4gICAgfVxuICAgIGlmIChpbnRlcnBvbGF0ZVZhbHVlKSB7XG4gICAgICBzb3VyY2UgKz0gXCInICtcXG4oKF9fdCA9IChcIiArIGludGVycG9sYXRlVmFsdWUgKyBcIikpID09IG51bGwgPyAnJyA6IF9fdCkgK1xcbidcIjtcbiAgICB9XG4gICAgaW5kZXggPSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7XG5cbiAgICAvLyBUaGUgSlMgZW5naW5lIGVtYmVkZGVkIGluIEFkb2JlIHByb2R1Y3RzIG5lZWRzIGBtYXRjaGAgcmV0dXJuZWQgaW5cbiAgICAvLyBvcmRlciB0byBwcm9kdWNlIHRoZSBjb3JyZWN0IGBvZmZzZXRgIHZhbHVlLlxuICAgIHJldHVybiBtYXRjaDtcbiAgfSk7XG5cbiAgc291cmNlICs9IFwiJztcXG5cIjtcblxuICAvLyBJZiBgdmFyaWFibGVgIGlzIG5vdCBzcGVjaWZpZWQgd3JhcCBhIHdpdGgtc3RhdGVtZW50IGFyb3VuZCB0aGUgZ2VuZXJhdGVkXG4gIC8vIGNvZGUgdG8gYWRkIHRoZSBkYXRhIG9iamVjdCB0byB0aGUgdG9wIG9mIHRoZSBzY29wZSBjaGFpbi5cbiAgLy8gTGlrZSB3aXRoIHNvdXJjZVVSTCwgd2UgdGFrZSBjYXJlIHRvIG5vdCBjaGVjayB0aGUgb3B0aW9uJ3MgcHJvdG90eXBlLFxuICAvLyBhcyB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgYSBjb2RlIGluamVjdGlvbiB2ZWN0b3IuXG4gIHZhciB2YXJpYWJsZSA9IGhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3ZhcmlhYmxlJykgJiYgb3B0aW9ucy52YXJpYWJsZTtcbiAgaWYgKCF2YXJpYWJsZSkge1xuICAgIHNvdXJjZSA9ICd3aXRoIChvYmopIHtcXG4nICsgc291cmNlICsgJ1xcbn1cXG4nO1xuICB9XG4gIC8vIENsZWFudXAgY29kZSBieSBzdHJpcHBpbmcgZW1wdHkgc3RyaW5ncy5cbiAgc291cmNlID0gKGlzRXZhbHVhdGluZyA/IHNvdXJjZS5yZXBsYWNlKHJlRW1wdHlTdHJpbmdMZWFkaW5nLCAnJykgOiBzb3VyY2UpXG4gICAgLnJlcGxhY2UocmVFbXB0eVN0cmluZ01pZGRsZSwgJyQxJylcbiAgICAucmVwbGFjZShyZUVtcHR5U3RyaW5nVHJhaWxpbmcsICckMTsnKTtcblxuICAvLyBGcmFtZSBjb2RlIGFzIHRoZSBmdW5jdGlvbiBib2R5LlxuICBzb3VyY2UgPSAnZnVuY3Rpb24oJyArICh2YXJpYWJsZSB8fCAnb2JqJykgKyAnKSB7XFxuJyArXG4gICAgKHZhcmlhYmxlXG4gICAgICA/ICcnXG4gICAgICA6ICdvYmogfHwgKG9iaiA9IHt9KTtcXG4nXG4gICAgKSArXG4gICAgXCJ2YXIgX190LCBfX3AgPSAnJ1wiICtcbiAgICAoaXNFc2NhcGluZ1xuICAgICAgID8gJywgX19lID0gXy5lc2NhcGUnXG4gICAgICAgOiAnJ1xuICAgICkgK1xuICAgIChpc0V2YWx1YXRpbmdcbiAgICAgID8gJywgX19qID0gQXJyYXkucHJvdG90eXBlLmpvaW47XFxuJyArXG4gICAgICAgIFwiZnVuY3Rpb24gcHJpbnQoKSB7IF9fcCArPSBfX2ouY2FsbChhcmd1bWVudHMsICcnKSB9XFxuXCJcbiAgICAgIDogJztcXG4nXG4gICAgKSArXG4gICAgc291cmNlICtcbiAgICAncmV0dXJuIF9fcFxcbn0nO1xuXG4gIHZhciByZXN1bHQgPSBhdHRlbXB0KGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBGdW5jdGlvbihpbXBvcnRzS2V5cywgc291cmNlVVJMICsgJ3JldHVybiAnICsgc291cmNlKVxuICAgICAgLmFwcGx5KHVuZGVmaW5lZCwgaW1wb3J0c1ZhbHVlcyk7XG4gIH0pO1xuXG4gIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uJ3Mgc291cmNlIGJ5IGl0cyBgdG9TdHJpbmdgIG1ldGhvZCBvclxuICAvLyB0aGUgYHNvdXJjZWAgcHJvcGVydHkgYXMgYSBjb252ZW5pZW5jZSBmb3IgaW5saW5pbmcgY29tcGlsZWQgdGVtcGxhdGVzLlxuICByZXN1bHQuc291cmNlID0gc291cmNlO1xuICBpZiAoaXNFcnJvcihyZXN1bHQpKSB7XG4gICAgdGhyb3cgcmVzdWx0O1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRlbXBsYXRlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90ZW1wbGF0ZS5qcyIsImltcG9ydCBjb3B5T2JqZWN0IGZyb20gJy4vX2NvcHlPYmplY3QuanMnO1xuaW1wb3J0IGNyZWF0ZUFzc2lnbmVyIGZyb20gJy4vX2NyZWF0ZUFzc2lnbmVyLmpzJztcbmltcG9ydCBrZXlzSW4gZnJvbSAnLi9rZXlzSW4uanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uYXNzaWduSW5gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgXG4gKiB3aGljaCBpcyBpbnZva2VkIHRvIHByb2R1Y2UgdGhlIGFzc2lnbmVkIHZhbHVlcy4gSWYgYGN1c3RvbWl6ZXJgIHJldHVybnNcbiAqIGB1bmRlZmluZWRgLCBhc3NpZ25tZW50IGlzIGhhbmRsZWQgYnkgdGhlIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgXG4gKiBpcyBpbnZva2VkIHdpdGggZml2ZSBhcmd1bWVudHM6IChvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0LCBzb3VyY2UpLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBhbGlhcyBleHRlbmRXaXRoXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0gey4uLk9iamVjdH0gc291cmNlcyBUaGUgc291cmNlIG9iamVjdHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQHNlZSBfLmFzc2lnbldpdGhcbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUpIHtcbiAqICAgcmV0dXJuIF8uaXNVbmRlZmluZWQob2JqVmFsdWUpID8gc3JjVmFsdWUgOiBvYmpWYWx1ZTtcbiAqIH1cbiAqXG4gKiB2YXIgZGVmYXVsdHMgPSBfLnBhcnRpYWxSaWdodChfLmFzc2lnbkluV2l0aCwgY3VzdG9taXplcik7XG4gKlxuICogZGVmYXVsdHMoeyAnYSc6IDEgfSwgeyAnYic6IDIgfSwgeyAnYSc6IDMgfSk7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAqL1xudmFyIGFzc2lnbkluV2l0aCA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplcikge1xuICBjb3B5T2JqZWN0KHNvdXJjZSwga2V5c0luKHNvdXJjZSksIG9iamVjdCwgY3VzdG9taXplcik7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgYXNzaWduSW5XaXRoO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9hc3NpZ25JbldpdGguanMiLCJpbXBvcnQgYXNzaWduVmFsdWUgZnJvbSAnLi9fYXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGJhc2VBc3NpZ25WYWx1ZSBmcm9tICcuL19iYXNlQXNzaWduVmFsdWUuanMnO1xuXG4vKipcbiAqIENvcGllcyBwcm9wZXJ0aWVzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMgdG8gY29weS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyB0by5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvcGllZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5T2JqZWN0KHNvdXJjZSwgcHJvcHMsIG9iamVjdCwgY3VzdG9taXplcikge1xuICB2YXIgaXNOZXcgPSAhb2JqZWN0O1xuICBvYmplY3QgfHwgKG9iamVjdCA9IHt9KTtcblxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XG5cbiAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICA/IGN1c3RvbWl6ZXIob2JqZWN0W2tleV0sIHNvdXJjZVtrZXldLCBrZXksIG9iamVjdCwgc291cmNlKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbmV3VmFsdWUgPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gICAgaWYgKGlzTmV3KSB7XG4gICAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9iamVjdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29weU9iamVjdDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NvcHlPYmplY3QuanMiLCJpbXBvcnQgYmFzZUFzc2lnblZhbHVlIGZyb20gJy4vX2Jhc2VBc3NpZ25WYWx1ZS5qcyc7XG5pbXBvcnQgZXEgZnJvbSAnLi9lcS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV07XG4gIGlmICghKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGVxKG9ialZhbHVlLCB2YWx1ZSkpIHx8XG4gICAgICAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSkge1xuICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFzc2lnblZhbHVlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXNzaWduVmFsdWUuanMiLCJpbXBvcnQgYmFzZUlzTmF0aXZlIGZyb20gJy4vX2Jhc2VJc05hdGl2ZS5qcyc7XG5pbXBvcnQgZ2V0VmFsdWUgZnJvbSAnLi9fZ2V0VmFsdWUuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkpO1xuICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXROYXRpdmU7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXROYXRpdmUuanMiLCJpbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGlzTWFza2VkIGZyb20gJy4vX2lzTWFza2VkLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCB0b1NvdXJjZSBmcm9tICcuL190b1NvdXJjZS5qcyc7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc05hdGl2ZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc05hdGl2ZS5qcyIsImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRSYXdUYWc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRSYXdUYWcuanMiLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgb2JqZWN0VG9TdHJpbmc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19vYmplY3RUb1N0cmluZy5qcyIsImltcG9ydCBjb3JlSnNEYXRhIGZyb20gJy4vX2NvcmVKc0RhdGEuanMnO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc01hc2tlZDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzTWFza2VkLmpzIiwiaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbnZhciBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbmV4cG9ydCBkZWZhdWx0IGNvcmVKc0RhdGE7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jb3JlSnNEYXRhLmpzIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b1NvdXJjZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3RvU291cmNlLmpzIiwiLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldFZhbHVlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0VmFsdWUuanMiLCJpbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGlzSXRlcmF0ZWVDYWxsIGZyb20gJy4vX2lzSXRlcmF0ZWVDYWxsLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5hc3NpZ25gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBhc3NpZ25lciBUaGUgZnVuY3Rpb24gdG8gYXNzaWduIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFzc2lnbmVyIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVBc3NpZ25lcihhc3NpZ25lcikge1xuICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IHNvdXJjZXMubGVuZ3RoLFxuICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoID4gMSA/IHNvdXJjZXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQsXG4gICAgICAgIGd1YXJkID0gbGVuZ3RoID4gMiA/IHNvdXJjZXNbMl0gOiB1bmRlZmluZWQ7XG5cbiAgICBjdXN0b21pemVyID0gKGFzc2lnbmVyLmxlbmd0aCA+IDMgJiYgdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJylcbiAgICAgID8gKGxlbmd0aC0tLCBjdXN0b21pemVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7XG4gICAgICBjdXN0b21pemVyID0gbGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IGN1c3RvbWl6ZXI7XG4gICAgICBsZW5ndGggPSAxO1xuICAgIH1cbiAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xuICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICBhc3NpZ25lcihvYmplY3QsIHNvdXJjZSwgaW5kZXgsIGN1c3RvbWl6ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQXNzaWduZXI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jcmVhdGVBc3NpZ25lci5qcyIsImltcG9ydCBhcHBseSBmcm9tICcuL19hcHBseS5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VSZXN0YCB3aGljaCB0cmFuc2Zvcm1zIHRoZSByZXN0IGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSByZXN0IGFycmF5IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyUmVzdChmdW5jLCBzdGFydCwgdHJhbnNmb3JtKSB7XG4gIHN0YXJ0ID0gbmF0aXZlTWF4KHN0YXJ0ID09PSB1bmRlZmluZWQgPyAoZnVuYy5sZW5ndGggLSAxKSA6IHN0YXJ0LCAwKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgoYXJncy5sZW5ndGggLSBzdGFydCwgMCksXG4gICAgICAgIGFycmF5ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBhcnJheVtpbmRleF0gPSBhcmdzW3N0YXJ0ICsgaW5kZXhdO1xuICAgIH1cbiAgICBpbmRleCA9IC0xO1xuICAgIHZhciBvdGhlckFyZ3MgPSBBcnJheShzdGFydCArIDEpO1xuICAgIHdoaWxlICgrK2luZGV4IDwgc3RhcnQpIHtcbiAgICAgIG90aGVyQXJnc1tpbmRleF0gPSBhcmdzW2luZGV4XTtcbiAgICB9XG4gICAgb3RoZXJBcmdzW3N0YXJ0XSA9IHRyYW5zZm9ybShhcnJheSk7XG4gICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXMsIG90aGVyQXJncyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IG92ZXJSZXN0O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb3ZlclJlc3QuanMiLCJpbXBvcnQgYmFzZVNldFRvU3RyaW5nIGZyb20gJy4vX2Jhc2VTZXRUb1N0cmluZy5qcyc7XG5pbXBvcnQgc2hvcnRPdXQgZnJvbSAnLi9fc2hvcnRPdXQuanMnO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGBmdW5jYCB0byByZXR1cm4gYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgc2V0VG9TdHJpbmcgPSBzaG9ydE91dChiYXNlU2V0VG9TdHJpbmcpO1xuXG5leHBvcnQgZGVmYXVsdCBzZXRUb1N0cmluZztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3NldFRvU3RyaW5nLmpzIiwiaW1wb3J0IGNvbnN0YW50IGZyb20gJy4vY29uc3RhbnQuanMnO1xuaW1wb3J0IGRlZmluZVByb3BlcnR5IGZyb20gJy4vX2RlZmluZVByb3BlcnR5LmpzJztcbmltcG9ydCBpZGVudGl0eSBmcm9tICcuL2lkZW50aXR5LmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldFRvU3RyaW5nID0gIWRlZmluZVByb3BlcnR5ID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmMsICd0b1N0cmluZycsIHtcbiAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxuICAgICd2YWx1ZSc6IGNvbnN0YW50KHN0cmluZyksXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VTZXRUb1N0cmluZztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VTZXRUb1N0cmluZy5qcyIsIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb25zdGFudDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvY29uc3RhbnQuanMiLCIvKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXG52YXIgSE9UX0NPVU5UID0gODAwLFxuICAgIEhPVF9TUEFOID0gMTY7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVOb3cgPSBEYXRlLm5vdztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCdsbCBzaG9ydCBvdXQgYW5kIGludm9rZSBgaWRlbnRpdHlgIGluc3RlYWRcbiAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxuICogbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNob3J0YWJsZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gc2hvcnRPdXQoZnVuYykge1xuICB2YXIgY291bnQgPSAwLFxuICAgICAgbGFzdENhbGxlZCA9IDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxuICAgICAgICByZW1haW5pbmcgPSBIT1RfU1BBTiAtIChzdGFtcCAtIGxhc3RDYWxsZWQpO1xuXG4gICAgbGFzdENhbGxlZCA9IHN0YW1wO1xuICAgIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgICBpZiAoKytjb3VudCA+PSBIT1RfQ09VTlQpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNob3J0T3V0O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc2hvcnRPdXQuanMiLCJpbXBvcnQgYXJyYXlMaWtlS2V5cyBmcm9tICcuL19hcnJheUxpa2VLZXlzLmpzJztcbmltcG9ydCBiYXNlS2V5c0luIGZyb20gJy4vX2Jhc2VLZXlzSW4uanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzSW4obmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqL1xuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0LCB0cnVlKSA6IGJhc2VLZXlzSW4ob2JqZWN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQga2V5c0luO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9rZXlzSW4uanMiLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRpbWVzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHNcbiAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlVGltZXM7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVGltZXMuanMiLCJpbXBvcnQgYmFzZUlzQXJndW1lbnRzIGZyb20gJy4vX2Jhc2VJc0FyZ3VtZW50cy5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJndW1lbnRzID0gYmFzZUlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID8gYmFzZUlzQXJndW1lbnRzIDogZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmXG4gICAgIXByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodmFsdWUsICdjYWxsZWUnKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGlzQXJndW1lbnRzO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FyZ3VtZW50cy5qcyIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc0FyZ3VtZW50cztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc0FyZ3VtZW50cy5qcyIsImltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuaW1wb3J0IHN0dWJGYWxzZSBmcm9tICcuL3N0dWJGYWxzZS5qcyc7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgQnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBVaW50OEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTtcblxuZXhwb3J0IGRlZmF1bHQgaXNCdWZmZXI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQnVmZmVyLmpzIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGBmYWxzZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEzLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRpbWVzKDIsIF8uc3R1YkZhbHNlKTtcbiAqIC8vID0+IFtmYWxzZSwgZmFsc2VdXG4gKi9cbmZ1bmN0aW9uIHN0dWJGYWxzZSgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHViRmFsc2U7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3N0dWJGYWxzZS5qcyIsImltcG9ydCBiYXNlSXNUeXBlZEFycmF5IGZyb20gJy4vX2Jhc2VJc1R5cGVkQXJyYXkuanMnO1xuaW1wb3J0IGJhc2VVbmFyeSBmcm9tICcuL19iYXNlVW5hcnkuanMnO1xuaW1wb3J0IG5vZGVVdGlsIGZyb20gJy4vX25vZGVVdGlsLmpzJztcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbmV4cG9ydCBkZWZhdWx0IGlzVHlwZWRBcnJheTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNUeXBlZEFycmF5LmpzIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNMZW5ndGggZnJvbSAnLi9pc0xlbmd0aC5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgb2YgdHlwZWQgYXJyYXlzLiAqL1xudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XG50eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDhUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cbnR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID1cbnR5cGVkQXJyYXlUYWdzW2RhdGFWaWV3VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2RhdGVUYWddID1cbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cbnR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPSB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID1cbnR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPSB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID1cbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cbnR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNUeXBlZEFycmF5YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiZcbiAgICBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3NbYmFzZUdldFRhZyh2YWx1ZSldO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNUeXBlZEFycmF5O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzVHlwZWRBcnJheS5qcyIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVVuYXJ5O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVVuYXJ5LmpzIiwiaW1wb3J0IGZyZWVHbG9iYWwgZnJvbSAnLi9fZnJlZUdsb2JhbC5qcyc7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBwcm9jZXNzYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIGZyZWVHbG9iYWwucHJvY2VzcztcblxuLyoqIFVzZWQgdG8gYWNjZXNzIGZhc3RlciBOb2RlLmpzIGhlbHBlcnMuICovXG52YXIgbm9kZVV0aWwgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgLy8gVXNlIGB1dGlsLnR5cGVzYCBmb3IgTm9kZS5qcyAxMCsuXG4gICAgdmFyIHR5cGVzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlKCd1dGlsJykudHlwZXM7XG5cbiAgICBpZiAodHlwZXMpIHtcbiAgICAgIHJldHVybiB0eXBlcztcbiAgICB9XG5cbiAgICAvLyBMZWdhY3kgYHByb2Nlc3MuYmluZGluZygndXRpbCcpYCBmb3IgTm9kZS5qcyA8IDEwLlxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbmV4cG9ydCBkZWZhdWx0IG5vZGVVdGlsO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbm9kZVV0aWwuanMiLCJpbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5pbXBvcnQgaXNQcm90b3R5cGUgZnJvbSAnLi9faXNQcm90b3R5cGUuanMnO1xuaW1wb3J0IG5hdGl2ZUtleXNJbiBmcm9tICcuL19uYXRpdmVLZXlzSW4uanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNJbmAgd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5c0luKG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5c0luKG9iamVjdCk7XG4gIH1cbiAgdmFyIGlzUHJvdG8gPSBpc1Byb3RvdHlwZShvYmplY3QpLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmICghKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlS2V5c0luO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUtleXNJbi5qcyIsIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBleGNlcHQgdGhhdCBpdCBpbmNsdWRlcyBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBuYXRpdmVLZXlzSW4ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XG4gICAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBuYXRpdmVLZXlzSW47XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19uYXRpdmVLZXlzSW4uanMiLCJpbXBvcnQgYXBwbHkgZnJvbSAnLi9fYXBwbHkuanMnO1xuaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcbmltcG9ydCBpc0Vycm9yIGZyb20gJy4vaXNFcnJvci5qcyc7XG5cbi8qKlxuICogQXR0ZW1wdHMgdG8gaW52b2tlIGBmdW5jYCwgcmV0dXJuaW5nIGVpdGhlciB0aGUgcmVzdWx0IG9yIHRoZSBjYXVnaHQgZXJyb3JcbiAqIG9iamVjdC4gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZSBwcm92aWRlZCB0byBgZnVuY2Agd2hlbiBpdCdzIGludm9rZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGF0dGVtcHQuXG4gKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBgZnVuY2AgcmVzdWx0IG9yIGVycm9yIG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogLy8gQXZvaWQgdGhyb3dpbmcgZXJyb3JzIGZvciBpbnZhbGlkIHNlbGVjdG9ycy5cbiAqIHZhciBlbGVtZW50cyA9IF8uYXR0ZW1wdChmdW5jdGlvbihzZWxlY3Rvcikge1xuICogICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gKiB9LCAnPl8+Jyk7XG4gKlxuICogaWYgKF8uaXNFcnJvcihlbGVtZW50cykpIHtcbiAqICAgZWxlbWVudHMgPSBbXTtcbiAqIH1cbiAqL1xudmFyIGF0dGVtcHQgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCBhcmdzKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHVuZGVmaW5lZCwgYXJncyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gaXNFcnJvcihlKSA/IGUgOiBuZXcgRXJyb3IoZSk7XG4gIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBhdHRlbXB0O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9hdHRlbXB0LmpzIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgZ2V0UHJvdG90eXBlIGZyb20gJy4vX2dldFByb3RvdHlwZS5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gaW5mZXIgdGhlIGBPYmplY3RgIGNvbnN0cnVjdG9yLiAqL1xudmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGF0IGlzLCBhbiBvYmplY3QgY3JlYXRlZCBieSB0aGVcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuOC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiB9XG4gKlxuICogXy5pc1BsYWluT2JqZWN0KG5ldyBGb28pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KHsgJ3gnOiAwLCAneSc6IDAgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSB8fCBiYXNlR2V0VGFnKHZhbHVlKSAhPSBvYmplY3RUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHByb3RvID0gZ2V0UHJvdG90eXBlKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIEN0b3IgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCAnY29uc3RydWN0b3InKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiZcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1BsYWluT2JqZWN0O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1BsYWluT2JqZWN0LmpzIiwiaW1wb3J0IG92ZXJBcmcgZnJvbSAnLi9fb3ZlckFyZy5qcyc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpO1xuXG5leHBvcnQgZGVmYXVsdCBnZXRQcm90b3R5cGU7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRQcm90b3R5cGUuanMiLCJpbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnZhbHVlc2AgYW5kIGBfLnZhbHVlc0luYCB3aGljaCBjcmVhdGVzIGFuXG4gKiBhcnJheSBvZiBgb2JqZWN0YCBwcm9wZXJ0eSB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvcGVydHkgbmFtZXNcbiAqIG9mIGBwcm9wc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBuYW1lcyB0byBnZXQgdmFsdWVzIGZvci5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gYmFzZVZhbHVlcyhvYmplY3QsIHByb3BzKSB7XG4gIHJldHVybiBhcnJheU1hcChwcm9wcywgZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIG9iamVjdFtrZXldO1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVZhbHVlcztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VWYWx1ZXMuanMiLCJpbXBvcnQgZXEgZnJvbSAnLi9lcS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCBieSBgXy5kZWZhdWx0c2AgdG8gY3VzdG9taXplIGl0cyBgXy5hc3NpZ25JbmAgdXNlIHRvIGFzc2lnbiBwcm9wZXJ0aWVzXG4gKiBvZiBzb3VyY2Ugb2JqZWN0cyB0byB0aGUgZGVzdGluYXRpb24gb2JqZWN0IGZvciBhbGwgZGVzdGluYXRpb24gcHJvcGVydGllc1xuICogdGhhdCByZXNvbHZlIHRvIGB1bmRlZmluZWRgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IG9ialZhbHVlIFRoZSBkZXN0aW5hdGlvbiB2YWx1ZS5cbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHNvdXJjZSB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgcGFyZW50IG9iamVjdCBvZiBgb2JqVmFsdWVgLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gY3VzdG9tRGVmYXVsdHNBc3NpZ25JbihvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0KSB7XG4gIGlmIChvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAoZXEob2JqVmFsdWUsIG9iamVjdFByb3RvW2tleV0pICYmICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpIHtcbiAgICByZXR1cm4gc3JjVmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9ialZhbHVlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjdXN0b21EZWZhdWx0c0Fzc2lnbkluO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY3VzdG9tRGVmYXVsdHNBc3NpZ25Jbi5qcyIsIi8qKiBVc2VkIHRvIGVzY2FwZSBjaGFyYWN0ZXJzIGZvciBpbmNsdXNpb24gaW4gY29tcGlsZWQgc3RyaW5nIGxpdGVyYWxzLiAqL1xudmFyIHN0cmluZ0VzY2FwZXMgPSB7XG4gICdcXFxcJzogJ1xcXFwnLFxuICBcIidcIjogXCInXCIsXG4gICdcXG4nOiAnbicsXG4gICdcXHInOiAncicsXG4gICdcXHUyMDI4JzogJ3UyMDI4JyxcbiAgJ1xcdTIwMjknOiAndTIwMjknXG59O1xuXG4vKipcbiAqIFVzZWQgYnkgYF8udGVtcGxhdGVgIHRvIGVzY2FwZSBjaGFyYWN0ZXJzIGZvciBpbmNsdXNpb24gaW4gY29tcGlsZWQgc3RyaW5nIGxpdGVyYWxzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIGNoYXJhY3Rlci5cbiAqL1xuZnVuY3Rpb24gZXNjYXBlU3RyaW5nQ2hhcihjaHIpIHtcbiAgcmV0dXJuICdcXFxcJyArIHN0cmluZ0VzY2FwZXNbY2hyXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZXNjYXBlU3RyaW5nQ2hhcjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2VzY2FwZVN0cmluZ0NoYXIuanMiLCJpbXBvcnQgYXJyYXlMaWtlS2V5cyBmcm9tICcuL19hcnJheUxpa2VLZXlzLmpzJztcbmltcG9ydCBiYXNlS2V5cyBmcm9tICcuL19iYXNlS2V5cy5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9pc0FycmF5TGlrZS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuIFNlZSB0aGVcbiAqIFtFUyBzcGVjXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8ua2V5cygnaGknKTtcbiAqIC8vID0+IFsnMCcsICcxJ11cbiAqL1xuZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCkgOiBiYXNlS2V5cyhvYmplY3QpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBrZXlzO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9rZXlzLmpzIiwiaW1wb3J0IGlzUHJvdG90eXBlIGZyb20gJy4vX2lzUHJvdG90eXBlLmpzJztcbmltcG9ydCBuYXRpdmVLZXlzIGZyb20gJy4vX25hdGl2ZUtleXMuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VLZXlzO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUtleXMuanMiLCJpbXBvcnQgb3ZlckFyZyBmcm9tICcuL19vdmVyQXJnLmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUtleXMgPSBvdmVyQXJnKE9iamVjdC5rZXlzLCBPYmplY3QpO1xuXG5leHBvcnQgZGVmYXVsdCBuYXRpdmVLZXlzO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbmF0aXZlS2V5cy5qcyIsImltcG9ydCBlc2NhcGUgZnJvbSAnLi9lc2NhcGUuanMnO1xuaW1wb3J0IHJlRXNjYXBlIGZyb20gJy4vX3JlRXNjYXBlLmpzJztcbmltcG9ydCByZUV2YWx1YXRlIGZyb20gJy4vX3JlRXZhbHVhdGUuanMnO1xuaW1wb3J0IHJlSW50ZXJwb2xhdGUgZnJvbSAnLi9fcmVJbnRlcnBvbGF0ZS5qcyc7XG5cbi8qKlxuICogQnkgZGVmYXVsdCwgdGhlIHRlbXBsYXRlIGRlbGltaXRlcnMgdXNlZCBieSBsb2Rhc2ggYXJlIGxpa2UgdGhvc2UgaW5cbiAqIGVtYmVkZGVkIFJ1YnkgKEVSQikgYXMgd2VsbCBhcyBFUzIwMTUgdGVtcGxhdGUgc3RyaW5ncy4gQ2hhbmdlIHRoZVxuICogZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG52YXIgdGVtcGxhdGVTZXR0aW5ncyA9IHtcblxuICAvKipcbiAgICogVXNlZCB0byBkZXRlY3QgYGRhdGFgIHByb3BlcnR5IHZhbHVlcyB0byBiZSBIVE1MLWVzY2FwZWQuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICogQHR5cGUge1JlZ0V4cH1cbiAgICovXG4gICdlc2NhcGUnOiByZUVzY2FwZSxcblxuICAvKipcbiAgICogVXNlZCB0byBkZXRlY3QgY29kZSB0byBiZSBldmFsdWF0ZWQuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICogQHR5cGUge1JlZ0V4cH1cbiAgICovXG4gICdldmFsdWF0ZSc6IHJlRXZhbHVhdGUsXG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gZGV0ZWN0IGBkYXRhYCBwcm9wZXJ0eSB2YWx1ZXMgdG8gaW5qZWN0LlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtSZWdFeHB9XG4gICAqL1xuICAnaW50ZXJwb2xhdGUnOiByZUludGVycG9sYXRlLFxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIHJlZmVyZW5jZSB0aGUgZGF0YSBvYmplY3QgaW4gdGhlIHRlbXBsYXRlIHRleHQuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gICd2YXJpYWJsZSc6ICcnLFxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGltcG9ydCB2YXJpYWJsZXMgaW50byB0aGUgY29tcGlsZWQgdGVtcGxhdGUuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gICdpbXBvcnRzJzoge1xuXG4gICAgLyoqXG4gICAgICogQSByZWZlcmVuY2UgdG8gdGhlIGBsb2Rhc2hgIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5ncy5pbXBvcnRzXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgICdfJzogeyAnZXNjYXBlJzogZXNjYXBlIH1cbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgdGVtcGxhdGVTZXR0aW5ncztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdGVtcGxhdGVTZXR0aW5ncy5qcyIsImltcG9ydCBlc2NhcGVIdG1sQ2hhciBmcm9tICcuL19lc2NhcGVIdG1sQ2hhci5qcyc7XG5pbXBvcnQgdG9TdHJpbmcgZnJvbSAnLi90b1N0cmluZy5qcyc7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIEhUTUwgZW50aXRpZXMgYW5kIEhUTUwgY2hhcmFjdGVycy4gKi9cbnZhciByZVVuZXNjYXBlZEh0bWwgPSAvWyY8PlwiJ10vZyxcbiAgICByZUhhc1VuZXNjYXBlZEh0bWwgPSBSZWdFeHAocmVVbmVzY2FwZWRIdG1sLnNvdXJjZSk7XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGNoYXJhY3RlcnMgXCImXCIsIFwiPFwiLCBcIj5cIiwgJ1wiJywgYW5kIFwiJ1wiIGluIGBzdHJpbmdgIHRvIHRoZWlyXG4gKiBjb3JyZXNwb25kaW5nIEhUTUwgZW50aXRpZXMuXG4gKlxuICogKipOb3RlOioqIE5vIG90aGVyIGNoYXJhY3RlcnMgYXJlIGVzY2FwZWQuIFRvIGVzY2FwZSBhZGRpdGlvbmFsXG4gKiBjaGFyYWN0ZXJzIHVzZSBhIHRoaXJkLXBhcnR5IGxpYnJhcnkgbGlrZSBbX2hlX10oaHR0cHM6Ly9tdGhzLmJlL2hlKS5cbiAqXG4gKiBUaG91Z2ggdGhlIFwiPlwiIGNoYXJhY3RlciBpcyBlc2NhcGVkIGZvciBzeW1tZXRyeSwgY2hhcmFjdGVycyBsaWtlXG4gKiBcIj5cIiBhbmQgXCIvXCIgZG9uJ3QgbmVlZCBlc2NhcGluZyBpbiBIVE1MIGFuZCBoYXZlIG5vIHNwZWNpYWwgbWVhbmluZ1xuICogdW5sZXNzIHRoZXkncmUgcGFydCBvZiBhIHRhZyBvciB1bnF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUuIFNlZVxuICogW01hdGhpYXMgQnluZW5zJ3MgYXJ0aWNsZV0oaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2FtYmlndW91cy1hbXBlcnNhbmRzKVxuICogKHVuZGVyIFwic2VtaS1yZWxhdGVkIGZ1biBmYWN0XCIpIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogV2hlbiB3b3JraW5nIHdpdGggSFRNTCB5b3Ugc2hvdWxkIGFsd2F5c1xuICogW3F1b3RlIGF0dHJpYnV0ZSB2YWx1ZXNdKGh0dHA6Ly93b25rby5jb20vcG9zdC9odG1sLWVzY2FwaW5nKSB0byByZWR1Y2VcbiAqIFhTUyB2ZWN0b3JzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmVzY2FwZSgnZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnKTtcbiAqIC8vID0+ICdmcmVkLCBiYXJuZXksICZhbXA7IHBlYmJsZXMnXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZShzdHJpbmcpIHtcbiAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgcmV0dXJuIChzdHJpbmcgJiYgcmVIYXNVbmVzY2FwZWRIdG1sLnRlc3Qoc3RyaW5nKSlcbiAgICA/IHN0cmluZy5yZXBsYWNlKHJlVW5lc2NhcGVkSHRtbCwgZXNjYXBlSHRtbENoYXIpXG4gICAgOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGVzY2FwZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvZXNjYXBlLmpzIiwiaW1wb3J0IGJhc2VQcm9wZXJ0eU9mIGZyb20gJy4vX2Jhc2VQcm9wZXJ0eU9mLmpzJztcblxuLyoqIFVzZWQgdG8gbWFwIGNoYXJhY3RlcnMgdG8gSFRNTCBlbnRpdGllcy4gKi9cbnZhciBodG1sRXNjYXBlcyA9IHtcbiAgJyYnOiAnJmFtcDsnLFxuICAnPCc6ICcmbHQ7JyxcbiAgJz4nOiAnJmd0OycsXG4gICdcIic6ICcmcXVvdDsnLFxuICBcIidcIjogJyYjMzk7J1xufTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLmVzY2FwZWAgdG8gY29udmVydCBjaGFyYWN0ZXJzIHRvIEhUTUwgZW50aXRpZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBjaHIgVGhlIG1hdGNoZWQgY2hhcmFjdGVyIHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgY2hhcmFjdGVyLlxuICovXG52YXIgZXNjYXBlSHRtbENoYXIgPSBiYXNlUHJvcGVydHlPZihodG1sRXNjYXBlcyk7XG5cbmV4cG9ydCBkZWZhdWx0IGVzY2FwZUh0bWxDaGFyO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZXNjYXBlSHRtbENoYXIuanMiLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5T2ZgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eU9mKG9iamVjdCkge1xuICByZXR1cm4gZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VQcm9wZXJ0eU9mO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVByb3BlcnR5T2YuanMiLCJpbXBvcnQgU3ltYm9sIGZyb20gJy4vX1N5bWJvbC5qcyc7XG5pbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc1N5bWJvbCBmcm9tICcuL2lzU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFRvU3RyaW5nID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by50b1N0cmluZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcbiAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIHJldHVybiBhcnJheU1hcCh2YWx1ZSwgYmFzZVRvU3RyaW5nKSArICcnO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVRvU3RyaW5nO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRvU3RyaW5nLmpzIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3ltYm9sYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N5bWJvbCcgfHxcbiAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzeW1ib2xUYWcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1N5bWJvbDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNTeW1ib2wuanMiLCIvKiogVXNlZCB0byBtYXRjaCB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLiAqL1xudmFyIHJlRXNjYXBlID0gLzwlLShbXFxzXFxTXSs/KSU+L2c7XG5cbmV4cG9ydCBkZWZhdWx0IHJlRXNjYXBlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcmVFc2NhcGUuanMiLCIvKiogVXNlZCB0byBtYXRjaCB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLiAqL1xudmFyIHJlRXZhbHVhdGUgPSAvPCUoW1xcc1xcU10rPyklPi9nO1xuXG5leHBvcnQgZGVmYXVsdCByZUV2YWx1YXRlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcmVFdmFsdWF0ZS5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBJbWFnZVJlbmRlcmVyIGZyb20gJy4vSW1hZ2VSZW5kZXJlcidcblxuZXhwb3J0IGRlZmF1bHQgSW1hZ2VSZW5kZXJlclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0ltYWdlUmVuZGVyZXIvaW5kZXguanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgVGVtcGxhdGVSZW5kZXJlciBmcm9tICcuLi9UZW1wbGF0ZVJlbmRlcmVyJ1xuXG4vKipcbiAqIE51bWJlcnMgRWRpdG9yXG4gKlxuICogSGFuZGxlIG51bWJlciB2YWx1ZXMgRWRpdGluZ1xuICpcbiAqIHwgTmFtZSAgICAgICAgICAgICAgICAgIFx0fCBEZWZhdWx0ICAgICBcdHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0fFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdHw6LS0tLS0tLS0tLS0tLTp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICoqaW1hZ2VSZW5kZXJlcldpZHRoKiogICB8IDI4cHggICAgfCBpbWFnZSB3aWR0aFxuICogfCAqKmltYWdlUmVuZGVyZXJIZWlnaHQqKiAgIHwgMjhweCAgICB8IGltYWdlIGhlaWdodFxuICogfCAqKmltYWdlUmVuZGVyZXJMaXN0KiogICAgICAgfCB7fSAgXHR8IGEgbGlzdCBvZiB3aGljaCBtYXBzIGltYWdlcyB3aXRoIGNlbGwgdmFsdWVzIGFzIEpTT04gb3IgcGxhaW4gSlMgb2JqZWN0XG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vbG9kYXNoLmNvbS9kb2NzLzQuMTcuMTUjdGVtcGxhdGVcbiAqL1xuY2xhc3MgSW1hZ2VSZW5kZXJlciBleHRlbmRzIFRlbXBsYXRlUmVuZGVyZXIge1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHJlZnJlc2gocGFyYW1zLCBpc0luaXQpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcmFtcy52YWx1ZVxuICAgIGNvbnN0IGltYWdlV2lkdGggPSB0aGlzLmdldE9wdGlvbignaW1hZ2VSZW5kZXJlcldpZHRoJywgcGFyYW1zLCAnMjhweCcpXG4gICAgY29uc3QgaW1hZ2VIZWlnaHQgPSB0aGlzLmdldE9wdGlvbignaW1hZ2VSZW5kZXJlckhlaWdodCcsIHBhcmFtcywgJzI4cHgnKVxuICAgIGxldCBpbWFnZUxpc3QgPSB0aGlzLmdldE9wdGlvbignaW1hZ2VSZW5kZXJlckxpc3QnLCBwYXJhbXMpXG5cbiAgICB0cnkge1xuICAgICAgaW1hZ2VMaXN0ID0gSlNPTi5wYXJzZShpbWFnZUxpc3QpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaW1hZ2VMaXN0ID0gaW1hZ2VMaXN0IHx8IHt9XG4gICAgfVxuXG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zICovXG4gICAgaWYgKGltYWdlTGlzdCAmJiBpbWFnZUxpc3QuaGFzT3duUHJvcGVydHkodmFsdWUpKSB7XG4gICAgICBwYXJhbXMucmVuZGVyVGVtcGxhdGUgPSAvKmh0bWwqLyBgXG4gICAgICAgIDxpbWcgXG4gICAgICAgICAgc3JjPVwiJHtpbWFnZUxpc3RbcGFyYW1zLnZhbHVlXX1cIiBcbiAgICAgICAgICB3aWR0aD1cIiR7aW1hZ2VXaWR0aH1cIlxuICAgICAgICAgIGhlaWdodD1cIiR7aW1hZ2VIZWlnaHR9XCIgIFxuICAgICAgICAvPlxuICAgICAgYFxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJhbXMucmVuZGVyVGVtcGxhdGUgPSB2YWx1ZVxuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5yZWZyZXNoKHBhcmFtcywgaXNJbml0KVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEltYWdlUmVuZGVyZXJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9JbWFnZVJlbmRlcmVyL0ltYWdlUmVuZGVyZXIuanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgRGF0ZVRpbWVGaWx0ZXIgZnJvbSAnLi9EYXRlVGltZUZpbHRlcidcblxuZXhwb3J0IGRlZmF1bHQgRGF0ZVRpbWVGaWx0ZXJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9EYXRlVGltZUZpbHRlci9pbmRleC5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGF1dG9iaW5kLCBvdmVycmlkZSwgcmVhZG9ubHkgfSBmcm9tICdjb3JlLWRlY29yYXRvcnMnXG5pbXBvcnQgdXRjVG9ab25lZFRpbWUgZnJvbSAnZGF0ZS1mbnMtdHovdXRjVG9ab25lZFRpbWUnXG5pbXBvcnQgeyB3aXRoRXZlbnRzTWl4aW4gfSBmcm9tICcuLi9FdmVudHNNaXhpbidcbmltcG9ydCBEYXRlVGltZUlucHV0IGZyb20gJy4uL0RhdGVUaW1lSW5wdXQnXG5pbXBvcnQgQ29tcG9uZW50IGZyb20gJy4uL0NvbXBvbmVudCdcbmltcG9ydCAnLi9zdHlsZS5zY3NzJ1xuXG5jb25zdCBUT0tFTlMgPSB7XG4gIFRPS0VOX0VRVUFMOiAnZXF1YWxzJyxcbiAgVE9LRU5fTk9UX0VRVUFMOiAnbm90RXF1YWwnLFxuICBUT0tFTl9MRVNTOiAnbGVzc1RoYW4nLFxuICBUT0tFTl9HUkVBVEVSOiAnZ3JlYXRlclRoYW4nLFxuICBUT0tFTl9SQU5HRTogJ2luUmFuZ2UnLFxuICBUT0tFTl9BTkQ6ICdBTkQnLFxuICBUT0tFTl9PUjogJ09SJyxcbn1cblxuQHdpdGhFdmVudHNNaXhpblxuY2xhc3MgQ29uZGl0aW9uUGFuZWwgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogQ29uc3RhbnQgd2hpY2ggZGVzY3JpYmVzIHRoZSBldmVudCBuYW1lIHRoYXQgd2lsbCBiZSBmaXJlZCB3aGVuIHRoZSBvcHRpb25cbiAgICogc3RhdGUgaXMgY2hhbmdlZFxuICAgKlxuICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgKi9cbiAgQHJlYWRvbmx5XG4gIHN0YXRpYyBPTl9DT05ESVRJT05fQ0hBTkdFRCA9ICdDb25kaXRpb25QYW5lbC5PTl9DT05ESVRJT05fQ0hBTkdFRCdcbiAgLyoqXG4gICAqIFRoZSBvcHRpb24gc3RhdGVcbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIEByZWFkb25seVxuICBzdGF0ZSA9IHtcbiAgICB0eXBlOiBUT0tFTlMuVE9LRU5fRVFVQUwsXG4gICAgZmlsdGVyOiBudWxsLFxuICAgIGZpbHRlclRvOiBudWxsLFxuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtEYXRlVGltZUlucHV0fVxuICAgKi9cbiAgX2ZpbHRlclRpbWVJbnB1dCA9IG5ldyBEYXRlVGltZUlucHV0KClcblxuICAvKipcbiAgICogQHR5cGUge0RhdGVUaW1lSW5wdXR9XG4gICAqL1xuICBfZmlsdGVyVG9EYXRlVGltZUlucHV0ID0gbmV3IERhdGVUaW1lSW5wdXQoKVxuXG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBlbmFibGVkIGZpbHRlciB0eXBlc1xuICAgKlxuICAgKiBAdHlwZSB7QXJyYXl9XG4gICAqL1xuICBfZmlsdGVyT3B0aW9ucyA9IFtdXG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IGVuYWJsZWQgZmlsdGVyIHR5cGVcbiAgICpcbiAgICogQHR5cGUge051bWJlcn1cbiAgICovXG4gIF9kZWZhdWx0T3B0aW9uID0gLTFcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgaW5pdChwYXJhbXMpIHtcbiAgICBjb25zdCB0cmFuc2xhdGUgPSBwYXJhbXMuYXBpLmdyaWRPcHRpb25zV3JhcHBlci5nZXRMb2NhbGVUZXh0RnVuYygpXG5cbiAgICB0aGlzLl9maWx0ZXJPcHRpb25zID0gdGhpcy5nZXRPcHRpb24oJ2ZpbHRlck9wdGlvbnMnLCBwYXJhbXMsIFtcbiAgICAgIFRPS0VOUy5UT0tFTl9FUVVBTCxcbiAgICAgIFRPS0VOUy5UT0tFTl9OT1RfRVFVQUwsXG4gICAgICBUT0tFTlMuVE9LRU5fTEVTUyxcbiAgICAgIFRPS0VOUy5UT0tFTl9HUkVBVEVSLFxuICAgICAgVE9LRU5TLlRPS0VOX1JBTkdFLFxuICAgIF0pXG5cbiAgICB0aGlzLl9kZWZhdWx0T3B0aW9uID0gdGhpcy5nZXRPcHRpb24oXG4gICAgICAnZGVmYXVsdE9wdGlvbicsXG4gICAgICBwYXJhbXMsXG4gICAgICB0aGlzLl9maWx0ZXJPcHRpb25zLmluZGV4T2YoVE9LRU5TLlRPS0VOX0VRVUFMKSA+IC0xXG4gICAgICAgID8gVE9LRU5TLlRPS0VOX0VRVUFMXG4gICAgICAgIDogdGhpcy5fZmlsdGVyT3B0aW9uc1swXVxuICAgIClcblxuICAgIHRoaXMuc3RhdGUudHlwZSA9IHRoaXMuX2RlZmF1bHRPcHRpb25cblxuICAgIGNvbnN0IG9wdGlvbnNUcmFuc2xhdGlvbnMgPSB7XG4gICAgICBbVE9LRU5TLlRPS0VOX0VRVUFMXTogdHJhbnNsYXRlKFRPS0VOUy5UT0tFTl9FUVVBTCwgJ0VxdWFscycpLFxuICAgICAgW1RPS0VOUy5UT0tFTl9OT1RfRVFVQUxdOiB0cmFuc2xhdGUoVE9LRU5TLlRPS0VOX0VRVUFMLCAnTm90IGVxdWFsJyksXG4gICAgICBbVE9LRU5TLlRPS0VOX0xFU1NdOiB0cmFuc2xhdGUoVE9LRU5TLlRPS0VOX0xFU1MsICdMZXNzIHRoYW4nKSxcbiAgICAgIFtUT0tFTlMuVE9LRU5fR1JFQVRFUl06IHRyYW5zbGF0ZShUT0tFTlMuVE9LRU5fR1JFQVRFUiwgJ0dyZWF0ZXIgdGhhbicpLFxuICAgICAgW1RPS0VOUy5UT0tFTl9SQU5HRV06IHRyYW5zbGF0ZShUT0tFTlMuVE9LRU5fUkFOR0UsICdJbiByYW5nZScpLFxuICAgIH1cblxuICAgIHRoaXMuX2d1aSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgdGhpcy5fZ3VpLmNsYXNzTmFtZSA9ICdkYXRlVGltZUZpbHRlciBhZy1maWx0ZXItYm9keS13cmFwcGVyJ1xuICAgIHRoaXMuX2d1aS5pbm5lckhUTUwgPSAvKiBodG1sICovIGBcbiAgICAgIDxzZWxlY3QgY2xhc3M9XCJhZy1maWx0ZXItc2VsZWN0IGRhdGVUaW1lRmlsdGVyX19zZWxlY3RcIiAgJHtcbiAgICAgICAgdGhpcy5fZmlsdGVyT3B0aW9ucy5sZW5ndGggPT09IDEgPyAnZGlzYWJsZWQnIDogJydcbiAgICAgIH0+XG4gICAgICAgICR7dGhpcy5fZmlsdGVyT3B0aW9ucy5tYXAoXG4gICAgICAgICAgb3B0aW9uID0+IC8qIGh0bWwgKi8gYFxuICAgICAgICAgIDxvcHRpb24gXG4gICAgICAgICAgICB2YWx1ZT1cIiR7b3B0aW9ufVwiIFxuICAgICAgICAgICAgJHtvcHRpb24gPT09IHRoaXMuX2RlZmF1bHRPcHRpb24gPyAnc2VsZWN0ZWQnIDogJyd9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgICAke29wdGlvbnNUcmFuc2xhdGlvbnNbb3B0aW9uXX1cbiAgICAgICAgICA8L29wdGlvbj5gXG4gICAgICAgICl9XG4gICAgICA8L3NlbGVjdD5cbiAgICAgIDxkaXYgY2xhc3M9XCJhZy1maWx0ZXItYm9keVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWctZmlsdGVyLWRhdGUtZnJvbVwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFnLWZpbHRlci1kYXRlLXRvIGFnLWhpZGRlblwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIGBcblxuICAgIHRoaXMuX2ZpbHRlclRpbWVJbnB1dC5pbml0KHBhcmFtcylcbiAgICB0aGlzLl9maWx0ZXJUaW1lSW5wdXQub24oRGF0ZVRpbWVJbnB1dC5PTl9EQVRFX0NIQU5HRUQsIHNlbGVjdGVkRGF0ZSA9PiB7XG4gICAgICB0aGlzLnN0YXRlLmZpbHRlciA9IHNlbGVjdGVkRGF0ZVxuICAgICAgdGhpcy5ub3RpZnkoQ29uZGl0aW9uUGFuZWwuT05fQ09ORElUSU9OX0NIQU5HRUQsIHRoaXMuc3RhdGUpXG4gICAgfSlcblxuICAgIHRoaXMuX2ZpbHRlclRvRGF0ZVRpbWVJbnB1dC5pbml0KHBhcmFtcylcbiAgICB0aGlzLl9maWx0ZXJUb0RhdGVUaW1lSW5wdXQub24oXG4gICAgICBEYXRlVGltZUlucHV0Lk9OX0RBVEVfQ0hBTkdFRCxcbiAgICAgIHNlbGVjdGVkRGF0ZSA9PiB7XG4gICAgICAgIHRoaXMuc3RhdGUuZmlsdGVyVG8gPSBzZWxlY3RlZERhdGVcbiAgICAgICAgdGhpcy5ub3RpZnkoQ29uZGl0aW9uUGFuZWwuT05fQ09ORElUSU9OX0NIQU5HRUQsIHRoaXMuc3RhdGUpXG4gICAgICB9XG4gICAgKVxuXG4gICAgdGhpcy5fZ3VpXG4gICAgICAucXVlcnlTZWxlY3RvcignLmFnLWZpbHRlci1kYXRlLWZyb20nKVxuICAgICAgLmFwcGVuZENoaWxkKHRoaXMuX2ZpbHRlclRpbWVJbnB1dC5nZXRHdWkoKSlcbiAgICB0aGlzLl9ndWlcbiAgICAgIC5xdWVyeVNlbGVjdG9yKCcuYWctZmlsdGVyLWRhdGUtdG8nKVxuICAgICAgLmFwcGVuZENoaWxkKHRoaXMuX2ZpbHRlclRvRGF0ZVRpbWVJbnB1dC5nZXRHdWkoKSlcblxuICAgIGNvbnN0IHNlbGVjdCA9IHRoaXMuX2d1aS5xdWVyeVNlbGVjdG9yKCcuYWctZmlsdGVyLXNlbGVjdCcpXG4gICAgc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuX29uVHlwZUNoYW5nZSlcblxuICAgIHRoaXMuc2V0U3RhdGUodGhpcy5fc3RhdGUpXG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIEBvdmVycmlkZVxuICBkZXN0cm95KCkge1xuICAgIHRoaXMub2ZmKENvbmRpdGlvblBhbmVsLk9OX0NPTkRJVElPTl9DSEFOR0VEKVxuICAgIHRoaXMuX2ZpbHRlclRpbWVJbnB1dC5kZXN0cm95KClcbiAgICB0aGlzLl9maWx0ZXJUb0RhdGVUaW1lSW5wdXQuZGVzdHJveSgpXG4gICAgdGhpcy5fZ3VpXG4gICAgICAucXVlcnlTZWxlY3RvcignLmFnLWZpbHRlci1zZWxlY3QnKVxuICAgICAgLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuX29uVHlwZUNoYW5nZSlcbiAgICB0aGlzLnJlc2V0KClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgc3RhdGVcbiAgICovXG4gIHJlc2V0KCkge1xuICAgIHRoaXMuc3RhdGUuZmlsdGVyID0gbnVsbFxuICAgIHRoaXMuc3RhdGUuZmlsdGVyVG8gPSBudWxsXG4gICAgdGhpcy5fZmlsdGVyVGltZUlucHV0LnJlc2V0KClcbiAgICB0aGlzLl9maWx0ZXJUb0RhdGVUaW1lSW5wdXQucmVzZXQoKVxuXG4gICAgdGhpcy5ub3RpZnkoQ29uZGl0aW9uUGFuZWwuT05fQ09ORElUSU9OX0NIQU5HRUQsIHRoaXMuc3RhdGUpXG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBjb25kaXRpb24gc3RhdGVcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gICAqL1xuICBzZXRTdGF0ZShzdGF0ZSkge1xuICAgIHN0YXRlID0gc3RhdGUgfHwge31cbiAgICB0aGlzLnN0YXRlLmZpbHRlciA9IHN0YXRlLmZpbHRlciB8fCBudWxsXG4gICAgdGhpcy5zdGF0ZS5maWx0ZXJUbyA9IHN0YXRlLmZpbHRlclRvIHx8IG51bGxcbiAgICB0aGlzLnN0YXRlLnR5cGUgPSBzdGF0ZS50eXBlIHx8IHRoaXMuX2RlZmF1bHRPcHRpb25cblxuICAgIGNvbnN0IGd1aSA9IHRoaXMuX2d1aVxuICAgIGNvbnN0IGZpbHRlck9wdGlvbnMgPSB0aGlzLl9maWx0ZXJPcHRpb25zXG4gICAgY29uc3Qgc2VsZWN0RWwgPSBndWkucXVlcnlTZWxlY3RvcignLmFnLWZpbHRlci1zZWxlY3QnKVxuICAgIGNvbnN0IGZpbHRlcklucHV0ID0gdGhpcy5fZmlsdGVyVGltZUlucHV0XG4gICAgY29uc3QgZmlsdGVyVG9JbnB1dCA9IHRoaXMuX2ZpbHRlclRvRGF0ZVRpbWVJbnB1dFxuXG4gICAgc2VsZWN0RWwuc2VsZWN0ZWRJbmRleCA9IGZpbHRlck9wdGlvbnMuaW5kZXhPZih0aGlzLnN0YXRlLnR5cGUpXG4gICAgZmlsdGVySW5wdXQuc2V0RGF0ZSh0aGlzLnN0YXRlLmZpbHRlcilcbiAgICBmaWx0ZXJUb0lucHV0LnNldERhdGUodGhpcy5zdGF0ZS5maWx0ZXJUbylcblxuICAgIC8vIHdlIGZpcmUgb24gY2hhbmdlIGV2ZW50IGluIGNhc2UgdGhlIGZpbHRlciBvcHRpb25zIGNvbnRhaW5cbiAgICAvLyBvbmUgb3B0aW9uIHdoaWNoIGlzIGluIFJhbmdlIFwiaW5SYW5nZVwiXG4gICAgaWYgKCdjcmVhdGVFdmVudCcgaW4gZG9jdW1lbnQpIHtcbiAgICAgIGNvbnN0IGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdIVE1MRXZlbnRzJylcbiAgICAgIGV2dC5pbml0RXZlbnQoJ2NoYW5nZScsIGZhbHNlLCB0cnVlKVxuICAgICAgc2VsZWN0RWwuZGlzcGF0Y2hFdmVudChldnQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGVjdEVsLmZpcmVFdmVudCgnb25jaGFuZ2UnKVxuICAgIH1cblxuICAgIHRoaXMubm90aWZ5KENvbmRpdGlvblBhbmVsLk9OX0NPTkRJVElPTl9DSEFOR0VELCB0aGlzLnN0YXRlKVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgc3RhdGUgd2l0aCB0aGUgc2VsZWN0ZWQgdHlwZVxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBlXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX29uVHlwZUNoYW5nZShlKSB7XG4gICAgY29uc3QgZWwgPSBlLnRhcmdldFxuICAgIGNvbnN0IGZpbHRlckRhdGVUbyA9IHRoaXMuX2d1aS5xdWVyeVNlbGVjdG9yKCcuYWctZmlsdGVyLWRhdGUtdG8nKVxuXG4gICAgdGhpcy5zdGF0ZS50eXBlID0gZWwub3B0aW9uc1tlbC5zZWxlY3RlZEluZGV4XS52YWx1ZVxuXG4gICAgaWYgKHRoaXMuc3RhdGUudHlwZSA9PT0gVE9LRU5TLlRPS0VOX1JBTkdFKSB7XG4gICAgICBmaWx0ZXJEYXRlVG8uY2xhc3NMaXN0LnJlbW92ZSgnYWctaGlkZGVuJylcbiAgICB9IGVsc2Uge1xuICAgICAgZmlsdGVyRGF0ZVRvLmNsYXNzTGlzdC5hZGQoJ2FnLWhpZGRlbicpXG4gICAgfVxuXG4gICAgdGhpcy5ub3RpZnkoQ29uZGl0aW9uUGFuZWwuT05fQ09ORElUSU9OX0NIQU5HRUQsIHRoaXMuc3RhdGUpXG4gIH1cbn1cblxuQHdpdGhFdmVudHNNaXhpblxuY2xhc3MgSm9pbkNvbmRpdGlvblBhbmVsIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIENvbnN0YW50IHdoaWNoIGRlc2NyaWJlcyB0aGUgZXZlbnQgbmFtZSB0aGF0IHdpbGwgYmUgZmlyZWQgd2hlbiB0aGUgam9pblxuICAgKiBzdGF0ZSBpcyBjaGFuZ2VkXG4gICAqXG4gICAqIEB0eXBlIHtTdHJpbmd9XG4gICAqL1xuICBAcmVhZG9ubHlcbiAgc3RhdGljIE9OX0pPSU5fQ09ORElUSU9OX0NIQU5HRUQgPVxuICAgICdKb2luQ29uZGl0aW9uUGFuZWwuT05fSk9JTl9DT05ESVRJT05fQ0hBTkdFRCdcbiAgLyoqXG4gICAqIFRoZSBqb2luIHN0YXRlXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBAcmVhZG9ubHlcbiAgc3RhdGUgPSB7XG4gICAgY29uZGl0aW9uMToge30sXG4gICAgY29uZGl0aW9uMjoge30sXG4gICAgb3BlcmF0b3I6IFRPS0VOUy5UT0tFTl9PUixcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7T3B0aW9ufVxuICAgKi9cbiAgX2ZpcnN0Q29uZGl0aW9uUGFuZWwgPSBuZXcgQ29uZGl0aW9uUGFuZWwoKVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7T3B0aW9ufVxuICAgKi9cbiAgX3NlY29uZENvbmRpdGlvblBhbmVsID0gbmV3IENvbmRpdGlvblBhbmVsKClcblxuICAvKipcbiAgICogQHR5cGUge0hUTUxFbGVtZW50fVxuICAgKi9cbiAgX29wZXJhdG9yUGFuZWwgPSBudWxsXG5cbiAgLyoqXG4gICAqIFBhcmFtcyByZWNlaXZlZCBhZnRlciBpbml0XG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBfcGFyYW1zID0gbnVsbFxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIEBvdmVycmlkZVxuICBpbml0KHBhcmFtcykge1xuICAgIGNvbnN0IHRyYW5zbGF0ZSA9IHBhcmFtcy5hcGkuZ3JpZE9wdGlvbnNXcmFwcGVyLmdldExvY2FsZVRleHRGdW5jKClcblxuICAgIHRoaXMuX3BhcmFtcyA9IHBhcmFtc1xuXG4gICAgdGhpcy5fZmlyc3RDb25kaXRpb25QYW5lbC5pbml0KHBhcmFtcylcbiAgICB0aGlzLl9maXJzdENvbmRpdGlvblBhbmVsLm9uKFxuICAgICAgQ29uZGl0aW9uUGFuZWwuT05fQ09ORElUSU9OX0NIQU5HRUQsXG4gICAgICB0aGlzLl9vbkZpcnN0Q29uZGl0aW9uQ2hhbmdlZFxuICAgIClcblxuICAgIHRoaXMuX3NlY29uZENvbmRpdGlvblBhbmVsLmluaXQocGFyYW1zKVxuICAgIHRoaXMuX3NlY29uZENvbmRpdGlvblBhbmVsLm9uKFxuICAgICAgQ29uZGl0aW9uUGFuZWwuT05fQ09ORElUSU9OX0NIQU5HRUQsXG4gICAgICB0aGlzLl9vblNlY29uZENvbmRpdGlvbkNoYW5nZWRcbiAgICApXG4gICAgdGhpcy5fc2Vjb25kQ29uZGl0aW9uUGFuZWwuZ2V0R3VpKCkuY2xhc3NMaXN0LmFkZCgnYWctaGlkZGVuJylcblxuICAgIHRoaXMuX2d1aSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgdGhpcy5fZ3VpLmNsYXNzTmFtZSA9ICdhZy1maWx0ZXItYm9keS13cmFwcGVyIGFnLXNpbXBsZS1maWx0ZXItYm9keS13cmFwcGVyJ1xuICAgIHRoaXMuX2d1aS5hcHBlbmRDaGlsZCh0aGlzLl9maXJzdENvbmRpdGlvblBhbmVsLmdldEd1aSgpKVxuXG4gICAgLy9wcmV0dGllci1pZ25vcmVcbiAgICBjb25zdCBpZE9uZSA9ICdfJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCA5KSxcbiAgICAgICAgICBpZFR3byA9ICdfJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCA5KVxuXG4gICAgdGhpcy5fb3BlcmF0b3JQYW5lbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgdGhpcy5fb3BlcmF0b3JQYW5lbC5jbGFzc05hbWUgPSAnYWctZmlsdGVyLWNvbmRpdGlvbiBhZy1oaWRkZW4nXG4gICAgdGhpcy5fb3BlcmF0b3JQYW5lbC5pbm5lckhUTUwgPSAvKiBodG1sICovIGBcbiAgICA8ZGl2IGNsYXNzPVwiYWctZmlsdGVyLWNvbmRpdGlvbi1vcGVyYXRvciBhZy1maWx0ZXItY29uZGl0aW9uLW9wZXJhdG9yLWFuZCBhZy1sYWJlbGVkIGFnLWxhYmVsLWFsaWduLXJpZ2h0IGFnLXJhZGlvLWJ1dHRvbiBhZy1pbnB1dC1maWVsZFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJhZy1pbnB1dC1maWVsZC1sYWJlbCBhZy1sYWJlbCBhZy1yYWRpby1idXR0b24tbGFiZWxcIiBmb3I9XCIke2lkT25lfVwiPiAgICAgICBcbiAgICAgICAgICAke3RyYW5zbGF0ZSgnYW5kQ29uZGl0aW9uJywgJ0FORCcpfVxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWctd3JhcHBlci1hbmQgYWctd3JhcHBlciBhZy1pbnB1dC13cmFwcGVyIGFnLXJhZGlvLWJ1dHRvbi1pbnB1dC13cmFwcGVyIGFnLWNoZWNrZWRcIj5cbiAgICAgICAgICA8aW5wdXQgaWQ9XCIke2lkT25lfVwiIGNsYXNzPVwiQU5EIGFnLWlucHV0LWZpZWxkLWlucHV0IGFnLXJhZGlvLWJ1dHRvbi1pbnB1dFwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJvckFuZFJhZGlvXCIgdmFsdWU9XCIke1xuICAgICAgVE9LRU5TLlRPS0VOX0FORFxuICAgIH1cIi8+ICAgICAgICAgICAgICBcbiAgICAgICAgPC9kaXY+IFxuICAgIDwvZGl2PiAgIFxuICAgIFxuICAgIDxkaXYgY2xhc3M9XCJhZy1maWx0ZXItY29uZGl0aW9uLW9wZXJhdG9yIGFnLWZpbHRlci1jb25kaXRpb24tb3BlcmF0b3ItYW5kIGFnLWxhYmVsZWQgYWctbGFiZWwtYWxpZ24tcmlnaHQgYWctcmFkaW8tYnV0dG9uIGFnLWlucHV0LWZpZWxkXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImFnLWlucHV0LWZpZWxkLWxhYmVsIGFnLWxhYmVsIGFnLXJhZGlvLWJ1dHRvbi1sYWJlbFwiIGZvcj1cIiR7aWRUd299XCI+ICAgICAgIFxuICAgICAgICAgICR7dHJhbnNsYXRlKCdvckNvbmRpdGlvbicsICdPUicpfVxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWctd3JhcHBlci1vciBhZy13cmFwcGVyIGFnLWlucHV0LXdyYXBwZXIgYWctcmFkaW8tYnV0dG9uLWlucHV0LXdyYXBwZXJcIj5cbiAgICAgICAgICA8aW5wdXQgaWQ9XCIke2lkVHdvfVwiIGNsYXNzPVwiT1IgYWctaW5wdXQtZmllbGQtaW5wdXQgYWctcmFkaW8tYnV0dG9uLWlucHV0XCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cIm9yQW5kUmFkaW9cIiB2YWx1ZT1cIiR7XG4gICAgICBUT0tFTlMuVE9LRU5fT1JcbiAgICB9XCIvPiAgICAgICAgICAgICAgXG4gICAgICAgIDwvZGl2PiAgICAgICAgIFxuICAgIDwvZGl2PiAgIFxuICAgIGBcbiAgICB0aGlzLl9ndWkuYXBwZW5kQ2hpbGQodGhpcy5fb3BlcmF0b3JQYW5lbClcbiAgICB0aGlzLl9vcGVyYXRvclBhbmVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuX29uT3BlcmF0b3JDaGFuZ2VkKVxuXG4gICAgdGhpcy5fZ3VpLmFwcGVuZENoaWxkKHRoaXMuX3NlY29uZENvbmRpdGlvblBhbmVsLmdldEd1aSgpKVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLl9maXJzdENvbmRpdGlvblBhbmVsLmRlc3Ryb3koKVxuICAgIHRoaXMuX3NlY29uZENvbmRpdGlvblBhbmVsLmRlc3Ryb3koKVxuICAgIHRoaXMuX29wZXJhdG9yUGFuZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5fb25PcGVyYXRvckNoYW5nZWQpXG4gICAgdGhpcy5vZmYoSm9pbkNvbmRpdGlvblBhbmVsLk9OX0pPSU5fQ09ORElUSU9OX0NIQU5HRUQpXG4gICAgdGhpcy5yZXNldCgpXG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIHN0YXRlXG4gICAqL1xuICByZXNldCgpIHtcbiAgICB0aGlzLl9maXJzdENvbmRpdGlvblBhbmVsLnJlc2V0KClcbiAgICB0aGlzLl9zZWNvbmRDb25kaXRpb25QYW5lbC5yZXNldCgpXG4gICAgdGhpcy5ub3RpZnkoQ29uZGl0aW9uUGFuZWwuT05fQ09ORElUSU9OX0NIQU5HRUQsIHRoaXMuc3RhdGUpXG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBjb25kaXRpb24gam9pbiBzdGF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAgICovXG4gIHNldFN0YXRlKHN0YXRlKSB7XG4gICAgc3RhdGUgPSBzdGF0ZSB8fCB7fVxuICAgIHRoaXMuc3RhdGUub3BlcmF0b3IgPSBzdGF0ZS5vcGVyYXRvciB8fCBUT0tFTlMuVE9LRU5fT1JcbiAgICB0aGlzLnN0YXRlLmNvbmRpdGlvbjEgPSBzdGF0ZS5jb25kaXRpb24xIHx8IG51bGxcbiAgICB0aGlzLnN0YXRlLmNvbmRpdGlvbjIgPSBzdGF0ZS5jb25kaXRpb24yIHx8IG51bGxcblxuICAgIHRoaXMuX2ZpcnN0Q29uZGl0aW9uUGFuZWwuc2V0U3RhdGUodGhpcy5zdGF0ZS5jb25kaXRpb24xKVxuICAgIHRoaXMuX3NlY29uZENvbmRpdGlvblBhbmVsLnNldFN0YXRlKHRoaXMuc3RhdGUuY29uZGl0aW9uMilcbiAgICB0aGlzLl9vcGVyYXRvclBhbmVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0JykuZm9yRWFjaChpbnB1dCA9PiB7XG4gICAgICBpZiAoaW5wdXQuY2xhc3NMaXN0LmNvbnRhaW5zKHRoaXMuc3RhdGUub3BlcmF0b3IpKSB7XG4gICAgICAgIGlucHV0LmNoZWNrZWQgPSB0cnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnB1dC5jaGVja2VkID0gZmFsc2VcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5ub3RpZnkoSm9pbkNvbmRpdGlvblBhbmVsLk9OX0pPSU5fQ09ORElUSU9OX0NIQU5HRUQsIHRoaXMuc3RhdGUpXG4gIH1cblxuICAvKipcbiAgICogQWRkIHRoZSBzZWxlY3RlZCBjb25kaXRpb24gdG8gdGhlIGNvbXBvbmVudCBzdGF0ZXJcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZVxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vbk9wZXJhdG9yQ2hhbmdlZChlKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXRcblxuICAgIHRoaXMuc3RhdGUub3BlcmF0b3IgPSB0YXJnZXQudmFsdWVcblxuICAgIGlmICh0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdPUicpKSB7XG4gICAgICB0aGlzLl9vcGVyYXRvclBhbmVsXG4gICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci1vcicpXG4gICAgICAgIC5jbGFzc0xpc3QuYWRkKCdhZy1jaGVja2VkJylcbiAgICAgIHRoaXMuX29wZXJhdG9yUGFuZWxcbiAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5hZy13cmFwcGVyLWFuZCcpXG4gICAgICAgIC5jbGFzc0xpc3QucmVtb3ZlKCdhZy1jaGVja2VkJylcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fb3BlcmF0b3JQYW5lbFxuICAgICAgICAucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItb3InKVxuICAgICAgICAuY2xhc3NMaXN0LnJlbW92ZSgnYWctY2hlY2tlZCcpXG4gICAgICB0aGlzLl9vcGVyYXRvclBhbmVsXG4gICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci1hbmQnKVxuICAgICAgICAuY2xhc3NMaXN0LmFkZCgnYWctY2hlY2tlZCcpXG4gICAgfVxuXG4gICAgdGhpcy5ub3RpZnkoSm9pbkNvbmRpdGlvblBhbmVsLk9OX0pPSU5fQ09ORElUSU9OX0NIQU5HRUQsIHRoaXMuc3RhdGUpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRlICB0aGUgb3B0aW9uIHN0YXRlXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX29uRmlyc3RDb25kaXRpb25DaGFuZ2VkKHN0YXRlKSB7XG4gICAgdGhpcy5zdGF0ZS5jb25kaXRpb24xID0gc3RhdGVcblxuICAgIGNvbnN0IHN1cHByZXNzQW5kT3JDb25kaXRpb24gPSB0aGlzLmdldE9wdGlvbihcbiAgICAgICdzdXBwcmVzc0FuZE9yQ29uZGl0aW9uJyxcbiAgICAgIHRoaXMuX3BhcmFtcyxcbiAgICAgIGZhbHNlXG4gICAgKVxuXG4gICAgaWYgKCFzdXBwcmVzc0FuZE9yQ29uZGl0aW9uKSB7XG4gICAgICBjb25zdCB7IGZpbHRlciwgZmlsdGVyVG8sIHR5cGUgfSA9IHRoaXMuc3RhdGUuY29uZGl0aW9uMVxuICAgICAgY29uc3Qgc2Vjb25kQ29uZGl0aW9uR3VpID0gdGhpcy5fc2Vjb25kQ29uZGl0aW9uUGFuZWwuZ2V0R3VpKClcbiAgICAgIGNvbnN0IG9wZXJhdG9yUGFuZWxHdWkgPSB0aGlzLl9vcGVyYXRvclBhbmVsXG4gICAgICBjb25zdCBjb25kaXRpb24gPVxuICAgICAgICB0eXBlID09PSBUT0tFTlMuVE9LRU5fUkFOR0UgPyAhZmlsdGVyIHx8ICFmaWx0ZXJUbyA6ICFmaWx0ZXJcblxuICAgICAgaWYgKGNvbmRpdGlvbikge1xuICAgICAgICBzZWNvbmRDb25kaXRpb25HdWkuY2xhc3NMaXN0LmFkZCgnYWctaGlkZGVuJylcbiAgICAgICAgb3BlcmF0b3JQYW5lbEd1aS5jbGFzc0xpc3QuYWRkKCdhZy1oaWRkZW4nKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2Vjb25kQ29uZGl0aW9uR3VpLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWhpZGRlbicpXG4gICAgICAgIG9wZXJhdG9yUGFuZWxHdWkuY2xhc3NMaXN0LnJlbW92ZSgnYWctaGlkZGVuJylcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm5vdGlmeShKb2luQ29uZGl0aW9uUGFuZWwuT05fSk9JTl9DT05ESVRJT05fQ0hBTkdFRCwgdGhpcy5zdGF0ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge09iamVjdH0gc3RhdGUgIHRoZSBvcHRpb24gc3RhdGVcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25TZWNvbmRDb25kaXRpb25DaGFuZ2VkKHN0YXRlKSB7XG4gICAgdGhpcy5zdGF0ZS5jb25kaXRpb24yID0gc3RhdGVcbiAgICB0aGlzLm5vdGlmeShKb2luQ29uZGl0aW9uUGFuZWwuT05fSk9JTl9DT05ESVRJT05fQ0hBTkdFRCwgdGhpcy5zdGF0ZSlcbiAgfVxufVxuXG4vKipcbiAqIERhdGVUaW1lIEZpbHRlclxuICpcbiAqICMjIE9wdGlvbnNcbiAqXG4gKiB8IE5hbWUgICAgICAgICAgICAgICAgICBcdHwgRGVmYXVsdCAgICAgXHR8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHR8Oi0tLS0tLS0tLS0tLS06fC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAqKmRhdGVUaW1lRW5hYmxlVGltZSoqICAgfCBmYWxzZSAgICB8IGVuYWJsZSAvIGRpc2FibGUgdGltZVxuICogfCAqKmRhdGVUaW1lRW5hYmxlMjRIUioqICAgfCBmYWxzZSAgICB8IGVuYWJsZSAvIGRpc2FibGUgdGltZSAyNCBmb3JtYXRcbiAqIHwgKipkYXRlVGltZUVuYWJsZVNlY29uZHMqKiAgIHwgZmFsc2UgICAgfCBlbmFibGUgLyBkaXNhYmxlIHNlY29uZHMgbWFuYWdlbWVudFxuICogfCAqKmRhdGVUaW1lRW5hYmxlQ2FsZW5kYXIqKiAgIHwgZmFsc2UgICAgfCBlbmFibGUgLyBkaXNhYmxlIENhbGVuZGFyLlxuICogfCAqKmRhdGVUaW1lTWFzayoqICAgfCBmYWxzZSAgICB8IFRoZSBtYXNrIHVzZWQgdG8gZm9ybWF0IHRoZSBzZWxlY3RlZCBkYXRlXG4gKiB8ICoqZGF0ZVRpbWVNYXgqKiAgIHwgdW5kZWZpbmVkICAgIHwgIE1heCBhbGxvd2VkIGRhdGVcbiAqIHwgKipkYXRlVGltZU1pbioqICAgfCB1bmRlZmluZWQgICAgfCAgTWluIGFsbG93ZWQgZGF0ZVxuICogfCAqKmRhdGVUaW1lRm9ybWF0dGVyKiogICB8IHVuZGVmaW5lZCAgICB8ICBBIGZ1bmN0aW9uIG9yIGV4cHJlc3Npb24gdG8gZm9ybWF0IHRoZSBkYXRlIChAc2VlIHN1cHBvcnRlZCBwYXJhbSlcbiAqIHwgKipkYXRlVGltZUxvY2FsZSoqICAgfCBTeXN0ZW0gZGVmYXVsdCAgICB8ICBBIGxvY2FsZSB0byB1c2UgZm9yIGRhdGUgZm9ybWF0dGluZ1xuICogfCAqKmRhdGVUaW1lRGVmYXVsdEhvdXIqKiAgIHwgMTIgICAgfCAgSW5pdGlhbCB2YWx1ZSBvZiB0aGUgaG91ciBlbGVtZW50LlxuICogfCAqKmRhdGVUaW1lRGVmYXVsdE1pbnV0ZSoqICAgfCAwICAgIHwgIEluaXRpYWwgdmFsdWUgb2YgdGhlIG1pbnV0ZSBlbGVtZW50LlxuICogfCAqKmRhdGVUaW1lRGlzYWJsZU1vYmlsZSoqICAgfCBmYWxzZSAgICB8ICBTZXQgZGlzYWJsZU1vYmlsZSB0byB0cnVlIHRvIGFsd2F5cyB1c2UgdGhlIG5vbi1uYXRpdmUgcGlja2VyLlxuICogfCAqKmRhdGVUaW1lRW5hYmxlV2Vla051bWJlcioqICAgfCB0cnVlICAgIHwgIEVuYWJsZXMgZGlzcGxheSBvZiB3ZWVrIG51bWJlcnMgaW4gY2FsZW5kYXIuXG4gKiB8ICoqZmlsdGVyT3B0aW9ucyoqICAgfCBFcXVhbHMsIEdyZWF0ZXIgVGhhbiwgTGVzcyBUaGFuLCBOb3QgRXF1YWxzLCBJbiBSYW5nZS4gICAgfCAgV2hhdCBGaWx0ZXIgT3B0aW9ucyB0byBwcmVzZW50IHRvIHRoZSB1c2VyLlxuICogfCAqKmRlZmF1bHRPcHRpb24qKiAgIHwgRXF1YWxzICAgIHwgIFRoZSBkZWZhdWx0IEZpbHRlciBPcHRpb25zIHRvIGJlIHNlbGVjdGVkLlxuICogfCAqKnN1cHByZXNzQW5kT3JDb25kaXRpb24qKiAgIHwgZmFsc2UgICAgfCAgSWYgdHJ1ZSwgdGhlIGZpbHRlciB3aWxsIG9ubHkgb2ZmZXIgQ29uZGl0aW9uIDEuXG4gKiB8ICoqaW5SYW5nZUluY2x1c2l2ZSoqICAgfCBmYWxzZSAgICB8ICBJZiB0cnVlIHRoZW4gZG9pbmcgJ2luUmFuZ2UnIGZpbHRlciBvcHRpb24gd2lsbCBpbmNsdWRlIHZhbHVlcyBlcXVhbCB0byB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgcmFuZ2UuXG4gKiB8ICoqY2xlYXJCdXR0b24qKiAgIHwgZmFsc2UgICAgfCAgU2V0IHRvIHRydWUgdG8gaGF2ZSB0aGUgZmlsdGVyIHVzZSBhIENsZWFyIGJ1dHRvbi4gVGhlIENsZWFyIGJ1dHRvbiB3aWxsIGNsZWFyIHRoZSAoZm9ybSkgZGV0YWlscyBvZiB0aGUgZmlsdGVyIHdpdGhvdXQgcmVtb3ZpbmcgYW55IGFjdGl2ZSBmaWx0ZXJzIG9uIHRoZSBjb2x1bW4uXG4gKiB8ICoqYXBwbHlCdXR0b24qKiAgIHwgZmFsc2UgICAgfCAgU2V0IHRvIHRydWUgdG8gaGF2ZSB0aGUgZmlsdGVyIHVzZSBhbiBBcHBseSBidXR0b24uIElmIHRoZSBBcHBseSBidXR0b24gaXMgcHJlc2VudCwgdGhlbiB0aGUgZmlsdGVyIGlzIG9ubHkgYXBwbGllZCBhZnRlciB0aGUgdXNlciBoaXRzIHRoZSBBcHBseSBidXR0b24uXG4gKiB8ICoqcmVzZXRCdXR0b24qKiAgIHwgZmFsc2UgICAgfCAgU2V0IHRvIHRydWUgdG8gaGF2ZSB0aGUgZmlsdGVyIHVzZSBhIFJlc2V0IGJ1dHRvbi4gVGhlIFJlc2V0IGJ1dHRvbiB3aWxsIGNsZWFyIHRoZSBkZXRhaWxzIG9mIHRoZSBmaWx0ZXIgYW5kIGFueSBhY3RpdmUgZmlsdGVycyBvbiB0aGF0IGNvbHVtbi5cbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5jbGFzcyBEYXRlVGltZUZpbHRlciBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBAdHlwZSB7Sm9pbn1cbiAgICovXG4gIF9Kb2luQ29uZGl0aW9uUGFuZWwgPSBuZXcgSm9pbkNvbmRpdGlvblBhbmVsKClcblxuICAvKipcbiAgICogSm9pbiBwYW5lbCBzdGF0ZVxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgX3N0YXRlID0ge31cblxuICAvKipcbiAgICogQ29tcG9uZW50IHBhcmFtc1xuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgX3BhcmFtcyA9IHt9XG5cbiAgLyoqXG4gICAqIEFuIG9iamVjdCBvZiBhbGwgdGhlIHJlcXVpcmVkIG9wdGlvbnMgY2FjaGVkIGZvciBkb2VzRmlsdGVyUGFzcyBtZXRob2RcbiAgICovXG4gIF9kb2VzRmlsdGVyUGFzc09wdGlvbnMgPSBudWxsXG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgaW5pdChwYXJhbXMpIHtcbiAgICBjb25zdCB0cmFuc2xhdGUgPSBwYXJhbXMuYXBpLmdyaWRPcHRpb25zV3JhcHBlci5nZXRMb2NhbGVUZXh0RnVuYygpXG4gICAgY29uc3QgaXNDbGVhckZpbHRlciA9IHRoaXMuZ2V0T3B0aW9uKCdjbGVhckJ1dHRvbicsIHBhcmFtcywgZmFsc2UpXG4gICAgY29uc3QgaXNSZXNldEJ1dHRvbiA9IHRoaXMuZ2V0T3B0aW9uKCdyZXNldEJ1dHRvbicsIHBhcmFtcywgZmFsc2UpXG4gICAgY29uc3QgaXNBcHBseUJ1dHRvbiA9IHRoaXMuZ2V0T3B0aW9uKCdhcHBseUJ1dHRvbicsIHBhcmFtcywgZmFsc2UpXG5cbiAgICB0aGlzLl9ndWkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuXG4gICAgdGhpcy5fSm9pbkNvbmRpdGlvblBhbmVsLmluaXQocGFyYW1zKVxuICAgIHRoaXMuX0pvaW5Db25kaXRpb25QYW5lbC5vbihcbiAgICAgIEpvaW5Db25kaXRpb25QYW5lbC5PTl9KT0lOX0NPTkRJVElPTl9DSEFOR0VELFxuICAgICAgc3RhdGUgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuX19kaXNhYmxlU3RhdGVDaGFuZ2VMaXN0ZW5lcikge1xuICAgICAgICAgIHRoaXMuX29uSm9pbkNvbmRpdGlvblBhbmVsU3RhdGVDaGFuZ2VkKHN0YXRlLCBpc0FwcGx5QnV0dG9uKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKVxuXG4gICAgdGhpcy5fZ3VpLmFwcGVuZENoaWxkKHRoaXMuX0pvaW5Db25kaXRpb25QYW5lbC5nZXRHdWkoKSlcblxuICAgIGNvbnN0IGFwcGx5RmlsdGVyUGFuZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIGFwcGx5RmlsdGVyUGFuZWwuY2xhc3NOYW1lID0gYGFnLWZpbHRlci1hcHBseS1wYW5lbCBhZy1oaWRkZW5gXG4gICAgYXBwbHlGaWx0ZXJQYW5lbC5pbm5lckhUTUwgPSAvKiBodG1sICovIGBcbiAgICAgIDxidXR0b24gY2xhc3M9XCJhZy1zdGFuZGFyZC1idXR0b24gYWctZmlsdGVyLWFwcGx5LXBhbmVsLWJ1dHRvbiBjbGVhciAkeyFpc0NsZWFyRmlsdGVyICYmXG4gICAgICAgICdhZy1oaWRkZW4nfVwiIHR5cGU9XCJidXR0b25cIj4ke3RyYW5zbGF0ZShcbiAgICAgICdjbGVhckZpbHRlcicsXG4gICAgICAnQ2xlYXIgRmlsdGVyJ1xuICAgICl9PC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYWctc3RhbmRhcmQtYnV0dG9uIGFnLWZpbHRlci1hcHBseS1wYW5lbC1idXR0b24gcmVzZXQgJHshaXNSZXNldEJ1dHRvbiAmJlxuICAgICAgICAnYWctaGlkZGVuJ31cIiB0eXBlPVwiYnV0dG9uXCI+JHt0cmFuc2xhdGUoXG4gICAgICAncmVzZXRGaWx0ZXInLFxuICAgICAgJ1Jlc2V0IEZpbHRlcidcbiAgICApfTwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImFnLXN0YW5kYXJkLWJ1dHRvbiBhZy1maWx0ZXItYXBwbHktcGFuZWwtYnV0dG9uIGFwcGx5ICR7IWlzQXBwbHlCdXR0b24gJiZcbiAgICAgICAgJ2FnLWhpZGRlbid9XCIgdHlwZT1cImJ1dHRvblwiPiR7dHJhbnNsYXRlKFxuICAgICAgJ2FwcGx5RmlsdGVyJyxcbiAgICAgICdBcHBseSBGaWx0ZXInXG4gICAgKX08L2J1dHRvbj5cbiAgICBgXG5cbiAgICBpZiAoaXNDbGVhckZpbHRlciB8fCBpc1Jlc2V0QnV0dG9uIHx8IGlzQXBwbHlCdXR0b24pIHtcbiAgICAgIGFwcGx5RmlsdGVyUGFuZWwuY2xhc3NMaXN0LnJlbW92ZSgnYWctaGlkZGVuJylcbiAgICB9XG5cbiAgICBhcHBseUZpbHRlclBhbmVsLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAnY2xpY2snLFxuICAgICAgdGhpcy5fQXBwbHlGaWx0ZXJQYW5lbEJ1dHRvbkNsaWNrXG4gICAgKVxuXG4gICAgdGhpcy5fZ3VpLmFwcGVuZENoaWxkKGFwcGx5RmlsdGVyUGFuZWwpXG5cbiAgICB0aGlzLl9zdGF0ZSA9IHRoaXMuX0pvaW5Db25kaXRpb25QYW5lbC5zdGF0ZVxuICAgIHRoaXMuX3BhcmFtcyA9IHBhcmFtc1xuXG4gICAgdGhpcy5fZG9lc0ZpbHRlclBhc3NPcHRpb25zID0ge1xuICAgICAgZW5hYmxlVGltZTogdGhpcy5nZXRPcHRpb24oJ2RhdGVUaW1lRW5hYmxlVGltZScsIHRoaXMuX3BhcmFtcywgdHJ1ZSksXG4gICAgICBpblJhbmdlSW5jbHVzaXZlOiB0aGlzLmdldE9wdGlvbignaW5SYW5nZUluY2x1c2l2ZScsIHRoaXMuX3BhcmFtcywgZmFsc2UpLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgdmFsdWVHZXR0ZXI6IHRoaXMuX3BhcmFtcy5oYXNPd25Qcm9wZXJ0eSgnZmlsdGVyVmFsdWVHZXR0ZXInKVxuICAgICAgICA/IHRoaXMuX3BhcmFtcy5maWx0ZXJWYWx1ZUdldHRlclxuICAgICAgICA6IHRoaXMuX3BhcmFtcy52YWx1ZUdldHRlcixcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIEBvdmVycmlkZVxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuX0pvaW5Db25kaXRpb25QYW5lbC5kZXN0cm95KClcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHNlbGVjdGVkIGZpbHRlciBtYXRjaGVzIHRoZSBwYXNzZWQgY2VsbCBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSB3aGVuIHBhc3MsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgZG9lc0ZpbHRlclBhc3MocGFyYW1zKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9kb2VzRmlsdGVyUGFzc09wdGlvbnMudmFsdWVHZXR0ZXIocGFyYW1zKVxuICAgIGNvbnN0IHsgY29uZGl0aW9uMSwgY29uZGl0aW9uMiwgb3BlcmF0b3IgfSA9IHRoaXMuX3N0YXRlXG4gICAgY29uc3QgZG9lc1Bhc3NGaXJzdENvbmRpdGlvbiA9IHRoaXMuX2RvZXNQYXNzQ29uZGl0aW9uKGNvbmRpdGlvbjEsIHZhbHVlKVxuICAgIGNvbnN0IGRvZXNQYXNzU2Vjb25kQ29uZGl0aW9uID0gdGhpcy5fZG9lc1Bhc3NDb25kaXRpb24oY29uZGl0aW9uMiwgdmFsdWUpXG5cbiAgICByZXR1cm4gb3BlcmF0b3IgPT09IFRPS0VOUy5UT0tFTl9PUlxuICAgICAgPyBkb2VzUGFzc0ZpcnN0Q29uZGl0aW9uIHx8IGRvZXNQYXNzU2Vjb25kQ29uZGl0aW9uXG4gICAgICA6IGRvZXNQYXNzRmlyc3RDb25kaXRpb24gJiYgZG9lc1Bhc3NTZWNvbmRDb25kaXRpb25cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRoZSBjb21wb25lbnQgaXMgYXBwbHlpbmcgYW55IGZpbHRlciBvbiB0aGUgY29sdW1uXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAqKi9cbiAgaXNGaWx0ZXJBY3RpdmUoKSB7XG4gICAgY29uc3QgeyBjb25kaXRpb24xIH0gPSB0aGlzLl9zdGF0ZVxuXG4gICAgaWYgKGNvbmRpdGlvbjEgJiYgY29uZGl0aW9uMS5maWx0ZXIpIHtcbiAgICAgIGlmIChjb25kaXRpb24xLmZpbHRlclRvICYmIGNvbmRpdGlvbjEudHlwZSA9PT0gVE9LRU5TLlRPS0VOX1JBTkdFKSB7XG4gICAgICAgIHJldHVybiBjb25kaXRpb24xLmZpbHRlciAhPT0gbnVsbCAmJiBjb25kaXRpb24xLmZpbHRlclRvICE9PSBudWxsXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb25kaXRpb24xLmZpbHRlciAhPT0gbnVsbFxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGZpbHRlciBzdGF0ZS4gSWYgZmlsdGVyIGlzIG5vdCBhY3RpdmUsIHRoZW4gc2hvdWxkIHJldHVybiBudWxsL3VuZGVmaW5lZC5cbiAgICogVGhlIGdyaWQgY2FsbHMgZ2V0TW9kZWwoKSBvbiBhbGwgYWN0aXZlIGZpbHRlcnMgd2hlbiBncmlkQXBpLmdldEZpbHRlck1vZGVsKCkgaXMgY2FsbGVkLlxuICAgKlxuICAgKiBAcmV0dXJuIE9iamVjdCB8IG51bGwgdGhlIGZpbHRlciBzdGF0ZVxuICAgKi9cbiAgZ2V0TW9kZWwoKSB7XG4gICAgY29uc3QgY2xvbmUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuX3N0YXRlKSlcbiAgICA7W2Nsb25lLmNvbmRpdGlvbjEsIGNsb25lLmNvbmRpdGlvbjJdLmZvckVhY2goKGNvbmRpdGlvbiwgaSkgPT4ge1xuICAgICAgaWYgKGNvbmRpdGlvbi5maWx0ZXIpIHtcbiAgICAgICAgY29uZGl0aW9uLmZpbHRlciA9IHRoaXMuX3N0YXRlW2Bjb25kaXRpb24ke2kgKyAxfWBdLmZpbHRlci50b0lTT1N0cmluZygpXG4gICAgICB9XG4gICAgICBpZiAoY29uZGl0aW9uLmZpbHRlclRvKSB7XG4gICAgICAgIGNvbmRpdGlvbi5maWx0ZXJUbyA9IHRoaXMuX3N0YXRlW1xuICAgICAgICAgIGBjb25kaXRpb24ke2kgKyAxfWBcbiAgICAgICAgXS5maWx0ZXJUby50b0lTT1N0cmluZygpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNsb25lLmZpbHRlclR5cGUgPSAnZGF0ZXRpbWUnXG4gICAgY2xvbmUuY29uZGl0aW9uMS5maWx0ZXJUeXBlID0gJ2RhdGV0aW1lJ1xuICAgIGNsb25lLmNvbmRpdGlvbjIuZmlsdGVyVHlwZSA9ICdkYXRldGltZSdcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICByZXR1cm4gY2xvbmUuaGFzT3duUHJvcGVydHkoJ2NvbmRpdGlvbjInKSAmJlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgY2xvbmUuY29uZGl0aW9uMi5oYXNPd25Qcm9wZXJ0eSgnZmlsdGVyJykgJiZcbiAgICAgIGNsb25lLmNvbmRpdGlvbjIuZmlsdGVyXG4gICAgICA/IGNsb25lXG4gICAgICA6IGNsb25lLmNvbmRpdGlvbjFcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlcyB0aGUgZmlsdGVyIHN0YXRlLiBDYWxsZWQgYnkgdGhlIGdyaWQgYWZ0ZXIgZ3JpZEFwaS5zZXRGaWx0ZXJNb2RlbChtb2RlbCkgaXMgY2FsbGVkLlxuICAgKiBUaGUgZ3JpZCB3aWxsIHBhc3MgdW5kZWZpbmVkL251bGwgdG8gY2xlYXIgdGhlIGZpbHRlci5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3QgfCBudWxsfSBtb2RlbFxuICAgKi9cbiAgc2V0TW9kZWwobW9kZWwpIHtcbiAgICBpZiAoXG4gICAgICBtb2RlbCAmJlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgIW1vZGVsLmhhc093blByb3BlcnR5KCdjb25kaXRpb24xJykgJiZcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICFtb2RlbC5oYXNPd25Qcm9wZXJ0eSgnY29uZGl0aW9uMicpXG4gICAgKSB7XG4gICAgICBtb2RlbCA9IHtcbiAgICAgICAgY29uZGl0aW9uMTogbW9kZWwsXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX19kaXNhYmxlU3RhdGVDaGFuZ2VMaXN0ZW5lciA9IHRydWVcbiAgICB0aGlzLl9Kb2luQ29uZGl0aW9uUGFuZWwuc2V0U3RhdGUobW9kZWwpXG4gICAgdGhpcy5fX2Rpc2FibGVTdGF0ZUNoYW5nZUxpc3RlbmVyID0gZmFsc2VcblxuICAgIHRoaXMuX3N0YXRlID0gdGhpcy5fSm9pbkNvbmRpdGlvblBhbmVsLnN0YXRlXG4gICAgO1t0aGlzLl9zdGF0ZS5jb25kaXRpb24xLCB0aGlzLl9zdGF0ZS5jb25kaXRpb24yXS5mb3JFYWNoKGNvbmRpdGlvbiA9PiB7XG4gICAgICBpZiAoY29uZGl0aW9uLmZpbHRlcikge1xuICAgICAgICBjb25kaXRpb24uZmlsdGVyID0gbmV3IERhdGUoY29uZGl0aW9uLmZpbHRlcilcbiAgICAgIH1cbiAgICAgIGlmIChjb25kaXRpb24uZmlsdGVyVG8pIHtcbiAgICAgICAgY29uZGl0aW9uLmZpbHRlclRvID0gbmV3IERhdGUoY29uZGl0aW9uLmZpbHRlclRvKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBmaWx0ZXIgbW9kZWwgYXMgcGxhaW4gc3RyaW5nIHRvIGRpc3BsYXkgaW4gdGhlIGZsb2F0aW5nIGZpbHRlciBpbnB1dFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdCB8IG51bGx9IG1vZGVsXG4gICAqL1xuICBnZXRNb2RlbEFzU3RyaW5nKG1vZGVsKSB7XG4gICAgaWYgKCFtb2RlbCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuXG4gICAgY29uc3QgZGF0ZVRpbWVNYXNrID0gdGhpcy5nZXRPcHRpb24oXG4gICAgICAnZGF0ZVRpbWVNYXNrJyxcbiAgICAgIHRoaXMuX3BhcmFtcyxcbiAgICAgIC8vIEB0b2RvIEZpbmQgYSBiZXR0ZXIgd2F5IGZvciB0aGlzXG4gICAgICB0aGlzLl9Kb2luQ29uZGl0aW9uUGFuZWwuX2ZpcnN0Q29uZGl0aW9uUGFuZWwuX2ZpbHRlclRpbWVJbnB1dC5waWNrZXJcbiAgICAgICAgLmNvbmZpZ1snZGF0ZUZvcm1hdCddXG4gICAgKVxuICAgIGNvbnN0IGxvY2FsZSA9IHRoaXMuZ2V0T3B0aW9uKFxuICAgICAgJ2RhdGVUaW1lTG9jYWxlJyxcbiAgICAgIHRoaXMuX3BhcmFtcyxcbiAgICAgIEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS5sb2NhbGUgfHwgJ2VuLVVTJ1xuICAgIClcblxuICAgIGNvbnN0IHsgY29uZGl0aW9uMSwgY29uZGl0aW9uMiwgb3BlcmF0b3IgfSA9IEpTT04ucGFyc2UoXG4gICAgICBKU09OLnN0cmluZ2lmeShtb2RlbClcbiAgICApXG5cbiAgICA7W2NvbmRpdGlvbjEsIGNvbmRpdGlvbjJdLmZvckVhY2goY29uZGl0aW9uID0+IHtcbiAgICAgIGlmIChjb25kaXRpb24uZmlsdGVyKSB7XG4gICAgICAgIGNvbmRpdGlvbi5maWx0ZXIgPSBCQmouTWFza3MuRGF0ZU1hc2subWFzayhcbiAgICAgICAgICBjb25kaXRpb24uZmlsdGVyLFxuICAgICAgICAgIGRhdGVUaW1lTWFzayxcbiAgICAgICAgICBsb2NhbGVcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAoY29uZGl0aW9uLmZpbHRlclRvKSB7XG4gICAgICAgIGNvbmRpdGlvbi5maWx0ZXJUbyA9IEJCai5NYXNrcy5EYXRlTWFzay5tYXNrKFxuICAgICAgICAgIGNvbmRpdGlvbi5maWx0ZXJUbyxcbiAgICAgICAgICBkYXRlVGltZU1hc2ssXG4gICAgICAgICAgbG9jYWxlXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgY29uc3QgZmlyc3RDb25kaXRpb25Bc1N0cmluZyA9IGAke2NvbmRpdGlvbjEuZmlsdGVyIHx8ICcnfSAke1xuICAgICAgY29uZGl0aW9uMS5maWx0ZXJUbyA/ICfihpIgJyArIGNvbmRpdGlvbjEuZmlsdGVyVG8gOiAnJ1xuICAgIH1gXG4gICAgY29uc3Qgc2Vjb25kQ29uZGl0aW9uQXNTdHJpbmcgPSBgJHtjb25kaXRpb24yLmZpbHRlciB8fCAnJ30gJHtcbiAgICAgIGNvbmRpdGlvbjIuZmlsdGVyVG8gPyAn4oaSICcgKyBjb25kaXRpb24yLmZpbHRlclRvIDogJydcbiAgICB9YFxuICAgIGNvbnN0IG9wZXJhdG9yQXNTdHJpbmcgPSBgJHtjb25kaXRpb24yLmZpbHRlciAmJiBvcGVyYXRvciA/IG9wZXJhdG9yIDogJyd9YFxuXG4gICAgcmV0dXJuIGAke2ZpcnN0Q29uZGl0aW9uQXNTdHJpbmd9ICR7b3BlcmF0b3JBc1N0cmluZ30gJHtzZWNvbmRDb25kaXRpb25Bc1N0cmluZ31gLnRyaW0oKVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBnaXZlbiB2YWx1ZSBwYXNzZXMgdGhlIGZpbHRlciBkZWZpbmVkIGluIHRoZSBwYXNzZWQgQ29uZGl0aW9uUGFuZWwncyBzdGF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZGl0aW9uIGNvbmRpdGlvbiBwYW5lbCBzdGF0ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gdmFsdWUgY2VsbCB2YWx1ZVxuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIHdoZW4gcGFzcywgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBfZG9lc1Bhc3NDb25kaXRpb24oY29uZGl0aW9uLCB2YWx1ZSkge1xuICAgIGlmICghY29uZGl0aW9uLmZpbHRlciB8fCAhdmFsdWUpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IHsgZmlsdGVyLCBmaWx0ZXJUbywgdHlwZSB9ID0gY29uZGl0aW9uXG4gICAgY29uc3QgdGltZXpvbmUgPSBCQmouTWFza3MuVXRpbHMuRGF0ZXMuZ2V0VGltZXpvbmVPck9mZnNldCgpXG4gICAgY29uc3QgaW5SYW5nZUluY2x1c2l2ZSA9IHRoaXMuX2RvZXNGaWx0ZXJQYXNzT3B0aW9ucy5pblJhbmdlSW5jbHVzaXZlXG4gICAgY29uc3QgZW5hYmxlVGltZSA9IHRoaXMuX2RvZXNGaWx0ZXJQYXNzT3B0aW9ucy5lbmFibGVUaW1lXG4gICAgbGV0IHBhc3NlZCA9IGZhbHNlXG5cbiAgICBpZiAoQkJqLk1hc2tzLlV0aWxzLkRhdGVzLklTX1RJTUVfUkVHRVgudGVzdCh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUgPSBCQmouTWFza3MuVXRpbHMuRGF0ZXMuZml4U2hvcnRJU08odmFsdWUpXG4gICAgICA7W2ZpbHRlciwgZmlsdGVyVG9dLmZvckVhY2goZGF0ZSA9PiB7XG4gICAgICAgIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgIGRhdGUuc2V0RnVsbFllYXIoMTk3MClcbiAgICAgICAgICBkYXRlLnNldE1vbnRoKDApXG4gICAgICAgICAgZGF0ZS5zZXREYXRlKDEpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmIChCQmouTWFza3MuVXRpbHMuRGF0ZXMuSVNfREFURV9SRUdFWC50ZXN0KHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSBCQmouTWFza3MuVXRpbHMuRGF0ZXMuZml4U2hvcnRJU08odmFsdWUpXG4gICAgfVxuXG4gICAgLy8gY29udmVydCB0aGUgZGF0ZXRpbWUgZnJvbSB1dGMgdG8gbG9jYWxlXG4gICAgdmFsdWUgPSB1dGNUb1pvbmVkVGltZSh2YWx1ZSwgdGltZXpvbmUpXG4gICAgLy8gZmlyc3REYXRlID0gZmlyc3REYXRlID8gem9uZWRUaW1lVG9VdGMoZmlyc3REYXRlICwgdGltZXpvbmUpIDogZmlyc3REYXRlXG4gICAgLy8gc2Vjb25kRGF0ZSA9IHNlY29uZERhdGUgPyB6b25lZFRpbWVUb1V0YyhzZWNvbmREYXRlICwgdGltZXpvbmUpIDogc2Vjb25kRGF0ZVxuXG4gICAgaWYgKCFlbmFibGVUaW1lKSB7XG4gICAgICAvLyByZW1vdmUgdGhlIHRpbWUgcG9ydGlvbiBmcm9tIHRoZSBkYXRlXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXh0cmEtc2VtaVxuICAgICAgO1t2YWx1ZSwgZmlsdGVyLCBmaWx0ZXJUb10uZm9yRWFjaChkYXRlID0+IHtcbiAgICAgICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgZGF0ZS5zZXRIb3VycygwKVxuICAgICAgICAgIGRhdGUuc2V0TWludXRlcygwKVxuICAgICAgICAgIGRhdGUuc2V0U2Vjb25kcygwKVxuICAgICAgICAgIGRhdGUuc2V0TWlsbGlzZWNvbmRzKDApXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09IFRPS0VOUy5UT0tFTl9FUVVBTCkge1xuICAgICAgcGFzc2VkID0gZmlsdGVyID4gdmFsdWUgPT09IGZhbHNlICYmIGZpbHRlciA8IHZhbHVlID09IGZhbHNlXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBUT0tFTlMuVE9LRU5fTk9UX0VRVUFMKSB7XG4gICAgICBwYXNzZWQgPSAhKGZpbHRlciA+IHZhbHVlID09PSBmYWxzZSAmJiBmaWx0ZXIgPCB2YWx1ZSA9PSBmYWxzZSlcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRPS0VOUy5UT0tFTl9HUkVBVEVSKSB7XG4gICAgICBwYXNzZWQgPSBmaWx0ZXIgPCB2YWx1ZVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVE9LRU5TLlRPS0VOX0xFU1MpIHtcbiAgICAgIHBhc3NlZCA9IGZpbHRlciA+IHZhbHVlXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBUT0tFTlMuVE9LRU5fUkFOR0UgJiYgZmlsdGVyVG8pIHtcbiAgICAgIGlmIChpblJhbmdlSW5jbHVzaXZlKSB7XG4gICAgICAgIHBhc3NlZCA9XG4gICAgICAgICAgKChmaWx0ZXIgPCB2YWx1ZSB8fFxuICAgICAgICAgICAgKGZpbHRlciA+IHZhbHVlID09PSBmYWxzZSAmJiBmaWx0ZXIgPCB2YWx1ZSA9PSBmYWxzZSkpICYmXG4gICAgICAgICAgICBmaWx0ZXJUbyA+IHZhbHVlKSB8fFxuICAgICAgICAgIChmaWx0ZXJUbyA+IHZhbHVlID09PSBmYWxzZSAmJiBmaWx0ZXJUbyA8IHZhbHVlID09IGZhbHNlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFzc2VkID0gZmlsdGVyIDwgdmFsdWUgJiYgZmlsdGVyVG8gPiB2YWx1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXNzZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0IHRvIGNsaWNrIGJ1dHRvbiBldmVudCBvbiB0aGUgZmlsdGVyIHBhbmVsIGFuZCBleGVjdXRlIHRoZVxuICAgKiByaWdodCBhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZVxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9BcHBseUZpbHRlclBhbmVsQnV0dG9uQ2xpY2soZSkge1xuICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0XG5cbiAgICBpZiAodGFyZ2V0Lm5vZGVOYW1lID09PSAnQlVUVE9OJykge1xuICAgICAgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ3Jlc2V0JykpIHtcbiAgICAgICAgdGhpcy5fSm9pbkNvbmRpdGlvblBhbmVsLnJlc2V0KClcbiAgICAgICAgdGhpcy5fcGFyYW1zLmZpbHRlckNoYW5nZWRDYWxsYmFjaygpXG4gICAgICB9IGVsc2UgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2NsZWFyJykpIHtcbiAgICAgICAgdGhpcy5fSm9pbkNvbmRpdGlvblBhbmVsLnJlc2V0KClcbiAgICAgIH0gZWxzZSBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnYXBwbHknKSkge1xuICAgICAgICB0aGlzLl9wYXJhbXMuZmlsdGVyQ2hhbmdlZENhbGxiYWNrKClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBmaWx0ZXIgc3RhdGUgYW5kIEFwcGx5IHRoZSBmaWx0ZXIgZGVwZW5kaW5nIG9uXG4gICAqIHdoZXRoZXIgdGhlIGBpc0FwcGx5QnV0dG9uQWN0aXZlYCBpcyB0cnVlIG9yIGZhbHNlXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IGlzQXBwbHlCdXR0b25BY3RpdmVcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25Kb2luQ29uZGl0aW9uUGFuZWxTdGF0ZUNoYW5nZWQoc3RhdGUsIGlzQXBwbHlCdXR0b25BY3RpdmUpIHtcbiAgICB0aGlzLl9zdGF0ZSA9IHN0YXRlXG4gICAgaWYgKGZhbHNlID09PSBpc0FwcGx5QnV0dG9uQWN0aXZlKSB7XG4gICAgICB0aGlzLl9wYXJhbXMuZmlsdGVyQ2hhbmdlZENhbGxiYWNrKClcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGF0ZVRpbWVGaWx0ZXJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9EYXRlVGltZUZpbHRlci9EYXRlVGltZUZpbHRlci5qcyIsIi8qKlxuICogUmV0dXJucyB0aGUgW3llYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kc10gdG9rZW5zIG9mIHRoZSBwcm92aWRlZFxuICogYGRhdGVgIGFzIGl0IHdpbGwgYmUgcmVuZGVyZWQgaW4gdGhlIGB0aW1lWm9uZWAuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHR6VG9rZW5pemVEYXRlKGRhdGUsIHRpbWVab25lKSB7XG4gIHZhciBkdGYgPSBnZXREYXRlVGltZUZvcm1hdCh0aW1lWm9uZSlcbiAgcmV0dXJuIGR0Zi5mb3JtYXRUb1BhcnRzID8gcGFydHNPZmZzZXQoZHRmLCBkYXRlKSA6IGhhY2t5T2Zmc2V0KGR0ZiwgZGF0ZSlcbn1cblxudmFyIHR5cGVUb1BvcyA9IHtcbiAgeWVhcjogMCxcbiAgbW9udGg6IDEsXG4gIGRheTogMixcbiAgaG91cjogMyxcbiAgbWludXRlOiA0LFxuICBzZWNvbmQ6IDVcbn1cblxuZnVuY3Rpb24gcGFydHNPZmZzZXQoZHRmLCBkYXRlKSB7XG4gIHZhciBmb3JtYXR0ZWQgPSBkdGYuZm9ybWF0VG9QYXJ0cyhkYXRlKVxuICB2YXIgZmlsbGVkID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb3JtYXR0ZWQubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcG9zID0gdHlwZVRvUG9zW2Zvcm1hdHRlZFtpXS50eXBlXVxuXG4gICAgaWYgKHBvcyA+PSAwKSB7XG4gICAgICBmaWxsZWRbcG9zXSA9IHBhcnNlSW50KGZvcm1hdHRlZFtpXS52YWx1ZSwgMTApXG4gICAgfVxuICB9XG4gIHJldHVybiBmaWxsZWRcbn1cblxuZnVuY3Rpb24gaGFja3lPZmZzZXQoZHRmLCBkYXRlKSB7XG4gIHZhciBmb3JtYXR0ZWQgPSBkdGYuZm9ybWF0KGRhdGUpLnJlcGxhY2UoL1xcdTIwMEUvZywgJycpXG4gIHZhciBwYXJzZWQgPSAvKFxcZCspXFwvKFxcZCspXFwvKFxcZCspLD8gKFxcZCspOihcXGQrKTooXFxkKykvLmV4ZWMoZm9ybWF0dGVkKVxuICAvLyB2YXIgWywgZk1vbnRoLCBmRGF5LCBmWWVhciwgZkhvdXIsIGZNaW51dGUsIGZTZWNvbmRdID0gcGFyc2VkXG4gIC8vIHJldHVybiBbZlllYXIsIGZNb250aCwgZkRheSwgZkhvdXIsIGZNaW51dGUsIGZTZWNvbmRdXG4gIHJldHVybiBbcGFyc2VkWzNdLCBwYXJzZWRbMV0sIHBhcnNlZFsyXSwgcGFyc2VkWzRdLCBwYXJzZWRbNV0sIHBhcnNlZFs2XV1cbn1cblxuLy8gR2V0IGEgY2FjaGVkIEludGwuRGF0ZVRpbWVGb3JtYXQgaW5zdGFuY2UgZm9yIHRoZSBJQU5BIGB0aW1lWm9uZWAuIFRoaXMgY2FuIGJlIHVzZWRcbi8vIHRvIGdldCBkZXRlcm1pbmlzdGljIGxvY2FsIGRhdGUvdGltZSBvdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBgZW4tVVNgIGxvY2FsZSB3aGljaFxuLy8gY2FuIGJlIHVzZWQgdG8gZXh0cmFjdCBsb2NhbCB0aW1lIHBhcnRzIGFzIG5lY2Vzc2FyeS5cbnZhciBkdGZDYWNoZSA9IHt9XG5mdW5jdGlvbiBnZXREYXRlVGltZUZvcm1hdCh0aW1lWm9uZSkge1xuICBpZiAoIWR0ZkNhY2hlW3RpbWVab25lXSkge1xuICAgIC8vIE5ldyBicm93c2VycyB1c2UgYGhvdXJDeWNsZWAsIElFIGFuZCBDaHJvbWUgPDczIGRvZXMgbm90IHN1cHBvcnQgaXQgYW5kIHVzZXMgYGhvdXIxMmBcbiAgICB2YXIgdGVzdERhdGVGb3JtYXR0ZWQgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCgnZW4tVVMnLCB7XG4gICAgICBob3VyMTI6IGZhbHNlLFxuICAgICAgdGltZVpvbmU6ICdBbWVyaWNhL05ld19Zb3JrJyxcbiAgICAgIHllYXI6ICdudW1lcmljJyxcbiAgICAgIG1vbnRoOiAnMi1kaWdpdCcsXG4gICAgICBkYXk6ICcyLWRpZ2l0JyxcbiAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgc2Vjb25kOiAnMi1kaWdpdCdcbiAgICB9KS5mb3JtYXQobmV3IERhdGUoJzIwMTQtMDYtMjVUMDQ6MDA6MDAuMTIzWicpKVxuICAgIHZhciBob3VyQ3ljbGVTdXBwb3J0ZWQgPVxuICAgICAgdGVzdERhdGVGb3JtYXR0ZWQgPT09ICcwNi8yNS8yMDE0LCAwMDowMDowMCcgfHxcbiAgICAgIHRlc3REYXRlRm9ybWF0dGVkID09PSAn4oCOMDbigI4v4oCOMjXigI4v4oCOMjAxNOKAjiDigI4wMOKAjjrigI4wMOKAjjrigI4wMCdcblxuICAgIGR0ZkNhY2hlW3RpbWVab25lXSA9IGhvdXJDeWNsZVN1cHBvcnRlZFxuICAgICAgPyBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCgnZW4tVVMnLCB7XG4gICAgICAgICAgaG91cjEyOiBmYWxzZSxcbiAgICAgICAgICB0aW1lWm9uZTogdGltZVpvbmUsXG4gICAgICAgICAgeWVhcjogJ251bWVyaWMnLFxuICAgICAgICAgIG1vbnRoOiAnMi1kaWdpdCcsXG4gICAgICAgICAgZGF5OiAnMi1kaWdpdCcsXG4gICAgICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgICAgIHNlY29uZDogJzItZGlnaXQnXG4gICAgICAgIH0pXG4gICAgICA6IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCdlbi1VUycsIHtcbiAgICAgICAgICBob3VyQ3ljbGU6ICdoMjMnLFxuICAgICAgICAgIHRpbWVab25lOiB0aW1lWm9uZSxcbiAgICAgICAgICB5ZWFyOiAnbnVtZXJpYycsXG4gICAgICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBkYXk6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICAgICAgc2Vjb25kOiAnMi1kaWdpdCdcbiAgICAgICAgfSlcbiAgfVxuICByZXR1cm4gZHRmQ2FjaGVbdGltZVpvbmVdXG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMtdHovZXNtL19saWIvdHpUb2tlbml6ZURhdGUvaW5kZXguanMiLCJpbXBvcnQgdG9JbnRlZ2VyIGZyb20gJy4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzJztcbmltcG9ydCBhZGRNaWxsaXNlY29uZHMgZnJvbSAnLi4vYWRkTWlsbGlzZWNvbmRzL2luZGV4LmpzJztcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSAnLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanMnO1xuLyoqXG4gKiBAbmFtZSBzdWJNaWxsaXNlY29uZHNcbiAqIEBjYXRlZ29yeSBNaWxsaXNlY29uZCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byBiZSBzdWJ0cmFjdGVkLiBQb3NpdGl2ZSBkZWNpbWFscyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguZmxvb3JgLCBkZWNpbWFscyBsZXNzIHRoYW4gemVybyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguY2VpbGAuXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIG1pbGxpc2Vjb25kcyBzdWJ0cmFjdGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN1YnRyYWN0IDc1MCBtaWxsaXNlY29uZHMgZnJvbSAxMCBKdWx5IDIwMTQgMTI6NDU6MzAuMDAwOlxuICogdmFyIHJlc3VsdCA9IHN1Yk1pbGxpc2Vjb25kcyhuZXcgRGF0ZSgyMDE0LCA2LCAxMCwgMTIsIDQ1LCAzMCwgMCksIDc1MClcbiAqIC8vPT4gVGh1IEp1bCAxMCAyMDE0IDEyOjQ1OjI5LjI1MFxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN1Yk1pbGxpc2Vjb25kcyhkaXJ0eURhdGUsIGRpcnR5QW1vdW50KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgYW1vdW50ID0gdG9JbnRlZ2VyKGRpcnR5QW1vdW50KTtcbiAgcmV0dXJuIGFkZE1pbGxpc2Vjb25kcyhkaXJ0eURhdGUsIC1hbW91bnQpO1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vc3ViTWlsbGlzZWNvbmRzL2luZGV4LmpzIiwiaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qcyc7XG5pbXBvcnQgdG9EYXRlIGZyb20gJy4uL3RvRGF0ZS9pbmRleC5qcyc7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gJy4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzJztcbi8qKlxuICogQG5hbWUgYWRkTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogIyMjIHYyLjAuMCBicmVha2luZyBjaGFuZ2VzOlxuICpcbiAqIC0gW0NoYW5nZXMgdGhhdCBhcmUgY29tbW9uIGZvciB0aGUgd2hvbGUgbGlicmFyeV0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdXBncmFkZUd1aWRlLm1kI0NvbW1vbi1DaGFuZ2VzKS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIGFkZGVkLiBQb3NpdGl2ZSBkZWNpbWFscyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguZmxvb3JgLCBkZWNpbWFscyBsZXNzIHRoYW4gemVybyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguY2VpbGAuXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIG1pbGxpc2Vjb25kcyBhZGRlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBZGQgNzUwIG1pbGxpc2Vjb25kcyB0byAxMCBKdWx5IDIwMTQgMTI6NDU6MzAuMDAwOlxuICogdmFyIHJlc3VsdCA9IGFkZE1pbGxpc2Vjb25kcyhuZXcgRGF0ZSgyMDE0LCA2LCAxMCwgMTIsIDQ1LCAzMCwgMCksIDc1MClcbiAqIC8vPT4gVGh1IEp1bCAxMCAyMDE0IDEyOjQ1OjMwLjc1MFxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZE1pbGxpc2Vjb25kcyhkaXJ0eURhdGUsIGRpcnR5QW1vdW50KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgdGltZXN0YW1wID0gdG9EYXRlKGRpcnR5RGF0ZSkuZ2V0VGltZSgpO1xuICB2YXIgYW1vdW50ID0gdG9JbnRlZ2VyKGRpcnR5QW1vdW50KTtcbiAgcmV0dXJuIG5ldyBEYXRlKHRpbWVzdGFtcCArIGFtb3VudCk7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9hZGRNaWxsaXNlY29uZHMvaW5kZXguanMiLCJpbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gJy4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzJztcbi8qKlxuICogQG5hbWUgdG9EYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdHMgY2xvbmUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCBpdCBpcyB0cmVhdGVkIGFzIGEgdGltZXN0YW1wLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBub25lIG9mIHRoZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqICoqTm90ZSoqOiAqYWxsKiBEYXRlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYW55ICpkYXRlLWZucyogZnVuY3Rpb24gaXMgcHJvY2Vzc2VkIGJ5IGB0b0RhdGVgLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGFyZ3VtZW50IC0gdGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgcGFyc2VkIGRhdGUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENsb25lIHRoZSBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKG5ldyBEYXRlKDIwMTQsIDEsIDExLCAxMSwgMzAsIDMwKSlcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgdGhlIHRpbWVzdGFtcCB0byBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKDEzOTIwOTg0MzAwMDApXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvRGF0ZShhcmd1bWVudCkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGFyZ1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudCk7IC8vIENsb25lIHRoZSBkYXRlXG5cbiAgaWYgKGFyZ3VtZW50IGluc3RhbmNlb2YgRGF0ZSB8fCB0eXBlb2YgYXJndW1lbnQgPT09ICdvYmplY3QnICYmIGFyZ1N0ciA9PT0gJ1tvYmplY3QgRGF0ZV0nKSB7XG4gICAgLy8gUHJldmVudCB0aGUgZGF0ZSB0byBsb3NlIHRoZSBtaWxsaXNlY29uZHMgd2hlbiBwYXNzZWQgdG8gbmV3IERhdGUoKSBpbiBJRTEwXG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50LmdldFRpbWUoKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnbnVtYmVyJyB8fCBhcmdTdHIgPT09ICdbb2JqZWN0IE51bWJlcl0nKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycgfHwgYXJnU3RyID09PSAnW29iamVjdCBTdHJpbmddJykgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFwiU3RhcnRpbmcgd2l0aCB2Mi4wLjAtYmV0YS4xIGRhdGUtZm5zIGRvZXNuJ3QgYWNjZXB0IHN0cmluZ3MgYXMgYXJndW1lbnRzLiBQbGVhc2UgdXNlIGBwYXJzZUlTT2AgdG8gcGFyc2Ugc3RyaW5ncy4gU2VlOiBodHRwczovL2dpdC5pby9manVsZVwiKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcblxuICAgICAgY29uc29sZS53YXJuKG5ldyBFcnJvcigpLnN0YWNrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgfVxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vdG9EYXRlL2luZGV4LmpzIiwiaW1wb3J0IHRvSW50ZWdlciBmcm9tICdkYXRlLWZucy9lc20vX2xpYi90b0ludGVnZXIvaW5kZXguanMnXG5pbXBvcnQgZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyBmcm9tICdkYXRlLWZucy9lc20vX2xpYi9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzL2luZGV4LmpzJ1xuaW1wb3J0IHR6UGFyc2VUaW1lem9uZSBmcm9tICcuLi9fbGliL3R6UGFyc2VUaW1lem9uZSdcblxudmFyIE1JTExJU0VDT05EU19JTl9IT1VSID0gMzYwMDAwMFxudmFyIE1JTExJU0VDT05EU19JTl9NSU5VVEUgPSA2MDAwMFxudmFyIERFRkFVTFRfQURESVRJT05BTF9ESUdJVFMgPSAyXG5cbnZhciBwYXR0ZXJucyA9IHtcbiAgZGF0ZVRpbWVEZWxpbWV0ZXI6IC9bVCBdLyxcbiAgcGxhaW5UaW1lOiAvOi8sXG4gIHRpbWVab25lRGVsaW1ldGVyOiAvW1ogXS9pLFxuXG4gIC8vIHllYXIgdG9rZW5zXG4gIFlZOiAvXihcXGR7Mn0pJC8sXG4gIFlZWTogW1xuICAgIC9eKFsrLV1cXGR7Mn0pJC8sIC8vIDAgYWRkaXRpb25hbCBkaWdpdHNcbiAgICAvXihbKy1dXFxkezN9KSQvLCAvLyAxIGFkZGl0aW9uYWwgZGlnaXRcbiAgICAvXihbKy1dXFxkezR9KSQvIC8vIDIgYWRkaXRpb25hbCBkaWdpdHNcbiAgXSxcbiAgWVlZWTogL14oXFxkezR9KS8sXG4gIFlZWVlZOiBbXG4gICAgL14oWystXVxcZHs0fSkvLCAvLyAwIGFkZGl0aW9uYWwgZGlnaXRzXG4gICAgL14oWystXVxcZHs1fSkvLCAvLyAxIGFkZGl0aW9uYWwgZGlnaXRcbiAgICAvXihbKy1dXFxkezZ9KS8gLy8gMiBhZGRpdGlvbmFsIGRpZ2l0c1xuICBdLFxuXG4gIC8vIGRhdGUgdG9rZW5zXG4gIE1NOiAvXi0oXFxkezJ9KSQvLFxuICBEREQ6IC9eLT8oXFxkezN9KSQvLFxuICBNTUREOiAvXi0/KFxcZHsyfSktPyhcXGR7Mn0pJC8sXG4gIFd3dzogL14tP1coXFxkezJ9KSQvLFxuICBXd3dEOiAvXi0/VyhcXGR7Mn0pLT8oXFxkezF9KSQvLFxuXG4gIEhIOiAvXihcXGR7Mn0oWy4sXVxcZCopPykkLyxcbiAgSEhNTTogL14oXFxkezJ9KTo/KFxcZHsyfShbLixdXFxkKik/KSQvLFxuICBISE1NU1M6IC9eKFxcZHsyfSk6PyhcXGR7Mn0pOj8oXFxkezJ9KFsuLF1cXGQqKT8pJC8sXG5cbiAgLy8gdGltZXpvbmUgdG9rZW5zICh0byBpZGVudGlmeSB0aGUgcHJlc2VuY2Ugb2YgYSB0eilcbiAgdGltZXpvbmU6IC8oW1orLV0uKnwgVVRDfCg/OlthLXpBLVpdK1xcL1thLXpBLVpfXSsoPzpcXC9bYS16QS1aX10rKT8pKSQvXG59XG5cbi8qKlxuICogQG5hbWUgdG9EYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdHMgY2xvbmUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCBpdCBpcyB0cmVhdGVkIGFzIGEgdGltZXN0YW1wLlxuICpcbiAqIElmIGFuIGFyZ3VtZW50IGlzIGEgc3RyaW5nLCB0aGUgZnVuY3Rpb24gdHJpZXMgdG8gcGFyc2UgaXQuXG4gKiBGdW5jdGlvbiBhY2NlcHRzIGNvbXBsZXRlIElTTyA4NjAxIGZvcm1hdHMgYXMgd2VsbCBhcyBwYXJ0aWFsIGltcGxlbWVudGF0aW9ucy5cbiAqIElTTyA4NjAxOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxXG4gKiBJZiB0aGUgZnVuY3Rpb24gY2Fubm90IHBhcnNlIHRoZSBzdHJpbmcgb3IgdGhlIHZhbHVlcyBhcmUgaW52YWxpZCwgaXQgcmV0dXJucyBJbnZhbGlkIERhdGUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIG5vbmUgb2YgdGhlIGFib3ZlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBJbnZhbGlkIERhdGUuXG4gKlxuICogKipOb3RlKio6ICphbGwqIERhdGUgYXJndW1lbnRzIHBhc3NlZCB0byBhbnkgKmRhdGUtZm5zKiBmdW5jdGlvbiBpcyBwcm9jZXNzZWQgYnkgYHRvRGF0ZWAuXG4gKiBBbGwgKmRhdGUtZm5zKiBmdW5jdGlvbnMgd2lsbCB0aHJvdyBgUmFuZ2VFcnJvcmAgaWYgYG9wdGlvbnMuYWRkaXRpb25hbERpZ2l0c2AgaXMgbm90IDAsIDEsIDIgb3IgdW5kZWZpbmVkLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxTdHJpbmd8TnVtYmVyfSBhcmd1bWVudCAtIHRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKiBAcGFyYW0ge09wdGlvbnNXaXRoVFp9IFtvcHRpb25zXSAtIHRoZSBvYmplY3Qgd2l0aCBvcHRpb25zLiBTZWUgW09wdGlvbnNde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvT3B0aW9uc31cbiAqIEBwYXJhbSB7MHwxfDJ9IFtvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHM9Ml0gLSB0aGUgYWRkaXRpb25hbCBudW1iZXIgb2YgZGlnaXRzIGluIHRoZSBleHRlbmRlZCB5ZWFyIGZvcm1hdFxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnRpbWVab25lPScnXSAtIHVzZWQgdG8gc3BlY2lmeSB0aGUgSUFOQSB0aW1lIHpvbmUgb2Zmc2V0IG9mIGEgZGF0ZSBTdHJpbmcuXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHBhcnNlZCBkYXRlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMuYWRkaXRpb25hbERpZ2l0c2AgbXVzdCBiZSAwLCAxIG9yIDJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCBzdHJpbmcgJzIwMTQtMDItMTFUMTE6MzA6MzAnIHRvIGRhdGU6XG4gKiB2YXIgcmVzdWx0ID0gdG9EYXRlKCcyMDE0LTAyLTExVDExOjMwOjMwJylcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgc3RyaW5nICcrMDIwMTQxMDEnIHRvIGRhdGUsXG4gKiAvLyBpZiB0aGUgYWRkaXRpb25hbCBudW1iZXIgb2YgZGlnaXRzIGluIHRoZSBleHRlbmRlZCB5ZWFyIGZvcm1hdCBpcyAxOlxuICogdmFyIHJlc3VsdCA9IHRvRGF0ZSgnKzAyMDE0MTAxJywge2FkZGl0aW9uYWxEaWdpdHM6IDF9KVxuICogLy89PiBGcmkgQXByIDExIDIwMTQgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9EYXRlKGFyZ3VtZW50LCBkaXJ0eU9wdGlvbnMpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICcxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSAnICsgYXJndW1lbnRzLmxlbmd0aCArICcgcHJlc2VudCdcbiAgICApXG4gIH1cblxuICBpZiAoYXJndW1lbnQgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICB9XG5cbiAgdmFyIG9wdGlvbnMgPSBkaXJ0eU9wdGlvbnMgfHwge31cblxuICB2YXIgYWRkaXRpb25hbERpZ2l0cyA9XG4gICAgb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzID09IG51bGxcbiAgICAgID8gREVGQVVMVF9BRERJVElPTkFMX0RJR0lUU1xuICAgICAgOiB0b0ludGVnZXIob3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzKVxuICBpZiAoXG4gICAgYWRkaXRpb25hbERpZ2l0cyAhPT0gMiAmJlxuICAgIGFkZGl0aW9uYWxEaWdpdHMgIT09IDEgJiZcbiAgICBhZGRpdGlvbmFsRGlnaXRzICE9PSAwXG4gICkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdhZGRpdGlvbmFsRGlnaXRzIG11c3QgYmUgMCwgMSBvciAyJylcbiAgfVxuXG4gIC8vIENsb25lIHRoZSBkYXRlXG4gIGlmIChcbiAgICBhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAodHlwZW9mIGFyZ3VtZW50ID09PSAnb2JqZWN0JyAmJlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50KSA9PT0gJ1tvYmplY3QgRGF0ZV0nKVxuICApIHtcbiAgICAvLyBQcmV2ZW50IHRoZSBkYXRlIHRvIGxvc2UgdGhlIG1pbGxpc2Vjb25kcyB3aGVuIHBhc3NlZCB0byBuZXcgRGF0ZSgpIGluIElFMTBcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQuZ2V0VGltZSgpKVxuICB9IGVsc2UgaWYgKFxuICAgIHR5cGVvZiBhcmd1bWVudCA9PT0gJ251bWJlcicgfHxcbiAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpID09PSAnW29iamVjdCBOdW1iZXJdJ1xuICApIHtcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQpXG4gIH0gZWxzZSBpZiAoXG4gICAgIShcbiAgICAgIHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycgfHxcbiAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudCkgPT09ICdbb2JqZWN0IFN0cmluZ10nXG4gICAgKVxuICApIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICB9XG5cbiAgdmFyIGRhdGVTdHJpbmdzID0gc3BsaXREYXRlU3RyaW5nKGFyZ3VtZW50KVxuXG4gIHZhciBwYXJzZVllYXJSZXN1bHQgPSBwYXJzZVllYXIoZGF0ZVN0cmluZ3MuZGF0ZSwgYWRkaXRpb25hbERpZ2l0cylcbiAgdmFyIHllYXIgPSBwYXJzZVllYXJSZXN1bHQueWVhclxuICB2YXIgcmVzdERhdGVTdHJpbmcgPSBwYXJzZVllYXJSZXN1bHQucmVzdERhdGVTdHJpbmdcblxuICB2YXIgZGF0ZSA9IHBhcnNlRGF0ZShyZXN0RGF0ZVN0cmluZywgeWVhcilcblxuICBpZiAoaXNOYU4oZGF0ZSkpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICB9XG5cbiAgaWYgKGRhdGUpIHtcbiAgICB2YXIgdGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKClcbiAgICB2YXIgdGltZSA9IDBcbiAgICB2YXIgb2Zmc2V0XG5cbiAgICBpZiAoZGF0ZVN0cmluZ3MudGltZSkge1xuICAgICAgdGltZSA9IHBhcnNlVGltZShkYXRlU3RyaW5ncy50aW1lKVxuXG4gICAgICBpZiAoaXNOYU4odGltZSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGF0ZVN0cmluZ3MudGltZXpvbmUgfHwgb3B0aW9ucy50aW1lWm9uZSkge1xuICAgICAgb2Zmc2V0ID0gdHpQYXJzZVRpbWV6b25lKFxuICAgICAgICBkYXRlU3RyaW5ncy50aW1lem9uZSB8fCBvcHRpb25zLnRpbWVab25lLFxuICAgICAgICBuZXcgRGF0ZSh0aW1lc3RhbXAgKyB0aW1lKVxuICAgICAgKVxuICAgICAgaWYgKGlzTmFOKG9mZnNldCkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZ2V0IG9mZnNldCBhY2N1cmF0ZSB0byBob3VyIGluIHRpbWV6b25lcyB0aGF0IGNoYW5nZSBvZmZzZXRcbiAgICAgIG9mZnNldCA9IGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMobmV3IERhdGUodGltZXN0YW1wICsgdGltZSkpXG4gICAgICBvZmZzZXQgPSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKFxuICAgICAgICBuZXcgRGF0ZSh0aW1lc3RhbXAgKyB0aW1lICsgb2Zmc2V0KVxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgRGF0ZSh0aW1lc3RhbXAgKyB0aW1lICsgb2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gIH1cbn1cblxuZnVuY3Rpb24gc3BsaXREYXRlU3RyaW5nKGRhdGVTdHJpbmcpIHtcbiAgdmFyIGRhdGVTdHJpbmdzID0ge31cbiAgdmFyIGFycmF5ID0gZGF0ZVN0cmluZy5zcGxpdChwYXR0ZXJucy5kYXRlVGltZURlbGltZXRlcilcbiAgdmFyIHRpbWVTdHJpbmdcblxuICBpZiAocGF0dGVybnMucGxhaW5UaW1lLnRlc3QoYXJyYXlbMF0pKSB7XG4gICAgZGF0ZVN0cmluZ3MuZGF0ZSA9IG51bGxcbiAgICB0aW1lU3RyaW5nID0gYXJyYXlbMF1cbiAgfSBlbHNlIHtcbiAgICBkYXRlU3RyaW5ncy5kYXRlID0gYXJyYXlbMF1cbiAgICB0aW1lU3RyaW5nID0gYXJyYXlbMV1cbiAgICBkYXRlU3RyaW5ncy50aW1lem9uZSA9IGFycmF5WzJdXG4gICAgaWYgKHBhdHRlcm5zLnRpbWVab25lRGVsaW1ldGVyLnRlc3QoZGF0ZVN0cmluZ3MuZGF0ZSkpIHtcbiAgICAgIGRhdGVTdHJpbmdzLmRhdGUgPSBkYXRlU3RyaW5nLnNwbGl0KHBhdHRlcm5zLnRpbWVab25lRGVsaW1ldGVyKVswXVxuICAgICAgdGltZVN0cmluZyA9IGRhdGVTdHJpbmcuc3Vic3RyKGRhdGVTdHJpbmdzLmRhdGUubGVuZ3RoLCBkYXRlU3RyaW5nLmxlbmd0aClcbiAgICB9XG4gIH1cblxuICBpZiAodGltZVN0cmluZykge1xuICAgIHZhciB0b2tlbiA9IHBhdHRlcm5zLnRpbWV6b25lLmV4ZWModGltZVN0cmluZylcbiAgICBpZiAodG9rZW4pIHtcbiAgICAgIGRhdGVTdHJpbmdzLnRpbWUgPSB0aW1lU3RyaW5nLnJlcGxhY2UodG9rZW5bMV0sICcnKVxuICAgICAgZGF0ZVN0cmluZ3MudGltZXpvbmUgPSB0b2tlblsxXVxuICAgIH0gZWxzZSB7XG4gICAgICBkYXRlU3RyaW5ncy50aW1lID0gdGltZVN0cmluZ1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkYXRlU3RyaW5nc1xufVxuXG5mdW5jdGlvbiBwYXJzZVllYXIoZGF0ZVN0cmluZywgYWRkaXRpb25hbERpZ2l0cykge1xuICB2YXIgcGF0dGVybllZWSA9IHBhdHRlcm5zLllZWVthZGRpdGlvbmFsRGlnaXRzXVxuICB2YXIgcGF0dGVybllZWVlZID0gcGF0dGVybnMuWVlZWVlbYWRkaXRpb25hbERpZ2l0c11cblxuICB2YXIgdG9rZW5cblxuICAvLyBZWVlZIG9yIMKxWVlZWVlcbiAgdG9rZW4gPSBwYXR0ZXJucy5ZWVlZLmV4ZWMoZGF0ZVN0cmluZykgfHwgcGF0dGVybllZWVlZLmV4ZWMoZGF0ZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgdmFyIHllYXJTdHJpbmcgPSB0b2tlblsxXVxuICAgIHJldHVybiB7XG4gICAgICB5ZWFyOiBwYXJzZUludCh5ZWFyU3RyaW5nLCAxMCksXG4gICAgICByZXN0RGF0ZVN0cmluZzogZGF0ZVN0cmluZy5zbGljZSh5ZWFyU3RyaW5nLmxlbmd0aClcbiAgICB9XG4gIH1cblxuICAvLyBZWSBvciDCsVlZWVxuICB0b2tlbiA9IHBhdHRlcm5zLllZLmV4ZWMoZGF0ZVN0cmluZykgfHwgcGF0dGVybllZWS5leGVjKGRhdGVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIHZhciBjZW50dXJ5U3RyaW5nID0gdG9rZW5bMV1cbiAgICByZXR1cm4ge1xuICAgICAgeWVhcjogcGFyc2VJbnQoY2VudHVyeVN0cmluZywgMTApICogMTAwLFxuICAgICAgcmVzdERhdGVTdHJpbmc6IGRhdGVTdHJpbmcuc2xpY2UoY2VudHVyeVN0cmluZy5sZW5ndGgpXG4gICAgfVxuICB9XG5cbiAgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHllYXJcbiAgcmV0dXJuIHtcbiAgICB5ZWFyOiBudWxsXG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VEYXRlKGRhdGVTdHJpbmcsIHllYXIpIHtcbiAgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHllYXJcbiAgaWYgKHllYXIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgdmFyIHRva2VuXG4gIHZhciBkYXRlXG4gIHZhciBtb250aFxuICB2YXIgd2Vla1xuXG4gIC8vIFlZWVlcbiAgaWYgKGRhdGVTdHJpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgZGF0ZSA9IG5ldyBEYXRlKDApXG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5ZWFyKVxuICAgIHJldHVybiBkYXRlXG4gIH1cblxuICAvLyBZWVlZLU1NXG4gIHRva2VuID0gcGF0dGVybnMuTU0uZXhlYyhkYXRlU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBkYXRlID0gbmV3IERhdGUoMClcbiAgICBtb250aCA9IHBhcnNlSW50KHRva2VuWzFdLCAxMCkgLSAxXG5cbiAgICBpZiAoIXZhbGlkYXRlRGF0ZSh5ZWFyLCBtb250aCkpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgfVxuXG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5ZWFyLCBtb250aClcbiAgICByZXR1cm4gZGF0ZVxuICB9XG5cbiAgLy8gWVlZWS1EREQgb3IgWVlZWURERFxuICB0b2tlbiA9IHBhdHRlcm5zLkRERC5leGVjKGRhdGVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGRhdGUgPSBuZXcgRGF0ZSgwKVxuICAgIHZhciBkYXlPZlllYXIgPSBwYXJzZUludCh0b2tlblsxXSwgMTApXG5cbiAgICBpZiAoIXZhbGlkYXRlRGF5T2ZZZWFyRGF0ZSh5ZWFyLCBkYXlPZlllYXIpKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICAgIH1cblxuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZGF5T2ZZZWFyKVxuICAgIHJldHVybiBkYXRlXG4gIH1cblxuICAvLyB5eXl5LU1NLWRkIG9yIFlZWVlNTUREXG4gIHRva2VuID0gcGF0dGVybnMuTU1ERC5leGVjKGRhdGVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGRhdGUgPSBuZXcgRGF0ZSgwKVxuICAgIG1vbnRoID0gcGFyc2VJbnQodG9rZW5bMV0sIDEwKSAtIDFcbiAgICB2YXIgZGF5ID0gcGFyc2VJbnQodG9rZW5bMl0sIDEwKVxuXG4gICAgaWYgKCF2YWxpZGF0ZURhdGUoeWVhciwgbW9udGgsIGRheSkpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgfVxuXG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5ZWFyLCBtb250aCwgZGF5KVxuICAgIHJldHVybiBkYXRlXG4gIH1cblxuICAvLyBZWVlZLVd3dyBvciBZWVlZV3d3XG4gIHRva2VuID0gcGF0dGVybnMuV3d3LmV4ZWMoZGF0ZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgd2VlayA9IHBhcnNlSW50KHRva2VuWzFdLCAxMCkgLSAxXG5cbiAgICBpZiAoIXZhbGlkYXRlV2Vla0RhdGUoeWVhciwgd2VlaykpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgfVxuXG4gICAgcmV0dXJuIGRheU9mSVNPV2Vla1llYXIoeWVhciwgd2VlaylcbiAgfVxuXG4gIC8vIFlZWVktV3d3LUQgb3IgWVlZWVd3d0RcbiAgdG9rZW4gPSBwYXR0ZXJucy5Xd3dELmV4ZWMoZGF0ZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgd2VlayA9IHBhcnNlSW50KHRva2VuWzFdLCAxMCkgLSAxXG4gICAgdmFyIGRheU9mV2VlayA9IHBhcnNlSW50KHRva2VuWzJdLCAxMCkgLSAxXG5cbiAgICBpZiAoIXZhbGlkYXRlV2Vla0RhdGUoeWVhciwgd2VlaywgZGF5T2ZXZWVrKSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgICB9XG5cbiAgICByZXR1cm4gZGF5T2ZJU09XZWVrWWVhcih5ZWFyLCB3ZWVrLCBkYXlPZldlZWspXG4gIH1cblxuICAvLyBJbnZhbGlkIElTTy1mb3JtYXR0ZWQgZGF0ZVxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBwYXJzZVRpbWUodGltZVN0cmluZykge1xuICB2YXIgdG9rZW5cbiAgdmFyIGhvdXJzXG4gIHZhciBtaW51dGVzXG5cbiAgLy8gaGhcbiAgdG9rZW4gPSBwYXR0ZXJucy5ISC5leGVjKHRpbWVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGhvdXJzID0gcGFyc2VGbG9hdCh0b2tlblsxXS5yZXBsYWNlKCcsJywgJy4nKSlcblxuICAgIGlmICghdmFsaWRhdGVUaW1lKGhvdXJzKSkge1xuICAgICAgcmV0dXJuIE5hTlxuICAgIH1cblxuICAgIHJldHVybiAoaG91cnMgJSAyNCkgKiBNSUxMSVNFQ09ORFNfSU5fSE9VUlxuICB9XG5cbiAgLy8gaGg6bW0gb3IgaGhtbVxuICB0b2tlbiA9IHBhdHRlcm5zLkhITU0uZXhlYyh0aW1lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBob3VycyA9IHBhcnNlSW50KHRva2VuWzFdLCAxMClcbiAgICBtaW51dGVzID0gcGFyc2VGbG9hdCh0b2tlblsyXS5yZXBsYWNlKCcsJywgJy4nKSlcblxuICAgIGlmICghdmFsaWRhdGVUaW1lKGhvdXJzLCBtaW51dGVzKSkge1xuICAgICAgcmV0dXJuIE5hTlxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAoaG91cnMgJSAyNCkgKiBNSUxMSVNFQ09ORFNfSU5fSE9VUiArIG1pbnV0ZXMgKiBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFXG4gICAgKVxuICB9XG5cbiAgLy8gaGg6bW06c3Mgb3IgaGhtbXNzXG4gIHRva2VuID0gcGF0dGVybnMuSEhNTVNTLmV4ZWModGltZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgaG91cnMgPSBwYXJzZUludCh0b2tlblsxXSwgMTApXG4gICAgbWludXRlcyA9IHBhcnNlSW50KHRva2VuWzJdLCAxMClcbiAgICB2YXIgc2Vjb25kcyA9IHBhcnNlRmxvYXQodG9rZW5bM10ucmVwbGFjZSgnLCcsICcuJykpXG5cbiAgICBpZiAoIXZhbGlkYXRlVGltZShob3VycywgbWludXRlcywgc2Vjb25kcykpIHtcbiAgICAgIHJldHVybiBOYU5cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgKGhvdXJzICUgMjQpICogTUlMTElTRUNPTkRTX0lOX0hPVVIgK1xuICAgICAgbWludXRlcyAqIE1JTExJU0VDT05EU19JTl9NSU5VVEUgK1xuICAgICAgc2Vjb25kcyAqIDEwMDBcbiAgICApXG4gIH1cblxuICAvLyBJbnZhbGlkIElTTy1mb3JtYXR0ZWQgdGltZVxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBkYXlPZklTT1dlZWtZZWFyKGlzb1dlZWtZZWFyLCB3ZWVrLCBkYXkpIHtcbiAgd2VlayA9IHdlZWsgfHwgMFxuICBkYXkgPSBkYXkgfHwgMFxuICB2YXIgZGF0ZSA9IG5ldyBEYXRlKDApXG4gIGRhdGUuc2V0VVRDRnVsbFllYXIoaXNvV2Vla1llYXIsIDAsIDQpXG4gIHZhciBmb3VydGhPZkphbnVhcnlEYXkgPSBkYXRlLmdldFVUQ0RheSgpIHx8IDdcbiAgdmFyIGRpZmYgPSB3ZWVrICogNyArIGRheSArIDEgLSBmb3VydGhPZkphbnVhcnlEYXlcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpICsgZGlmZilcbiAgcmV0dXJuIGRhdGVcbn1cblxuLy8gVmFsaWRhdGlvbiBmdW5jdGlvbnNcblxudmFyIERBWVNfSU5fTU9OVEggPSBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV1cbnZhciBEQVlTX0lOX01PTlRIX0xFQVBfWUVBUiA9IFszMSwgMjksIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXVxuXG5mdW5jdGlvbiBpc0xlYXBZZWFySW5kZXgoeWVhcikge1xuICByZXR1cm4geWVhciAlIDQwMCA9PT0gMCB8fCAoeWVhciAlIDQgPT09IDAgJiYgeWVhciAlIDEwMCAhPT0gMClcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVEYXRlKHllYXIsIG1vbnRoLCBkYXRlKSB7XG4gIGlmIChtb250aCA8IDAgfHwgbW9udGggPiAxMSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKGRhdGUgIT0gbnVsbCkge1xuICAgIGlmIChkYXRlIDwgMSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgdmFyIGlzTGVhcFllYXIgPSBpc0xlYXBZZWFySW5kZXgoeWVhcilcbiAgICBpZiAoaXNMZWFwWWVhciAmJiBkYXRlID4gREFZU19JTl9NT05USF9MRUFQX1lFQVJbbW9udGhdKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgaWYgKCFpc0xlYXBZZWFyICYmIGRhdGUgPiBEQVlTX0lOX01PTlRIW21vbnRoXSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVEYXlPZlllYXJEYXRlKHllYXIsIGRheU9mWWVhcikge1xuICBpZiAoZGF5T2ZZZWFyIDwgMSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdmFyIGlzTGVhcFllYXIgPSBpc0xlYXBZZWFySW5kZXgoeWVhcilcbiAgaWYgKGlzTGVhcFllYXIgJiYgZGF5T2ZZZWFyID4gMzY2KSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgaWYgKCFpc0xlYXBZZWFyICYmIGRheU9mWWVhciA+IDM2NSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVXZWVrRGF0ZSh5ZWFyLCB3ZWVrLCBkYXkpIHtcbiAgaWYgKHdlZWsgPCAwIHx8IHdlZWsgPiA1Mikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKGRheSAhPSBudWxsICYmIChkYXkgPCAwIHx8IGRheSA+IDYpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVRpbWUoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpIHtcbiAgaWYgKGhvdXJzICE9IG51bGwgJiYgKGhvdXJzIDwgMCB8fCBob3VycyA+PSAyNSkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChtaW51dGVzICE9IG51bGwgJiYgKG1pbnV0ZXMgPCAwIHx8IG1pbnV0ZXMgPj0gNjApKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAoc2Vjb25kcyAhPSBudWxsICYmIChzZWNvbmRzIDwgMCB8fCBzZWNvbmRzID49IDYwKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9kYXRlLWZucy10ei9lc20vdG9EYXRlL2luZGV4LmpzIiwidmFyIE1JTExJU0VDT05EU19JTl9NSU5VVEUgPSA2MDAwMDtcblxuZnVuY3Rpb24gZ2V0RGF0ZU1pbGxpc2Vjb25kc1BhcnQoZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRUaW1lKCkgJSBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFO1xufVxuLyoqXG4gKiBHb29nbGUgQ2hyb21lIGFzIG9mIDY3LjAuMzM5Ni44NyBpbnRyb2R1Y2VkIHRpbWV6b25lcyB3aXRoIG9mZnNldCB0aGF0IGluY2x1ZGVzIHNlY29uZHMuXG4gKiBUaGV5IHVzdWFsbHkgYXBwZWFyIGZvciBkYXRlcyB0aGF0IGRlbm90ZSB0aW1lIGJlZm9yZSB0aGUgdGltZXpvbmVzIHdlcmUgaW50cm9kdWNlZFxuICogKGUuZy4gZm9yICdFdXJvcGUvUHJhZ3VlJyB0aW1lem9uZSB0aGUgb2Zmc2V0IGlzIEdNVCswMDo1Nzo0NCBiZWZvcmUgMSBPY3RvYmVyIDE4OTFcbiAqIGFuZCBHTVQrMDE6MDA6MDAgYWZ0ZXIgdGhhdCBkYXRlKVxuICpcbiAqIERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgYW5kIHdvdWxkIHJldHVybiA1NyBmb3IgdGhlIGV4YW1wbGUgYWJvdmUsXG4gKiB3aGljaCB3b3VsZCBsZWFkIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lem9uZSBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzIHRoYXQgdGFrZXMgc2Vjb25kcyBpbiBhY2NvdW50LlxuICovXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhkaXJ0eURhdGUpIHtcbiAgdmFyIGRhdGUgPSBuZXcgRGF0ZShkaXJ0eURhdGUuZ2V0VGltZSgpKTtcbiAgdmFyIGJhc2VUaW1lem9uZU9mZnNldCA9IE1hdGguY2VpbChkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xuICBkYXRlLnNldFNlY29uZHMoMCwgMCk7XG4gIHZhciBoYXNOZWdhdGl2ZVVUQ09mZnNldCA9IGJhc2VUaW1lem9uZU9mZnNldCA+IDA7XG4gIHZhciBtaWxsaXNlY29uZHNQYXJ0T2ZUaW1lem9uZU9mZnNldCA9IGhhc05lZ2F0aXZlVVRDT2Zmc2V0ID8gKE1JTExJU0VDT05EU19JTl9NSU5VVEUgKyBnZXREYXRlTWlsbGlzZWNvbmRzUGFydChkYXRlKSkgJSBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFIDogZ2V0RGF0ZU1pbGxpc2Vjb25kc1BhcnQoZGF0ZSk7XG4gIHJldHVybiBiYXNlVGltZXpvbmVPZmZzZXQgKiBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFICsgbWlsbGlzZWNvbmRzUGFydE9mVGltZXpvbmVPZmZzZXQ7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgKi9cblxuLyoqXG4gKiBFdmVudHMgTWl4aW5cbiAqXG4gKiBBbGxvdyBjbGFzc2VzIHRvIGhhdmUgdGhlaXIgb3duIGV2ZW50cyBtYW5hZ2VyXG4gKlxuICogQHBhcmFtIHtDbGFzc30gc3VwZXJDbGFzc1xuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cbmNvbnN0IEV2ZW50c01peGluID0gc3VwZXJDbGFzcyA9PlxuICBjbGFzcyBleHRlbmRzIHN1cGVyQ2xhc3Mge1xuICAgIC8qKlxuICAgICAqIE9iamVjdCBvZiByZWdpc3RlcnMgaGFuZGxlcnNcbiAgICAgKlxuICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICovXG4gICAgX19oYW5kbGVycyA9IHt9XG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlciBhbiBldmVudCBoYW5kbGVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBldmVudCBuYW1lXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciBoYW5kbGVyIGZ1bmN0aW9uXG4gICAgICovXG4gICAgb24obmFtZSwgaGFuZGxlcikge1xuICAgICAgdGhpcy5fX2hhbmRsZXJzW25hbWVdID0gdGhpcy5fX2hhbmRsZXJzW25hbWVdIHx8IFtdXG4gICAgICB0aGlzLl9faGFuZGxlcnNbbmFtZV0ucHVzaChoYW5kbGVyKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbiBldmVudCBoYW5kbGVyXG4gICAgICpcbiAgICAgKiAqKk5vdGUgOioqIGlmIGhhbmRsZXIgaXMgbm90IHByb3ZpZGVkIHRoZW4gYWxsIHJlZ2lzdGVyZWQgaGFuZGxlciBmb3IgdGhlIGdpdmVuIGV2ZW50IHdpbGwgYmUgcmVtb3ZlZFxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgZXZlbnQgbmFtZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgaGFuZGxlciBmdW5jdGlvblxuICAgICAqL1xuICAgIG9mZihuYW1lLCBoYW5kbGVyKSB7XG4gICAgICB0aGlzLl9faGFuZGxlcnNbbmFtZV0gPSB0aGlzLl9faGFuZGxlcnNbbmFtZV0gfHwgW11cbiAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICBkZWxldGUgdGhpcy5fX2hhbmRsZXJzW25hbWVdXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IHJlZ2lzdGVyZWRIYW5kbGVyIGluIHRoaXMuX19oYW5kbGVycykge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuX19oYW5kbGVycy5oYXNPd25Qcm9wZXJ0eShyZWdpc3RlcmVkSGFuZGxlcikgJiZcbiAgICAgICAgICAgIHRoaXMuX19oYW5kbGVyc1tyZWdpc3RlcmVkSGFuZGxlcl0gPT09IGhhbmRsZXJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9faGFuZGxlcnNbbmFtZV1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOb3RpZnkgaGFuZGxlcnNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIGV2ZW50IG5hbWVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZXZlbnQgcGF5bG9hZFxuICAgICAqL1xuICAgIG5vdGlmeShuYW1lLCBwYXlsb2FkKSB7XG4gICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuX19oYW5kbGVyc1tuYW1lXSB8fCBbXVxuICAgICAgaGFuZGxlcnMuZm9yRWFjaChoYW5kbGVyID0+IHtcbiAgICAgICAgaGFuZGxlcihwYXlsb2FkKVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuLyoqXG4gKiBBbiBldmVudHMgbWl4aW4gZGVjb3JhdG9yXG4gKlxuICogQHBhcmFtIHtDbGFzc30gc3VwZXJDbGFzc1xuICpcbiAqIEBzZWUge0V2ZW50c01peGlufVxuICovXG5mdW5jdGlvbiB3aXRoRXZlbnRzTWl4aW4oc3VwZXJDbGFzcykge1xuICByZXR1cm4gRXZlbnRzTWl4aW4oc3VwZXJDbGFzcylcbn1cblxuZXhwb3J0IGRlZmF1bHQgRXZlbnRzTWl4aW5cbmV4cG9ydCB7IEV2ZW50c01peGluLCB3aXRoRXZlbnRzTWl4aW4gfVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0V2ZW50c01peGluL0V2ZW50c01peGluLmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgYXV0b2JpbmQsIG92ZXJyaWRlLCByZWFkb25seSB9IGZyb20gJ2NvcmUtZGVjb3JhdG9ycydcbmltcG9ydCB7IHdpdGhFdmVudHNNaXhpbiB9IGZyb20gJy4uL0V2ZW50c01peGluJ1xuaW1wb3J0IENvbXBvbmVudCBmcm9tICcuLi9Db21wb25lbnQnXG5pbXBvcnQgJy4vc3R5bGUuc2NzcydcblxuLyoqXG4gKiBEYXRlVGltZUlucHV0XG4gKlxuICogU2ltcGxlIERhdGVUaW1lSW5wdXQgY29tcG9uZW50IHdoaWNoIGludGVncmF0ZXMgdGhlIGZsYXRwaWNrclxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cbkB3aXRoRXZlbnRzTWl4aW5cbmNsYXNzIERhdGVUaW1lSW5wdXQgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogQ29uc3RhbnQgd2hpY2ggZGVzY3JpYmVzIHRoZSBldmVudCBuYW1lIHRoYXQgd2lsbCBiZSBmaXJlZCB3aGVuIGEgZGF0ZVxuICAgKiBpcyBzZWxlY3RlZCB1c2luZyB0aGUgZGF0ZSBwaWNrZXJcbiAgICpcbiAgICogQHR5cGUge1N0cmluZ31cbiAgICovXG4gIEByZWFkb25seVxuICBzdGF0aWMgT05fREFURV9DSEFOR0VEID0gJ0RhdGVUaW1lSW5wdXQuT05fREFURV9DSEFOR0VEJ1xuXG4gIC8qKlxuICAgKiBUaGUgZGF0ZSBwaWNrZXIgaW5zdGFuY2VcbiAgICpcbiAgICogQHR5cGUge0ZsYXRwaWNrckZufVxuICAgKi9cbiAgcGlja2VyID0gbnVsbFxuXG4gIC8qKlxuICAgKiBUaGUgbGFzdCBzZWxlY3RlZCBkYXRlXG4gICAqXG4gICAqIEB0eXBlIHtEYXRlfG51bGx9XG4gICAqL1xuICBzZWxlY3RlZERhdGUgPSBudWxsXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgcmVjZWl2ZWQgcGFyYW1zIHdoZW4gaW5pdCBpcyBjYWxsZWRcbiAgICpzXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBfcGFyYW1zID0ge31cblxuICAvKipcbiAgICogQ29uc3RydWN0IG5ldyBEYXRlVGltZUlucHV0XG4gICAqXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNFZGl0b3Igd2hlbiB0cnVlICwgdGhlIGlucHV0IHdpbGwgc3R5bGVkIHRvIGZpdCBhcyBhIGNlbGwgZWRpdG9yXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihpc0VkaXRvciA9IGZhbHNlKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpcy5fZ3VpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICB0aGlzLl9ndWkuY2xhc3NOYW1lID0gJ2FnLWNlbGwtZWRpdC13cmFwcGVyJ1xuICAgIHRoaXMuX2d1aS5pbm5lckhUTUwgPSAvKiBodG1sICovIGBcbiAgICA8ZGl2IGNsYXNzPVwiYWctY2VsbC1lZGl0b3IgYWctbGFiZWxlZCBhZy1sYWJlbC1hbGlnbi1sZWZ0IGFnLXRleHQtZmllbGQgYWctaW5wdXQtZmllbGRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRldGltZV9faW5wdXQgJHtcbiAgICAgICAgaXNFZGl0b3IgPyAnZGF0ZXRpbWVfX2lucHV0LS1lZGl0b3IgJyA6ICcnXG4gICAgICB9IGFnLXdyYXBwZXIgYWctaW5wdXQtd3JhcHBlciBhZy10ZXh0LWZpZWxkLWlucHV0LXdyYXBwZXJcIj5cbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJkYXRldGltZV9faW5wdXRfX2lucHV0ICR7XG4gICAgICAgICAgICBpc0VkaXRvciA/ICdhZy1jZWxsLWVkaXQtaW5wdXQgJyA6ICcnXG4gICAgICAgICAgfSBhZy1pbnB1dC1maWVsZC1pbnB1dCBhZy10ZXh0LWZpZWxkLWlucHV0XCIgdHlwZT1cInRleHRcIiBkYXRhLWlucHV0PlxuICAgICAgICAgIDxhIGNsYXNzPVwiZGF0ZXRpbWVfX2lucHV0X19jbGVhclwiIGRhdGEtY2xlYXI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImRhdGV0aW1lX19pbnB1dF9fY2xlYXJfX2ljb24gYWctaWNvbiBhZy1pY29uLWNyb3NzXCI+PC9pPlxuICAgICAgICAgIDwvYT4gICAgXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBgXG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIEBvdmVycmlkZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgaW5pdChwYXJhbXMpIHtcbiAgICB0aGlzLl9wYXJhbXMgPSBwYXJhbXNcbiAgICBjb25zdCBlbmFibGVUaW1lID0gdGhpcy5nZXRPcHRpb24oJ2RhdGVUaW1lRW5hYmxlVGltZScsIHBhcmFtcywgdHJ1ZSlcbiAgICBjb25zdCB0aW1lXzI0aHIgPSB0aGlzLmdldE9wdGlvbignZGF0ZVRpbWVFbmFibGUyNEhSJywgcGFyYW1zLCB0cnVlKVxuICAgIGNvbnN0IGVuYWJsZVNlY29uZHMgPSB0aGlzLmdldE9wdGlvbignZGF0ZVRpbWVFbmFibGVTZWNvbmRzJywgcGFyYW1zLCBmYWxzZSlcbiAgICBjb25zdCBub0NhbGVuZGFyID0gIXRoaXMuZ2V0T3B0aW9uKCdkYXRlVGltZUVuYWJsZUNhbGVuZGFyJywgcGFyYW1zLCB0cnVlKVxuXG4gICAgbGV0IGRhdGVGb3JtYXQgPSB0aGlzLmdldE9wdGlvbignZGF0ZVRpbWVNYXNrJywgcGFyYW1zKVxuXG4gICAgLy8gdHJ5IHRvIGdlbmVyYXRlIGEgZGVmYXVsdCBkYXRlIGZvcm1hdCBiYXNlZCBvbiB0aGUgb3B0aW9uc1xuICAgIGlmICghZGF0ZUZvcm1hdCkge1xuICAgICAgZGF0ZUZvcm1hdCA9IG5vQ2FsZW5kYXIgPyAnJyA6ICclWS8lTXovJUR6J1xuICAgICAgaWYgKGVuYWJsZVRpbWUpIHtcbiAgICAgICAgZGF0ZUZvcm1hdCArPSB0aW1lXzI0aHIgPyAnICVIejolbXonIDogJyAlaHo6JW16J1xuXG4gICAgICAgIGlmIChlbmFibGVTZWNvbmRzKSB7XG4gICAgICAgICAgZGF0ZUZvcm1hdCArPSAnOiVzeidcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGRhdGVGb3JtYXQgPSBkYXRlRm9ybWF0LnRyaW0oKVxuXG4gICAgLy8gaW5pdCB0aGUgZGF0ZSBwaWNrZXJcbiAgICB0aGlzLnBpY2tlciA9IGZsYXRwaWNrcih0aGlzLl9ndWksIHtcbiAgICAgIHdyYXA6IHRydWUsXG4gICAgICAvLyBhbGxvdyBlbnRlcmluZyB0aGUgZGF0ZSBtYW51YWxseSByZXF1aXJlcyBkYXRlIHBhcnNpbmcgZnJvbSBzdHJpbmdcbiAgICAgIC8vIHRoaXMgaXMgYSB0b3VnaCB0aGluZyBhbmQgcmVxdWlyZXMgbGlicyBsaWtlIG1vbWVudFxuICAgICAgYWxsb3dJbnB1dDogZmFsc2UsXG4gICAgICBvbkNoYW5nZTogdGhpcy5fb25EYXRlQ2hhbmdlZCxcbiAgICAgIGZvcm1hdERhdGU6IHRoaXMuZm9ybWF0RGF0ZSxcbiAgICAgIG1heERhdGU6IHRoaXMuZ2V0T3B0aW9uKCdkYXRlVGltZU1heCcsIHBhcmFtcywgbnVsbCksXG4gICAgICBtaW5EYXRlOiB0aGlzLmdldE9wdGlvbignZGF0ZVRpbWVNaW4nLCBwYXJhbXMsIG51bGwpLFxuICAgICAgZGVmYXVsdEhvdXI6IHRoaXMuZ2V0T3B0aW9uKCdkYXRlVGltZURlZmF1bHRIb3VyJywgcGFyYW1zLCAxMiksXG4gICAgICBkZWZhdWx0TWludXRlOiB0aGlzLmdldE9wdGlvbignZGF0ZVRpbWVEZWZhdWx0TWludXRlJywgcGFyYW1zLCAwKSxcbiAgICAgIGRpc2FibGVNb2JpbGU6IHRoaXMuZ2V0T3B0aW9uKCdkYXRlVGltZURpc2FibGVNb2JpbGUnLCBwYXJhbXMsIGZhbHNlKSxcbiAgICAgIHdlZWtOdW1iZXJzOiB0aGlzLmdldE9wdGlvbignZGF0ZVRpbWVFbmFibGVXZWVrTnVtYmVyJywgcGFyYW1zLCBmYWxzZSksXG4gICAgICBsb2NhbGU6IHRoaXMuX2dldFBpY2tlckxvY2FsZSgpLFxuICAgICAgbm9DYWxlbmRhcixcbiAgICAgIGRhdGVGb3JtYXQsXG4gICAgICBlbmFibGVUaW1lLFxuICAgICAgZW5hYmxlU2Vjb25kcyxcbiAgICAgIHRpbWVfMjRocixcbiAgICB9KVxuXG4gICAgLy8gZm9yY2UgZGlhbG9nIG92ZXJmbG93XG4gICAgdGhpcy5waWNrZXIuY2FsZW5kYXJDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnYWctY3VzdG9tLWNvbXBvbmVudC1wb3B1cCcpXG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIEBvdmVycmlkZVxuICBkZXN0cm95KCkge1xuICAgIHRoaXMucGlja2VyLmRlc3Ryb3koKVxuICAgIHRoaXMub2ZmKERhdGVUaW1lSW5wdXQuT05fREFURV9DSEFOR0VEKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgcGlja2VyIGRhdGVcbiAgICpcbiAgICogQHBhcmFtIHtEYXRlfFN0cmluZ30gdmFsdWUgdGhlIGRhdGUgdmFsdWUgdG8gc2V0XG4gICAqL1xuICBzZXREYXRlKHZhbHVlKSB7XG4gICAgdGhpcy5waWNrZXIuc2V0RGF0ZSh2YWx1ZSwgdHJ1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIFBpY2tlclxuICAgKi9cbiAgb3BlbigpIHtcbiAgICB0aGlzLnBpY2tlci5vcGVuKClcbiAgICB0aGlzLl9ndWkucXVlcnlTZWxlY3RvcignaW5wdXQnKS5mb2N1cygpXG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgcGlja2VyXG4gICAqL1xuICBjbG9zZSgpIHtcbiAgICB0aGlzLnBpY2tlci5jbG9zZSgpXG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIHBpY2tlclxuICAgKi9cbiAgcmVzZXQoKSB7XG4gICAgLyoqIHRoaXMgY2hlY2sgYmVjYXVzZSB0aGUgdGVzdHMgZmFpbCBoZXJlIGZvciBzb21lIHJlYXNvbnMgICovXG4gICAgaWYgKHRoaXMucGlja2VyLmNvbmZpZykge1xuICAgICAgdGhpcy5waWNrZXIuY2xlYXIoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXQgdGhlIGRhdGUgdXNpbmcgYEJCai5NYXNrcy5UeXBlcy5kYXRlYFxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gZGF0ZSBkYXRlIGFzIGEgc3RyaW5nXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBmb3JtYXQgQkJqIGRhdGUgZm9ybWF0XG4gICAqXG4gICAqIEByZXR1cm4ge1N0cmluZ30gZm9ybWF0dGVkIGRhdGUgYXMgc3RyaW5nXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgZm9ybWF0RGF0ZShkYXRlLCBmb3JtYXQpIHtcbiAgICBjb25zdCBkYXRlVGltZUZvcm1hdHRlciA9IHRoaXMuZ2V0T3B0aW9uKCdkYXRlVGltZUZvcm1hdHRlcicsIHRoaXMuX3BhcmFtcylcbiAgICBjb25zdCBsb2NhbGUgPSB0aGlzLmdldE9wdGlvbihcbiAgICAgICdkYXRlVGltZUxvY2FsZScsXG4gICAgICB0aGlzLl9wYXJhbXMsXG4gICAgICBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlIHx8ICdlbi1VUydcbiAgICApXG5cbiAgICBpZiAoZGF0ZVRpbWVGb3JtYXR0ZXIpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgZGF0ZVRpbWVGb3JtYXR0ZXJcbiAgICAgIGxldCBleHByZXNzaW9uID0gZGF0ZVRpbWVGb3JtYXR0ZXJcblxuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgaWYgKCEoZXhwcmVzc2lvbi5pbmRleE9mKCdyZXR1cm4nKSA+PSAwKSkge1xuICAgICAgICAgICAgZXhwcmVzc2lvbiA9ICdyZXR1cm4gJyArIGV4cHJlc3Npb24gKyAnOydcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uKFxuICAgICAgICAgICAgJ2RhdGUnLFxuICAgICAgICAgICAgJ2Zvcm1hdCcsXG4gICAgICAgICAgICAnbG9jYWxlJyxcbiAgICAgICAgICAgICdEYXRlTWFzaycsXG4gICAgICAgICAgICBleHByZXNzaW9uXG4gICAgICAgICAgKShkYXRlLCBmb3JtYXQsIGxvY2FsZSwgQkJqLk1hc2tzLkRhdGVNYXNrKVxuXG4gICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICByZXR1cm4gZGF0ZVRpbWVGb3JtYXR0ZXIoZGF0ZSwgZm9ybWF0LCBsb2NhbGUsIEJCai5NYXNrcy5EYXRlTWFzaylcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgSW52YWxpZCBkYXRlVGltZUZvcm1hdHRlciBkZWZpbmVkIGZvciBjb2x1bW4gXCIke3RoaXMuX3BhcmFtcy5jb2xEZWYuZmllbGR9XCIuIFRoZSBmb3JtYXR0ZXIgc2hvdWxkIGJlIGFuIGV4cHJlc3Npb24gb3IgcGxhaW4gZnVuY3Rpb25gXG4gICAgICAgICAgKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWZvcm1hdCB8fCAoZm9ybWF0ICYmIGZvcm1hdC5pbmRleE9mKCclJykgPCAwKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIEJCai5NYXNrcy5EYXRlTWFzay5tYXNrKGRhdGUsIGZvcm1hdCwgbG9jYWxlKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gZGF0ZSBwaWNrZXIgY2hhbmdlcyBhbmQgdXBkYXRlIHRoZSBzZWxlY3RlZCBkYXRlXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IHNlbGVjdGVkRGF0ZXMgIGFycmF5IG9mIHNlbGVjdGVkIGRhdGVzXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX29uRGF0ZUNoYW5nZWQoc2VsZWN0ZWREYXRlcykge1xuICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gc2VsZWN0ZWREYXRlc1swXSB8fCBudWxsXG4gICAgdGhpcy5ub3RpZnkoRGF0ZVRpbWVJbnB1dC5PTl9EQVRFX0NIQU5HRUQsIHRoaXMuc2VsZWN0ZWREYXRlKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBwaWNrZXIgZ2xvYmFsIGxvY2FsaXphdGlvbiB3aGljaCB3aWxsIHdvcmsgd2l0aCBhbnkgbG9jYWxlXG4gICAqXG4gICAqIEByZXR1cm4ge09iamVjdH1cbiAgICpcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2ZsYXRwaWNrci9mbGF0cGlja3IvYmxvYi9tYXN0ZXIvc3JjL2wxMG4vZGVmYXVsdC50c1xuICAgKi9cbiAgX2dldFBpY2tlckxvY2FsZSgpIHtcbiAgICBjb25zdCBsb2NhbGUgPSBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlIHx8ICdlbi1VUydcblxuICAgIGNvbnN0IHdlZWtEYXlzU2hvcnQgPSBbXVxuICAgIGNvbnN0IHdlZWtEYXlzTG9uZyA9IFtdXG5cbiAgICBmb3IgKGxldCBkYXkgPSA0OyBkYXkgPCAxMTsgZGF5KyspIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgxOTcwLCAxIC0gMSwgZGF5KVxuXG4gICAgICB3ZWVrRGF5c1Nob3J0LnB1c2goXG4gICAgICAgIGRhdGVcbiAgICAgICAgICAudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7XG4gICAgICAgICAgICB3ZWVrZGF5OiAnc2hvcnQnLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNwbGl0KCcsJylbMF0gLy8gdGhlIGRhdGUtdGltZS1mb3JtYXQtdGltZXpvbmUgcG9seWZpbGwgYXR0YWNoIHRoZSBkYXRlIGFsc29cbiAgICAgIClcblxuICAgICAgd2Vla0RheXNMb25nLnB1c2goXG4gICAgICAgIGRhdGVcbiAgICAgICAgICAudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7XG4gICAgICAgICAgICB3ZWVrZGF5OiAnbG9uZycsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc3BsaXQoJywnKVswXSAvLyB0aGUgZGF0ZS10aW1lLWZvcm1hdC10aW1lem9uZSBwb2x5ZmlsbCBhdHRhY2ggdGhlIGRhdGUgYWxzb1xuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IG1vbnRoc1Nob3J0ID0gW11cbiAgICBjb25zdCBtb250aHNMb25nID0gW11cblxuICAgIGZvciAobGV0IG1vbnRoID0gMDsgbW9udGggPCAxMjsgbW9udGgrKykge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDE5NzAsIG1vbnRoLCA0KVxuXG4gICAgICBtb250aHNTaG9ydC5wdXNoKFxuICAgICAgICBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwge1xuICAgICAgICAgIG1vbnRoOiAnc2hvcnQnLFxuICAgICAgICB9KVxuICAgICAgKVxuXG4gICAgICBtb250aHNMb25nLnB1c2goXG4gICAgICAgIGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7XG4gICAgICAgICAgbW9udGg6ICdsb25nJyxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgd2Vla2RheXM6IHtcbiAgICAgICAgc2hvcnRoYW5kOiB3ZWVrRGF5c1Nob3J0LFxuICAgICAgICBsb25naGFuZDogd2Vla0RheXNMb25nLFxuICAgICAgfSxcbiAgICAgIG1vbnRoczoge1xuICAgICAgICBzaG9ydGhhbmQ6IG1vbnRoc1Nob3J0LFxuICAgICAgICBsb25naGFuZDogbW9udGhzTG9uZyxcbiAgICAgIH0sXG4gICAgICBkYXlzSW5Nb250aDogWzMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdLFxuICAgICAgZmlyc3REYXlPZldlZWs6IEJCai5NYXNrcy5VdGlscy5EYXRlcy5nZXRXZWVrU3RhcnRCeUxvY2FsZShsb2NhbGUpLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICBvcmRpbmFsOiBudW1iZXIgPT4gJycsXG4gICAgICByYW5nZVNlcGFyYXRvcjogJyAgJyxcbiAgICAgIHdlZWtBYmJyZXZpYXRpb246ICcnLFxuICAgICAgc2Nyb2xsVGl0bGU6ICcnLFxuICAgICAgdG9nZ2xlVGl0bGU6ICcnLFxuICAgICAgYW1QTTogWydBTScsICdQTSddLFxuICAgICAgeWVhckFyaWFMYWJlbDogJycsXG4gICAgICBob3VyQXJpYUxhYmVsOiAnJyxcbiAgICAgIG1pbnV0ZUFyaWFMYWJlbDogJycsXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERhdGVUaW1lSW5wdXRcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9EYXRlVGltZUlucHV0L0RhdGVUaW1lSW5wdXQuanMiLCJcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmhlYWRcbiAgICAgICAgICAgICAgfTtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2FscztcblxuaWYobW9kdWxlLmhvdCkge1xuXHRtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIik7XG5cblx0XHRpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcblxuXHRcdHZhciBsb2NhbHMgPSAoZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0dmFyIGtleSwgaWR4ID0gMDtcblxuXHRcdFx0Zm9yKGtleSBpbiBhKSB7XG5cdFx0XHRcdGlmKCFiIHx8IGFba2V5XSAhPT0gYltrZXldKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGlkeCsrO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3Ioa2V5IGluIGIpIGlkeC0tO1xuXG5cdFx0XHRyZXR1cm4gaWR4ID09PSAwO1xuXHRcdH0oY29udGVudC5sb2NhbHMsIG5ld0NvbnRlbnQubG9jYWxzKSk7XG5cblx0XHRpZighbG9jYWxzKSB0aHJvdyBuZXcgRXJyb3IoJ0Fib3J0aW5nIENTUyBITVIgZHVlIHRvIGNoYW5nZWQgY3NzLW1vZHVsZXMgbG9jYWxzLicpO1xuXG5cdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHR9KTtcblxuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvRGF0ZVRpbWVJbnB1dC9zdHlsZS5zY3NzIiwiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2xpYi9jc3MtYmFzZS5qc1wiKShmYWxzZSk7XG4vLyBpbXBvcnRzXG5cblxuLy8gbW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCIuZGF0ZXRpbWVfX2lucHV0e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW47Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1hZy1pbnB1dC1ib3JkZXItY29sb3IsIHZhcigtLWFnLWJvcmRlci1jb2xvciwgI2JhYmZjNykpO2JvcmRlci1yYWRpdXM6M3B4fS5kYXRldGltZV9faW5wdXQ6Zm9jdXMsLmRhdGV0aW1lX19pbnB1dDphY3RpdmUsLmRhdGV0aW1lX19pbnB1dDpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYWctaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yLCByZ2JhKDMzLDE1MCwyNDMsMC40KSl9LmRhdGV0aW1lX19pbnB1dF9faW5wdXR7ZmxleDoxO3BhZGRpbmc6NnB4O2JvcmRlcjpub25lO291dGxpbmU6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWFnLWJhY2tncm91bmQtY29sb3IpO2NvbG9yOmluaGVyaXR9LmFnLXRoZW1lLWFscGluZSAuZGF0ZXRpbWVfX2lucHV0X19pbnB1dCwuYWctdGhlbWUtYmFsaGFtIC5kYXRldGltZV9faW5wdXRfX2lucHV0LC5hZy10aGVtZS1tYXRlcmlhbCAuZGF0ZXRpbWVfX2lucHV0X19pbnB1dHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWFnLWJhY2tncm91bmQtY29sb3IsICNmZmYpfS5hZy10aGVtZS1hbHBpbmUtZGFyayAuZGF0ZXRpbWVfX2lucHV0X19pbnB1dCwuYWctdGhlbWUtYmFsaGFtLWRhcmsgLmRhdGV0aW1lX19pbnB1dF9faW5wdXR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yLCAjMmQzNDM2KX0uZGF0ZXRpbWVfX2lucHV0X19jbGVhcnttYXJnaW4tbGVmdDoxcHg7bWFyZ2luLXRvcDoxcHg7cGFkZGluZzo2cHg7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyOm5vbmU7b3V0bGluZTpub25lO2N1cnNvcjpwb2ludGVyO2NvbG9yOmluaGVyaXR9LmRhdGV0aW1lX19pbnB1dC0tZWRpdG9ye2JvcmRlci1jb2xvcjp2YXIoLS1hZy1pbnB1dC1mb2N1cy1ib3JkZXItY29sb3IsIHJnYmEoMzMsMTUwLDI0MywwLjQpKX0uZGF0ZXRpbWVfX2lucHV0LS1lZGl0b3IgLmRhdGV0aW1lX19pbnB1dF9faW5wdXR7cGFkZGluZzowO3BhZGRpbmctbGVmdDo2cHh9XFxuXCIsIFwiXCJdKTtcblxuLy8gZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlciEuL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9EYXRlVGltZUlucHV0L3N0eWxlLnNjc3Ncbi8vIG1vZHVsZSBpZCA9IDEyNlxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSAyIDMiLCJcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmhlYWRcbiAgICAgICAgICAgICAgfTtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2FscztcblxuaWYobW9kdWxlLmhvdCkge1xuXHRtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIik7XG5cblx0XHRpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcblxuXHRcdHZhciBsb2NhbHMgPSAoZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0dmFyIGtleSwgaWR4ID0gMDtcblxuXHRcdFx0Zm9yKGtleSBpbiBhKSB7XG5cdFx0XHRcdGlmKCFiIHx8IGFba2V5XSAhPT0gYltrZXldKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGlkeCsrO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3Ioa2V5IGluIGIpIGlkeC0tO1xuXG5cdFx0XHRyZXR1cm4gaWR4ID09PSAwO1xuXHRcdH0oY29udGVudC5sb2NhbHMsIG5ld0NvbnRlbnQubG9jYWxzKSk7XG5cblx0XHRpZighbG9jYWxzKSB0aHJvdyBuZXcgRXJyb3IoJ0Fib3J0aW5nIENTUyBITVIgZHVlIHRvIGNoYW5nZWQgY3NzLW1vZHVsZXMgbG9jYWxzLicpO1xuXG5cdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHR9KTtcblxuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvRGF0ZVRpbWVGaWx0ZXIvc3R5bGUuc2NzcyIsImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikoZmFsc2UpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiLmRhdGVUaW1lRmlsdGVyIHNlbGVjdHttYXJnaW4tYm90dG9tOjlweDtwYWRkaW5nOjZweDtib3JkZXItcmFkaXVzOjNweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWFnLWlucHV0LWJvcmRlci1jb2xvciwgdmFyKC0tYWctYm9yZGVyLWNvbG9yLCAjYmFiZmM3KSk7Y29sb3I6aW5oZXJpdH0uZGF0ZVRpbWVGaWx0ZXIgc2VsZWN0OmZvY3VzLC5kYXRlVGltZUZpbHRlciBzZWxlY3Q6YWN0aXZle2JvcmRlci1jb2xvcjp2YXIoLS1hZy1pbnB1dC1mb2N1cy1ib3JkZXItY29sb3IsIHJnYmEoMzMsMTUwLDI0MywwLjQpKX0uZGF0ZVRpbWVGaWx0ZXIgc2VsZWN0IG9wdGlvbnt0ZXh0LWluZGVudDo2cHh9XFxuXCIsIFwiXCJdKTtcblxuLy8gZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlciEuL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9EYXRlVGltZUZpbHRlci9zdHlsZS5zY3NzXG4vLyBtb2R1bGUgaWQgPSAxMjhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEgMiAzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IERhdGVUaW1lRWRpdG9yIGZyb20gJy4vRGF0ZVRpbWVFZGl0b3InXG5cbmV4cG9ydCBkZWZhdWx0IERhdGVUaW1lRWRpdG9yXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvRGF0ZVRpbWVFZGl0b3IvaW5kZXguanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBhdXRvYmluZCwgb3ZlcnJpZGUgfSBmcm9tICdjb3JlLWRlY29yYXRvcnMnXG5pbXBvcnQgdXRjVG9ab25lZFRpbWUgZnJvbSAnZGF0ZS1mbnMtdHovdXRjVG9ab25lZFRpbWUnXG5pbXBvcnQgRGF0ZVRpbWVJbnB1dCBmcm9tICcuLi9EYXRlVGltZUlucHV0J1xuaW1wb3J0IENvbXBvbmVudCBmcm9tICcuLi9Db21wb25lbnQnXG5cbi8qKlxuICogRGF0ZVRpbWVJbnB1dFxuICpcbiAqIFNpbXBsZSBEYXRlVGltZUlucHV0IGNvbXBvbmVudCB3aGljaCBpbnRlZ3JhdGVzIHRoZSBmbGF0cGlja3JcbiAqXG4gKiAjIyBPcHRpb25zXG4gKlxuICogfCBOYW1lICAgICAgICAgICAgICAgICAgXHR8IERlZmF1bHQgICAgIFx0fCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx0fDotLS0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgKipkYXRlVGltZUVuYWJsZVRpbWUqKiAgIHwgZmFsc2UgICAgfCBlbmFibGUgLyBkaXNhYmxlIHRpbWVcbiAqIHwgKipkYXRlVGltZUVuYWJsZTI0SFIqKiAgIHwgZmFsc2UgICAgfCBlbmFibGUgLyBkaXNhYmxlIHRpbWUgMjQgZm9ybWF0XG4gKiB8ICoqZGF0ZVRpbWVFbmFibGVTZWNvbmRzKiogICB8IGZhbHNlICAgIHwgZW5hYmxlIC8gZGlzYWJsZSBzZWNvbmRzIG1hbmFnZW1lbnRcbiAqIHwgKipkYXRlVGltZUVuYWJsZUNhbGVuZGFyKiogICB8IGZhbHNlICAgIHwgZW5hYmxlIC8gZGlzYWJsZSBDYWxlbmRhci5cbiAqIHwgKipkYXRlVGltZU1hc2sqKiAgIHwgZmFsc2UgICAgfCBUaGUgbWFzayB1c2VkIHRvIGZvcm1hdCB0aGUgc2VsZWN0ZWQgZGF0ZVxuICogfCAqKmRhdGVUaW1lTWF4KiogICB8IHVuZGVmaW5lZCAgICB8ICBNYXggYWxsb3dlZCBkYXRlXG4gKiB8ICoqZGF0ZVRpbWVNaW4qKiAgIHwgdW5kZWZpbmVkICAgIHwgIE1pbiBhbGxvd2VkIGRhdGVcbiAqIHwgKipkYXRlVGltZUZvcm1hdHRlcioqICAgfCBmYWxzZSAgICB8ICBBIGZ1bmN0aW9uIG9yIGV4cHJlc3Npb24gdG8gZm9ybWF0IHRoZSBkYXRlIChAc2VlIHN1cHBvcnRlZCBwYXJhbSlcbiAqIHwgKipkYXRlVGltZUxvY2FsZSoqICAgfCBTeXN0ZW0gZGVmYXVsdCAgICB8ICBBIGxvY2FsZSB0byB1c2UgZm9yIGRhdGUgZm9ybWF0dGluZ1xuICogfCAqKmRhdGVUaW1lRGVmYXVsdEhvdXIqKiAgIHwgMTIgICAgfCAgSW5pdGlhbCB2YWx1ZSBvZiB0aGUgaG91ciBlbGVtZW50LlxuICogfCAqKmRhdGVUaW1lRGVmYXVsdE1pbnV0ZSoqICAgfCAwICAgIHwgIEluaXRpYWwgdmFsdWUgb2YgdGhlIG1pbnV0ZSBlbGVtZW50LlxuICogfCAqKmRhdGVUaW1lRGlzYWJsZU1vYmlsZSoqICAgfCBmYWxzZSAgICB8ICBTZXQgZGlzYWJsZU1vYmlsZSB0byB0cnVlIHRvIGFsd2F5cyB1c2UgdGhlIG5vbi1uYXRpdmUgcGlja2VyLlxuICogfCAqKmRhdGVUaW1lRW5hYmxlV2Vla051bWJlcioqICAgfCB0cnVlICAgIHwgIEVuYWJsZXMgZGlzcGxheSBvZiB3ZWVrIG51bWJlcnMgaW4gY2FsZW5kYXIuXG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqL1xuY2xhc3MgRGF0ZVRpbWVFZGl0b3IgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogQHR5cGUge0RhdGVUaW1lSW5wdXR9XG4gICAqL1xuICBfaW5wdXQgPSBuZXcgRGF0ZVRpbWVJbnB1dCh0cnVlKVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgKi9cbiAgX3ZhbHVlID0gbnVsbFxuXG4gIC8qKlxuICAgKiBQYXJhbXMgcmVjZWl2ZWQgaW4gaW5pdFxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgX3BhcmFtcyA9IG51bGxcblxuICAvKipcbiAgICogVGFrZXMgaW5jb21wbGV0ZSBpc28gc3RyaW5nIGFuZCByZXR1cm4gYSBjb21wbGV0ZSBvbmVcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGRhdGUgaW5jb21wbGV0ZSBpc28gc3RyaW5nXG4gICAqXG4gICAqIEByZXR1cm4ge1N0cmluZ30gY29tcGxldGUgaXNvIHN0cmluZ1xuICAgKi9cbiAgc3RhdGljIGZpeFNob3J0SVNPKHZhbHVlKSB7XG4gICAgcmV0dXJuIEJCai5NYXNrcy5VdGlscy5EYXRlcy5maXhTaG9ydElTTyh2YWx1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgQG92ZXJyaWRlXG4gIGluaXQocGFyYW1zKSB7XG4gICAgdGhpcy5fcGFyYW1zID0gcGFyYW1zXG4gICAgdGhpcy5mb2N1c0FmdGVyQXR0YWNoZWQgPSBwYXJhbXMuY2VsbFN0YXJ0ZWRFZGl0XG4gICAgaWYgKHRoaXMuZm9jdXNBZnRlckF0dGFjaGVkKSB7XG4gICAgICBsZXQga2V5UHJlc3NCYWNrc3BhY2VPckRlbGV0ZSA9XG4gICAgICAgIHBhcmFtcy5rZXlQcmVzcyA9PSAzMiB8fCBwYXJhbXMua2V5UHJlc3MgPT0gNDYgLy8gc3BhY2UgLy8gZGVsZXRlXG5cbiAgICAgIGlmIChrZXlQcmVzc0JhY2tzcGFjZU9yRGVsZXRlKSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gJydcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLmNoYXJQcmVzcyAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHBhcmFtcy5jaGFyUHJlc3NcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gcGFyYW1zLnZhbHVlXG4gICAgICAgIGlmIChwYXJhbXMua2V5UHJlc3MgIT0gMTEzKSB7XG4gICAgICAgICAgLy9GMlxuICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0QWxsT25Gb2N1cyA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHBhcmFtcy52YWx1ZVxuICAgIH1cblxuICAgIHRoaXMuX3ZhbHVlID0gRGF0ZVRpbWVFZGl0b3IuZml4U2hvcnRJU08odGhpcy5fdmFsdWUpXG4gICAgdGhpcy5faW5wdXQuaW5pdChwYXJhbXMpXG4gICAgdGhpcy5faW5wdXQub24oRGF0ZVRpbWVJbnB1dC5PTl9EQVRFX0NIQU5HRUQsIHRoaXMuX29uRGF0ZUNoYW5nZSlcblxuICAgIGlmICh0aGlzLl92YWx1ZSkge1xuICAgICAgdGhpcy5faW5wdXQuc2V0RGF0ZShcbiAgICAgICAgdXRjVG9ab25lZFRpbWUodGhpcy5fdmFsdWUsIEJCai5NYXNrcy5VdGlscy5EYXRlcy5nZXRUaW1lem9uZU9yT2Zmc2V0KCkpXG4gICAgICApXG4gICAgfVxuXG4gICAgdGhpcy5fZ3VpID0gdGhpcy5faW5wdXQuZ2V0R3VpKClcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgQG92ZXJyaWRlXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5faW5wdXQuZGVzdHJveSgpXG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjYWxsZWQgb25jZSBhZnRlciBHVUkgaXMgYXR0YWNoZWQgdG8gRE9NLlxuICAgKiBNYWtlIHN1cmUgdGhlIGNvbnRhaW5lciBpcyBhbHdheXMgZm9jdXNlZCBhbmQgbGlzdGVuaW5nIHRvIGtleSBjaGFuZ2VzXG4gICAqL1xuICBhZnRlckd1aUF0dGFjaGVkKCkge1xuICAgIGlmICh0aGlzLmZvY3VzQWZ0ZXJBdHRhY2hlZCkge1xuICAgICAgdGhpcy5mb2N1c0luKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBmaW5hbCB2YWx1ZSB0byB0aGUgZ3JpZCwgdGhlIHJlc3VsdCBvZiB0aGUgZWRpdGluZ1xuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufVxuICAgKi9cbiAgZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmFtcy5wYXJzZVZhbHVlKHRoaXMuX3ZhbHVlKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY2FsbGVkIG9uY2UgYWZ0ZXIgaW5pdGlhbGl6ZWQgYW5kIHJldHVybnMgZmFsc2Ugc28gdGhlIGVkaXRvciBhcHBlYXJzIGluIHRoZSBjZWxsXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IGFsd2F5cyBmYWxzZVxuICAgKiovXG4gIGlzUG9wdXAoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogSWYgZG9pbmcgZnVsbCByb3cgZWRpdCwgdGhlbiBnZXRzIGNhbGxlZCB3aGVuIHRhYmJpbmcgaW50byB0aGUgY2VsbC5cbiAgICovXG4gIGZvY3VzSW4oKSB7XG4gICAgdGhpcy5faW5wdXQub3BlbigpXG4gIH1cblxuICAvKipcbiAgICogSWYgZG9pbmcgZnVsbCByb3cgZWRpdCwgdGhlbiBnZXRzIGNhbGxlZCB3aGVuIHRhYmJpbmcgb3V0IG9mIHRoZSBjZWxsLlxuICAgKi9cbiAgZm9jdXNPdXQoKSB7XG4gICAgdGhpcy5faW5wdXQuY2xvc2UoKVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgZWRpdG9yIHZhbHVlIHdpdGggc2VsZWN0ZWQgZGF0ZSBmcm9tIHRoZSBpbnB1dFxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gZGF0ZVxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vbkRhdGVDaGFuZ2UoZGF0ZSkge1xuICAgIHRoaXMuX3ZhbHVlID0gZGF0ZSBpbnN0YW5jZW9mIERhdGUgPyBkYXRlLnRvSVNPU3RyaW5nKCkgOiAnJ1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERhdGVUaW1lRWRpdG9yXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvRGF0ZVRpbWVFZGl0b3IvRGF0ZVRpbWVFZGl0b3IuanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbi8qKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ3VzdG9tRXZlbnQvQ3VzdG9tRXZlbnQgICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXh0cmEtc2VtaVxuOyhmdW5jdGlvbigpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cuQ3VzdG9tRXZlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSAvL0lmIG5vdCBJRVxuXG4gIGZ1bmN0aW9uIEN1c3RvbUV2ZW50KGV2ZW50LCBwYXJhbXMpIHtcbiAgICBwYXJhbXMgPSBwYXJhbXMgfHwgeyBidWJibGVzOiBmYWxzZSwgY2FuY2VsYWJsZTogZmFsc2UsIGRldGFpbDogdW5kZWZpbmVkIH1cbiAgICB2YXIgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0N1c3RvbUV2ZW50JylcbiAgICBldnQuaW5pdEN1c3RvbUV2ZW50KGV2ZW50LCBwYXJhbXMuYnViYmxlcywgcGFyYW1zLmNhbmNlbGFibGUsIHBhcmFtcy5kZXRhaWwpXG4gICAgcmV0dXJuIGV2dFxuICB9XG5cbiAgQ3VzdG9tRXZlbnQucHJvdG90eXBlID0gd2luZG93LkV2ZW50LnByb3RvdHlwZVxuXG4gIHdpbmRvdy5DdXN0b21FdmVudCA9IEN1c3RvbUV2ZW50XG59KSgpXG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBCYXNpcy5BZ0dyaWRDb21wb25lbnRzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbml0LmpzJ1xuZXhwb3J0ICogZnJvbSAnLi9jb2x1bW5zLmpzJ1xuZXhwb3J0ICogZnJvbSAnLi9yb3dzLmpzJ1xuZXhwb3J0ICogZnJvbSAnLi9jZWxscy5qcydcbmV4cG9ydCAqIGZyb20gJy4vc3RhdGUuanMnXG5leHBvcnQgKiBmcm9tICcuL3Rvb2xwYW5lbC5qcydcbmV4cG9ydCAqIGZyb20gJy4vc3RhdHVzYmFyLmpzJ1xuZXhwb3J0ICogZnJvbSAnLi9vdmVybGF5cy5qcydcbmV4cG9ydCAqIGZyb20gJy4vY29udGV4dC5qcydcbmV4cG9ydCAqIGZyb20gJy4vY2hhcnRzLmpzJ1xuZXhwb3J0ICogZnJvbSAnLi9qc3MuanMnXG5leHBvcnQgKiBmcm9tICcuL3V0aWxpdGllcy5qcydcbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QEJhc2lzLkFnR3JpZENvbXBvbmVudHMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19leHRlbmRDb2x1bW5EZWZpbml0aW9ucyB9IGZyb20gJy4vY29sdW1ucydcbmltcG9ydCB7IGd3X25hdmlnYXRlVG9OZXh0Um93LCBnd19nZXRSb3dOb2RlSWQgfSBmcm9tICcuL3Jvd3MnXG5pbXBvcnQgeyBnd19nZXRDb250ZXh0TWVudSB9IGZyb20gJy4vbWVudXMnXG5pbXBvcnQgeyBnd19nZXRDaGFydFRvb2xiYXJJdGVtcyB9IGZyb20gJy4vY2hhcnRzJ1xuaW1wb3J0IHsgZ3dfZ2V0RG9jdW1lbnQsIGd3X2dldFdpbmRvdywgZ3dfYWRkR3JpZCB9IGZyb20gJy4vdXRpbGl0aWVzJ1xuaW1wb3J0IHtcbiAgZ3dfb25Sb3dDbGlja2VkLFxuICBnd19vblJvd0RvdWJsZUNsaWNrZWQsXG4gIGd3X29uU2VsZWN0aW9uQ2hhbmdlZCxcbiAgZ3dfb25SYW5nZVNlbGVjdGlvbkNoYW5nZWQsXG4gIGd3X29uQ2VsbENsaWNrRXZlbnQsXG4gIGd3X29uQ2VsbEVkaXRpbmdFdmVudCxcbiAgZ3dfb25Sb3dFZGl0aW5nRXZlbnQsXG4gIGd3X29uUmVhZHlFdmVudCxcbiAgZ3dfZGVib3VuY2UsXG59IGZyb20gJ2V2ZW50cydcbmltcG9ydCB0ZW1wbGF0ZSBmcm9tICdsb2Rhc2gtZXMvdGVtcGxhdGUnXG5pbXBvcnQgSFRNTFRvb2x0aXAgZnJvbSAnLi4vY29tcG9uZW50cy9IVE1MVG9vbHRpcC5qcydcblxuY29uc3QgeyBkZWVwUGFyc2VKc29uIH0gPSByZXF1aXJlKCdkZWVwLXBhcnNlLWpzb24nKVxuXG5leHBvcnQgZnVuY3Rpb24gZ3dfaW5pdChvcHRpb25zLCBsaWNlbnNlLCBkYXRhKSB7XG4gIGlmIChhZ0dyaWQuTGljZW5zZU1hbmFnZXIgJiYgbGljZW5zZSkge1xuICAgIGFnR3JpZC5MaWNlbnNlTWFuYWdlci5zZXRMaWNlbnNlS2V5KGxpY2Vuc2UpXG4gIH1cblxuICBjb25zdCBpZCA9IG9wdGlvbnMuY29udGV4dC5pZFxuICBjb25zdCBjb250YWluZXIgPSBnd19nZXREb2N1bWVudCgpLmdldEVsZW1lbnRCeUlkKGlkKVxuICAvLyB3ZSBtYWtlIHRoZSBncmlkIG9wdGlvbnMgYXZhaWxhYmxlIGFzIHNvb24gYXMgcG9zc2libGVcbiAgY29uc3QgZ3JpZCA9IGd3X2FkZEdyaWQoaWQsIHtcbiAgICBjb250YWluZXIsXG4gICAgb3B0aW9ucyxcbiAgfSlcblxuICAvLyBUT0RPOiB1c2UgYWcgZ3JpZCBkZXN0cm95XG4gIGNvbnRhaW5lci5pbm5lckhUTUwgPSAnJ1xuXG4gIGNvbnN0IHBhcnNlZE9wdGlvbnMgPSBnd19wYXJzZU9wdGlvbnMob3B0aW9ucylcbiAgcGFyc2VkT3B0aW9ucy5yb3dEYXRhID0gZGF0YVxuXG4gIGNvbnN0IGluc3RhbmNlID0gbmV3IGFnR3JpZC5HcmlkKGNvbnRhaW5lciwgcGFyc2VkT3B0aW9ucylcbiAgZ3JpZC5pbnN0YW5jZSA9IGluc3RhbmNlXG4gIGdyaWQub3B0aW9ucyA9IHBhcnNlZE9wdGlvbnNcblxuICBjb25zb2xlLmxvZyhcbiAgICBgJWMgR3JpZCBbJHtpZH1dIHNldHRpbmdzIDogYCxcbiAgICAnYmFja2dyb3VuZDogIzIyMjsgY29sb3I6ICNiYWRhNTUnLFxuICAgIHBhcnNlZE9wdGlvbnNcbiAgKVxufVxuXG4vKipcbiAqIFBhcnNlIE9wdGlvbnNcbiAqXG4gKiBQYXJzZSB0aGUgZ3JpZCBvcHRpb25zIGFuZCByZXR1cm5cbiAqIGFuIG9iamVjdCB3aGljaCBjYW4gYmUgcGFzc2VkIHRvIHRoZSBncmlkXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgR3JpZCBvcHRpb25zIGFzIEpzb24gT2JqZWN0XG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBvcHRpb25zIG9iamVjdFxuICovXG5mdW5jdGlvbiBnd19wYXJzZU9wdGlvbnMob3B0aW9ucykge1xuICBjb25zdCBkZWVwUGFyc2VkT3B0aW9ucyA9IGRlZXBQYXJzZUpzb24oSlNPTi5zdHJpbmdpZnkob3B0aW9ucykpXG4gIGNvbnN0IGlkID0gZGVlcFBhcnNlZE9wdGlvbnMuY29udGV4dC5pZFxuICBjb25zdCBnZXREYXRhUGF0aFRlbXBsYXRlID0gZGVlcFBhcnNlZE9wdGlvbnMuY29udGV4dC5nZXREYXRhUGF0aCB8fCAnJ1xuICAvLyBUT0RPOiBkbyB3ZSBuZWVkIHRvIGNvbnRyb2wgdGhpcyBzZXR0aW5nIGZyb20gQkJqID9cbiAgY29uc3QgZGVib3VuY2VEdXJhdGlvbiA9IDI1MFxuICBjb25zdCBmaW5hbE9wdGlvbnMgPSB7XG4gICAgLi4uZGVlcFBhcnNlZE9wdGlvbnMsXG4gICAgLi4ue1xuICAgICAgZ2V0RG9jdW1lbnQ6ICgpID0+IGd3X2dldERvY3VtZW50KCksXG4gICAgICBvbkNlbGxFZGl0aW5nU3RhcnRlZDogZSA9PiB7XG4gICAgICAgIGd3X29uQ2VsbEVkaXRpbmdFdmVudChpZCwgZSlcbiAgICAgIH0sXG4gICAgICBvbkNlbGxFZGl0aW5nU3RvcHBlZDogZSA9PiB7XG4gICAgICAgIGd3X29uQ2VsbEVkaXRpbmdFdmVudChpZCwgZSlcbiAgICAgIH0sXG4gICAgICBvbkNlbGxWYWx1ZUNoYW5nZWQ6IGUgPT4ge1xuICAgICAgICBnd19vbkNlbGxFZGl0aW5nRXZlbnQoaWQsIGUpXG4gICAgICB9LFxuICAgICAgb25Sb3dFZGl0aW5nU3RhcnRlZDogZSA9PiB7XG4gICAgICAgIGd3X29uUm93RWRpdGluZ0V2ZW50KGlkLCBlKVxuICAgICAgfSxcbiAgICAgIG9uUm93VmFsdWVDaGFuZ2VkOiBlID0+IHtcbiAgICAgICAgZ3dfb25Sb3dFZGl0aW5nRXZlbnQoaWQsIGUpXG4gICAgICB9LFxuICAgICAgb25Sb3dFZGl0aW5nU3RvcHBlZDogZSA9PiB7XG4gICAgICAgIGd3X29uUm93RWRpdGluZ0V2ZW50KGlkLCBlKVxuICAgICAgfSxcbiAgICAgIG9uQ2VsbENsaWNrZWQ6IGUgPT4ge1xuICAgICAgICBnd19vbkNlbGxDbGlja0V2ZW50KGlkLCBlKVxuICAgICAgfSxcbiAgICAgIG9uQ2VsbERvdWJsZUNsaWNrZWQ6IGUgPT4ge1xuICAgICAgICBnd19vbkNlbGxDbGlja0V2ZW50KGlkLCBlKVxuICAgICAgfSxcbiAgICAgIG9uR3JpZFJlYWR5OiBlID0+IHtcbiAgICAgICAgZ3dfb25SZWFkeUV2ZW50KGlkLCBlKVxuICAgICAgfSxcbiAgICAgIGdldFJvd05vZGVJZDogZGF0YSA9PiBnd19nZXRSb3dOb2RlSWQoaWQsIGRhdGEpLFxuICAgICAgZ2V0Q29udGV4dE1lbnVJdGVtczogcGFyYW1zID0+IGd3X2dldENvbnRleHRNZW51KGlkLCBwYXJhbXMpLFxuICAgICAgZ2V0Q2hhcnRUb29sYmFySXRlbXM6IGd3X2dldENoYXJ0VG9vbGJhckl0ZW1zLFxuICAgICAgcG9wdXBQYXJlbnQ6IGd3X2dldERvY3VtZW50KCkuYm9keSxcbiAgICAgIG9uUm93RG91YmxlQ2xpY2tlZDogZ3dfZGVib3VuY2UoZ3dfb25Sb3dEb3VibGVDbGlja2VkLCBkZWJvdW5jZUR1cmF0aW9uKSxcbiAgICAgIG9uUm93Q2xpY2tlZDogZ3dfZGVib3VuY2UoZ3dfb25Sb3dDbGlja2VkLCBkZWJvdW5jZUR1cmF0aW9uKSxcbiAgICAgIG9uU2VsZWN0aW9uQ2hhbmdlZDogZ3dfZGVib3VuY2UoZ3dfb25TZWxlY3Rpb25DaGFuZ2VkLCBkZWJvdW5jZUR1cmF0aW9uKSxcbiAgICAgIG9uUmFuZ2VTZWxlY3Rpb25DaGFuZ2VkOiBnd19kZWJvdW5jZShcbiAgICAgICAgZ3dfb25SYW5nZVNlbGVjdGlvbkNoYW5nZWQsXG4gICAgICAgIGRlYm91bmNlRHVyYXRpb25cbiAgICAgICksXG4gICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIEJvb2xlYW5GaWx0ZXI6IEJhc2lzLkFnR3JpZENvbXBvbmVudHMuQm9vbGVhbkZpbHRlcixcbiAgICAgICAgQm9vbGVhblJlbmRlcmVyOiBCYXNpcy5BZ0dyaWRDb21wb25lbnRzLkJvb2xlYW5SZW5kZXJlcixcbiAgICAgICAgQm9vbGVhbkVkaXRvcjogQmFzaXMuQWdHcmlkQ29tcG9uZW50cy5Cb29sZWFuRWRpdG9yLFxuICAgICAgICBOdW1iZXJFZGl0b3I6IEJhc2lzLkFnR3JpZENvbXBvbmVudHMuTnVtYmVyRWRpdG9yLFxuICAgICAgICBUZXh0RWRpdG9yOiBCYXNpcy5BZ0dyaWRDb21wb25lbnRzLlRleHRFZGl0b3IsXG4gICAgICAgIERhdGVUaW1lRWRpdG9yOiBCYXNpcy5BZ0dyaWRDb21wb25lbnRzLkRhdGVUaW1lRWRpdG9yLFxuICAgICAgICBEYXRlVGltZUZpbHRlcjogQmFzaXMuQWdHcmlkQ29tcG9uZW50cy5EYXRlVGltZUZpbHRlcixcbiAgICAgICAgSW1hZ2VSZW5kZXJlcjogQmFzaXMuQWdHcmlkQ29tcG9uZW50cy5JbWFnZVJlbmRlcmVyLFxuICAgICAgICBUZW1wbGF0ZVJlbmRlcmVyOiBCYXNpcy5BZ0dyaWRDb21wb25lbnRzLlRlbXBsYXRlUmVuZGVyZXIsXG4gICAgICAgIEhUTUxUb29sdGlwOiBIVE1MVG9vbHRpcCxcbiAgICAgIH0sXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIC4uLmRlZXBQYXJzZWRPcHRpb25zLmNvbnRleHQsXG4gICAgICAgIC4uLntcbiAgICAgICAgICBkb2N1bWVudDogZ3dfZ2V0RG9jdW1lbnQoKSxcbiAgICAgICAgICB3aW5kb3c6IGd3X2dldFdpbmRvdygpLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9XG5cbiAgaWYgKFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICBmaW5hbE9wdGlvbnMuY29udGV4dC5oYXNPd25Qcm9wZXJ0eSgnbmF2aWdhdGVUb05leHRDZWxsJykgJiZcbiAgICBmaW5hbE9wdGlvbnMuY29udGV4dC5uYXZpZ2F0ZVRvTmV4dENlbGxcbiAgKSB7XG4gICAgZmluYWxPcHRpb25zLm5hdmlnYXRlVG9OZXh0Q2VsbCA9IHBhcmFtcyA9PiB7XG4gICAgICByZXR1cm4gZ3dfbmF2aWdhdGVUb05leHRSb3coaWQsIHBhcmFtcylcbiAgICB9XG4gIH1cblxuICBpZiAoZ2V0RGF0YVBhdGhUZW1wbGF0ZSAmJiBmaW5hbE9wdGlvbnMudHJlZURhdGEpIHtcbiAgICBjb25zdCBnZXREYXRhUGF0aFRlbXBsYXRlQ29tcGxpZWQgPSB0ZW1wbGF0ZShnZXREYXRhUGF0aFRlbXBsYXRlKVxuICAgIGZpbmFsT3B0aW9ucy5nZXREYXRhUGF0aCA9IGRhdGEgPT5cbiAgICAgIGdldERhdGFQYXRoVGVtcGxhdGVDb21wbGllZCh7IGRhdGE6IGRhdGEgfSlcbiAgfVxuXG4gIC8vIGV4dGVuZCB0aGUgY29sdW1uIGRlZmluaXRpb25zXG4gIGd3X2V4dGVuZENvbHVtbkRlZmluaXRpb25zKGZpbmFsT3B0aW9ucy5jb2x1bW5EZWZzKVxuXG4gIHJldHVybiBmaW5hbE9wdGlvbnNcbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfZ2V0R3JpZCB9IGZyb20gJy4vdXRpbGl0aWVzJ1xuaW1wb3J0IHsgZ3dfcGFyc2VOb2RlRnJvbUV2ZW50LCBnd19zZW5kRXZlbnQgfSBmcm9tICdldmVudHMvdXRpbGl0aWVzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ3dfZ2V0Q29udGV4dE1lbnUoZ3JpZElkLCBwYXJhbXMpIHtcbiAgY29uc3QgYnVpbGRDb250ZXh0TWVudUFjdGlvbiA9IChwYXJhbXMsIGlkKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNvbnN0IG5vZGUgPSBnd19wYXJzZU5vZGVGcm9tRXZlbnQocGFyYW1zKVxuICAgICAgY29uc3QgY29sSWQgPSBwYXJhbXMuY29sdW1uLmNvbElkXG4gICAgICBjb25zdCB2YWx1ZSA9IHBhcmFtcy52YWx1ZVxuXG4gICAgICBnd19zZW5kRXZlbnQoXG4gICAgICAgIGd3X2dldEdyaWQoZ3JpZElkKS5vcHRpb25zLmNvbnRleHQsXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnZ3cuY29udGV4dG1lbnUnLFxuICAgICAgICAgIGRldGFpbDogSlNPTi5zdHJpbmdpZnkoeyByOiBub2RlLCBjOiBjb2xJZCwgdjogdmFsdWUsIGk6IGlkIH0pLFxuICAgICAgICB9LFxuICAgICAgICBpZFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHBhcnNlTWVudSA9IG1lbnUgPT4ge1xuICAgIG1lbnUuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGl0ZW1bJ2FjdGlvbiddID0gYnVpbGRDb250ZXh0TWVudUFjdGlvbihwYXJhbXMsIGl0ZW0uaWQpXG5cbiAgICAgIGlmIChpdGVtWydjc3NDbGFzc2VzJ10gJiYgIUFycmF5LmlzQXJyYXkoaXRlbVsnY3NzQ2xhc3NlcyddKSkge1xuICAgICAgICBpdGVtWydjc3NDbGFzc2VzJ10gPSBpdGVtWydjc3NDbGFzc2VzJ10uc3BsaXQoJyAnKVxuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbVsnc3ViTWVudSddKSB7XG4gICAgICAgIGl0ZW1bJ3N1Yk1lbnUnXSA9IHBhcnNlTWVudShpdGVtWydzdWJNZW51J10pXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiBtZW51XG4gIH1cblxuICByZXR1cm4gcGFyc2VNZW51KGd3X2dldEdyaWQoZ3JpZElkKS5vcHRpb25zLmNvbnRleHQuY29udGV4dE1lbnUpXG59XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7XG4gIGd3X29uUm93Q2xpY2tlZCxcbiAgZ3dfb25Sb3dEb3VibGVDbGlja2VkLFxuICBnd19vblNlbGVjdGlvbkNoYW5nZWQsXG4gIGd3X29uQ2VsbENsaWNrRXZlbnQsXG4gIGd3X29uUmFuZ2VTZWxlY3Rpb25DaGFuZ2VkLFxufSBmcm9tICcuL3NlbGVjdGlvbnMnXG5cbmltcG9ydCB7IGd3X29uQ2VsbEVkaXRpbmdFdmVudCwgZ3dfb25Sb3dFZGl0aW5nRXZlbnQgfSBmcm9tICcuL2VkaXRpbmcnXG5cbmltcG9ydCB7IGd3X29uUmVhZHlFdmVudCB9IGZyb20gJy4vcmVhZHknXG5cbmltcG9ydCB7IGd3X2RlYm91bmNlIH0gZnJvbSAnLi91dGlsaXRpZXMnXG5cbmV4cG9ydCB7XG4gIGd3X29uUm93Q2xpY2tlZCxcbiAgZ3dfb25Sb3dEb3VibGVDbGlja2VkLFxuICBnd19vblNlbGVjdGlvbkNoYW5nZWQsXG4gIGd3X29uUmFuZ2VTZWxlY3Rpb25DaGFuZ2VkLFxuICBnd19vbkNlbGxDbGlja0V2ZW50LFxuICBnd19vbkNlbGxFZGl0aW5nRXZlbnQsXG4gIGd3X29uUm93RWRpdGluZ0V2ZW50LFxuICBnd19vblJlYWR5RXZlbnQsXG4gIGd3X2RlYm91bmNlLFxufVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19zZW5kRXZlbnQsIGd3X3BhcnNlTm9kZUZyb21FdmVudCB9IGZyb20gJy4vdXRpbGl0aWVzJ1xuaW1wb3J0IHsgZ3dfZXNjYXBlLCBnd19nZXRHcmlkIH0gZnJvbSAnYXBpL3V0aWxpdGllcydcbmltcG9ydCB7XG4gIEdXX0VWRU5UX1JPV19DTElDSyxcbiAgR1dfRVZFTlRfUk9XX0RPVUJMRV9DTElDSyxcbiAgR1dfRVZFTlRfUk9XX1NFTEVDVCxcbiAgR1dfRVZFTlRfQ0VMTF9DTElDSyxcbiAgR1dfRVZFTlRfQ0VMTF9ET1VCTEVfQ0xJQ0ssXG4gIEdXX0VWRU5UX1JBTkdFX1NFTEVDVElPTl9DSEFOR0VELFxufSBmcm9tICcuL2NvbnN0YW50cydcblxuY29uc3QgQ0VMTF9DTElDS0lOR19FVkVOVFNfTUFQID0ge1xuICBjZWxsQ2xpY2tlZDogR1dfRVZFTlRfQ0VMTF9DTElDSyxcbiAgY2VsbERvdWJsZUNsaWNrZWQ6IEdXX0VWRU5UX0NFTExfRE9VQkxFX0NMSUNLLFxufVxuXG4vKipcbiAqIEFuIGhhbmRsZXIgZm9yIHRoZSBncmlkIGByb3dEb3VibGVDbGlja2VkYCBldmVudFxuICpcbiAqIFRoZSBmdW5jdGlvbiB3aWxsIHNlbmQgYSBiYmogZXZlbnQgd2l0aCBgR1dfTk9ERWAgYXMgcGF5bG9hZFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBlIFRoZSBldmVudCdzIHBheWxvYWRcbiAqXG4gKiBAbGlzdGVucyBhZ0dyaWQucm93RG91YmxlQ2xpY2tlZFxuICogQGZpcmVzIGd3LnJvd0RvdWJsZUNsaWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19vblJvd0RvdWJsZUNsaWNrZWQoZSkge1xuICBjb25zdCBjb250ZXh0ID0gZS5hcGkuZ3JpZE9wdGlvbnNXcmFwcGVyLmdyaWRPcHRpb25zLmNvbnRleHRcbiAgZ3dfc2VuZEV2ZW50KFxuICAgIGNvbnRleHQsXG4gICAge1xuICAgICAgdHlwZTogJ2d3LnJvd0RvdWJsZUNsaWNrJyxcbiAgICAgIGRldGFpbDogJycsXG4gICAgfSxcbiAgICBHV19FVkVOVF9ST1dfRE9VQkxFX0NMSUNLXG4gIClcbn1cbi8qKlxuICogQSBoYW5kbGVyIGZvciB0aGUgZ3JpZCBgcm93Q2xpY2tlZGAgZXZlbnRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZSAgVGhlIGV2ZW50IHBheWxvYWRcbiAqXG4gKiBAbGlzdGVucyBhZ0dyaWQucm93Q2xpY2tlZFxuICogQGZpcmVzIGd3LnJvd0NsaWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19vblJvd0NsaWNrZWQoZSkge1xuICBjb25zdCBjb250ZXh0ID0gZS5hcGkuZ3JpZE9wdGlvbnNXcmFwcGVyLmdyaWRPcHRpb25zLmNvbnRleHRcbiAgZ3dfc2VuZEV2ZW50KFxuICAgIGNvbnRleHQsXG4gICAge1xuICAgICAgdHlwZTogJ2d3LnJvd0NsaWNrJyxcbiAgICAgIGRldGFpbDogJycsXG4gICAgfSxcbiAgICBHV19FVkVOVF9ST1dfQ0xJQ0tcbiAgKVxufVxuXG4vKipcbiAqIEEgaGFuZGxlciBmb3IgdGhlIGdyaWQgYHNlbGVjdGlvbkNoYW5nZWRgIGV2ZW50XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGUgIFRoZSBldmVudCBwYXlsb2FkXG4gKlxuICogQGxpc3RlbnMgYWdHcmlkLnNlbGVjdGlvbkNoYW5nZWRcbiAqIEBmaXJlcyBndy5yb3dTZWxlY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X29uU2VsZWN0aW9uQ2hhbmdlZChlKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBlLmFwaS5ncmlkT3B0aW9uc1dyYXBwZXIuZ3JpZE9wdGlvbnMuY29udGV4dFxuICBnd19zZW5kRXZlbnQoXG4gICAgY29udGV4dCxcbiAgICB7XG4gICAgICB0eXBlOiAnZ3cucm93U2VsZWN0JyxcbiAgICAgIGRldGFpbDogJycsXG4gICAgfSxcbiAgICBHV19FVkVOVF9ST1dfU0VMRUNUXG4gIClcbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgZm9yIHRoZSBncmlkIGByYW5nZVNlbGVjdGlvbkNoYW5nZWRgIGV2ZW50XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGVcbiAqXG4gKiBAbGlzdGVucyBhZ0dyaWQucmFuZ2VTZWxlY3Rpb25DaGFuZ2VkXG4gKiBAZmlyZXMgZ3cucmFuZ2VTZWxlY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X29uUmFuZ2VTZWxlY3Rpb25DaGFuZ2VkKGUpIHtcbiAgY29uc3QgY29udGV4dCA9IGUuYXBpLmdyaWRPcHRpb25zV3JhcHBlci5ncmlkT3B0aW9ucy5jb250ZXh0XG4gIGd3X3NlbmRFdmVudChcbiAgICBjb250ZXh0LFxuICAgIHtcbiAgICAgIHR5cGU6ICdndy5yYW5nZVNlbGVjdGlvbicsXG4gICAgICBkZXRhaWw6ICcnLFxuICAgIH0sXG4gICAgR1dfRVZFTlRfUkFOR0VfU0VMRUNUSU9OX0NIQU5HRURcbiAgKVxufVxuXG4vKipcbiAqIEEgaGFuZGxlciBmb3IgdGhlIGdyaWQgYGNlbGxDbGlja0V2ZW50YCAmIGBjZWxsRG91YmxlQ2xpY2tlZGAgZXZlbnRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtPYmplY3R9IGUgIFRoZSBldmVudCBwYXlsb2FkXG4gKlxuICogQGxpc3RlbnMgYWdHcmlkLmNlbGxDbGlja0V2ZW50XG4gKiBAbGlzdGVucyBhZ0dyaWQuY2VsbERvdWJsZUNsaWNrZWRcbiAqXG4gKiBAZmlyZXMgZ3cuY2VsbENsaWNrZWRcbiAqIEBmaXJlcyBndy5jZWxsRG91YmxlQ2xpY2tlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfb25DZWxsQ2xpY2tFdmVudChpZCwgZSkge1xuICBjb25zdCBwYXJzZWQgPSBnd19wYXJzZU5vZGVGcm9tRXZlbnQoZSlcblxuICBpZiAocGFyc2VkKSB7XG4gICAgY29uc3QgdHlwZSA9IGUudHlwZVxuICAgIGd3X3NlbmRFdmVudChcbiAgICAgIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29udGV4dCxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogYGd3LiR7ZS50eXBlfWAsXG4gICAgICAgIGRldGFpbDogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIHI6IHBhcnNlZCwgLy8gcm93XG4gICAgICAgICAgdjogZ3dfZXNjYXBlKGUudmFsdWUpLCAvLyBuZXcgdmFsdWVcbiAgICAgICAgICBvOiBnd19lc2NhcGUoZS52YWx1ZSksIC8vIG9kbCB2YWx1ZVxuICAgICAgICAgIGM6IGUuY29sdW1uLmNvbElkLCAvLyBjb2x1bW5zXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICAgIENFTExfQ0xJQ0tJTkdfRVZFTlRTX01BUFt0eXBlXVxuICAgIClcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zICovXG4vKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGd3X3NlbmRFdmVudCwgZ3dfcGFyc2VOb2RlRnJvbUV2ZW50IH0gZnJvbSAnLi91dGlsaXRpZXMnXG5pbXBvcnQgeyBnd19lc2NhcGUsIGd3X2dldEdyaWQgfSBmcm9tICdhcGkvdXRpbGl0aWVzJ1xuaW1wb3J0IHtcbiAgR1dfRVZFTlRfQ0VMTF9FRElUSU5HX1NUQVJURUQsXG4gIEdXX0VWRU5UX0NFTExfRURJVElOR19TVE9QUEVELFxuICBHV19FVkVOVF9DRUxMX1ZBTFVFX0NIQU5HRUQsXG4gIEdXX0VWRU5UX1JPV19FRElUSU5HX1NUQVJURUQsXG4gIEdXX0VWRU5UX1JPV19FRElUSU5HX1NUT1BQRUQsXG4gIEdXX0VWRU5UX1JPV19WQUxVRV9DSEFOR0VELFxufSBmcm9tICcuL2NvbnN0YW50cydcblxuY29uc3QgQ0VMTF9FRElUSU5HX0VWRU5UU19NQVAgPSB7XG4gIGNlbGxFZGl0aW5nU3RhcnRlZDogR1dfRVZFTlRfQ0VMTF9FRElUSU5HX1NUQVJURUQsXG4gIGNlbGxFZGl0aW5nU3RvcHBlZDogR1dfRVZFTlRfQ0VMTF9FRElUSU5HX1NUT1BQRUQsXG4gIGNlbGxWYWx1ZUNoYW5nZWQ6IEdXX0VWRU5UX0NFTExfVkFMVUVfQ0hBTkdFRCxcbn1cblxuY29uc3QgUk9XX0VESVRJTkdfRVZFTlRTX01BUCA9IHtcbiAgcm93RWRpdGluZ1N0YXJ0ZWQ6IEdXX0VWRU5UX1JPV19FRElUSU5HX1NUQVJURUQsXG4gIHJvd0VkaXRpbmdTdG9wcGVkOiBHV19FVkVOVF9ST1dfRURJVElOR19TVE9QUEVELFxuICByb3dWYWx1ZUNoYW5nZWQ6IEdXX0VWRU5UX1JPV19WQUxVRV9DSEFOR0VELFxufVxuXG4vKipcbiAqIEFuIGhhbmRsZXIgZm9yIHRoZSBncmlkIGBjZWxsRWRpdGluZ1N0YXJ0ZWRgICwgYGNlbGxFZGl0aW5nU3RvcHBlZGAgYW5kXG4gKiBgY2VsbFZhbHVlQ2hhbmdlZGAgZXZlbnRzXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBlICBUaGUgZXZlbnQgcGF5bG9hZFxuICpcbiAqIEBsaXN0ZW5zIGFnR3JpZC5jZWxsRWRpdGluZ1N0YXJ0ZWRcbiAqIEBsaXN0ZW5zIGFnR3JpZC5jZWxsRWRpdGluZ1N0b3BwZWRcbiAqIEBsaXN0ZW5zIGFnR3JpZC5jZWxsVmFsdWVDaGFuZ2VkXG4gKlxuICogQGZpcmVzIGd3LmNlbGxFZGl0aW5nU3RhcnRlZFxuICogQGZpcmVzIGd3LmNlbGxFZGl0aW5nU3RvcHBlZFxuICogQGZpcmVzIGd3LmNlbGxWYWx1ZUNoYW5nZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X29uQ2VsbEVkaXRpbmdFdmVudChpZCwgZSkge1xuICBjb25zdCB2YWx1ZSA9IGUuaGFzT3duUHJvcGVydHkoJ25ld1ZhbHVlJylcbiAgICA/IGd3X2VzY2FwZShlLm5ld1ZhbHVlKVxuICAgIDogZ3dfZXNjYXBlKGUudmFsdWUpXG4gIGNvbnN0IG9sZFZhbHVlID0gZS5oYXNPd25Qcm9wZXJ0eSgnb2xkVmFsdWUnKVxuICAgID8gZ3dfZXNjYXBlKGUub2xkVmFsdWUpXG4gICAgOiBlLmhhc093blByb3BlcnR5KCduZXdWYWx1ZScpXG4gICAgPyBnd19lc2NhcGUoZS5uZXdWYWx1ZSlcbiAgICA6IGd3X2VzY2FwZShlLnZhbHVlKVxuXG4gIGlmICh2YWx1ZSA9PSBvbGRWYWx1ZSAmJiBlLnR5cGUgPT09ICdjZWxsVmFsdWVDaGFuZ2VkJykge1xuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgcGFyc2VkID0gZ3dfcGFyc2VOb2RlRnJvbUV2ZW50KGUpXG4gIGNvbnN0IHR5cGUgPSBlLnR5cGVcbiAgY29uc3QgY29sSWQgPSBlLmNvbHVtbi5jb2xJZFxuXG4gIGlmIChwYXJzZWQpIHtcbiAgICBnd19zZW5kRXZlbnQoXG4gICAgICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbnRleHQsXG4gICAgICB7XG4gICAgICAgIHR5cGU6IGBndy4ke3R5cGV9YCxcbiAgICAgICAgZGV0YWlsOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgcjogeyAuLi5wYXJzZWQsIC4uLnsgY3I6IGUuZGF0YSB9IH0sIC8vIHJvdyAod2UgYWx3YXlzIGluY2x1ZGUgdGhlIGNsaWVudCByb3cgZGF0YSlcbiAgICAgICAgICB2OiB2YWx1ZSwgLy8gbmV3IHZhbHVlXG4gICAgICAgICAgbzogb2xkVmFsdWUsIC8vIG9sZCB2YWx1ZVxuICAgICAgICAgIGM6IGNvbElkLCAvLyBjb2x1bW5cbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgICAgQ0VMTF9FRElUSU5HX0VWRU5UU19NQVBbdHlwZV1cbiAgICApXG4gIH1cbn1cblxuLyoqXG4gKiBBbiBoYW5kbGVyIGZvciB0aGUgZ3JpZCBgcm93RWRpdGluZ1N0YXJ0ZWRgICwgYHJvd0VkaXRpbmdTdG9wcGVkYCBhbmQgYHJvd1ZhbHVlQ2hhbmdlZGAgZXZlbnRzXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBlICBUaGUgZXZlbnQgcGF5bG9hZFxuICpcbiAqIEBsaXN0ZW5zIGFnR3JpZC5yb3dFZGl0aW5nU3RhcnRlZFxuICogQGxpc3RlbnMgYWdHcmlkLnJvd0VkaXRpbmdTdG9wcGVkXG4gKiBAbGlzdGVucyBhZ0dyaWQucm93VmFsdWVDaGFuZ2VkXG4gKlxuICogQGZpcmVzIGd3LnJvd0VkaXRpbmdTdGFydGVkXG4gKiBAZmlyZXMgZ3cucm93RWRpdGluZ1N0b3BwZWRcbiAqIEBmaXJlcyBndy5yb3dWYWx1ZUNoYW5nZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X29uUm93RWRpdGluZ0V2ZW50KGlkLCBlKSB7XG4gIGNvbnN0IHBhcnNlZCA9IGd3X3BhcnNlTm9kZUZyb21FdmVudChlKVxuXG4gIGlmIChwYXJzZWQpIHtcbiAgICBjb25zdCB0eXBlID0gZS50eXBlXG4gICAgZ3dfc2VuZEV2ZW50KFxuICAgICAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb250ZXh0LFxuICAgICAge1xuICAgICAgICB0eXBlOiBgZ3cuJHtlLnR5cGV9YCxcbiAgICAgICAgZGV0YWlsOiBKU09OLnN0cmluZ2lmeSh7IC4uLnBhcnNlZCwgLi4ueyBjcjogZS5kYXRhIH0gfSksIC8vIHJvdyAod2UgYWx3YXlzIGluY2x1ZGUgdGhlIGNsaWVudCByb3cgZGF0YSlcbiAgICAgIH0sXG4gICAgICBST1dfRURJVElOR19FVkVOVFNfTUFQW3R5cGVdXG4gICAgKVxuICB9XG59XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGd3X2RlYm91bmNlIH0gZnJvbSAnLi91dGlsaXRpZXMnXG5pbXBvcnQgeyBnd19vblN0YXRlQ2hhbmdlZCB9IGZyb20gJy4vc3RhdGUnXG5pbXBvcnQgeyBnd19vbktleWRvd24gfSBmcm9tICcuL2tleWJvYXJkJ1xuaW1wb3J0IHsgZ3dfZ2V0R3JpZCB9IGZyb20gJ2FwaS91dGlsaXRpZXMnXG5cbi8qKlxuICogT24gUmVhZHkgRXZlbnRcbiAqXG4gKiBUaGUgbWV0aG9kIHdpbGwgaWdub3JlIGZpcnN0IHJlYWR5IGV2ZW50IGFuZCB0aGVuIHJlZ2lzdGVyIGEgZGVib3VuY2VkIHN0YXRlXG4gKiBjYWxsYmFjayB0byBzZW5kIHN0YXRlIGV2ZW50cyB0byBCQmpcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtPYmplY3R9IGUgIFRoZSBldmVudCBwYXlsb2FkXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuZXhwb3J0IGZ1bmN0aW9uIGd3X29uUmVhZHlFdmVudChpZCwgX2UpIHtcbiAgY29uc3QgZ3JpZCA9IGd3X2dldEdyaWQoaWQpXG5cbiAgLy8gcmVnaXN0ZXIgc3RhdGUgZGVib3VuY2UgbW9uaXRvclxuICBjb25zdCBzdGF0ZURlYm91bmNlID0gZ3dfZGVib3VuY2UoY2hhbmdlRXZlbnQgPT4ge1xuICAgIGd3X29uU3RhdGVDaGFuZ2VkKGlkLCBjaGFuZ2VFdmVudClcbiAgfSwgNTAwKVxuXG4gIDtbXG4gICAgJ3NvcnRDaGFuZ2VkJyxcbiAgICAnZmlsdGVyQ2hhbmdlZCcsXG4gICAgJ2NvbHVtblZpc2libGUnLFxuICAgICdjb2x1bW5QaW5uZWQnLFxuICAgICdjb2x1bW5SZXNpemVkJyxcbiAgICAnY29sdW1uTW92ZWQnLFxuICAgICduZXdDb2x1bW5zTG9hZGVkJyxcbiAgICAnZ3JpZENvbHVtbnNDaGFuZ2VkJyxcbiAgICAnZGlzcGxheWVkQ29sdW1uc0NoYW5nZWQnLFxuICAgICd2aXJ0dWFsQ29sdW1uc0NoYW5nZWQnLFxuICAgICdjb2x1bW5FdmVyeXRoaW5nQ2hhbmdlZCcsXG4gICAgLy8nZ3JpZFNpemVDaGFuZ2VkJyxcbiAgICAnZXhwYW5kT3JDb2xsYXBzZUFsbCcsXG4gICAgLy8ndG9vbFBhbmVsVmlzaWJsZUNoYW5nZWQnXG4gIF0uZm9yRWFjaChldmVudCA9PiB7XG4gICAgZ3JpZC5vcHRpb25zLmFwaS5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBzdGF0ZURlYm91bmNlKVxuICB9KVxuXG4gIC8vIHJlZ2lzdGVyIGtleWJvYXJkIGRlYm91bmNlIG1vbml0b3JcbiAgY29uc3Qga2V5Ym9hcmREZWJvdW5jZSA9IGd3X2RlYm91bmNlKGtleWRvd25FdmVudCA9PiB7XG4gICAgZ3dfb25LZXlkb3duKGlkLCBrZXlkb3duRXZlbnQpXG4gIH0sIDUwMClcblxuICBncmlkLmNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywga2V5Ym9hcmREZWJvdW5jZSlcbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfc2VuZEV2ZW50IH0gZnJvbSAnLi91dGlsaXRpZXMnXG5pbXBvcnQgeyBnd19nZXRHcmlkIH0gZnJvbSAnYXBpL3V0aWxpdGllcydcbmltcG9ydCB7IEdXX0VWRU5UX0dSSURfU1RBVEVfQ0hBTkdFIH0gZnJvbSAnLi9jb25zdGFudHMnXG5cbi8qKlxuICogQW4gaGFuZGxlciBmb3IgdGhlIGdyaWQgYHN0YXRlQ2hhbmdlZGAgZXZlbnRzXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBlICBUaGUgZXZlbnQgcGF5bG9hZFxuICpcbiAqIEBsaXN0ZW5zIGFnR3JpZC5zdGF0ZUNoYW5nZWRcbiAqIEBsaXN0ZW5zIGFnR3JpZC5yb3dFZGl0aW5nU3RvcHBlZFxuICpcbiAqIEBmaXJlcyBndy5zdGF0ZUNoYW5nZWRcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5leHBvcnQgZnVuY3Rpb24gZ3dfb25TdGF0ZUNoYW5nZWQoaWQsIF9lKSB7XG4gIGd3X3NlbmRFdmVudChcbiAgICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbnRleHQsXG4gICAge1xuICAgICAgdHlwZTogJ2d3LnN0YXRlQ2hhbmdlZCcsXG4gICAgICBkZXRhaWw6IFtdLFxuICAgIH0sXG4gICAgR1dfRVZFTlRfR1JJRF9TVEFURV9DSEFOR0VcbiAgKVxufVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19zZW5kRXZlbnQgfSBmcm9tICcuL3V0aWxpdGllcydcbmltcG9ydCB7IEdXX0VWRU5UX0tFWVBSRVNTIH0gZnJvbSAnLi9jb25zdGFudHMnXG5pbXBvcnQgeyBnd19nZXRHcmlkIH0gZnJvbSAnYXBpL3V0aWxpdGllcydcblxuLyoqXG4gKiBDb21wb3NlIGEgbW9kZWwgb2YgdGhlIGtleWRvd24gZXZlbnQgYW5kIHNlbmQgaXQgdG8gQkJqXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkICB0aGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge0V2ZW50fSBrZXlkb3duRXZlbnQga2V5ZG93biBldmVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfb25LZXlkb3duKGlkLCBrZXlkb3duRXZlbnQpIHtcbiAgZ3dfc2VuZEV2ZW50KFxuICAgIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29udGV4dCxcbiAgICB7XG4gICAgICB0eXBlOiBgZ3cua2V5cHJlc3NgLFxuICAgICAgZGV0YWlsOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGM6IGtleWRvd25FdmVudC5rZXksXG4gICAgICAgIGtjOiBrZXlkb3duRXZlbnQud2hpY2ggfHwgTnVtYmVyKGtleWRvd25FdmVudC5rZXlDb2RlKSxcbiAgICAgICAgYWs6IGtleWRvd25FdmVudC5hbHRLZXksXG4gICAgICAgIHNrOiBrZXlkb3duRXZlbnQuc2hpZnRLZXksXG4gICAgICAgIGNrOiBrZXlkb3duRXZlbnQuY3RybEtleSxcbiAgICAgIH0pLFxuICAgIH0sXG4gICAgR1dfRVZFTlRfS0VZUFJFU1NcbiAgKVxufVxuIiwiaW1wb3J0IGFzc2lnbkluV2l0aCBmcm9tICcuL2Fzc2lnbkluV2l0aC5qcyc7XG5pbXBvcnQgYXR0ZW1wdCBmcm9tICcuL2F0dGVtcHQuanMnO1xuaW1wb3J0IGJhc2VWYWx1ZXMgZnJvbSAnLi9fYmFzZVZhbHVlcy5qcyc7XG5pbXBvcnQgY3VzdG9tRGVmYXVsdHNBc3NpZ25JbiBmcm9tICcuL19jdXN0b21EZWZhdWx0c0Fzc2lnbkluLmpzJztcbmltcG9ydCBlc2NhcGVTdHJpbmdDaGFyIGZyb20gJy4vX2VzY2FwZVN0cmluZ0NoYXIuanMnO1xuaW1wb3J0IGlzRXJyb3IgZnJvbSAnLi9pc0Vycm9yLmpzJztcbmltcG9ydCBpc0l0ZXJhdGVlQ2FsbCBmcm9tICcuL19pc0l0ZXJhdGVlQ2FsbC5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuaW1wb3J0IHJlSW50ZXJwb2xhdGUgZnJvbSAnLi9fcmVJbnRlcnBvbGF0ZS5qcyc7XG5pbXBvcnQgdGVtcGxhdGVTZXR0aW5ncyBmcm9tICcuL3RlbXBsYXRlU2V0dGluZ3MuanMnO1xuaW1wb3J0IHRvU3RyaW5nIGZyb20gJy4vdG9TdHJpbmcuanMnO1xuXG4vKiogVXNlZCB0byBtYXRjaCBlbXB0eSBzdHJpbmcgbGl0ZXJhbHMgaW4gY29tcGlsZWQgdGVtcGxhdGUgc291cmNlLiAqL1xudmFyIHJlRW1wdHlTdHJpbmdMZWFkaW5nID0gL1xcYl9fcCBcXCs9ICcnOy9nLFxuICAgIHJlRW1wdHlTdHJpbmdNaWRkbGUgPSAvXFxiKF9fcCBcXCs9KSAnJyBcXCsvZyxcbiAgICByZUVtcHR5U3RyaW5nVHJhaWxpbmcgPSAvKF9fZVxcKC4qP1xcKXxcXGJfX3RcXCkpIFxcK1xcbicnOy9nO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2hcbiAqIFtFUyB0ZW1wbGF0ZSBkZWxpbWl0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10ZW1wbGF0ZS1saXRlcmFsLWxleGljYWwtY29tcG9uZW50cykuXG4gKi9cbnZhciByZUVzVGVtcGxhdGUgPSAvXFwkXFx7KFteXFxcXH1dKig/OlxcXFwuW15cXFxcfV0qKSopXFx9L2c7XG5cbi8qKiBVc2VkIHRvIGVuc3VyZSBjYXB0dXJpbmcgb3JkZXIgb2YgdGVtcGxhdGUgZGVsaW1pdGVycy4gKi9cbnZhciByZU5vTWF0Y2ggPSAvKCReKS87XG5cbi8qKiBVc2VkIHRvIG1hdGNoIHVuZXNjYXBlZCBjaGFyYWN0ZXJzIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy4gKi9cbnZhciByZVVuZXNjYXBlZFN0cmluZyA9IC9bJ1xcblxcclxcdTIwMjhcXHUyMDI5XFxcXF0vZztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY29tcGlsZWQgdGVtcGxhdGUgZnVuY3Rpb24gdGhhdCBjYW4gaW50ZXJwb2xhdGUgZGF0YSBwcm9wZXJ0aWVzXG4gKiBpbiBcImludGVycG9sYXRlXCIgZGVsaW1pdGVycywgSFRNTC1lc2NhcGUgaW50ZXJwb2xhdGVkIGRhdGEgcHJvcGVydGllcyBpblxuICogXCJlc2NhcGVcIiBkZWxpbWl0ZXJzLCBhbmQgZXhlY3V0ZSBKYXZhU2NyaXB0IGluIFwiZXZhbHVhdGVcIiBkZWxpbWl0ZXJzLiBEYXRhXG4gKiBwcm9wZXJ0aWVzIG1heSBiZSBhY2Nlc3NlZCBhcyBmcmVlIHZhcmlhYmxlcyBpbiB0aGUgdGVtcGxhdGUuIElmIGEgc2V0dGluZ1xuICogb2JqZWN0IGlzIGdpdmVuLCBpdCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgYF8udGVtcGxhdGVTZXR0aW5nc2AgdmFsdWVzLlxuICpcbiAqICoqTm90ZToqKiBJbiB0aGUgZGV2ZWxvcG1lbnQgYnVpbGQgYF8udGVtcGxhdGVgIHV0aWxpemVzXG4gKiBbc291cmNlVVJMc10oaHR0cDovL3d3dy5odG1sNXJvY2tzLmNvbS9lbi90dXRvcmlhbHMvZGV2ZWxvcGVydG9vbHMvc291cmNlbWFwcy8jdG9jLXNvdXJjZXVybClcbiAqIGZvciBlYXNpZXIgZGVidWdnaW5nLlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHByZWNvbXBpbGluZyB0ZW1wbGF0ZXMgc2VlXG4gKiBbbG9kYXNoJ3MgY3VzdG9tIGJ1aWxkcyBkb2N1bWVudGF0aW9uXShodHRwczovL2xvZGFzaC5jb20vY3VzdG9tLWJ1aWxkcykuXG4gKlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQ2hyb21lIGV4dGVuc2lvbiBzYW5kYm94ZXMgc2VlXG4gKiBbQ2hyb21lJ3MgZXh0ZW5zaW9ucyBkb2N1bWVudGF0aW9uXShodHRwczovL2RldmVsb3Blci5jaHJvbWUuY29tL2V4dGVuc2lvbnMvc2FuZGJveGluZ0V2YWwpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgdGVtcGxhdGUgc3RyaW5nLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gKiBAcGFyYW0ge1JlZ0V4cH0gW29wdGlvbnMuZXNjYXBlPV8udGVtcGxhdGVTZXR0aW5ncy5lc2NhcGVdXG4gKiAgVGhlIEhUTUwgXCJlc2NhcGVcIiBkZWxpbWl0ZXIuXG4gKiBAcGFyYW0ge1JlZ0V4cH0gW29wdGlvbnMuZXZhbHVhdGU9Xy50ZW1wbGF0ZVNldHRpbmdzLmV2YWx1YXRlXVxuICogIFRoZSBcImV2YWx1YXRlXCIgZGVsaW1pdGVyLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLmltcG9ydHM9Xy50ZW1wbGF0ZVNldHRpbmdzLmltcG9ydHNdXG4gKiAgQW4gb2JqZWN0IHRvIGltcG9ydCBpbnRvIHRoZSB0ZW1wbGF0ZSBhcyBmcmVlIHZhcmlhYmxlcy5cbiAqIEBwYXJhbSB7UmVnRXhwfSBbb3B0aW9ucy5pbnRlcnBvbGF0ZT1fLnRlbXBsYXRlU2V0dGluZ3MuaW50ZXJwb2xhdGVdXG4gKiAgVGhlIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuc291cmNlVVJMPSd0ZW1wbGF0ZVNvdXJjZXNbbl0nXVxuICogIFRoZSBzb3VyY2VVUkwgb2YgdGhlIGNvbXBpbGVkIHRlbXBsYXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnZhcmlhYmxlPSdvYmonXVxuICogIFRoZSBkYXRhIG9iamVjdCB2YXJpYWJsZSBuYW1lLlxuICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgY29tcGlsZWQgdGVtcGxhdGUgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIFVzZSB0aGUgXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlciB0byBjcmVhdGUgYSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hlbGxvIDwlPSB1c2VyICU+IScpO1xuICogY29tcGlsZWQoeyAndXNlcic6ICdmcmVkJyB9KTtcbiAqIC8vID0+ICdoZWxsbyBmcmVkISdcbiAqXG4gKiAvLyBVc2UgdGhlIEhUTUwgXCJlc2NhcGVcIiBkZWxpbWl0ZXIgdG8gZXNjYXBlIGRhdGEgcHJvcGVydHkgdmFsdWVzLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPGI+PCUtIHZhbHVlICU+PC9iPicpO1xuICogY29tcGlsZWQoeyAndmFsdWUnOiAnPHNjcmlwdD4nIH0pO1xuICogLy8gPT4gJzxiPiZsdDtzY3JpcHQmZ3Q7PC9iPidcbiAqXG4gKiAvLyBVc2UgdGhlIFwiZXZhbHVhdGVcIiBkZWxpbWl0ZXIgdG8gZXhlY3V0ZSBKYXZhU2NyaXB0IGFuZCBnZW5lcmF0ZSBIVE1MLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPCUgXy5mb3JFYWNoKHVzZXJzLCBmdW5jdGlvbih1c2VyKSB7ICU+PGxpPjwlLSB1c2VyICU+PC9saT48JSB9KTsgJT4nKTtcbiAqIGNvbXBpbGVkKHsgJ3VzZXJzJzogWydmcmVkJywgJ2Jhcm5leSddIH0pO1xuICogLy8gPT4gJzxsaT5mcmVkPC9saT48bGk+YmFybmV5PC9saT4nXG4gKlxuICogLy8gVXNlIHRoZSBpbnRlcm5hbCBgcHJpbnRgIGZ1bmN0aW9uIGluIFwiZXZhbHVhdGVcIiBkZWxpbWl0ZXJzLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPCUgcHJpbnQoXCJoZWxsbyBcIiArIHVzZXIpOyAlPiEnKTtcbiAqIGNvbXBpbGVkKHsgJ3VzZXInOiAnYmFybmV5JyB9KTtcbiAqIC8vID0+ICdoZWxsbyBiYXJuZXkhJ1xuICpcbiAqIC8vIFVzZSB0aGUgRVMgdGVtcGxhdGUgbGl0ZXJhbCBkZWxpbWl0ZXIgYXMgYW4gXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlci5cbiAqIC8vIERpc2FibGUgc3VwcG9ydCBieSByZXBsYWNpbmcgdGhlIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyAkeyB1c2VyIH0hJyk7XG4gKiBjb21waWxlZCh7ICd1c2VyJzogJ3BlYmJsZXMnIH0pO1xuICogLy8gPT4gJ2hlbGxvIHBlYmJsZXMhJ1xuICpcbiAqIC8vIFVzZSBiYWNrc2xhc2hlcyB0byB0cmVhdCBkZWxpbWl0ZXJzIGFzIHBsYWluIHRleHQuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCc8JT0gXCJcXFxcPCUtIHZhbHVlICVcXFxcPlwiICU+Jyk7XG4gKiBjb21waWxlZCh7ICd2YWx1ZSc6ICdpZ25vcmVkJyB9KTtcbiAqIC8vID0+ICc8JS0gdmFsdWUgJT4nXG4gKlxuICogLy8gVXNlIHRoZSBgaW1wb3J0c2Agb3B0aW9uIHRvIGltcG9ydCBgalF1ZXJ5YCBhcyBganFgLlxuICogdmFyIHRleHQgPSAnPCUganEuZWFjaCh1c2VycywgZnVuY3Rpb24odXNlcikgeyAlPjxsaT48JS0gdXNlciAlPjwvbGk+PCUgfSk7ICU+JztcbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUodGV4dCwgeyAnaW1wb3J0cyc6IHsgJ2pxJzogalF1ZXJ5IH0gfSk7XG4gKiBjb21waWxlZCh7ICd1c2Vycyc6IFsnZnJlZCcsICdiYXJuZXknXSB9KTtcbiAqIC8vID0+ICc8bGk+ZnJlZDwvbGk+PGxpPmJhcm5leTwvbGk+J1xuICpcbiAqIC8vIFVzZSB0aGUgYHNvdXJjZVVSTGAgb3B0aW9uIHRvIHNwZWNpZnkgYSBjdXN0b20gc291cmNlVVJMIGZvciB0aGUgdGVtcGxhdGUuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyA8JT0gdXNlciAlPiEnLCB7ICdzb3VyY2VVUkwnOiAnL2Jhc2ljL2dyZWV0aW5nLmpzdCcgfSk7XG4gKiBjb21waWxlZChkYXRhKTtcbiAqIC8vID0+IEZpbmQgdGhlIHNvdXJjZSBvZiBcImdyZWV0aW5nLmpzdFwiIHVuZGVyIHRoZSBTb3VyY2VzIHRhYiBvciBSZXNvdXJjZXMgcGFuZWwgb2YgdGhlIHdlYiBpbnNwZWN0b3IuXG4gKlxuICogLy8gVXNlIHRoZSBgdmFyaWFibGVgIG9wdGlvbiB0byBlbnN1cmUgYSB3aXRoLXN0YXRlbWVudCBpc24ndCB1c2VkIGluIHRoZSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hpIDwlPSBkYXRhLnVzZXIgJT4hJywgeyAndmFyaWFibGUnOiAnZGF0YScgfSk7XG4gKiBjb21waWxlZC5zb3VyY2U7XG4gKiAvLyA9PiBmdW5jdGlvbihkYXRhKSB7XG4gKiAvLyAgIHZhciBfX3QsIF9fcCA9ICcnO1xuICogLy8gICBfX3AgKz0gJ2hpICcgKyAoKF9fdCA9ICggZGF0YS51c2VyICkpID09IG51bGwgPyAnJyA6IF9fdCkgKyAnISc7XG4gKiAvLyAgIHJldHVybiBfX3A7XG4gKiAvLyB9XG4gKlxuICogLy8gVXNlIGN1c3RvbSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLlxuICogXy50ZW1wbGF0ZVNldHRpbmdzLmludGVycG9sYXRlID0gL3t7KFtcXHNcXFNdKz8pfX0vZztcbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hlbGxvIHt7IHVzZXIgfX0hJyk7XG4gKiBjb21waWxlZCh7ICd1c2VyJzogJ211c3RhY2hlJyB9KTtcbiAqIC8vID0+ICdoZWxsbyBtdXN0YWNoZSEnXG4gKlxuICogLy8gVXNlIHRoZSBgc291cmNlYCBwcm9wZXJ0eSB0byBpbmxpbmUgY29tcGlsZWQgdGVtcGxhdGVzIGZvciBtZWFuaW5nZnVsXG4gKiAvLyBsaW5lIG51bWJlcnMgaW4gZXJyb3IgbWVzc2FnZXMgYW5kIHN0YWNrIHRyYWNlcy5cbiAqIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICdqc3QuanMnKSwgJ1xcXG4gKiAgIHZhciBKU1QgPSB7XFxcbiAqICAgICBcIm1haW5cIjogJyArIF8udGVtcGxhdGUobWFpblRleHQpLnNvdXJjZSArICdcXFxuICogICB9O1xcXG4gKiAnKTtcbiAqL1xuZnVuY3Rpb24gdGVtcGxhdGUoc3RyaW5nLCBvcHRpb25zLCBndWFyZCkge1xuICAvLyBCYXNlZCBvbiBKb2huIFJlc2lnJ3MgYHRtcGxgIGltcGxlbWVudGF0aW9uXG4gIC8vIChodHRwOi8vZWpvaG4ub3JnL2Jsb2cvamF2YXNjcmlwdC1taWNyby10ZW1wbGF0aW5nLylcbiAgLy8gYW5kIExhdXJhIERva3Rvcm92YSdzIGRvVC5qcyAoaHR0cHM6Ly9naXRodWIuY29tL29sYWRvL2RvVCkuXG4gIHZhciBzZXR0aW5ncyA9IHRlbXBsYXRlU2V0dGluZ3MuaW1wb3J0cy5fLnRlbXBsYXRlU2V0dGluZ3MgfHwgdGVtcGxhdGVTZXR0aW5ncztcblxuICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc3RyaW5nLCBvcHRpb25zLCBndWFyZCkpIHtcbiAgICBvcHRpb25zID0gdW5kZWZpbmVkO1xuICB9XG4gIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gIG9wdGlvbnMgPSBhc3NpZ25JbldpdGgoe30sIG9wdGlvbnMsIHNldHRpbmdzLCBjdXN0b21EZWZhdWx0c0Fzc2lnbkluKTtcblxuICB2YXIgaW1wb3J0cyA9IGFzc2lnbkluV2l0aCh7fSwgb3B0aW9ucy5pbXBvcnRzLCBzZXR0aW5ncy5pbXBvcnRzLCBjdXN0b21EZWZhdWx0c0Fzc2lnbkluKSxcbiAgICAgIGltcG9ydHNLZXlzID0ga2V5cyhpbXBvcnRzKSxcbiAgICAgIGltcG9ydHNWYWx1ZXMgPSBiYXNlVmFsdWVzKGltcG9ydHMsIGltcG9ydHNLZXlzKTtcblxuICB2YXIgaXNFc2NhcGluZyxcbiAgICAgIGlzRXZhbHVhdGluZyxcbiAgICAgIGluZGV4ID0gMCxcbiAgICAgIGludGVycG9sYXRlID0gb3B0aW9ucy5pbnRlcnBvbGF0ZSB8fCByZU5vTWF0Y2gsXG4gICAgICBzb3VyY2UgPSBcIl9fcCArPSAnXCI7XG5cbiAgLy8gQ29tcGlsZSB0aGUgcmVnZXhwIHRvIG1hdGNoIGVhY2ggZGVsaW1pdGVyLlxuICB2YXIgcmVEZWxpbWl0ZXJzID0gUmVnRXhwKFxuICAgIChvcHRpb25zLmVzY2FwZSB8fCByZU5vTWF0Y2gpLnNvdXJjZSArICd8JyArXG4gICAgaW50ZXJwb2xhdGUuc291cmNlICsgJ3wnICtcbiAgICAoaW50ZXJwb2xhdGUgPT09IHJlSW50ZXJwb2xhdGUgPyByZUVzVGVtcGxhdGUgOiByZU5vTWF0Y2gpLnNvdXJjZSArICd8JyArXG4gICAgKG9wdGlvbnMuZXZhbHVhdGUgfHwgcmVOb01hdGNoKS5zb3VyY2UgKyAnfCQnXG4gICwgJ2cnKTtcblxuICAvLyBVc2UgYSBzb3VyY2VVUkwgZm9yIGVhc2llciBkZWJ1Z2dpbmcuXG4gIC8vIFRoZSBzb3VyY2VVUkwgZ2V0cyBpbmplY3RlZCBpbnRvIHRoZSBzb3VyY2UgdGhhdCdzIGV2YWwtZWQsIHNvIGJlIGNhcmVmdWxcbiAgLy8gd2l0aCBsb29rdXAgKGluIGNhc2Ugb2YgZS5nLiBwcm90b3R5cGUgcG9sbHV0aW9uKSwgYW5kIHN0cmlwIG5ld2xpbmVzIGlmIGFueS5cbiAgLy8gQSBuZXdsaW5lIHdvdWxkbid0IGJlIGEgdmFsaWQgc291cmNlVVJMIGFueXdheSwgYW5kIGl0J2QgZW5hYmxlIGNvZGUgaW5qZWN0aW9uLlxuICB2YXIgc291cmNlVVJMID0gaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCAnc291cmNlVVJMJylcbiAgICA/ICgnLy8jIHNvdXJjZVVSTD0nICtcbiAgICAgICAob3B0aW9ucy5zb3VyY2VVUkwgKyAnJykucmVwbGFjZSgvW1xcclxcbl0vZywgJyAnKSArXG4gICAgICAgJ1xcbicpXG4gICAgOiAnJztcblxuICBzdHJpbmcucmVwbGFjZShyZURlbGltaXRlcnMsIGZ1bmN0aW9uKG1hdGNoLCBlc2NhcGVWYWx1ZSwgaW50ZXJwb2xhdGVWYWx1ZSwgZXNUZW1wbGF0ZVZhbHVlLCBldmFsdWF0ZVZhbHVlLCBvZmZzZXQpIHtcbiAgICBpbnRlcnBvbGF0ZVZhbHVlIHx8IChpbnRlcnBvbGF0ZVZhbHVlID0gZXNUZW1wbGF0ZVZhbHVlKTtcblxuICAgIC8vIEVzY2FwZSBjaGFyYWN0ZXJzIHRoYXQgY2FuJ3QgYmUgaW5jbHVkZWQgaW4gc3RyaW5nIGxpdGVyYWxzLlxuICAgIHNvdXJjZSArPSBzdHJpbmcuc2xpY2UoaW5kZXgsIG9mZnNldCkucmVwbGFjZShyZVVuZXNjYXBlZFN0cmluZywgZXNjYXBlU3RyaW5nQ2hhcik7XG5cbiAgICAvLyBSZXBsYWNlIGRlbGltaXRlcnMgd2l0aCBzbmlwcGV0cy5cbiAgICBpZiAoZXNjYXBlVmFsdWUpIHtcbiAgICAgIGlzRXNjYXBpbmcgPSB0cnVlO1xuICAgICAgc291cmNlICs9IFwiJyArXFxuX19lKFwiICsgZXNjYXBlVmFsdWUgKyBcIikgK1xcbidcIjtcbiAgICB9XG4gICAgaWYgKGV2YWx1YXRlVmFsdWUpIHtcbiAgICAgIGlzRXZhbHVhdGluZyA9IHRydWU7XG4gICAgICBzb3VyY2UgKz0gXCInO1xcblwiICsgZXZhbHVhdGVWYWx1ZSArIFwiO1xcbl9fcCArPSAnXCI7XG4gICAgfVxuICAgIGlmIChpbnRlcnBvbGF0ZVZhbHVlKSB7XG4gICAgICBzb3VyY2UgKz0gXCInICtcXG4oKF9fdCA9IChcIiArIGludGVycG9sYXRlVmFsdWUgKyBcIikpID09IG51bGwgPyAnJyA6IF9fdCkgK1xcbidcIjtcbiAgICB9XG4gICAgaW5kZXggPSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7XG5cbiAgICAvLyBUaGUgSlMgZW5naW5lIGVtYmVkZGVkIGluIEFkb2JlIHByb2R1Y3RzIG5lZWRzIGBtYXRjaGAgcmV0dXJuZWQgaW5cbiAgICAvLyBvcmRlciB0byBwcm9kdWNlIHRoZSBjb3JyZWN0IGBvZmZzZXRgIHZhbHVlLlxuICAgIHJldHVybiBtYXRjaDtcbiAgfSk7XG5cbiAgc291cmNlICs9IFwiJztcXG5cIjtcblxuICAvLyBJZiBgdmFyaWFibGVgIGlzIG5vdCBzcGVjaWZpZWQgd3JhcCBhIHdpdGgtc3RhdGVtZW50IGFyb3VuZCB0aGUgZ2VuZXJhdGVkXG4gIC8vIGNvZGUgdG8gYWRkIHRoZSBkYXRhIG9iamVjdCB0byB0aGUgdG9wIG9mIHRoZSBzY29wZSBjaGFpbi5cbiAgLy8gTGlrZSB3aXRoIHNvdXJjZVVSTCwgd2UgdGFrZSBjYXJlIHRvIG5vdCBjaGVjayB0aGUgb3B0aW9uJ3MgcHJvdG90eXBlLFxuICAvLyBhcyB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgYSBjb2RlIGluamVjdGlvbiB2ZWN0b3IuXG4gIHZhciB2YXJpYWJsZSA9IGhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3ZhcmlhYmxlJykgJiYgb3B0aW9ucy52YXJpYWJsZTtcbiAgaWYgKCF2YXJpYWJsZSkge1xuICAgIHNvdXJjZSA9ICd3aXRoIChvYmopIHtcXG4nICsgc291cmNlICsgJ1xcbn1cXG4nO1xuICB9XG4gIC8vIENsZWFudXAgY29kZSBieSBzdHJpcHBpbmcgZW1wdHkgc3RyaW5ncy5cbiAgc291cmNlID0gKGlzRXZhbHVhdGluZyA/IHNvdXJjZS5yZXBsYWNlKHJlRW1wdHlTdHJpbmdMZWFkaW5nLCAnJykgOiBzb3VyY2UpXG4gICAgLnJlcGxhY2UocmVFbXB0eVN0cmluZ01pZGRsZSwgJyQxJylcbiAgICAucmVwbGFjZShyZUVtcHR5U3RyaW5nVHJhaWxpbmcsICckMTsnKTtcblxuICAvLyBGcmFtZSBjb2RlIGFzIHRoZSBmdW5jdGlvbiBib2R5LlxuICBzb3VyY2UgPSAnZnVuY3Rpb24oJyArICh2YXJpYWJsZSB8fCAnb2JqJykgKyAnKSB7XFxuJyArXG4gICAgKHZhcmlhYmxlXG4gICAgICA/ICcnXG4gICAgICA6ICdvYmogfHwgKG9iaiA9IHt9KTtcXG4nXG4gICAgKSArXG4gICAgXCJ2YXIgX190LCBfX3AgPSAnJ1wiICtcbiAgICAoaXNFc2NhcGluZ1xuICAgICAgID8gJywgX19lID0gXy5lc2NhcGUnXG4gICAgICAgOiAnJ1xuICAgICkgK1xuICAgIChpc0V2YWx1YXRpbmdcbiAgICAgID8gJywgX19qID0gQXJyYXkucHJvdG90eXBlLmpvaW47XFxuJyArXG4gICAgICAgIFwiZnVuY3Rpb24gcHJpbnQoKSB7IF9fcCArPSBfX2ouY2FsbChhcmd1bWVudHMsICcnKSB9XFxuXCJcbiAgICAgIDogJztcXG4nXG4gICAgKSArXG4gICAgc291cmNlICtcbiAgICAncmV0dXJuIF9fcFxcbn0nO1xuXG4gIHZhciByZXN1bHQgPSBhdHRlbXB0KGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBGdW5jdGlvbihpbXBvcnRzS2V5cywgc291cmNlVVJMICsgJ3JldHVybiAnICsgc291cmNlKVxuICAgICAgLmFwcGx5KHVuZGVmaW5lZCwgaW1wb3J0c1ZhbHVlcyk7XG4gIH0pO1xuXG4gIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uJ3Mgc291cmNlIGJ5IGl0cyBgdG9TdHJpbmdgIG1ldGhvZCBvclxuICAvLyB0aGUgYHNvdXJjZWAgcHJvcGVydHkgYXMgYSBjb252ZW5pZW5jZSBmb3IgaW5saW5pbmcgY29tcGlsZWQgdGVtcGxhdGVzLlxuICByZXN1bHQuc291cmNlID0gc291cmNlO1xuICBpZiAoaXNFcnJvcihyZXN1bHQpKSB7XG4gICAgdGhyb3cgcmVzdWx0O1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRlbXBsYXRlO1xuIiwiaW1wb3J0IGNvcHlPYmplY3QgZnJvbSAnLi9fY29weU9iamVjdC5qcyc7XG5pbXBvcnQgY3JlYXRlQXNzaWduZXIgZnJvbSAnLi9fY3JlYXRlQXNzaWduZXIuanMnO1xuaW1wb3J0IGtleXNJbiBmcm9tICcuL2tleXNJbi5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25JbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmBcbiAqIHdoaWNoIGlzIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgYXNzaWduZWQgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJuc1xuICogYHVuZGVmaW5lZGAsIGFzc2lnbm1lbnQgaXMgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmBcbiAqIGlzIGludm9rZWQgd2l0aCBmaXZlIGFyZ3VtZW50czogKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSkuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGFsaWFzIGV4dGVuZFdpdGhcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBzb3VyY2VzIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAc2VlIF8uYXNzaWduV2l0aFxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSkge1xuICogICByZXR1cm4gXy5pc1VuZGVmaW5lZChvYmpWYWx1ZSkgPyBzcmNWYWx1ZSA6IG9ialZhbHVlO1xuICogfVxuICpcbiAqIHZhciBkZWZhdWx0cyA9IF8ucGFydGlhbFJpZ2h0KF8uYXNzaWduSW5XaXRoLCBjdXN0b21pemVyKTtcbiAqXG4gKiBkZWZhdWx0cyh7ICdhJzogMSB9LCB7ICdiJzogMiB9LCB7ICdhJzogMyB9KTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICovXG52YXIgYXNzaWduSW5XaXRoID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4LCBjdXN0b21pemVyKSB7XG4gIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzSW4oc291cmNlKSwgb2JqZWN0LCBjdXN0b21pemVyKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBhc3NpZ25JbldpdGg7XG4iLCJpbXBvcnQgYXNzaWduVmFsdWUgZnJvbSAnLi9fYXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGJhc2VBc3NpZ25WYWx1ZSBmcm9tICcuL19iYXNlQXNzaWduVmFsdWUuanMnO1xuXG4vKipcbiAqIENvcGllcyBwcm9wZXJ0aWVzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMgdG8gY29weS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyB0by5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvcGllZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5T2JqZWN0KHNvdXJjZSwgcHJvcHMsIG9iamVjdCwgY3VzdG9taXplcikge1xuICB2YXIgaXNOZXcgPSAhb2JqZWN0O1xuICBvYmplY3QgfHwgKG9iamVjdCA9IHt9KTtcblxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XG5cbiAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICA/IGN1c3RvbWl6ZXIob2JqZWN0W2tleV0sIHNvdXJjZVtrZXldLCBrZXksIG9iamVjdCwgc291cmNlKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbmV3VmFsdWUgPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gICAgaWYgKGlzTmV3KSB7XG4gICAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9iamVjdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29weU9iamVjdDtcbiIsImltcG9ydCBiYXNlQXNzaWduVmFsdWUgZnJvbSAnLi9fYmFzZUFzc2lnblZhbHVlLmpzJztcbmltcG9ydCBlcSBmcm9tICcuL2VxLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBc3NpZ25zIGB2YWx1ZWAgdG8gYGtleWAgb2YgYG9iamVjdGAgaWYgdGhlIGV4aXN0aW5nIHZhbHVlIGlzIG5vdCBlcXVpdmFsZW50XG4gKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XTtcbiAgaWYgKCEoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgZXEob2JqVmFsdWUsIHZhbHVlKSkgfHxcbiAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XG4gICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgYXNzaWduVmFsdWU7XG4iLCJpbXBvcnQgYmFzZUlzTmF0aXZlIGZyb20gJy4vX2Jhc2VJc05hdGl2ZS5qcyc7XG5pbXBvcnQgZ2V0VmFsdWUgZnJvbSAnLi9fZ2V0VmFsdWUuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkpO1xuICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXROYXRpdmU7XG4iLCJpbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGlzTWFza2VkIGZyb20gJy4vX2lzTWFza2VkLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCB0b1NvdXJjZSBmcm9tICcuL190b1NvdXJjZS5qcyc7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc05hdGl2ZTtcbiIsImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRSYXdUYWc7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgb2JqZWN0VG9TdHJpbmc7XG4iLCJpbXBvcnQgY29yZUpzRGF0YSBmcm9tICcuL19jb3JlSnNEYXRhLmpzJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNNYXNrZWQ7XG4iLCJpbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG92ZXJyZWFjaGluZyBjb3JlLWpzIHNoaW1zLiAqL1xudmFyIGNvcmVKc0RhdGEgPSByb290WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxuZXhwb3J0IGRlZmF1bHQgY29yZUpzRGF0YTtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9Tb3VyY2U7XG4iLCIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0VmFsdWU7XG4iLCJpbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGlzSXRlcmF0ZWVDYWxsIGZyb20gJy4vX2lzSXRlcmF0ZWVDYWxsLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5hc3NpZ25gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBhc3NpZ25lciBUaGUgZnVuY3Rpb24gdG8gYXNzaWduIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFzc2lnbmVyIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVBc3NpZ25lcihhc3NpZ25lcikge1xuICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IHNvdXJjZXMubGVuZ3RoLFxuICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoID4gMSA/IHNvdXJjZXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQsXG4gICAgICAgIGd1YXJkID0gbGVuZ3RoID4gMiA/IHNvdXJjZXNbMl0gOiB1bmRlZmluZWQ7XG5cbiAgICBjdXN0b21pemVyID0gKGFzc2lnbmVyLmxlbmd0aCA+IDMgJiYgdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJylcbiAgICAgID8gKGxlbmd0aC0tLCBjdXN0b21pemVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7XG4gICAgICBjdXN0b21pemVyID0gbGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IGN1c3RvbWl6ZXI7XG4gICAgICBsZW5ndGggPSAxO1xuICAgIH1cbiAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xuICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICBhc3NpZ25lcihvYmplY3QsIHNvdXJjZSwgaW5kZXgsIGN1c3RvbWl6ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQXNzaWduZXI7XG4iLCJpbXBvcnQgYXBwbHkgZnJvbSAnLi9fYXBwbHkuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBvdmVyUmVzdDtcbiIsImltcG9ydCBiYXNlU2V0VG9TdHJpbmcgZnJvbSAnLi9fYmFzZVNldFRvU3RyaW5nLmpzJztcbmltcG9ydCBzaG9ydE91dCBmcm9tICcuL19zaG9ydE91dC5qcyc7XG5cbi8qKlxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBzZXRUb1N0cmluZyA9IHNob3J0T3V0KGJhc2VTZXRUb1N0cmluZyk7XG5cbmV4cG9ydCBkZWZhdWx0IHNldFRvU3RyaW5nO1xuIiwiaW1wb3J0IGNvbnN0YW50IGZyb20gJy4vY29uc3RhbnQuanMnO1xuaW1wb3J0IGRlZmluZVByb3BlcnR5IGZyb20gJy4vX2RlZmluZVByb3BlcnR5LmpzJztcbmltcG9ydCBpZGVudGl0eSBmcm9tICcuL2lkZW50aXR5LmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldFRvU3RyaW5nID0gIWRlZmluZVByb3BlcnR5ID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmMsICd0b1N0cmluZycsIHtcbiAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxuICAgICd2YWx1ZSc6IGNvbnN0YW50KHN0cmluZyksXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VTZXRUb1N0cmluZztcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb25zdGFudDtcbiIsIi8qKiBVc2VkIHRvIGRldGVjdCBob3QgZnVuY3Rpb25zIGJ5IG51bWJlciBvZiBjYWxscyB3aXRoaW4gYSBzcGFuIG9mIG1pbGxpc2Vjb25kcy4gKi9cbnZhciBIT1RfQ09VTlQgPSA4MDAsXG4gICAgSE9UX1NQQU4gPSAxNjtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxuICogb2YgYGZ1bmNgIHdoZW4gaXQncyBjYWxsZWQgYEhPVF9DT1VOVGAgb3IgbW9yZSB0aW1lcyBpbiBgSE9UX1NQQU5gXG4gKiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBzaG9ydE91dChmdW5jKSB7XG4gIHZhciBjb3VudCA9IDAsXG4gICAgICBsYXN0Q2FsbGVkID0gMDtcblxuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0YW1wID0gbmF0aXZlTm93KCksXG4gICAgICAgIHJlbWFpbmluZyA9IEhPVF9TUEFOIC0gKHN0YW1wIC0gbGFzdENhbGxlZCk7XG5cbiAgICBsYXN0Q2FsbGVkID0gc3RhbXA7XG4gICAgaWYgKHJlbWFpbmluZyA+IDApIHtcbiAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xuICAgICAgICByZXR1cm4gYXJndW1lbnRzWzBdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb3VudCA9IDA7XG4gICAgfVxuICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc2hvcnRPdXQ7XG4iLCJpbXBvcnQgYXJyYXlMaWtlS2V5cyBmcm9tICcuL19hcnJheUxpa2VLZXlzLmpzJztcbmltcG9ydCBiYXNlS2V5c0luIGZyb20gJy4vX2Jhc2VLZXlzSW4uanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzSW4obmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqL1xuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0LCB0cnVlKSA6IGJhc2VLZXlzSW4ob2JqZWN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQga2V5c0luO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXG4gKiBvciBtYXggYXJyYXkgbGVuZ3RoIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUaW1lcyhuLCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVRpbWVzO1xuIiwiaW1wb3J0IGJhc2VJc0FyZ3VtZW50cyBmcm9tICcuL19iYXNlSXNBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBpc0FyZ3VtZW50cztcbiIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc0FyZ3VtZW50cztcbiIsImltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuaW1wb3J0IHN0dWJGYWxzZSBmcm9tICcuL3N0dWJGYWxzZS5qcyc7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgQnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBVaW50OEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTtcblxuZXhwb3J0IGRlZmF1bHQgaXNCdWZmZXI7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0dWJGYWxzZTtcbiIsImltcG9ydCBiYXNlSXNUeXBlZEFycmF5IGZyb20gJy4vX2Jhc2VJc1R5cGVkQXJyYXkuanMnO1xuaW1wb3J0IGJhc2VVbmFyeSBmcm9tICcuL19iYXNlVW5hcnkuanMnO1xuaW1wb3J0IG5vZGVVdGlsIGZyb20gJy4vX25vZGVVdGlsLmpzJztcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbmV4cG9ydCBkZWZhdWx0IGlzVHlwZWRBcnJheTtcbiIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzTGVuZ3RoIGZyb20gJy4vaXNMZW5ndGguanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUlzVHlwZWRBcnJheTtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVVuYXJ5O1xuIiwiaW1wb3J0IGZyZWVHbG9iYWwgZnJvbSAnLi9fZnJlZUdsb2JhbC5qcyc7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBwcm9jZXNzYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIGZyZWVHbG9iYWwucHJvY2VzcztcblxuLyoqIFVzZWQgdG8gYWNjZXNzIGZhc3RlciBOb2RlLmpzIGhlbHBlcnMuICovXG52YXIgbm9kZVV0aWwgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgLy8gVXNlIGB1dGlsLnR5cGVzYCBmb3IgTm9kZS5qcyAxMCsuXG4gICAgdmFyIHR5cGVzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlKCd1dGlsJykudHlwZXM7XG5cbiAgICBpZiAodHlwZXMpIHtcbiAgICAgIHJldHVybiB0eXBlcztcbiAgICB9XG5cbiAgICAvLyBMZWdhY3kgYHByb2Nlc3MuYmluZGluZygndXRpbCcpYCBmb3IgTm9kZS5qcyA8IDEwLlxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbmV4cG9ydCBkZWZhdWx0IG5vZGVVdGlsO1xuIiwiaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IGlzUHJvdG90eXBlIGZyb20gJy4vX2lzUHJvdG90eXBlLmpzJztcbmltcG9ydCBuYXRpdmVLZXlzSW4gZnJvbSAnLi9fbmF0aXZlS2V5c0luLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXNJbihvYmplY3QpO1xuICB9XG4gIHZhciBpc1Byb3RvID0gaXNQcm90b3R5cGUob2JqZWN0KSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoIShrZXkgPT0gJ2NvbnN0cnVjdG9yJyAmJiAoaXNQcm90byB8fCAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUtleXNJbjtcbiIsIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBleGNlcHQgdGhhdCBpdCBpbmNsdWRlcyBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBuYXRpdmVLZXlzSW4ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XG4gICAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBuYXRpdmVLZXlzSW47XG4iLCJpbXBvcnQgYXBwbHkgZnJvbSAnLi9fYXBwbHkuanMnO1xuaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcbmltcG9ydCBpc0Vycm9yIGZyb20gJy4vaXNFcnJvci5qcyc7XG5cbi8qKlxuICogQXR0ZW1wdHMgdG8gaW52b2tlIGBmdW5jYCwgcmV0dXJuaW5nIGVpdGhlciB0aGUgcmVzdWx0IG9yIHRoZSBjYXVnaHQgZXJyb3JcbiAqIG9iamVjdC4gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZSBwcm92aWRlZCB0byBgZnVuY2Agd2hlbiBpdCdzIGludm9rZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGF0dGVtcHQuXG4gKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBgZnVuY2AgcmVzdWx0IG9yIGVycm9yIG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogLy8gQXZvaWQgdGhyb3dpbmcgZXJyb3JzIGZvciBpbnZhbGlkIHNlbGVjdG9ycy5cbiAqIHZhciBlbGVtZW50cyA9IF8uYXR0ZW1wdChmdW5jdGlvbihzZWxlY3Rvcikge1xuICogICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gKiB9LCAnPl8+Jyk7XG4gKlxuICogaWYgKF8uaXNFcnJvcihlbGVtZW50cykpIHtcbiAqICAgZWxlbWVudHMgPSBbXTtcbiAqIH1cbiAqL1xudmFyIGF0dGVtcHQgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCBhcmdzKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHVuZGVmaW5lZCwgYXJncyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gaXNFcnJvcihlKSA/IGUgOiBuZXcgRXJyb3IoZSk7XG4gIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBhdHRlbXB0O1xuIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgZ2V0UHJvdG90eXBlIGZyb20gJy4vX2dldFByb3RvdHlwZS5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gaW5mZXIgdGhlIGBPYmplY3RgIGNvbnN0cnVjdG9yLiAqL1xudmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGF0IGlzLCBhbiBvYmplY3QgY3JlYXRlZCBieSB0aGVcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuOC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiB9XG4gKlxuICogXy5pc1BsYWluT2JqZWN0KG5ldyBGb28pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KHsgJ3gnOiAwLCAneSc6IDAgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSB8fCBiYXNlR2V0VGFnKHZhbHVlKSAhPSBvYmplY3RUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHByb3RvID0gZ2V0UHJvdG90eXBlKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIEN0b3IgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCAnY29uc3RydWN0b3InKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiZcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1BsYWluT2JqZWN0O1xuIiwiaW1wb3J0IG92ZXJBcmcgZnJvbSAnLi9fb3ZlckFyZy5qcyc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpO1xuXG5leHBvcnQgZGVmYXVsdCBnZXRQcm90b3R5cGU7XG4iLCJpbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnZhbHVlc2AgYW5kIGBfLnZhbHVlc0luYCB3aGljaCBjcmVhdGVzIGFuXG4gKiBhcnJheSBvZiBgb2JqZWN0YCBwcm9wZXJ0eSB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvcGVydHkgbmFtZXNcbiAqIG9mIGBwcm9wc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBuYW1lcyB0byBnZXQgdmFsdWVzIGZvci5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gYmFzZVZhbHVlcyhvYmplY3QsIHByb3BzKSB7XG4gIHJldHVybiBhcnJheU1hcChwcm9wcywgZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIG9iamVjdFtrZXldO1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVZhbHVlcztcbiIsImltcG9ydCBlcSBmcm9tICcuL2VxLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLmRlZmF1bHRzYCB0byBjdXN0b21pemUgaXRzIGBfLmFzc2lnbkluYCB1c2UgdG8gYXNzaWduIHByb3BlcnRpZXNcbiAqIG9mIHNvdXJjZSBvYmplY3RzIHRvIHRoZSBkZXN0aW5hdGlvbiBvYmplY3QgZm9yIGFsbCBkZXN0aW5hdGlvbiBwcm9wZXJ0aWVzXG4gKiB0aGF0IHJlc29sdmUgdG8gYHVuZGVmaW5lZGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gb2JqVmFsdWUgVGhlIGRlc3RpbmF0aW9uIHZhbHVlLlxuICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgc291cmNlIHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBwYXJlbnQgb2JqZWN0IG9mIGBvYmpWYWx1ZWAuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBjdXN0b21EZWZhdWx0c0Fzc2lnbkluKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QpIHtcbiAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgIChlcShvYmpWYWx1ZSwgb2JqZWN0UHJvdG9ba2V5XSkgJiYgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkge1xuICAgIHJldHVybiBzcmNWYWx1ZTtcbiAgfVxuICByZXR1cm4gb2JqVmFsdWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGN1c3RvbURlZmF1bHRzQXNzaWduSW47XG4iLCIvKiogVXNlZCB0byBlc2NhcGUgY2hhcmFjdGVycyBmb3IgaW5jbHVzaW9uIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy4gKi9cbnZhciBzdHJpbmdFc2NhcGVzID0ge1xuICAnXFxcXCc6ICdcXFxcJyxcbiAgXCInXCI6IFwiJ1wiLFxuICAnXFxuJzogJ24nLFxuICAnXFxyJzogJ3InLFxuICAnXFx1MjAyOCc6ICd1MjAyOCcsXG4gICdcXHUyMDI5JzogJ3UyMDI5J1xufTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLnRlbXBsYXRlYCB0byBlc2NhcGUgY2hhcmFjdGVycyBmb3IgaW5jbHVzaW9uIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGNociBUaGUgbWF0Y2hlZCBjaGFyYWN0ZXIgdG8gZXNjYXBlLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBjaGFyYWN0ZXIuXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVN0cmluZ0NoYXIoY2hyKSB7XG4gIHJldHVybiAnXFxcXCcgKyBzdHJpbmdFc2NhcGVzW2Nocl07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGVzY2FwZVN0cmluZ0NoYXI7XG4iLCJpbXBvcnQgYXJyYXlMaWtlS2V5cyBmcm9tICcuL19hcnJheUxpa2VLZXlzLmpzJztcbmltcG9ydCBiYXNlS2V5cyBmcm9tICcuL19iYXNlS2V5cy5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9pc0FycmF5TGlrZS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuIFNlZSB0aGVcbiAqIFtFUyBzcGVjXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8ua2V5cygnaGknKTtcbiAqIC8vID0+IFsnMCcsICcxJ11cbiAqL1xuZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCkgOiBiYXNlS2V5cyhvYmplY3QpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBrZXlzO1xuIiwiaW1wb3J0IGlzUHJvdG90eXBlIGZyb20gJy4vX2lzUHJvdG90eXBlLmpzJztcbmltcG9ydCBuYXRpdmVLZXlzIGZyb20gJy4vX25hdGl2ZUtleXMuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VLZXlzO1xuIiwiaW1wb3J0IG92ZXJBcmcgZnJvbSAnLi9fb3ZlckFyZy5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVLZXlzID0gb3ZlckFyZyhPYmplY3Qua2V5cywgT2JqZWN0KTtcblxuZXhwb3J0IGRlZmF1bHQgbmF0aXZlS2V5cztcbiIsImltcG9ydCBlc2NhcGUgZnJvbSAnLi9lc2NhcGUuanMnO1xuaW1wb3J0IHJlRXNjYXBlIGZyb20gJy4vX3JlRXNjYXBlLmpzJztcbmltcG9ydCByZUV2YWx1YXRlIGZyb20gJy4vX3JlRXZhbHVhdGUuanMnO1xuaW1wb3J0IHJlSW50ZXJwb2xhdGUgZnJvbSAnLi9fcmVJbnRlcnBvbGF0ZS5qcyc7XG5cbi8qKlxuICogQnkgZGVmYXVsdCwgdGhlIHRlbXBsYXRlIGRlbGltaXRlcnMgdXNlZCBieSBsb2Rhc2ggYXJlIGxpa2UgdGhvc2UgaW5cbiAqIGVtYmVkZGVkIFJ1YnkgKEVSQikgYXMgd2VsbCBhcyBFUzIwMTUgdGVtcGxhdGUgc3RyaW5ncy4gQ2hhbmdlIHRoZVxuICogZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG52YXIgdGVtcGxhdGVTZXR0aW5ncyA9IHtcblxuICAvKipcbiAgICogVXNlZCB0byBkZXRlY3QgYGRhdGFgIHByb3BlcnR5IHZhbHVlcyB0byBiZSBIVE1MLWVzY2FwZWQuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICogQHR5cGUge1JlZ0V4cH1cbiAgICovXG4gICdlc2NhcGUnOiByZUVzY2FwZSxcblxuICAvKipcbiAgICogVXNlZCB0byBkZXRlY3QgY29kZSB0byBiZSBldmFsdWF0ZWQuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICogQHR5cGUge1JlZ0V4cH1cbiAgICovXG4gICdldmFsdWF0ZSc6IHJlRXZhbHVhdGUsXG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gZGV0ZWN0IGBkYXRhYCBwcm9wZXJ0eSB2YWx1ZXMgdG8gaW5qZWN0LlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtSZWdFeHB9XG4gICAqL1xuICAnaW50ZXJwb2xhdGUnOiByZUludGVycG9sYXRlLFxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIHJlZmVyZW5jZSB0aGUgZGF0YSBvYmplY3QgaW4gdGhlIHRlbXBsYXRlIHRleHQuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gICd2YXJpYWJsZSc6ICcnLFxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGltcG9ydCB2YXJpYWJsZXMgaW50byB0aGUgY29tcGlsZWQgdGVtcGxhdGUuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gICdpbXBvcnRzJzoge1xuXG4gICAgLyoqXG4gICAgICogQSByZWZlcmVuY2UgdG8gdGhlIGBsb2Rhc2hgIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5ncy5pbXBvcnRzXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgICdfJzogeyAnZXNjYXBlJzogZXNjYXBlIH1cbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgdGVtcGxhdGVTZXR0aW5ncztcbiIsImltcG9ydCBlc2NhcGVIdG1sQ2hhciBmcm9tICcuL19lc2NhcGVIdG1sQ2hhci5qcyc7XG5pbXBvcnQgdG9TdHJpbmcgZnJvbSAnLi90b1N0cmluZy5qcyc7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIEhUTUwgZW50aXRpZXMgYW5kIEhUTUwgY2hhcmFjdGVycy4gKi9cbnZhciByZVVuZXNjYXBlZEh0bWwgPSAvWyY8PlwiJ10vZyxcbiAgICByZUhhc1VuZXNjYXBlZEh0bWwgPSBSZWdFeHAocmVVbmVzY2FwZWRIdG1sLnNvdXJjZSk7XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGNoYXJhY3RlcnMgXCImXCIsIFwiPFwiLCBcIj5cIiwgJ1wiJywgYW5kIFwiJ1wiIGluIGBzdHJpbmdgIHRvIHRoZWlyXG4gKiBjb3JyZXNwb25kaW5nIEhUTUwgZW50aXRpZXMuXG4gKlxuICogKipOb3RlOioqIE5vIG90aGVyIGNoYXJhY3RlcnMgYXJlIGVzY2FwZWQuIFRvIGVzY2FwZSBhZGRpdGlvbmFsXG4gKiBjaGFyYWN0ZXJzIHVzZSBhIHRoaXJkLXBhcnR5IGxpYnJhcnkgbGlrZSBbX2hlX10oaHR0cHM6Ly9tdGhzLmJlL2hlKS5cbiAqXG4gKiBUaG91Z2ggdGhlIFwiPlwiIGNoYXJhY3RlciBpcyBlc2NhcGVkIGZvciBzeW1tZXRyeSwgY2hhcmFjdGVycyBsaWtlXG4gKiBcIj5cIiBhbmQgXCIvXCIgZG9uJ3QgbmVlZCBlc2NhcGluZyBpbiBIVE1MIGFuZCBoYXZlIG5vIHNwZWNpYWwgbWVhbmluZ1xuICogdW5sZXNzIHRoZXkncmUgcGFydCBvZiBhIHRhZyBvciB1bnF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUuIFNlZVxuICogW01hdGhpYXMgQnluZW5zJ3MgYXJ0aWNsZV0oaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2FtYmlndW91cy1hbXBlcnNhbmRzKVxuICogKHVuZGVyIFwic2VtaS1yZWxhdGVkIGZ1biBmYWN0XCIpIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogV2hlbiB3b3JraW5nIHdpdGggSFRNTCB5b3Ugc2hvdWxkIGFsd2F5c1xuICogW3F1b3RlIGF0dHJpYnV0ZSB2YWx1ZXNdKGh0dHA6Ly93b25rby5jb20vcG9zdC9odG1sLWVzY2FwaW5nKSB0byByZWR1Y2VcbiAqIFhTUyB2ZWN0b3JzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmVzY2FwZSgnZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnKTtcbiAqIC8vID0+ICdmcmVkLCBiYXJuZXksICZhbXA7IHBlYmJsZXMnXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZShzdHJpbmcpIHtcbiAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgcmV0dXJuIChzdHJpbmcgJiYgcmVIYXNVbmVzY2FwZWRIdG1sLnRlc3Qoc3RyaW5nKSlcbiAgICA/IHN0cmluZy5yZXBsYWNlKHJlVW5lc2NhcGVkSHRtbCwgZXNjYXBlSHRtbENoYXIpXG4gICAgOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGVzY2FwZTtcbiIsImltcG9ydCBiYXNlUHJvcGVydHlPZiBmcm9tICcuL19iYXNlUHJvcGVydHlPZi5qcyc7XG5cbi8qKiBVc2VkIHRvIG1hcCBjaGFyYWN0ZXJzIHRvIEhUTUwgZW50aXRpZXMuICovXG52YXIgaHRtbEVzY2FwZXMgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmIzM5Oydcbn07XG5cbi8qKlxuICogVXNlZCBieSBgXy5lc2NhcGVgIHRvIGNvbnZlcnQgY2hhcmFjdGVycyB0byBIVE1MIGVudGl0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIGNoYXJhY3Rlci5cbiAqL1xudmFyIGVzY2FwZUh0bWxDaGFyID0gYmFzZVByb3BlcnR5T2YoaHRtbEVzY2FwZXMpO1xuXG5leHBvcnQgZGVmYXVsdCBlc2NhcGVIdG1sQ2hhcjtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucHJvcGVydHlPZmAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVByb3BlcnR5T2Yob2JqZWN0KSB7XG4gIHJldHVybiBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVByb3BlcnR5T2Y7XG4iLCJpbXBvcnQgU3ltYm9sIGZyb20gJy4vX1N5bWJvbC5qcyc7XG5pbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc1N5bWJvbCBmcm9tICcuL2lzU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFRvU3RyaW5nID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by50b1N0cmluZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcbiAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIHJldHVybiBhcnJheU1hcCh2YWx1ZSwgYmFzZVRvU3RyaW5nKSArICcnO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVRvU3RyaW5nO1xuIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3ltYm9sYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N5bWJvbCcgfHxcbiAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzeW1ib2xUYWcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1N5bWJvbDtcbiIsIi8qKiBVc2VkIHRvIG1hdGNoIHRlbXBsYXRlIGRlbGltaXRlcnMuICovXG52YXIgcmVFc2NhcGUgPSAvPCUtKFtcXHNcXFNdKz8pJT4vZztcblxuZXhwb3J0IGRlZmF1bHQgcmVFc2NhcGU7XG4iLCIvKiogVXNlZCB0byBtYXRjaCB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLiAqL1xudmFyIHJlRXZhbHVhdGUgPSAvPCUoW1xcc1xcU10rPyklPi9nO1xuXG5leHBvcnQgZGVmYXVsdCByZUV2YWx1YXRlO1xuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKipcbiAqIEFuIGltcHJvdmVkIHRvb2x0aXAgY29tcG9uZW50IHdoaWNoIHN1cHBvcnRzIEhUTUwgYW5kIGJlaGF2ZXMgdGhlIHNhbWUgaW4gYm90aCBHVUkgYW5kIEJVSVxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlclxuICovXG5jbGFzcyBIVE1MVG9vbHRpcCB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIHRoZSB0b29sdGlwIGNvbXBvbmVudCBwYXJhbXNcbiAgICovXG4gIGluaXQocGFyYW1zKSB7XG4gICAgY29uc3QgZUd1aSA9ICh0aGlzLmVHdWkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSlcbiAgICBjb25zdCB0b29sdGlwVmFsdWVHZXR0ZXIgPSBwYXJhbXMuY29sRGVmLnRvb2x0aXBWYWx1ZUdldHRlclxuICAgIGNvbnN0IGlzSGVhZGVyID0gcGFyYW1zLnJvd0luZGV4ID09PSB1bmRlZmluZWRcbiAgICBjb25zdCBpc0dyb3VwZWRIZWFkZXIgPSBpc0hlYWRlciAmJiAhIXBhcmFtcy5jb2xEZWYuY2hpbGRyZW5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgY29uc3QgZGF0YSA9XG4gICAgICAhaXNIZWFkZXIgJiYgIWlzR3JvdXBlZEhlYWRlclxuICAgICAgICA/IHBhcmFtcy5hcGkuZ2V0RGlzcGxheWVkUm93QXRJbmRleChwYXJhbXMucm93SW5kZXgpLmRhdGFcbiAgICAgICAgOiBudWxsXG4gICAgY29uc3QgdGhlbWUgPSBwYXJhbXMuYXBpLmdyaWRDb3JlLmVHcmlkRGl2LmNsYXNzTmFtZS5lbmRzV2l0aCgnZGFyaycpXG4gICAgICA/ICdndy10b29sdGlwLWRhcmsnXG4gICAgICA6ICdndy10b29sdGlwLWxpZ2h0J1xuICAgIGNvbnN0IHRvb2x0aXBGaWVsZCA9IHBhcmFtcy5jb2xEZWYudG9vbHRpcEZpZWxkXG4gICAgICA/IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgZGF0YSAmJiBkYXRhLmhhc093blByb3BlcnR5KHBhcmFtcy5jb2xEZWYudG9vbHRpcEZpZWxkKVxuICAgICAgICA/IGRhdGFbcGFyYW1zLmNvbERlZi50b29sdGlwRmllbGRdXG4gICAgICAgIDogbnVsbFxuICAgICAgOiBudWxsXG5cbiAgICBjb25zdCBwYXNzZWRQYXJhbXMgPSB7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICAuLi57IGRhdGEgfSxcbiAgICAgIC4uLnsgaXNIZWFkZXIsIGlzR3JvdXBlZEhlYWRlciwgdG9vbHRpcEZpZWxkIH0sXG4gICAgfVxuXG4gICAgZUd1aS5jbGFzc0xpc3QuYWRkKCdndy10b29sdGlwJywgdGhlbWUpXG4gICAgZUd1aS5pbm5lckhUTUwgPVxuICAgICAgaXNIZWFkZXIgfHwgaXNHcm91cGVkSGVhZGVyXG4gICAgICAgID8gcGFyYW1zLnZhbHVlXG4gICAgICAgIDogdG9vbHRpcEZpZWxkXG4gICAgICAgID8gdG9vbHRpcEZpZWxkXG4gICAgICAgIDogdG9vbHRpcFZhbHVlR2V0dGVyXG4gICAgICAgID8gdG9vbHRpcFZhbHVlR2V0dGVyKHBhc3NlZFBhcmFtcylcbiAgICAgICAgOiBwYXJhbXMudmFsdWVcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGd1aSBJbnN0YW5jZVxuICAgKlxuICAgKiBAcmV0dXJuIHtIVE1MRWxlbWVudH1cbiAgICovXG4gIGdldEd1aSgpIHtcbiAgICByZXR1cm4gdGhpcy5lR3VpXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSFRNTFRvb2x0aXBcbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfZ2V0R3JpZCB9IGZyb20gJy4vdXRpbGl0aWVzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0U3RhdGUoaWQsIHN0YXRlKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG5cbiAgdHJ5IHtcbiAgICBvcHRpb25zLmNvbHVtbkFwaS5zZXRDb2x1bW5TdGF0ZShzdGF0ZS5jb2x1bW5zKVxuICAgIG9wdGlvbnMuY29sdW1uQXBpLnNldENvbHVtbkdyb3VwU3RhdGUoc3RhdGUuZ3JvdXBzKVxuICAgIG9wdGlvbnMuYXBpLnNldFNvcnRNb2RlbChzdGF0ZS5zb3J0KVxuICAgIG9wdGlvbnMuYXBpLnNldEZpbHRlck1vZGVsKHN0YXRlLmZpbHRlcnMpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBwYXJzZSBncmlkIHN0YXRlIGZyb20gSlNPTicsIGUpXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldFN0YXRlKGlkKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG4gIGNvbnN0IGNvbHVtbnMgPSBvcHRpb25zLmNvbHVtbkFwaS5nZXRDb2x1bW5TdGF0ZSgpXG4gIGNvbnN0IGdyb3VwcyA9IG9wdGlvbnMuY29sdW1uQXBpLmdldENvbHVtbkdyb3VwU3RhdGUoKVxuICBjb25zdCBzb3J0ID0gb3B0aW9ucy5hcGkuZ2V0U29ydE1vZGVsKClcbiAgY29uc3QgZmlsdGVycyA9IG9wdGlvbnMuYXBpLmdldEZpbHRlck1vZGVsKClcblxuICB0cnkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBjb2x1bW5zLFxuICAgICAgZ3JvdXBzLFxuICAgICAgc29ydCxcbiAgICAgIGZpbHRlcnMsXG4gICAgfSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIGNvbnZlcnQgdGhlIGdyaWQgc3RhdGUgdG8ganNvbicsIGUpXG4gIH1cbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfZ2V0R3JpZCB9IGZyb20gJy4vdXRpbGl0aWVzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0U2lkZUJhclZpc2libGUoaWQsIHZhbHVlKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLnNldFNpZGVCYXJWaXNpYmxlKEJvb2xlYW4odmFsdWUpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3dfb3BlblRvb2xwYW5lbChncmlkSWQsIHRvb2xwYW5lbElkKSB7XG4gIGd3X2dldEdyaWQoZ3JpZElkKS5vcHRpb25zLmFwaS5vcGVuVG9vbFBhbmVsKHRvb2xwYW5lbElkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3dfY2xvc2VUb29scGFuZWwoZ3JpZElkLCB0b29scGFuZWxJZCkge1xuICBnd19nZXRHcmlkKGdyaWRJZCkub3B0aW9ucy5hcGkuY2xvc2VUb29sUGFuZWwodG9vbHBhbmVsSWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRGdW5jdGlvbnNSZWFkT25seShpZCwgcmVhZG9ubHkpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkuc2V0RnVuY3Rpb25zUmVhZE9ubHkoQm9vbGVhbihyZWFkb25seSkpXG59XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGd3X2dldEdyaWQgfSBmcm9tICcuL3V0aWxpdGllcydcblxuZXhwb3J0IGZ1bmN0aW9uIGd3X3NldFN0YXR1c2JhckNvbXBvbmVudFZpc2liaWxpdHkoaWQsIGtleSwgdmlzaWJpbGl0eSkge1xuICBnd19nZXRHcmlkKGlkKVxuICAgIC5vcHRpb25zLmFwaS5nZXRTdGF0dXNQYW5lbChrZXkpXG4gICAgLnNldFZpc2libGUoQm9vbGVhbih2aXNpYmlsaXR5KSlcbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfZ2V0R3JpZCB9IGZyb20gJy4vdXRpbGl0aWVzJ1xuXG4vKipcbiAqIFNob3cgbG9hZGluZyBvdmVybGF5XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkIGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19zaG93TG9hZGluZ092ZXJsYXkoaWQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkuc2hvd0xvYWRpbmdPdmVybGF5KClcbn1cblxuLyoqXG4gKiBTaG93ICdubyByb3dzJyBvdmVybGF5XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkIGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19zaG93Tm9Sb3dzT3ZlcmxheShpZCkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5zaG93Tm9Sb3dzT3ZlcmxheSgpXG59XG5cbi8qKlxuICogQ2xlYXIgYWxsIG92ZXJsYXlzXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkIGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19oaWRlT3ZlcmxheShpZCkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5oaWRlT3ZlcmxheSgpXG59XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGd3X2dldEdyaWQgfSBmcm9tICcuL3V0aWxpdGllcydcblxuLyoqXG4gKiBVcGRhdGUgY29udGV4dFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30ga2V5IFRoZSBjb250ZXh0J3Mga2V5IHRvIHVwZGF0ZVxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlICBUaGUgbmV3IGNvbnRleHQncyB2YWx1ZVxuICovXG4vLyBleHBvcnQgZnVuY3Rpb24gZ3dfbGVnYWN5VXBkYXRlQ29udGV4dChpZCwga2V5LCB2YWx1ZSkge1xuLy8gXHRnd19nZXRHcmlkKGlkKVxuLy8gXHRcdC5vcHRpb25zXG4vLyBcdFx0LmNvbnRleHRba2V5XSA9IEpTT04ucGFyc2UodmFsdWUpO1xuLy8gfVxuXG4vKipcbiAqIFVwZGF0ZSBjb250ZXh0XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0IFRoZSBuZXcgY29udGV4dCBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3VwZGF0ZUNvbnRleHQoaWQsIGNvbnRleHQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb250ZXh0ID0gY29udGV4dFxufVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgJ2V4cG9zZS1sb2FkZXI/anNzIWpzcy9qc3MuanMnXG5pbXBvcnQgeyBnd19nZXREb2N1bWVudCB9IGZyb20gJy4vdXRpbGl0aWVzJ1xuXG4vKipcbiAqIEFkZCBuZXcgc3R5bGVcbiAqXG4gKiBBZGQgbmV3IHN0eWxlIHRvIHRoZSBkb2N1bWVudFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvciBjc3Mgc2VsZWN0b3JcbiAqIEBwYXJhbSB7U3RyaW5nfSBydWxlcyBKc29uIHN0cmluZyBmb3IgYW4gYXJyYXkgb2YgcnVsZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3NldFN0eWxlKHNlbGVjdG9yLCBydWxlcykge1xuICBqc3MuZm9yRG9jdW1lbnQoZ3dfZ2V0RG9jdW1lbnQoKSkuc2V0KHNlbGVjdG9yLCBKU09OLnBhcnNlKHJ1bGVzKSlcbn1cblxuLyoqXG4gKiBSZW1vdmUgc3R5bGVcbiAqXG4gKiBSZW1vdmUgYWRkZWQgc3R5bGUgZnJvbSB0aGVzIGRvY3VtZW50XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9yIGNzcyBzZWxlY3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfcmVtb3ZlU3R5bGUoc2VsZWN0b3IpIHtcbiAganNzLmZvckRvY3VtZW50KGd3X2dldERvY3VtZW50KCkpLnJlbW92ZShzZWxlY3Rvcilcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsW1wianNzXCJdID0gcmVxdWlyZShcIi0hRDpcXFxcR2l0aHViXFxcXEJCakdyaWRFeFdpZGdldFxcXFxjbGllbnRcXFxcbm9kZV9tb2R1bGVzXFxcXGJhYmVsLWxvYWRlclxcXFxsaWJcXFxcaW5kZXguanM/P3JlZi0tNCEuXFxcXGpzcy5qc1wiKTsiLCIvKlxuICogSlNTIHYwLjYgLSBKYXZhU2NyaXB0IFN0eWxlc2hlZXRzXG4gKiBodHRwczovL2dpdGh1Yi5jb20vQm94OS9qc3NcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTEsIERhdmlkIFRhbmdcbiAqIE1JVCBMaWNlbnNlZCAoaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHApXG4gKi9cbnZhciBqc3MgPSAoZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFkalNlbEF0dHJSZWdleCA9IC8oKD86XFwufCMpW15cXC5cXHMjXSspKCg/OlxcLnwjKVteXFwuXFxzI10rKS9nO1xuICAgIHZhciBkb3VibGVDb2xvblBzZXVkb0VsUmVnZXggPSAvKDo6KShiZWZvcmV8YWZ0ZXJ8Zmlyc3QtbGluZXxmaXJzdC1sZXR0ZXJ8c2VsZWN0aW9uKS87XG4gICAgdmFyIHNpbmdsZUNvbG9uUHNldWRvRWxSZWdleCA9IC8oW146XSkoOikoYmVmb3JlfGFmdGVyfGZpcnN0LWxpbmV8Zmlyc3QtbGV0dGVyfHNlbGVjdGlvbikvO1xuICAgIHZhciBzaW5nbGVDb2xvbkZvclBzZXVkb0VsZW1lbnRzOyAvLyBmbGFnIGZvciBvbGRlciBicm93c2Vyc1xuXG4gICAgZnVuY3Rpb24gZ2V0U2VsZWN0b3JzQW5kUnVsZXMoc2hlZXQpIHtcbiAgICAgICAgdmFyIHJ1bGVzID0gc2hlZXQuY3NzUnVsZXMgfHwgc2hlZXQucnVsZXMgfHwgW107XG4gICAgICAgIHZhciByZXN1bHRzID0ge307XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIC8vIE9sZGVyIGJyb3dzZXJzIGFuZCBGRiByZXBvcnQgcHNldWRvIGVsZW1lbnQgc2VsZWN0b3JzIGluIGFuIG91dGRhdGVkIGZvcm1hdFxuICAgICAgICAgICAgdmFyIHNlbGVjdG9yVGV4dCA9IHRvRG91YmxlQ29sb25Qc2V1ZG9FbGVtZW50cyhydWxlc1tpXS5zZWxlY3RvclRleHQpO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHRzW3NlbGVjdG9yVGV4dF0pIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzW3NlbGVjdG9yVGV4dF0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdHNbc2VsZWN0b3JUZXh0XS5wdXNoKHtcbiAgICAgICAgICAgICAgICBzaGVldDogc2hlZXQsXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgc3R5bGU6IHJ1bGVzW2ldLnN0eWxlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRSdWxlcyhzaGVldCwgc2VsZWN0b3IpIHtcbiAgICAgICAgdmFyIHJ1bGVzID0gc2hlZXQuY3NzUnVsZXMgfHwgc2hlZXQucnVsZXMgfHwgW107XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIC8vIEJyb3dzZXJzIHJlcG9ydCBzZWxlY3RvcnMgaW4gbG93ZXJjYXNlXG4gICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3IudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHNlbGVjdG9yVGV4dCA9IHJ1bGVzW2ldLnNlbGVjdG9yVGV4dDtcbiAgICAgICAgICAgIC8vIE5vdGUgLSBjZXJ0YWluIHJ1bGVzIChlLmcuIEBydWxlcykgZG9uJ3QgaGF2ZSBzZWxlY3RvclRleHRcbiAgICAgICAgICAgIGlmIChzZWxlY3RvclRleHQgJiYgKHNlbGVjdG9yVGV4dCA9PSBzZWxlY3RvciB8fCBzZWxlY3RvclRleHQgPT0gc3dhcEFkalNlbEF0dHIoc2VsZWN0b3IpIHx8IHNlbGVjdG9yVGV4dCA9PSBzd2FwUHNldWRvRWxTeW50YXgoc2VsZWN0b3IpKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHNoZWV0OiBzaGVldCxcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiBydWxlc1tpXS5zdHlsZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFJ1bGUoc2hlZXQsIHNlbGVjdG9yKSB7XG4gICAgICAgIHZhciBydWxlcyA9IHNoZWV0LmNzc1J1bGVzIHx8IHNoZWV0LnJ1bGVzIHx8IFtdO1xuICAgICAgICB2YXIgaW5kZXggPSBydWxlcy5sZW5ndGg7XG4gICAgICAgIHZhciBwc2V1ZG9FbGVtZW50UnVsZSA9IGFkZFBzZXVkb0VsZW1lbnRSdWxlKHNoZWV0LCBzZWxlY3RvciwgcnVsZXMsIGluZGV4KTtcblxuICAgICAgICBpZiAoIXBzZXVkb0VsZW1lbnRSdWxlKSB7XG4gICAgICAgICAgICBhZGRSdWxlVG9TaGVldChzaGVldCwgc2VsZWN0b3IsIGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNoZWV0OiBzaGVldCxcbiAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgIHN0eWxlOiBydWxlc1tpbmRleF0uc3R5bGVcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gYWRkUnVsZVRvU2hlZXQoc2hlZXQsIHNlbGVjdG9yLCBpbmRleCkge1xuICAgICAgICBpZiAoc2hlZXQuaW5zZXJ0UnVsZSkge1xuICAgICAgICAgICAgc2hlZXQuaW5zZXJ0UnVsZShzZWxlY3RvciArICcgeyB9JywgaW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2hlZXQuYWRkUnVsZShzZWxlY3RvciwgbnVsbCwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlcyBzaW5nbGUgY29sb24gc3ludGF4IGZvciBvbGRlciBicm93c2VycyBhbmQgYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTk0OTY1MVxuICAgIGZ1bmN0aW9uIGFkZFBzZXVkb0VsZW1lbnRSdWxlKHNoZWV0LCBzZWxlY3RvciwgcnVsZXMsIGluZGV4KSB7XG4gICAgICAgIHZhciBkb3VibGVDb2xvblNlbGVjdG9yO1xuICAgICAgICB2YXIgc2luZ2xlQ29sb25TZWxlY3RvcjtcblxuICAgICAgICBpZiAoZG91YmxlQ29sb25Qc2V1ZG9FbFJlZ2V4LmV4ZWMoc2VsZWN0b3IpKSB7XG4gICAgICAgICAgICBkb3VibGVDb2xvblNlbGVjdG9yID0gc2VsZWN0b3I7XG4gICAgICAgICAgICBzaW5nbGVDb2xvblNlbGVjdG9yID0gdG9TaW5nbGVDb2xvblBzZXVkb0VsZW1lbnRzKHNlbGVjdG9yKTtcbiAgICAgICAgfSBlbHNlIGlmIChzaW5nbGVDb2xvblBzZXVkb0VsUmVnZXguZXhlYyhzZWxlY3RvcikpIHtcbiAgICAgICAgICAgIGRvdWJsZUNvbG9uU2VsZWN0b3IgPSB0b0RvdWJsZUNvbG9uUHNldWRvRWxlbWVudHMoc2VsZWN0b3IpO1xuICAgICAgICAgICAgc2luZ2xlQ29sb25TZWxlY3RvciA9IHNlbGVjdG9yO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBOb3QgZGVhbGluZyB3aXRoIGEgcHNldWRvIGVsZW1lbnRcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc2luZ2xlQ29sb25Gb3JQc2V1ZG9FbGVtZW50cykge1xuICAgICAgICAgICAgLy8gQXNzdW1lIG1vZGVybiBicm93c2VyIGFuZCB0aGVuIGNoZWNrIGlmIHN1Y2Nlc3NmdWxcbiAgICAgICAgICAgIGFkZFJ1bGVUb1NoZWV0KHNoZWV0LCBkb3VibGVDb2xvblNlbGVjdG9yLCBpbmRleCk7XG4gICAgICAgICAgICBpZiAocnVsZXMubGVuZ3RoIDw9IGluZGV4KSB7XG4gICAgICAgICAgICAgICAgc2luZ2xlQ29sb25Gb3JQc2V1ZG9FbGVtZW50cyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNpbmdsZUNvbG9uRm9yUHNldWRvRWxlbWVudHMpIHtcbiAgICAgICAgICAgIGFkZFJ1bGVUb1NoZWV0KHNoZWV0LCBzaW5nbGVDb2xvblNlbGVjdG9yLCBpbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0RvdWJsZUNvbG9uUHNldWRvRWxlbWVudHMoc2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yLnJlcGxhY2Uoc2luZ2xlQ29sb25Qc2V1ZG9FbFJlZ2V4LCBmdW5jdGlvbiAobWF0Y2gsIHN1Ym1hdGNoMSwgc3VibWF0Y2gyLCBzdWJtYXRjaDMpIHtcbiAgICAgICAgICAgIHJldHVybiBzdWJtYXRjaDEgKyAnOjonICsgc3VibWF0Y2gzO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b1NpbmdsZUNvbG9uUHNldWRvRWxlbWVudHMoc2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yLnJlcGxhY2UoZG91YmxlQ29sb25Qc2V1ZG9FbFJlZ2V4LCBmdW5jdGlvbihtYXRjaCwgc3VibWF0Y2gxLCBzdWJtYXRjaDIpIHtcbiAgICAgICAgICAgIHJldHVybiAnOicgKyBzdWJtYXRjaDI7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVtb3ZlUnVsZShydWxlKSB7XG4gICAgICAgIHZhciBzaGVldCA9IHJ1bGUuc2hlZXQ7XG4gICAgICAgIGlmIChzaGVldC5kZWxldGVSdWxlKSB7XG4gICAgICAgICAgICBzaGVldC5kZWxldGVSdWxlKHJ1bGUuaW5kZXgpO1xuICAgICAgICB9IGVsc2UgaWYgKHNoZWV0LnJlbW92ZVJ1bGUpIHtcbiAgICAgICAgICAgIHNoZWV0LnJlbW92ZVJ1bGUocnVsZS5pbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRlbmQoZGVzdCwgc3JjKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBzcmMpIHtcbiAgICAgICAgICAgIGlmICghc3JjLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBkZXN0W2tleV0gPSBzcmNba2V5XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVzdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZ2dyZWdhdGVTdHlsZXMocnVsZXMpIHtcbiAgICAgICAgdmFyIGFnZ3JlZ2F0ZSA9IHt9O1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBleHRlbmQoYWdncmVnYXRlLCBkZWNsYXJlZFByb3BlcnRpZXMocnVsZXNbaV0uc3R5bGUpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWdncmVnYXRlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlY2xhcmVkUHJvcGVydGllcyhzdHlsZSkge1xuICAgICAgICB2YXIgZGVjbGFyZWQgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZGVjbGFyZWRbc3R5bGVbaV1dID0gc3R5bGVbdG9DYW1lbENhc2Uoc3R5bGVbaV0pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVjbGFyZWQ7XG4gICAgfVxuXG4gICAgLy8gSUU5IHN0b3JlcyBydWxlcyB3aXRoIGF0dHJpYnV0ZXMgKGNsYXNzZXMgb3IgSUQncykgYWRqYWNlbnQgaW4gdGhlIG9wcG9zaXRlIG9yZGVyIGFzIGRlZmluZWRcbiAgICAvLyBjYXVzaW5nIHRoZW0gdG8gbm90IGJlIGZvdW5kLCBzbyB0aGlzIG1ldGhvZCBzd2FwcyBbI3wuXXNlbDFbI3wuXXNlbDIgdG8gYmVjb21lIFsjfC5dc2VsMlsjfC5dc2VsMVxuICAgIGZ1bmN0aW9uIHN3YXBBZGpTZWxBdHRyKHNlbGVjdG9yKSB7XG4gICAgICAgIHZhciBzd2FwID0gJyc7XG4gICAgICAgIHZhciBsYXN0SW5kZXggPSAwO1xuICAgICAgICAgICAgXG4gICAgICAgIHdoaWxlICgobWF0Y2ggPSBhZGpTZWxBdHRyUmVnZXguZXhlYyhzZWxlY3RvcikpICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChtYXRjaFswXSA9PT0gJycpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBzd2FwICs9IHNlbGVjdG9yLnN1YnN0cmluZyhsYXN0SW5kZXgsIG1hdGNoLmluZGV4KTtcbiAgICAgICAgICAgIHN3YXAgKz0gc2VsZWN0b3Iuc3Vic3RyKG1hdGNoLmluZGV4ICsgbWF0Y2hbMV0ubGVuZ3RoLCBtYXRjaFsyXS5sZW5ndGgpO1xuICAgICAgICAgICAgc3dhcCArPSBzZWxlY3Rvci5zdWJzdHIobWF0Y2guaW5kZXgsIG1hdGNoWzFdLmxlbmd0aCk7XG4gICAgICAgICAgICBsYXN0SW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBzd2FwICs9IHNlbGVjdG9yLnN1YnN0cihsYXN0SW5kZXgpO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHN3YXA7XG4gICAgfTtcblxuICAgIC8vIEZGIGFuZCBvbGRlciBicm93c2VycyBzdG9yZSBydWxlcyB3aXRoIHBzZXVkbyBlbGVtZW50cyB1c2luZyBzaW5nbGUtY29sb24gc3ludGF4XG4gICAgZnVuY3Rpb24gc3dhcFBzZXVkb0VsU3ludGF4KHNlbGVjdG9yKSB7XG4gICAgICAgIGlmIChkb3VibGVDb2xvblBzZXVkb0VsUmVnZXguZXhlYyhzZWxlY3RvcikpIHtcbiAgICAgICAgICAgIHJldHVybiB0b1NpbmdsZUNvbG9uUHNldWRvRWxlbWVudHMoc2VsZWN0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxlY3RvcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRTdHlsZVByb3BlcnRpZXMocnVsZSwgcHJvcGVydGllcykge1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcGVydGllcykge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gcHJvcGVydGllc1trZXldO1xuICAgICAgICAgICAgdmFyIGltcG9ydGFudEluZGV4ID0gdmFsdWUuaW5kZXhPZignICFpbXBvcnRhbnQnKTtcblxuICAgICAgICAgICAgLy8gTW9kZXJuIGJyb3dzZXJzIHNlZW0gdG8gaGFuZGxlIG92ZXJyaWRlcyBmaW5lLCBidXQgSUU5IGRvZXNuJ3RcbiAgICAgICAgICAgIHJ1bGUuc3R5bGUucmVtb3ZlUHJvcGVydHkoa2V5KTsgXG4gICAgICAgICAgICBpZiAoaW1wb3J0YW50SW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgcnVsZS5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlLnN1YnN0cigwLCBpbXBvcnRhbnRJbmRleCksICdpbXBvcnRhbnQnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcnVsZS5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvQ2FtZWxDYXNlKHN0cikge1xuICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoLy0oW2Etel0pL2csIGZ1bmN0aW9uIChtYXRjaCwgc3VibWF0Y2gpIHtcbiAgICAgICAgICAgIHJldHVybiBzdWJtYXRjaC50b1VwcGVyQ2FzZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0cmFuc2Zvcm1DYW1lbENhc2VkUHJvcGVydHlOYW1lcyhvbGRQcm9wcykge1xuICAgICAgICB2YXIgbmV3UHJvcHMgPSB7fTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIG9sZFByb3BzKSB7XG4gICAgICAgICAgICBuZXdQcm9wc1t1bkNhbWVsQ2FzZShrZXkpXSA9IG9sZFByb3BzW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld1Byb3BzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVuQ2FtZWxDYXNlKHN0cikge1xuICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbQS1aXSkvZywgZnVuY3Rpb24obWF0Y2gsIHN1Ym1hdGNoKSB7XG4gICAgICAgICAgICByZXR1cm4gJy0nICsgc3VibWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdmFyIEpzcyA9IGZ1bmN0aW9uKGRvYykge1xuICAgICAgICB0aGlzLmRvYyA9IGRvYztcbiAgICAgICAgdGhpcy5oZWFkID0gdGhpcy5kb2MuaGVhZCB8fCB0aGlzLmRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICAgICAgICB0aGlzLnNoZWV0cyA9IHRoaXMuZG9jLnN0eWxlU2hlZXRzIHx8IFtdO1xuICAgIH07XG5cbiAgICBKc3MucHJvdG90eXBlID0ge1xuICAgICAgICAvLyBSZXR1cm5zIEpTUyBydWxlcyAoc2VsZWN0b3IgaXMgb3B0aW9uYWwpXG4gICAgICAgIGdldDogZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kZWZhdWx0U2hlZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWdncmVnYXRlU3R5bGVzKGdldFJ1bGVzKHRoaXMuZGVmYXVsdFNoZWV0LCBzZWxlY3RvcikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHJ1bGVzID0gZ2V0U2VsZWN0b3JzQW5kUnVsZXModGhpcy5kZWZhdWx0U2hlZXQpO1xuICAgICAgICAgICAgZm9yIChzZWxlY3RvciBpbiBydWxlcykge1xuICAgICAgICAgICAgICAgIHJ1bGVzW3NlbGVjdG9yXSA9IGFnZ3JlZ2F0ZVN0eWxlcyhydWxlc1tzZWxlY3Rvcl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJ1bGVzO1xuICAgICAgICB9LFxuICAgICAgICAvLyBSZXR1cm5zIGFsbCBydWxlcyAoc2VsZWN0b3IgaXMgcmVxdWlyZWQpXG4gICAgICAgIGdldEFsbDogZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgICAgICAgICAgIHZhciBwcm9wZXJ0aWVzID0ge307XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc2hlZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZXh0ZW5kKHByb3BlcnRpZXMsIGFnZ3JlZ2F0ZVN0eWxlcyhnZXRSdWxlcyh0aGlzLnNoZWV0c1tpXSwgc2VsZWN0b3IpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcHJvcGVydGllcztcbiAgICAgICAgfSxcbiAgICAgICAgLy8gQWRkcyBKU1MgcnVsZXMgZm9yIHRoZSBzZWxlY3RvciBiYXNlZCBvbiB0aGUgZ2l2ZW4gcHJvcGVydGllc1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHNlbGVjdG9yLCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGVmYXVsdFNoZWV0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0U2hlZXQgPSB0aGlzLl9jcmVhdGVTaGVldCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJvcGVydGllcyA9IHRyYW5zZm9ybUNhbWVsQ2FzZWRQcm9wZXJ0eU5hbWVzKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgdmFyIHJ1bGVzID0gZ2V0UnVsZXModGhpcy5kZWZhdWx0U2hlZXQsIHNlbGVjdG9yKTtcbiAgICAgICAgICAgIGlmICghcnVsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcnVsZXMgPSBbYWRkUnVsZSh0aGlzLmRlZmF1bHRTaGVldCwgc2VsZWN0b3IpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBzZXRTdHlsZVByb3BlcnRpZXMocnVsZXNbaV0sIHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBSZW1vdmVzIEpTUyBydWxlcyAoc2VsZWN0b3IgaXMgb3B0aW9uYWwpXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kZWZhdWx0U2hlZXQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKCFzZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZVNoZWV0KHRoaXMuZGVmYXVsdFNoZWV0KTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5kZWZhdWx0U2hlZXQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHJ1bGVzID0gZ2V0UnVsZXModGhpcy5kZWZhdWx0U2hlZXQsIHNlbGVjdG9yKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICByZW1vdmVSdWxlKHJ1bGVzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBydWxlcy5sZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIF9jcmVhdGVTaGVldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgc3R5bGVOb2RlID0gdGhpcy5kb2MuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgICAgICAgIHN0eWxlTm9kZS50eXBlID0gJ3RleHQvY3NzJztcbiAgICAgICAgICAgIHN0eWxlTm9kZS5yZWwgPSAnc3R5bGVzaGVldCc7XG4gICAgICAgICAgICB0aGlzLmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGVOb2RlKTtcbiAgICAgICAgICAgIHJldHVybiBzdHlsZU5vZGUuc2hlZXQ7XG4gICAgICAgIH0sXG4gICAgICAgIF9yZW1vdmVTaGVldDogZnVuY3Rpb24oc2hlZXQpIHtcbiAgICAgICAgICAgIHZhciBub2RlID0gc2hlZXQub3duZXJOb2RlO1xuICAgICAgICAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBleHBvcnRzID0gbmV3IEpzcyhkb2N1bWVudCk7XG4gICAgZXhwb3J0cy5mb3JEb2N1bWVudCA9IGZ1bmN0aW9uKGRvYykge1xuICAgICAgICByZXR1cm4gbmV3IEpzcyhkb2MpO1xuICAgIH07XG4gICAgcmV0dXJuIGV4cG9ydHM7XG59KSgpO1xuXG50eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cyAmJiAobW9kdWxlLmV4cG9ydHMgPSBqc3MpOyAvLyBDb21tb25KUyBzdXBwb3J0IiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcyEuLi8uLi9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi9mbGF0cGlja3IuY3NzXCIpO1xuXG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcblxudmFyIHRyYW5zZm9ybTtcbnZhciBpbnNlcnRJbnRvO1xuXG5cblxudmFyIG9wdGlvbnMgPSB7XCJobXJcIjp0cnVlfVxuXG5vcHRpb25zLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVxub3B0aW9ucy5pbnNlcnRJbnRvID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuaGVhZFxuICAgICAgICAgICAgICB9O1xuXG52YXIgdXBkYXRlID0gcmVxdWlyZShcIiEuLi8uLi9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qc1wiKShjb250ZW50LCBvcHRpb25zKTtcblxuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG5cbmlmKG1vZHVsZS5ob3QpIHtcblx0bW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcyEuLi8uLi9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi9mbGF0cGlja3IuY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4uLy4uL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcyEuL2ZsYXRwaWNrci5jc3NcIik7XG5cblx0XHRpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcblxuXHRcdHZhciBsb2NhbHMgPSAoZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0dmFyIGtleSwgaWR4ID0gMDtcblxuXHRcdFx0Zm9yKGtleSBpbiBhKSB7XG5cdFx0XHRcdGlmKCFiIHx8IGFba2V5XSAhPT0gYltrZXldKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGlkeCsrO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3Ioa2V5IGluIGIpIGlkeC0tO1xuXG5cdFx0XHRyZXR1cm4gaWR4ID09PSAwO1xuXHRcdH0oY29udGVudC5sb2NhbHMsIG5ld0NvbnRlbnQubG9jYWxzKSk7XG5cblx0XHRpZighbG9jYWxzKSB0aHJvdyBuZXcgRXJyb3IoJ0Fib3J0aW5nIENTUyBITVIgZHVlIHRvIGNoYW5nZWQgY3NzLW1vZHVsZXMgbG9jYWxzLicpO1xuXG5cdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHR9KTtcblxuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn0iLCJtb2R1bGUuZXhwb3J0cyA9IFwiLmZsYXRwaWNrci1jYWxlbmRhciB7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIG9wYWNpdHk6IDA7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgcGFkZGluZzogMDtcXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBub25lO1xcbiAgICAgICAgICBhbmltYXRpb246IG5vbmU7XFxuICBkaXJlY3Rpb246IGx0cjtcXG4gIGJvcmRlcjogMDtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgd2lkdGg6IDMwNy44NzVweDtcXG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIC1tcy10b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjtcXG4gICAgICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjtcXG4gIGJhY2tncm91bmQ6ICNmZmY7XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IDFweCAwIDAgI2U2ZTZlNiwgLTFweCAwIDAgI2U2ZTZlNiwgMCAxcHggMCAjZTZlNmU2LCAwIC0xcHggMCAjZTZlNmU2LCAwIDNweCAxM3B4IHJnYmEoMCwwLDAsMC4wOCk7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IDFweCAwIDAgI2U2ZTZlNiwgLTFweCAwIDAgI2U2ZTZlNiwgMCAxcHggMCAjZTZlNmU2LCAwIC0xcHggMCAjZTZlNmU2LCAwIDNweCAxM3B4IHJnYmEoMCwwLDAsMC4wOCk7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIub3BlbixcXG4uZmxhdHBpY2tyLWNhbGVuZGFyLmlubGluZSB7XFxuICBvcGFjaXR5OiAxO1xcbiAgbWF4LWhlaWdodDogNjQwcHg7XFxuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLm9wZW4ge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgei1pbmRleDogOTk5OTk7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIuYW5pbWF0ZS5vcGVuIHtcXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBmcEZhZGVJbkRvd24gMzAwbXMgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpO1xcbiAgICAgICAgICBhbmltYXRpb246IGZwRmFkZUluRG93biAzMDBtcyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSk7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIuaW5saW5lIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgdG9wOiAycHg7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIuc3RhdGljIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogY2FsYygxMDAlICsgMnB4KTtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5zdGF0aWMub3BlbiB7XFxuICB6LWluZGV4OiA5OTk7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5tdWx0aU1vbnRoIC5mbGF0cGlja3ItZGF5cyAuZGF5Q29udGFpbmVyOm50aC1jaGlsZChuKzEpIC5mbGF0cGlja3ItZGF5LmluUmFuZ2U6bnRoLWNoaWxkKDduKzcpIHtcXG4gIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xcbiAgICAgICAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIubXVsdGlNb250aCAuZmxhdHBpY2tyLWRheXMgLmRheUNvbnRhaW5lcjpudGgtY2hpbGQobisyKSAuZmxhdHBpY2tyLWRheS5pblJhbmdlOm50aC1jaGlsZCg3bisxKSB7XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IC0ycHggMCAwICNlNmU2ZTYsIDVweCAwIDAgI2U2ZTZlNjtcXG4gICAgICAgICAgYm94LXNoYWRvdzogLTJweCAwIDAgI2U2ZTZlNiwgNXB4IDAgMCAjZTZlNmU2O1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyIC5oYXNXZWVrcyAuZGF5Q29udGFpbmVyLFxcbi5mbGF0cGlja3ItY2FsZW5kYXIgLmhhc1RpbWUgLmRheUNvbnRhaW5lciB7XFxuICBib3JkZXItYm90dG9tOiAwO1xcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyIC5oYXNXZWVrcyAuZGF5Q29udGFpbmVyIHtcXG4gIGJvcmRlci1sZWZ0OiAwO1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLnNob3dUaW1lSW5wdXQuaGFzVGltZSAuZmxhdHBpY2tyLXRpbWUge1xcbiAgaGVpZ2h0OiA0MHB4O1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNmU2ZTY7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIubm9DYWxlbmRhci5oYXNUaW1lIC5mbGF0cGlja3ItdGltZSB7XFxuICBoZWlnaHQ6IGF1dG87XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXI6YmVmb3JlLFxcbi5mbGF0cGlja3ItY2FsZW5kYXI6YWZ0ZXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIGJvcmRlcjogc29saWQgdHJhbnNwYXJlbnQ7XFxuICBjb250ZW50OiAnJztcXG4gIGhlaWdodDogMDtcXG4gIHdpZHRoOiAwO1xcbiAgbGVmdDogMjJweDtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5yaWdodE1vc3Q6YmVmb3JlLFxcbi5mbGF0cGlja3ItY2FsZW5kYXIucmlnaHRNb3N0OmFmdGVyIHtcXG4gIGxlZnQ6IGF1dG87XFxuICByaWdodDogMjJweDtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhcjpiZWZvcmUge1xcbiAgYm9yZGVyLXdpZHRoOiA1cHg7XFxuICBtYXJnaW46IDAgLTVweDtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhcjphZnRlciB7XFxuICBib3JkZXItd2lkdGg6IDRweDtcXG4gIG1hcmdpbjogMCAtNHB4O1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLmFycm93VG9wOmJlZm9yZSxcXG4uZmxhdHBpY2tyLWNhbGVuZGFyLmFycm93VG9wOmFmdGVyIHtcXG4gIGJvdHRvbTogMTAwJTtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd1RvcDpiZWZvcmUge1xcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2U2ZTZlNjtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd1RvcDphZnRlciB7XFxuICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmO1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLmFycm93Qm90dG9tOmJlZm9yZSxcXG4uZmxhdHBpY2tyLWNhbGVuZGFyLmFycm93Qm90dG9tOmFmdGVyIHtcXG4gIHRvcDogMTAwJTtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd0JvdHRvbTpiZWZvcmUge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2U2ZTZlNjtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd0JvdHRvbTphZnRlciB7XFxuICBib3JkZXItdG9wLWNvbG9yOiAjZmZmO1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyOmZvY3VzIHtcXG4gIG91dGxpbmU6IDA7XFxufVxcbi5mbGF0cGlja3Itd3JhcHBlciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcbi5mbGF0cGlja3ItbW9udGhzIHtcXG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xcbiAgZGlzcGxheTogLXdlYmtpdC1mbGV4O1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbn1cXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLW1vbnRoIHtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgY29sb3I6IHJnYmEoMCwwLDAsMC45KTtcXG4gIGZpbGw6IHJnYmEoMCwwLDAsMC45KTtcXG4gIGhlaWdodDogMzRweDtcXG4gIGxpbmUtaGVpZ2h0OiAxO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICAtd2Via2l0LWJveC1mbGV4OiAxO1xcbiAgLXdlYmtpdC1mbGV4OiAxO1xcbiAgICAgIC1tcy1mbGV4OiAxO1xcbiAgICAgICAgICBmbGV4OiAxO1xcbn1cXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLXByZXYtbW9udGgsXFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1uZXh0LW1vbnRoIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGhlaWdodDogMzRweDtcXG4gIHBhZGRpbmc6IDEwcHg7XFxuICB6LWluZGV4OiAzO1xcbiAgY29sb3I6IHJnYmEoMCwwLDAsMC45KTtcXG4gIGZpbGw6IHJnYmEoMCwwLDAsMC45KTtcXG59XFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1wcmV2LW1vbnRoLmZsYXRwaWNrci1kaXNhYmxlZCxcXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLW5leHQtbW9udGguZmxhdHBpY2tyLWRpc2FibGVkIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItcHJldi1tb250aCBpLFxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbmV4dC1tb250aCBpIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1wcmV2LW1vbnRoLmZsYXRwaWNrci1wcmV2LW1vbnRoLFxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbmV4dC1tb250aC5mbGF0cGlja3ItcHJldi1tb250aCB7XFxuLypcXG4gICAgICAvKnJ0bDpiZWdpbjppZ25vcmUqL1xcbi8qXFxuICAgICAgKi9cXG4gIGxlZnQ6IDA7XFxuLypcXG4gICAgICAvKnJ0bDplbmQ6aWdub3JlKi9cXG4vKlxcbiAgICAgICovXFxufVxcbi8qXFxuICAgICAgLypydGw6YmVnaW46aWdub3JlKi9cXG4vKlxcbiAgICAgIC8qcnRsOmVuZDppZ25vcmUqL1xcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItcHJldi1tb250aC5mbGF0cGlja3ItbmV4dC1tb250aCxcXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLW5leHQtbW9udGguZmxhdHBpY2tyLW5leHQtbW9udGgge1xcbi8qXFxuICAgICAgLypydGw6YmVnaW46aWdub3JlKi9cXG4vKlxcbiAgICAgICovXFxuICByaWdodDogMDtcXG4vKlxcbiAgICAgIC8qcnRsOmVuZDppZ25vcmUqL1xcbi8qXFxuICAgICAgKi9cXG59XFxuLypcXG4gICAgICAvKnJ0bDpiZWdpbjppZ25vcmUqL1xcbi8qXFxuICAgICAgLypydGw6ZW5kOmlnbm9yZSovXFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1wcmV2LW1vbnRoOmhvdmVyLFxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbmV4dC1tb250aDpob3ZlciB7XFxuICBjb2xvcjogIzk1OWVhOTtcXG59XFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1wcmV2LW1vbnRoOmhvdmVyIHN2ZyxcXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLW5leHQtbW9udGg6aG92ZXIgc3ZnIHtcXG4gIGZpbGw6ICNmNjQ3NDc7XFxufVxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItcHJldi1tb250aCBzdmcsXFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1uZXh0LW1vbnRoIHN2ZyB7XFxuICB3aWR0aDogMTRweDtcXG4gIGhlaWdodDogMTRweDtcXG59XFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1wcmV2LW1vbnRoIHN2ZyBwYXRoLFxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbmV4dC1tb250aCBzdmcgcGF0aCB7XFxuICAtd2Via2l0LXRyYW5zaXRpb246IGZpbGwgMC4xcztcXG4gIHRyYW5zaXRpb246IGZpbGwgMC4xcztcXG4gIGZpbGw6IGluaGVyaXQ7XFxufVxcbi5udW1JbnB1dFdyYXBwZXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgaGVpZ2h0OiBhdXRvO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyIGlucHV0LFxcbi5udW1JbnB1dFdyYXBwZXIgc3BhbiB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgaW5wdXQge1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgaW5wdXQ6Oi1tcy1jbGVhciB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyIGlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLFxcbi5udW1JbnB1dFdyYXBwZXIgaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24ge1xcbiAgbWFyZ2luOiAwO1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyIHNwYW4ge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IDA7XFxuICB3aWR0aDogMTRweDtcXG4gIHBhZGRpbmc6IDAgNHB4IDAgMnB4O1xcbiAgaGVpZ2h0OiA1MCU7XFxuICBsaW5lLWhlaWdodDogNTAlO1xcbiAgb3BhY2l0eTogMDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNTcsNTcsNTcsMC4xNSk7XFxuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgc3Bhbjpob3ZlciB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMSk7XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgc3BhbjphY3RpdmUge1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjIpO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyIHNwYW46YWZ0ZXIge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG59XFxuLm51bUlucHV0V3JhcHBlciBzcGFuLmFycm93VXAge1xcbiAgdG9wOiAwO1xcbiAgYm9yZGVyLWJvdHRvbTogMDtcXG59XFxuLm51bUlucHV0V3JhcHBlciBzcGFuLmFycm93VXA6YWZ0ZXIge1xcbiAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1yaWdodDogNHB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWJvdHRvbTogNHB4IHNvbGlkIHJnYmEoNTcsNTcsNTcsMC42KTtcXG4gIHRvcDogMjYlO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyIHNwYW4uYXJyb3dEb3duIHtcXG4gIHRvcDogNTAlO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyIHNwYW4uYXJyb3dEb3duOmFmdGVyIHtcXG4gIGJvcmRlci1sZWZ0OiA0cHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmlnaHQ6IDRweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci10b3A6IDRweCBzb2xpZCByZ2JhKDU3LDU3LDU3LDAuNik7XFxuICB0b3A6IDQwJTtcXG59XFxuLm51bUlucHV0V3JhcHBlciBzcGFuIHN2ZyB7XFxuICB3aWR0aDogaW5oZXJpdDtcXG4gIGhlaWdodDogYXV0bztcXG59XFxuLm51bUlucHV0V3JhcHBlciBzcGFuIHN2ZyBwYXRoIHtcXG4gIGZpbGw6IHJnYmEoMCwwLDAsMC41KTtcXG59XFxuLm51bUlucHV0V3JhcHBlcjpob3ZlciB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMDUpO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyOmhvdmVyIHNwYW4ge1xcbiAgb3BhY2l0eTogMTtcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIHtcXG4gIGZvbnQtc2l6ZTogMTM1JTtcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbiAgZm9udC13ZWlnaHQ6IDMwMDtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgd2lkdGg6IDc1JTtcXG4gIGxlZnQ6IDEyLjUlO1xcbiAgcGFkZGluZzogNy40OHB4IDAgMCAwO1xcbiAgbGluZS1oZWlnaHQ6IDE7XFxuICBoZWlnaHQ6IDM0cHg7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMHB4LCAwcHgsIDBweCk7XFxuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMHB4LCAwcHgsIDBweCk7XFxufVxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCBzcGFuLmN1ci1tb250aCB7XFxuICBmb250LWZhbWlseTogaW5oZXJpdDtcXG4gIGZvbnQtd2VpZ2h0OiA3MDA7XFxuICBjb2xvcjogaW5oZXJpdDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIG1hcmdpbi1sZWZ0OiAwLjVjaDtcXG4gIHBhZGRpbmc6IDA7XFxufVxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCBzcGFuLmN1ci1tb250aDpob3ZlciB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMDUpO1xcbn1cXG4uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGggLm51bUlucHV0V3JhcHBlciB7XFxuICB3aWR0aDogNmNoO1xcbiAgd2lkdGg6IDdjaFxcXFwwO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbn1cXG4uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGggLm51bUlucHV0V3JhcHBlciBzcGFuLmFycm93VXA6YWZ0ZXIge1xcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogcmdiYSgwLDAsMCwwLjkpO1xcbn1cXG4uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGggLm51bUlucHV0V3JhcHBlciBzcGFuLmFycm93RG93bjphZnRlciB7XFxuICBib3JkZXItdG9wLWNvbG9yOiByZ2JhKDAsMCwwLDAuOSk7XFxufVxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCBpbnB1dC5jdXIteWVhciB7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbiAgY3Vyc29yOiB0ZXh0O1xcbiAgcGFkZGluZzogMCAwIDAgMC41Y2g7XFxuICBtYXJnaW46IDA7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBmb250LXNpemU6IGluaGVyaXQ7XFxuICBmb250LWZhbWlseTogaW5oZXJpdDtcXG4gIGZvbnQtd2VpZ2h0OiAzMDA7XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gIGhlaWdodDogYXV0bztcXG4gIGJvcmRlcjogMDtcXG4gIGJvcmRlci1yYWRpdXM6IDA7XFxuICB2ZXJ0aWNhbC1hbGlnbjogaW5pdGlhbDtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xcbiAgLW1vei1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XFxuICBhcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XFxufVxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCBpbnB1dC5jdXIteWVhcjpmb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbn1cXG4uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGggaW5wdXQuY3VyLXllYXJbZGlzYWJsZWRdLFxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCBpbnB1dC5jdXIteWVhcltkaXNhYmxlZF06aG92ZXIge1xcbiAgZm9udC1zaXplOiAxMDAlO1xcbiAgY29sb3I6IHJnYmEoMCwwLDAsMC41KTtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCAuZmxhdHBpY2tyLW1vbnRoRHJvcGRvd24tbW9udGhzIHtcXG4gIGFwcGVhcmFuY2U6IG1lbnVsaXN0O1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXI6IG5vbmU7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgZm9udC1zaXplOiBpbmhlcml0O1xcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XFxuICBmb250LXdlaWdodDogMzAwO1xcbiAgaGVpZ2h0OiBhdXRvO1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxuICBtYXJnaW46IC0xcHggMCAwIDA7XFxuICBvdXRsaW5lOiBub25lO1xcbiAgcGFkZGluZzogMCAwIDAgMC41Y2g7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB2ZXJ0aWNhbC1hbGlnbjogaW5pdGlhbDtcXG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbWVudWxpc3Q7XFxuICAtbW96LWFwcGVhcmFuY2U6IG1lbnVsaXN0O1xcbiAgd2lkdGg6IGF1dG87XFxufVxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCAuZmxhdHBpY2tyLW1vbnRoRHJvcGRvd24tbW9udGhzOmZvY3VzLFxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCAuZmxhdHBpY2tyLW1vbnRoRHJvcGRvd24tbW9udGhzOmFjdGl2ZSB7XFxuICBvdXRsaW5lOiBub25lO1xcbn1cXG4uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGggLmZsYXRwaWNrci1tb250aERyb3Bkb3duLW1vbnRoczpob3ZlciB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMDUpO1xcbn1cXG4uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGggLmZsYXRwaWNrci1tb250aERyb3Bkb3duLW1vbnRocyAuZmxhdHBpY2tyLW1vbnRoRHJvcGRvd24tbW9udGgge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBvdXRsaW5lOiBub25lO1xcbiAgcGFkZGluZzogMDtcXG59XFxuLmZsYXRwaWNrci13ZWVrZGF5cyB7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICB3aWR0aDogMTAwJTtcXG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xcbiAgZGlzcGxheTogLXdlYmtpdC1mbGV4O1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcXG4gIC13ZWJraXQtYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgaGVpZ2h0OiAyOHB4O1xcbn1cXG4uZmxhdHBpY2tyLXdlZWtkYXlzIC5mbGF0cGlja3Itd2Vla2RheWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcXG4gIGRpc3BsYXk6IC13ZWJraXQtZmxleDtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XFxuICAtd2Via2l0LWZsZXg6IDE7XFxuICAgICAgLW1zLWZsZXg6IDE7XFxuICAgICAgICAgIGZsZXg6IDE7XFxufVxcbnNwYW4uZmxhdHBpY2tyLXdlZWtkYXkge1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgZm9udC1zaXplOiA5MCU7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIGNvbG9yOiByZ2JhKDAsMCwwLDAuNTQpO1xcbiAgbGluZS1oZWlnaHQ6IDE7XFxuICBtYXJnaW46IDA7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XFxuICAtd2Via2l0LWZsZXg6IDE7XFxuICAgICAgLW1zLWZsZXg6IDE7XFxuICAgICAgICAgIGZsZXg6IDE7XFxuICBmb250LXdlaWdodDogYm9sZGVyO1xcbn1cXG4uZGF5Q29udGFpbmVyLFxcbi5mbGF0cGlja3Itd2Vla3Mge1xcbiAgcGFkZGluZzogMXB4IDAgMCAwO1xcbn1cXG4uZmxhdHBpY2tyLWRheXMge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xcbiAgZGlzcGxheTogLXdlYmtpdC1mbGV4O1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLXdlYmtpdC1ib3gtYWxpZ246IHN0YXJ0O1xcbiAgLXdlYmtpdC1hbGlnbi1pdGVtczogZmxleC1zdGFydDtcXG4gICAgICAtbXMtZmxleC1hbGlnbjogc3RhcnQ7XFxuICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcbiAgd2lkdGg6IDMwNy44NzVweDtcXG59XFxuLmZsYXRwaWNrci1kYXlzOmZvY3VzIHtcXG4gIG91dGxpbmU6IDA7XFxufVxcbi5kYXlDb250YWluZXIge1xcbiAgcGFkZGluZzogMDtcXG4gIG91dGxpbmU6IDA7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgd2lkdGg6IDMwNy44NzVweDtcXG4gIG1pbi13aWR0aDogMzA3Ljg3NXB4O1xcbiAgbWF4LXdpZHRoOiAzMDcuODc1cHg7XFxuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xcbiAgZGlzcGxheTogLXdlYmtpdC1mbGV4O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC13ZWJraXQtZmxleC13cmFwOiB3cmFwO1xcbiAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwO1xcbiAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcXG4gIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XFxuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDBweCwgMHB4LCAwcHgpO1xcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDBweCwgMHB4LCAwcHgpO1xcbiAgb3BhY2l0eTogMTtcXG59XFxuLmRheUNvbnRhaW5lciArIC5kYXlDb250YWluZXIge1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAtMXB4IDAgMCAjZTZlNmU2O1xcbiAgICAgICAgICBib3gtc2hhZG93OiAtMXB4IDAgMCAjZTZlNmU2O1xcbn1cXG4uZmxhdHBpY2tyLWRheSB7XFxuICBiYWNrZ3JvdW5kOiBub25lO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmFkaXVzOiAxNTBweDtcXG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGNvbG9yOiAjMzkzOTM5O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIHdpZHRoOiAxNC4yODU3MTQzJTtcXG4gIC13ZWJraXQtZmxleC1iYXNpczogMTQuMjg1NzE0MyU7XFxuICAgICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDE0LjI4NTcxNDMlO1xcbiAgICAgICAgICBmbGV4LWJhc2lzOiAxNC4yODU3MTQzJTtcXG4gIG1heC13aWR0aDogMzlweDtcXG4gIGhlaWdodDogMzlweDtcXG4gIGxpbmUtaGVpZ2h0OiAzOXB4O1xcbiAgbWFyZ2luOiAwO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xcbiAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG4uZmxhdHBpY2tyLWRheS5pblJhbmdlLFxcbi5mbGF0cGlja3ItZGF5LnByZXZNb250aERheS5pblJhbmdlLFxcbi5mbGF0cGlja3ItZGF5Lm5leHRNb250aERheS5pblJhbmdlLFxcbi5mbGF0cGlja3ItZGF5LnRvZGF5LmluUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkucHJldk1vbnRoRGF5LnRvZGF5LmluUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkubmV4dE1vbnRoRGF5LnRvZGF5LmluUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXk6aG92ZXIsXFxuLmZsYXRwaWNrci1kYXkucHJldk1vbnRoRGF5OmhvdmVyLFxcbi5mbGF0cGlja3ItZGF5Lm5leHRNb250aERheTpob3ZlcixcXG4uZmxhdHBpY2tyLWRheTpmb2N1cyxcXG4uZmxhdHBpY2tyLWRheS5wcmV2TW9udGhEYXk6Zm9jdXMsXFxuLmZsYXRwaWNrci1kYXkubmV4dE1vbnRoRGF5OmZvY3VzIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIG91dGxpbmU6IDA7XFxuICBiYWNrZ3JvdW5kOiAjZTZlNmU2O1xcbiAgYm9yZGVyLWNvbG9yOiAjZTZlNmU2O1xcbn1cXG4uZmxhdHBpY2tyLWRheS50b2RheSB7XFxuICBib3JkZXItY29sb3I6ICM5NTllYTk7XFxufVxcbi5mbGF0cGlja3ItZGF5LnRvZGF5OmhvdmVyLFxcbi5mbGF0cGlja3ItZGF5LnRvZGF5OmZvY3VzIHtcXG4gIGJvcmRlci1jb2xvcjogIzk1OWVhOTtcXG4gIGJhY2tncm91bmQ6ICM5NTllYTk7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuLmZsYXRwaWNrci1kYXkuc2VsZWN0ZWQsXFxuLmZsYXRwaWNrci1kYXkuc3RhcnRSYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5lbmRSYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5zZWxlY3RlZC5pblJhbmdlLFxcbi5mbGF0cGlja3ItZGF5LnN0YXJ0UmFuZ2UuaW5SYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5lbmRSYW5nZS5pblJhbmdlLFxcbi5mbGF0cGlja3ItZGF5LnNlbGVjdGVkOmZvY3VzLFxcbi5mbGF0cGlja3ItZGF5LnN0YXJ0UmFuZ2U6Zm9jdXMsXFxuLmZsYXRwaWNrci1kYXkuZW5kUmFuZ2U6Zm9jdXMsXFxuLmZsYXRwaWNrci1kYXkuc2VsZWN0ZWQ6aG92ZXIsXFxuLmZsYXRwaWNrci1kYXkuc3RhcnRSYW5nZTpob3ZlcixcXG4uZmxhdHBpY2tyLWRheS5lbmRSYW5nZTpob3ZlcixcXG4uZmxhdHBpY2tyLWRheS5zZWxlY3RlZC5wcmV2TW9udGhEYXksXFxuLmZsYXRwaWNrci1kYXkuc3RhcnRSYW5nZS5wcmV2TW9udGhEYXksXFxuLmZsYXRwaWNrci1kYXkuZW5kUmFuZ2UucHJldk1vbnRoRGF5LFxcbi5mbGF0cGlja3ItZGF5LnNlbGVjdGVkLm5leHRNb250aERheSxcXG4uZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlLm5leHRNb250aERheSxcXG4uZmxhdHBpY2tyLWRheS5lbmRSYW5nZS5uZXh0TW9udGhEYXkge1xcbiAgYmFja2dyb3VuZDogIzU2OWZmNztcXG4gIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTtcXG4gICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyLWNvbG9yOiAjNTY5ZmY3O1xcbn1cXG4uZmxhdHBpY2tyLWRheS5zZWxlY3RlZC5zdGFydFJhbmdlLFxcbi5mbGF0cGlja3ItZGF5LnN0YXJ0UmFuZ2Uuc3RhcnRSYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5lbmRSYW5nZS5zdGFydFJhbmdlIHtcXG4gIGJvcmRlci1yYWRpdXM6IDUwcHggMCAwIDUwcHg7XFxufVxcbi5mbGF0cGlja3ItZGF5LnNlbGVjdGVkLmVuZFJhbmdlLFxcbi5mbGF0cGlja3ItZGF5LnN0YXJ0UmFuZ2UuZW5kUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkuZW5kUmFuZ2UuZW5kUmFuZ2Uge1xcbiAgYm9yZGVyLXJhZGl1czogMCA1MHB4IDUwcHggMDtcXG59XFxuLmZsYXRwaWNrci1kYXkuc2VsZWN0ZWQuc3RhcnRSYW5nZSArIC5lbmRSYW5nZTpub3QoOm50aC1jaGlsZCg3bisxKSksXFxuLmZsYXRwaWNrci1kYXkuc3RhcnRSYW5nZS5zdGFydFJhbmdlICsgLmVuZFJhbmdlOm5vdCg6bnRoLWNoaWxkKDduKzEpKSxcXG4uZmxhdHBpY2tyLWRheS5lbmRSYW5nZS5zdGFydFJhbmdlICsgLmVuZFJhbmdlOm5vdCg6bnRoLWNoaWxkKDduKzEpKSB7XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IC0xMHB4IDAgMCAjNTY5ZmY3O1xcbiAgICAgICAgICBib3gtc2hhZG93OiAtMTBweCAwIDAgIzU2OWZmNztcXG59XFxuLmZsYXRwaWNrci1kYXkuc2VsZWN0ZWQuc3RhcnRSYW5nZS5lbmRSYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlLnN0YXJ0UmFuZ2UuZW5kUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkuZW5kUmFuZ2Uuc3RhcnRSYW5nZS5lbmRSYW5nZSB7XFxuICBib3JkZXItcmFkaXVzOiA1MHB4O1xcbn1cXG4uZmxhdHBpY2tyLWRheS5pblJhbmdlIHtcXG4gIGJvcmRlci1yYWRpdXM6IDA7XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IC01cHggMCAwICNlNmU2ZTYsIDVweCAwIDAgI2U2ZTZlNjtcXG4gICAgICAgICAgYm94LXNoYWRvdzogLTVweCAwIDAgI2U2ZTZlNiwgNXB4IDAgMCAjZTZlNmU2O1xcbn1cXG4uZmxhdHBpY2tyLWRheS5mbGF0cGlja3ItZGlzYWJsZWQsXFxuLmZsYXRwaWNrci1kYXkuZmxhdHBpY2tyLWRpc2FibGVkOmhvdmVyLFxcbi5mbGF0cGlja3ItZGF5LnByZXZNb250aERheSxcXG4uZmxhdHBpY2tyLWRheS5uZXh0TW9udGhEYXksXFxuLmZsYXRwaWNrci1kYXkubm90QWxsb3dlZCxcXG4uZmxhdHBpY2tyLWRheS5ub3RBbGxvd2VkLnByZXZNb250aERheSxcXG4uZmxhdHBpY2tyLWRheS5ub3RBbGxvd2VkLm5leHRNb250aERheSB7XFxuICBjb2xvcjogcmdiYSg1Nyw1Nyw1NywwLjMpO1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbn1cXG4uZmxhdHBpY2tyLWRheS5mbGF0cGlja3ItZGlzYWJsZWQsXFxuLmZsYXRwaWNrci1kYXkuZmxhdHBpY2tyLWRpc2FibGVkOmhvdmVyIHtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxuICBjb2xvcjogcmdiYSg1Nyw1Nyw1NywwLjEpO1xcbn1cXG4uZmxhdHBpY2tyLWRheS53ZWVrLnNlbGVjdGVkIHtcXG4gIGJvcmRlci1yYWRpdXM6IDA7XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IC01cHggMCAwICM1NjlmZjcsIDVweCAwIDAgIzU2OWZmNztcXG4gICAgICAgICAgYm94LXNoYWRvdzogLTVweCAwIDAgIzU2OWZmNywgNXB4IDAgMCAjNTY5ZmY3O1xcbn1cXG4uZmxhdHBpY2tyLWRheS5oaWRkZW4ge1xcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbn1cXG4ucmFuZ2VNb2RlIC5mbGF0cGlja3ItZGF5IHtcXG4gIG1hcmdpbi10b3A6IDFweDtcXG59XFxuLmZsYXRwaWNrci13ZWVrd3JhcHBlciB7XFxuICBmbG9hdDogbGVmdDtcXG59XFxuLmZsYXRwaWNrci13ZWVrd3JhcHBlciAuZmxhdHBpY2tyLXdlZWtzIHtcXG4gIHBhZGRpbmc6IDAgMTJweDtcXG4gIC13ZWJraXQtYm94LXNoYWRvdzogMXB4IDAgMCAjZTZlNmU2O1xcbiAgICAgICAgICBib3gtc2hhZG93OiAxcHggMCAwICNlNmU2ZTY7XFxufVxcbi5mbGF0cGlja3Itd2Vla3dyYXBwZXIgLmZsYXRwaWNrci13ZWVrZGF5IHtcXG4gIGZsb2F0OiBub25lO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBsaW5lLWhlaWdodDogMjhweDtcXG59XFxuLmZsYXRwaWNrci13ZWVrd3JhcHBlciBzcGFuLmZsYXRwaWNrci1kYXksXFxuLmZsYXRwaWNrci13ZWVrd3JhcHBlciBzcGFuLmZsYXRwaWNrci1kYXk6aG92ZXIge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1heC13aWR0aDogbm9uZTtcXG4gIGNvbG9yOiByZ2JhKDU3LDU3LDU3LDAuMyk7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIGJvcmRlcjogbm9uZTtcXG59XFxuLmZsYXRwaWNrci1pbm5lckNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xcbiAgZGlzcGxheTogLXdlYmtpdC1mbGV4O1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuLmZsYXRwaWNrci1yQ29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHBhZGRpbmc6IDA7XFxuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxufVxcbi5mbGF0cGlja3ItdGltZSB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBvdXRsaW5lOiAwO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBoZWlnaHQ6IDA7XFxuICBsaW5lLWhlaWdodDogNDBweDtcXG4gIG1heC1oZWlnaHQ6IDQwcHg7XFxuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxuICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcbi5mbGF0cGlja3ItdGltZTphZnRlciB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGRpc3BsYXk6IHRhYmxlO1xcbiAgY2xlYXI6IGJvdGg7XFxufVxcbi5mbGF0cGlja3ItdGltZSAubnVtSW5wdXRXcmFwcGVyIHtcXG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XFxuICAtd2Via2l0LWZsZXg6IDE7XFxuICAgICAgLW1zLWZsZXg6IDE7XFxuICAgICAgICAgIGZsZXg6IDE7XFxuICB3aWR0aDogNDAlO1xcbiAgaGVpZ2h0OiA0MHB4O1xcbiAgZmxvYXQ6IGxlZnQ7XFxufVxcbi5mbGF0cGlja3ItdGltZSAubnVtSW5wdXRXcmFwcGVyIHNwYW4uYXJyb3dVcDphZnRlciB7XFxuICBib3JkZXItYm90dG9tLWNvbG9yOiAjMzkzOTM5O1xcbn1cXG4uZmxhdHBpY2tyLXRpbWUgLm51bUlucHV0V3JhcHBlciBzcGFuLmFycm93RG93bjphZnRlciB7XFxuICBib3JkZXItdG9wLWNvbG9yOiAjMzkzOTM5O1xcbn1cXG4uZmxhdHBpY2tyLXRpbWUuaGFzU2Vjb25kcyAubnVtSW5wdXRXcmFwcGVyIHtcXG4gIHdpZHRoOiAyNiU7XFxufVxcbi5mbGF0cGlja3ItdGltZS50aW1lMjRociAubnVtSW5wdXRXcmFwcGVyIHtcXG4gIHdpZHRoOiA0OSU7XFxufVxcbi5mbGF0cGlja3ItdGltZSBpbnB1dCB7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTtcXG4gICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGJvcmRlcjogMDtcXG4gIGJvcmRlci1yYWRpdXM6IDA7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgaGVpZ2h0OiBpbmhlcml0O1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxuICBjb2xvcjogIzM5MzkzOTtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xcbiAgLW1vei1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XFxuICBhcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XFxufVxcbi5mbGF0cGlja3ItdGltZSBpbnB1dC5mbGF0cGlja3ItaG91ciB7XFxuICBmb250LXdlaWdodDogYm9sZDtcXG59XFxuLmZsYXRwaWNrci10aW1lIGlucHV0LmZsYXRwaWNrci1taW51dGUsXFxuLmZsYXRwaWNrci10aW1lIGlucHV0LmZsYXRwaWNrci1zZWNvbmQge1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG59XFxuLmZsYXRwaWNrci10aW1lIGlucHV0OmZvY3VzIHtcXG4gIG91dGxpbmU6IDA7XFxuICBib3JkZXI6IDA7XFxufVxcbi5mbGF0cGlja3ItdGltZSAuZmxhdHBpY2tyLXRpbWUtc2VwYXJhdG9yLFxcbi5mbGF0cGlja3ItdGltZSAuZmxhdHBpY2tyLWFtLXBtIHtcXG4gIGhlaWdodDogaW5oZXJpdDtcXG4gIGZsb2F0OiBsZWZ0O1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxuICBjb2xvcjogIzM5MzkzOTtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xcbiAgd2lkdGg6IDIlO1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gIC13ZWJraXQtYWxpZ24tc2VsZjogY2VudGVyO1xcbiAgICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGNlbnRlcjtcXG4gICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xcbn1cXG4uZmxhdHBpY2tyLXRpbWUgLmZsYXRwaWNrci1hbS1wbSB7XFxuICBvdXRsaW5lOiAwO1xcbiAgd2lkdGg6IDE4JTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxufVxcbi5mbGF0cGlja3ItdGltZSBpbnB1dDpob3ZlcixcXG4uZmxhdHBpY2tyLXRpbWUgLmZsYXRwaWNrci1hbS1wbTpob3ZlcixcXG4uZmxhdHBpY2tyLXRpbWUgaW5wdXQ6Zm9jdXMsXFxuLmZsYXRwaWNrci10aW1lIC5mbGF0cGlja3ItYW0tcG06Zm9jdXMge1xcbiAgYmFja2dyb3VuZDogI2VlZTtcXG59XFxuLmZsYXRwaWNrci1pbnB1dFtyZWFkb25seV0ge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5ALXdlYmtpdC1rZXlmcmFtZXMgZnBGYWRlSW5Eb3duIHtcXG4gIGZyb20ge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgLTIwcHgsIDApO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgLTIwcHgsIDApO1xcbiAgfVxcbiAgdG8ge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBmcEZhZGVJbkRvd24ge1xcbiAgZnJvbSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAtMjBweCwgMCk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAtMjBweCwgMCk7XFxuICB9XFxuICB0byB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xcbiAgfVxcbn1cXG5cIiIsIlxuLyoqXG4gKiBXaGVuIHNvdXJjZSBtYXBzIGFyZSBlbmFibGVkLCBgc3R5bGUtbG9hZGVyYCB1c2VzIGEgbGluayBlbGVtZW50IHdpdGggYSBkYXRhLXVyaSB0b1xuICogZW1iZWQgdGhlIGNzcyBvbiB0aGUgcGFnZS4gVGhpcyBicmVha3MgYWxsIHJlbGF0aXZlIHVybHMgYmVjYXVzZSBub3cgdGhleSBhcmUgcmVsYXRpdmUgdG8gYVxuICogYnVuZGxlIGluc3RlYWQgb2YgdGhlIGN1cnJlbnQgcGFnZS5cbiAqXG4gKiBPbmUgc29sdXRpb24gaXMgdG8gb25seSB1c2UgZnVsbCB1cmxzLCBidXQgdGhhdCBtYXkgYmUgaW1wb3NzaWJsZS5cbiAqXG4gKiBJbnN0ZWFkLCB0aGlzIGZ1bmN0aW9uIFwiZml4ZXNcIiB0aGUgcmVsYXRpdmUgdXJscyB0byBiZSBhYnNvbHV0ZSBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgcGFnZSBsb2NhdGlvbi5cbiAqXG4gKiBBIHJ1ZGltZW50YXJ5IHRlc3Qgc3VpdGUgaXMgbG9jYXRlZCBhdCBgdGVzdC9maXhVcmxzLmpzYCBhbmQgY2FuIGJlIHJ1biB2aWEgdGhlIGBucG0gdGVzdGAgY29tbWFuZC5cbiAqXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY3NzKSB7XG4gIC8vIGdldCBjdXJyZW50IGxvY2F0aW9uXG4gIHZhciBsb2NhdGlvbiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LmxvY2F0aW9uO1xuXG4gIGlmICghbG9jYXRpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJmaXhVcmxzIHJlcXVpcmVzIHdpbmRvdy5sb2NhdGlvblwiKTtcbiAgfVxuXG5cdC8vIGJsYW5rIG9yIG51bGw/XG5cdGlmICghY3NzIHx8IHR5cGVvZiBjc3MgIT09IFwic3RyaW5nXCIpIHtcblx0ICByZXR1cm4gY3NzO1xuICB9XG5cbiAgdmFyIGJhc2VVcmwgPSBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIGxvY2F0aW9uLmhvc3Q7XG4gIHZhciBjdXJyZW50RGlyID0gYmFzZVVybCArIGxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL1xcL1teXFwvXSokLywgXCIvXCIpO1xuXG5cdC8vIGNvbnZlcnQgZWFjaCB1cmwoLi4uKVxuXHQvKlxuXHRUaGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBqdXN0IGEgd2F5IHRvIHJlY3Vyc2l2ZWx5IG1hdGNoIGJyYWNrZXRzIHdpdGhpblxuXHRhIHN0cmluZy5cblxuXHQgL3VybFxccypcXCggID0gTWF0Y2ggb24gdGhlIHdvcmQgXCJ1cmxcIiB3aXRoIGFueSB3aGl0ZXNwYWNlIGFmdGVyIGl0IGFuZCB0aGVuIGEgcGFyZW5zXG5cdCAgICggID0gU3RhcnQgYSBjYXB0dXJpbmcgZ3JvdXBcblx0ICAgICAoPzogID0gU3RhcnQgYSBub24tY2FwdHVyaW5nIGdyb3VwXG5cdCAgICAgICAgIFteKShdICA9IE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBwYXJlbnRoZXNlc1xuXHQgICAgICAgICB8ICA9IE9SXG5cdCAgICAgICAgIFxcKCAgPSBNYXRjaCBhIHN0YXJ0IHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICAoPzogID0gU3RhcnQgYW5vdGhlciBub24tY2FwdHVyaW5nIGdyb3Vwc1xuXHQgICAgICAgICAgICAgICAgIFteKShdKyAgPSBNYXRjaCBhbnl0aGluZyB0aGF0IGlzbid0IGEgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICAgICB8ICA9IE9SXG5cdCAgICAgICAgICAgICAgICAgXFwoICA9IE1hdGNoIGEgc3RhcnQgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICAgICAgICAgW14pKF0qICA9IE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgICAgIFxcKSAgPSBNYXRjaCBhIGVuZCBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgKSAgPSBFbmQgR3JvdXBcbiAgICAgICAgICAgICAgKlxcKSA9IE1hdGNoIGFueXRoaW5nIGFuZCB0aGVuIGEgY2xvc2UgcGFyZW5zXG4gICAgICAgICAgKSAgPSBDbG9zZSBub24tY2FwdHVyaW5nIGdyb3VwXG4gICAgICAgICAgKiAgPSBNYXRjaCBhbnl0aGluZ1xuICAgICAgICkgID0gQ2xvc2UgY2FwdHVyaW5nIGdyb3VwXG5cdCBcXCkgID0gTWF0Y2ggYSBjbG9zZSBwYXJlbnNcblxuXHQgL2dpICA9IEdldCBhbGwgbWF0Y2hlcywgbm90IHRoZSBmaXJzdC4gIEJlIGNhc2UgaW5zZW5zaXRpdmUuXG5cdCAqL1xuXHR2YXIgZml4ZWRDc3MgPSBjc3MucmVwbGFjZSgvdXJsXFxzKlxcKCgoPzpbXikoXXxcXCgoPzpbXikoXSt8XFwoW14pKF0qXFwpKSpcXCkpKilcXCkvZ2ksIGZ1bmN0aW9uKGZ1bGxNYXRjaCwgb3JpZ1VybCkge1xuXHRcdC8vIHN0cmlwIHF1b3RlcyAoaWYgdGhleSBleGlzdClcblx0XHR2YXIgdW5xdW90ZWRPcmlnVXJsID0gb3JpZ1VybFxuXHRcdFx0LnRyaW0oKVxuXHRcdFx0LnJlcGxhY2UoL15cIiguKilcIiQvLCBmdW5jdGlvbihvLCAkMSl7IHJldHVybiAkMTsgfSlcblx0XHRcdC5yZXBsYWNlKC9eJyguKiknJC8sIGZ1bmN0aW9uKG8sICQxKXsgcmV0dXJuICQxOyB9KTtcblxuXHRcdC8vIGFscmVhZHkgYSBmdWxsIHVybD8gbm8gY2hhbmdlXG5cdFx0aWYgKC9eKCN8ZGF0YTp8aHR0cDpcXC9cXC98aHR0cHM6XFwvXFwvfGZpbGU6XFwvXFwvXFwvfFxccyokKS9pLnRlc3QodW5xdW90ZWRPcmlnVXJsKSkge1xuXHRcdCAgcmV0dXJuIGZ1bGxNYXRjaDtcblx0XHR9XG5cblx0XHQvLyBjb252ZXJ0IHRoZSB1cmwgdG8gYSBmdWxsIHVybFxuXHRcdHZhciBuZXdVcmw7XG5cblx0XHRpZiAodW5xdW90ZWRPcmlnVXJsLmluZGV4T2YoXCIvL1wiKSA9PT0gMCkge1xuXHRcdCAgXHQvL1RPRE86IHNob3VsZCB3ZSBhZGQgcHJvdG9jb2w/XG5cdFx0XHRuZXdVcmwgPSB1bnF1b3RlZE9yaWdVcmw7XG5cdFx0fSBlbHNlIGlmICh1bnF1b3RlZE9yaWdVcmwuaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRcdC8vIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSBiYXNlIHVybFxuXHRcdFx0bmV3VXJsID0gYmFzZVVybCArIHVucXVvdGVkT3JpZ1VybDsgLy8gYWxyZWFkeSBzdGFydHMgd2l0aCAnLydcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gcGF0aCBzaG91bGQgYmUgcmVsYXRpdmUgdG8gY3VycmVudCBkaXJlY3Rvcnlcblx0XHRcdG5ld1VybCA9IGN1cnJlbnREaXIgKyB1bnF1b3RlZE9yaWdVcmwucmVwbGFjZSgvXlxcLlxcLy8sIFwiXCIpOyAvLyBTdHJpcCBsZWFkaW5nICcuLydcblx0XHR9XG5cblx0XHQvLyBzZW5kIGJhY2sgdGhlIGZpeGVkIHVybCguLi4pXG5cdFx0cmV0dXJuIFwidXJsKFwiICsgSlNPTi5zdHJpbmdpZnkobmV3VXJsKSArIFwiKVwiO1xuXHR9KTtcblxuXHQvLyBzZW5kIGJhY2sgdGhlIGZpeGVkIGNzc1xuXHRyZXR1cm4gZml4ZWRDc3M7XG59O1xuIiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcyEuL2NsYXNzZXMuY3NzXCIpO1xuXG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcblxudmFyIHRyYW5zZm9ybTtcbnZhciBpbnNlcnRJbnRvO1xuXG5cblxudmFyIG9wdGlvbnMgPSB7XCJobXJcIjp0cnVlfVxuXG5vcHRpb25zLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVxub3B0aW9ucy5pbnNlcnRJbnRvID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuaGVhZFxuICAgICAgICAgICAgICB9O1xuXG52YXIgdXBkYXRlID0gcmVxdWlyZShcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcIikoY29udGVudCwgb3B0aW9ucyk7XG5cbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuXG5pZihtb2R1bGUuaG90KSB7XG5cdG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi9jbGFzc2VzLmNzc1wiLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcyEuL2NsYXNzZXMuY3NzXCIpO1xuXG5cdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cblx0XHR2YXIgbG9jYWxzID0gKGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHZhciBrZXksIGlkeCA9IDA7XG5cblx0XHRcdGZvcihrZXkgaW4gYSkge1xuXHRcdFx0XHRpZighYiB8fCBhW2tleV0gIT09IGJba2V5XSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRpZHgrKztcblx0XHRcdH1cblxuXHRcdFx0Zm9yKGtleSBpbiBiKSBpZHgtLTtcblxuXHRcdFx0cmV0dXJuIGlkeCA9PT0gMDtcblx0XHR9KGNvbnRlbnQubG9jYWxzLCBuZXdDb250ZW50LmxvY2FscykpO1xuXG5cdFx0aWYoIWxvY2FscykgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGluZyBDU1MgSE1SIGR1ZSB0byBjaGFuZ2VkIGNzcy1tb2R1bGVzIGxvY2Fscy4nKTtcblxuXHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0fSk7XG5cblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59IiwibW9kdWxlLmV4cG9ydHMgPSBcIi8qXFxuKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cXG4qIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cXG4qXFxuKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxcbiogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXFxuKi9cXG5cXG4uZ3ctYWxpZ25tZW50LWNlbGwtcmlnaHQsXFxuLmd3LWFsaWdubWVudC1jZWxsLXJpZ2h0IC5hZy1jZWxsLXZhbHVlIHtcXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xcbiAgLXdlYmtpdC1ib3gtcGFjazogZW5kO1xcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGVuZDtcXG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XFxuICAgICAgLW1zLWZsZXg6IDE7XFxuICAgICAgICAgIGZsZXg6IDE7XFxufVxcblxcbi5ndy1hbGlnbm1lbnQtY2VsbC1jZW50ZXIsXFxuLmd3LWFsaWdubWVudC1jZWxsLWNlbnRlciAuYWctY2VsbC12YWx1ZSB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XFxuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XFxuICAgICAgLW1zLWZsZXg6IDE7XFxuICAgICAgICAgIGZsZXg6IDE7XFxufVxcblxcbi5ndy1hbGlnbm1lbnQtaGVhZGVyLXJpZ2h0IC5hZy1oZWFkZXItY2VsbC1sYWJlbCB7XFxuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XFxuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IHJldmVyc2U7XFxuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcXG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xcbn1cXG5cXG4uZ3ctYWxpZ25tZW50LWhlYWRlci1jZW50ZXIgLmFnLWhlYWRlci1jZWxsLWxhYmVsIHtcXG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XFxuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcXG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG59XFxuXFxuLmd3LWFsaWdubWVudC1oZWFkZXItcmlnaHQgLmFnLWNlbGwtbGFiZWwtY29udGFpbmVyLFxcbi5ndy1hbGlnbm1lbnQtaGVhZGVyLWNlbnRlciAuYWctY2VsbC1sYWJlbC1jb250YWluZXIge1xcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XFxuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxufVxcblxcbi5ndy10b29sdGlwIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIC13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAxcztcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMXM7XFxuICBib3JkZXItcmFkaXVzOiAzLjFweDtcXG4gIHBhZGRpbmc6IDEwcHg7XFxuICAtd2Via2l0LXRyYW5zaXRpb246IG9wYWNpdHkgMjYwbXM7XFxuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDI2MG1zO1xcbn1cXG5cXG4uZ3ctdG9vbHRpcC1saWdodCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcXG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDZweCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDAgNnB4IHJnYmEoMCwgMCwgMCwgMC4yNSk7XFxufVxcblxcbi5ndy10b29sdGlwLWRhcmsge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFjMWYyMDtcXG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDZweCAjNWM1YzVjO1xcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDAgNnB4ICM1YzVjNWM7XFxuICBjb2xvcjogd2hpdGU7XFxufVxcblwiIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/client/dist/bbj-grid-widget.min.js b/client/dist/bbj-grid-widget.min.js index 8b4c19ee..bbe70916 100644 --- a/client/dist/bbj-grid-widget.min.js +++ b/client/dist/bbj-grid-widget.min.js @@ -1,4 +1,4 @@ -!function(e,t){for(var n in t)e[n]=t[n]}(window,function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=39)}([function(e,t,n){"use strict";function r(e){window.BBjGridExWidget=window.BBjGridExWidget||{};var t=window.BBjGridExWidget[e]||null;if(!t){var n=JSON.stringify(Object.keys(window.BBjGridExWidget));throw new TypeError("\n\n[Grid Not Found] The method asked for non-existent grid instance.\n-------------------------------------------------------------------\nRequired Grid Id : ".concat(e," \nRegistered Grids : ").concat(n,"\n"))}return t}Object.defineProperty(t,"__esModule",{value:!0}),t.gw_getDocument=function(){return"undefined"!=typeof $doc?$doc:document},t.gw_getWindow=function(){return"undefined"!=typeof $wnd?$wnd:window},t.gw_escape=function(e){return null!=e?e:""},t.gw_uuid=function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)}))},t.gw_getGrid=r,t.gw_addGrid=function(e,t){return window.BBjGridExWidget=window.BBjGridExWidget||{},window.BBjGridExWidget[e]=t,r(e)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_debounce=function(e,t,n){var r;return function(){var o=this,i=arguments,a=n&&!r;clearTimeout(r),r=setTimeout((function(){r=null,n||e.apply(o,i)}),t),a&&e.apply(o,i)}},t.gw_sendEvent=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];if((e.interests||[]).includes(n)){var o=(0,r.gw_getDocument)().getElementById("".concat(e.id));window.basisDispatchCustomEvent(o,t)}},t.gw_parseNode=o,t.gw_parseNodeFromEvent=function(e){return o(e.node,e.context)};var r=n(0);function o(e,t){if(!0===e.group)return!1;var n=e.rowPinned?"__ROW_INDEX":t.getRowNodeId;return{i:t.hasOwnProperty("getRowNodeId")&&e.data[n]?e.data[n]:e.id,x:e.rowIndex,p:e.hasOwnProperty("parent")&&e.parent.hasOwnProperty("key")?e.parent.key:"",c:e.rowPinned?-1:e.childIndex,s:Boolean(e.selected),cr:t.hasOwnProperty("includeClientRowData")&&!0===t.includeClientRowData?e.data:null,pp:e.rowPinned}}},function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var o;o=function(){return this}();try{o=o||new Function("return this")()}catch(e){"object"===("undefined"==typeof window?"undefined":r(window))&&(o=window)}e.exports=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(9)),o=a(n(67)),i=a(n(68));function a(e){return e&&e.__esModule?e:{default:e}}var u=r.default?r.default.toStringTag:void 0;t.default=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":u&&u in Object(e)?(0,o.default)(e):(0,i.default)(e)}},function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e){return null!=e&&"object"==r(e)}},function(e,t,n){"use strict";e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}e.exports={deepParseJson:function e(t){if("string"!=typeof t)return Array.isArray(t)?t.map((function(t){return e(t)})):"object"===r(t)&&null!==t?Object.keys(t).reduce((function(n,r){return n[r]=e(t[r]),n}),{}):t;try{return e(JSON.parse(t))}catch(e){return t}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.GW_EVENT_KEYPRESS=t.GW_EVENT_RANGE_SELECTION_CHANGED=t.GW_EVENT_GRID_STATE_CHANGE=t.GW_EVENT_ROW_VALUE_CHANGED=t.GW_EVENT_ROW_EDITING_STOPPED=t.GW_EVENT_ROW_EDITING_STARTED=t.GW_EVENT_CELL_VALUE_CHANGED=t.GW_EVENT_CELL_EDITING_STOPPED=t.GW_EVENT_CELL_EDITING_STARTED=t.GW_EVENT_CELL_DOUBLE_CLICK=t.GW_EVENT_CELL_CLICK=t.GW_EVENT_ROW_DOUBLE_CLICK=t.GW_EVENT_ROW_CLICK=t.GW_EVENT_ROW_SELECT=void 0,t.GW_EVENT_ROW_SELECT=69,t.GW_EVENT_ROW_CLICK=5011,t.GW_EVENT_ROW_DOUBLE_CLICK=52,t.GW_EVENT_CELL_CLICK=5001,t.GW_EVENT_CELL_DOUBLE_CLICK=5002,t.GW_EVENT_CELL_EDITING_STARTED=5003,t.GW_EVENT_CELL_EDITING_STOPPED=5004,t.GW_EVENT_CELL_VALUE_CHANGED=5005,t.GW_EVENT_ROW_EDITING_STARTED=5006,t.GW_EVENT_ROW_EDITING_STOPPED=5007,t.GW_EVENT_ROW_VALUE_CHANGED=5012,t.GW_EVENT_GRID_STATE_CHANGE=5008,t.GW_EVENT_RANGE_SELECTION_CHANGED=5009,t.GW_EVENT_KEYPRESS=5010},function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e){var t=r(e);return null!=e&&("object"==t||"function"==t)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return e&&e.__esModule?e:{default:e}}(n(10)).default.Symbol;t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return e&&e.__esModule?e:{default:e}}(n(23));function o(e){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var i="object"==("undefined"==typeof self?"undefined":o(self))&&self&&self.Object===Object&&self,a=r.default||i||Function("return this")();t.default=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e,t){return e===t||e!=e&&t!=t}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(22)),o=i(n(28));function i(e){return e&&e.__esModule?e:{default:e}}t.default=function(e){return null!=e&&(0,o.default)(e.length)&&!(0,r.default)(e)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return e&&e.__esModule?e:{default:e}}(n(45)).default;t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return e&&e.__esModule?e:{default:e}}(n(46)).default;t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_extendColumnDefinitions=u,t.gw_setColumnDefinitions=function(e,t){var n=(0,r.gw_getGrid)(e),o=i(JSON.stringify(t));u(o),n.options.api.setColumnDefs(o),n.options.columnDefs=o},t.gw_sizeColumnsToFit=function(e,t){var n=(0,r.gw_getGrid)(e).options,o=n.api,i=n.columnApi;t?i.sizeColumnsToFit(Number(t)):o.sizeColumnsToFit()},t.gw_autoSizeColumns=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,o=(0,r.gw_getGrid)(e).options.columnApi;if(n&&n.length)o.autoSizeColumns(n,Boolean(t));else{var i=[];o.getAllColumns().forEach((function(e){i.push(e.colId)})),o.autoSizeColumns(i,Boolean(t))}},t.gw_ensureColumnVisible=function(e,t){(0,r.gw_getGrid)(e).options.api.ensureColumnVisible(t)},t.gw_setColumnWidth=function(e,t,n){(0,r.gw_getGrid)(e).options.columnApi.setColumnWidth(t,Number(n))},t.gw_pinColumn=function(e,t,n){(0,r.gw_getGrid)(e).options.columnApi.setColumnPinned(t,n)},t.gw_moveColumn=function(e,t,n){(0,r.gw_getGrid)(e).options.columnApi.moveColumn(t,n)},t.gw_isShowSelectionCheckbox=c,t.gw_isHeaderCheckboxSelection=l,t.gw_addRowGroupColumn=function(e,t,n){(0,r.gw_getGrid)(e).options.columnApi[n?"setRowGroupColumns":"addRowGroupColumns"](t.split(",").map((function(e){return e.trim()})))},t.gw_removeRowGroupColumn=function(e,t){(0,r.gw_getGrid)(e).options.columnApi.removeRowGroupColumns(t.split(",").map((function(e){return e.trim()})))},t.gw_getPivotMode=function(e){return(0,r.gw_getGrid)(e).options.columnApi.isPivotMode()},t.gw_setPivotMode=function(e,t){(0,r.gw_getGrid)(e).options.columnApi.setPivotMode(!!Number(t))},t.gw_addPivotColumns=function(e,t,n){(0,r.gw_getGrid)(e).options.columnApi[n?"setPivotColumns":"addPivotColumns"](t.split(",").map((function(e){return e.trim()})))},t.gw_removePivotColumns=function(e,t){(0,r.gw_getGrid)(e).options.columnApi.removePivotColumns(t.split(",").map((function(e){return e.trim()})))},t.gw_addValueColumns=function(e,t){(0,r.gw_getGrid)(e).options.columnApi.addValueColumns(t.split(",").map((function(e){return e.trim()})))},t.gw_removeValueColumns=function(e,t){(0,r.gw_getGrid)(e).options.columnApi.removeValueColumns(t.split(",").map((function(e){return e.trim()})))},t.gw_setSortModel=function(e,t){var n=[];JSON.parse(t).forEach((function(e){for(var t in e)n.push({colId:t,sort:e[t]})})),(0,r.gw_getGrid)(e).options.api.setSortModel(n)},t.gw_refreshHeader=function(e){(0,r.gw_getGrid)(e).options.api.redrawRows()};var r=n(0),o=n(16),i=n(6).deepParseJson;function a(e){var t=e.tooltipValueGetter;t&&(e.tooltipValueGetter=function(e){return(0,o.gw_executeExpression)(t,e)}),e.tooltipComponent="HTMLTooltip",e.hasOwnProperty("children")&&e.children.forEach((function(e){return a(e)}))}function u(e){for(var t in e){var n=e[t];n.checkboxSelection=n.checkboxSelection||c,n.headerCheckboxSelection=n.headerCheckboxSelection||l,a(n),n.hasOwnProperty("editable")&&"string"==typeof n.editable&&function(){var e=n.editable;n.editable=function(t){return(0,o.gw_executeExpression)(e,t)}}()}}function c(e){return!!e.context.showSelectionCheckbox&&e.columnApi.getAllGridColumns()[0].colDef.field===e.colDef.field}function l(e){return!!e.api.gridOptionsWrapper.gridOptions.context.showHeaderSelectionCheckbox&&e.columnApi.getAllGridColumns()[0].colDef.field===e.colDef.field}},function(e,t,n){"use strict";function r(e){if(void 0===r.expressionCache&&(r.expressionCache=[]),r.expressionCache[e])return r.expressionCache[e];var t;t=e.indexOf("return")>=0?e:"return "+e+";";var n=new Function("x, ctx, oldValue, newValue, value, node, data, colDef, rowIndex, api, columnApi, getValue, column, columnGroup",t);return r.expressionCache[e]=n,n}Object.defineProperty(t,"__esModule",{value:!0}),t.gw_compileExpression=r,t.gw_executeExpression=function(e,t){try{var n;return r(e)(t.value,t.context,t.oldValue,t.newValue,t.value,t.node,t.data,t.colDef,t.rowIndex,t.api,t.columnApi,t.getValue,t.column,t.columnGroup)}catch(n){return console.log("Processing of the expression failed"),console.log("Expression = "+e),console.log("Params =",t),console.log("Exception = "+n),null}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_setQuickFilter=function(e,t){(0,r.gw_getGrid)(e).options.api.setQuickFilter(t)},t.gw_expandAll=function(e){(0,r.gw_getGrid)(e).options.api.expandAll()},t.gw_collapseAll=function(e){(0,r.gw_getGrid)(e).options.api.collapseAll()},t.gw_ensureIndexVisible=function(e,t,n){var o=(0,r.gw_getGrid)(e).options.api,i=o.getRowNode(t);i?o.ensureNodeVisible(i,n):o.ensureIndexVisible(Number(t),n)},t.gw_navigateToNextRow=function(e,t){var n=(0,r.gw_getGrid)(e).options,o=t.previousCellPosition,i=t.nextCellPosition;switch(t.key){case 40:if(i&&!i.rowPinned)if(o.rowPinned){var a=n.api.getDisplayedRowAtIndex(n.api.getFirstDisplayedRow());a&&a.setSelected(!0)}else n.api.forEachNode((function(e){o.rowIndex+1===e.rowIndex&&e.setSelected(!0)}));return i;case 38:if(i&&!i.rowPinned)if(o.rowPinned){var u=n.api.getDisplayedRowAtIndex(n.api.getLastDisplayedRow());u&&u.setSelected(!0)}else n.api.forEachNode((function(e){o.rowIndex-1===e.rowIndex&&e.setSelected(!0)}));return i;case 37:case 39:return i;default:throw new Error("You have super strange keyboard")}},t.gw_getRowNodeId=function(e,t){return t[(0,r.gw_getGrid)(e).options.context.getRowNodeId]},t.gw_setRowData=function(e,t){var n=(0,r.gw_getGrid)(e).options;n.api.setRowData(t),n.rowData=t},t.gw_updateRowData=function(e,t,n){var o=(0,r.gw_getGrid)(e).options;if(t.remove.length){var i=[];t.remove.forEach((function(e){i.push(o.api.getRowNode(e).data)})),t.remove=i}n?o.api.batchUpdateRowData(t):o.api.updateRowData(t)},t.gw_setRowsHeight=function(e,t){var n=(0,r.gw_getGrid)(e).options.api;n.forEachNode((function(e){e.setRowHeight(t)})),n.onRowHeightChanged()},t.gw_setRowHeight=function(e,t,n){var o=(0,r.gw_getGrid)(e).options,i=o.api,a=i.getRowNode(t)||i.getDisplayedRowAtIndex(t);a?(a.setRowHeight(n),o.api.onRowHeightChanged()):console.warn("Failed to set height for row ".concat(t,". Row cannot be found"))},t.gw_resetRowHeights=function(e){(0,r.gw_getGrid)(e).options.api.resetRowHeights()},t.gw_setSelectedRows=function(e,t){var n=(0,r.gw_getGrid)(e).options.api;n.forEachNodeAfterFilterAndSort((function(e){(t.indexOf(String(e.rowIndex))>-1||t.indexOf(String(e.id))>-1)&&(e.setSelected(!0),e.expanded=!0)})),n.onGroupExpandedOrCollapsed()},t.gw_selectAll=function(e,t){var n=(0,r.gw_getGrid)(e).options;1===t?n.api.selectAllFiltered():n.api.selectAll()},t.gw_deselectAll=function(e,t){var n=(0,r.gw_getGrid)(e).options;1===t?n.api.deselectAllFiltered():n.api.deselectAll()},t.gw_getSelectedRows=a,t.gw_getSelectedRow=function(e){var t=JSON.parse(a(e));return t.length?JSON.stringify(t[t.length-1]):""},t.gw_getRow=function(e,t){var n=(0,r.gw_getGrid)(e).options;return JSON.stringify((0,o.gw_parseNode)(n.api.getRowNode(t),n.context))},t.gw_getRows=function(e,t,n){var a=(0,r.gw_getGrid)(e).options,u=[];return a.api[t]((function(e){e.group||(n?(0,i.gw_executeExpression)(n,{value:e.data,context:a.context,oldValue:null,newValue:null,node:e,data:e.data,colDef:null,rowIndex:e.rowIndex,api:e.gridApi,columnApi:e.columnApi,getValue:function(){return e.data},column:null,columnGroup:e.hasOwnProperty("parent")&&e.parent.hasOwnProperty("key")?e.parent.key:""})&&u.push((0,o.gw_parseNode)(e,a.context)):u.push((0,o.gw_parseNode)(e,a.context)))})),JSON.stringify(u)},t.gw_redrawRows=function(e){(0,r.gw_getGrid)(e).options.api.redrawRows()},t.gw_setPinnedTopRowData=function(e,t){(0,r.gw_getGrid)(e).options.api.setPinnedTopRowData(t)},t.gw_setPinnedBottomRowData=function(e,t){(0,r.gw_getGrid)(e).options.api.setPinnedBottomRowData(t)};var r=n(0),o=n(1),i=n(16);function a(e){var t=(0,r.gw_getGrid)(e).options,n=[];return t.api.getSelectedNodes().forEach((function(e){n.push((0,o.gw_parseNode)(e,t.context))})),JSON.stringify(n)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_getChartToolbarItems=function(e){return e.api.gridOptionsWrapper.gridOptions.context.chartToolbarItems||[]},t.gw_addChartRange=function(e,t){var n=(0,r.gw_getGrid)(e),a=n.options,u=i(JSON.stringify(t));u.cellRange=(0,o.gw_parseAddCellRange)(a,u.cellRange);var c=a.api.createRangeChart(u),l=(0,r.gw_uuid)();return n.created_charts=n.created_charts||{},n.created_charts[l]=c,l},t.gw_destroyChart=function(e,t){var n=(0,r.gw_getGrid)(e);if(t)n.hasOwnProperty("created_charts")&&n.created_charts.hasOwnProperty(t)&&n.created_charts[t].destroyChart();else if(n.hasOwnProperty("created_charts"))for(var o in n.created_charts)if(n.created_charts.hasOwnProperty(o)){n.created_charts[o].destroyChart()}};var r=n(0),o=n(19),i=n(6).deepParseJson},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_startEditingCell=function(e,t,n,o,i,a){var u=(0,r.gw_getGrid)(e).options,c=u.api,l=c.getRowNode(t)||c.getDisplayedRowAtIndex(t);u.api.startEditingCell({rowIndex:l.rowIndex,keyPress:Number(o),colKey:n,charPress:i,rowPinned:a})},t.gw_stopEditing=function(e,t){(0,r.gw_getGrid)(e).options.api.stopEditing(t)},t.gw_tabToNextCell=function(e){(0,r.gw_getGrid)(e).options.api.tabToNextCell()},t.gw_tabToPreviousCell=function(e){(0,r.gw_getGrid)(e).options.api.tabToPreviousCell()},t.gw_setFocusedCell=function(e,t,n){var o,i,a,u=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,c=(0,r.gw_getGrid)(e).options;if(!(c.api.getEditingCells().length>0)){if(-1==t){var l=c.api.getFocusedCell();l?(o=l.rowIndex,i=l.column.colId,a=l.rowPinned):(o=0,i=c.columnApi.getAllGridColumns()[0].colId,a=u)}else o=t?Number.isInteger(+t)?+t:c.api.getRowNode(t).rowIndex:0,i=n||c.columnApi.getAllGridColumns()[0].colId,a=u;(0,r.gw_getGrid)(e).options.api.setFocusedCell(o,i,a)}},t.gw_getRangeSelections=function(e){var t=(0,r.gw_getGrid)(e).options,n=t.context,i=t.api,a=i.getCellRanges(),u=i.getModel(),c=[];return a.forEach((function(e){for(var t=e.columns.reduce((function(e,t){return"ag-Grid-AutoColumn"!==t.colId&&e.push(t.colId),e}),[]).filter(Boolean),r=Math.min(e.startRow.rowIndex,e.endRow.rowIndex),i=Math.max(e.startRow.rowIndex,e.endRow.rowIndex),a=[],l=r;l<=i;l++){var s=u.getRow(l);if(s){var d=(0,o.gw_parseNode)(s,n);d&&a.push(d)}}a.length&&t.length&&c.push({r:a,c:t})})),JSON.stringify(c)},t.gw_parseAddCellRange=a,t.gw_addCellRange=function(e,t){var n=(0,r.gw_getGrid)(e).options;n.api.addCellRange(a(n,t))},t.gw_clearRangeSelection=function(e){(0,r.gw_getGrid)(e).options.api.clearRangeSelection()};var r=n(0),o=n(1),i=n(6).deepParseJson;function a(e,t){var n=i(JSON.stringify(t)),r=n.start?Number.isInteger(+n.start)?+n.start:e.api.getRowNode(n.start).rowIndex:0,o=n.end?Number.isInteger(+n.end)?+n.end:e.api.getRowNode(n.end).rowIndex:e.rowData.length-1;return{rowStartIndex:Math.abs(r),rowEndIndex:Math.abs(o),columns:n.columns}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return e&&e.__esModule?e:{default:e}}(n(21));t.default=function(e,t,n){"__proto__"==t&&r.default?(0,r.default)(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return e&&e.__esModule?e:{default:e}}(n(65)),o=function(){try{var e=(0,r.default)(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(3)),o=i(n(8));function i(e){return e&&e.__esModule?e:{default:e}}t.default=function(e){if(!(0,o.default)(e))return!1;var t=(0,r.default)(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},function(e,t,n){"use strict";(function(e){function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r="object"==(void 0===e?"undefined":n(e))&&e&&e.Object===Object&&e;t.default=r}).call(this,n(2))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(25)),o=a(n(74)),i=a(n(75));function a(e){return e&&e.__esModule?e:{default:e}}t.default=function(e,t){return(0,i.default)((0,o.default)(e,t,r.default),e+"")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e){return e}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=u(n(11)),o=u(n(12)),i=u(n(29)),a=u(n(8));function u(e){return e&&e.__esModule?e:{default:e}}function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}t.default=function(e,t,n){if(!(0,a.default)(n))return!1;var u=c(t);return!!("number"==u?(0,o.default)(n)&&(0,i.default)(t,n.length):"string"==u&&t in n)&&(0,r.default)(n[t],e)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}},function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=/^(?:0|[1-9]\d*)$/;t.default=function(e,t){var n=r(e);return!!(t=null==t?9007199254740991:t)&&("number"==n||"symbol"!=n&&o.test(e))&&e>-1&&e%1==0&&e/g},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return e&&e.__esModule?e:{default:e}}(n(104));t.default=function(e){return null==e?"":(0,r.default)(e)}},function(e,t,n){var r={},o=function(e){var t;return function(){return void 0===t&&(t=e.apply(this,arguments)),t}}((function(){return window&&document&&document.all&&!window.atob})),i=function(e){var t={};return function(e){if("function"==typeof e)return e();if(void 0===t[e]){var n=function(e){return document.querySelector(e)}.call(this,e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}}(),a=null,u=0,c=[],l=n(119);function s(e,t){for(var n=0;n=0&&c.splice(t,1)}function h(e){var t=document.createElement("style");return e.attrs.type="text/css",g(t,e.attrs),f(e,t),t}function g(e,t){Object.keys(t).forEach((function(n){e.setAttribute(n,t[n])}))}function b(e,t){var n,r,o,i;if(t.transform&&e.css){if(!(i=t.transform(e.css)))return function(){};e.css=i}if(t.singleton){var c=u++;n=a||(a=h(t)),r=y.bind(null,n,c,!1),o=y.bind(null,n,c,!0)}else e.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(n=function(e){var t=document.createElement("link");return e.attrs.type="text/css",e.attrs.rel="stylesheet",g(t,e.attrs),f(e,t),t}(t),r=function(e,t,n){var r=n.css,o=n.sourceMap,i=void 0===t.convertToAbsoluteUrls&&o;(t.convertToAbsoluteUrls||i)&&(r=l(r)),o&&(r+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(o))))+" */");var a=new Blob([r],{type:"text/css"}),u=e.href;e.href=URL.createObjectURL(a),u&&URL.revokeObjectURL(u)}.bind(null,n,t),o=function(){p(n),n.href&&URL.revokeObjectURL(n.href)}):(n=h(t),r=function(e,t){var n=t.css,r=t.media;if(r&&e.setAttribute("media",r),e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}.bind(null,n),o=function(){p(n)});return r(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;r(e=t)}else o()}}e.exports=function(e,t){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");(t=t||{}).attrs="object"==typeof t.attrs?t.attrs:{},t.singleton||"boolean"==typeof t.singleton||(t.singleton=o()),t.insertInto||(t.insertInto="head"),t.insertAt||(t.insertAt="bottom");var n=d(e,t);return s(n,t),function(e){for(var o=[],i=0;i59)}},function(e,t,n){var r=n(19);t.a=r.a},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n.d(t,"Utils",(function(){return u}));var r=n(1),o=n(2),i=n(4),a=n(20);n.d(t,"Types",(function(){return a.a})),n.d(t,"NumberMask",(function(){return r.a})),n.d(t,"DateMask",(function(){return o.c})),n.d(t,"StringMask",(function(){return i.a}));var u={Dates:{getDayOfYear:o.e,getWeekNumber:o.g,getWeekStartByLocale:o.h,IS_DATE_REGEX:o.a,IS_TIME_REGEX:o.b,fixShortISO:o.d,getTimezoneOrOffset:o.f}};t.default=a.a},function(e,t,n){function r(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:",",o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".",i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],u=n.length;if(0===u){if(a)return str;throw{name:"MaskError",message:"MaskError: Mask is empty"}}for(var c=0,l=0,s=!1,d=0;dc){if(a)return t.toString();throw{name:"MaskError",message:"MaskError: Number is too large for mask"}}if(m>l){p=e._round(p,l),g=(h=e._toCharArray(p)).length,b=0,m=0,s=!1;for(var v=0;vc){if(a)return t.toString();throw{name:"MaskError",message:"MaskError: Number is too large for mask"}}}var _=" ",w=" ",O=0,k=0,C=0;"*"==n.charAt(0)&&(_="*");var x=_,D=e._getSign(p)<0,E=g>0||n.indexOf("0")>=0,S=!1,j=!1;s=!1;for(var M=new Array(u),P=0;P0?M[k]=r:(M[k]=_,s||(C=P)),++k;break;case"-":j||" "!=w?M[k]=D?"-":_:(D&&(w="-"),M[k]=_,C=s?-1:P),++k;break;case"+":j||" "!=w?M[k]=D?"-":"+":(w=D?"-":"+",M[k]=_,C=s?-1:P),++k;break;case"$":j||" "!=w?M[k]="$":(w="$",M[k]=_,C=s?-1:P),++k;break;case"(":j||" "!=w?M[k]=D?"(":s?" ":_:(D&&(w="("),M[k]=_,C=s?-1:P),++k;break;case")":M[k]=D?")":s?" ":_,++k;break;case"C":P=u;)--C;M[C]==x&&(M[C]=w)}return M.join("")}},{key:"_shift",value:function(e,t,n){n&&(t=-t);var r=(""+e).split("e");return+(r[0]+"e"+(r[1]?+r[1]+t:t))}},{key:"_round",value:function(t,n){return e._shift(Math.round(e._shift(t,n,!1)),n,!0)}},{key:"_toCharArray",value:function(t){var n=e._getSign(t),r=[];if(0!==n){var o=n<0?"".concat(-1*t.toString()):t.toString();o.length>1&&"0"==o.charAt(0)&&(o=o.substring(1)),r=o.split("")}return r}},{key:"_getSign",value:function(e){return(e>0)-(e<0)||+e}}]),e}();t.a=o},function(e,t,n){n.d(t,"b",(function(){return a})),n.d(t,"a",(function(){return u})),n.d(t,"h",(function(){return c})),n.d(t,"e",(function(){return l})),n.d(t,"d",(function(){return s})),n.d(t,"f",(function(){return d})),n.d(t,"g",(function(){return f}));var r=n(8),o=n(15);function i(e,t){for(var n=0;n12?"PM":"AM",pp:e.hours24>12?"pm":"am",p:e.hours24>12?"pm":"am",Jz:1==String(e.dayOfYear).length?"0"+e.dayOfYear:e.dayOfYear,Js:e.dayOfYear,Jl:e.dayOfYear,Jd:e.dayOfYear,J:e.dayOfYear,Wz:1==String(e.dayOfWeek).length?"0"+e.dayOfWeek:e.dayOfWeek,Ws:e.dayOfWeek,Wl:e.dayOfWeek,Wp:String.fromCharCode(e.dayOfWeek),Wd:e.dayOfWeek,W:e.dayOfWeek,wz:1==String(e.weekNumber).length?"0"+e.weekNumber:e.weekNumber,ws:e.weekNumber,wl:e.weekNumber,wp:String.fromCharCode(e.weekNumber),wd:e.weekNumber,w:e.weekNumber}}}]),e}();t.c=p},function(e,t,n){t.a=function(e,t,n){var a=Object(i.a)(e,n),u=new Date(a.getUTCFullYear(),a.getUTCMonth(),a.getUTCDate(),a.getUTCHours(),a.getUTCMinutes(),a.getUTCSeconds(),a.getUTCMilliseconds()),c=Object(r.a)(t,a);return c?Object(o.a)(u,c):u};var r=n(3),o=n(10),i=n(13)},function(e,t,n){t.a=function(e,t){var n=function(e){if(!o[e]){var t=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:"America/New_York",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(new Date("2014-06-25T04:00:00.123Z")),n="06/25/2014, 00:00:00"===t||"‎06‎/‎25‎/‎2014‎ ‎00‎:‎00‎:‎00"===t;o[e]=n?new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:e,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):new Intl.DateTimeFormat("en-US",{hourCycle:"h23",timeZone:e,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})}return o[e]}(t);return n.formatToParts?function(e,t){for(var n=e.formatToParts(t),o=[],i=0;i=0&&(o[a]=parseInt(n[i].value,10))}return o}(n,e):function(e,t){var n=e.format(t).replace(/\u200E/g,""),r=/(\d+)\/(\d+)\/(\d+),? (\d+):(\d+):(\d+)/.exec(n);return[r[3],r[1],r[2],r[4],r[5],r[6]]}(n,e)};var r={year:0,month:1,day:2,hour:3,minute:4,second:5},o={}},function(e,t,n){t.a=function(e,t){if(arguments.length<2)throw new TypeError("2 arguments required, but only "+arguments.length+" present");var n=Object(r.a)(t);return Object(o.a)(e,-n)};var r=n(0),o=n(11)},function(e,t,n){t.a=function(e,t){if(arguments.length<2)throw new TypeError("2 arguments required, but only "+arguments.length+" present");var n=Object(o.a)(e).getTime(),i=Object(r.a)(t);return new Date(n+i)};var r=n(0),o=n(12)},function(e,t,n){t.a=function(e){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");var t=Object.prototype.toString.call(e);return e instanceof Date||"object"===a(e)&&"[object Date]"===t?new Date(e.getTime()):"number"==typeof e||"[object Number]"===t?new Date(e):("string"!=typeof e&&"[object String]"!==t||"undefined"==typeof console||(console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule"),console.warn((new Error).stack)),new Date(NaN))}},function(e,t,n){t.a=function(e,t){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");if(null===e)return new Date(NaN);var n=t||{},f=null==n.additionalDigits?l:Object(r.a)(n.additionalDigits);if(2!==f&&1!==f&&0!==f)throw new RangeError("additionalDigits must be 0, 1 or 2");if(e instanceof Date||"object"===a(e)&&"[object Date]"===Object.prototype.toString.call(e))return new Date(e.getTime());if("number"==typeof e||"[object Number]"===Object.prototype.toString.call(e))return new Date(e);if("string"!=typeof e&&"[object String]"!==Object.prototype.toString.call(e))return new Date(NaN);var p=function(e){var t,n={},r=e.split(s.dateTimeDelimeter);if(s.plainTime.test(r[0])?(n.date=null,t=r[0]):(n.date=r[0],t=r[1],n.timezone=r[2],s.timeZoneDelimeter.test(n.date)&&(n.date=e.split(s.timeZoneDelimeter)[0],t=e.substr(n.date.length,e.length))),t){var o=s.timezone.exec(t);o?(n.time=t.replace(o[1],""),n.timezone=o[1]):n.time=t}return n}(e),y=function(e,t){var n,r=s.YYY[t],o=s.YYYYY[t];if(n=s.YYYY.exec(e)||o.exec(e)){var i=n[1];return{year:parseInt(i,10),restDateString:e.slice(i.length)}}if(n=s.YY.exec(e)||r.exec(e)){var a=n[1];return{year:100*parseInt(a,10),restDateString:e.slice(a.length)}}return{year:null}}(p.date,f),v=y.year,_=function(e,t){if(null===t)return null;var n,r,o,i;if(0===e.length)return(r=new Date(0)).setUTCFullYear(t),r;if(n=s.MM.exec(e))return r=new Date(0),g(t,o=parseInt(n[1],10)-1)?(r.setUTCFullYear(t,o),r):new Date(NaN);if(n=s.DDD.exec(e)){r=new Date(0);var a=parseInt(n[1],10);return function(e,t){if(t<1)return!1;var n=h(e);return!(n&&t>366||!n&&t>365)}(t,a)?(r.setUTCFullYear(t,0,a),r):new Date(NaN)}if(n=s.MMDD.exec(e)){r=new Date(0),o=parseInt(n[1],10)-1;var u=parseInt(n[2],10);return g(t,o,u)?(r.setUTCFullYear(t,o,u),r):new Date(NaN)}if(n=s.Www.exec(e))return b(0,i=parseInt(n[1],10)-1)?d(t,i):new Date(NaN);if(n=s.WwwD.exec(e)){i=parseInt(n[1],10)-1;var c=parseInt(n[2],10)-1;return b(0,i,c)?d(t,i,c):new Date(NaN)}return null}(y.restDateString,v);if(isNaN(_))return new Date(NaN);if(_){var w,O=_.getTime(),k=0;if(p.time&&(k=function(e){var t,n,r;if(t=s.HH.exec(e))return m(n=parseFloat(t[1].replace(",",".")))?n%24*u:NaN;if(t=s.HHMM.exec(e))return m(n=parseInt(t[1],10),r=parseFloat(t[2].replace(",",".")))?n%24*u+r*c:NaN;if(t=s.HHMMSS.exec(e)){n=parseInt(t[1],10),r=parseInt(t[2],10);var o=parseFloat(t[3].replace(",","."));return m(n,r,o)?n%24*u+r*c+1e3*o:NaN}return null}(p.time),isNaN(k)))return new Date(NaN);if(p.timezone||n.timeZone){if(w=Object(i.a)(p.timezone||n.timeZone,new Date(O+k)),isNaN(w))return new Date(NaN)}else w=Object(o.a)(new Date(O+k)),w=Object(o.a)(new Date(O+k+w));return new Date(O+k+w)}return new Date(NaN)};var r=n(0),o=n(14),i=n(3),u=36e5,c=6e4,l=2,s={dateTimeDelimeter:/[T ]/,plainTime:/:/,timeZoneDelimeter:/[Z ]/i,YY:/^(\d{2})$/,YYY:[/^([+-]\d{2})$/,/^([+-]\d{3})$/,/^([+-]\d{4})$/],YYYY:/^(\d{4})/,YYYYY:[/^([+-]\d{4})/,/^([+-]\d{5})/,/^([+-]\d{6})/],MM:/^-(\d{2})$/,DDD:/^-?(\d{3})$/,MMDD:/^-?(\d{2})-?(\d{2})$/,Www:/^-?W(\d{2})$/,WwwD:/^-?W(\d{2})-?(\d{1})$/,HH:/^(\d{2}([.,]\d*)?)$/,HHMM:/^(\d{2}):?(\d{2}([.,]\d*)?)$/,HHMMSS:/^(\d{2}):?(\d{2}):?(\d{2}([.,]\d*)?)$/,timezone:/([Z+-].*| UTC|(?:[a-zA-Z]+\/[a-zA-Z_]+(?:\/[a-zA-Z_]+)?))$/};function d(e,t,n){t=t||0,n=n||0;var r=new Date(0);r.setUTCFullYear(e,0,4);var o=7*t+n+1-(r.getUTCDay()||7);return r.setUTCDate(r.getUTCDate()+o),r}var f=[31,28,31,30,31,30,31,31,30,31,30,31],p=[31,29,31,30,31,30,31,31,30,31,30,31];function h(e){return e%400==0||e%4==0&&e%100!=0}function g(e,t,n){if(t<0||t>11)return!1;if(null!=n){if(n<1)return!1;var r=h(e);if(r&&n>p[t])return!1;if(!r&&n>f[t])return!1}return!0}function b(e,t,n){return!(t<0||t>52||null!=n&&(n<0||n>6))}function m(e,t,n){return!(null!=e&&(e<0||e>=25)||null!=t&&(t<0||t>=60)||null!=n&&(n<0||n>=60))}},function(e,t,n){t.a=function(e){var t=new Date(e.getTime()),n=Math.ceil(t.getTimezoneOffset());t.setSeconds(0,0);var o=t.getTime()%r;return n*r+o};var r=6e4},function(e,t,n){n.d(t,"a",(function(){return a}));var r=n(16),o=n(17),i=n(18);function a(e){return Object(r.a)(e,o.a,i.a)}},function(e,t,n){function r(e,t){var n=t["string"==typeof e?e.toUpperCase():e];return"number"==typeof n?n:1}function o(e,t,n){if(e){var o,i=e.toLowerCase().split(/[-_]/),a=i[0];if(i[1]&&4===i[1].length?(a+="_"+i[1],o=i[2]):o=i[1],o||(o=t[a]),o)return r(o.match(/^\d+$/)?Number(o):o,n)}return 1}n.d(t,"b",(function(){return r})),n.d(t,"a",(function(){return o}))},function(e,t,n){t.a={en:"US",zh:"CN",zh_hans:"CN",hans:"CN",wuu:"CN",hsn:"CN",hak:"CN",nan:"CN",gan:"CN",hi:"IN",te:"IN",mr:"IN",ta:"IN",gu:"IN",kn:"IN",or:"IN",ml:"IN",pa_guru:"IN",bho:"IN",awa:"IN",as:"IN",mwr:"IN",mai:"IN",mag:"IN",bgc:"IN",hne:"IN",dcc:"IN",dz:"BT",tn:"BW",am:"ET",om:"ET",quc:"GT",id:"ID",jv:"ID",su:"ID",mad:"ID",ms_arab:"ID",ga:"IE",he:"IL",jam:"JM",ja:"JP",km:"KH",ko:"KR",lo:"LA",mh:"MH",my:"MM",mt:"MT",ne:"NP",fil:"PH",ceb:"PH",ilo:"PH",ur:"PK",pa:"PK",pa_arab:"PK",arab:"PK",lah:"PK",ps:"PK",sd:"PK",sd_arab:"PK",skr:"PK",gn:"PY",th:"TH",tts:"TH",aeb:"TN",zh_hant:"TW",hant:"TW",sm:"WS",zu:"ZA",sn:"ZW",arq:"DZ",ar:"EG",arz:"EG",fa:"IR",az_arab:"IR",ary:"MA",bn:"BD",rkt:"BD",dv:"MV"}},function(e,t,n){t.a={AG:0,ATG:0,28:0,AR:0,ARG:0,32:0,AS:0,ASM:0,16:0,AU:0,AUS:0,36:0,BR:0,BRA:0,76:0,BS:0,BHS:0,44:0,BT:0,BTN:0,64:0,BW:0,BWA:0,72:0,BZ:0,BLZ:0,84:0,CA:0,CAN:0,124:0,CN:0,CHN:0,156:0,CO:0,COL:0,170:0,DM:0,DMA:0,212:0,DO:0,DOM:0,214:0,ET:0,ETH:0,231:0,GT:0,GTM:0,320:0,GU:0,GUM:0,316:0,HK:0,HKG:0,344:0,HN:0,HND:0,340:0,ID:0,IDN:0,360:0,IE:0,IRL:0,372:0,IL:0,ISR:0,376:0,IN:0,IND:0,356:0,JM:0,JAM:0,388:0,JP:0,JPN:0,392:0,KE:0,KEN:0,404:0,KH:0,KHM:0,116:0,KR:0,KOR:0,410:0,LA:0,LA0:0,418:0,MH:0,MHL:0,584:0,MM:0,MMR:0,104:0,MO:0,MAC:0,446:0,MT:0,MLT:0,470:0,MX:0,MEX:0,484:0,MZ:0,MOZ:0,508:0,NI:0,NIC:0,558:0,NP:0,NPL:0,524:0,NZ:0,NZL:0,554:0,PA:0,PAN:0,591:0,PE:0,PER:0,604:0,PH:0,PHL:0,608:0,PK:0,PAK:0,586:0,PR:0,PRI:0,630:0,PY:0,PRY:0,600:0,SA:0,SAU:0,682:0,SG:0,SGP:0,702:0,SV:0,SLV:0,222:0,TH:0,THA:0,764:0,TN:0,TUN:0,788:0,TT:0,TTO:0,780:0,TW:0,TWN:0,158:0,UM:0,UMI:0,581:0,US:0,USA:0,840:0,VE:0,VEN:0,862:0,VI:0,VIR:0,850:0,WS:0,WSM:0,882:0,YE:0,YEM:0,887:0,ZA:0,ZAF:0,710:0,ZW:0,ZWE:0,716:0,AE:6,ARE:6,784:6,AF:6,AFG:6,4:6,BH:6,BHR:6,48:6,DJ:6,DJI:6,262:6,DZ:6,DZA:6,12:6,EG:6,EGY:6,818:6,IQ:6,IRQ:6,368:6,IR:6,IRN:6,364:6,JO:6,JOR:6,400:6,KW:6,KWT:6,414:6,LY:6,LBY:6,434:6,MA:6,MAR:6,504:6,OM:6,OMN:6,512:6,QA:6,QAT:6,634:6,SD:6,SDN:6,729:6,SY:6,SYR:6,760:6,BD:5,BGD:5,50:5,MV:5,MDV:5,462:5}},function(e,t,n){function r(e,t){for(var n=0;n2&&void 0!==arguments[2])||arguments[2];e=String(e);var r=(t=String(t)).length,l=e.length;if(l>r){if(n)return e;throw{name:"MaskIsTooShortError",message:"MaskIsTooShortError: Mask is shorter than the passed string"}}for(var s=new Array(r),d=0,f="",p=0;p?@[]^_`{|}~".indexOf(v)>-1?s[p]=v:c(n,s,p,e)}else s[p]=" ";++d;break;default:s[p]=f}if(d2&&void 0!==arguments[2]?arguments[2]:",",o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".",i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];return r.a.mask(e,t,n,o,i,a)}},{key:"date",value:function(e,t,n,r){return o.c.mask(e,t,n,r)}},{key:"string",value:function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return i.a.mask(e,t,n)}}]),e}();t.a=u}])},"object"===a(t)&&"object"===a(e)?e.exports=i():(r=[],void 0===(o="function"==typeof(n=i)?n.apply(t,r):n)||(e.exports=o))}).call(this,n(5)(e))},function(e,t,n){(function(t){t.Basis||(t.Basis={}),e.exports=t.Basis.InputMasking=n(44)}).call(this,n(2))},function(module,exports,__webpack_require__){"use strict";(function(module){var __WEBPACK_AMD_DEFINE_FACTORY__,__WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__,t;function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}"undefined"!=typeof self&&self,t=function(__WEBPACK_EXTERNAL_MODULE_0__,__WEBPACK_EXTERNAL_MODULE_7__){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e,t){e.exports=__WEBPACK_EXTERNAL_MODULE_0__},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),o=n(5);n.d(t,"TextInput",(function(){return r.a})),n.d(t,"NumberInput",(function(){return o.a}))},function(e,t,n){var r=n(3);t.a=r.a},function(e,t,n){var r=n(0),o=n.n(r),i=n(4);function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function u(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.options=function(e){for(var t=1;t-1;this._wrap(e,o)}else console.warn("BBjMasking: Invalid input element. The element will be ignored",e)}},{key:"destroy",value:function(){for(var e,t,n="string"==typeof this.options.elements?this.options.doc.querySelectorAll(this.options.elements):this.options.elements,r=0;r-1&&this._unwrap(e)}},{key:"_wrap",value:function(e,t){var n=e.getAttribute("id"),r=e.getAttribute("name"),o=e.dataset.mask||"",a=e.pattern,u=Object(i.b)(o),c=a||u,l=null,s=null;return t?s=(l=e.parentNode).querySelector(".textInputMask__unmaskedInput"):(l=this.options.doc.createElement("span"),s=this.options.doc.createElement("input")),e.value=Object(i.c)(e.value,o),e.pattern=c,e.classList.add("textInputMask__textInput"),e.dataset.mask=o,e.dataset.valueUnmasked=Object(i.d)(e.value,o),a&&a!==u&&(e.dataset.isCustomPattern=!0),t||(e.hasAttribute("readonly")||e.hasAttribute("disable")||(e.addEventListener("keyup",this._onKeystroke),e.addEventListener("keypress",this._onKeystroke),e.addEventListener("paste",this._onKeystroke),e.addEventListener("focusin",this._onFocus),e.addEventListener("click",this._onFocus)),e.parentNode.insertBefore(l,e)),this._validateInput(e)&&this.__fireOnUpdate(e.value,e.dataset.valueUnmasked,e),s.setAttribute("aria-hidden","true"),s.setAttribute("type","hidden"),s.classList.add("textInputMask__unmaskedInput"),s.value=e.dataset.valueUnmasked,n&&s.setAttribute("id","".concat(n,"-unmasked")),r&&s.setAttribute("name","".concat(r,"-unmasked")),t||(l.setAttribute("class","textInputMask__wrap"),l.appendChild(s),l.appendChild(e)),l}},{key:"_unwrap",value:function(e){e.removeChild(e.querySelector(".textInputMask__unmaskedInput"));var t=e.querySelector(".textInputMask__textInput");t.removeEventListener("keyup",this._onKeystroke),t.removeEventListener("keypress",this._onKeystroke),t.removeEventListener("paste",this._onKeystroke),t.removeEventListener("focusin",this._onFocus),t.removeEventListener("click",this._onFocus),delete t.dataset.valueUnmasked,t.dataset.isCustomPattern||(t.removeAttribute("pattern"),delete t.dataset.isCustomPattern),t.classList.remove(this.options.cssClassError),e.parentNode.insertBefore(t,e),e.parentNode.removeChild(e)}},{key:"_onKeystroke",value:function(e){if(!(e.ctrlKey||e.shiftKey||e.altKey||e.metaKey)){13!==e.keyCode&&e.preventDefault();var t=e.target,n=t.dataset.mask||this.options.mask,r=e.type;t.classList.remove(this.options.cssClassError),t.classList.remove(this.options.cssClassSuccess),t.setCustomValidity("");var a,u,c=t.value,l=e.keyCode,s=e.key||e.code.replace(/[^0-9]/g,""),d=s?s.length>1?"":s:"",f=Object(i.a)(c,n),p=!1;switch(r){case"paste":a=Object(i.c)((e.clipboardData||window.clipboardData).getData("Text"),n);break;case"keyup":a=c;break;case"keypress":var h=t.selectionStart;h!==f&&(f=h),a=c.substr(0,f)+d+c.substr(f)}if(u=Object(i.d)(a,n),-1===[35,36,37,38,39,40].indexOf(l)){try{t.value=o.a.mask(u,n,!1),this._validateInput(t)&&(t.dataset.valueUnmasked=u,this.options.doc.querySelector("#".concat(t.getAttribute("id"),"-unmasked")).value=u,this.__applyCssClassState(t,"success"),this.__fireOnUpdate(t.value,t.dataset.valueUnmasked,t)),p=!1}catch(e){this.__applyCssClassState(t,"error"),this.__fireOnInvalid(e,t),p=!0}this._updateCaretPosition(t,n)}p||this._validateInput(t)}}},{key:"_onFocus",value:function(e){var t=e.target,n=t.dataset.mask||this.options.mask;this._updateCaretPosition(t,n)}},{key:"_updateCaretPosition",value:function(e,t){setTimeout((function(){var n=Object(i.a)(e.value,t);e.setSelectionRange(n,n)}),0)}},{key:"_validateInput",value:function(e){var t=e.checkValidity();return t?(this.__applyCssClassState(e,"success"),e.setCustomValidity("")):(this.__applyCssClassState(e,"error"),this.__fireOnInvalid(e.validationMessage,e)),t}},{key:"__fireOnUpdate",value:function(e,t,n){this.options.onUpdate&&this.options.onUpdate(e,t,n)}},{key:"__fireOnInvalid",value:function(e,t){this.options.onInvalid&&this.options.onInvalid(e,t)}},{key:"__applyCssClassState",value:function(e,t){e.hasAttribute("readonly")||e.hasAttribute("disabled")?(e.classList.remove(this.options.cssClassError),e.classList.remove(this.options.cssClassSuccess)):("success"===t&&(e.classList.remove(this.options.cssClassError),e.classList.add(this.options.cssClassSuccess)),"error"===t&&(e.classList.add(this.options.cssClassError),e.classList.remove(this.options.cssClassSuccess)))}}]),e}();t.a=l},function(module,__webpack_exports__,__webpack_require__){__webpack_require__.d(__webpack_exports__,"c",(function(){return maskIfNotMasked})),__webpack_require__.d(__webpack_exports__,"d",(function(){return unmask})),__webpack_require__.d(__webpack_exports__,"a",(function(){return findCaretPosition})),__webpack_require__.d(__webpack_exports__,"b",(function(){return generatePatternFromMask}));var __WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask__=__webpack_require__(0),__WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask___default=__webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask__),SUPPORTED_MASKS=["X","a","A","0","z","Z","U"],IS_UNICODE_PROPERTY_SUPPORTED=!1;try{eval("/\\p{L}/u"),IS_UNICODE_PROPERTY_SUPPORTED=!0}catch(e){IS_UNICODE_PROPERTY_SUPPORTED=!1}var isMaskedValue=function e(t,n){void 0===e.__CACHE__&&(e.__CACHE__={});var r="".concat(t,"-").concat(n);if(!e.__CACHE__[r]){var o=unmask(t,n);e.__CACHE__[r]=t===__WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask___default.a.mask(o,n)}return e.__CACHE__[r]},maskIfNotMasked=function e(t,n){void 0===e.__CACHE__&&(e.__CACHE__={});var r="".concat(t,"-").concat(n);if(!e.__CACHE__[r])if(isMaskedValue(t,n))e.__CACHE__[r]=t;else try{e.__CACHE__[r]=__WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask___default.a.mask(t,n,!1)}catch(t){e.__CACHE__[r]=__WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask___default.a.mask("",n)}return e.__CACHE__[r]},generatePatternFromMask=function e(t){void 0===e.__CACHE__&&(e.__CACHE__={});var n=t;if(!e.__CACHE__[n]){var r="";t.split("").forEach((function(e){switch(e){case"X":r+="([^ -~])";break;case"a":case"A":r+=IS_UNICODE_PROPERTY_SUPPORTED?"\\p{L}":"((?:[A-Za-zªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙՠ-ֈא-תׯ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࡠ-ࡪࢠ-ࢴࢶ-ࢽऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱৼਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄຆ-ຊຌ-ຣລວ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛱ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡸᢀ-ᢄᢇ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-ᲈᲐ-ᲺᲽ-Ჿᳩ-ᳬᳮ-ᳳᳵᳶᳺᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎↃↄⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々〆〱-〵〻〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿯ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛥꜗ-ꜟꜢ-ꞈꞋ-ꞿꟂ-Ᶎꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꣾꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭧꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf2d-\udf40\udf42-\udf49\udf50-\udf75\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf]|\ud801[\udc00-\udc9d\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00\ude10-\ude13\ude15-\ude17\ude19-\ude35\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2\udd00-\udd23\udf00-\udf1c\udf27\udf30-\udf45\udfe0-\udff6]|\ud804[\udc03-\udc37\udc83-\udcaf\udcd0-\udce8\udd03-\udd26\udd44\udd50-\udd72\udd76\udd83-\uddb2\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude2b\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udede\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3d\udf50\udf5d-\udf61]|\ud805[\udc00-\udc34\udc47-\udc4a\udc5f\udc80-\udcaf\udcc4\udcc5\udcc7\udd80-\uddae\uddd8-\udddb\ude00-\ude2f\ude44\ude80-\udeaa\udeb8\udf00-\udf1a]|\ud806[\udc00-\udc2b\udca0-\udcdf\udcff\udda0-\udda7\uddaa-\uddd0\udde1\udde3\ude00\ude0b-\ude32\ude3a\ude50\ude5c-\ude89\ude9d\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc2e\udc40\udc72-\udc8f\udd00-\udd06\udd08\udd09\udd0b-\udd30\udd46\udd60-\udd65\udd67\udd68\udd6a-\udd89\udd98\udee0-\udef2]|\ud808[\udc00-\udf99]|\ud809[\udc80-\udd43]|[\ud80c\ud81c-\ud820\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872\ud874-\ud879][\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf2f\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\ude40-\ude7f\udf00-\udf4a\udf50\udf93-\udf9f\udfe0\udfe1\udfe3]|\ud821[\udc00-\udff7]|\ud822[\udc00-\udef2]|\ud82c[\udc00-\udd1e\udd50-\udd52\udd64-\udd67\udd70-\udefb]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud838[\udd00-\udd2c\udd37-\udd3d\udd4e\udec0-\udeeb]|\ud83a[\udc00-\udcc4\udd00-\udd43\udd4b]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1\udeb0-\udfff]|\ud87a[\udc00-\udfe0]|\ud87e[\udc00-\ude1d]))";break;case"0":r+="([0-9])";break;case"z":case"Z":r+=IS_UNICODE_PROPERTY_SUPPORTED?"([0-9]|\\p{L})":"([0-9]|(?:[A-Za-zªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙՠ-ֈא-תׯ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࡠ-ࡪࢠ-ࢴࢶ-ࢽऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱৼਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄຆ-ຊຌ-ຣລວ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛱ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡸᢀ-ᢄᢇ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-ᲈᲐ-ᲺᲽ-Ჿᳩ-ᳬᳮ-ᳳᳵᳶᳺᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎↃↄⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々〆〱-〵〻〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿯ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛥꜗ-ꜟꜢ-ꞈꞋ-ꞿꟂ-Ᶎꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꣾꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭧꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf2d-\udf40\udf42-\udf49\udf50-\udf75\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf]|\ud801[\udc00-\udc9d\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00\ude10-\ude13\ude15-\ude17\ude19-\ude35\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2\udd00-\udd23\udf00-\udf1c\udf27\udf30-\udf45\udfe0-\udff6]|\ud804[\udc03-\udc37\udc83-\udcaf\udcd0-\udce8\udd03-\udd26\udd44\udd50-\udd72\udd76\udd83-\uddb2\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude2b\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udede\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3d\udf50\udf5d-\udf61]|\ud805[\udc00-\udc34\udc47-\udc4a\udc5f\udc80-\udcaf\udcc4\udcc5\udcc7\udd80-\uddae\uddd8-\udddb\ude00-\ude2f\ude44\ude80-\udeaa\udeb8\udf00-\udf1a]|\ud806[\udc00-\udc2b\udca0-\udcdf\udcff\udda0-\udda7\uddaa-\uddd0\udde1\udde3\ude00\ude0b-\ude32\ude3a\ude50\ude5c-\ude89\ude9d\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc2e\udc40\udc72-\udc8f\udd00-\udd06\udd08\udd09\udd0b-\udd30\udd46\udd60-\udd65\udd67\udd68\udd6a-\udd89\udd98\udee0-\udef2]|\ud808[\udc00-\udf99]|\ud809[\udc80-\udd43]|[\ud80c\ud81c-\ud820\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872\ud874-\ud879][\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf2f\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\ude40-\ude7f\udf00-\udf4a\udf50\udf93-\udf9f\udfe0\udfe1\udfe3]|\ud821[\udc00-\udff7]|\ud822[\udc00-\udef2]|\ud82c[\udc00-\udd1e\udd50-\udd52\udd64-\udd67\udd70-\udefb]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud838[\udd00-\udd2c\udd37-\udd3d\udd4e\udec0-\udeeb]|\ud83a[\udc00-\udcc4\udd00-\udd43\udd4b]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1\udeb0-\udfff]|\ud87a[\udc00-\udfe0]|\ud87e[\udc00-\ude1d]))";break;case"U":r+=IS_UNICODE_PROPERTY_SUPPORTED?"(([0-9])|(\\s)|([.,/#!$%^&*;:{}=-_`~()])|(\\p{L}))":"(([0-9])|(\\s)|([.,/#!$%^&*;:{}=-_`~()])|(?:[A-Za-zªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙՠ-ֈא-תׯ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࡠ-ࡪࢠ-ࢴࢶ-ࢽऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱৼਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄຆ-ຊຌ-ຣລວ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛱ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡸᢀ-ᢄᢇ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-ᲈᲐ-ᲺᲽ-Ჿᳩ-ᳬᳮ-ᳳᳵᳶᳺᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎↃↄⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々〆〱-〵〻〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿯ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛥꜗ-ꜟꜢ-ꞈꞋ-ꞿꟂ-Ᶎꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꣾꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭧꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf2d-\udf40\udf42-\udf49\udf50-\udf75\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf]|\ud801[\udc00-\udc9d\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00\ude10-\ude13\ude15-\ude17\ude19-\ude35\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2\udd00-\udd23\udf00-\udf1c\udf27\udf30-\udf45\udfe0-\udff6]|\ud804[\udc03-\udc37\udc83-\udcaf\udcd0-\udce8\udd03-\udd26\udd44\udd50-\udd72\udd76\udd83-\uddb2\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude2b\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udede\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3d\udf50\udf5d-\udf61]|\ud805[\udc00-\udc34\udc47-\udc4a\udc5f\udc80-\udcaf\udcc4\udcc5\udcc7\udd80-\uddae\uddd8-\udddb\ude00-\ude2f\ude44\ude80-\udeaa\udeb8\udf00-\udf1a]|\ud806[\udc00-\udc2b\udca0-\udcdf\udcff\udda0-\udda7\uddaa-\uddd0\udde1\udde3\ude00\ude0b-\ude32\ude3a\ude50\ude5c-\ude89\ude9d\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc2e\udc40\udc72-\udc8f\udd00-\udd06\udd08\udd09\udd0b-\udd30\udd46\udd60-\udd65\udd67\udd68\udd6a-\udd89\udd98\udee0-\udef2]|\ud808[\udc00-\udf99]|\ud809[\udc80-\udd43]|[\ud80c\ud81c-\ud820\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872\ud874-\ud879][\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf2f\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\ude40-\ude7f\udf00-\udf4a\udf50\udf93-\udf9f\udfe0\udfe1\udfe3]|\ud821[\udc00-\udff7]|\ud822[\udc00-\udef2]|\ud82c[\udc00-\udd1e\udd50-\udd52\udd64-\udd67\udd70-\udefb]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud838[\udd00-\udd2c\udd37-\udd3d\udd4e\udec0-\udeeb]|\ud83a[\udc00-\udcc4\udd00-\udd43\udd4b]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1\udeb0-\udfff]|\ud87a[\udc00-\udfe0]|\ud87e[\udc00-\ude1d]))";break;default:r+=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}})),e.__CACHE__[n]=r}return e.__CACHE__[n]},unmask=function e(t,n){void 0===e.__CACHE__&&(e.__CACHE__={});var r="".concat(t,"-").concat(n);if(!e.__CACHE__[r]){for(var o=n.split(""),i=t.split(""),a="",u=0;u-1){if(!new RegExp(generatePatternFromMask(l),IS_UNICODE_PROPERTY_SUPPORTED?"u":"").test(c))break;a+=c}}e.__CACHE__[r]=a.toLocaleLowerCase()}return e.__CACHE__[r]},findCaretPosition=function e(t,n){void 0===e.__CACHE__&&(e.__CACHE__={});var r="".concat(t,"-").concat(n);if(!e.__CACHE__[r]){var o=n.split(""),i=t.split("");i.length-1&&!new RegExp(generatePatternFromMask(c),IS_UNICODE_PROPERTY_SUPPORTED?"u":"").test(i[u])){a=u;break}}e.__CACHE__[r]=a<0?i.length:a}return e.__CACHE__[r]}},function(e,t,n){var r=n(6);t.a=r.a},function(e,t,n){var r=n(7),o=n.n(r);function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function u(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.options=function(e){for(var t=1;t-1;this._wrap(e,o)}else console.warn("BBjMasking: Invalid input element. The element will be ignored",e)}},{key:"destroy",value:function(){for(var e,t,n="string"==typeof this.options.elements?this.options.doc.querySelectorAll(this.options.elements):this.options.elements,r=0;r-1&&this._unwrap(e)}},{key:"_wrap",value:function(e,t){var n=e.getAttribute("id"),r=e.getAttribute("name"),i=e.dataset.step||null,a=e.dataset.max||null,u=e.dataset.min||null,l=e.dataset.groupingSeparator||",",s=e.dataset.decimalSeparator||".",d=e.dataset.forceTrailingZeros||null,f=e.dataset.mask||"",p=e.getAttribute("class"),h=e.getAttribute("required")||null,g=null,b=null;if(t?b=(g=e.parentNode).querySelector(".numberInputMask__unmaskedInput"):(g=this.options.doc.createElement("span"),b=this.options.doc.createElement("input")),t||(e.parentNode.insertBefore(g,e),e.hasAttribute("readonly")||e.hasAttribute("disabled")||(e.addEventListener("click",this._actualInputHandler),e.addEventListener("focusin",this._actualInputHandler))),e.dataset.valueUnmasked=e.value||0,e.dataset.groupingSeparator=l,e.dataset.decimalSeparator=s,e.dataset.forceTrailingZeros=d,e.value=o.a.mask(e.dataset.valueUnmasked,f,l,s,d).trim(),e.classList.add("numberInputMask__textInput",this.options.cssClassSuccess),b.value=e.dataset.valueUnmasked,b.setAttribute("aria-hidden","true"),b.setAttribute("type","hidden"),b.setAttribute("class",p),n&&b.setAttribute("id","".concat(n,"-unmasked")),r&&b.setAttribute("name","".concat(r,"-unmasked")),h&&b.setAttribute("required","required"),i)b.setAttribute("step",i);else{var m=c(b.value),y="1";m>0&&(y=".".concat(Array(m).join("0"),"1")),b.setAttribute("step",y)}return u&&b.setAttribute("min",u),a&&b.setAttribute("max",a),b.dataset.inputId=n,b.dataset.mask=f,b.dataset.groupingSeparator=l,b.dataset.decimalSeparator=s,d&&(b.dataset.forceTrailingZeros=d),t||(b.classList.add("numberInputMask__unmaskedInput"),b.addEventListener("keydown",this._unmaskedInputHandler),b.addEventListener("keyup",this._unmaskedInputHandler),b.addEventListener("focusout",this._unmaskedInputHandler),g.setAttribute("class","numberInputMask__wrap"),g.appendChild(b),g.appendChild(e)),isNaN(Number(e.dataset.valueUnmasked))?e.classList.add(this.options.cssClassError):this._validateInput(b,e)&&this.__fireOnUpdate(e.value,e.dataset.valueUnmasked,e),g}},{key:"_unwrap",value:function(e){var t=e.querySelector(".numberInputMask__textInput"),n=t.id,r=e.querySelector("#".concat(n,"-unmasked"));r.removeEventListener("keyup",this._unmaskedInputHandler),r.removeEventListener("keypress",this._unmaskedInputHandler),r.removeEventListener("focusout",this._unmaskedInputHandler),e.removeChild(r),t.removeEventListener("click",this._actualInputHandler),t.removeEventListener("focusin",this._actualInputHandler),t.classList.remove("numberInputMask__textInput"),t.classList.remove(this.options.cssClassError),t.classList.remove(this.options.cssClassSuccess),delete t.dataset.valueUnmasked,e.parentNode.insertBefore(t,e),e.parentNode.removeChild(e)}},{key:"_actualInputHandler",value:function(e){var t=e.target,n=t.id,r=this.options.doc.querySelector("#".concat(n,"-unmasked"));t.setAttribute("aria-hidden","true"),t.setAttribute("type","hidden"),r.removeAttribute("aria-hidden"),r.setAttribute("type","number"),this._validateInput(r,t),setTimeout((function(){r.focus();var e=String(r.value).length;r.type="text",r.setSelectionRange(e,e),r.type="number"}),0)}},{key:"_unmaskedInputHandler",value:function(e){var t,n=e.target,r=e.keyCode,i=n.dataset.mask,a=n.dataset.groupingSeparator,u=n.dataset.decimalSeparator,c=n.dataset.forceTrailingZeros,l=n.dataset.inputId,s=this.options.doc.querySelector("#".concat(l)),d=!1,f=this._validateInput(n,s);try{d=o.a.mask(n.value||0,i,a,u,c,!1).trim()}catch(e){d=!1,this.__applyCssClassState(n,s,"error"),this.__fireOnInvalid(e,s)}t=d&&f,([13,27].indexOf(r)>-1||"focusout"===e.type)&&(n.classList.remove(this.options.cssClassError),n.classList.remove(this.options.cssClassSuccess),n.setAttribute("aria-hidden","true"),n.setAttribute("type","hidden"),s.removeAttribute("aria-hidden"),s.setAttribute("type","text"),s.classList.add(this.options.cssClassSuccess),t?(s.value=d,s.dataset.valueUnmasked=n.value,this.__fireOnUpdate(d,n.value,s)):(n.value=s.dataset.valueUnmasked,this.__applyCssClassState(n,s,"success")))}},{key:"_validateInput",value:function(e,t){var n=!0,r=Number(e.value);if("hidden"!==e.getAttribute("type")||isNaN(r))n=e.checkValidity();else{var o=e.getAttribute("max"),i=e.getAttribute("min"),a=e.getAttribute("step");i&&(n=n&&r>=Number(i)),o&&(n=n&&r<=Number(o)),a&&(n=n&&c(a)===c(e.value))}return n?this.__applyCssClassState(e,t,"success"):(this.__applyCssClassState(e,t,"error"),this.__fireOnInvalid(e.validationMessage||"Validity check fails",t)),n}},{key:"__fireOnUpdate",value:function(e,t,n){this.options.onUpdate&&this.options.onUpdate(e,t,n)}},{key:"__fireOnInvalid",value:function(e,t){this.options.onInvalid&&this.options.onInvalid(e,t)}},{key:"__applyCssClassState",value:function(e,t,n){t.hasAttribute("readonly")||t.hasAttribute("disabled")?(t.classList.remove(this.options.cssClassError),t.classList.remove(this.options.cssClassSuccess),e.classList.remove(this.options.cssClassError),e.classList.remove(this.options.cssClassSuccess)):("success"===n&&(t.classList.remove(this.options.cssClassError),t.classList.add(this.options.cssClassSuccess),e.classList.remove(this.options.cssClassError),e.classList.add(this.options.cssClassSuccess)),"error"===n&&(t.classList.add(this.options.cssClassError),t.classList.remove(this.options.cssClassSuccess),e.classList.add(this.options.cssClassError),e.classList.remove(this.options.cssClassSuccess)))}}]),e}();t.a=l},function(e,t){e.exports=__WEBPACK_EXTERNAL_MODULE_7__}])},"object"===_typeof(exports)&&"object"===_typeof(module)?module.exports=t(__webpack_require__(13),__webpack_require__(14)):(__WEBPACK_AMD_DEFINE_ARRAY__=[__webpack_require__(13),__webpack_require__(14)],void 0===(__WEBPACK_AMD_DEFINE_RESULT__="function"==typeof(__WEBPACK_AMD_DEFINE_FACTORY__=t)?__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports,__WEBPACK_AMD_DEFINE_ARRAY__):__WEBPACK_AMD_DEFINE_FACTORY__)||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__))}).call(this,__webpack_require__(5)(module))},function(e,t,n){"use strict";function r(e,t){for(var n=0;n2&&void 0!==arguments[2])||arguments[2];e=String(e);var r=(t=String(t)).length,l=e.length;if(l>r){if(n)return e;throw{name:"MaskIsTooShortError",message:"MaskIsTooShortError: Mask is shorter than the passed string"}}for(var s=new Array(r),d=0,f="",p=0;p?@[]^_`{|}~".indexOf(v)>-1?s[p]=v:c(n,s,p,e)}else s[p]=" ";++d;break;default:s[p]=f}if(d2&&void 0!==arguments[2]?arguments[2]:",",o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".",i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],u=n.length;if(0===u){if(a)return str;throw{name:"MaskError",message:"MaskError: Mask is empty"}}for(var c=0,l=0,s=!1,d=0;dc){if(a)return t.toString();throw{name:"MaskError",message:"MaskError: Number is too large for mask"}}if(m>l){p=e._round(p,l),g=(h=e._toCharArray(p)).length,b=0,m=0,s=!1;for(var v=0;vc){if(a)return t.toString();throw{name:"MaskError",message:"MaskError: Number is too large for mask"}}}var _=" ",w=" ",O=0,k=0,C=0;"*"==n.charAt(0)&&(_="*");var x=_,D=e._getSign(p)<0,E=g>0||n.indexOf("0")>=0,S=!1,j=!1;s=!1;for(var M=new Array(u),P=0;P0?M[k]=r:(M[k]=_,s||(C=P)),++k;break;case"-":j||" "!=w?M[k]=D?"-":_:(D&&(w="-"),M[k]=_,C=s?-1:P),++k;break;case"+":j||" "!=w?M[k]=D?"-":"+":(w=D?"-":"+",M[k]=_,C=s?-1:P),++k;break;case"$":j||" "!=w?M[k]="$":(w="$",M[k]=_,C=s?-1:P),++k;break;case"(":j||" "!=w?M[k]=D?"(":s?" ":_:(D&&(w="("),M[k]=_,C=s?-1:P),++k;break;case")":M[k]=D?")":s?" ":_,++k;break;case"C":P=u;)--C;M[C]==x&&(M[C]=w)}return M.join("")}},{key:"_shift",value:function(e,t,n){n&&(t=-t);var r=(""+e).split("e");return+(r[0]+"e"+(r[1]?+r[1]+t:t))}},{key:"_round",value:function(t,n){return e._shift(Math.round(e._shift(t,n,!1)),n,!0)}},{key:"_toCharArray",value:function(t){var n=e._getSign(t),r=[];if(0!==n){var o=n<0?"".concat(-1*t.toString()):t.toString();o.length>1&&"0"==o.charAt(0)&&(o=o.substring(1)),r=o.split("")}return r}},{key:"_getSign",value:function(e){return(e>0)-(e<0)||+e}}]),e}();t.default=o},function(e,t,n){(function(t){e.exports=t.flatpickr=n(48)}).call(this,n(2))},function(e,t,n){"use strict";var r,o;function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)} +!function(e,t){for(var n in t)e[n]=t[n]}(window,function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=39)}([function(e,t,n){"use strict";function r(e){window.BBjGridExWidget=window.BBjGridExWidget||{};var t=window.BBjGridExWidget[e]||null;if(!t){var n=JSON.stringify(Object.keys(window.BBjGridExWidget));throw new TypeError("\n\n[Grid Not Found] The method asked for non-existent grid instance.\n-------------------------------------------------------------------\nRequired Grid Id : ".concat(e," \nRegistered Grids : ").concat(n,"\n"))}return t}Object.defineProperty(t,"__esModule",{value:!0}),t.gw_getDocument=function(){return"undefined"!=typeof $doc?$doc:document},t.gw_getWindow=function(){return"undefined"!=typeof $wnd?$wnd:window},t.gw_escape=function(e){return null!=e?e:""},t.gw_uuid=function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)}))},t.gw_getGrid=r,t.gw_addGrid=function(e,t){return window.BBjGridExWidget=window.BBjGridExWidget||{},window.BBjGridExWidget[e]=t,r(e)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_debounce=function(e,t,n){var r;return function(){var o=this,i=arguments,a=n&&!r;clearTimeout(r),r=setTimeout((function(){r=null,n||e.apply(o,i)}),t),a&&e.apply(o,i)}},t.gw_sendEvent=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];if((e.interests||[]).includes(n)){var o=(0,r.gw_getDocument)().getElementById("".concat(e.id));window.basisDispatchCustomEvent(o,t)}},t.gw_parseNode=o,t.gw_parseNodeFromEvent=function(e){return o(e.node,e.context)};var r=n(0);function o(e,t){if(!0===e.group)return!1;var n=e.rowPinned?"__ROW_INDEX":t.getRowNodeId;return{i:t.hasOwnProperty("getRowNodeId")&&e.data[n]?e.data[n]:e.id,x:e.rowIndex,p:e.hasOwnProperty("parent")&&e.parent.hasOwnProperty("key")?e.parent.key:"",c:e.rowPinned?-1:e.childIndex,s:Boolean(e.selected),cr:t.hasOwnProperty("includeClientRowData")&&!0===t.includeClientRowData?e.data:null,pp:e.rowPinned}}},function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var o;o=function(){return this}();try{o=o||new Function("return this")()}catch(e){"object"===("undefined"==typeof window?"undefined":r(window))&&(o=window)}e.exports=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(9)),o=a(n(67)),i=a(n(68));function a(e){return e&&e.__esModule?e:{default:e}}var u=r.default?r.default.toStringTag:void 0;t.default=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":u&&u in Object(e)?(0,o.default)(e):(0,i.default)(e)}},function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e){return null!=e&&"object"==r(e)}},function(e,t,n){"use strict";e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}e.exports={deepParseJson:function e(t){if("string"!=typeof t)return Array.isArray(t)?t.map((function(t){return e(t)})):"object"===r(t)&&null!==t?Object.keys(t).reduce((function(n,r){return n[r]=e(t[r]),n}),{}):t;try{return e(JSON.parse(t))}catch(e){return t}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.GW_EVENT_KEYPRESS=t.GW_EVENT_RANGE_SELECTION_CHANGED=t.GW_EVENT_GRID_STATE_CHANGE=t.GW_EVENT_ROW_VALUE_CHANGED=t.GW_EVENT_ROW_EDITING_STOPPED=t.GW_EVENT_ROW_EDITING_STARTED=t.GW_EVENT_CELL_VALUE_CHANGED=t.GW_EVENT_CELL_EDITING_STOPPED=t.GW_EVENT_CELL_EDITING_STARTED=t.GW_EVENT_CELL_DOUBLE_CLICK=t.GW_EVENT_CELL_CLICK=t.GW_EVENT_ROW_DOUBLE_CLICK=t.GW_EVENT_ROW_CLICK=t.GW_EVENT_ROW_SELECT=void 0,t.GW_EVENT_ROW_SELECT=69,t.GW_EVENT_ROW_CLICK=5011,t.GW_EVENT_ROW_DOUBLE_CLICK=52,t.GW_EVENT_CELL_CLICK=5001,t.GW_EVENT_CELL_DOUBLE_CLICK=5002,t.GW_EVENT_CELL_EDITING_STARTED=5003,t.GW_EVENT_CELL_EDITING_STOPPED=5004,t.GW_EVENT_CELL_VALUE_CHANGED=5005,t.GW_EVENT_ROW_EDITING_STARTED=5006,t.GW_EVENT_ROW_EDITING_STOPPED=5007,t.GW_EVENT_ROW_VALUE_CHANGED=5012,t.GW_EVENT_GRID_STATE_CHANGE=5008,t.GW_EVENT_RANGE_SELECTION_CHANGED=5009,t.GW_EVENT_KEYPRESS=5010},function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e){var t=r(e);return null!=e&&("object"==t||"function"==t)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return e&&e.__esModule?e:{default:e}}(n(10)).default.Symbol;t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return e&&e.__esModule?e:{default:e}}(n(23));function o(e){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var i="object"==("undefined"==typeof self?"undefined":o(self))&&self&&self.Object===Object&&self,a=r.default||i||Function("return this")();t.default=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e,t){return e===t||e!=e&&t!=t}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(22)),o=i(n(28));function i(e){return e&&e.__esModule?e:{default:e}}t.default=function(e){return null!=e&&(0,o.default)(e.length)&&!(0,r.default)(e)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return e&&e.__esModule?e:{default:e}}(n(45)).default;t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return e&&e.__esModule?e:{default:e}}(n(46)).default;t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_extendColumnDefinitions=u,t.gw_setColumnDefinitions=function(e,t){var n=(0,r.gw_getGrid)(e),o=i(JSON.stringify(t));u(o),n.options.api.setColumnDefs(o),n.options.columnDefs=o},t.gw_sizeColumnsToFit=function(e,t){var n=(0,r.gw_getGrid)(e).options,o=n.api,i=n.columnApi;t?i.sizeColumnsToFit(Number(t)):o.sizeColumnsToFit()},t.gw_autoSizeColumns=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,o=(0,r.gw_getGrid)(e).options.columnApi;if(n&&n.length)o.autoSizeColumns(n,Boolean(t));else{var i=[];o.getAllColumns().forEach((function(e){i.push(e.colId)})),o.autoSizeColumns(i,Boolean(t))}},t.gw_ensureColumnVisible=function(e,t){(0,r.gw_getGrid)(e).options.api.ensureColumnVisible(t)},t.gw_setColumnWidth=function(e,t,n){(0,r.gw_getGrid)(e).options.columnApi.setColumnWidth(t,Number(n))},t.gw_pinColumn=function(e,t,n){(0,r.gw_getGrid)(e).options.columnApi.setColumnPinned(t,n)},t.gw_moveColumn=function(e,t,n){(0,r.gw_getGrid)(e).options.columnApi.moveColumn(t,n)},t.gw_isShowSelectionCheckbox=c,t.gw_isHeaderCheckboxSelection=l,t.gw_addRowGroupColumn=function(e,t,n){(0,r.gw_getGrid)(e).options.columnApi[n?"setRowGroupColumns":"addRowGroupColumns"](t.split(",").map((function(e){return e.trim()})))},t.gw_removeRowGroupColumn=function(e,t){(0,r.gw_getGrid)(e).options.columnApi.removeRowGroupColumns(t.split(",").map((function(e){return e.trim()})))},t.gw_getPivotMode=function(e){return(0,r.gw_getGrid)(e).options.columnApi.isPivotMode()},t.gw_setPivotMode=function(e,t){(0,r.gw_getGrid)(e).options.columnApi.setPivotMode(!!Number(t))},t.gw_addPivotColumns=function(e,t,n){(0,r.gw_getGrid)(e).options.columnApi[n?"setPivotColumns":"addPivotColumns"](t.split(",").map((function(e){return e.trim()})))},t.gw_removePivotColumns=function(e,t){(0,r.gw_getGrid)(e).options.columnApi.removePivotColumns(t.split(",").map((function(e){return e.trim()})))},t.gw_addValueColumns=function(e,t){(0,r.gw_getGrid)(e).options.columnApi.addValueColumns(t.split(",").map((function(e){return e.trim()})))},t.gw_removeValueColumns=function(e,t){(0,r.gw_getGrid)(e).options.columnApi.removeValueColumns(t.split(",").map((function(e){return e.trim()})))},t.gw_setSortModel=function(e,t){var n=[];JSON.parse(t).forEach((function(e){for(var t in e)n.push({colId:t,sort:e[t]})})),(0,r.gw_getGrid)(e).options.api.setSortModel(n)},t.gw_refreshHeader=function(e){(0,r.gw_getGrid)(e).options.api.redrawRows()};var r=n(0),o=n(16),i=n(6).deepParseJson;function a(e){var t=e.tooltipValueGetter;t&&(e.tooltipValueGetter=function(e){return(0,o.gw_executeExpression)(t,e)}),e.tooltipComponent="HTMLTooltip",e.hasOwnProperty("children")&&e.children.forEach((function(e){return a(e)}))}function u(e){for(var t in e){var n=e[t];n.checkboxSelection=n.checkboxSelection||c,n.headerCheckboxSelection=n.headerCheckboxSelection||l,a(n),n.hasOwnProperty("editable")&&"string"==typeof n.editable&&function(){var e=n.editable;n.editable=function(t){return(0,o.gw_executeExpression)(e,t)}}()}}function c(e){return!!e.context.showSelectionCheckbox&&e.columnApi.getAllGridColumns()[0].colDef.field===e.colDef.field}function l(e){return!!e.api.gridOptionsWrapper.gridOptions.context.showHeaderSelectionCheckbox&&e.columnApi.getAllGridColumns()[0].colDef.field===e.colDef.field}},function(e,t,n){"use strict";function r(e){if(void 0===r.expressionCache&&(r.expressionCache=[]),r.expressionCache[e])return r.expressionCache[e];var t;t=e.indexOf("return")>=0?e:"return "+e+";";var n=new Function("x, ctx, oldValue, newValue, value, node, data, colDef, rowIndex, api, columnApi, getValue, column, columnGroup",t);return r.expressionCache[e]=n,n}Object.defineProperty(t,"__esModule",{value:!0}),t.gw_compileExpression=r,t.gw_executeExpression=function(e,t){try{var n;return r(e)(t.value,t.context,t.oldValue,t.newValue,t.value,t.node,t.data,t.colDef,t.rowIndex,t.api,t.columnApi,t.getValue,t.column,t.columnGroup)}catch(n){return console.log("Processing of the expression failed"),console.log("Expression = "+e),console.log("Params =",t),console.log("Exception = "+n),null}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_setQuickFilter=function(e,t){(0,r.gw_getGrid)(e).options.api.setQuickFilter(t)},t.gw_expandAll=function(e){(0,r.gw_getGrid)(e).options.api.expandAll()},t.gw_collapseAll=function(e){(0,r.gw_getGrid)(e).options.api.collapseAll()},t.gw_ensureIndexVisible=function(e,t,n){var o=(0,r.gw_getGrid)(e).options.api,i=o.getRowNode(t);i?o.ensureNodeVisible(i,n):o.ensureIndexVisible(Number(t),n)},t.gw_navigateToNextRow=function(e,t){var n=(0,r.gw_getGrid)(e).options,o=t.previousCellPosition,i=t.nextCellPosition;switch(t.key){case 40:if(i&&!i.rowPinned)if(o.rowPinned){var a=n.api.getDisplayedRowAtIndex(n.api.getFirstDisplayedRow());a&&a.setSelected(!0)}else n.api.forEachNode((function(e){o.rowIndex+1===e.rowIndex&&e.setSelected(!0)}));return i;case 38:if(i&&!i.rowPinned)if(o.rowPinned){var u=n.api.getDisplayedRowAtIndex(n.api.getLastDisplayedRow());u&&u.setSelected(!0)}else n.api.forEachNode((function(e){o.rowIndex-1===e.rowIndex&&e.setSelected(!0)}));return i;case 37:case 39:return i;default:throw new Error("You have super strange keyboard")}},t.gw_getRowNodeId=function(e,t){return t[(0,r.gw_getGrid)(e).options.context.getRowNodeId]},t.gw_setRowData=function(e,t){var n=(0,r.gw_getGrid)(e).options;n.api.setRowData(t),n.rowData=t},t.gw_updateRowData=function(e,t,n){var o=(0,r.gw_getGrid)(e).options;if(t.remove.length){var i=[];t.remove.forEach((function(e){i.push(o.api.getRowNode(e).data)})),t.remove=i}n?o.api.applyTransactionAsync(t):o.api.applyTransaction(t)},t.gw_setRowsHeight=function(e,t){var n=(0,r.gw_getGrid)(e).options.api;n.forEachNode((function(e){e.setRowHeight(t)})),n.onRowHeightChanged()},t.gw_setRowHeight=function(e,t,n){var o=(0,r.gw_getGrid)(e).options,i=o.api,a=i.getRowNode(t)||i.getDisplayedRowAtIndex(t);a?(a.setRowHeight(n),o.api.onRowHeightChanged()):console.warn("Failed to set height for row ".concat(t,". Row cannot be found"))},t.gw_resetRowHeights=function(e){(0,r.gw_getGrid)(e).options.api.resetRowHeights()},t.gw_setSelectedRows=function(e,t){var n=(0,r.gw_getGrid)(e).options.api;n.forEachNodeAfterFilterAndSort((function(e){(t.indexOf(String(e.rowIndex))>-1||t.indexOf(String(e.id))>-1)&&(e.setSelected(!0),e.expanded=!0)})),n.onGroupExpandedOrCollapsed()},t.gw_selectAll=function(e,t){var n=(0,r.gw_getGrid)(e).options;1===t?n.api.selectAllFiltered():n.api.selectAll()},t.gw_deselectAll=function(e,t){var n=(0,r.gw_getGrid)(e).options;1===t?n.api.deselectAllFiltered():n.api.deselectAll()},t.gw_getSelectedRows=a,t.gw_getSelectedRow=function(e){var t=JSON.parse(a(e));return t.length?JSON.stringify(t[t.length-1]):""},t.gw_getRow=function(e,t){var n=(0,r.gw_getGrid)(e).options;return JSON.stringify((0,o.gw_parseNode)(n.api.getRowNode(t),n.context))},t.gw_getRows=function(e,t,n){var a=(0,r.gw_getGrid)(e).options,u=[];return a.api[t]((function(e){e.group||(n?(0,i.gw_executeExpression)(n,{value:e.data,context:a.context,oldValue:null,newValue:null,node:e,data:e.data,colDef:null,rowIndex:e.rowIndex,api:e.gridApi,columnApi:e.columnApi,getValue:function(){return e.data},column:null,columnGroup:e.hasOwnProperty("parent")&&e.parent.hasOwnProperty("key")?e.parent.key:""})&&u.push((0,o.gw_parseNode)(e,a.context)):u.push((0,o.gw_parseNode)(e,a.context)))})),JSON.stringify(u)},t.gw_redrawRows=function(e){(0,r.gw_getGrid)(e).options.api.redrawRows()},t.gw_setPinnedTopRowData=function(e,t){(0,r.gw_getGrid)(e).options.api.setPinnedTopRowData(t)},t.gw_setPinnedBottomRowData=function(e,t){(0,r.gw_getGrid)(e).options.api.setPinnedBottomRowData(t)};var r=n(0),o=n(1),i=n(16);function a(e){var t=(0,r.gw_getGrid)(e).options,n=[];return t.api.getSelectedNodes().forEach((function(e){n.push((0,o.gw_parseNode)(e,t.context))})),JSON.stringify(n)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_getChartToolbarItems=function(e){return e.api.gridOptionsWrapper.gridOptions.context.chartToolbarItems||[]},t.gw_addChartRange=function(e,t){var n=(0,r.gw_getGrid)(e),a=n.options,u=i(JSON.stringify(t));u.cellRange=(0,o.gw_parseAddCellRange)(a,u.cellRange);var c=a.api.createRangeChart(u),l=(0,r.gw_uuid)();return n.created_charts=n.created_charts||{},n.created_charts[l]=c,l},t.gw_destroyChart=function(e,t){var n=(0,r.gw_getGrid)(e);if(t)n.hasOwnProperty("created_charts")&&n.created_charts.hasOwnProperty(t)&&n.created_charts[t].destroyChart();else if(n.hasOwnProperty("created_charts"))for(var o in n.created_charts)if(n.created_charts.hasOwnProperty(o)){n.created_charts[o].destroyChart()}};var r=n(0),o=n(19),i=n(6).deepParseJson},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_startEditingCell=function(e,t,n,o,i,a){var u=(0,r.gw_getGrid)(e).options,c=u.api,l=c.getRowNode(t)||c.getDisplayedRowAtIndex(t);u.api.startEditingCell({rowIndex:l.rowIndex,keyPress:Number(o),colKey:n,charPress:i,rowPinned:a})},t.gw_stopEditing=function(e,t){(0,r.gw_getGrid)(e).options.api.stopEditing(t)},t.gw_tabToNextCell=function(e){(0,r.gw_getGrid)(e).options.api.tabToNextCell()},t.gw_tabToPreviousCell=function(e){(0,r.gw_getGrid)(e).options.api.tabToPreviousCell()},t.gw_setFocusedCell=function(e,t,n){var o,i,a,u=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,c=(0,r.gw_getGrid)(e).options;if(!(c.api.getEditingCells().length>0)){if(-1==t){var l=c.api.getFocusedCell();l?(o=l.rowIndex,i=l.column.colId,a=l.rowPinned):(o=0,i=c.columnApi.getAllGridColumns()[0].colId,a=u)}else o=t?Number.isInteger(+t)?+t:c.api.getRowNode(t).rowIndex:0,i=n||c.columnApi.getAllGridColumns()[0].colId,a=u;(0,r.gw_getGrid)(e).options.api.setFocusedCell(o,i,a)}},t.gw_getRangeSelections=function(e){var t=(0,r.gw_getGrid)(e).options,n=t.context,i=t.api,a=i.getCellRanges(),u=i.getModel(),c=[];return a.forEach((function(e){for(var t=e.columns.reduce((function(e,t){return"ag-Grid-AutoColumn"!==t.colId&&e.push(t.colId),e}),[]).filter(Boolean),r=Math.min(e.startRow.rowIndex,e.endRow.rowIndex),i=Math.max(e.startRow.rowIndex,e.endRow.rowIndex),a=[],l=r;l<=i;l++){var s=u.getRow(l);if(s){var d=(0,o.gw_parseNode)(s,n);d&&a.push(d)}}a.length&&t.length&&c.push({r:a,c:t})})),JSON.stringify(c)},t.gw_parseAddCellRange=a,t.gw_addCellRange=function(e,t){var n=(0,r.gw_getGrid)(e).options;n.api.addCellRange(a(n,t))},t.gw_clearRangeSelection=function(e){(0,r.gw_getGrid)(e).options.api.clearRangeSelection()};var r=n(0),o=n(1),i=n(6).deepParseJson;function a(e,t){var n=i(JSON.stringify(t)),r=n.start?Number.isInteger(+n.start)?+n.start:e.api.getRowNode(n.start).rowIndex:0,o=n.end?Number.isInteger(+n.end)?+n.end:e.api.getRowNode(n.end).rowIndex:e.rowData.length-1;return{rowStartIndex:Math.abs(r),rowEndIndex:Math.abs(o),columns:n.columns}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return e&&e.__esModule?e:{default:e}}(n(21));t.default=function(e,t,n){"__proto__"==t&&r.default?(0,r.default)(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return e&&e.__esModule?e:{default:e}}(n(65)),o=function(){try{var e=(0,r.default)(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(3)),o=i(n(8));function i(e){return e&&e.__esModule?e:{default:e}}t.default=function(e){if(!(0,o.default)(e))return!1;var t=(0,r.default)(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},function(e,t,n){"use strict";(function(e){function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r="object"==(void 0===e?"undefined":n(e))&&e&&e.Object===Object&&e;t.default=r}).call(this,n(2))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(25)),o=a(n(74)),i=a(n(75));function a(e){return e&&e.__esModule?e:{default:e}}t.default=function(e,t){return(0,i.default)((0,o.default)(e,t,r.default),e+"")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e){return e}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=u(n(11)),o=u(n(12)),i=u(n(29)),a=u(n(8));function u(e){return e&&e.__esModule?e:{default:e}}function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}t.default=function(e,t,n){if(!(0,a.default)(n))return!1;var u=c(t);return!!("number"==u?(0,o.default)(n)&&(0,i.default)(t,n.length):"string"==u&&t in n)&&(0,r.default)(n[t],e)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}},function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=/^(?:0|[1-9]\d*)$/;t.default=function(e,t){var n=r(e);return!!(t=null==t?9007199254740991:t)&&("number"==n||"symbol"!=n&&o.test(e))&&e>-1&&e%1==0&&e/g},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return e&&e.__esModule?e:{default:e}}(n(104));t.default=function(e){return null==e?"":(0,r.default)(e)}},function(e,t,n){var r={},o=function(e){var t;return function(){return void 0===t&&(t=e.apply(this,arguments)),t}}((function(){return window&&document&&document.all&&!window.atob})),i=function(e){var t={};return function(e){if("function"==typeof e)return e();if(void 0===t[e]){var n=function(e){return document.querySelector(e)}.call(this,e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}}(),a=null,u=0,c=[],l=n(119);function s(e,t){for(var n=0;n=0&&c.splice(t,1)}function h(e){var t=document.createElement("style");return e.attrs.type="text/css",g(t,e.attrs),f(e,t),t}function g(e,t){Object.keys(t).forEach((function(n){e.setAttribute(n,t[n])}))}function b(e,t){var n,r,o,i;if(t.transform&&e.css){if(!(i=t.transform(e.css)))return function(){};e.css=i}if(t.singleton){var c=u++;n=a||(a=h(t)),r=y.bind(null,n,c,!1),o=y.bind(null,n,c,!0)}else e.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(n=function(e){var t=document.createElement("link");return e.attrs.type="text/css",e.attrs.rel="stylesheet",g(t,e.attrs),f(e,t),t}(t),r=function(e,t,n){var r=n.css,o=n.sourceMap,i=void 0===t.convertToAbsoluteUrls&&o;(t.convertToAbsoluteUrls||i)&&(r=l(r)),o&&(r+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(o))))+" */");var a=new Blob([r],{type:"text/css"}),u=e.href;e.href=URL.createObjectURL(a),u&&URL.revokeObjectURL(u)}.bind(null,n,t),o=function(){p(n),n.href&&URL.revokeObjectURL(n.href)}):(n=h(t),r=function(e,t){var n=t.css,r=t.media;if(r&&e.setAttribute("media",r),e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}.bind(null,n),o=function(){p(n)});return r(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;r(e=t)}else o()}}e.exports=function(e,t){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");(t=t||{}).attrs="object"==typeof t.attrs?t.attrs:{},t.singleton||"boolean"==typeof t.singleton||(t.singleton=o()),t.insertInto||(t.insertInto="head"),t.insertAt||(t.insertAt="bottom");var n=d(e,t);return s(n,t),function(e){for(var o=[],i=0;i59)}},function(e,t,n){var r=n(19);t.a=r.a},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n.d(t,"Utils",(function(){return u}));var r=n(1),o=n(2),i=n(4),a=n(20);n.d(t,"Types",(function(){return a.a})),n.d(t,"NumberMask",(function(){return r.a})),n.d(t,"DateMask",(function(){return o.c})),n.d(t,"StringMask",(function(){return i.a}));var u={Dates:{getDayOfYear:o.e,getWeekNumber:o.g,getWeekStartByLocale:o.h,IS_DATE_REGEX:o.a,IS_TIME_REGEX:o.b,fixShortISO:o.d,getTimezoneOrOffset:o.f}};t.default=a.a},function(e,t,n){function r(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:",",o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".",i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],u=n.length;if(0===u){if(a)return str;throw{name:"MaskError",message:"MaskError: Mask is empty"}}for(var c=0,l=0,s=!1,d=0;dc){if(a)return t.toString();throw{name:"MaskError",message:"MaskError: Number is too large for mask"}}if(m>l){p=e._round(p,l),g=(h=e._toCharArray(p)).length,b=0,m=0,s=!1;for(var v=0;vc){if(a)return t.toString();throw{name:"MaskError",message:"MaskError: Number is too large for mask"}}}var _=" ",w=" ",O=0,k=0,C=0;"*"==n.charAt(0)&&(_="*");var x=_,D=e._getSign(p)<0,E=g>0||n.indexOf("0")>=0,S=!1,j=!1;s=!1;for(var M=new Array(u),P=0;P0?M[k]=r:(M[k]=_,s||(C=P)),++k;break;case"-":j||" "!=w?M[k]=D?"-":_:(D&&(w="-"),M[k]=_,C=s?-1:P),++k;break;case"+":j||" "!=w?M[k]=D?"-":"+":(w=D?"-":"+",M[k]=_,C=s?-1:P),++k;break;case"$":j||" "!=w?M[k]="$":(w="$",M[k]=_,C=s?-1:P),++k;break;case"(":j||" "!=w?M[k]=D?"(":s?" ":_:(D&&(w="("),M[k]=_,C=s?-1:P),++k;break;case")":M[k]=D?")":s?" ":_,++k;break;case"C":P=u;)--C;M[C]==x&&(M[C]=w)}return M.join("")}},{key:"_shift",value:function(e,t,n){n&&(t=-t);var r=(""+e).split("e");return+(r[0]+"e"+(r[1]?+r[1]+t:t))}},{key:"_round",value:function(t,n){return e._shift(Math.round(e._shift(t,n,!1)),n,!0)}},{key:"_toCharArray",value:function(t){var n=e._getSign(t),r=[];if(0!==n){var o=n<0?"".concat(-1*t.toString()):t.toString();o.length>1&&"0"==o.charAt(0)&&(o=o.substring(1)),r=o.split("")}return r}},{key:"_getSign",value:function(e){return(e>0)-(e<0)||+e}}]),e}();t.a=o},function(e,t,n){n.d(t,"b",(function(){return a})),n.d(t,"a",(function(){return u})),n.d(t,"h",(function(){return c})),n.d(t,"e",(function(){return l})),n.d(t,"d",(function(){return s})),n.d(t,"f",(function(){return d})),n.d(t,"g",(function(){return f}));var r=n(8),o=n(15);function i(e,t){for(var n=0;n12?"PM":"AM",pp:e.hours24>12?"pm":"am",p:e.hours24>12?"pm":"am",Jz:1==String(e.dayOfYear).length?"0"+e.dayOfYear:e.dayOfYear,Js:e.dayOfYear,Jl:e.dayOfYear,Jd:e.dayOfYear,J:e.dayOfYear,Wz:1==String(e.dayOfWeek).length?"0"+e.dayOfWeek:e.dayOfWeek,Ws:e.dayOfWeek,Wl:e.dayOfWeek,Wp:String.fromCharCode(e.dayOfWeek),Wd:e.dayOfWeek,W:e.dayOfWeek,wz:1==String(e.weekNumber).length?"0"+e.weekNumber:e.weekNumber,ws:e.weekNumber,wl:e.weekNumber,wp:String.fromCharCode(e.weekNumber),wd:e.weekNumber,w:e.weekNumber}}}]),e}();t.c=p},function(e,t,n){t.a=function(e,t,n){var a=Object(i.a)(e,n),u=new Date(a.getUTCFullYear(),a.getUTCMonth(),a.getUTCDate(),a.getUTCHours(),a.getUTCMinutes(),a.getUTCSeconds(),a.getUTCMilliseconds()),c=Object(r.a)(t,a);return c?Object(o.a)(u,c):u};var r=n(3),o=n(10),i=n(13)},function(e,t,n){t.a=function(e,t){var n=function(e){if(!o[e]){var t=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:"America/New_York",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(new Date("2014-06-25T04:00:00.123Z")),n="06/25/2014, 00:00:00"===t||"‎06‎/‎25‎/‎2014‎ ‎00‎:‎00‎:‎00"===t;o[e]=n?new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:e,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):new Intl.DateTimeFormat("en-US",{hourCycle:"h23",timeZone:e,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})}return o[e]}(t);return n.formatToParts?function(e,t){for(var n=e.formatToParts(t),o=[],i=0;i=0&&(o[a]=parseInt(n[i].value,10))}return o}(n,e):function(e,t){var n=e.format(t).replace(/\u200E/g,""),r=/(\d+)\/(\d+)\/(\d+),? (\d+):(\d+):(\d+)/.exec(n);return[r[3],r[1],r[2],r[4],r[5],r[6]]}(n,e)};var r={year:0,month:1,day:2,hour:3,minute:4,second:5},o={}},function(e,t,n){t.a=function(e,t){if(arguments.length<2)throw new TypeError("2 arguments required, but only "+arguments.length+" present");var n=Object(r.a)(t);return Object(o.a)(e,-n)};var r=n(0),o=n(11)},function(e,t,n){t.a=function(e,t){if(arguments.length<2)throw new TypeError("2 arguments required, but only "+arguments.length+" present");var n=Object(o.a)(e).getTime(),i=Object(r.a)(t);return new Date(n+i)};var r=n(0),o=n(12)},function(e,t,n){t.a=function(e){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");var t=Object.prototype.toString.call(e);return e instanceof Date||"object"===a(e)&&"[object Date]"===t?new Date(e.getTime()):"number"==typeof e||"[object Number]"===t?new Date(e):("string"!=typeof e&&"[object String]"!==t||"undefined"==typeof console||(console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule"),console.warn((new Error).stack)),new Date(NaN))}},function(e,t,n){t.a=function(e,t){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");if(null===e)return new Date(NaN);var n=t||{},f=null==n.additionalDigits?l:Object(r.a)(n.additionalDigits);if(2!==f&&1!==f&&0!==f)throw new RangeError("additionalDigits must be 0, 1 or 2");if(e instanceof Date||"object"===a(e)&&"[object Date]"===Object.prototype.toString.call(e))return new Date(e.getTime());if("number"==typeof e||"[object Number]"===Object.prototype.toString.call(e))return new Date(e);if("string"!=typeof e&&"[object String]"!==Object.prototype.toString.call(e))return new Date(NaN);var p=function(e){var t,n={},r=e.split(s.dateTimeDelimeter);if(s.plainTime.test(r[0])?(n.date=null,t=r[0]):(n.date=r[0],t=r[1],n.timezone=r[2],s.timeZoneDelimeter.test(n.date)&&(n.date=e.split(s.timeZoneDelimeter)[0],t=e.substr(n.date.length,e.length))),t){var o=s.timezone.exec(t);o?(n.time=t.replace(o[1],""),n.timezone=o[1]):n.time=t}return n}(e),y=function(e,t){var n,r=s.YYY[t],o=s.YYYYY[t];if(n=s.YYYY.exec(e)||o.exec(e)){var i=n[1];return{year:parseInt(i,10),restDateString:e.slice(i.length)}}if(n=s.YY.exec(e)||r.exec(e)){var a=n[1];return{year:100*parseInt(a,10),restDateString:e.slice(a.length)}}return{year:null}}(p.date,f),v=y.year,_=function(e,t){if(null===t)return null;var n,r,o,i;if(0===e.length)return(r=new Date(0)).setUTCFullYear(t),r;if(n=s.MM.exec(e))return r=new Date(0),g(t,o=parseInt(n[1],10)-1)?(r.setUTCFullYear(t,o),r):new Date(NaN);if(n=s.DDD.exec(e)){r=new Date(0);var a=parseInt(n[1],10);return function(e,t){if(t<1)return!1;var n=h(e);return!(n&&t>366||!n&&t>365)}(t,a)?(r.setUTCFullYear(t,0,a),r):new Date(NaN)}if(n=s.MMDD.exec(e)){r=new Date(0),o=parseInt(n[1],10)-1;var u=parseInt(n[2],10);return g(t,o,u)?(r.setUTCFullYear(t,o,u),r):new Date(NaN)}if(n=s.Www.exec(e))return b(0,i=parseInt(n[1],10)-1)?d(t,i):new Date(NaN);if(n=s.WwwD.exec(e)){i=parseInt(n[1],10)-1;var c=parseInt(n[2],10)-1;return b(0,i,c)?d(t,i,c):new Date(NaN)}return null}(y.restDateString,v);if(isNaN(_))return new Date(NaN);if(_){var w,O=_.getTime(),k=0;if(p.time&&(k=function(e){var t,n,r;if(t=s.HH.exec(e))return m(n=parseFloat(t[1].replace(",",".")))?n%24*u:NaN;if(t=s.HHMM.exec(e))return m(n=parseInt(t[1],10),r=parseFloat(t[2].replace(",",".")))?n%24*u+r*c:NaN;if(t=s.HHMMSS.exec(e)){n=parseInt(t[1],10),r=parseInt(t[2],10);var o=parseFloat(t[3].replace(",","."));return m(n,r,o)?n%24*u+r*c+1e3*o:NaN}return null}(p.time),isNaN(k)))return new Date(NaN);if(p.timezone||n.timeZone){if(w=Object(i.a)(p.timezone||n.timeZone,new Date(O+k)),isNaN(w))return new Date(NaN)}else w=Object(o.a)(new Date(O+k)),w=Object(o.a)(new Date(O+k+w));return new Date(O+k+w)}return new Date(NaN)};var r=n(0),o=n(14),i=n(3),u=36e5,c=6e4,l=2,s={dateTimeDelimeter:/[T ]/,plainTime:/:/,timeZoneDelimeter:/[Z ]/i,YY:/^(\d{2})$/,YYY:[/^([+-]\d{2})$/,/^([+-]\d{3})$/,/^([+-]\d{4})$/],YYYY:/^(\d{4})/,YYYYY:[/^([+-]\d{4})/,/^([+-]\d{5})/,/^([+-]\d{6})/],MM:/^-(\d{2})$/,DDD:/^-?(\d{3})$/,MMDD:/^-?(\d{2})-?(\d{2})$/,Www:/^-?W(\d{2})$/,WwwD:/^-?W(\d{2})-?(\d{1})$/,HH:/^(\d{2}([.,]\d*)?)$/,HHMM:/^(\d{2}):?(\d{2}([.,]\d*)?)$/,HHMMSS:/^(\d{2}):?(\d{2}):?(\d{2}([.,]\d*)?)$/,timezone:/([Z+-].*| UTC|(?:[a-zA-Z]+\/[a-zA-Z_]+(?:\/[a-zA-Z_]+)?))$/};function d(e,t,n){t=t||0,n=n||0;var r=new Date(0);r.setUTCFullYear(e,0,4);var o=7*t+n+1-(r.getUTCDay()||7);return r.setUTCDate(r.getUTCDate()+o),r}var f=[31,28,31,30,31,30,31,31,30,31,30,31],p=[31,29,31,30,31,30,31,31,30,31,30,31];function h(e){return e%400==0||e%4==0&&e%100!=0}function g(e,t,n){if(t<0||t>11)return!1;if(null!=n){if(n<1)return!1;var r=h(e);if(r&&n>p[t])return!1;if(!r&&n>f[t])return!1}return!0}function b(e,t,n){return!(t<0||t>52||null!=n&&(n<0||n>6))}function m(e,t,n){return!(null!=e&&(e<0||e>=25)||null!=t&&(t<0||t>=60)||null!=n&&(n<0||n>=60))}},function(e,t,n){t.a=function(e){var t=new Date(e.getTime()),n=Math.ceil(t.getTimezoneOffset());t.setSeconds(0,0);var o=t.getTime()%r;return n*r+o};var r=6e4},function(e,t,n){n.d(t,"a",(function(){return a}));var r=n(16),o=n(17),i=n(18);function a(e){return Object(r.a)(e,o.a,i.a)}},function(e,t,n){function r(e,t){var n=t["string"==typeof e?e.toUpperCase():e];return"number"==typeof n?n:1}function o(e,t,n){if(e){var o,i=e.toLowerCase().split(/[-_]/),a=i[0];if(i[1]&&4===i[1].length?(a+="_"+i[1],o=i[2]):o=i[1],o||(o=t[a]),o)return r(o.match(/^\d+$/)?Number(o):o,n)}return 1}n.d(t,"b",(function(){return r})),n.d(t,"a",(function(){return o}))},function(e,t,n){t.a={en:"US",zh:"CN",zh_hans:"CN",hans:"CN",wuu:"CN",hsn:"CN",hak:"CN",nan:"CN",gan:"CN",hi:"IN",te:"IN",mr:"IN",ta:"IN",gu:"IN",kn:"IN",or:"IN",ml:"IN",pa_guru:"IN",bho:"IN",awa:"IN",as:"IN",mwr:"IN",mai:"IN",mag:"IN",bgc:"IN",hne:"IN",dcc:"IN",dz:"BT",tn:"BW",am:"ET",om:"ET",quc:"GT",id:"ID",jv:"ID",su:"ID",mad:"ID",ms_arab:"ID",ga:"IE",he:"IL",jam:"JM",ja:"JP",km:"KH",ko:"KR",lo:"LA",mh:"MH",my:"MM",mt:"MT",ne:"NP",fil:"PH",ceb:"PH",ilo:"PH",ur:"PK",pa:"PK",pa_arab:"PK",arab:"PK",lah:"PK",ps:"PK",sd:"PK",sd_arab:"PK",skr:"PK",gn:"PY",th:"TH",tts:"TH",aeb:"TN",zh_hant:"TW",hant:"TW",sm:"WS",zu:"ZA",sn:"ZW",arq:"DZ",ar:"EG",arz:"EG",fa:"IR",az_arab:"IR",ary:"MA",bn:"BD",rkt:"BD",dv:"MV"}},function(e,t,n){t.a={AG:0,ATG:0,28:0,AR:0,ARG:0,32:0,AS:0,ASM:0,16:0,AU:0,AUS:0,36:0,BR:0,BRA:0,76:0,BS:0,BHS:0,44:0,BT:0,BTN:0,64:0,BW:0,BWA:0,72:0,BZ:0,BLZ:0,84:0,CA:0,CAN:0,124:0,CN:0,CHN:0,156:0,CO:0,COL:0,170:0,DM:0,DMA:0,212:0,DO:0,DOM:0,214:0,ET:0,ETH:0,231:0,GT:0,GTM:0,320:0,GU:0,GUM:0,316:0,HK:0,HKG:0,344:0,HN:0,HND:0,340:0,ID:0,IDN:0,360:0,IE:0,IRL:0,372:0,IL:0,ISR:0,376:0,IN:0,IND:0,356:0,JM:0,JAM:0,388:0,JP:0,JPN:0,392:0,KE:0,KEN:0,404:0,KH:0,KHM:0,116:0,KR:0,KOR:0,410:0,LA:0,LA0:0,418:0,MH:0,MHL:0,584:0,MM:0,MMR:0,104:0,MO:0,MAC:0,446:0,MT:0,MLT:0,470:0,MX:0,MEX:0,484:0,MZ:0,MOZ:0,508:0,NI:0,NIC:0,558:0,NP:0,NPL:0,524:0,NZ:0,NZL:0,554:0,PA:0,PAN:0,591:0,PE:0,PER:0,604:0,PH:0,PHL:0,608:0,PK:0,PAK:0,586:0,PR:0,PRI:0,630:0,PY:0,PRY:0,600:0,SA:0,SAU:0,682:0,SG:0,SGP:0,702:0,SV:0,SLV:0,222:0,TH:0,THA:0,764:0,TN:0,TUN:0,788:0,TT:0,TTO:0,780:0,TW:0,TWN:0,158:0,UM:0,UMI:0,581:0,US:0,USA:0,840:0,VE:0,VEN:0,862:0,VI:0,VIR:0,850:0,WS:0,WSM:0,882:0,YE:0,YEM:0,887:0,ZA:0,ZAF:0,710:0,ZW:0,ZWE:0,716:0,AE:6,ARE:6,784:6,AF:6,AFG:6,4:6,BH:6,BHR:6,48:6,DJ:6,DJI:6,262:6,DZ:6,DZA:6,12:6,EG:6,EGY:6,818:6,IQ:6,IRQ:6,368:6,IR:6,IRN:6,364:6,JO:6,JOR:6,400:6,KW:6,KWT:6,414:6,LY:6,LBY:6,434:6,MA:6,MAR:6,504:6,OM:6,OMN:6,512:6,QA:6,QAT:6,634:6,SD:6,SDN:6,729:6,SY:6,SYR:6,760:6,BD:5,BGD:5,50:5,MV:5,MDV:5,462:5}},function(e,t,n){function r(e,t){for(var n=0;n2&&void 0!==arguments[2])||arguments[2];e=String(e);var r=(t=String(t)).length,l=e.length;if(l>r){if(n)return e;throw{name:"MaskIsTooShortError",message:"MaskIsTooShortError: Mask is shorter than the passed string"}}for(var s=new Array(r),d=0,f="",p=0;p?@[]^_`{|}~".indexOf(v)>-1?s[p]=v:c(n,s,p,e)}else s[p]=" ";++d;break;default:s[p]=f}if(d2&&void 0!==arguments[2]?arguments[2]:",",o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".",i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];return r.a.mask(e,t,n,o,i,a)}},{key:"date",value:function(e,t,n,r){return o.c.mask(e,t,n,r)}},{key:"string",value:function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return i.a.mask(e,t,n)}}]),e}();t.a=u}])},"object"===a(t)&&"object"===a(e)?e.exports=i():(r=[],void 0===(o="function"==typeof(n=i)?n.apply(t,r):n)||(e.exports=o))}).call(this,n(5)(e))},function(e,t,n){(function(t){t.Basis||(t.Basis={}),e.exports=t.Basis.InputMasking=n(44)}).call(this,n(2))},function(module,exports,__webpack_require__){"use strict";(function(module){var __WEBPACK_AMD_DEFINE_FACTORY__,__WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__,t;function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}"undefined"!=typeof self&&self,t=function(__WEBPACK_EXTERNAL_MODULE_0__,__WEBPACK_EXTERNAL_MODULE_7__){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e,t){e.exports=__WEBPACK_EXTERNAL_MODULE_0__},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),o=n(5);n.d(t,"TextInput",(function(){return r.a})),n.d(t,"NumberInput",(function(){return o.a}))},function(e,t,n){var r=n(3);t.a=r.a},function(e,t,n){var r=n(0),o=n.n(r),i=n(4);function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function u(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.options=function(e){for(var t=1;t-1;this._wrap(e,o)}else console.warn("BBjMasking: Invalid input element. The element will be ignored",e)}},{key:"destroy",value:function(){for(var e,t,n="string"==typeof this.options.elements?this.options.doc.querySelectorAll(this.options.elements):this.options.elements,r=0;r-1&&this._unwrap(e)}},{key:"_wrap",value:function(e,t){var n=e.getAttribute("id"),r=e.getAttribute("name"),o=e.dataset.mask||"",a=e.pattern,u=Object(i.b)(o),c=a||u,l=null,s=null;return t?s=(l=e.parentNode).querySelector(".textInputMask__unmaskedInput"):(l=this.options.doc.createElement("span"),s=this.options.doc.createElement("input")),e.value=Object(i.c)(e.value,o),e.pattern=c,e.classList.add("textInputMask__textInput"),e.dataset.mask=o,e.dataset.valueUnmasked=Object(i.d)(e.value,o),a&&a!==u&&(e.dataset.isCustomPattern=!0),t||(e.hasAttribute("readonly")||e.hasAttribute("disable")||(e.addEventListener("keyup",this._onKeystroke),e.addEventListener("keypress",this._onKeystroke),e.addEventListener("paste",this._onKeystroke),e.addEventListener("focusin",this._onFocus),e.addEventListener("click",this._onFocus)),e.parentNode.insertBefore(l,e)),this._validateInput(e)&&this.__fireOnUpdate(e.value,e.dataset.valueUnmasked,e),s.setAttribute("aria-hidden","true"),s.setAttribute("type","hidden"),s.classList.add("textInputMask__unmaskedInput"),s.value=e.dataset.valueUnmasked,n&&s.setAttribute("id","".concat(n,"-unmasked")),r&&s.setAttribute("name","".concat(r,"-unmasked")),t||(l.setAttribute("class","textInputMask__wrap"),l.appendChild(s),l.appendChild(e)),l}},{key:"_unwrap",value:function(e){e.removeChild(e.querySelector(".textInputMask__unmaskedInput"));var t=e.querySelector(".textInputMask__textInput");t.removeEventListener("keyup",this._onKeystroke),t.removeEventListener("keypress",this._onKeystroke),t.removeEventListener("paste",this._onKeystroke),t.removeEventListener("focusin",this._onFocus),t.removeEventListener("click",this._onFocus),delete t.dataset.valueUnmasked,t.dataset.isCustomPattern||(t.removeAttribute("pattern"),delete t.dataset.isCustomPattern),t.classList.remove(this.options.cssClassError),e.parentNode.insertBefore(t,e),e.parentNode.removeChild(e)}},{key:"_onKeystroke",value:function(e){if(!(e.ctrlKey||e.shiftKey||e.altKey||e.metaKey)){13!==e.keyCode&&e.preventDefault();var t=e.target,n=t.dataset.mask||this.options.mask,r=e.type;t.classList.remove(this.options.cssClassError),t.classList.remove(this.options.cssClassSuccess),t.setCustomValidity("");var a,u,c=t.value,l=e.keyCode,s=e.key||e.code.replace(/[^0-9]/g,""),d=s?s.length>1?"":s:"",f=Object(i.a)(c,n),p=!1;switch(r){case"paste":a=Object(i.c)((e.clipboardData||window.clipboardData).getData("Text"),n);break;case"keyup":a=c;break;case"keypress":var h=t.selectionStart;h!==f&&(f=h),a=c.substr(0,f)+d+c.substr(f)}if(u=Object(i.d)(a,n),-1===[35,36,37,38,39,40].indexOf(l)){try{t.value=o.a.mask(u,n,!1),this._validateInput(t)&&(t.dataset.valueUnmasked=u,this.options.doc.querySelector("#".concat(t.getAttribute("id"),"-unmasked")).value=u,this.__applyCssClassState(t,"success"),this.__fireOnUpdate(t.value,t.dataset.valueUnmasked,t)),p=!1}catch(e){this.__applyCssClassState(t,"error"),this.__fireOnInvalid(e,t),p=!0}this._updateCaretPosition(t,n)}p||this._validateInput(t)}}},{key:"_onFocus",value:function(e){var t=e.target,n=t.dataset.mask||this.options.mask;this._updateCaretPosition(t,n)}},{key:"_updateCaretPosition",value:function(e,t){setTimeout((function(){var n=Object(i.a)(e.value,t);e.setSelectionRange(n,n)}),0)}},{key:"_validateInput",value:function(e){var t=e.checkValidity();return t?(this.__applyCssClassState(e,"success"),e.setCustomValidity("")):(this.__applyCssClassState(e,"error"),this.__fireOnInvalid(e.validationMessage,e)),t}},{key:"__fireOnUpdate",value:function(e,t,n){this.options.onUpdate&&this.options.onUpdate(e,t,n)}},{key:"__fireOnInvalid",value:function(e,t){this.options.onInvalid&&this.options.onInvalid(e,t)}},{key:"__applyCssClassState",value:function(e,t){e.hasAttribute("readonly")||e.hasAttribute("disabled")?(e.classList.remove(this.options.cssClassError),e.classList.remove(this.options.cssClassSuccess)):("success"===t&&(e.classList.remove(this.options.cssClassError),e.classList.add(this.options.cssClassSuccess)),"error"===t&&(e.classList.add(this.options.cssClassError),e.classList.remove(this.options.cssClassSuccess)))}}]),e}();t.a=l},function(module,__webpack_exports__,__webpack_require__){__webpack_require__.d(__webpack_exports__,"c",(function(){return maskIfNotMasked})),__webpack_require__.d(__webpack_exports__,"d",(function(){return unmask})),__webpack_require__.d(__webpack_exports__,"a",(function(){return findCaretPosition})),__webpack_require__.d(__webpack_exports__,"b",(function(){return generatePatternFromMask}));var __WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask__=__webpack_require__(0),__WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask___default=__webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask__),SUPPORTED_MASKS=["X","a","A","0","z","Z","U"],IS_UNICODE_PROPERTY_SUPPORTED=!1;try{eval("/\\p{L}/u"),IS_UNICODE_PROPERTY_SUPPORTED=!0}catch(e){IS_UNICODE_PROPERTY_SUPPORTED=!1}var isMaskedValue=function e(t,n){void 0===e.__CACHE__&&(e.__CACHE__={});var r="".concat(t,"-").concat(n);if(!e.__CACHE__[r]){var o=unmask(t,n);e.__CACHE__[r]=t===__WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask___default.a.mask(o,n)}return e.__CACHE__[r]},maskIfNotMasked=function e(t,n){void 0===e.__CACHE__&&(e.__CACHE__={});var r="".concat(t,"-").concat(n);if(!e.__CACHE__[r])if(isMaskedValue(t,n))e.__CACHE__[r]=t;else try{e.__CACHE__[r]=__WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask___default.a.mask(t,n,!1)}catch(t){e.__CACHE__[r]=__WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask___default.a.mask("",n)}return e.__CACHE__[r]},generatePatternFromMask=function e(t){void 0===e.__CACHE__&&(e.__CACHE__={});var n=t;if(!e.__CACHE__[n]){var r="";t.split("").forEach((function(e){switch(e){case"X":r+="([^ -~])";break;case"a":case"A":r+=IS_UNICODE_PROPERTY_SUPPORTED?"\\p{L}":"((?:[A-Za-zªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙՠ-ֈא-תׯ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࡠ-ࡪࢠ-ࢴࢶ-ࢽऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱৼਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄຆ-ຊຌ-ຣລວ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛱ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡸᢀ-ᢄᢇ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-ᲈᲐ-ᲺᲽ-Ჿᳩ-ᳬᳮ-ᳳᳵᳶᳺᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎↃↄⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々〆〱-〵〻〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿯ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛥꜗ-ꜟꜢ-ꞈꞋ-ꞿꟂ-Ᶎꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꣾꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭧꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf2d-\udf40\udf42-\udf49\udf50-\udf75\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf]|\ud801[\udc00-\udc9d\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00\ude10-\ude13\ude15-\ude17\ude19-\ude35\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2\udd00-\udd23\udf00-\udf1c\udf27\udf30-\udf45\udfe0-\udff6]|\ud804[\udc03-\udc37\udc83-\udcaf\udcd0-\udce8\udd03-\udd26\udd44\udd50-\udd72\udd76\udd83-\uddb2\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude2b\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udede\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3d\udf50\udf5d-\udf61]|\ud805[\udc00-\udc34\udc47-\udc4a\udc5f\udc80-\udcaf\udcc4\udcc5\udcc7\udd80-\uddae\uddd8-\udddb\ude00-\ude2f\ude44\ude80-\udeaa\udeb8\udf00-\udf1a]|\ud806[\udc00-\udc2b\udca0-\udcdf\udcff\udda0-\udda7\uddaa-\uddd0\udde1\udde3\ude00\ude0b-\ude32\ude3a\ude50\ude5c-\ude89\ude9d\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc2e\udc40\udc72-\udc8f\udd00-\udd06\udd08\udd09\udd0b-\udd30\udd46\udd60-\udd65\udd67\udd68\udd6a-\udd89\udd98\udee0-\udef2]|\ud808[\udc00-\udf99]|\ud809[\udc80-\udd43]|[\ud80c\ud81c-\ud820\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872\ud874-\ud879][\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf2f\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\ude40-\ude7f\udf00-\udf4a\udf50\udf93-\udf9f\udfe0\udfe1\udfe3]|\ud821[\udc00-\udff7]|\ud822[\udc00-\udef2]|\ud82c[\udc00-\udd1e\udd50-\udd52\udd64-\udd67\udd70-\udefb]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud838[\udd00-\udd2c\udd37-\udd3d\udd4e\udec0-\udeeb]|\ud83a[\udc00-\udcc4\udd00-\udd43\udd4b]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1\udeb0-\udfff]|\ud87a[\udc00-\udfe0]|\ud87e[\udc00-\ude1d]))";break;case"0":r+="([0-9])";break;case"z":case"Z":r+=IS_UNICODE_PROPERTY_SUPPORTED?"([0-9]|\\p{L})":"([0-9]|(?:[A-Za-zªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙՠ-ֈא-תׯ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࡠ-ࡪࢠ-ࢴࢶ-ࢽऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱৼਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄຆ-ຊຌ-ຣລວ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛱ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡸᢀ-ᢄᢇ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-ᲈᲐ-ᲺᲽ-Ჿᳩ-ᳬᳮ-ᳳᳵᳶᳺᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎↃↄⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々〆〱-〵〻〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿯ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛥꜗ-ꜟꜢ-ꞈꞋ-ꞿꟂ-Ᶎꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꣾꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭧꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf2d-\udf40\udf42-\udf49\udf50-\udf75\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf]|\ud801[\udc00-\udc9d\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00\ude10-\ude13\ude15-\ude17\ude19-\ude35\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2\udd00-\udd23\udf00-\udf1c\udf27\udf30-\udf45\udfe0-\udff6]|\ud804[\udc03-\udc37\udc83-\udcaf\udcd0-\udce8\udd03-\udd26\udd44\udd50-\udd72\udd76\udd83-\uddb2\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude2b\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udede\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3d\udf50\udf5d-\udf61]|\ud805[\udc00-\udc34\udc47-\udc4a\udc5f\udc80-\udcaf\udcc4\udcc5\udcc7\udd80-\uddae\uddd8-\udddb\ude00-\ude2f\ude44\ude80-\udeaa\udeb8\udf00-\udf1a]|\ud806[\udc00-\udc2b\udca0-\udcdf\udcff\udda0-\udda7\uddaa-\uddd0\udde1\udde3\ude00\ude0b-\ude32\ude3a\ude50\ude5c-\ude89\ude9d\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc2e\udc40\udc72-\udc8f\udd00-\udd06\udd08\udd09\udd0b-\udd30\udd46\udd60-\udd65\udd67\udd68\udd6a-\udd89\udd98\udee0-\udef2]|\ud808[\udc00-\udf99]|\ud809[\udc80-\udd43]|[\ud80c\ud81c-\ud820\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872\ud874-\ud879][\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf2f\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\ude40-\ude7f\udf00-\udf4a\udf50\udf93-\udf9f\udfe0\udfe1\udfe3]|\ud821[\udc00-\udff7]|\ud822[\udc00-\udef2]|\ud82c[\udc00-\udd1e\udd50-\udd52\udd64-\udd67\udd70-\udefb]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud838[\udd00-\udd2c\udd37-\udd3d\udd4e\udec0-\udeeb]|\ud83a[\udc00-\udcc4\udd00-\udd43\udd4b]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1\udeb0-\udfff]|\ud87a[\udc00-\udfe0]|\ud87e[\udc00-\ude1d]))";break;case"U":r+=IS_UNICODE_PROPERTY_SUPPORTED?"(([0-9])|(\\s)|([.,/#!$%^&*;:{}=-_`~()])|(\\p{L}))":"(([0-9])|(\\s)|([.,/#!$%^&*;:{}=-_`~()])|(?:[A-Za-zªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙՠ-ֈא-תׯ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࡠ-ࡪࢠ-ࢴࢶ-ࢽऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱৼਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄຆ-ຊຌ-ຣລວ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛱ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡸᢀ-ᢄᢇ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-ᲈᲐ-ᲺᲽ-Ჿᳩ-ᳬᳮ-ᳳᳵᳶᳺᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎↃↄⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々〆〱-〵〻〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿯ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛥꜗ-ꜟꜢ-ꞈꞋ-ꞿꟂ-Ᶎꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꣾꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭧꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf2d-\udf40\udf42-\udf49\udf50-\udf75\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf]|\ud801[\udc00-\udc9d\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00\ude10-\ude13\ude15-\ude17\ude19-\ude35\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2\udd00-\udd23\udf00-\udf1c\udf27\udf30-\udf45\udfe0-\udff6]|\ud804[\udc03-\udc37\udc83-\udcaf\udcd0-\udce8\udd03-\udd26\udd44\udd50-\udd72\udd76\udd83-\uddb2\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude2b\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udede\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3d\udf50\udf5d-\udf61]|\ud805[\udc00-\udc34\udc47-\udc4a\udc5f\udc80-\udcaf\udcc4\udcc5\udcc7\udd80-\uddae\uddd8-\udddb\ude00-\ude2f\ude44\ude80-\udeaa\udeb8\udf00-\udf1a]|\ud806[\udc00-\udc2b\udca0-\udcdf\udcff\udda0-\udda7\uddaa-\uddd0\udde1\udde3\ude00\ude0b-\ude32\ude3a\ude50\ude5c-\ude89\ude9d\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc2e\udc40\udc72-\udc8f\udd00-\udd06\udd08\udd09\udd0b-\udd30\udd46\udd60-\udd65\udd67\udd68\udd6a-\udd89\udd98\udee0-\udef2]|\ud808[\udc00-\udf99]|\ud809[\udc80-\udd43]|[\ud80c\ud81c-\ud820\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872\ud874-\ud879][\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf2f\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\ude40-\ude7f\udf00-\udf4a\udf50\udf93-\udf9f\udfe0\udfe1\udfe3]|\ud821[\udc00-\udff7]|\ud822[\udc00-\udef2]|\ud82c[\udc00-\udd1e\udd50-\udd52\udd64-\udd67\udd70-\udefb]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud838[\udd00-\udd2c\udd37-\udd3d\udd4e\udec0-\udeeb]|\ud83a[\udc00-\udcc4\udd00-\udd43\udd4b]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1\udeb0-\udfff]|\ud87a[\udc00-\udfe0]|\ud87e[\udc00-\ude1d]))";break;default:r+=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}})),e.__CACHE__[n]=r}return e.__CACHE__[n]},unmask=function e(t,n){void 0===e.__CACHE__&&(e.__CACHE__={});var r="".concat(t,"-").concat(n);if(!e.__CACHE__[r]){for(var o=n.split(""),i=t.split(""),a="",u=0;u-1){if(!new RegExp(generatePatternFromMask(l),IS_UNICODE_PROPERTY_SUPPORTED?"u":"").test(c))break;a+=c}}e.__CACHE__[r]=a.toLocaleLowerCase()}return e.__CACHE__[r]},findCaretPosition=function e(t,n){void 0===e.__CACHE__&&(e.__CACHE__={});var r="".concat(t,"-").concat(n);if(!e.__CACHE__[r]){var o=n.split(""),i=t.split("");i.length-1&&!new RegExp(generatePatternFromMask(c),IS_UNICODE_PROPERTY_SUPPORTED?"u":"").test(i[u])){a=u;break}}e.__CACHE__[r]=a<0?i.length:a}return e.__CACHE__[r]}},function(e,t,n){var r=n(6);t.a=r.a},function(e,t,n){var r=n(7),o=n.n(r);function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function u(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.options=function(e){for(var t=1;t-1;this._wrap(e,o)}else console.warn("BBjMasking: Invalid input element. The element will be ignored",e)}},{key:"destroy",value:function(){for(var e,t,n="string"==typeof this.options.elements?this.options.doc.querySelectorAll(this.options.elements):this.options.elements,r=0;r-1&&this._unwrap(e)}},{key:"_wrap",value:function(e,t){var n=e.getAttribute("id"),r=e.getAttribute("name"),i=e.dataset.step||null,a=e.dataset.max||null,u=e.dataset.min||null,l=e.dataset.groupingSeparator||",",s=e.dataset.decimalSeparator||".",d=e.dataset.forceTrailingZeros||null,f=e.dataset.mask||"",p=e.getAttribute("class"),h=e.getAttribute("required")||null,g=null,b=null;if(t?b=(g=e.parentNode).querySelector(".numberInputMask__unmaskedInput"):(g=this.options.doc.createElement("span"),b=this.options.doc.createElement("input")),t||(e.parentNode.insertBefore(g,e),e.hasAttribute("readonly")||e.hasAttribute("disabled")||(e.addEventListener("click",this._actualInputHandler),e.addEventListener("focusin",this._actualInputHandler))),e.dataset.valueUnmasked=e.value||0,e.dataset.groupingSeparator=l,e.dataset.decimalSeparator=s,e.dataset.forceTrailingZeros=d,e.value=o.a.mask(e.dataset.valueUnmasked,f,l,s,d).trim(),e.classList.add("numberInputMask__textInput",this.options.cssClassSuccess),b.value=e.dataset.valueUnmasked,b.setAttribute("aria-hidden","true"),b.setAttribute("type","hidden"),b.setAttribute("class",p),n&&b.setAttribute("id","".concat(n,"-unmasked")),r&&b.setAttribute("name","".concat(r,"-unmasked")),h&&b.setAttribute("required","required"),i)b.setAttribute("step",i);else{var m=c(b.value),y="1";m>0&&(y=".".concat(Array(m).join("0"),"1")),b.setAttribute("step",y)}return u&&b.setAttribute("min",u),a&&b.setAttribute("max",a),b.dataset.inputId=n,b.dataset.mask=f,b.dataset.groupingSeparator=l,b.dataset.decimalSeparator=s,d&&(b.dataset.forceTrailingZeros=d),t||(b.classList.add("numberInputMask__unmaskedInput"),b.addEventListener("keydown",this._unmaskedInputHandler),b.addEventListener("keyup",this._unmaskedInputHandler),b.addEventListener("focusout",this._unmaskedInputHandler),g.setAttribute("class","numberInputMask__wrap"),g.appendChild(b),g.appendChild(e)),isNaN(Number(e.dataset.valueUnmasked))?e.classList.add(this.options.cssClassError):this._validateInput(b,e)&&this.__fireOnUpdate(e.value,e.dataset.valueUnmasked,e),g}},{key:"_unwrap",value:function(e){var t=e.querySelector(".numberInputMask__textInput"),n=t.id,r=e.querySelector("#".concat(n,"-unmasked"));r.removeEventListener("keyup",this._unmaskedInputHandler),r.removeEventListener("keypress",this._unmaskedInputHandler),r.removeEventListener("focusout",this._unmaskedInputHandler),e.removeChild(r),t.removeEventListener("click",this._actualInputHandler),t.removeEventListener("focusin",this._actualInputHandler),t.classList.remove("numberInputMask__textInput"),t.classList.remove(this.options.cssClassError),t.classList.remove(this.options.cssClassSuccess),delete t.dataset.valueUnmasked,e.parentNode.insertBefore(t,e),e.parentNode.removeChild(e)}},{key:"_actualInputHandler",value:function(e){var t=e.target,n=t.id,r=this.options.doc.querySelector("#".concat(n,"-unmasked"));t.setAttribute("aria-hidden","true"),t.setAttribute("type","hidden"),r.removeAttribute("aria-hidden"),r.setAttribute("type","number"),this._validateInput(r,t),setTimeout((function(){r.focus();var e=String(r.value).length;r.type="text",r.setSelectionRange(e,e),r.type="number"}),0)}},{key:"_unmaskedInputHandler",value:function(e){var t,n=e.target,r=e.keyCode,i=n.dataset.mask,a=n.dataset.groupingSeparator,u=n.dataset.decimalSeparator,c=n.dataset.forceTrailingZeros,l=n.dataset.inputId,s=this.options.doc.querySelector("#".concat(l)),d=!1,f=this._validateInput(n,s);try{d=o.a.mask(n.value||0,i,a,u,c,!1).trim()}catch(e){d=!1,this.__applyCssClassState(n,s,"error"),this.__fireOnInvalid(e,s)}t=d&&f,([13,27].indexOf(r)>-1||"focusout"===e.type)&&(n.classList.remove(this.options.cssClassError),n.classList.remove(this.options.cssClassSuccess),n.setAttribute("aria-hidden","true"),n.setAttribute("type","hidden"),s.removeAttribute("aria-hidden"),s.setAttribute("type","text"),s.classList.add(this.options.cssClassSuccess),t?(s.value=d,s.dataset.valueUnmasked=n.value,this.__fireOnUpdate(d,n.value,s)):(n.value=s.dataset.valueUnmasked,this.__applyCssClassState(n,s,"success")))}},{key:"_validateInput",value:function(e,t){var n=!0,r=Number(e.value);if("hidden"!==e.getAttribute("type")||isNaN(r))n=e.checkValidity();else{var o=e.getAttribute("max"),i=e.getAttribute("min"),a=e.getAttribute("step");i&&(n=n&&r>=Number(i)),o&&(n=n&&r<=Number(o)),a&&(n=n&&c(a)===c(e.value))}return n?this.__applyCssClassState(e,t,"success"):(this.__applyCssClassState(e,t,"error"),this.__fireOnInvalid(e.validationMessage||"Validity check fails",t)),n}},{key:"__fireOnUpdate",value:function(e,t,n){this.options.onUpdate&&this.options.onUpdate(e,t,n)}},{key:"__fireOnInvalid",value:function(e,t){this.options.onInvalid&&this.options.onInvalid(e,t)}},{key:"__applyCssClassState",value:function(e,t,n){t.hasAttribute("readonly")||t.hasAttribute("disabled")?(t.classList.remove(this.options.cssClassError),t.classList.remove(this.options.cssClassSuccess),e.classList.remove(this.options.cssClassError),e.classList.remove(this.options.cssClassSuccess)):("success"===n&&(t.classList.remove(this.options.cssClassError),t.classList.add(this.options.cssClassSuccess),e.classList.remove(this.options.cssClassError),e.classList.add(this.options.cssClassSuccess)),"error"===n&&(t.classList.add(this.options.cssClassError),t.classList.remove(this.options.cssClassSuccess),e.classList.add(this.options.cssClassError),e.classList.remove(this.options.cssClassSuccess)))}}]),e}();t.a=l},function(e,t){e.exports=__WEBPACK_EXTERNAL_MODULE_7__}])},"object"===_typeof(exports)&&"object"===_typeof(module)?module.exports=t(__webpack_require__(13),__webpack_require__(14)):(__WEBPACK_AMD_DEFINE_ARRAY__=[__webpack_require__(13),__webpack_require__(14)],void 0===(__WEBPACK_AMD_DEFINE_RESULT__="function"==typeof(__WEBPACK_AMD_DEFINE_FACTORY__=t)?__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports,__WEBPACK_AMD_DEFINE_ARRAY__):__WEBPACK_AMD_DEFINE_FACTORY__)||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__))}).call(this,__webpack_require__(5)(module))},function(e,t,n){"use strict";function r(e,t){for(var n=0;n2&&void 0!==arguments[2])||arguments[2];e=String(e);var r=(t=String(t)).length,l=e.length;if(l>r){if(n)return e;throw{name:"MaskIsTooShortError",message:"MaskIsTooShortError: Mask is shorter than the passed string"}}for(var s=new Array(r),d=0,f="",p=0;p?@[]^_`{|}~".indexOf(v)>-1?s[p]=v:c(n,s,p,e)}else s[p]=" ";++d;break;default:s[p]=f}if(d2&&void 0!==arguments[2]?arguments[2]:",",o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".",i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],u=n.length;if(0===u){if(a)return str;throw{name:"MaskError",message:"MaskError: Mask is empty"}}for(var c=0,l=0,s=!1,d=0;dc){if(a)return t.toString();throw{name:"MaskError",message:"MaskError: Number is too large for mask"}}if(m>l){p=e._round(p,l),g=(h=e._toCharArray(p)).length,b=0,m=0,s=!1;for(var v=0;vc){if(a)return t.toString();throw{name:"MaskError",message:"MaskError: Number is too large for mask"}}}var _=" ",w=" ",O=0,k=0,C=0;"*"==n.charAt(0)&&(_="*");var x=_,D=e._getSign(p)<0,E=g>0||n.indexOf("0")>=0,S=!1,j=!1;s=!1;for(var M=new Array(u),P=0;P0?M[k]=r:(M[k]=_,s||(C=P)),++k;break;case"-":j||" "!=w?M[k]=D?"-":_:(D&&(w="-"),M[k]=_,C=s?-1:P),++k;break;case"+":j||" "!=w?M[k]=D?"-":"+":(w=D?"-":"+",M[k]=_,C=s?-1:P),++k;break;case"$":j||" "!=w?M[k]="$":(w="$",M[k]=_,C=s?-1:P),++k;break;case"(":j||" "!=w?M[k]=D?"(":s?" ":_:(D&&(w="("),M[k]=_,C=s?-1:P),++k;break;case")":M[k]=D?")":s?" ":_,++k;break;case"C":P=u;)--C;M[C]==x&&(M[C]=w)}return M.join("")}},{key:"_shift",value:function(e,t,n){n&&(t=-t);var r=(""+e).split("e");return+(r[0]+"e"+(r[1]?+r[1]+t:t))}},{key:"_round",value:function(t,n){return e._shift(Math.round(e._shift(t,n,!1)),n,!0)}},{key:"_toCharArray",value:function(t){var n=e._getSign(t),r=[];if(0!==n){var o=n<0?"".concat(-1*t.toString()):t.toString();o.length>1&&"0"==o.charAt(0)&&(o=o.substring(1)),r=o.split("")}return r}},{key:"_getSign",value:function(e){return(e>0)-(e<0)||+e}}]),e}();t.default=o},function(e,t,n){(function(t){e.exports=t.flatpickr=n(48)}).call(this,n(2))},function(e,t,n){"use strict";var r,o;function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)} /* flatpickr v4.6.3, @license MIT */ /* flatpickr v4.6.3, @license MIT */!function(a,u){"object"===i(t)&&void 0!==e?e.exports=u():void 0===(o="function"==typeof(r=u)?r.call(t,n,t,e):r)||(e.exports=o)}(0,(function(){ /*! ***************************************************************************** diff --git a/client/dist/report.html b/client/dist/report.html index f4fddbed..70f5f680 100644 --- a/client/dist/report.html +++ b/client/dist/report.html @@ -3,7 +3,7 @@ - bbj-grid-widget [28 May 2020 at 16:28] + bbj-grid-widget [2 Jun 2020 at 11:45] diff --git a/client/src/api/rows.js b/client/src/api/rows.js index c4e16e6a..a037976c 100644 --- a/client/src/api/rows.js +++ b/client/src/api/rows.js @@ -140,9 +140,9 @@ export function gw_updateRowData(id, transaction, batchUpdate) { } if (!batchUpdate) { - options.api.updateRowData(transaction) + options.api.applyTransaction(transaction) } else { - options.api.batchUpdateRowData(transaction) + options.api.applyTransactionAsync(transaction) } }