react-bootstrap-table-ng 4.18.0 → 4.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,3 @@
1
1
  /*! For license information please see react-bootstrap-table-ng.min.js.LICENSE.txt */
2
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react"),require("react-dom")):"function"==typeof define&&define.amd?define(["react","react-dom"],t):"object"==typeof exports?exports.ReactBootstrapTableNg=t(require("react"),require("react-dom")):e.ReactBootstrapTableNg=t(e.React,e.ReactDOM)}(self,(e,t)=>(()=>{var n={105(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(6942)),i=r(n(5442)),a=n(6310);class s extends i.default.Component{constructor(e){super(e),this.nodeRef=i.default.createRef()}render(){const{children:e,expanded:t=!1,onClosed:n,className:r="",...s}=this.props;return i.default.createElement("tr",null,i.default.createElement("td",{className:(0,o.default)("reset-expansion-style",r),...s},i.default.createElement(a.CSSTransition,{appear:!0,in:t,timeout:400,classNames:"row-expand-slide",onExited:n,nodeRef:this.nodeRef},i.default.createElement("div",{ref:this.nodeRef},i.default.createElement("div",{className:"row-expansion-style"},e)))))}}t.default=s},184(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(6942)),i=r(n(5442)),a=n(6561),s=n(3761);t.default=({order:e})=>{const t=(0,o.default)("react-bootstrap-table-sort-order",{dropup:e===a.SORT_ASC});return i.default.createElement(s.BootstrapContext.Consumer,null,({bootstrap4:n})=>n?i.default.createElement("span",{className:`caret-4-${e}`,"data-testid":"sort-caret"}):i.default.createElement("span",{className:t,"data-testid":"sort-caret"},i.default.createElement("span",{className:"caret"})))}},285(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442));t.default=({content:e=null,colSpan:t=1})=>o.default.createElement("tr",null,o.default.createElement("td",{"data-toggle":"collapse",colSpan:t,className:"react-bs-table-no-data"},e))},286(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=r(n(3955));t.default=e=>{const{index:t,column:n,currFilters:r,onExternalFilter:a=()=>{},onFilter:s=()=>{}}=e,{filter:l}=n;let u;const c={},d={};if(c.style=d,n.headerAlign&&(d.textAlign=i.default.isFunction(n.headerAlign)?n.headerAlign(n,t):n.headerAlign),n.filterRenderer){const e=a(n,l?.props.type||"");u=n.filterRenderer(e,n)}else l&&(u=o.default.createElement(l.Filter,{...l.props,filterState:r[n.dataField],onFilter:s,column:n}));return o.default.createElement("th",c,u)}},338(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return class extends e{shouldUpdateByCellEditing(e){return!(!this.props.clickToEdit&&!this.props.dbclickToEdit)&&(e.editingRowIdx===e.rowIndex||this.props.editingRowIdx===e.rowIndex&&null===e.editingRowIdx||this.props.editingRowIdx===e.rowIndex)}shouldUpdatedBySelfProps(e){return this.props.className!==e.className||!o.default.isEqual(this.props.style,e.style)||!o.default.isEqual(this.props.attrs,e.attrs)}shouldUpdateByColumnsForSimpleCheck(e){if(this.props.columns.length!==e.columns.length)return!0;for(let t=0;t<this.props.columns.length;t+=1)if(!o.default.isEqual(this.props.columns[t],e.columns[t]))return!0;return!1}shouldUpdatedByNormalProps(e){return this.props.rowIndex!==e.rowIndex||this.props.editable!==e.editable||!o.default.isEqual(this.props.row,e.row)||this.props.columns.length!==e.columns.length}shouldUpdateChild(e){return this.shouldUpdateByCellEditing(e)||this.shouldUpdatedByNormalProps(e)}shouldRowContentUpdate(e){return this.shouldUpdateChild(e)||this.shouldUpdateByColumnsForSimpleCheck(e)}}};const o=r(n(3955))},355(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getRowByRowId=t.matchRow=void 0;const o=r(n(3955));t.matchRow=(e,t)=>n=>o.default.get(n,e)===t;t.getRowByRowId=(e,n,r)=>e.find((0,t.matchRow)(n,r))},629(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=n(6561),c=s(n(885)),d=s(n(1439)),f=s(n(3955)),p=n(7351),h=s(n(3196)),m=s(n(338));class v extends((0,m.default)((0,p.RowEventDelegater)(l.Component))){constructor(e){super(e),this.clickNum=0,this.shouldUpdateRowContent=!1,this.createClickEventHandler=this.createClickEventHandler.bind(this)}shouldComponentUpdate(e){return this.props.selected!==e.selected||this.props.expanded!==e.expanded||this.props.expandable!==e.expandable||this.props.selectable!==e.selectable||this.props.selectRow.hideSelectColumn!==e.selectRow.hideSelectColumn||this.shouldUpdatedBySelfProps(e)?(this.shouldUpdateRowContent=this.shouldRowContentUpdate(e),!0):(this.shouldUpdateRowContent=this.shouldRowContentUpdate(e),this.shouldUpdateRowContent)}isRenderFunctionColumnInLeft(e=u.INDICATOR_POSITION_LEFT){return e===u.INDICATOR_POSITION_LEFT}render(){const{row:e,columns:t,keyField:n,rowIndex:r,style:o,className:i,attrs:a,selectRow:s,expandRow:u,expanded:p,expandable:m,selected:v,selectable:g,visibleColumnSize:E,tabIndexCell:_,...y}=this.props,b=f.default.get(e,n),{hideSelectColumn:x,selectColumnPosition:C,clickToSelect:O}=s,{showExpandColumn:w,expandColumnPosition:S}=u??{},R=this.delegate({...a});(O||u&&u.renderer)&&(R.onClick=this.createClickEventHandler(R.onClick));let P=r*E+1;const j=[l.default.createElement(h.default,{key:"row",row:e,columns:t,keyField:n,rowIndex:r,shouldUpdate:this.shouldUpdateRowContent,tabIndexStart:_?P:-1,...y})];if(!x){const e=l.default.createElement(d.default,{...s,key:"selection-cell",rowKey:b,rowIndex:r,selected:v,disabled:!g,tabIndex:_?P+=1:-1});this.isRenderFunctionColumnInLeft(C)?j.unshift(e):j.push(e)}if(w){const e=l.default.createElement(c.default,{...u,key:"expand-cell",rowKey:b,rowIndex:r,expanded:p,expandable:m,tabIndex:_?P+=1:-1});this.isRenderFunctionColumnInLeft(S)?j.unshift(e):j.push(e)}return l.default.createElement("tr",{style:o,className:i,...R},j)}}t.default=v},885(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t});Object.defineProperty(t,"__esModule",{value:!0});const s=a(n(5442));class l extends s.Component{constructor(){super(...arguments),this.handleClick=e=>{const{rowKey:t,expanded:n,onRowExpand:r,rowIndex:o}=this.props;e.stopPropagation(),r(t,!n,o,e)}}shouldComponentUpdate(e){return this.props.rowIndex!==e.rowIndex||this.props.expanded!==e.expanded||this.props.rowKey!==e.rowKey||this.props.tabIndex!==e.tabIndex}render(){const{expanded:e,expandable:t,expandColumnRenderer:n,tabIndex:r,rowKey:o}=this.props,i={};return void 0!==r&&-1!==r&&(i.tabIndex=r),s.default.createElement("td",{className:"expand-cell",onClick:this.handleClick,"data-testid":"expand-cell",...i},n?n({expandable:t,expanded:e,rowKey:o}):t?e?"(-)":"(+)":"")}}t.default=l},1031(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(6942)),i=r(n(5442)),a=n(6561),s=r(n(6032)),l=r(n(1632)),u=r(n(9435)),c=r(n(7701)),d=r(n(5191)),f=r(n(4652)),p=r(n(3955));class h extends((0,f.default)(i.default.Component)){constructor(e){super(e),this.getData=()=>this.visibleRows(),this.validateProps()}componentDidUpdate(e){e.onDataSizeChange&&!e.pagination&&e.data.length!==this.props.data.length&&e.onDataSizeChange({dataSize:this.props.data.length})}render(){const{loading:e,overlay:t}=this.props;if(t){const n=t(e);return i.default.createElement(n,null,this.renderTable())}return this.renderTable()}renderTable(){const{columns:e,keyField:t,tabIndexCell:n,id:r,classes:f,bootstrap4:h=!1,striped:m=!1,hover:v=!1,bordered:g=!0,condensed:E=!1,noDataIndication:_=null,caption:y,rowStyle:b,rowClasses:x,wrapperClasses:C,rowEvents:O,selectRow:w={mode:a.ROW_SELECT_DISABLED,selected:[],hideSelectColumn:!0},expandRow:S={renderer:void 0,expanded:[],nonExpandable:[]},cellEdit:R={mode:null,nonEditableRows:[]},filterPosition:P=a.FILTERS_POSITION_INLINE}=this.props,j=(0,o.default)("react-bootstrap-table",C),N=(0,o.default)("table",{"table-striped":m,"table-hover":v,"table-bordered":g,[h?"table-sm":"table-condensed"]:E},f),D=e.some(e=>e.filter||e.filterRenderer),T=p.default.filter(e,e=>p.default.has(e,"footer")).length>0,I=y&&i.default.createElement(l.default,{bootstrap4:h},y);return i.default.createElement("div",{className:j},i.default.createElement("table",{id:r,className:N},I,i.default.createElement(d.default,{columns:e,className:this.props.headerClasses,wrapperClasses:this.props.headerWrapperClasses,sortField:this.props.sortField,sortOrder:this.props.sortOrder,onSort:this.props.onSort,globalSortCaret:this.props.sort&&this.props.sort.sortCaret,onFilter:this.props.onFilter,currFilters:this.props.currFilters,onExternalFilter:this.props.onExternalFilter,selectRow:w,expandRow:S,filterPosition:P}),D&&P!==a.FILTERS_POSITION_INLINE&&i.default.createElement(u.default,{columns:e,className:this.props.filtersClasses,onSort:this.props.onSort,onFilter:this.props.onFilter,currFilters:this.props.currFilters,filterPosition:this.props.filterPosition,onExternalFilter:this.props.onExternalFilter,selectRow:w,expandRow:S}),i.default.createElement(s.default,{className:this.props.bodyClasses,data:this.getData(),keyField:t,tabIndexCell:n,columns:e,isEmpty:this.isEmpty(),visibleColumnSize:this.visibleColumnSize(),noDataIndication:_,cellEdit:R,selectRow:w,expandRow:S,rowStyle:b,rowClasses:x,rowEvents:O}),T&&i.default.createElement(c.default,{data:this.getData(),columns:e,selectRow:w,expandRow:S,className:this.props.footerClasses})))}}t.default=h},1400(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=n(6561);t.default=e=>{const{renderContent:t,selectRow:n,expandRow:r,cellEl:a,...s}=e,l=(e=i.INDICATOR_POSITION_LEFT)=>e===i.INDICATOR_POSITION_LEFT,u=t()||[];return n&&!0!==n.hideSelectColumn&&(l(n.selectColumnPosition)?u.unshift(o.default.createElement(a,{key:"selection"})):u.push(o.default.createElement(a,{key:"selection"}))),r&&r.showExpandColumn&&(l(r.expandColumnPosition)?u.unshift(o.default.createElement(a,{key:"expansion"})):u.push(o.default.createElement(a,{key:"expansion"}))),o.default.createElement("tr",{...s},u)}},1439(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=n(6561),c=s(n(3955)),d=n(3761);class f extends l.Component{constructor(e){super(e),this.handleClick=this.handleClick.bind(this)}shouldComponentUpdate(e){return this.props.rowIndex!==e.rowIndex||this.props.selected!==e.selected||this.props.disabled!==e.disabled||this.props.rowKey!==e.rowKey||this.props.tabIndex!==e.tabIndex||this.props.selectColumnStyle!==e.selectColumnStyle}handleClick(e){const{mode:t,rowKey:n,selected:r,onRowSelect:o,disabled:i,rowIndex:a=-1}=this.props;if(e.stopPropagation(),i)return;o(n,t===u.ROW_SELECT_SINGLE||!r,a,e)}render(){const{rowKey:e,mode:t,selected:n,disabled:r,tabIndex:o=-1,rowIndex:i,selectionRenderer:a,selectColumnStyle:s}=this.props,u={};return-1!==o&&(u.tabIndex=o),u.style=c.default.isFunction(s)?s({checked:n,disabled:r,rowindex:i,rowkey:e}):s,l.default.createElement(d.BootstrapContext.Consumer,null,({bootstrap4:o})=>l.default.createElement("td",{className:"selection-cell",onClick:this.handleClick,"data-testid":"selection-cell",...u},a?a({mode:t,checked:n,disabled:r??!1,rowindex:i,rowkey:e}):l.default.createElement("input",{type:t,checked:n,disabled:r??!1,className:o?"selection-input-4":"",onChange:()=>{}})))}}t.default=f},1590(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getExpandedRows=t.expandableKeys=t.isAnyExpands=void 0;const o=r(n(3955)),i=n(355);t.isAnyExpands=(e,t,n=[])=>{for(let r=0;r<e.length;r+=1){const i=o.default.get(e[r],t);if(void 0!==n.find(e=>e===i))return!0}return!1};t.expandableKeys=(e,t,n=[])=>0===n.length?e.map(e=>o.default.get(e,t)):e.filter(e=>!o.default.contains(n,o.default.get(e,t))).map(e=>o.default.get(e,t));t.getExpandedRows=(e,t,n)=>n.map(n=>(0,i.getRowByRowId)(e,t,n))},1630(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=s(n(6645)),c=s(n(3955)),d=l.default.createContext({expanded:[],isClosing:[],onClosed:()=>{},isAnyExpands:!1,onRowExpand:()=>{},onAllRowExpand:()=>{}});class f extends l.Component{constructor(){super(...arguments),this.state={expanded:this.props.expandRow.expanded||[],isClosing:this.props.expandRow.isClosing||[]},this.onClosed=e=>{this.setState({isClosing:this.state.isClosing.filter(t=>t!==e)})},this.handleRowExpand=(e,t,n,r)=>{const{data:o,keyField:i,expandRow:{onExpand:a,onlyOneExpanding:s,nonExpandable:l}}=this.props;if(l&&c.default.contains(l,e))return;let d=[...this.state.expanded],f=[...this.state.isClosing];if(t?s?(f=f.concat(d),d=[e]):d.push(e):(f.push(e),d=d.filter(t=>t!==e)),a){a(u.default.getRowByRowId(o,i,e),t,n,r)}this.setState(()=>({expanded:d,isClosing:f}))},this.handleAllRowExpand=(e,t)=>{const{data:n,keyField:r,expandRow:{onExpandAll:o,nonExpandable:i}}=this.props,{expanded:a}=this.state;let s;s=t?a.concat(u.default.expandableKeys(n,r,i)):a.filter(e=>void 0===n.find(t=>c.default.get(t,r)===e)),o&&o(t,u.default.getExpandedRows(n,r,s),e),this.setState(()=>({expanded:s}))}}static getDerivedStateFromProps(e,t){const{expandRow:n}=e;if(n){const{nonExpandable:e=[]}=n;let r=[...n.expanded||t.expanded];r=r.filter(t=>!c.default.contains(e,t));const o=t.expanded.reduce((e,t)=>(c.default.contains(r,t)||e.push(t),e),[]);return{expanded:r,isClosing:o}}return t}render(){const{data:e,keyField:t}=this.props;return l.default.createElement(d.Provider,{value:{...this.props.expandRow,nonExpandable:this.props.expandRow.nonExpandable,expanded:this.state.expanded,isClosing:this.state.isClosing,onClosed:this.onClosed,isAnyExpands:u.default.isAnyExpands(e,t,this.state.expanded),onRowExpand:this.handleRowExpand,onAllRowExpand:this.handleAllRowExpand}},this.props.children)}}t.default=()=>({Provider:f,Consumer:d.Consumer})},1632(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442));t.default=e=>{if(!e.children)return null;return e.bootstrap4?o.default.createElement("caption",{style:{captionSide:"top"}},e.children):o.default.createElement("caption",null,e.children)}},1859(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.CellEventDelegater=void 0;const o=r(n(3955)),i=["onClick","onDoubleClick","onMouseEnter","onMouseLeave","onContextMenu","onAuxClick"];t.CellEventDelegater=e=>class extends e{constructor(...e){super(...e),this.createDefaultEventHandler=this.createDefaultEventHandler.bind(this)}createDefaultEventHandler(e){return t=>{const{column:n,columnIndex:r,index:o}=this.props;e(t,n,void 0!==r?r:o)}}delegate(e={}){const t={...e};return Object.keys(e).forEach(n=>{o.default.includes(i,n)&&(t[n]=this.createDefaultEventHandler(e[n]))}),t}}},1965(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=n(3761);t.default=()=>o.default.createElement(i.BootstrapContext.Consumer,null,({bootstrap4:e})=>e?o.default.createElement("span",{className:"order-4"}):o.default.createElement("span",{className:"order"},o.default.createElement("span",{className:"dropdown"},o.default.createElement("span",{className:"caret"})),o.default.createElement("span",{className:"dropup"},o.default.createElement("span",{className:"caret"}))))},2190(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.typeConvert=void 0;const r=n(6561);t.typeConvert=(e,t)=>e===r.TYPE_STRING?String(t):e===r.TYPE_NUMBER?Number(t):e===r.TYPE_BOOLEAN?"boolean"==typeof t?t:"true"===t:e===r.TYPE_DATE?new Date(t):t},3196(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=s(n(8232)),c=s(n(3955));class d extends l.Component{shouldComponentUpdate(e){return void 0===e.shouldUpdate||e.shouldUpdate}render(){const{row:e,keyField:t,columns:n,rowIndex:r,isEditable:o,editingRowIdx:i,editingColIdx:a,atstart:s,clickToEdit:d,dbclickToEdit:f,EditingCellComponent:p,tabIndexStart:h}=this.props;let m=h;return n?.map((n,v)=>{const{dataField:g}=n,E=c.default.get(e,g);if(r===i&&v===a&&p)return l.default.createElement(p,{key:`${E}-${v}-editing`,row:e,rowIndex:r,column:n,columnIndex:v});let _,y={},b={};if("function"==typeof n.attrs?b={...n.attrs(E,e,r,v)}:"object"==typeof n.attrs&&null!==n.attrs&&(b={...n.attrs}),n.events){const t={...n.events};Object.keys(t).forEach(n=>{const o=t[n];t[n]=(...t)=>o(...t,e,r)}),b={...b,...t}}const x=c.default.isFunction(n.classes)?n.classes(E,e,r,v):n.classes;n.style&&(y=c.default.isFunction(n.style)?n.style(E,e,r,v):n.style,y={...y}),n.title&&(_=c.default.isFunction(n.title)?n.title(E,e,r,v):E,b.title=_),n.align&&(y.textAlign=c.default.isFunction(n.align)?n.align(E,e,r,v):n.align),x&&(b.className=x),c.default.isEmptyObject(y)||(b.style=y);let C=!c.default.isDefined(n.editable)||n.editable;return n.dataField!==t&&o||(C=!1),c.default.isFunction(n.editable)&&(C=n.editable(E,e,r,v)),"number"==typeof h&&-1!==h&&(b.tabIndex=m,m+=1),l.default.createElement(u.default,{key:`${E}-${v}`,row:e,editable:C.toString(),rowindex:r??0,columnindex:v,column:n,atstart:s,clicktoedit:d?d.toString():"false",dbclicktoedit:f?f.toString():"false",...b})})}}t.default=d},3285(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i={columns:[],toggles:void 0},a=o.default.createContext(i),s=({columns:e,toggles:t,children:n})=>{let r;return r=t?e.filter(e=>t[e.dataField]):e.filter(e=>!e.hidden),o.default.createElement(a.Provider,{value:{columns:r}},n)};t.default=()=>({Provider:s,Consumer:a.Consumer})},3502(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=n(7351),c=s(n(3196)),d=s(n(338));class f extends((0,d.default)((0,u.RowEventDelegater)(l.Component))){constructor(){super(...arguments),this.shouldUpdateRowContent=!1}shouldComponentUpdate(e){return this.shouldUpdateRowContent=!1,this.shouldUpdateRowContent=this.shouldRowContentUpdate(e),!!this.shouldUpdateRowContent||this.shouldUpdatedBySelfProps(e)}render(){const{editable:e=!0,className:t,style:n={},attrs:r={},visibleColumnSize:o,tabIndexCell:i,...a}=this.props,s=this.delegate(r),u=this.props.rowIndex*o+1;return l.default.createElement("tr",{style:n,className:t,...s},l.default.createElement(c.default,{shouldUpdate:this.shouldUpdateRowContent,tabIndexStart:i?u:-1,...a}))}}t.default=f},3519(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=s(n(3955)),c=l.default.createContext({data:[],getData:()=>[]});class d extends l.Component{constructor(e){super(e),this.getData=(e,t,n,r)=>r?r.data:n?n.data:t?t.data:e&&e.data.length<this.props.data.length&&!u.default.isEmpty(Object.keys(e.currFilters))?e.data:this.props.data,this.state={data:e.data}}render(){return l.default.createElement(c.Provider,{value:{data:this.state.data,getData:this.getData}},this.props.children)}}t.default=()=>({Provider:d,Consumer:c.Consumer})},3689(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){const t=t=>i.default.createElement(l.Consumer,null,n=>((t,n)=>{const r=t.value,a=s.default.contains(n.selected,r),l=!n.nonSelectable||!s.default.contains(n.nonSelectable,r),u=s.default.contains(n.nonSelectable,r);let{style:c,className:d}=t;if(a){const e=s.default.isFunction(n.style)?n.style(t.row,t.rowIndex):n.style,r=s.default.isFunction(n.classes)?n.classes(t.row,t.rowIndex):n.classes;c={...c,...e},d=(0,o.default)(d,r)||void 0,n.bgColor&&(c=c||{},c.backgroundColor=s.default.isFunction(n.bgColor)?n.bgColor(t.row,t.rowIndex):n.bgColor)}if(u){const e=s.default.isFunction(n.nonSelectableStyle)?n.nonSelectableStyle(t.row,t.rowIndex):n.nonSelectableStyle,r=s.default.isFunction(n.nonSelectableClasses)?n.nonSelectableClasses(t.row,t.rowIndex):n.nonSelectableClasses;c={...c,...e},d=(0,o.default)(d,r)||void 0}return i.default.createElement(e,{...t,style:c,className:d,selectRow:n,selected:a,selectable:l})})(t,n));return t.displayName="WithSelectionRowConsumer",t};const o=r(n(6942)),i=r(n(5442)),a=n(8145),s=r(n(3955)),l=(0,a.createSelectionContext)()},3742(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.nextOrder=t.sort=void 0;const o=n(6561),i=r(n(3955));function a(e,t){let n;return n="string"==typeof t?t.localeCompare(e):e>t?-1:e<t?1:0,n}t.sort=(e,t,{dataField:n,sortFunc:r,sortValue:s})=>{const l=[...e];return l.sort((e,l)=>{let u,c=i.default.get(e,n),d=i.default.get(l,n);return s?(c=s(c,e),d=s(d,l)):(c=i.default.isDefined(c)?c:"",d=i.default.isDefined(d)?d:""),u=r?r(c,d,t,n,e,l):t===o.SORT_DESC?a(c,d):a(d,c),u}),l};t.nextOrder=(e,{sortOrder:t,sortColumn:n},r=o.SORT_DESC)=>n&&e.dataField===n.dataField?t===o.SORT_DESC?o.SORT_ASC:o.SORT_DESC:r},3761(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.BootstrapContext=void 0;const o=r(n(5442));t.BootstrapContext=o.default.createContext({bootstrap4:!0})},3955(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(4523));function i(e){return[e].join(".").replace(/\[/g,".").replace(/\]/g,"").split(".")}t.default=Object.assign(o.default,{get:function(e,t){const n=e[t];if(null!=n)return n;const r=i(t);let o;try{o=r.reduce((e,t)=>e[t],e)}catch(e){}return o},set:function(e,t,n,r=!1){const o=i(t);let a=0;o.reduce((e,t)=>{if(a+=1,void 0===e[t]){if(!r)throw new Error(`${e}.${t} is undefined`);return e[t]={},e[t]}return a===o.length?(e[t]=n,n):e[t]},e)},isDefined:function(e){return null!=e},isEmptyObject:function(e){if(!o.default.isObject(e))return!1;const t=Object.prototype.hasOwnProperty,n=Object.keys(e);for(let r=0;r<n.length;r+=1)if(t.call(e,n[r]))return!1;return!0},sleep:function(e,t){return setTimeout(()=>e(),t)},debounce:function(e,t,n){let r;return()=>{const o=n&&!r;clearTimeout(r),r=setTimeout(()=>{r=null,n||e.apply(this,arguments)},t||0),o&&e.apply(this,arguments)}},contains:function(e,t){return o.default.includes?o.default.includes(e,t):e.indexOf(t)>-1}})},3997(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t});Object.defineProperty(t,"__esModule",{value:!0});const s=a(n(5442));class l extends s.Component{constructor(e){super(e),this.handleCheckBoxClick=this.handleCheckBoxClick.bind(this)}handleCheckBoxClick(e){const{isAnyExpands:t,onAllRowExpand:n}=this.props;n(e,!t)}render(){const{isAnyExpands:e,expandHeaderColumnRenderer:t}=this.props,n={onClick:this.handleCheckBoxClick};return s.default.createElement("th",{className:"expand-cell-header","data-row-selection":!0,...n},t?t({isAnyExpands:e??!1}):e?"(-)":"(+)")}}t.default=l},4130(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getSelectedRows=t.unSelectableKeys=t.selectableKeys=t.getSelectionSummary=void 0;const o=r(n(3955)),i=n(355);t.getSelectionSummary=(e=[],t,n=[])=>{let r=e.length>0,i=!0;const a=e.map(e=>o.default.get(e,t));for(let e=0;e<a.length;e+=1){const t=a[e];void 0===n.find(e=>e===t)?r=!1:i=!1}return{allRowsSelected:r,allRowsNotSelected:i}};t.selectableKeys=(e=[],t,n=[])=>0===n.length?e.map(e=>o.default.get(e,t)):e.filter(e=>!o.default.contains(n,o.default.get(e,t))).map(e=>o.default.get(e,t));t.unSelectableKeys=(e,t=[])=>0===t?.length?[]:e.filter(e=>o.default.contains(t,e));t.getSelectedRows=(e=[],t,n)=>n.map(n=>(0,i.getRowByRowId)(e,t,n)).filter(e=>!!e)},4523(e,t,n){"use strict";n.r(t),n.d(t,{VERSION:()=>o,after:()=>Mt,all:()=>en,allKeys:()=>ve,any:()=>tn,assign:()=>Me,before:()=>Ft,bind:()=>xt,bindAll:()=>wt,chain:()=>Et,chunk:()=>Ln,clone:()=>Le,collect:()=>Xt,compact:()=>Rn,compose:()=>It,constant:()=>Q,contains:()=>nn,countBy:()=>gn,create:()=>Ae,debounce:()=>Nt,default:()=>Wn,defaults:()=>Fe,defer:()=>Pt,delay:()=>Rt,detect:()=>Vt,difference:()=>jn,drop:()=>wn,each:()=>$t,escape:()=>at,every:()=>en,extend:()=>Ie,extendOwn:()=>Me,filter:()=>Qt,find:()=>Vt,findIndex:()=>Bt,findKey:()=>At,findLastIndex:()=>Ut,findWhere:()=>qt,first:()=>On,flatten:()=>Pn,foldl:()=>Yt,foldr:()=>Jt,forEach:()=>$t,functions:()=>De,get:()=>We,groupBy:()=>mn,has:()=>ze,head:()=>On,identity:()=>Ve,include:()=>nn,includes:()=>nn,indexBy:()=>vn,indexOf:()=>Wt,initial:()=>Cn,inject:()=>Yt,intersection:()=>In,invert:()=>Ne,invoke:()=>rn,isArguments:()=>G,isArray:()=>q,isArrayBuffer:()=>A,isBoolean:()=>P,isDataView:()=>V,isDate:()=>I,isElement:()=>j,isEmpty:()=>le,isEqual:()=>me,isError:()=>F,isFinite:()=>Y,isFunction:()=>U,isMap:()=>Oe,isMatch:()=>ue,isNaN:()=>J,isNull:()=>S,isNumber:()=>T,isObject:()=>w,isRegExp:()=>M,isSet:()=>Se,isString:()=>D,isSymbol:()=>k,isTypedArray:()=>oe,isUndefined:()=>R,isWeakMap:()=>we,isWeakSet:()=>Re,iteratee:()=>Ye,keys:()=>se,last:()=>Sn,lastIndexOf:()=>zt,map:()=>Xt,mapObject:()=>Qe,matcher:()=>qe,matches:()=>qe,max:()=>sn,memoize:()=>St,methods:()=>De,min:()=>ln,mixin:()=>Un,negate:()=>Tt,noop:()=>Ze,now:()=>rt,object:()=>kn,omit:()=>xn,once:()=>kt,pairs:()=>je,partial:()=>bt,partition:()=>En,pick:()=>bn,pluck:()=>on,property:()=>$e,propertyOf:()=>et,random:()=>nt,range:()=>An,reduce:()=>Yt,reduceRight:()=>Jt,reject:()=>Zt,rest:()=>wn,restArguments:()=>O,result:()=>mt,sample:()=>dn,select:()=>Qt,shuffle:()=>fn,size:()=>_n,some:()=>tn,sortBy:()=>pn,sortedIndex:()=>Ht,tail:()=>wn,take:()=>On,tap:()=>Be,template:()=>ht,templateSettings:()=>lt,throttle:()=>jt,times:()=>tt,toArray:()=>cn,toPath:()=>Ue,transpose:()=>Mn,unescape:()=>st,union:()=>Tn,uniq:()=>Dn,unique:()=>Dn,uniqueId:()=>gt,unzip:()=>Mn,values:()=>Pe,where:()=>an,without:()=>Nn,wrap:()=>Dt,zip:()=>Fn});var r={};n.r(r),n.d(r,{VERSION:()=>o,after:()=>Mt,all:()=>en,allKeys:()=>ve,any:()=>tn,assign:()=>Me,before:()=>Ft,bind:()=>xt,bindAll:()=>wt,chain:()=>Et,chunk:()=>Ln,clone:()=>Le,collect:()=>Xt,compact:()=>Rn,compose:()=>It,constant:()=>Q,contains:()=>nn,countBy:()=>gn,create:()=>Ae,debounce:()=>Nt,default:()=>Hn,defaults:()=>Fe,defer:()=>Pt,delay:()=>Rt,detect:()=>Vt,difference:()=>jn,drop:()=>wn,each:()=>$t,escape:()=>at,every:()=>en,extend:()=>Ie,extendOwn:()=>Me,filter:()=>Qt,find:()=>Vt,findIndex:()=>Bt,findKey:()=>At,findLastIndex:()=>Ut,findWhere:()=>qt,first:()=>On,flatten:()=>Pn,foldl:()=>Yt,foldr:()=>Jt,forEach:()=>$t,functions:()=>De,get:()=>We,groupBy:()=>mn,has:()=>ze,head:()=>On,identity:()=>Ve,include:()=>nn,includes:()=>nn,indexBy:()=>vn,indexOf:()=>Wt,initial:()=>Cn,inject:()=>Yt,intersection:()=>In,invert:()=>Ne,invoke:()=>rn,isArguments:()=>G,isArray:()=>q,isArrayBuffer:()=>A,isBoolean:()=>P,isDataView:()=>V,isDate:()=>I,isElement:()=>j,isEmpty:()=>le,isEqual:()=>me,isError:()=>F,isFinite:()=>Y,isFunction:()=>U,isMap:()=>Oe,isMatch:()=>ue,isNaN:()=>J,isNull:()=>S,isNumber:()=>T,isObject:()=>w,isRegExp:()=>M,isSet:()=>Se,isString:()=>D,isSymbol:()=>k,isTypedArray:()=>oe,isUndefined:()=>R,isWeakMap:()=>we,isWeakSet:()=>Re,iteratee:()=>Ye,keys:()=>se,last:()=>Sn,lastIndexOf:()=>zt,map:()=>Xt,mapObject:()=>Qe,matcher:()=>qe,matches:()=>qe,max:()=>sn,memoize:()=>St,methods:()=>De,min:()=>ln,mixin:()=>Un,negate:()=>Tt,noop:()=>Ze,now:()=>rt,object:()=>kn,omit:()=>xn,once:()=>kt,pairs:()=>je,partial:()=>bt,partition:()=>En,pick:()=>bn,pluck:()=>on,property:()=>$e,propertyOf:()=>et,random:()=>nt,range:()=>An,reduce:()=>Yt,reduceRight:()=>Jt,reject:()=>Zt,rest:()=>wn,restArguments:()=>O,result:()=>mt,sample:()=>dn,select:()=>Qt,shuffle:()=>fn,size:()=>_n,some:()=>tn,sortBy:()=>pn,sortedIndex:()=>Ht,tail:()=>wn,take:()=>On,tap:()=>Be,template:()=>ht,templateSettings:()=>lt,throttle:()=>jt,times:()=>tt,toArray:()=>cn,toPath:()=>Ue,transpose:()=>Mn,unescape:()=>st,union:()=>Tn,uniq:()=>Dn,unique:()=>Dn,uniqueId:()=>gt,unzip:()=>Mn,values:()=>Pe,where:()=>an,without:()=>Nn,wrap:()=>Dt,zip:()=>Fn});var o="1.13.7",i="object"==typeof self&&self.self===self&&self||"object"==typeof n.g&&n.g.global===n.g&&n.g||Function("return this")()||{},a=Array.prototype,s=Object.prototype,l="undefined"!=typeof Symbol?Symbol.prototype:null,u=a.push,c=a.slice,d=s.toString,f=s.hasOwnProperty,p="undefined"!=typeof ArrayBuffer,h="undefined"!=typeof DataView,m=Array.isArray,v=Object.keys,g=Object.create,E=p&&ArrayBuffer.isView,_=isNaN,y=isFinite,b=!{toString:null}.propertyIsEnumerable("toString"),x=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],C=Math.pow(2,53)-1;function O(e,t){return t=null==t?e.length-1:+t,function(){for(var n=Math.max(arguments.length-t,0),r=Array(n),o=0;o<n;o++)r[o]=arguments[o+t];switch(t){case 0:return e.call(this,r);case 1:return e.call(this,arguments[0],r);case 2:return e.call(this,arguments[0],arguments[1],r)}var i=Array(t+1);for(o=0;o<t;o++)i[o]=arguments[o];return i[t]=r,e.apply(this,i)}}function w(e){var t=typeof e;return"function"===t||"object"===t&&!!e}function S(e){return null===e}function R(e){return void 0===e}function P(e){return!0===e||!1===e||"[object Boolean]"===d.call(e)}function j(e){return!(!e||1!==e.nodeType)}function N(e){var t="[object "+e+"]";return function(e){return d.call(e)===t}}const D=N("String"),T=N("Number"),I=N("Date"),M=N("RegExp"),F=N("Error"),k=N("Symbol"),A=N("ArrayBuffer");var L=N("Function"),B=i.document&&i.document.childNodes;"object"!=typeof Int8Array&&"function"!=typeof B&&(L=function(e){return"function"==typeof e||!1});const U=L,H=N("Object");var K=h&&(!/\[native code\]/.test(String(DataView))||H(new DataView(new ArrayBuffer(8)))),W="undefined"!=typeof Map&&H(new Map),z=N("DataView");const V=K?function(e){return null!=e&&U(e.getInt8)&&A(e.buffer)}:z,q=m||N("Array");function $(e,t){return null!=e&&f.call(e,t)}var X=N("Arguments");!function(){X(arguments)||(X=function(e){return $(e,"callee")})}();const G=X;function Y(e){return!k(e)&&y(e)&&!isNaN(parseFloat(e))}function J(e){return T(e)&&_(e)}function Q(e){return function(){return e}}function Z(e){return function(t){var n=e(t);return"number"==typeof n&&n>=0&&n<=C}}function ee(e){return function(t){return null==t?void 0:t[e]}}const te=ee("byteLength"),ne=Z(te);var re=/\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;const oe=p?function(e){return E?E(e)&&!V(e):ne(e)&&re.test(d.call(e))}:Q(!1),ie=ee("length");function ae(e,t){t=function(e){for(var t={},n=e.length,r=0;r<n;++r)t[e[r]]=!0;return{contains:function(e){return!0===t[e]},push:function(n){return t[n]=!0,e.push(n)}}}(t);var n=x.length,r=e.constructor,o=U(r)&&r.prototype||s,i="constructor";for($(e,i)&&!t.contains(i)&&t.push(i);n--;)(i=x[n])in e&&e[i]!==o[i]&&!t.contains(i)&&t.push(i)}function se(e){if(!w(e))return[];if(v)return v(e);var t=[];for(var n in e)$(e,n)&&t.push(n);return b&&ae(e,t),t}function le(e){if(null==e)return!0;var t=ie(e);return"number"==typeof t&&(q(e)||D(e)||G(e))?0===t:0===ie(se(e))}function ue(e,t){var n=se(t),r=n.length;if(null==e)return!r;for(var o=Object(e),i=0;i<r;i++){var a=n[i];if(t[a]!==o[a]||!(a in o))return!1}return!0}function ce(e){return e instanceof ce?e:this instanceof ce?void(this._wrapped=e):new ce(e)}function de(e){return new Uint8Array(e.buffer||e,e.byteOffset||0,te(e))}ce.VERSION=o,ce.prototype.value=function(){return this._wrapped},ce.prototype.valueOf=ce.prototype.toJSON=ce.prototype.value,ce.prototype.toString=function(){return String(this._wrapped)};var fe="[object DataView]";function pe(e,t,n,r){if(e===t)return 0!==e||1/e==1/t;if(null==e||null==t)return!1;if(e!=e)return t!=t;var o=typeof e;return("function"===o||"object"===o||"object"==typeof t)&&he(e,t,n,r)}function he(e,t,n,r){e instanceof ce&&(e=e._wrapped),t instanceof ce&&(t=t._wrapped);var o=d.call(e);if(o!==d.call(t))return!1;if(K&&"[object Object]"==o&&V(e)){if(!V(t))return!1;o=fe}switch(o){case"[object RegExp]":case"[object String]":return""+e==""+t;case"[object Number]":return+e!=+e?+t!=+t:0===+e?1/+e==1/t:+e===+t;case"[object Date]":case"[object Boolean]":return+e===+t;case"[object Symbol]":return l.valueOf.call(e)===l.valueOf.call(t);case"[object ArrayBuffer]":case fe:return he(de(e),de(t),n,r)}var i="[object Array]"===o;if(!i&&oe(e)){if(te(e)!==te(t))return!1;if(e.buffer===t.buffer&&e.byteOffset===t.byteOffset)return!0;i=!0}if(!i){if("object"!=typeof e||"object"!=typeof t)return!1;var a=e.constructor,s=t.constructor;if(a!==s&&!(U(a)&&a instanceof a&&U(s)&&s instanceof s)&&"constructor"in e&&"constructor"in t)return!1}r=r||[];for(var u=(n=n||[]).length;u--;)if(n[u]===e)return r[u]===t;if(n.push(e),r.push(t),i){if((u=e.length)!==t.length)return!1;for(;u--;)if(!pe(e[u],t[u],n,r))return!1}else{var c,f=se(e);if(u=f.length,se(t).length!==u)return!1;for(;u--;)if(!$(t,c=f[u])||!pe(e[c],t[c],n,r))return!1}return n.pop(),r.pop(),!0}function me(e,t){return pe(e,t)}function ve(e){if(!w(e))return[];var t=[];for(var n in e)t.push(n);return b&&ae(e,t),t}function ge(e){var t=ie(e);return function(n){if(null==n)return!1;var r=ve(n);if(ie(r))return!1;for(var o=0;o<t;o++)if(!U(n[e[o]]))return!1;return e!==xe||!U(n[Ee])}}var Ee="forEach",_e=["clear","delete"],ye=["get","has","set"],be=_e.concat(Ee,ye),xe=_e.concat(ye),Ce=["add"].concat(_e,Ee,"has");const Oe=W?ge(be):N("Map"),we=W?ge(xe):N("WeakMap"),Se=W?ge(Ce):N("Set"),Re=N("WeakSet");function Pe(e){for(var t=se(e),n=t.length,r=Array(n),o=0;o<n;o++)r[o]=e[t[o]];return r}function je(e){for(var t=se(e),n=t.length,r=Array(n),o=0;o<n;o++)r[o]=[t[o],e[t[o]]];return r}function Ne(e){for(var t={},n=se(e),r=0,o=n.length;r<o;r++)t[e[n[r]]]=n[r];return t}function De(e){var t=[];for(var n in e)U(e[n])&&t.push(n);return t.sort()}function Te(e,t){return function(n){var r=arguments.length;if(t&&(n=Object(n)),r<2||null==n)return n;for(var o=1;o<r;o++)for(var i=arguments[o],a=e(i),s=a.length,l=0;l<s;l++){var u=a[l];t&&void 0!==n[u]||(n[u]=i[u])}return n}}const Ie=Te(ve),Me=Te(se),Fe=Te(ve,!0);function ke(e){if(!w(e))return{};if(g)return g(e);var t=function(){};t.prototype=e;var n=new t;return t.prototype=null,n}function Ae(e,t){var n=ke(e);return t&&Me(n,t),n}function Le(e){return w(e)?q(e)?e.slice():Ie({},e):e}function Be(e,t){return t(e),e}function Ue(e){return q(e)?e:[e]}function He(e){return ce.toPath(e)}function Ke(e,t){for(var n=t.length,r=0;r<n;r++){if(null==e)return;e=e[t[r]]}return n?e:void 0}function We(e,t,n){var r=Ke(e,He(t));return R(r)?n:r}function ze(e,t){for(var n=(t=He(t)).length,r=0;r<n;r++){var o=t[r];if(!$(e,o))return!1;e=e[o]}return!!n}function Ve(e){return e}function qe(e){return e=Me({},e),function(t){return ue(t,e)}}function $e(e){return e=He(e),function(t){return Ke(t,e)}}function Xe(e,t,n){if(void 0===t)return e;switch(null==n?3:n){case 1:return function(n){return e.call(t,n)};case 3:return function(n,r,o){return e.call(t,n,r,o)};case 4:return function(n,r,o,i){return e.call(t,n,r,o,i)}}return function(){return e.apply(t,arguments)}}function Ge(e,t,n){return null==e?Ve:U(e)?Xe(e,t,n):w(e)&&!q(e)?qe(e):$e(e)}function Ye(e,t){return Ge(e,t,1/0)}function Je(e,t,n){return ce.iteratee!==Ye?ce.iteratee(e,t):Ge(e,t,n)}function Qe(e,t,n){t=Je(t,n);for(var r=se(e),o=r.length,i={},a=0;a<o;a++){var s=r[a];i[s]=t(e[s],s,e)}return i}function Ze(){}function et(e){return null==e?Ze:function(t){return We(e,t)}}function tt(e,t,n){var r=Array(Math.max(0,e));t=Xe(t,n,1);for(var o=0;o<e;o++)r[o]=t(o);return r}function nt(e,t){return null==t&&(t=e,e=0),e+Math.floor(Math.random()*(t-e+1))}ce.toPath=Ue,ce.iteratee=Ye;const rt=Date.now||function(){return(new Date).getTime()};function ot(e){var t=function(t){return e[t]},n="(?:"+se(e).join("|")+")",r=RegExp(n),o=RegExp(n,"g");return function(e){return e=null==e?"":""+e,r.test(e)?e.replace(o,t):e}}const it={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},at=ot(it),st=ot(Ne(it)),lt=ce.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var ut=/(.)^/,ct={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},dt=/\\|'|\r|\n|\u2028|\u2029/g;function ft(e){return"\\"+ct[e]}var pt=/^\s*(\w|\$)+\s*$/;function ht(e,t,n){!t&&n&&(t=n),t=Fe({},t,ce.templateSettings);var r=RegExp([(t.escape||ut).source,(t.interpolate||ut).source,(t.evaluate||ut).source].join("|")+"|$","g"),o=0,i="__p+='";e.replace(r,function(t,n,r,a,s){return i+=e.slice(o,s).replace(dt,ft),o=s+t.length,n?i+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'":r?i+="'+\n((__t=("+r+"))==null?'':__t)+\n'":a&&(i+="';\n"+a+"\n__p+='"),t}),i+="';\n";var a,s=t.variable;if(s){if(!pt.test(s))throw new Error("variable is not a bare identifier: "+s)}else i="with(obj||{}){\n"+i+"}\n",s="obj";i="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+i+"return __p;\n";try{a=new Function(s,"_",i)}catch(e){throw e.source=i,e}var l=function(e){return a.call(this,e,ce)};return l.source="function("+s+"){\n"+i+"}",l}function mt(e,t,n){var r=(t=He(t)).length;if(!r)return U(n)?n.call(e):n;for(var o=0;o<r;o++){var i=null==e?void 0:e[t[o]];void 0===i&&(i=n,o=r),e=U(i)?i.call(e):i}return e}var vt=0;function gt(e){var t=++vt+"";return e?e+t:t}function Et(e){var t=ce(e);return t._chain=!0,t}function _t(e,t,n,r,o){if(!(r instanceof t))return e.apply(n,o);var i=ke(e.prototype),a=e.apply(i,o);return w(a)?a:i}var yt=O(function(e,t){var n=yt.placeholder,r=function(){for(var o=0,i=t.length,a=Array(i),s=0;s<i;s++)a[s]=t[s]===n?arguments[o++]:t[s];for(;o<arguments.length;)a.push(arguments[o++]);return _t(e,r,this,this,a)};return r});yt.placeholder=ce;const bt=yt,xt=O(function(e,t,n){if(!U(e))throw new TypeError("Bind must be called on a function");var r=O(function(o){return _t(e,r,t,this,n.concat(o))});return r}),Ct=Z(ie);function Ot(e,t,n,r){if(r=r||[],t||0===t){if(t<=0)return r.concat(e)}else t=1/0;for(var o=r.length,i=0,a=ie(e);i<a;i++){var s=e[i];if(Ct(s)&&(q(s)||G(s)))if(t>1)Ot(s,t-1,n,r),o=r.length;else for(var l=0,u=s.length;l<u;)r[o++]=s[l++];else n||(r[o++]=s)}return r}const wt=O(function(e,t){var n=(t=Ot(t,!1,!1)).length;if(n<1)throw new Error("bindAll must be passed function names");for(;n--;){var r=t[n];e[r]=xt(e[r],e)}return e});function St(e,t){var n=function(r){var o=n.cache,i=""+(t?t.apply(this,arguments):r);return $(o,i)||(o[i]=e.apply(this,arguments)),o[i]};return n.cache={},n}const Rt=O(function(e,t,n){return setTimeout(function(){return e.apply(null,n)},t)}),Pt=bt(Rt,ce,1);function jt(e,t,n){var r,o,i,a,s=0;n||(n={});var l=function(){s=!1===n.leading?0:rt(),r=null,a=e.apply(o,i),r||(o=i=null)},u=function(){var u=rt();s||!1!==n.leading||(s=u);var c=t-(u-s);return o=this,i=arguments,c<=0||c>t?(r&&(clearTimeout(r),r=null),s=u,a=e.apply(o,i),r||(o=i=null)):r||!1===n.trailing||(r=setTimeout(l,c)),a};return u.cancel=function(){clearTimeout(r),s=0,r=o=i=null},u}function Nt(e,t,n){var r,o,i,a,s,l=function(){var u=rt()-o;t>u?r=setTimeout(l,t-u):(r=null,n||(a=e.apply(s,i)),r||(i=s=null))},u=O(function(u){return s=this,i=u,o=rt(),r||(r=setTimeout(l,t),n&&(a=e.apply(s,i))),a});return u.cancel=function(){clearTimeout(r),r=i=s=null},u}function Dt(e,t){return bt(t,e)}function Tt(e){return function(){return!e.apply(this,arguments)}}function It(){var e=arguments,t=e.length-1;return function(){for(var n=t,r=e[t].apply(this,arguments);n--;)r=e[n].call(this,r);return r}}function Mt(e,t){return function(){if(--e<1)return t.apply(this,arguments)}}function Ft(e,t){var n;return function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=null),n}}const kt=bt(Ft,2);function At(e,t,n){t=Je(t,n);for(var r,o=se(e),i=0,a=o.length;i<a;i++)if(t(e[r=o[i]],r,e))return r}function Lt(e){return function(t,n,r){n=Je(n,r);for(var o=ie(t),i=e>0?0:o-1;i>=0&&i<o;i+=e)if(n(t[i],i,t))return i;return-1}}const Bt=Lt(1),Ut=Lt(-1);function Ht(e,t,n,r){for(var o=(n=Je(n,r,1))(t),i=0,a=ie(e);i<a;){var s=Math.floor((i+a)/2);n(e[s])<o?i=s+1:a=s}return i}function Kt(e,t,n){return function(r,o,i){var a=0,s=ie(r);if("number"==typeof i)e>0?a=i>=0?i:Math.max(i+s,a):s=i>=0?Math.min(i+1,s):i+s+1;else if(n&&i&&s)return r[i=n(r,o)]===o?i:-1;if(o!=o)return(i=t(c.call(r,a,s),J))>=0?i+a:-1;for(i=e>0?a:s-1;i>=0&&i<s;i+=e)if(r[i]===o)return i;return-1}}const Wt=Kt(1,Bt,Ht),zt=Kt(-1,Ut);function Vt(e,t,n){var r=(Ct(e)?Bt:At)(e,t,n);if(void 0!==r&&-1!==r)return e[r]}function qt(e,t){return Vt(e,qe(t))}function $t(e,t,n){var r,o;if(t=Xe(t,n),Ct(e))for(r=0,o=e.length;r<o;r++)t(e[r],r,e);else{var i=se(e);for(r=0,o=i.length;r<o;r++)t(e[i[r]],i[r],e)}return e}function Xt(e,t,n){t=Je(t,n);for(var r=!Ct(e)&&se(e),o=(r||e).length,i=Array(o),a=0;a<o;a++){var s=r?r[a]:a;i[a]=t(e[s],s,e)}return i}function Gt(e){return function(t,n,r,o){var i=arguments.length>=3;return function(t,n,r,o){var i=!Ct(t)&&se(t),a=(i||t).length,s=e>0?0:a-1;for(o||(r=t[i?i[s]:s],s+=e);s>=0&&s<a;s+=e){var l=i?i[s]:s;r=n(r,t[l],l,t)}return r}(t,Xe(n,o,4),r,i)}}const Yt=Gt(1),Jt=Gt(-1);function Qt(e,t,n){var r=[];return t=Je(t,n),$t(e,function(e,n,o){t(e,n,o)&&r.push(e)}),r}function Zt(e,t,n){return Qt(e,Tt(Je(t)),n)}function en(e,t,n){t=Je(t,n);for(var r=!Ct(e)&&se(e),o=(r||e).length,i=0;i<o;i++){var a=r?r[i]:i;if(!t(e[a],a,e))return!1}return!0}function tn(e,t,n){t=Je(t,n);for(var r=!Ct(e)&&se(e),o=(r||e).length,i=0;i<o;i++){var a=r?r[i]:i;if(t(e[a],a,e))return!0}return!1}function nn(e,t,n,r){return Ct(e)||(e=Pe(e)),("number"!=typeof n||r)&&(n=0),Wt(e,t,n)>=0}const rn=O(function(e,t,n){var r,o;return U(t)?o=t:(t=He(t),r=t.slice(0,-1),t=t[t.length-1]),Xt(e,function(e){var i=o;if(!i){if(r&&r.length&&(e=Ke(e,r)),null==e)return;i=e[t]}return null==i?i:i.apply(e,n)})});function on(e,t){return Xt(e,$e(t))}function an(e,t){return Qt(e,qe(t))}function sn(e,t,n){var r,o,i=-1/0,a=-1/0;if(null==t||"number"==typeof t&&"object"!=typeof e[0]&&null!=e)for(var s=0,l=(e=Ct(e)?e:Pe(e)).length;s<l;s++)null!=(r=e[s])&&r>i&&(i=r);else t=Je(t,n),$t(e,function(e,n,r){((o=t(e,n,r))>a||o===-1/0&&i===-1/0)&&(i=e,a=o)});return i}function ln(e,t,n){var r,o,i=1/0,a=1/0;if(null==t||"number"==typeof t&&"object"!=typeof e[0]&&null!=e)for(var s=0,l=(e=Ct(e)?e:Pe(e)).length;s<l;s++)null!=(r=e[s])&&r<i&&(i=r);else t=Je(t,n),$t(e,function(e,n,r){((o=t(e,n,r))<a||o===1/0&&i===1/0)&&(i=e,a=o)});return i}var un=/[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;function cn(e){return e?q(e)?c.call(e):D(e)?e.match(un):Ct(e)?Xt(e,Ve):Pe(e):[]}function dn(e,t,n){if(null==t||n)return Ct(e)||(e=Pe(e)),e[nt(e.length-1)];var r=cn(e),o=ie(r);t=Math.max(Math.min(t,o),0);for(var i=o-1,a=0;a<t;a++){var s=nt(a,i),l=r[a];r[a]=r[s],r[s]=l}return r.slice(0,t)}function fn(e){return dn(e,1/0)}function pn(e,t,n){var r=0;return t=Je(t,n),on(Xt(e,function(e,n,o){return{value:e,index:r++,criteria:t(e,n,o)}}).sort(function(e,t){var n=e.criteria,r=t.criteria;if(n!==r){if(n>r||void 0===n)return 1;if(n<r||void 0===r)return-1}return e.index-t.index}),"value")}function hn(e,t){return function(n,r,o){var i=t?[[],[]]:{};return r=Je(r,o),$t(n,function(t,o){var a=r(t,o,n);e(i,t,a)}),i}}const mn=hn(function(e,t,n){$(e,n)?e[n].push(t):e[n]=[t]}),vn=hn(function(e,t,n){e[n]=t}),gn=hn(function(e,t,n){$(e,n)?e[n]++:e[n]=1}),En=hn(function(e,t,n){e[n?0:1].push(t)},!0);function _n(e){return null==e?0:Ct(e)?e.length:se(e).length}function yn(e,t,n){return t in n}const bn=O(function(e,t){var n={},r=t[0];if(null==e)return n;U(r)?(t.length>1&&(r=Xe(r,t[1])),t=ve(e)):(r=yn,t=Ot(t,!1,!1),e=Object(e));for(var o=0,i=t.length;o<i;o++){var a=t[o],s=e[a];r(s,a,e)&&(n[a]=s)}return n}),xn=O(function(e,t){var n,r=t[0];return U(r)?(r=Tt(r),t.length>1&&(n=t[1])):(t=Xt(Ot(t,!1,!1),String),r=function(e,n){return!nn(t,n)}),bn(e,r,n)});function Cn(e,t,n){return c.call(e,0,Math.max(0,e.length-(null==t||n?1:t)))}function On(e,t,n){return null==e||e.length<1?null==t||n?void 0:[]:null==t||n?e[0]:Cn(e,e.length-t)}function wn(e,t,n){return c.call(e,null==t||n?1:t)}function Sn(e,t,n){return null==e||e.length<1?null==t||n?void 0:[]:null==t||n?e[e.length-1]:wn(e,Math.max(0,e.length-t))}function Rn(e){return Qt(e,Boolean)}function Pn(e,t){return Ot(e,t,!1)}const jn=O(function(e,t){return t=Ot(t,!0,!0),Qt(e,function(e){return!nn(t,e)})}),Nn=O(function(e,t){return jn(e,t)});function Dn(e,t,n,r){P(t)||(r=n,n=t,t=!1),null!=n&&(n=Je(n,r));for(var o=[],i=[],a=0,s=ie(e);a<s;a++){var l=e[a],u=n?n(l,a,e):l;t&&!n?(a&&i===u||o.push(l),i=u):n?nn(i,u)||(i.push(u),o.push(l)):nn(o,l)||o.push(l)}return o}const Tn=O(function(e){return Dn(Ot(e,!0,!0))});function In(e){for(var t=[],n=arguments.length,r=0,o=ie(e);r<o;r++){var i=e[r];if(!nn(t,i)){var a;for(a=1;a<n&&nn(arguments[a],i);a++);a===n&&t.push(i)}}return t}function Mn(e){for(var t=e&&sn(e,ie).length||0,n=Array(t),r=0;r<t;r++)n[r]=on(e,r);return n}const Fn=O(Mn);function kn(e,t){for(var n={},r=0,o=ie(e);r<o;r++)t?n[e[r]]=t[r]:n[e[r][0]]=e[r][1];return n}function An(e,t,n){null==t&&(t=e||0,e=0),n||(n=t<e?-1:1);for(var r=Math.max(Math.ceil((t-e)/n),0),o=Array(r),i=0;i<r;i++,e+=n)o[i]=e;return o}function Ln(e,t){if(null==t||t<1)return[];for(var n=[],r=0,o=e.length;r<o;)n.push(c.call(e,r,r+=t));return n}function Bn(e,t){return e._chain?ce(t).chain():t}function Un(e){return $t(De(e),function(t){var n=ce[t]=e[t];ce.prototype[t]=function(){var e=[this._wrapped];return u.apply(e,arguments),Bn(this,n.apply(ce,e))}}),ce}$t(["pop","push","reverse","shift","sort","splice","unshift"],function(e){var t=a[e];ce.prototype[e]=function(){var n=this._wrapped;return null!=n&&(t.apply(n,arguments),"shift"!==e&&"splice"!==e||0!==n.length||delete n[0]),Bn(this,n)}}),$t(["concat","join","slice"],function(e){var t=a[e];ce.prototype[e]=function(){var e=this._wrapped;return null!=e&&(e=t.apply(e,arguments)),Bn(this,e)}});const Hn=ce;var Kn=Un(r);Kn._=Kn;const Wn=Kn},4607(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t});Object.defineProperty(t,"__esModule",{value:!0});const s=a(n(5442)),l=n(6561);t.default=(e,t,n)=>{const r={data:[],sortOrder:void 0,onSort:()=>{},sortField:null},o=s.default.createContext(r);class i extends s.Component{constructor(r){super(r),this.state={sortOrder:l.SORT_ASC,sortColumn:{dataField:"id",text:"ID",onSort:()=>{},sortFunc:()=>{}}},this.handleSort=r=>{const o=e.nextOrder(r,this.state,this.props.defaultSortDirection);r.onSort&&r.onSort(r.dataField,o),t()&&n(r.dataField,o),this.setState(()=>({sortOrder:o,sortColumn:r}))};const{defaultSorted:o,defaultSortDirection:i,sort:a}=r;let s,u;o&&o.length>0?(s=o[0].order||i,u=this.initSort(o[0].dataField,s)):a&&a.dataField&&a.order&&(s=a.order,u=this.initSort(a.dataField,s)),this.state={sortOrder:s,sortColumn:u}}componentDidMount(){const{sortOrder:e,sortColumn:r}=this.state;t()&&e&&r&&n(r.dataField,e)}static getDerivedStateFromProps(e,t){const{sort:n,columns:r}=e;return n&&n.dataField&&n.order?{sortOrder:n.order,sortColumn:r.find(e=>e.dataField===n.dataField)}:null}initSort(e,t){const{columns:n}=this.props,r=n.filter(t=>t.dataField===e);let o;return r.length>0&&(o=r[0],o.onSort&&o.onSort(e,t)),o}render(){const{sort:n}=this.props,{sortOrder:r,sortColumn:i}=this.state;let{data:a}=this.props;if(!t()&&i){const t=i.sortFunc?i.sortFunc:n&&n.sortFunc;a=e.sort(a,r,{...i,sortFunc:t})}return s.default.createElement(o.Provider,{value:{data:a,sortOrder:r,onSort:this.handleSort,sortField:i?i.dataField:null}},this.props.children)}}return{Provider:i,Consumer:o.Consumer}}},4652(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(3955)),i=r(n(9603));t.default=e=>class extends((0,i.default)(e)){validateProps(){const{keyField:e}=this.props;if(!e)throw new Error("Please specify a field as key via keyField");if(this.visibleColumnSize(!1)<=0)throw new Error("No visible columns detected")}isEmpty(){return 0===this.props.data.length}visibleRows(){const{data:e,hiddenRows:t,keyField:n}=this.props;return t&&0!==t.length?e.filter(e=>{const r=o.default.get(e,n);return!o.default.contains(t,r)}):e}}},5191(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=n(6561),a=r(n(8610)),s=r(n(3997)),l=r(n(6572)),u=r(n(7572)),c=r(n(6510));t.default=e=>{const{className:t,columns:n,onSort:r,onFilter:d,sortField:f,sortOrder:p,selectRow:h,expandRow:m,currFilters:v,onExternalFilter:g,filterPosition:E,globalSortCaret:_,wrapperClasses:y}=e;let b=()=>null,x=()=>null;m?.showExpandColumn&&(x=(0,l.default)(s.default)),h&&(b=(0,c.default)(u.default));const C=(e=i.INDICATOR_POSITION_LEFT)=>e===i.INDICATOR_POSITION_LEFT,O=n.map((e,t)=>{const n=e.dataField===f,i=e.dataField===f;return o.default.createElement(a.default,{index:t,key:e.dataField,column:e,onSort:r,sorting:n,sortOrder:p,globalSortCaret:_,isLastSorting:i,onFilter:d,currFilters:v,onExternalFilter:g,filterPosition:E})});return h&&!h.hideSelectColumn&&(C(h.selectColumnPosition)?O.unshift(o.default.createElement(b,{key:"selection"})):O.push(o.default.createElement(b,{key:"selection"}))),m?.showExpandColumn&&(C(m.expandColumnPosition)?O.unshift(o.default.createElement(x,{key:"expansion"})):O.push(o.default.createElement(x,{key:"expansion"}))),o.default.createElement("thead",{className:y},o.default.createElement("tr",{className:t},O))}},5442(t){"use strict";t.exports=e},6003(e){"use strict";e.exports=t},6023(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(6942)),i=r(n(5442)),a=r(n(1630)),s=r(n(3955)),l=r(n(105)),u=(0,a.default)();t.default=e=>t=>i.default.createElement(u.Consumer,null,n=>((t,n)=>{if(!n)return[];let r="",a="";const u=t.value,c=s.default.contains(n.expanded,u),d=s.default.contains(n.isClosing,u),f=!n.nonExpandable||!s.default.contains(n.nonExpandable,u);return c&&(r=s.default.isFunction(n.parentClassName)?n.parentClassName(c,t.row,t.rowIndex):n.parentClassName||"",a=s.default.isFunction(n.className)?n.className(c,t.row,t.rowIndex):n.className||""),[i.default.createElement(e,{...t,key:u,expanded:c,expandable:f,expandRow:{...n},className:(0,o.default)(t.className,r)}),c||d?i.default.createElement(l.default,{key:`${u}-expanding`,colSpan:t.visibleColumnSize,expanded:c,onClosed:()=>n.onClosed(u),className:a},n.renderer(t.row,t.rowIndex)):null]})(t,n))},6032(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=n(6561),c=s(n(6023)),d=s(n(3689)),f=s(n(629)),p=s(n(285)),h=s(n(3502)),m=s(n(3955));class v extends l.Component{constructor(e){super(e);const{keyField:t,cellEdit:n,selectRow:r,expandRow:o}=e;n?.createContext&&(this.EditingCell=n.createEditingCell(m.default,n.options.onStartEdit));let i=h.default;const a=r?.mode!==u.ROW_SELECT_DISABLED,s=!!o.renderer;s&&(i=(0,c.default)(f.default)),a&&(i=(0,d.default)(s?i:f.default)),n?.createContext&&(i=n.withRowLevelCellEdit(i,a,t,m.default)),this.RowComponent=i}render(){const{columns:e,data:t,tabIndexCell:n,keyField:r,isEmpty:o,noDataIndication:i,visibleColumnSize:a,cellEdit:s,selectRow:c,rowStyle:d,rowClasses:f,rowEvents:h,expandRow:v,className:g}=this.props;let E;if(o){const e=m.default.isFunction(i)?i():i;if(!e)return null;E=l.default.createElement(p.default,{content:e,colSpan:a})}else{const o=c?.mode!==u.ROW_SELECT_DISABLED,i=!!v.renderer,p={};s?.createContext&&(p.EditingCellComponent=this.EditingCell),(o||i)&&(p.expandRow=v,p.selectRow=c),E=t.map((t,o)=>{if(t){const i=m.default.get(t,r),u={key:i,row:t,tabIndexCell:n,columns:e,keyField:r,cellEdit:s,value:i,rowIndex:o,visibleColumnSize:a,attrs:h||{},...p};return u.style=m.default.isFunction(d)?d(t,o):d,u.className=m.default.isFunction(f)?f(t,o):f,l.default.createElement(this.RowComponent,{...u})}return null})}return l.default.createElement("tbody",{className:g},E)}}t.default=v},6310(e,t,n){"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(null,arguments)}function o(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}function i(e,t){return i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},i(e,t)}function a(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,i(e,t)}function s(e,t){return e.replace(new RegExp("(^|\\s)"+t+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}n.r(t),n.d(t,{CSSTransition:()=>w,ReplaceTransition:()=>I,SwitchTransition:()=>K,Transition:()=>x,TransitionGroup:()=>D,config:()=>f});var l=n(5442),u=n.n(l),c=n(6003),d=n.n(c);const f={disabled:!1},p=u().createContext(null);var h=function(e){return e.scrollTop},m="unmounted",v="exited",g="entering",E="entered",_="exiting",y=function(e){function t(t,n){var r;r=e.call(this,t,n)||this;var o,i=n&&!n.isMounting?t.enter:t.appear;return r.appearStatus=null,t.in?i?(o=v,r.appearStatus=g):o=E:o=t.unmountOnExit||t.mountOnEnter?m:v,r.state={status:o},r.nextCallback=null,r}a(t,e),t.getDerivedStateFromProps=function(e,t){return e.in&&t.status===m?{status:v}:null};var n=t.prototype;return n.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},n.componentDidUpdate=function(e){var t=null;if(e!==this.props){var n=this.state.status;this.props.in?n!==g&&n!==E&&(t=g):n!==g&&n!==E||(t=_)}this.updateStatus(!1,t)},n.componentWillUnmount=function(){this.cancelNextCallback()},n.getTimeouts=function(){var e,t,n,r=this.props.timeout;return e=t=n=r,null!=r&&"number"!=typeof r&&(e=r.exit,t=r.enter,n=void 0!==r.appear?r.appear:t),{exit:e,enter:t,appear:n}},n.updateStatus=function(e,t){if(void 0===e&&(e=!1),null!==t)if(this.cancelNextCallback(),t===g){if(this.props.unmountOnExit||this.props.mountOnEnter){var n=this.props.nodeRef?this.props.nodeRef.current:d().findDOMNode(this);n&&h(n)}this.performEnter(e)}else this.performExit();else this.props.unmountOnExit&&this.state.status===v&&this.setState({status:m})},n.performEnter=function(e){var t=this,n=this.props.enter,r=this.context?this.context.isMounting:e,o=this.props.nodeRef?[r]:[d().findDOMNode(this),r],i=o[0],a=o[1],s=this.getTimeouts(),l=r?s.appear:s.enter;!e&&!n||f.disabled?this.safeSetState({status:E},function(){t.props.onEntered(i)}):(this.props.onEnter(i,a),this.safeSetState({status:g},function(){t.props.onEntering(i,a),t.onTransitionEnd(l,function(){t.safeSetState({status:E},function(){t.props.onEntered(i,a)})})}))},n.performExit=function(){var e=this,t=this.props.exit,n=this.getTimeouts(),r=this.props.nodeRef?void 0:d().findDOMNode(this);t&&!f.disabled?(this.props.onExit(r),this.safeSetState({status:_},function(){e.props.onExiting(r),e.onTransitionEnd(n.exit,function(){e.safeSetState({status:v},function(){e.props.onExited(r)})})})):this.safeSetState({status:v},function(){e.props.onExited(r)})},n.cancelNextCallback=function(){null!==this.nextCallback&&(this.nextCallback.cancel(),this.nextCallback=null)},n.safeSetState=function(e,t){t=this.setNextCallback(t),this.setState(e,t)},n.setNextCallback=function(e){var t=this,n=!0;return this.nextCallback=function(r){n&&(n=!1,t.nextCallback=null,e(r))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},n.onTransitionEnd=function(e,t){this.setNextCallback(t);var n=this.props.nodeRef?this.props.nodeRef.current:d().findDOMNode(this),r=null==e&&!this.props.addEndListener;if(n&&!r){if(this.props.addEndListener){var o=this.props.nodeRef?[this.nextCallback]:[n,this.nextCallback],i=o[0],a=o[1];this.props.addEndListener(i,a)}null!=e&&setTimeout(this.nextCallback,e)}else setTimeout(this.nextCallback,0)},n.render=function(){var e=this.state.status;if(e===m)return null;var t=this.props,n=t.children,r=(t.in,t.mountOnEnter,t.unmountOnExit,t.appear,t.enter,t.exit,t.timeout,t.addEndListener,t.onEnter,t.onEntering,t.onEntered,t.onExit,t.onExiting,t.onExited,t.nodeRef,o(t,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]));return u().createElement(p.Provider,{value:null},"function"==typeof n?n(e,r):u().cloneElement(u().Children.only(n),r))},t}(u().Component);function b(){}y.contextType=p,y.propTypes={},y.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:b,onEntering:b,onEntered:b,onExit:b,onExiting:b,onExited:b},y.UNMOUNTED=m,y.EXITED=v,y.ENTERING=g,y.ENTERED=E,y.EXITING=_;const x=y;var C=function(e,t){return e&&t&&t.split(" ").forEach(function(t){return r=t,void((n=e).classList?n.classList.remove(r):"string"==typeof n.className?n.className=s(n.className,r):n.setAttribute("class",s(n.className&&n.className.baseVal||"",r)));var n,r})},O=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).appliedClasses={appear:{},enter:{},exit:{}},t.onEnter=function(e,n){var r=t.resolveArguments(e,n),o=r[0],i=r[1];t.removeClasses(o,"exit"),t.addClass(o,i?"appear":"enter","base"),t.props.onEnter&&t.props.onEnter(e,n)},t.onEntering=function(e,n){var r=t.resolveArguments(e,n),o=r[0],i=r[1]?"appear":"enter";t.addClass(o,i,"active"),t.props.onEntering&&t.props.onEntering(e,n)},t.onEntered=function(e,n){var r=t.resolveArguments(e,n),o=r[0],i=r[1]?"appear":"enter";t.removeClasses(o,i),t.addClass(o,i,"done"),t.props.onEntered&&t.props.onEntered(e,n)},t.onExit=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"appear"),t.removeClasses(n,"enter"),t.addClass(n,"exit","base"),t.props.onExit&&t.props.onExit(e)},t.onExiting=function(e){var n=t.resolveArguments(e)[0];t.addClass(n,"exit","active"),t.props.onExiting&&t.props.onExiting(e)},t.onExited=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"exit"),t.addClass(n,"exit","done"),t.props.onExited&&t.props.onExited(e)},t.resolveArguments=function(e,n){return t.props.nodeRef?[t.props.nodeRef.current,e]:[e,n]},t.getClassNames=function(e){var n=t.props.classNames,r="string"==typeof n,o=r?""+(r&&n?n+"-":"")+e:n[e];return{baseClassName:o,activeClassName:r?o+"-active":n[e+"Active"],doneClassName:r?o+"-done":n[e+"Done"]}},t}a(t,e);var n=t.prototype;return n.addClass=function(e,t,n){var r=this.getClassNames(t)[n+"ClassName"],o=this.getClassNames("enter").doneClassName;"appear"===t&&"done"===n&&o&&(r+=" "+o),"active"===n&&e&&h(e),r&&(this.appliedClasses[t][n]=r,function(e,t){e&&t&&t.split(" ").forEach(function(t){return r=t,void((n=e).classList?n.classList.add(r):function(e,t){return e.classList?!!t&&e.classList.contains(t):-1!==(" "+(e.className.baseVal||e.className)+" ").indexOf(" "+t+" ")}(n,r)||("string"==typeof n.className?n.className=n.className+" "+r:n.setAttribute("class",(n.className&&n.className.baseVal||"")+" "+r)));var n,r})}(e,r))},n.removeClasses=function(e,t){var n=this.appliedClasses[t],r=n.base,o=n.active,i=n.done;this.appliedClasses[t]={},r&&C(e,r),o&&C(e,o),i&&C(e,i)},n.render=function(){var e=this.props,t=(e.classNames,o(e,["classNames"]));return u().createElement(x,r({},t,{onEnter:this.onEnter,onEntered:this.onEntered,onEntering:this.onEntering,onExit:this.onExit,onExiting:this.onExiting,onExited:this.onExited}))},t}(u().Component);O.defaultProps={classNames:""},O.propTypes={};const w=O;function S(e,t){var n=Object.create(null);return e&&l.Children.map(e,function(e){return e}).forEach(function(e){n[e.key]=function(e){return t&&(0,l.isValidElement)(e)?t(e):e}(e)}),n}function R(e,t,n){return null!=n[t]?n[t]:e.props[t]}function P(e,t,n){var r=S(e.children),o=function(e,t){function n(n){return n in t?t[n]:e[n]}e=e||{},t=t||{};var r,o=Object.create(null),i=[];for(var a in e)a in t?i.length&&(o[a]=i,i=[]):i.push(a);var s={};for(var l in t){if(o[l])for(r=0;r<o[l].length;r++){var u=o[l][r];s[o[l][r]]=n(u)}s[l]=n(l)}for(r=0;r<i.length;r++)s[i[r]]=n(i[r]);return s}(t,r);return Object.keys(o).forEach(function(i){var a=o[i];if((0,l.isValidElement)(a)){var s=i in t,u=i in r,c=t[i],d=(0,l.isValidElement)(c)&&!c.props.in;!u||s&&!d?u||!s||d?u&&s&&(0,l.isValidElement)(c)&&(o[i]=(0,l.cloneElement)(a,{onExited:n.bind(null,a),in:c.props.in,exit:R(a,"exit",e),enter:R(a,"enter",e)})):o[i]=(0,l.cloneElement)(a,{in:!1}):o[i]=(0,l.cloneElement)(a,{onExited:n.bind(null,a),in:!0,exit:R(a,"exit",e),enter:R(a,"enter",e)})}}),o}var j=Object.values||function(e){return Object.keys(e).map(function(t){return e[t]})},N=function(e){function t(t,n){var r,o=(r=e.call(this,t,n)||this).handleExited.bind(function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(r));return r.state={contextValue:{isMounting:!0},handleExited:o,firstRender:!0},r}a(t,e);var n=t.prototype;return n.componentDidMount=function(){this.mounted=!0,this.setState({contextValue:{isMounting:!1}})},n.componentWillUnmount=function(){this.mounted=!1},t.getDerivedStateFromProps=function(e,t){var n,r,o=t.children,i=t.handleExited;return{children:t.firstRender?(n=e,r=i,S(n.children,function(e){return(0,l.cloneElement)(e,{onExited:r.bind(null,e),in:!0,appear:R(e,"appear",n),enter:R(e,"enter",n),exit:R(e,"exit",n)})})):P(e,o,i),firstRender:!1}},n.handleExited=function(e,t){var n=S(this.props.children);e.key in n||(e.props.onExited&&e.props.onExited(t),this.mounted&&this.setState(function(t){var n=r({},t.children);return delete n[e.key],{children:n}}))},n.render=function(){var e=this.props,t=e.component,n=e.childFactory,r=o(e,["component","childFactory"]),i=this.state.contextValue,a=j(this.state.children).map(n);return delete r.appear,delete r.enter,delete r.exit,null===t?u().createElement(p.Provider,{value:i},a):u().createElement(p.Provider,{value:i},u().createElement(t,r,a))},t}(u().Component);N.propTypes={},N.defaultProps={component:"div",childFactory:function(e){return e}};const D=N;var T=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).handleEnter=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEnter",0,n)},t.handleEntering=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEntering",0,n)},t.handleEntered=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEntered",0,n)},t.handleExit=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExit",1,n)},t.handleExiting=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExiting",1,n)},t.handleExited=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExited",1,n)},t}a(t,e);var n=t.prototype;return n.handleLifecycle=function(e,t,n){var r,o=this.props.children,i=u().Children.toArray(o)[t];if(i.props[e]&&(r=i.props)[e].apply(r,n),this.props[e]){var a=i.props.nodeRef?void 0:d().findDOMNode(this);this.props[e](a)}},n.render=function(){var e=this.props,t=e.children,n=e.in,r=o(e,["children","in"]),i=u().Children.toArray(t),a=i[0],s=i[1];return delete r.onEnter,delete r.onEntering,delete r.onEntered,delete r.onExit,delete r.onExiting,delete r.onExited,u().createElement(D,r,n?u().cloneElement(a,{key:"first",onEnter:this.handleEnter,onEntering:this.handleEntering,onEntered:this.handleEntered}):u().cloneElement(s,{key:"second",onEnter:this.handleExit,onEntering:this.handleExiting,onEntered:this.handleExited}))},t}(u().Component);T.propTypes={};const I=T;var M,F;var k="out-in",A="in-out",L=function(e,t,n){return function(){var r;e.props[t]&&(r=e.props)[t].apply(r,arguments),n()}},B=((M={})[k]=function(e){var t=e.current,n=e.changeState;return u().cloneElement(t,{in:!1,onExited:L(t,"onExited",function(){n(g,null)})})},M[A]=function(e){var t=e.current,n=e.changeState,r=e.children;return[t,u().cloneElement(r,{in:!0,onEntered:L(r,"onEntered",function(){n(g)})})]},M),U=((F={})[k]=function(e){var t=e.children,n=e.changeState;return u().cloneElement(t,{in:!0,onEntered:L(t,"onEntered",function(){n(E,u().cloneElement(t,{in:!0}))})})},F[A]=function(e){var t=e.current,n=e.children,r=e.changeState;return[u().cloneElement(t,{in:!1,onExited:L(t,"onExited",function(){r(E,u().cloneElement(n,{in:!0}))})}),u().cloneElement(n,{in:!0})]},F),H=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).state={status:E,current:null},t.appeared=!1,t.changeState=function(e,n){void 0===n&&(n=t.state.current),t.setState({status:e,current:n})},t}a(t,e);var n=t.prototype;return n.componentDidMount=function(){this.appeared=!0},t.getDerivedStateFromProps=function(e,t){return null==e.children?{current:null}:t.status===g&&e.mode===A?{status:g}:!t.current||(n=t.current,r=e.children,n===r||u().isValidElement(n)&&u().isValidElement(r)&&null!=n.key&&n.key===r.key)?{current:u().cloneElement(e.children,{in:!0})}:{status:_};var n,r},n.render=function(){var e,t=this.props,n=t.children,r=t.mode,o=this.state,i=o.status,a=o.current,s={children:n,current:a,changeState:this.changeState,status:i};switch(i){case g:e=U[r](s);break;case _:e=B[r](s);break;case E:e=a}return u().createElement(p.Provider,{value:{isMounting:!this.appeared}},e)},t}(u().Component);H.propTypes={},H.defaultProps={mode:k};const K=H},6510(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=(0,n(8145).createSelectionContext)();t.default=e=>t=>o.default.createElement(i.Consumer,null,n=>o.default.createElement(e,{...t,...n}))},6561(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TYPE_DATE=t.TYPE_BOOLEAN=t.TYPE_NUMBER=t.TYPE_STRING=t.INDICATOR_POSITION_RIGHT=t.INDICATOR_POSITION_LEFT=t.SORT_DESC=t.SORT_ASC=t.FILTERS_POSITION_BOTTOM=t.FILTERS_POSITION_TOP=t.FILTERS_POSITION_INLINE=t.CHECKBOX_STATUS_UNCHECKED=t.CHECKBOX_STATUS_CHECKED=t.CHECKBOX_STATUS_INDETERMINATE=t.ROW_SELECT_DISABLED=t.ROW_SELECT_MULTIPLE=t.ROW_SELECT_SINGLE=void 0,t.ROW_SELECT_SINGLE="radio",t.ROW_SELECT_MULTIPLE="checkbox",t.ROW_SELECT_DISABLED="ROW_SELECT_DISABLED",t.CHECKBOX_STATUS_INDETERMINATE="indeterminate",t.CHECKBOX_STATUS_CHECKED="checked",t.CHECKBOX_STATUS_UNCHECKED="unchecked",t.FILTERS_POSITION_INLINE="inline",t.FILTERS_POSITION_TOP="top",t.FILTERS_POSITION_BOTTOM="bottom",t.SORT_ASC="asc",t.SORT_DESC="desc",t.INDICATOR_POSITION_LEFT="left",t.INDICATOR_POSITION_RIGHT="right",t.TYPE_STRING="string",t.TYPE_NUMBER="number",t.TYPE_BOOLEAN="bool",t.TYPE_DATE="date"},6572(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=(0,r(n(1630)).default)();t.default=e=>()=>o.default.createElement(i.Consumer,null,t=>o.default.createElement(e,{...t}))},6645(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t});Object.defineProperty(t,"__esModule",{value:!0});const s=a(n(1590)),l=a(n(8476)),u=a(n(355)),c=a(n(4130)),d=a(n(3742)),f=a(n(2190));t.default={...u,...c,...s,...l,...d,...f}},6942(e,t){var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e="",t=0;t<arguments.length;t++){var n=arguments[t];n&&(e=a(e,i(n)))}return e}function i(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return o.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var n in e)r.call(e,n)&&e[n]&&(t=a(t,n));return t}function a(e,t){return t?e?e+" "+t:e+t:e}e.exports?(o.default=o,e.exports=o):void 0===(n=function(){return o}.apply(t,[]))||(e.exports=n)}()},7007(e){"use strict";var t,n="object"==typeof Reflect?Reflect:null,r=n&&"function"==typeof n.apply?n.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)};t=n&&"function"==typeof n.ownKeys?n.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var o=Number.isNaN||function(e){return e!=e};function i(){i.init.call(this)}e.exports=i,e.exports.once=function(e,t){return new Promise(function(n,r){function o(n){e.removeListener(t,i),r(n)}function i(){"function"==typeof e.removeListener&&e.removeListener("error",o),n([].slice.call(arguments))}m(e,t,i,{once:!0}),"error"!==t&&function(e,t,n){"function"==typeof e.on&&m(e,"error",t,n)}(e,o,{once:!0})})},i.EventEmitter=i,i.prototype._events=void 0,i.prototype._eventsCount=0,i.prototype._maxListeners=void 0;var a=10;function s(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function l(e){return void 0===e._maxListeners?i.defaultMaxListeners:e._maxListeners}function u(e,t,n,r){var o,i,a,u;if(s(n),void 0===(i=e._events)?(i=e._events=Object.create(null),e._eventsCount=0):(void 0!==i.newListener&&(e.emit("newListener",t,n.listener?n.listener:n),i=e._events),a=i[t]),void 0===a)a=i[t]=n,++e._eventsCount;else if("function"==typeof a?a=i[t]=r?[n,a]:[a,n]:r?a.unshift(n):a.push(n),(o=l(e))>0&&a.length>o&&!a.warned){a.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=a.length,u=c,console&&console.warn&&console.warn(u)}return e}function c(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function d(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},o=c.bind(r);return o.listener=n,r.wrapFn=o,o}function f(e,t,n){var r=e._events;if(void 0===r)return[];var o=r[t];return void 0===o?[]:"function"==typeof o?n?[o.listener||o]:[o]:n?function(e){for(var t=new Array(e.length),n=0;n<t.length;++n)t[n]=e[n].listener||e[n];return t}(o):h(o,o.length)}function p(e){var t=this._events;if(void 0!==t){var n=t[e];if("function"==typeof n)return 1;if(void 0!==n)return n.length}return 0}function h(e,t){for(var n=new Array(t),r=0;r<t;++r)n[r]=e[r];return n}function m(e,t,n,r){if("function"==typeof e.on)r.once?e.once(t,n):e.on(t,n);else{if("function"!=typeof e.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,function o(i){r.once&&e.removeEventListener(t,o),n(i)})}}Object.defineProperty(i,"defaultMaxListeners",{enumerable:!0,get:function(){return a},set:function(e){if("number"!=typeof e||e<0||o(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");a=e}}),i.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},i.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||o(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},i.prototype.getMaxListeners=function(){return l(this)},i.prototype.emit=function(e){for(var t=[],n=1;n<arguments.length;n++)t.push(arguments[n]);var o="error"===e,i=this._events;if(void 0!==i)o=o&&void 0===i.error;else if(!o)return!1;if(o){var a;if(t.length>0&&(a=t[0]),a instanceof Error)throw a;var s=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw s.context=a,s}var l=i[e];if(void 0===l)return!1;if("function"==typeof l)r(l,this,t);else{var u=l.length,c=h(l,u);for(n=0;n<u;++n)r(c[n],this,t)}return!0},i.prototype.addListener=function(e,t){return u(this,e,t,!1)},i.prototype.on=i.prototype.addListener,i.prototype.prependListener=function(e,t){return u(this,e,t,!0)},i.prototype.once=function(e,t){return s(t),this.on(e,d(this,e,t)),this},i.prototype.prependOnceListener=function(e,t){return s(t),this.prependListener(e,d(this,e,t)),this},i.prototype.removeListener=function(e,t){var n,r,o,i,a;if(s(t),void 0===(r=this._events))return this;if(void 0===(n=r[e]))return this;if(n===t||n.listener===t)0===--this._eventsCount?this._events=Object.create(null):(delete r[e],r.removeListener&&this.emit("removeListener",e,n.listener||t));else if("function"!=typeof n){for(o=-1,i=n.length-1;i>=0;i--)if(n[i]===t||n[i].listener===t){a=n[i].listener,o=i;break}if(o<0)return this;0===o?n.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(n,o),1===n.length&&(r[e]=n[0]),void 0!==r.removeListener&&this.emit("removeListener",e,a||t)}return this},i.prototype.off=i.prototype.removeListener,i.prototype.removeAllListeners=function(e){var t,n,r;if(void 0===(n=this._events))return this;if(void 0===n.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==n[e]&&(0===--this._eventsCount?this._events=Object.create(null):delete n[e]),this;if(0===arguments.length){var o,i=Object.keys(n);for(r=0;r<i.length;++r)"removeListener"!==(o=i[r])&&this.removeAllListeners(o);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=n[e]))this.removeListener(e,t);else if(void 0!==t)for(r=t.length-1;r>=0;r--)this.removeListener(e,t[r]);return this},i.prototype.listeners=function(e){return f(this,e,!0)},i.prototype.rawListeners=function(e){return f(this,e,!1)},i.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):p.call(e,t)},i.prototype.listenerCount=p,i.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},7351(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.RowEventDelegater=void 0;const o=n(6561),i=r(n(3955)),a=["onClick","onDoubleClick","onMouseEnter","onMouseLeave","onContextMenu","onAuxClick"];t.RowEventDelegater=e=>class extends e{constructor(...e){super(...e),this.clickNum=0,this.createDefaultEventHandler=this.createDefaultEventHandler.bind(this),this.createClickEventHandler=this.createClickEventHandler.bind(this)}createClickEventHandler(e){return t=>{const{row:n,selected:r,keyField:a,selectable:s,expandable:l,rowIndex:u,expanded:c,expandRow:d,selectRow:f,DELAY_FOR_DBCLICK:p}=this.props,h=()=>{e&&e(t,n,u);const p=i.default.get(n,a);d&&l&&!d.expandByColumnOnly&&(f.mode!==o.ROW_SELECT_DISABLED&&f.clickToExpand||f.mode===o.ROW_SELECT_DISABLED)&&d.onRowExpand(p,!c,u,t),f.clickToSelect&&s&&f.onRowSelect(p,!r,u,t)};p?(this.clickNum+=1,i.default.debounce(()=>{1===this.clickNum&&h(),this.clickNum=0},p)()):h()}}createDefaultEventHandler(e){return t=>{const{row:n,rowIndex:r}=this.props;e(t,n,r)}}delegate(e={}){const t={...e};return Object.keys(e).forEach(n=>{i.default.includes(a,n)&&(t[n]=this.createDefaultEventHandler(e[n]))}),t}}},7572(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.CheckBox=void 0;const l=a(n(5442)),u=n(6561),c=s(n(3955)),d=n(3761);t.CheckBox=({className:e,checked:t,indeterminate:n})=>l.default.createElement("input",{type:"checkbox",checked:t,className:e,ref:e=>{e&&(e.indeterminate=n)},onChange:()=>{}});class f extends l.Component{constructor(e){super(e),this.handleCheckBoxClick=this.handleCheckBoxClick.bind(this)}shouldComponentUpdate(e){const{mode:t,checkedStatus:n}=this.props;return t!==u.ROW_SELECT_SINGLE&&e.checkedStatus!==n}handleCheckBoxClick(e){const{onAllRowsSelect:t,checkedStatus:n}=this.props;t(e,n===u.CHECKBOX_STATUS_CHECKED||n===u.CHECKBOX_STATUS_INDETERMINATE)}render(){const{mode:e,checkedStatus:n,selectionHeaderRenderer:r,hideSelectAll:o,headerColumnStyle:i}=this.props;if(o)return l.default.createElement("th",{"data-row-selection":!0});const a=n===u.CHECKBOX_STATUS_CHECKED,s=n===u.CHECKBOX_STATUS_INDETERMINATE,f={};let p;return(r||e===u.ROW_SELECT_MULTIPLE)&&(f.onClick=this.handleCheckBoxClick),f.style=c.default.isFunction(i)?i(n):i,l.default.createElement(d.BootstrapContext.Consumer,null,({bootstrap4:n})=>(r?p=r({mode:e,checked:a,indeterminate:s}):e===u.ROW_SELECT_MULTIPLE&&(p=l.default.createElement(t.CheckBox,{...this.props,checked:a,className:n?"selection-input-4":"",indeterminate:s})),l.default.createElement("th",{className:"selection-cell-header","data-row-selection":!0,...f},p)))}}t.default=f},7701(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=r(n(7920)),a=r(n(1400)),s=r(n(3955));t.default=e=>{const{data:t=[],className:n,columns:r=[],selectRow:l,expandRow:u}=e;return o.default.createElement("tfoot",null,o.default.createElement(a.default,{renderContent:function(){return r.map((e,n)=>{if(void 0===e.footer||null===e.footer)return!1;const r=s.default.pluck(t,e.dataField);return o.default.createElement(i.default,{index:n,key:e.dataField,column:e,columnData:r})})},selectRow:l,expandRow:u,className:n,cellEl:"th"}))}},7723(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=i(n(1031)),s=i(n(9421));t.default=(0,s.default)(a.default),o(n(6561),t)},7920(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=s(n(6942)),u=a(n(5442)),c=n(1859),d=s(n(3955));class f extends((0,c.CellEventDelegater)(u.Component)){render(){const{index:e,column:t,columnData:n}=this.props,{footer:r,footerTitle:o,footerAlign:i,footerFormatter:a,footerEvents:s,footerClasses:c,footerStyle:f,footerAttrs:p}=t,h=this.delegate(s),m={...d.default.isFunction(p)?p(t,e):p,...h};let v="";d.default.isString(r)?v=r:d.default.isFunction(r)&&(v=r(n||[],t,e||0));let g={};const E=d.default.isFunction(c)?c(t,e||0):c;f&&(g=d.default.isFunction(f)?f(t,e||0):f,g=g?{...g}:g),o&&(m.title=d.default.isFunction(o)?o(t,e||0):v),i&&(g.textAlign=d.default.isFunction(i)?i(t,e||0):i),E&&(m.className=(0,l.default)(m.className,E)),d.default.isEmptyObject(g)||(m.style=g);const _=a?a(t,e||0,{text:v}):v;return u.default.createElement("th",m,_)}}t.default=f},8145(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.createSelectionContext=void 0;const l=a(n(5442)),u=s(n(3955)),c=n(6561),d=s(n(6645)),f=n(4130),p=l.default.createContext({});class h extends l.Component{constructor(e){super(e),this.handleRowSelect=(e,t,n,r)=>{const{data:o,keyField:i,selectRow:{mode:a,onSelect:s}}=this.props;let l=[...this.selected],u=!0;if(s){u=s(d.default.getRowByRowId(o,i,e),t,n,r)}!0!==u&&void 0!==u||(a===c.ROW_SELECT_SINGLE?l=[e]:t?l.push(e):l=l.filter(t=>t!==e)),this.selected=l,this.isHandleRowSelect=!0,this.forceUpdate()},this.handleAllRowsSelect=(e,t)=>{const{data:n,keyField:r,selectRow:{onSelectAll:o,nonSelectable:i}}=this.props,{selected:a}=this;let s,l;s=t?a.filter(e=>void 0===n.find(t=>u.default.get(t,r)===e)):a.concat(d.default.selectableKeys(n,r,i)),o&&(l=o(!t,d.default.getSelectedRows(n,r,t?a:s),e),Array.isArray(l)&&(s=l)),this.selected=s,this.isHandleRowSelect=!0,this.forceUpdate()},this.selected=e.selectRow.selected||[],this.isHandleRowSelect=!1}getSelected(){return this.selected}componentDidUpdate(e){this.isHandleRowSelect?this.isHandleRowSelect=!1:e.selectRow&&e.selectRow.selected&&!u.default.isEqual(e.selectRow.selected,this.selected)&&(this.selected=e.selectRow.selected,this.forceUpdate())}render(){const{allRowsSelected:e,allRowsNotSelected:t}=(0,f.getSelectionSummary)(this.props.data,this.props.keyField,this.selected);let n;return n=e?c.CHECKBOX_STATUS_CHECKED:t?c.CHECKBOX_STATUS_UNCHECKED:c.CHECKBOX_STATUS_INDETERMINATE,l.default.createElement(p.Provider,{value:{...this.props.selectRow,selected:this.selected,onRowSelect:this.handleRowSelect,onAllRowsSelect:this.handleAllRowsSelect,allRowsSelected:e,allRowsNotSelected:t,checkedStatus:n}},this.props.children)}}t.createSelectionContext=()=>({Provider:h,Consumer:p.Consumer})},8232(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=n(1859),c=s(n(3955));class d extends((0,u.CellEventDelegater)(l.Component)){constructor(e){super(e),this.createHandleEditingCell=this.createHandleEditingCell.bind(this)}shouldComponentUpdate(e){let t=!1;return t=e.column.isDummyField?!c.default.isEqual(this.props.row,e.row):c.default.get(this.props.row,this.props.column.dataField)!==c.default.get(e.row,e.column.dataField),!!t||(t=!((!e.column.formatter||c.default.isEqual(this.props.row,e.row))&&this.props.column.hidden===e.column.hidden&&this.props.column.isDummyField===e.column.isDummyField&&this.props.rowindex===e.rowindex&&this.props.columnindex===e.columnindex&&this.props.className===e.className&&this.props.title===e.title&&this.props.editable===e.editable&&this.props.clicktoedit===e.clicktoedit&&this.props.dbclicktoedit===e.dbclicktoedit&&c.default.isEqual(this.props.style,e.style)&&c.default.isEqual(this.props.column.formatExtraData,e.column.formatExtraData)&&c.default.isEqual(this.props.column.events,e.column.events)&&c.default.isEqual(this.props.column.attrs,e.column.attrs)&&this.props.tabIndex===e.tabIndex),t)}createHandleEditingCell(e){return t=>{const{atstart:n,rowindex:r,columnindex:o,clicktoedit:i,dbclicktoedit:a}=this.props;(i||a)&&c.default.isFunction(e)&&e(t),n&&n(r,o)}}render(){const{row:e,column:t,atstart:n,rowindex:r,columnindex:o,editable:i,clicktoedit:a,dbclicktoedit:s,...u}=this.props,{dataField:d,formatter:f,formatExtraData:p}=t,h=this.delegate({...u});let m=t.isDummyField?null:c.default.get(e,d);return f&&(m=t.formatter(m,e,r,p)),"true"===a&&"true"===i?h.onClick=this.createHandleEditingCell(h.onClick):"true"===s&&"true"===i&&(h.onDoubleClick=this.createHandleEditingCell(h.onDoubleClick)),l.default.createElement("td",{...h},"boolean"==typeof m?`${m}`:m)}}t.default=d},8476(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.editCell=void 0;const o=r(n(3955)),i=n(355);t.editCell=(e,t,n,r,a)=>{const s=(0,i.getRowByRowId)(e,t,n);s&&o.default.set(s,r,a)}},8610(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=s(n(6942)),u=a(n(5442)),c=n(6561),d=n(1859),f=s(n(184)),p=s(n(1965)),h=s(n(3955));class m extends((0,d.CellEventDelegater)(u.Component)){render(){const{column:e,index:t,onSort:n,sorting:r,sortOrder:o,isLastSorting:i,onFilter:a,currFilters:s,filterPosition:d,onExternalFilter:m,globalSortCaret:v}=this.props,{text:g,sort:E,sortCaret:_,filter:y,filterRenderer:b,headerTitle:x,headerAlign:C,headerFormatter:O,headerEvents:w,headerClasses:S,headerStyle:R,headerAttrs:P,headerSortingClasses:j,headerSortingStyle:N}=e,D=_||v,T=this.delegate(w),I=h.default.isFunction(P)?P(e,t):P||{},M={...I,...T,tabIndex:h.default.isDefined(I.tabIndex)?I.tabIndex:0};let F,k,A={},L=h.default.isFunction(S)?S(e,t):S;if(R&&(A=h.default.isFunction(R)?R(e,t):R,A=A?{...A}:A),x&&(M.title=h.default.isFunction(x)?x(e,t):g),C&&(A.textAlign=h.default.isFunction(C)?C(e,t):C),E){const a=M.onClick,s=M.onKeyDown;M["aria-label"]=r?`${g} sort ${o}`:`${g} sortable`,M.onKeyUp=t=>{"Enter"===t.key&&(n?.(e),h.default.isFunction(s)&&s(t))},M.onClick=t=>{n?.(e),h.default.isFunction(a)&&a(t)},M.className=(0,l.default)(M.className,"sortable"),r?(F=D?D(o||c.SORT_DESC,e):u.default.createElement(f.default,{order:o}),L=(0,l.default)(L,h.default.isFunction(j)?j(e,o,i,t):j),A={...A,...h.default.isFunction(N)?N(e,o,i,t):N}):F=D?D(void 0,e):u.default.createElement(p.default,null)}if(L&&(M.className=(0,l.default)(M.className,L)),h.default.isEmptyObject(A)||(M.style=A),d===c.FILTERS_POSITION_INLINE)if(b){const t=m?.(e,y?.props.type||"");k=b(t,e)}else y&&(k=u.default.createElement(y.Filter,{...y.props,filterState:s?.[e.dataField],onFilter:a,column:e}));const B=O?O(e,t,{sortElement:F,filterElement:k}):g;return O?u.default.createElement("th",M,B):u.default.createElement("th",M,B,F,k)}}t.default=m},9421(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(7007)),i=r(n(5442)),a=r(n(9459)),s=r(n(6645)),l=r(n(3955)),u=n(3761),c=r(n(3285)),d=r(n(3519)),f=r(n(1630)),p=n(8145),h=r(n(4607));t.default=e=>class extends((0,a.default)(e)){constructor(e){if(super(e),this.DataContext=(0,d.default)(),e.registerExposedAPI){const t=new o.default;t.on("get.table.data",e=>e.result=this.table.getData()),t.on("get.selected.rows",e=>e.result=this.selectionContext.getSelected()),t.on("get.filtered.rows",e=>{this.searchContext?e.result=this.searchContext.getSearched():this.filterContext?e.result=this.filterContext.getFiltered():e.result=this.table.getData()}),e.registerExposedAPI(t)}e.columns.filter(e=>e.sort).length>0&&(this.SortContext=(0,h.default)(s.default,this.isRemoteSort,this.handleRemoteSortChange)),(e.columnToggle||e.columns.filter(e=>e.hidden).length>0)&&(this.ColumnContext=(0,c.default)()),e.selectRow&&(this.SelectionContext=(0,p.createSelectionContext)()),e.expandRow&&(this.RowExpandContext=(0,f.default)()),e.cellEdit&&e.cellEdit.createContext&&(this.CellEditContext=e.cellEdit.createContext(l.default,s.default,this.isRemoteCellEdit,this.handleRemoteCellChange)),e.filter&&(this.FilterContext=e.filter.createContext(l.default,this.isRemoteFiltering,this.handleRemoteFilterChange)),e.pagination&&(this.PaginationContext=e.pagination.createContext()),e.search&&e.search.searchContext&&(this.SearchContext=e.search.searchContext(l.default,this.isRemoteSearch,this.handleRemoteSearchChange)),e.setDependencyModules&&e.setDependencyModules(l.default),e.setPaginationRemoteEmitter&&e.setPaginationRemoteEmitter(this.remoteEmitter)}componentDidUpdate(e){e.columns.filter(e=>e.sort).length<=0?this.SortContext=null:this.SortContext||(this.SortContext=(0,h.default)(s.default,this.isRemoteSort,this.handleRemoteSortChange)),!e.pagination&&this.props.pagination&&(this.PaginationContext=null),e.pagination&&!this.props.pagination&&(this.PaginationContext=e.pagination.createContext(this.isRemotePagination,this.handleRemotePageChange)),!e.cellEdit&&this.props.cellEdit&&(this.CellEditContext=null),e.cellEdit&&!this.props.cellEdit&&(this.CellEditContext=e.cellEdit.createContext(l.default,s.default,this.isRemoteCellEdit,this.handleRemoteCellChange))}renderBase(){return(t,n,r,o,a,s)=>i.default.createElement(e,{ref:e=>this.table=e,...this.props,...o,...n,...r,...a,...s,data:t.getData(n,r,o,a)})}renderWithColumnContext(e,t){return(n,r,o,a,s)=>i.default.createElement(this.ColumnContext.Provider,{...t,toggles:this.props.columnToggle?this.props.columnToggle.toggles:null},i.default.createElement(this.ColumnContext.Consumer,null,t=>e(n,r,o,a,s,t)))}renderWithSelectionContext(e,t){return(n,r,o,a,s)=>i.default.createElement(this.SelectionContext.Provider,{...t,ref:e=>this.selectionContext=e,selectRow:this.props.selectRow,data:n.getData(r,o,a,s)},e(n,r,o,a,s))}renderWithRowExpandContext(e,t){return(n,r,o,a,s)=>i.default.createElement(this.RowExpandContext.Provider,{...t,ref:e=>{this.rowExpandContext=e},expandRow:this.props.expandRow,data:n.getData(r,o,a,s)},e(n,r,o,a,s))}renderWithPaginationContext(e){return(t,n,r,o)=>i.default.createElement(this.PaginationContext.Provider,{ref:e=>this.paginationContext=e,pagination:this.props.pagination,data:t.getData(n,r,o),bootstrap4:this.props.bootstrap4,isRemotePagination:this.isRemotePagination,remoteEmitter:this.remoteEmitter,onDataSizeChange:this.props.onDataSizeChange,tableId:this.props.id},i.default.createElement(this.PaginationContext.Consumer,null,i=>e(t,n,r,o,i)))}renderWithSortContext(e,t){return(n,r,o)=>i.default.createElement(this.SortContext.Provider,{...t,ref:e=>this.sortContext=e,defaultSorted:this.props.defaultSorted,defaultSortDirection:this.props.defaultSortDirection,sort:this.props.sort,data:n.getData(r,o)},i.default.createElement(this.SortContext.Consumer,null,t=>e(n,r,o,t)))}renderWithSearchContext(e,t){return(n,r)=>i.default.createElement(this.SearchContext.Provider,{...t,ref:e=>this.searchContext=e,data:n.getData(r),searchText:this.props.search.searchText,dataChangeListener:this.props.dataChangeListener},i.default.createElement(this.SearchContext.Consumer,null,t=>e(n,r,t)))}renderWithFilterContext(e,t){return n=>i.default.createElement(this.FilterContext.Provider,{...t,ref:e=>this.filterContext=e,data:n.getData(),filter:this.props.filter.options||{},dataChangeListener:this.props.dataChangeListener},i.default.createElement(this.FilterContext.Consumer,null,t=>e(n,t)))}renderWithCellEditContext(e,t){return n=>i.default.createElement(this.CellEditContext.Provider,{...t,ref:e=>this.cellEditContext=e,selectRow:this.props.selectRow,cellEdit:this.props.cellEdit,data:n.getData()},e(n))}render(){const{keyField:e,columns:t,bootstrap4:n}=this.props,r={keyField:e,columns:t};let o=this.renderBase();return this.ColumnContext&&(o=this.renderWithColumnContext(o,r)),this.SelectionContext&&(o=this.renderWithSelectionContext(o,r)),this.RowExpandContext&&(o=this.renderWithRowExpandContext(o,r)),this.PaginationContext&&(o=this.renderWithPaginationContext(o)),this.SortContext&&(o=this.renderWithSortContext(o,r)),this.SearchContext&&(o=this.renderWithSearchContext(o,r)),this.FilterContext&&(o=this.renderWithFilterContext(o,r)),this.CellEditContext&&(o=this.renderWithCellEditContext(o,r)),i.default.createElement(u.BootstrapContext.Provider,{value:{bootstrap4:n}},i.default.createElement(this.DataContext.Provider,{...r,data:this.props.data},i.default.createElement(this.DataContext.Consumer,null,o)))}}},9435(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=n(6561),a=r(n(286)),s=r(n(1400));t.default=e=>{const{columns:t,onFilter:n,currFilters:r,filterPosition:l=i.FILTERS_POSITION_TOP,onExternalFilter:u,className:c,selectRow:d,expandRow:f}=e;return o.default.createElement("tbody",{className:c,style:{display:l===i.FILTERS_POSITION_TOP?"table-header-group":"table-footer-group"}},o.default.createElement(s.default,{renderContent:function(){const e=[];let i=!1;return t.forEach((t,s)=>{e.push(o.default.createElement(a.default,{index:s,key:t.dataField,column:t,currFilters:r,onExternalFilter:u,onFilter:n})),(t.filterRenderer||t.filter)&&(i||(i=!0))}),e},selectRow:d,expandRow:f,cellEl:"td"}))}},9459(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(7007)),i=n(5442),a=r(n(3955));t.default=e=>class extends i.Component{constructor(e){super(e),this.getNewestState=(e={})=>{let t,n,r,o,i,a={};return this.sortContext&&(t=this.sortContext.state.sortOrder,n=this.sortContext.state.sortColumn?this.sortContext.state.sortColumn.dataField:null),this.filterContext&&(a=this.filterContext.currFilters),this.paginationContext&&(r=this.paginationContext.currPage,o=this.paginationContext.currSizePerPage),this.searchContext&&(i=this.props.search.searchText),{sortOrder:t,sortField:n,filters:a,page:r,sizePerPage:o,searchText:i,...e,data:this.props.data}},this.isRemoteSearch=()=>{const{remote:e}=this.props;return!0===e||a.default.isObject(e)&&e.search||this.isRemotePagination()},this.isRemotePagination=(e={})=>{const{remote:t}=this.props;return e.result=!0===t||a.default.isObject(t)&&t.pagination,e.result},this.isRemoteFiltering=()=>{const{remote:e}=this.props;return!0===e||a.default.isObject(e)&&e.filter||this.isRemotePagination()},this.isRemoteSort=()=>{const{remote:e}=this.props;return!0===e||a.default.isObject(e)&&e.sort||this.isRemotePagination()},this.isRemoteCellEdit=()=>{const{remote:e}=this.props;return!0===e||a.default.isObject(e)&&e.cellEdit},this.handleRemotePageChange=(e,t)=>{this.props.onTableChange("pagination",this.getNewestState({page:e,sizePerPage:t}))},this.handleRemoteFilterChange=e=>{const t={filters:e};if(this.isRemotePagination()){const e=this.props.pagination.options||{};t.page=a.default.isDefined(e.pageStartIndex)?e.pageStartIndex:1}this.props.onTableChange("filter",this.getNewestState(t))},this.handleRemoteSortChange=(e,t)=>{this.props.onTableChange("sort",this.getNewestState({sortField:e,sortOrder:t}))},this.handleRemoteCellChange=(e,t,n)=>{const r={rowId:e,dataField:t,newValue:n};this.props.onTableChange("cellEdit",this.getNewestState({cellEdit:r}))},this.handleRemoteSearchChange=e=>{this.props.onTableChange("search",this.getNewestState({searchText:e}))},this.remoteEmitter=new o.default,this.remoteEmitter.on("paginationChange",this.handleRemotePageChange),this.remoteEmitter.on("isRemotePagination",this.isRemotePagination)}}},9603(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(5442);t.default=e=>class extends r.Component{visibleColumnSize(e=!0){let t;if(this.props.columnToggle&&this.props.columnToggle.toggles){const e=this.props.columnToggle.toggles;t=Object.keys(e).filter(t=>e[t]).length}else t=this.props.columns.filter(e=>!e.hidden).length;return e?(this.props.selectRow&&!this.props.selectRow.hideSelectColumn&&(t+=1),this.props.expandRow&&this.props.expandRow.showExpandColumn&&(t+=1),t):t}}}},r={};function o(e){var t=r[e];if(void 0!==t)return t.exports;var i=r[e]={exports:{}};return n[e].call(i.exports,i,i.exports,o),i.exports}return o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o(7723)})());
3
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL2Rpc3QvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLm1pbi5qcyIsIm1hcHBpbmdzIjoiO0NBQUEsU0FBMkNBLEVBQU1DLEdBQzFCLGlCQUFaQyxTQUEwQyxpQkFBWEMsT0FDeENBLE9BQU9ELFFBQVVELEVBQVFHLFFBQVEsU0FBVUEsUUFBUSxjQUMxQixtQkFBWEMsUUFBeUJBLE9BQU9DLElBQzlDRCxPQUFPLENBQUMsUUFBUyxhQUFjSixHQUNMLGlCQUFaQyxRQUNkQSxRQUErQixzQkFBSUQsRUFBUUcsUUFBUSxTQUFVQSxRQUFRLGNBRXJFSixFQUE0QixzQkFBSUMsRUFBUUQsRUFBWSxNQUFHQSxFQUFlLFNBQ3ZFLENBVEQsQ0FTR08sS0FBTSxDQUFDQyxFQUFtQ0MsSSwwS0NUN0MsbUJBQ0EsYUFDQSxVQVVBLE1BQU1DLFVBQWtCLFVBQU1DLFVBRzVCLFdBQUFDLENBQVlDLEdBQ1ZDLE1BQU1ELEdBQ05FLEtBQUtDLFFBQVUsVUFBTUMsV0FDdkIsQ0FFQSxNQUFBQyxHQUNFLE1BQU0sU0FDSkMsRUFBUSxTQUNSQyxHQUFXLEVBQUssU0FDaEJDLEVBQVEsVUFDUkMsRUFBWSxNQUNUQyxHQUNEUixLQUFLRixNQUVULE9BQ0Usa0NBQ0UsOEJBQUlTLFdBQVcsYUFBRyx3QkFBeUJBLE1BQWdCQyxHQUN6RCx3QkFBQyxFQUFBQyxjQUFhLENBQ1pDLFFBQU0sRUFDTkMsR0FBSU4sRUFDSk8sUUFBUyxJQUNUQyxXQUFXLG1CQUNYQyxTQUFVUixFQUNWTCxRQUFTRCxLQUFLQyxTQUVkLCtCQUFLYyxJQUFLZixLQUFLQyxTQUNiLCtCQUFLTSxVQUFVLHVCQUF1QkgsTUFNbEQsRUFpQkYsVUFBZVQsQywrSkNoRWYsbUJBQ0EsYUFDQSxVQUNBLFVBMEJBLFVBcEI0QyxFQUFHcUIsWUFDN0MsTUFBTUMsR0FBYSxhQUFHLG1DQUFvQyxDQUN4REMsT0FBUUYsSUFBVSxFQUFBRyxXQUdwQixPQUNFLHdCQUFDLEVBQUFDLGlCQUFpQkMs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QVMvaUMsR0FBVUEsRUFBT2dqQyxXQUM3QixJQUFPaGpDLEVBQWlCLFFBQ3hCLElBQU0sRUFFUCxPQURBMmlDLEVBQW9CbDFCLEVBQUVzMUIsRUFBUSxDQUFFM3dCLEVBQUcyd0IsSUFDNUJBLEdDTFJKLEVBQW9CbDFCLEVBQUksQ0FBQzFOLEVBQVNrakMsS0FDakMsSUFBSSxJQUFJNThCLEtBQU80OEIsRUFDWE4sRUFBb0JyWSxFQUFFMlksRUFBWTU4QixLQUFTczhCLEVBQW9CclksRUFBRXZxQixFQUFTc0csSUFDNUVtSSxPQUFPcXJCLGVBQWU5NUIsRUFBU3NHLEVBQUssQ0FBRXl6QixZQUFZLEVBQU0vMEIsSUFBS2srQixFQUFXNThCLE1DSjNFczhCLEVBQW9CM3NCLEVBQUksV0FDdkIsR0FBMEIsaUJBQWZrdEIsV0FBeUIsT0FBT0EsV0FDM0MsSUFDQyxPQUFPdGlDLE1BQVEsSUFBSXNWLFNBQVMsY0FBYixFQUNoQixDQUFFLE1BQU94TyxHQUNSLEdBQXNCLGlCQUFYeTdCLE9BQXFCLE9BQU9BLE1BQ3hDLENBQ0EsQ0FQdUIsR0NBeEJSLEVBQW9CclksRUFBSSxDQUFDcFcsRUFBS3FHLElBQVUvTCxPQUFPNkYsVUFBVUQsZUFBZUUsS0FBS0osRUFBS3FHLEdDQ2xGb29CLEVBQW9CM1ksRUFBS2pxQixJQUNILG9CQUFYd1csUUFBMEJBLE9BQU82c0IsYUFDMUM1MEIsT0FBT3FyQixlQUFlOTVCLEVBQVN3VyxPQUFPNnNCLFlBQWEsQ0FBRXYyQixNQUFPLFdBRTdEMkIsT0FBT3FyQixlQUFlOTVCLEVBQVMsYUFBYyxDQUFFOE0sT0FBTyxLQ0Y3QjgxQixFQUFvQixLIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3Jvdy1leHBhbmQvZXhwYW5kLXJvdy50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9zb3J0L2NhcmV0LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3Jvdy9yb3ctc2VjdGlvbi50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9maWx0ZXJzLWNlbGwudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93L3Nob3VsZC11cGRhdGVyLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvc3RvcmUvcm93cy50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3Jvdy9hZ2dyZWdhdGUtcm93LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3Jvdy1leHBhbmQvZXhwYW5kLWNlbGwudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvYm9vdHN0cmFwLXRhYmxlLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3Jvdy9yb3ctdGVtcGxhdGUudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93LXNlbGVjdGlvbi9zZWxlY3Rpb24tY2VsbC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9zdG9yZS9leHBhbmQudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9jb250ZXh0cy9yb3ctZXhwYW5kLWNvbnRleHQudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvY2FwdGlvbi50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9jZWxsLWV2ZW50LWRlbGVnYXRlci50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3NvcnQvc3ltYm9sLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3N0b3JlL3R5cGUudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9yb3cvcm93LXB1cmUtY29udGVudC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9jb250ZXh0cy9jb2x1bW4tY29udGV4dC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9yb3cvc2ltcGxlLXJvdy50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9jb250ZXh0cy9kYXRhLWNvbnRleHQudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93LXNlbGVjdGlvbi9yb3ctY29uc3VtZXIudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvc3RvcmUvc29ydC50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2NvbnRleHRzL2Jvb3RzdHJhcC50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3V0aWxzLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93LWV4cGFuZC9leHBhbmQtaGVhZGVyLWNlbGwudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvc3RvcmUvc2VsZWN0aW9uLnRzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX3NldHVwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvcmVzdEFyZ3VtZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzT2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNOdWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNVbmRlZmluZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc0Jvb2xlYW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc0VsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fdGFnVGVzdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNTdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc051bWJlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzRGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzUmVnRXhwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNFcnJvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzU3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNBcnJheUJ1ZmZlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzRnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9faGFzT2JqZWN0VGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX3N0cmluZ1RhZ0J1Zy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzRGF0YVZpZXcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc0FycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2hhcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzQXJndW1lbnRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNGaW5pdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc05hTi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2NvbnN0YW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2NyZWF0ZVNpemVQcm9wZXJ0eUNoZWNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX3NoYWxsb3dQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19nZXRCeXRlTGVuZ3RoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2lzQnVmZmVyTGlrZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzVHlwZWRBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19nZXRMZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fY29sbGVjdE5vbkVudW1Qcm9wcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc0VtcHR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNNYXRjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3VuZGVyc2NvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fdG9CdWZmZXJWaWV3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNFcXVhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2FsbEtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fbWV0aG9kRmluZ2VycHJpbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc01hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzV2Vha01hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzU2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNXZWFrU2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvdmFsdWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvcGFpcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pbnZlcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9mdW5jdGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fY3JlYXRlQXNzaWduZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9leHRlbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9leHRlbmRPd24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9kZWZhdWx0cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19iYXNlQ3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvY2xvbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy90YXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy90b1BhdGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fdG9QYXRoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2RlZXBHZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9nZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9oYXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pZGVudGl0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL21hdGNoZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19vcHRpbWl6ZUNiLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2Jhc2VJdGVyYXRlZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2l0ZXJhdGVlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2NiLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvbWFwT2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvbm9vcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3Byb3BlcnR5T2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy90aW1lcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3JhbmRvbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL25vdy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19jcmVhdGVFc2NhcGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2VzY2FwZU1hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2VzY2FwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3VuZXNjYXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX3VuZXNjYXBlTWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvdGVtcGxhdGVTZXR0aW5ncy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3RlbXBsYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvcmVzdWx0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvdW5pcXVlSWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9jaGFpbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19leGVjdXRlQm91bmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9wYXJ0aWFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvYmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19pc0FycmF5TGlrZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19mbGF0dGVuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvYmluZEFsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL21lbW9pemUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9kZWxheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2RlZmVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvdGhyb3R0bGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9kZWJvdW5jZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3dyYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9uZWdhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9jb21wb3NlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvYWZ0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9iZWZvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9vbmNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvZmluZEtleS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19jcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2ZpbmRJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2ZpbmRMYXN0SW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9zb3J0ZWRJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19jcmVhdGVJbmRleEZpbmRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2luZGV4T2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9sYXN0SW5kZXhPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2ZpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9maW5kV2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9lYWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvbWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2NyZWF0ZVJlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3JlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3JlZHVjZVJpZ2h0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvZmlsdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvcmVqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvZXZlcnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9zb21lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvY29udGFpbnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pbnZva2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9wbHVjay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3doZXJlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvbWF4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvbWluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvdG9BcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3NhbXBsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3NodWZmbGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9zb3J0QnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fZ3JvdXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9ncm91cEJ5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaW5kZXhCeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2NvdW50QnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9wYXJ0aXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9zaXplLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2tleUluT2JqLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvcGljay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL29taXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pbml0aWFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvZmlyc3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9yZXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvbGFzdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2NvbXBhY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9mbGF0dGVuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvZGlmZmVyZW5jZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3dpdGhvdXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy91bmlxLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvdW5pb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pbnRlcnNlY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy91bnppcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3ppcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL29iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3JhbmdlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvY2h1bmsuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fY2hhaW5SZXN1bHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9taXhpbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3VuZGVyc2NvcmUtYXJyYXktbWV0aG9kcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2luZGV4LWRlZmF1bHQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9jb250ZXh0cy9zb3J0LWNvbnRleHQudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcHJvcHMtcmVzb2x2ZXIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9oZWFkZXIudHN4Iiwid2VicGFjazovLy9leHRlcm5hbCB1bWQge1wicm9vdFwiOlwiUmVhY3RcIixcImNvbW1vbmpzMlwiOlwicmVhY3RcIixcImNvbW1vbmpzXCI6XCJyZWFjdFwiLFwiYW1kXCI6XCJyZWFjdFwifSIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgdW1kIHtcInJvb3RcIjpcIlJlYWN0RE9NXCIsXCJjb21tb25qczJcIjpcInJlYWN0LWRvbVwiLFwiY29tbW9uanNcIjpcInJlYWN0LWRvbVwiLFwiYW1kXCI6XCJyZWFjdC1kb21cIn0iLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9yb3ctZXhwYW5kL3Jvdy1jb25zdW1lci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9ib2R5LnRzeCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RvbS1oZWxwZXJzL2VzbS9yZW1vdmVDbGFzcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vY29uZmlnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9UcmFuc2l0aW9uR3JvdXBDb250ZXh0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS91dGlscy9yZWZsb3cuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1RyYW5zaXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL0NTU1RyYW5zaXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RvbS1oZWxwZXJzL2VzbS9hZGRDbGFzcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZG9tLWhlbHBlcnMvZXNtL2hhc0NsYXNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS91dGlscy9DaGlsZE1hcHBpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1RyYW5zaXRpb25Hcm91cC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9SZXBsYWNlVHJhbnNpdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vU3dpdGNoVHJhbnNpdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3Jvdy1zZWxlY3Rpb24vc2VsZWN0aW9uLWhlYWRlci1jZWxsLWNvbnN1bWVyLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2NvbnN0LnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93LWV4cGFuZC9leHBhbmQtaGVhZGVyLWNlbGwtY29uc3VtZXIudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvc3RvcmUvb3BlcmF0b3JzLnRzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9ldmVudHMvZXZlbnRzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93L2V2ZW50LWRlbGVnYXRlci50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3Jvdy1zZWxlY3Rpb24vc2VsZWN0aW9uLWhlYWRlci1jZWxsLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2Zvb3Rlci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL2luZGV4LnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvZm9vdGVyLWNlbGwudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9jb250ZXh0cy9zZWxlY3Rpb24tY29udGV4dC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9jZWxsLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3N0b3JlL211dGF0ZS50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2hlYWRlci1jZWxsLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2NvbnRleHRzL2luZGV4LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2ZpbHRlcnMudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcHJvcHMtcmVzb2x2ZXIvcmVtb3RlLXJlc29sdmVyLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcHJvcHMtcmVzb2x2ZXIvY29sdW1uLXJlc29sdmVyLnRzIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly8vd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpLCByZXF1aXJlKFwicmVhY3QtZG9tXCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcInJlYWN0XCIsIFwicmVhY3QtZG9tXCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlJlYWN0Qm9vdHN0cmFwVGFibGVOZ1wiXSA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpLCByZXF1aXJlKFwicmVhY3QtZG9tXCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJSZWFjdEJvb3RzdHJhcFRhYmxlTmdcIl0gPSBmYWN0b3J5KHJvb3RbXCJSZWFjdFwiXSwgcm9vdFtcIlJlYWN0RE9NXCJdKTtcbn0pKHNlbGYsIChfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX181NDQyX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzYwMDNfXykgPT4ge1xucmV0dXJuICIsImltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQ1NTVHJhbnNpdGlvbiB9IGZyb20gXCJyZWFjdC10cmFuc2l0aW9uLWdyb3VwXCI7XG5cbmludGVyZmFjZSBFeHBhbmRSb3dQcm9wcyB7XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xuICBleHBhbmRlZD86IGJvb2xlYW47XG4gIG9uQ2xvc2VkPzogKCkgPT4gdm9pZDtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjb2xTcGFuOiBudW1iZXI7XG59XG5cbmNsYXNzIEV4cGFuZFJvdyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxFeHBhbmRSb3dQcm9wcz4ge1xuICBub2RlUmVmOiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IEV4cGFuZFJvd1Byb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubm9kZVJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgZXhwYW5kZWQgPSBmYWxzZSxcbiAgICAgIG9uQ2xvc2VkLFxuICAgICAgY2xhc3NOYW1lID0gXCJcIixcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIHJldHVybiAoXG4gICAgICA8dHI+XG4gICAgICAgIDx0ZCBjbGFzc05hbWU9e2NzKFwicmVzZXQtZXhwYW5zaW9uLXN0eWxlXCIsIGNsYXNzTmFtZSl9IHsuLi5yZXN0fT5cbiAgICAgICAgICA8Q1NTVHJhbnNpdGlvblxuICAgICAgICAgICAgYXBwZWFyXG4gICAgICAgICAgICBpbj17ZXhwYW5kZWR9XG4gICAgICAgICAgICB0aW1lb3V0PXs0MDB9XG4gICAgICAgICAgICBjbGFzc05hbWVzPVwicm93LWV4cGFuZC1zbGlkZVwiXG4gICAgICAgICAgICBvbkV4aXRlZD17b25DbG9zZWR9XG4gICAgICAgICAgICBub2RlUmVmPXt0aGlzLm5vZGVSZWZ9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiByZWY9e3RoaXMubm9kZVJlZn0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93LWV4cGFuc2lvbi1zdHlsZVwiPntjaGlsZHJlbn08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvQ1NTVHJhbnNpdGlvbj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgKTtcbiAgfVxufVxuXG4vLyBFeHBhbmRSb3cucHJvcFR5cGVzID0ge1xuLy8gICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4vLyAgIGV4cGFuZGVkOiBQcm9wVHlwZXMuYm9vbCxcbi8vICAgb25DbG9zZWQ6IFByb3BUeXBlcy5mdW5jLFxuLy8gICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyB9O1xuXG4vLyBFeHBhbmRSb3cuZGVmYXVsdFByb3BzID0ge1xuLy8gICBjaGlsZHJlbjogbnVsbCxcbi8vICAgZXhwYW5kZWQ6IGZhbHNlLFxuLy8gICBvbkNsb3NlZDogdW5kZWZpbmVkLFxuLy8gICBjbGFzc05hbWU6IFwiXCIsXG4vLyB9O1xuXG5leHBvcnQgZGVmYXVsdCBFeHBhbmRSb3c7XG4iLCJpbXBvcnQgY3MgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFNPUlRfQVNDIH0gZnJvbSBcIi4uL2NvbnN0XCI7XG5pbXBvcnQgeyBCb290c3RyYXBDb250ZXh0IH0gZnJvbSBcIi4uL2NvbnRleHRzL2Jvb3RzdHJhcFwiO1xuXG5pbnRlcmZhY2UgU29ydENhcmV0UHJvcHMge1xuICBvcmRlcjogc3RyaW5nO1xufVxuXG5jb25zdCBTb3J0Q2FyZXQ6IFJlYWN0LkZDPFNvcnRDYXJldFByb3BzPiA9ICh7IG9yZGVyIH0pID0+IHtcbiAgY29uc3Qgb3JkZXJDbGFzcyA9IGNzKFwicmVhY3QtYm9vdHN0cmFwLXRhYmxlLXNvcnQtb3JkZXJcIiwge1xuICAgIGRyb3B1cDogb3JkZXIgPT09IFNPUlRfQVNDLFxuICB9KTtcblxuICByZXR1cm4gKFxuICAgIDxCb290c3RyYXBDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgeyh7IGJvb3RzdHJhcDQgfSkgPT5cbiAgICAgICAgYm9vdHN0cmFwNCA/IChcbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2BjYXJldC00LSR7b3JkZXJ9YH0gZGF0YS10ZXN0aWQ9XCJzb3J0LWNhcmV0XCIgLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e29yZGVyQ2xhc3N9IGRhdGEtdGVzdGlkPVwic29ydC1jYXJldFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiY2FyZXRcIiAvPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKVxuICAgICAgfVxuICAgIDwvQm9vdHN0cmFwQ29udGV4dC5Db25zdW1lcj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNvcnRDYXJldDtcbiIsImltcG9ydCBSZWFjdCwgeyBGQyB9IGZyb20gXCJyZWFjdFwiO1xuXG50eXBlIFJvd1NlY3Rpb25Qcm9wcyA9IHtcbiAgY29udGVudD86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgY29sU3Bhbj86IG51bWJlcjtcbn07XG5cbmNvbnN0IFJvd1NlY3Rpb246IEZDPFJvd1NlY3Rpb25Qcm9wcz4gPSAoeyBjb250ZW50ID0gbnVsbCwgY29sU3BhbiA9IDEgfSkgPT4gKFxuICA8dHI+XG4gICAgPHRkXG4gICAgICBkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJcbiAgICAgIGNvbFNwYW49eyBjb2xTcGFuIH1cbiAgICAgIGNsYXNzTmFtZT1cInJlYWN0LWJzLXRhYmxlLW5vLWRhdGFcIlxuICAgID5cbiAgICAgIHtjb250ZW50fVxuICAgIDwvdGQ+XG4gIDwvdHI+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBSb3dTZWN0aW9uO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IF8gZnJvbSBcIi4vdXRpbHNcIjtcblxuaW50ZXJmYWNlIEZpbHRlclByb3BzIHtcbiAgcHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIEZpbHRlcjogUmVhY3QuQ29tcG9uZW50VHlwZTxhbnk+O1xufVxuXG5pbnRlcmZhY2UgRmlsdGVyc0NlbGxQcm9wcyB7XG4gIGluZGV4OiBudW1iZXI7XG4gIGNvbHVtbjoge1xuICAgIGZpbHRlclJlbmRlcmVyPzogKGZpbHRlckhhbmRsZXI6IEZ1bmN0aW9uLCBjb2x1bW46IGFueSkgPT4gUmVhY3QuUmVhY3ROb2RlO1xuICAgIGZpbHRlcj86IEZpbHRlclByb3BzO1xuICAgIGhlYWRlckFsaWduPzogc3RyaW5nIHwgRnVuY3Rpb247XG4gICAgZGF0YUZpZWxkOiBzdHJpbmc7XG4gIH07XG4gIGN1cnJGaWx0ZXJzPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgb25GaWx0ZXI/OiAoZmlsdGVyRGF0YTogUmVjb3JkPHN0cmluZywgYW55PikgPT4gUmVhY3QuUmVhY3ROb2RlO1xuICBvbkV4dGVybmFsRmlsdGVyPzogKGNvbHVtbjogYW55LCBmaWx0ZXJUeXBlOiBzdHJpbmcpID0+ICh2YWx1ZTogYW55KSA9PiBGdW5jdGlvbjtcbn1cblxuY29uc3QgRmlsdGVyc0NlbGw6IFJlYWN0LkZDPEZpbHRlcnNDZWxsUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgaW5kZXgsIGNvbHVtbiwgY3VyckZpbHRlcnMsIG9uRXh0ZXJuYWxGaWx0ZXIgPSAoKSA9PiB7fSwgb25GaWx0ZXIgPSAoKSA9PiB7fSB9ID0gcHJvcHM7XG4gIGNvbnN0IHsgZmlsdGVyIH0gPSBjb2x1bW47XG5cbiAgbGV0IGZpbHRlckVsbTogUmVhY3QuUmVhY3ROb2RlO1xuICBjb25zdCBjZWxsQXR0cnM6IFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50PiA9IHt9O1xuICBjb25zdCBjZWxsU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7fTtcblxuICBjZWxsQXR0cnMuc3R5bGUgPSBjZWxsU3R5bGU7XG5cbiAgaWYgKGNvbHVtbi5oZWFkZXJBbGlnbikge1xuICAgIGNlbGxTdHlsZS50ZXh0QWxpZ24gPSBfLmlzRnVuY3Rpb24oY29sdW1uLmhlYWRlckFsaWduKVxuICAgICAgPyBjb2x1bW4uaGVhZGVyQWxpZ24oY29sdW1uLCBpbmRleClcbiAgICAgIDogY29sdW1uLmhlYWRlckFsaWduO1xuICB9XG5cbiAgaWYgKGNvbHVtbi5maWx0ZXJSZW5kZXJlcikge1xuICAgIGNvbnN0IG9uQ3VzdG9tRmlsdGVyID0gb25FeHRlcm5hbEZpbHRlcihjb2x1bW4sIGZpbHRlcj8ucHJvcHMudHlwZSB8fCBcIlwiKTtcbiAgICBmaWx0ZXJFbG0gPSBjb2x1bW4uZmlsdGVyUmVuZGVyZXIob25DdXN0b21GaWx0ZXIhLCBjb2x1bW4pO1xuICB9IGVsc2UgaWYgKGZpbHRlcikge1xuICAgIGZpbHRlckVsbSA9IChcbiAgICAgIDxmaWx0ZXIuRmlsdGVyXG4gICAgICAgIHsuLi5maWx0ZXIucHJvcHN9XG4gICAgICAgIGZpbHRlclN0YXRlPXtjdXJyRmlsdGVycyFbY29sdW1uLmRhdGFGaWVsZF19XG4gICAgICAgIG9uRmlsdGVyPXtvbkZpbHRlcn1cbiAgICAgICAgY29sdW1uPXtjb2x1bW59XG4gICAgICAvPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcInRoXCIsIGNlbGxBdHRycywgZmlsdGVyRWxtKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEZpbHRlcnNDZWxsO1xuIiwiaW1wb3J0IF8gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUm93UHJvcHMge1xuICBjbGlja1RvRWRpdD86IHN0cmluZztcbiAgZGJjbGlja1RvRWRpdD86IHN0cmluZztcbiAgZWRpdGFibGU/OiBib29sZWFuO1xuICBlZGl0aW5nUm93SWR4PzogbnVtYmVyIHwgbnVsbDtcbiAgZWRpdGluZ0NvbElkeD86IG51bWJlcjtcbiAgRWRpdGluZ0NlbGxDb21wb25lbnQ/OiBhbnk7XG4gIHRhYkluZGV4U3RhcnQ/OiBudW1iZXI7XG4gIHRhYkluZGV4Q2VsbD86IGJvb2xlYW47XG4gIHJvd0luZGV4PzogbnVtYmVyO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcztcbiAgYXR0cnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBjb2x1bW5zPzogYW55W107XG4gIHJvdz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHNlbGVjdFJvdz86IGFueTtcbiAgc2VsZWN0ZWQ/OiBib29sZWFuO1xuICBzZWxlY3RhYmxlPzogYm9vbGVhbjtcbiAgZXhwYW5kUm93PzogYW55O1xuICBleHBhbmRlZD86IGJvb2xlYW47XG4gIGV4cGFuZGFibGU/OiBib29sZWFuO1xuICB2aXNpYmxlQ29sdW1uU2l6ZT86IG51bWJlcjtcbiAga2V5RmllbGQ/OiBzdHJpbmc7XG4gIHZhbHVlPzogYW55O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSb3dTaG91bGRVcGRhdGVyPFQgZXh0ZW5kcyBuZXcoLi4uYXJnczogYW55W10pID0+IGFueT4oXG4gIEV4dGVuZEJhc2U6IFRcbikge1xuICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBFeHRlbmRCYXNlIHtcbiAgICBzaG91bGRVcGRhdGVCeUNlbGxFZGl0aW5nKG5leHRQcm9wczogUm93UHJvcHMpIHtcbiAgICAgIGlmICghKHRoaXMucHJvcHMuY2xpY2tUb0VkaXQgfHwgdGhpcy5wcm9wcy5kYmNsaWNrVG9FZGl0KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgbmV4dFByb3BzLmVkaXRpbmdSb3dJZHggPT09IG5leHRQcm9wcy5yb3dJbmRleCB8fFxuICAgICAgICAodGhpcy5wcm9wcy5lZGl0aW5nUm93SWR4ID09PSBuZXh0UHJvcHMucm93SW5kZXggJiZcbiAgICAgICAgICBuZXh0UHJvcHMuZWRpdGluZ1Jvd0lkeCA9PT0gbnVsbCkgfHxcbiAgICAgICAgdGhpcy5wcm9wcy5lZGl0aW5nUm93SWR4ID09PSBuZXh0UHJvcHMucm93SW5kZXhcbiAgICAgICk7XG4gICAgfVxuXG4gICAgc2hvdWxkVXBkYXRlZEJ5U2VsZlByb3BzKG5leHRQcm9wczogUm93UHJvcHMpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMucHJvcHMuY2xhc3NOYW1lICE9PSBuZXh0UHJvcHMuY2xhc3NOYW1lIHx8XG4gICAgICAgICFfLmlzRXF1YWwodGhpcy5wcm9wcy5zdHlsZSwgbmV4dFByb3BzLnN0eWxlKSB8fFxuICAgICAgICAhXy5pc0VxdWFsKHRoaXMucHJvcHMuYXR0cnMsIG5leHRQcm9wcy5hdHRycylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gT25seSB1c2UgZm9yIHNpbXBsZS1yb3dcbiAgICBzaG91bGRVcGRhdGVCeUNvbHVtbnNGb3JTaW1wbGVDaGVjayhuZXh0UHJvcHM6IFJvd1Byb3BzKSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5jb2x1bW5zLmxlbmd0aCAhPT0gbmV4dFByb3BzLmNvbHVtbnMhLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wcm9wcy5jb2x1bW5zLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmICghXy5pc0VxdWFsKHRoaXMucHJvcHMuY29sdW1uc1tpXSwgbmV4dFByb3BzLmNvbHVtbnMhW2ldKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgc2hvdWxkVXBkYXRlZEJ5Tm9ybWFsUHJvcHMobmV4dFByb3BzOiBSb3dQcm9wcykge1xuICAgICAgY29uc3Qgc2hvdWxkVXBkYXRlID1cbiAgICAgICAgdGhpcy5wcm9wcy5yb3dJbmRleCAhPT0gbmV4dFByb3BzLnJvd0luZGV4IHx8XG4gICAgICAgIHRoaXMucHJvcHMuZWRpdGFibGUgIT09IG5leHRQcm9wcy5lZGl0YWJsZSB8fFxuICAgICAgICAhXy5pc0VxdWFsKHRoaXMucHJvcHMucm93LCBuZXh0UHJvcHMucm93KSB8fFxuICAgICAgICB0aGlzLnByb3BzLmNvbHVtbnMubGVuZ3RoICE9PSBuZXh0UHJvcHMuY29sdW1ucyEubGVuZ3RoO1xuXG4gICAgICByZXR1cm4gc2hvdWxkVXBkYXRlO1xuICAgIH1cblxuICAgIHNob3VsZFVwZGF0ZUNoaWxkKG5leHRQcm9wczogUm93UHJvcHMpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuc2hvdWxkVXBkYXRlQnlDZWxsRWRpdGluZyhuZXh0UHJvcHMpIHx8XG4gICAgICAgIHRoaXMuc2hvdWxkVXBkYXRlZEJ5Tm9ybWFsUHJvcHMobmV4dFByb3BzKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBzaG91bGRSb3dDb250ZW50VXBkYXRlKG5leHRQcm9wczogUm93UHJvcHMpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuc2hvdWxkVXBkYXRlQ2hpbGQobmV4dFByb3BzKSB8fFxuICAgICAgICB0aGlzLnNob3VsZFVwZGF0ZUJ5Q29sdW1uc0ZvclNpbXBsZUNoZWNrKG5leHRQcm9wcylcbiAgICAgICk7XG4gICAgfVxuICB9O1xufVxuIiwiaW1wb3J0IF8gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmV4cG9ydCBjb25zdCBtYXRjaFJvdyA9IChrZXlGaWVsZDogYW55LCBpZDogYW55KSA9PiAocm93OiBhbnkpID0+IF8uZ2V0KHJvdywga2V5RmllbGQpID09PSBpZDtcblxuZXhwb3J0IGNvbnN0IGdldFJvd0J5Um93SWQgPSAoZGF0YTogYW55LCBrZXlGaWVsZDogYW55LCBpZDogYW55KSA9PiBkYXRhLmZpbmQobWF0Y2hSb3coa2V5RmllbGQsIGlkKSk7XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBJTkRJQ0FUT1JfUE9TSVRJT05fTEVGVCB9IGZyb20gXCIuLi9jb25zdFwiO1xuaW1wb3J0IEV4cGFuZENlbGwgZnJvbSBcIi4uL3Jvdy1leHBhbmQvZXhwYW5kLWNlbGxcIjtcbmltcG9ydCBTZWxlY3Rpb25DZWxsIGZyb20gXCIuLi9yb3ctc2VsZWN0aW9uL3NlbGVjdGlvbi1jZWxsXCI7XG5pbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IFJvd0V2ZW50RGVsZWdhdGVyIH0gZnJvbSBcIi4vZXZlbnQtZGVsZWdhdGVyXCI7XG5pbXBvcnQgUm93UHVyZUNvbnRlbnQgZnJvbSBcIi4vcm93LXB1cmUtY29udGVudFwiO1xuaW1wb3J0IHNob3VsZFVwZGF0ZXIsIHsgUm93UHJvcHMgfSBmcm9tIFwiLi9zaG91bGQtdXBkYXRlclwiO1xuXG5jbGFzcyBSb3dBZ2dyZWdhdG9yIGV4dGVuZHMgc2hvdWxkVXBkYXRlcihSb3dFdmVudERlbGVnYXRlcihDb21wb25lbnQ8Um93UHJvcHM+KSkge1xuICBjbGlja051bTogbnVtYmVyID0gMDtcbiAgc2hvdWxkVXBkYXRlUm93Q29udGVudDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBSb3dQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNyZWF0ZUNsaWNrRXZlbnRIYW5kbGVyID0gdGhpcy5jcmVhdGVDbGlja0V2ZW50SGFuZGxlci5iaW5kKHRoaXMpO1xuICB9XG5cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wczogUm93UHJvcHMpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnByb3BzLnNlbGVjdGVkICE9PSBuZXh0UHJvcHMuc2VsZWN0ZWQgfHxcbiAgICAgIHRoaXMucHJvcHMuZXhwYW5kZWQgIT09IG5leHRQcm9wcy5leHBhbmRlZCB8fFxuICAgICAgdGhpcy5wcm9wcy5leHBhbmRhYmxlICE9PSBuZXh0UHJvcHMuZXhwYW5kYWJsZSB8fFxuICAgICAgdGhpcy5wcm9wcy5zZWxlY3RhYmxlICE9PSBuZXh0UHJvcHMuc2VsZWN0YWJsZSB8fFxuICAgICAgdGhpcy5wcm9wcy5zZWxlY3RSb3cuaGlkZVNlbGVjdENvbHVtbiAhPT1cbiAgICAgIG5leHRQcm9wcy5zZWxlY3RSb3cuaGlkZVNlbGVjdENvbHVtbiB8fFxuICAgICAgdGhpcy5zaG91bGRVcGRhdGVkQnlTZWxmUHJvcHMobmV4dFByb3BzKVxuICAgICkge1xuICAgICAgdGhpcy5zaG91bGRVcGRhdGVSb3dDb250ZW50ID0gdGhpcy5zaG91bGRSb3dDb250ZW50VXBkYXRlKG5leHRQcm9wcyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5zaG91bGRVcGRhdGVSb3dDb250ZW50ID0gdGhpcy5zaG91bGRSb3dDb250ZW50VXBkYXRlKG5leHRQcm9wcyk7XG5cbiAgICByZXR1cm4gdGhpcy5zaG91bGRVcGRhdGVSb3dDb250ZW50O1xuICB9XG5cbiAgaXNSZW5kZXJGdW5jdGlvbkNvbHVtbkluTGVmdChwb3NpdGlvbiA9IElORElDQVRPUl9QT1NJVElPTl9MRUZUKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHBvc2l0aW9uID09PSBJTkRJQ0FUT1JfUE9TSVRJT05fTEVGVDtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICByb3csXG4gICAgICBjb2x1bW5zLFxuICAgICAga2V5RmllbGQsXG4gICAgICByb3dJbmRleCxcbiAgICAgIHN0eWxlLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgYXR0cnMsXG4gICAgICBzZWxlY3RSb3csXG4gICAgICBleHBhbmRSb3csXG4gICAgICBleHBhbmRlZCxcbiAgICAgIGV4cGFuZGFibGUsXG4gICAgICBzZWxlY3RlZCxcbiAgICAgIHNlbGVjdGFibGUsXG4gICAgICB2aXNpYmxlQ29sdW1uU2l6ZSxcbiAgICAgIHRhYkluZGV4Q2VsbCxcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBrZXkgPSBfLmdldChyb3csIGtleUZpZWxkKTtcbiAgICBjb25zdCB7IGhpZGVTZWxlY3RDb2x1bW4sIHNlbGVjdENvbHVtblBvc2l0aW9uLCBjbGlja1RvU2VsZWN0IH0gPSBzZWxlY3RSb3c7XG4gICAgY29uc3QgeyBzaG93RXhwYW5kQ29sdW1uID0gdW5kZWZpbmVkLCBleHBhbmRDb2x1bW5Qb3NpdGlvbiA9IHVuZGVmaW5lZCB9ID1cbiAgICAgIGV4cGFuZFJvdyA/PyB7fTtcblxuICAgIGNvbnN0IG5ld0F0dHJzID0gdGhpcy5kZWxlZ2F0ZSh7IC4uLmF0dHJzIH0pO1xuICAgIGlmIChjbGlja1RvU2VsZWN0IHx8IChleHBhbmRSb3cgJiYgISFleHBhbmRSb3cucmVuZGVyZXIpKSB7XG4gICAgICBuZXdBdHRycy5vbkNsaWNrID0gdGhpcy5jcmVhdGVDbGlja0V2ZW50SGFuZGxlcihuZXdBdHRycy5vbkNsaWNrKTtcbiAgICB9XG5cbiAgICBsZXQgdGFiSW5kZXhTdGFydCA9IHJvd0luZGV4ISAqIHZpc2libGVDb2x1bW5TaXplISArIDE7XG5cbiAgICBjb25zdCBjaGlsZHJlbnMgPSBbXG4gICAgICA8Um93UHVyZUNvbnRlbnRcbiAgICAgICAga2V5PVwicm93XCJcbiAgICAgICAgcm93PXtyb3d9XG4gICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgIGtleUZpZWxkPXtrZXlGaWVsZH1cbiAgICAgICAgcm93SW5kZXg9e3Jvd0luZGV4fVxuICAgICAgICBzaG91bGRVcGRhdGU9e3RoaXMuc2hvdWxkVXBkYXRlUm93Q29udGVudH1cbiAgICAgICAgdGFiSW5kZXhTdGFydD17dGFiSW5kZXhDZWxsID8gdGFiSW5kZXhTdGFydCA6IC0xfVxuICAgICAgICB7Li4ucmVzdH1cbiAgICAgIC8+LFxuICAgIF07XG5cbiAgICBpZiAoIWhpZGVTZWxlY3RDb2x1bW4pIHtcbiAgICAgIGNvbnN0IHNlbGVjdENlbGwgPSAoXG4gICAgICAgIDxTZWxlY3Rpb25DZWxsXG4gICAgICAgICAgey4uLnNlbGVjdFJvd31cbiAgICAgICAgICBrZXk9XCJzZWxlY3Rpb24tY2VsbFwiXG4gICAgICAgICAgcm93S2V5PXtrZXl9XG4gICAgICAgICAgcm93SW5kZXg9e3Jvd0luZGV4fVxuICAgICAgICAgIHNlbGVjdGVkPXtzZWxlY3RlZH1cbiAgICAgICAgICBkaXNhYmxlZD17IXNlbGVjdGFibGV9XG4gICAgICAgICAgdGFiSW5kZXg9e3RhYkluZGV4Q2VsbCA/ICh0YWJJbmRleFN0YXJ0ICs9IDEpIDogLTF9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgICAgaWYgKHRoaXMuaXNSZW5kZXJGdW5jdGlvbkNvbHVtbkluTGVmdChzZWxlY3RDb2x1bW5Qb3NpdGlvbikpIHtcbiAgICAgICAgY2hpbGRyZW5zLnVuc2hpZnQoc2VsZWN0Q2VsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGlsZHJlbnMucHVzaChzZWxlY3RDZWxsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2hvd0V4cGFuZENvbHVtbikge1xuICAgICAgY29uc3QgZXhwYW5kQ2VsbCA9IChcbiAgICAgICAgPEV4cGFuZENlbGxcbiAgICAgICAgICB7Li4uZXhwYW5kUm93fVxuICAgICAgICAgIGtleT1cImV4cGFuZC1jZWxsXCJcbiAgICAgICAgICByb3dLZXk9e2tleX1cbiAgICAgICAgICByb3dJbmRleD17cm93SW5kZXh9XG4gICAgICAgICAgZXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICAgIGV4cGFuZGFibGU9e2V4cGFuZGFibGV9XG4gICAgICAgICAgdGFiSW5kZXg9e3RhYkluZGV4Q2VsbCA/ICh0YWJJbmRleFN0YXJ0ICs9IDEpIDogLTF9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgICAgaWYgKHRoaXMuaXNSZW5kZXJGdW5jdGlvbkNvbHVtbkluTGVmdChleHBhbmRDb2x1bW5Qb3NpdGlvbikpIHtcbiAgICAgICAgY2hpbGRyZW5zLnVuc2hpZnQoZXhwYW5kQ2VsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGlsZHJlbnMucHVzaChleHBhbmRDZWxsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHRyIHN0eWxlPXtzdHlsZX0gY2xhc3NOYW1lPXtjbGFzc05hbWV9IHsuLi5uZXdBdHRyc30+XG4gICAgICAgIHtjaGlsZHJlbnN9XG4gICAgICA8L3RyPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUm93QWdncmVnYXRvcjtcbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIE1vdXNlRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIEV4cGFuZENlbGxQcm9wcyB7XG4gIHJvd0tleTogYW55O1xuICBleHBhbmRlZDogYm9vbGVhbjtcbiAgZXhwYW5kYWJsZTogYm9vbGVhbjtcbiAgb25Sb3dFeHBhbmQ6IChcbiAgICByb3dLZXk6IGFueSxcbiAgICBleHBhbmRlZDogYm9vbGVhbixcbiAgICByb3dJbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkLFxuICAgIGU6IE1vdXNlRXZlbnRcbiAgKSA9PiB2b2lkO1xuICBleHBhbmRDb2x1bW5SZW5kZXJlcj86IChwYXJhbXM6IHtcbiAgICBleHBhbmRhYmxlOiBib29sZWFuO1xuICAgIGV4cGFuZGVkOiBib29sZWFuO1xuICAgIHJvd0tleTogYW55O1xuICB9KSA9PiBSZWFjdC5SZWFjdE5vZGU7XG4gIHJvd0luZGV4PzogbnVtYmVyO1xuICB0YWJJbmRleD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXhwYW5kQ2VsbCBleHRlbmRzIENvbXBvbmVudDxFeHBhbmRDZWxsUHJvcHM+IHtcbiAgaGFuZGxlQ2xpY2sgPSAoZTogTW91c2VFdmVudDxIVE1MVGFibGVEYXRhQ2VsbEVsZW1lbnQ+KSA9PiB7XG4gICAgY29uc3QgeyByb3dLZXksIGV4cGFuZGVkLCBvblJvd0V4cGFuZCwgcm93SW5kZXggfSA9IHRoaXMucHJvcHM7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBvblJvd0V4cGFuZChyb3dLZXksICFleHBhbmRlZCwgcm93SW5kZXgsIGUpO1xuICB9O1xuXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6IEV4cGFuZENlbGxQcm9wcykge1xuICAgIGNvbnN0IHNob3VsZFVwZGF0ZSA9XG4gICAgICB0aGlzLnByb3BzLnJvd0luZGV4ICE9PSBuZXh0UHJvcHMucm93SW5kZXggfHxcbiAgICAgIHRoaXMucHJvcHMuZXhwYW5kZWQgIT09IG5leHRQcm9wcy5leHBhbmRlZCB8fFxuICAgICAgdGhpcy5wcm9wcy5yb3dLZXkgIT09IG5leHRQcm9wcy5yb3dLZXkgfHxcbiAgICAgIHRoaXMucHJvcHMudGFiSW5kZXggIT09IG5leHRQcm9wcy50YWJJbmRleDtcblxuICAgIHJldHVybiBzaG91bGRVcGRhdGU7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBleHBhbmRlZCwgZXhwYW5kYWJsZSwgZXhwYW5kQ29sdW1uUmVuZGVyZXIsIHRhYkluZGV4LCByb3dLZXkgfSA9XG4gICAgICB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGF0dHJzOiB7IHRhYkluZGV4PzogbnVtYmVyIH0gPSB7fTtcbiAgICBpZiAodGFiSW5kZXggIT09IHVuZGVmaW5lZCAmJiB0YWJJbmRleCAhPT0gLTEpIGF0dHJzLnRhYkluZGV4ID0gdGFiSW5kZXg7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHRkIGNsYXNzTmFtZT1cImV4cGFuZC1jZWxsXCIgb25DbGljaz17dGhpcy5oYW5kbGVDbGlja30gZGF0YS10ZXN0aWQ9XCJleHBhbmQtY2VsbFwiIHsuLi5hdHRyc30+XG4gICAgICAgIHtleHBhbmRDb2x1bW5SZW5kZXJlclxuICAgICAgICAgID8gZXhwYW5kQ29sdW1uUmVuZGVyZXIoe1xuICAgICAgICAgICAgZXhwYW5kYWJsZSxcbiAgICAgICAgICAgIGV4cGFuZGVkLFxuICAgICAgICAgICAgcm93S2V5XG4gICAgICAgICAgfSlcbiAgICAgICAgICA6IGV4cGFuZGFibGVcbiAgICAgICAgICAgID8gZXhwYW5kZWRcbiAgICAgICAgICAgICAgPyBcIigtKVwiXG4gICAgICAgICAgICAgIDogXCIoKylcIlxuICAgICAgICAgICAgOiBcIlwifVxuICAgICAgPC90ZD5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgY3MgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHtcbiAgQm9vdHN0cmFwVGFibGVQcm9wcyxcbn0gZnJvbSBcIi4vdHlwZXNcIjtcblxuaW1wb3J0IHtcbiAgRklMVEVSU19QT1NJVElPTl9JTkxJTkUsXG4gIFJPV19TRUxFQ1RfRElTQUJMRUQsXG59IGZyb20gXCIuL2NvbnN0XCI7XG5pbXBvcnQgQm9keSBmcm9tIFwiLi9ib2R5XCI7XG5pbXBvcnQgQ2FwdGlvbiBmcm9tIFwiLi9jYXB0aW9uXCI7XG5pbXBvcnQgRmlsdGVycyBmcm9tIFwiLi9maWx0ZXJzXCI7XG5pbXBvcnQgRm9vdGVyIGZyb20gXCIuL2Zvb3RlclwiO1xuaW1wb3J0IEhlYWRlciBmcm9tIFwiLi9oZWFkZXJcIjtcbmltcG9ydCBQcm9wc0Jhc2VSZXNvbHZlciBmcm9tIFwiLi9wcm9wcy1yZXNvbHZlclwiO1xuaW1wb3J0IF8gZnJvbSBcIi4vdXRpbHNcIjtcblxuY2xhc3MgQm9vdHN0cmFwVGFibGUgZXh0ZW5kcyBQcm9wc0Jhc2VSZXNvbHZlcihcbiAgUmVhY3QuQ29tcG9uZW50PEJvb3RzdHJhcFRhYmxlUHJvcHM+XG4pIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IEJvb3RzdHJhcFRhYmxlUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnZhbGlkYXRlUHJvcHMoKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZShuZXh0UHJvcHM6IEJvb3RzdHJhcFRhYmxlUHJvcHMpIHtcbiAgICBpZiAobmV4dFByb3BzLm9uRGF0YVNpemVDaGFuZ2UgJiYgIW5leHRQcm9wcy5wYWdpbmF0aW9uKSB7XG4gICAgICBpZiAobmV4dFByb3BzLmRhdGEubGVuZ3RoICE9PSB0aGlzLnByb3BzLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgIG5leHRQcm9wcy5vbkRhdGFTaXplQ2hhbmdlKHsgZGF0YVNpemU6IHRoaXMucHJvcHMuZGF0YS5sZW5ndGggfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRXhwb3NlZCBBUElzXG4gIGdldERhdGEgPSAoKSA9PiB0aGlzLnZpc2libGVSb3dzKCk7XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgbG9hZGluZywgb3ZlcmxheSB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAob3ZlcmxheSkge1xuICAgICAgY29uc3QgTG9hZGluZ092ZXJsYXkgPSBvdmVybGF5KGxvYWRpbmchKTtcbiAgICAgIHJldHVybiA8TG9hZGluZ092ZXJsYXk+e3RoaXMucmVuZGVyVGFibGUoKX08L0xvYWRpbmdPdmVybGF5PjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyVGFibGUoKTtcbiAgfVxuXG4gIHJlbmRlclRhYmxlKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbHVtbnMsXG4gICAgICBrZXlGaWVsZCxcbiAgICAgIHRhYkluZGV4Q2VsbCxcbiAgICAgIGlkLFxuICAgICAgY2xhc3NlcyxcbiAgICAgIGJvb3RzdHJhcDQgPSBmYWxzZSxcbiAgICAgIHN0cmlwZWQgPSBmYWxzZSxcbiAgICAgIGhvdmVyID0gZmFsc2UsXG4gICAgICBib3JkZXJlZCA9IHRydWUsXG4gICAgICBjb25kZW5zZWQgPSBmYWxzZSxcbiAgICAgIG5vRGF0YUluZGljYXRpb24gPSBudWxsLFxuICAgICAgY2FwdGlvbixcbiAgICAgIHJvd1N0eWxlLFxuICAgICAgcm93Q2xhc3NlcyxcbiAgICAgIHdyYXBwZXJDbGFzc2VzLFxuICAgICAgcm93RXZlbnRzLFxuICAgICAgc2VsZWN0Um93ID0ge1xuICAgICAgICBtb2RlOiBST1dfU0VMRUNUX0RJU0FCTEVELFxuICAgICAgICBzZWxlY3RlZDogW10sXG4gICAgICAgIGhpZGVTZWxlY3RDb2x1bW46IHRydWUsXG4gICAgICB9LFxuICAgICAgZXhwYW5kUm93ID0ge1xuICAgICAgICByZW5kZXJlcjogdW5kZWZpbmVkLFxuICAgICAgICBleHBhbmRlZDogW10sXG4gICAgICAgIG5vbkV4cGFuZGFibGU6IFtdLFxuICAgICAgfSxcbiAgICAgIGNlbGxFZGl0ID0ge1xuICAgICAgICBtb2RlOiBudWxsLFxuICAgICAgICBub25FZGl0YWJsZVJvd3M6IFtdLFxuICAgICAgfSxcbiAgICAgIGZpbHRlclBvc2l0aW9uID0gRklMVEVSU19QT1NJVElPTl9JTkxJTkUsXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCB0YWJsZVdyYXBwZXJDbGFzcyA9IGNzKFwicmVhY3QtYm9vdHN0cmFwLXRhYmxlXCIsIHdyYXBwZXJDbGFzc2VzKTtcblxuICAgIGNvbnN0IHRhYmxlQ2xhc3MgPSBjcyhcbiAgICAgIFwidGFibGVcIixcbiAgICAgIHtcbiAgICAgICAgXCJ0YWJsZS1zdHJpcGVkXCI6IHN0cmlwZWQsXG4gICAgICAgIFwidGFibGUtaG92ZXJcIjogaG92ZXIsXG4gICAgICAgIFwidGFibGUtYm9yZGVyZWRcIjogYm9yZGVyZWQsXG4gICAgICAgIFtib290c3RyYXA0ID8gXCJ0YWJsZS1zbVwiIDogXCJ0YWJsZS1jb25kZW5zZWRcIl06IGNvbmRlbnNlZCxcbiAgICAgIH0sXG4gICAgICBjbGFzc2VzXG4gICAgKTtcblxuICAgIGNvbnN0IGhhc0ZpbHRlcnMgPSBjb2x1bW5zLnNvbWUoXG4gICAgICAoY29sOiBhbnkpID0+IGNvbC5maWx0ZXIgfHwgY29sLmZpbHRlclJlbmRlcmVyXG4gICAgKTtcblxuICAgIGNvbnN0IGhhc0Zvb3RlciA9XG4gICAgICBfLmZpbHRlcihjb2x1bW5zLCAoY29sKSA9PiBfLmhhcyhjb2wsIFwiZm9vdGVyXCIpKS5sZW5ndGggPiAwO1xuXG4gICAgY29uc3QgdGFibGVDYXB0aW9uID0gY2FwdGlvbiAmJiAoXG4gICAgICA8Q2FwdGlvbiBib290c3RyYXA0PXtib290c3RyYXA0fT57Y2FwdGlvbn08L0NhcHRpb24+XG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGFibGVXcmFwcGVyQ2xhc3N9PlxuICAgICAgICA8dGFibGUgaWQ9e2lkfSBjbGFzc05hbWU9e3RhYmxlQ2xhc3N9PlxuICAgICAgICAgIHt0YWJsZUNhcHRpb259XG4gICAgICAgICAgPEhlYWRlclxuICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5oZWFkZXJDbGFzc2VzfVxuICAgICAgICAgICAgd3JhcHBlckNsYXNzZXM9e3RoaXMucHJvcHMuaGVhZGVyV3JhcHBlckNsYXNzZXN9XG4gICAgICAgICAgICBzb3J0RmllbGQ9e3RoaXMucHJvcHMuc29ydEZpZWxkfVxuICAgICAgICAgICAgc29ydE9yZGVyPXt0aGlzLnByb3BzLnNvcnRPcmRlcn1cbiAgICAgICAgICAgIG9uU29ydD17dGhpcy5wcm9wcy5vblNvcnR9XG4gICAgICAgICAgICBnbG9iYWxTb3J0Q2FyZXQ9e3RoaXMucHJvcHMuc29ydCAmJiB0aGlzLnByb3BzLnNvcnQuc29ydENhcmV0fVxuICAgICAgICAgICAgb25GaWx0ZXI9e3RoaXMucHJvcHMub25GaWx0ZXJ9XG4gICAgICAgICAgICBjdXJyRmlsdGVycz17dGhpcy5wcm9wcy5jdXJyRmlsdGVyc31cbiAgICAgICAgICAgIG9uRXh0ZXJuYWxGaWx0ZXI9e3RoaXMucHJvcHMub25FeHRlcm5hbEZpbHRlcn1cbiAgICAgICAgICAgIHNlbGVjdFJvdz17c2VsZWN0Um93fVxuICAgICAgICAgICAgZXhwYW5kUm93PXtleHBhbmRSb3d9XG4gICAgICAgICAgICBmaWx0ZXJQb3NpdGlvbj17ZmlsdGVyUG9zaXRpb259XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7aGFzRmlsdGVycyAmJiBmaWx0ZXJQb3NpdGlvbiAhPT0gRklMVEVSU19QT1NJVElPTl9JTkxJTkUgJiYgKFxuICAgICAgICAgICAgPEZpbHRlcnNcbiAgICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmZpbHRlcnNDbGFzc2VzfVxuICAgICAgICAgICAgICBvblNvcnQ9e3RoaXMucHJvcHMub25Tb3J0fVxuICAgICAgICAgICAgICBvbkZpbHRlcj17dGhpcy5wcm9wcy5vbkZpbHRlcn1cbiAgICAgICAgICAgICAgY3VyckZpbHRlcnM9e3RoaXMucHJvcHMuY3VyckZpbHRlcnN9XG4gICAgICAgICAgICAgIGZpbHRlclBvc2l0aW9uPXt0aGlzLnByb3BzLmZpbHRlclBvc2l0aW9ufVxuICAgICAgICAgICAgICBvbkV4dGVybmFsRmlsdGVyPXt0aGlzLnByb3BzLm9uRXh0ZXJuYWxGaWx0ZXJ9XG4gICAgICAgICAgICAgIHNlbGVjdFJvdz17c2VsZWN0Um93fVxuICAgICAgICAgICAgICBleHBhbmRSb3c9e2V4cGFuZFJvd31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8Qm9keVxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmJvZHlDbGFzc2VzfVxuICAgICAgICAgICAgZGF0YT17dGhpcy5nZXREYXRhKCl9XG4gICAgICAgICAgICBrZXlGaWVsZD17a2V5RmllbGR9XG4gICAgICAgICAgICB0YWJJbmRleENlbGw9e3RhYkluZGV4Q2VsbH1cbiAgICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgICBpc0VtcHR5PXt0aGlzLmlzRW1wdHkoKX1cbiAgICAgICAgICAgIHZpc2libGVDb2x1bW5TaXplPXt0aGlzLnZpc2libGVDb2x1bW5TaXplKCl9XG4gICAgICAgICAgICBub0RhdGFJbmRpY2F0aW9uPXtub0RhdGFJbmRpY2F0aW9ufVxuICAgICAgICAgICAgY2VsbEVkaXQ9e2NlbGxFZGl0fVxuICAgICAgICAgICAgc2VsZWN0Um93PXtzZWxlY3RSb3d9XG4gICAgICAgICAgICBleHBhbmRSb3c9e2V4cGFuZFJvd31cbiAgICAgICAgICAgIHJvd1N0eWxlPXtyb3dTdHlsZX1cbiAgICAgICAgICAgIHJvd0NsYXNzZXM9e3Jvd0NsYXNzZXN9XG4gICAgICAgICAgICByb3dFdmVudHM9e3Jvd0V2ZW50c31cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtoYXNGb290ZXIgJiYgKFxuICAgICAgICAgICAgPEZvb3RlclxuICAgICAgICAgICAgICBkYXRhPXt0aGlzLmdldERhdGEoKX1cbiAgICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgICAgc2VsZWN0Um93PXtzZWxlY3RSb3d9XG4gICAgICAgICAgICAgIGV4cGFuZFJvdz17ZXhwYW5kUm93fVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucHJvcHMuZm9vdGVyQ2xhc3Nlc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC90YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQm9vdHN0cmFwVGFibGU7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IFNlbGVjdFJvd1Byb3BzIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBJTkRJQ0FUT1JfUE9TSVRJT05fTEVGVCB9IGZyb20gXCIuLi9jb25zdFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4cGFuZFJvdyB7XG4gIHNob3dFeHBhbmRDb2x1bW4/OiBib29sZWFuO1xuICBleHBhbmRDb2x1bW5Qb3NpdGlvbj86IHN0cmluZztcbiAgbm9uRXhwYW5kYWJsZT86IGFueVtdO1xufVxuXG5pbnRlcmZhY2UgUm93VGVtcGxhdGVQcm9wcyB7XG4gIHJlbmRlckNvbnRlbnQ6ICgpID0+IGFueTtcbiAgY2VsbEVsOiBzdHJpbmc7XG4gIHNlbGVjdFJvdz86IFNlbGVjdFJvd1Byb3BzPGFueT4gfCB1bmRlZmluZWQ7XG4gIGV4cGFuZFJvdz86IEV4cGFuZFJvdztcbiAgW2tleTogc3RyaW5nXTogYW55OyAvLyBGb3IgYW55IG90aGVyIHByb3BzIHlvdSBtaWdodCBoYXZlXG59XG5cbmNvbnN0IFJvd1RlbXBsYXRlOiBSZWFjdC5GQzxSb3dUZW1wbGF0ZVByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IHJlbmRlckNvbnRlbnQsIHNlbGVjdFJvdywgZXhwYW5kUm93LCBjZWxsRWwsIC4uLnJlc3QgfSA9IHByb3BzO1xuXG4gIGNvbnN0IGlzUmVuZGVyRnVuY3Rpb25Db2x1bW5JbkxlZnQgPSAoXG4gICAgcG9zaXRpb246IHN0cmluZyA9IElORElDQVRPUl9QT1NJVElPTl9MRUZUXG4gICk6IGJvb2xlYW4gPT4gcG9zaXRpb24gPT09IElORElDQVRPUl9QT1NJVElPTl9MRUZUO1xuXG4gIGNvbnN0IGNoaWxkcmVucyA9IHJlbmRlckNvbnRlbnQoKSB8fCBbXTtcblxuICBpZiAoc2VsZWN0Um93ICYmIHNlbGVjdFJvdy5oaWRlU2VsZWN0Q29sdW1uICE9PSB0cnVlKSB7XG4gICAgaWYgKGlzUmVuZGVyRnVuY3Rpb25Db2x1bW5JbkxlZnQoc2VsZWN0Um93LnNlbGVjdENvbHVtblBvc2l0aW9uKSkge1xuICAgICAgY2hpbGRyZW5zLnVuc2hpZnQoUmVhY3QuY3JlYXRlRWxlbWVudChjZWxsRWwsIHsga2V5OiBcInNlbGVjdGlvblwiIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hpbGRyZW5zLnB1c2goUmVhY3QuY3JlYXRlRWxlbWVudChjZWxsRWwsIHsga2V5OiBcInNlbGVjdGlvblwiIH0pKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZXhwYW5kUm93ICYmIGV4cGFuZFJvdy5zaG93RXhwYW5kQ29sdW1uKSB7XG4gICAgaWYgKGlzUmVuZGVyRnVuY3Rpb25Db2x1bW5JbkxlZnQoZXhwYW5kUm93LmV4cGFuZENvbHVtblBvc2l0aW9uKSkge1xuICAgICAgY2hpbGRyZW5zLnVuc2hpZnQoUmVhY3QuY3JlYXRlRWxlbWVudChjZWxsRWwsIHsga2V5OiBcImV4cGFuc2lvblwiIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hpbGRyZW5zLnB1c2goUmVhY3QuY3JlYXRlRWxlbWVudChjZWxsRWwsIHsga2V5OiBcImV4cGFuc2lvblwiIH0pKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gPHRyIHsuLi5yZXN0fT57Y2hpbGRyZW5zfTwvdHI+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUm93VGVtcGxhdGU7XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBNb3VzZUV2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBST1dfU0VMRUNUX1NJTkdMRSB9IGZyb20gXCIuLi9jb25zdFwiO1xuaW1wb3J0IF8gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBCb290c3RyYXBDb250ZXh0IH0gZnJvbSBcIi4uL2NvbnRleHRzL2Jvb3RzdHJhcFwiO1xuXG5pbnRlcmZhY2UgU2VsZWN0aW9uQ2VsbFByb3BzIHtcbiAgbW9kZT86IHN0cmluZztcbiAgcm93S2V5OiBhbnk7XG4gIHNlbGVjdGVkOiBib29sZWFuO1xuICBvblJvd1NlbGVjdD86IChcbiAgICByb3dLZXk6IGFueSxcbiAgICBjaGVja2VkOiBib29sZWFuLFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgZTogTW91c2VFdmVudFxuICApID0+IHZvaWQ7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgcm93SW5kZXg/OiBudW1iZXI7XG4gIHRhYkluZGV4PzogbnVtYmVyO1xuICBjbGlja1RvU2VsZWN0PzogYm9vbGVhbjtcbiAgc2VsZWN0aW9uUmVuZGVyZXI/OiAoYXJnczoge1xuICAgIG1vZGU6IHN0cmluZztcbiAgICBjaGVja2VkOiBib29sZWFuO1xuICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICByb3dpbmRleD86IG51bWJlcjtcbiAgICByb3drZXk6IGFueTtcbiAgfSkgPT4gUmVhY3QuUmVhY3ROb2RlO1xuICBzZWxlY3RDb2x1bW5TdHlsZT86XG4gIHwgUmVhY3QuQ1NTUHJvcGVydGllc1xuICB8ICgoYXJnczoge1xuICAgIGNoZWNrZWQ6IGJvb2xlYW47XG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIHJvd2luZGV4PzogbnVtYmVyO1xuICAgIHJvd2tleTogYW55O1xuICB9KSA9PiBSZWFjdC5DU1NQcm9wZXJ0aWVzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VsZWN0aW9uQ2VsbCBleHRlbmRzIENvbXBvbmVudDxTZWxlY3Rpb25DZWxsUHJvcHM+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IFNlbGVjdGlvbkNlbGxQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZUNsaWNrID0gdGhpcy5oYW5kbGVDbGljay5iaW5kKHRoaXMpO1xuICB9XG5cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wczogU2VsZWN0aW9uQ2VsbFByb3BzKSB7XG4gICAgY29uc3Qgc2hvdWxkVXBkYXRlID1cbiAgICAgIHRoaXMucHJvcHMucm93SW5kZXggIT09IG5leHRQcm9wcy5yb3dJbmRleCB8fFxuICAgICAgdGhpcy5wcm9wcy5zZWxlY3RlZCAhPT0gbmV4dFByb3BzLnNlbGVjdGVkIHx8XG4gICAgICB0aGlzLnByb3BzLmRpc2FibGVkICE9PSBuZXh0UHJvcHMuZGlzYWJsZWQgfHxcbiAgICAgIHRoaXMucHJvcHMucm93S2V5ICE9PSBuZXh0UHJvcHMucm93S2V5IHx8XG4gICAgICB0aGlzLnByb3BzLnRhYkluZGV4ICE9PSBuZXh0UHJvcHMudGFiSW5kZXggfHxcbiAgICAgIHRoaXMucHJvcHMuc2VsZWN0Q29sdW1uU3R5bGUgIT09IG5leHRQcm9wcy5zZWxlY3RDb2x1bW5TdHlsZTtcblxuICAgIHJldHVybiBzaG91bGRVcGRhdGU7XG4gIH1cblxuICBoYW5kbGVDbGljayhlOiBNb3VzZUV2ZW50PEhUTUxUYWJsZUNlbGxFbGVtZW50Pikge1xuICAgIGNvbnN0IHtcbiAgICAgIG1vZGU6IGlucHV0VHlwZSxcbiAgICAgIHJvd0tleSxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgb25Sb3dTZWxlY3QsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIHJvd0luZGV4ID0gLTEsXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoZGlzYWJsZWQpIHJldHVybjtcblxuICAgIGNvbnN0IGNoZWNrZWQgPSBpbnB1dFR5cGUgPT09IFJPV19TRUxFQ1RfU0lOR0xFID8gdHJ1ZSA6ICFzZWxlY3RlZDtcblxuICAgIG9uUm93U2VsZWN0IShyb3dLZXksIGNoZWNrZWQsIHJvd0luZGV4LCBlKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICByb3dLZXksXG4gICAgICBtb2RlOiBpbnB1dFR5cGUsXG4gICAgICBzZWxlY3RlZCxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgdGFiSW5kZXggPSAtMSxcbiAgICAgIHJvd0luZGV4LFxuICAgICAgc2VsZWN0aW9uUmVuZGVyZXIsXG4gICAgICBzZWxlY3RDb2x1bW5TdHlsZSxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IGF0dHJzOiBSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MVGFibGVDZWxsRWxlbWVudD4gPSB7fTtcbiAgICBpZiAodGFiSW5kZXggIT09IC0xKSBhdHRycy50YWJJbmRleCA9IHRhYkluZGV4O1xuXG4gICAgYXR0cnMuc3R5bGUgPSAoXy5pc0Z1bmN0aW9uKHNlbGVjdENvbHVtblN0eWxlKVxuICAgICAgPyBzZWxlY3RDb2x1bW5TdHlsZSh7XG4gICAgICAgIGNoZWNrZWQ6IHNlbGVjdGVkLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgcm93aW5kZXg6IHJvd0luZGV4LFxuICAgICAgICByb3drZXk6IHJvd0tleSxcbiAgICAgIH0pXG4gICAgICA6IHNlbGVjdENvbHVtblN0eWxlKSBhcyBhbnk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEJvb3RzdHJhcENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgIHsoeyBib290c3RyYXA0IH0pID0+IChcbiAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwic2VsZWN0aW9uLWNlbGxcIiBvbkNsaWNrPXt0aGlzLmhhbmRsZUNsaWNrfSBkYXRhLXRlc3RpZD1cInNlbGVjdGlvbi1jZWxsXCIgey4uLmF0dHJzIGFzIGFueX0+XG4gICAgICAgICAgICB7c2VsZWN0aW9uUmVuZGVyZXIgPyAoXG4gICAgICAgICAgICAgIHNlbGVjdGlvblJlbmRlcmVyKHtcbiAgICAgICAgICAgICAgICBtb2RlOiBpbnB1dFR5cGUhLFxuICAgICAgICAgICAgICAgIGNoZWNrZWQ6IHNlbGVjdGVkLFxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICByb3dpbmRleDogcm93SW5kZXgsXG4gICAgICAgICAgICAgICAgcm93a2V5OiByb3dLZXksXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPXtpbnB1dFR5cGV9XG4gICAgICAgICAgICAgICAgY2hlY2tlZD17c2VsZWN0ZWR9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkID8/IGZhbHNlfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Ym9vdHN0cmFwNCA/IFwic2VsZWN0aW9uLWlucHV0LTRcIiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eygpID0+IHsgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgKX1cbiAgICAgIDwvQm9vdHN0cmFwQ29udGV4dC5Db25zdW1lcj5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IGdldFJvd0J5Um93SWQgfSBmcm9tIFwiLi9yb3dzXCI7XG5cbmV4cG9ydCBjb25zdCBpc0FueUV4cGFuZHMgPSAoXG4gIGRhdGE6IGFueSxcbiAga2V5RmllbGQ6IGFueSxcbiAgZXhwYW5kZWQ6IGFueVtdID0gW11cbikgPT4ge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCByb3dLZXkgPSBfLmdldChkYXRhW2ldLCBrZXlGaWVsZCk7XG4gICAgaWYgKHR5cGVvZiBleHBhbmRlZC5maW5kKHggPT4geCA9PT0gcm93S2V5KSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBleHBhbmRhYmxlS2V5cyA9IChkYXRhOiBhbnksIGtleUZpZWxkOiBhbnksIHNraXBzOiBhbnlbXSA9IFtdKSA9PiB7XG4gIGlmIChza2lwcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZGF0YS5tYXAoKHJvdzogYW55KSA9PiBfLmdldChyb3csIGtleUZpZWxkKSk7XG4gIH1cbiAgcmV0dXJuIGRhdGFcbiAgICAuZmlsdGVyKChyb3c6IGFueSkgPT4gIV8uY29udGFpbnMoc2tpcHMsIF8uZ2V0KHJvdywga2V5RmllbGQpKSlcbiAgICAubWFwKChyb3c6IGFueSkgPT4gXy5nZXQocm93LCBrZXlGaWVsZCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEV4cGFuZGVkUm93cyA9IChkYXRhOiBhbnksIGtleUZpZWxkOiBhbnksIGV4cGFuZGVkOiBhbnkpID0+XG4gIGV4cGFuZGVkLm1hcCgoazogYW55KSA9PiBnZXRSb3dCeVJvd0lkKGRhdGEsIGtleUZpZWxkLCBrKSk7XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBkYXRhT3BlcmF0b3IgZnJvbSBcIi4uL3N0b3JlL29wZXJhdG9yc1wiO1xuaW1wb3J0IF8gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmludGVyZmFjZSBSb3dFeHBhbmRQcm92aWRlclByb3BzIHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgZGF0YTogYW55W107XG4gIGtleUZpZWxkOiBzdHJpbmc7XG4gIGV4cGFuZFJvdzoge1xuICAgIGV4cGFuZGVkPzogYW55W107XG4gICAgaXNDbG9zaW5nPzogYW55W107XG4gICAgb25FeHBhbmQ/OiAocm93OiBhbnksIGV4cGFuZGVkOiBib29sZWFuLCByb3dJbmRleDogbnVtYmVyLCBlOiBhbnkpID0+IHZvaWQ7XG4gICAgb25FeHBhbmRBbGw/OiAoZXhwYW5kQWxsOiBib29sZWFuLCBleHBhbmRlZFJvd3M6IGFueVtdLCBlOiBhbnkpID0+IHZvaWQ7XG4gICAgb25seU9uZUV4cGFuZGluZz86IGJvb2xlYW47XG4gICAgbm9uRXhwYW5kYWJsZT86IGFueVtdO1xuICAgIHJlbmRlcmVyPzogKCkgPT4gdm9pZDtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSb3dFeHBhbmRDb250ZXh0VmFsdWUge1xuICBleHBhbmRlZDogYW55W107XG4gIGlzQ2xvc2luZzogYW55W107XG4gIG5vbkV4cGFuZGFibGU/OiBhbnlbXTtcbiAgb25DbG9zZWQ6IChjbG9zZWRSb3c6IGFueSkgPT4gdm9pZDtcbiAgaXNBbnlFeHBhbmRzOiBib29sZWFuO1xuICBvblJvd0V4cGFuZDogKFxuICAgIHJvd0tleTogYW55LFxuICAgIGV4cGFuZGVkOiBib29sZWFuLFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgZTogYW55XG4gICkgPT4gdm9pZDtcbiAgb25BbGxSb3dFeHBhbmQ6IChlOiBhbnksIGV4cGFuZEFsbDogYm9vbGVhbikgPT4gdm9pZDtcbiAgb25FeHBhbmQ/OiAocm93OiBhbnksIGV4cGFuZGVkOiBib29sZWFuLCByb3dJbmRleDogbnVtYmVyLCBlOiBhbnkpID0+IHZvaWQ7XG4gIG9uRXhwYW5kQWxsPzogKGV4cGFuZEFsbDogYm9vbGVhbiwgZXhwYW5kZWRSb3dzOiBhbnlbXSwgZTogYW55KSA9PiB2b2lkO1xuICBvbmx5T25lRXhwYW5kaW5nPzogYm9vbGVhbjtcbn1cblxuY29uc3QgZGVmYXVsdFJvd0V4cGFuZENvbnRleHQgPSB7XG4gIGV4cGFuZGVkOiBbXSxcbiAgaXNDbG9zaW5nOiBbXSxcbiAgb25DbG9zZWQ6ICgpID0+IHt9LFxuICBpc0FueUV4cGFuZHM6IGZhbHNlLFxuICBvblJvd0V4cGFuZDogKCkgPT4ge30sXG4gIG9uQWxsUm93RXhwYW5kOiAoKSA9PiB7fSxcbn07XG5jb25zdCBSb3dFeHBhbmRDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxSb3dFeHBhbmRDb250ZXh0VmFsdWU+KFxuICBkZWZhdWx0Um93RXhwYW5kQ29udGV4dFxuKTtcblxuY2xhc3MgUm93RXhwYW5kUHJvdmlkZXIgZXh0ZW5kcyBDb21wb25lbnQ8Um93RXhwYW5kUHJvdmlkZXJQcm9wcz4ge1xuICBzdGF0ZSA9IHtcbiAgICBleHBhbmRlZDogdGhpcy5wcm9wcy5leHBhbmRSb3cuZXhwYW5kZWQgfHwgW10sXG4gICAgaXNDbG9zaW5nOiB0aGlzLnByb3BzLmV4cGFuZFJvdy5pc0Nsb3NpbmcgfHwgW10sXG4gIH07XG5cbiAgb25DbG9zZWQgPSAoY2xvc2VkUm93OiBhbnkpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGlzQ2xvc2luZzogdGhpcy5zdGF0ZS5pc0Nsb3NpbmcuZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUgIT09IGNsb3NlZFJvdyksXG4gICAgfSk7XG4gIH07XG5cbiAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhcbiAgICBuZXh0UHJvcHM6IFJvd0V4cGFuZFByb3ZpZGVyUHJvcHMsXG4gICAgcHJldlN0YXRlOiB7IGV4cGFuZGVkOiBhbnlbXTsgaXNDbG9zaW5nOiBhbnlbXSB9XG4gICkge1xuICAgIGNvbnN0IHsgZXhwYW5kUm93IH0gPSBuZXh0UHJvcHM7XG5cbiAgICBpZiAoZXhwYW5kUm93KSB7XG4gICAgICBjb25zdCB7IG5vbkV4cGFuZGFibGUgPSBbXSB9ID0gZXhwYW5kUm93O1xuXG4gICAgICBsZXQgbmV4dEV4cGFuZGVkID0gWy4uLihleHBhbmRSb3cuZXhwYW5kZWQgfHwgcHJldlN0YXRlLmV4cGFuZGVkKV07XG4gICAgICBuZXh0RXhwYW5kZWQgPSBuZXh0RXhwYW5kZWQuZmlsdGVyKFxuICAgICAgICAocm93SWQpID0+ICFfLmNvbnRhaW5zKG5vbkV4cGFuZGFibGUsIHJvd0lkKVxuICAgICAgKTtcblxuICAgICAgY29uc3QgaXNDbG9zaW5nID0gcHJldlN0YXRlLmV4cGFuZGVkLnJlZHVjZSgoYWNjOiBhbnksIGN1cjogYW55KSA9PiB7XG4gICAgICAgIGlmICghXy5jb250YWlucyhuZXh0RXhwYW5kZWQsIGN1cikpIHtcbiAgICAgICAgICBhY2MucHVzaChjdXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCBbXSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4cGFuZGVkOiBuZXh0RXhwYW5kZWQsXG4gICAgICAgIGlzQ2xvc2luZyxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwcmV2U3RhdGU7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlUm93RXhwYW5kID0gKFxuICAgIHJvd0tleTogYW55LFxuICAgIGlzRXhwYW5kZWQ6IGJvb2xlYW4sXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBlOiBhbnlcbiAgKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgZGF0YSxcbiAgICAgIGtleUZpZWxkLFxuICAgICAgZXhwYW5kUm93OiB7IG9uRXhwYW5kLCBvbmx5T25lRXhwYW5kaW5nLCBub25FeHBhbmRhYmxlIH0sXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAobm9uRXhwYW5kYWJsZSAmJiBfLmNvbnRhaW5zKG5vbkV4cGFuZGFibGUsIHJvd0tleSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgY3VyckV4cGFuZGVkID0gWy4uLnRoaXMuc3RhdGUuZXhwYW5kZWRdO1xuICAgIGxldCBjdXJySXNDbG9zaW5nID0gWy4uLnRoaXMuc3RhdGUuaXNDbG9zaW5nXTtcblxuICAgIGlmIChpc0V4cGFuZGVkKSB7XG4gICAgICBpZiAob25seU9uZUV4cGFuZGluZykge1xuICAgICAgICBjdXJySXNDbG9zaW5nID0gY3VycklzQ2xvc2luZy5jb25jYXQoY3VyckV4cGFuZGVkKTtcbiAgICAgICAgY3VyckV4cGFuZGVkID0gW3Jvd0tleV07XG4gICAgICB9IGVsc2UgY3VyckV4cGFuZGVkLnB1c2gocm93S2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycklzQ2xvc2luZy5wdXNoKHJvd0tleSk7XG4gICAgICBjdXJyRXhwYW5kZWQgPSBjdXJyRXhwYW5kZWQuZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUgIT09IHJvd0tleSk7XG4gICAgfVxuXG4gICAgaWYgKG9uRXhwYW5kKSB7XG4gICAgICBjb25zdCByb3cgPSBkYXRhT3BlcmF0b3IuZ2V0Um93QnlSb3dJZChkYXRhLCBrZXlGaWVsZCwgcm93S2V5KTtcbiAgICAgIG9uRXhwYW5kKHJvdywgaXNFeHBhbmRlZCwgcm93SW5kZXgsIGUpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHsgZXhwYW5kZWQ6IGN1cnJFeHBhbmRlZCwgaXNDbG9zaW5nOiBjdXJySXNDbG9zaW5nIH0pKTtcbiAgfTtcblxuICBoYW5kbGVBbGxSb3dFeHBhbmQgPSAoZTogYW55LCBleHBhbmRBbGw6IGJvb2xlYW4pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBkYXRhLFxuICAgICAga2V5RmllbGQsXG4gICAgICBleHBhbmRSb3c6IHsgb25FeHBhbmRBbGwsIG5vbkV4cGFuZGFibGUgfSxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHsgZXhwYW5kZWQgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICBsZXQgY3VyckV4cGFuZGVkOiBhbnlbXTtcblxuICAgIGlmIChleHBhbmRBbGwpIHtcbiAgICAgIGN1cnJFeHBhbmRlZCA9IGV4cGFuZGVkLmNvbmNhdChcbiAgICAgICAgZGF0YU9wZXJhdG9yLmV4cGFuZGFibGVLZXlzKGRhdGEsIGtleUZpZWxkLCBub25FeHBhbmRhYmxlKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VyckV4cGFuZGVkID0gZXhwYW5kZWQuZmlsdGVyKFxuICAgICAgICAocykgPT4gdHlwZW9mIGRhdGEuZmluZCgoZCkgPT4gXy5nZXQoZCwga2V5RmllbGQpID09PSBzKSA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAob25FeHBhbmRBbGwpIHtcbiAgICAgIG9uRXhwYW5kQWxsKFxuICAgICAgICBleHBhbmRBbGwsXG4gICAgICAgIGRhdGFPcGVyYXRvci5nZXRFeHBhbmRlZFJvd3MoZGF0YSwga2V5RmllbGQsIGN1cnJFeHBhbmRlZCksXG4gICAgICAgIGVcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyBleHBhbmRlZDogY3VyckV4cGFuZGVkIH0pKTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBkYXRhLCBrZXlGaWVsZCB9ID0gdGhpcy5wcm9wcztcblxuICAgIHJldHVybiAoXG4gICAgICA8Um93RXhwYW5kQ29udGV4dC5Qcm92aWRlclxuICAgICAgICB2YWx1ZT17e1xuICAgICAgICAgIC4uLnRoaXMucHJvcHMuZXhwYW5kUm93LFxuICAgICAgICAgIG5vbkV4cGFuZGFibGU6IHRoaXMucHJvcHMuZXhwYW5kUm93Lm5vbkV4cGFuZGFibGUsXG4gICAgICAgICAgZXhwYW5kZWQ6IHRoaXMuc3RhdGUuZXhwYW5kZWQsXG4gICAgICAgICAgaXNDbG9zaW5nOiB0aGlzLnN0YXRlLmlzQ2xvc2luZyxcbiAgICAgICAgICBvbkNsb3NlZDogdGhpcy5vbkNsb3NlZCxcbiAgICAgICAgICBpc0FueUV4cGFuZHM6IGRhdGFPcGVyYXRvci5pc0FueUV4cGFuZHMoXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAga2V5RmllbGQsXG4gICAgICAgICAgICB0aGlzLnN0YXRlLmV4cGFuZGVkXG4gICAgICAgICAgKSxcbiAgICAgICAgICBvblJvd0V4cGFuZDogdGhpcy5oYW5kbGVSb3dFeHBhbmQsXG4gICAgICAgICAgb25BbGxSb3dFeHBhbmQ6IHRoaXMuaGFuZGxlQWxsUm93RXhwYW5kLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgIDwvUm93RXhwYW5kQ29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+ICh7XG4gIFByb3ZpZGVyOiBSb3dFeHBhbmRQcm92aWRlcixcbiAgQ29uc3VtZXI6IFJvd0V4cGFuZENvbnRleHQuQ29uc3VtZXIsXG59KTtcbiIsImltcG9ydCBSZWFjdCwgeyBGQywgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmludGVyZmFjZSBDYXB0aW9uUHJvcHMge1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgYm9vdHN0cmFwND86IGJvb2xlYW47XG59XG5cbmNvbnN0IENhcHRpb246IEZDPENhcHRpb25Qcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgaWYgKCFwcm9wcy5jaGlsZHJlbikgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgY2FwdGlvbiA9IHByb3BzLmJvb3RzdHJhcDQgPyAoXG4gICAgPGNhcHRpb24gc3R5bGU9eyB7IGNhcHRpb25TaWRlOiBcInRvcFwiIH0gfT57cHJvcHMuY2hpbGRyZW59PC9jYXB0aW9uPlxuICApIDogKFxuICAgIDxjYXB0aW9uPntwcm9wcy5jaGlsZHJlbn08L2NhcHRpb24+XG4gICk7XG5cbiAgcmV0dXJuIGNhcHRpb247XG59O1xuXG4vLyBDYXB0aW9uLnByb3BUeXBlcyA9IHtcbi8vICAgY2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuLy8gICAgIFByb3BUeXBlcy5ub2RlLFxuLy8gICAgIFByb3BUeXBlcy5zdHJpbmdcbi8vICAgXSksXG4vLyAgIGJvb3RzdHJhcDQ6IFByb3BUeXBlcy5ib29sXG4vLyB9O1xuXG5leHBvcnQgZGVmYXVsdCBDYXB0aW9uO1xuIiwiaW1wb3J0IF8gZnJvbSBcIi4vdXRpbHNcIjtcblxuY29uc3QgZXZlbnRzOiBzdHJpbmdbXSA9IFtcbiAgXCJvbkNsaWNrXCIsXG4gIFwib25Eb3VibGVDbGlja1wiLFxuICBcIm9uTW91c2VFbnRlclwiLFxuICBcIm9uTW91c2VMZWF2ZVwiLFxuICBcIm9uQ29udGV4dE1lbnVcIixcbiAgXCJvbkF1eENsaWNrXCJcbl07XG5cbmludGVyZmFjZSBDZWxsRXZlbnREZWxlZ2F0ZXJQcm9wcyB7XG4gIGNvbHVtbjogYW55O1xuICBjb2x1bW5JbmRleD86IG51bWJlcjtcbiAgaW5kZXg6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IENlbGxFdmVudERlbGVnYXRlciA9IDxcbiAgVCBleHRlbmRzIG5ldyAoLi4uYXJnczogYW55W10pID0+IGFueVxuPihFeHRlbmRCYXNlOiBUKSA9PiB7XG4gIHJldHVybiBjbGFzcyBleHRlbmRzIEV4dGVuZEJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKC4uLnByb3BzOiBhbnlbXSkge1xuICAgICAgc3VwZXIoLi4ucHJvcHMpO1xuICAgICAgdGhpcy5jcmVhdGVEZWZhdWx0RXZlbnRIYW5kbGVyID1cbiAgICAgICAgdGhpcy5jcmVhdGVEZWZhdWx0RXZlbnRIYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgY3JlYXRlRGVmYXVsdEV2ZW50SGFuZGxlcihcbiAgICAgIGNiOiAoZTogYW55LCBjb2x1bW46IGFueSwgY29sdW1uSW5kZXg6IG51bWJlcikgPT4gdm9pZFxuICAgICkge1xuICAgICAgcmV0dXJuIChlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgeyBjb2x1bW4sIGNvbHVtbkluZGV4LCBpbmRleCB9OiBDZWxsRXZlbnREZWxlZ2F0ZXJQcm9wcyA9XG4gICAgICAgICAgdGhpcy5wcm9wcztcbiAgICAgICAgY2IoZSwgY29sdW1uLCB0eXBlb2YgY29sdW1uSW5kZXggIT09IFwidW5kZWZpbmVkXCIgPyBjb2x1bW5JbmRleCA6IGluZGV4KTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZGVsZWdhdGUoYXR0cnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgICAgY29uc3QgbmV3QXR0cnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7IC4uLmF0dHJzIH07XG4gICAgICBPYmplY3Qua2V5cyhhdHRycykuZm9yRWFjaCgoYXR0cikgPT4ge1xuICAgICAgICBpZiAoXy5pbmNsdWRlcyhldmVudHMsIGF0dHIpKSB7XG4gICAgICAgICAgbmV3QXR0cnNbYXR0cl0gPSB0aGlzLmNyZWF0ZURlZmF1bHRFdmVudEhhbmRsZXIoYXR0cnNbYXR0cl0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXdBdHRycztcbiAgICB9XG4gIH07XG59XG4iLCJpbXBvcnQgUmVhY3QsIHsgRkMgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJvb3RzdHJhcENvbnRleHQgfSBmcm9tIFwiLi4vY29udGV4dHMvYm9vdHN0cmFwXCI7XG5cbmNvbnN0IFNvcnRTeW1ib2w6IEZDID0gKCkgPT4gKFxuICA8Qm9vdHN0cmFwQ29udGV4dC5Db25zdW1lcj5cbiAgICB7KHsgYm9vdHN0cmFwNCB9KSA9PlxuICAgICAgYm9vdHN0cmFwNCA/IChcbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwib3JkZXItNFwiIC8+XG4gICAgICApIDogKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJvcmRlclwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImRyb3Bkb3duXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJjYXJldFwiIC8+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImRyb3B1cFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiY2FyZXRcIiAvPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKVxuICAgIH1cbiAgPC9Cb290c3RyYXBDb250ZXh0LkNvbnN1bWVyPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgU29ydFN5bWJvbDtcbiIsImltcG9ydCB7IFRZUEVfQk9PTEVBTiwgVFlQRV9EQVRFLCBUWVBFX05VTUJFUiwgVFlQRV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RcIjtcblxuZXhwb3J0IGNvbnN0IHR5cGVDb252ZXJ0ID0gKHR5cGU6IGFueSwgdmFsdWU6IGFueSkgPT4ge1xuICBpZiAodHlwZSA9PT0gVFlQRV9TVFJJTkcpIHtcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBUWVBFX05VTUJFUikge1xuICAgIHJldHVybiBOdW1iZXIodmFsdWUpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IFRZUEVfQk9PTEVBTikge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZSA9PT0gXCJ0cnVlXCI7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gVFlQRV9EQVRFKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59O1xuIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgQ2VsbCBmcm9tIFwiLi4vY2VsbFwiO1xuaW1wb3J0IF8gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBSb3dQcm9wcyB9IGZyb20gXCIuL3Nob3VsZC11cGRhdGVyXCI7XG5cbmludGVyZmFjZSBSb3dQdXJlQ29udGVudFByb3BzIGV4dGVuZHMgUm93UHJvcHMge1xuICBhdHN0YXJ0PzogKHJvd0luZGV4OiBudW1iZXIsIGNvbHVtbkluZGV4OiBudW1iZXIpID0+IHZvaWQ7XG4gIHNob3VsZFVwZGF0ZT86IGJvb2xlYW47XG4gIGlzRWRpdGFibGU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSb3dQdXJlQ29udGVudCBleHRlbmRzIENvbXBvbmVudDxSb3dQdXJlQ29udGVudFByb3BzPiB7XG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6IFJvd1B1cmVDb250ZW50UHJvcHMpIHtcbiAgICBpZiAodHlwZW9mIG5leHRQcm9wcy5zaG91bGRVcGRhdGUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHJldHVybiBuZXh0UHJvcHMuc2hvdWxkVXBkYXRlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICByb3csXG4gICAgICBrZXlGaWVsZCxcbiAgICAgIGNvbHVtbnMsXG4gICAgICByb3dJbmRleCxcbiAgICAgIGlzRWRpdGFibGUsXG4gICAgICBlZGl0aW5nUm93SWR4LFxuICAgICAgZWRpdGluZ0NvbElkeCxcbiAgICAgIGF0c3RhcnQsXG4gICAgICBjbGlja1RvRWRpdCxcbiAgICAgIGRiY2xpY2tUb0VkaXQsXG4gICAgICBFZGl0aW5nQ2VsbENvbXBvbmVudCxcbiAgICAgIHRhYkluZGV4U3RhcnQsXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBsZXQgdGFiSW5kZXggPSB0YWJJbmRleFN0YXJ0O1xuXG4gICAgcmV0dXJuIGNvbHVtbnM/Lm1hcCgoY29sdW1uLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgeyBkYXRhRmllbGQgfSA9IGNvbHVtbjtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBfLmdldChyb3csIGRhdGFGaWVsZCk7XG4gICAgICBpZiAoXG4gICAgICAgIHJvd0luZGV4ID09PSBlZGl0aW5nUm93SWR4ICYmXG4gICAgICAgIGluZGV4ID09PSBlZGl0aW5nQ29sSWR4ICYmXG4gICAgICAgIEVkaXRpbmdDZWxsQ29tcG9uZW50XG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8RWRpdGluZ0NlbGxDb21wb25lbnRcbiAgICAgICAgICAgIGtleT17YCR7Y29udGVudH0tJHtpbmRleH0tZWRpdGluZ2B9XG4gICAgICAgICAgICByb3c9e3Jvd31cbiAgICAgICAgICAgIHJvd0luZGV4PXtyb3dJbmRleH1cbiAgICAgICAgICAgIGNvbHVtbj17Y29sdW1ufVxuICAgICAgICAgICAgY29sdW1uSW5kZXg9e2luZGV4fVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICAvLyByZW5kZXIgY2VsbFxuICAgICAgbGV0IGNlbGxUaXRsZTtcbiAgICAgIGxldCBjZWxsU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7fTtcbiAgICAgIGxldCBjZWxsQXR0cnM6IFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZUNlbGxFbGVtZW50PiA9IHt9O1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW4uYXR0cnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjZWxsQXR0cnMgPSB7IC4uLmNvbHVtbi5hdHRycyhjb250ZW50LCByb3csIHJvd0luZGV4LCBpbmRleCkgfTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbHVtbi5hdHRycyA9PT0gXCJvYmplY3RcIiAmJiBjb2x1bW4uYXR0cnMgIT09IG51bGwpIHtcbiAgICAgICAgY2VsbEF0dHJzID0geyAuLi5jb2x1bW4uYXR0cnMgfTtcbiAgICAgIH1cblxuXG4gICAgICBpZiAoY29sdW1uLmV2ZW50cykge1xuICAgICAgICBjb25zdCBldmVudHMgPSB7IC4uLmNvbHVtbi5ldmVudHMgfTtcbiAgICAgICAgT2JqZWN0LmtleXMoZXZlbnRzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICBjb25zdCBvcmlnaW5GbiA9IGV2ZW50c1trZXldO1xuICAgICAgICAgIGV2ZW50c1trZXldID0gKC4uLnJlc3Q6IGFueVtdKSA9PiBvcmlnaW5GbiguLi5yZXN0LCByb3csIHJvd0luZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNlbGxBdHRycyA9IHsgLi4uY2VsbEF0dHJzLCAuLi5ldmVudHMgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2VsbENsYXNzZXMgPSBfLmlzRnVuY3Rpb24oY29sdW1uLmNsYXNzZXMpXG4gICAgICAgID8gY29sdW1uLmNsYXNzZXMoY29udGVudCwgcm93LCByb3dJbmRleCwgaW5kZXgpXG4gICAgICAgIDogY29sdW1uLmNsYXNzZXM7XG5cbiAgICAgIGlmIChjb2x1bW4uc3R5bGUpIHtcbiAgICAgICAgY2VsbFN0eWxlID0gXy5pc0Z1bmN0aW9uKGNvbHVtbi5zdHlsZSlcbiAgICAgICAgICA/IGNvbHVtbi5zdHlsZShjb250ZW50LCByb3csIHJvd0luZGV4LCBpbmRleClcbiAgICAgICAgICA6IGNvbHVtbi5zdHlsZTtcbiAgICAgICAgY2VsbFN0eWxlID0geyAuLi5jZWxsU3R5bGUgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbHVtbi50aXRsZSkge1xuICAgICAgICBjZWxsVGl0bGUgPSBfLmlzRnVuY3Rpb24oY29sdW1uLnRpdGxlKVxuICAgICAgICAgID8gY29sdW1uLnRpdGxlKGNvbnRlbnQsIHJvdywgcm93SW5kZXgsIGluZGV4KVxuICAgICAgICAgIDogY29udGVudDtcbiAgICAgICAgY2VsbEF0dHJzLnRpdGxlID0gY2VsbFRpdGxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29sdW1uLmFsaWduKSB7XG4gICAgICAgIGNlbGxTdHlsZS50ZXh0QWxpZ24gPSBfLmlzRnVuY3Rpb24oY29sdW1uLmFsaWduKVxuICAgICAgICAgID8gY29sdW1uLmFsaWduKGNvbnRlbnQsIHJvdywgcm93SW5kZXgsIGluZGV4KVxuICAgICAgICAgIDogY29sdW1uLmFsaWduO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2VsbENsYXNzZXMpIGNlbGxBdHRycy5jbGFzc05hbWUgPSBjZWxsQ2xhc3NlcztcbiAgICAgIGlmICghXy5pc0VtcHR5T2JqZWN0KGNlbGxTdHlsZSkpIGNlbGxBdHRycy5zdHlsZSA9IGNlbGxTdHlsZTtcblxuICAgICAgbGV0IGVkaXRhYmxlQ2VsbCA9IF8uaXNEZWZpbmVkKGNvbHVtbi5lZGl0YWJsZSkgPyBjb2x1bW4uZWRpdGFibGUgOiB0cnVlO1xuICAgICAgaWYgKGNvbHVtbi5kYXRhRmllbGQgPT09IGtleUZpZWxkIHx8ICFpc0VkaXRhYmxlKSBlZGl0YWJsZUNlbGwgPSBmYWxzZTtcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24oY29sdW1uLmVkaXRhYmxlKSkge1xuICAgICAgICBlZGl0YWJsZUNlbGwgPSBjb2x1bW4uZWRpdGFibGUoY29udGVudCwgcm93LCByb3dJbmRleCwgaW5kZXgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHRhYkluZGV4U3RhcnQgPT09ICdudW1iZXInICYmIHRhYkluZGV4U3RhcnQgIT09IC0xKSB7XG4gICAgICAgIGNlbGxBdHRycy50YWJJbmRleCA9IHRhYkluZGV4ITtcbiAgICAgICAgdGFiSW5kZXggPSB0YWJJbmRleCEgKyAxO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Q2VsbFxuICAgICAgICAgIGtleT17YCR7Y29udGVudH0tJHtpbmRleH1gfVxuICAgICAgICAgIHJvdz17cm93fVxuICAgICAgICAgIGVkaXRhYmxlPXtlZGl0YWJsZUNlbGwudG9TdHJpbmcoKX1cbiAgICAgICAgICByb3dpbmRleD17cm93SW5kZXggPz8gMH1cbiAgICAgICAgICBjb2x1bW5pbmRleD17aW5kZXh9XG4gICAgICAgICAgY29sdW1uPXtjb2x1bW59XG4gICAgICAgICAgYXRzdGFydD17YXRzdGFydH1cbiAgICAgICAgICBjbGlja3RvZWRpdD17Y2xpY2tUb0VkaXQgPyBjbGlja1RvRWRpdC50b1N0cmluZygpIDogXCJmYWxzZVwifVxuICAgICAgICAgIGRiY2xpY2t0b2VkaXQ9e2RiY2xpY2tUb0VkaXQgPyBkYmNsaWNrVG9FZGl0LnRvU3RyaW5nKCkgOiBcImZhbHNlXCJ9XG4gICAgICAgICAgey4uLmNlbGxBdHRyc31cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIENvbHVtblByb3ZpZGVyUHJvcHMge1xuICBkYXRhOiBhbnk7XG4gIGNvbHVtbnM6IGFueVtdO1xuICB0b2dnbGVzPzogeyBbZGF0YUZpZWxkOiBzdHJpbmddOiBib29sZWFuIH07XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG59XG5cbmludGVyZmFjZSBDb2x1bW5Db250ZXh0VmFsdWUge1xuICBjb2x1bW5zOiBhbnlbXTtcbiAgdG9nZ2xlcz86IHsgW2RhdGFGaWVsZDogc3RyaW5nXTogYm9vbGVhbiB9O1xufVxuXG5jb25zdCBkZWZhdWx0Q29sdW1uQ29udGV4dCA9IHsgY29sdW1uczogW10sIHRvZ2dsZXM6IHVuZGVmaW5lZCB9O1xuY29uc3QgQ29sdW1uQ29udGV4dCA9XG4gIFJlYWN0LmNyZWF0ZUNvbnRleHQ8Q29sdW1uQ29udGV4dFZhbHVlPihkZWZhdWx0Q29sdW1uQ29udGV4dCk7XG5cbmNvbnN0IENvbHVtblByb3ZpZGVyOiBSZWFjdC5GQzxDb2x1bW5Qcm92aWRlclByb3BzPiA9ICh7XG4gIGNvbHVtbnMsXG4gIHRvZ2dsZXMsXG4gIGNoaWxkcmVuLFxufSkgPT4ge1xuICBsZXQgdG9nZ2xlQ29sdW1ucztcblxuICBpZiAodG9nZ2xlcykge1xuICAgIHRvZ2dsZUNvbHVtbnMgPSBjb2x1bW5zLmZpbHRlcigoY29sdW1uKSA9PiB0b2dnbGVzW2NvbHVtbi5kYXRhRmllbGRdKTtcbiAgfSBlbHNlIHtcbiAgICB0b2dnbGVDb2x1bW5zID0gY29sdW1ucy5maWx0ZXIoKGNvbHVtbikgPT4gIWNvbHVtbi5oaWRkZW4pO1xuICB9XG4gIHJldHVybiAoXG4gICAgPENvbHVtbkNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3sgY29sdW1uczogdG9nZ2xlQ29sdW1ucyB9fT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0NvbHVtbkNvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiAoe1xuICBQcm92aWRlcjogQ29sdW1uUHJvdmlkZXIsXG4gIENvbnN1bWVyOiBDb2x1bW5Db250ZXh0LkNvbnN1bWVyLFxufSk7XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IFJvd0V2ZW50RGVsZWdhdGVyIH0gZnJvbSBcIi4vZXZlbnQtZGVsZWdhdGVyXCI7XG5pbXBvcnQgUm93UHVyZUNvbnRlbnQgZnJvbSBcIi4vcm93LXB1cmUtY29udGVudFwiO1xuaW1wb3J0IHNob3VsZFVwZGF0ZXIsIHsgUm93UHJvcHMgfSBmcm9tIFwiLi9zaG91bGQtdXBkYXRlclwiO1xuXG5jbGFzcyBTaW1wbGVSb3cgZXh0ZW5kcyBzaG91bGRVcGRhdGVyKFxuICBSb3dFdmVudERlbGVnYXRlcihDb21wb25lbnQ8Um93UHJvcHM+KVxuKSB7XG4gIHNob3VsZFVwZGF0ZVJvd0NvbnRlbnQgPSBmYWxzZTtcblxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBSb3dQcm9wcykge1xuICAgIHRoaXMuc2hvdWxkVXBkYXRlUm93Q29udGVudCA9IGZhbHNlO1xuICAgIHRoaXMuc2hvdWxkVXBkYXRlUm93Q29udGVudCA9IHRoaXMuc2hvdWxkUm93Q29udGVudFVwZGF0ZShuZXh0UHJvcHMpO1xuICAgIGlmICh0aGlzLnNob3VsZFVwZGF0ZVJvd0NvbnRlbnQpIHJldHVybiB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMuc2hvdWxkVXBkYXRlZEJ5U2VsZlByb3BzKG5leHRQcm9wcyk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgZWRpdGFibGUgPSB0cnVlLFxuICAgICAgY2xhc3NOYW1lID0gdW5kZWZpbmVkLFxuICAgICAgc3R5bGUgPSB7fSxcbiAgICAgIGF0dHJzID0ge30sXG4gICAgICB2aXNpYmxlQ29sdW1uU2l6ZSxcbiAgICAgIHRhYkluZGV4Q2VsbCxcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB0ckF0dHJzID0gdGhpcy5kZWxlZ2F0ZShhdHRycyk7XG4gICAgY29uc3QgdGFiSW5kZXhTdGFydCA9IHRoaXMucHJvcHMucm93SW5kZXghICogdmlzaWJsZUNvbHVtblNpemUhICsgMTtcblxuICAgIHJldHVybiAoXG4gICAgICA8dHIgc3R5bGU9e3N0eWxlfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0gey4uLnRyQXR0cnN9PlxuICAgICAgICA8Um93UHVyZUNvbnRlbnRcbiAgICAgICAgICBzaG91bGRVcGRhdGU9e3RoaXMuc2hvdWxkVXBkYXRlUm93Q29udGVudH1cbiAgICAgICAgICB0YWJJbmRleFN0YXJ0PXt0YWJJbmRleENlbGwgPyB0YWJJbmRleFN0YXJ0IDogLTF9XG4gICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgIC8+XG4gICAgICA8L3RyPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2ltcGxlUm93O1xuIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcblxuaW50ZXJmYWNlIEZpbHRlclByb3BzIHtcbiAgZGF0YTogYW55O1xuICBjdXJyRmlsdGVyczogYW55O1xufVxuXG5pbnRlcmZhY2UgU2VhcmNoUHJvcHMge1xuICBkYXRhOiBhbnk7XG59XG5cbmludGVyZmFjZSBTb3J0UHJvcHMge1xuICBkYXRhOiBhbnk7XG59XG5cbmludGVyZmFjZSBQYWdpbmF0aW9uUHJvcHMge1xuICBkYXRhOiBhbnk7XG59XG5cbi8vXG5pbnRlcmZhY2UgRGF0YVByb3ZpZGVyUHJvcHMge1xuICBkYXRhOiBhbnlbXTtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbn1cblxuaW50ZXJmYWNlIERhdGFQcm92aWRlclN0YXRlIHtcbiAgZGF0YTogYW55W107XG59XG5cbmludGVyZmFjZSBEYXRhQ29udGV4dFZhbHVlIHtcbiAgZGF0YTogYW55W107XG4gIGdldERhdGE6IChcbiAgICBmaWx0ZXJQcm9wcz86IEZpbHRlclByb3BzLFxuICAgIHNlYXJjaFByb3BzPzogU2VhcmNoUHJvcHMsXG4gICAgc29ydFByb3BzPzogU29ydFByb3BzLFxuICAgIHBhZ2luYXRpb25Qcm9wcz86IFBhZ2luYXRpb25Qcm9wc1xuICApID0+IGFueVtdO1xufVxuXG5jb25zdCBkZWZhdWx0RGF0YUNvbnRleHQgPSB7IGRhdGE6IFtdLCBnZXREYXRhOiAoKSA9PiBbXSB9O1xuY29uc3QgRGF0YUNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PERhdGFDb250ZXh0VmFsdWU+KGRlZmF1bHREYXRhQ29udGV4dCk7XG5cbmNsYXNzIERhdGFQcm92aWRlciBleHRlbmRzIENvbXBvbmVudDxEYXRhUHJvdmlkZXJQcm9wcywgRGF0YVByb3ZpZGVyU3RhdGU+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IERhdGFQcm92aWRlclByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7IGRhdGE6IHByb3BzLmRhdGEgfTtcbiAgfVxuXG4gIGdldERhdGEgPSAoXG4gICAgZmlsdGVyUHJvcHM/OiBGaWx0ZXJQcm9wcyxcbiAgICBzZWFyY2hQcm9wcz86IFNlYXJjaFByb3BzLFxuICAgIHNvcnRQcm9wcz86IFNvcnRQcm9wcyxcbiAgICBwYWdpbmF0aW9uUHJvcHM/OiBQYWdpbmF0aW9uUHJvcHNcbiAgKSA9PiB7XG4gICAgaWYgKHBhZ2luYXRpb25Qcm9wcykge1xuICAgICAgcmV0dXJuIHBhZ2luYXRpb25Qcm9wcy5kYXRhO1xuICAgIH0gZWxzZSBpZiAoc29ydFByb3BzKSB7XG4gICAgICByZXR1cm4gc29ydFByb3BzLmRhdGE7XG4gICAgfSBlbHNlIGlmIChzZWFyY2hQcm9wcykge1xuICAgICAgcmV0dXJuIHNlYXJjaFByb3BzLmRhdGE7XG4gICAgfSBlbHNlIGlmIChmaWx0ZXJQcm9wcykge1xuICAgICAgaWYgKFxuICAgICAgICBmaWx0ZXJQcm9wcy5kYXRhLmxlbmd0aCA8IHRoaXMucHJvcHMuZGF0YS5sZW5ndGggJiZcbiAgICAgICAgIV8uaXNFbXB0eShPYmplY3Qua2V5cyhmaWx0ZXJQcm9wcy5jdXJyRmlsdGVycykpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlclByb3BzLmRhdGE7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8RGF0YUNvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgdmFsdWU9e3tcbiAgICAgICAgICBkYXRhOiB0aGlzLnN0YXRlLmRhdGEsXG4gICAgICAgICAgZ2V0RGF0YTogdGhpcy5nZXREYXRhLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgIDwvRGF0YUNvbnRleHQuUHJvdmlkZXI+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiAoe1xuICBQcm92aWRlcjogRGF0YVByb3ZpZGVyLFxuICBDb25zdW1lcjogRGF0YUNvbnRleHQuQ29uc3VtZXIsXG59KTtcbiIsImltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlU2VsZWN0aW9uQ29udGV4dCB9IGZyb20gXCIuLi9jb250ZXh0cy9zZWxlY3Rpb24tY29udGV4dFwiO1xuaW1wb3J0IF8gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IFNlbGVjdGlvbkNvbnRleHQgPSBjcmVhdGVTZWxlY3Rpb25Db250ZXh0KCk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHdpdGhSb3dTZWxlY3Rpb248VCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudFR5cGU8YW55Pj4oXG4gIENvbXBvbmVudDogVFxuKTogUmVhY3QuRkM8UmVhY3QuQ29tcG9uZW50UHJvcHM8VD4+IHtcbiAgY29uc3QgcmVuZGVyV2l0aFNlbGVjdGlvbiA9IChwcm9wczogYW55LCBzZWxlY3RSb3c6IGFueSkgPT4ge1xuICAgIGNvbnN0IGtleSA9IHByb3BzLnZhbHVlO1xuICAgIGNvbnN0IHNlbGVjdGVkID0gXy5jb250YWlucyhzZWxlY3RSb3cuc2VsZWN0ZWQsIGtleSk7XG4gICAgY29uc3Qgc2VsZWN0YWJsZSA9XG4gICAgICAhc2VsZWN0Um93Lm5vblNlbGVjdGFibGUgfHwgIV8uY29udGFpbnMoc2VsZWN0Um93Lm5vblNlbGVjdGFibGUsIGtleSk7XG4gICAgY29uc3Qgbm90U2VsZWN0YWJsZSA9IF8uY29udGFpbnMoc2VsZWN0Um93Lm5vblNlbGVjdGFibGUsIGtleSk7XG5cbiAgICBsZXQgeyBzdHlsZSwgY2xhc3NOYW1lIH0gPSBwcm9wcztcblxuICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRTdHlsZSA9IF8uaXNGdW5jdGlvbihzZWxlY3RSb3cuc3R5bGUpXG4gICAgICAgID8gc2VsZWN0Um93LnN0eWxlKHByb3BzLnJvdywgcHJvcHMucm93SW5kZXgpXG4gICAgICAgIDogc2VsZWN0Um93LnN0eWxlO1xuXG4gICAgICBjb25zdCBzZWxlY3RlZENsYXNzZXMgPSBfLmlzRnVuY3Rpb24oc2VsZWN0Um93LmNsYXNzZXMpXG4gICAgICAgID8gc2VsZWN0Um93LmNsYXNzZXMocHJvcHMucm93LCBwcm9wcy5yb3dJbmRleClcbiAgICAgICAgOiBzZWxlY3RSb3cuY2xhc3NlcztcblxuICAgICAgc3R5bGUgPSB7XG4gICAgICAgIC4uLnN0eWxlLFxuICAgICAgICAuLi5zZWxlY3RlZFN0eWxlLFxuICAgICAgfTtcbiAgICAgIGNsYXNzTmFtZSA9IGNzKGNsYXNzTmFtZSwgc2VsZWN0ZWRDbGFzc2VzKSB8fCB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChzZWxlY3RSb3cuYmdDb2xvcikge1xuICAgICAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBfLmlzRnVuY3Rpb24oc2VsZWN0Um93LmJnQ29sb3IpXG4gICAgICAgICAgPyBzZWxlY3RSb3cuYmdDb2xvcihwcm9wcy5yb3csIHByb3BzLnJvd0luZGV4KVxuICAgICAgICAgIDogc2VsZWN0Um93LmJnQ29sb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5vdFNlbGVjdGFibGUpIHtcbiAgICAgIGNvbnN0IG5vdFNlbGVjdGFibGVTdHlsZSA9IF8uaXNGdW5jdGlvbihzZWxlY3RSb3cubm9uU2VsZWN0YWJsZVN0eWxlKVxuICAgICAgICA/IHNlbGVjdFJvdy5ub25TZWxlY3RhYmxlU3R5bGUocHJvcHMucm93LCBwcm9wcy5yb3dJbmRleClcbiAgICAgICAgOiBzZWxlY3RSb3cubm9uU2VsZWN0YWJsZVN0eWxlO1xuXG4gICAgICBjb25zdCBub3RTZWxlY3RhYmxlQ2xhc3NlcyA9IF8uaXNGdW5jdGlvbihzZWxlY3RSb3cubm9uU2VsZWN0YWJsZUNsYXNzZXMpXG4gICAgICAgID8gc2VsZWN0Um93Lm5vblNlbGVjdGFibGVDbGFzc2VzKHByb3BzLnJvdywgcHJvcHMucm93SW5kZXgpXG4gICAgICAgIDogc2VsZWN0Um93Lm5vblNlbGVjdGFibGVDbGFzc2VzO1xuXG4gICAgICBzdHlsZSA9IHtcbiAgICAgICAgLi4uc3R5bGUsXG4gICAgICAgIC4uLm5vdFNlbGVjdGFibGVTdHlsZSxcbiAgICAgIH07XG4gICAgICBjbGFzc05hbWUgPSBjcyhjbGFzc05hbWUsIG5vdFNlbGVjdGFibGVDbGFzc2VzKSB8fCB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxDb21wb25lbnRcbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICBzZWxlY3RSb3c9e3NlbGVjdFJvd31cbiAgICAgICAgc2VsZWN0ZWQ9e3NlbGVjdGVkfVxuICAgICAgICBzZWxlY3RhYmxlPXtzZWxlY3RhYmxlfVxuICAgICAgLz5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IFdpdGhTZWxlY3Rpb25Sb3dDb25zdW1lcjogUmVhY3QuRkM8UmVhY3QuQ29tcG9uZW50UHJvcHM8VD4+ID0gKFxuICAgIHByb3BzXG4gICkgPT4gKFxuICAgIDxTZWxlY3Rpb25Db250ZXh0LkNvbnN1bWVyPlxuICAgICAgeyhzZWxlY3RSb3cpID0+IHJlbmRlcldpdGhTZWxlY3Rpb24ocHJvcHMsIHNlbGVjdFJvdyl9XG4gICAgPC9TZWxlY3Rpb25Db250ZXh0LkNvbnN1bWVyPlxuICApO1xuXG4gIFdpdGhTZWxlY3Rpb25Sb3dDb25zdW1lci5kaXNwbGF5TmFtZSA9IFwiV2l0aFNlbGVjdGlvblJvd0NvbnN1bWVyXCI7XG4gIHJldHVybiBXaXRoU2VsZWN0aW9uUm93Q29uc3VtZXI7XG59XG4iLCIvKiBlc2xpbnQgbm8tbmVzdGVkLXRlcm5hcnk6IDAgKi9cbi8qIGVzbGludCBuby1sb25lbHktaWY6IDAgKi9cbi8qIGVzbGludCBuby11bmRlcnNjb3JlLWRhbmdsZTogMCAqL1xuaW1wb3J0IHsgU09SVF9BU0MsIFNPUlRfREVTQyB9IGZyb20gXCIuLi9jb25zdFwiO1xuaW1wb3J0IF8gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmZ1bmN0aW9uIGNvbXBhcmF0b3IoYTogYW55LCBiOiBhbnkpIHtcbiAgbGV0IHJlc3VsdDtcbiAgaWYgKHR5cGVvZiBiID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmVzdWx0ID0gYi5sb2NhbGVDb21wYXJlKGEpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9IGEgPiBiID8gLTEgOiBhIDwgYiA/IDEgOiAwO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBjb25zdCBzb3J0ID0gKFxuICBkYXRhOiBhbnksXG4gIHNvcnRPcmRlcjogYW55LFxuICB7IGRhdGFGaWVsZCwgc29ydEZ1bmMsIHNvcnRWYWx1ZSB9OiBhbnlcbikgPT4ge1xuICBjb25zdCBfZGF0YSA9IFsuLi5kYXRhXTtcbiAgX2RhdGEuc29ydCgoYSwgYikgPT4ge1xuICAgIGxldCByZXN1bHQ7XG4gICAgbGV0IHZhbHVlQSA9IF8uZ2V0KGEsIGRhdGFGaWVsZCk7XG4gICAgbGV0IHZhbHVlQiA9IF8uZ2V0KGIsIGRhdGFGaWVsZCk7XG4gICAgaWYgKHNvcnRWYWx1ZSkge1xuICAgICAgdmFsdWVBID0gc29ydFZhbHVlKHZhbHVlQSwgYSk7XG4gICAgICB2YWx1ZUIgPSBzb3J0VmFsdWUodmFsdWVCLCBiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWVBID0gXy5pc0RlZmluZWQodmFsdWVBKSA/IHZhbHVlQSA6IFwiXCI7XG4gICAgICB2YWx1ZUIgPSBfLmlzRGVmaW5lZCh2YWx1ZUIpID8gdmFsdWVCIDogXCJcIjtcbiAgICB9XG5cbiAgICBpZiAoc29ydEZ1bmMpIHtcbiAgICAgIHJlc3VsdCA9IHNvcnRGdW5jKHZhbHVlQSwgdmFsdWVCLCBzb3J0T3JkZXIsIGRhdGFGaWVsZCwgYSwgYik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzb3J0T3JkZXIgPT09IFNPUlRfREVTQykge1xuICAgICAgICByZXN1bHQgPSBjb21wYXJhdG9yKHZhbHVlQSwgdmFsdWVCKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGNvbXBhcmF0b3IodmFsdWVCLCB2YWx1ZUEpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcbiAgcmV0dXJuIF9kYXRhO1xufTtcblxuZXhwb3J0IGNvbnN0IG5leHRPcmRlciA9IChcbiAgY3VycmVudFNvcnRDb2x1bW46IGFueSxcbiAgeyBzb3J0T3JkZXIsIHNvcnRDb2x1bW4gfTogYW55LFxuICBkZWZhdWx0T3JkZXIgPSBTT1JUX0RFU0NcbikgPT4ge1xuICBpZiAoIXNvcnRDb2x1bW4gfHwgY3VycmVudFNvcnRDb2x1bW4uZGF0YUZpZWxkICE9PSBzb3J0Q29sdW1uLmRhdGFGaWVsZCkge1xuICAgIHJldHVybiBkZWZhdWx0T3JkZXI7XG4gIH1cbiAgcmV0dXJuIHNvcnRPcmRlciA9PT0gU09SVF9ERVNDID8gU09SVF9BU0MgOiBTT1JUX0RFU0M7XG59O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgQm9vdHN0cmFwQ29udGV4dFZhbHVlIHtcbiAgYm9vdHN0cmFwNDogYm9vbGVhbjtcbn1cblxuY29uc3QgZGVmYXVsdEJvb3RzdHJhcENvbnRleHQgPSB7IGJvb3RzdHJhcDQ6IHRydWUgfTtcblxuZXhwb3J0IGNvbnN0IEJvb3RzdHJhcENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PEJvb3RzdHJhcENvbnRleHRWYWx1ZT4oXG4gIGRlZmF1bHRCb290c3RyYXBDb250ZXh0XG4pO1xuIiwiLyogZXNsaW50IG5vLWVtcHR5OiAwICovXG4vKiBlc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246IDAgKi9cbi8qIGVzbGludCBwcmVmZXItcmVzdC1wYXJhbXM6IDAgKi9cbmltcG9ydCBfIGZyb20gXCJ1bmRlcnNjb3JlXCI7XG5cbmZ1bmN0aW9uIHNwbGl0TmVzdGVkKHN0cjogYW55KSB7XG4gIHJldHVybiBbc3RyXS5qb2luKFwiLlwiKS5yZXBsYWNlKC9cXFsvZywgXCIuXCIpLnJlcGxhY2UoL1xcXS9nLCBcIlwiKS5zcGxpdChcIi5cIik7XG59XG5cbmZ1bmN0aW9uIGNvbnRhaW5zKGxpc3Q6IGFueSwgdmFsdWU6IGFueSkge1xuICBpZiAoXy5pbmNsdWRlcykge1xuICAgIHJldHVybiBfLmluY2x1ZGVzKGxpc3QsIHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiBsaXN0LmluZGV4T2YodmFsdWUpID4gLTE7XG59XG5cbmZ1bmN0aW9uIGdldCh0YXJnZXQ6IGFueSwgZmllbGQ6IGFueSkge1xuICBjb25zdCBkaXJlY3RHZXQgPSB0YXJnZXRbZmllbGRdO1xuICBpZiAoZGlyZWN0R2V0ICE9PSB1bmRlZmluZWQgJiYgZGlyZWN0R2V0ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIGRpcmVjdEdldDtcbiAgfVxuXG4gIGNvbnN0IHBhdGhBcnJheSA9IHNwbGl0TmVzdGVkKGZpZWxkKTtcbiAgbGV0IHJlc3VsdDtcbiAgdHJ5IHtcbiAgICByZXN1bHQgPSBwYXRoQXJyYXkucmVkdWNlKChjdXJyLCBwYXRoKSA9PiBjdXJyW3BhdGhdLCB0YXJnZXQpO1xuICB9IGNhdGNoIChlKSB7fVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBzZXQodGFyZ2V0OiBhbnksIGZpZWxkOiBhbnksIHZhbHVlOiBhbnksIHNhZmUgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoQXJyYXkgPSBzcGxpdE5lc3RlZChmaWVsZCk7XG4gIGxldCBsZXZlbCA9IDA7XG4gIHBhdGhBcnJheS5yZWR1Y2UoKGEsIGIpID0+IHtcbiAgICBsZXZlbCArPSAxO1xuICAgIGlmICh0eXBlb2YgYVtiXSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgaWYgKCFzYWZlKSB0aHJvdyBuZXcgRXJyb3IoYCR7YX0uJHtifSBpcyB1bmRlZmluZWRgKTtcbiAgICAgIGFbYl0gPSB7fTtcbiAgICAgIHJldHVybiBhW2JdO1xuICAgIH1cblxuICAgIGlmIChsZXZlbCA9PT0gcGF0aEFycmF5Lmxlbmd0aCkge1xuICAgICAgYVtiXSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gYVtiXTtcbiAgfSwgdGFyZ2V0KTtcbn1cblxuZnVuY3Rpb24gaXNFbXB0eU9iamVjdChvYmo6IGFueSkge1xuICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXlzW2ldKSkgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRGVmaW5lZCh2YWx1ZTogYW55KSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgIT09IFwidW5kZWZpbmVkXCIgJiYgdmFsdWUgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIHNsZWVwKGZuOiBhbnksIG1zOiBhbnkpIHtcbiAgcmV0dXJuIHNldFRpbWVvdXQoKCkgPT4gZm4oKSwgbXMpO1xufVxuXG5mdW5jdGlvbiBkZWJvdW5jZSh0aGlzOiBhbnksIGZ1bmM6IGFueSwgd2FpdDogYW55LCBpbW1lZGlhdGU6IGFueSkge1xuICBsZXQgdGltZW91dDogYW55O1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgY29uc3QgbGF0ZXIgPSAoKSA9PiB7XG4gICAgICB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaWYgKCFpbW1lZGlhdGUpIHtcbiAgICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0O1xuXG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0IHx8IDApO1xuXG4gICAgaWYgKGNhbGxOb3cpIHtcbiAgICAgIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IE9iamVjdC5hc3NpZ24oXywge1xuICBnZXQsXG4gIHNldCxcbiAgaXNEZWZpbmVkLFxuICBpc0VtcHR5T2JqZWN0LFxuICBzbGVlcCxcbiAgZGVib3VuY2UsXG4gIGNvbnRhaW5zXG59KTtcbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4cGFuc2lvbkhlYWRlckNlbGxQcm9wcyB7XG4gIGlzQW55RXhwYW5kcz86IGJvb2xlYW47XG4gIG9uQWxsUm93RXhwYW5kPzogKFxuICAgIGU6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQ+LFxuICAgIGV4cGFuZEFsbDogYm9vbGVhblxuICApID0+IHZvaWQ7XG4gIGV4cGFuZEhlYWRlckNvbHVtblJlbmRlcmVyPzogKGFyZ3M6IHsgaXNBbnlFeHBhbmRzOiBib29sZWFuIH0pID0+IFJlYWN0Tm9kZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXhwYW5zaW9uSGVhZGVyQ2VsbCBleHRlbmRzIENvbXBvbmVudDxFeHBhbnNpb25IZWFkZXJDZWxsUHJvcHM+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IEV4cGFuc2lvbkhlYWRlckNlbGxQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZUNoZWNrQm94Q2xpY2sgPSB0aGlzLmhhbmRsZUNoZWNrQm94Q2xpY2suYmluZCh0aGlzKTtcbiAgfVxuXG4gIGhhbmRsZUNoZWNrQm94Q2xpY2soZTogUmVhY3QuTW91c2VFdmVudDxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudD4pIHtcbiAgICBjb25zdCB7IGlzQW55RXhwYW5kcywgb25BbGxSb3dFeHBhbmQgfSA9IHRoaXMucHJvcHM7XG4gICAgb25BbGxSb3dFeHBhbmQhKGUsICFpc0FueUV4cGFuZHMpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgaXNBbnlFeHBhbmRzLCBleHBhbmRIZWFkZXJDb2x1bW5SZW5kZXJlciB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBhdHRycyA9IHtcbiAgICAgIG9uQ2xpY2s6IHRoaXMuaGFuZGxlQ2hlY2tCb3hDbGljayxcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDx0aCBjbGFzc05hbWU9XCJleHBhbmQtY2VsbC1oZWFkZXJcIiBkYXRhLXJvdy1zZWxlY3Rpb24gey4uLmF0dHJzfT5cbiAgICAgICAge2V4cGFuZEhlYWRlckNvbHVtblJlbmRlcmVyXG4gICAgICAgICAgPyBleHBhbmRIZWFkZXJDb2x1bW5SZW5kZXJlcih7IGlzQW55RXhwYW5kczogaXNBbnlFeHBhbmRzID8/IGZhbHNlIH0pXG4gICAgICAgICAgOiBpc0FueUV4cGFuZHNcbiAgICAgICAgICA/IFwiKC0pXCJcbiAgICAgICAgICA6IFwiKCspXCJ9XG4gICAgICA8L3RoPlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCBfIGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgZ2V0Um93QnlSb3dJZCB9IGZyb20gXCIuL3Jvd3NcIjtcblxuZXhwb3J0IGNvbnN0IGdldFNlbGVjdGlvblN1bW1hcnkgPSAoXG4gIGRhdGE6IGFueVtdID0gW10sXG4gIGtleUZpZWxkOiBhbnksXG4gIHNlbGVjdGVkOiBhbnlbXSA9IFtdXG4pID0+IHtcbiAgbGV0IGFsbFJvd3NTZWxlY3RlZCA9IGRhdGEubGVuZ3RoID4gMDtcbiAgbGV0IGFsbFJvd3NOb3RTZWxlY3RlZCA9IHRydWU7XG5cbiAgY29uc3Qgcm93S2V5cyA9IGRhdGEubWFwKChkKSA9PiBfLmdldChkLCBrZXlGaWVsZCkpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd0tleXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCBjdXJyID0gcm93S2V5c1tpXTtcbiAgICBpZiAodHlwZW9mIHNlbGVjdGVkLmZpbmQoKHgpID0+IHggPT09IGN1cnIpID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBhbGxSb3dzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWxsUm93c05vdFNlbGVjdGVkID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgYWxsUm93c1NlbGVjdGVkLFxuICAgIGFsbFJvd3NOb3RTZWxlY3RlZCxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RhYmxlS2V5cyA9IChcbiAgZGF0YTogYW55W10gPSBbXSxcbiAga2V5RmllbGQ6IGFueSxcbiAgc2tpcHM6IGFueVtdID0gW11cbikgPT4ge1xuICBpZiAoc2tpcHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGRhdGEubWFwKChyb3cpID0+IF8uZ2V0KHJvdywga2V5RmllbGQpKTtcbiAgfVxuICByZXR1cm4gZGF0YVxuICAgIC5maWx0ZXIoKHJvdykgPT4gIV8uY29udGFpbnMoc2tpcHMsIF8uZ2V0KHJvdywga2V5RmllbGQpKSlcbiAgICAubWFwKChyb3cpID0+IF8uZ2V0KHJvdywga2V5RmllbGQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1blNlbGVjdGFibGVLZXlzID0gKHNlbGVjdGVkPzogYW55LCBza2lwczogYW55W10gPSBbXSkgPT4ge1xuICBpZiAoc2tpcHM/Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gc2VsZWN0ZWQuZmlsdGVyKCh4OiBhbnkpID0+IF8uY29udGFpbnMoc2tpcHMsIHgpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTZWxlY3RlZFJvd3MgPSAoXG4gIGRhdGE6IGFueVtdID0gW10sXG4gIGtleUZpZWxkOiBhbnksXG4gIHNlbGVjdGVkOiBhbnlcbikgPT5cbiAgc2VsZWN0ZWRcbiAgICAubWFwKChrOiBhbnkpID0+IGdldFJvd0J5Um93SWQoZGF0YSwga2V5RmllbGQsIGspKVxuICAgIC5maWx0ZXIoKHg6IGFueSkgPT4gISF4KTtcbiIsIi8vIEN1cnJlbnQgdmVyc2lvbi5cbmV4cG9ydCB2YXIgVkVSU0lPTiA9ICcxLjEzLjcnO1xuXG4vLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3NlciwgYGdsb2JhbGBcbi8vIG9uIHRoZSBzZXJ2ZXIsIG9yIGB0aGlzYCBpbiBzb21lIHZpcnR1YWwgbWFjaGluZXMuIFdlIHVzZSBgc2VsZmBcbi8vIGluc3RlYWQgb2YgYHdpbmRvd2AgZm9yIGBXZWJXb3JrZXJgIHN1cHBvcnQuXG5leHBvcnQgdmFyIHJvb3QgPSAodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZi5zZWxmID09PSBzZWxmICYmIHNlbGYpIHx8XG4gICAgICAgICAgKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsLmdsb2JhbCA9PT0gZ2xvYmFsICYmIGdsb2JhbCkgfHxcbiAgICAgICAgICBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpIHx8XG4gICAgICAgICAge307XG5cbi8vIFNhdmUgYnl0ZXMgaW4gdGhlIG1pbmlmaWVkIChidXQgbm90IGd6aXBwZWQpIHZlcnNpb246XG5leHBvcnQgdmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGUsIE9ialByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcbmV4cG9ydCB2YXIgU3ltYm9sUHJvdG8gPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyA/IFN5bWJvbC5wcm90b3R5cGUgOiBudWxsO1xuXG4vLyBDcmVhdGUgcXVpY2sgcmVmZXJlbmNlIHZhcmlhYmxlcyBmb3Igc3BlZWQgYWNjZXNzIHRvIGNvcmUgcHJvdG90eXBlcy5cbmV4cG9ydCB2YXIgcHVzaCA9IEFycmF5UHJvdG8ucHVzaCxcbiAgICBzbGljZSA9IEFycmF5UHJvdG8uc2xpY2UsXG4gICAgdG9TdHJpbmcgPSBPYmpQcm90by50b1N0cmluZyxcbiAgICBoYXNPd25Qcm9wZXJ0eSA9IE9ialByb3RvLmhhc093blByb3BlcnR5O1xuXG4vLyBNb2Rlcm4gZmVhdHVyZSBkZXRlY3Rpb24uXG5leHBvcnQgdmFyIHN1cHBvcnRzQXJyYXlCdWZmZXIgPSB0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnLFxuICAgIHN1cHBvcnRzRGF0YVZpZXcgPSB0eXBlb2YgRGF0YVZpZXcgIT09ICd1bmRlZmluZWQnO1xuXG4vLyBBbGwgKipFQ01BU2NyaXB0IDUrKiogbmF0aXZlIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucyB0aGF0IHdlIGhvcGUgdG8gdXNlXG4vLyBhcmUgZGVjbGFyZWQgaGVyZS5cbmV4cG9ydCB2YXIgbmF0aXZlSXNBcnJheSA9IEFycmF5LmlzQXJyYXksXG4gICAgbmF0aXZlS2V5cyA9IE9iamVjdC5rZXlzLFxuICAgIG5hdGl2ZUNyZWF0ZSA9IE9iamVjdC5jcmVhdGUsXG4gICAgbmF0aXZlSXNWaWV3ID0gc3VwcG9ydHNBcnJheUJ1ZmZlciAmJiBBcnJheUJ1ZmZlci5pc1ZpZXc7XG5cbi8vIENyZWF0ZSByZWZlcmVuY2VzIHRvIHRoZXNlIGJ1aWx0aW4gZnVuY3Rpb25zIGJlY2F1c2Ugd2Ugb3ZlcnJpZGUgdGhlbS5cbmV4cG9ydCB2YXIgX2lzTmFOID0gaXNOYU4sXG4gICAgX2lzRmluaXRlID0gaXNGaW5pdGU7XG5cbi8vIEtleXMgaW4gSUUgPCA5IHRoYXQgd29uJ3QgYmUgaXRlcmF0ZWQgYnkgYGZvciBrZXkgaW4gLi4uYCBhbmQgdGh1cyBtaXNzZWQuXG5leHBvcnQgdmFyIGhhc0VudW1CdWcgPSAhe3RvU3RyaW5nOiBudWxsfS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgndG9TdHJpbmcnKTtcbmV4cG9ydCB2YXIgbm9uRW51bWVyYWJsZVByb3BzID0gWyd2YWx1ZU9mJywgJ2lzUHJvdG90eXBlT2YnLCAndG9TdHJpbmcnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLCAnaGFzT3duUHJvcGVydHknLCAndG9Mb2NhbGVTdHJpbmcnXTtcblxuLy8gVGhlIGxhcmdlc3QgaW50ZWdlciB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBleGFjdGx5LlxuZXhwb3J0IHZhciBNQVhfQVJSQVlfSU5ERVggPSBNYXRoLnBvdygyLCA1MykgLSAxO1xuIiwiLy8gU29tZSBmdW5jdGlvbnMgdGFrZSBhIHZhcmlhYmxlIG51bWJlciBvZiBhcmd1bWVudHMsIG9yIGEgZmV3IGV4cGVjdGVkXG4vLyBhcmd1bWVudHMgYXQgdGhlIGJlZ2lubmluZyBhbmQgdGhlbiBhIHZhcmlhYmxlIG51bWJlciBvZiB2YWx1ZXMgdG8gb3BlcmF0ZVxuLy8gb24uIFRoaXMgaGVscGVyIGFjY3VtdWxhdGVzIGFsbCByZW1haW5pbmcgYXJndW1lbnRzIHBhc3QgdGhlIGZ1bmN0aW9u4oCZc1xuLy8gYXJndW1lbnQgbGVuZ3RoIChvciBhbiBleHBsaWNpdCBgc3RhcnRJbmRleGApLCBpbnRvIGFuIGFycmF5IHRoYXQgYmVjb21lc1xuLy8gdGhlIGxhc3QgYXJndW1lbnQuIFNpbWlsYXIgdG8gRVM24oCZcyBcInJlc3QgcGFyYW1ldGVyXCIuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXN0QXJndW1lbnRzKGZ1bmMsIHN0YXJ0SW5kZXgpIHtcbiAgc3RhcnRJbmRleCA9IHN0YXJ0SW5kZXggPT0gbnVsbCA/IGZ1bmMubGVuZ3RoIC0gMSA6ICtzdGFydEluZGV4O1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KGFyZ3VtZW50cy5sZW5ndGggLSBzdGFydEluZGV4LCAwKSxcbiAgICAgICAgcmVzdCA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgIGluZGV4ID0gMDtcbiAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHJlc3RbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4ICsgc3RhcnRJbmRleF07XG4gICAgfVxuICAgIHN3aXRjaCAoc3RhcnRJbmRleCkge1xuICAgICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIHJlc3QpO1xuICAgICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIGFyZ3VtZW50c1swXSwgcmVzdCk7XG4gICAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCBhcmd1bWVudHNbMV0sIHJlc3QpO1xuICAgIH1cbiAgICB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTtcbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzdGFydEluZGV4OyBpbmRleCsrKSB7XG4gICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgfVxuICAgIGFyZ3Nbc3RhcnRJbmRleF0gPSByZXN0O1xuICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICB9O1xufVxuIiwiLy8gSXMgYSBnaXZlbiB2YXJpYWJsZSBhbiBvYmplY3Q/XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc09iamVjdChvYmopIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqO1xuICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmopO1xufVxuIiwiLy8gSXMgYSBnaXZlbiB2YWx1ZSBlcXVhbCB0byBudWxsP1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNOdWxsKG9iaikge1xuICByZXR1cm4gb2JqID09PSBudWxsO1xufVxuIiwiLy8gSXMgYSBnaXZlbiB2YXJpYWJsZSB1bmRlZmluZWQ/XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1VuZGVmaW5lZChvYmopIHtcbiAgcmV0dXJuIG9iaiA9PT0gdm9pZCAwO1xufVxuIiwiaW1wb3J0IHsgdG9TdHJpbmcgfSBmcm9tICcuL19zZXR1cC5qcyc7XG5cbi8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBib29sZWFuP1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNCb29sZWFuKG9iaikge1xuICByZXR1cm4gb2JqID09PSB0cnVlIHx8IG9iaiA9PT0gZmFsc2UgfHwgdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBCb29sZWFuXSc7XG59XG4iLCIvLyBJcyBhIGdpdmVuIHZhbHVlIGEgRE9NIGVsZW1lbnQ/XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0VsZW1lbnQob2JqKSB7XG4gIHJldHVybiAhIShvYmogJiYgb2JqLm5vZGVUeXBlID09PSAxKTtcbn1cbiIsImltcG9ydCB7IHRvU3RyaW5nIH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuXG4vLyBJbnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYSBgdG9TdHJpbmdgLWJhc2VkIHR5cGUgdGVzdGVyLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGFnVGVzdGVyKG5hbWUpIHtcbiAgdmFyIHRhZyA9ICdbb2JqZWN0ICcgKyBuYW1lICsgJ10nO1xuICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gdGFnO1xuICB9O1xufVxuIiwiaW1wb3J0IHRhZ1Rlc3RlciBmcm9tICcuL190YWdUZXN0ZXIuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB0YWdUZXN0ZXIoJ1N0cmluZycpO1xuIiwiaW1wb3J0IHRhZ1Rlc3RlciBmcm9tICcuL190YWdUZXN0ZXIuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB0YWdUZXN0ZXIoJ051bWJlcicpO1xuIiwiaW1wb3J0IHRhZ1Rlc3RlciBmcm9tICcuL190YWdUZXN0ZXIuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB0YWdUZXN0ZXIoJ0RhdGUnKTtcbiIsImltcG9ydCB0YWdUZXN0ZXIgZnJvbSAnLi9fdGFnVGVzdGVyLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgdGFnVGVzdGVyKCdSZWdFeHAnKTtcbiIsImltcG9ydCB0YWdUZXN0ZXIgZnJvbSAnLi9fdGFnVGVzdGVyLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgdGFnVGVzdGVyKCdFcnJvcicpO1xuIiwiaW1wb3J0IHRhZ1Rlc3RlciBmcm9tICcuL190YWdUZXN0ZXIuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB0YWdUZXN0ZXIoJ1N5bWJvbCcpO1xuIiwiaW1wb3J0IHRhZ1Rlc3RlciBmcm9tICcuL190YWdUZXN0ZXIuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB0YWdUZXN0ZXIoJ0FycmF5QnVmZmVyJyk7XG4iLCJpbXBvcnQgdGFnVGVzdGVyIGZyb20gJy4vX3RhZ1Rlc3Rlci5qcyc7XG5pbXBvcnQgeyByb290IH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuXG52YXIgaXNGdW5jdGlvbiA9IHRhZ1Rlc3RlcignRnVuY3Rpb24nKTtcblxuLy8gT3B0aW1pemUgYGlzRnVuY3Rpb25gIGlmIGFwcHJvcHJpYXRlLiBXb3JrIGFyb3VuZCBzb21lIGB0eXBlb2ZgIGJ1Z3MgaW4gb2xkXG4vLyB2OCwgSUUgMTEgKCMxNjIxKSwgU2FmYXJpIDggKCMxOTI5KSwgYW5kIFBoYW50b21KUyAoIzIyMzYpLlxudmFyIG5vZGVsaXN0ID0gcm9vdC5kb2N1bWVudCAmJiByb290LmRvY3VtZW50LmNoaWxkTm9kZXM7XG5pZiAodHlwZW9mIC8uLyAhPSAnZnVuY3Rpb24nICYmIHR5cGVvZiBJbnQ4QXJyYXkgIT0gJ29iamVjdCcgJiYgdHlwZW9mIG5vZGVsaXN0ICE9ICdmdW5jdGlvbicpIHtcbiAgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqID09ICdmdW5jdGlvbicgfHwgZmFsc2U7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzRnVuY3Rpb247XG4iLCJpbXBvcnQgdGFnVGVzdGVyIGZyb20gJy4vX3RhZ1Rlc3Rlci5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHRhZ1Rlc3RlcignT2JqZWN0Jyk7XG4iLCJpbXBvcnQgeyBzdXBwb3J0c0RhdGFWaWV3IH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuaW1wb3J0IGhhc09iamVjdFRhZyBmcm9tICcuL19oYXNPYmplY3RUYWcuanMnO1xuXG4vLyBJbiBJRSAxMCAtIEVkZ2UgMTMsIGBEYXRhVmlld2AgaGFzIHN0cmluZyB0YWcgYCdbb2JqZWN0IE9iamVjdF0nYC5cbi8vIEluIElFIDExLCB0aGUgbW9zdCBjb21tb24gYW1vbmcgdGhlbSwgdGhpcyBwcm9ibGVtIGFsc28gYXBwbGllcyB0b1xuLy8gYE1hcGAsIGBXZWFrTWFwYCBhbmQgYFNldGAuXG4vLyBBbHNvLCB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgYW4gYXBwbGljYXRpb24gY2FuIG92ZXJyaWRlIHRoZSBuYXRpdmVcbi8vIGBEYXRhVmlld2Agb2JqZWN0LCBpbiBjYXNlcyBsaWtlIHRoYXQgd2UgY2FuJ3QgdXNlIHRoZSBjb25zdHJ1Y3RvclxuLy8gc2FmZWx5IGFuZCBzaG91bGQganVzdCByZWx5IG9uIGFsdGVybmF0ZSBgRGF0YVZpZXdgIGNoZWNrc1xuZXhwb3J0IHZhciBoYXNEYXRhVmlld0J1ZyA9IChcbiAgICAgIHN1cHBvcnRzRGF0YVZpZXcgJiYgKCEvXFxbbmF0aXZlIGNvZGVcXF0vLnRlc3QoU3RyaW5nKERhdGFWaWV3KSkgfHwgaGFzT2JqZWN0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoOCkpKSlcbiAgICApLFxuICAgIGlzSUUxMSA9ICh0eXBlb2YgTWFwICE9PSAndW5kZWZpbmVkJyAmJiBoYXNPYmplY3RUYWcobmV3IE1hcCkpO1xuIiwiaW1wb3J0IHRhZ1Rlc3RlciBmcm9tICcuL190YWdUZXN0ZXIuanMnO1xuaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBpc0FycmF5QnVmZmVyIGZyb20gJy4vaXNBcnJheUJ1ZmZlci5qcyc7XG5pbXBvcnQgeyBoYXNEYXRhVmlld0J1ZyB9IGZyb20gJy4vX3N0cmluZ1RhZ0J1Zy5qcyc7XG5cbnZhciBpc0RhdGFWaWV3ID0gdGFnVGVzdGVyKCdEYXRhVmlldycpO1xuXG4vLyBJbiBJRSAxMCAtIEVkZ2UgMTMsIHdlIG5lZWQgYSBkaWZmZXJlbnQgaGV1cmlzdGljXG4vLyB0byBkZXRlcm1pbmUgd2hldGhlciBhbiBvYmplY3QgaXMgYSBgRGF0YVZpZXdgLlxuLy8gQWxzbywgaW4gY2FzZXMgd2hlcmUgdGhlIG5hdGl2ZSBgRGF0YVZpZXdgIGlzXG4vLyBvdmVycmlkZGVuIHdlIGNhbid0IHJlbHkgb24gdGhlIHRhZyBpdHNlbGYuXG5mdW5jdGlvbiBhbHRlcm5hdGVJc0RhdGFWaWV3KG9iaikge1xuICByZXR1cm4gb2JqICE9IG51bGwgJiYgaXNGdW5jdGlvbihvYmouZ2V0SW50OCkgJiYgaXNBcnJheUJ1ZmZlcihvYmouYnVmZmVyKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKGhhc0RhdGFWaWV3QnVnID8gYWx0ZXJuYXRlSXNEYXRhVmlldyA6IGlzRGF0YVZpZXcpO1xuIiwiaW1wb3J0IHsgbmF0aXZlSXNBcnJheSB9IGZyb20gJy4vX3NldHVwLmpzJztcbmltcG9ydCB0YWdUZXN0ZXIgZnJvbSAnLi9fdGFnVGVzdGVyLmpzJztcblxuLy8gSXMgYSBnaXZlbiB2YWx1ZSBhbiBhcnJheT9cbi8vIERlbGVnYXRlcyB0byBFQ01BNSdzIG5hdGl2ZSBgQXJyYXkuaXNBcnJheWAuXG5leHBvcnQgZGVmYXVsdCBuYXRpdmVJc0FycmF5IHx8IHRhZ1Rlc3RlcignQXJyYXknKTtcbiIsImltcG9ydCB7IGhhc093blByb3BlcnR5IH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuXG4vLyBJbnRlcm5hbCBmdW5jdGlvbiB0byBjaGVjayB3aGV0aGVyIGBrZXlgIGlzIGFuIG93biBwcm9wZXJ0eSBuYW1lIG9mIGBvYmpgLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gIHJldHVybiBvYmogIT0gbnVsbCAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KTtcbn1cbiIsImltcG9ydCB0YWdUZXN0ZXIgZnJvbSAnLi9fdGFnVGVzdGVyLmpzJztcbmltcG9ydCBoYXMgZnJvbSAnLi9faGFzLmpzJztcblxudmFyIGlzQXJndW1lbnRzID0gdGFnVGVzdGVyKCdBcmd1bWVudHMnKTtcblxuLy8gRGVmaW5lIGEgZmFsbGJhY2sgdmVyc2lvbiBvZiB0aGUgbWV0aG9kIGluIGJyb3dzZXJzIChhaGVtLCBJRSA8IDkpLCB3aGVyZVxuLy8gdGhlcmUgaXNuJ3QgYW55IGluc3BlY3RhYmxlIFwiQXJndW1lbnRzXCIgdHlwZS5cbihmdW5jdGlvbigpIHtcbiAgaWYgKCFpc0FyZ3VtZW50cyhhcmd1bWVudHMpKSB7XG4gICAgaXNBcmd1bWVudHMgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBoYXMob2JqLCAnY2FsbGVlJyk7XG4gICAgfTtcbiAgfVxufSgpKTtcblxuZXhwb3J0IGRlZmF1bHQgaXNBcmd1bWVudHM7XG4iLCJpbXBvcnQgeyBfaXNGaW5pdGUgfSBmcm9tICcuL19zZXR1cC5qcyc7XG5pbXBvcnQgaXNTeW1ib2wgZnJvbSAnLi9pc1N5bWJvbC5qcyc7XG5cbi8vIElzIGEgZ2l2ZW4gb2JqZWN0IGEgZmluaXRlIG51bWJlcj9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzRmluaXRlKG9iaikge1xuICByZXR1cm4gIWlzU3ltYm9sKG9iaikgJiYgX2lzRmluaXRlKG9iaikgJiYgIWlzTmFOKHBhcnNlRmxvYXQob2JqKSk7XG59XG4iLCJpbXBvcnQgeyBfaXNOYU4gfSBmcm9tICcuL19zZXR1cC5qcyc7XG5pbXBvcnQgaXNOdW1iZXIgZnJvbSAnLi9pc051bWJlci5qcyc7XG5cbi8vIElzIHRoZSBnaXZlbiB2YWx1ZSBgTmFOYD9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzTmFOKG9iaikge1xuICByZXR1cm4gaXNOdW1iZXIob2JqKSAmJiBfaXNOYU4ob2JqKTtcbn1cbiIsIi8vIFByZWRpY2F0ZS1nZW5lcmF0aW5nIGZ1bmN0aW9uLiBPZnRlbiB1c2VmdWwgb3V0c2lkZSBvZiBVbmRlcnNjb3JlLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcbn1cbiIsImltcG9ydCB7IE1BWF9BUlJBWV9JTkRFWCB9IGZyb20gJy4vX3NldHVwLmpzJztcblxuLy8gQ29tbW9uIGludGVybmFsIGxvZ2ljIGZvciBgaXNBcnJheUxpa2VgIGFuZCBgaXNCdWZmZXJMaWtlYC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVNpemVQcm9wZXJ0eUNoZWNrKGdldFNpemVQcm9wZXJ0eSkge1xuICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbikge1xuICAgIHZhciBzaXplUHJvcGVydHkgPSBnZXRTaXplUHJvcGVydHkoY29sbGVjdGlvbik7XG4gICAgcmV0dXJuIHR5cGVvZiBzaXplUHJvcGVydHkgPT0gJ251bWJlcicgJiYgc2l6ZVByb3BlcnR5ID49IDAgJiYgc2l6ZVByb3BlcnR5IDw9IE1BWF9BUlJBWV9JTkRFWDtcbiAgfVxufVxuIiwiLy8gSW50ZXJuYWwgaGVscGVyIHRvIGdlbmVyYXRlIGEgZnVuY3Rpb24gdG8gb2J0YWluIHByb3BlcnR5IGBrZXlgIGZyb20gYG9iamAuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzaGFsbG93UHJvcGVydHkoa2V5KSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09IG51bGwgPyB2b2lkIDAgOiBvYmpba2V5XTtcbiAgfTtcbn1cbiIsImltcG9ydCBzaGFsbG93UHJvcGVydHkgZnJvbSAnLi9fc2hhbGxvd1Byb3BlcnR5LmpzJztcblxuLy8gSW50ZXJuYWwgaGVscGVyIHRvIG9idGFpbiB0aGUgYGJ5dGVMZW5ndGhgIHByb3BlcnR5IG9mIGFuIG9iamVjdC5cbmV4cG9ydCBkZWZhdWx0IHNoYWxsb3dQcm9wZXJ0eSgnYnl0ZUxlbmd0aCcpO1xuIiwiaW1wb3J0IGNyZWF0ZVNpemVQcm9wZXJ0eUNoZWNrIGZyb20gJy4vX2NyZWF0ZVNpemVQcm9wZXJ0eUNoZWNrLmpzJztcbmltcG9ydCBnZXRCeXRlTGVuZ3RoIGZyb20gJy4vX2dldEJ5dGVMZW5ndGguanMnO1xuXG4vLyBJbnRlcm5hbCBoZWxwZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgd2Ugc2hvdWxkIHNwZW5kIGV4dGVuc2l2ZSBjaGVja3MgYWdhaW5zdFxuLy8gYEFycmF5QnVmZmVyYCBldCBhbC5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVNpemVQcm9wZXJ0eUNoZWNrKGdldEJ5dGVMZW5ndGgpO1xuIiwiaW1wb3J0IHsgc3VwcG9ydHNBcnJheUJ1ZmZlciwgbmF0aXZlSXNWaWV3LCB0b1N0cmluZyB9IGZyb20gJy4vX3NldHVwLmpzJztcbmltcG9ydCBpc0RhdGFWaWV3IGZyb20gJy4vaXNEYXRhVmlldy5qcyc7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSAnLi9jb25zdGFudC5qcyc7XG5pbXBvcnQgaXNCdWZmZXJMaWtlIGZyb20gJy4vX2lzQnVmZmVyTGlrZS5qcyc7XG5cbi8vIElzIGEgZ2l2ZW4gdmFsdWUgYSB0eXBlZCBhcnJheT9cbnZhciB0eXBlZEFycmF5UGF0dGVybiA9IC9cXFtvYmplY3QgKChJfFVpKW50KDh8MTZ8MzIpfEZsb2F0KDMyfDY0KXxVaW50OENsYW1wZWR8QmlnKEl8VWkpbnQ2NClBcnJheVxcXS87XG5mdW5jdGlvbiBpc1R5cGVkQXJyYXkob2JqKSB7XG4gIC8vIGBBcnJheUJ1ZmZlci5pc1ZpZXdgIGlzIHRoZSBtb3N0IGZ1dHVyZS1wcm9vZiwgc28gdXNlIGl0IHdoZW4gYXZhaWxhYmxlLlxuICAvLyBPdGhlcndpc2UsIGZhbGwgYmFjayBvbiB0aGUgYWJvdmUgcmVndWxhciBleHByZXNzaW9uLlxuICByZXR1cm4gbmF0aXZlSXNWaWV3ID8gKG5hdGl2ZUlzVmlldyhvYmopICYmICFpc0RhdGFWaWV3KG9iaikpIDpcbiAgICAgICAgICAgICAgICBpc0J1ZmZlckxpa2Uob2JqKSAmJiB0eXBlZEFycmF5UGF0dGVybi50ZXN0KHRvU3RyaW5nLmNhbGwob2JqKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN1cHBvcnRzQXJyYXlCdWZmZXIgPyBpc1R5cGVkQXJyYXkgOiBjb25zdGFudChmYWxzZSk7XG4iLCJpbXBvcnQgc2hhbGxvd1Byb3BlcnR5IGZyb20gJy4vX3NoYWxsb3dQcm9wZXJ0eS5qcyc7XG5cbi8vIEludGVybmFsIGhlbHBlciB0byBvYnRhaW4gdGhlIGBsZW5ndGhgIHByb3BlcnR5IG9mIGFuIG9iamVjdC5cbmV4cG9ydCBkZWZhdWx0IHNoYWxsb3dQcm9wZXJ0eSgnbGVuZ3RoJyk7XG4iLCJpbXBvcnQgeyBub25FbnVtZXJhYmxlUHJvcHMsIE9ialByb3RvIH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBoYXMgZnJvbSAnLi9faGFzLmpzJztcblxuLy8gSW50ZXJuYWwgaGVscGVyIHRvIGNyZWF0ZSBhIHNpbXBsZSBsb29rdXAgc3RydWN0dXJlLlxuLy8gYGNvbGxlY3ROb25FbnVtUHJvcHNgIHVzZWQgdG8gZGVwZW5kIG9uIGBfLmNvbnRhaW5zYCwgYnV0IHRoaXMgbGVkIHRvXG4vLyBjaXJjdWxhciBpbXBvcnRzLiBgZW11bGF0ZWRTZXRgIGlzIGEgb25lLW9mZiBzb2x1dGlvbiB0aGF0IG9ubHkgd29ya3MgZm9yXG4vLyBhcnJheXMgb2Ygc3RyaW5ncy5cbmZ1bmN0aW9uIGVtdWxhdGVkU2V0KGtleXMpIHtcbiAgdmFyIGhhc2ggPSB7fTtcbiAgZm9yICh2YXIgbCA9IGtleXMubGVuZ3RoLCBpID0gMDsgaSA8IGw7ICsraSkgaGFzaFtrZXlzW2ldXSA9IHRydWU7XG4gIHJldHVybiB7XG4gICAgY29udGFpbnM6IGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gaGFzaFtrZXldID09PSB0cnVlOyB9LFxuICAgIHB1c2g6IGZ1bmN0aW9uKGtleSkge1xuICAgICAgaGFzaFtrZXldID0gdHJ1ZTtcbiAgICAgIHJldHVybiBrZXlzLnB1c2goa2V5KTtcbiAgICB9XG4gIH07XG59XG5cbi8vIEludGVybmFsIGhlbHBlci4gQ2hlY2tzIGBrZXlzYCBmb3IgdGhlIHByZXNlbmNlIG9mIGtleXMgaW4gSUUgPCA5IHRoYXQgd29uJ3Rcbi8vIGJlIGl0ZXJhdGVkIGJ5IGBmb3Iga2V5IGluIC4uLmAgYW5kIHRodXMgbWlzc2VkLiBFeHRlbmRzIGBrZXlzYCBpbiBwbGFjZSBpZlxuLy8gbmVlZGVkLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpIHtcbiAga2V5cyA9IGVtdWxhdGVkU2V0KGtleXMpO1xuICB2YXIgbm9uRW51bUlkeCA9IG5vbkVudW1lcmFibGVQcm9wcy5sZW5ndGg7XG4gIHZhciBjb25zdHJ1Y3RvciA9IG9iai5jb25zdHJ1Y3RvcjtcbiAgdmFyIHByb3RvID0gKGlzRnVuY3Rpb24oY29uc3RydWN0b3IpICYmIGNvbnN0cnVjdG9yLnByb3RvdHlwZSkgfHwgT2JqUHJvdG87XG5cbiAgLy8gQ29uc3RydWN0b3IgaXMgYSBzcGVjaWFsIGNhc2UuXG4gIHZhciBwcm9wID0gJ2NvbnN0cnVjdG9yJztcbiAgaWYgKGhhcyhvYmosIHByb3ApICYmICFrZXlzLmNvbnRhaW5zKHByb3ApKSBrZXlzLnB1c2gocHJvcCk7XG5cbiAgd2hpbGUgKG5vbkVudW1JZHgtLSkge1xuICAgIHByb3AgPSBub25FbnVtZXJhYmxlUHJvcHNbbm9uRW51bUlkeF07XG4gICAgaWYgKHByb3AgaW4gb2JqICYmIG9ialtwcm9wXSAhPT0gcHJvdG9bcHJvcF0gJiYgIWtleXMuY29udGFpbnMocHJvcCkpIHtcbiAgICAgIGtleXMucHVzaChwcm9wKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCB7IG5hdGl2ZUtleXMsIGhhc0VudW1CdWcgfSBmcm9tICcuL19zZXR1cC5qcyc7XG5pbXBvcnQgaGFzIGZyb20gJy4vX2hhcy5qcyc7XG5pbXBvcnQgY29sbGVjdE5vbkVudW1Qcm9wcyBmcm9tICcuL19jb2xsZWN0Tm9uRW51bVByb3BzLmpzJztcblxuLy8gUmV0cmlldmUgdGhlIG5hbWVzIG9mIGFuIG9iamVjdCdzIG93biBwcm9wZXJ0aWVzLlxuLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYE9iamVjdC5rZXlzYC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGtleXMob2JqKSB7XG4gIGlmICghaXNPYmplY3Qob2JqKSkgcmV0dXJuIFtdO1xuICBpZiAobmF0aXZlS2V5cykgcmV0dXJuIG5hdGl2ZUtleXMob2JqKTtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikgaWYgKGhhcyhvYmosIGtleSkpIGtleXMucHVzaChrZXkpO1xuICAvLyBBaGVtLCBJRSA8IDkuXG4gIGlmIChoYXNFbnVtQnVnKSBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7XG4gIHJldHVybiBrZXlzO1xufVxuIiwiaW1wb3J0IGdldExlbmd0aCBmcm9tICcuL19nZXRMZW5ndGguanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc1N0cmluZyBmcm9tICcuL2lzU3RyaW5nLmpzJztcbmltcG9ydCBpc0FyZ3VtZW50cyBmcm9tICcuL2lzQXJndW1lbnRzLmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8vIElzIGEgZ2l2ZW4gYXJyYXksIHN0cmluZywgb3Igb2JqZWN0IGVtcHR5P1xuLy8gQW4gXCJlbXB0eVwiIG9iamVjdCBoYXMgbm8gZW51bWVyYWJsZSBvd24tcHJvcGVydGllcy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7XG4gIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gIC8vIFNraXAgdGhlIG1vcmUgZXhwZW5zaXZlIGB0b1N0cmluZ2AtYmFzZWQgdHlwZSBjaGVja3MgaWYgYG9iamAgaGFzIG5vXG4gIC8vIGAubGVuZ3RoYC5cbiAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChvYmopO1xuICBpZiAodHlwZW9mIGxlbmd0aCA9PSAnbnVtYmVyJyAmJiAoXG4gICAgaXNBcnJheShvYmopIHx8IGlzU3RyaW5nKG9iaikgfHwgaXNBcmd1bWVudHMob2JqKVxuICApKSByZXR1cm4gbGVuZ3RoID09PSAwO1xuICByZXR1cm4gZ2V0TGVuZ3RoKGtleXMob2JqKSkgPT09IDA7XG59XG4iLCJpbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vLyBSZXR1cm5zIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHNldCBvZiBga2V5OnZhbHVlYCBwYWlycy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzTWF0Y2gob2JqZWN0LCBhdHRycykge1xuICB2YXIgX2tleXMgPSBrZXlzKGF0dHJzKSwgbGVuZ3RoID0gX2tleXMubGVuZ3RoO1xuICBpZiAob2JqZWN0ID09IG51bGwpIHJldHVybiAhbGVuZ3RoO1xuICB2YXIgb2JqID0gT2JqZWN0KG9iamVjdCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0gX2tleXNbaV07XG4gICAgaWYgKGF0dHJzW2tleV0gIT09IG9ialtrZXldIHx8ICEoa2V5IGluIG9iaikpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbiIsImltcG9ydCB7IFZFUlNJT04gfSBmcm9tICcuL19zZXR1cC5qcyc7XG5cbi8vIElmIFVuZGVyc2NvcmUgaXMgY2FsbGVkIGFzIGEgZnVuY3Rpb24sIGl0IHJldHVybnMgYSB3cmFwcGVkIG9iamVjdCB0aGF0IGNhblxuLy8gYmUgdXNlZCBPTy1zdHlsZS4gVGhpcyB3cmFwcGVyIGhvbGRzIGFsdGVyZWQgdmVyc2lvbnMgb2YgYWxsIGZ1bmN0aW9ucyBhZGRlZFxuLy8gdGhyb3VnaCBgXy5taXhpbmAuIFdyYXBwZWQgb2JqZWN0cyBtYXkgYmUgY2hhaW5lZC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF8ob2JqKSB7XG4gIGlmIChvYmogaW5zdGFuY2VvZiBfKSByZXR1cm4gb2JqO1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgXykpIHJldHVybiBuZXcgXyhvYmopO1xuICB0aGlzLl93cmFwcGVkID0gb2JqO1xufVxuXG5fLlZFUlNJT04gPSBWRVJTSU9OO1xuXG4vLyBFeHRyYWN0cyB0aGUgcmVzdWx0IGZyb20gYSB3cmFwcGVkIGFuZCBjaGFpbmVkIG9iamVjdC5cbl8ucHJvdG90eXBlLnZhbHVlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl93cmFwcGVkO1xufTtcblxuLy8gUHJvdmlkZSB1bndyYXBwaW5nIHByb3hpZXMgZm9yIHNvbWUgbWV0aG9kcyB1c2VkIGluIGVuZ2luZSBvcGVyYXRpb25zXG4vLyBzdWNoIGFzIGFyaXRobWV0aWMgYW5kIEpTT04gc3RyaW5naWZpY2F0aW9uLlxuXy5wcm90b3R5cGUudmFsdWVPZiA9IF8ucHJvdG90eXBlLnRvSlNPTiA9IF8ucHJvdG90eXBlLnZhbHVlO1xuXG5fLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gU3RyaW5nKHRoaXMuX3dyYXBwZWQpO1xufTtcbiIsImltcG9ydCBnZXRCeXRlTGVuZ3RoIGZyb20gJy4vX2dldEJ5dGVMZW5ndGguanMnO1xuXG4vLyBJbnRlcm5hbCBmdW5jdGlvbiB0byB3cmFwIG9yIHNoYWxsb3ctY29weSBhbiBBcnJheUJ1ZmZlcixcbi8vIHR5cGVkIGFycmF5IG9yIERhdGFWaWV3IHRvIGEgbmV3IHZpZXcsIHJldXNpbmcgdGhlIGJ1ZmZlci5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvQnVmZmVyVmlldyhidWZmZXJTb3VyY2UpIHtcbiAgcmV0dXJuIG5ldyBVaW50OEFycmF5KFxuICAgIGJ1ZmZlclNvdXJjZS5idWZmZXIgfHwgYnVmZmVyU291cmNlLFxuICAgIGJ1ZmZlclNvdXJjZS5ieXRlT2Zmc2V0IHx8IDAsXG4gICAgZ2V0Qnl0ZUxlbmd0aChidWZmZXJTb3VyY2UpXG4gICk7XG59XG4iLCJpbXBvcnQgXyBmcm9tICcuL3VuZGVyc2NvcmUuanMnO1xuaW1wb3J0IHsgdG9TdHJpbmcsIFN5bWJvbFByb3RvIH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuaW1wb3J0IGdldEJ5dGVMZW5ndGggZnJvbSAnLi9fZ2V0Qnl0ZUxlbmd0aC5qcyc7XG5pbXBvcnQgaXNUeXBlZEFycmF5IGZyb20gJy4vaXNUeXBlZEFycmF5LmpzJztcbmltcG9ydCBpc0Z1bmN0aW9uIGZyb20gJy4vaXNGdW5jdGlvbi5qcyc7XG5pbXBvcnQgeyBoYXNEYXRhVmlld0J1ZyB9ICBmcm9tICcuL19zdHJpbmdUYWdCdWcuanMnO1xuaW1wb3J0IGlzRGF0YVZpZXcgZnJvbSAnLi9pc0RhdGFWaWV3LmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5pbXBvcnQgaGFzIGZyb20gJy4vX2hhcy5qcyc7XG5pbXBvcnQgdG9CdWZmZXJWaWV3IGZyb20gJy4vX3RvQnVmZmVyVmlldy5qcyc7XG5cbi8vIFdlIHVzZSB0aGlzIHN0cmluZyB0d2ljZSwgc28gZ2l2ZSBpdCBhIG5hbWUgZm9yIG1pbmlmaWNhdGlvbi5cbnZhciB0YWdEYXRhVmlldyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8vIEludGVybmFsIHJlY3Vyc2l2ZSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBgXy5pc0VxdWFsYC5cbmZ1bmN0aW9uIGVxKGEsIGIsIGFTdGFjaywgYlN0YWNrKSB7XG4gIC8vIElkZW50aWNhbCBvYmplY3RzIGFyZSBlcXVhbC4gYDAgPT09IC0wYCwgYnV0IHRoZXkgYXJlbid0IGlkZW50aWNhbC5cbiAgLy8gU2VlIHRoZSBbSGFybW9ueSBgZWdhbGAgcHJvcG9zYWxdKGh0dHBzOi8vd2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1LnBocD9pZD1oYXJtb255OmVnYWwpLlxuICBpZiAoYSA9PT0gYikgcmV0dXJuIGEgIT09IDAgfHwgMSAvIGEgPT09IDEgLyBiO1xuICAvLyBgbnVsbGAgb3IgYHVuZGVmaW5lZGAgb25seSBlcXVhbCB0byBpdHNlbGYgKHN0cmljdCBjb21wYXJpc29uKS5cbiAgaWYgKGEgPT0gbnVsbCB8fCBiID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgLy8gYE5hTmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJlZmxleGl2ZS5cbiAgaWYgKGEgIT09IGEpIHJldHVybiBiICE9PSBiO1xuICAvLyBFeGhhdXN0IHByaW1pdGl2ZSBjaGVja3NcbiAgdmFyIHR5cGUgPSB0eXBlb2YgYTtcbiAgaWYgKHR5cGUgIT09ICdmdW5jdGlvbicgJiYgdHlwZSAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIGIgIT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGRlZXBFcShhLCBiLCBhU3RhY2ssIGJTdGFjayk7XG59XG5cbi8vIEludGVybmFsIHJlY3Vyc2l2ZSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBgXy5pc0VxdWFsYC5cbmZ1bmN0aW9uIGRlZXBFcShhLCBiLCBhU3RhY2ssIGJTdGFjaykge1xuICAvLyBVbndyYXAgYW55IHdyYXBwZWQgb2JqZWN0cy5cbiAgaWYgKGEgaW5zdGFuY2VvZiBfKSBhID0gYS5fd3JhcHBlZDtcbiAgaWYgKGIgaW5zdGFuY2VvZiBfKSBiID0gYi5fd3JhcHBlZDtcbiAgLy8gQ29tcGFyZSBgW1tDbGFzc11dYCBuYW1lcy5cbiAgdmFyIGNsYXNzTmFtZSA9IHRvU3RyaW5nLmNhbGwoYSk7XG4gIGlmIChjbGFzc05hbWUgIT09IHRvU3RyaW5nLmNhbGwoYikpIHJldHVybiBmYWxzZTtcbiAgLy8gV29yayBhcm91bmQgYSBidWcgaW4gSUUgMTAgLSBFZGdlIDEzLlxuICBpZiAoaGFzRGF0YVZpZXdCdWcgJiYgY2xhc3NOYW1lID09ICdbb2JqZWN0IE9iamVjdF0nICYmIGlzRGF0YVZpZXcoYSkpIHtcbiAgICBpZiAoIWlzRGF0YVZpZXcoYikpIHJldHVybiBmYWxzZTtcbiAgICBjbGFzc05hbWUgPSB0YWdEYXRhVmlldztcbiAgfVxuICBzd2l0Y2ggKGNsYXNzTmFtZSkge1xuICAgIC8vIFRoZXNlIHR5cGVzIGFyZSBjb21wYXJlZCBieSB2YWx1ZS5cbiAgICBjYXNlICdbb2JqZWN0IFJlZ0V4cF0nOlxuICAgICAgLy8gUmVnRXhwcyBhcmUgY29lcmNlZCB0byBzdHJpbmdzIGZvciBjb21wYXJpc29uIChOb3RlOiAnJyArIC9hL2kgPT09ICcvYS9pJylcbiAgICBjYXNlICdbb2JqZWN0IFN0cmluZ10nOlxuICAgICAgLy8gUHJpbWl0aXZlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBvYmplY3Qgd3JhcHBlcnMgYXJlIGVxdWl2YWxlbnQ7IHRodXMsIGBcIjVcImAgaXNcbiAgICAgIC8vIGVxdWl2YWxlbnQgdG8gYG5ldyBTdHJpbmcoXCI1XCIpYC5cbiAgICAgIHJldHVybiAnJyArIGEgPT09ICcnICsgYjtcbiAgICBjYXNlICdbb2JqZWN0IE51bWJlcl0nOlxuICAgICAgLy8gYE5hTmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJlZmxleGl2ZS5cbiAgICAgIC8vIE9iamVjdChOYU4pIGlzIGVxdWl2YWxlbnQgdG8gTmFOLlxuICAgICAgaWYgKCthICE9PSArYSkgcmV0dXJuICtiICE9PSArYjtcbiAgICAgIC8vIEFuIGBlZ2FsYCBjb21wYXJpc29uIGlzIHBlcmZvcm1lZCBmb3Igb3RoZXIgbnVtZXJpYyB2YWx1ZXMuXG4gICAgICByZXR1cm4gK2EgPT09IDAgPyAxIC8gK2EgPT09IDEgLyBiIDogK2EgPT09ICtiO1xuICAgIGNhc2UgJ1tvYmplY3QgRGF0ZV0nOlxuICAgIGNhc2UgJ1tvYmplY3QgQm9vbGVhbl0nOlxuICAgICAgLy8gQ29lcmNlIGRhdGVzIGFuZCBib29sZWFucyB0byBudW1lcmljIHByaW1pdGl2ZSB2YWx1ZXMuIERhdGVzIGFyZSBjb21wYXJlZCBieSB0aGVpclxuICAgICAgLy8gbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zLiBOb3RlIHRoYXQgaW52YWxpZCBkYXRlcyB3aXRoIG1pbGxpc2Vjb25kIHJlcHJlc2VudGF0aW9uc1xuICAgICAgLy8gb2YgYE5hTmAgYXJlIG5vdCBlcXVpdmFsZW50LlxuICAgICAgcmV0dXJuICthID09PSArYjtcbiAgICBjYXNlICdbb2JqZWN0IFN5bWJvbF0nOlxuICAgICAgcmV0dXJuIFN5bWJvbFByb3RvLnZhbHVlT2YuY2FsbChhKSA9PT0gU3ltYm9sUHJvdG8udmFsdWVPZi5jYWxsKGIpO1xuICAgIGNhc2UgJ1tvYmplY3QgQXJyYXlCdWZmZXJdJzpcbiAgICBjYXNlIHRhZ0RhdGFWaWV3OlxuICAgICAgLy8gQ29lcmNlIHRvIHR5cGVkIGFycmF5IHNvIHdlIGNhbiBmYWxsIHRocm91Z2guXG4gICAgICByZXR1cm4gZGVlcEVxKHRvQnVmZmVyVmlldyhhKSwgdG9CdWZmZXJWaWV3KGIpLCBhU3RhY2ssIGJTdGFjayk7XG4gIH1cblxuICB2YXIgYXJlQXJyYXlzID0gY2xhc3NOYW1lID09PSAnW29iamVjdCBBcnJheV0nO1xuICBpZiAoIWFyZUFycmF5cyAmJiBpc1R5cGVkQXJyYXkoYSkpIHtcbiAgICAgIHZhciBieXRlTGVuZ3RoID0gZ2V0Qnl0ZUxlbmd0aChhKTtcbiAgICAgIGlmIChieXRlTGVuZ3RoICE9PSBnZXRCeXRlTGVuZ3RoKGIpKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoYS5idWZmZXIgPT09IGIuYnVmZmVyICYmIGEuYnl0ZU9mZnNldCA9PT0gYi5ieXRlT2Zmc2V0KSByZXR1cm4gdHJ1ZTtcbiAgICAgIGFyZUFycmF5cyA9IHRydWU7XG4gIH1cbiAgaWYgKCFhcmVBcnJheXMpIHtcbiAgICBpZiAodHlwZW9mIGEgIT0gJ29iamVjdCcgfHwgdHlwZW9mIGIgIT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIE9iamVjdHMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1aXZhbGVudCwgYnV0IGBPYmplY3RgcyBvciBgQXJyYXlgc1xuICAgIC8vIGZyb20gZGlmZmVyZW50IGZyYW1lcyBhcmUuXG4gICAgdmFyIGFDdG9yID0gYS5jb25zdHJ1Y3RvciwgYkN0b3IgPSBiLmNvbnN0cnVjdG9yO1xuICAgIGlmIChhQ3RvciAhPT0gYkN0b3IgJiYgIShpc0Z1bmN0aW9uKGFDdG9yKSAmJiBhQ3RvciBpbnN0YW5jZW9mIGFDdG9yICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRnVuY3Rpb24oYkN0b3IpICYmIGJDdG9yIGluc3RhbmNlb2YgYkN0b3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiAoJ2NvbnN0cnVjdG9yJyBpbiBhICYmICdjb25zdHJ1Y3RvcicgaW4gYikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgLy8gQXNzdW1lIGVxdWFsaXR5IGZvciBjeWNsaWMgc3RydWN0dXJlcy4gVGhlIGFsZ29yaXRobSBmb3IgZGV0ZWN0aW5nIGN5Y2xpY1xuICAvLyBzdHJ1Y3R1cmVzIGlzIGFkYXB0ZWQgZnJvbSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLCBhYnN0cmFjdCBvcGVyYXRpb24gYEpPYC5cblxuICAvLyBJbml0aWFsaXppbmcgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gIC8vIEl0J3MgZG9uZSBoZXJlIHNpbmNlIHdlIG9ubHkgbmVlZCB0aGVtIGZvciBvYmplY3RzIGFuZCBhcnJheXMgY29tcGFyaXNvbi5cbiAgYVN0YWNrID0gYVN0YWNrIHx8IFtdO1xuICBiU3RhY2sgPSBiU3RhY2sgfHwgW107XG4gIHZhciBsZW5ndGggPSBhU3RhY2subGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAvLyBMaW5lYXIgc2VhcmNoLiBQZXJmb3JtYW5jZSBpcyBpbnZlcnNlbHkgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2ZcbiAgICAvLyB1bmlxdWUgbmVzdGVkIHN0cnVjdHVyZXMuXG4gICAgaWYgKGFTdGFja1tsZW5ndGhdID09PSBhKSByZXR1cm4gYlN0YWNrW2xlbmd0aF0gPT09IGI7XG4gIH1cblxuICAvLyBBZGQgdGhlIGZpcnN0IG9iamVjdCB0byB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gIGFTdGFjay5wdXNoKGEpO1xuICBiU3RhY2sucHVzaChiKTtcblxuICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgYW5kIGFycmF5cy5cbiAgaWYgKGFyZUFycmF5cykge1xuICAgIC8vIENvbXBhcmUgYXJyYXkgbGVuZ3RocyB0byBkZXRlcm1pbmUgaWYgYSBkZWVwIGNvbXBhcmlzb24gaXMgbmVjZXNzYXJ5LlxuICAgIGxlbmd0aCA9IGEubGVuZ3RoO1xuICAgIGlmIChsZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gRGVlcCBjb21wYXJlIHRoZSBjb250ZW50cywgaWdub3Jpbmcgbm9uLW51bWVyaWMgcHJvcGVydGllcy5cbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIGlmICghZXEoYVtsZW5ndGhdLCBiW2xlbmd0aF0sIGFTdGFjaywgYlN0YWNrKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBEZWVwIGNvbXBhcmUgb2JqZWN0cy5cbiAgICB2YXIgX2tleXMgPSBrZXlzKGEpLCBrZXk7XG4gICAgbGVuZ3RoID0gX2tleXMubGVuZ3RoO1xuICAgIC8vIEVuc3VyZSB0aGF0IGJvdGggb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIG51bWJlciBvZiBwcm9wZXJ0aWVzIGJlZm9yZSBjb21wYXJpbmcgZGVlcCBlcXVhbGl0eS5cbiAgICBpZiAoa2V5cyhiKS5sZW5ndGggIT09IGxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgLy8gRGVlcCBjb21wYXJlIGVhY2ggbWVtYmVyXG4gICAgICBrZXkgPSBfa2V5c1tsZW5ndGhdO1xuICAgICAgaWYgKCEoaGFzKGIsIGtleSkgJiYgZXEoYVtrZXldLCBiW2tleV0sIGFTdGFjaywgYlN0YWNrKSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgLy8gUmVtb3ZlIHRoZSBmaXJzdCBvYmplY3QgZnJvbSB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gIGFTdGFjay5wb3AoKTtcbiAgYlN0YWNrLnBvcCgpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gUGVyZm9ybSBhIGRlZXAgY29tcGFyaXNvbiB0byBjaGVjayBpZiB0d28gb2JqZWN0cyBhcmUgZXF1YWwuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0VxdWFsKGEsIGIpIHtcbiAgcmV0dXJuIGVxKGEsIGIpO1xufVxuIiwiaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IHsgaGFzRW51bUJ1ZyB9IGZyb20gJy4vX3NldHVwLmpzJztcbmltcG9ydCBjb2xsZWN0Tm9uRW51bVByb3BzIGZyb20gJy4vX2NvbGxlY3ROb25FbnVtUHJvcHMuanMnO1xuXG4vLyBSZXRyaWV2ZSBhbGwgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYW4gb2JqZWN0LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWxsS2V5cyhvYmopIHtcbiAgaWYgKCFpc09iamVjdChvYmopKSByZXR1cm4gW107XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBvYmopIGtleXMucHVzaChrZXkpO1xuICAvLyBBaGVtLCBJRSA8IDkuXG4gIGlmIChoYXNFbnVtQnVnKSBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7XG4gIHJldHVybiBrZXlzO1xufVxuIiwiaW1wb3J0IGdldExlbmd0aCBmcm9tICcuL19nZXRMZW5ndGguanMnO1xuaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBhbGxLZXlzIGZyb20gJy4vYWxsS2V5cy5qcyc7XG5cbi8vIFNpbmNlIHRoZSByZWd1bGFyIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCB0eXBlIHRlc3RzIGRvbid0IHdvcmsgZm9yXG4vLyBzb21lIHR5cGVzIGluIElFIDExLCB3ZSB1c2UgYSBmaW5nZXJwcmludGluZyBoZXVyaXN0aWMgaW5zdGVhZCwgYmFzZWRcbi8vIG9uIHRoZSBtZXRob2RzLiBJdCdzIG5vdCBncmVhdCwgYnV0IGl0J3MgdGhlIGJlc3Qgd2UgZ290LlxuLy8gVGhlIGZpbmdlcnByaW50IG1ldGhvZCBsaXN0cyBhcmUgZGVmaW5lZCBiZWxvdy5cbmV4cG9ydCBmdW5jdGlvbiBpZTExZmluZ2VycHJpbnQobWV0aG9kcykge1xuICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKG1ldGhvZHMpO1xuICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYE1hcGAsIGBXZWFrTWFwYCBhbmQgYFNldGAgaGF2ZSBubyBlbnVtZXJhYmxlIGtleXMuXG4gICAgdmFyIGtleXMgPSBhbGxLZXlzKG9iaik7XG4gICAgaWYgKGdldExlbmd0aChrZXlzKSkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghaXNGdW5jdGlvbihvYmpbbWV0aG9kc1tpXV0pKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIElmIHdlIGFyZSB0ZXN0aW5nIGFnYWluc3QgYFdlYWtNYXBgLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0XG4gICAgLy8gYG9iamAgZG9lc24ndCBoYXZlIGEgYGZvckVhY2hgIG1ldGhvZCBpbiBvcmRlciB0byBkaXN0aW5ndWlzaFxuICAgIC8vIGl0IGZyb20gYSByZWd1bGFyIGBNYXBgLlxuICAgIHJldHVybiBtZXRob2RzICE9PSB3ZWFrTWFwTWV0aG9kcyB8fCAhaXNGdW5jdGlvbihvYmpbZm9yRWFjaE5hbWVdKTtcbiAgfTtcbn1cblxuLy8gSW4gdGhlIGludGVyZXN0IG9mIGNvbXBhY3QgbWluaWZpY2F0aW9uLCB3ZSB3cml0ZVxuLy8gZWFjaCBzdHJpbmcgaW4gdGhlIGZpbmdlcnByaW50cyBvbmx5IG9uY2UuXG52YXIgZm9yRWFjaE5hbWUgPSAnZm9yRWFjaCcsXG4gICAgaGFzTmFtZSA9ICdoYXMnLFxuICAgIGNvbW1vbkluaXQgPSBbJ2NsZWFyJywgJ2RlbGV0ZSddLFxuICAgIG1hcFRhaWwgPSBbJ2dldCcsIGhhc05hbWUsICdzZXQnXTtcblxuLy8gYE1hcGAsIGBXZWFrTWFwYCBhbmQgYFNldGAgZWFjaCBoYXZlIHNsaWdodGx5IGRpZmZlcmVudFxuLy8gY29tYmluYXRpb25zIG9mIHRoZSBhYm92ZSBzdWJsaXN0cy5cbmV4cG9ydCB2YXIgbWFwTWV0aG9kcyA9IGNvbW1vbkluaXQuY29uY2F0KGZvckVhY2hOYW1lLCBtYXBUYWlsKSxcbiAgICB3ZWFrTWFwTWV0aG9kcyA9IGNvbW1vbkluaXQuY29uY2F0KG1hcFRhaWwpLFxuICAgIHNldE1ldGhvZHMgPSBbJ2FkZCddLmNvbmNhdChjb21tb25Jbml0LCBmb3JFYWNoTmFtZSwgaGFzTmFtZSk7XG4iLCJpbXBvcnQgdGFnVGVzdGVyIGZyb20gJy4vX3RhZ1Rlc3Rlci5qcyc7XG5pbXBvcnQgeyBpc0lFMTEgfSBmcm9tICcuL19zdHJpbmdUYWdCdWcuanMnO1xuaW1wb3J0IHsgaWUxMWZpbmdlcnByaW50LCBtYXBNZXRob2RzIH0gIGZyb20gJy4vX21ldGhvZEZpbmdlcnByaW50LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgaXNJRTExID8gaWUxMWZpbmdlcnByaW50KG1hcE1ldGhvZHMpIDogdGFnVGVzdGVyKCdNYXAnKTtcbiIsImltcG9ydCB0YWdUZXN0ZXIgZnJvbSAnLi9fdGFnVGVzdGVyLmpzJztcbmltcG9ydCB7IGlzSUUxMSB9IGZyb20gJy4vX3N0cmluZ1RhZ0J1Zy5qcyc7XG5pbXBvcnQgeyBpZTExZmluZ2VycHJpbnQsIHdlYWtNYXBNZXRob2RzIH0gIGZyb20gJy4vX21ldGhvZEZpbmdlcnByaW50LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgaXNJRTExID8gaWUxMWZpbmdlcnByaW50KHdlYWtNYXBNZXRob2RzKSA6IHRhZ1Rlc3RlcignV2Vha01hcCcpO1xuIiwiaW1wb3J0IHRhZ1Rlc3RlciBmcm9tICcuL190YWdUZXN0ZXIuanMnO1xuaW1wb3J0IHsgaXNJRTExIH0gZnJvbSAnLi9fc3RyaW5nVGFnQnVnLmpzJztcbmltcG9ydCB7IGllMTFmaW5nZXJwcmludCwgc2V0TWV0aG9kcyB9ICBmcm9tICcuL19tZXRob2RGaW5nZXJwcmludC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGlzSUUxMSA/IGllMTFmaW5nZXJwcmludChzZXRNZXRob2RzKSA6IHRhZ1Rlc3RlcignU2V0Jyk7XG4iLCJpbXBvcnQgdGFnVGVzdGVyIGZyb20gJy4vX3RhZ1Rlc3Rlci5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHRhZ1Rlc3RlcignV2Vha1NldCcpO1xuIiwiaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLy8gUmV0cmlldmUgdGhlIHZhbHVlcyBvZiBhbiBvYmplY3QncyBwcm9wZXJ0aWVzLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsdWVzKG9iaikge1xuICB2YXIgX2tleXMgPSBrZXlzKG9iaik7XG4gIHZhciBsZW5ndGggPSBfa2V5cy5sZW5ndGg7XG4gIHZhciB2YWx1ZXMgPSBBcnJheShsZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgdmFsdWVzW2ldID0gb2JqW19rZXlzW2ldXTtcbiAgfVxuICByZXR1cm4gdmFsdWVzO1xufVxuIiwiaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLy8gQ29udmVydCBhbiBvYmplY3QgaW50byBhIGxpc3Qgb2YgYFtrZXksIHZhbHVlXWAgcGFpcnMuXG4vLyBUaGUgb3Bwb3NpdGUgb2YgYF8ub2JqZWN0YCB3aXRoIG9uZSBhcmd1bWVudC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBhaXJzKG9iaikge1xuICB2YXIgX2tleXMgPSBrZXlzKG9iaik7XG4gIHZhciBsZW5ndGggPSBfa2V5cy5sZW5ndGg7XG4gIHZhciBwYWlycyA9IEFycmF5KGxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBwYWlyc1tpXSA9IFtfa2V5c1tpXSwgb2JqW19rZXlzW2ldXV07XG4gIH1cbiAgcmV0dXJuIHBhaXJzO1xufVxuIiwiaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLy8gSW52ZXJ0IHRoZSBrZXlzIGFuZCB2YWx1ZXMgb2YgYW4gb2JqZWN0LiBUaGUgdmFsdWVzIG11c3QgYmUgc2VyaWFsaXphYmxlLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW52ZXJ0KG9iaikge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIHZhciBfa2V5cyA9IGtleXMob2JqKTtcbiAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IF9rZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgcmVzdWx0W29ialtfa2V5c1tpXV1dID0gX2tleXNbaV07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsImltcG9ydCBpc0Z1bmN0aW9uIGZyb20gJy4vaXNGdW5jdGlvbi5qcyc7XG5cbi8vIFJldHVybiBhIHNvcnRlZCBsaXN0IG9mIHRoZSBmdW5jdGlvbiBuYW1lcyBhdmFpbGFibGUgb24gdGhlIG9iamVjdC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZ1bmN0aW9ucyhvYmopIHtcbiAgdmFyIG5hbWVzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICBpZiAoaXNGdW5jdGlvbihvYmpba2V5XSkpIG5hbWVzLnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gbmFtZXMuc29ydCgpO1xufVxuIiwiLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGFzc2lnbmVyIGZ1bmN0aW9ucy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUFzc2lnbmVyKGtleXNGdW5jLCBkZWZhdWx0cykge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgaWYgKGRlZmF1bHRzKSBvYmogPSBPYmplY3Qob2JqKTtcbiAgICBpZiAobGVuZ3RoIDwgMiB8fCBvYmogPT0gbnVsbCkgcmV0dXJuIG9iajtcbiAgICBmb3IgKHZhciBpbmRleCA9IDE7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2luZGV4XSxcbiAgICAgICAgICBrZXlzID0ga2V5c0Z1bmMoc291cmNlKSxcbiAgICAgICAgICBsID0ga2V5cy5sZW5ndGg7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgaWYgKCFkZWZhdWx0cyB8fCBvYmpba2V5XSA9PT0gdm9pZCAwKSBvYmpba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9O1xufVxuIiwiaW1wb3J0IGNyZWF0ZUFzc2lnbmVyIGZyb20gJy4vX2NyZWF0ZUFzc2lnbmVyLmpzJztcbmltcG9ydCBhbGxLZXlzIGZyb20gJy4vYWxsS2V5cy5qcyc7XG5cbi8vIEV4dGVuZCBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgcHJvcGVydGllcyBpbiBwYXNzZWQtaW4gb2JqZWN0KHMpLlxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQXNzaWduZXIoYWxsS2V5cyk7XG4iLCJpbXBvcnQgY3JlYXRlQXNzaWduZXIgZnJvbSAnLi9fY3JlYXRlQXNzaWduZXIuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLy8gQXNzaWducyBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgb3duIHByb3BlcnRpZXMgaW4gdGhlIHBhc3NlZC1pblxuLy8gb2JqZWN0KHMpLlxuLy8gKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9hc3NpZ24pXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVBc3NpZ25lcihrZXlzKTtcbiIsImltcG9ydCBjcmVhdGVBc3NpZ25lciBmcm9tICcuL19jcmVhdGVBc3NpZ25lci5qcyc7XG5pbXBvcnQgYWxsS2V5cyBmcm9tICcuL2FsbEtleXMuanMnO1xuXG4vLyBGaWxsIGluIGEgZ2l2ZW4gb2JqZWN0IHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzLlxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQXNzaWduZXIoYWxsS2V5cywgdHJ1ZSk7XG4iLCJpbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5pbXBvcnQgeyBuYXRpdmVDcmVhdGUgfSBmcm9tICcuL19zZXR1cC5qcyc7XG5cbi8vIENyZWF0ZSBhIG5ha2VkIGZ1bmN0aW9uIHJlZmVyZW5jZSBmb3Igc3Vycm9nYXRlLXByb3RvdHlwZS1zd2FwcGluZy5cbmZ1bmN0aW9uIGN0b3IoKSB7XG4gIHJldHVybiBmdW5jdGlvbigpe307XG59XG5cbi8vIEFuIGludGVybmFsIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIG5ldyBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIGFub3RoZXIuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiYXNlQ3JlYXRlKHByb3RvdHlwZSkge1xuICBpZiAoIWlzT2JqZWN0KHByb3RvdHlwZSkpIHJldHVybiB7fTtcbiAgaWYgKG5hdGl2ZUNyZWF0ZSkgcmV0dXJuIG5hdGl2ZUNyZWF0ZShwcm90b3R5cGUpO1xuICB2YXIgQ3RvciA9IGN0b3IoKTtcbiAgQ3Rvci5wcm90b3R5cGUgPSBwcm90b3R5cGU7XG4gIHZhciByZXN1bHQgPSBuZXcgQ3RvcjtcbiAgQ3Rvci5wcm90b3R5cGUgPSBudWxsO1xuICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IGJhc2VDcmVhdGUgZnJvbSAnLi9fYmFzZUNyZWF0ZS5qcyc7XG5pbXBvcnQgZXh0ZW5kT3duIGZyb20gJy4vZXh0ZW5kT3duLmpzJztcblxuLy8gQ3JlYXRlcyBhbiBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIHRoZSBnaXZlbiBwcm90b3R5cGUgb2JqZWN0LlxuLy8gSWYgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGFyZSBwcm92aWRlZCB0aGVuIHRoZXkgd2lsbCBiZSBhZGRlZCB0byB0aGVcbi8vIGNyZWF0ZWQgb2JqZWN0LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlKHByb3RvdHlwZSwgcHJvcHMpIHtcbiAgdmFyIHJlc3VsdCA9IGJhc2VDcmVhdGUocHJvdG90eXBlKTtcbiAgaWYgKHByb3BzKSBleHRlbmRPd24ocmVzdWx0LCBwcm9wcyk7XG4gIHJldHVybiByZXN1bHQ7XG59XG4iLCJpbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGV4dGVuZCBmcm9tICcuL2V4dGVuZC5qcyc7XG5cbi8vIENyZWF0ZSBhIChzaGFsbG93LWNsb25lZCkgZHVwbGljYXRlIG9mIGFuIG9iamVjdC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNsb25lKG9iaikge1xuICBpZiAoIWlzT2JqZWN0KG9iaikpIHJldHVybiBvYmo7XG4gIHJldHVybiBpc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IGV4dGVuZCh7fSwgb2JqKTtcbn1cbiIsIi8vIEludm9rZXMgYGludGVyY2VwdG9yYCB3aXRoIHRoZSBgb2JqYCBhbmQgdGhlbiByZXR1cm5zIGBvYmpgLlxuLy8gVGhlIHByaW1hcnkgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBcInRhcCBpbnRvXCIgYSBtZXRob2QgY2hhaW4sIGluXG4vLyBvcmRlciB0byBwZXJmb3JtIG9wZXJhdGlvbnMgb24gaW50ZXJtZWRpYXRlIHJlc3VsdHMgd2l0aGluIHRoZSBjaGFpbi5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRhcChvYmosIGludGVyY2VwdG9yKSB7XG4gIGludGVyY2VwdG9yKG9iaik7XG4gIHJldHVybiBvYmo7XG59XG4iLCJpbXBvcnQgXyBmcm9tICcuL3VuZGVyc2NvcmUuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcblxuLy8gTm9ybWFsaXplIGEgKGRlZXApIHByb3BlcnR5IGBwYXRoYCB0byBhcnJheS5cbi8vIExpa2UgYF8uaXRlcmF0ZWVgLCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjdXN0b21pemVkLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9QYXRoKHBhdGgpIHtcbiAgcmV0dXJuIGlzQXJyYXkocGF0aCkgPyBwYXRoIDogW3BhdGhdO1xufVxuXy50b1BhdGggPSB0b1BhdGg7XG4iLCJpbXBvcnQgXyBmcm9tICcuL3VuZGVyc2NvcmUuanMnO1xuaW1wb3J0ICcuL3RvUGF0aC5qcyc7XG5cbi8vIEludGVybmFsIHdyYXBwZXIgZm9yIGBfLnRvUGF0aGAgdG8gZW5hYmxlIG1pbmlmaWNhdGlvbi5cbi8vIFNpbWlsYXIgdG8gYGNiYCBmb3IgYF8uaXRlcmF0ZWVgLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9QYXRoKHBhdGgpIHtcbiAgcmV0dXJuIF8udG9QYXRoKHBhdGgpO1xufVxuIiwiLy8gSW50ZXJuYWwgZnVuY3Rpb24gdG8gb2J0YWluIGEgbmVzdGVkIHByb3BlcnR5IGluIGBvYmpgIGFsb25nIGBwYXRoYC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlZXBHZXQob2JqLCBwYXRoKSB7XG4gIHZhciBsZW5ndGggPSBwYXRoLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcbiAgICBvYmogPSBvYmpbcGF0aFtpXV07XG4gIH1cbiAgcmV0dXJuIGxlbmd0aCA/IG9iaiA6IHZvaWQgMDtcbn1cbiIsImltcG9ydCB0b1BhdGggZnJvbSAnLi9fdG9QYXRoLmpzJztcbmltcG9ydCBkZWVwR2V0IGZyb20gJy4vX2RlZXBHZXQuanMnO1xuaW1wb3J0IGlzVW5kZWZpbmVkIGZyb20gJy4vaXNVbmRlZmluZWQuanMnO1xuXG4vLyBHZXQgdGhlIHZhbHVlIG9mIHRoZSAoZGVlcCkgcHJvcGVydHkgb24gYHBhdGhgIGZyb20gYG9iamVjdGAuXG4vLyBJZiBhbnkgcHJvcGVydHkgaW4gYHBhdGhgIGRvZXMgbm90IGV4aXN0IG9yIGlmIHRoZSB2YWx1ZSBpc1xuLy8gYHVuZGVmaW5lZGAsIHJldHVybiBgZGVmYXVsdFZhbHVlYCBpbnN0ZWFkLlxuLy8gVGhlIGBwYXRoYCBpcyBub3JtYWxpemVkIHRocm91Z2ggYF8udG9QYXRoYC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICB2YXIgdmFsdWUgPSBkZWVwR2V0KG9iamVjdCwgdG9QYXRoKHBhdGgpKTtcbiAgcmV0dXJuIGlzVW5kZWZpbmVkKHZhbHVlKSA/IGRlZmF1bHRWYWx1ZSA6IHZhbHVlO1xufVxuIiwiaW1wb3J0IF9oYXMgZnJvbSAnLi9faGFzLmpzJztcbmltcG9ydCB0b1BhdGggZnJvbSAnLi9fdG9QYXRoLmpzJztcblxuLy8gU2hvcnRjdXQgZnVuY3Rpb24gZm9yIGNoZWNraW5nIGlmIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBwcm9wZXJ0eSBkaXJlY3RseSBvblxuLy8gaXRzZWxmIChpbiBvdGhlciB3b3Jkcywgbm90IG9uIGEgcHJvdG90eXBlKS4gVW5saWtlIHRoZSBpbnRlcm5hbCBgaGFzYFxuLy8gZnVuY3Rpb24sIHRoaXMgcHVibGljIHZlcnNpb24gY2FuIGFsc28gdHJhdmVyc2UgbmVzdGVkIHByb3BlcnRpZXMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoYXMob2JqLCBwYXRoKSB7XG4gIHBhdGggPSB0b1BhdGgocGF0aCk7XG4gIHZhciBsZW5ndGggPSBwYXRoLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBwYXRoW2ldO1xuICAgIGlmICghX2hhcyhvYmosIGtleSkpIHJldHVybiBmYWxzZTtcbiAgICBvYmogPSBvYmpba2V5XTtcbiAgfVxuICByZXR1cm4gISFsZW5ndGg7XG59XG4iLCIvLyBLZWVwIHRoZSBpZGVudGl0eSBmdW5jdGlvbiBhcm91bmQgZm9yIGRlZmF1bHQgaXRlcmF0ZWVzLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuIiwiaW1wb3J0IGV4dGVuZE93biBmcm9tICcuL2V4dGVuZE93bi5qcyc7XG5pbXBvcnQgaXNNYXRjaCBmcm9tICcuL2lzTWF0Y2guanMnO1xuXG4vLyBSZXR1cm5zIGEgcHJlZGljYXRlIGZvciBjaGVja2luZyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2Zcbi8vIGBrZXk6dmFsdWVgIHBhaXJzLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWF0Y2hlcihhdHRycykge1xuICBhdHRycyA9IGV4dGVuZE93bih7fSwgYXR0cnMpO1xuICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIGlzTWF0Y2gob2JqLCBhdHRycyk7XG4gIH07XG59XG4iLCJpbXBvcnQgZGVlcEdldCBmcm9tICcuL19kZWVwR2V0LmpzJztcbmltcG9ydCB0b1BhdGggZnJvbSAnLi9fdG9QYXRoLmpzJztcblxuLy8gQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gcGFzc2VkIGFuIG9iamVjdCwgd2lsbCB0cmF2ZXJzZSB0aGF0IG9iamVjdOKAmXNcbi8vIHByb3BlcnRpZXMgZG93biB0aGUgZ2l2ZW4gYHBhdGhgLCBzcGVjaWZpZWQgYXMgYW4gYXJyYXkgb2Yga2V5cyBvciBpbmRpY2VzLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcHJvcGVydHkocGF0aCkge1xuICBwYXRoID0gdG9QYXRoKHBhdGgpO1xuICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIGRlZXBHZXQob2JqLCBwYXRoKTtcbiAgfTtcbn1cbiIsIi8vIEludGVybmFsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBlZmZpY2llbnQgKGZvciBjdXJyZW50IGVuZ2luZXMpIHZlcnNpb25cbi8vIG9mIHRoZSBwYXNzZWQtaW4gY2FsbGJhY2ssIHRvIGJlIHJlcGVhdGVkbHkgYXBwbGllZCBpbiBvdGhlciBVbmRlcnNjb3JlXG4vLyBmdW5jdGlvbnMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvcHRpbWl6ZUNiKGZ1bmMsIGNvbnRleHQsIGFyZ0NvdW50KSB7XG4gIGlmIChjb250ZXh0ID09PSB2b2lkIDApIHJldHVybiBmdW5jO1xuICBzd2l0Y2ggKGFyZ0NvdW50ID09IG51bGwgPyAzIDogYXJnQ291bnQpIHtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSk7XG4gICAgfTtcbiAgICAvLyBUaGUgMi1hcmd1bWVudCBjYXNlIGlzIG9taXR0ZWQgYmVjYXVzZSB3ZeKAmXJlIG5vdCB1c2luZyBpdC5cbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICB9O1xuICAgIGNhc2UgNDogcmV0dXJuIGZ1bmN0aW9uKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cbiIsImltcG9ydCBpZGVudGl0eSBmcm9tICcuL2lkZW50aXR5LmpzJztcbmltcG9ydCBpc0Z1bmN0aW9uIGZyb20gJy4vaXNGdW5jdGlvbi5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IG1hdGNoZXIgZnJvbSAnLi9tYXRjaGVyLmpzJztcbmltcG9ydCBwcm9wZXJ0eSBmcm9tICcuL3Byb3BlcnR5LmpzJztcbmltcG9ydCBvcHRpbWl6ZUNiIGZyb20gJy4vX29wdGltaXplQ2IuanMnO1xuXG4vLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBjYWxsYmFja3MgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBlYWNoXG4vLyBlbGVtZW50IGluIGEgY29sbGVjdGlvbiwgcmV0dXJuaW5nIHRoZSBkZXNpcmVkIHJlc3VsdCDigJQgZWl0aGVyIGBfLmlkZW50aXR5YCxcbi8vIGFuIGFyYml0cmFyeSBjYWxsYmFjaywgYSBwcm9wZXJ0eSBtYXRjaGVyLCBvciBhIHByb3BlcnR5IGFjY2Vzc29yLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYmFzZUl0ZXJhdGVlKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIGlkZW50aXR5O1xuICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybiBvcHRpbWl6ZUNiKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCk7XG4gIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgIWlzQXJyYXkodmFsdWUpKSByZXR1cm4gbWF0Y2hlcih2YWx1ZSk7XG4gIHJldHVybiBwcm9wZXJ0eSh2YWx1ZSk7XG59XG4iLCJpbXBvcnQgXyBmcm9tICcuL3VuZGVyc2NvcmUuanMnO1xuaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuXG4vLyBFeHRlcm5hbCB3cmFwcGVyIGZvciBvdXIgY2FsbGJhY2sgZ2VuZXJhdG9yLiBVc2VycyBtYXkgY3VzdG9taXplXG4vLyBgXy5pdGVyYXRlZWAgaWYgdGhleSB3YW50IGFkZGl0aW9uYWwgcHJlZGljYXRlL2l0ZXJhdGVlIHNob3J0aGFuZCBzdHlsZXMuXG4vLyBUaGlzIGFic3RyYWN0aW9uIGhpZGVzIHRoZSBpbnRlcm5hbC1vbmx5IGBhcmdDb3VudGAgYXJndW1lbnQuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpdGVyYXRlZSh2YWx1ZSwgY29udGV4dCkge1xuICByZXR1cm4gYmFzZUl0ZXJhdGVlKHZhbHVlLCBjb250ZXh0LCBJbmZpbml0eSk7XG59XG5fLml0ZXJhdGVlID0gaXRlcmF0ZWU7XG4iLCJpbXBvcnQgXyBmcm9tICcuL3VuZGVyc2NvcmUuanMnO1xuaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IGl0ZXJhdGVlIGZyb20gJy4vaXRlcmF0ZWUuanMnO1xuXG4vLyBUaGUgZnVuY3Rpb24gd2UgY2FsbCBpbnRlcm5hbGx5IHRvIGdlbmVyYXRlIGEgY2FsbGJhY2suIEl0IGludm9rZXNcbi8vIGBfLml0ZXJhdGVlYCBpZiBvdmVycmlkZGVuLCBvdGhlcndpc2UgYGJhc2VJdGVyYXRlZWAuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjYih2YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpIHtcbiAgaWYgKF8uaXRlcmF0ZWUgIT09IGl0ZXJhdGVlKSByZXR1cm4gXy5pdGVyYXRlZSh2YWx1ZSwgY29udGV4dCk7XG4gIHJldHVybiBiYXNlSXRlcmF0ZWUodmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KTtcbn1cbiIsImltcG9ydCBjYiBmcm9tICcuL19jYi5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vLyBSZXR1cm5zIHRoZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBgaXRlcmF0ZWVgIHRvIGVhY2ggZWxlbWVudCBvZiBgb2JqYC5cbi8vIEluIGNvbnRyYXN0IHRvIGBfLm1hcGAgaXQgcmV0dXJucyBhbiBvYmplY3QuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYXBPYmplY3Qob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgdmFyIF9rZXlzID0ga2V5cyhvYmopLFxuICAgICAgbGVuZ3RoID0gX2tleXMubGVuZ3RoLFxuICAgICAgcmVzdWx0cyA9IHt9O1xuICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgdmFyIGN1cnJlbnRLZXkgPSBfa2V5c1tpbmRleF07XG4gICAgcmVzdWx0c1tjdXJyZW50S2V5XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0cztcbn1cbiIsIi8vIFByZWRpY2F0ZS1nZW5lcmF0aW5nIGZ1bmN0aW9uLiBPZnRlbiB1c2VmdWwgb3V0c2lkZSBvZiBVbmRlcnNjb3JlLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbm9vcCgpe31cbiIsImltcG9ydCBub29wIGZyb20gJy4vbm9vcC5qcyc7XG5pbXBvcnQgZ2V0IGZyb20gJy4vZ2V0LmpzJztcblxuLy8gR2VuZXJhdGVzIGEgZnVuY3Rpb24gZm9yIGEgZ2l2ZW4gb2JqZWN0IHRoYXQgcmV0dXJucyBhIGdpdmVuIHByb3BlcnR5LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcHJvcGVydHlPZihvYmopIHtcbiAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gbm9vcDtcbiAgcmV0dXJuIGZ1bmN0aW9uKHBhdGgpIHtcbiAgICByZXR1cm4gZ2V0KG9iaiwgcGF0aCk7XG4gIH07XG59XG4iLCJpbXBvcnQgb3B0aW1pemVDYiBmcm9tICcuL19vcHRpbWl6ZUNiLmpzJztcblxuLy8gUnVuIGEgZnVuY3Rpb24gKipuKiogdGltZXMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0aW1lcyhuLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICB2YXIgYWNjdW0gPSBBcnJheShNYXRoLm1heCgwLCBuKSk7XG4gIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCwgMSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSBhY2N1bVtpXSA9IGl0ZXJhdGVlKGkpO1xuICByZXR1cm4gYWNjdW07XG59XG4iLCIvLyBSZXR1cm4gYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIGBtaW5gIGFuZCBgbWF4YCAoaW5jbHVzaXZlKS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJhbmRvbShtaW4sIG1heCkge1xuICBpZiAobWF4ID09IG51bGwpIHtcbiAgICBtYXggPSBtaW47XG4gICAgbWluID0gMDtcbiAgfVxuICByZXR1cm4gbWluICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpKTtcbn1cbiIsIi8vIEEgKHBvc3NpYmx5IGZhc3Rlcikgd2F5IHRvIGdldCB0aGUgY3VycmVudCB0aW1lc3RhbXAgYXMgYW4gaW50ZWdlci5cbmV4cG9ydCBkZWZhdWx0IERhdGUubm93IHx8IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG59O1xuIiwiaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLy8gSW50ZXJuYWwgaGVscGVyIHRvIGdlbmVyYXRlIGZ1bmN0aW9ucyBmb3IgZXNjYXBpbmcgYW5kIHVuZXNjYXBpbmcgc3RyaW5nc1xuLy8gdG8vZnJvbSBIVE1MIGludGVycG9sYXRpb24uXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVFc2NhcGVyKG1hcCkge1xuICB2YXIgZXNjYXBlciA9IGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIG1hcFttYXRjaF07XG4gIH07XG4gIC8vIFJlZ2V4ZXMgZm9yIGlkZW50aWZ5aW5nIGEga2V5IHRoYXQgbmVlZHMgdG8gYmUgZXNjYXBlZC5cbiAgdmFyIHNvdXJjZSA9ICcoPzonICsga2V5cyhtYXApLmpvaW4oJ3wnKSArICcpJztcbiAgdmFyIHRlc3RSZWdleHAgPSBSZWdFeHAoc291cmNlKTtcbiAgdmFyIHJlcGxhY2VSZWdleHAgPSBSZWdFeHAoc291cmNlLCAnZycpO1xuICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgc3RyaW5nID0gc3RyaW5nID09IG51bGwgPyAnJyA6ICcnICsgc3RyaW5nO1xuICAgIHJldHVybiB0ZXN0UmVnZXhwLnRlc3Qoc3RyaW5nKSA/IHN0cmluZy5yZXBsYWNlKHJlcGxhY2VSZWdleHAsIGVzY2FwZXIpIDogc3RyaW5nO1xuICB9O1xufVxuIiwiLy8gSW50ZXJuYWwgbGlzdCBvZiBIVE1MIGVudGl0aWVzIGZvciBlc2NhcGluZy5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgJyYnOiAnJmFtcDsnLFxuICAnPCc6ICcmbHQ7JyxcbiAgJz4nOiAnJmd0OycsXG4gICdcIic6ICcmcXVvdDsnLFxuICBcIidcIjogJyYjeDI3OycsXG4gICdgJzogJyYjeDYwOydcbn07XG4iLCJpbXBvcnQgY3JlYXRlRXNjYXBlciBmcm9tICcuL19jcmVhdGVFc2NhcGVyLmpzJztcbmltcG9ydCBlc2NhcGVNYXAgZnJvbSAnLi9fZXNjYXBlTWFwLmpzJztcblxuLy8gRnVuY3Rpb24gZm9yIGVzY2FwaW5nIHN0cmluZ3MgdG8gSFRNTCBpbnRlcnBvbGF0aW9uLlxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlRXNjYXBlcihlc2NhcGVNYXApO1xuIiwiaW1wb3J0IGNyZWF0ZUVzY2FwZXIgZnJvbSAnLi9fY3JlYXRlRXNjYXBlci5qcyc7XG5pbXBvcnQgdW5lc2NhcGVNYXAgZnJvbSAnLi9fdW5lc2NhcGVNYXAuanMnO1xuXG4vLyBGdW5jdGlvbiBmb3IgdW5lc2NhcGluZyBzdHJpbmdzIGZyb20gSFRNTCBpbnRlcnBvbGF0aW9uLlxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlRXNjYXBlcih1bmVzY2FwZU1hcCk7XG4iLCJpbXBvcnQgaW52ZXJ0IGZyb20gJy4vaW52ZXJ0LmpzJztcbmltcG9ydCBlc2NhcGVNYXAgZnJvbSAnLi9fZXNjYXBlTWFwLmpzJztcblxuLy8gSW50ZXJuYWwgbGlzdCBvZiBIVE1MIGVudGl0aWVzIGZvciB1bmVzY2FwaW5nLlxuZXhwb3J0IGRlZmF1bHQgaW52ZXJ0KGVzY2FwZU1hcCk7XG4iLCJpbXBvcnQgXyBmcm9tICcuL3VuZGVyc2NvcmUuanMnO1xuXG4vLyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxlIHRlbXBsYXRlIGRlbGltaXRlcnMuIENoYW5nZSB0aGVcbi8vIGZvbGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy5cbmV4cG9ydCBkZWZhdWx0IF8udGVtcGxhdGVTZXR0aW5ncyA9IHtcbiAgZXZhbHVhdGU6IC88JShbXFxzXFxTXSs/KSU+L2csXG4gIGludGVycG9sYXRlOiAvPCU9KFtcXHNcXFNdKz8pJT4vZyxcbiAgZXNjYXBlOiAvPCUtKFtcXHNcXFNdKz8pJT4vZ1xufTtcbiIsImltcG9ydCBkZWZhdWx0cyBmcm9tICcuL2RlZmF1bHRzLmpzJztcbmltcG9ydCBfIGZyb20gJy4vdW5kZXJzY29yZS5qcyc7XG5pbXBvcnQgJy4vdGVtcGxhdGVTZXR0aW5ncy5qcyc7XG5cbi8vIFdoZW4gY3VzdG9taXppbmcgYF8udGVtcGxhdGVTZXR0aW5nc2AsIGlmIHlvdSBkb24ndCB3YW50IHRvIGRlZmluZSBhblxuLy8gaW50ZXJwb2xhdGlvbiwgZXZhbHVhdGlvbiBvciBlc2NhcGluZyByZWdleCwgd2UgbmVlZCBvbmUgdGhhdCBpc1xuLy8gZ3VhcmFudGVlZCBub3QgdG8gbWF0Y2guXG52YXIgbm9NYXRjaCA9IC8oLileLztcblxuLy8gQ2VydGFpbiBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUgZXNjYXBlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIHB1dCBpbnRvIGFcbi8vIHN0cmluZyBsaXRlcmFsLlxudmFyIGVzY2FwZXMgPSB7XG4gIFwiJ1wiOiBcIidcIixcbiAgJ1xcXFwnOiAnXFxcXCcsXG4gICdcXHInOiAncicsXG4gICdcXG4nOiAnbicsXG4gICdcXHUyMDI4JzogJ3UyMDI4JyxcbiAgJ1xcdTIwMjknOiAndTIwMjknXG59O1xuXG52YXIgZXNjYXBlUmVnRXhwID0gL1xcXFx8J3xcXHJ8XFxufFxcdTIwMjh8XFx1MjAyOS9nO1xuXG5mdW5jdGlvbiBlc2NhcGVDaGFyKG1hdGNoKSB7XG4gIHJldHVybiAnXFxcXCcgKyBlc2NhcGVzW21hdGNoXTtcbn1cblxuLy8gSW4gb3JkZXIgdG8gcHJldmVudCB0aGlyZC1wYXJ0eSBjb2RlIGluamVjdGlvbiB0aHJvdWdoXG4vLyBgXy50ZW1wbGF0ZVNldHRpbmdzLnZhcmlhYmxlYCwgd2UgdGVzdCBpdCBhZ2FpbnN0IHRoZSBmb2xsb3dpbmcgcmVndWxhclxuLy8gZXhwcmVzc2lvbi4gSXQgaXMgaW50ZW50aW9uYWxseSBhIGJpdCBtb3JlIGxpYmVyYWwgdGhhbiBqdXN0IG1hdGNoaW5nIHZhbGlkXG4vLyBpZGVudGlmaWVycywgYnV0IHN0aWxsIHByZXZlbnRzIHBvc3NpYmxlIGxvb3Bob2xlcyB0aHJvdWdoIGRlZmF1bHRzIG9yXG4vLyBkZXN0cnVjdHVyaW5nIGFzc2lnbm1lbnQuXG52YXIgYmFyZUlkZW50aWZpZXIgPSAvXlxccyooXFx3fFxcJCkrXFxzKiQvO1xuXG4vLyBKYXZhU2NyaXB0IG1pY3JvLXRlbXBsYXRpbmcsIHNpbWlsYXIgdG8gSm9obiBSZXNpZydzIGltcGxlbWVudGF0aW9uLlxuLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5nIGhhbmRsZXMgYXJiaXRyYXJ5IGRlbGltaXRlcnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLFxuLy8gYW5kIGNvcnJlY3RseSBlc2NhcGVzIHF1b3RlcyB3aXRoaW4gaW50ZXJwb2xhdGVkIGNvZGUuXG4vLyBOQjogYG9sZFNldHRpbmdzYCBvbmx5IGV4aXN0cyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0ZW1wbGF0ZSh0ZXh0LCBzZXR0aW5ncywgb2xkU2V0dGluZ3MpIHtcbiAgaWYgKCFzZXR0aW5ncyAmJiBvbGRTZXR0aW5ncykgc2V0dGluZ3MgPSBvbGRTZXR0aW5ncztcbiAgc2V0dGluZ3MgPSBkZWZhdWx0cyh7fSwgc2V0dGluZ3MsIF8udGVtcGxhdGVTZXR0aW5ncyk7XG5cbiAgLy8gQ29tYmluZSBkZWxpbWl0ZXJzIGludG8gb25lIHJlZ3VsYXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24uXG4gIHZhciBtYXRjaGVyID0gUmVnRXhwKFtcbiAgICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gpLnNvdXJjZSxcbiAgICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01hdGNoKS5zb3VyY2VcbiAgXS5qb2luKCd8JykgKyAnfCQnLCAnZycpO1xuXG4gIC8vIENvbXBpbGUgdGhlIHRlbXBsYXRlIHNvdXJjZSwgZXNjYXBpbmcgc3RyaW5nIGxpdGVyYWxzIGFwcHJvcHJpYXRlbHkuXG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBzb3VyY2UgPSBcIl9fcCs9J1wiO1xuICB0ZXh0LnJlcGxhY2UobWF0Y2hlciwgZnVuY3Rpb24obWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHtcbiAgICBzb3VyY2UgKz0gdGV4dC5zbGljZShpbmRleCwgb2Zmc2V0KS5yZXBsYWNlKGVzY2FwZVJlZ0V4cCwgZXNjYXBlQ2hhcik7XG4gICAgaW5kZXggPSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7XG5cbiAgICBpZiAoZXNjYXBlKSB7XG4gICAgICBzb3VyY2UgKz0gXCInK1xcbigoX190PShcIiArIGVzY2FwZSArIFwiKSk9PW51bGw/Jyc6Xy5lc2NhcGUoX190KSkrXFxuJ1wiO1xuICAgIH0gZWxzZSBpZiAoaW50ZXJwb2xhdGUpIHtcbiAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgaW50ZXJwb2xhdGUgKyBcIikpPT1udWxsPycnOl9fdCkrXFxuJ1wiO1xuICAgIH0gZWxzZSBpZiAoZXZhbHVhdGUpIHtcbiAgICAgIHNvdXJjZSArPSBcIic7XFxuXCIgKyBldmFsdWF0ZSArIFwiXFxuX19wKz0nXCI7XG4gICAgfVxuXG4gICAgLy8gQWRvYmUgVk1zIG5lZWQgdGhlIG1hdGNoIHJldHVybmVkIHRvIHByb2R1Y2UgdGhlIGNvcnJlY3Qgb2Zmc2V0LlxuICAgIHJldHVybiBtYXRjaDtcbiAgfSk7XG4gIHNvdXJjZSArPSBcIic7XFxuXCI7XG5cbiAgdmFyIGFyZ3VtZW50ID0gc2V0dGluZ3MudmFyaWFibGU7XG4gIGlmIChhcmd1bWVudCkge1xuICAgIC8vIEluc3VyZSBhZ2FpbnN0IHRoaXJkLXBhcnR5IGNvZGUgaW5qZWN0aW9uLiAoQ1ZFLTIwMjEtMjMzNTgpXG4gICAgaWYgKCFiYXJlSWRlbnRpZmllci50ZXN0KGFyZ3VtZW50KSkgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ3ZhcmlhYmxlIGlzIG5vdCBhIGJhcmUgaWRlbnRpZmllcjogJyArIGFyZ3VtZW50XG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBhIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVzIGluIGxvY2FsIHNjb3BlLlxuICAgIHNvdXJjZSA9ICd3aXRoKG9ianx8e30pe1xcbicgKyBzb3VyY2UgKyAnfVxcbic7XG4gICAgYXJndW1lbnQgPSAnb2JqJztcbiAgfVxuXG4gIHNvdXJjZSA9IFwidmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLFwiICtcbiAgICBcInByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1bWVudHMsJycpO307XFxuXCIgK1xuICAgIHNvdXJjZSArICdyZXR1cm4gX19wO1xcbic7XG5cbiAgdmFyIHJlbmRlcjtcbiAgdHJ5IHtcbiAgICByZW5kZXIgPSBuZXcgRnVuY3Rpb24oYXJndW1lbnQsICdfJywgc291cmNlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGUuc291cmNlID0gc291cmNlO1xuICAgIHRocm93IGU7XG4gIH1cblxuICB2YXIgdGVtcGxhdGUgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgcmV0dXJuIHJlbmRlci5jYWxsKHRoaXMsIGRhdGEsIF8pO1xuICB9O1xuXG4gIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIHNvdXJjZSBhcyBhIGNvbnZlbmllbmNlIGZvciBwcmVjb21waWxhdGlvbi5cbiAgdGVtcGxhdGUuc291cmNlID0gJ2Z1bmN0aW9uKCcgKyBhcmd1bWVudCArICcpe1xcbicgKyBzb3VyY2UgKyAnfSc7XG5cbiAgcmV0dXJuIHRlbXBsYXRlO1xufVxuIiwiaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCB0b1BhdGggZnJvbSAnLi9fdG9QYXRoLmpzJztcblxuLy8gVHJhdmVyc2VzIHRoZSBjaGlsZHJlbiBvZiBgb2JqYCBhbG9uZyBgcGF0aGAuIElmIGEgY2hpbGQgaXMgYSBmdW5jdGlvbiwgaXRcbi8vIGlzIGludm9rZWQgd2l0aCBpdHMgcGFyZW50IGFzIGNvbnRleHQuIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBmaW5hbFxuLy8gY2hpbGQsIG9yIGBmYWxsYmFja2AgaWYgYW55IGNoaWxkIGlzIHVuZGVmaW5lZC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlc3VsdChvYmosIHBhdGgsIGZhbGxiYWNrKSB7XG4gIHBhdGggPSB0b1BhdGgocGF0aCk7XG4gIHZhciBsZW5ndGggPSBwYXRoLmxlbmd0aDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihmYWxsYmFjaykgPyBmYWxsYmFjay5jYWxsKG9iaikgOiBmYWxsYmFjaztcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHByb3AgPSBvYmogPT0gbnVsbCA/IHZvaWQgMCA6IG9ialtwYXRoW2ldXTtcbiAgICBpZiAocHJvcCA9PT0gdm9pZCAwKSB7XG4gICAgICBwcm9wID0gZmFsbGJhY2s7XG4gICAgICBpID0gbGVuZ3RoOyAvLyBFbnN1cmUgd2UgZG9uJ3QgY29udGludWUgaXRlcmF0aW5nLlxuICAgIH1cbiAgICBvYmogPSBpc0Z1bmN0aW9uKHByb3ApID8gcHJvcC5jYWxsKG9iaikgOiBwcm9wO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG4iLCIvLyBHZW5lcmF0ZSBhIHVuaXF1ZSBpbnRlZ2VyIGlkICh1bmlxdWUgd2l0aGluIHRoZSBlbnRpcmUgY2xpZW50IHNlc3Npb24pLlxuLy8gVXNlZnVsIGZvciB0ZW1wb3JhcnkgRE9NIGlkcy5cbnZhciBpZENvdW50ZXIgPSAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdW5pcXVlSWQocHJlZml4KSB7XG4gIHZhciBpZCA9ICsraWRDb3VudGVyICsgJyc7XG4gIHJldHVybiBwcmVmaXggPyBwcmVmaXggKyBpZCA6IGlkO1xufVxuIiwiaW1wb3J0IF8gZnJvbSAnLi91bmRlcnNjb3JlLmpzJztcblxuLy8gU3RhcnQgY2hhaW5pbmcgYSB3cmFwcGVkIFVuZGVyc2NvcmUgb2JqZWN0LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2hhaW4ob2JqKSB7XG4gIHZhciBpbnN0YW5jZSA9IF8ob2JqKTtcbiAgaW5zdGFuY2UuX2NoYWluID0gdHJ1ZTtcbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuIiwiaW1wb3J0IGJhc2VDcmVhdGUgZnJvbSAnLi9fYmFzZUNyZWF0ZS5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5cbi8vIEludGVybmFsIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYHNvdXJjZUZ1bmNgIGJvdW5kIHRvIGBjb250ZXh0YCB3aXRoIG9wdGlvbmFsXG4vLyBgYXJnc2AuIERldGVybWluZXMgd2hldGhlciB0byBleGVjdXRlIGEgZnVuY3Rpb24gYXMgYSBjb25zdHJ1Y3RvciBvciBhcyBhXG4vLyBub3JtYWwgZnVuY3Rpb24uXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleGVjdXRlQm91bmQoc291cmNlRnVuYywgYm91bmRGdW5jLCBjb250ZXh0LCBjYWxsaW5nQ29udGV4dCwgYXJncykge1xuICBpZiAoIShjYWxsaW5nQ29udGV4dCBpbnN0YW5jZW9mIGJvdW5kRnVuYykpIHJldHVybiBzb3VyY2VGdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICB2YXIgc2VsZiA9IGJhc2VDcmVhdGUoc291cmNlRnVuYy5wcm90b3R5cGUpO1xuICB2YXIgcmVzdWx0ID0gc291cmNlRnVuYy5hcHBseShzZWxmLCBhcmdzKTtcbiAgaWYgKGlzT2JqZWN0KHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gIHJldHVybiBzZWxmO1xufVxuIiwiaW1wb3J0IHJlc3RBcmd1bWVudHMgZnJvbSAnLi9yZXN0QXJndW1lbnRzLmpzJztcbmltcG9ydCBleGVjdXRlQm91bmQgZnJvbSAnLi9fZXhlY3V0ZUJvdW5kLmpzJztcbmltcG9ydCBfIGZyb20gJy4vdW5kZXJzY29yZS5qcyc7XG5cbi8vIFBhcnRpYWxseSBhcHBseSBhIGZ1bmN0aW9uIGJ5IGNyZWF0aW5nIGEgdmVyc2lvbiB0aGF0IGhhcyBoYWQgc29tZSBvZiBpdHNcbi8vIGFyZ3VtZW50cyBwcmUtZmlsbGVkLCB3aXRob3V0IGNoYW5naW5nIGl0cyBkeW5hbWljIGB0aGlzYCBjb250ZXh0LiBgX2AgYWN0c1xuLy8gYXMgYSBwbGFjZWhvbGRlciBieSBkZWZhdWx0LCBhbGxvd2luZyBhbnkgY29tYmluYXRpb24gb2YgYXJndW1lbnRzIHRvIGJlXG4vLyBwcmUtZmlsbGVkLiBTZXQgYF8ucGFydGlhbC5wbGFjZWhvbGRlcmAgZm9yIGEgY3VzdG9tIHBsYWNlaG9sZGVyIGFyZ3VtZW50LlxudmFyIHBhcnRpYWwgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGZ1bmMsIGJvdW5kQXJncykge1xuICB2YXIgcGxhY2Vob2xkZXIgPSBwYXJ0aWFsLnBsYWNlaG9sZGVyO1xuICB2YXIgYm91bmQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcG9zaXRpb24gPSAwLCBsZW5ndGggPSBib3VuZEFyZ3MubGVuZ3RoO1xuICAgIHZhciBhcmdzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gYm91bmRBcmdzW2ldID09PSBwbGFjZWhvbGRlciA/IGFyZ3VtZW50c1twb3NpdGlvbisrXSA6IGJvdW5kQXJnc1tpXTtcbiAgICB9XG4gICAgd2hpbGUgKHBvc2l0aW9uIDwgYXJndW1lbnRzLmxlbmd0aCkgYXJncy5wdXNoKGFyZ3VtZW50c1twb3NpdGlvbisrXSk7XG4gICAgcmV0dXJuIGV4ZWN1dGVCb3VuZChmdW5jLCBib3VuZCwgdGhpcywgdGhpcywgYXJncyk7XG4gIH07XG4gIHJldHVybiBib3VuZDtcbn0pO1xuXG5wYXJ0aWFsLnBsYWNlaG9sZGVyID0gXztcbmV4cG9ydCBkZWZhdWx0IHBhcnRpYWw7XG4iLCJpbXBvcnQgcmVzdEFyZ3VtZW50cyBmcm9tICcuL3Jlc3RBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBleGVjdXRlQm91bmQgZnJvbSAnLi9fZXhlY3V0ZUJvdW5kLmpzJztcblxuLy8gQ3JlYXRlIGEgZnVuY3Rpb24gYm91bmQgdG8gYSBnaXZlbiBvYmplY3QgKGFzc2lnbmluZyBgdGhpc2AsIGFuZCBhcmd1bWVudHMsXG4vLyBvcHRpb25hbGx5KS5cbmV4cG9ydCBkZWZhdWx0IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oZnVuYywgY29udGV4dCwgYXJncykge1xuICBpZiAoIWlzRnVuY3Rpb24oZnVuYykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JpbmQgbXVzdCBiZSBjYWxsZWQgb24gYSBmdW5jdGlvbicpO1xuICB2YXIgYm91bmQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGNhbGxBcmdzKSB7XG4gICAgcmV0dXJuIGV4ZWN1dGVCb3VuZChmdW5jLCBib3VuZCwgY29udGV4dCwgdGhpcywgYXJncy5jb25jYXQoY2FsbEFyZ3MpKTtcbiAgfSk7XG4gIHJldHVybiBib3VuZDtcbn0pO1xuIiwiaW1wb3J0IGNyZWF0ZVNpemVQcm9wZXJ0eUNoZWNrIGZyb20gJy4vX2NyZWF0ZVNpemVQcm9wZXJ0eUNoZWNrLmpzJztcbmltcG9ydCBnZXRMZW5ndGggZnJvbSAnLi9fZ2V0TGVuZ3RoLmpzJztcblxuLy8gSW50ZXJuYWwgaGVscGVyIGZvciBjb2xsZWN0aW9uIG1ldGhvZHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBjb2xsZWN0aW9uXG4vLyBzaG91bGQgYmUgaXRlcmF0ZWQgYXMgYW4gYXJyYXkgb3IgYXMgYW4gb2JqZWN0LlxuLy8gUmVsYXRlZDogaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLXRvbGVuZ3RoXG4vLyBBdm9pZHMgYSB2ZXJ5IG5hc3R5IGlPUyA4IEpJVCBidWcgb24gQVJNLTY0LiAjMjA5NFxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2soZ2V0TGVuZ3RoKTtcbiIsImltcG9ydCBnZXRMZW5ndGggZnJvbSAnLi9fZ2V0TGVuZ3RoLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL19pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzQXJndW1lbnRzIGZyb20gJy4vaXNBcmd1bWVudHMuanMnO1xuXG4vLyBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBhIHJlY3Vyc2l2ZSBgZmxhdHRlbmAgZnVuY3Rpb24uXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmbGF0dGVuKGlucHV0LCBkZXB0aCwgc3RyaWN0LCBvdXRwdXQpIHtcbiAgb3V0cHV0ID0gb3V0cHV0IHx8IFtdO1xuICBpZiAoIWRlcHRoICYmIGRlcHRoICE9PSAwKSB7XG4gICAgZGVwdGggPSBJbmZpbml0eTtcbiAgfSBlbHNlIGlmIChkZXB0aCA8PSAwKSB7XG4gICAgcmV0dXJuIG91dHB1dC5jb25jYXQoaW5wdXQpO1xuICB9XG4gIHZhciBpZHggPSBvdXRwdXQubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGlucHV0KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHZhbHVlID0gaW5wdXRbaV07XG4gICAgaWYgKGlzQXJyYXlMaWtlKHZhbHVlKSAmJiAoaXNBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpKSkge1xuICAgICAgLy8gRmxhdHRlbiBjdXJyZW50IGxldmVsIG9mIGFycmF5IG9yIGFyZ3VtZW50cyBvYmplY3QuXG4gICAgICBpZiAoZGVwdGggPiAxKSB7XG4gICAgICAgIGZsYXR0ZW4odmFsdWUsIGRlcHRoIC0gMSwgc3RyaWN0LCBvdXRwdXQpO1xuICAgICAgICBpZHggPSBvdXRwdXQubGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGogPSAwLCBsZW4gPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChqIDwgbGVuKSBvdXRwdXRbaWR4KytdID0gdmFsdWVbaisrXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFzdHJpY3QpIHtcbiAgICAgIG91dHB1dFtpZHgrK10gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dHB1dDtcbn1cbiIsImltcG9ydCByZXN0QXJndW1lbnRzIGZyb20gJy4vcmVzdEFyZ3VtZW50cy5qcyc7XG5pbXBvcnQgZmxhdHRlbiBmcm9tICcuL19mbGF0dGVuLmpzJztcbmltcG9ydCBiaW5kIGZyb20gJy4vYmluZC5qcyc7XG5cbi8vIEJpbmQgYSBudW1iZXIgb2YgYW4gb2JqZWN0J3MgbWV0aG9kcyB0byB0aGF0IG9iamVjdC4gUmVtYWluaW5nIGFyZ3VtZW50c1xuLy8gYXJlIHRoZSBtZXRob2QgbmFtZXMgdG8gYmUgYm91bmQuIFVzZWZ1bCBmb3IgZW5zdXJpbmcgdGhhdCBhbGwgY2FsbGJhY2tzXG4vLyBkZWZpbmVkIG9uIGFuIG9iamVjdCBiZWxvbmcgdG8gaXQuXG5leHBvcnQgZGVmYXVsdCByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKG9iaiwga2V5cykge1xuICBrZXlzID0gZmxhdHRlbihrZXlzLCBmYWxzZSwgZmFsc2UpO1xuICB2YXIgaW5kZXggPSBrZXlzLmxlbmd0aDtcbiAgaWYgKGluZGV4IDwgMSkgdGhyb3cgbmV3IEVycm9yKCdiaW5kQWxsIG11c3QgYmUgcGFzc2VkIGZ1bmN0aW9uIG5hbWVzJyk7XG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaW5kZXhdO1xuICAgIG9ialtrZXldID0gYmluZChvYmpba2V5XSwgb2JqKTtcbiAgfVxuICByZXR1cm4gb2JqO1xufSk7XG4iLCJpbXBvcnQgaGFzIGZyb20gJy4vX2hhcy5qcyc7XG5cbi8vIE1lbW9pemUgYW4gZXhwZW5zaXZlIGZ1bmN0aW9uIGJ5IHN0b3JpbmcgaXRzIHJlc3VsdHMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZW1vaXplKGZ1bmMsIGhhc2hlcikge1xuICB2YXIgbWVtb2l6ZSA9IGZ1bmN0aW9uKGtleSkge1xuICAgIHZhciBjYWNoZSA9IG1lbW9pemUuY2FjaGU7XG4gICAgdmFyIGFkZHJlc3MgPSAnJyArIChoYXNoZXIgPyBoYXNoZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGtleSk7XG4gICAgaWYgKCFoYXMoY2FjaGUsIGFkZHJlc3MpKSBjYWNoZVthZGRyZXNzXSA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gY2FjaGVbYWRkcmVzc107XG4gIH07XG4gIG1lbW9pemUuY2FjaGUgPSB7fTtcbiAgcmV0dXJuIG1lbW9pemU7XG59XG4iLCJpbXBvcnQgcmVzdEFyZ3VtZW50cyBmcm9tICcuL3Jlc3RBcmd1bWVudHMuanMnO1xuXG4vLyBEZWxheXMgYSBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIGFuZCB0aGVuIGNhbGxzXG4vLyBpdCB3aXRoIHRoZSBhcmd1bWVudHMgc3VwcGxpZWQuXG5leHBvcnQgZGVmYXVsdCByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGFyZ3MpIHtcbiAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkobnVsbCwgYXJncyk7XG4gIH0sIHdhaXQpO1xufSk7XG4iLCJpbXBvcnQgcGFydGlhbCBmcm9tICcuL3BhcnRpYWwuanMnO1xuaW1wb3J0IGRlbGF5IGZyb20gJy4vZGVsYXkuanMnO1xuaW1wb3J0IF8gZnJvbSAnLi91bmRlcnNjb3JlLmpzJztcblxuLy8gRGVmZXJzIGEgZnVuY3Rpb24sIHNjaGVkdWxpbmcgaXQgdG8gcnVuIGFmdGVyIHRoZSBjdXJyZW50IGNhbGwgc3RhY2sgaGFzXG4vLyBjbGVhcmVkLlxuZXhwb3J0IGRlZmF1bHQgcGFydGlhbChkZWxheSwgXywgMSk7XG4iLCJpbXBvcnQgbm93IGZyb20gJy4vbm93LmpzJztcblxuLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCB3aGVuIGludm9rZWQsIHdpbGwgb25seSBiZSB0cmlnZ2VyZWQgYXQgbW9zdCBvbmNlXG4vLyBkdXJpbmcgYSBnaXZlbiB3aW5kb3cgb2YgdGltZS4gTm9ybWFsbHksIHRoZSB0aHJvdHRsZWQgZnVuY3Rpb24gd2lsbCBydW5cbi8vIGFzIG11Y2ggYXMgaXQgY2FuLCB3aXRob3V0IGV2ZXIgZ29pbmcgbW9yZSB0aGFuIG9uY2UgcGVyIGB3YWl0YCBkdXJhdGlvbjtcbi8vIGJ1dCBpZiB5b3UnZCBsaWtlIHRvIGRpc2FibGUgdGhlIGV4ZWN1dGlvbiBvbiB0aGUgbGVhZGluZyBlZGdlLCBwYXNzXG4vLyBge2xlYWRpbmc6IGZhbHNlfWAuIFRvIGRpc2FibGUgZXhlY3V0aW9uIG9uIHRoZSB0cmFpbGluZyBlZGdlLCBkaXR0by5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRocm90dGxlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgdmFyIHRpbWVvdXQsIGNvbnRleHQsIGFyZ3MsIHJlc3VsdDtcbiAgdmFyIHByZXZpb3VzID0gMDtcbiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG5cbiAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgcHJldmlvdXMgPSBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlID8gMCA6IG5vdygpO1xuICAgIHRpbWVvdXQgPSBudWxsO1xuICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gIH07XG5cbiAgdmFyIHRocm90dGxlZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBfbm93ID0gbm93KCk7XG4gICAgaWYgKCFwcmV2aW91cyAmJiBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlKSBwcmV2aW91cyA9IF9ub3c7XG4gICAgdmFyIHJlbWFpbmluZyA9IHdhaXQgLSAoX25vdyAtIHByZXZpb3VzKTtcbiAgICBjb250ZXh0ID0gdGhpcztcbiAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgIGlmIChyZW1haW5pbmcgPD0gMCB8fCByZW1haW5pbmcgPiB3YWl0KSB7XG4gICAgICBpZiAodGltZW91dCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgfVxuICAgICAgcHJldmlvdXMgPSBfbm93O1xuICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgIH0gZWxzZSBpZiAoIXRpbWVvdXQgJiYgb3B0aW9ucy50cmFpbGluZyAhPT0gZmFsc2UpIHtcbiAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCByZW1haW5pbmcpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHRocm90dGxlZC5jYW5jZWwgPSBmdW5jdGlvbigpIHtcbiAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgcHJldmlvdXMgPSAwO1xuICAgIHRpbWVvdXQgPSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gIH07XG5cbiAgcmV0dXJuIHRocm90dGxlZDtcbn1cbiIsImltcG9ydCByZXN0QXJndW1lbnRzIGZyb20gJy4vcmVzdEFyZ3VtZW50cy5qcyc7XG5pbXBvcnQgbm93IGZyb20gJy4vbm93LmpzJztcblxuLy8gV2hlbiBhIHNlcXVlbmNlIG9mIGNhbGxzIG9mIHRoZSByZXR1cm5lZCBmdW5jdGlvbiBlbmRzLCB0aGUgYXJndW1lbnRcbi8vIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZC4gVGhlIGVuZCBvZiBhIHNlcXVlbmNlIGlzIGRlZmluZWQgYnkgdGhlIGB3YWl0YFxuLy8gcGFyYW1ldGVyLiBJZiBgaW1tZWRpYXRlYCBpcyBwYXNzZWQsIHRoZSBhcmd1bWVudCBmdW5jdGlvbiB3aWxsIGJlXG4vLyB0cmlnZ2VyZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VxdWVuY2UgaW5zdGVhZCBvZiBhdCB0aGUgZW5kLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7XG4gIHZhciB0aW1lb3V0LCBwcmV2aW91cywgYXJncywgcmVzdWx0LCBjb250ZXh0O1xuXG4gIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBwYXNzZWQgPSBub3coKSAtIHByZXZpb3VzO1xuICAgIGlmICh3YWl0ID4gcGFzc2VkKSB7XG4gICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCAtIHBhc3NlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgaWYgKCFpbW1lZGlhdGUpIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAvLyBUaGlzIGNoZWNrIGlzIG5lZWRlZCBiZWNhdXNlIGBmdW5jYCBjYW4gcmVjdXJzaXZlbHkgaW52b2tlIGBkZWJvdW5jZWRgLlxuICAgICAgaWYgKCF0aW1lb3V0KSBhcmdzID0gY29udGV4dCA9IG51bGw7XG4gICAgfVxuICB9O1xuXG4gIHZhciBkZWJvdW5jZWQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKF9hcmdzKSB7XG4gICAgY29udGV4dCA9IHRoaXM7XG4gICAgYXJncyA9IF9hcmdzO1xuICAgIHByZXZpb3VzID0gbm93KCk7XG4gICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7XG4gICAgICBpZiAoaW1tZWRpYXRlKSByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcblxuICBkZWJvdW5jZWQuY2FuY2VsID0gZnVuY3Rpb24oKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIHRpbWVvdXQgPSBhcmdzID0gY29udGV4dCA9IG51bGw7XG4gIH07XG5cbiAgcmV0dXJuIGRlYm91bmNlZDtcbn1cbiIsImltcG9ydCBwYXJ0aWFsIGZyb20gJy4vcGFydGlhbC5qcyc7XG5cbi8vIFJldHVybnMgdGhlIGZpcnN0IGZ1bmN0aW9uIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgc2Vjb25kLFxuLy8gYWxsb3dpbmcgeW91IHRvIGFkanVzdCBhcmd1bWVudHMsIHJ1biBjb2RlIGJlZm9yZSBhbmQgYWZ0ZXIsIGFuZFxuLy8gY29uZGl0aW9uYWxseSBleGVjdXRlIHRoZSBvcmlnaW5hbCBmdW5jdGlvbi5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHdyYXAoZnVuYywgd3JhcHBlcikge1xuICByZXR1cm4gcGFydGlhbCh3cmFwcGVyLCBmdW5jKTtcbn1cbiIsIi8vIFJldHVybnMgYSBuZWdhdGVkIHZlcnNpb24gb2YgdGhlIHBhc3NlZC1pbiBwcmVkaWNhdGUuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBuZWdhdGUocHJlZGljYXRlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gIXByZWRpY2F0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufVxuIiwiLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgaXMgdGhlIGNvbXBvc2l0aW9uIG9mIGEgbGlzdCBvZiBmdW5jdGlvbnMsIGVhY2hcbi8vIGNvbnN1bWluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB0aGF0IGZvbGxvd3MuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wb3NlKCkge1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgdmFyIHN0YXJ0ID0gYXJncy5sZW5ndGggLSAxO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGkgPSBzdGFydDtcbiAgICB2YXIgcmVzdWx0ID0gYXJnc1tzdGFydF0uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB3aGlsZSAoaS0tKSByZXN1bHQgPSBhcmdzW2ldLmNhbGwodGhpcywgcmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuIiwiLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIG9uIGFuZCBhZnRlciB0aGUgTnRoIGNhbGwuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZnRlcih0aW1lcywgZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgaWYgKC0tdGltZXMgPCAxKSB7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfTtcbn1cbiIsIi8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCB1cCB0byAoYnV0IG5vdCBpbmNsdWRpbmcpIHRoZVxuLy8gTnRoIGNhbGwuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiZWZvcmUodGltZXMsIGZ1bmMpIHtcbiAgdmFyIG1lbW87XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBpZiAoLS10aW1lcyA+IDApIHtcbiAgICAgIG1lbW8gPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICAgIGlmICh0aW1lcyA8PSAxKSBmdW5jID0gbnVsbDtcbiAgICByZXR1cm4gbWVtbztcbiAgfTtcbn1cbiIsImltcG9ydCBwYXJ0aWFsIGZyb20gJy4vcGFydGlhbC5qcyc7XG5pbXBvcnQgYmVmb3JlIGZyb20gJy4vYmVmb3JlLmpzJztcblxuLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBhdCBtb3N0IG9uZSB0aW1lLCBubyBtYXR0ZXIgaG93XG4vLyBvZnRlbiB5b3UgY2FsbCBpdC4gVXNlZnVsIGZvciBsYXp5IGluaXRpYWxpemF0aW9uLlxuZXhwb3J0IGRlZmF1bHQgcGFydGlhbChiZWZvcmUsIDIpO1xuIiwiaW1wb3J0IGNiIGZyb20gJy4vX2NiLmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8vIFJldHVybnMgdGhlIGZpcnN0IGtleSBvbiBhbiBvYmplY3QgdGhhdCBwYXNzZXMgYSB0cnV0aCB0ZXN0LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZmluZEtleShvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICB2YXIgX2tleXMgPSBrZXlzKG9iaiksIGtleTtcbiAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IF9rZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0gX2tleXNbaV07XG4gICAgaWYgKHByZWRpY2F0ZShvYmpba2V5XSwga2V5LCBvYmopKSByZXR1cm4ga2V5O1xuICB9XG59XG4iLCJpbXBvcnQgY2IgZnJvbSAnLi9fY2IuanMnO1xuaW1wb3J0IGdldExlbmd0aCBmcm9tICcuL19nZXRMZW5ndGguanMnO1xuXG4vLyBJbnRlcm5hbCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBgXy5maW5kSW5kZXhgIGFuZCBgXy5maW5kTGFzdEluZGV4YC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKGRpcikge1xuICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7XG4gICAgdmFyIGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5ndGggLSAxO1xuICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIpIHtcbiAgICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSByZXR1cm4gaW5kZXg7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfTtcbn1cbiIsImltcG9ydCBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlciBmcm9tICcuL19jcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlci5qcyc7XG5cbi8vIFJldHVybnMgdGhlIGZpcnN0IGluZGV4IG9uIGFuIGFycmF5LWxpa2UgdGhhdCBwYXNzZXMgYSB0cnV0aCB0ZXN0LlxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoMSk7XG4iLCJpbXBvcnQgY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIgZnJvbSAnLi9fY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIuanMnO1xuXG4vLyBSZXR1cm5zIHRoZSBsYXN0IGluZGV4IG9uIGFuIGFycmF5LWxpa2UgdGhhdCBwYXNzZXMgYSB0cnV0aCB0ZXN0LlxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoLTEpO1xuIiwiaW1wb3J0IGNiIGZyb20gJy4vX2NiLmpzJztcbmltcG9ydCBnZXRMZW5ndGggZnJvbSAnLi9fZ2V0TGVuZ3RoLmpzJztcblxuLy8gVXNlIGEgY29tcGFyYXRvciBmdW5jdGlvbiB0byBmaWd1cmUgb3V0IHRoZSBzbWFsbGVzdCBpbmRleCBhdCB3aGljaFxuLy8gYW4gb2JqZWN0IHNob3VsZCBiZSBpbnNlcnRlZCBzbyBhcyB0byBtYWludGFpbiBvcmRlci4gVXNlcyBiaW5hcnkgc2VhcmNoLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc29ydGVkSW5kZXgoYXJyYXksIG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCwgMSk7XG4gIHZhciB2YWx1ZSA9IGl0ZXJhdGVlKG9iaik7XG4gIHZhciBsb3cgPSAwLCBoaWdoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtcbiAgICB2YXIgbWlkID0gTWF0aC5mbG9vcigobG93ICsgaGlnaCkgLyAyKTtcbiAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbbWlkXSkgPCB2YWx1ZSkgbG93ID0gbWlkICsgMTsgZWxzZSBoaWdoID0gbWlkO1xuICB9XG4gIHJldHVybiBsb3c7XG59XG4iLCJpbXBvcnQgZ2V0TGVuZ3RoIGZyb20gJy4vX2dldExlbmd0aC5qcyc7XG5pbXBvcnQgeyBzbGljZSB9IGZyb20gJy4vX3NldHVwLmpzJztcbmltcG9ydCBpc05hTiBmcm9tICcuL2lzTmFOLmpzJztcblxuLy8gSW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdGhlIGBfLmluZGV4T2ZgIGFuZCBgXy5sYXN0SW5kZXhPZmAgZnVuY3Rpb25zLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlSW5kZXhGaW5kZXIoZGlyLCBwcmVkaWNhdGVGaW5kLCBzb3J0ZWRJbmRleCkge1xuICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIGl0ZW0sIGlkeCkge1xuICAgIHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICBpZiAodHlwZW9mIGlkeCA9PSAnbnVtYmVyJykge1xuICAgICAgaWYgKGRpciA+IDApIHtcbiAgICAgICAgaSA9IGlkeCA+PSAwID8gaWR4IDogTWF0aC5tYXgoaWR4ICsgbGVuZ3RoLCBpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxlbmd0aCA9IGlkeCA+PSAwID8gTWF0aC5taW4oaWR4ICsgMSwgbGVuZ3RoKSA6IGlkeCArIGxlbmd0aCArIDE7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzb3J0ZWRJbmRleCAmJiBpZHggJiYgbGVuZ3RoKSB7XG4gICAgICBpZHggPSBzb3J0ZWRJbmRleChhcnJheSwgaXRlbSk7XG4gICAgICByZXR1cm4gYXJyYXlbaWR4XSA9PT0gaXRlbSA/IGlkeCA6IC0xO1xuICAgIH1cbiAgICBpZiAoaXRlbSAhPT0gaXRlbSkge1xuICAgICAgaWR4ID0gcHJlZGljYXRlRmluZChzbGljZS5jYWxsKGFycmF5LCBpLCBsZW5ndGgpLCBpc05hTik7XG4gICAgICByZXR1cm4gaWR4ID49IDAgPyBpZHggKyBpIDogLTE7XG4gICAgfVxuICAgIGZvciAoaWR4ID0gZGlyID4gMCA/IGkgOiBsZW5ndGggLSAxOyBpZHggPj0gMCAmJiBpZHggPCBsZW5ndGg7IGlkeCArPSBkaXIpIHtcbiAgICAgIGlmIChhcnJheVtpZHhdID09PSBpdGVtKSByZXR1cm4gaWR4O1xuICAgIH1cbiAgICByZXR1cm4gLTE7XG4gIH07XG59XG4iLCJpbXBvcnQgc29ydGVkSW5kZXggZnJvbSAnLi9zb3J0ZWRJbmRleC5qcyc7XG5pbXBvcnQgZmluZEluZGV4IGZyb20gJy4vZmluZEluZGV4LmpzJztcbmltcG9ydCBjcmVhdGVJbmRleEZpbmRlciBmcm9tICcuL19jcmVhdGVJbmRleEZpbmRlci5qcyc7XG5cbi8vIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYW4gaXRlbSBpbiBhbiBhcnJheSxcbi8vIG9yIC0xIGlmIHRoZSBpdGVtIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgYXJyYXkuXG4vLyBJZiB0aGUgYXJyYXkgaXMgbGFyZ2UgYW5kIGFscmVhZHkgaW4gc29ydCBvcmRlciwgcGFzcyBgdHJ1ZWBcbi8vIGZvciAqKmlzU29ydGVkKiogdG8gdXNlIGJpbmFyeSBzZWFyY2guXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVJbmRleEZpbmRlcigxLCBmaW5kSW5kZXgsIHNvcnRlZEluZGV4KTtcbiIsImltcG9ydCBmaW5kTGFzdEluZGV4IGZyb20gJy4vZmluZExhc3RJbmRleC5qcyc7XG5pbXBvcnQgY3JlYXRlSW5kZXhGaW5kZXIgZnJvbSAnLi9fY3JlYXRlSW5kZXhGaW5kZXIuanMnO1xuXG4vLyBSZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgYW4gaXRlbSBpbiBhbiBhcnJheSxcbi8vIG9yIC0xIGlmIHRoZSBpdGVtIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgYXJyYXkuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVJbmRleEZpbmRlcigtMSwgZmluZExhc3RJbmRleCk7XG4iLCJpbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9faXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGZpbmRJbmRleCBmcm9tICcuL2ZpbmRJbmRleC5qcyc7XG5pbXBvcnQgZmluZEtleSBmcm9tICcuL2ZpbmRLZXkuanMnO1xuXG4vLyBSZXR1cm4gdGhlIGZpcnN0IHZhbHVlIHdoaWNoIHBhc3NlcyBhIHRydXRoIHRlc3QuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmaW5kKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gIHZhciBrZXlGaW5kZXIgPSBpc0FycmF5TGlrZShvYmopID8gZmluZEluZGV4IDogZmluZEtleTtcbiAgdmFyIGtleSA9IGtleUZpbmRlcihvYmosIHByZWRpY2F0ZSwgY29udGV4dCk7XG4gIGlmIChrZXkgIT09IHZvaWQgMCAmJiBrZXkgIT09IC0xKSByZXR1cm4gb2JqW2tleV07XG59XG4iLCJpbXBvcnQgZmluZCBmcm9tICcuL2ZpbmQuanMnO1xuaW1wb3J0IG1hdGNoZXIgZnJvbSAnLi9tYXRjaGVyLmpzJztcblxuLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgXy5maW5kYDogZ2V0dGluZyB0aGUgZmlyc3Rcbi8vIG9iamVjdCBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6dmFsdWVgIHBhaXJzLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZmluZFdoZXJlKG9iaiwgYXR0cnMpIHtcbiAgcmV0dXJuIGZpbmQob2JqLCBtYXRjaGVyKGF0dHJzKSk7XG59XG4iLCJpbXBvcnQgb3B0aW1pemVDYiBmcm9tICcuL19vcHRpbWl6ZUNiLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL19pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vLyBUaGUgY29ybmVyc3RvbmUgZm9yIGNvbGxlY3Rpb24gZnVuY3Rpb25zLCBhbiBgZWFjaGBcbi8vIGltcGxlbWVudGF0aW9uLCBha2EgYGZvckVhY2hgLlxuLy8gSGFuZGxlcyByYXcgb2JqZWN0cyBpbiBhZGRpdGlvbiB0byBhcnJheS1saWtlcy4gVHJlYXRzIGFsbFxuLy8gc3BhcnNlIGFycmF5LWxpa2VzIGFzIGlmIHRoZXkgd2VyZSBkZW5zZS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGVhY2gob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICB2YXIgaSwgbGVuZ3RoO1xuICBpZiAoaXNBcnJheUxpa2Uob2JqKSkge1xuICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaXRlcmF0ZWUob2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgX2tleXMgPSBrZXlzKG9iaik7XG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gX2tleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGl0ZXJhdGVlKG9ialtfa2V5c1tpXV0sIF9rZXlzW2ldLCBvYmopO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqO1xufVxuIiwiaW1wb3J0IGNiIGZyb20gJy4vX2NiLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL19pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vLyBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdGVlIHRvIGVhY2ggZWxlbWVudC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1hcChvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICB2YXIgX2tleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBrZXlzKG9iaiksXG4gICAgICBsZW5ndGggPSAoX2tleXMgfHwgb2JqKS5sZW5ndGgsXG4gICAgICByZXN1bHRzID0gQXJyYXkobGVuZ3RoKTtcbiAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgIHZhciBjdXJyZW50S2V5ID0gX2tleXMgPyBfa2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICByZXN1bHRzW2luZGV4XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0cztcbn1cbiIsImltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL19pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuaW1wb3J0IG9wdGltaXplQ2IgZnJvbSAnLi9fb3B0aW1pemVDYi5qcyc7XG5cbi8vIEludGVybmFsIGhlbHBlciB0byBjcmVhdGUgYSByZWR1Y2luZyBmdW5jdGlvbiwgaXRlcmF0aW5nIGxlZnQgb3IgcmlnaHQuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVSZWR1Y2UoZGlyKSB7XG4gIC8vIFdyYXAgY29kZSB0aGF0IHJlYXNzaWducyBhcmd1bWVudCB2YXJpYWJsZXMgaW4gYSBzZXBhcmF0ZSBmdW5jdGlvbiB0aGFuXG4gIC8vIHRoZSBvbmUgdGhhdCBhY2Nlc3NlcyBgYXJndW1lbnRzLmxlbmd0aGAgdG8gYXZvaWQgYSBwZXJmIGhpdC4gKCMxOTkxKVxuICB2YXIgcmVkdWNlciA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGluaXRpYWwpIHtcbiAgICB2YXIgX2tleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBrZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChfa2V5cyB8fCBvYmopLmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7XG4gICAgaWYgKCFpbml0aWFsKSB7XG4gICAgICBtZW1vID0gb2JqW19rZXlzID8gX2tleXNbaW5kZXhdIDogaW5kZXhdO1xuICAgICAgaW5kZXggKz0gZGlyO1xuICAgIH1cbiAgICBmb3IgKDsgaW5kZXggPj0gMCAmJiBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gZGlyKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IF9rZXlzID8gX2tleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICBtZW1vID0gaXRlcmF0ZWUobWVtbywgb2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgIH1cbiAgICByZXR1cm4gbWVtbztcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgbWVtbywgY29udGV4dCkge1xuICAgIHZhciBpbml0aWFsID0gYXJndW1lbnRzLmxlbmd0aCA+PSAzO1xuICAgIHJldHVybiByZWR1Y2VyKG9iaiwgb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCwgNCksIG1lbW8sIGluaXRpYWwpO1xuICB9O1xufVxuIiwiaW1wb3J0IGNyZWF0ZVJlZHVjZSBmcm9tICcuL19jcmVhdGVSZWR1Y2UuanMnO1xuXG4vLyAqKlJlZHVjZSoqIGJ1aWxkcyB1cCBhIHNpbmdsZSByZXN1bHQgZnJvbSBhIGxpc3Qgb2YgdmFsdWVzLCBha2EgYGluamVjdGAsXG4vLyBvciBgZm9sZGxgLlxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlUmVkdWNlKDEpO1xuIiwiaW1wb3J0IGNyZWF0ZVJlZHVjZSBmcm9tICcuL19jcmVhdGVSZWR1Y2UuanMnO1xuXG4vLyBUaGUgcmlnaHQtYXNzb2NpYXRpdmUgdmVyc2lvbiBvZiByZWR1Y2UsIGFsc28ga25vd24gYXMgYGZvbGRyYC5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVJlZHVjZSgtMSk7XG4iLCJpbXBvcnQgY2IgZnJvbSAnLi9fY2IuanMnO1xuaW1wb3J0IGVhY2ggZnJvbSAnLi9lYWNoLmpzJztcblxuLy8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgdGhhdCBwYXNzIGEgdHJ1dGggdGVzdC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZpbHRlcihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICB2YXIgcmVzdWx0cyA9IFtdO1xuICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICBlYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGxpc3QpKSByZXN1bHRzLnB1c2godmFsdWUpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdHM7XG59XG4iLCJpbXBvcnQgZmlsdGVyIGZyb20gJy4vZmlsdGVyLmpzJztcbmltcG9ydCBuZWdhdGUgZnJvbSAnLi9uZWdhdGUuanMnO1xuaW1wb3J0IGNiIGZyb20gJy4vX2NiLmpzJztcblxuLy8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgZm9yIHdoaWNoIGEgdHJ1dGggdGVzdCBmYWlscy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlamVjdChvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICByZXR1cm4gZmlsdGVyKG9iaiwgbmVnYXRlKGNiKHByZWRpY2F0ZSkpLCBjb250ZXh0KTtcbn1cbiIsImltcG9ydCBjYiBmcm9tICcuL19jYi5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9faXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLy8gRGV0ZXJtaW5lIHdoZXRoZXIgYWxsIG9mIHRoZSBlbGVtZW50cyBwYXNzIGEgdHJ1dGggdGVzdC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGV2ZXJ5KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gIHZhciBfa2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIGtleXMob2JqKSxcbiAgICAgIGxlbmd0aCA9IChfa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgIHZhciBjdXJyZW50S2V5ID0gX2tleXMgPyBfa2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICBpZiAoIXByZWRpY2F0ZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbiIsImltcG9ydCBjYiBmcm9tICcuL19jYi5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9faXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLy8gRGV0ZXJtaW5lIGlmIGF0IGxlYXN0IG9uZSBlbGVtZW50IGluIHRoZSBvYmplY3QgcGFzc2VzIGEgdHJ1dGggdGVzdC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNvbWUob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgdmFyIF9rZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYga2V5cyhvYmopLFxuICAgICAgbGVuZ3RoID0gKF9rZXlzIHx8IG9iaikubGVuZ3RoO1xuICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgdmFyIGN1cnJlbnRLZXkgPSBfa2V5cyA/IF9rZXlzW2luZGV4XSA6IGluZGV4O1xuICAgIGlmIChwcmVkaWNhdGUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4iLCJpbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9faXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IHZhbHVlcyBmcm9tICcuL3ZhbHVlcy5qcyc7XG5pbXBvcnQgaW5kZXhPZiBmcm9tICcuL2luZGV4T2YuanMnO1xuXG4vLyBEZXRlcm1pbmUgaWYgdGhlIGFycmF5IG9yIG9iamVjdCBjb250YWlucyBhIGdpdmVuIGl0ZW0gKHVzaW5nIGA9PT1gKS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRhaW5zKG9iaiwgaXRlbSwgZnJvbUluZGV4LCBndWFyZCkge1xuICBpZiAoIWlzQXJyYXlMaWtlKG9iaikpIG9iaiA9IHZhbHVlcyhvYmopO1xuICBpZiAodHlwZW9mIGZyb21JbmRleCAhPSAnbnVtYmVyJyB8fCBndWFyZCkgZnJvbUluZGV4ID0gMDtcbiAgcmV0dXJuIGluZGV4T2Yob2JqLCBpdGVtLCBmcm9tSW5kZXgpID49IDA7XG59XG4iLCJpbXBvcnQgcmVzdEFyZ3VtZW50cyBmcm9tICcuL3Jlc3RBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBtYXAgZnJvbSAnLi9tYXAuanMnO1xuaW1wb3J0IGRlZXBHZXQgZnJvbSAnLi9fZGVlcEdldC5qcyc7XG5pbXBvcnQgdG9QYXRoIGZyb20gJy4vX3RvUGF0aC5qcyc7XG5cbi8vIEludm9rZSBhIG1ldGhvZCAod2l0aCBhcmd1bWVudHMpIG9uIGV2ZXJ5IGl0ZW0gaW4gYSBjb2xsZWN0aW9uLlxuZXhwb3J0IGRlZmF1bHQgcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihvYmosIHBhdGgsIGFyZ3MpIHtcbiAgdmFyIGNvbnRleHRQYXRoLCBmdW5jO1xuICBpZiAoaXNGdW5jdGlvbihwYXRoKSkge1xuICAgIGZ1bmMgPSBwYXRoO1xuICB9IGVsc2Uge1xuICAgIHBhdGggPSB0b1BhdGgocGF0aCk7XG4gICAgY29udGV4dFBhdGggPSBwYXRoLnNsaWNlKDAsIC0xKTtcbiAgICBwYXRoID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuICB9XG4gIHJldHVybiBtYXAob2JqLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZCA9IGZ1bmM7XG4gICAgaWYgKCFtZXRob2QpIHtcbiAgICAgIGlmIChjb250ZXh0UGF0aCAmJiBjb250ZXh0UGF0aC5sZW5ndGgpIHtcbiAgICAgICAgY29udGV4dCA9IGRlZXBHZXQoY29udGV4dCwgY29udGV4dFBhdGgpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbnRleHQgPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcbiAgICAgIG1ldGhvZCA9IGNvbnRleHRbcGF0aF07XG4gICAgfVxuICAgIHJldHVybiBtZXRob2QgPT0gbnVsbCA/IG1ldGhvZCA6IG1ldGhvZC5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgfSk7XG59KTtcbiIsImltcG9ydCBtYXAgZnJvbSAnLi9tYXAuanMnO1xuaW1wb3J0IHByb3BlcnR5IGZyb20gJy4vcHJvcGVydHkuanMnO1xuXG4vLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBfLm1hcGA6IGZldGNoaW5nIGEgcHJvcGVydHkuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwbHVjayhvYmosIGtleSkge1xuICByZXR1cm4gbWFwKG9iaiwgcHJvcGVydHkoa2V5KSk7XG59XG4iLCJpbXBvcnQgZmlsdGVyIGZyb20gJy4vZmlsdGVyLmpzJztcbmltcG9ydCBtYXRjaGVyIGZyb20gJy4vbWF0Y2hlci5qcyc7XG5cbi8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYF8uZmlsdGVyYDogc2VsZWN0aW5nIG9ubHlcbi8vIG9iamVjdHMgY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHdoZXJlKG9iaiwgYXR0cnMpIHtcbiAgcmV0dXJuIGZpbHRlcihvYmosIG1hdGNoZXIoYXR0cnMpKTtcbn1cbiIsImltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL19pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQgdmFsdWVzIGZyb20gJy4vdmFsdWVzLmpzJztcbmltcG9ydCBjYiBmcm9tICcuL19jYi5qcyc7XG5pbXBvcnQgZWFjaCBmcm9tICcuL2VhY2guanMnO1xuXG4vLyBSZXR1cm4gdGhlIG1heGltdW0gZWxlbWVudCAob3IgZWxlbWVudC1iYXNlZCBjb21wdXRhdGlvbikuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYXgob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICB2YXIgcmVzdWx0ID0gLUluZmluaXR5LCBsYXN0Q29tcHV0ZWQgPSAtSW5maW5pdHksXG4gICAgICB2YWx1ZSwgY29tcHV0ZWQ7XG4gIGlmIChpdGVyYXRlZSA9PSBudWxsIHx8ICh0eXBlb2YgaXRlcmF0ZWUgPT0gJ251bWJlcicgJiYgdHlwZW9mIG9ialswXSAhPSAnb2JqZWN0JyAmJiBvYmogIT0gbnVsbCkpIHtcbiAgICBvYmogPSBpc0FycmF5TGlrZShvYmopID8gb2JqIDogdmFsdWVzKG9iaik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWUgPSBvYmpbaV07XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSA+IHJlc3VsdCkge1xuICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgZWFjaChvYmosIGZ1bmN0aW9uKHYsIGluZGV4LCBsaXN0KSB7XG4gICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKHYsIGluZGV4LCBsaXN0KTtcbiAgICAgIGlmIChjb21wdXRlZCA+IGxhc3RDb21wdXRlZCB8fCAoY29tcHV0ZWQgPT09IC1JbmZpbml0eSAmJiByZXN1bHQgPT09IC1JbmZpbml0eSkpIHtcbiAgICAgICAgcmVzdWx0ID0gdjtcbiAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsImltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL19pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQgdmFsdWVzIGZyb20gJy4vdmFsdWVzLmpzJztcbmltcG9ydCBjYiBmcm9tICcuL19jYi5qcyc7XG5pbXBvcnQgZWFjaCBmcm9tICcuL2VhY2guanMnO1xuXG4vLyBSZXR1cm4gdGhlIG1pbmltdW0gZWxlbWVudCAob3IgZWxlbWVudC1iYXNlZCBjb21wdXRhdGlvbikuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtaW4ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICB2YXIgcmVzdWx0ID0gSW5maW5pdHksIGxhc3RDb21wdXRlZCA9IEluZmluaXR5LFxuICAgICAgdmFsdWUsIGNvbXB1dGVkO1xuICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCB8fCAodHlwZW9mIGl0ZXJhdGVlID09ICdudW1iZXInICYmIHR5cGVvZiBvYmpbMF0gIT0gJ29iamVjdCcgJiYgb2JqICE9IG51bGwpKSB7XG4gICAgb2JqID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IHZhbHVlcyhvYmopO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbHVlID0gb2JqW2ldO1xuICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgPCByZXN1bHQpIHtcbiAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIGVhY2gob2JqLCBmdW5jdGlvbih2LCBpbmRleCwgbGlzdCkge1xuICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2LCBpbmRleCwgbGlzdCk7XG4gICAgICBpZiAoY29tcHV0ZWQgPCBsYXN0Q29tcHV0ZWQgfHwgKGNvbXB1dGVkID09PSBJbmZpbml0eSAmJiByZXN1bHQgPT09IEluZmluaXR5KSkge1xuICAgICAgICByZXN1bHQgPSB2O1xuICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCB7IHNsaWNlIH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuaW1wb3J0IGlzU3RyaW5nIGZyb20gJy4vaXNTdHJpbmcuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vX2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCBtYXAgZnJvbSAnLi9tYXAuanMnO1xuaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuaW1wb3J0IHZhbHVlcyBmcm9tICcuL3ZhbHVlcy5qcyc7XG5cbi8vIFNhZmVseSBjcmVhdGUgYSByZWFsLCBsaXZlIGFycmF5IGZyb20gYW55dGhpbmcgaXRlcmFibGUuXG52YXIgcmVTdHJTeW1ib2wgPSAvW15cXHVkODAwLVxcdWRmZmZdfFtcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl18W1xcdWQ4MDAtXFx1ZGZmZl0vZztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvQXJyYXkob2JqKSB7XG4gIGlmICghb2JqKSByZXR1cm4gW107XG4gIGlmIChpc0FycmF5KG9iaikpIHJldHVybiBzbGljZS5jYWxsKG9iaik7XG4gIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgLy8gS2VlcCBzdXJyb2dhdGUgcGFpciBjaGFyYWN0ZXJzIHRvZ2V0aGVyLlxuICAgIHJldHVybiBvYmoubWF0Y2gocmVTdHJTeW1ib2wpO1xuICB9XG4gIGlmIChpc0FycmF5TGlrZShvYmopKSByZXR1cm4gbWFwKG9iaiwgaWRlbnRpdHkpO1xuICByZXR1cm4gdmFsdWVzKG9iaik7XG59XG4iLCJpbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9faXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IHZhbHVlcyBmcm9tICcuL3ZhbHVlcy5qcyc7XG5pbXBvcnQgZ2V0TGVuZ3RoIGZyb20gJy4vX2dldExlbmd0aC5qcyc7XG5pbXBvcnQgcmFuZG9tIGZyb20gJy4vcmFuZG9tLmpzJztcbmltcG9ydCB0b0FycmF5IGZyb20gJy4vdG9BcnJheS5qcyc7XG5cbi8vIFNhbXBsZSAqKm4qKiByYW5kb20gdmFsdWVzIGZyb20gYSBjb2xsZWN0aW9uIHVzaW5nIHRoZSBtb2Rlcm4gdmVyc2lvbiBvZiB0aGVcbi8vIFtGaXNoZXItWWF0ZXMgc2h1ZmZsZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmlzaGVy4oCTWWF0ZXNfc2h1ZmZsZSkuXG4vLyBJZiAqKm4qKiBpcyBub3Qgc3BlY2lmaWVkLCByZXR1cm5zIGEgc2luZ2xlIHJhbmRvbSBlbGVtZW50LlxuLy8gVGhlIGludGVybmFsIGBndWFyZGAgYXJndW1lbnQgYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgXy5tYXBgLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2FtcGxlKG9iaiwgbiwgZ3VhcmQpIHtcbiAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkge1xuICAgIGlmICghaXNBcnJheUxpa2Uob2JqKSkgb2JqID0gdmFsdWVzKG9iaik7XG4gICAgcmV0dXJuIG9ialtyYW5kb20ob2JqLmxlbmd0aCAtIDEpXTtcbiAgfVxuICB2YXIgc2FtcGxlID0gdG9BcnJheShvYmopO1xuICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKHNhbXBsZSk7XG4gIG4gPSBNYXRoLm1heChNYXRoLm1pbihuLCBsZW5ndGgpLCAwKTtcbiAgdmFyIGxhc3QgPSBsZW5ndGggLSAxO1xuICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbjsgaW5kZXgrKykge1xuICAgIHZhciByYW5kID0gcmFuZG9tKGluZGV4LCBsYXN0KTtcbiAgICB2YXIgdGVtcCA9IHNhbXBsZVtpbmRleF07XG4gICAgc2FtcGxlW2luZGV4XSA9IHNhbXBsZVtyYW5kXTtcbiAgICBzYW1wbGVbcmFuZF0gPSB0ZW1wO1xuICB9XG4gIHJldHVybiBzYW1wbGUuc2xpY2UoMCwgbik7XG59XG4iLCJpbXBvcnQgc2FtcGxlIGZyb20gJy4vc2FtcGxlLmpzJztcblxuLy8gU2h1ZmZsZSBhIGNvbGxlY3Rpb24uXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzaHVmZmxlKG9iaikge1xuICByZXR1cm4gc2FtcGxlKG9iaiwgSW5maW5pdHkpO1xufVxuIiwiaW1wb3J0IGNiIGZyb20gJy4vX2NiLmpzJztcbmltcG9ydCBwbHVjayBmcm9tICcuL3BsdWNrLmpzJztcbmltcG9ydCBtYXAgZnJvbSAnLi9tYXAuanMnO1xuXG4vLyBTb3J0IHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24gcHJvZHVjZWQgYnkgYW4gaXRlcmF0ZWUuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzb3J0Qnkob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICB2YXIgaW5kZXggPSAwO1xuICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgcmV0dXJuIHBsdWNrKG1hcChvYmosIGZ1bmN0aW9uKHZhbHVlLCBrZXksIGxpc3QpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgaW5kZXg6IGluZGV4KyssXG4gICAgICBjcml0ZXJpYTogaXRlcmF0ZWUodmFsdWUsIGtleSwgbGlzdClcbiAgICB9O1xuICB9KS5zb3J0KGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7XG4gICAgdmFyIGEgPSBsZWZ0LmNyaXRlcmlhO1xuICAgIHZhciBiID0gcmlnaHQuY3JpdGVyaWE7XG4gICAgaWYgKGEgIT09IGIpIHtcbiAgICAgIGlmIChhID4gYiB8fCBhID09PSB2b2lkIDApIHJldHVybiAxO1xuICAgICAgaWYgKGEgPCBiIHx8IGIgPT09IHZvaWQgMCkgcmV0dXJuIC0xO1xuICAgIH1cbiAgICByZXR1cm4gbGVmdC5pbmRleCAtIHJpZ2h0LmluZGV4O1xuICB9KSwgJ3ZhbHVlJyk7XG59XG4iLCJpbXBvcnQgY2IgZnJvbSAnLi9fY2IuanMnO1xuaW1wb3J0IGVhY2ggZnJvbSAnLi9lYWNoLmpzJztcblxuLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gdXNlZCBmb3IgYWdncmVnYXRlIFwiZ3JvdXAgYnlcIiBvcGVyYXRpb25zLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ3JvdXAoYmVoYXZpb3IsIHBhcnRpdGlvbikge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHQgPSBwYXJ0aXRpb24gPyBbW10sIFtdXSA6IHt9O1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIGVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHtcbiAgICAgIHZhciBrZXkgPSBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIG9iaik7XG4gICAgICBiZWhhdmlvcihyZXN1bHQsIHZhbHVlLCBrZXkpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG4iLCJpbXBvcnQgZ3JvdXAgZnJvbSAnLi9fZ3JvdXAuanMnO1xuaW1wb3J0IGhhcyBmcm9tICcuL19oYXMuanMnO1xuXG4vLyBHcm91cHMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbi4gUGFzcyBlaXRoZXIgYSBzdHJpbmcgYXR0cmlidXRlXG4vLyB0byBncm91cCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGNyaXRlcmlvbi5cbmV4cG9ydCBkZWZhdWx0IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICBpZiAoaGFzKHJlc3VsdCwga2V5KSkgcmVzdWx0W2tleV0ucHVzaCh2YWx1ZSk7IGVsc2UgcmVzdWx0W2tleV0gPSBbdmFsdWVdO1xufSk7XG4iLCJpbXBvcnQgZ3JvdXAgZnJvbSAnLi9fZ3JvdXAuanMnO1xuXG4vLyBJbmRleGVzIHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24sIHNpbWlsYXIgdG8gYF8uZ3JvdXBCeWAsIGJ1dCBmb3Jcbi8vIHdoZW4geW91IGtub3cgdGhhdCB5b3VyIGluZGV4IHZhbHVlcyB3aWxsIGJlIHVuaXF1ZS5cbmV4cG9ydCBkZWZhdWx0IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICByZXN1bHRba2V5XSA9IHZhbHVlO1xufSk7XG4iLCJpbXBvcnQgZ3JvdXAgZnJvbSAnLi9fZ3JvdXAuanMnO1xuaW1wb3J0IGhhcyBmcm9tICcuL19oYXMuanMnO1xuXG4vLyBDb3VudHMgaW5zdGFuY2VzIG9mIGFuIG9iamVjdCB0aGF0IGdyb3VwIGJ5IGEgY2VydGFpbiBjcml0ZXJpb24uIFBhc3Ncbi8vIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGUgdG8gY291bnQgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZVxuLy8gY3JpdGVyaW9uLlxuZXhwb3J0IGRlZmF1bHQgZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gIGlmIChoYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XSsrOyBlbHNlIHJlc3VsdFtrZXldID0gMTtcbn0pO1xuIiwiaW1wb3J0IGdyb3VwIGZyb20gJy4vX2dyb3VwLmpzJztcblxuLy8gU3BsaXQgYSBjb2xsZWN0aW9uIGludG8gdHdvIGFycmF5czogb25lIHdob3NlIGVsZW1lbnRzIGFsbCBwYXNzIHRoZSBnaXZlblxuLy8gdHJ1dGggdGVzdCwgYW5kIG9uZSB3aG9zZSBlbGVtZW50cyBhbGwgZG8gbm90IHBhc3MgdGhlIHRydXRoIHRlc3QuXG5leHBvcnQgZGVmYXVsdCBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBwYXNzKSB7XG4gIHJlc3VsdFtwYXNzID8gMCA6IDFdLnB1c2godmFsdWUpO1xufSwgdHJ1ZSk7XG4iLCJpbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9faXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYSBjb2xsZWN0aW9uLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2l6ZShvYmopIHtcbiAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gMDtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iaikgPyBvYmoubGVuZ3RoIDoga2V5cyhvYmopLmxlbmd0aDtcbn1cbiIsIi8vIEludGVybmFsIGBfLnBpY2tgIGhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgd2hldGhlciBga2V5YCBpcyBhbiBlbnVtZXJhYmxlXG4vLyBwcm9wZXJ0eSBuYW1lIG9mIGBvYmpgLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ga2V5SW5PYmoodmFsdWUsIGtleSwgb2JqKSB7XG4gIHJldHVybiBrZXkgaW4gb2JqO1xufVxuIiwiaW1wb3J0IHJlc3RBcmd1bWVudHMgZnJvbSAnLi9yZXN0QXJndW1lbnRzLmpzJztcbmltcG9ydCBpc0Z1bmN0aW9uIGZyb20gJy4vaXNGdW5jdGlvbi5qcyc7XG5pbXBvcnQgb3B0aW1pemVDYiBmcm9tICcuL19vcHRpbWl6ZUNiLmpzJztcbmltcG9ydCBhbGxLZXlzIGZyb20gJy4vYWxsS2V5cy5qcyc7XG5pbXBvcnQga2V5SW5PYmogZnJvbSAnLi9fa2V5SW5PYmouanMnO1xuaW1wb3J0IGZsYXR0ZW4gZnJvbSAnLi9fZmxhdHRlbi5qcyc7XG5cbi8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCBvbmx5IGNvbnRhaW5pbmcgdGhlIGFsbG93ZWQgcHJvcGVydGllcy5cbmV4cG9ydCBkZWZhdWx0IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24ob2JqLCBrZXlzKSB7XG4gIHZhciByZXN1bHQgPSB7fSwgaXRlcmF0ZWUgPSBrZXlzWzBdO1xuICBpZiAob2JqID09IG51bGwpIHJldHVybiByZXN1bHQ7XG4gIGlmIChpc0Z1bmN0aW9uKGl0ZXJhdGVlKSkge1xuICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwga2V5c1sxXSk7XG4gICAga2V5cyA9IGFsbEtleXMob2JqKTtcbiAgfSBlbHNlIHtcbiAgICBpdGVyYXRlZSA9IGtleUluT2JqO1xuICAgIGtleXMgPSBmbGF0dGVuKGtleXMsIGZhbHNlLCBmYWxzZSk7XG4gICAgb2JqID0gT2JqZWN0KG9iaik7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICB2YXIgdmFsdWUgPSBvYmpba2V5XTtcbiAgICBpZiAoaXRlcmF0ZWUodmFsdWUsIGtleSwgb2JqKSkgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufSk7XG4iLCJpbXBvcnQgcmVzdEFyZ3VtZW50cyBmcm9tICcuL3Jlc3RBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBuZWdhdGUgZnJvbSAnLi9uZWdhdGUuanMnO1xuaW1wb3J0IG1hcCBmcm9tICcuL21hcC5qcyc7XG5pbXBvcnQgZmxhdHRlbiBmcm9tICcuL19mbGF0dGVuLmpzJztcbmltcG9ydCBjb250YWlucyBmcm9tICcuL2NvbnRhaW5zLmpzJztcbmltcG9ydCBwaWNrIGZyb20gJy4vcGljay5qcyc7XG5cbi8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCB3aXRob3V0IHRoZSBkaXNhbGxvd2VkIHByb3BlcnRpZXMuXG5leHBvcnQgZGVmYXVsdCByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKG9iaiwga2V5cykge1xuICB2YXIgaXRlcmF0ZWUgPSBrZXlzWzBdLCBjb250ZXh0O1xuICBpZiAoaXNGdW5jdGlvbihpdGVyYXRlZSkpIHtcbiAgICBpdGVyYXRlZSA9IG5lZ2F0ZShpdGVyYXRlZSk7XG4gICAgaWYgKGtleXMubGVuZ3RoID4gMSkgY29udGV4dCA9IGtleXNbMV07XG4gIH0gZWxzZSB7XG4gICAga2V5cyA9IG1hcChmbGF0dGVuKGtleXMsIGZhbHNlLCBmYWxzZSksIFN0cmluZyk7XG4gICAgaXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICByZXR1cm4gIWNvbnRhaW5zKGtleXMsIGtleSk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gcGljayhvYmosIGl0ZXJhdGVlLCBjb250ZXh0KTtcbn0pO1xuIiwiaW1wb3J0IHsgc2xpY2UgfSBmcm9tICcuL19zZXR1cC5qcyc7XG5cbi8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGxhc3QgZW50cnkgb2YgdGhlIGFycmF5LiBFc3BlY2lhbGx5IHVzZWZ1bCBvblxuLy8gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gYWxsIHRoZSB2YWx1ZXMgaW5cbi8vIHRoZSBhcnJheSwgZXhjbHVkaW5nIHRoZSBsYXN0IE4uXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0aWFsKGFycmF5LCBuLCBndWFyZCkge1xuICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgMCwgTWF0aC5tYXgoMCwgYXJyYXkubGVuZ3RoIC0gKG4gPT0gbnVsbCB8fCBndWFyZCA/IDEgOiBuKSkpO1xufVxuIiwiaW1wb3J0IGluaXRpYWwgZnJvbSAnLi9pbml0aWFsLmpzJztcblxuLy8gR2V0IHRoZSBmaXJzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBOXG4vLyB2YWx1ZXMgaW4gdGhlIGFycmF5LiBUaGUgKipndWFyZCoqIGNoZWNrIGFsbG93cyBpdCB0byB3b3JrIHdpdGggYF8ubWFwYC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZpcnN0KGFycmF5LCBuLCBndWFyZCkge1xuICBpZiAoYXJyYXkgPT0gbnVsbCB8fCBhcnJheS5sZW5ndGggPCAxKSByZXR1cm4gbiA9PSBudWxsIHx8IGd1YXJkID8gdm9pZCAwIDogW107XG4gIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJheVswXTtcbiAgcmV0dXJuIGluaXRpYWwoYXJyYXksIGFycmF5Lmxlbmd0aCAtIG4pO1xufVxuIiwiaW1wb3J0IHsgc2xpY2UgfSBmcm9tICcuL19zZXR1cC5qcyc7XG5cbi8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSBgYXJyYXlgLiBFc3BlY2lhbGx5IHVzZWZ1bCBvblxuLy8gdGhlIGBhcmd1bWVudHNgIG9iamVjdC4gUGFzc2luZyBhbiAqKm4qKiB3aWxsIHJldHVybiB0aGUgcmVzdCBOIHZhbHVlcyBpbiB0aGVcbi8vIGBhcnJheWAuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXN0KGFycmF5LCBuLCBndWFyZCkge1xuICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgbiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4pO1xufVxuIiwiaW1wb3J0IHJlc3QgZnJvbSAnLi9yZXN0LmpzJztcblxuLy8gR2V0IHRoZSBsYXN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGxhc3QgTlxuLy8gdmFsdWVzIGluIHRoZSBhcnJheS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxhc3QoYXJyYXksIG4sIGd1YXJkKSB7XG4gIGlmIChhcnJheSA9PSBudWxsIHx8IGFycmF5Lmxlbmd0aCA8IDEpIHJldHVybiBuID09IG51bGwgfHwgZ3VhcmQgPyB2b2lkIDAgOiBbXTtcbiAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDFdO1xuICByZXR1cm4gcmVzdChhcnJheSwgTWF0aC5tYXgoMCwgYXJyYXkubGVuZ3RoIC0gbikpO1xufVxuIiwiaW1wb3J0IGZpbHRlciBmcm9tICcuL2ZpbHRlci5qcyc7XG5cbi8vIFRyaW0gb3V0IGFsbCBmYWxzeSB2YWx1ZXMgZnJvbSBhbiBhcnJheS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXBhY3QoYXJyYXkpIHtcbiAgcmV0dXJuIGZpbHRlcihhcnJheSwgQm9vbGVhbik7XG59XG4iLCJpbXBvcnQgX2ZsYXR0ZW4gZnJvbSAnLi9fZmxhdHRlbi5qcyc7XG5cbi8vIEZsYXR0ZW4gb3V0IGFuIGFycmF5LCBlaXRoZXIgcmVjdXJzaXZlbHkgKGJ5IGRlZmF1bHQpLCBvciB1cCB0byBgZGVwdGhgLlxuLy8gUGFzc2luZyBgdHJ1ZWAgb3IgYGZhbHNlYCBhcyBgZGVwdGhgIG1lYW5zIGAxYCBvciBgSW5maW5pdHlgLCByZXNwZWN0aXZlbHkuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmbGF0dGVuKGFycmF5LCBkZXB0aCkge1xuICByZXR1cm4gX2ZsYXR0ZW4oYXJyYXksIGRlcHRoLCBmYWxzZSk7XG59XG4iLCJpbXBvcnQgcmVzdEFyZ3VtZW50cyBmcm9tICcuL3Jlc3RBcmd1bWVudHMuanMnO1xuaW1wb3J0IGZsYXR0ZW4gZnJvbSAnLi9fZmxhdHRlbi5qcyc7XG5pbXBvcnQgZmlsdGVyIGZyb20gJy4vZmlsdGVyLmpzJztcbmltcG9ydCBjb250YWlucyBmcm9tICcuL2NvbnRhaW5zLmpzJztcblxuLy8gVGFrZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG9uZSBhcnJheSBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgYXJyYXlzLlxuLy8gT25seSB0aGUgZWxlbWVudHMgcHJlc2VudCBpbiBqdXN0IHRoZSBmaXJzdCBhcnJheSB3aWxsIHJlbWFpbi5cbmV4cG9ydCBkZWZhdWx0IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oYXJyYXksIHJlc3QpIHtcbiAgcmVzdCA9IGZsYXR0ZW4ocmVzdCwgdHJ1ZSwgdHJ1ZSk7XG4gIHJldHVybiBmaWx0ZXIoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKXtcbiAgICByZXR1cm4gIWNvbnRhaW5zKHJlc3QsIHZhbHVlKTtcbiAgfSk7XG59KTtcbiIsImltcG9ydCByZXN0QXJndW1lbnRzIGZyb20gJy4vcmVzdEFyZ3VtZW50cy5qcyc7XG5pbXBvcnQgZGlmZmVyZW5jZSBmcm9tICcuL2RpZmZlcmVuY2UuanMnO1xuXG4vLyBSZXR1cm4gYSB2ZXJzaW9uIG9mIHRoZSBhcnJheSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gdGhlIHNwZWNpZmllZCB2YWx1ZShzKS5cbmV4cG9ydCBkZWZhdWx0IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oYXJyYXksIG90aGVyQXJyYXlzKSB7XG4gIHJldHVybiBkaWZmZXJlbmNlKGFycmF5LCBvdGhlckFycmF5cyk7XG59KTtcbiIsImltcG9ydCBpc0Jvb2xlYW4gZnJvbSAnLi9pc0Jvb2xlYW4uanMnO1xuaW1wb3J0IGNiIGZyb20gJy4vX2NiLmpzJztcbmltcG9ydCBnZXRMZW5ndGggZnJvbSAnLi9fZ2V0TGVuZ3RoLmpzJztcbmltcG9ydCBjb250YWlucyBmcm9tICcuL2NvbnRhaW5zLmpzJztcblxuLy8gUHJvZHVjZSBhIGR1cGxpY2F0ZS1mcmVlIHZlcnNpb24gb2YgdGhlIGFycmF5LiBJZiB0aGUgYXJyYXkgaGFzIGFscmVhZHlcbi8vIGJlZW4gc29ydGVkLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIHVzaW5nIGEgZmFzdGVyIGFsZ29yaXRobS5cbi8vIFRoZSBmYXN0ZXIgYWxnb3JpdGhtIHdpbGwgbm90IHdvcmsgd2l0aCBhbiBpdGVyYXRlZSBpZiB0aGUgaXRlcmF0ZWVcbi8vIGlzIG5vdCBhIG9uZS10by1vbmUgZnVuY3Rpb24sIHNvIHByb3ZpZGluZyBhbiBpdGVyYXRlZSB3aWxsIGRpc2FibGVcbi8vIHRoZSBmYXN0ZXIgYWxnb3JpdGhtLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdW5pcShhcnJheSwgaXNTb3J0ZWQsIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gIGlmICghaXNCb29sZWFuKGlzU29ydGVkKSkge1xuICAgIGNvbnRleHQgPSBpdGVyYXRlZTtcbiAgICBpdGVyYXRlZSA9IGlzU29ydGVkO1xuICAgIGlzU29ydGVkID0gZmFsc2U7XG4gIH1cbiAgaWYgKGl0ZXJhdGVlICE9IG51bGwpIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBzZWVuID0gW107XG4gIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpXSxcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlLCBpLCBhcnJheSkgOiB2YWx1ZTtcbiAgICBpZiAoaXNTb3J0ZWQgJiYgIWl0ZXJhdGVlKSB7XG4gICAgICBpZiAoIWkgfHwgc2VlbiAhPT0gY29tcHV0ZWQpIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgIHNlZW4gPSBjb21wdXRlZDtcbiAgICB9IGVsc2UgaWYgKGl0ZXJhdGVlKSB7XG4gICAgICBpZiAoIWNvbnRhaW5zKHNlZW4sIGNvbXB1dGVkKSkge1xuICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghY29udGFpbnMocmVzdWx0LCB2YWx1ZSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsImltcG9ydCByZXN0QXJndW1lbnRzIGZyb20gJy4vcmVzdEFyZ3VtZW50cy5qcyc7XG5pbXBvcnQgdW5pcSBmcm9tICcuL3VuaXEuanMnO1xuaW1wb3J0IGZsYXR0ZW4gZnJvbSAnLi9fZmxhdHRlbi5qcyc7XG5cbi8vIFByb2R1Y2UgYW4gYXJyYXkgdGhhdCBjb250YWlucyB0aGUgdW5pb246IGVhY2ggZGlzdGluY3QgZWxlbWVudCBmcm9tIGFsbCBvZlxuLy8gdGhlIHBhc3NlZC1pbiBhcnJheXMuXG5leHBvcnQgZGVmYXVsdCByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGFycmF5cykge1xuICByZXR1cm4gdW5pcShmbGF0dGVuKGFycmF5cywgdHJ1ZSwgdHJ1ZSkpO1xufSk7XG4iLCJpbXBvcnQgZ2V0TGVuZ3RoIGZyb20gJy4vX2dldExlbmd0aC5qcyc7XG5pbXBvcnQgY29udGFpbnMgZnJvbSAnLi9jb250YWlucy5qcyc7XG5cbi8vIFByb2R1Y2UgYW4gYXJyYXkgdGhhdCBjb250YWlucyBldmVyeSBpdGVtIHNoYXJlZCBiZXR3ZWVuIGFsbCB0aGVcbi8vIHBhc3NlZC1pbiBhcnJheXMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbnRlcnNlY3Rpb24oYXJyYXkpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgYXJnc0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaXRlbSA9IGFycmF5W2ldO1xuICAgIGlmIChjb250YWlucyhyZXN1bHQsIGl0ZW0pKSBjb250aW51ZTtcbiAgICB2YXIgajtcbiAgICBmb3IgKGogPSAxOyBqIDwgYXJnc0xlbmd0aDsgaisrKSB7XG4gICAgICBpZiAoIWNvbnRhaW5zKGFyZ3VtZW50c1tqXSwgaXRlbSkpIGJyZWFrO1xuICAgIH1cbiAgICBpZiAoaiA9PT0gYXJnc0xlbmd0aCkgcmVzdWx0LnB1c2goaXRlbSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsImltcG9ydCBtYXggZnJvbSAnLi9tYXguanMnO1xuaW1wb3J0IGdldExlbmd0aCBmcm9tICcuL19nZXRMZW5ndGguanMnO1xuaW1wb3J0IHBsdWNrIGZyb20gJy4vcGx1Y2suanMnO1xuXG4vLyBDb21wbGVtZW50IG9mIHppcC4gVW56aXAgYWNjZXB0cyBhbiBhcnJheSBvZiBhcnJheXMgYW5kIGdyb3Vwc1xuLy8gZWFjaCBhcnJheSdzIGVsZW1lbnRzIG9uIHNoYXJlZCBpbmRpY2VzLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdW56aXAoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IChhcnJheSAmJiBtYXgoYXJyYXksIGdldExlbmd0aCkubGVuZ3RoKSB8fCAwO1xuICB2YXIgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IHBsdWNrKGFycmF5LCBpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsImltcG9ydCByZXN0QXJndW1lbnRzIGZyb20gJy4vcmVzdEFyZ3VtZW50cy5qcyc7XG5pbXBvcnQgdW56aXAgZnJvbSAnLi91bnppcC5qcyc7XG5cbi8vIFppcCB0b2dldGhlciBtdWx0aXBsZSBsaXN0cyBpbnRvIGEgc2luZ2xlIGFycmF5IC0tIGVsZW1lbnRzIHRoYXQgc2hhcmVcbi8vIGFuIGluZGV4IGdvIHRvZ2V0aGVyLlxuZXhwb3J0IGRlZmF1bHQgcmVzdEFyZ3VtZW50cyh1bnppcCk7XG4iLCJpbXBvcnQgZ2V0TGVuZ3RoICBmcm9tICcuL19nZXRMZW5ndGguanMnO1xuXG4vLyBDb252ZXJ0cyBsaXN0cyBpbnRvIG9iamVjdHMuIFBhc3MgZWl0aGVyIGEgc2luZ2xlIGFycmF5IG9mIGBba2V5LCB2YWx1ZV1gXG4vLyBwYWlycywgb3IgdHdvIHBhcmFsbGVsIGFycmF5cyBvZiB0aGUgc2FtZSBsZW5ndGggLS0gb25lIG9mIGtleXMsIGFuZCBvbmUgb2Zcbi8vIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy4gUGFzc2luZyBieSBwYWlycyBpcyB0aGUgcmV2ZXJzZSBvZiBgXy5wYWlyc2AuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvYmplY3QobGlzdCwgdmFsdWVzKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChsaXN0KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHZhbHVlcykge1xuICAgICAgcmVzdWx0W2xpc3RbaV1dID0gdmFsdWVzW2ldO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRbbGlzdFtpXVswXV0gPSBsaXN0W2ldWzFdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwiLy8gR2VuZXJhdGUgYW4gaW50ZWdlciBBcnJheSBjb250YWluaW5nIGFuIGFyaXRobWV0aWMgcHJvZ3Jlc3Npb24uIEEgcG9ydCBvZlxuLy8gdGhlIG5hdGl2ZSBQeXRob24gYHJhbmdlKClgIGZ1bmN0aW9uLiBTZWVcbi8vIFt0aGUgUHl0aG9uIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjcmFuZ2UpLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmFuZ2Uoc3RhcnQsIHN0b3AsIHN0ZXApIHtcbiAgaWYgKHN0b3AgPT0gbnVsbCkge1xuICAgIHN0b3AgPSBzdGFydCB8fCAwO1xuICAgIHN0YXJ0ID0gMDtcbiAgfVxuICBpZiAoIXN0ZXApIHtcbiAgICBzdGVwID0gc3RvcCA8IHN0YXJ0ID8gLTEgOiAxO1xuICB9XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KE1hdGguY2VpbCgoc3RvcCAtIHN0YXJ0KSAvIHN0ZXApLCAwKTtcbiAgdmFyIHJhbmdlID0gQXJyYXkobGVuZ3RoKTtcblxuICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBsZW5ndGg7IGlkeCsrLCBzdGFydCArPSBzdGVwKSB7XG4gICAgcmFuZ2VbaWR4XSA9IHN0YXJ0O1xuICB9XG5cbiAgcmV0dXJuIHJhbmdlO1xufVxuIiwiaW1wb3J0IHsgc2xpY2UgfSBmcm9tICcuL19zZXR1cC5qcyc7XG5cbi8vIENodW5rIGEgc2luZ2xlIGFycmF5IGludG8gbXVsdGlwbGUgYXJyYXlzLCBlYWNoIGNvbnRhaW5pbmcgYGNvdW50YCBvciBmZXdlclxuLy8gaXRlbXMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjaHVuayhhcnJheSwgY291bnQpIHtcbiAgaWYgKGNvdW50ID09IG51bGwgfHwgY291bnQgPCAxKSByZXR1cm4gW107XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHdoaWxlIChpIDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0LnB1c2goc2xpY2UuY2FsbChhcnJheSwgaSwgaSArPSBjb3VudCkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG4iLCJpbXBvcnQgXyBmcm9tICcuL3VuZGVyc2NvcmUuanMnO1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gY29udGludWUgY2hhaW5pbmcgaW50ZXJtZWRpYXRlIHJlc3VsdHMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjaGFpblJlc3VsdChpbnN0YW5jZSwgb2JqKSB7XG4gIHJldHVybiBpbnN0YW5jZS5fY2hhaW4gPyBfKG9iaikuY2hhaW4oKSA6IG9iajtcbn1cbiIsImltcG9ydCBfIGZyb20gJy4vdW5kZXJzY29yZS5qcyc7XG5pbXBvcnQgZWFjaCBmcm9tICcuL2VhY2guanMnO1xuaW1wb3J0IGZ1bmN0aW9ucyBmcm9tICcuL2Z1bmN0aW9ucy5qcyc7XG5pbXBvcnQgeyBwdXNoIH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuaW1wb3J0IGNoYWluUmVzdWx0IGZyb20gJy4vX2NoYWluUmVzdWx0LmpzJztcblxuLy8gQWRkIHlvdXIgb3duIGN1c3RvbSBmdW5jdGlvbnMgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWl4aW4ob2JqKSB7XG4gIGVhY2goZnVuY3Rpb25zKG9iaiksIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgZnVuYyA9IF9bbmFtZV0gPSBvYmpbbmFtZV07XG4gICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBhcmdzID0gW3RoaXMuX3dyYXBwZWRdO1xuICAgICAgcHVzaC5hcHBseShhcmdzLCBhcmd1bWVudHMpO1xuICAgICAgcmV0dXJuIGNoYWluUmVzdWx0KHRoaXMsIGZ1bmMuYXBwbHkoXywgYXJncykpO1xuICAgIH07XG4gIH0pO1xuICByZXR1cm4gXztcbn1cbiIsImltcG9ydCBfIGZyb20gJy4vdW5kZXJzY29yZS5qcyc7XG5pbXBvcnQgZWFjaCBmcm9tICcuL2VhY2guanMnO1xuaW1wb3J0IHsgQXJyYXlQcm90byB9IGZyb20gJy4vX3NldHVwLmpzJztcbmltcG9ydCBjaGFpblJlc3VsdCBmcm9tICcuL19jaGFpblJlc3VsdC5qcyc7XG5cbi8vIEFkZCBhbGwgbXV0YXRvciBgQXJyYXlgIGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci5cbmVhY2goWydwb3AnLCAncHVzaCcsICdyZXZlcnNlJywgJ3NoaWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQnXSwgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgbWV0aG9kID0gQXJyYXlQcm90b1tuYW1lXTtcbiAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgb2JqID0gdGhpcy5fd3JhcHBlZDtcbiAgICBpZiAob2JqICE9IG51bGwpIHtcbiAgICAgIG1ldGhvZC5hcHBseShvYmosIGFyZ3VtZW50cyk7XG4gICAgICBpZiAoKG5hbWUgPT09ICdzaGlmdCcgfHwgbmFtZSA9PT0gJ3NwbGljZScpICYmIG9iai5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGVsZXRlIG9ialswXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNoYWluUmVzdWx0KHRoaXMsIG9iaik7XG4gIH07XG59KTtcblxuLy8gQWRkIGFsbCBhY2Nlc3NvciBgQXJyYXlgIGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci5cbmVhY2goWydjb25jYXQnLCAnam9pbicsICdzbGljZSddLCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVdO1xuICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBvYmogPSB0aGlzLl93cmFwcGVkO1xuICAgIGlmIChvYmogIT0gbnVsbCkgb2JqID0gbWV0aG9kLmFwcGx5KG9iaiwgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gY2hhaW5SZXN1bHQodGhpcywgb2JqKTtcbiAgfTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBfO1xuIiwiLy8gRGVmYXVsdCBFeHBvcnRcbi8vID09PT09PT09PT09PT09XG4vLyBJbiB0aGlzIG1vZHVsZSwgd2UgbWl4IG91ciBidW5kbGVkIGV4cG9ydHMgaW50byB0aGUgYF9gIG9iamVjdCBhbmQgZXhwb3J0XG4vLyB0aGUgcmVzdWx0LiBUaGlzIGlzIGFuYWxvZ291cyB0byBzZXR0aW5nIGBtb2R1bGUuZXhwb3J0cyA9IF9gIGluIENvbW1vbkpTLlxuLy8gSGVuY2UsIHRoaXMgbW9kdWxlIGlzIGFsc28gdGhlIGVudHJ5IHBvaW50IG9mIG91ciBVTUQgYnVuZGxlIGFuZCB0aGUgcGFja2FnZVxuLy8gZW50cnkgcG9pbnQgZm9yIENvbW1vbkpTIGFuZCBBTUQgdXNlcnMuIEluIG90aGVyIHdvcmRzLCB0aGlzIGlzICh0aGUgc291cmNlXG4vLyBvZikgdGhlIG1vZHVsZSB5b3UgYXJlIGludGVyZmFjaW5nIHdpdGggd2hlbiB5b3UgZG8gYW55IG9mIHRoZSBmb2xsb3dpbmc6XG4vL1xuLy8gYGBganNcbi8vIC8vIENvbW1vbkpTXG4vLyB2YXIgXyA9IHJlcXVpcmUoJ3VuZGVyc2NvcmUnKTtcbi8vXG4vLyAvLyBBTURcbi8vIGRlZmluZShbJ3VuZGVyc2NvcmUnXSwgZnVuY3Rpb24oXykgey4uLn0pO1xuLy9cbi8vIC8vIFVNRCBpbiB0aGUgYnJvd3NlclxuLy8gLy8gXyBpcyBhdmFpbGFibGUgYXMgYSBnbG9iYWwgdmFyaWFibGVcbi8vIGBgYFxuaW1wb3J0ICogYXMgYWxsRXhwb3J0cyBmcm9tICcuL2luZGV4LmpzJztcbmltcG9ydCB7IG1peGluIH0gZnJvbSAnLi9pbmRleC5qcyc7XG5cbi8vIEFkZCBhbGwgb2YgdGhlIFVuZGVyc2NvcmUgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyIG9iamVjdC5cbnZhciBfID0gbWl4aW4oYWxsRXhwb3J0cyk7XG4vLyBMZWdhY3kgTm9kZS5qcyBBUEkuXG5fLl8gPSBfO1xuLy8gRXhwb3J0IHRoZSBVbmRlcnNjb3JlIEFQSS5cbmV4cG9ydCBkZWZhdWx0IF87XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFNPUlRfQVNDLCBTT1JUX0RFU0MgfSBmcm9tIFwiLi4vY29uc3RcIjtcblxudHlwZSBEYXRhT3BlcmF0b3IgPSB7XG4gIG5leHRPcmRlcjogKFxuICAgIGNvbHVtbjogYW55LFxuICAgIHN0YXRlOiB7IHNvcnRPcmRlcjogc3RyaW5nIHwgdW5kZWZpbmVkOyBzb3J0Q29sdW1uOiBhbnkgfCB1bmRlZmluZWQgfSxcbiAgICBkZWZhdWx0U29ydERpcmVjdGlvbjogc3RyaW5nXG4gICkgPT4gc3RyaW5nO1xuICBzb3J0OiAoXG4gICAgZGF0YTogYW55W10sXG4gICAgb3JkZXI6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBzb3J0Q29sdW1uOiBhbnkgfCB1bmRlZmluZWRcbiAgKSA9PiBhbnlbXTtcbn07XG5cbnR5cGUgSGFuZGxlU29ydENoYW5nZSA9IChcbiAgZGF0YUZpZWxkOiBzdHJpbmcsXG4gIHNvcnRPcmRlcjogc3RyaW5nIHwgdW5kZWZpbmVkXG4pID0+IHZvaWQ7XG5cbi8vXG5pbnRlcmZhY2UgU29ydENvbnRleHRWYWx1ZSB7XG4gIGRhdGE6IGFueVtdO1xuICBzb3J0T3JkZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgb25Tb3J0OiAoY29sdW1uOiBhbnkpID0+IHZvaWQ7XG4gIHNvcnRGaWVsZDogc3RyaW5nIHwgbnVsbDtcbn1cblxuaW50ZXJmYWNlIFNvcnRQcm92aWRlclByb3BzIHtcbiAgZGF0YTogYW55W107XG4gIGNvbHVtbnM6IGFueVtdO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBkZWZhdWx0U29ydGVkPzogQXJyYXk8e1xuICAgIGRhdGFGaWVsZDogc3RyaW5nO1xuICAgIG9yZGVyOiB0eXBlb2YgU09SVF9BU0MgfCB0eXBlb2YgU09SVF9ERVNDO1xuICB9PjtcbiAgc29ydD86IHtcbiAgICBkYXRhRmllbGQ6IHN0cmluZztcbiAgICBvcmRlcjogdHlwZW9mIFNPUlRfQVNDIHwgdHlwZW9mIFNPUlRfREVTQztcbiAgICBzb3J0RnVuYzogKGE6IGFueSwgYjogYW55LCBvcmRlcjogc3RyaW5nLCBkYXRhRmllbGQ6IHN0cmluZykgPT4gbnVtYmVyO1xuICB9O1xuICBkZWZhdWx0U29ydERpcmVjdGlvbjogdHlwZW9mIFNPUlRfQVNDIHwgdHlwZW9mIFNPUlRfREVTQztcbn1cblxuZXhwb3J0IGRlZmF1bHQgKFxuICBkYXRhT3BlcmF0b3I6IERhdGFPcGVyYXRvcixcbiAgaXNSZW1vdGVTb3J0OiAoKSA9PiBib29sZWFuLFxuICBoYW5kbGVTb3J0Q2hhbmdlOiBIYW5kbGVTb3J0Q2hhbmdlXG4pID0+IHtcbiAgY29uc3QgZGVmYXVsdFNvcnRDb250ZXh0ID0ge1xuICAgIGRhdGE6IFtdLFxuICAgIHNvcnRPcmRlcjogdW5kZWZpbmVkLFxuICAgIG9uU29ydDogKCkgPT4geyB9LFxuICAgIHNvcnRGaWVsZDogbnVsbCxcbiAgfTtcbiAgY29uc3QgU29ydENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PFNvcnRDb250ZXh0VmFsdWU+KGRlZmF1bHRTb3J0Q29udGV4dCk7XG5cbiAgY2xhc3MgU29ydFByb3ZpZGVyIGV4dGVuZHMgQ29tcG9uZW50PFNvcnRQcm92aWRlclByb3BzPiB7XG4gICAgc3RhdGU6IHtcbiAgICAgIHNvcnRPcmRlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgc29ydENvbHVtbjpcbiAgICAgIHwge1xuICAgICAgICBkYXRhRmllbGQ6IHN0cmluZztcbiAgICAgICAgdGV4dDogc3RyaW5nO1xuICAgICAgICBvblNvcnQ6IEZ1bmN0aW9uO1xuICAgICAgICBzb3J0RnVuYzogRnVuY3Rpb247XG4gICAgICB9XG4gICAgICB8IHVuZGVmaW5lZDtcbiAgICB9ID0ge1xuICAgICAgICBzb3J0T3JkZXI6IFNPUlRfQVNDLFxuICAgICAgICBzb3J0Q29sdW1uOiB7XG4gICAgICAgICAgZGF0YUZpZWxkOiBcImlkXCIsXG4gICAgICAgICAgdGV4dDogXCJJRFwiLFxuICAgICAgICAgIG9uU29ydDogKCkgPT4geyB9LFxuICAgICAgICAgIHNvcnRGdW5jOiAoKSA9PiB7IH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgY29uc3RydWN0b3IocHJvcHM6IFNvcnRQcm92aWRlclByb3BzKSB7XG4gICAgICBzdXBlcihwcm9wcyk7XG4gICAgICBjb25zdCB7IGRlZmF1bHRTb3J0ZWQsIGRlZmF1bHRTb3J0RGlyZWN0aW9uLCBzb3J0IH0gPSBwcm9wcztcblxuICAgICAgbGV0IHNvcnRPcmRlcjogYW55O1xuICAgICAgbGV0IHNvcnRDb2x1bW46IGFueTtcblxuICAgICAgaWYgKGRlZmF1bHRTb3J0ZWQgJiYgZGVmYXVsdFNvcnRlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHNvcnRPcmRlciA9IGRlZmF1bHRTb3J0ZWRbMF0ub3JkZXIgfHwgZGVmYXVsdFNvcnREaXJlY3Rpb247XG4gICAgICAgIHNvcnRDb2x1bW4gPSB0aGlzLmluaXRTb3J0KGRlZmF1bHRTb3J0ZWRbMF0uZGF0YUZpZWxkLCBzb3J0T3JkZXIpO1xuICAgICAgfSBlbHNlIGlmIChzb3J0ICYmIHNvcnQuZGF0YUZpZWxkICYmIHNvcnQub3JkZXIpIHtcbiAgICAgICAgc29ydE9yZGVyID0gc29ydC5vcmRlcjtcbiAgICAgICAgc29ydENvbHVtbiA9IHRoaXMuaW5pdFNvcnQoc29ydC5kYXRhRmllbGQsIHNvcnRPcmRlcik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3RhdGUgPSB7IHNvcnRPcmRlciwgc29ydENvbHVtbiB9O1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgY29uc3QgeyBzb3J0T3JkZXIsIHNvcnRDb2x1bW4gfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIGlmIChpc1JlbW90ZVNvcnQoKSAmJiBzb3J0T3JkZXIgJiYgc29ydENvbHVtbikge1xuICAgICAgICBoYW5kbGVTb3J0Q2hhbmdlKHNvcnRDb2x1bW4uZGF0YUZpZWxkLCBzb3J0T3JkZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoXG4gICAgICBuZXh0UHJvcHM6IFNvcnRQcm92aWRlclByb3BzLFxuICAgICAgcHJldlN0YXRlOiBhbnlcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgc29ydCwgY29sdW1ucyB9ID0gbmV4dFByb3BzO1xuXG4gICAgICBpZiAoc29ydCAmJiBzb3J0LmRhdGFGaWVsZCAmJiBzb3J0Lm9yZGVyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc29ydE9yZGVyOiBzb3J0Lm9yZGVyLFxuICAgICAgICAgIHNvcnRDb2x1bW46IGNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wuZGF0YUZpZWxkID09PSBzb3J0LmRhdGFGaWVsZCksXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0U29ydChzb3J0RmllbGQ6IHN0cmluZywgc29ydE9yZGVyOiBzdHJpbmcpIHtcbiAgICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHNvcnRDb2x1bW5zID0gY29sdW1ucy5maWx0ZXIoKGNvbCkgPT4gY29sLmRhdGFGaWVsZCA9PT0gc29ydEZpZWxkKTtcblxuICAgICAgbGV0IHNvcnRDb2x1bW46IGFueTtcblxuICAgICAgaWYgKHNvcnRDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc29ydENvbHVtbiA9IHNvcnRDb2x1bW5zWzBdO1xuICAgICAgICBpZiAoc29ydENvbHVtbi5vblNvcnQpIHtcbiAgICAgICAgICBzb3J0Q29sdW1uLm9uU29ydChzb3J0RmllbGQsIHNvcnRPcmRlcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNvcnRDb2x1bW47XG4gICAgfVxuXG4gICAgaGFuZGxlU29ydCA9IChjb2x1bW46IHsgZGF0YUZpZWxkOiBzdHJpbmc7IG9uU29ydDogRnVuY3Rpb24gfSkgPT4ge1xuICAgICAgY29uc3Qgc29ydE9yZGVyID0gZGF0YU9wZXJhdG9yLm5leHRPcmRlcihcbiAgICAgICAgY29sdW1uLFxuICAgICAgICB0aGlzLnN0YXRlLFxuICAgICAgICB0aGlzLnByb3BzLmRlZmF1bHRTb3J0RGlyZWN0aW9uXG4gICAgICApO1xuXG4gICAgICBpZiAoY29sdW1uLm9uU29ydCkge1xuICAgICAgICBjb2x1bW4ub25Tb3J0KGNvbHVtbi5kYXRhRmllbGQsIHNvcnRPcmRlcik7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1JlbW90ZVNvcnQoKSkge1xuICAgICAgICBoYW5kbGVTb3J0Q2hhbmdlKGNvbHVtbi5kYXRhRmllbGQsIHNvcnRPcmRlcik7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7XG4gICAgICAgIHNvcnRPcmRlcixcbiAgICAgICAgc29ydENvbHVtbjogY29sdW1uLFxuICAgICAgfSkpO1xuICAgIH07XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7IHNvcnQgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IHNvcnRPcmRlciwgc29ydENvbHVtbiB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgbGV0IHsgZGF0YSB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgaWYgKCFpc1JlbW90ZVNvcnQoKSAmJiBzb3J0Q29sdW1uKSB7XG4gICAgICAgIGNvbnN0IHNvcnRGdW5jID0gc29ydENvbHVtbi5zb3J0RnVuY1xuICAgICAgICAgID8gc29ydENvbHVtbi5zb3J0RnVuY1xuICAgICAgICAgIDogc29ydCAmJiBzb3J0LnNvcnRGdW5jO1xuICAgICAgICBkYXRhID0gZGF0YU9wZXJhdG9yLnNvcnQoZGF0YSwgc29ydE9yZGVyLCB7IC4uLnNvcnRDb2x1bW4sIHNvcnRGdW5jIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U29ydENvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgICB2YWx1ZT17e1xuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHNvcnRPcmRlcixcbiAgICAgICAgICAgIG9uU29ydDogdGhpcy5oYW5kbGVTb3J0LFxuICAgICAgICAgICAgc29ydEZpZWxkOiBzb3J0Q29sdW1uID8gc29ydENvbHVtbi5kYXRhRmllbGQgOiBudWxsLFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgPC9Tb3J0Q29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBQcm92aWRlcjogU29ydFByb3ZpZGVyLFxuICAgIENvbnN1bWVyOiBTb3J0Q29udGV4dC5Db25zdW1lcixcbiAgfTtcbn07XG4iLCJpbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCBDb2x1bW5SZXNvbHZlciBmcm9tIFwiLi9jb2x1bW4tcmVzb2x2ZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgKEV4dGVuZEJhc2U6IGFueSkgPT5cbiAgY2xhc3MgVGFibGVSZXNvbHZlciBleHRlbmRzIENvbHVtblJlc29sdmVyKEV4dGVuZEJhc2UpIHtcbiAgICB2YWxpZGF0ZVByb3BzKCkge1xuICAgICAgY29uc3QgeyBrZXlGaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGlmICgha2V5RmllbGQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHNwZWNpZnkgYSBmaWVsZCBhcyBrZXkgdmlhIGtleUZpZWxkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudmlzaWJsZUNvbHVtblNpemUoZmFsc2UpIDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdmlzaWJsZSBjb2x1bW5zIGRldGVjdGVkXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlzRW1wdHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRhLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICB2aXNpYmxlUm93cygpIHtcbiAgICAgIGNvbnN0IHsgZGF0YSwgaGlkZGVuUm93cywga2V5RmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgICBpZiAoIWhpZGRlblJvd3MgfHwgaGlkZGVuUm93cy5sZW5ndGggPT09IDApIHJldHVybiBkYXRhO1xuICAgICAgcmV0dXJuIGRhdGEuZmlsdGVyKChyb3c6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBrZXkgPSBfLmdldChyb3csIGtleUZpZWxkKTtcbiAgICAgICAgcmV0dXJuICFfLmNvbnRhaW5zKGhpZGRlblJvd3MsIGtleSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IElORElDQVRPUl9QT1NJVElPTl9MRUZUIH0gZnJvbSBcIi4vY29uc3RcIjtcbmltcG9ydCBIZWFkZXJDZWxsIGZyb20gXCIuL2hlYWRlci1jZWxsXCI7XG5pbXBvcnQgRXhwYW5kSGVhZGVyQ2VsbCBmcm9tIFwiLi9yb3ctZXhwYW5kL2V4cGFuZC1oZWFkZXItY2VsbFwiO1xuaW1wb3J0IHdpdGhIZWFkZXJFeHBhbnNpb24gZnJvbSBcIi4vcm93LWV4cGFuZC9leHBhbmQtaGVhZGVyLWNlbGwtY29uc3VtZXJcIjtcbmltcG9ydCBTZWxlY3Rpb25IZWFkZXJDZWxsIGZyb20gXCIuL3Jvdy1zZWxlY3Rpb24vc2VsZWN0aW9uLWhlYWRlci1jZWxsXCI7XG5pbXBvcnQgd2l0aEhlYWRlclNlbGVjdGlvbiBmcm9tIFwiLi9yb3ctc2VsZWN0aW9uL3NlbGVjdGlvbi1oZWFkZXItY2VsbC1jb25zdW1lclwiO1xuXG5pbnRlcmZhY2UgSGVhZGVyUHJvcHMge1xuICBjb2x1bW5zOiBhbnlbXTtcbiAgb25Tb3J0PzogKGNvbHVtbjogYW55KSA9PiB2b2lkO1xuICBvbkZpbHRlcj86IChmaWx0ZXJEYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiB2b2lkO1xuICBzb3J0RmllbGQ/OiBzdHJpbmc7XG4gIHNvcnRPcmRlcj86IHN0cmluZztcbiAgc2VsZWN0Um93PzogYW55O1xuICBjdXJyRmlsdGVycz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIG9uRXh0ZXJuYWxGaWx0ZXI/OiAoY29sdW1uOiBhbnksIGZpbHRlclR5cGU6IHN0cmluZykgPT4gKHZhbHVlOiBhbnkpID0+IHZvaWQ7XG4gIGdsb2JhbFNvcnRDYXJldD86IChvcmRlcjogc3RyaW5nLCBjb2x1bW46IGFueSkgPT4gUmVhY3QuUmVhY3ROb2RlO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHdyYXBwZXJDbGFzc2VzPzogc3RyaW5nO1xuICBleHBhbmRSb3c/OiBhbnk7XG4gIGZpbHRlclBvc2l0aW9uPzogc3RyaW5nO1xufVxuXG5jb25zdCBIZWFkZXI6IFJlYWN0LkZDPEhlYWRlclByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NOYW1lLFxuICAgIGNvbHVtbnMsXG4gICAgb25Tb3J0LFxuICAgIG9uRmlsdGVyLFxuICAgIHNvcnRGaWVsZCxcbiAgICBzb3J0T3JkZXIsXG4gICAgc2VsZWN0Um93LFxuICAgIGV4cGFuZFJvdyxcbiAgICBjdXJyRmlsdGVycyxcbiAgICBvbkV4dGVybmFsRmlsdGVyLFxuICAgIGZpbHRlclBvc2l0aW9uLFxuICAgIGdsb2JhbFNvcnRDYXJldCxcbiAgICB3cmFwcGVyQ2xhc3NlcyxcbiAgfSA9IHByb3BzO1xuXG4gIGxldCBTZWxlY3Rpb25IZWFkZXJDZWxsQ29tcDogUmVhY3QuRkMgPSAoKSA9PiBudWxsO1xuICBsZXQgRXhwYW5zaW9uSGVhZGVyQ2VsbENvbXA6IFJlYWN0LkZDID0gKCkgPT4gbnVsbDtcblxuICBpZiAoZXhwYW5kUm93Py5zaG93RXhwYW5kQ29sdW1uKSB7XG4gICAgRXhwYW5zaW9uSGVhZGVyQ2VsbENvbXAgPSB3aXRoSGVhZGVyRXhwYW5zaW9uKEV4cGFuZEhlYWRlckNlbGwpO1xuICB9XG5cbiAgaWYgKHNlbGVjdFJvdykge1xuICAgIFNlbGVjdGlvbkhlYWRlckNlbGxDb21wID0gd2l0aEhlYWRlclNlbGVjdGlvbihTZWxlY3Rpb25IZWFkZXJDZWxsKTtcbiAgfVxuXG4gIGNvbnN0IGlzUmVuZGVyRnVuY3Rpb25Db2x1bW5JbkxlZnQgPSAocG9zaXRpb24gPSBJTkRJQ0FUT1JfUE9TSVRJT05fTEVGVCkgPT5cbiAgICBwb3NpdGlvbiA9PT0gSU5ESUNBVE9SX1BPU0lUSU9OX0xFRlQ7XG5cbiAgY29uc3QgY2hpbGRyZW5zID0gY29sdW1ucy5tYXAoKGNvbHVtbiwgaSkgPT4ge1xuICAgIGNvbnN0IGN1cnJTb3J0ID0gY29sdW1uLmRhdGFGaWVsZCA9PT0gc29ydEZpZWxkO1xuICAgIGNvbnN0IGlzTGFzdFNvcnRpbmcgPSBjb2x1bW4uZGF0YUZpZWxkID09PSBzb3J0RmllbGQ7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEhlYWRlckNlbGxcbiAgICAgICAgaW5kZXg9e2l9XG4gICAgICAgIGtleT17Y29sdW1uLmRhdGFGaWVsZH1cbiAgICAgICAgY29sdW1uPXtjb2x1bW59XG4gICAgICAgIG9uU29ydD17b25Tb3J0fVxuICAgICAgICBzb3J0aW5nPXtjdXJyU29ydH1cbiAgICAgICAgc29ydE9yZGVyPXtzb3J0T3JkZXJ9XG4gICAgICAgIGdsb2JhbFNvcnRDYXJldD17Z2xvYmFsU29ydENhcmV0fVxuICAgICAgICBpc0xhc3RTb3J0aW5nPXtpc0xhc3RTb3J0aW5nfVxuICAgICAgICBvbkZpbHRlcj17b25GaWx0ZXJ9XG4gICAgICAgIGN1cnJGaWx0ZXJzPXtjdXJyRmlsdGVyc31cbiAgICAgICAgb25FeHRlcm5hbEZpbHRlcj17b25FeHRlcm5hbEZpbHRlcn1cbiAgICAgICAgZmlsdGVyUG9zaXRpb249e2ZpbHRlclBvc2l0aW9ufVxuICAgICAgLz5cbiAgICApO1xuICB9KTtcblxuICBpZiAoc2VsZWN0Um93ICYmICFzZWxlY3RSb3cuaGlkZVNlbGVjdENvbHVtbikge1xuICAgIGlmIChpc1JlbmRlckZ1bmN0aW9uQ29sdW1uSW5MZWZ0KHNlbGVjdFJvdy5zZWxlY3RDb2x1bW5Qb3NpdGlvbikpIHtcbiAgICAgIGNoaWxkcmVucy51bnNoaWZ0KDxTZWxlY3Rpb25IZWFkZXJDZWxsQ29tcCBrZXk9XCJzZWxlY3Rpb25cIiAvPik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoaWxkcmVucy5wdXNoKDxTZWxlY3Rpb25IZWFkZXJDZWxsQ29tcCBrZXk9XCJzZWxlY3Rpb25cIiAvPik7XG4gICAgfVxuICB9XG5cbiAgaWYgKGV4cGFuZFJvdz8uc2hvd0V4cGFuZENvbHVtbikge1xuICAgIGlmIChpc1JlbmRlckZ1bmN0aW9uQ29sdW1uSW5MZWZ0KGV4cGFuZFJvdy5leHBhbmRDb2x1bW5Qb3NpdGlvbikpIHtcbiAgICAgIGNoaWxkcmVucy51bnNoaWZ0KDxFeHBhbnNpb25IZWFkZXJDZWxsQ29tcCBrZXk9XCJleHBhbnNpb25cIiAvPik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoaWxkcmVucy5wdXNoKDxFeHBhbnNpb25IZWFkZXJDZWxsQ29tcCBrZXk9XCJleHBhbnNpb25cIiAvPik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8dGhlYWQgY2xhc3NOYW1lPXt3cmFwcGVyQ2xhc3Nlc30+XG4gICAgICA8dHIgY2xhc3NOYW1lPXtjbGFzc05hbWV9PntjaGlsZHJlbnN9PC90cj5cbiAgICA8L3RoZWFkPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgSGVhZGVyO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX181NDQyX187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX182MDAzX187IiwiaW1wb3J0IGNzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY3JlYXRlRXhwYW5zaW9uQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dHMvcm93LWV4cGFuZC1jb250ZXh0XCI7XG5pbXBvcnQgeyBSb3dQcm9wcyB9IGZyb20gXCIuLi9yb3cvc2hvdWxkLXVwZGF0ZXJcIjtcbmltcG9ydCBfIGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IEV4cGFuZFJvdyBmcm9tIFwiLi9leHBhbmQtcm93XCI7XG5cbmNvbnN0IEV4cGFuc2lvbkNvbnRleHQgPSBjcmVhdGVFeHBhbnNpb25Db250ZXh0KCk7XG5cbmV4cG9ydCBkZWZhdWx0IChcbiAgQ29tcG9uZW50OiBSZWFjdC5Db21wb25lbnRUeXBlPFJvd1Byb3BzPlxuKTogUmVhY3QuRkM8Um93UHJvcHM+ID0+IHtcbiAgY29uc3QgcmVuZGVyV2l0aEV4cGFuc2lvbiA9IChcbiAgICBwcm9wczogUm93UHJvcHMsXG4gICAgZXhwYW5kUm93OiBhbnlcbiAgKTogUmVhY3QuUmVhY3ROb2RlW10gPT4ge1xuICAgIGlmICghZXhwYW5kUm93KSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgbGV0IHBhcmVudENsYXNzTmFtZSA9IFwiXCI7XG4gICAgbGV0IGNsYXNzTmFtZSA9IFwiXCI7XG4gICAgY29uc3Qga2V5ID0gcHJvcHMudmFsdWU7XG5cbiAgICBjb25zdCBleHBhbmRlZCA9IF8uY29udGFpbnMoZXhwYW5kUm93LmV4cGFuZGVkLCBrZXkpO1xuICAgIGNvbnN0IGlzQ2xvc2luZyA9IF8uY29udGFpbnMoZXhwYW5kUm93LmlzQ2xvc2luZywga2V5KTtcbiAgICBjb25zdCBleHBhbmRhYmxlID1cbiAgICAgICFleHBhbmRSb3cubm9uRXhwYW5kYWJsZSB8fCAhXy5jb250YWlucyhleHBhbmRSb3cubm9uRXhwYW5kYWJsZSwga2V5KTtcbiAgICBpZiAoZXhwYW5kZWQpIHtcbiAgICAgIHBhcmVudENsYXNzTmFtZSA9IF8uaXNGdW5jdGlvbihleHBhbmRSb3cucGFyZW50Q2xhc3NOYW1lKVxuICAgICAgICA/IGV4cGFuZFJvdy5wYXJlbnRDbGFzc05hbWUoZXhwYW5kZWQsIHByb3BzLnJvdywgcHJvcHMucm93SW5kZXgpXG4gICAgICAgIDogZXhwYW5kUm93LnBhcmVudENsYXNzTmFtZSB8fCBcIlwiO1xuXG4gICAgICBjbGFzc05hbWUgPSBfLmlzRnVuY3Rpb24oZXhwYW5kUm93LmNsYXNzTmFtZSlcbiAgICAgICAgPyBleHBhbmRSb3cuY2xhc3NOYW1lKGV4cGFuZGVkLCBwcm9wcy5yb3csIHByb3BzLnJvd0luZGV4KVxuICAgICAgICA6IGV4cGFuZFJvdy5jbGFzc05hbWUgfHwgXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gW1xuICAgICAgPENvbXBvbmVudFxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgIGV4cGFuZGFibGU9e2V4cGFuZGFibGV9XG4gICAgICAgIGV4cGFuZFJvdz17eyAuLi5leHBhbmRSb3cgfX1cbiAgICAgICAgY2xhc3NOYW1lPXtjcyhwcm9wcy5jbGFzc05hbWUsIHBhcmVudENsYXNzTmFtZSl9XG4gICAgICAvPixcbiAgICAgIGV4cGFuZGVkIHx8IGlzQ2xvc2luZyA/IChcbiAgICAgICAgPEV4cGFuZFJvd1xuICAgICAgICAgIGtleT17YCR7a2V5fS1leHBhbmRpbmdgfVxuICAgICAgICAgIGNvbFNwYW49e3Byb3BzLnZpc2libGVDb2x1bW5TaXplIX1cbiAgICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgICAgb25DbG9zZWQ9eygpID0+IGV4cGFuZFJvdy5vbkNsb3NlZChrZXkpfVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICA+XG4gICAgICAgICAge2V4cGFuZFJvdy5yZW5kZXJlcihwcm9wcy5yb3csIHByb3BzLnJvd0luZGV4KX1cbiAgICAgICAgPC9FeHBhbmRSb3c+XG4gICAgICApIDogbnVsbCxcbiAgICBdO1xuICB9O1xuXG4gIHJldHVybiAocHJvcHMpID0+IChcbiAgICA8RXhwYW5zaW9uQ29udGV4dC5Db25zdW1lcj5cbiAgICAgIHsoZXhwYW5kUm93KSA9PiByZW5kZXJXaXRoRXhwYW5zaW9uKHByb3BzLCBleHBhbmRSb3cpfVxuICAgIDwvRXhwYW5zaW9uQ29udGV4dC5Db25zdW1lcj5cbiAgKTtcbn07XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgRXhwYW5kUm93UHJvcHMsIFNlbGVjdFJvd1Byb3BzIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IFJPV19TRUxFQ1RfRElTQUJMRUQgfSBmcm9tIFwiLi9jb25zdFwiO1xuaW1wb3J0IHdpdGhSb3dFeHBhbnNpb24gZnJvbSBcIi4vcm93LWV4cGFuZC9yb3ctY29uc3VtZXJcIjtcbmltcG9ydCB3aXRoUm93U2VsZWN0aW9uIGZyb20gXCIuL3Jvdy1zZWxlY3Rpb24vcm93LWNvbnN1bWVyXCI7XG5pbXBvcnQgUm93QWdncmVnYXRvciBmcm9tIFwiLi9yb3cvYWdncmVnYXRlLXJvd1wiO1xuaW1wb3J0IFJvd1NlY3Rpb24gZnJvbSBcIi4vcm93L3Jvdy1zZWN0aW9uXCI7XG5pbXBvcnQgeyBSb3dQcm9wcyB9IGZyb20gXCIuL3Jvdy9zaG91bGQtdXBkYXRlclwiO1xuaW1wb3J0IFNpbXBsZVJvdyBmcm9tIFwiLi9yb3cvc2ltcGxlLXJvd1wiO1xuaW1wb3J0IF8gZnJvbSBcIi4vdXRpbHNcIjtcblxuaW50ZXJmYWNlIEJvZHlQcm9wcyB7XG4gIGtleUZpZWxkOiBzdHJpbmc7XG4gIGRhdGE6IGFueVtdO1xuICBjb2x1bW5zOiBhbnlbXTtcbiAgc2VsZWN0Um93PzogU2VsZWN0Um93UHJvcHM8YW55PiB8IHVuZGVmaW5lZDtcbiAgY2VsbEVkaXQ6IGFueTtcbiAgdGFiSW5kZXhDZWxsPzogYm9vbGVhbjtcbiAgaXNFbXB0eT86IGJvb2xlYW47XG4gIG5vRGF0YUluZGljYXRpb24/OlxuICB8ICgoKSA9PiBKU1guRWxlbWVudCB8IHN0cmluZylcbiAgfCBKU1guRWxlbWVudFxuICB8IHN0cmluZ1xuICB8IHVuZGVmaW5lZDtcbiAgdmlzaWJsZUNvbHVtblNpemU/OiBudW1iZXI7XG4gIHJvd1N0eWxlPzpcbiAgfCBSZWFjdC5DU1NQcm9wZXJ0aWVzXG4gIHwgKChyb3c6IGFueSwgaW5kZXg6IG51bWJlcikgPT4gUmVhY3QuQ1NTUHJvcGVydGllcyk7XG4gIHJvd0NsYXNzZXM/OiBzdHJpbmcgfCAoKHJvdzogYW55LCBpbmRleDogbnVtYmVyKSA9PiBzdHJpbmcpO1xuICByb3dFdmVudHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbDtcbiAgZXhwYW5kUm93PzogRXhwYW5kUm93UHJvcHM8YW55LCBhbnk+IHwgdW5kZWZpbmVkO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59XG5cbmNsYXNzIEJvZHkgZXh0ZW5kcyBDb21wb25lbnQ8Qm9keVByb3BzPiB7XG4gIEVkaXRpbmdDZWxsOiBhbnk7XG4gIFJvd0NvbXBvbmVudDogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBCb2R5UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgY29uc3QgeyBrZXlGaWVsZCwgY2VsbEVkaXQsIHNlbGVjdFJvdywgZXhwYW5kUm93IH0gPSBwcm9wcztcblxuICAgIC8vIENvbnN0cnVjdCBFZGl0aW5nIENlbGwgQ29tcG9uZW50XG4gICAgaWYgKGNlbGxFZGl0Py5jcmVhdGVDb250ZXh0KSB7XG4gICAgICB0aGlzLkVkaXRpbmdDZWxsID0gY2VsbEVkaXQuY3JlYXRlRWRpdGluZ0NlbGwoXG4gICAgICAgIF8sXG4gICAgICAgIGNlbGxFZGl0Lm9wdGlvbnMub25TdGFydEVkaXRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQ29uc3RydWN0IFJvdyBDb21wb25lbnRcbiAgICBsZXQgUm93Q29tcG9uZW50OiBhbnkgPSBTaW1wbGVSb3c7XG5cbiAgICBjb25zdCBzZWxlY3RSb3dFbmFibGVkID0gc2VsZWN0Um93Py5tb2RlICE9PSBST1dfU0VMRUNUX0RJU0FCTEVEO1xuICAgIGNvbnN0IGV4cGFuZFJvd0VuYWJsZWQgPSAhIWV4cGFuZFJvdyEucmVuZGVyZXI7XG5cbiAgICBpZiAoZXhwYW5kUm93RW5hYmxlZCkge1xuICAgICAgUm93Q29tcG9uZW50ID0gd2l0aFJvd0V4cGFuc2lvbihSb3dBZ2dyZWdhdG9yKTtcbiAgICB9XG5cbiAgICBpZiAoc2VsZWN0Um93RW5hYmxlZCkge1xuICAgICAgUm93Q29tcG9uZW50ID0gd2l0aFJvd1NlbGVjdGlvbihcbiAgICAgICAgZXhwYW5kUm93RW5hYmxlZCA/IFJvd0NvbXBvbmVudCA6IFJvd0FnZ3JlZ2F0b3JcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGNlbGxFZGl0Py5jcmVhdGVDb250ZXh0KSB7XG4gICAgICBSb3dDb21wb25lbnQgPSBjZWxsRWRpdC53aXRoUm93TGV2ZWxDZWxsRWRpdChcbiAgICAgICAgUm93Q29tcG9uZW50LFxuICAgICAgICBzZWxlY3RSb3dFbmFibGVkLFxuICAgICAgICBrZXlGaWVsZCxcbiAgICAgICAgX1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLlJvd0NvbXBvbmVudCA9IFJvd0NvbXBvbmVudDtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBjb2x1bW5zLFxuICAgICAgZGF0YSxcbiAgICAgIHRhYkluZGV4Q2VsbCxcbiAgICAgIGtleUZpZWxkLFxuICAgICAgaXNFbXB0eSxcbiAgICAgIG5vRGF0YUluZGljYXRpb24sXG4gICAgICB2aXNpYmxlQ29sdW1uU2l6ZSxcbiAgICAgIGNlbGxFZGl0LFxuICAgICAgc2VsZWN0Um93LFxuICAgICAgcm93U3R5bGUsXG4gICAgICByb3dDbGFzc2VzLFxuICAgICAgcm93RXZlbnRzLFxuICAgICAgZXhwYW5kUm93LFxuICAgICAgY2xhc3NOYW1lLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgbGV0IGNvbnRlbnQ6IFJlYWN0Tm9kZTtcblxuICAgIGlmIChpc0VtcHR5KSB7XG4gICAgICBjb25zdCBpbmRpY2F0aW9uID0gXy5pc0Z1bmN0aW9uKG5vRGF0YUluZGljYXRpb24pXG4gICAgICAgID8gbm9EYXRhSW5kaWNhdGlvbigpXG4gICAgICAgIDogbm9EYXRhSW5kaWNhdGlvbjtcbiAgICAgIGlmICghaW5kaWNhdGlvbikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnRlbnQgPSA8Um93U2VjdGlvbiBjb250ZW50PXtpbmRpY2F0aW9ufSBjb2xTcGFuPXt2aXNpYmxlQ29sdW1uU2l6ZX0gLz47XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNlbGVjdFJvd0VuYWJsZWQgPSBzZWxlY3RSb3c/Lm1vZGUgIT09IFJPV19TRUxFQ1RfRElTQUJMRUQ7XG4gICAgICBjb25zdCBleHBhbmRSb3dFbmFibGVkID0gISFleHBhbmRSb3chLnJlbmRlcmVyO1xuXG4gICAgICBjb25zdCBhZGRpdGlvbmFsUm93UHJvcHM6IFJvd1Byb3BzID0ge307XG5cbiAgICAgIGlmIChjZWxsRWRpdD8uY3JlYXRlQ29udGV4dCkge1xuICAgICAgICBhZGRpdGlvbmFsUm93UHJvcHMuRWRpdGluZ0NlbGxDb21wb25lbnQgPSB0aGlzLkVkaXRpbmdDZWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VsZWN0Um93RW5hYmxlZCB8fCBleHBhbmRSb3dFbmFibGVkKSB7XG4gICAgICAgIGFkZGl0aW9uYWxSb3dQcm9wcy5leHBhbmRSb3cgPSBleHBhbmRSb3c7XG4gICAgICAgIGFkZGl0aW9uYWxSb3dQcm9wcy5zZWxlY3RSb3cgPSBzZWxlY3RSb3c7XG4gICAgICB9XG5cbiAgICAgIGNvbnRlbnQgPSBkYXRhLm1hcCgocm93LCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gXy5nZXQocm93LCBrZXlGaWVsZCk7XG4gICAgICAgICAgY29uc3QgYmFzZVJvd1Byb3BzID0ge1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgdGFiSW5kZXhDZWxsLFxuICAgICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICAgIGtleUZpZWxkLFxuICAgICAgICAgICAgY2VsbEVkaXQsXG4gICAgICAgICAgICB2YWx1ZToga2V5LFxuICAgICAgICAgICAgcm93SW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZUNvbHVtblNpemUsXG4gICAgICAgICAgICBhdHRyczogcm93RXZlbnRzIHx8IHt9LFxuICAgICAgICAgICAgLi4uYWRkaXRpb25hbFJvd1Byb3BzLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBiYXNlUm93UHJvcHMuc3R5bGUgPSBfLmlzRnVuY3Rpb24ocm93U3R5bGUpXG4gICAgICAgICAgICA/IChyb3dTdHlsZShyb3csIGluZGV4KSBhcyBhbnkpXG4gICAgICAgICAgICA6IChyb3dTdHlsZSBhcyBhbnkpO1xuICAgICAgICAgIGJhc2VSb3dQcm9wcy5jbGFzc05hbWUgPSBfLmlzRnVuY3Rpb24ocm93Q2xhc3NlcylcbiAgICAgICAgICAgID8gcm93Q2xhc3Nlcyhyb3csIGluZGV4KVxuICAgICAgICAgICAgOiByb3dDbGFzc2VzO1xuXG4gICAgICAgICAgcmV0dXJuIDx0aGlzLlJvd0NvbXBvbmVudCB7Li4uYmFzZVJvd1Byb3BzfSAvPjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIDx0Ym9keSBjbGFzc05hbWU9e2NsYXNzTmFtZX0+e2NvbnRlbnR9PC90Ym9keT47XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQm9keTtcbiIsImZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikge1xuICAgIGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7XG4gICAgICB2YXIgdCA9IGFyZ3VtZW50c1tlXTtcbiAgICAgIGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7XG4gICAgfVxuICAgIHJldHVybiBuO1xuICB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufVxuZXhwb3J0IHsgX2V4dGVuZHMgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHtcbiAgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9O1xuICB2YXIgdCA9IHt9O1xuICBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7XG4gICAgaWYgKC0xICE9PSBlLmluZGV4T2YobikpIGNvbnRpbnVlO1xuICAgIHRbbl0gPSByW25dO1xuICB9XG4gIHJldHVybiB0O1xufVxuZXhwb3J0IHsgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7XG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHtcbiAgICByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0O1xuICB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7XG59XG5leHBvcnQgeyBfc2V0UHJvdG90eXBlT2YgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZnVuY3Rpb24gX2luaGVyaXRzTG9vc2UodCwgbykge1xuICB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoby5wcm90b3R5cGUpLCB0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHQsIHNldFByb3RvdHlwZU9mKHQsIG8pO1xufVxuZXhwb3J0IHsgX2luaGVyaXRzTG9vc2UgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIHJlcGxhY2VDbGFzc05hbWUob3JpZ0NsYXNzLCBjbGFzc1RvUmVtb3ZlKSB7XG4gIHJldHVybiBvcmlnQ2xhc3MucmVwbGFjZShuZXcgUmVnRXhwKFwiKF58XFxcXHMpXCIgKyBjbGFzc1RvUmVtb3ZlICsgXCIoPzpcXFxcc3wkKVwiLCAnZycpLCAnJDEnKS5yZXBsYWNlKC9cXHMrL2csICcgJykucmVwbGFjZSgvXlxccyp8XFxzKiQvZywgJycpO1xufVxuLyoqXG4gKiBSZW1vdmVzIGEgQ1NTIGNsYXNzIGZyb20gYSBnaXZlbiBlbGVtZW50LlxuICogXG4gKiBAcGFyYW0gZWxlbWVudCB0aGUgZWxlbWVudFxuICogQHBhcmFtIGNsYXNzTmFtZSB0aGUgQ1NTIGNsYXNzIG5hbWVcbiAqL1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlbW92ZUNsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xuICBpZiAoZWxlbWVudC5jbGFzc0xpc3QpIHtcbiAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZWxlbWVudC5jbGFzc05hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgZWxlbWVudC5jbGFzc05hbWUgPSByZXBsYWNlQ2xhc3NOYW1lKGVsZW1lbnQuY2xhc3NOYW1lLCBjbGFzc05hbWUpO1xuICB9IGVsc2Uge1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdjbGFzcycsIHJlcGxhY2VDbGFzc05hbWUoZWxlbWVudC5jbGFzc05hbWUgJiYgZWxlbWVudC5jbGFzc05hbWUuYmFzZVZhbCB8fCAnJywgY2xhc3NOYW1lKSk7XG4gIH1cbn0iLCJleHBvcnQgZGVmYXVsdCB7XG4gIGRpc2FibGVkOiBmYWxzZVxufTsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTsiLCJleHBvcnQgdmFyIGZvcmNlUmVmbG93ID0gZnVuY3Rpb24gZm9yY2VSZWZsb3cobm9kZSkge1xuICByZXR1cm4gbm9kZS5zY3JvbGxUb3A7XG59OyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IGNvbmZpZyBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyB0aW1lb3V0c1NoYXBlIH0gZnJvbSAnLi91dGlscy9Qcm9wVHlwZXMnO1xuaW1wb3J0IFRyYW5zaXRpb25Hcm91cENvbnRleHQgZnJvbSAnLi9UcmFuc2l0aW9uR3JvdXBDb250ZXh0JztcbmltcG9ydCB7IGZvcmNlUmVmbG93IH0gZnJvbSAnLi91dGlscy9yZWZsb3cnO1xuZXhwb3J0IHZhciBVTk1PVU5URUQgPSAndW5tb3VudGVkJztcbmV4cG9ydCB2YXIgRVhJVEVEID0gJ2V4aXRlZCc7XG5leHBvcnQgdmFyIEVOVEVSSU5HID0gJ2VudGVyaW5nJztcbmV4cG9ydCB2YXIgRU5URVJFRCA9ICdlbnRlcmVkJztcbmV4cG9ydCB2YXIgRVhJVElORyA9ICdleGl0aW5nJztcbi8qKlxuICogVGhlIFRyYW5zaXRpb24gY29tcG9uZW50IGxldHMgeW91IGRlc2NyaWJlIGEgdHJhbnNpdGlvbiBmcm9tIG9uZSBjb21wb25lbnRcbiAqIHN0YXRlIHRvIGFub3RoZXIgX292ZXIgdGltZV8gd2l0aCBhIHNpbXBsZSBkZWNsYXJhdGl2ZSBBUEkuIE1vc3QgY29tbW9ubHlcbiAqIGl0J3MgdXNlZCB0byBhbmltYXRlIHRoZSBtb3VudGluZyBhbmQgdW5tb3VudGluZyBvZiBhIGNvbXBvbmVudCwgYnV0IGNhbiBhbHNvXG4gKiBiZSB1c2VkIHRvIGRlc2NyaWJlIGluLXBsYWNlIHRyYW5zaXRpb24gc3RhdGVzIGFzIHdlbGwuXG4gKlxuICogLS0tXG4gKlxuICogKipOb3RlKio6IGBUcmFuc2l0aW9uYCBpcyBhIHBsYXRmb3JtLWFnbm9zdGljIGJhc2UgY29tcG9uZW50LiBJZiB5b3UncmUgdXNpbmdcbiAqIHRyYW5zaXRpb25zIGluIENTUywgeW91J2xsIHByb2JhYmx5IHdhbnQgdG8gdXNlXG4gKiBbYENTU1RyYW5zaXRpb25gXShodHRwczovL3JlYWN0Y29tbXVuaXR5Lm9yZy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2Nzcy10cmFuc2l0aW9uKVxuICogaW5zdGVhZC4gSXQgaW5oZXJpdHMgYWxsIHRoZSBmZWF0dXJlcyBvZiBgVHJhbnNpdGlvbmAsIGJ1dCBjb250YWluc1xuICogYWRkaXRpb25hbCBmZWF0dXJlcyBuZWNlc3NhcnkgdG8gcGxheSBuaWNlIHdpdGggQ1NTIHRyYW5zaXRpb25zIChoZW5jZSB0aGVcbiAqIG5hbWUgb2YgdGhlIGNvbXBvbmVudCkuXG4gKlxuICogLS0tXG4gKlxuICogQnkgZGVmYXVsdCB0aGUgYFRyYW5zaXRpb25gIGNvbXBvbmVudCBkb2VzIG5vdCBhbHRlciB0aGUgYmVoYXZpb3Igb2YgdGhlXG4gKiBjb21wb25lbnQgaXQgcmVuZGVycywgaXQgb25seSB0cmFja3MgXCJlbnRlclwiIGFuZCBcImV4aXRcIiBzdGF0ZXMgZm9yIHRoZVxuICogY29tcG9uZW50cy4gSXQncyB1cCB0byB5b3UgdG8gZ2l2ZSBtZWFuaW5nIGFuZCBlZmZlY3QgdG8gdGhvc2Ugc3RhdGVzLiBGb3JcbiAqIGV4YW1wbGUgd2UgY2FuIGFkZCBzdHlsZXMgdG8gYSBjb21wb25lbnQgd2hlbiBpdCBlbnRlcnMgb3IgZXhpdHM6XG4gKlxuICogYGBganN4XG4gKiBpbXBvcnQgeyBUcmFuc2l0aW9uIH0gZnJvbSAncmVhY3QtdHJhbnNpdGlvbi1ncm91cCc7XG4gKlxuICogY29uc3QgZHVyYXRpb24gPSAzMDA7XG4gKlxuICogY29uc3QgZGVmYXVsdFN0eWxlID0ge1xuICogICB0cmFuc2l0aW9uOiBgb3BhY2l0eSAke2R1cmF0aW9ufW1zIGVhc2UtaW4tb3V0YCxcbiAqICAgb3BhY2l0eTogMCxcbiAqIH1cbiAqXG4gKiBjb25zdCB0cmFuc2l0aW9uU3R5bGVzID0ge1xuICogICBlbnRlcmluZzogeyBvcGFjaXR5OiAxIH0sXG4gKiAgIGVudGVyZWQ6ICB7IG9wYWNpdHk6IDEgfSxcbiAqICAgZXhpdGluZzogIHsgb3BhY2l0eTogMCB9LFxuICogICBleGl0ZWQ6ICB7IG9wYWNpdHk6IDAgfSxcbiAqIH07XG4gKlxuICogY29uc3QgRmFkZSA9ICh7IGluOiBpblByb3AgfSkgPT4gKFxuICogICA8VHJhbnNpdGlvbiBpbj17aW5Qcm9wfSB0aW1lb3V0PXtkdXJhdGlvbn0+XG4gKiAgICAge3N0YXRlID0+IChcbiAqICAgICAgIDxkaXYgc3R5bGU9e3tcbiAqICAgICAgICAgLi4uZGVmYXVsdFN0eWxlLFxuICogICAgICAgICAuLi50cmFuc2l0aW9uU3R5bGVzW3N0YXRlXVxuICogICAgICAgfX0+XG4gKiAgICAgICAgIEknbSBhIGZhZGUgVHJhbnNpdGlvbiFcbiAqICAgICAgIDwvZGl2PlxuICogICAgICl9XG4gKiAgIDwvVHJhbnNpdGlvbj5cbiAqICk7XG4gKiBgYGBcbiAqXG4gKiBUaGVyZSBhcmUgNCBtYWluIHN0YXRlcyBhIFRyYW5zaXRpb24gY2FuIGJlIGluOlxuICogIC0gYCdlbnRlcmluZydgXG4gKiAgLSBgJ2VudGVyZWQnYFxuICogIC0gYCdleGl0aW5nJ2BcbiAqICAtIGAnZXhpdGVkJ2BcbiAqXG4gKiBUcmFuc2l0aW9uIHN0YXRlIGlzIHRvZ2dsZWQgdmlhIHRoZSBgaW5gIHByb3AuIFdoZW4gYHRydWVgIHRoZSBjb21wb25lbnRcbiAqIGJlZ2lucyB0aGUgXCJFbnRlclwiIHN0YWdlLiBEdXJpbmcgdGhpcyBzdGFnZSwgdGhlIGNvbXBvbmVudCB3aWxsIHNoaWZ0IGZyb21cbiAqIGl0cyBjdXJyZW50IHRyYW5zaXRpb24gc3RhdGUsIHRvIGAnZW50ZXJpbmcnYCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZVxuICogdHJhbnNpdGlvbiBhbmQgdGhlbiB0byB0aGUgYCdlbnRlcmVkJ2Agc3RhZ2Ugb25jZSBpdCdzIGNvbXBsZXRlLiBMZXQncyB0YWtlXG4gKiB0aGUgZm9sbG93aW5nIGV4YW1wbGUgKHdlJ2xsIHVzZSB0aGVcbiAqIFt1c2VTdGF0ZV0oaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2hvb2tzLXJlZmVyZW5jZS5odG1sI3VzZXN0YXRlKSBob29rKTpcbiAqXG4gKiBgYGBqc3hcbiAqIGZ1bmN0aW9uIEFwcCgpIHtcbiAqICAgY29uc3QgW2luUHJvcCwgc2V0SW5Qcm9wXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAqICAgcmV0dXJuIChcbiAqICAgICA8ZGl2PlxuICogICAgICAgPFRyYW5zaXRpb24gaW49e2luUHJvcH0gdGltZW91dD17NTAwfT5cbiAqICAgICAgICAge3N0YXRlID0+IChcbiAqICAgICAgICAgICAvLyAuLi5cbiAqICAgICAgICAgKX1cbiAqICAgICAgIDwvVHJhbnNpdGlvbj5cbiAqICAgICAgIDxidXR0b24gb25DbGljaz17KCkgPT4gc2V0SW5Qcm9wKHRydWUpfT5cbiAqICAgICAgICAgQ2xpY2sgdG8gRW50ZXJcbiAqICAgICAgIDwvYnV0dG9uPlxuICogICAgIDwvZGl2PlxuICogICApO1xuICogfVxuICogYGBgXG4gKlxuICogV2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQgdGhlIGNvbXBvbmVudCB3aWxsIHNoaWZ0IHRvIHRoZSBgJ2VudGVyaW5nJ2Agc3RhdGVcbiAqIGFuZCBzdGF5IHRoZXJlIGZvciA1MDBtcyAodGhlIHZhbHVlIG9mIGB0aW1lb3V0YCkgYmVmb3JlIGl0IGZpbmFsbHkgc3dpdGNoZXNcbiAqIHRvIGAnZW50ZXJlZCdgLlxuICpcbiAqIFdoZW4gYGluYCBpcyBgZmFsc2VgIHRoZSBzYW1lIHRoaW5nIGhhcHBlbnMgZXhjZXB0IHRoZSBzdGF0ZSBtb3ZlcyBmcm9tXG4gKiBgJ2V4aXRpbmcnYCB0byBgJ2V4aXRlZCdgLlxuICovXG5cbnZhciBUcmFuc2l0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKFRyYW5zaXRpb24sIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFRyYW5zaXRpb24ocHJvcHMsIGNvbnRleHQpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkgfHwgdGhpcztcbiAgICB2YXIgcGFyZW50R3JvdXAgPSBjb250ZXh0OyAvLyBJbiB0aGUgY29udGV4dCBvZiBhIFRyYW5zaXRpb25Hcm91cCBhbGwgZW50ZXJzIGFyZSByZWFsbHkgYXBwZWFyc1xuXG4gICAgdmFyIGFwcGVhciA9IHBhcmVudEdyb3VwICYmICFwYXJlbnRHcm91cC5pc01vdW50aW5nID8gcHJvcHMuZW50ZXIgOiBwcm9wcy5hcHBlYXI7XG4gICAgdmFyIGluaXRpYWxTdGF0dXM7XG4gICAgX3RoaXMuYXBwZWFyU3RhdHVzID0gbnVsbDtcblxuICAgIGlmIChwcm9wcy5pbikge1xuICAgICAgaWYgKGFwcGVhcikge1xuICAgICAgICBpbml0aWFsU3RhdHVzID0gRVhJVEVEO1xuICAgICAgICBfdGhpcy5hcHBlYXJTdGF0dXMgPSBFTlRFUklORztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluaXRpYWxTdGF0dXMgPSBFTlRFUkVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJvcHMudW5tb3VudE9uRXhpdCB8fCBwcm9wcy5tb3VudE9uRW50ZXIpIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1cyA9IFVOTU9VTlRFRDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluaXRpYWxTdGF0dXMgPSBFWElURUQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBzdGF0dXM6IGluaXRpYWxTdGF0dXNcbiAgICB9O1xuICAgIF90aGlzLm5leHRDYWxsYmFjayA9IG51bGw7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgVHJhbnNpdGlvbi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoX3JlZiwgcHJldlN0YXRlKSB7XG4gICAgdmFyIG5leHRJbiA9IF9yZWYuaW47XG5cbiAgICBpZiAobmV4dEluICYmIHByZXZTdGF0ZS5zdGF0dXMgPT09IFVOTU9VTlRFRCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBFWElURURcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUocHJldlByb3BzKSB7XG4gIC8vICAgbGV0IG5leHRTdGF0dXMgPSBudWxsXG4gIC8vICAgaWYgKHByZXZQcm9wcyAhPT0gdGhpcy5wcm9wcykge1xuICAvLyAgICAgY29uc3QgeyBzdGF0dXMgfSA9IHRoaXMuc3RhdGVcbiAgLy8gICAgIGlmICh0aGlzLnByb3BzLmluKSB7XG4gIC8vICAgICAgIGlmIChzdGF0dXMgIT09IEVOVEVSSU5HICYmIHN0YXR1cyAhPT0gRU5URVJFRCkge1xuICAvLyAgICAgICAgIG5leHRTdGF0dXMgPSBFTlRFUklOR1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9IGVsc2Uge1xuICAvLyAgICAgICBpZiAoc3RhdHVzID09PSBFTlRFUklORyB8fCBzdGF0dXMgPT09IEVOVEVSRUQpIHtcbiAgLy8gICAgICAgICBuZXh0U3RhdHVzID0gRVhJVElOR1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyAgIHJldHVybiB7IG5leHRTdGF0dXMgfVxuICAvLyB9XG4gIDtcblxuICB2YXIgX3Byb3RvID0gVHJhbnNpdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy51cGRhdGVTdGF0dXModHJ1ZSwgdGhpcy5hcHBlYXJTdGF0dXMpO1xuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgdmFyIG5leHRTdGF0dXMgPSBudWxsO1xuXG4gICAgaWYgKHByZXZQcm9wcyAhPT0gdGhpcy5wcm9wcykge1xuICAgICAgdmFyIHN0YXR1cyA9IHRoaXMuc3RhdGUuc3RhdHVzO1xuXG4gICAgICBpZiAodGhpcy5wcm9wcy5pbikge1xuICAgICAgICBpZiAoc3RhdHVzICE9PSBFTlRFUklORyAmJiBzdGF0dXMgIT09IEVOVEVSRUQpIHtcbiAgICAgICAgICBuZXh0U3RhdHVzID0gRU5URVJJTkc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzdGF0dXMgPT09IEVOVEVSSU5HIHx8IHN0YXR1cyA9PT0gRU5URVJFRCkge1xuICAgICAgICAgIG5leHRTdGF0dXMgPSBFWElUSU5HO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVTdGF0dXMoZmFsc2UsIG5leHRTdGF0dXMpO1xuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMuY2FuY2VsTmV4dENhbGxiYWNrKCk7XG4gIH07XG5cbiAgX3Byb3RvLmdldFRpbWVvdXRzID0gZnVuY3Rpb24gZ2V0VGltZW91dHMoKSB7XG4gICAgdmFyIHRpbWVvdXQgPSB0aGlzLnByb3BzLnRpbWVvdXQ7XG4gICAgdmFyIGV4aXQsIGVudGVyLCBhcHBlYXI7XG4gICAgZXhpdCA9IGVudGVyID0gYXBwZWFyID0gdGltZW91dDtcblxuICAgIGlmICh0aW1lb3V0ICE9IG51bGwgJiYgdHlwZW9mIHRpbWVvdXQgIT09ICdudW1iZXInKSB7XG4gICAgICBleGl0ID0gdGltZW91dC5leGl0O1xuICAgICAgZW50ZXIgPSB0aW1lb3V0LmVudGVyOyAvLyBUT0RPOiByZW1vdmUgZmFsbGJhY2sgZm9yIG5leHQgbWFqb3JcblxuICAgICAgYXBwZWFyID0gdGltZW91dC5hcHBlYXIgIT09IHVuZGVmaW5lZCA/IHRpbWVvdXQuYXBwZWFyIDogZW50ZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGV4aXQ6IGV4aXQsXG4gICAgICBlbnRlcjogZW50ZXIsXG4gICAgICBhcHBlYXI6IGFwcGVhclxuICAgIH07XG4gIH07XG5cbiAgX3Byb3RvLnVwZGF0ZVN0YXR1cyA9IGZ1bmN0aW9uIHVwZGF0ZVN0YXR1cyhtb3VudGluZywgbmV4dFN0YXR1cykge1xuICAgIGlmIChtb3VudGluZyA9PT0gdm9pZCAwKSB7XG4gICAgICBtb3VudGluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChuZXh0U3RhdHVzICE9PSBudWxsKSB7XG4gICAgICAvLyBuZXh0U3RhdHVzIHdpbGwgYWx3YXlzIGJlIEVOVEVSSU5HIG9yIEVYSVRJTkcuXG4gICAgICB0aGlzLmNhbmNlbE5leHRDYWxsYmFjaygpO1xuXG4gICAgICBpZiAobmV4dFN0YXR1cyA9PT0gRU5URVJJTkcpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMudW5tb3VudE9uRXhpdCB8fCB0aGlzLnByb3BzLm1vdW50T25FbnRlcikge1xuICAgICAgICAgIHZhciBub2RlID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gdGhpcy5wcm9wcy5ub2RlUmVmLmN1cnJlbnQgOiBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9wdWxsLzc0OVxuICAgICAgICAgIC8vIFdpdGggdW5tb3VudE9uRXhpdCBvciBtb3VudE9uRW50ZXIsIHRoZSBlbnRlciBhbmltYXRpb24gc2hvdWxkIGhhcHBlbiBhdCB0aGUgdHJhbnNpdGlvbiBiZXR3ZWVuIGBleGl0ZWRgIGFuZCBgZW50ZXJpbmdgLlxuICAgICAgICAgIC8vIFRvIG1ha2UgdGhlIGFuaW1hdGlvbiBoYXBwZW4sICB3ZSBoYXZlIHRvIHNlcGFyYXRlIGVhY2ggcmVuZGVyaW5nIGFuZCBhdm9pZCBiZWluZyBwcm9jZXNzZWQgYXMgYmF0Y2hlZC5cblxuICAgICAgICAgIGlmIChub2RlKSBmb3JjZVJlZmxvdyhub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGVyZm9ybUVudGVyKG1vdW50aW5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGVyZm9ybUV4aXQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMudW5tb3VudE9uRXhpdCAmJiB0aGlzLnN0YXRlLnN0YXR1cyA9PT0gRVhJVEVEKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc3RhdHVzOiBVTk1PVU5URURcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucGVyZm9ybUVudGVyID0gZnVuY3Rpb24gcGVyZm9ybUVudGVyKG1vdW50aW5nKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgZW50ZXIgPSB0aGlzLnByb3BzLmVudGVyO1xuICAgIHZhciBhcHBlYXJpbmcgPSB0aGlzLmNvbnRleHQgPyB0aGlzLmNvbnRleHQuaXNNb3VudGluZyA6IG1vdW50aW5nO1xuXG4gICAgdmFyIF9yZWYyID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gW2FwcGVhcmluZ10gOiBbUmVhY3RET00uZmluZERPTU5vZGUodGhpcyksIGFwcGVhcmluZ10sXG4gICAgICAgIG1heWJlTm9kZSA9IF9yZWYyWzBdLFxuICAgICAgICBtYXliZUFwcGVhcmluZyA9IF9yZWYyWzFdO1xuXG4gICAgdmFyIHRpbWVvdXRzID0gdGhpcy5nZXRUaW1lb3V0cygpO1xuICAgIHZhciBlbnRlclRpbWVvdXQgPSBhcHBlYXJpbmcgPyB0aW1lb3V0cy5hcHBlYXIgOiB0aW1lb3V0cy5lbnRlcjsgLy8gbm8gZW50ZXIgYW5pbWF0aW9uIHNraXAgcmlnaHQgdG8gRU5URVJFRFxuICAgIC8vIGlmIHdlIGFyZSBtb3VudGluZyBhbmQgcnVubmluZyB0aGlzIGl0IG1lYW5zIGFwcGVhciBfbXVzdF8gYmUgc2V0XG5cbiAgICBpZiAoIW1vdW50aW5nICYmICFlbnRlciB8fCBjb25maWcuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2FmZVNldFN0YXRlKHtcbiAgICAgICAgc3RhdHVzOiBFTlRFUkVEXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5wcm9wcy5vbkVudGVyZWQobWF5YmVOb2RlKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHJvcHMub25FbnRlcihtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcbiAgICB0aGlzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICBzdGF0dXM6IEVOVEVSSU5HXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMyLnByb3BzLm9uRW50ZXJpbmcobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG5cbiAgICAgIF90aGlzMi5vblRyYW5zaXRpb25FbmQoZW50ZXJUaW1lb3V0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5zYWZlU2V0U3RhdGUoe1xuICAgICAgICAgIHN0YXR1czogRU5URVJFRFxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMyLnByb3BzLm9uRW50ZXJlZChtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ucGVyZm9ybUV4aXQgPSBmdW5jdGlvbiBwZXJmb3JtRXhpdCgpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHZhciBleGl0ID0gdGhpcy5wcm9wcy5leGl0O1xuICAgIHZhciB0aW1lb3V0cyA9IHRoaXMuZ2V0VGltZW91dHMoKTtcbiAgICB2YXIgbWF5YmVOb2RlID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gdW5kZWZpbmVkIDogUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7IC8vIG5vIGV4aXQgYW5pbWF0aW9uIHNraXAgcmlnaHQgdG8gRVhJVEVEXG5cbiAgICBpZiAoIWV4aXQgfHwgY29uZmlnLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgIHN0YXR1czogRVhJVEVEXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMy5wcm9wcy5vbkV4aXRlZChtYXliZU5vZGUpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wcm9wcy5vbkV4aXQobWF5YmVOb2RlKTtcbiAgICB0aGlzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICBzdGF0dXM6IEVYSVRJTkdcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczMucHJvcHMub25FeGl0aW5nKG1heWJlTm9kZSk7XG5cbiAgICAgIF90aGlzMy5vblRyYW5zaXRpb25FbmQodGltZW91dHMuZXhpdCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczMuc2FmZVNldFN0YXRlKHtcbiAgICAgICAgICBzdGF0dXM6IEVYSVRFRFxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMzLnByb3BzLm9uRXhpdGVkKG1heWJlTm9kZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNhbmNlbE5leHRDYWxsYmFjayA9IGZ1bmN0aW9uIGNhbmNlbE5leHRDYWxsYmFjaygpIHtcbiAgICBpZiAodGhpcy5uZXh0Q2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHRoaXMubmV4dENhbGxiYWNrLmNhbmNlbCgpO1xuICAgICAgdGhpcy5uZXh0Q2FsbGJhY2sgPSBudWxsO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uc2FmZVNldFN0YXRlID0gZnVuY3Rpb24gc2FmZVNldFN0YXRlKG5leHRTdGF0ZSwgY2FsbGJhY2spIHtcbiAgICAvLyBUaGlzIHNob3VsZG4ndCBiZSBuZWNlc3NhcnksIGJ1dCB0aGVyZSBhcmUgd2VpcmQgcmFjZSBjb25kaXRpb25zIHdpdGhcbiAgICAvLyBzZXRTdGF0ZSBjYWxsYmFja3MgYW5kIHVubW91bnRpbmcgaW4gdGVzdGluZywgc28gYWx3YXlzIG1ha2Ugc3VyZSB0aGF0XG4gICAgLy8gd2UgY2FuIGNhbmNlbCBhbnkgcGVuZGluZyBzZXRTdGF0ZSBjYWxsYmFja3MgYWZ0ZXIgd2UgdW5tb3VudC5cbiAgICBjYWxsYmFjayA9IHRoaXMuc2V0TmV4dENhbGxiYWNrKGNhbGxiYWNrKTtcbiAgICB0aGlzLnNldFN0YXRlKG5leHRTdGF0ZSwgY2FsbGJhY2spO1xuICB9O1xuXG4gIF9wcm90by5zZXROZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbiBzZXROZXh0Q2FsbGJhY2soY2FsbGJhY2spIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgIHZhciBhY3RpdmUgPSB0cnVlO1xuXG4gICAgdGhpcy5uZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChhY3RpdmUpIHtcbiAgICAgICAgYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIF90aGlzNC5uZXh0Q2FsbGJhY2sgPSBudWxsO1xuICAgICAgICBjYWxsYmFjayhldmVudCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMubmV4dENhbGxiYWNrLmNhbmNlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGFjdGl2ZSA9IGZhbHNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5uZXh0Q2FsbGJhY2s7XG4gIH07XG5cbiAgX3Byb3RvLm9uVHJhbnNpdGlvbkVuZCA9IGZ1bmN0aW9uIG9uVHJhbnNpdGlvbkVuZCh0aW1lb3V0LCBoYW5kbGVyKSB7XG4gICAgdGhpcy5zZXROZXh0Q2FsbGJhY2soaGFuZGxlcik7XG4gICAgdmFyIG5vZGUgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyB0aGlzLnByb3BzLm5vZGVSZWYuY3VycmVudCA6IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpO1xuICAgIHZhciBkb2VzTm90SGF2ZVRpbWVvdXRPckxpc3RlbmVyID0gdGltZW91dCA9PSBudWxsICYmICF0aGlzLnByb3BzLmFkZEVuZExpc3RlbmVyO1xuXG4gICAgaWYgKCFub2RlIHx8IGRvZXNOb3RIYXZlVGltZW91dE9yTGlzdGVuZXIpIHtcbiAgICAgIHNldFRpbWVvdXQodGhpcy5uZXh0Q2FsbGJhY2ssIDApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLmFkZEVuZExpc3RlbmVyKSB7XG4gICAgICB2YXIgX3JlZjMgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyBbdGhpcy5uZXh0Q2FsbGJhY2tdIDogW25vZGUsIHRoaXMubmV4dENhbGxiYWNrXSxcbiAgICAgICAgICBtYXliZU5vZGUgPSBfcmVmM1swXSxcbiAgICAgICAgICBtYXliZU5leHRDYWxsYmFjayA9IF9yZWYzWzFdO1xuXG4gICAgICB0aGlzLnByb3BzLmFkZEVuZExpc3RlbmVyKG1heWJlTm9kZSwgbWF5YmVOZXh0Q2FsbGJhY2spO1xuICAgIH1cblxuICAgIGlmICh0aW1lb3V0ICE9IG51bGwpIHtcbiAgICAgIHNldFRpbWVvdXQodGhpcy5uZXh0Q2FsbGJhY2ssIHRpbWVvdXQpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBzdGF0dXMgPSB0aGlzLnN0YXRlLnN0YXR1cztcblxuICAgIGlmIChzdGF0dXMgPT09IFVOTU9VTlRFRCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgX2luID0gX3RoaXMkcHJvcHMuaW4sXG4gICAgICAgIF9tb3VudE9uRW50ZXIgPSBfdGhpcyRwcm9wcy5tb3VudE9uRW50ZXIsXG4gICAgICAgIF91bm1vdW50T25FeGl0ID0gX3RoaXMkcHJvcHMudW5tb3VudE9uRXhpdCxcbiAgICAgICAgX2FwcGVhciA9IF90aGlzJHByb3BzLmFwcGVhcixcbiAgICAgICAgX2VudGVyID0gX3RoaXMkcHJvcHMuZW50ZXIsXG4gICAgICAgIF9leGl0ID0gX3RoaXMkcHJvcHMuZXhpdCxcbiAgICAgICAgX3RpbWVvdXQgPSBfdGhpcyRwcm9wcy50aW1lb3V0LFxuICAgICAgICBfYWRkRW5kTGlzdGVuZXIgPSBfdGhpcyRwcm9wcy5hZGRFbmRMaXN0ZW5lcixcbiAgICAgICAgX29uRW50ZXIgPSBfdGhpcyRwcm9wcy5vbkVudGVyLFxuICAgICAgICBfb25FbnRlcmluZyA9IF90aGlzJHByb3BzLm9uRW50ZXJpbmcsXG4gICAgICAgIF9vbkVudGVyZWQgPSBfdGhpcyRwcm9wcy5vbkVudGVyZWQsXG4gICAgICAgIF9vbkV4aXQgPSBfdGhpcyRwcm9wcy5vbkV4aXQsXG4gICAgICAgIF9vbkV4aXRpbmcgPSBfdGhpcyRwcm9wcy5vbkV4aXRpbmcsXG4gICAgICAgIF9vbkV4aXRlZCA9IF90aGlzJHByb3BzLm9uRXhpdGVkLFxuICAgICAgICBfbm9kZVJlZiA9IF90aGlzJHByb3BzLm5vZGVSZWYsXG4gICAgICAgIGNoaWxkUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wiY2hpbGRyZW5cIiwgXCJpblwiLCBcIm1vdW50T25FbnRlclwiLCBcInVubW91bnRPbkV4aXRcIiwgXCJhcHBlYXJcIiwgXCJlbnRlclwiLCBcImV4aXRcIiwgXCJ0aW1lb3V0XCIsIFwiYWRkRW5kTGlzdGVuZXJcIiwgXCJvbkVudGVyXCIsIFwib25FbnRlcmluZ1wiLCBcIm9uRW50ZXJlZFwiLCBcIm9uRXhpdFwiLCBcIm9uRXhpdGluZ1wiLCBcIm9uRXhpdGVkXCIsIFwibm9kZVJlZlwiXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgLyojX19QVVJFX18qL1xuICAgICAgLy8gYWxsb3dzIGZvciBuZXN0ZWQgVHJhbnNpdGlvbnNcbiAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgfSwgdHlwZW9mIGNoaWxkcmVuID09PSAnZnVuY3Rpb24nID8gY2hpbGRyZW4oc3RhdHVzLCBjaGlsZFByb3BzKSA6IFJlYWN0LmNsb25lRWxlbWVudChSZWFjdC5DaGlsZHJlbi5vbmx5KGNoaWxkcmVuKSwgY2hpbGRQcm9wcykpXG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gVHJhbnNpdGlvbjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuVHJhbnNpdGlvbi5jb250ZXh0VHlwZSA9IFRyYW5zaXRpb25Hcm91cENvbnRleHQ7XG5UcmFuc2l0aW9uLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgLyoqXG4gICAqIEEgUmVhY3QgcmVmZXJlbmNlIHRvIERPTSBlbGVtZW50IHRoYXQgbmVlZCB0byB0cmFuc2l0aW9uOlxuICAgKiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNTExMjcxMzAvNDY3MTkzMlxuICAgKlxuICAgKiAgIC0gV2hlbiBgbm9kZVJlZmAgcHJvcCBpcyB1c2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZCB0byBjYWxsYmFjayBmdW5jdGlvbnNcbiAgICogICAgICAoZS5nLiBgb25FbnRlcmApIGJlY2F1c2UgdXNlciBhbHJlYWR5IGhhcyBkaXJlY3QgYWNjZXNzIHRvIHRoZSBub2RlLlxuICAgKiAgIC0gV2hlbiBjaGFuZ2luZyBga2V5YCBwcm9wIG9mIGBUcmFuc2l0aW9uYCBpbiBhIGBUcmFuc2l0aW9uR3JvdXBgIGEgbmV3XG4gICAqICAgICBgbm9kZVJlZmAgbmVlZCB0byBiZSBwcm92aWRlZCB0byBgVHJhbnNpdGlvbmAgd2l0aCBjaGFuZ2VkIGBrZXlgIHByb3BcbiAgICogICAgIChzZWVcbiAgICogICAgIFt0ZXN0L0NTU1RyYW5zaXRpb24tdGVzdC5qc10oaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9ibG9iLzEzNDM1Zjg5N2IzYWI3MWY2ZTE5ZDcyNGYxNDU1OTZmNTkxMDU4MWMvdGVzdC9DU1NUcmFuc2l0aW9uLXRlc3QuanMjTDM2Mi1MNDM3KSkuXG4gICAqL1xuICBub2RlUmVmOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGN1cnJlbnQ6IHR5cGVvZiBFbGVtZW50ID09PSAndW5kZWZpbmVkJyA/IFByb3BUeXBlcy5hbnkgOiBmdW5jdGlvbiAocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgdmFyIHZhbHVlID0gcHJvcFZhbHVlW2tleV07XG4gICAgICByZXR1cm4gUHJvcFR5cGVzLmluc3RhbmNlT2YodmFsdWUgJiYgJ293bmVyRG9jdW1lbnQnIGluIHZhbHVlID8gdmFsdWUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5FbGVtZW50IDogRWxlbWVudCkocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCk7XG4gICAgfVxuICB9KSxcblxuICAvKipcbiAgICogQSBgZnVuY3Rpb25gIGNoaWxkIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgYSBSZWFjdCBlbGVtZW50LiBUaGlzIGZ1bmN0aW9uIGlzXG4gICAqIGNhbGxlZCB3aXRoIHRoZSBjdXJyZW50IHRyYW5zaXRpb24gc3RhdHVzIChgJ2VudGVyaW5nJ2AsIGAnZW50ZXJlZCdgLFxuICAgKiBgJ2V4aXRpbmcnYCwgYCdleGl0ZWQnYCksIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGFwcGx5IGNvbnRleHRcbiAgICogc3BlY2lmaWMgcHJvcHMgdG8gYSBjb21wb25lbnQuXG4gICAqXG4gICAqIGBgYGpzeFxuICAgKiA8VHJhbnNpdGlvbiBpbj17dGhpcy5zdGF0ZS5pbn0gdGltZW91dD17MTUwfT5cbiAgICogICB7c3RhdGUgPT4gKFxuICAgKiAgICAgPE15Q29tcG9uZW50IGNsYXNzTmFtZT17YGZhZGUgZmFkZS0ke3N0YXRlfWB9IC8+XG4gICAqICAgKX1cbiAgICogPC9UcmFuc2l0aW9uPlxuICAgKiBgYGBcbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICogU2hvdyB0aGUgY29tcG9uZW50OyB0cmlnZ2VycyB0aGUgZW50ZXIgb3IgZXhpdCBzdGF0ZXNcbiAgICovXG4gIGluOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQnkgZGVmYXVsdCB0aGUgY2hpbGQgY29tcG9uZW50IGlzIG1vdW50ZWQgaW1tZWRpYXRlbHkgYWxvbmcgd2l0aFxuICAgKiB0aGUgcGFyZW50IGBUcmFuc2l0aW9uYCBjb21wb25lbnQuIElmIHlvdSB3YW50IHRvIFwibGF6eSBtb3VudFwiIHRoZSBjb21wb25lbnQgb24gdGhlXG4gICAqIGZpcnN0IGBpbj17dHJ1ZX1gIHlvdSBjYW4gc2V0IGBtb3VudE9uRW50ZXJgLiBBZnRlciB0aGUgZmlyc3QgZW50ZXIgdHJhbnNpdGlvbiB0aGUgY29tcG9uZW50IHdpbGwgc3RheVxuICAgKiBtb3VudGVkLCBldmVuIG9uIFwiZXhpdGVkXCIsIHVubGVzcyB5b3UgYWxzbyBzcGVjaWZ5IGB1bm1vdW50T25FeGl0YC5cbiAgICovXG4gIG1vdW50T25FbnRlcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGNoaWxkIGNvbXBvbmVudCBzdGF5cyBtb3VudGVkIGFmdGVyIGl0IHJlYWNoZXMgdGhlIGAnZXhpdGVkJ2Agc3RhdGUuXG4gICAqIFNldCBgdW5tb3VudE9uRXhpdGAgaWYgeW91J2QgcHJlZmVyIHRvIHVubW91bnQgdGhlIGNvbXBvbmVudCBhZnRlciBpdCBmaW5pc2hlcyBleGl0aW5nLlxuICAgKi9cbiAgdW5tb3VudE9uRXhpdDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGNoaWxkIGNvbXBvbmVudCBkb2VzIG5vdCBwZXJmb3JtIHRoZSBlbnRlciB0cmFuc2l0aW9uIHdoZW5cbiAgICogaXQgZmlyc3QgbW91bnRzLCByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBvZiBgaW5gLiBJZiB5b3Ugd2FudCB0aGlzXG4gICAqIGJlaGF2aW9yLCBzZXQgYm90aCBgYXBwZWFyYCBhbmQgYGluYCB0byBgdHJ1ZWAuXG4gICAqXG4gICAqID4gKipOb3RlKio6IHRoZXJlIGFyZSBubyBzcGVjaWFsIGFwcGVhciBzdGF0ZXMgbGlrZSBgYXBwZWFyaW5nYC9gYXBwZWFyZWRgLCB0aGlzIHByb3BcbiAgICogPiBvbmx5IGFkZHMgYW4gYWRkaXRpb25hbCBlbnRlciB0cmFuc2l0aW9uLiBIb3dldmVyLCBpbiB0aGVcbiAgICogPiBgPENTU1RyYW5zaXRpb24+YCBjb21wb25lbnQgdGhhdCBmaXJzdCBlbnRlciB0cmFuc2l0aW9uIGRvZXMgcmVzdWx0IGluXG4gICAqID4gYWRkaXRpb25hbCBgLmFwcGVhci0qYCBjbGFzc2VzLCB0aGF0IHdheSB5b3UgY2FuIGNob29zZSB0byBzdHlsZSBpdFxuICAgKiA+IGRpZmZlcmVudGx5LlxuICAgKi9cbiAgYXBwZWFyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogRW5hYmxlIG9yIGRpc2FibGUgZW50ZXIgdHJhbnNpdGlvbnMuXG4gICAqL1xuICBlbnRlcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIGV4aXQgdHJhbnNpdGlvbnMuXG4gICAqL1xuICBleGl0OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIGR1cmF0aW9uIG9mIHRoZSB0cmFuc2l0aW9uLCBpbiBtaWxsaXNlY29uZHMuXG4gICAqIFJlcXVpcmVkIHVubGVzcyBgYWRkRW5kTGlzdGVuZXJgIGlzIHByb3ZpZGVkLlxuICAgKlxuICAgKiBZb3UgbWF5IHNwZWNpZnkgYSBzaW5nbGUgdGltZW91dCBmb3IgYWxsIHRyYW5zaXRpb25zOlxuICAgKlxuICAgKiBgYGBqc3hcbiAgICogdGltZW91dD17NTAwfVxuICAgKiBgYGBcbiAgICpcbiAgICogb3IgaW5kaXZpZHVhbGx5OlxuICAgKlxuICAgKiBgYGBqc3hcbiAgICogdGltZW91dD17e1xuICAgKiAgYXBwZWFyOiA1MDAsXG4gICAqICBlbnRlcjogMzAwLFxuICAgKiAgZXhpdDogNTAwLFxuICAgKiB9fVxuICAgKiBgYGBcbiAgICpcbiAgICogLSBgYXBwZWFyYCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgb2YgYGVudGVyYFxuICAgKiAtIGBlbnRlcmAgZGVmYXVsdHMgdG8gYDBgXG4gICAqIC0gYGV4aXRgIGRlZmF1bHRzIHRvIGAwYFxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyIHwgeyBlbnRlcj86IG51bWJlciwgZXhpdD86IG51bWJlciwgYXBwZWFyPzogbnVtYmVyIH19XG4gICAqL1xuICB0aW1lb3V0OiBmdW5jdGlvbiB0aW1lb3V0KHByb3BzKSB7XG4gICAgdmFyIHB0ID0gdGltZW91dHNTaGFwZTtcbiAgICBpZiAoIXByb3BzLmFkZEVuZExpc3RlbmVyKSBwdCA9IHB0LmlzUmVxdWlyZWQ7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHQuYXBwbHkodm9pZCAwLCBbcHJvcHNdLmNvbmNhdChhcmdzKSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEFkZCBhIGN1c3RvbSB0cmFuc2l0aW9uIGVuZCB0cmlnZ2VyLiBDYWxsZWQgd2l0aCB0aGUgdHJhbnNpdGlvbmluZ1xuICAgKiBET00gbm9kZSBhbmQgYSBgZG9uZWAgY2FsbGJhY2suIEFsbG93cyBmb3IgbW9yZSBmaW5lIGdyYWluZWQgdHJhbnNpdGlvbiBlbmRcbiAgICogbG9naWMuIFRpbWVvdXRzIGFyZSBzdGlsbCB1c2VkIGFzIGEgZmFsbGJhY2sgaWYgcHJvdmlkZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIGBgYGpzeFxuICAgKiBhZGRFbmRMaXN0ZW5lcj17KG5vZGUsIGRvbmUpID0+IHtcbiAgICogICAvLyB1c2UgdGhlIGNzcyB0cmFuc2l0aW9uZW5kIGV2ZW50IHRvIG1hcmsgdGhlIGZpbmlzaCBvZiBhIHRyYW5zaXRpb25cbiAgICogICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBkb25lLCBmYWxzZSk7XG4gICAqIH19XG4gICAqIGBgYFxuICAgKi9cbiAgYWRkRW5kTGlzdGVuZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBiZWZvcmUgdGhlIFwiZW50ZXJpbmdcIiBzdGF0dXMgaXMgYXBwbGllZC4gQW4gZXh0cmEgcGFyYW1ldGVyXG4gICAqIGBpc0FwcGVhcmluZ2AgaXMgc3VwcGxpZWQgdG8gaW5kaWNhdGUgaWYgdGhlIGVudGVyIHN0YWdlIGlzIG9jY3VycmluZyBvbiB0aGUgaW5pdGlhbCBtb3VudFxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpIC0+IHZvaWRcbiAgICovXG4gIG9uRW50ZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBhZnRlciB0aGUgXCJlbnRlcmluZ1wiIHN0YXR1cyBpcyBhcHBsaWVkLiBBbiBleHRyYSBwYXJhbWV0ZXJcbiAgICogYGlzQXBwZWFyaW5nYCBpcyBzdXBwbGllZCB0byBpbmRpY2F0ZSBpZiB0aGUgZW50ZXIgc3RhZ2UgaXMgb2NjdXJyaW5nIG9uIHRoZSBpbml0aWFsIG1vdW50XG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbClcbiAgICovXG4gIG9uRW50ZXJpbmc6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBhZnRlciB0aGUgXCJlbnRlcmVkXCIgc3RhdHVzIGlzIGFwcGxpZWQuIEFuIGV4dHJhIHBhcmFtZXRlclxuICAgKiBgaXNBcHBlYXJpbmdgIGlzIHN1cHBsaWVkIHRvIGluZGljYXRlIGlmIHRoZSBlbnRlciBzdGFnZSBpcyBvY2N1cnJpbmcgb24gdGhlIGluaXRpYWwgbW91bnRcbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKSAtPiB2b2lkXG4gICAqL1xuICBvbkVudGVyZWQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBiZWZvcmUgdGhlIFwiZXhpdGluZ1wiIHN0YXR1cyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCkgLT4gdm9pZFxuICAgKi9cbiAgb25FeGl0OiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYWZ0ZXIgdGhlIFwiZXhpdGluZ1wiIHN0YXR1cyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCkgLT4gdm9pZFxuICAgKi9cbiAgb25FeGl0aW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYWZ0ZXIgdGhlIFwiZXhpdGVkXCIgc3RhdHVzIGlzIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWRcbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpIC0+IHZvaWRcbiAgICovXG4gIG9uRXhpdGVkOiBQcm9wVHlwZXMuZnVuY1xufSA6IHt9OyAvLyBOYW1lIHRoZSBmdW5jdGlvbiBzbyBpdCBpcyBjbGVhcmVyIGluIHRoZSBkb2N1bWVudGF0aW9uXG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5UcmFuc2l0aW9uLmRlZmF1bHRQcm9wcyA9IHtcbiAgaW46IGZhbHNlLFxuICBtb3VudE9uRW50ZXI6IGZhbHNlLFxuICB1bm1vdW50T25FeGl0OiBmYWxzZSxcbiAgYXBwZWFyOiBmYWxzZSxcbiAgZW50ZXI6IHRydWUsXG4gIGV4aXQ6IHRydWUsXG4gIG9uRW50ZXI6IG5vb3AsXG4gIG9uRW50ZXJpbmc6IG5vb3AsXG4gIG9uRW50ZXJlZDogbm9vcCxcbiAgb25FeGl0OiBub29wLFxuICBvbkV4aXRpbmc6IG5vb3AsXG4gIG9uRXhpdGVkOiBub29wXG59O1xuVHJhbnNpdGlvbi5VTk1PVU5URUQgPSBVTk1PVU5URUQ7XG5UcmFuc2l0aW9uLkVYSVRFRCA9IEVYSVRFRDtcblRyYW5zaXRpb24uRU5URVJJTkcgPSBFTlRFUklORztcblRyYW5zaXRpb24uRU5URVJFRCA9IEVOVEVSRUQ7XG5UcmFuc2l0aW9uLkVYSVRJTkcgPSBFWElUSU5HO1xuZXhwb3J0IGRlZmF1bHQgVHJhbnNpdGlvbjsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGFkZE9uZUNsYXNzIGZyb20gJ2RvbS1oZWxwZXJzL2FkZENsYXNzJztcbmltcG9ydCByZW1vdmVPbmVDbGFzcyBmcm9tICdkb20taGVscGVycy9yZW1vdmVDbGFzcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFRyYW5zaXRpb24gZnJvbSAnLi9UcmFuc2l0aW9uJztcbmltcG9ydCB7IGNsYXNzTmFtZXNTaGFwZSB9IGZyb20gJy4vdXRpbHMvUHJvcFR5cGVzJztcbmltcG9ydCB7IGZvcmNlUmVmbG93IH0gZnJvbSAnLi91dGlscy9yZWZsb3cnO1xuXG52YXIgX2FkZENsYXNzID0gZnVuY3Rpb24gYWRkQ2xhc3Mobm9kZSwgY2xhc3Nlcykge1xuICByZXR1cm4gbm9kZSAmJiBjbGFzc2VzICYmIGNsYXNzZXMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIGFkZE9uZUNsYXNzKG5vZGUsIGMpO1xuICB9KTtcbn07XG5cbnZhciByZW1vdmVDbGFzcyA9IGZ1bmN0aW9uIHJlbW92ZUNsYXNzKG5vZGUsIGNsYXNzZXMpIHtcbiAgcmV0dXJuIG5vZGUgJiYgY2xhc3NlcyAmJiBjbGFzc2VzLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiByZW1vdmVPbmVDbGFzcyhub2RlLCBjKTtcbiAgfSk7XG59O1xuLyoqXG4gKiBBIHRyYW5zaXRpb24gY29tcG9uZW50IGluc3BpcmVkIGJ5IHRoZSBleGNlbGxlbnRcbiAqIFtuZy1hbmltYXRlXShodHRwczovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmdBbmltYXRlKSBsaWJyYXJ5LCB5b3Ugc2hvdWxkXG4gKiB1c2UgaXQgaWYgeW91J3JlIHVzaW5nIENTUyB0cmFuc2l0aW9ucyBvciBhbmltYXRpb25zLiBJdCdzIGJ1aWx0IHVwb24gdGhlXG4gKiBbYFRyYW5zaXRpb25gXShodHRwczovL3JlYWN0Y29tbXVuaXR5Lm9yZy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL3RyYW5zaXRpb24pXG4gKiBjb21wb25lbnQsIHNvIGl0IGluaGVyaXRzIGFsbCBvZiBpdHMgcHJvcHMuXG4gKlxuICogYENTU1RyYW5zaXRpb25gIGFwcGxpZXMgYSBwYWlyIG9mIGNsYXNzIG5hbWVzIGR1cmluZyB0aGUgYGFwcGVhcmAsIGBlbnRlcmAsXG4gKiBhbmQgYGV4aXRgIHN0YXRlcyBvZiB0aGUgdHJhbnNpdGlvbi4gVGhlIGZpcnN0IGNsYXNzIGlzIGFwcGxpZWQgYW5kIHRoZW4gYVxuICogc2Vjb25kIGAqLWFjdGl2ZWAgY2xhc3MgaW4gb3JkZXIgdG8gYWN0aXZhdGUgdGhlIENTUyB0cmFuc2l0aW9uLiBBZnRlciB0aGVcbiAqIHRyYW5zaXRpb24sIG1hdGNoaW5nIGAqLWRvbmVgIGNsYXNzIG5hbWVzIGFyZSBhcHBsaWVkIHRvIHBlcnNpc3QgdGhlXG4gKiB0cmFuc2l0aW9uIHN0YXRlLlxuICpcbiAqIGBgYGpzeFxuICogZnVuY3Rpb24gQXBwKCkge1xuICogICBjb25zdCBbaW5Qcm9wLCBzZXRJblByb3BdID0gdXNlU3RhdGUoZmFsc2UpO1xuICogICByZXR1cm4gKFxuICogICAgIDxkaXY+XG4gKiAgICAgICA8Q1NTVHJhbnNpdGlvbiBpbj17aW5Qcm9wfSB0aW1lb3V0PXsyMDB9IGNsYXNzTmFtZXM9XCJteS1ub2RlXCI+XG4gKiAgICAgICAgIDxkaXY+XG4gKiAgICAgICAgICAge1wiSSdsbCByZWNlaXZlIG15LW5vZGUtKiBjbGFzc2VzXCJ9XG4gKiAgICAgICAgIDwvZGl2PlxuICogICAgICAgPC9DU1NUcmFuc2l0aW9uPlxuICogICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17KCkgPT4gc2V0SW5Qcm9wKHRydWUpfT5cbiAqICAgICAgICAgQ2xpY2sgdG8gRW50ZXJcbiAqICAgICAgIDwvYnV0dG9uPlxuICogICAgIDwvZGl2PlxuICogICApO1xuICogfVxuICogYGBgXG4gKlxuICogV2hlbiB0aGUgYGluYCBwcm9wIGlzIHNldCB0byBgdHJ1ZWAsIHRoZSBjaGlsZCBjb21wb25lbnQgd2lsbCBmaXJzdCByZWNlaXZlXG4gKiB0aGUgY2xhc3MgYGV4YW1wbGUtZW50ZXJgLCB0aGVuIHRoZSBgZXhhbXBsZS1lbnRlci1hY3RpdmVgIHdpbGwgYmUgYWRkZWQgaW5cbiAqIHRoZSBuZXh0IHRpY2suIGBDU1NUcmFuc2l0aW9uYCBbZm9yY2VzIGFcbiAqIHJlZmxvd10oaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9ibG9iLzUwMDczMDNlNzI5YTc0YmU2NmEyMWMzZTIyMDVlNDkxNjgyMTUyNGIvc3JjL0NTU1RyYW5zaXRpb24uanMjTDIwOC1MMjE1KVxuICogYmV0d2VlbiBiZWZvcmUgYWRkaW5nIHRoZSBgZXhhbXBsZS1lbnRlci1hY3RpdmVgLiBUaGlzIGlzIGFuIGltcG9ydGFudCB0cmlja1xuICogYmVjYXVzZSBpdCBhbGxvd3MgdXMgdG8gdHJhbnNpdGlvbiBiZXR3ZWVuIGBleGFtcGxlLWVudGVyYCBhbmRcbiAqIGBleGFtcGxlLWVudGVyLWFjdGl2ZWAgZXZlbiB0aG91Z2ggdGhleSB3ZXJlIGFkZGVkIGltbWVkaWF0ZWx5IG9uZSBhZnRlclxuICogYW5vdGhlci4gTW9zdCBub3RhYmx5LCB0aGlzIGlzIHdoYXQgbWFrZXMgaXQgcG9zc2libGUgZm9yIHVzIHRvIGFuaW1hdGVcbiAqIF9hcHBlYXJhbmNlXy5cbiAqXG4gKiBgYGBjc3NcbiAqIC5teS1ub2RlLWVudGVyIHtcbiAqICAgb3BhY2l0eTogMDtcbiAqIH1cbiAqIC5teS1ub2RlLWVudGVyLWFjdGl2ZSB7XG4gKiAgIG9wYWNpdHk6IDE7XG4gKiAgIHRyYW5zaXRpb246IG9wYWNpdHkgMjAwbXM7XG4gKiB9XG4gKiAubXktbm9kZS1leGl0IHtcbiAqICAgb3BhY2l0eTogMTtcbiAqIH1cbiAqIC5teS1ub2RlLWV4aXQtYWN0aXZlIHtcbiAqICAgb3BhY2l0eTogMDtcbiAqICAgdHJhbnNpdGlvbjogb3BhY2l0eSAyMDBtcztcbiAqIH1cbiAqIGBgYFxuICpcbiAqIGAqLWFjdGl2ZWAgY2xhc3NlcyByZXByZXNlbnQgd2hpY2ggc3R5bGVzIHlvdSB3YW50IHRvIGFuaW1hdGUgKip0byoqLCBzbyBpdCdzXG4gKiBpbXBvcnRhbnQgdG8gYWRkIGB0cmFuc2l0aW9uYCBkZWNsYXJhdGlvbiBvbmx5IHRvIHRoZW0sIG90aGVyd2lzZSB0cmFuc2l0aW9uc1xuICogbWlnaHQgbm90IGJlaGF2ZSBhcyBpbnRlbmRlZCEgVGhpcyBtaWdodCBub3QgYmUgb2J2aW91cyB3aGVuIHRoZSB0cmFuc2l0aW9uc1xuICogYXJlIHN5bW1ldHJpY2FsLCBpLmUuIHdoZW4gYCotZW50ZXItYWN0aXZlYCBpcyB0aGUgc2FtZSBhcyBgKi1leGl0YCwgbGlrZSBpblxuICogdGhlIGV4YW1wbGUgYWJvdmUgKG1pbnVzIGB0cmFuc2l0aW9uYCksIGJ1dCBpdCBiZWNvbWVzIGFwcGFyZW50IGluIG1vcmVcbiAqIGNvbXBsZXggdHJhbnNpdGlvbnMuXG4gKlxuICogKipOb3RlKio6IElmIHlvdSdyZSB1c2luZyB0aGVcbiAqIFtgYXBwZWFyYF0oaHR0cDovL3JlYWN0Y29tbXVuaXR5Lm9yZy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL3RyYW5zaXRpb24jVHJhbnNpdGlvbi1wcm9wLWFwcGVhcilcbiAqIHByb3AsIG1ha2Ugc3VyZSB0byBkZWZpbmUgc3R5bGVzIGZvciBgLmFwcGVhci0qYCBjbGFzc2VzIGFzIHdlbGwuXG4gKi9cblxuXG52YXIgQ1NTVHJhbnNpdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShDU1NUcmFuc2l0aW9uLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBDU1NUcmFuc2l0aW9uKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbC5hcHBseShfUmVhY3QkQ29tcG9uZW50LCBbdGhpc10uY29uY2F0KGFyZ3MpKSB8fCB0aGlzO1xuICAgIF90aGlzLmFwcGxpZWRDbGFzc2VzID0ge1xuICAgICAgYXBwZWFyOiB7fSxcbiAgICAgIGVudGVyOiB7fSxcbiAgICAgIGV4aXQ6IHt9XG4gICAgfTtcblxuICAgIF90aGlzLm9uRW50ZXIgPSBmdW5jdGlvbiAobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZykge1xuICAgICAgdmFyIF90aGlzJHJlc29sdmVBcmd1bWVudCA9IF90aGlzLnJlc29sdmVBcmd1bWVudHMobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyksXG4gICAgICAgICAgbm9kZSA9IF90aGlzJHJlc29sdmVBcmd1bWVudFswXSxcbiAgICAgICAgICBhcHBlYXJpbmcgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnRbMV07XG5cbiAgICAgIF90aGlzLnJlbW92ZUNsYXNzZXMobm9kZSwgJ2V4aXQnKTtcblxuICAgICAgX3RoaXMuYWRkQ2xhc3Mobm9kZSwgYXBwZWFyaW5nID8gJ2FwcGVhcicgOiAnZW50ZXInLCAnYmFzZScpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25FbnRlcikge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkVudGVyKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkVudGVyaW5nID0gZnVuY3Rpb24gKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpIHtcbiAgICAgIHZhciBfdGhpcyRyZXNvbHZlQXJndW1lbnQyID0gX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyhtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSxcbiAgICAgICAgICBub2RlID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50MlswXSxcbiAgICAgICAgICBhcHBlYXJpbmcgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQyWzFdO1xuXG4gICAgICB2YXIgdHlwZSA9IGFwcGVhcmluZyA/ICdhcHBlYXInIDogJ2VudGVyJztcblxuICAgICAgX3RoaXMuYWRkQ2xhc3Mobm9kZSwgdHlwZSwgJ2FjdGl2ZScpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25FbnRlcmluZykge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkVudGVyaW5nKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkVudGVyZWQgPSBmdW5jdGlvbiAobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZykge1xuICAgICAgdmFyIF90aGlzJHJlc29sdmVBcmd1bWVudDMgPSBfdGhpcy5yZXNvbHZlQXJndW1lbnRzKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpLFxuICAgICAgICAgIG5vZGUgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQzWzBdLFxuICAgICAgICAgIGFwcGVhcmluZyA9IF90aGlzJHJlc29sdmVBcmd1bWVudDNbMV07XG5cbiAgICAgIHZhciB0eXBlID0gYXBwZWFyaW5nID8gJ2FwcGVhcicgOiAnZW50ZXInO1xuXG4gICAgICBfdGhpcy5yZW1vdmVDbGFzc2VzKG5vZGUsIHR5cGUpO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCB0eXBlLCAnZG9uZScpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25FbnRlcmVkKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRW50ZXJlZChtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25FeGl0ID0gZnVuY3Rpb24gKG1heWJlTm9kZSkge1xuICAgICAgdmFyIF90aGlzJHJlc29sdmVBcmd1bWVudDQgPSBfdGhpcy5yZXNvbHZlQXJndW1lbnRzKG1heWJlTm9kZSksXG4gICAgICAgICAgbm9kZSA9IF90aGlzJHJlc29sdmVBcmd1bWVudDRbMF07XG5cbiAgICAgIF90aGlzLnJlbW92ZUNsYXNzZXMobm9kZSwgJ2FwcGVhcicpO1xuXG4gICAgICBfdGhpcy5yZW1vdmVDbGFzc2VzKG5vZGUsICdlbnRlcicpO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCAnZXhpdCcsICdiYXNlJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkV4aXQpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25FeGl0KG1heWJlTm9kZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLm9uRXhpdGluZyA9IGZ1bmN0aW9uIChtYXliZU5vZGUpIHtcbiAgICAgIHZhciBfdGhpcyRyZXNvbHZlQXJndW1lbnQ1ID0gX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyhtYXliZU5vZGUpLFxuICAgICAgICAgIG5vZGUgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQ1WzBdO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCAnZXhpdCcsICdhY3RpdmUnKTtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRXhpdGluZykge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkV4aXRpbmcobWF5YmVOb2RlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25FeGl0ZWQgPSBmdW5jdGlvbiAobWF5YmVOb2RlKSB7XG4gICAgICB2YXIgX3RoaXMkcmVzb2x2ZUFyZ3VtZW50NiA9IF90aGlzLnJlc29sdmVBcmd1bWVudHMobWF5YmVOb2RlKSxcbiAgICAgICAgICBub2RlID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50NlswXTtcblxuICAgICAgX3RoaXMucmVtb3ZlQ2xhc3Nlcyhub2RlLCAnZXhpdCcpO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCAnZXhpdCcsICdkb25lJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkV4aXRlZCkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkV4aXRlZChtYXliZU5vZGUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5yZXNvbHZlQXJndW1lbnRzID0gZnVuY3Rpb24gKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpIHtcbiAgICAgIHJldHVybiBfdGhpcy5wcm9wcy5ub2RlUmVmID8gW190aGlzLnByb3BzLm5vZGVSZWYuY3VycmVudCwgbWF5YmVOb2RlXSAvLyBoZXJlIGBtYXliZU5vZGVgIGlzIGFjdHVhbGx5IGBhcHBlYXJpbmdgXG4gICAgICA6IFttYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nXTtcbiAgICB9O1xuXG4gICAgX3RoaXMuZ2V0Q2xhc3NOYW1lcyA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICB2YXIgY2xhc3NOYW1lcyA9IF90aGlzLnByb3BzLmNsYXNzTmFtZXM7XG4gICAgICB2YXIgaXNTdHJpbmdDbGFzc05hbWVzID0gdHlwZW9mIGNsYXNzTmFtZXMgPT09ICdzdHJpbmcnO1xuICAgICAgdmFyIHByZWZpeCA9IGlzU3RyaW5nQ2xhc3NOYW1lcyAmJiBjbGFzc05hbWVzID8gY2xhc3NOYW1lcyArIFwiLVwiIDogJyc7XG4gICAgICB2YXIgYmFzZUNsYXNzTmFtZSA9IGlzU3RyaW5nQ2xhc3NOYW1lcyA/IFwiXCIgKyBwcmVmaXggKyB0eXBlIDogY2xhc3NOYW1lc1t0eXBlXTtcbiAgICAgIHZhciBhY3RpdmVDbGFzc05hbWUgPSBpc1N0cmluZ0NsYXNzTmFtZXMgPyBiYXNlQ2xhc3NOYW1lICsgXCItYWN0aXZlXCIgOiBjbGFzc05hbWVzW3R5cGUgKyBcIkFjdGl2ZVwiXTtcbiAgICAgIHZhciBkb25lQ2xhc3NOYW1lID0gaXNTdHJpbmdDbGFzc05hbWVzID8gYmFzZUNsYXNzTmFtZSArIFwiLWRvbmVcIiA6IGNsYXNzTmFtZXNbdHlwZSArIFwiRG9uZVwiXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJhc2VDbGFzc05hbWU6IGJhc2VDbGFzc05hbWUsXG4gICAgICAgIGFjdGl2ZUNsYXNzTmFtZTogYWN0aXZlQ2xhc3NOYW1lLFxuICAgICAgICBkb25lQ2xhc3NOYW1lOiBkb25lQ2xhc3NOYW1lXG4gICAgICB9O1xuICAgIH07XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gQ1NTVHJhbnNpdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmFkZENsYXNzID0gZnVuY3Rpb24gYWRkQ2xhc3Mobm9kZSwgdHlwZSwgcGhhc2UpIHtcbiAgICB2YXIgY2xhc3NOYW1lID0gdGhpcy5nZXRDbGFzc05hbWVzKHR5cGUpW3BoYXNlICsgXCJDbGFzc05hbWVcIl07XG5cbiAgICB2YXIgX3RoaXMkZ2V0Q2xhc3NOYW1lcyA9IHRoaXMuZ2V0Q2xhc3NOYW1lcygnZW50ZXInKSxcbiAgICAgICAgZG9uZUNsYXNzTmFtZSA9IF90aGlzJGdldENsYXNzTmFtZXMuZG9uZUNsYXNzTmFtZTtcblxuICAgIGlmICh0eXBlID09PSAnYXBwZWFyJyAmJiBwaGFzZSA9PT0gJ2RvbmUnICYmIGRvbmVDbGFzc05hbWUpIHtcbiAgICAgIGNsYXNzTmFtZSArPSBcIiBcIiArIGRvbmVDbGFzc05hbWU7XG4gICAgfSAvLyBUaGlzIGlzIHRvIGZvcmNlIGEgcmVwYWludCxcbiAgICAvLyB3aGljaCBpcyBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gdHJhbnNpdGlvbiBzdHlsZXMgd2hlbiBhZGRpbmcgYSBjbGFzcyBuYW1lLlxuXG5cbiAgICBpZiAocGhhc2UgPT09ICdhY3RpdmUnKSB7XG4gICAgICBpZiAobm9kZSkgZm9yY2VSZWZsb3cobm9kZSk7XG4gICAgfVxuXG4gICAgaWYgKGNsYXNzTmFtZSkge1xuICAgICAgdGhpcy5hcHBsaWVkQ2xhc3Nlc1t0eXBlXVtwaGFzZV0gPSBjbGFzc05hbWU7XG5cbiAgICAgIF9hZGRDbGFzcyhub2RlLCBjbGFzc05hbWUpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlQ2xhc3NlcyA9IGZ1bmN0aW9uIHJlbW92ZUNsYXNzZXMobm9kZSwgdHlwZSkge1xuICAgIHZhciBfdGhpcyRhcHBsaWVkQ2xhc3NlcyQgPSB0aGlzLmFwcGxpZWRDbGFzc2VzW3R5cGVdLFxuICAgICAgICBiYXNlQ2xhc3NOYW1lID0gX3RoaXMkYXBwbGllZENsYXNzZXMkLmJhc2UsXG4gICAgICAgIGFjdGl2ZUNsYXNzTmFtZSA9IF90aGlzJGFwcGxpZWRDbGFzc2VzJC5hY3RpdmUsXG4gICAgICAgIGRvbmVDbGFzc05hbWUgPSBfdGhpcyRhcHBsaWVkQ2xhc3NlcyQuZG9uZTtcbiAgICB0aGlzLmFwcGxpZWRDbGFzc2VzW3R5cGVdID0ge307XG5cbiAgICBpZiAoYmFzZUNsYXNzTmFtZSkge1xuICAgICAgcmVtb3ZlQ2xhc3Mobm9kZSwgYmFzZUNsYXNzTmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGFjdGl2ZUNsYXNzTmFtZSkge1xuICAgICAgcmVtb3ZlQ2xhc3Mobm9kZSwgYWN0aXZlQ2xhc3NOYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoZG9uZUNsYXNzTmFtZSkge1xuICAgICAgcmVtb3ZlQ2xhc3Mobm9kZSwgZG9uZUNsYXNzTmFtZSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgXyA9IF90aGlzJHByb3BzLmNsYXNzTmFtZXMsXG4gICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3RoaXMkcHJvcHMsIFtcImNsYXNzTmFtZXNcIl0pO1xuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb24sIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgb25FbnRlcjogdGhpcy5vbkVudGVyLFxuICAgICAgb25FbnRlcmVkOiB0aGlzLm9uRW50ZXJlZCxcbiAgICAgIG9uRW50ZXJpbmc6IHRoaXMub25FbnRlcmluZyxcbiAgICAgIG9uRXhpdDogdGhpcy5vbkV4aXQsXG4gICAgICBvbkV4aXRpbmc6IHRoaXMub25FeGl0aW5nLFxuICAgICAgb25FeGl0ZWQ6IHRoaXMub25FeGl0ZWRcbiAgICB9KSk7XG4gIH07XG5cbiAgcmV0dXJuIENTU1RyYW5zaXRpb247XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cbkNTU1RyYW5zaXRpb24uZGVmYXVsdFByb3BzID0ge1xuICBjbGFzc05hbWVzOiAnJ1xufTtcbkNTU1RyYW5zaXRpb24ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gX2V4dGVuZHMoe30sIFRyYW5zaXRpb24ucHJvcFR5cGVzLCB7XG4gIC8qKlxuICAgKiBUaGUgYW5pbWF0aW9uIGNsYXNzTmFtZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50IGFzIGl0IGFwcGVhcnMsIGVudGVycyxcbiAgICogZXhpdHMgb3IgaGFzIGZpbmlzaGVkIHRoZSB0cmFuc2l0aW9uLiBBIHNpbmdsZSBuYW1lIGNhbiBiZSBwcm92aWRlZCwgd2hpY2hcbiAgICogd2lsbCBiZSBzdWZmaXhlZCBmb3IgZWFjaCBzdGFnZSwgZS5nLiBgY2xhc3NOYW1lcz1cImZhZGVcImAgYXBwbGllczpcbiAgICpcbiAgICogLSBgZmFkZS1hcHBlYXJgLCBgZmFkZS1hcHBlYXItYWN0aXZlYCwgYGZhZGUtYXBwZWFyLWRvbmVgXG4gICAqIC0gYGZhZGUtZW50ZXJgLCBgZmFkZS1lbnRlci1hY3RpdmVgLCBgZmFkZS1lbnRlci1kb25lYFxuICAgKiAtIGBmYWRlLWV4aXRgLCBgZmFkZS1leGl0LWFjdGl2ZWAsIGBmYWRlLWV4aXQtZG9uZWBcbiAgICpcbiAgICogQSBmZXcgZGV0YWlscyB0byBub3RlIGFib3V0IGhvdyB0aGVzZSBjbGFzc2VzIGFyZSBhcHBsaWVkOlxuICAgKlxuICAgKiAxLiBUaGV5IGFyZSBfam9pbmVkXyB3aXRoIHRoZSBvbmVzIHRoYXQgYXJlIGFscmVhZHkgZGVmaW5lZCBvbiB0aGUgY2hpbGRcbiAgICogICAgY29tcG9uZW50LCBzbyBpZiB5b3Ugd2FudCB0byBhZGQgc29tZSBiYXNlIHN0eWxlcywgeW91IGNhbiB1c2VcbiAgICogICAgYGNsYXNzTmFtZWAgd2l0aG91dCB3b3JyeWluZyB0aGF0IGl0IHdpbGwgYmUgb3ZlcnJpZGRlbi5cbiAgICpcbiAgICogMi4gSWYgdGhlIHRyYW5zaXRpb24gY29tcG9uZW50IG1vdW50cyB3aXRoIGBpbj17ZmFsc2V9YCwgbm8gY2xhc3NlcyBhcmVcbiAgICogICAgYXBwbGllZCB5ZXQuIFlvdSBtaWdodCBiZSBleHBlY3RpbmcgYCotZXhpdC1kb25lYCwgYnV0IGlmIHlvdSB0aGlua1xuICAgKiAgICBhYm91dCBpdCwgYSBjb21wb25lbnQgY2Fubm90IGZpbmlzaCBleGl0aW5nIGlmIGl0IGhhc24ndCBlbnRlcmVkIHlldC5cbiAgICpcbiAgICogMi4gYGZhZGUtYXBwZWFyLWRvbmVgIGFuZCBgZmFkZS1lbnRlci1kb25lYCB3aWxsIF9ib3RoXyBiZSBhcHBsaWVkLiBUaGlzXG4gICAqICAgIGFsbG93cyB5b3UgdG8gZGVmaW5lIGRpZmZlcmVudCBiZWhhdmlvciBmb3Igd2hlbiBhcHBlYXJpbmcgaXMgZG9uZSBhbmRcbiAgICogICAgd2hlbiByZWd1bGFyIGVudGVyaW5nIGlzIGRvbmUsIHVzaW5nIHNlbGVjdG9ycyBsaWtlXG4gICAqICAgIGAuZmFkZS1lbnRlci1kb25lOm5vdCguZmFkZS1hcHBlYXItZG9uZSlgLiBGb3IgZXhhbXBsZSwgeW91IGNvdWxkIGFwcGx5XG4gICAqICAgIGFuIGVwaWMgZW50cmFuY2UgYW5pbWF0aW9uIHdoZW4gZWxlbWVudCBmaXJzdCBhcHBlYXJzIGluIHRoZSBET00gdXNpbmdcbiAgICogICAgW0FuaW1hdGUuY3NzXShodHRwczovL2RhbmVkZW4uZ2l0aHViLmlvL2FuaW1hdGUuY3NzLykuIE90aGVyd2lzZSB5b3UgY2FuXG4gICAqICAgIHNpbXBseSB1c2UgYGZhZGUtZW50ZXItZG9uZWAgZm9yIGRlZmluaW5nIGJvdGggY2FzZXMuXG4gICAqXG4gICAqIEVhY2ggaW5kaXZpZHVhbCBjbGFzc05hbWVzIGNhbiBhbHNvIGJlIHNwZWNpZmllZCBpbmRlcGVuZGVudGx5IGxpa2U6XG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGNsYXNzTmFtZXM9e3tcbiAgICogIGFwcGVhcjogJ215LWFwcGVhcicsXG4gICAqICBhcHBlYXJBY3RpdmU6ICdteS1hY3RpdmUtYXBwZWFyJyxcbiAgICogIGFwcGVhckRvbmU6ICdteS1kb25lLWFwcGVhcicsXG4gICAqICBlbnRlcjogJ215LWVudGVyJyxcbiAgICogIGVudGVyQWN0aXZlOiAnbXktYWN0aXZlLWVudGVyJyxcbiAgICogIGVudGVyRG9uZTogJ215LWRvbmUtZW50ZXInLFxuICAgKiAgZXhpdDogJ215LWV4aXQnLFxuICAgKiAgZXhpdEFjdGl2ZTogJ215LWFjdGl2ZS1leGl0JyxcbiAgICogIGV4aXREb25lOiAnbXktZG9uZS1leGl0JyxcbiAgICogfX1cbiAgICogYGBgXG4gICAqXG4gICAqIElmIHlvdSB3YW50IHRvIHNldCB0aGVzZSBjbGFzc2VzIHVzaW5nIENTUyBNb2R1bGVzOlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBpbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLmNzcyc7XG4gICAqIGBgYFxuICAgKlxuICAgKiB5b3UgbWlnaHQgd2FudCB0byB1c2UgY2FtZWxDYXNlIGluIHlvdXIgQ1NTIGZpbGUsIHRoYXQgd2F5IGNvdWxkIHNpbXBseVxuICAgKiBzcHJlYWQgdGhlbSBpbnN0ZWFkIG9mIGxpc3RpbmcgdGhlbSBvbmUgYnkgb25lOlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBjbGFzc05hbWVzPXt7IC4uLnN0eWxlcyB9fVxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge3N0cmluZyB8IHtcbiAgICogIGFwcGVhcj86IHN0cmluZyxcbiAgICogIGFwcGVhckFjdGl2ZT86IHN0cmluZyxcbiAgICogIGFwcGVhckRvbmU/OiBzdHJpbmcsXG4gICAqICBlbnRlcj86IHN0cmluZyxcbiAgICogIGVudGVyQWN0aXZlPzogc3RyaW5nLFxuICAgKiAgZW50ZXJEb25lPzogc3RyaW5nLFxuICAgKiAgZXhpdD86IHN0cmluZyxcbiAgICogIGV4aXRBY3RpdmU/OiBzdHJpbmcsXG4gICAqICBleGl0RG9uZT86IHN0cmluZyxcbiAgICogfX1cbiAgICovXG4gIGNsYXNzTmFtZXM6IGNsYXNzTmFtZXNTaGFwZSxcblxuICAvKipcbiAgICogQSBgPFRyYW5zaXRpb24+YCBjYWxsYmFjayBmaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgJ2VudGVyJyBvciAnYXBwZWFyJyBjbGFzcyBpc1xuICAgKiBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpXG4gICAqL1xuICBvbkVudGVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQSBgPFRyYW5zaXRpb24+YCBjYWxsYmFjayBmaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgJ2VudGVyLWFjdGl2ZScgb3JcbiAgICogJ2FwcGVhci1hY3RpdmUnIGNsYXNzIGlzIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbClcbiAgICovXG4gIG9uRW50ZXJpbmc6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBBIGA8VHJhbnNpdGlvbj5gIGNhbGxiYWNrIGZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnZW50ZXInIG9yXG4gICAqICdhcHBlYXInIGNsYXNzZXMgYXJlICoqcmVtb3ZlZCoqIGFuZCB0aGUgYGRvbmVgIGNsYXNzIGlzIGFkZGVkIHRvIHRoZSBET00gbm9kZS5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKVxuICAgKi9cbiAgb25FbnRlcmVkOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQSBgPFRyYW5zaXRpb24+YCBjYWxsYmFjayBmaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgJ2V4aXQnIGNsYXNzIGlzXG4gICAqIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWRcbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpXG4gICAqL1xuICBvbkV4aXQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBBIGA8VHJhbnNpdGlvbj5gIGNhbGxiYWNrIGZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnZXhpdC1hY3RpdmUnIGlzIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWRcbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpXG4gICAqL1xuICBvbkV4aXRpbmc6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBBIGA8VHJhbnNpdGlvbj5gIGNhbGxiYWNrIGZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnZXhpdCcgY2xhc3Nlc1xuICAgKiBhcmUgKipyZW1vdmVkKiogYW5kIHRoZSBgZXhpdC1kb25lYCBjbGFzcyBpcyBhZGRlZCB0byB0aGUgRE9NIG5vZGUuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWRcbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpXG4gICAqL1xuICBvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmNcbn0pIDoge307XG5leHBvcnQgZGVmYXVsdCBDU1NUcmFuc2l0aW9uOyIsImltcG9ydCBoYXNDbGFzcyBmcm9tICcuL2hhc0NsYXNzJztcbi8qKlxuICogQWRkcyBhIENTUyBjbGFzcyB0byBhIGdpdmVuIGVsZW1lbnQuXG4gKiBcbiAqIEBwYXJhbSBlbGVtZW50IHRoZSBlbGVtZW50XG4gKiBAcGFyYW0gY2xhc3NOYW1lIHRoZSBDU1MgY2xhc3MgbmFtZVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZENsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xuICBpZiAoZWxlbWVudC5jbGFzc0xpc3QpIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO2Vsc2UgaWYgKCFoYXNDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpKSBpZiAodHlwZW9mIGVsZW1lbnQuY2xhc3NOYW1lID09PSAnc3RyaW5nJykgZWxlbWVudC5jbGFzc05hbWUgPSBlbGVtZW50LmNsYXNzTmFtZSArIFwiIFwiICsgY2xhc3NOYW1lO2Vsc2UgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgKGVsZW1lbnQuY2xhc3NOYW1lICYmIGVsZW1lbnQuY2xhc3NOYW1lLmJhc2VWYWwgfHwgJycpICsgXCIgXCIgKyBjbGFzc05hbWUpO1xufSIsIi8qKlxuICogQ2hlY2tzIGlmIGEgZ2l2ZW4gZWxlbWVudCBoYXMgYSBDU1MgY2xhc3MuXG4gKiBcbiAqIEBwYXJhbSBlbGVtZW50IHRoZSBlbGVtZW50XG4gKiBAcGFyYW0gY2xhc3NOYW1lIHRoZSBDU1MgY2xhc3MgbmFtZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoYXNDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpIHtcbiAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0KSByZXR1cm4gISFjbGFzc05hbWUgJiYgZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTtcbiAgcmV0dXJuIChcIiBcIiArIChlbGVtZW50LmNsYXNzTmFtZS5iYXNlVmFsIHx8IGVsZW1lbnQuY2xhc3NOYW1lKSArIFwiIFwiKS5pbmRleE9mKFwiIFwiICsgY2xhc3NOYW1lICsgXCIgXCIpICE9PSAtMTtcbn0iLCJpbXBvcnQgeyBDaGlsZHJlbiwgY2xvbmVFbGVtZW50LCBpc1ZhbGlkRWxlbWVudCB9IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogR2l2ZW4gYHRoaXMucHJvcHMuY2hpbGRyZW5gLCByZXR1cm4gYW4gb2JqZWN0IG1hcHBpbmcga2V5IHRvIGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7Kn0gY2hpbGRyZW4gYHRoaXMucHJvcHMuY2hpbGRyZW5gXG4gKiBAcmV0dXJuIHtvYmplY3R9IE1hcHBpbmcgb2Yga2V5IHRvIGNoaWxkXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoaWxkTWFwcGluZyhjaGlsZHJlbiwgbWFwRm4pIHtcbiAgdmFyIG1hcHBlciA9IGZ1bmN0aW9uIG1hcHBlcihjaGlsZCkge1xuICAgIHJldHVybiBtYXBGbiAmJiBpc1ZhbGlkRWxlbWVudChjaGlsZCkgPyBtYXBGbihjaGlsZCkgOiBjaGlsZDtcbiAgfTtcblxuICB2YXIgcmVzdWx0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKGNoaWxkcmVuKSBDaGlsZHJlbi5tYXAoY2hpbGRyZW4sIGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIGM7XG4gIH0pLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgLy8gcnVuIHRoZSBtYXAgZnVuY3Rpb24gaGVyZSBpbnN0ZWFkIHNvIHRoYXQgdGhlIGtleSBpcyB0aGUgY29tcHV0ZWQgb25lXG4gICAgcmVzdWx0W2NoaWxkLmtleV0gPSBtYXBwZXIoY2hpbGQpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogV2hlbiB5b3UncmUgYWRkaW5nIG9yIHJlbW92aW5nIGNoaWxkcmVuIHNvbWUgbWF5IGJlIGFkZGVkIG9yIHJlbW92ZWQgaW4gdGhlXG4gKiBzYW1lIHJlbmRlciBwYXNzLiBXZSB3YW50IHRvIHNob3cgKmJvdGgqIHNpbmNlIHdlIHdhbnQgdG8gc2ltdWx0YW5lb3VzbHlcbiAqIGFuaW1hdGUgZWxlbWVudHMgaW4gYW5kIG91dC4gVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHByZXZpb3VzIHNldCBvZiBrZXlzXG4gKiBhbmQgYSBuZXcgc2V0IG9mIGtleXMgYW5kIG1lcmdlcyB0aGVtIHdpdGggaXRzIGJlc3QgZ3Vlc3Mgb2YgdGhlIGNvcnJlY3RcbiAqIG9yZGVyaW5nLiBJbiB0aGUgZnV0dXJlIHdlIG1heSBleHBvc2Ugc29tZSBvZiB0aGUgdXRpbGl0aWVzIGluXG4gKiBSZWFjdE11bHRpQ2hpbGQgdG8gbWFrZSB0aGlzIGVhc3ksIGJ1dCBmb3Igbm93IFJlYWN0IGl0c2VsZiBkb2VzIG5vdFxuICogZGlyZWN0bHkgaGF2ZSB0aGlzIGNvbmNlcHQgb2YgdGhlIHVuaW9uIG9mIHByZXZDaGlsZHJlbiBhbmQgbmV4dENoaWxkcmVuXG4gKiBzbyB3ZSBpbXBsZW1lbnQgaXQgaGVyZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcHJldiBwcmV2IGNoaWxkcmVuIGFzIHJldHVybmVkIGZyb21cbiAqIGBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRNYXBwaW5nKClgLlxuICogQHBhcmFtIHtvYmplY3R9IG5leHQgbmV4dCBjaGlsZHJlbiBhcyByZXR1cm5lZCBmcm9tXG4gKiBgUmVhY3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5nLmdldENoaWxkTWFwcGluZygpYC5cbiAqIEByZXR1cm4ge29iamVjdH0gYSBrZXkgc2V0IHRoYXQgY29udGFpbnMgYWxsIGtleXMgaW4gYHByZXZgIGFuZCBhbGwga2V5c1xuICogaW4gYG5leHRgIGluIGEgcmVhc29uYWJsZSBvcmRlci5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VDaGlsZE1hcHBpbmdzKHByZXYsIG5leHQpIHtcbiAgcHJldiA9IHByZXYgfHwge307XG4gIG5leHQgPSBuZXh0IHx8IHt9O1xuXG4gIGZ1bmN0aW9uIGdldFZhbHVlRm9yS2V5KGtleSkge1xuICAgIHJldHVybiBrZXkgaW4gbmV4dCA/IG5leHRba2V5XSA6IHByZXZba2V5XTtcbiAgfSAvLyBGb3IgZWFjaCBrZXkgb2YgYG5leHRgLCB0aGUgbGlzdCBvZiBrZXlzIHRvIGluc2VydCBiZWZvcmUgdGhhdCBrZXkgaW5cbiAgLy8gdGhlIGNvbWJpbmVkIGxpc3RcblxuXG4gIHZhciBuZXh0S2V5c1BlbmRpbmcgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB2YXIgcGVuZGluZ0tleXMgPSBbXTtcblxuICBmb3IgKHZhciBwcmV2S2V5IGluIHByZXYpIHtcbiAgICBpZiAocHJldktleSBpbiBuZXh0KSB7XG4gICAgICBpZiAocGVuZGluZ0tleXMubGVuZ3RoKSB7XG4gICAgICAgIG5leHRLZXlzUGVuZGluZ1twcmV2S2V5XSA9IHBlbmRpbmdLZXlzO1xuICAgICAgICBwZW5kaW5nS2V5cyA9IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZW5kaW5nS2V5cy5wdXNoKHByZXZLZXkpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpO1xuICB2YXIgY2hpbGRNYXBwaW5nID0ge307XG5cbiAgZm9yICh2YXIgbmV4dEtleSBpbiBuZXh0KSB7XG4gICAgaWYgKG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XSkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcGVuZGluZ05leHRLZXkgPSBuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV1baV07XG4gICAgICAgIGNoaWxkTWFwcGluZ1tuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV1baV1dID0gZ2V0VmFsdWVGb3JLZXkocGVuZGluZ05leHRLZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNoaWxkTWFwcGluZ1tuZXh0S2V5XSA9IGdldFZhbHVlRm9yS2V5KG5leHRLZXkpO1xuICB9IC8vIEZpbmFsbHksIGFkZCB0aGUga2V5cyB3aGljaCBkaWRuJ3QgYXBwZWFyIGJlZm9yZSBhbnkga2V5IGluIGBuZXh0YFxuXG5cbiAgZm9yIChpID0gMDsgaSA8IHBlbmRpbmdLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgY2hpbGRNYXBwaW5nW3BlbmRpbmdLZXlzW2ldXSA9IGdldFZhbHVlRm9yS2V5KHBlbmRpbmdLZXlzW2ldKTtcbiAgfVxuXG4gIHJldHVybiBjaGlsZE1hcHBpbmc7XG59XG5cbmZ1bmN0aW9uIGdldFByb3AoY2hpbGQsIHByb3AsIHByb3BzKSB7XG4gIHJldHVybiBwcm9wc1twcm9wXSAhPSBudWxsID8gcHJvcHNbcHJvcF0gOiBjaGlsZC5wcm9wc1twcm9wXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEluaXRpYWxDaGlsZE1hcHBpbmcocHJvcHMsIG9uRXhpdGVkKSB7XG4gIHJldHVybiBnZXRDaGlsZE1hcHBpbmcocHJvcHMuY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgIG9uRXhpdGVkOiBvbkV4aXRlZC5iaW5kKG51bGwsIGNoaWxkKSxcbiAgICAgIGluOiB0cnVlLFxuICAgICAgYXBwZWFyOiBnZXRQcm9wKGNoaWxkLCAnYXBwZWFyJywgcHJvcHMpLFxuICAgICAgZW50ZXI6IGdldFByb3AoY2hpbGQsICdlbnRlcicsIHByb3BzKSxcbiAgICAgIGV4aXQ6IGdldFByb3AoY2hpbGQsICdleGl0JywgcHJvcHMpXG4gICAgfSk7XG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE5leHRDaGlsZE1hcHBpbmcobmV4dFByb3BzLCBwcmV2Q2hpbGRNYXBwaW5nLCBvbkV4aXRlZCkge1xuICB2YXIgbmV4dENoaWxkTWFwcGluZyA9IGdldENoaWxkTWFwcGluZyhuZXh0UHJvcHMuY2hpbGRyZW4pO1xuICB2YXIgY2hpbGRyZW4gPSBtZXJnZUNoaWxkTWFwcGluZ3MocHJldkNoaWxkTWFwcGluZywgbmV4dENoaWxkTWFwcGluZyk7XG4gIE9iamVjdC5rZXlzKGNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltrZXldO1xuICAgIGlmICghaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSByZXR1cm47XG4gICAgdmFyIGhhc1ByZXYgPSAoa2V5IGluIHByZXZDaGlsZE1hcHBpbmcpO1xuICAgIHZhciBoYXNOZXh0ID0gKGtleSBpbiBuZXh0Q2hpbGRNYXBwaW5nKTtcbiAgICB2YXIgcHJldkNoaWxkID0gcHJldkNoaWxkTWFwcGluZ1trZXldO1xuICAgIHZhciBpc0xlYXZpbmcgPSBpc1ZhbGlkRWxlbWVudChwcmV2Q2hpbGQpICYmICFwcmV2Q2hpbGQucHJvcHMuaW47IC8vIGl0ZW0gaXMgbmV3IChlbnRlcmluZylcblxuICAgIGlmIChoYXNOZXh0ICYmICghaGFzUHJldiB8fCBpc0xlYXZpbmcpKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZygnZW50ZXJpbmcnLCBrZXkpXG4gICAgICBjaGlsZHJlbltrZXldID0gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAgIG9uRXhpdGVkOiBvbkV4aXRlZC5iaW5kKG51bGwsIGNoaWxkKSxcbiAgICAgICAgaW46IHRydWUsXG4gICAgICAgIGV4aXQ6IGdldFByb3AoY2hpbGQsICdleGl0JywgbmV4dFByb3BzKSxcbiAgICAgICAgZW50ZXI6IGdldFByb3AoY2hpbGQsICdlbnRlcicsIG5leHRQcm9wcylcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoIWhhc05leHQgJiYgaGFzUHJldiAmJiAhaXNMZWF2aW5nKSB7XG4gICAgICAvLyBpdGVtIGlzIG9sZCAoZXhpdGluZylcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdsZWF2aW5nJywga2V5KVxuICAgICAgY2hpbGRyZW5ba2V5XSA9IGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgICBpbjogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoaGFzTmV4dCAmJiBoYXNQcmV2ICYmIGlzVmFsaWRFbGVtZW50KHByZXZDaGlsZCkpIHtcbiAgICAgIC8vIGl0ZW0gaGFzbid0IGNoYW5nZWQgdHJhbnNpdGlvbiBzdGF0ZXNcbiAgICAgIC8vIGNvcHkgb3ZlciB0aGUgbGFzdCB0cmFuc2l0aW9uIHByb3BzO1xuICAgICAgLy8gY29uc29sZS5sb2coJ3VuY2hhbmdlZCcsIGtleSlcbiAgICAgIGNoaWxkcmVuW2tleV0gPSBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgICBpbjogcHJldkNoaWxkLnByb3BzLmluLFxuICAgICAgICBleGl0OiBnZXRQcm9wKGNoaWxkLCAnZXhpdCcsIG5leHRQcm9wcyksXG4gICAgICAgIGVudGVyOiBnZXRQcm9wKGNoaWxkLCAnZW50ZXInLCBuZXh0UHJvcHMpXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY2hpbGRyZW47XG59IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVHJhbnNpdGlvbkdyb3VwQ29udGV4dCBmcm9tICcuL1RyYW5zaXRpb25Hcm91cENvbnRleHQnO1xuaW1wb3J0IHsgZ2V0Q2hpbGRNYXBwaW5nLCBnZXRJbml0aWFsQ2hpbGRNYXBwaW5nLCBnZXROZXh0Q2hpbGRNYXBwaW5nIH0gZnJvbSAnLi91dGlscy9DaGlsZE1hcHBpbmcnO1xuXG52YXIgdmFsdWVzID0gT2JqZWN0LnZhbHVlcyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLm1hcChmdW5jdGlvbiAoaykge1xuICAgIHJldHVybiBvYmpba107XG4gIH0pO1xufTtcblxudmFyIGRlZmF1bHRQcm9wcyA9IHtcbiAgY29tcG9uZW50OiAnZGl2JyxcbiAgY2hpbGRGYWN0b3J5OiBmdW5jdGlvbiBjaGlsZEZhY3RvcnkoY2hpbGQpIHtcbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cbn07XG4vKipcbiAqIFRoZSBgPFRyYW5zaXRpb25Hcm91cD5gIGNvbXBvbmVudCBtYW5hZ2VzIGEgc2V0IG9mIHRyYW5zaXRpb24gY29tcG9uZW50c1xuICogKGA8VHJhbnNpdGlvbj5gIGFuZCBgPENTU1RyYW5zaXRpb24+YCkgaW4gYSBsaXN0LiBMaWtlIHdpdGggdGhlIHRyYW5zaXRpb25cbiAqIGNvbXBvbmVudHMsIGA8VHJhbnNpdGlvbkdyb3VwPmAgaXMgYSBzdGF0ZSBtYWNoaW5lIGZvciBtYW5hZ2luZyB0aGUgbW91bnRpbmdcbiAqIGFuZCB1bm1vdW50aW5nIG9mIGNvbXBvbmVudHMgb3ZlciB0aW1lLlxuICpcbiAqIENvbnNpZGVyIHRoZSBleGFtcGxlIGJlbG93LiBBcyBpdGVtcyBhcmUgcmVtb3ZlZCBvciBhZGRlZCB0byB0aGUgVG9kb0xpc3QgdGhlXG4gKiBgaW5gIHByb3AgaXMgdG9nZ2xlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBgPFRyYW5zaXRpb25Hcm91cD5gLlxuICpcbiAqIE5vdGUgdGhhdCBgPFRyYW5zaXRpb25Hcm91cD5gICBkb2VzIG5vdCBkZWZpbmUgYW55IGFuaW1hdGlvbiBiZWhhdmlvciFcbiAqIEV4YWN0bHkgX2hvd18gYSBsaXN0IGl0ZW0gYW5pbWF0ZXMgaXMgdXAgdG8gdGhlIGluZGl2aWR1YWwgdHJhbnNpdGlvblxuICogY29tcG9uZW50LiBUaGlzIG1lYW5zIHlvdSBjYW4gbWl4IGFuZCBtYXRjaCBhbmltYXRpb25zIGFjcm9zcyBkaWZmZXJlbnQgbGlzdFxuICogaXRlbXMuXG4gKi9cblxudmFyIFRyYW5zaXRpb25Hcm91cCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShUcmFuc2l0aW9uR3JvdXAsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFRyYW5zaXRpb25Hcm91cChwcm9wcywgY29udGV4dCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSB8fCB0aGlzO1xuXG4gICAgdmFyIGhhbmRsZUV4aXRlZCA9IF90aGlzLmhhbmRsZUV4aXRlZC5iaW5kKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTsgLy8gSW5pdGlhbCBjaGlsZHJlbiBzaG91bGQgYWxsIGJlIGVudGVyaW5nLCBkZXBlbmRlbnQgb24gYXBwZWFyXG5cblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgY29udGV4dFZhbHVlOiB7XG4gICAgICAgIGlzTW91bnRpbmc6IHRydWVcbiAgICAgIH0sXG4gICAgICBoYW5kbGVFeGl0ZWQ6IGhhbmRsZUV4aXRlZCxcbiAgICAgIGZpcnN0UmVuZGVyOiB0cnVlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gVHJhbnNpdGlvbkdyb3VwLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLm1vdW50ZWQgPSB0cnVlO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgY29udGV4dFZhbHVlOiB7XG4gICAgICAgIGlzTW91bnRpbmc6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5tb3VudGVkID0gZmFsc2U7XG4gIH07XG5cbiAgVHJhbnNpdGlvbkdyb3VwLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIF9yZWYpIHtcbiAgICB2YXIgcHJldkNoaWxkTWFwcGluZyA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICAgIGhhbmRsZUV4aXRlZCA9IF9yZWYuaGFuZGxlRXhpdGVkLFxuICAgICAgICBmaXJzdFJlbmRlciA9IF9yZWYuZmlyc3RSZW5kZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoaWxkcmVuOiBmaXJzdFJlbmRlciA/IGdldEluaXRpYWxDaGlsZE1hcHBpbmcobmV4dFByb3BzLCBoYW5kbGVFeGl0ZWQpIDogZ2V0TmV4dENoaWxkTWFwcGluZyhuZXh0UHJvcHMsIHByZXZDaGlsZE1hcHBpbmcsIGhhbmRsZUV4aXRlZCksXG4gICAgICBmaXJzdFJlbmRlcjogZmFsc2VcbiAgICB9O1xuICB9IC8vIG5vZGUgaXMgYHVuZGVmaW5lZGAgd2hlbiB1c2VyIHByb3ZpZGVkIGBub2RlUmVmYCBwcm9wXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlRXhpdGVkID0gZnVuY3Rpb24gaGFuZGxlRXhpdGVkKGNoaWxkLCBub2RlKSB7XG4gICAgdmFyIGN1cnJlbnRDaGlsZE1hcHBpbmcgPSBnZXRDaGlsZE1hcHBpbmcodGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gICAgaWYgKGNoaWxkLmtleSBpbiBjdXJyZW50Q2hpbGRNYXBwaW5nKSByZXR1cm47XG5cbiAgICBpZiAoY2hpbGQucHJvcHMub25FeGl0ZWQpIHtcbiAgICAgIGNoaWxkLnByb3BzLm9uRXhpdGVkKG5vZGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1vdW50ZWQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IF9leHRlbmRzKHt9LCBzdGF0ZS5jaGlsZHJlbik7XG5cbiAgICAgICAgZGVsZXRlIGNoaWxkcmVuW2NoaWxkLmtleV07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBDb21wb25lbnQgPSBfdGhpcyRwcm9wcy5jb21wb25lbnQsXG4gICAgICAgIGNoaWxkRmFjdG9yeSA9IF90aGlzJHByb3BzLmNoaWxkRmFjdG9yeSxcbiAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wiY29tcG9uZW50XCIsIFwiY2hpbGRGYWN0b3J5XCJdKTtcblxuICAgIHZhciBjb250ZXh0VmFsdWUgPSB0aGlzLnN0YXRlLmNvbnRleHRWYWx1ZTtcbiAgICB2YXIgY2hpbGRyZW4gPSB2YWx1ZXModGhpcy5zdGF0ZS5jaGlsZHJlbikubWFwKGNoaWxkRmFjdG9yeSk7XG4gICAgZGVsZXRlIHByb3BzLmFwcGVhcjtcbiAgICBkZWxldGUgcHJvcHMuZW50ZXI7XG4gICAgZGVsZXRlIHByb3BzLmV4aXQ7XG5cbiAgICBpZiAoQ29tcG9uZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICB2YWx1ZTogY29udGV4dFZhbHVlXG4gICAgICB9LCBjaGlsZHJlbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgIHZhbHVlOiBjb250ZXh0VmFsdWVcbiAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIHByb3BzLCBjaGlsZHJlbikpO1xuICB9O1xuXG4gIHJldHVybiBUcmFuc2l0aW9uR3JvdXA7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblRyYW5zaXRpb25Hcm91cC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIC8qKlxuICAgKiBgPFRyYW5zaXRpb25Hcm91cD5gIHJlbmRlcnMgYSBgPGRpdj5gIGJ5IGRlZmF1bHQuIFlvdSBjYW4gY2hhbmdlIHRoaXNcbiAgICogYmVoYXZpb3IgYnkgcHJvdmlkaW5nIGEgYGNvbXBvbmVudGAgcHJvcC5cbiAgICogSWYgeW91IHVzZSBSZWFjdCB2MTYrIGFuZCB3b3VsZCBsaWtlIHRvIGF2b2lkIGEgd3JhcHBpbmcgYDxkaXY+YCBlbGVtZW50XG4gICAqIHlvdSBjYW4gcGFzcyBpbiBgY29tcG9uZW50PXtudWxsfWAuIFRoaXMgaXMgdXNlZnVsIGlmIHRoZSB3cmFwcGluZyBkaXZcbiAgICogYm9ya3MgeW91ciBjc3Mgc3R5bGVzLlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgKiBBIHNldCBvZiBgPFRyYW5zaXRpb24+YCBjb21wb25lbnRzLCB0aGF0IGFyZSB0b2dnbGVkIGBpbmAgYW5kIG91dCBhcyB0aGV5XG4gICAqIGxlYXZlLiB0aGUgYDxUcmFuc2l0aW9uR3JvdXA+YCB3aWxsIGluamVjdCBzcGVjaWZpYyB0cmFuc2l0aW9uIHByb3BzLCBzb1xuICAgKiByZW1lbWJlciB0byBzcHJlYWQgdGhlbSB0aHJvdWdoIGlmIHlvdSBhcmUgd3JhcHBpbmcgdGhlIGA8VHJhbnNpdGlvbj5gIGFzXG4gICAqIHdpdGggb3VyIGA8RmFkZT5gIGV4YW1wbGUuXG4gICAqXG4gICAqIFdoaWxlIHRoaXMgY29tcG9uZW50IGlzIG1lYW50IGZvciBtdWx0aXBsZSBgVHJhbnNpdGlvbmAgb3IgYENTU1RyYW5zaXRpb25gXG4gICAqIGNoaWxkcmVuLCBzb21ldGltZXMgeW91IG1heSB3YW50IHRvIGhhdmUgYSBzaW5nbGUgdHJhbnNpdGlvbiBjaGlsZCB3aXRoXG4gICAqIGNvbnRlbnQgdGhhdCB5b3Ugd2FudCB0byBiZSB0cmFuc2l0aW9uZWQgb3V0IGFuZCBpbiB3aGVuIHlvdSBjaGFuZ2UgaXRcbiAgICogKGUuZy4gcm91dGVzLCBpbWFnZXMgZXRjLikgSW4gdGhhdCBjYXNlIHlvdSBjYW4gY2hhbmdlIHRoZSBga2V5YCBwcm9wIG9mXG4gICAqIHRoZSB0cmFuc2l0aW9uIGNoaWxkIGFzIHlvdSBjaGFuZ2UgaXRzIGNvbnRlbnQsIHRoaXMgd2lsbCBjYXVzZVxuICAgKiBgVHJhbnNpdGlvbkdyb3VwYCB0byB0cmFuc2l0aW9uIHRoZSBjaGlsZCBvdXQgYW5kIGJhY2sgaW4uXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgYXBwZWFyIGFuaW1hdGlvbnNcbiAgICogZm9yIGFsbCBjaGlsZHJlbi4gTm90ZSB0aGF0IHNwZWNpZnlpbmcgdGhpcyB3aWxsIG92ZXJyaWRlIGFueSBkZWZhdWx0cyBzZXRcbiAgICogb24gaW5kaXZpZHVhbCBjaGlsZHJlbiBUcmFuc2l0aW9ucy5cbiAgICovXG4gIGFwcGVhcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgZW50ZXIgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgZW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBBIGNvbnZlbmllbmNlIHByb3AgdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIGV4aXQgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgZXhpdDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFlvdSBtYXkgbmVlZCB0byBhcHBseSByZWFjdGl2ZSB1cGRhdGVzIHRvIGEgY2hpbGQgYXMgaXQgaXMgZXhpdGluZy5cbiAgICogVGhpcyBpcyBnZW5lcmFsbHkgZG9uZSBieSB1c2luZyBgY2xvbmVFbGVtZW50YCBob3dldmVyIGluIHRoZSBjYXNlIG9mIGFuIGV4aXRpbmdcbiAgICogY2hpbGQgdGhlIGVsZW1lbnQgaGFzIGFscmVhZHkgYmVlbiByZW1vdmVkIGFuZCBub3QgYWNjZXNzaWJsZSB0byB0aGUgY29uc3VtZXIuXG4gICAqXG4gICAqIElmIHlvdSBkbyBuZWVkIHRvIHVwZGF0ZSBhIGNoaWxkIGFzIGl0IGxlYXZlcyB5b3UgY2FuIHByb3ZpZGUgYSBgY2hpbGRGYWN0b3J5YFxuICAgKiB0byB3cmFwIGV2ZXJ5IGNoaWxkLCBldmVuIHRoZSBvbmVzIHRoYXQgYXJlIGxlYXZpbmcuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKGNoaWxkOiBSZWFjdEVsZW1lbnQpIC0+IFJlYWN0RWxlbWVudFxuICAgKi9cbiAgY2hpbGRGYWN0b3J5OiBQcm9wVHlwZXMuZnVuY1xufSA6IHt9O1xuVHJhbnNpdGlvbkdyb3VwLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb25Hcm91cDsiLCJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHtcbiAgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICByZXR1cm4gZTtcbn1cbmV4cG9ydCB7IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IFRyYW5zaXRpb25Hcm91cCBmcm9tICcuL1RyYW5zaXRpb25Hcm91cCc7XG4vKipcbiAqIFRoZSBgPFJlcGxhY2VUcmFuc2l0aW9uPmAgY29tcG9uZW50IGlzIGEgc3BlY2lhbGl6ZWQgYFRyYW5zaXRpb25gIGNvbXBvbmVudFxuICogdGhhdCBhbmltYXRlcyBiZXR3ZWVuIHR3byBjaGlsZHJlbi5cbiAqXG4gKiBgYGBqc3hcbiAqIDxSZXBsYWNlVHJhbnNpdGlvbiBpbj5cbiAqICAgPEZhZGU+PGRpdj5JIGFwcGVhciBmaXJzdDwvZGl2PjwvRmFkZT5cbiAqICAgPEZhZGU+PGRpdj5JIHJlcGxhY2UgdGhlIGFib3ZlPC9kaXY+PC9GYWRlPlxuICogPC9SZXBsYWNlVHJhbnNpdGlvbj5cbiAqIGBgYFxuICovXG5cbnZhciBSZXBsYWNlVHJhbnNpdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShSZXBsYWNlVHJhbnNpdGlvbiwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gUmVwbGFjZVRyYW5zaXRpb24oKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIF9hcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgX2FyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChfYXJncykpIHx8IHRoaXM7XG5cbiAgICBfdGhpcy5oYW5kbGVFbnRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVMaWZlY3ljbGUoJ29uRW50ZXInLCAwLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlRW50ZXJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjMpLCBfa2V5MyA9IDA7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgICAgYXJnc1tfa2V5M10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkVudGVyaW5nJywgMCwgYXJncyk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUVudGVyZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuNCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjQpLCBfa2V5NCA9IDA7IF9rZXk0IDwgX2xlbjQ7IF9rZXk0KyspIHtcbiAgICAgICAgYXJnc1tfa2V5NF0gPSBhcmd1bWVudHNbX2tleTRdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkVudGVyZWQnLCAwLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlRXhpdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW41ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNSksIF9rZXk1ID0gMDsgX2tleTUgPCBfbGVuNTsgX2tleTUrKykge1xuICAgICAgICBhcmdzW19rZXk1XSA9IGFyZ3VtZW50c1tfa2V5NV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVMaWZlY3ljbGUoJ29uRXhpdCcsIDEsIGFyZ3MpO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVFeGl0aW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjYgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW42KSwgX2tleTYgPSAwOyBfa2V5NiA8IF9sZW42OyBfa2V5NisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTZdID0gYXJndW1lbnRzW19rZXk2XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUxpZmVjeWNsZSgnb25FeGl0aW5nJywgMSwgYXJncyk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUV4aXRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW43ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNyksIF9rZXk3ID0gMDsgX2tleTcgPCBfbGVuNzsgX2tleTcrKykge1xuICAgICAgICBhcmdzW19rZXk3XSA9IGFyZ3VtZW50c1tfa2V5N107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVMaWZlY3ljbGUoJ29uRXhpdGVkJywgMSwgYXJncyk7XG4gICAgfTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBSZXBsYWNlVHJhbnNpdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZUxpZmVjeWNsZSA9IGZ1bmN0aW9uIGhhbmRsZUxpZmVjeWNsZShoYW5kbGVyLCBpZHgsIG9yaWdpbmFsQXJncykge1xuICAgIHZhciBfY2hpbGQkcHJvcHM7XG5cbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgIHZhciBjaGlsZCA9IFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pW2lkeF07XG4gICAgaWYgKGNoaWxkLnByb3BzW2hhbmRsZXJdKSAoX2NoaWxkJHByb3BzID0gY2hpbGQucHJvcHMpW2hhbmRsZXJdLmFwcGx5KF9jaGlsZCRwcm9wcywgb3JpZ2luYWxBcmdzKTtcblxuICAgIGlmICh0aGlzLnByb3BzW2hhbmRsZXJdKSB7XG4gICAgICB2YXIgbWF5YmVOb2RlID0gY2hpbGQucHJvcHMubm9kZVJlZiA/IHVuZGVmaW5lZCA6IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpO1xuICAgICAgdGhpcy5wcm9wc1toYW5kbGVyXShtYXliZU5vZGUpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIGluUHJvcCA9IF90aGlzJHByb3BzLmluLFxuICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF90aGlzJHByb3BzLCBbXCJjaGlsZHJlblwiLCBcImluXCJdKTtcblxuICAgIHZhciBfUmVhY3QkQ2hpbGRyZW4kdG9BcnIgPSBSZWFjdC5DaGlsZHJlbi50b0FycmF5KGNoaWxkcmVuKSxcbiAgICAgICAgZmlyc3QgPSBfUmVhY3QkQ2hpbGRyZW4kdG9BcnJbMF0sXG4gICAgICAgIHNlY29uZCA9IF9SZWFjdCRDaGlsZHJlbiR0b0FyclsxXTtcblxuICAgIGRlbGV0ZSBwcm9wcy5vbkVudGVyO1xuICAgIGRlbGV0ZSBwcm9wcy5vbkVudGVyaW5nO1xuICAgIGRlbGV0ZSBwcm9wcy5vbkVudGVyZWQ7XG4gICAgZGVsZXRlIHByb3BzLm9uRXhpdDtcbiAgICBkZWxldGUgcHJvcHMub25FeGl0aW5nO1xuICAgIGRlbGV0ZSBwcm9wcy5vbkV4aXRlZDtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwLCBwcm9wcywgaW5Qcm9wID8gUmVhY3QuY2xvbmVFbGVtZW50KGZpcnN0LCB7XG4gICAgICBrZXk6ICdmaXJzdCcsXG4gICAgICBvbkVudGVyOiB0aGlzLmhhbmRsZUVudGVyLFxuICAgICAgb25FbnRlcmluZzogdGhpcy5oYW5kbGVFbnRlcmluZyxcbiAgICAgIG9uRW50ZXJlZDogdGhpcy5oYW5kbGVFbnRlcmVkXG4gICAgfSkgOiBSZWFjdC5jbG9uZUVsZW1lbnQoc2Vjb25kLCB7XG4gICAgICBrZXk6ICdzZWNvbmQnLFxuICAgICAgb25FbnRlcjogdGhpcy5oYW5kbGVFeGl0LFxuICAgICAgb25FbnRlcmluZzogdGhpcy5oYW5kbGVFeGl0aW5nLFxuICAgICAgb25FbnRlcmVkOiB0aGlzLmhhbmRsZUV4aXRlZFxuICAgIH0pKTtcbiAgfTtcblxuICByZXR1cm4gUmVwbGFjZVRyYW5zaXRpb247XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblJlcGxhY2VUcmFuc2l0aW9uLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgaW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGNoaWxkcmVuOiBmdW5jdGlvbiBjaGlsZHJlbihwcm9wcywgcHJvcE5hbWUpIHtcbiAgICBpZiAoUmVhY3QuQ2hpbGRyZW4uY291bnQocHJvcHNbcHJvcE5hbWVdKSAhPT0gMikgcmV0dXJuIG5ldyBFcnJvcihcIlxcXCJcIiArIHByb3BOYW1lICsgXCJcXFwiIG11c3QgYmUgZXhhY3RseSB0d28gdHJhbnNpdGlvbiBjb21wb25lbnRzLlwiKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufSA6IHt9O1xuZXhwb3J0IGRlZmF1bHQgUmVwbGFjZVRyYW5zaXRpb247IiwiaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5cbnZhciBfbGVhdmVSZW5kZXJzLCBfZW50ZXJSZW5kZXJzO1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IEVOVEVSRUQsIEVOVEVSSU5HLCBFWElUSU5HIH0gZnJvbSAnLi9UcmFuc2l0aW9uJztcbmltcG9ydCBUcmFuc2l0aW9uR3JvdXBDb250ZXh0IGZyb20gJy4vVHJhbnNpdGlvbkdyb3VwQ29udGV4dCc7XG5cbmZ1bmN0aW9uIGFyZUNoaWxkcmVuRGlmZmVyZW50KG9sZENoaWxkcmVuLCBuZXdDaGlsZHJlbikge1xuICBpZiAob2xkQ2hpbGRyZW4gPT09IG5ld0NoaWxkcmVuKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KG9sZENoaWxkcmVuKSAmJiBSZWFjdC5pc1ZhbGlkRWxlbWVudChuZXdDaGlsZHJlbikgJiYgb2xkQ2hpbGRyZW4ua2V5ICE9IG51bGwgJiYgb2xkQ2hpbGRyZW4ua2V5ID09PSBuZXdDaGlsZHJlbi5rZXkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbi8qKlxuICogRW51bSBvZiBtb2RlcyBmb3IgU3dpdGNoVHJhbnNpdGlvbiBjb21wb25lbnRcbiAqIEBlbnVtIHsgc3RyaW5nIH1cbiAqL1xuXG5cbmV4cG9ydCB2YXIgbW9kZXMgPSB7XG4gIG91dDogJ291dC1pbicsXG4gIGluOiAnaW4tb3V0J1xufTtcblxudmFyIGNhbGxIb29rID0gZnVuY3Rpb24gY2FsbEhvb2soZWxlbWVudCwgbmFtZSwgY2IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX2VsZW1lbnQkcHJvcHM7XG5cbiAgICBlbGVtZW50LnByb3BzW25hbWVdICYmIChfZWxlbWVudCRwcm9wcyA9IGVsZW1lbnQucHJvcHMpW25hbWVdLmFwcGx5KF9lbGVtZW50JHByb3BzLCBhcmd1bWVudHMpO1xuICAgIGNiKCk7XG4gIH07XG59O1xuXG52YXIgbGVhdmVSZW5kZXJzID0gKF9sZWF2ZVJlbmRlcnMgPSB7fSwgX2xlYXZlUmVuZGVyc1ttb2Rlcy5vdXRdID0gZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGN1cnJlbnQgPSBfcmVmLmN1cnJlbnQsXG4gICAgICBjaGFuZ2VTdGF0ZSA9IF9yZWYuY2hhbmdlU3RhdGU7XG4gIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoY3VycmVudCwge1xuICAgIGluOiBmYWxzZSxcbiAgICBvbkV4aXRlZDogY2FsbEhvb2soY3VycmVudCwgJ29uRXhpdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY2hhbmdlU3RhdGUoRU5URVJJTkcsIG51bGwpO1xuICAgIH0pXG4gIH0pO1xufSwgX2xlYXZlUmVuZGVyc1ttb2Rlcy5pbl0gPSBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgdmFyIGN1cnJlbnQgPSBfcmVmMi5jdXJyZW50LFxuICAgICAgY2hhbmdlU3RhdGUgPSBfcmVmMi5jaGFuZ2VTdGF0ZSxcbiAgICAgIGNoaWxkcmVuID0gX3JlZjIuY2hpbGRyZW47XG4gIHJldHVybiBbY3VycmVudCwgUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgaW46IHRydWUsXG4gICAgb25FbnRlcmVkOiBjYWxsSG9vayhjaGlsZHJlbiwgJ29uRW50ZXJlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoYW5nZVN0YXRlKEVOVEVSSU5HKTtcbiAgICB9KVxuICB9KV07XG59LCBfbGVhdmVSZW5kZXJzKTtcbnZhciBlbnRlclJlbmRlcnMgPSAoX2VudGVyUmVuZGVycyA9IHt9LCBfZW50ZXJSZW5kZXJzW21vZGVzLm91dF0gPSBmdW5jdGlvbiAoX3JlZjMpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZjMuY2hpbGRyZW4sXG4gICAgICBjaGFuZ2VTdGF0ZSA9IF9yZWYzLmNoYW5nZVN0YXRlO1xuICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgaW46IHRydWUsXG4gICAgb25FbnRlcmVkOiBjYWxsSG9vayhjaGlsZHJlbiwgJ29uRW50ZXJlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoYW5nZVN0YXRlKEVOVEVSRUQsIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgICBpbjogdHJ1ZVxuICAgICAgfSkpO1xuICAgIH0pXG4gIH0pO1xufSwgX2VudGVyUmVuZGVyc1ttb2Rlcy5pbl0gPSBmdW5jdGlvbiAoX3JlZjQpIHtcbiAgdmFyIGN1cnJlbnQgPSBfcmVmNC5jdXJyZW50LFxuICAgICAgY2hpbGRyZW4gPSBfcmVmNC5jaGlsZHJlbixcbiAgICAgIGNoYW5nZVN0YXRlID0gX3JlZjQuY2hhbmdlU3RhdGU7XG4gIHJldHVybiBbUmVhY3QuY2xvbmVFbGVtZW50KGN1cnJlbnQsIHtcbiAgICBpbjogZmFsc2UsXG4gICAgb25FeGl0ZWQ6IGNhbGxIb29rKGN1cnJlbnQsICdvbkV4aXRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoYW5nZVN0YXRlKEVOVEVSRUQsIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgICBpbjogdHJ1ZVxuICAgICAgfSkpO1xuICAgIH0pXG4gIH0pLCBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICBpbjogdHJ1ZVxuICB9KV07XG59LCBfZW50ZXJSZW5kZXJzKTtcbi8qKlxuICogQSB0cmFuc2l0aW9uIGNvbXBvbmVudCBpbnNwaXJlZCBieSB0aGUgW3Z1ZSB0cmFuc2l0aW9uIG1vZGVzXShodHRwczovL3Z1ZWpzLm9yZy92Mi9ndWlkZS90cmFuc2l0aW9ucy5odG1sI1RyYW5zaXRpb24tTW9kZXMpLlxuICogWW91IGNhbiB1c2UgaXQgd2hlbiB5b3Ugd2FudCB0byBjb250cm9sIHRoZSByZW5kZXIgYmV0d2VlbiBzdGF0ZSB0cmFuc2l0aW9ucy5cbiAqIEJhc2VkIG9uIHRoZSBzZWxlY3RlZCBtb2RlIGFuZCB0aGUgY2hpbGQncyBrZXkgd2hpY2ggaXMgdGhlIGBUcmFuc2l0aW9uYCBvciBgQ1NTVHJhbnNpdGlvbmAgY29tcG9uZW50LCB0aGUgYFN3aXRjaFRyYW5zaXRpb25gIG1ha2VzIGEgY29uc2lzdGVudCB0cmFuc2l0aW9uIGJldHdlZW4gdGhlbS5cbiAqXG4gKiBJZiB0aGUgYG91dC1pbmAgbW9kZSBpcyBzZWxlY3RlZCwgdGhlIGBTd2l0Y2hUcmFuc2l0aW9uYCB3YWl0cyB1bnRpbCB0aGUgb2xkIGNoaWxkIGxlYXZlcyBhbmQgdGhlbiBpbnNlcnRzIGEgbmV3IGNoaWxkLlxuICogSWYgdGhlIGBpbi1vdXRgIG1vZGUgaXMgc2VsZWN0ZWQsIHRoZSBgU3dpdGNoVHJhbnNpdGlvbmAgaW5zZXJ0cyBhIG5ldyBjaGlsZCBmaXJzdCwgd2FpdHMgZm9yIHRoZSBuZXcgY2hpbGQgdG8gZW50ZXIgYW5kIHRoZW4gcmVtb3ZlcyB0aGUgb2xkIGNoaWxkLlxuICpcbiAqICoqTm90ZSoqOiBJZiB5b3Ugd2FudCB0aGUgYW5pbWF0aW9uIHRvIGhhcHBlbiBzaW11bHRhbmVvdXNseVxuICogKHRoYXQgaXMsIHRvIGhhdmUgdGhlIG9sZCBjaGlsZCByZW1vdmVkIGFuZCBhIG5ldyBjaGlsZCBpbnNlcnRlZCAqKmF0IHRoZSBzYW1lIHRpbWUqKiksXG4gKiB5b3Ugc2hvdWxkIHVzZVxuICogW2BUcmFuc2l0aW9uR3JvdXBgXShodHRwczovL3JlYWN0Y29tbXVuaXR5Lm9yZy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL3RyYW5zaXRpb24tZ3JvdXApXG4gKiBpbnN0ZWFkLlxuICpcbiAqIGBgYGpzeFxuICogZnVuY3Rpb24gQXBwKCkge1xuICogIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVdID0gdXNlU3RhdGUoZmFsc2UpO1xuICogIHJldHVybiAoXG4gKiAgICA8U3dpdGNoVHJhbnNpdGlvbj5cbiAqICAgICAgPENTU1RyYW5zaXRpb25cbiAqICAgICAgICBrZXk9e3N0YXRlID8gXCJHb29kYnllLCB3b3JsZCFcIiA6IFwiSGVsbG8sIHdvcmxkIVwifVxuICogICAgICAgIGFkZEVuZExpc3RlbmVyPXsobm9kZSwgZG9uZSkgPT4gbm9kZS5hZGRFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmVuZFwiLCBkb25lLCBmYWxzZSl9XG4gKiAgICAgICAgY2xhc3NOYW1lcz0nZmFkZSdcbiAqICAgICAgPlxuICogICAgICAgIDxidXR0b24gb25DbGljaz17KCkgPT4gc2V0U3RhdGUoc3RhdGUgPT4gIXN0YXRlKX0+XG4gKiAgICAgICAgICB7c3RhdGUgPyBcIkdvb2RieWUsIHdvcmxkIVwiIDogXCJIZWxsbywgd29ybGQhXCJ9XG4gKiAgICAgICAgPC9idXR0b24+XG4gKiAgICAgIDwvQ1NTVHJhbnNpdGlvbj5cbiAqICAgIDwvU3dpdGNoVHJhbnNpdGlvbj5cbiAqICApO1xuICogfVxuICogYGBgXG4gKlxuICogYGBgY3NzXG4gKiAuZmFkZS1lbnRlcntcbiAqICAgIG9wYWNpdHk6IDA7XG4gKiB9XG4gKiAuZmFkZS1leGl0e1xuICogICAgb3BhY2l0eTogMTtcbiAqIH1cbiAqIC5mYWRlLWVudGVyLWFjdGl2ZXtcbiAqICAgIG9wYWNpdHk6IDE7XG4gKiB9XG4gKiAuZmFkZS1leGl0LWFjdGl2ZXtcbiAqICAgIG9wYWNpdHk6IDA7XG4gKiB9XG4gKiAuZmFkZS1lbnRlci1hY3RpdmUsXG4gKiAuZmFkZS1leGl0LWFjdGl2ZXtcbiAqICAgIHRyYW5zaXRpb246IG9wYWNpdHkgNTAwbXM7XG4gKiB9XG4gKiBgYGBcbiAqL1xuXG52YXIgU3dpdGNoVHJhbnNpdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShTd2l0Y2hUcmFuc2l0aW9uLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTd2l0Y2hUcmFuc2l0aW9uKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbC5hcHBseShfUmVhY3QkQ29tcG9uZW50LCBbdGhpc10uY29uY2F0KGFyZ3MpKSB8fCB0aGlzO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgc3RhdHVzOiBFTlRFUkVELFxuICAgICAgY3VycmVudDogbnVsbFxuICAgIH07XG4gICAgX3RoaXMuYXBwZWFyZWQgPSBmYWxzZTtcblxuICAgIF90aGlzLmNoYW5nZVN0YXRlID0gZnVuY3Rpb24gKHN0YXR1cywgY3VycmVudCkge1xuICAgICAgaWYgKGN1cnJlbnQgPT09IHZvaWQgMCkge1xuICAgICAgICBjdXJyZW50ID0gX3RoaXMuc3RhdGUuY3VycmVudDtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXM6IHN0YXR1cyxcbiAgICAgICAgY3VycmVudDogY3VycmVudFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTd2l0Y2hUcmFuc2l0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLmFwcGVhcmVkID0gdHJ1ZTtcbiAgfTtcblxuICBTd2l0Y2hUcmFuc2l0aW9uLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhwcm9wcywgc3RhdGUpIHtcbiAgICBpZiAocHJvcHMuY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudDogbnVsbFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUuc3RhdHVzID09PSBFTlRFUklORyAmJiBwcm9wcy5tb2RlID09PSBtb2Rlcy5pbikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBFTlRFUklOR1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUuY3VycmVudCAmJiBhcmVDaGlsZHJlbkRpZmZlcmVudChzdGF0ZS5jdXJyZW50LCBwcm9wcy5jaGlsZHJlbikpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogRVhJVElOR1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudDogUmVhY3QuY2xvbmVFbGVtZW50KHByb3BzLmNoaWxkcmVuLCB7XG4gICAgICAgIGluOiB0cnVlXG4gICAgICB9KVxuICAgIH07XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICBtb2RlID0gX3RoaXMkcHJvcHMubW9kZSxcbiAgICAgICAgX3RoaXMkc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICBzdGF0dXMgPSBfdGhpcyRzdGF0ZS5zdGF0dXMsXG4gICAgICAgIGN1cnJlbnQgPSBfdGhpcyRzdGF0ZS5jdXJyZW50O1xuICAgIHZhciBkYXRhID0ge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgICAgY3VycmVudDogY3VycmVudCxcbiAgICAgIGNoYW5nZVN0YXRlOiB0aGlzLmNoYW5nZVN0YXRlLFxuICAgICAgc3RhdHVzOiBzdGF0dXNcbiAgICB9O1xuICAgIHZhciBjb21wb25lbnQ7XG5cbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSBFTlRFUklORzpcbiAgICAgICAgY29tcG9uZW50ID0gZW50ZXJSZW5kZXJzW21vZGVdKGRhdGEpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBFWElUSU5HOlxuICAgICAgICBjb21wb25lbnQgPSBsZWF2ZVJlbmRlcnNbbW9kZV0oZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEVOVEVSRUQ6XG4gICAgICAgIGNvbXBvbmVudCA9IGN1cnJlbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIGlzTW91bnRpbmc6ICF0aGlzLmFwcGVhcmVkXG4gICAgICB9XG4gICAgfSwgY29tcG9uZW50KTtcbiAgfTtcblxuICByZXR1cm4gU3dpdGNoVHJhbnNpdGlvbjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuU3dpdGNoVHJhbnNpdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIC8qKlxuICAgKiBUcmFuc2l0aW9uIG1vZGVzLlxuICAgKiBgb3V0LWluYDogQ3VycmVudCBlbGVtZW50IHRyYW5zaXRpb25zIG91dCBmaXJzdCwgdGhlbiB3aGVuIGNvbXBsZXRlLCB0aGUgbmV3IGVsZW1lbnQgdHJhbnNpdGlvbnMgaW4uXG4gICAqIGBpbi1vdXRgOiBOZXcgZWxlbWVudCB0cmFuc2l0aW9ucyBpbiBmaXJzdCwgdGhlbiB3aGVuIGNvbXBsZXRlLCB0aGUgY3VycmVudCBlbGVtZW50IHRyYW5zaXRpb25zIG91dC5cbiAgICpcbiAgICogQHR5cGUgeydvdXQtaW4nfCdpbi1vdXQnfVxuICAgKi9cbiAgbW9kZTogUHJvcFR5cGVzLm9uZU9mKFttb2Rlcy5pbiwgbW9kZXMub3V0XSksXG5cbiAgLyoqXG4gICAqIEFueSBgVHJhbnNpdGlvbmAgb3IgYENTU1RyYW5zaXRpb25gIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSlcbn0gOiB7fTtcblN3aXRjaFRyYW5zaXRpb24uZGVmYXVsdFByb3BzID0ge1xuICBtb2RlOiBtb2Rlcy5vdXRcbn07XG5leHBvcnQgZGVmYXVsdCBTd2l0Y2hUcmFuc2l0aW9uOyIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIGNyZWF0ZVNlbGVjdGlvbkNvbnRleHQsXG4gIFNlbGVjdGlvbkNvbnRleHRWYWx1ZSxcbn0gZnJvbSBcIi4uL2NvbnRleHRzL3NlbGVjdGlvbi1jb250ZXh0XCI7XG5cbmludGVyZmFjZSBQcm9wcyBleHRlbmRzIFNlbGVjdGlvbkNvbnRleHRWYWx1ZSB7IH1cblxuY29uc3QgU2VsZWN0aW9uQ29udGV4dCA9IGNyZWF0ZVNlbGVjdGlvbkNvbnRleHQoKTtcblxuY29uc3Qgd2l0aFNlbGVjdGlvbkNvbnRleHQgPVxuICAoQ29tcG9uZW50OiBSZWFjdC5Db21wb25lbnRUeXBlPFByb3BzPikgPT4gKHByb3BzOiBhbnkpID0+IChcbiAgICA8U2VsZWN0aW9uQ29udGV4dC5Db25zdW1lcj5cbiAgICAgIHsoc2VsZWN0Um93KSA9PiA8Q29tcG9uZW50IHsuLi5wcm9wc30gey4uLnNlbGVjdFJvd30gLz59XG4gICAgPC9TZWxlY3Rpb25Db250ZXh0LkNvbnN1bWVyPlxuICApO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU2VsZWN0aW9uQ29udGV4dDtcbiIsImV4cG9ydCBjb25zdCBST1dfU0VMRUNUX1NJTkdMRSA9IFwicmFkaW9cIjtcbmV4cG9ydCBjb25zdCBST1dfU0VMRUNUX01VTFRJUExFID0gXCJjaGVja2JveFwiO1xuZXhwb3J0IGNvbnN0IFJPV19TRUxFQ1RfRElTQUJMRUQgPSBcIlJPV19TRUxFQ1RfRElTQUJMRURcIjtcbmV4cG9ydCBjb25zdCBDSEVDS0JPWF9TVEFUVVNfSU5ERVRFUk1JTkFURSA9IFwiaW5kZXRlcm1pbmF0ZVwiO1xuZXhwb3J0IGNvbnN0IENIRUNLQk9YX1NUQVRVU19DSEVDS0VEID0gXCJjaGVja2VkXCI7XG5leHBvcnQgY29uc3QgQ0hFQ0tCT1hfU1RBVFVTX1VOQ0hFQ0tFRCA9IFwidW5jaGVja2VkXCI7XG5leHBvcnQgY29uc3QgRklMVEVSU19QT1NJVElPTl9JTkxJTkUgPSBcImlubGluZVwiO1xuZXhwb3J0IGNvbnN0IEZJTFRFUlNfUE9TSVRJT05fVE9QID0gXCJ0b3BcIjtcbmV4cG9ydCBjb25zdCBGSUxURVJTX1BPU0lUSU9OX0JPVFRPTSA9IFwiYm90dG9tXCI7XG5cbmV4cG9ydCBjb25zdCBTT1JUX0FTQyA9IFwiYXNjXCI7XG5leHBvcnQgY29uc3QgU09SVF9ERVNDID0gXCJkZXNjXCI7XG5leHBvcnQgY29uc3QgSU5ESUNBVE9SX1BPU0lUSU9OX0xFRlQgPSBcImxlZnRcIjtcbmV4cG9ydCBjb25zdCBJTkRJQ0FUT1JfUE9TSVRJT05fUklHSFQgPSBcInJpZ2h0XCI7XG5leHBvcnQgY29uc3QgVFlQRV9TVFJJTkcgPSBcInN0cmluZ1wiO1xuZXhwb3J0IGNvbnN0IFRZUEVfTlVNQkVSID0gXCJudW1iZXJcIjtcbmV4cG9ydCBjb25zdCBUWVBFX0JPT0xFQU4gPSBcImJvb2xcIjtcbmV4cG9ydCBjb25zdCBUWVBFX0RBVEUgPSBcImRhdGVcIjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjcmVhdGVFeHBhbnNpb25Db250ZXh0LCB7XG4gIFJvd0V4cGFuZENvbnRleHRWYWx1ZSxcbn0gZnJvbSBcIi4uL2NvbnRleHRzL3Jvdy1leHBhbmQtY29udGV4dFwiO1xuaW1wb3J0IHsgRXhwYW5zaW9uSGVhZGVyQ2VsbFByb3BzIH0gZnJvbSBcIi4vZXhwYW5kLWhlYWRlci1jZWxsXCI7XG5cbmludGVyZmFjZSBQcm9wcyBleHRlbmRzIEV4cGFuc2lvbkhlYWRlckNlbGxQcm9wcyB7XG4gIGV4cGFuZFJvdz86IFJvd0V4cGFuZENvbnRleHRWYWx1ZTtcbn1cblxuY29uc3QgRXhwYW5zaW9uQ29udGV4dCA9IGNyZWF0ZUV4cGFuc2lvbkNvbnRleHQoKTtcblxuY29uc3Qgd2l0aEV4cGFuZENvbnRleHQgPSAoQ29tcG9uZW50OiBSZWFjdC5Db21wb25lbnRUeXBlPFByb3BzPikgPT4gKCkgPT5cbiAgKFxuICAgIDxFeHBhbnNpb25Db250ZXh0LkNvbnN1bWVyPlxuICAgICAgeyhleHBhbmRSb3cpID0+IDxDb21wb25lbnQgeyAuLi4gZXhwYW5kUm93IH0gLz59XG4gICAgPC9FeHBhbnNpb25Db250ZXh0LkNvbnN1bWVyPlxuICApO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoRXhwYW5kQ29udGV4dDtcbiIsImltcG9ydCAqIGFzIGV4cGFuZCBmcm9tIFwiLi9leHBhbmRcIjtcbmltcG9ydCAqIGFzIG11dGF0ZSBmcm9tIFwiLi9tdXRhdGVcIjtcbmltcG9ydCAqIGFzIHJvd3MgZnJvbSBcIi4vcm93c1wiO1xuaW1wb3J0ICogYXMgc2VsZWN0aW9uIGZyb20gXCIuL3NlbGVjdGlvblwiO1xuaW1wb3J0ICogYXMgc29ydCBmcm9tIFwiLi9zb3J0XCI7XG5pbXBvcnQgKiBhcyB0eXBlIGZyb20gXCIuL3R5cGVcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICAuLi5yb3dzLFxuICAuLi5zZWxlY3Rpb24sXG4gIC4uLmV4cGFuZCxcbiAgLi4ubXV0YXRlLFxuICAuLi5zb3J0LFxuICAuLi50eXBlLFxufTtcbiIsIi8qIVxuXHRDb3B5cmlnaHQgKGMpIDIwMTggSmVkIFdhdHNvbi5cblx0TGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWVcblx0aHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lc1xuKi9cbi8qIGdsb2JhbCBkZWZpbmUgKi9cblxuKGZ1bmN0aW9uICgpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuXHRmdW5jdGlvbiBjbGFzc05hbWVzICgpIHtcblx0XHR2YXIgY2xhc3NlcyA9ICcnO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoYXJnKSB7XG5cdFx0XHRcdGNsYXNzZXMgPSBhcHBlbmRDbGFzcyhjbGFzc2VzLCBwYXJzZVZhbHVlKGFyZykpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzO1xuXHR9XG5cblx0ZnVuY3Rpb24gcGFyc2VWYWx1ZSAoYXJnKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG5cdFx0XHRyZXR1cm4gYXJnO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgYXJnICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblxuXHRcdGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzLmFwcGx5KG51bGwsIGFyZyk7XG5cdFx0fVxuXG5cdFx0aWYgKGFyZy50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAmJiAhYXJnLnRvU3RyaW5nLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1tuYXRpdmUgY29kZV0nKSkge1xuXHRcdFx0cmV0dXJuIGFyZy50b1N0cmluZygpO1xuXHRcdH1cblxuXHRcdHZhciBjbGFzc2VzID0gJyc7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRpZiAoaGFzT3duLmNhbGwoYXJnLCBrZXkpICYmIGFyZ1trZXldKSB7XG5cdFx0XHRcdGNsYXNzZXMgPSBhcHBlbmRDbGFzcyhjbGFzc2VzLCBrZXkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzO1xuXHR9XG5cblx0ZnVuY3Rpb24gYXBwZW5kQ2xhc3MgKHZhbHVlLCBuZXdDbGFzcykge1xuXHRcdGlmICghbmV3Q2xhc3MpIHtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdFxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlICsgJyAnICsgbmV3Q2xhc3M7XG5cdFx0fVxuXHRcblx0XHRyZXR1cm4gdmFsdWUgKyBuZXdDbGFzcztcblx0fVxuXG5cdGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuXHRcdGNsYXNzTmFtZXMuZGVmYXVsdCA9IGNsYXNzTmFtZXM7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyByZWdpc3RlciBhcyAnY2xhc3NuYW1lcycsIGNvbnNpc3RlbnQgd2l0aCBucG0gcGFja2FnZSBuYW1lXG5cdFx0ZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lcztcblx0fVxufSgpKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnID8gUmVmbGVjdCA6IG51bGxcbnZhciBSZWZsZWN0QXBwbHkgPSBSICYmIHR5cGVvZiBSLmFwcGx5ID09PSAnZnVuY3Rpb24nXG4gID8gUi5hcHBseVxuICA6IGZ1bmN0aW9uIFJlZmxlY3RBcHBseSh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKSB7XG4gICAgcmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKHRhcmdldCwgcmVjZWl2ZXIsIGFyZ3MpO1xuICB9XG5cbnZhciBSZWZsZWN0T3duS2V5c1xuaWYgKFIgJiYgdHlwZW9mIFIub3duS2V5cyA9PT0gJ2Z1bmN0aW9uJykge1xuICBSZWZsZWN0T3duS2V5cyA9IFIub3duS2V5c1xufSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gIFJlZmxlY3RPd25LZXlzID0gZnVuY3Rpb24gUmVmbGVjdE93bktleXModGFyZ2V0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldClcbiAgICAgIC5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0YXJnZXQpKTtcbiAgfTtcbn0gZWxzZSB7XG4gIFJlZmxlY3RPd25LZXlzID0gZnVuY3Rpb24gUmVmbGVjdE93bktleXModGFyZ2V0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIFByb2Nlc3NFbWl0V2FybmluZyh3YXJuaW5nKSB7XG4gIGlmIChjb25zb2xlICYmIGNvbnNvbGUud2FybikgY29uc29sZS53YXJuKHdhcm5pbmcpO1xufVxuXG52YXIgTnVtYmVySXNOYU4gPSBOdW1iZXIuaXNOYU4gfHwgZnVuY3Rpb24gTnVtYmVySXNOYU4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICBFdmVudEVtaXR0ZXIuaW5pdC5jYWxsKHRoaXMpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XG5tb2R1bGUuZXhwb3J0cy5vbmNlID0gb25jZTtcblxuLy8gQmFja3dhcmRzLWNvbXBhdCB3aXRoIG5vZGUgMC4xMC54XG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHNDb3VudCA9IDA7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnMgPSB1bmRlZmluZWQ7XG5cbi8vIEJ5IGRlZmF1bHQgRXZlbnRFbWl0dGVycyB3aWxsIHByaW50IGEgd2FybmluZyBpZiBtb3JlIHRoYW4gMTAgbGlzdGVuZXJzIGFyZVxuLy8gYWRkZWQgdG8gaXQuIFRoaXMgaXMgYSB1c2VmdWwgZGVmYXVsdCB3aGljaCBoZWxwcyBmaW5kaW5nIG1lbW9yeSBsZWFrcy5cbnZhciBkZWZhdWx0TWF4TGlzdGVuZXJzID0gMTA7XG5cbmZ1bmN0aW9uIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImxpc3RlbmVyXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uLiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2YgbGlzdGVuZXIpO1xuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudEVtaXR0ZXIsICdkZWZhdWx0TWF4TGlzdGVuZXJzJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkZWZhdWx0TWF4TGlzdGVuZXJzO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uKGFyZykge1xuICAgIGlmICh0eXBlb2YgYXJnICE9PSAnbnVtYmVyJyB8fCBhcmcgPCAwIHx8IE51bWJlcklzTmFOKGFyZykpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJkZWZhdWx0TWF4TGlzdGVuZXJzXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIGFyZyArICcuJyk7XG4gICAgfVxuICAgIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSBhcmc7XG4gIH1cbn0pO1xuXG5FdmVudEVtaXR0ZXIuaW5pdCA9IGZ1bmN0aW9uKCkge1xuXG4gIGlmICh0aGlzLl9ldmVudHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5fZXZlbnRzID09PSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2ZW50cykge1xuICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICB9XG5cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gdGhpcy5fbWF4TGlzdGVuZXJzIHx8IHVuZGVmaW5lZDtcbn07XG5cbi8vIE9idmlvdXNseSBub3QgYWxsIEVtaXR0ZXJzIHNob3VsZCBiZSBsaW1pdGVkIHRvIDEwLiBUaGlzIGZ1bmN0aW9uIGFsbG93c1xuLy8gdGhhdCB0byBiZSBpbmNyZWFzZWQuIFNldCB0byB6ZXJvIGZvciB1bmxpbWl0ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycyhuKSB7XG4gIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicgfHwgbiA8IDAgfHwgTnVtYmVySXNOYU4obikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiblwiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBuICsgJy4nKTtcbiAgfVxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSBuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIF9nZXRNYXhMaXN0ZW5lcnModGhhdCkge1xuICBpZiAodGhhdC5fbWF4TGlzdGVuZXJzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIEV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzO1xuICByZXR1cm4gdGhhdC5fbWF4TGlzdGVuZXJzO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmdldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIGdldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIF9nZXRNYXhMaXN0ZW5lcnModGhpcyk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KHR5cGUpIHtcbiAgdmFyIGFyZ3MgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICB2YXIgZG9FcnJvciA9ICh0eXBlID09PSAnZXJyb3InKTtcblxuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpXG4gICAgZG9FcnJvciA9IChkb0Vycm9yICYmIGV2ZW50cy5lcnJvciA9PT0gdW5kZWZpbmVkKTtcbiAgZWxzZSBpZiAoIWRvRXJyb3IpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIElmIHRoZXJlIGlzIG5vICdlcnJvcicgZXZlbnQgbGlzdGVuZXIgdGhlbiB0aHJvdy5cbiAgaWYgKGRvRXJyb3IpIHtcbiAgICB2YXIgZXI7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMClcbiAgICAgIGVyID0gYXJnc1swXTtcbiAgICBpZiAoZXIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgLy8gTm90ZTogVGhlIGNvbW1lbnRzIG9uIHRoZSBgdGhyb3dgIGxpbmVzIGFyZSBpbnRlbnRpb25hbCwgdGhleSBzaG93XG4gICAgICAvLyB1cCBpbiBOb2RlJ3Mgb3V0cHV0IGlmIHRoaXMgcmVzdWx0cyBpbiBhbiB1bmhhbmRsZWQgZXhjZXB0aW9uLlxuICAgICAgdGhyb3cgZXI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gICAgfVxuICAgIC8vIEF0IGxlYXN0IGdpdmUgc29tZSBraW5kIG9mIGNvbnRleHQgdG8gdGhlIHVzZXJcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdVbmhhbmRsZWQgZXJyb3IuJyArIChlciA/ICcgKCcgKyBlci5tZXNzYWdlICsgJyknIDogJycpKTtcbiAgICBlcnIuY29udGV4dCA9IGVyO1xuICAgIHRocm93IGVycjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgfVxuXG4gIHZhciBoYW5kbGVyID0gZXZlbnRzW3R5cGVdO1xuXG4gIGlmIChoYW5kbGVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIFJlZmxlY3RBcHBseShoYW5kbGVyLCB0aGlzLCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuID0gaGFuZGxlci5sZW5ndGg7XG4gICAgdmFyIGxpc3RlbmVycyA9IGFycmF5Q2xvbmUoaGFuZGxlciwgbGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKVxuICAgICAgUmVmbGVjdEFwcGx5KGxpc3RlbmVyc1tpXSwgdGhpcywgYXJncyk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmZ1bmN0aW9uIF9hZGRMaXN0ZW5lcih0YXJnZXQsIHR5cGUsIGxpc3RlbmVyLCBwcmVwZW5kKSB7XG4gIHZhciBtO1xuICB2YXIgZXZlbnRzO1xuICB2YXIgZXhpc3Rpbmc7XG5cbiAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG5cbiAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZCkge1xuICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0YXJnZXQuX2V2ZW50c0NvdW50ID0gMDtcbiAgfSBlbHNlIHtcbiAgICAvLyBUbyBhdm9pZCByZWN1cnNpb24gaW4gdGhlIGNhc2UgdGhhdCB0eXBlID09PSBcIm5ld0xpc3RlbmVyXCIhIEJlZm9yZVxuICAgIC8vIGFkZGluZyBpdCB0byB0aGUgbGlzdGVuZXJzLCBmaXJzdCBlbWl0IFwibmV3TGlzdGVuZXJcIi5cbiAgICBpZiAoZXZlbnRzLm5ld0xpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRhcmdldC5lbWl0KCduZXdMaXN0ZW5lcicsIHR5cGUsXG4gICAgICAgICAgICAgICAgICBsaXN0ZW5lci5saXN0ZW5lciA/IGxpc3RlbmVyLmxpc3RlbmVyIDogbGlzdGVuZXIpO1xuXG4gICAgICAvLyBSZS1hc3NpZ24gYGV2ZW50c2AgYmVjYXVzZSBhIG5ld0xpc3RlbmVyIGhhbmRsZXIgY291bGQgaGF2ZSBjYXVzZWQgdGhlXG4gICAgICAvLyB0aGlzLl9ldmVudHMgdG8gYmUgYXNzaWduZWQgdG8gYSBuZXcgb2JqZWN0XG4gICAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgICB9XG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV07XG4gIH1cblxuICBpZiAoZXhpc3RpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9wdGltaXplIHRoZSBjYXNlIG9mIG9uZSBsaXN0ZW5lci4gRG9uJ3QgbmVlZCB0aGUgZXh0cmEgYXJyYXkgb2JqZWN0LlxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID0gbGlzdGVuZXI7XG4gICAgKyt0YXJnZXQuX2V2ZW50c0NvdW50O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgZXhpc3RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIEFkZGluZyB0aGUgc2Vjb25kIGVsZW1lbnQsIG5lZWQgdG8gY2hhbmdlIHRvIGFycmF5LlxuICAgICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPVxuICAgICAgICBwcmVwZW5kID8gW2xpc3RlbmVyLCBleGlzdGluZ10gOiBbZXhpc3RpbmcsIGxpc3RlbmVyXTtcbiAgICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZ290IGFuIGFycmF5LCBqdXN0IGFwcGVuZC5cbiAgICB9IGVsc2UgaWYgKHByZXBlbmQpIHtcbiAgICAgIGV4aXN0aW5nLnVuc2hpZnQobGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleGlzdGluZy5wdXNoKGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgbGlzdGVuZXIgbGVha1xuICAgIG0gPSBfZ2V0TWF4TGlzdGVuZXJzKHRhcmdldCk7XG4gICAgaWYgKG0gPiAwICYmIGV4aXN0aW5nLmxlbmd0aCA+IG0gJiYgIWV4aXN0aW5nLndhcm5lZCkge1xuICAgICAgZXhpc3Rpbmcud2FybmVkID0gdHJ1ZTtcbiAgICAgIC8vIE5vIGVycm9yIGNvZGUgZm9yIHRoaXMgc2luY2UgaXQgaXMgYSBXYXJuaW5nXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgIHZhciB3ID0gbmV3IEVycm9yKCdQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5sZW5ndGggKyAnICcgKyBTdHJpbmcodHlwZSkgKyAnIGxpc3RlbmVycyAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FkZGVkLiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luY3JlYXNlIGxpbWl0Jyk7XG4gICAgICB3Lm5hbWUgPSAnTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nJztcbiAgICAgIHcuZW1pdHRlciA9IHRhcmdldDtcbiAgICAgIHcudHlwZSA9IHR5cGU7XG4gICAgICB3LmNvdW50ID0gZXhpc3RpbmcubGVuZ3RoO1xuICAgICAgUHJvY2Vzc0VtaXRXYXJuaW5nKHcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiBhZGRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5wcmVwZW5kTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHByZXBlbmRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgdHJ1ZSk7XG4gICAgfTtcblxuZnVuY3Rpb24gb25jZVdyYXBwZXIoKSB7XG4gIGlmICghdGhpcy5maXJlZCkge1xuICAgIHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSwgdGhpcy53cmFwRm4pO1xuICAgIHRoaXMuZmlyZWQgPSB0cnVlO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk7XG4gICAgcmV0dXJuIHRoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsIGFyZ3VtZW50cyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX29uY2VXcmFwKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIpIHtcbiAgdmFyIHN0YXRlID0geyBmaXJlZDogZmFsc2UsIHdyYXBGbjogdW5kZWZpbmVkLCB0YXJnZXQ6IHRhcmdldCwgdHlwZTogdHlwZSwgbGlzdGVuZXI6IGxpc3RlbmVyIH07XG4gIHZhciB3cmFwcGVkID0gb25jZVdyYXBwZXIuYmluZChzdGF0ZSk7XG4gIHdyYXBwZWQubGlzdGVuZXIgPSBsaXN0ZW5lcjtcbiAgc3RhdGUud3JhcEZuID0gd3JhcHBlZDtcbiAgcmV0dXJuIHdyYXBwZWQ7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UodHlwZSwgbGlzdGVuZXIpIHtcbiAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gIHRoaXMub24odHlwZSwgX29uY2VXcmFwKHRoaXMsIHR5cGUsIGxpc3RlbmVyKSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kT25jZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgIHRoaXMucHJlcGVuZExpc3RlbmVyKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuLy8gRW1pdHMgYSAncmVtb3ZlTGlzdGVuZXInIGV2ZW50IGlmIGFuZCBvbmx5IGlmIHRoZSBsaXN0ZW5lciB3YXMgcmVtb3ZlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICB2YXIgbGlzdCwgZXZlbnRzLCBwb3NpdGlvbiwgaSwgb3JpZ2luYWxMaXN0ZW5lcjtcblxuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGxpc3QgPSBldmVudHNbdHlwZV07XG4gICAgICBpZiAobGlzdCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgaWYgKGxpc3QgPT09IGxpc3RlbmVyIHx8IGxpc3QubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lcilcbiAgICAgICAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBsaXN0Lmxpc3RlbmVyIHx8IGxpc3RlbmVyKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbGlzdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwb3NpdGlvbiA9IC0xO1xuXG4gICAgICAgIGZvciAoaSA9IGxpc3QubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBpZiAobGlzdFtpXSA9PT0gbGlzdGVuZXIgfHwgbGlzdFtpXS5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsTGlzdGVuZXIgPSBsaXN0W2ldLmxpc3RlbmVyO1xuICAgICAgICAgICAgcG9zaXRpb24gPSBpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uIDwgMClcbiAgICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgICBpZiAocG9zaXRpb24gPT09IDApXG4gICAgICAgICAgbGlzdC5zaGlmdCgpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBzcGxpY2VPbmUobGlzdCwgcG9zaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxpc3QubGVuZ3RoID09PSAxKVxuICAgICAgICAgIGV2ZW50c1t0eXBlXSA9IGxpc3RbMF07XG5cbiAgICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBvcmlnaW5hbExpc3RlbmVyIHx8IGxpc3RlbmVyKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9XG4gICAgZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKHR5cGUpIHtcbiAgICAgIHZhciBsaXN0ZW5lcnMsIGV2ZW50cywgaTtcblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgLy8gbm90IGxpc3RlbmluZyBmb3IgcmVtb3ZlTGlzdGVuZXIsIG5vIG5lZWQgdG8gZW1pdFxuICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnRzW3R5cGVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgLy8gZW1pdCByZW1vdmVMaXN0ZW5lciBmb3IgYWxsIGxpc3RlbmVycyBvbiBhbGwgZXZlbnRzXG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGV2ZW50cyk7XG4gICAgICAgIHZhciBrZXk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICBpZiAoa2V5ID09PSAncmVtb3ZlTGlzdGVuZXInKSBjb250aW51ZTtcbiAgICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdyZW1vdmVMaXN0ZW5lcicpO1xuICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICBsaXN0ZW5lcnMgPSBldmVudHNbdHlwZV07XG5cbiAgICAgIGlmICh0eXBlb2YgbGlzdGVuZXJzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzKTtcbiAgICAgIH0gZWxzZSBpZiAobGlzdGVuZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gTElGTyBvcmRlclxuICAgICAgICBmb3IgKGkgPSBsaXN0ZW5lcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuZnVuY3Rpb24gX2xpc3RlbmVycyh0YXJnZXQsIHR5cGUsIHVud3JhcCkge1xuICB2YXIgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG5cbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcbiAgaWYgKGV2bGlzdGVuZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKVxuICAgIHJldHVybiB1bndyYXAgPyBbZXZsaXN0ZW5lci5saXN0ZW5lciB8fCBldmxpc3RlbmVyXSA6IFtldmxpc3RlbmVyXTtcblxuICByZXR1cm4gdW53cmFwID9cbiAgICB1bndyYXBMaXN0ZW5lcnMoZXZsaXN0ZW5lcikgOiBhcnJheUNsb25lKGV2bGlzdGVuZXIsIGV2bGlzdGVuZXIubGVuZ3RoKTtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCB0cnVlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmF3TGlzdGVuZXJzID0gZnVuY3Rpb24gcmF3TGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5saXN0ZW5lckNvdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJDb3VudCh0eXBlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbGlzdGVuZXJDb3VudC5jYWxsKGVtaXR0ZXIsIHR5cGUpO1xuICB9XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQgPSBsaXN0ZW5lckNvdW50O1xuZnVuY3Rpb24gbGlzdGVuZXJDb3VudCh0eXBlKSB7XG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG5cbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG5cbiAgICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSBpZiAoZXZsaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZXZsaXN0ZW5lci5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIDA7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZXZlbnROYW1lcyA9IGZ1bmN0aW9uIGV2ZW50TmFtZXMoKSB7XG4gIHJldHVybiB0aGlzLl9ldmVudHNDb3VudCA+IDAgPyBSZWZsZWN0T3duS2V5cyh0aGlzLl9ldmVudHMpIDogW107XG59O1xuXG5mdW5jdGlvbiBhcnJheUNsb25lKGFyciwgbikge1xuICB2YXIgY29weSA9IG5ldyBBcnJheShuKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpXG4gICAgY29weVtpXSA9IGFycltpXTtcbiAgcmV0dXJuIGNvcHk7XG59XG5cbmZ1bmN0aW9uIHNwbGljZU9uZShsaXN0LCBpbmRleCkge1xuICBmb3IgKDsgaW5kZXggKyAxIDwgbGlzdC5sZW5ndGg7IGluZGV4KyspXG4gICAgbGlzdFtpbmRleF0gPSBsaXN0W2luZGV4ICsgMV07XG4gIGxpc3QucG9wKCk7XG59XG5cbmZ1bmN0aW9uIHVud3JhcExpc3RlbmVycyhhcnIpIHtcbiAgdmFyIHJldCA9IG5ldyBBcnJheShhcnIubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXQubGVuZ3RoOyArK2kpIHtcbiAgICByZXRbaV0gPSBhcnJbaV0ubGlzdGVuZXIgfHwgYXJyW2ldO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIG9uY2UoZW1pdHRlciwgbmFtZSkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGZ1bmN0aW9uIGVycm9yTGlzdGVuZXIoZXJyKSB7XG4gICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKG5hbWUsIHJlc29sdmVyKTtcbiAgICAgIHJlamVjdChlcnIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc29sdmVyKCkge1xuICAgICAgaWYgKHR5cGVvZiBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgICByZXNvbHZlKFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCBuYW1lLCByZXNvbHZlciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIGlmIChuYW1lICE9PSAnZXJyb3InKSB7XG4gICAgICBhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlcihlbWl0dGVyLCBlcnJvckxpc3RlbmVyLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIoZW1pdHRlciwgaGFuZGxlciwgZmxhZ3MpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLm9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsICdlcnJvcicsIGhhbmRsZXIsIGZsYWdzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgbGlzdGVuZXIsIGZsYWdzKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChmbGFncy5vbmNlKSB7XG4gICAgICBlbWl0dGVyLm9uY2UobmFtZSwgbGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbWl0dGVyLm9uKG5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIEV2ZW50VGFyZ2V0IGRvZXMgbm90IGhhdmUgYGVycm9yYCBldmVudCBzZW1hbnRpY3MgbGlrZSBOb2RlXG4gICAgLy8gRXZlbnRFbWl0dGVycywgd2UgZG8gbm90IGxpc3RlbiBmb3IgYGVycm9yYCBldmVudHMgaGVyZS5cbiAgICBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIobmFtZSwgZnVuY3Rpb24gd3JhcExpc3RlbmVyKGFyZykge1xuICAgICAgLy8gSUUgZG9lcyBub3QgaGF2ZSBidWlsdGluIGB7IG9uY2U6IHRydWUgfWAgc3VwcG9ydCBzbyB3ZVxuICAgICAgLy8gaGF2ZSB0byBkbyBpdCBtYW51YWxseS5cbiAgICAgIGlmIChmbGFncy5vbmNlKSB7XG4gICAgICAgIGVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCB3cmFwTGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgbGlzdGVuZXIoYXJnKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJlbWl0dGVyXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEV2ZW50RW1pdHRlci4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGVtaXR0ZXIpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBST1dfU0VMRUNUX0RJU0FCTEVEIH0gZnJvbSBcIi4uL2NvbnN0XCI7XG5pbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgZXZlbnRzOiBzdHJpbmdbXSA9IFtcbiAgXCJvbkNsaWNrXCIsXG4gIFwib25Eb3VibGVDbGlja1wiLFxuICBcIm9uTW91c2VFbnRlclwiLFxuICBcIm9uTW91c2VMZWF2ZVwiLFxuICBcIm9uQ29udGV4dE1lbnVcIixcbiAgXCJvbkF1eENsaWNrXCIsXG5dO1xuXG5pbnRlcmZhY2UgUm93RXZlbnREZWxlZ2F0ZXJQcm9wcyB7XG4gIHJvdzogYW55O1xuICBzZWxlY3RlZDogYm9vbGVhbjtcbiAga2V5RmllbGQ6IHN0cmluZztcbiAgc2VsZWN0YWJsZTogYm9vbGVhbjtcbiAgZXhwYW5kYWJsZTogYm9vbGVhbjtcbiAgcm93SW5kZXg6IG51bWJlcjtcbiAgZXhwYW5kZWQ6IGJvb2xlYW47XG4gIGV4cGFuZFJvdzogYW55O1xuICBzZWxlY3RSb3c6IGFueTtcbiAgREVMQVlfRk9SX0RCQ0xJQ0s6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IFJvd0V2ZW50RGVsZWdhdGVyID0gPFxuICBUIGV4dGVuZHMgbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55XG4+KEV4dGVuZEJhc2U6IFQpID0+IHtcbiAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgRXh0ZW5kQmFzZSB7XG4gICAgY2xpY2tOdW06IG51bWJlciA9IDA7XG5cbiAgICBjb25zdHJ1Y3RvciguLi5wcm9wczogYW55W10pIHtcbiAgICAgIHN1cGVyKC4uLnByb3BzKTtcbiAgICAgIHRoaXMuY3JlYXRlRGVmYXVsdEV2ZW50SGFuZGxlciA9XG4gICAgICAgIHRoaXMuY3JlYXRlRGVmYXVsdEV2ZW50SGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5jcmVhdGVDbGlja0V2ZW50SGFuZGxlciA9IHRoaXMuY3JlYXRlQ2xpY2tFdmVudEhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBjcmVhdGVDbGlja0V2ZW50SGFuZGxlcihcbiAgICAgIGNiOiAoZTogRXZlbnQsIHJvdzogYW55LCByb3dJbmRleDogbnVtYmVyKSA9PiB2b2lkXG4gICAgKSB7XG4gICAgICByZXR1cm4gKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICByb3csXG4gICAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgICAga2V5RmllbGQsXG4gICAgICAgICAgc2VsZWN0YWJsZSxcbiAgICAgICAgICBleHBhbmRhYmxlLFxuICAgICAgICAgIHJvd0luZGV4LFxuICAgICAgICAgIGV4cGFuZGVkLFxuICAgICAgICAgIGV4cGFuZFJvdyxcbiAgICAgICAgICBzZWxlY3RSb3csXG4gICAgICAgICAgREVMQVlfRk9SX0RCQ0xJQ0ssXG4gICAgICAgIH06IFJvd0V2ZW50RGVsZWdhdGVyUHJvcHMgPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIGNvbnN0IGNsaWNrRm4gPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKGNiKSB7XG4gICAgICAgICAgICBjYihlLCByb3csIHJvd0luZGV4KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBrZXkgPSBfLmdldChyb3csIGtleUZpZWxkKTtcblxuICAgICAgICAgIGlmIChleHBhbmRSb3cgJiYgZXhwYW5kYWJsZSAmJiAhZXhwYW5kUm93LmV4cGFuZEJ5Q29sdW1uT25seSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoc2VsZWN0Um93Lm1vZGUgIT09IFJPV19TRUxFQ1RfRElTQUJMRUQgJiZcbiAgICAgICAgICAgICAgICBzZWxlY3RSb3cuY2xpY2tUb0V4cGFuZCkgfHxcbiAgICAgICAgICAgICAgc2VsZWN0Um93Lm1vZGUgPT09IFJPV19TRUxFQ1RfRElTQUJMRURcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBleHBhbmRSb3cub25Sb3dFeHBhbmQoa2V5LCAhZXhwYW5kZWQsIHJvd0luZGV4LCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2VsZWN0Um93LmNsaWNrVG9TZWxlY3QgJiYgc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgc2VsZWN0Um93Lm9uUm93U2VsZWN0KGtleSwgIXNlbGVjdGVkLCByb3dJbmRleCwgZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChERUxBWV9GT1JfREJDTElDSykge1xuICAgICAgICAgIHRoaXMuY2xpY2tOdW0gKz0gMTtcbiAgICAgICAgICBfLmRlYm91bmNlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNsaWNrTnVtID09PSAxKSB7XG4gICAgICAgICAgICAgIGNsaWNrRm4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2xpY2tOdW0gPSAwO1xuICAgICAgICAgIH0sIERFTEFZX0ZPUl9EQkNMSUNLKSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNsaWNrRm4oKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjcmVhdGVEZWZhdWx0RXZlbnRIYW5kbGVyKFxuICAgICAgY2I6IChlOiBFdmVudCwgcm93OiBhbnksIHJvd0luZGV4OiBudW1iZXIpID0+IHZvaWRcbiAgICApIHtcbiAgICAgIHJldHVybiAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgeyByb3csIHJvd0luZGV4IH06IFJvd0V2ZW50RGVsZWdhdGVyUHJvcHMgPSB0aGlzLnByb3BzO1xuICAgICAgICBjYihlLCByb3csIHJvd0luZGV4KTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZGVsZWdhdGUoYXR0cnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgICAgY29uc3QgbmV3QXR0cnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7IC4uLmF0dHJzIH07XG4gICAgICBPYmplY3Qua2V5cyhhdHRycykuZm9yRWFjaCgoYXR0cikgPT4ge1xuICAgICAgICBpZiAoXy5pbmNsdWRlcyhldmVudHMsIGF0dHIpKSB7XG4gICAgICAgICAgbmV3QXR0cnNbYXR0cl0gPSB0aGlzLmNyZWF0ZURlZmF1bHRFdmVudEhhbmRsZXIoYXR0cnNbYXR0cl0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXdBdHRycztcbiAgICB9XG4gIH07XG59XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIENIRUNLQk9YX1NUQVRVU19DSEVDS0VELFxuICBDSEVDS0JPWF9TVEFUVVNfSU5ERVRFUk1JTkFURSxcbiAgUk9XX1NFTEVDVF9NVUxUSVBMRSxcbiAgUk9XX1NFTEVDVF9TSU5HTEUsXG59IGZyb20gXCIuLi9jb25zdFwiO1xuaW1wb3J0IF8gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBCb290c3RyYXBDb250ZXh0IH0gZnJvbSBcIi4uL2NvbnRleHRzL2Jvb3RzdHJhcFwiO1xuXG5pbnRlcmZhY2UgQ2hlY2tCb3hQcm9wcyB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY2hlY2tlZDogYm9vbGVhbjtcbiAgaW5kZXRlcm1pbmF0ZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IENoZWNrQm94OiBSZWFjdC5GQzxDaGVja0JveFByb3BzPiA9ICh7XG4gIGNsYXNzTmFtZSxcbiAgY2hlY2tlZCxcbiAgaW5kZXRlcm1pbmF0ZSxcbn0pID0+IChcbiAgPGlucHV0XG4gICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICBjaGVja2VkPXtjaGVja2VkfVxuICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgIHJlZj17KGlucHV0KSA9PiB7XG4gICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgaW5wdXQuaW5kZXRlcm1pbmF0ZSA9IGluZGV0ZXJtaW5hdGU7XG4gICAgICB9XG4gICAgfX1cbiAgICBvbkNoYW5nZT17KCkgPT4geyB9fVxuICAvPlxuKTtcblxuaW50ZXJmYWNlIFNlbGVjdGlvbkhlYWRlckNlbGxQcm9wcyB7XG4gIG1vZGU/OiBzdHJpbmc7XG4gIGNoZWNrZWRTdGF0dXM/OiBzdHJpbmc7XG4gIG9uQWxsUm93c1NlbGVjdD86IChcbiAgICBlOiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50PixcbiAgICBpc1VuU2VsZWN0OiBib29sZWFuXG4gICkgPT4gdm9pZDtcbiAgaGlkZVNlbGVjdEFsbD86IGJvb2xlYW47XG4gIHNlbGVjdGlvbkhlYWRlclJlbmRlcmVyPzogKGFyZ3M6IHtcbiAgICBtb2RlPzogc3RyaW5nO1xuICAgIGNoZWNrZWQ6IGJvb2xlYW47XG4gICAgaW5kZXRlcm1pbmF0ZTogYm9vbGVhbjtcbiAgfSkgPT4gUmVhY3ROb2RlO1xuICBoZWFkZXJDb2x1bW5TdHlsZT86XG4gIHwgUmVhY3QuQ1NTUHJvcGVydGllc1xuICB8ICgoY2hlY2tlZFN0YXR1czogc3RyaW5nKSA9PiBSZWFjdC5DU1NQcm9wZXJ0aWVzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VsZWN0aW9uSGVhZGVyQ2VsbCBleHRlbmRzIENvbXBvbmVudDxTZWxlY3Rpb25IZWFkZXJDZWxsUHJvcHM+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IFNlbGVjdGlvbkhlYWRlckNlbGxQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZUNoZWNrQm94Q2xpY2sgPSB0aGlzLmhhbmRsZUNoZWNrQm94Q2xpY2suYmluZCh0aGlzKTtcbiAgfVxuXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6IFNlbGVjdGlvbkhlYWRlckNlbGxQcm9wcykge1xuICAgIGNvbnN0IHsgbW9kZSwgY2hlY2tlZFN0YXR1cyB9ID0gdGhpcy5wcm9wcztcblxuICAgIGlmIChtb2RlID09PSBST1dfU0VMRUNUX1NJTkdMRSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIG5leHRQcm9wcy5jaGVja2VkU3RhdHVzICE9PSBjaGVja2VkU3RhdHVzO1xuICB9XG5cbiAgaGFuZGxlQ2hlY2tCb3hDbGljayhlOiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50Pikge1xuICAgIGNvbnN0IHsgb25BbGxSb3dzU2VsZWN0LCBjaGVja2VkU3RhdHVzIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGlzVW5TZWxlY3QgPVxuICAgICAgY2hlY2tlZFN0YXR1cyA9PT0gQ0hFQ0tCT1hfU1RBVFVTX0NIRUNLRUQgfHxcbiAgICAgIGNoZWNrZWRTdGF0dXMgPT09IENIRUNLQk9YX1NUQVRVU19JTkRFVEVSTUlOQVRFO1xuXG4gICAgb25BbGxSb3dzU2VsZWN0IShlLCBpc1VuU2VsZWN0KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBtb2RlLFxuICAgICAgY2hlY2tlZFN0YXR1cyxcbiAgICAgIHNlbGVjdGlvbkhlYWRlclJlbmRlcmVyLFxuICAgICAgaGlkZVNlbGVjdEFsbCxcbiAgICAgIGhlYWRlckNvbHVtblN0eWxlLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChoaWRlU2VsZWN0QWxsKSB7XG4gICAgICByZXR1cm4gPHRoIGRhdGEtcm93LXNlbGVjdGlvbiAvPjtcbiAgICB9XG5cbiAgICBjb25zdCBjaGVja2VkID0gY2hlY2tlZFN0YXR1cyA9PT0gQ0hFQ0tCT1hfU1RBVFVTX0NIRUNLRUQ7XG5cbiAgICBjb25zdCBpbmRldGVybWluYXRlID0gY2hlY2tlZFN0YXR1cyA9PT0gQ0hFQ0tCT1hfU1RBVFVTX0lOREVURVJNSU5BVEU7XG5cbiAgICBjb25zdCBhdHRyczogUmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQ+ID0ge307XG4gICAgbGV0IGNvbnRlbnQ6IFJlYWN0Tm9kZSB8IHVuZGVmaW5lZDtcbiAgICBpZiAoc2VsZWN0aW9uSGVhZGVyUmVuZGVyZXIgfHwgbW9kZSA9PT0gUk9XX1NFTEVDVF9NVUxUSVBMRSkge1xuICAgICAgYXR0cnMub25DbGljayA9IHRoaXMuaGFuZGxlQ2hlY2tCb3hDbGljaztcbiAgICB9XG5cbiAgICBhdHRycy5zdHlsZSA9IChfLmlzRnVuY3Rpb24oaGVhZGVyQ29sdW1uU3R5bGUpXG4gICAgICA/IGhlYWRlckNvbHVtblN0eWxlKGNoZWNrZWRTdGF0dXMhKVxuICAgICAgOiBoZWFkZXJDb2x1bW5TdHlsZSkgYXMgYW55O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxCb290c3RyYXBDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICB7KHsgYm9vdHN0cmFwNCB9KSA9PiB7XG4gICAgICAgICAgaWYgKHNlbGVjdGlvbkhlYWRlclJlbmRlcmVyKSB7XG4gICAgICAgICAgICBjb250ZW50ID0gc2VsZWN0aW9uSGVhZGVyUmVuZGVyZXIoe1xuICAgICAgICAgICAgICBtb2RlLFxuICAgICAgICAgICAgICBjaGVja2VkLFxuICAgICAgICAgICAgICBpbmRldGVybWluYXRlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChtb2RlID09PSBST1dfU0VMRUNUX01VTFRJUExFKSB7XG4gICAgICAgICAgICBjb250ZW50ID0gKFxuICAgICAgICAgICAgICA8Q2hlY2tCb3hcbiAgICAgICAgICAgICAgICB7Li4udGhpcy5wcm9wc31cbiAgICAgICAgICAgICAgICBjaGVja2VkPXtjaGVja2VkfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Ym9vdHN0cmFwNCA/IFwic2VsZWN0aW9uLWlucHV0LTRcIiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgaW5kZXRlcm1pbmF0ZT17aW5kZXRlcm1pbmF0ZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwic2VsZWN0aW9uLWNlbGwtaGVhZGVyXCIgZGF0YS1yb3ctc2VsZWN0aW9uIHsuLi5hdHRycyBhcyBhbnl9PlxuICAgICAgICAgICAgICB7Y29udGVudH1cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgKTtcbiAgICAgICAgfX1cbiAgICAgIDwvQm9vdHN0cmFwQ29udGV4dC5Db25zdW1lcj5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IENvbHVtbkRlc2NyaXB0aW9uLCBTZWxlY3RSb3dQcm9wcyB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgRm9vdGVyQ2VsbCBmcm9tIFwiLi9mb290ZXItY2VsbFwiO1xuaW1wb3J0IFJvd1RlbXBsYXRlLCB7IEV4cGFuZFJvdyB9IGZyb20gXCIuL3Jvdy9yb3ctdGVtcGxhdGVcIjtcbmltcG9ydCBfIGZyb20gXCIuL3V0aWxzXCI7XG5cbmludGVyZmFjZSBGb290ZXJQcm9wcyB7XG4gIGRhdGE/OiBhbnlbXTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjb2x1bW5zOiBDb2x1bW5EZXNjcmlwdGlvbltdO1xuICBzZWxlY3RSb3c/OiBTZWxlY3RSb3dQcm9wczxhbnk+IHwgdW5kZWZpbmVkO1xuICBleHBhbmRSb3c/OiBFeHBhbmRSb3c7XG59XG5cbmNvbnN0IEZvb3RlcjogUmVhY3QuRkM8Rm9vdGVyUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgZGF0YSA9IFtdLCBjbGFzc05hbWUsIGNvbHVtbnMgPSBbXSwgc2VsZWN0Um93LCBleHBhbmRSb3cgfSA9IHByb3BzO1xuXG4gIGZ1bmN0aW9uIHJlbmRlckNvbnRlbnQoKTogUmVhY3ROb2RlIHtcbiAgICByZXR1cm4gY29sdW1ucy5tYXAoKGNvbHVtbiwgaSkgPT4ge1xuICAgICAgaWYgKGNvbHVtbi5mb290ZXIgPT09IHVuZGVmaW5lZCB8fCBjb2x1bW4uZm9vdGVyID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29sdW1uRGF0YSA9IF8ucGx1Y2soZGF0YSwgY29sdW1uLmRhdGFGaWVsZCk7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxGb290ZXJDZWxsXG4gICAgICAgICAgaW5kZXg9e2l9XG4gICAgICAgICAga2V5PXtjb2x1bW4uZGF0YUZpZWxkfVxuICAgICAgICAgIGNvbHVtbj17Y29sdW1ufVxuICAgICAgICAgIGNvbHVtbkRhdGE9e2NvbHVtbkRhdGF9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8dGZvb3Q+XG4gICAgICA8Um93VGVtcGxhdGVcbiAgICAgICAgcmVuZGVyQ29udGVudD17cmVuZGVyQ29udGVudH1cbiAgICAgICAgc2VsZWN0Um93PXtzZWxlY3RSb3d9XG4gICAgICAgIGV4cGFuZFJvdz17ZXhwYW5kUm93fVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgY2VsbEVsPVwidGhcIlxuICAgICAgLz5cbiAgICA8L3Rmb290PlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgRm9vdGVyO1xuIiwiaW1wb3J0IHsgQ1NTUHJvcGVydGllcywgU3ludGhldGljRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IEJvb3RzdHJhcFRhYmxlIGZyb20gXCIuL3NyYy9ib290c3RyYXAtdGFibGVcIjtcbmltcG9ydCB3aXRoQ29udGV4dCBmcm9tIFwiLi9zcmMvY29udGV4dHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aENvbnRleHQoQm9vdHN0cmFwVGFibGUpO1xuXG4vLyBUeXBlIGRlZmluaXRpb25zIGZvciByZWFjdC1ib290c3RyYXAtdGFibGUtbmV4dCA0LjBcbi8vIFByb2plY3Q6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdC1ib290c3RyYXAtdGFibGUvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMiNyZWFkbWVcbi8vIERlZmluaXRpb25zIGJ5OiBXbGFkIE1laXhuZXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9nb3N0aWNrcz5cbi8vICAgICAgICAgICAgICAgIFZhbGVudGluIFNsb2JvemFuaW4gPGh0dHBzOi8vZ2l0aHViLmNvbS9pZ25lZm9saW8+XG4vLyAgICAgICAgICAgICAgICBKYWt1YiBSw7PFvGJpY2tpIDxodHRwczovL2dpdGh1Yi5jb20vanJvemJpY2tpPlxuLy8gRGVmaW5pdGlvbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9EZWZpbml0ZWx5VHlwZWQvRGVmaW5pdGVseVR5cGVkXG4vLyBUeXBlU2NyaXB0IFZlcnNpb246IDMuMFxuXG4vLyBkb2N1bWVudGF0aW9uIHRha2VuIGZyb20gaHR0cHM6Ly9yZWFjdC1ib290c3RyYXAtdGFibGUuZ2l0aHViLmlvL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvZG9jcy90YWJsZS1wcm9wcy5odG1sXG5cbmV4cG9ydCAqIGZyb20gXCIuL3NyYy9jb25zdFwiO1xuaW1wb3J0IHtcbiAgUk9XX1NFTEVDVF9TSU5HTEUsXG4gIFJPV19TRUxFQ1RfTVVMVElQTEUsXG4gIFJPV19TRUxFQ1RfRElTQUJMRUQsXG4gIENIRUNLQk9YX1NUQVRVU19JTkRFVEVSTUlOQVRFLFxuICBDSEVDS0JPWF9TVEFUVVNfQ0hFQ0tFRCxcbiAgQ0hFQ0tCT1hfU1RBVFVTX1VOQ0hFQ0tFRCxcbiAgRklMVEVSU19QT1NJVElPTl9JTkxJTkUsXG4gIEZJTFRFUlNfUE9TSVRJT05fVE9QLFxuICBGSUxURVJTX1BPU0lUSU9OX0JPVFRPTSxcbn0gZnJvbSBcIi4vc3JjL2NvbnN0XCI7XG5cbmV4cG9ydCB0eXBlIFJvd1NlbGVjdGlvblR5cGUgPVxuICB8IHR5cGVvZiBST1dfU0VMRUNUX1NJTkdMRVxuICB8IHR5cGVvZiBST1dfU0VMRUNUX01VTFRJUExFXG4gIHwgdHlwZW9mIFJPV19TRUxFQ1RfRElTQUJMRUQ7XG5leHBvcnQgdHlwZSBUYWJsZUNoZWNrYm94U3RhdHVzID1cbiAgfCB0eXBlb2YgQ0hFQ0tCT1hfU1RBVFVTX0lOREVURVJNSU5BVEVcbiAgfCB0eXBlb2YgQ0hFQ0tCT1hfU1RBVFVTX0NIRUNLRURcbiAgfCB0eXBlb2YgQ0hFQ0tCT1hfU1RBVFVTX1VOQ0hFQ0tFRDtcbmV4cG9ydCB0eXBlIEZpbHRlclBvc2l0aW9uID1cbiAgfCB0eXBlb2YgRklMVEVSU19QT1NJVElPTl9JTkxJTkVcbiAgfCB0eXBlb2YgRklMVEVSU19QT1NJVElPTl9UT1BcbiAgfCB0eXBlb2YgRklMVEVSU19QT1NJVElPTl9CT1RUT007XG5cbi8qKlxuICogVGFibGUgY2hhbmdlIGV2ZW50IHR5cGVzXG4gKi9cbmV4cG9ydCB0eXBlIFRhYmxlQ2hhbmdlVHlwZSA9IFwiZmlsdGVyXCIgfCBcInBhZ2luYXRpb25cIiB8IFwic29ydFwiIHwgXCJjZWxsRWRpdFwiO1xuXG4vKipcbiAqIFVzZWQgdG8gc3BlY2lmeSB0aGUgdGV4dCBhbGlnbm1lbnQgZm9yIGEgY29sdW1uLlxuICovXG5leHBvcnQgdHlwZSBDZWxsQWxpZ25tZW50ID1cbiAgfCAoXCJsZWZ0XCIgfCBcImNlbnRlclwiIHwgXCJyaWdodFwiIHwgXCJzdGFydFwiIHwgXCJlbmRcIilcbiAgfCBzdHJpbmc7XG5cbi8qKlxuICogRmlsdGVyIGNvbXBhcmF0b3JzIHVzZWQgZm9yIHRhYmxlIGZpbHRlcnNcbiAqL1xuZGVjbGFyZSBlbnVtIEZpbHRlckNvbXBhcmF0b3Ige1xuICBMSUtFID0gXCJMSUtFXCIsXG4gIEVRID0gXCI9XCIsXG4gIE5FID0gXCIhPVwiLFxuICBHVCA9IFwiPlwiLFxuICBHRSA9IFwiPj1cIixcbiAgTFQgPSBcIjxcIixcbiAgTEUgPSBcIjw9XCIsXG59XG5cbi8qKlxuICogU29ydCBPcmRlciB2YWx1ZXMuICdhc2MnID0gYXNjZW5kaW5nLCAnZGVzYycgPSBkZXNjZW5kaW5nLlxuICovXG5leHBvcnQgdHlwZSBTb3J0T3JkZXIgPSBcImFzY1wiIHwgXCJkZXNjXCI7XG5cbmV4cG9ydCB0eXBlIENvbHVtblNvcnRWYWx1ZTxSLCBDID0gYW55PiA9IChcbiAgY2VsbDogQyxcbiAgcm93OiBSXG4pID0+IGJvb2xlYW4gfCBzdHJpbmcgfCBudW1iZXI7XG5cbmV4cG9ydCB0eXBlIENvbHVtblNvcnRGdW5jPFQsIEUgZXh0ZW5kcyBrZXlvZiBUID0gYW55PiA9IChcbiAgYTogVFtFXSxcbiAgYjogVFtFXSxcbiAgb3JkZXI6IFwiYXNjXCIgfCBcImRlc2NcIixcbiAgZGF0YUZpZWxkOiBhbnksXG4gIHJvd0E6IFQsXG4gIHJvd0I6IFRcbikgPT4gbnVtYmVyO1xuXG5leHBvcnQgdHlwZSBDb2x1bW5Tb3J0Q2FyZXQ8VCBleHRlbmRzIG9iamVjdCA9IGFueSwgRSA9IGFueT4gPSAoXG4gIG9yZGVyOiBcImFzY1wiIHwgXCJkZXNjXCIgfCB1bmRlZmluZWQsXG4gIGNvbHVtbjogQ29sdW1uRGVzY3JpcHRpb248VCwgRT5cbikgPT4gSlNYLkVsZW1lbnQgfCBzdHJpbmcgfCBudWxsO1xuXG5leHBvcnQgdHlwZSBIZWFkZXJTb3J0aW5nQ2xhc3NlczxUIGV4dGVuZHMgb2JqZWN0ID0gYW55LCBFID0gYW55PiA9XG4gIHwgc3RyaW5nXG4gIHwgKChcbiAgICBjb2x1bW46IENvbHVtbkRlc2NyaXB0aW9uPFQsIEU+LFxuICAgIHNvcnRPcmRlcjogXCJhc2NcIiB8IFwiZGVzY1wiLFxuICAgIGlzTGFzdFNvcnRpbmc6IGJvb2xlYW4sXG4gICAgY29sSW5kZXg6IG51bWJlclxuICApID0+IHN0cmluZyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVDaGFuZ2VTdGF0ZTxUPiB7XG4gIHBhZ2U6IG51bWJlcjtcbiAgc2l6ZVBlclBhZ2U6IG51bWJlcjtcbiAgc29ydEZpZWxkOiBzdHJpbmc7XG4gIHNvcnRPcmRlcjogXCJhc2NcIiB8IFwiZGVzY1wiO1xuICBmaWx0ZXJzOiB7XG4gICAgW2tleTogc3RyaW5nXTogeyBmaWx0ZXJWYWw6IGFueTsgZmlsdGVyVHlwZTogXCJURVhUXCI7IGNvbXBhcmF0b3I6IGFueSB9O1xuICB9O1xuICBkYXRhOiBUW107XG4gIGNlbGxFZGl0OiB7XG4gICAgcm93SWQ6IHN0cmluZztcbiAgICBkYXRhRmllbGQ6IGFueTtcbiAgICBuZXdWYWx1ZTogYW55O1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBIZWFkZXJGb3JtYXR0ZXI8VCBleHRlbmRzIG9iamVjdCA9IGFueT4gPSAoXG4gIGNvbHVtbjogQ29sdW1uRGVzY3JpcHRpb248VD4sXG4gIGNvbEluZGV4OiBudW1iZXIsXG4gIGNvbXBvbmVudHM6IHtcbiAgICBzb3J0RWxlbWVudDogSlNYLkVsZW1lbnQ7XG4gICAgZmlsdGVyRWxlbWVudDogSlNYLkVsZW1lbnQ7XG4gIH1cbikgPT4gUmVhY3QuUmVhY3ROb2RlO1xuXG5leHBvcnQgdHlwZSBDb2x1bW5Gb3JtYXR0ZXI8UiwgRSA9IGFueSwgQyA9IGFueT4gPSAoXG4gIGNlbGw6IEMsXG4gIHJvdzogUixcbiAgcm93SW5kZXg6IG51bWJlcixcbiAgZm9ybWF0RXh0cmFEYXRhPzogRVxuKSA9PiBSZWFjdC5SZWFjdE5vZGU7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvblJlc3VsdCB7XG4gIGFzeW5jPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgdmFsaWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbkRlc2NyaXB0aW9uPFQgZXh0ZW5kcyBvYmplY3QgPSBhbnksIEUgPSBhbnk+IHtcbiAgLyoqXG4gICAqIElmIHNldCB0aGUgY29sdW1uIHdpbGwgbm90IHVzZSBjZWxsIHZhbHVlc1xuICAgKi9cbiAgaXNEdW1teUZpZWxkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgZGF0YUZpZWxkOiBhbnk7XG4gIGZvcm1hdHRlcj86IENvbHVtbkZvcm1hdHRlcjxULCBFPiB8IHVuZGVmaW5lZDtcbiAgaGlkZGVuPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIENvbHVtbiBoZWFkZXIgZmllbGRcbiAgICovXG4gIHRleHQ6IHN0cmluZztcbiAgY2xhc3Nlcz86XG4gIHwgc3RyaW5nXG4gIHwgKChjZWxsOiBUW2tleW9mIFRdLCByb3c6IFQsIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpID0+IHN0cmluZylcbiAgfCB1bmRlZmluZWQ7XG4gIGhlYWRlckNsYXNzZXM/OlxuICB8IHN0cmluZ1xuICB8ICgoY29sdW1uOiBDb2x1bW5EZXNjcmlwdGlvbjxULCBFPiwgY29sSW5kZXg6IG51bWJlcikgPT4gc3RyaW5nKVxuICB8IHVuZGVmaW5lZDtcbiAgc3R5bGU/OlxuICB8IFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgfCAoKFxuICAgIGNlbGw6IFRba2V5b2YgVF0sXG4gICAgcm93OiBULFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgY29sSW5kZXg6IG51bWJlclxuICApID0+IFJlYWN0LkNTU1Byb3BlcnRpZXMpXG4gIHwgdW5kZWZpbmVkO1xuICBzb3J0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgc29ydFZhbHVlPzogQ29sdW1uU29ydFZhbHVlPFQ+IHwgdW5kZWZpbmVkO1xuICBzb3J0RnVuYz86IENvbHVtblNvcnRGdW5jPFQ+IHwgdW5kZWZpbmVkO1xuICBzb3J0Q2FyZXQ/OiBDb2x1bW5Tb3J0Q2FyZXQ8VCwgRT4gfCB1bmRlZmluZWQ7XG4gIHNlYXJjaGFibGU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBhbGlnbj86XG4gIHwgQ2VsbEFsaWdubWVudFxuICB8ICgoXG4gICAgY2VsbDogVFtrZXlvZiBUXSxcbiAgICByb3c6IFQsXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBjb2xJbmRleDogbnVtYmVyXG4gICkgPT4gQ2VsbEFsaWdubWVudClcbiAgfCB1bmRlZmluZWQ7XG4gIGhlYWRlclN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8ICgoKSA9PiBSZWFjdC5DU1NQcm9wZXJ0aWVzKSB8IHVuZGVmaW5lZDtcblxuICB0b29sdGlwRGF0YUZpZWxkPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBlZGl0YWJsZT86XG4gIHwgYm9vbGVhblxuICB8ICgoY2VsbDogYW55LCByb3c6IFQsIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpID0+IGJvb2xlYW4pXG4gIHwgdW5kZWZpbmVkO1xuICBlZGl0b3I/OlxuICB8IHtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgb3B0aW9ucz86IEFycmF5PHsgdmFsdWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9PiB8IHVuZGVmaW5lZDtcbiAgfVxuICB8IHVuZGVmaW5lZDtcbiAgZmlsdGVyPzogYm9vbGVhbiB8IFRhYmxlQ29sdW1uRmlsdGVyUHJvcHMgfCB1bmRlZmluZWQ7XG4gIGZpbHRlclZhbHVlPzogKChjZWxsOiBUW2tleW9mIFRdLCByb3c6IFQpID0+IHN0cmluZykgfCB1bmRlZmluZWQ7XG4gIGZpbHRlclJlbmRlcmVyPzogKChmaWx0ZXJIYW5kbGVyOiBGdW5jdGlvbiwgY29sdW1uOiBhbnkpID0+IEpTWC5FbGVtZW50KSB8IHVuZGVmaW5lZDtcbiAgaGVhZGVyQWxpZ24/OiBDZWxsQWxpZ25tZW50IHwgdW5kZWZpbmVkO1xuICBoZWFkZXJGb3JtYXR0ZXI/OiBIZWFkZXJGb3JtYXR0ZXI8VD4gfCB1bmRlZmluZWQ7XG4gIGhlYWRlclNvcnRpbmdDbGFzc2VzPzogSGVhZGVyU29ydGluZ0NsYXNzZXM8VCwgRT4gfCB1bmRlZmluZWQ7XG4gIGZvcm1hdEV4dHJhRGF0YT86XG4gIHwgKHtcbiAgICB0b29sdGlwRm9ybWF0dGVyPzogKChyb3c6IFQpID0+IEpTWC5FbGVtZW50KSB8IHVuZGVmaW5lZDtcbiAgfSAmIEUpXG4gIHwgdW5kZWZpbmVkO1xuICB3aWR0aD86IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgZm9vdGVyPzpcbiAgfCBib29sZWFuXG4gIHwgbnVtYmVyXG4gIHwgc3RyaW5nXG4gIHwgKChcbiAgICBjb2x1bW5EYXRhOiBhbnksXG4gICAgY29sdW1uOiBDb2x1bW5EZXNjcmlwdGlvbjxULCBFPixcbiAgICBjb2x1bW5JbmRleDogbnVtYmVyXG4gICkgPT4gc3RyaW5nKVxuICB8IHVuZGVmaW5lZDtcbiAgLy8gVE9ET1xuICBmb290ZXJGb3JtYXR0ZXI/OlxuICB8ICgoY29sdW1uOiBDb2x1bW5EZXNjcmlwdGlvbjxULCBFPiwgY29sdW1uSW5kZXg6IG51bWJlciwgdGV4dDogYW55KSA9PiB2b2lkKVxuICB8IHVuZGVmaW5lZDtcbiAgZm9vdGVyQ2xhc3Nlcz86XG4gIHwgc3RyaW5nXG4gIHwgKChjb2x1bW46IENvbHVtbkRlc2NyaXB0aW9uPFQsIEU+LCBjb2x1bW5JbmRleDogbnVtYmVyKSA9PiBzdHJpbmcpXG4gIHwgdW5kZWZpbmVkO1xuICBmb290ZXJTdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7XG4gIGZvb3RlclRpdGxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgZm9vdGVyRXZlbnRzPzpcbiAgfCB7XG4gICAgb25DbGljazogKFxuICAgICAgZTogYW55LFxuICAgICAgY29sdW1uOiBDb2x1bW5EZXNjcmlwdGlvbjxULCBFPixcbiAgICAgIGNvbHVtbkluZGV4OiBudW1iZXJcbiAgICApID0+IHZvaWQ7XG4gIH1cbiAgfCB1bmRlZmluZWQ7XG4gIGZvb3RlckFsaWduPzpcbiAgfCBDZWxsQWxpZ25tZW50XG4gIHwgKChjb2x1bW46IENvbHVtbkRlc2NyaXB0aW9uPFQsIEU+LCBjb2xJbmRleDogbnVtYmVyKSA9PiBDZWxsQWxpZ25tZW50KVxuICB8IHVuZGVmaW5lZDtcbiAgZm9vdGVyQXR0cnM/OlxuICB8IG9iamVjdFxuICB8ICgoY29sdW1uOiBDb2x1bW5EZXNjcmlwdGlvbjxULCBFPiwgY29sdW1uSW5kZXg6IG51bWJlcikgPT4gb2JqZWN0KVxuICB8IHVuZGVmaW5lZDtcbiAgdmFsaWRhdG9yPzpcbiAgfCAoKFxuICAgIG5ld1ZhbHVlOiBhbnksXG4gICAgcm93OiBULFxuICAgIGNvbHVtbjogQ29sdW1uRGVzY3JpcHRpb248VCwgRT4sXG4gICAgZG9uZTogKHJlc3VsdD86IFZhbGlkYXRpb25SZXN1bHQpID0+IGFueVxuICApID0+IGJvb2xlYW4gfCBWYWxpZGF0aW9uUmVzdWx0KVxuICB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQ1NWIENvbHVtbiBvcHRpb25zIG9ubHkgdXNlZCB3aXRoIHRoZSB0b29sa2l0IHByb3ZpZGVyXG4gICAqL1xuXG4gIC8qKlxuICAgKiBleHBvcnQgY3N2IGNlbGwgdHlwZSBjYW4gYmUgTnVtYmVyIG9yIFN0cmluZ1xuICAgKi9cbiAgY3N2VHlwZT86IG9iamVjdCB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEN1c3RvbSBjc3YgY2VsbCBmb3JtYXR0ZXIgdXNlZCB3aGVuIGV4cG9ydGluZyBjc3ZcbiAgICovXG4gIGNzdkZvcm1hdHRlcj86IENvbHVtbkZvcm1hdHRlcjxULCBFPiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIGNzdlRleHQgZGVmYXVsdHMgdG8gY29sdW1uLnRleHRcbiAgICovXG4gIGNzdlRleHQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUb2dnbGUgY29sdW1uIGRpc3BsYXkgaW4gQ1NWIGV4cG9ydFxuICAgKi9cbiAgY3N2RXhwb3J0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIENvbHVtbiB0b2dnbGUgbGlzdCB1c2VkIGJ5IFRvb2xraXQgcHJvdmlkZXJcbiAgICovXG4gIHRvZ2dsZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJpYyByb3cgZXZlbnQgaGFuZGxlclxuICovXG5leHBvcnQgdHlwZSBSb3dFdmVudEhhbmRsZXI8VD4gPSAoXG4gIGU6IFN5bnRoZXRpY0V2ZW50LFxuICByb3c6IFQsXG4gIHJvd0luZGV4OiBudW1iZXJcbikgPT4gdm9pZDtcblxuLyoqXG4gKiBSb3cgbGV2ZWwgZXZlbnQgaGFuZGxlcnNcbiAqL1xuZXhwb3J0IHR5cGUgUm93RXZlbnRIYW5kbGVyUHJvcHM8VCA9IGFueT4gPSBQYXJ0aWFsPHtcbiAgb25DbGljazogUm93RXZlbnRIYW5kbGVyPFQ+O1xuICBvbkRvdWJsZUNsaWNrOiBSb3dFdmVudEhhbmRsZXI8VD47XG4gIG9uTW91c2VFbnRlcjogUm93RXZlbnRIYW5kbGVyPFQ+O1xuICBvbk1vdXNlTGVhdmU6IFJvd0V2ZW50SGFuZGxlcjxUPjtcbiAgb25Db250ZXh0TWVudTogUm93RXZlbnRIYW5kbGVyPFQ+O1xufT47XG5cbi8qKlxuICogVGFibGUgY2hhbmdlIGNhbGxiYWNrIG1ldGhvZFxuICovXG5leHBvcnQgdHlwZSBUYWJsZUNoYW5nZUhhbmRsZXI8VD4gPSAoXG4gIHR5cGU6IFRhYmxlQ2hhbmdlVHlwZSxcbiAgbmV3U3RhdGU6IFRhYmxlQ2hhbmdlU3RhdGU8VD5cbikgPT4gdm9pZDtcblxuLyoqXG4gKiBBbGwgcG9zc2libGUgcGFnaW5hdGlvbiBvcHRpb25zIGhhbmRsZWQgYnkgdGhlIHBhZ2luYXRpb24gcGx1Z2luXG4gKlxuICogQ29uc3VsdCBbZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9yZWFjdC1ib290c3RyYXAtdGFibGUuZ2l0aHViLmlvL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvZG9jcy9wYWdpbmF0aW9uLXByb3BzLmh0bWwpXG4gKi9cbmV4cG9ydCB0eXBlIFBhZ2luYXRpb25PcHRpb25zID0gUGFydGlhbDx7XG4gIGN1c3RvbTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIGN1cnJlbnQgcGFnZS4gSXQncyBuZWNlc3Nhcnkgd2hlbiByZW1vdGUgaXMgZW5hYmxlZFxuICAgKi9cbiAgcGFnZTogbnVtYmVyO1xuICAvKipcbiAgICogU3BlY2lmeSB0aGUgc2l6ZSBwZXIgcGFnZS4gSXQncyBuZWNlc3Nhcnkgd2hlbiByZW1vdGUgaXMgZW5hYmxlZFxuICAgKi9cbiAgc2l6ZVBlclBhZ2U6IG51bWJlcjtcbiAgLyoqXG4gICAqIFRvdGFsIGRhdGEgc2l6ZS4gSXQncyBuZWNlc3Nhcnkgd2hlbiByZW1vdGUgaXMgZW5hYmxlZFxuICAgKi9cbiAgdG90YWxTaXplOiBudW1iZXI7XG4gIC8qKlxuICAgKiBmaXJzdCBwYWdlIHdpbGwgYmUgMCwgZGVmYXVsdCBpcyAxXG4gICAqL1xuICBwYWdlU3RhcnRJbmRleDogbnVtYmVyO1xuICAvKipcbiAgICogdGhlIHBhZ2luYXRpb24gYmFyIHNpemUsIGRlZmF1bHQgaXMgNVxuICAgKi9cbiAgcGFnaW5hdGlvblNpemU6IG51bWJlcjtcbiAgLyoqXG4gICAqIGRpc3BsYXkgcGFnaW5hdGlvbiBpbmZvcm1hdGlvblxuICAgKi9cbiAgc2hvd1RvdGFsOiBib29sZWFuO1xuICAvKipcbiAgICogQSBudW1lcmljIGFycmF5IGlzIGFsc28gYXZhaWxhYmxlOiBbNSwgMTBdLiB0aGUgcHVycG9zZSBvZiBhYm92ZSBleGFtcGxlIGlzIGN1c3RvbSB0aGUgdGV4dFxuICAgKi9cbiAgc2l6ZVBlclBhZ2VMaXN0OiBudW1iZXJbXSB8IEFycmF5PHsgdGV4dDogc3RyaW5nOyB2YWx1ZTogbnVtYmVyIH0+O1xuICAvKipcbiAgICogaGlkZSB0aGUgZ29pbmcgdG8gZmlyc3QgYW5kIGxhc3QgcGFnZSBidXR0b25cbiAgICovXG4gIHdpdGhGaXJzdEFuZExhc3Q6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBhbHdheXMgc2hvdyB0aGUgbmV4dCBhbmQgcHJldmlvdXMgcGFnZSBidXR0b25cbiAgICovXG4gIGFsd2F5c1Nob3dBbGxCdG5zOiBib29sZWFuO1xuICAvKipcbiAgICogdGhlIHRleHQgb2YgZmlyc3QgcGFnZSBidXR0b25cbiAgICovXG4gIGZpcnN0UGFnZVRleHQ6IHN0cmluZyB8IEpTWC5FbGVtZW50O1xuICAvKipcbiAgICogdGhlIHRleHQgb2YgcHJldmlvdXMgcGFnZSBidXR0b25cbiAgICovXG4gIHByZVBhZ2VUZXh0OiBzdHJpbmcgfCBKU1guRWxlbWVudDtcbiAgLyoqXG4gICAqIHRoZSB0ZXh0IG9mIG5leHQgcGFnZSBidXR0b25cbiAgICovXG4gIG5leHRQYWdlVGV4dDogc3RyaW5nIHwgSlNYLkVsZW1lbnQ7XG4gIC8qKlxuICAgKiB0aGUgdGV4dCBvZiBsYXN0IHBhZ2UgYnV0dG9uXG4gICAqL1xuICBsYXN0UGFnZVRleHQ6IHN0cmluZyB8IEpTWC5FbGVtZW50O1xuICAvKipcbiAgICogdGhlIHRpdGxlIG9mIG5leHQgcGFnZSBidXR0b25cbiAgICovXG4gIG5leHRQYWdlVGl0bGU6IHN0cmluZztcbiAgLyoqXG4gICAqIHRoZSB0aXRsZSBvZiBwcmV2aW91cyBwYWdlIGJ1dHRvblxuICAgKi9cbiAgcHJlUGFnZVRpdGxlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiB0aGUgdGl0bGUgb2YgZmlyc3QgcGFnZSBidXR0b25cbiAgICovXG4gIGZpcnN0UGFnZVRpdGxlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiB0aGUgdGl0bGUgb2YgbGFzdCBwYWdlIGJ1dHRvblxuICAgKi9cbiAgbGFzdFBhZ2VUaXRsZTogc3RyaW5nO1xuICAvKipcbiAgICogaGlkZSB0aGUgc2l6ZSBwZXIgcGFnZSBkcm9wZG93blxuICAgKi9cbiAgaGlkZVNpemVQZXJQYWdlOiBib29sZWFuO1xuICAvKipcbiAgICogaGlkZSBwYWdpbmF0aW9uIGJhciB3aGVuIG9ubHkgb25lIHBhZ2UsIGRlZmF1bHQgaXMgZmFsc2VcbiAgICovXG4gIGhpZGVQYWdlTGlzdE9ubHlPbmVQYWdlOiBib29sZWFuO1xuICAvKipcbiAgICogY3VzdG9tIHBhZ2UgYnV0dG9uIGluc2lkZSB0aGUgcGFnaW5hdGlvbiBsaXN0XG4gICAqL1xuICBwYWdlQnV0dG9uUmVuZGVyZXI6IChvcHRpb25zOiBQYWdlQnV0dG9uUmVuZGVyZXJPcHRpb25zKSA9PiBKU1guRWxlbWVudDtcbiAgLyoqXG4gICAqIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gcGFnZSB3YXMgY2hhbmdpbmdcbiAgICovXG4gIG9uUGFnZUNoYW5nZTogKHBhZ2U6IG51bWJlciwgc2l6ZVBlclBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbiAgLyoqXG4gICAqIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gcGFnZSBzaXplIHdhcyBjaGFuZ2luZ1xuICAgKi9cbiAgb25TaXplUGVyUGFnZUNoYW5nZTogKHBhZ2U6IG51bWJlciwgc2l6ZVBlclBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbiAgLyoqXG4gICAqIGN1c3RvbSBwYWdpbmF0aW9uIGxpc3QgY29tcG9uZW50XG4gICAqL1xuICBwYWdlTGlzdFJlbmRlcmVyOiAob3B0aW9uczogUGFnZUxpc3RSZW5kZXJlck9wdGlvbnMpID0+IEpTWC5FbGVtZW50O1xuICAvKipcbiAgICogY3VzdG9tIHNpemUgcGVyIHBhZ2VcbiAgICovXG4gIHNpemVQZXJQYWdlUmVuZGVyZXI6IChvcHRpb25zOiBTaXplUGVyUGFnZVJlbmRlcmVyT3B0aW9ucykgPT4gSlNYLkVsZW1lbnQ7XG4gIC8qKlxuICAgKiBjdXN0b20gc2l6ZSBwZXIgcGFnZSBkcm9wZG93biBjb21wb25lbnRcbiAgICovXG4gIHNpemVQZXJQYWdlT3B0aW9uUmVuZGVyZXI6IChcbiAgICBvcHRpb25zOiBTaXplUGVyUGFnZU9wdGlvblJlbmRlcmVyT3B0aW9uc1xuICApID0+IEpTWC5FbGVtZW50O1xuICAvKipcbiAgICogY3VzdG9tIHRoZSBwYWdpbmF0aW9uIHRvdGFsXG4gICAqL1xuICBwYWdpbmF0aW9uVG90YWxSZW5kZXJlcjogKFxuICAgIGZyb206IG51bWJlcixcbiAgICB0bzogbnVtYmVyLFxuICAgIHNpemU6IG51bWJlclxuICApID0+IEpTWC5FbGVtZW50O1xufT47XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2l6ZVBlclBhZ2VPcHRpb25SZW5kZXJlck9wdGlvbnMge1xuICAvKipcbiAgICogdGV4dCBvZiB0aGUgb3B0aW9uXG4gICAqL1xuICB0ZXh0OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBzaXplIG9mIHBlciBwYWdlIG9wdGlvblxuICAgKi9cbiAgcGFnZTogbnVtYmVyO1xuICAvKipcbiAgICogY2FsbCBpdCB3aGVuIHlvdSBuZWVkIHRvIGNoYW5nZSBzaXplIHBlciBwYWdlXG4gICAqL1xuICBvblNpemVQZXJQYWdlQ2hhbmdlOiAocGFnZTogbnVtYmVyLCBzaXplUGVyUGFnZTogbnVtYmVyKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VMaXN0UmVuZGVyZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIGN1cnJlbnQgcGFnZVxuICAgKi9cbiAgcGFnZXM6IEFycmF5PHtcbiAgICBhY3RpdmU6IGJvb2xlYW47XG4gICAgZGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgcGFnZTogbnVtYmVyO1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gIH0+O1xuICAvKipcbiAgICogY2FsbCBpdCB3aGVuIHlvdSBuZWVkIHRvIGNoYW5nZSBwYWdlXG4gICAqL1xuICBvblBhZ2VDaGFuZ2U6IChwYWdlOiBudW1iZXIsIHNpemVQZXJQYWdlOiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZUJ1dHRvblJlbmRlcmVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBwYWdlIG51bWJlclxuICAgKi9cbiAgcGFnZTogbnVtYmVyIHwgc3RyaW5nO1xuICAvKipcbiAgICogaXMgdGhpcyBwYWdlIHRoZSBjdXJyZW50IHBhZ2Ugb3Igbm90XG4gICAqL1xuICBhY3RpdmU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiAgaXMgdGhpcyBwYWdlIGRpc2FibGVkIG9yIG5vdFxuICAgKi9cbiAgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBwYWdlIHRpdGxlXG4gICAqL1xuICB0aXRsZTogc3RyaW5nO1xuICAvKipcbiAgICogY2FsbCBpdCB3aGVuIHlvdSBuZWVkIHRvIGNoYW5nZSBwYWdlXG4gICAqL1xuICBvblBhZ2VDaGFuZ2U6IChwYWdlOiBudW1iZXIsIHNpemVQZXJQYWdlOiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2l6ZVBlclBhZ2VSZW5kZXJlck9wdGlvbnMge1xuICAvKipcbiAgICogZHJvcGRvd24gb3B0aW9uc1xuICAgKi9cbiAgb3B0aW9uczogQXJyYXk8eyB0ZXh0OiBzdHJpbmc7IHBhZ2U6IG51bWJlciB9PjtcbiAgLyoqXG4gICAqIGN1cnJlbnQgc2l6ZSBwZXIgcGFnZVxuICAgKi9cbiAgY3VyclNpemVQZXJQYWdlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBjYWxsIGl0IHdoZW4geW91IG5lZWQgdG8gY2hhbmdlIHNpemUgcGVyIHBhZ2VcbiAgICovXG4gIG9uU2l6ZVBlclBhZ2VDaGFuZ2U6IChwYWdlOiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0Um93UHJvcHM8VD4ge1xuICBtb2RlOiBzdHJpbmc7XG4gIGNsaWNrVG9TZWxlY3Q/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBjbGlja1RvRXhwYW5kPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgY2xpY2tUb0VkaXQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBoaWRlU2VsZWN0QWxsPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgc2VsZWN0ZWQ/OiBBcnJheTxudW1iZXIgfCBzdHJpbmc+IHwgdW5kZWZpbmVkO1xuICBvblNlbGVjdD86XG4gIHwgKChcbiAgICByb3c6IFQsXG4gICAgaXNTZWxlY3RlZDogYm9vbGVhbixcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGU6IFN5bnRoZXRpY0V2ZW50XG4gICkgPT4gdm9pZCB8IGJvb2xlYW4pXG4gIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogVGhpcyBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aGVuIHNlbGVjdC91bnNlbGVjdCBhbGwgYW5kIGl0IG9ubHkgd29yayB3aGVuIHlvdSBjb25maWd1cmUgc2VsZWN0Um93Lm1vZGUgYXMgY2hlY2tib3guXG4gICAqL1xuICBvblNlbGVjdEFsbD86XG4gIHwgKChcbiAgICBpc1NlbGVjdDogYm9vbGVhbixcbiAgICByb3dzOiBUW10sXG4gICAgZTogUmVhY3QuU3ludGhldGljRXZlbnRcbiAgKSA9PiB2b2lkIHwgbnVtYmVyW10pXG4gIHwgdW5kZWZpbmVkO1xuICBzdHlsZT86XG4gIHwgKChyb3c6IFQsIHJvd0luZGV4OiBudW1iZXIpID0+IENTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQpXG4gIHwgQ1NTUHJvcGVydGllc1xuICB8IHVuZGVmaW5lZDtcbiAgY2xhc3Nlcz86XG4gIHwgKChyb3c6IFQsIHJvd0luZGV4OiBudW1iZXIpID0+IHN0cmluZyB8IHVuZGVmaW5lZClcbiAgfCBzdHJpbmdcbiAgfCB1bmRlZmluZWQ7XG4gIG5vblNlbGVjdGFibGU/OiBudW1iZXJbXSB8IHVuZGVmaW5lZDtcbiAgbm9uU2VsZWN0YWJsZVN0eWxlPzpcbiAgfCAoKHJvdzogVCwgcm93SW5kZXg6IG51bWJlcikgPT4gQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZClcbiAgfCBDU1NQcm9wZXJ0aWVzXG4gIHwgdW5kZWZpbmVkO1xuICBub25TZWxlY3RhYmxlQ2xhc3Nlcz86XG4gIHwgKChyb3c6IFQsIHJvd0luZGV4OiBudW1iZXIpID0+IHN0cmluZyB8IHVuZGVmaW5lZClcbiAgfCBzdHJpbmdcbiAgfCB1bmRlZmluZWQ7XG4gIGJnQ29sb3I/OiAoKHJvdzogVCwgcm93SW5kZXg6IG51bWJlcikgPT4gc3RyaW5nKSB8IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaGlkZVNlbGVjdENvbHVtbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHNlbGVjdGlvblJlbmRlcmVyPzpcbiAgfCAoKG9wdGlvbnM6IHtcbiAgICBjaGVja2VkOiBib29sZWFuO1xuICAgIGRpc2FibGVkOiBib29sZWFuO1xuICAgIG1vZGU6IHN0cmluZztcbiAgICByb3dJbmRleDogbnVtYmVyO1xuICAgIHJvd0tleTogc3RyaW5nO1xuICB9KSA9PiBKU1guRWxlbWVudClcbiAgfCB1bmRlZmluZWQ7XG4gIHNlbGVjdGlvbkhlYWRlclJlbmRlcmVyPzpcbiAgfCAoKG9wdGlvbnM6IHtcbiAgICBtb2RlOiBzdHJpbmc7XG4gICAgY2hlY2tlZDogYm9vbGVhbjtcbiAgICBpbmRldGVybWluYXRlOiBib29sZWFuO1xuICB9KSA9PiBKU1guRWxlbWVudClcbiAgfCB1bmRlZmluZWQ7XG4gIGhlYWRlckNvbHVtblN0eWxlPzpcbiAgfCAoKHN0YXR1czogc3RyaW5nKSA9PiBDU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkKVxuICB8IENTU1Byb3BlcnRpZXNcbiAgfCB1bmRlZmluZWQ7XG4gIHNlbGVjdENvbHVtblN0eWxlPzpcbiAgfCAoKHByb3BzOiB7XG4gICAgY2hlY2tlZDogYm9vbGVhbjtcbiAgICBkaXNhYmxlZDogYm9vbGVhbjtcbiAgICByb3dJbmRleDogbnVtYmVyO1xuICAgIHJvd0tleTogc3RyaW5nO1xuICB9KSA9PiBDU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkKVxuICB8IENTU1Byb3BlcnRpZXNcbiAgfCB1bmRlZmluZWQ7XG4gIHNlbGVjdENvbHVtblBvc2l0aW9uPzogXCJsZWZ0XCIgfCBcInJpZ2h0XCIgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQm9vdHN0cmFwVGFibGVSZWY8VCBleHRlbmRzIG9iamVjdCA9IGFueT4ge1xuICB0YWJsZToge1xuICAgIHByb3BzOiB7XG4gICAgICBkYXRhOiBUW107XG4gICAgfTtcbiAgfTtcbiAgc2VsZWN0aW9uQ29udGV4dD86XG4gIHwge1xuICAgIHNlbGVjdGVkPzogYW55W10gfCB1bmRlZmluZWQ7XG4gIH1cbiAgfCB1bmRlZmluZWQ7XG4gIHJvd0V4cGFuZENvbnRleHQ/OlxuICB8IHtcbiAgICBzdGF0ZToge1xuICAgICAgZXhwYW5kZWQ/OiBhbnlbXSB8IHVuZGVmaW5lZDtcbiAgICB9O1xuICB9XG4gIHwgdW5kZWZpbmVkO1xuICBwYWdpbmF0aW9uQ29udGV4dD86XG4gIHwge1xuICAgIGN1cnJQYWdlOiBudW1iZXI7XG4gICAgY3VyclNpemVQZXJQYWdlOiBudW1iZXI7XG4gIH1cbiAgfCB1bmRlZmluZWQ7XG4gIHNvcnRDb250ZXh0PzpcbiAgfCB7XG4gICAgc3RhdGU6IHtcbiAgICAgIHNvcnRDb2x1bW46IENvbHVtbkRlc2NyaXB0aW9uPFQ+O1xuICAgICAgc29ydE9yZGVyOiBTb3J0T3JkZXI7XG4gICAgfTtcbiAgfVxuICB8IHVuZGVmaW5lZDtcbiAgZmlsdGVyQ29udGV4dD86XG4gIHwge1xuICAgIGN1cnJGaWx0ZXJzOiBhbnk7XG4gIH1cbiAgfCB1bmRlZmluZWQ7XG4gIGNlbGxFZGl0Q29udGV4dD86XG4gIHwge1xuICAgIHN0YXJ0RWRpdGluZzogKHJvd0luZGV4OiBudW1iZXIsIGNvbHVtbkluZGV4OiBudW1iZXIpID0+IHZvaWQ7XG4gIH1cbiAgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQm9vdHN0cmFwVGFibGVQcm9wczxUIGV4dGVuZHMgb2JqZWN0ID0gYW55LCBLID0gbnVtYmVyPiB7XG4gIC8qKlxuICAgKiBUZWxscyByZWFjdC1ib290c3RyYXAtdGFibGUtbmcgd2hpY2ggY29sdW1uIGlzIHVuaXF1ZS5cbiAgICovXG4gIGtleUZpZWxkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiAgUHJvdmlkZXMgZGF0YSBmb3IgeW91ciB0YWJsZS4gSXQgYWNjZXB0cyBhIHNpbmdsZSBBcnJheSBvYmplY3QuXG4gICAqL1xuICBkYXRhOiBhbnlbXTtcbiAgY29sdW1uczogQ29sdW1uRGVzY3JpcHRpb25bXTtcbiAgYm9vdHN0cmFwND86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHJlbW90ZT86XG4gIHwgYm9vbGVhblxuICB8IFBhcnRpYWw8e1xuICAgIHBhZ2luYXRpb246IGJvb2xlYW47XG4gICAgZmlsdGVyOiBib29sZWFuO1xuICAgIHNvcnQ6IGJvb2xlYW47XG4gICAgY2VsbEVkaXQ6IGJvb2xlYW47XG4gICAgc2VhcmNoOiBib29sZWFuO1xuICB9PlxuICB8IHVuZGVmaW5lZDtcbiAgbm9EYXRhSW5kaWNhdGlvbj86XG4gIHwgKCgpID0+IEpTWC5FbGVtZW50IHwgc3RyaW5nKVxuICB8IEpTWC5FbGVtZW50XG4gIHwgc3RyaW5nXG4gIHwgdW5kZWZpbmVkO1xuICBzdHJpcGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgYm9yZGVyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBob3Zlcj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHRhYkluZGV4Q2VsbD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGlkPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjbGFzc2VzPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBoZWFkZXJDbGFzc2VzPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBib2R5Q2xhc3Nlcz86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgd3JhcHBlckNsYXNzZXM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGhlYWRlcldyYXBwZXJDbGFzc2VzPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjb25kZW5zZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogU2FtZSBhcyBIVE1MIGNhcHRpb24gdGFnLCB5b3UgY2FuIHNldCBpdCBhcyBTdHJpbmcgb3IgYSBSZWFjdCBKU1guXG4gICAqL1xuICBjYXB0aW9uPzogSlNYLkVsZW1lbnQgfCBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHBhZ2luYXRpb24/OiB7IG9wdGlvbnM/OiBQYWdpbmF0aW9uT3B0aW9ucyB8IHVuZGVmaW5lZCB9IHwgdW5kZWZpbmVkO1xuICBmaWx0ZXI/OiB1bmtub3duIHwgdW5kZWZpbmVkO1xuICBjZWxsRWRpdD86IGFueTtcbiAgc2VsZWN0Um93PzogU2VsZWN0Um93UHJvcHM8VD4gfCB1bmRlZmluZWQ7XG4gIGV4cGFuZFJvdz86IEV4cGFuZFJvd1Byb3BzPFQsIEs+IHwgdW5kZWZpbmVkO1xuICBwYXJlbnRDbGFzc05hbWU/OlxuICB8IHN0cmluZ1xuICB8ICgoaXNFeHBhbmQ6IGJvb2xlYW4sIHJvdzogVCwgcm93SW5kZXg6IG51bWJlcikgPT4gc3RyaW5nKVxuICB8IHVuZGVmaW5lZDtcbiAgcm93U3R5bGU/OlxuICB8ICgocm93OiBULCByb3dJbmRleDogbnVtYmVyKSA9PiBDU1NQcm9wZXJ0aWVzKVxuICB8IENTU1Byb3BlcnRpZXNcbiAgfCB1bmRlZmluZWQ7XG4gIHJvd0V2ZW50cz86IFJvd0V2ZW50SGFuZGxlclByb3BzIHwgdW5kZWZpbmVkO1xuICByb3dDbGFzc2VzPzogKChyb3c6IFQsIHJvd0luZGV4OiBudW1iZXIpID0+IHN0cmluZykgfCBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGZpbHRlcnNDbGFzc2VzPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBmaWx0ZXJQb3NpdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZm9vdGVyQ2xhc3Nlcz86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZGVmYXVsdFNvcnRlZD86IFt7IGRhdGFGaWVsZDogYW55OyBvcmRlcjogU29ydE9yZGVyIH1dIHwgdW5kZWZpbmVkO1xuICBzb3J0PzpcbiAgfCB7XG4gICAgZGF0YUZpZWxkPzogYW55O1xuICAgIG9yZGVyOiBTb3J0T3JkZXI7XG4gICAgc29ydEZ1bmM/OiBhbnk7XG4gICAgc29ydENhcmV0PzogYW55O1xuICB9XG4gIHwgdW5kZWZpbmVkO1xuICBkZWZhdWx0U29ydERpcmVjdGlvbj86IFNvcnRPcmRlciB8IHVuZGVmaW5lZDtcbiAgb3ZlcmxheT86IGFueTtcbiAgb25UYWJsZUNoYW5nZT86IFRhYmxlQ2hhbmdlSGFuZGxlcjxUPiB8IHVuZGVmaW5lZDtcbiAgb25Tb3J0PzogYW55O1xuICBvbkZpbHRlcj86IGFueTtcbiAgb25FeHRlcm5hbEZpbHRlcj86IGFueTtcbiAgLyoqXG4gICAqIFRoaXMgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgb25seSB3aGVuIGRhdGEgc2l6ZSBjaGFuZ2UgYnkgc2VhcmNoL2ZpbHRlciBldGMuXG4gICAqL1xuICBvbkRhdGFTaXplQ2hhbmdlPzogKChwcm9wczogeyBkYXRhU2l6ZTogbnVtYmVyIH0pID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBzZWFyY2g/OiBTZWFyY2hQcm9wczxUPiB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIC8vIFRPRE8gQWRkZWQgT25cbiAgbG9hZGluZz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHNvcnRGaWVsZD86IHN0cmluZztcbiAgc29ydE9yZGVyPzogc3RyaW5nO1xuICBjdXJyRmlsdGVycz86IG9iamVjdDtcbn1cblxuLy8gZGVjbGFyZSBjbGFzcyBCb290c3RyYXBUYWJsZTxcbi8vICAgVCBleHRlbmRzIG9iamVjdCA9IGFueSxcbi8vICAgSyA9IG51bWJlclxuLy8gPiBleHRlbmRzIENvbXBvbmVudDxCb290c3RyYXBUYWJsZVByb3BzPFQsIEs+PiB7fVxuLy8gZXhwb3J0IGRlZmF1bHQgQm9vdHN0cmFwVGFibGU7XG5cbi8qKlxuICogU2VhcmNoIHByb3BzXG4gKlxuICogQ29uc3VsdCBbZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9yZWFjdC1ib290c3RyYXAtdGFibGUuZ2l0aHViLmlvL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvZG9jcy9zZWFyY2gtcHJvcHMuaHRtbClcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hQcm9wczxUPiB7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBzZWFyY2hUZXh0Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBkZWZhdWx0U2VhcmNoPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAvKiBjdXN0b20gc2VhcmNoIG1ldGhvZCwgcmV0dXJuIHRydWUgaWYgbWF0Y2hlZCBhbmQgZmFsc2UgaWYgbm90ICovXG4gIG9uQ29sdW1uTWF0Y2g/OlxuICB8ICgoc2VhcmNoUHJvcHM6IHtcbiAgICBzZWFyY2hUZXh0OiBzdHJpbmc7XG4gICAgdmFsdWU6IGFueTtcbiAgICBjb2x1bW46IGFueTtcbiAgICByb3c6IFQ7XG4gIH0pID0+IGJvb2xlYW4pXG4gIHwgdW5kZWZpbmVkO1xuICBvbkNsZWFyPzogKCkgPT4gdm9pZDtcbiAgb25TZWFyY2g/OiAoc2VhcmNoVGV4dDogc3RyaW5nKSA9PiB2b2lkO1xufVxuZXhwb3J0IGludGVyZmFjZSBFeHBhbmRDb2x1bW5SZW5kZXJlclByb3BzIHtcbiAgZXhwYW5kZWQ6IGJvb2xlYW47XG4gIHJvd0tleTogc3RyaW5nO1xuICBleHBhbmRhYmxlOiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBFeHBhbmRIZWFkZXJDb2x1bW5SZW5kZXJlciB7XG4gIGlzQW55RXhwYW5kczogYm9vbGVhbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRXhwYW5kUm93UHJvcHM8VCwgSyA9IG51bWJlcj4ge1xuICByZW5kZXJlcjogKChyb3c6IFQsIHJvd0luZGV4OiBudW1iZXIpID0+IEpTWC5FbGVtZW50KSB8IHVuZGVmaW5lZDtcbiAgZXhwYW5kZWQ/OiBLW10gfCB1bmRlZmluZWQ7XG4gIG9uRXhwYW5kPzpcbiAgfCAoKHJvdzogVCwgaXNFeHBhbmQ6IGJvb2xlYW4sIHJvd0luZGV4OiBudW1iZXIsIGU6IFN5bnRoZXRpY0V2ZW50KSA9PiB2b2lkKVxuICB8IHVuZGVmaW5lZDtcbiAgb25FeHBhbmRBbGw/OlxuICB8ICgoaXNFeHBhbmRBbGw6IGJvb2xlYW4sIHJlc3VsdHM6IFRbXSwgZTogU3ludGhldGljRXZlbnQpID0+IHZvaWQpXG4gIHwgdW5kZWZpbmVkO1xuICBub25FeHBhbmRhYmxlPzogS1tdIHwgdW5kZWZpbmVkO1xuICBzaG93RXhwYW5kQ29sdW1uPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgb25seU9uZUV4cGFuZGluZz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGV4cGFuZEJ5Q29sdW1uT25seT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGV4cGFuZENvbHVtblJlbmRlcmVyPzpcbiAgfCAoKHByb3BzOiBFeHBhbmRDb2x1bW5SZW5kZXJlclByb3BzKSA9PiBKU1guRWxlbWVudClcbiAgfCB1bmRlZmluZWQ7XG4gIGV4cGFuZEhlYWRlckNvbHVtblJlbmRlcmVyPzpcbiAgfCAoKHByb3BzOiBFeHBhbmRIZWFkZXJDb2x1bW5SZW5kZXJlcikgPT4gSlNYLkVsZW1lbnQpXG4gIHwgdW5kZWZpbmVkO1xuICBleHBhbmRDb2x1bW5Qb3NpdGlvbj86IFwibGVmdFwiIHwgXCJyaWdodFwiIHwgdW5kZWZpbmVkO1xuICBjbGFzc05hbWU/OlxuICB8IHN0cmluZ1xuICB8ICgoaXNFeHBhbmQ6IGJvb2xlYW4sIHJvdzogVCwgcm93SW5kZXg6IG51bWJlcikgPT4gc3RyaW5nKVxuICB8IHVuZGVmaW5lZDtcbn1cbmV4cG9ydCB0eXBlIFRhYmxlQ29sdW1uRmlsdGVyUHJvcHM8RlYgPSBhbnksIFQgZXh0ZW5kcyBvYmplY3QgPSBhbnk+ID0gUGFydGlhbDx7XG4gIGlkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiAgY3VzdG9tIHRoZSBpbnB1dCBwbGFjZWhvbGRlclxuICAgKi9cbiAgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgLyoqXG4gICAqICBjdXN0b20gY2xhc3NuYW1lIG9uIGlucHV0XG4gICAqL1xuICBjbGFzc05hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqICBkZWZhdWx0IGZpbHRlcmluZyB2YWx1ZVxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBhbnk7XG4gIC8qKlxuICAgKiAgeW91ciBjdXN0b20gc3R5bGVzIG9uIGlucHV0XG4gICAqL1xuICBzdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcztcbiAgLyoqXG4gICAqICBob3cgbG9uZyB3aWxsIHRyaWdnZXIgZmlsdGVyaW5nIGFmdGVyIHVzZXIgdHlwaW5nLCBkZWZhdWx0IGlzIDUwMCBtc1xuICAgKi9cbiAgZGVsYXk6IG51bWJlcjtcbiAgLypcbiAgICogZXhwb3J0IGZpbHRlciBmdW5jdGlvbiB0byBhbGxvdyB1c2VycyB0byBhY2Nlc3MgZmlsdGVyIG1ldGhvZCBleHRlcm5hbGx5LlxuICAgKi9cbiAgZ2V0RmlsdGVyOiAoZmlsdGVyOiAodmFsdWU6IEZWKSA9PiB2b2lkIHwgVFtdKSA9PiB2b2lkO1xuICAvKipcbiAgICogUmVnaXN0ZXIgYSBsaXN0ZW5lciB3aGljaCB3aWxsIGJlIGNhbGxlZCB3aGVuIGNvbHVtbiBmaWx0ZXIgYmVpbmcgdHJpZ2dlcmVkLiBJZiB5b3UgcmV0dXJuIGFuIGFycmF5IHZhbHVlLCByZWFjdC1ib290c3RyYXAtdGFibGUtbmcgd2lsbCBhZG9wdCB0aGlzIHZhbHVlIGFzIHRoZSBmaW5hbCBmaWx0ZXJlZCByZXN1bHQuXG4gICAqL1xuICBvbkZpbHRlcjogKGZpbHRlclZhbHVlOiBGVikgPT4gdm9pZCB8IFRbXTtcbn0+O1xuIiwiaW1wb3J0IGNzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgQ29sdW1uRGVzY3JpcHRpb24gfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgQ2VsbEV2ZW50RGVsZWdhdGVyIGFzIGV2ZW50RGVsZWdhdGVyIH0gZnJvbSBcIi4vY2VsbC1ldmVudC1kZWxlZ2F0ZXJcIjtcbmltcG9ydCBfIGZyb20gXCIuL3V0aWxzXCI7XG5cbmludGVyZmFjZSBGb290ZXJDZWxsUHJvcHMge1xuICBjb2x1bW5EYXRhPzogYW55W107XG4gIGluZGV4PzogbnVtYmVyO1xuICBjb2x1bW46IENvbHVtbkRlc2NyaXB0aW9uO1xufVxuXG5jbGFzcyBGb290ZXJDZWxsIGV4dGVuZHMgZXZlbnREZWxlZ2F0ZXIoQ29tcG9uZW50KTxGb290ZXJDZWxsUHJvcHM+IHtcbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgaW5kZXgsIGNvbHVtbiwgY29sdW1uRGF0YSB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHtcbiAgICAgIGZvb3RlcixcbiAgICAgIGZvb3RlclRpdGxlLFxuICAgICAgZm9vdGVyQWxpZ24sXG4gICAgICBmb290ZXJGb3JtYXR0ZXIsXG4gICAgICBmb290ZXJFdmVudHMsXG4gICAgICBmb290ZXJDbGFzc2VzLFxuICAgICAgZm9vdGVyU3R5bGUsXG4gICAgICBmb290ZXJBdHRycyxcbiAgICB9ID0gY29sdW1uO1xuXG4gICAgY29uc3QgZGVsZWdhdGVFdmVudHMgPSB0aGlzLmRlbGVnYXRlKGZvb3RlckV2ZW50cyk7XG4gICAgY29uc3QgY2VsbEF0dHJzID0ge1xuICAgICAgLi4uKF8uaXNGdW5jdGlvbihmb290ZXJBdHRycylcbiAgICAgICAgPyBmb290ZXJBdHRycyhjb2x1bW4sIGluZGV4ISlcbiAgICAgICAgOiBmb290ZXJBdHRycyksXG4gICAgICAuLi5kZWxlZ2F0ZUV2ZW50cyxcbiAgICB9O1xuXG4gICAgbGV0IHRleHQgPSBcIlwiO1xuICAgIGlmIChfLmlzU3RyaW5nKGZvb3RlcikpIHtcbiAgICAgIHRleHQgPSBmb290ZXI7XG4gICAgfSBlbHNlIGlmIChfLmlzRnVuY3Rpb24oZm9vdGVyKSkge1xuICAgICAgdGV4dCA9IGZvb3Rlcihjb2x1bW5EYXRhIHx8IFtdLCBjb2x1bW4sIGluZGV4IHx8IDApO1xuICAgIH1cblxuICAgIGxldCBjZWxsU3R5bGU6IGFueSA9IHt9O1xuICAgIGNvbnN0IGNlbGxDbGFzc2VzID0gXy5pc0Z1bmN0aW9uKGZvb3RlckNsYXNzZXMpXG4gICAgICA/IGZvb3RlckNsYXNzZXMoY29sdW1uLCBpbmRleCB8fCAwKVxuICAgICAgOiBmb290ZXJDbGFzc2VzO1xuXG4gICAgaWYgKGZvb3RlclN0eWxlKSB7XG4gICAgICBjZWxsU3R5bGUgPSBfLmlzRnVuY3Rpb24oZm9vdGVyU3R5bGUpXG4gICAgICAgID8gZm9vdGVyU3R5bGUoY29sdW1uLCBpbmRleCB8fCAwKVxuICAgICAgICA6IGZvb3RlclN0eWxlO1xuICAgICAgY2VsbFN0eWxlID0gY2VsbFN0eWxlID8geyAuLi5jZWxsU3R5bGUgfSA6IGNlbGxTdHlsZTtcbiAgICB9XG5cbiAgICBpZiAoZm9vdGVyVGl0bGUpIHtcbiAgICAgIGNlbGxBdHRycy50aXRsZSA9IF8uaXNGdW5jdGlvbihmb290ZXJUaXRsZSlcbiAgICAgICAgPyBmb290ZXJUaXRsZShjb2x1bW4sIGluZGV4IHx8IDApXG4gICAgICAgIDogdGV4dDtcbiAgICB9XG5cbiAgICBpZiAoZm9vdGVyQWxpZ24pIHtcbiAgICAgIGNlbGxTdHlsZS50ZXh0QWxpZ24gPSBfLmlzRnVuY3Rpb24oZm9vdGVyQWxpZ24pXG4gICAgICAgID8gZm9vdGVyQWxpZ24oY29sdW1uLCBpbmRleCB8fCAwKVxuICAgICAgICA6IGZvb3RlckFsaWduO1xuICAgIH1cblxuICAgIGlmIChjZWxsQ2xhc3NlcykgY2VsbEF0dHJzLmNsYXNzTmFtZSA9IGNzKGNlbGxBdHRycy5jbGFzc05hbWUsIGNlbGxDbGFzc2VzKTtcbiAgICBpZiAoIV8uaXNFbXB0eU9iamVjdChjZWxsU3R5bGUpKSBjZWxsQXR0cnMuc3R5bGUgPSBjZWxsU3R5bGU7XG5cbiAgICBjb25zdCBjaGlsZHJlbiA9IGZvb3RlckZvcm1hdHRlclxuICAgICAgPyBmb290ZXJGb3JtYXR0ZXIoY29sdW1uLCBpbmRleCB8fCAwLCB7IHRleHQgfSlcbiAgICAgIDogdGV4dDtcblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwidGhcIiwgY2VsbEF0dHJzLCBjaGlsZHJlbiBhcyBSZWFjdE5vZGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZvb3RlckNlbGw7XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBfIGZyb20gXCIuLi91dGlsc1wiO1xuXG5pbXBvcnQge1xuICBDSEVDS0JPWF9TVEFUVVNfQ0hFQ0tFRCxcbiAgQ0hFQ0tCT1hfU1RBVFVTX0lOREVURVJNSU5BVEUsXG4gIENIRUNLQk9YX1NUQVRVU19VTkNIRUNLRUQsXG4gIFJPV19TRUxFQ1RfU0lOR0xFLFxufSBmcm9tIFwiLi4vY29uc3RcIjtcbmltcG9ydCBkYXRhT3BlcmF0b3IgZnJvbSBcIi4uL3N0b3JlL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uU3VtbWFyeSB9IGZyb20gXCIuLi9zdG9yZS9zZWxlY3Rpb25cIjtcblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3Rpb25Db250ZXh0VmFsdWUge1xuICBzZWxlY3RlZD86IGFueVtdO1xuICBvblJvd1NlbGVjdD86IChcbiAgICByb3dLZXk6IGFueSxcbiAgICBjaGVja2VkOiBib29sZWFuLFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgZTogYW55XG4gICkgPT4gdm9pZDtcbiAgb25BbGxSb3dzU2VsZWN0PzogKGU6IGFueSwgaXNVblNlbGVjdDogYm9vbGVhbikgPT4gdm9pZDtcbiAgYWxsUm93c1NlbGVjdGVkPzogYm9vbGVhbjtcbiAgYWxsUm93c05vdFNlbGVjdGVkPzogYm9vbGVhbjtcbiAgY2hlY2tlZFN0YXR1cz86IHN0cmluZztcbiAgbW9kZT86IHN0cmluZztcbiAgaGlkZVNlbGVjdENvbHVtbj86IGJvb2xlYW47XG4gIGNsaWNrVG9TZWxlY3Q/OiBib29sZWFuO1xuICBjbGlja1RvU2VsZWN0QW5kRWRpdENlbGw/OiBib29sZWFuO1xuICBvblNlbGVjdD86IChcbiAgICByb3c6IGFueSxcbiAgICBjaGVja2VkOiBib29sZWFuLFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgZTogYW55XG4gICkgPT4gYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgb25TZWxlY3RBbGw/OiAoY2hlY2tlZDogYm9vbGVhbiwgc2VsZWN0ZWRSb3dzOiBhbnlbXSwgZTogYW55KSA9PiB2b2lkIHwgYW55W107XG4gIG5vblNlbGVjdGFibGU/OiBhbnlbXTtcbiAgaGlkZVNlbGVjdEFsbD86IGJvb2xlYW47XG4gIHNlbGVjdGlvbkhlYWRlclJlbmRlcmVyPzogKGFyZ3M6IHtcbiAgICBtb2RlPzogc3RyaW5nO1xuICAgIGNoZWNrZWQ6IGJvb2xlYW47XG4gICAgaW5kZXRlcm1pbmF0ZTogYm9vbGVhbjtcbiAgfSkgPT4gUmVhY3QuUmVhY3ROb2RlO1xuICBoZWFkZXJDb2x1bW5TdHlsZT86XG4gIHwgUmVhY3QuQ1NTUHJvcGVydGllc1xuICB8ICgoY2hlY2tlZFN0YXR1czogc3RyaW5nKSA9PiBSZWFjdC5DU1NQcm9wZXJ0aWVzKTtcbn1cblxuaW50ZXJmYWNlIFNlbGVjdGlvblByb3ZpZGVyUHJvcHMge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBkYXRhOiBhbnlbXTtcbiAga2V5RmllbGQ6IHN0cmluZztcbiAgc2VsZWN0Um93OiB7XG4gICAgc2VsZWN0ZWQ/OiBhbnlbXTtcbiAgICBtb2RlPzogc3RyaW5nO1xuICAgIGhpZGVTZWxlY3RDb2x1bW4/OiBib29sZWFuO1xuICAgIGNsaWNrVG9TZWxlY3Q/OiBib29sZWFuO1xuICAgIGNsaWNrVG9TZWxlY3RBbmRFZGl0Q2VsbD86IGJvb2xlYW47XG4gICAgb25TZWxlY3Q/OiAoXG4gICAgICByb3c6IGFueSxcbiAgICAgIGNoZWNrZWQ6IGJvb2xlYW4sXG4gICAgICByb3dJbmRleDogbnVtYmVyLFxuICAgICAgZTogYW55XG4gICAgKSA9PiBib29sZWFuO1xuICAgIG9uU2VsZWN0QWxsPzogKFxuICAgICAgY2hlY2tlZDogYm9vbGVhbixcbiAgICAgIHNlbGVjdGVkUm93czogYW55W10sXG4gICAgICBlOiBhbnlcbiAgICApID0+IHZvaWQgfCBhbnlbXTtcbiAgICBub25TZWxlY3RhYmxlPzogYW55W107XG4gICAgaGlkZVNlbGVjdEFsbD86IGJvb2xlYW47XG4gICAgc2VsZWN0aW9uSGVhZGVyUmVuZGVyZXI/OiAoYXJnczoge1xuICAgICAgbW9kZT86IHN0cmluZztcbiAgICAgIGNoZWNrZWQ6IGJvb2xlYW47XG4gICAgICBpbmRldGVybWluYXRlOiBib29sZWFuO1xuICAgIH0pID0+IFJlYWN0LlJlYWN0Tm9kZTtcbiAgICBoZWFkZXJDb2x1bW5TdHlsZT86XG4gICAgfCBSZWFjdC5DU1NQcm9wZXJ0aWVzXG4gICAgfCAoKGNoZWNrZWRTdGF0dXM6IHN0cmluZykgPT4gUmVhY3QuQ1NTUHJvcGVydGllcyk7XG4gIH07XG59XG5cbmNvbnN0IGRlZmF1bHRTZWxlY3Rpb25Db250ZXh0ID0ge307XG5jb25zdCBTZWxlY3Rpb25Db250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxTZWxlY3Rpb25Db250ZXh0VmFsdWU+KFxuICBkZWZhdWx0U2VsZWN0aW9uQ29udGV4dFxuKTtcblxuY2xhc3MgU2VsZWN0aW9uUHJvdmlkZXIgZXh0ZW5kcyBDb21wb25lbnQ8U2VsZWN0aW9uUHJvdmlkZXJQcm9wcz4ge1xuICBzZWxlY3RlZDogYW55W107XG4gIGlzSGFuZGxlUm93U2VsZWN0OiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBTZWxlY3Rpb25Qcm92aWRlclByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBwcm9wcy5zZWxlY3RSb3cuc2VsZWN0ZWQgfHwgW107XG4gICAgdGhpcy5pc0hhbmRsZVJvd1NlbGVjdCA9IGZhbHNlO1xuICB9XG5cbiAgLy8gZXhwb3NlZCBBUElcbiAgZ2V0U2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ7XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUobmV4dFByb3BzOiBTZWxlY3Rpb25Qcm92aWRlclByb3BzKSB7XG4gICAgaWYgKHRoaXMuaXNIYW5kbGVSb3dTZWxlY3QpIHtcbiAgICAgIHRoaXMuaXNIYW5kbGVSb3dTZWxlY3QgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgbmV4dFByb3BzLnNlbGVjdFJvdyAmJlxuICAgICAgbmV4dFByb3BzLnNlbGVjdFJvdy5zZWxlY3RlZCAmJlxuICAgICAgIV8uaXNFcXVhbChuZXh0UHJvcHMuc2VsZWN0Um93LnNlbGVjdGVkLCB0aGlzLnNlbGVjdGVkKVxuICAgICkge1xuICAgICAgdGhpcy5zZWxlY3RlZCA9IG5leHRQcm9wcy5zZWxlY3RSb3cuc2VsZWN0ZWQ7XG4gICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlUm93U2VsZWN0ID0gKFxuICAgIHJvd0tleTogYW55LFxuICAgIGNoZWNrZWQ6IGJvb2xlYW4sXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBlOiBhbnlcbiAgKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgZGF0YSxcbiAgICAgIGtleUZpZWxkLFxuICAgICAgc2VsZWN0Um93OiB7IG1vZGUsIG9uU2VsZWN0IH0sXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBsZXQgY3VyclNlbGVjdGVkID0gWy4uLnRoaXMuc2VsZWN0ZWRdO1xuXG4gICAgbGV0IHJlc3VsdCA9IHRydWU7XG4gICAgaWYgKG9uU2VsZWN0KSB7XG4gICAgICBjb25zdCByb3cgPSBkYXRhT3BlcmF0b3IuZ2V0Um93QnlSb3dJZChkYXRhLCBrZXlGaWVsZCwgcm93S2V5KTtcbiAgICAgIHJlc3VsdCA9IG9uU2VsZWN0KHJvdywgY2hlY2tlZCwgcm93SW5kZXgsIGUpO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQgPT09IHRydWUgfHwgcmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChtb2RlID09PSBST1dfU0VMRUNUX1NJTkdMRSkge1xuICAgICAgICBjdXJyU2VsZWN0ZWQgPSBbcm93S2V5XTtcbiAgICAgIH0gZWxzZSBpZiAoY2hlY2tlZCkge1xuICAgICAgICBjdXJyU2VsZWN0ZWQucHVzaChyb3dLZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3VyclNlbGVjdGVkID0gY3VyclNlbGVjdGVkLmZpbHRlcigodmFsdWUpID0+IHZhbHVlICE9PSByb3dLZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkID0gY3VyclNlbGVjdGVkO1xuICAgIHRoaXMuaXNIYW5kbGVSb3dTZWxlY3QgPSB0cnVlO1xuICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgfTtcblxuICBoYW5kbGVBbGxSb3dzU2VsZWN0ID0gKGU6IGFueSwgaXNVblNlbGVjdDogYm9vbGVhbikgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGRhdGEsXG4gICAgICBrZXlGaWVsZCxcbiAgICAgIHNlbGVjdFJvdzogeyBvblNlbGVjdEFsbCwgbm9uU2VsZWN0YWJsZSB9LFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgc2VsZWN0ZWQgfSA9IHRoaXM7XG5cbiAgICBsZXQgY3VyclNlbGVjdGVkOiBhbnk7XG5cbiAgICBpZiAoIWlzVW5TZWxlY3QpIHtcbiAgICAgIGN1cnJTZWxlY3RlZCA9IHNlbGVjdGVkLmNvbmNhdChcbiAgICAgICAgZGF0YU9wZXJhdG9yLnNlbGVjdGFibGVLZXlzKGRhdGEsIGtleUZpZWxkLCBub25TZWxlY3RhYmxlKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VyclNlbGVjdGVkID0gc2VsZWN0ZWQuZmlsdGVyKFxuICAgICAgICAocykgPT4gdHlwZW9mIGRhdGEuZmluZCgoZCkgPT4gXy5nZXQoZCwga2V5RmllbGQpID09PSBzKSA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0OiBhbnk7XG4gICAgaWYgKG9uU2VsZWN0QWxsKSB7XG4gICAgICByZXN1bHQgPSBvblNlbGVjdEFsbChcbiAgICAgICAgIWlzVW5TZWxlY3QsXG4gICAgICAgIGRhdGFPcGVyYXRvci5nZXRTZWxlY3RlZFJvd3MoXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBrZXlGaWVsZCxcbiAgICAgICAgICBpc1VuU2VsZWN0ID8gc2VsZWN0ZWQgOiBjdXJyU2VsZWN0ZWRcbiAgICAgICAgKSxcbiAgICAgICAgZVxuICAgICAgKTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgICAgY3VyclNlbGVjdGVkID0gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkID0gY3VyclNlbGVjdGVkO1xuICAgIHRoaXMuaXNIYW5kbGVSb3dTZWxlY3QgPSB0cnVlO1xuICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBhbGxSb3dzU2VsZWN0ZWQsIGFsbFJvd3NOb3RTZWxlY3RlZCB9ID0gZ2V0U2VsZWN0aW9uU3VtbWFyeShcbiAgICAgIHRoaXMucHJvcHMuZGF0YSxcbiAgICAgIHRoaXMucHJvcHMua2V5RmllbGQsXG4gICAgICB0aGlzLnNlbGVjdGVkXG4gICAgKTtcblxuICAgIGxldCBjaGVja2VkU3RhdHVzOiBzdHJpbmc7XG5cbiAgICBpZiAoYWxsUm93c1NlbGVjdGVkKSB7XG4gICAgICBjaGVja2VkU3RhdHVzID0gQ0hFQ0tCT1hfU1RBVFVTX0NIRUNLRUQ7XG4gICAgfSBlbHNlIGlmIChhbGxSb3dzTm90U2VsZWN0ZWQpIHtcbiAgICAgIGNoZWNrZWRTdGF0dXMgPSBDSEVDS0JPWF9TVEFUVVNfVU5DSEVDS0VEO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGVja2VkU3RhdHVzID0gQ0hFQ0tCT1hfU1RBVFVTX0lOREVURVJNSU5BVEU7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTZWxlY3Rpb25Db250ZXh0LlByb3ZpZGVyXG4gICAgICAgIHZhbHVlPXt7XG4gICAgICAgICAgLi4udGhpcy5wcm9wcy5zZWxlY3RSb3csXG4gICAgICAgICAgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWQsXG4gICAgICAgICAgb25Sb3dTZWxlY3Q6IHRoaXMuaGFuZGxlUm93U2VsZWN0LFxuICAgICAgICAgIG9uQWxsUm93c1NlbGVjdDogdGhpcy5oYW5kbGVBbGxSb3dzU2VsZWN0LFxuICAgICAgICAgIGFsbFJvd3NTZWxlY3RlZCxcbiAgICAgICAgICBhbGxSb3dzTm90U2VsZWN0ZWQsXG4gICAgICAgICAgY2hlY2tlZFN0YXR1cyxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICA8L1NlbGVjdGlvbkNvbnRleHQuUHJvdmlkZXI+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlU2VsZWN0aW9uQ29udGV4dCA9ICgpID0+ICh7XG4gIFByb3ZpZGVyOiBTZWxlY3Rpb25Qcm92aWRlcixcbiAgQ29uc3VtZXI6IFNlbGVjdGlvbkNvbnRleHQuQ29uc3VtZXIsXG59KTtcbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIE1vdXNlRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgQ2VsbEV2ZW50RGVsZWdhdGVyIGFzIGV2ZW50RGVsZWdhdGVyIH0gZnJvbSBcIi4vY2VsbC1ldmVudC1kZWxlZ2F0ZXJcIjtcbmltcG9ydCBfIGZyb20gXCIuL3V0aWxzXCI7XG5cbmludGVyZmFjZSBDZWxsUHJvcHMge1xuICByb3c6IGFueTtcbiAgcm93aW5kZXg6IG51bWJlcjtcbiAgY29sdW1uOiBhbnk7XG4gIGNvbHVtbmluZGV4OiBudW1iZXI7XG4gIGF0c3RhcnQ/OiAocm93SW5kZXg6IG51bWJlciwgY29sdW1uSW5kZXg6IG51bWJlcikgPT4gdm9pZDtcbiAgZWRpdGFibGU/OiBzdHJpbmc7XG4gIGNsaWNrdG9lZGl0Pzogc3RyaW5nO1xuICBkYmNsaWNrdG9lZGl0Pzogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXM7XG4gIHRhYkluZGV4PzogbnVtYmVyO1xufVxuXG5jbGFzcyBDZWxsIGV4dGVuZHMgZXZlbnREZWxlZ2F0ZXIoQ29tcG9uZW50KTxDZWxsUHJvcHM+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IENlbGxQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNyZWF0ZUhhbmRsZUVkaXRpbmdDZWxsID0gdGhpcy5jcmVhdGVIYW5kbGVFZGl0aW5nQ2VsbC5iaW5kKHRoaXMpO1xuICB9XG5cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wczogQ2VsbFByb3BzKSB7XG4gICAgbGV0IHNob3VsZFVwZGF0ZSA9IGZhbHNlO1xuICAgIGlmIChuZXh0UHJvcHMuY29sdW1uLmlzRHVtbXlGaWVsZCkge1xuICAgICAgc2hvdWxkVXBkYXRlID0gIV8uaXNFcXVhbCh0aGlzLnByb3BzLnJvdywgbmV4dFByb3BzLnJvdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNob3VsZFVwZGF0ZSA9XG4gICAgICAgIF8uZ2V0KHRoaXMucHJvcHMucm93LCB0aGlzLnByb3BzLmNvbHVtbi5kYXRhRmllbGQpICE9PVxuICAgICAgICBfLmdldChuZXh0UHJvcHMucm93LCBuZXh0UHJvcHMuY29sdW1uLmRhdGFGaWVsZCk7XG4gICAgfVxuXG4gICAgaWYgKHNob3VsZFVwZGF0ZSkgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBpZiAobmV4dFByb3BzLmZvcm1hdHRlcilcblxuICAgIHNob3VsZFVwZGF0ZSA9XG4gICAgICAobmV4dFByb3BzLmNvbHVtbi5mb3JtYXR0ZXJcbiAgICAgICAgPyAhXy5pc0VxdWFsKHRoaXMucHJvcHMucm93LCBuZXh0UHJvcHMucm93KVxuICAgICAgICA6IGZhbHNlKSB8fFxuICAgICAgdGhpcy5wcm9wcy5jb2x1bW4uaGlkZGVuICE9PSBuZXh0UHJvcHMuY29sdW1uLmhpZGRlbiB8fFxuICAgICAgdGhpcy5wcm9wcy5jb2x1bW4uaXNEdW1teUZpZWxkICE9PSBuZXh0UHJvcHMuY29sdW1uLmlzRHVtbXlGaWVsZCB8fFxuICAgICAgdGhpcy5wcm9wcy5yb3dpbmRleCAhPT0gbmV4dFByb3BzLnJvd2luZGV4IHx8XG4gICAgICB0aGlzLnByb3BzLmNvbHVtbmluZGV4ICE9PSBuZXh0UHJvcHMuY29sdW1uaW5kZXggfHxcbiAgICAgIHRoaXMucHJvcHMuY2xhc3NOYW1lICE9PSBuZXh0UHJvcHMuY2xhc3NOYW1lIHx8XG4gICAgICB0aGlzLnByb3BzLnRpdGxlICE9PSBuZXh0UHJvcHMudGl0bGUgfHxcbiAgICAgIHRoaXMucHJvcHMuZWRpdGFibGUgIT09IG5leHRQcm9wcy5lZGl0YWJsZSB8fFxuICAgICAgdGhpcy5wcm9wcy5jbGlja3RvZWRpdCAhPT0gbmV4dFByb3BzLmNsaWNrdG9lZGl0IHx8XG4gICAgICB0aGlzLnByb3BzLmRiY2xpY2t0b2VkaXQgIT09IG5leHRQcm9wcy5kYmNsaWNrdG9lZGl0IHx8XG4gICAgICAhXy5pc0VxdWFsKHRoaXMucHJvcHMuc3R5bGUsIG5leHRQcm9wcy5zdHlsZSkgfHxcbiAgICAgICFfLmlzRXF1YWwoXG4gICAgICAgIHRoaXMucHJvcHMuY29sdW1uLmZvcm1hdEV4dHJhRGF0YSxcbiAgICAgICAgbmV4dFByb3BzLmNvbHVtbi5mb3JtYXRFeHRyYURhdGFcbiAgICAgICkgfHxcbiAgICAgICFfLmlzRXF1YWwodGhpcy5wcm9wcy5jb2x1bW4uZXZlbnRzLCBuZXh0UHJvcHMuY29sdW1uLmV2ZW50cykgfHxcbiAgICAgICFfLmlzRXF1YWwodGhpcy5wcm9wcy5jb2x1bW4uYXR0cnMsIG5leHRQcm9wcy5jb2x1bW4uYXR0cnMpIHx8XG4gICAgICB0aGlzLnByb3BzLnRhYkluZGV4ICE9PSBuZXh0UHJvcHMudGFiSW5kZXg7XG5cbiAgICByZXR1cm4gc2hvdWxkVXBkYXRlO1xuICB9XG5cbiAgY3JlYXRlSGFuZGxlRWRpdGluZ0NlbGwob3JpZ2luRnVuYzogKGU6IE1vdXNlRXZlbnQpID0+IHZvaWQpIHtcbiAgICByZXR1cm4gKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHsgYXRzdGFydCwgcm93aW5kZXgsIGNvbHVtbmluZGV4LCBjbGlja3RvZWRpdCwgZGJjbGlja3RvZWRpdCB9ID1cbiAgICAgICAgdGhpcy5wcm9wcztcbiAgICAgIGlmICgoY2xpY2t0b2VkaXQgfHwgZGJjbGlja3RvZWRpdCkgJiYgXy5pc0Z1bmN0aW9uKG9yaWdpbkZ1bmMpKSB7XG4gICAgICAgIG9yaWdpbkZ1bmMoZSk7XG4gICAgICB9XG4gICAgICBpZiAoYXRzdGFydCkge1xuICAgICAgICBhdHN0YXJ0KHJvd2luZGV4LCBjb2x1bW5pbmRleCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICByb3csXG4gICAgICBjb2x1bW4sXG4gICAgICBhdHN0YXJ0LFxuICAgICAgcm93aW5kZXgsXG4gICAgICBjb2x1bW5pbmRleCxcbiAgICAgIGVkaXRhYmxlLFxuICAgICAgY2xpY2t0b2VkaXQsXG4gICAgICBkYmNsaWNrdG9lZGl0LFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgZGF0YUZpZWxkLCBmb3JtYXR0ZXIsIGZvcm1hdEV4dHJhRGF0YSB9ID0gY29sdW1uO1xuICAgIGNvbnN0IGF0dHJzID0gdGhpcy5kZWxlZ2F0ZSh7IC4uLnJlc3QgfSk7XG4gICAgbGV0IGNvbnRlbnQgPSBjb2x1bW4uaXNEdW1teUZpZWxkID8gbnVsbCA6IF8uZ2V0KHJvdywgZGF0YUZpZWxkKTtcblxuICAgIGlmIChmb3JtYXR0ZXIpIHtcbiAgICAgIGNvbnRlbnQgPSBjb2x1bW4uZm9ybWF0dGVyKFxuICAgICAgICBjb250ZW50LFxuICAgICAgICByb3csXG4gICAgICAgIHJvd2luZGV4LFxuICAgICAgICBmb3JtYXRFeHRyYURhdGFcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGNsaWNrdG9lZGl0ID09PSBcInRydWVcIiAmJiBlZGl0YWJsZSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgIGF0dHJzLm9uQ2xpY2sgPSB0aGlzLmNyZWF0ZUhhbmRsZUVkaXRpbmdDZWxsKGF0dHJzLm9uQ2xpY2spO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBkYmNsaWNrdG9lZGl0ID09PSBcInRydWVcIiAmJlxuICAgICAgZWRpdGFibGUgPT09IFwidHJ1ZVwiXG4gICAgKSB7XG4gICAgICBhdHRycy5vbkRvdWJsZUNsaWNrID0gdGhpcy5jcmVhdGVIYW5kbGVFZGl0aW5nQ2VsbChhdHRycy5vbkRvdWJsZUNsaWNrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHRkIHsuLi5hdHRyc30+XG4gICAgICAgIHt0eXBlb2YgY29udGVudCA9PT0gXCJib29sZWFuXCIgPyBgJHtjb250ZW50fWAgOiBjb250ZW50fVxuICAgICAgPC90ZD5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENlbGw7XG4iLCJpbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IGdldFJvd0J5Um93SWQgfSBmcm9tIFwiLi9yb3dzXCI7XG5cbmV4cG9ydCBjb25zdCBlZGl0Q2VsbCA9IChkYXRhOiBhbnksIGtleUZpZWxkOiBhbnksIHJvd0lkOiBhbnksIGRhdGFGaWVsZDogYW55LCBuZXdWYWx1ZTogYW55KSA9PiB7XG4gIGNvbnN0IHJvdyA9IGdldFJvd0J5Um93SWQoZGF0YSwga2V5RmllbGQsIHJvd0lkKTtcbiAgaWYgKHJvdykgXy5zZXQocm93LCBkYXRhRmllbGQsIG5ld1ZhbHVlKTtcbn07XG4iLCJpbXBvcnQgY3MgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgUHJvcGVydHkgfSBmcm9tIFwiY3NzdHlwZVwiO1xuaW1wb3J0IHsgRklMVEVSU19QT1NJVElPTl9JTkxJTkUsIFNPUlRfREVTQyB9IGZyb20gXCIuL2NvbnN0XCI7XG5pbXBvcnQgeyBDZWxsRXZlbnREZWxlZ2F0ZXIgYXMgZXZlbnREZWxlZ2F0ZXIgfSBmcm9tIFwiLi9jZWxsLWV2ZW50LWRlbGVnYXRlclwiO1xuaW1wb3J0IFNvcnRDYXJldCBmcm9tIFwiLi9zb3J0L2NhcmV0XCI7XG5pbXBvcnQgU29ydFN5bWJvbCBmcm9tIFwiLi9zb3J0L3N5bWJvbFwiO1xuaW1wb3J0IF8gZnJvbSBcIi4vdXRpbHNcIjtcblxuaW50ZXJmYWNlIEhlYWRlckNlbGxQcm9wcyB7XG4gIGNvbHVtbjoge1xuICAgIGRhdGFGaWVsZDogc3RyaW5nO1xuICAgIHRleHQ6IHN0cmluZztcbiAgICB0eXBlPzogc3RyaW5nO1xuICAgIGlzRHVtbXlGaWVsZD86IGJvb2xlYW47XG4gICAgaGlkZGVuPzogYm9vbGVhbjtcbiAgICBoZWFkZXJGb3JtYXR0ZXI/OiAoXG4gICAgICBjb2x1bW46IGFueSxcbiAgICAgIGluZGV4OiBudW1iZXIsXG4gICAgICBleHRyYURhdGE6IGFueVxuICAgICkgPT4gUmVhY3QuUmVhY3ROb2RlO1xuICAgIGZvcm1hdHRlcj86IChcbiAgICAgIGNlbGw6IGFueSxcbiAgICAgIHJvdzogYW55LFxuICAgICAgcm93SW5kZXg6IG51bWJlcixcbiAgICAgIGZvcm1hdEV4dHJhRGF0YTogYW55XG4gICAgKSA9PiBSZWFjdC5SZWFjdE5vZGU7XG4gICAgZm9ybWF0RXh0cmFEYXRhPzogYW55O1xuICAgIGhlYWRlckNsYXNzZXM/OiBzdHJpbmcgfCAoKGNvbHVtbjogYW55LCBpbmRleDogbnVtYmVyKSA9PiBzdHJpbmcpO1xuICAgIGNsYXNzZXM/OiBzdHJpbmcgfCAoKGNlbGw6IGFueSwgcm93OiBhbnksIHJvd0luZGV4OiBudW1iZXIpID0+IHN0cmluZyk7XG4gICAgaGVhZGVyU3R5bGU/OlxuICAgIHwgUmVhY3QuQ1NTUHJvcGVydGllc1xuICAgIHwgKChjb2x1bW46IGFueSwgaW5kZXg6IG51bWJlcikgPT4gUmVhY3QuQ1NTUHJvcGVydGllcyk7XG4gICAgaGVhZGVyU29ydGluZ0NsYXNzZXM/OlxuICAgIHwgc3RyaW5nXG4gICAgfCAoKFxuICAgICAgY29sdW1uOiBhbnksXG4gICAgICBzb3J0T3JkZXI6IHN0cmluZyxcbiAgICAgIGlzTGFzdFNvcnRpbmc6IGJvb2xlYW4sXG4gICAgICBpbmRleDogbnVtYmVyXG4gICAgKSA9PiBzdHJpbmcpO1xuICAgIGhlYWRlclNvcnRpbmdTdHlsZT86XG4gICAgfCBSZWFjdC5DU1NQcm9wZXJ0aWVzXG4gICAgfCAoKFxuICAgICAgY29sdW1uOiBhbnksXG4gICAgICBzb3J0T3JkZXI6IHN0cmluZyxcbiAgICAgIGlzTGFzdFNvcnRpbmc6IGJvb2xlYW4sXG4gICAgICBpbmRleDogbnVtYmVyXG4gICAgKSA9PiBSZWFjdC5DU1NQcm9wZXJ0aWVzKTtcbiAgICBzdHlsZT86XG4gICAgfCBSZWFjdC5DU1NQcm9wZXJ0aWVzXG4gICAgfCAoKGNlbGw6IGFueSwgcm93OiBhbnksIHJvd0luZGV4OiBudW1iZXIpID0+IFJlYWN0LkNTU1Byb3BlcnRpZXMpO1xuICAgIGhlYWRlclRpdGxlPzogYm9vbGVhbiB8ICgoY29sdW1uOiBhbnksIGluZGV4OiBudW1iZXIpID0+IGJvb2xlYW4gfCBzdHJpbmcpO1xuICAgIHRpdGxlPzpcbiAgICB8IGJvb2xlYW5cbiAgICB8ICgoY2VsbDogYW55LCByb3c6IGFueSwgcm93SW5kZXg6IG51bWJlcikgPT4gYm9vbGVhbiB8IHN0cmluZyk7XG4gICAgaGVhZGVyRXZlbnRzPzogUmVjb3JkPHN0cmluZywgKGU6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHZvaWQ+O1xuICAgIGV2ZW50cz86IFJlY29yZDxcbiAgICAgIHN0cmluZyxcbiAgICAgIChjZWxsOiBhbnksIHJvdzogYW55LCByb3dJbmRleDogbnVtYmVyLCBlOiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB2b2lkXG4gICAgPjtcbiAgICBoZWFkZXJBbGlnbj86XG4gICAgfCBQcm9wZXJ0eS5UZXh0QWxpZ25cbiAgICB8ICgoY29sdW1uOiBhbnksIGluZGV4OiBudW1iZXIpID0+IFByb3BlcnR5LlRleHRBbGlnbik7XG4gICAgYWxpZ24/OiBzdHJpbmcgfCAoKGNlbGw6IGFueSwgcm93OiBhbnksIHJvd0luZGV4OiBudW1iZXIpID0+IHN0cmluZyk7XG4gICAgaGVhZGVyQXR0cnM/OlxuICAgIHwgUmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQ+XG4gICAgfCAoKFxuICAgICAgY29sdW1uOiBhbnksXG4gICAgICBpbmRleDogbnVtYmVyXG4gICAgKSA9PiBSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudD4pO1xuICAgIGF0dHJzPzpcbiAgICB8IFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZUNlbGxFbGVtZW50PlxuICAgIHwgKChcbiAgICAgIGNlbGw6IGFueSxcbiAgICAgIHJvdzogYW55LFxuICAgICAgcm93SW5kZXg6IG51bWJlclxuICAgICkgPT4gUmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlQ2VsbEVsZW1lbnQ+KTtcbiAgICBzb3J0PzogYm9vbGVhbjtcbiAgICBzb3J0RnVuYz86IChhOiBhbnksIGI6IGFueSwgb3JkZXI6IHN0cmluZywgY29sdW1uOiBhbnkpID0+IG51bWJlcjtcbiAgICBvblNvcnQ/OiAoY29sdW1uOiBhbnksIHNvcnRPcmRlcjogc3RyaW5nKSA9PiB2b2lkO1xuICAgIHNvcnRDYXJldD86IGFueTtcbiAgICBlZGl0b3I/OiBvYmplY3Q7XG4gICAgZWRpdGFibGU/OiBib29sZWFuIHwgKChjZWxsOiBhbnksIHJvdzogYW55LCByb3dJbmRleDogbnVtYmVyKSA9PiBib29sZWFuKTtcbiAgICBlZGl0Q2VsbFN0eWxlPzpcbiAgICB8IFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgICB8ICgoY2VsbDogYW55LCByb3c6IGFueSwgcm93SW5kZXg6IG51bWJlcikgPT4gUmVhY3QuQ1NTUHJvcGVydGllcyk7XG4gICAgZWRpdENlbGxDbGFzc2VzPzpcbiAgICB8IHN0cmluZ1xuICAgIHwgKChjZWxsOiBhbnksIHJvdzogYW55LCByb3dJbmRleDogbnVtYmVyKSA9PiBzdHJpbmcpO1xuICAgIGVkaXRvclN0eWxlPzpcbiAgICB8IFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgICB8ICgoY2VsbDogYW55LCByb3c6IGFueSwgcm93SW5kZXg6IG51bWJlcikgPT4gUmVhY3QuQ1NTUHJvcGVydGllcyk7XG4gICAgZWRpdG9yQ2xhc3Nlcz86XG4gICAgfCBzdHJpbmdcbiAgICB8ICgoY2VsbDogYW55LCByb3c6IGFueSwgcm93SW5kZXg6IG51bWJlcikgPT4gc3RyaW5nKTtcbiAgICBlZGl0b3JSZW5kZXJlcj86IChcbiAgICAgIGVkaXRvclByb3BzOiBhbnksXG4gICAgICB2YWx1ZTogYW55LFxuICAgICAgcm93OiBhbnksXG4gICAgICBjb2x1bW46IGFueSxcbiAgICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgICBjb2x1bW5JbmRleDogbnVtYmVyXG4gICAgKSA9PiBSZWFjdC5SZWFjdE5vZGU7XG4gICAgdmFsaWRhdG9yPzogKG5ld1ZhbHVlOiBhbnksIHJvdzogYW55LCBjb2x1bW46IGFueSkgPT4gYm9vbGVhbiB8IHN0cmluZztcbiAgICBmaWx0ZXI/OiBhbnk7XG4gICAgZmlsdGVyUmVuZGVyZXI/OiAoXG4gICAgICBvbkN1c3RvbUZpbHRlcjogKHZhbHVlOiBhbnkpID0+IHZvaWQsXG4gICAgICBjb2x1bW46IGFueVxuICAgICkgPT4gUmVhY3QuUmVhY3ROb2RlO1xuICAgIGZpbHRlclZhbHVlPzogKGNlbGw6IGFueSwgcm93OiBhbnkpID0+IHN0cmluZztcbiAgICBzZWFyY2hhYmxlPzogYm9vbGVhbjtcbiAgfTtcbiAgaW5kZXg6IG51bWJlcjtcbiAgb25Tb3J0PzogKGNvbHVtbjogYW55KSA9PiB2b2lkO1xuICBzb3J0aW5nPzogYm9vbGVhbjtcbiAgc29ydE9yZGVyPzogc3RyaW5nO1xuICBzb3J0Q2FyZXQ/OiBhbnk7XG4gIGlzTGFzdFNvcnRpbmc/OiBib29sZWFuO1xuICBvbkZpbHRlcj86IChmaWx0ZXJEYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiB2b2lkO1xuICBmaWx0ZXJQb3NpdGlvbj86IHN0cmluZztcbiAgY3VyckZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBvbkV4dGVybmFsRmlsdGVyPzogKGNvbHVtbjogYW55LCBmaWx0ZXJUeXBlOiBzdHJpbmcpID0+ICh2YWx1ZTogYW55KSA9PiB2b2lkO1xuICBnbG9iYWxTb3J0Q2FyZXQ/OiAob3JkZXI6IHN0cmluZywgY29sdW1uOiBhbnkpID0+IFJlYWN0LlJlYWN0Tm9kZTtcbn1cblxuY2xhc3MgSGVhZGVyQ2VsbCBleHRlbmRzIGV2ZW50RGVsZWdhdGVyKENvbXBvbmVudCk8SGVhZGVyQ2VsbFByb3BzPiB7XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBjb2x1bW4sXG4gICAgICBpbmRleCxcbiAgICAgIG9uU29ydCxcbiAgICAgIHNvcnRpbmcsXG4gICAgICBzb3J0T3JkZXIsXG4gICAgICBpc0xhc3RTb3J0aW5nLFxuICAgICAgb25GaWx0ZXIsXG4gICAgICBjdXJyRmlsdGVycyxcbiAgICAgIGZpbHRlclBvc2l0aW9uLFxuICAgICAgb25FeHRlcm5hbEZpbHRlcixcbiAgICAgIGdsb2JhbFNvcnRDYXJldCxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHtcbiAgICAgIHRleHQsXG4gICAgICBzb3J0LFxuICAgICAgc29ydENhcmV0LFxuICAgICAgZmlsdGVyLFxuICAgICAgZmlsdGVyUmVuZGVyZXIsXG4gICAgICBoZWFkZXJUaXRsZSxcbiAgICAgIGhlYWRlckFsaWduLFxuICAgICAgaGVhZGVyRm9ybWF0dGVyLFxuICAgICAgaGVhZGVyRXZlbnRzLFxuICAgICAgaGVhZGVyQ2xhc3NlcyxcbiAgICAgIGhlYWRlclN0eWxlLFxuICAgICAgaGVhZGVyQXR0cnMsXG4gICAgICBoZWFkZXJTb3J0aW5nQ2xhc3NlcyxcbiAgICAgIGhlYWRlclNvcnRpbmdTdHlsZSxcbiAgICB9ID0gY29sdW1uO1xuXG4gICAgY29uc3Qgc29ydENhcmV0ZnVuYyA9IHNvcnRDYXJldCB8fCBnbG9iYWxTb3J0Q2FyZXQ7XG5cbiAgICBjb25zdCBkZWxlZ2F0ZUV2ZW50cyA9IHRoaXMuZGVsZWdhdGUoaGVhZGVyRXZlbnRzKTtcblxuICAgIGNvbnN0IGN1c3RvbUF0dHJzID0gXy5pc0Z1bmN0aW9uKGhlYWRlckF0dHJzKVxuICAgICAgPyBoZWFkZXJBdHRycyhjb2x1bW4sIGluZGV4KVxuICAgICAgOiBoZWFkZXJBdHRycyB8fCB7fTtcblxuICAgIGNvbnN0IGNlbGxBdHRyczogUmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQ+ID0ge1xuICAgICAgLi4uY3VzdG9tQXR0cnMsXG4gICAgICAuLi5kZWxlZ2F0ZUV2ZW50cyxcbiAgICAgIHRhYkluZGV4OiBfLmlzRGVmaW5lZChjdXN0b21BdHRycy50YWJJbmRleCkgPyBjdXN0b21BdHRycy50YWJJbmRleCA6IDAsXG4gICAgfTtcblxuICAgIGxldCBzb3J0U3ltYm9sOiBSZWFjdC5SZWFjdE5vZGU7XG4gICAgbGV0IGZpbHRlckVsZW1lbnQ6IFJlYWN0LlJlYWN0Tm9kZTtcbiAgICBsZXQgY2VsbFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge307XG4gICAgbGV0IGNlbGxDbGFzc2VzID0gXy5pc0Z1bmN0aW9uKGhlYWRlckNsYXNzZXMpXG4gICAgICA/IGhlYWRlckNsYXNzZXMoY29sdW1uLCBpbmRleClcbiAgICAgIDogaGVhZGVyQ2xhc3NlcztcblxuICAgIGlmIChoZWFkZXJTdHlsZSkge1xuICAgICAgY2VsbFN0eWxlID0gXy5pc0Z1bmN0aW9uKGhlYWRlclN0eWxlKVxuICAgICAgICA/IGhlYWRlclN0eWxlKGNvbHVtbiwgaW5kZXgpXG4gICAgICAgIDogaGVhZGVyU3R5bGU7XG4gICAgICBjZWxsU3R5bGUgPSBjZWxsU3R5bGUgPyB7IC4uLmNlbGxTdHlsZSB9IDogY2VsbFN0eWxlO1xuICAgIH1cblxuICAgIGlmIChoZWFkZXJUaXRsZSkge1xuICAgICAgY2VsbEF0dHJzLnRpdGxlID0gXy5pc0Z1bmN0aW9uKGhlYWRlclRpdGxlKVxuICAgICAgICA/IChoZWFkZXJUaXRsZShjb2x1bW4sIGluZGV4KSBhcyBzdHJpbmcpXG4gICAgICAgIDogdGV4dDtcbiAgICB9XG5cbiAgICBpZiAoaGVhZGVyQWxpZ24pIHtcbiAgICAgIGNlbGxTdHlsZS50ZXh0QWxpZ24gPSBfLmlzRnVuY3Rpb24oaGVhZGVyQWxpZ24pXG4gICAgICAgID8gaGVhZGVyQWxpZ24oY29sdW1uLCBpbmRleClcbiAgICAgICAgOiBoZWFkZXJBbGlnbjtcbiAgICB9XG5cbiAgICBpZiAoc29ydCkge1xuICAgICAgY29uc3QgY3VzdG9tQ2xpY2sgPSBjZWxsQXR0cnMub25DbGljaztcbiAgICAgIGNvbnN0IGN1c3RvbUtleURvd24gPSBjZWxsQXR0cnMub25LZXlEb3duO1xuICAgICAgY2VsbEF0dHJzW1wiYXJpYS1sYWJlbFwiXSA9IHNvcnRpbmdcbiAgICAgICAgPyBgJHt0ZXh0fSBzb3J0ICR7c29ydE9yZGVyfWBcbiAgICAgICAgOiBgJHt0ZXh0fSBzb3J0YWJsZWA7XG4gICAgICBjZWxsQXR0cnMub25LZXlVcCA9IChlKSA9PiB7XG4gICAgICAgIGlmIChlLmtleSA9PT0gXCJFbnRlclwiKSB7XG4gICAgICAgICAgb25Tb3J0Py4oY29sdW1uKTtcbiAgICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgLy8gRXJyb3I6IEFyZ3VtZW50IG9mIHR5cGUgJ0tleWJvYXJkRXZlbnQ8SFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQ+JyBpcyBub3QgYXNzaWduYWJsZSB0b1xuICAgICAgICAgIC8vIHBhcmFtZXRlciBvZiB0eXBlICdNb3VzZUV2ZW50PEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50LCBNb3VzZUV2ZW50PicuXG4gICAgICAgICAgLy8gaWYgKF8uaXNGdW5jdGlvbihjdXN0b21DbGljaykpIGN1c3RvbUNsaWNrKGUpO1xuICAgICAgICAgIGlmIChfLmlzRnVuY3Rpb24oY3VzdG9tS2V5RG93bikpIGN1c3RvbUtleURvd24oZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjZWxsQXR0cnMub25DbGljayA9IChlKSA9PiB7XG4gICAgICAgIG9uU29ydD8uKGNvbHVtbik7XG4gICAgICAgIGlmIChfLmlzRnVuY3Rpb24oY3VzdG9tQ2xpY2spKSBjdXN0b21DbGljayhlKTtcbiAgICAgIH07XG4gICAgICBjZWxsQXR0cnMuY2xhc3NOYW1lID0gY3MoY2VsbEF0dHJzLmNsYXNzTmFtZSwgXCJzb3J0YWJsZVwiKTtcblxuICAgICAgaWYgKHNvcnRpbmcpIHtcbiAgICAgICAgc29ydFN5bWJvbCA9IHNvcnRDYXJldGZ1bmMgPyAoXG4gICAgICAgICAgc29ydENhcmV0ZnVuYyhzb3J0T3JkZXIgfHwgU09SVF9ERVNDLCBjb2x1bW4pXG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPFNvcnRDYXJldCBvcmRlcj17c29ydE9yZGVyIX0gLz5cbiAgICAgICAgKTtcblxuICAgICAgICBjZWxsQ2xhc3NlcyA9IGNzKFxuICAgICAgICAgIGNlbGxDbGFzc2VzLFxuICAgICAgICAgIF8uaXNGdW5jdGlvbihoZWFkZXJTb3J0aW5nQ2xhc3NlcylcbiAgICAgICAgICAgID8gaGVhZGVyU29ydGluZ0NsYXNzZXMoY29sdW1uLCBzb3J0T3JkZXIhLCBpc0xhc3RTb3J0aW5nISwgaW5kZXgpXG4gICAgICAgICAgICA6IGhlYWRlclNvcnRpbmdDbGFzc2VzXG4gICAgICAgICk7XG5cbiAgICAgICAgY2VsbFN0eWxlID0ge1xuICAgICAgICAgIC4uLmNlbGxTdHlsZSxcbiAgICAgICAgICAuLi4oXy5pc0Z1bmN0aW9uKGhlYWRlclNvcnRpbmdTdHlsZSlcbiAgICAgICAgICAgID8gaGVhZGVyU29ydGluZ1N0eWxlKGNvbHVtbiwgc29ydE9yZGVyISwgaXNMYXN0U29ydGluZyEsIGluZGV4KVxuICAgICAgICAgICAgOiBoZWFkZXJTb3J0aW5nU3R5bGUpLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc29ydFN5bWJvbCA9IHNvcnRDYXJldGZ1bmMgPyAoXG4gICAgICAgICAgc29ydENhcmV0ZnVuYyh1bmRlZmluZWQsIGNvbHVtbilcbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8U29ydFN5bWJvbCAvPlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjZWxsQ2xhc3NlcykgY2VsbEF0dHJzLmNsYXNzTmFtZSA9IGNzKGNlbGxBdHRycy5jbGFzc05hbWUsIGNlbGxDbGFzc2VzKTtcbiAgICBpZiAoIV8uaXNFbXB0eU9iamVjdChjZWxsU3R5bGUpKSBjZWxsQXR0cnMuc3R5bGUgPSBjZWxsU3R5bGU7XG5cbiAgICBpZiAoZmlsdGVyUG9zaXRpb24gPT09IEZJTFRFUlNfUE9TSVRJT05fSU5MSU5FKSB7XG4gICAgICBpZiAoZmlsdGVyUmVuZGVyZXIpIHtcbiAgICAgICAgY29uc3Qgb25DdXN0b21GaWx0ZXIgPSBvbkV4dGVybmFsRmlsdGVyPy4oXG4gICAgICAgICAgY29sdW1uLFxuICAgICAgICAgIGZpbHRlcj8ucHJvcHMudHlwZSB8fCBcIlwiXG4gICAgICAgICk7XG4gICAgICAgIGZpbHRlckVsZW1lbnQgPSBmaWx0ZXJSZW5kZXJlcihvbkN1c3RvbUZpbHRlciEsIGNvbHVtbik7XG4gICAgICB9IGVsc2UgaWYgKGZpbHRlcikge1xuICAgICAgICBmaWx0ZXJFbGVtZW50ID0gKFxuICAgICAgICAgIDxmaWx0ZXIuRmlsdGVyXG4gICAgICAgICAgICB7Li4uZmlsdGVyLnByb3BzfVxuICAgICAgICAgICAgZmlsdGVyU3RhdGU9e2N1cnJGaWx0ZXJzPy5bY29sdW1uLmRhdGFGaWVsZF19XG4gICAgICAgICAgICBvbkZpbHRlcj17b25GaWx0ZXJ9XG4gICAgICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgPSBoZWFkZXJGb3JtYXR0ZXJcbiAgICAgID8gaGVhZGVyRm9ybWF0dGVyKGNvbHVtbiwgaW5kZXgsIHtcbiAgICAgICAgc29ydEVsZW1lbnQ6IHNvcnRTeW1ib2wsXG4gICAgICAgIGZpbHRlckVsZW1lbnQsXG4gICAgICB9KVxuICAgICAgOiB0ZXh0O1xuXG4gICAgaWYgKGhlYWRlckZvcm1hdHRlcikge1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ0aFwiLCBjZWxsQXR0cnMsIGNoaWxkcmVuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgIFwidGhcIixcbiAgICAgIGNlbGxBdHRycyxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgc29ydFN5bWJvbCxcbiAgICAgIGZpbHRlckVsZW1lbnRcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEhlYWRlckNlbGw7XG4iLCJpbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gXCJldmVudHNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBSZW1vdGVSZXNvbHZlciBmcm9tIFwiLi4vcHJvcHMtcmVzb2x2ZXIvcmVtb3RlLXJlc29sdmVyXCI7XG5pbXBvcnQgZGF0YU9wZXJhdG9yIGZyb20gXCIuLi9zdG9yZS9vcGVyYXRvcnNcIjtcbmltcG9ydCBfIGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgQm9vdHN0cmFwQ29udGV4dCB9IGZyb20gXCIuL2Jvb3RzdHJhcFwiO1xuaW1wb3J0IGNyZWF0ZUNvbHVtbkNvbnRleHQgZnJvbSBcIi4vY29sdW1uLWNvbnRleHRcIjtcbmltcG9ydCBjcmVhdGVEYXRhQ29udGV4dCBmcm9tIFwiLi9kYXRhLWNvbnRleHRcIjtcbmltcG9ydCBjcmVhdGVSb3dFeHBhbmRDb250ZXh0IGZyb20gXCIuL3Jvdy1leHBhbmQtY29udGV4dFwiO1xuaW1wb3J0IHsgY3JlYXRlU2VsZWN0aW9uQ29udGV4dCB9IGZyb20gXCIuL3NlbGVjdGlvbi1jb250ZXh0XCI7XG5pbXBvcnQgY3JlYXRlU29ydENvbnRleHQgZnJvbSBcIi4vc29ydC1jb250ZXh0XCI7XG5cbmNvbnN0IHdpdGhDb250ZXh0ID0gKEJhc2U6IGFueSkgPT5cbiAgY2xhc3MgQm9vdHN0cmFwVGFibGVDb250YWluZXIgZXh0ZW5kcyBSZW1vdGVSZXNvbHZlcihCYXNlKSB7XG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgdGhpcy5EYXRhQ29udGV4dCA9IGNyZWF0ZURhdGFDb250ZXh0KCk7XG5cbiAgICAgIGlmIChwcm9wcy5yZWdpc3RlckV4cG9zZWRBUEkpIHtcbiAgICAgICAgY29uc3QgZXhwb3NlZEFQSUVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIGV4cG9zZWRBUElFbWl0dGVyLm9uKFxuICAgICAgICAgIFwiZ2V0LnRhYmxlLmRhdGFcIixcbiAgICAgICAgICAocGF5bG9hZCkgPT4gKHBheWxvYWQucmVzdWx0ID0gdGhpcy50YWJsZS5nZXREYXRhKCkpXG4gICAgICAgICk7XG4gICAgICAgIGV4cG9zZWRBUElFbWl0dGVyLm9uKFxuICAgICAgICAgIFwiZ2V0LnNlbGVjdGVkLnJvd3NcIixcbiAgICAgICAgICAocGF5bG9hZCkgPT4gKHBheWxvYWQucmVzdWx0ID0gdGhpcy5zZWxlY3Rpb25Db250ZXh0LmdldFNlbGVjdGVkKCkpXG4gICAgICAgICk7XG4gICAgICAgIGV4cG9zZWRBUElFbWl0dGVyLm9uKFwiZ2V0LmZpbHRlcmVkLnJvd3NcIiwgKHBheWxvYWQpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hDb250ZXh0KSB7XG4gICAgICAgICAgICBwYXlsb2FkLnJlc3VsdCA9IHRoaXMuc2VhcmNoQ29udGV4dC5nZXRTZWFyY2hlZCgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5maWx0ZXJDb250ZXh0KSB7XG4gICAgICAgICAgICBwYXlsb2FkLnJlc3VsdCA9IHRoaXMuZmlsdGVyQ29udGV4dC5nZXRGaWx0ZXJlZCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXlsb2FkLnJlc3VsdCA9IHRoaXMudGFibGUuZ2V0RGF0YSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHByb3BzLnJlZ2lzdGVyRXhwb3NlZEFQSShleHBvc2VkQVBJRW1pdHRlcik7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wcy5jb2x1bW5zLmZpbHRlcigoY29sOiBhbnkpID0+IGNvbC5zb3J0KS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuU29ydENvbnRleHQgPSBjcmVhdGVTb3J0Q29udGV4dChcbiAgICAgICAgICBkYXRhT3BlcmF0b3IsXG4gICAgICAgICAgdGhpcy5pc1JlbW90ZVNvcnQsXG4gICAgICAgICAgdGhpcy5oYW5kbGVSZW1vdGVTb3J0Q2hhbmdlXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgcHJvcHMuY29sdW1uVG9nZ2xlIHx8XG4gICAgICAgIHByb3BzLmNvbHVtbnMuZmlsdGVyKChjb2w6IGFueSkgPT4gY29sLmhpZGRlbikubGVuZ3RoID4gMFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuQ29sdW1uQ29udGV4dCA9IGNyZWF0ZUNvbHVtbkNvbnRleHQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLnNlbGVjdFJvdykge1xuICAgICAgICB0aGlzLlNlbGVjdGlvbkNvbnRleHQgPSBjcmVhdGVTZWxlY3Rpb25Db250ZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wcy5leHBhbmRSb3cpIHtcbiAgICAgICAgdGhpcy5Sb3dFeHBhbmRDb250ZXh0ID0gY3JlYXRlUm93RXhwYW5kQ29udGV4dCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMuY2VsbEVkaXQgJiYgcHJvcHMuY2VsbEVkaXQuY3JlYXRlQ29udGV4dCkge1xuICAgICAgICB0aGlzLkNlbGxFZGl0Q29udGV4dCA9IHByb3BzLmNlbGxFZGl0LmNyZWF0ZUNvbnRleHQoXG4gICAgICAgICAgXyxcbiAgICAgICAgICBkYXRhT3BlcmF0b3IsXG4gICAgICAgICAgdGhpcy5pc1JlbW90ZUNlbGxFZGl0LFxuICAgICAgICAgIHRoaXMuaGFuZGxlUmVtb3RlQ2VsbENoYW5nZVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMuZmlsdGVyKSB7XG4gICAgICAgIHRoaXMuRmlsdGVyQ29udGV4dCA9IHByb3BzLmZpbHRlci5jcmVhdGVDb250ZXh0KFxuICAgICAgICAgIF8sXG4gICAgICAgICAgdGhpcy5pc1JlbW90ZUZpbHRlcmluZyxcbiAgICAgICAgICB0aGlzLmhhbmRsZVJlbW90ZUZpbHRlckNoYW5nZVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMucGFnaW5hdGlvbikge1xuICAgICAgICB0aGlzLlBhZ2luYXRpb25Db250ZXh0ID0gcHJvcHMucGFnaW5hdGlvbi5jcmVhdGVDb250ZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wcy5zZWFyY2ggJiYgcHJvcHMuc2VhcmNoLnNlYXJjaENvbnRleHQpIHtcbiAgICAgICAgdGhpcy5TZWFyY2hDb250ZXh0ID0gcHJvcHMuc2VhcmNoLnNlYXJjaENvbnRleHQoXG4gICAgICAgICAgXyxcbiAgICAgICAgICB0aGlzLmlzUmVtb3RlU2VhcmNoLFxuICAgICAgICAgIHRoaXMuaGFuZGxlUmVtb3RlU2VhcmNoQ2hhbmdlXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wcy5zZXREZXBlbmRlbmN5TW9kdWxlcykge1xuICAgICAgICBwcm9wcy5zZXREZXBlbmRlbmN5TW9kdWxlcyhfKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLnNldFBhZ2luYXRpb25SZW1vdGVFbWl0dGVyKSB7XG4gICAgICAgIHByb3BzLnNldFBhZ2luYXRpb25SZW1vdGVFbWl0dGVyKHRoaXMucmVtb3RlRW1pdHRlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKG5leHRQcm9wczogYW55KSB7XG4gICAgICBpZiAobmV4dFByb3BzLmNvbHVtbnMuZmlsdGVyKChjb2w6IGFueSkgPT4gY29sLnNvcnQpLmxlbmd0aCA8PSAwKSB7XG4gICAgICAgIHRoaXMuU29ydENvbnRleHQgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5Tb3J0Q29udGV4dCkge1xuICAgICAgICB0aGlzLlNvcnRDb250ZXh0ID0gY3JlYXRlU29ydENvbnRleHQoXG4gICAgICAgICAgZGF0YU9wZXJhdG9yLFxuICAgICAgICAgIHRoaXMuaXNSZW1vdGVTb3J0LFxuICAgICAgICAgIHRoaXMuaGFuZGxlUmVtb3RlU29ydENoYW5nZVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKCFuZXh0UHJvcHMucGFnaW5hdGlvbiAmJiB0aGlzLnByb3BzLnBhZ2luYXRpb24pIHtcbiAgICAgICAgdGhpcy5QYWdpbmF0aW9uQ29udGV4dCA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAobmV4dFByb3BzLnBhZ2luYXRpb24gJiYgIXRoaXMucHJvcHMucGFnaW5hdGlvbikge1xuICAgICAgICB0aGlzLlBhZ2luYXRpb25Db250ZXh0ID0gbmV4dFByb3BzLnBhZ2luYXRpb24uY3JlYXRlQ29udGV4dChcbiAgICAgICAgICB0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbixcbiAgICAgICAgICB0aGlzLmhhbmRsZVJlbW90ZVBhZ2VDaGFuZ2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICghbmV4dFByb3BzLmNlbGxFZGl0ICYmIHRoaXMucHJvcHMuY2VsbEVkaXQpIHtcbiAgICAgICAgdGhpcy5DZWxsRWRpdENvbnRleHQgPSBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKG5leHRQcm9wcy5jZWxsRWRpdCAmJiAhdGhpcy5wcm9wcy5jZWxsRWRpdCkge1xuICAgICAgICB0aGlzLkNlbGxFZGl0Q29udGV4dCA9IG5leHRQcm9wcy5jZWxsRWRpdC5jcmVhdGVDb250ZXh0KFxuICAgICAgICAgIF8sXG4gICAgICAgICAgZGF0YU9wZXJhdG9yLFxuICAgICAgICAgIHRoaXMuaXNSZW1vdGVDZWxsRWRpdCxcbiAgICAgICAgICB0aGlzLmhhbmRsZVJlbW90ZUNlbGxDaGFuZ2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXJCYXNlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgcm9vdFByb3BzOiB7XG4gICAgICAgICAgZ2V0RGF0YTogKFxuICAgICAgICAgICAgZmlsdGVyUHJvcHM6IGFueSxcbiAgICAgICAgICAgIHNlYXJjaFByb3BzOiBhbnksXG4gICAgICAgICAgICBzb3J0UHJvcHM6IGFueSxcbiAgICAgICAgICAgIHBhZ2luYXRpb25Qcm9wczogYW55XG4gICAgICAgICAgKSA9PiBhbnk7XG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlclByb3BzOiBhbnksXG4gICAgICAgIHNlYXJjaFByb3BzOiBhbnksXG4gICAgICAgIHNvcnRQcm9wczogYW55LFxuICAgICAgICBwYWdpbmF0aW9uUHJvcHM6IGFueSxcbiAgICAgICAgY29sdW1uVG9nZ2xlUHJvcHM6IGFueVxuICAgICAgKSA9PiAoXG4gICAgICAgIDxCYXNlXG4gICAgICAgICAgcmVmPXsobjogYW55KSA9PiAodGhpcy50YWJsZSA9IG4pfVxuICAgICAgICAgIHsuLi50aGlzLnByb3BzfVxuICAgICAgICAgIHsuLi5zb3J0UHJvcHN9XG4gICAgICAgICAgey4uLmZpbHRlclByb3BzfVxuICAgICAgICAgIHsuLi5zZWFyY2hQcm9wc31cbiAgICAgICAgICB7Li4ucGFnaW5hdGlvblByb3BzfVxuICAgICAgICAgIHsuLi5jb2x1bW5Ub2dnbGVQcm9wc31cbiAgICAgICAgICBkYXRhPXtyb290UHJvcHMuZ2V0RGF0YShcbiAgICAgICAgICAgIGZpbHRlclByb3BzLFxuICAgICAgICAgICAgc2VhcmNoUHJvcHMsXG4gICAgICAgICAgICBzb3J0UHJvcHMsXG4gICAgICAgICAgICBwYWdpbmF0aW9uUHJvcHNcbiAgICAgICAgICApfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZW5kZXJXaXRoQ29sdW1uQ29udGV4dChiYXNlOiBhbnksIGJhc2VQcm9wczogYW55KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICByb290UHJvcHM6IGFueSxcbiAgICAgICAgZmlsdGVyUHJvcHM6IGFueSxcbiAgICAgICAgc2VhcmNoUHJvcHM6IGFueSxcbiAgICAgICAgc29ydFByb3BzOiBhbnksXG4gICAgICAgIHBhZ2luYXRpb25Qcm9wczogYW55XG4gICAgICApID0+IChcbiAgICAgICAgPHRoaXMuQ29sdW1uQ29udGV4dC5Qcm92aWRlclxuICAgICAgICAgIHsuLi5iYXNlUHJvcHN9XG4gICAgICAgICAgdG9nZ2xlcz17XG4gICAgICAgICAgICB0aGlzLnByb3BzLmNvbHVtblRvZ2dsZSA/IHRoaXMucHJvcHMuY29sdW1uVG9nZ2xlLnRvZ2dsZXMgOiBudWxsXG4gICAgICAgICAgfVxuICAgICAgICA+XG4gICAgICAgICAgPHRoaXMuQ29sdW1uQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICAgIHsoY29sdW1uVG9nZ2xlUHJvcHM6IGFueSkgPT5cbiAgICAgICAgICAgICAgYmFzZShcbiAgICAgICAgICAgICAgICByb290UHJvcHMsXG4gICAgICAgICAgICAgICAgZmlsdGVyUHJvcHMsXG4gICAgICAgICAgICAgICAgc2VhcmNoUHJvcHMsXG4gICAgICAgICAgICAgICAgc29ydFByb3BzLFxuICAgICAgICAgICAgICAgIHBhZ2luYXRpb25Qcm9wcyxcbiAgICAgICAgICAgICAgICBjb2x1bW5Ub2dnbGVQcm9wc1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90aGlzLkNvbHVtbkNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgIDwvdGhpcy5Db2x1bW5Db250ZXh0LlByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZW5kZXJXaXRoU2VsZWN0aW9uQ29udGV4dChiYXNlOiBhbnksIGJhc2VQcm9wczogYW55KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICByb290UHJvcHM6IHtcbiAgICAgICAgICBnZXREYXRhOiAoXG4gICAgICAgICAgICBmaWx0ZXJQcm9wczogYW55LFxuICAgICAgICAgICAgc2VhcmNoUHJvcHM6IGFueSxcbiAgICAgICAgICAgIHNvcnRQcm9wczogYW55LFxuICAgICAgICAgICAgcGFnaW5hdGlvblByb3BzOiBhbnlcbiAgICAgICAgICApID0+IGFueTtcbiAgICAgICAgfSxcbiAgICAgICAgZmlsdGVyUHJvcHM6IGFueSxcbiAgICAgICAgc2VhcmNoUHJvcHM6IGFueSxcbiAgICAgICAgc29ydFByb3BzOiBhbnksXG4gICAgICAgIHBhZ2luYXRpb25Qcm9wczogYW55XG4gICAgICApID0+IChcbiAgICAgICAgPHRoaXMuU2VsZWN0aW9uQ29udGV4dC5Qcm92aWRlclxuICAgICAgICAgIHsuLi5iYXNlUHJvcHN9XG4gICAgICAgICAgcmVmPXsobjogYW55KSA9PiAodGhpcy5zZWxlY3Rpb25Db250ZXh0ID0gbil9XG4gICAgICAgICAgc2VsZWN0Um93PXt0aGlzLnByb3BzLnNlbGVjdFJvd31cbiAgICAgICAgICBkYXRhPXtyb290UHJvcHMuZ2V0RGF0YShcbiAgICAgICAgICAgIGZpbHRlclByb3BzLFxuICAgICAgICAgICAgc2VhcmNoUHJvcHMsXG4gICAgICAgICAgICBzb3J0UHJvcHMsXG4gICAgICAgICAgICBwYWdpbmF0aW9uUHJvcHNcbiAgICAgICAgICApfVxuICAgICAgICA+XG4gICAgICAgICAge2Jhc2UoXG4gICAgICAgICAgICByb290UHJvcHMsXG4gICAgICAgICAgICBmaWx0ZXJQcm9wcyxcbiAgICAgICAgICAgIHNlYXJjaFByb3BzLFxuICAgICAgICAgICAgc29ydFByb3BzLFxuICAgICAgICAgICAgcGFnaW5hdGlvblByb3BzXG4gICAgICAgICAgKX1cbiAgICAgICAgPC90aGlzLlNlbGVjdGlvbkNvbnRleHQuUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJlbmRlcldpdGhSb3dFeHBhbmRDb250ZXh0KGJhc2U6IGFueSwgYmFzZVByb3BzOiBhbnkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHJvb3RQcm9wczoge1xuICAgICAgICAgIGdldERhdGE6IChcbiAgICAgICAgICAgIGZpbHRlclByb3BzOiBhbnksXG4gICAgICAgICAgICBzZWFyY2hQcm9wczogYW55LFxuICAgICAgICAgICAgc29ydFByb3BzOiBhbnksXG4gICAgICAgICAgICBwYWdpbmF0aW9uUHJvcHM6IGFueVxuICAgICAgICAgICkgPT4gYW55O1xuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXJQcm9wczogYW55LFxuICAgICAgICBzZWFyY2hQcm9wczogYW55LFxuICAgICAgICBzb3J0UHJvcHM6IGFueSxcbiAgICAgICAgcGFnaW5hdGlvblByb3BzOiBhbnlcbiAgICAgICkgPT4gKFxuICAgICAgICA8dGhpcy5Sb3dFeHBhbmRDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgey4uLmJhc2VQcm9wc31cbiAgICAgICAgICByZWY9eyhuOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMucm93RXhwYW5kQ29udGV4dCA9IG47XG4gICAgICAgICAgfX1cbiAgICAgICAgICBleHBhbmRSb3c9e3RoaXMucHJvcHMuZXhwYW5kUm93fVxuICAgICAgICAgIGRhdGE9e3Jvb3RQcm9wcy5nZXREYXRhKFxuICAgICAgICAgICAgZmlsdGVyUHJvcHMsXG4gICAgICAgICAgICBzZWFyY2hQcm9wcyxcbiAgICAgICAgICAgIHNvcnRQcm9wcyxcbiAgICAgICAgICAgIHBhZ2luYXRpb25Qcm9wc1xuICAgICAgICAgICl9XG4gICAgICAgID5cbiAgICAgICAgICB7YmFzZShcbiAgICAgICAgICAgIHJvb3RQcm9wcyxcbiAgICAgICAgICAgIGZpbHRlclByb3BzLFxuICAgICAgICAgICAgc2VhcmNoUHJvcHMsXG4gICAgICAgICAgICBzb3J0UHJvcHMsXG4gICAgICAgICAgICBwYWdpbmF0aW9uUHJvcHNcbiAgICAgICAgICApfVxuICAgICAgICA8L3RoaXMuUm93RXhwYW5kQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyV2l0aFBhZ2luYXRpb25Db250ZXh0KGJhc2U6IGFueSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgcm9vdFByb3BzOiB7XG4gICAgICAgICAgZ2V0RGF0YTogKFxuICAgICAgICAgICAgZmlsdGVyUHJvcHM6IGFueSxcbiAgICAgICAgICAgIHNlYXJjaFByb3BzOiBhbnksXG4gICAgICAgICAgICBzb3J0UHJvcHM6IGFueSxcbiAgICAgICAgICAgIHBhZ2luYXRpb25Qcm9wcz86IGFueVxuICAgICAgICAgICkgPT4gYW55O1xuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXJQcm9wczogYW55LFxuICAgICAgICBzZWFyY2hQcm9wczogYW55LFxuICAgICAgICBzb3J0UHJvcHM6IGFueVxuICAgICAgKSA9PiAoXG4gICAgICAgIDx0aGlzLlBhZ2luYXRpb25Db250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgcmVmPXsobjogYW55KSA9PiAodGhpcy5wYWdpbmF0aW9uQ29udGV4dCA9IG4pfVxuICAgICAgICAgIHBhZ2luYXRpb249e3RoaXMucHJvcHMucGFnaW5hdGlvbn1cbiAgICAgICAgICBkYXRhPXtyb290UHJvcHMuZ2V0RGF0YShmaWx0ZXJQcm9wcywgc2VhcmNoUHJvcHMsIHNvcnRQcm9wcyl9XG4gICAgICAgICAgYm9vdHN0cmFwND17dGhpcy5wcm9wcy5ib290c3RyYXA0fVxuICAgICAgICAgIGlzUmVtb3RlUGFnaW5hdGlvbj17dGhpcy5pc1JlbW90ZVBhZ2luYXRpb259XG4gICAgICAgICAgcmVtb3RlRW1pdHRlcj17dGhpcy5yZW1vdGVFbWl0dGVyfVxuICAgICAgICAgIG9uRGF0YVNpemVDaGFuZ2U9e3RoaXMucHJvcHMub25EYXRhU2l6ZUNoYW5nZX1cbiAgICAgICAgICB0YWJsZUlkPXt0aGlzLnByb3BzLmlkfVxuICAgICAgICA+XG4gICAgICAgICAgPHRoaXMuUGFnaW5hdGlvbkNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICB7KHBhZ2luYXRpb25Qcm9wczogYW55KSA9PlxuICAgICAgICAgICAgICBiYXNlKFxuICAgICAgICAgICAgICAgIHJvb3RQcm9wcyxcbiAgICAgICAgICAgICAgICBmaWx0ZXJQcm9wcyxcbiAgICAgICAgICAgICAgICBzZWFyY2hQcm9wcyxcbiAgICAgICAgICAgICAgICBzb3J0UHJvcHMsXG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvblByb3BzXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RoaXMuUGFnaW5hdGlvbkNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgIDwvdGhpcy5QYWdpbmF0aW9uQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyV2l0aFNvcnRDb250ZXh0KGJhc2U6IGFueSwgYmFzZVByb3BzOiBhbnkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHJvb3RQcm9wczoge1xuICAgICAgICAgIGdldERhdGE6IChcbiAgICAgICAgICAgIGZpbHRlclByb3BzOiBhbnksXG4gICAgICAgICAgICBzZWFyY2hQcm9wczogYW55LFxuICAgICAgICAgICAgc29ydFByb3BzPzogYW55LFxuICAgICAgICAgICAgcGFnaW5hdGlvblByb3BzPzogYW55XG4gICAgICAgICAgKSA9PiBhbnk7XG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlclByb3BzOiBhbnksXG4gICAgICAgIHNlYXJjaFByb3BzOiBhbnlcbiAgICAgICkgPT4gKFxuICAgICAgICA8dGhpcy5Tb3J0Q29udGV4dC5Qcm92aWRlclxuICAgICAgICAgIHsuLi5iYXNlUHJvcHN9XG4gICAgICAgICAgcmVmPXsobjogYW55KSA9PiAodGhpcy5zb3J0Q29udGV4dCA9IG4pfVxuICAgICAgICAgIGRlZmF1bHRTb3J0ZWQ9e3RoaXMucHJvcHMuZGVmYXVsdFNvcnRlZH1cbiAgICAgICAgICBkZWZhdWx0U29ydERpcmVjdGlvbj17dGhpcy5wcm9wcy5kZWZhdWx0U29ydERpcmVjdGlvbn1cbiAgICAgICAgICBzb3J0PXt0aGlzLnByb3BzLnNvcnR9XG4gICAgICAgICAgZGF0YT17cm9vdFByb3BzLmdldERhdGEoZmlsdGVyUHJvcHMsIHNlYXJjaFByb3BzKX1cbiAgICAgICAgPlxuICAgICAgICAgIDx0aGlzLlNvcnRDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgICAgeyhzb3J0UHJvcHM6IGFueSkgPT5cbiAgICAgICAgICAgICAgYmFzZShyb290UHJvcHMsIGZpbHRlclByb3BzLCBzZWFyY2hQcm9wcywgc29ydFByb3BzKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvdGhpcy5Tb3J0Q29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgPC90aGlzLlNvcnRDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZW5kZXJXaXRoU2VhcmNoQ29udGV4dChiYXNlOiBhbnksIGJhc2VQcm9wczogYW55KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICByb290UHJvcHM6IHtcbiAgICAgICAgICBnZXREYXRhOiAoXG4gICAgICAgICAgICBmaWx0ZXJQcm9wczogYW55LFxuICAgICAgICAgICAgc2VhcmNoUHJvcHM/OiBhbnksXG4gICAgICAgICAgICBzb3J0UHJvcHM/OiBhbnksXG4gICAgICAgICAgICBwYWdpbmF0aW9uUHJvcHM/OiBhbnlcbiAgICAgICAgICApID0+IGFueTtcbiAgICAgICAgfSxcbiAgICAgICAgZmlsdGVyUHJvcHM6IGFueVxuICAgICAgKSA9PiAoXG4gICAgICAgIDx0aGlzLlNlYXJjaENvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgICB7Li4uYmFzZVByb3BzfVxuICAgICAgICAgIHJlZj17KG46IGFueSkgPT4gKHRoaXMuc2VhcmNoQ29udGV4dCA9IG4pfVxuICAgICAgICAgIGRhdGE9e3Jvb3RQcm9wcy5nZXREYXRhKGZpbHRlclByb3BzKX1cbiAgICAgICAgICBzZWFyY2hUZXh0PXt0aGlzLnByb3BzLnNlYXJjaC5zZWFyY2hUZXh0fVxuICAgICAgICAgIGRhdGFDaGFuZ2VMaXN0ZW5lcj17dGhpcy5wcm9wcy5kYXRhQ2hhbmdlTGlzdGVuZXJ9XG4gICAgICAgID5cbiAgICAgICAgICA8dGhpcy5TZWFyY2hDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgICAgeyhzZWFyY2hQcm9wczogYW55KSA9PiBiYXNlKHJvb3RQcm9wcywgZmlsdGVyUHJvcHMsIHNlYXJjaFByb3BzKX1cbiAgICAgICAgICA8L3RoaXMuU2VhcmNoQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgPC90aGlzLlNlYXJjaENvbnRleHQuUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJlbmRlcldpdGhGaWx0ZXJDb250ZXh0KGJhc2U6IGFueSwgYmFzZVByb3BzOiBhbnkpIHtcbiAgICAgIHJldHVybiAocm9vdFByb3BzOiBhbnkpID0+IChcbiAgICAgICAgPHRoaXMuRmlsdGVyQ29udGV4dC5Qcm92aWRlclxuICAgICAgICAgIHsuLi5iYXNlUHJvcHN9XG4gICAgICAgICAgcmVmPXsobjogYW55KSA9PiAodGhpcy5maWx0ZXJDb250ZXh0ID0gbil9XG4gICAgICAgICAgZGF0YT17cm9vdFByb3BzLmdldERhdGEoKX1cbiAgICAgICAgICBmaWx0ZXI9e3RoaXMucHJvcHMuZmlsdGVyLm9wdGlvbnMgfHwge319XG4gICAgICAgICAgZGF0YUNoYW5nZUxpc3RlbmVyPXt0aGlzLnByb3BzLmRhdGFDaGFuZ2VMaXN0ZW5lcn1cbiAgICAgICAgPlxuICAgICAgICAgIDx0aGlzLkZpbHRlckNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICB7KGZpbHRlclByb3BzOiBhbnkpID0+IGJhc2Uocm9vdFByb3BzLCBmaWx0ZXJQcm9wcyl9XG4gICAgICAgICAgPC90aGlzLkZpbHRlckNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgIDwvdGhpcy5GaWx0ZXJDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZW5kZXJXaXRoQ2VsbEVkaXRDb250ZXh0KGJhc2U6IGFueSwgYmFzZVByb3BzOiBhbnkpIHtcbiAgICAgIHJldHVybiAocm9vdFByb3BzOiB7XG4gICAgICAgIGdldERhdGE6IChcbiAgICAgICAgICBmaWx0ZXJQcm9wcz86IGFueSxcbiAgICAgICAgICBzZWFyY2hQcm9wcz86IGFueSxcbiAgICAgICAgICBzb3J0UHJvcHM/OiBhbnksXG4gICAgICAgICAgcGFnaW5hdGlvblByb3BzPzogYW55XG4gICAgICAgICkgPT4gYW55O1xuICAgICAgfSkgPT4gKFxuICAgICAgICA8dGhpcy5DZWxsRWRpdENvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgICB7Li4uYmFzZVByb3BzfVxuICAgICAgICAgIHJlZj17KG46IGFueSkgPT4gKHRoaXMuY2VsbEVkaXRDb250ZXh0ID0gbil9XG4gICAgICAgICAgc2VsZWN0Um93PXt0aGlzLnByb3BzLnNlbGVjdFJvd31cbiAgICAgICAgICBjZWxsRWRpdD17dGhpcy5wcm9wcy5jZWxsRWRpdH1cbiAgICAgICAgICBkYXRhPXtyb290UHJvcHMuZ2V0RGF0YSgpfVxuICAgICAgICA+XG4gICAgICAgICAge2Jhc2Uocm9vdFByb3BzKX1cbiAgICAgICAgPC90aGlzLkNlbGxFZGl0Q29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3QgeyBrZXlGaWVsZCwgY29sdW1ucywgYm9vdHN0cmFwNCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IGJhc2VQcm9wcyA9IHsga2V5RmllbGQsIGNvbHVtbnMgfTtcblxuICAgICAgbGV0IGJhc2UgPSB0aGlzLnJlbmRlckJhc2UoKTtcblxuICAgICAgaWYgKHRoaXMuQ29sdW1uQ29udGV4dCkge1xuICAgICAgICBiYXNlID0gdGhpcy5yZW5kZXJXaXRoQ29sdW1uQ29udGV4dChiYXNlLCBiYXNlUHJvcHMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5TZWxlY3Rpb25Db250ZXh0KSB7XG4gICAgICAgIGJhc2UgPSB0aGlzLnJlbmRlcldpdGhTZWxlY3Rpb25Db250ZXh0KGJhc2UsIGJhc2VQcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLlJvd0V4cGFuZENvbnRleHQpIHtcbiAgICAgICAgYmFzZSA9IHRoaXMucmVuZGVyV2l0aFJvd0V4cGFuZENvbnRleHQoYmFzZSwgYmFzZVByb3BzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuUGFnaW5hdGlvbkNvbnRleHQpIHtcbiAgICAgICAgYmFzZSA9IHRoaXMucmVuZGVyV2l0aFBhZ2luYXRpb25Db250ZXh0KGJhc2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5Tb3J0Q29udGV4dCkge1xuICAgICAgICBiYXNlID0gdGhpcy5yZW5kZXJXaXRoU29ydENvbnRleHQoYmFzZSwgYmFzZVByb3BzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuU2VhcmNoQ29udGV4dCkge1xuICAgICAgICBiYXNlID0gdGhpcy5yZW5kZXJXaXRoU2VhcmNoQ29udGV4dChiYXNlLCBiYXNlUHJvcHMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5GaWx0ZXJDb250ZXh0KSB7XG4gICAgICAgIGJhc2UgPSB0aGlzLnJlbmRlcldpdGhGaWx0ZXJDb250ZXh0KGJhc2UsIGJhc2VQcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLkNlbGxFZGl0Q29udGV4dCkge1xuICAgICAgICBiYXNlID0gdGhpcy5yZW5kZXJXaXRoQ2VsbEVkaXRDb250ZXh0KGJhc2UsIGJhc2VQcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxCb290c3RyYXBDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt7IGJvb3RzdHJhcDQgfX0+XG4gICAgICAgICAgPHRoaXMuRGF0YUNvbnRleHQuUHJvdmlkZXIgey4uLmJhc2VQcm9wc30gZGF0YT17dGhpcy5wcm9wcy5kYXRhfT5cbiAgICAgICAgICAgIDx0aGlzLkRhdGFDb250ZXh0LkNvbnN1bWVyPntiYXNlfTwvdGhpcy5EYXRhQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICA8L3RoaXMuRGF0YUNvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgIDwvQm9vdHN0cmFwQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoQ29udGV4dDtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgRklMVEVSU19QT1NJVElPTl9UT1AgfSBmcm9tIFwiLi9jb25zdFwiO1xuaW1wb3J0IEZpbHRlcnNDZWxsIGZyb20gXCIuL2ZpbHRlcnMtY2VsbFwiO1xuaW1wb3J0IFJvd1RlbXBsYXRlIGZyb20gXCIuL3Jvdy9yb3ctdGVtcGxhdGVcIjtcblxuaW50ZXJmYWNlIEZpbHRlcnNQcm9wcyB7XG4gIGNvbHVtbnM6IGFueVtdO1xuICBvbkZpbHRlcj86IChmaWx0ZXJEYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiBSZWFjdC5SZWFjdE5vZGU7XG4gIGZpbHRlclBvc2l0aW9uPzogc3RyaW5nO1xuICBjdXJyRmlsdGVycz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIG9uRXh0ZXJuYWxGaWx0ZXI/OiAoY29sdW1uOiBhbnksIGZpbHRlclR5cGU6IHN0cmluZykgPT4gKHZhbHVlOiBhbnkpID0+IEZ1bmN0aW9uO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHNlbGVjdFJvdz86IGFueTtcbiAgZXhwYW5kUm93PzogYW55O1xuICBvblNvcnQ/OiAoZmlsdGVyRGF0YTogUmVjb3JkPHN0cmluZywgYW55PikgPT4gdm9pZDtcbn1cblxuY29uc3QgRmlsdGVyczogUmVhY3QuRkM8RmlsdGVyc1Byb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgY29sdW1ucyxcbiAgICBvbkZpbHRlcixcbiAgICBjdXJyRmlsdGVycyxcbiAgICBmaWx0ZXJQb3NpdGlvbiA9IEZJTFRFUlNfUE9TSVRJT05fVE9QLFxuICAgIG9uRXh0ZXJuYWxGaWx0ZXIsXG4gICAgY2xhc3NOYW1lLFxuICAgIHNlbGVjdFJvdyxcbiAgICBleHBhbmRSb3csXG4gIH0gPSBwcm9wcztcblxuICBmdW5jdGlvbiByZW5kZXJDb250ZW50KCkge1xuICAgIGNvbnN0IGZpbHRlckNvbHVtbnM6IEpTWC5FbGVtZW50W10gPSBbXTtcbiAgICBsZXQgc2hvd0ZpbHRlcnNSb3cgPSBmYWxzZTtcblxuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBpKSA9PiB7XG4gICAgICBmaWx0ZXJDb2x1bW5zLnB1c2goXG4gICAgICAgIDxGaWx0ZXJzQ2VsbFxuICAgICAgICAgIGluZGV4PXtpfVxuICAgICAgICAgIGtleT17Y29sdW1uLmRhdGFGaWVsZH1cbiAgICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgICAgICBjdXJyRmlsdGVycz17Y3VyckZpbHRlcnN9XG4gICAgICAgICAgb25FeHRlcm5hbEZpbHRlcj17b25FeHRlcm5hbEZpbHRlcn1cbiAgICAgICAgICBvbkZpbHRlcj17b25GaWx0ZXJ9XG4gICAgICAgIC8+XG4gICAgICApO1xuXG4gICAgICBpZiAoY29sdW1uLmZpbHRlclJlbmRlcmVyIHx8IGNvbHVtbi5maWx0ZXIpIHtcbiAgICAgICAgaWYgKCFzaG93RmlsdGVyc1Jvdykge1xuICAgICAgICAgIHNob3dGaWx0ZXJzUm93ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBmaWx0ZXJDb2x1bW5zO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8dGJvZHlcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgZGlzcGxheTpcbiAgICAgICAgICBmaWx0ZXJQb3NpdGlvbiA9PT0gRklMVEVSU19QT1NJVElPTl9UT1BcbiAgICAgICAgICAgID8gXCJ0YWJsZS1oZWFkZXItZ3JvdXBcIlxuICAgICAgICAgICAgOiBcInRhYmxlLWZvb3Rlci1ncm91cFwiLFxuICAgICAgfX1cbiAgICA+XG4gICAgICA8Um93VGVtcGxhdGVcbiAgICAgICAgcmVuZGVyQ29udGVudD17cmVuZGVyQ29udGVudH1cbiAgICAgICAgc2VsZWN0Um93PXtzZWxlY3RSb3d9XG4gICAgICAgIGV4cGFuZFJvdz17ZXhwYW5kUm93fVxuICAgICAgICBjZWxsRWw9XCJ0ZFwiXG4gICAgICAvPlxuICAgIDwvdGJvZHk+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBGaWx0ZXJzO1xuIiwiaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tIFwiZXZlbnRzXCI7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBfIGZyb20gXCIuLi91dGlsc1wiO1xuXG5leHBvcnQgZGVmYXVsdCAoRXh0ZW5kQmFzZTogYW55KSA9PlxuICBjbGFzcyBSZW1vdGVSZXNvbHZlciBleHRlbmRzIENvbXBvbmVudDx0eXBlb2YgRXh0ZW5kQmFzZT4ge1xuICAgIHJlbW90ZUVtaXR0ZXI6IEV2ZW50RW1pdHRlcjtcblxuICAgIERhdGFDb250ZXh0OiBhbnk7XG4gICAgQ29sdW1uQ29udGV4dDogYW55O1xuICAgIFNlbGVjdGlvbkNvbnRleHQ6IGFueTtcbiAgICBTZWFyY2hDb250ZXh0OiBhbnk7XG4gICAgRmlsdGVyQ29udGV4dDogYW55O1xuICAgIFJvd0V4cGFuZENvbnRleHQ6IGFueTtcbiAgICBDZWxsRWRpdENvbnRleHQ6IGFueTtcbiAgICBQYWdpbmF0aW9uQ29udGV4dDogYW55O1xuICAgIFNvcnRDb250ZXh0OiBhbnk7XG4gICAgVGFibGU6IGFueTtcblxuICAgIGRhdGFDb250ZXh0OiBhbnk7XG4gICAgY29sdW1uQ29udGV4dDogYW55O1xuICAgIHNlbGVjdGlvbkNvbnRleHQ6IGFueTtcbiAgICBzZWFyY2hDb250ZXh0OiBhbnk7XG4gICAgZmlsdGVyQ29udGV4dDogYW55O1xuICAgIHJvd0V4cGFuZENvbnRleHQ6IGFueTtcbiAgICBjZWxsRWRpdENvbnRleHQ6IGFueTtcbiAgICBwYWdpbmF0aW9uQ29udGV4dDogYW55O1xuICAgIHNvcnRDb250ZXh0OiBhbnk7XG4gICAgdGFibGU6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgIHRoaXMucmVtb3RlRW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgIHRoaXMucmVtb3RlRW1pdHRlci5vbihcInBhZ2luYXRpb25DaGFuZ2VcIiwgdGhpcy5oYW5kbGVSZW1vdGVQYWdlQ2hhbmdlKTtcbiAgICAgIHRoaXMucmVtb3RlRW1pdHRlci5vbihcImlzUmVtb3RlUGFnaW5hdGlvblwiLCB0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbik7XG4gICAgfVxuXG4gICAgZ2V0TmV3ZXN0U3RhdGUgPSAoc3RhdGU6IGFueSA9IHt9KSA9PiB7XG4gICAgICBsZXQgc29ydE9yZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgc29ydEZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgcGFnZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgICAgbGV0IHNpemVQZXJQYWdlOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgc2VhcmNoVGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgbGV0IGZpbHRlcnM6IGFueSA9IHt9O1xuXG4gICAgICBpZiAodGhpcy5zb3J0Q29udGV4dCkge1xuICAgICAgICBzb3J0T3JkZXIgPSB0aGlzLnNvcnRDb250ZXh0LnN0YXRlLnNvcnRPcmRlcjtcbiAgICAgICAgc29ydEZpZWxkID0gdGhpcy5zb3J0Q29udGV4dC5zdGF0ZS5zb3J0Q29sdW1uXG4gICAgICAgICAgPyB0aGlzLnNvcnRDb250ZXh0LnN0YXRlLnNvcnRDb2x1bW4uZGF0YUZpZWxkXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5maWx0ZXJDb250ZXh0KSB7XG4gICAgICAgIGZpbHRlcnMgPSB0aGlzLmZpbHRlckNvbnRleHQuY3VyckZpbHRlcnM7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnBhZ2luYXRpb25Db250ZXh0KSB7XG4gICAgICAgIHBhZ2UgPSB0aGlzLnBhZ2luYXRpb25Db250ZXh0LmN1cnJQYWdlO1xuICAgICAgICBzaXplUGVyUGFnZSA9IHRoaXMucGFnaW5hdGlvbkNvbnRleHQuY3VyclNpemVQZXJQYWdlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zZWFyY2hDb250ZXh0KSB7XG4gICAgICAgIHNlYXJjaFRleHQgPSB0aGlzLnByb3BzLnNlYXJjaC5zZWFyY2hUZXh0O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzb3J0T3JkZXIsXG4gICAgICAgIHNvcnRGaWVsZCxcbiAgICAgICAgZmlsdGVycyxcbiAgICAgICAgcGFnZSxcbiAgICAgICAgc2l6ZVBlclBhZ2UsXG4gICAgICAgIHNlYXJjaFRleHQsXG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBkYXRhOiB0aGlzLnByb3BzLmRhdGEsXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBpc1JlbW90ZVNlYXJjaCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHsgcmVtb3RlIH0gPSB0aGlzLnByb3BzO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgcmVtb3RlID09PSB0cnVlIHx8XG4gICAgICAgIChfLmlzT2JqZWN0KHJlbW90ZSkgJiYgcmVtb3RlLnNlYXJjaCkgfHxcbiAgICAgICAgdGhpcy5pc1JlbW90ZVBhZ2luYXRpb24oKVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgaXNSZW1vdGVQYWdpbmF0aW9uID0gKGU6IGFueSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB7IHJlbW90ZSB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGUucmVzdWx0ID0gcmVtb3RlID09PSB0cnVlIHx8IChfLmlzT2JqZWN0KHJlbW90ZSkgJiYgcmVtb3RlLnBhZ2luYXRpb24pO1xuICAgICAgcmV0dXJuIGUucmVzdWx0O1xuICAgIH07XG5cbiAgICBpc1JlbW90ZUZpbHRlcmluZyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHsgcmVtb3RlIH0gPSB0aGlzLnByb3BzO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgcmVtb3RlID09PSB0cnVlIHx8XG4gICAgICAgIChfLmlzT2JqZWN0KHJlbW90ZSkgJiYgcmVtb3RlLmZpbHRlcikgfHxcbiAgICAgICAgdGhpcy5pc1JlbW90ZVBhZ2luYXRpb24oKVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgaXNSZW1vdGVTb3J0ID0gKCkgPT4ge1xuICAgICAgY29uc3QgeyByZW1vdGUgfSA9IHRoaXMucHJvcHM7XG4gICAgICByZXR1cm4gKFxuICAgICAgICByZW1vdGUgPT09IHRydWUgfHxcbiAgICAgICAgKF8uaXNPYmplY3QocmVtb3RlKSAmJiByZW1vdGUuc29ydCkgfHxcbiAgICAgICAgdGhpcy5pc1JlbW90ZVBhZ2luYXRpb24oKVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgaXNSZW1vdGVDZWxsRWRpdCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHsgcmVtb3RlIH0gPSB0aGlzLnByb3BzO1xuICAgICAgcmV0dXJuIHJlbW90ZSA9PT0gdHJ1ZSB8fCAoXy5pc09iamVjdChyZW1vdGUpICYmIHJlbW90ZS5jZWxsRWRpdCk7XG4gICAgfTtcblxuICAgIGhhbmRsZVJlbW90ZVBhZ2VDaGFuZ2UgPSAocGFnZTogbnVtYmVyLCBzaXplUGVyUGFnZTogbnVtYmVyKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLm9uVGFibGVDaGFuZ2UoXG4gICAgICAgIFwicGFnaW5hdGlvblwiLFxuICAgICAgICB0aGlzLmdldE5ld2VzdFN0YXRlKHsgcGFnZSwgc2l6ZVBlclBhZ2UgfSlcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGhhbmRsZVJlbW90ZUZpbHRlckNoYW5nZSA9IChmaWx0ZXJzOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IG5ld1N0YXRlOiB7IGZpbHRlcnM6IGFueTsgcGFnZT86IG51bWJlciB9ID0geyBmaWx0ZXJzIH07XG4gICAgICBpZiAodGhpcy5pc1JlbW90ZVBhZ2luYXRpb24oKSkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5wcm9wcy5wYWdpbmF0aW9uLm9wdGlvbnMgfHwge307XG4gICAgICAgIG5ld1N0YXRlLnBhZ2UgPSBfLmlzRGVmaW5lZChvcHRpb25zLnBhZ2VTdGFydEluZGV4KVxuICAgICAgICAgID8gb3B0aW9ucy5wYWdlU3RhcnRJbmRleFxuICAgICAgICAgIDogMTtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJvcHMub25UYWJsZUNoYW5nZShcImZpbHRlclwiLCB0aGlzLmdldE5ld2VzdFN0YXRlKG5ld1N0YXRlKSk7XG4gICAgfTtcblxuICAgIGhhbmRsZVJlbW90ZVNvcnRDaGFuZ2UgPSAoc29ydEZpZWxkOiBzdHJpbmcsIHNvcnRPcmRlcjogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLm9uVGFibGVDaGFuZ2UoXG4gICAgICAgIFwic29ydFwiLFxuICAgICAgICB0aGlzLmdldE5ld2VzdFN0YXRlKHsgc29ydEZpZWxkLCBzb3J0T3JkZXIgfSlcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGhhbmRsZVJlbW90ZUNlbGxDaGFuZ2UgPSAocm93SWQ6IGFueSwgZGF0YUZpZWxkOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGNlbGxFZGl0ID0geyByb3dJZCwgZGF0YUZpZWxkLCBuZXdWYWx1ZSB9O1xuICAgICAgdGhpcy5wcm9wcy5vblRhYmxlQ2hhbmdlKFwiY2VsbEVkaXRcIiwgdGhpcy5nZXROZXdlc3RTdGF0ZSh7IGNlbGxFZGl0IH0pKTtcbiAgICB9O1xuXG4gICAgaGFuZGxlUmVtb3RlU2VhcmNoQ2hhbmdlID0gKHNlYXJjaFRleHQ6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5wcm9wcy5vblRhYmxlQ2hhbmdlKFwic2VhcmNoXCIsIHRoaXMuZ2V0TmV3ZXN0U3RhdGUoeyBzZWFyY2hUZXh0IH0pKTtcbiAgICB9O1xuICB9O1xuIiwiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IChFeHRlbmRCYXNlOiBhbnkpID0+XG4gIGNsYXNzIENvbHVtblJlc29sdmVyIGV4dGVuZHMgQ29tcG9uZW50PHR5cGVvZiBFeHRlbmRCYXNlPiB7XG4gICAgdmlzaWJsZUNvbHVtblNpemUoaW5jbHVkZVNlbGVjdENvbHVtbiA9IHRydWUpIHtcbiAgICAgIGxldCBjb2x1bW5MZW47XG4gICAgICBpZiAodGhpcy5wcm9wcy5jb2x1bW5Ub2dnbGUgJiYgdGhpcy5wcm9wcy5jb2x1bW5Ub2dnbGUudG9nZ2xlcykge1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5wcm9wcy5jb2x1bW5Ub2dnbGUudG9nZ2xlcztcbiAgICAgICAgY29sdW1uTGVuID0gT2JqZWN0LmtleXMoY29sdW1ucykuZmlsdGVyKChuYW1lKSA9PiBjb2x1bW5zW25hbWVdKS5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2x1bW5MZW4gPSB0aGlzLnByb3BzLmNvbHVtbnMuZmlsdGVyKChjOiBhbnkpID0+ICFjLmhpZGRlbikubGVuZ3RoO1xuICAgICAgfVxuICAgICAgaWYgKCFpbmNsdWRlU2VsZWN0Q29sdW1uKSByZXR1cm4gY29sdW1uTGVuO1xuICAgICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0Um93ICYmICF0aGlzLnByb3BzLnNlbGVjdFJvdy5oaWRlU2VsZWN0Q29sdW1uKSB7XG4gICAgICAgIGNvbHVtbkxlbiArPSAxO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucHJvcHMuZXhwYW5kUm93ICYmIHRoaXMucHJvcHMuZXhwYW5kUm93LnNob3dFeHBhbmRDb2x1bW4pIHtcbiAgICAgICAgY29sdW1uTGVuICs9IDE7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29sdW1uTGVuO1xuICAgIH1cbiAgfTtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NzIzKTtcbiJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJyZXF1aXJlIiwiZGVmaW5lIiwiYW1kIiwic2VsZiIsIl9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzU0NDJfXyIsIl9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzYwMDNfXyIsIkV4cGFuZFJvdyIsIkNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJzdXBlciIsInRoaXMiLCJub2RlUmVmIiwiY3JlYXRlUmVmIiwicmVuZGVyIiwiY2hpbGRyZW4iLCJleHBhbmRlZCIsIm9uQ2xvc2VkIiwiY2xhc3NOYW1lIiwicmVzdCIsIkNTU1RyYW5zaXRpb24iLCJhcHBlYXIiLCJpbiIsInRpbWVvdXQiLCJjbGFzc05hbWVzIiwib25FeGl0ZWQiLCJyZWYiLCJvcmRlciIsIm9yZGVyQ2xhc3MiLCJkcm9wdXAiLCJTT1JUX0FTQyIsIkJvb3RzdHJhcENvbnRleHQiLCJDb25zdW1lciIsImJvb3RzdHJhcDQiLCJjb250ZW50IiwiY29sU3BhbiIsImluZGV4IiwiY29sdW1uIiwiY3VyckZpbHRlcnMiLCJvbkV4dGVybmFsRmlsdGVyIiwib25GaWx0ZXIiLCJmaWx0ZXIiLCJmaWx0ZXJFbG0iLCJjZWxsQXR0cnMiLCJjZWxsU3R5bGUiLCJzdHlsZSIsImhlYWRlckFsaWduIiwidGV4dEFsaWduIiwiaXNGdW5jdGlvbiIsImZpbHRlclJlbmRlcmVyIiwib25DdXN0b21GaWx0ZXIiLCJ0eXBlIiwiRmlsdGVyIiwiZmlsdGVyU3RhdGUiLCJkYXRhRmllbGQiLCJjcmVhdGVFbGVtZW50IiwiRXh0ZW5kQmFzZSIsInNob3VsZFVwZGF0ZUJ5Q2VsbEVkaXRpbmciLCJuZXh0UHJvcHMiLCJjbGlja1RvRWRpdCIsImRiY2xpY2tUb0VkaXQiLCJlZGl0aW5nUm93SWR4Iiwicm93SW5kZXgiLCJzaG91bGRVcGRhdGVkQnlTZWxmUHJvcHMiLCJpc0VxdWFsIiwiYXR0cnMiLCJzaG91bGRVcGRhdGVCeUNvbHVtbnNGb3JTaW1wbGVDaGVjayIsImNvbHVtbnMiLCJsZW5ndGgiLCJpIiwic2hvdWxkVXBkYXRlZEJ5Tm9ybWFsUHJvcHMiLCJlZGl0YWJsZSIsInJvdyIsInNob3VsZFVwZGF0ZUNoaWxkIiwic2hvdWxkUm93Q29udGVudFVwZGF0ZSIsIm1hdGNoUm93Iiwia2V5RmllbGQiLCJpZCIsImdldCIsImdldFJvd0J5Um93SWQiLCJkYXRhIiwiZmluZCIsIlJvd0FnZ3JlZ2F0b3IiLCJSb3dFdmVudERlbGVnYXRlciIsImNsaWNrTnVtIiwic2hvdWxkVXBkYXRlUm93Q29udGVudCIsImNyZWF0ZUNsaWNrRXZlbnRIYW5kbGVyIiwiYmluZCIsInNob3VsZENvbXBvbmVudFVwZGF0ZSIsInNlbGVjdGVkIiwiZXhwYW5kYWJsZSIsInNlbGVjdGFibGUiLCJzZWxlY3RSb3ciLCJoaWRlU2VsZWN0Q29sdW1uIiwiaXNSZW5kZXJGdW5jdGlvbkNvbHVtbkluTGVmdCIsInBvc2l0aW9uIiwiSU5ESUNBVE9SX1BPU0lUSU9OX0xFRlQiLCJleHBhbmRSb3ciLCJ2aXNpYmxlQ29sdW1uU2l6ZSIsInRhYkluZGV4Q2VsbCIsImtleSIsInNlbGVjdENvbHVtblBvc2l0aW9uIiwiY2xpY2tUb1NlbGVjdCIsInNob3dFeHBhbmRDb2x1bW4iLCJleHBhbmRDb2x1bW5Qb3NpdGlvbiIsIm5ld0F0dHJzIiwiZGVsZWdhdGUiLCJyZW5kZXJlciIsIm9uQ2xpY2siLCJ0YWJJbmRleFN0YXJ0IiwiY2hpbGRyZW5zIiwic2hvdWxkVXBkYXRlIiwic2VsZWN0Q2VsbCIsInJvd0tleSIsImRpc2FibGVkIiwidGFiSW5kZXgiLCJ1bnNoaWZ0IiwicHVzaCIsImV4cGFuZENlbGwiLCJFeHBhbmRDZWxsIiwiaGFuZGxlQ2xpY2siLCJlIiwib25Sb3dFeHBhbmQiLCJzdG9wUHJvcGFnYXRpb24iLCJleHBhbmRDb2x1bW5SZW5kZXJlciIsInVuZGVmaW5lZCIsIkJvb3RzdHJhcFRhYmxlIiwiZ2V0RGF0YSIsInZpc2libGVSb3dzIiwidmFsaWRhdGVQcm9wcyIsImNvbXBvbmVudERpZFVwZGF0ZSIsIm9uRGF0YVNpemVDaGFuZ2UiLCJwYWdpbmF0aW9uIiwiZGF0YVNpemUiLCJsb2FkaW5nIiwib3ZlcmxheSIsIkxvYWRpbmdPdmVybGF5IiwicmVuZGVyVGFibGUiLCJjbGFzc2VzIiwic3RyaXBlZCIsImhvdmVyIiwiYm9yZGVyZWQiLCJjb25kZW5zZWQiLCJub0RhdGFJbmRpY2F0aW9uIiwiY2FwdGlvbiIsInJvd1N0eWxlIiwicm93Q2xhc3NlcyIsIndyYXBwZXJDbGFzc2VzIiwicm93RXZlbnRzIiwibW9kZSIsIlJPV19TRUxFQ1RfRElTQUJMRUQiLCJub25FeHBhbmRhYmxlIiwiY2VsbEVkaXQiLCJub25FZGl0YWJsZVJvd3MiLCJmaWx0ZXJQb3NpdGlvbiIsIkZJTFRFUlNfUE9TSVRJT05fSU5MSU5FIiwidGFibGVXcmFwcGVyQ2xhc3MiLCJ0YWJsZUNsYXNzIiwiaGFzRmlsdGVycyIsInNvbWUiLCJjb2wiLCJoYXNGb290ZXIiLCJoYXMiLCJ0YWJsZUNhcHRpb24iLCJoZWFkZXJDbGFzc2VzIiwiaGVhZGVyV3JhcHBlckNsYXNzZXMiLCJzb3J0RmllbGQiLCJzb3J0T3JkZXIiLCJvblNvcnQiLCJnbG9iYWxTb3J0Q2FyZXQiLCJzb3J0Iiwic29ydENhcmV0IiwiZmlsdGVyc0NsYXNzZXMiLCJib2R5Q2xhc3NlcyIsImlzRW1wdHkiLCJmb290ZXJDbGFzc2VzIiwicmVuZGVyQ29udGVudCIsImNlbGxFbCIsIlNlbGVjdGlvbkNlbGwiLCJzZWxlY3RDb2x1bW5TdHlsZSIsImlucHV0VHlwZSIsIm9uUm93U2VsZWN0IiwiUk9XX1NFTEVDVF9TSU5HTEUiLCJzZWxlY3Rpb25SZW5kZXJlciIsImNoZWNrZWQiLCJyb3dpbmRleCIsInJvd2tleSIsIm9uQ2hhbmdlIiwiaXNBbnlFeHBhbmRzIiwieCIsImV4cGFuZGFibGVLZXlzIiwic2tpcHMiLCJtYXAiLCJjb250YWlucyIsImdldEV4cGFuZGVkUm93cyIsImsiLCJSb3dFeHBhbmRDb250ZXh0IiwiY3JlYXRlQ29udGV4dCIsImlzQ2xvc2luZyIsIm9uQWxsUm93RXhwYW5kIiwiUm93RXhwYW5kUHJvdmlkZXIiLCJzdGF0ZSIsImNsb3NlZFJvdyIsInNldFN0YXRlIiwidmFsdWUiLCJoYW5kbGVSb3dFeHBhbmQiLCJpc0V4cGFuZGVkIiwib25FeHBhbmQiLCJvbmx5T25lRXhwYW5kaW5nIiwiY3VyckV4cGFuZGVkIiwiY3VycklzQ2xvc2luZyIsImNvbmNhdCIsImhhbmRsZUFsbFJvd0V4cGFuZCIsImV4cGFuZEFsbCIsIm9uRXhwYW5kQWxsIiwicyIsImQiLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJwcmV2U3RhdGUiLCJuZXh0RXhwYW5kZWQiLCJyb3dJZCIsInJlZHVjZSIsImFjYyIsImN1ciIsIlByb3ZpZGVyIiwiY2FwdGlvblNpZGUiLCJldmVudHMiLCJDZWxsRXZlbnREZWxlZ2F0ZXIiLCJjcmVhdGVEZWZhdWx0RXZlbnRIYW5kbGVyIiwiY2IiLCJjb2x1bW5JbmRleCIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwiYXR0ciIsImluY2x1ZGVzIiwidHlwZUNvbnZlcnQiLCJUWVBFX1NUUklORyIsIlN0cmluZyIsIlRZUEVfTlVNQkVSIiwiTnVtYmVyIiwiVFlQRV9CT09MRUFOIiwiVFlQRV9EQVRFIiwiRGF0ZSIsIlJvd1B1cmVDb250ZW50IiwiaXNFZGl0YWJsZSIsImVkaXRpbmdDb2xJZHgiLCJhdHN0YXJ0IiwiRWRpdGluZ0NlbGxDb21wb25lbnQiLCJjZWxsVGl0bGUiLCJvcmlnaW5GbiIsImNlbGxDbGFzc2VzIiwidGl0bGUiLCJhbGlnbiIsImlzRW1wdHlPYmplY3QiLCJlZGl0YWJsZUNlbGwiLCJpc0RlZmluZWQiLCJ0b1N0cmluZyIsImNvbHVtbmluZGV4IiwiY2xpY2t0b2VkaXQiLCJkYmNsaWNrdG9lZGl0IiwiZGVmYXVsdENvbHVtbkNvbnRleHQiLCJ0b2dnbGVzIiwiQ29sdW1uQ29udGV4dCIsIkNvbHVtblByb3ZpZGVyIiwidG9nZ2xlQ29sdW1ucyIsImhpZGRlbiIsIlNpbXBsZVJvdyIsInRyQXR0cnMiLCJEYXRhQ29udGV4dCIsIkRhdGFQcm92aWRlciIsImZpbHRlclByb3BzIiwic2VhcmNoUHJvcHMiLCJzb3J0UHJvcHMiLCJwYWdpbmF0aW9uUHJvcHMiLCJXaXRoU2VsZWN0aW9uUm93Q29uc3VtZXIiLCJTZWxlY3Rpb25Db250ZXh0Iiwibm9uU2VsZWN0YWJsZSIsIm5vdFNlbGVjdGFibGUiLCJzZWxlY3RlZFN0eWxlIiwic2VsZWN0ZWRDbGFzc2VzIiwiYmdDb2xvciIsImJhY2tncm91bmRDb2xvciIsIm5vdFNlbGVjdGFibGVTdHlsZSIsIm5vblNlbGVjdGFibGVTdHlsZSIsIm5vdFNlbGVjdGFibGVDbGFzc2VzIiwibm9uU2VsZWN0YWJsZUNsYXNzZXMiLCJyZW5kZXJXaXRoU2VsZWN0aW9uIiwiZGlzcGxheU5hbWUiLCJjcmVhdGVTZWxlY3Rpb25Db250ZXh0IiwiY29tcGFyYXRvciIsImEiLCJiIiwicmVzdWx0IiwibG9jYWxlQ29tcGFyZSIsInNvcnRGdW5jIiwic29ydFZhbHVlIiwiX2RhdGEiLCJ2YWx1ZUEiLCJ2YWx1ZUIiLCJTT1JUX0RFU0MiLCJuZXh0T3JkZXIiLCJjdXJyZW50U29ydENvbHVtbiIsInNvcnRDb2x1bW4iLCJkZWZhdWx0T3JkZXIiLCJzcGxpdE5lc3RlZCIsInN0ciIsImpvaW4iLCJyZXBsYWNlIiwic3BsaXQiLCJhc3NpZ24iLCJ0YXJnZXQiLCJmaWVsZCIsImRpcmVjdEdldCIsInBhdGhBcnJheSIsImN1cnIiLCJwYXRoIiwic2V0Iiwic2FmZSIsImxldmVsIiwiRXJyb3IiLCJvYmoiLCJpc09iamVjdCIsImhhc093blByb3BlcnR5IiwicHJvdG90eXBlIiwiY2FsbCIsInNsZWVwIiwiZm4iLCJtcyIsInNldFRpbWVvdXQiLCJkZWJvdW5jZSIsImZ1bmMiLCJ3YWl0IiwiaW1tZWRpYXRlIiwiY2FsbE5vdyIsImNsZWFyVGltZW91dCIsImFwcGx5IiwiYXJndW1lbnRzIiwibGlzdCIsImluZGV4T2YiLCJFeHBhbnNpb25IZWFkZXJDZWxsIiwiaGFuZGxlQ2hlY2tCb3hDbGljayIsImV4cGFuZEhlYWRlckNvbHVtblJlbmRlcmVyIiwiZ2V0U2VsZWN0aW9uU3VtbWFyeSIsImFsbFJvd3NTZWxlY3RlZCIsImFsbFJvd3NOb3RTZWxlY3RlZCIsInJvd0tleXMiLCJzZWxlY3RhYmxlS2V5cyIsInVuU2VsZWN0YWJsZUtleXMiLCJnZXRTZWxlY3RlZFJvd3MiLCJWRVJTSU9OIiwiZyIsImdsb2JhbCIsIkZ1bmN0aW9uIiwiQXJyYXlQcm90byIsIkFycmF5IiwiT2JqUHJvdG8iLCJTeW1ib2xQcm90byIsIlN5bWJvbCIsInNsaWNlIiwic3VwcG9ydHNBcnJheUJ1ZmZlciIsIkFycmF5QnVmZmVyIiwic3VwcG9ydHNEYXRhVmlldyIsIkRhdGFWaWV3IiwibmF0aXZlSXNBcnJheSIsImlzQXJyYXkiLCJuYXRpdmVLZXlzIiwibmF0aXZlQ3JlYXRlIiwiY3JlYXRlIiwibmF0aXZlSXNWaWV3IiwiaXNWaWV3IiwiX2lzTmFOIiwiaXNOYU4iLCJfaXNGaW5pdGUiLCJpc0Zpbml0ZSIsImhhc0VudW1CdWciLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIm5vbkVudW1lcmFibGVQcm9wcyIsIk1BWF9BUlJBWV9JTkRFWCIsIk1hdGgiLCJwb3ciLCJyZXN0QXJndW1lbnRzIiwic3RhcnRJbmRleCIsIm1heCIsImFyZ3MiLCJpc051bGwiLCJpc1VuZGVmaW5lZCIsImlzQm9vbGVhbiIsImlzRWxlbWVudCIsIm5vZGVUeXBlIiwidGFnVGVzdGVyIiwibmFtZSIsInRhZyIsIm5vZGVsaXN0IiwiZG9jdW1lbnQiLCJjaGlsZE5vZGVzIiwiSW50OEFycmF5IiwiaGFzRGF0YVZpZXdCdWciLCJ0ZXN0IiwiaXNJRTExIiwiTWFwIiwiaXNEYXRhVmlldyIsImdldEludDgiLCJpc0FycmF5QnVmZmVyIiwiYnVmZmVyIiwiaXNBcmd1bWVudHMiLCJpc1N5bWJvbCIsInBhcnNlRmxvYXQiLCJpc051bWJlciIsImNvbnN0YW50IiwiY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2siLCJnZXRTaXplUHJvcGVydHkiLCJjb2xsZWN0aW9uIiwic2l6ZVByb3BlcnR5Iiwic2hhbGxvd1Byb3BlcnR5IiwidHlwZWRBcnJheVBhdHRlcm4iLCJjb2xsZWN0Tm9uRW51bVByb3BzIiwiaGFzaCIsImwiLCJlbXVsYXRlZFNldCIsIm5vbkVudW1JZHgiLCJwcm90byIsInByb3AiLCJpc1N0cmluZyIsImlzTWF0Y2giLCJvYmplY3QiLCJfa2V5cyIsIl8iLCJfd3JhcHBlZCIsInRvQnVmZmVyVmlldyIsImJ1ZmZlclNvdXJjZSIsIlVpbnQ4QXJyYXkiLCJieXRlT2Zmc2V0IiwidmFsdWVPZiIsInRvSlNPTiIsInRhZ0RhdGFWaWV3IiwiZXEiLCJhU3RhY2siLCJiU3RhY2siLCJkZWVwRXEiLCJhcmVBcnJheXMiLCJhQ3RvciIsImJDdG9yIiwicG9wIiwiYWxsS2V5cyIsImllMTFmaW5nZXJwcmludCIsIm1ldGhvZHMiLCJ3ZWFrTWFwTWV0aG9kcyIsImZvckVhY2hOYW1lIiwiY29tbW9uSW5pdCIsIm1hcFRhaWwiLCJtYXBNZXRob2RzIiwic2V0TWV0aG9kcyIsInZhbHVlcyIsInBhaXJzIiwiaW52ZXJ0IiwiZnVuY3Rpb25zIiwibmFtZXMiLCJjcmVhdGVBc3NpZ25lciIsImtleXNGdW5jIiwiZGVmYXVsdHMiLCJzb3VyY2UiLCJiYXNlQ3JlYXRlIiwiQ3RvciIsImV4dGVuZE93biIsImNsb25lIiwiZXh0ZW5kIiwidGFwIiwiaW50ZXJjZXB0b3IiLCJ0b1BhdGgiLCJkZWVwR2V0IiwiZGVmYXVsdFZhbHVlIiwiaWRlbnRpdHkiLCJtYXRjaGVyIiwicHJvcGVydHkiLCJvcHRpbWl6ZUNiIiwiY29udGV4dCIsImFyZ0NvdW50IiwiYWNjdW11bGF0b3IiLCJiYXNlSXRlcmF0ZWUiLCJpdGVyYXRlZSIsIkluZmluaXR5IiwibWFwT2JqZWN0IiwicmVzdWx0cyIsImN1cnJlbnRLZXkiLCJub29wIiwicHJvcGVydHlPZiIsInRpbWVzIiwibiIsImFjY3VtIiwicmFuZG9tIiwibWluIiwiZmxvb3IiLCJub3ciLCJnZXRUaW1lIiwiY3JlYXRlRXNjYXBlciIsImVzY2FwZXIiLCJtYXRjaCIsInRlc3RSZWdleHAiLCJSZWdFeHAiLCJyZXBsYWNlUmVnZXhwIiwic3RyaW5nIiwidGVtcGxhdGVTZXR0aW5ncyIsImV2YWx1YXRlIiwiaW50ZXJwb2xhdGUiLCJlc2NhcGUiLCJub01hdGNoIiwiZXNjYXBlcyIsImVzY2FwZVJlZ0V4cCIsImVzY2FwZUNoYXIiLCJiYXJlSWRlbnRpZmllciIsInRlbXBsYXRlIiwidGV4dCIsInNldHRpbmdzIiwib2xkU2V0dGluZ3MiLCJvZmZzZXQiLCJhcmd1bWVudCIsInZhcmlhYmxlIiwiZmFsbGJhY2siLCJpZENvdW50ZXIiLCJ1bmlxdWVJZCIsInByZWZpeCIsImNoYWluIiwiaW5zdGFuY2UiLCJfY2hhaW4iLCJleGVjdXRlQm91bmQiLCJzb3VyY2VGdW5jIiwiYm91bmRGdW5jIiwiY2FsbGluZ0NvbnRleHQiLCJwYXJ0aWFsIiwiYm91bmRBcmdzIiwicGxhY2Vob2xkZXIiLCJib3VuZCIsIlR5cGVFcnJvciIsImNhbGxBcmdzIiwiZmxhdHRlbiIsImlucHV0IiwiZGVwdGgiLCJzdHJpY3QiLCJvdXRwdXQiLCJpZHgiLCJqIiwibGVuIiwibWVtb2l6ZSIsImhhc2hlciIsImNhY2hlIiwiYWRkcmVzcyIsImRlbGF5IiwidGhyb3R0bGUiLCJvcHRpb25zIiwicHJldmlvdXMiLCJsYXRlciIsImxlYWRpbmciLCJ0aHJvdHRsZWQiLCJfbm93IiwicmVtYWluaW5nIiwidHJhaWxpbmciLCJjYW5jZWwiLCJwYXNzZWQiLCJkZWJvdW5jZWQiLCJfYXJncyIsIndyYXAiLCJ3cmFwcGVyIiwibmVnYXRlIiwicHJlZGljYXRlIiwiY29tcG9zZSIsInN0YXJ0IiwiYWZ0ZXIiLCJiZWZvcmUiLCJtZW1vIiwiZmluZEtleSIsImNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyIiwiZGlyIiwiYXJyYXkiLCJzb3J0ZWRJbmRleCIsImxvdyIsImhpZ2giLCJtaWQiLCJjcmVhdGVJbmRleEZpbmRlciIsInByZWRpY2F0ZUZpbmQiLCJpdGVtIiwiZmluZEluZGV4IiwiZmluZExhc3RJbmRleCIsImZpbmRXaGVyZSIsImVhY2giLCJjcmVhdGVSZWR1Y2UiLCJpbml0aWFsIiwicmVkdWNlciIsInJlamVjdCIsImV2ZXJ5IiwiZnJvbUluZGV4IiwiZ3VhcmQiLCJjb250ZXh0UGF0aCIsIm1ldGhvZCIsInBsdWNrIiwid2hlcmUiLCJjb21wdXRlZCIsImxhc3RDb21wdXRlZCIsInYiLCJyZVN0clN5bWJvbCIsInRvQXJyYXkiLCJzYW1wbGUiLCJsYXN0IiwicmFuZCIsInRlbXAiLCJzaHVmZmxlIiwic29ydEJ5IiwiY3JpdGVyaWEiLCJsZWZ0IiwicmlnaHQiLCJncm91cCIsImJlaGF2aW9yIiwicGFydGl0aW9uIiwicGFzcyIsInNpemUiLCJrZXlJbk9iaiIsInBpY2siLCJmaXJzdCIsImNvbXBhY3QiLCJCb29sZWFuIiwib3RoZXJBcnJheXMiLCJkaWZmZXJlbmNlIiwidW5pcSIsImlzU29ydGVkIiwic2VlbiIsImFycmF5cyIsImludGVyc2VjdGlvbiIsImFyZ3NMZW5ndGgiLCJ1bnppcCIsInJhbmdlIiwic3RvcCIsInN0ZXAiLCJjZWlsIiwiY2h1bmsiLCJjb3VudCIsImNoYWluUmVzdWx0IiwibWl4aW4iLCJkYXRhT3BlcmF0b3IiLCJpc1JlbW90ZVNvcnQiLCJoYW5kbGVTb3J0Q2hhbmdlIiwiZGVmYXVsdFNvcnRDb250ZXh0IiwiU29ydENvbnRleHQiLCJTb3J0UHJvdmlkZXIiLCJoYW5kbGVTb3J0IiwiZGVmYXVsdFNvcnREaXJlY3Rpb24iLCJkZWZhdWx0U29ydGVkIiwiaW5pdFNvcnQiLCJjb21wb25lbnREaWRNb3VudCIsInNvcnRDb2x1bW5zIiwiaGlkZGVuUm93cyIsIlNlbGVjdGlvbkhlYWRlckNlbGxDb21wIiwiRXhwYW5zaW9uSGVhZGVyQ2VsbENvbXAiLCJjdXJyU29ydCIsImlzTGFzdFNvcnRpbmciLCJzb3J0aW5nIiwiRXhwYW5zaW9uQ29udGV4dCIsInBhcmVudENsYXNzTmFtZSIsInJlbmRlcldpdGhFeHBhbnNpb24iLCJCb2R5IiwiRWRpdGluZ0NlbGwiLCJjcmVhdGVFZGl0aW5nQ2VsbCIsIm9uU3RhcnRFZGl0IiwiUm93Q29tcG9uZW50Iiwic2VsZWN0Um93RW5hYmxlZCIsImV4cGFuZFJvd0VuYWJsZWQiLCJ3aXRoUm93TGV2ZWxDZWxsRWRpdCIsImluZGljYXRpb24iLCJhZGRpdGlvbmFsUm93UHJvcHMiLCJiYXNlUm93UHJvcHMiLCJfZXh0ZW5kcyIsInQiLCJyIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJfc2V0UHJvdG90eXBlT2YiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsIl9pbmhlcml0c0xvb3NlIiwibyIsInJlcGxhY2VDbGFzc05hbWUiLCJvcmlnQ2xhc3MiLCJjbGFzc1RvUmVtb3ZlIiwiZm9yY2VSZWZsb3ciLCJub2RlIiwic2Nyb2xsVG9wIiwiVU5NT1VOVEVEIiwiRVhJVEVEIiwiRU5URVJJTkciLCJFTlRFUkVEIiwiRVhJVElORyIsIlRyYW5zaXRpb24iLCJfUmVhY3QkQ29tcG9uZW50IiwiX3RoaXMiLCJpbml0aWFsU3RhdHVzIiwiaXNNb3VudGluZyIsImVudGVyIiwiYXBwZWFyU3RhdHVzIiwidW5tb3VudE9uRXhpdCIsIm1vdW50T25FbnRlciIsInN0YXR1cyIsIm5leHRDYWxsYmFjayIsIl9yZWYiLCJfcHJvdG8iLCJ1cGRhdGVTdGF0dXMiLCJwcmV2UHJvcHMiLCJuZXh0U3RhdHVzIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJjYW5jZWxOZXh0Q2FsbGJhY2siLCJnZXRUaW1lb3V0cyIsImV4aXQiLCJtb3VudGluZyIsImN1cnJlbnQiLCJwZXJmb3JtRW50ZXIiLCJwZXJmb3JtRXhpdCIsIl90aGlzMiIsImFwcGVhcmluZyIsIl9yZWYyIiwibWF5YmVOb2RlIiwibWF5YmVBcHBlYXJpbmciLCJ0aW1lb3V0cyIsImVudGVyVGltZW91dCIsImNvbmZpZyIsInNhZmVTZXRTdGF0ZSIsIm9uRW50ZXJlZCIsIm9uRW50ZXIiLCJvbkVudGVyaW5nIiwib25UcmFuc2l0aW9uRW5kIiwiX3RoaXMzIiwib25FeGl0Iiwib25FeGl0aW5nIiwibmV4dFN0YXRlIiwiY2FsbGJhY2siLCJzZXROZXh0Q2FsbGJhY2siLCJfdGhpczQiLCJhY3RpdmUiLCJldmVudCIsImhhbmRsZXIiLCJkb2VzTm90SGF2ZVRpbWVvdXRPckxpc3RlbmVyIiwiYWRkRW5kTGlzdGVuZXIiLCJfcmVmMyIsIm1heWJlTmV4dENhbGxiYWNrIiwiX3RoaXMkcHJvcHMiLCJjaGlsZFByb3BzIiwiVHJhbnNpdGlvbkdyb3VwQ29udGV4dCIsIm9ubHkiLCJjb250ZXh0VHlwZSIsInByb3BUeXBlcyIsImRlZmF1bHRQcm9wcyIsInJlbW92ZUNsYXNzIiwiYyIsImVsZW1lbnQiLCJjbGFzc0xpc3QiLCJyZW1vdmUiLCJzZXRBdHRyaWJ1dGUiLCJiYXNlVmFsIiwiX2xlbiIsIl9rZXkiLCJhcHBsaWVkQ2xhc3NlcyIsIl90aGlzJHJlc29sdmVBcmd1bWVudCIsInJlc29sdmVBcmd1bWVudHMiLCJyZW1vdmVDbGFzc2VzIiwiYWRkQ2xhc3MiLCJfdGhpcyRyZXNvbHZlQXJndW1lbnQyIiwiX3RoaXMkcmVzb2x2ZUFyZ3VtZW50MyIsImdldENsYXNzTmFtZXMiLCJpc1N0cmluZ0NsYXNzTmFtZXMiLCJiYXNlQ2xhc3NOYW1lIiwiYWN0aXZlQ2xhc3NOYW1lIiwiZG9uZUNsYXNzTmFtZSIsInBoYXNlIiwiYWRkIiwiaGFzQ2xhc3MiLCJfYWRkQ2xhc3MiLCJfdGhpcyRhcHBsaWVkQ2xhc3NlcyQiLCJiYXNlIiwiZG9uZSIsImdldENoaWxkTWFwcGluZyIsIm1hcEZuIiwiQ2hpbGRyZW4iLCJjaGlsZCIsImlzVmFsaWRFbGVtZW50IiwibWFwcGVyIiwiZ2V0UHJvcCIsImdldE5leHRDaGlsZE1hcHBpbmciLCJwcmV2Q2hpbGRNYXBwaW5nIiwibmV4dENoaWxkTWFwcGluZyIsInByZXYiLCJuZXh0IiwiZ2V0VmFsdWVGb3JLZXkiLCJuZXh0S2V5c1BlbmRpbmciLCJwZW5kaW5nS2V5cyIsInByZXZLZXkiLCJjaGlsZE1hcHBpbmciLCJuZXh0S2V5IiwicGVuZGluZ05leHRLZXkiLCJtZXJnZUNoaWxkTWFwcGluZ3MiLCJoYXNQcmV2IiwiaGFzTmV4dCIsInByZXZDaGlsZCIsImlzTGVhdmluZyIsImNsb25lRWxlbWVudCIsIlRyYW5zaXRpb25Hcm91cCIsImhhbmRsZUV4aXRlZCIsIlJlZmVyZW5jZUVycm9yIiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsImNvbnRleHRWYWx1ZSIsImZpcnN0UmVuZGVyIiwibW91bnRlZCIsImN1cnJlbnRDaGlsZE1hcHBpbmciLCJjb21wb25lbnQiLCJjaGlsZEZhY3RvcnkiLCJSZXBsYWNlVHJhbnNpdGlvbiIsImhhbmRsZUVudGVyIiwiX2xlbjIiLCJfa2V5MiIsImhhbmRsZUxpZmVjeWNsZSIsImhhbmRsZUVudGVyaW5nIiwiX2xlbjMiLCJfa2V5MyIsImhhbmRsZUVudGVyZWQiLCJfbGVuNCIsIl9rZXk0IiwiaGFuZGxlRXhpdCIsIl9sZW41IiwiX2tleTUiLCJoYW5kbGVFeGl0aW5nIiwiX2xlbjYiLCJfa2V5NiIsIl9sZW43IiwiX2tleTciLCJvcmlnaW5hbEFyZ3MiLCJfY2hpbGQkcHJvcHMiLCJpblByb3AiLCJfUmVhY3QkQ2hpbGRyZW4kdG9BcnIiLCJzZWNvbmQiLCJfbGVhdmVSZW5kZXJzIiwiX2VudGVyUmVuZGVycyIsIm1vZGVzIiwiY2FsbEhvb2siLCJfZWxlbWVudCRwcm9wcyIsImxlYXZlUmVuZGVycyIsImNoYW5nZVN0YXRlIiwiZW50ZXJSZW5kZXJzIiwiX3JlZjQiLCJTd2l0Y2hUcmFuc2l0aW9uIiwiYXBwZWFyZWQiLCJvbGRDaGlsZHJlbiIsIm5ld0NoaWxkcmVuIiwiX3RoaXMkc3RhdGUiLCJST1dfU0VMRUNUX01VTFRJUExFIiwiQ0hFQ0tCT1hfU1RBVFVTX0lOREVURVJNSU5BVEUiLCJDSEVDS0JPWF9TVEFUVVNfQ0hFQ0tFRCIsIkNIRUNLQk9YX1NUQVRVU19VTkNIRUNLRUQiLCJGSUxURVJTX1BPU0lUSU9OX1RPUCIsIkZJTFRFUlNfUE9TSVRJT05fQk9UVE9NIiwiSU5ESUNBVE9SX1BPU0lUSU9OX1JJR0hUIiwicm93cyIsInNlbGVjdGlvbiIsImV4cGFuZCIsIm11dGF0ZSIsImhhc093biIsImFyZyIsImFwcGVuZENsYXNzIiwicGFyc2VWYWx1ZSIsIm5ld0NsYXNzIiwiZGVmYXVsdCIsIlJlZmxlY3RPd25LZXlzIiwiUiIsIlJlZmxlY3QiLCJSZWZsZWN0QXBwbHkiLCJyZWNlaXZlciIsIm93bktleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiTnVtYmVySXNOYU4iLCJFdmVudEVtaXR0ZXIiLCJpbml0Iiwib25jZSIsImVtaXR0ZXIiLCJQcm9taXNlIiwicmVzb2x2ZSIsImVycm9yTGlzdGVuZXIiLCJlcnIiLCJyZW1vdmVMaXN0ZW5lciIsInJlc29sdmVyIiwiZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyIiwiZmxhZ3MiLCJvbiIsImFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyIiwiX2V2ZW50cyIsIl9ldmVudHNDb3VudCIsIl9tYXhMaXN0ZW5lcnMiLCJkZWZhdWx0TWF4TGlzdGVuZXJzIiwiY2hlY2tMaXN0ZW5lciIsImxpc3RlbmVyIiwiX2dldE1heExpc3RlbmVycyIsInRoYXQiLCJfYWRkTGlzdGVuZXIiLCJwcmVwZW5kIiwibSIsImV4aXN0aW5nIiwid2FybmluZyIsIm5ld0xpc3RlbmVyIiwiZW1pdCIsIndhcm5lZCIsInciLCJjb25zb2xlIiwid2FybiIsIm9uY2VXcmFwcGVyIiwiZmlyZWQiLCJ3cmFwRm4iLCJfb25jZVdyYXAiLCJ3cmFwcGVkIiwiX2xpc3RlbmVycyIsInVud3JhcCIsImV2bGlzdGVuZXIiLCJhcnIiLCJyZXQiLCJ1bndyYXBMaXN0ZW5lcnMiLCJhcnJheUNsb25lIiwibGlzdGVuZXJDb3VudCIsImNvcHkiLCJhZGRFdmVudExpc3RlbmVyIiwid3JhcExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsIlJhbmdlRXJyb3IiLCJnZXRQcm90b3R5cGVPZiIsInNldE1heExpc3RlbmVycyIsImdldE1heExpc3RlbmVycyIsImRvRXJyb3IiLCJlcnJvciIsImVyIiwibWVzc2FnZSIsImxpc3RlbmVycyIsImFkZExpc3RlbmVyIiwicHJlcGVuZExpc3RlbmVyIiwicHJlcGVuZE9uY2VMaXN0ZW5lciIsIm9yaWdpbmFsTGlzdGVuZXIiLCJzaGlmdCIsInNwbGljZU9uZSIsIm9mZiIsInJlbW92ZUFsbExpc3RlbmVycyIsInJhd0xpc3RlbmVycyIsImV2ZW50TmFtZXMiLCJERUxBWV9GT1JfREJDTElDSyIsImNsaWNrRm4iLCJleHBhbmRCeUNvbHVtbk9ubHkiLCJjbGlja1RvRXhwYW5kIiwiQ2hlY2tCb3giLCJpbmRldGVybWluYXRlIiwiU2VsZWN0aW9uSGVhZGVyQ2VsbCIsImNoZWNrZWRTdGF0dXMiLCJvbkFsbFJvd3NTZWxlY3QiLCJzZWxlY3Rpb25IZWFkZXJSZW5kZXJlciIsImhpZGVTZWxlY3RBbGwiLCJoZWFkZXJDb2x1bW5TdHlsZSIsImZvb3RlciIsImNvbHVtbkRhdGEiLCJGb290ZXJDZWxsIiwiZm9vdGVyVGl0bGUiLCJmb290ZXJBbGlnbiIsImZvb3RlckZvcm1hdHRlciIsImZvb3RlckV2ZW50cyIsImZvb3RlclN0eWxlIiwiZm9vdGVyQXR0cnMiLCJkZWxlZ2F0ZUV2ZW50cyIsIlNlbGVjdGlvblByb3ZpZGVyIiwiaGFuZGxlUm93U2VsZWN0Iiwib25TZWxlY3QiLCJjdXJyU2VsZWN0ZWQiLCJpc0hhbmRsZVJvd1NlbGVjdCIsImZvcmNlVXBkYXRlIiwiaGFuZGxlQWxsUm93c1NlbGVjdCIsImlzVW5TZWxlY3QiLCJvblNlbGVjdEFsbCIsImdldFNlbGVjdGVkIiwiQ2VsbCIsImNyZWF0ZUhhbmRsZUVkaXRpbmdDZWxsIiwiaXNEdW1teUZpZWxkIiwiZm9ybWF0dGVyIiwiZm9ybWF0RXh0cmFEYXRhIiwib3JpZ2luRnVuYyIsIm9uRG91YmxlQ2xpY2siLCJlZGl0Q2VsbCIsIm5ld1ZhbHVlIiwiSGVhZGVyQ2VsbCIsImhlYWRlclRpdGxlIiwiaGVhZGVyRm9ybWF0dGVyIiwiaGVhZGVyRXZlbnRzIiwiaGVhZGVyU3R5bGUiLCJoZWFkZXJBdHRycyIsImhlYWRlclNvcnRpbmdDbGFzc2VzIiwiaGVhZGVyU29ydGluZ1N0eWxlIiwic29ydENhcmV0ZnVuYyIsImN1c3RvbUF0dHJzIiwic29ydFN5bWJvbCIsImZpbHRlckVsZW1lbnQiLCJjdXN0b21DbGljayIsImN1c3RvbUtleURvd24iLCJvbktleURvd24iLCJvbktleVVwIiwic29ydEVsZW1lbnQiLCJCYXNlIiwicmVnaXN0ZXJFeHBvc2VkQVBJIiwiZXhwb3NlZEFQSUVtaXR0ZXIiLCJwYXlsb2FkIiwidGFibGUiLCJzZWxlY3Rpb25Db250ZXh0Iiwic2VhcmNoQ29udGV4dCIsImdldFNlYXJjaGVkIiwiZmlsdGVyQ29udGV4dCIsImdldEZpbHRlcmVkIiwiaGFuZGxlUmVtb3RlU29ydENoYW5nZSIsImNvbHVtblRvZ2dsZSIsIkNlbGxFZGl0Q29udGV4dCIsImlzUmVtb3RlQ2VsbEVkaXQiLCJoYW5kbGVSZW1vdGVDZWxsQ2hhbmdlIiwiRmlsdGVyQ29udGV4dCIsImlzUmVtb3RlRmlsdGVyaW5nIiwiaGFuZGxlUmVtb3RlRmlsdGVyQ2hhbmdlIiwiUGFnaW5hdGlvbkNvbnRleHQiLCJzZWFyY2giLCJTZWFyY2hDb250ZXh0IiwiaXNSZW1vdGVTZWFyY2giLCJoYW5kbGVSZW1vdGVTZWFyY2hDaGFuZ2UiLCJzZXREZXBlbmRlbmN5TW9kdWxlcyIsInNldFBhZ2luYXRpb25SZW1vdGVFbWl0dGVyIiwicmVtb3RlRW1pdHRlciIsImlzUmVtb3RlUGFnaW5hdGlvbiIsImhhbmRsZVJlbW90ZVBhZ2VDaGFuZ2UiLCJyZW5kZXJCYXNlIiwicm9vdFByb3BzIiwiY29sdW1uVG9nZ2xlUHJvcHMiLCJyZW5kZXJXaXRoQ29sdW1uQ29udGV4dCIsImJhc2VQcm9wcyIsInJlbmRlcldpdGhTZWxlY3Rpb25Db250ZXh0IiwicmVuZGVyV2l0aFJvd0V4cGFuZENvbnRleHQiLCJyb3dFeHBhbmRDb250ZXh0IiwicmVuZGVyV2l0aFBhZ2luYXRpb25Db250ZXh0IiwicGFnaW5hdGlvbkNvbnRleHQiLCJ0YWJsZUlkIiwicmVuZGVyV2l0aFNvcnRDb250ZXh0Iiwic29ydENvbnRleHQiLCJyZW5kZXJXaXRoU2VhcmNoQ29udGV4dCIsInNlYXJjaFRleHQiLCJkYXRhQ2hhbmdlTGlzdGVuZXIiLCJyZW5kZXJXaXRoRmlsdGVyQ29udGV4dCIsInJlbmRlcldpdGhDZWxsRWRpdENvbnRleHQiLCJjZWxsRWRpdENvbnRleHQiLCJkaXNwbGF5IiwiZmlsdGVyQ29sdW1ucyIsInNob3dGaWx0ZXJzUm93IiwiZ2V0TmV3ZXN0U3RhdGUiLCJwYWdlIiwic2l6ZVBlclBhZ2UiLCJmaWx0ZXJzIiwiY3VyclBhZ2UiLCJjdXJyU2l6ZVBlclBhZ2UiLCJyZW1vdGUiLCJvblRhYmxlQ2hhbmdlIiwibmV3U3RhdGUiLCJwYWdlU3RhcnRJbmRleCIsImluY2x1ZGVTZWxlY3RDb2x1bW4iLCJjb2x1bW5MZW4iLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiZ2V0dGVyIiwiX19lc01vZHVsZSIsImRlZmluaXRpb24iLCJnbG9iYWxUaGlzIiwid2luZG93IiwidG9TdHJpbmdUYWciXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==
2
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react"),require("react-dom")):"function"==typeof define&&define.amd?define(["react","react-dom"],t):"object"==typeof exports?exports.ReactBootstrapTableNg=t(require("react"),require("react-dom")):e.ReactBootstrapTableNg=t(e.React,e.ReactDOM)}(self,(e,t)=>(()=>{var n={105(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(6942)),i=r(n(5442)),a=n(6310);class s extends i.default.Component{constructor(e){super(e),this.nodeRef=i.default.createRef()}render(){const{children:e,expanded:t=!1,onClosed:n,className:r="",...s}=this.props;return i.default.createElement("tr",null,i.default.createElement("td",{className:(0,o.default)("reset-expansion-style",r),...s},i.default.createElement(a.CSSTransition,{appear:!0,in:t,timeout:400,classNames:"row-expand-slide",onExited:n,nodeRef:this.nodeRef},i.default.createElement("div",{ref:this.nodeRef},i.default.createElement("div",{className:"row-expansion-style"},e)))))}}t.default=s},184(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(6942)),i=r(n(5442)),a=n(6561),s=n(3761);t.default=({order:e})=>{const t=(0,o.default)("react-bootstrap-table-sort-order",{dropup:e===a.SORT_ASC});return i.default.createElement(s.BootstrapContext.Consumer,null,({bootstrap4:n})=>n?i.default.createElement("span",{className:`caret-4-${e}`,"data-testid":"sort-caret"}):i.default.createElement("span",{className:t,"data-testid":"sort-caret"},i.default.createElement("span",{className:"caret"})))}},285(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442));t.default=({content:e=null,colSpan:t=1})=>o.default.createElement("tr",null,o.default.createElement("td",{"data-toggle":"collapse",colSpan:t,className:"react-bs-table-no-data"},e))},286(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=r(n(3955));t.default=e=>{const{index:t,column:n,currFilters:r,onExternalFilter:a=()=>{},onFilter:s=()=>{}}=e,{filter:l}=n;let u;const c={},d={};if(c.style=d,n.headerAlign&&(d.textAlign=i.default.isFunction(n.headerAlign)?n.headerAlign(n,t):n.headerAlign),n.filterRenderer){const e=a(n,l?.props.type||"");u=n.filterRenderer(e,n)}else l&&(u=o.default.createElement(l.Filter,{...l.props,filterState:r[n.dataField],onFilter:s,column:n}));return o.default.createElement("th",c,u)}},338(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return class extends e{shouldUpdateByCellEditing(e){return!(!this.props.clickToEdit&&!this.props.dbclickToEdit)&&(e.editingRowIdx===e.rowIndex||this.props.editingRowIdx===e.rowIndex&&null===e.editingRowIdx||this.props.editingRowIdx===e.rowIndex)}shouldUpdatedBySelfProps(e){return this.props.className!==e.className||!o.default.isEqual(this.props.style,e.style)||!o.default.isEqual(this.props.attrs,e.attrs)}shouldUpdateByColumnsForSimpleCheck(e){if(this.props.columns.length!==e.columns.length)return!0;for(let t=0;t<this.props.columns.length;t+=1)if(!o.default.isEqual(this.props.columns[t],e.columns[t]))return!0;return!1}shouldUpdatedByNormalProps(e){return this.props.rowIndex!==e.rowIndex||this.props.editable!==e.editable||!o.default.isEqual(this.props.row,e.row)||this.props.columns.length!==e.columns.length}shouldUpdateChild(e){return this.shouldUpdateByCellEditing(e)||this.shouldUpdatedByNormalProps(e)}shouldRowContentUpdate(e){return this.shouldUpdateChild(e)||this.shouldUpdateByColumnsForSimpleCheck(e)}}};const o=r(n(3955))},355(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getRowByRowId=t.matchRow=void 0;const o=r(n(3955));t.matchRow=(e,t)=>n=>o.default.get(n,e)===t;t.getRowByRowId=(e,n,r)=>e.find((0,t.matchRow)(n,r))},629(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=n(6561),c=s(n(885)),d=s(n(1439)),f=s(n(3955)),p=n(7351),h=s(n(3196)),m=s(n(338));class v extends((0,m.default)((0,p.RowEventDelegater)(l.Component))){constructor(e){super(e),this.clickNum=0,this.shouldUpdateRowContent=!1,this.createClickEventHandler=this.createClickEventHandler.bind(this)}shouldComponentUpdate(e){return this.props.selected!==e.selected||this.props.expanded!==e.expanded||this.props.expandable!==e.expandable||this.props.selectable!==e.selectable||this.props.selectRow.hideSelectColumn!==e.selectRow.hideSelectColumn||this.shouldUpdatedBySelfProps(e)?(this.shouldUpdateRowContent=this.shouldRowContentUpdate(e),!0):(this.shouldUpdateRowContent=this.shouldRowContentUpdate(e),this.shouldUpdateRowContent)}isRenderFunctionColumnInLeft(e=u.INDICATOR_POSITION_LEFT){return e===u.INDICATOR_POSITION_LEFT}render(){const{row:e,columns:t,keyField:n,rowIndex:r,style:o,className:i,attrs:a,selectRow:s,expandRow:u,expanded:p,expandable:m,selected:v,selectable:g,visibleColumnSize:E,tabIndexCell:_,...y}=this.props,b=f.default.get(e,n),{hideSelectColumn:x,selectColumnPosition:C,clickToSelect:O}=s,{showExpandColumn:w,expandColumnPosition:S}=u??{},R=this.delegate({...a});(O||u&&u.renderer)&&(R.onClick=this.createClickEventHandler(R.onClick));let P=r*E+1;const j=[l.default.createElement(h.default,{key:"row",row:e,columns:t,keyField:n,rowIndex:r,shouldUpdate:this.shouldUpdateRowContent,tabIndexStart:_?P:-1,...y})];if(!x){const e=l.default.createElement(d.default,{...s,key:"selection-cell",rowKey:b,rowIndex:r,selected:v,disabled:!g,tabIndex:_?P+=1:-1});this.isRenderFunctionColumnInLeft(C)?j.unshift(e):j.push(e)}if(w){const e=l.default.createElement(c.default,{...u,key:"expand-cell",rowKey:b,rowIndex:r,expanded:p,expandable:m,tabIndex:_?P+=1:-1});this.isRenderFunctionColumnInLeft(S)?j.unshift(e):j.push(e)}return l.default.createElement("tr",{style:o,className:i,...R},j)}}t.default=v},885(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t});Object.defineProperty(t,"__esModule",{value:!0});const s=a(n(5442));class l extends s.Component{constructor(){super(...arguments),this.handleClick=e=>{const{rowKey:t,expanded:n,onRowExpand:r,rowIndex:o}=this.props;e.stopPropagation(),r(t,!n,o,e)}}shouldComponentUpdate(e){return this.props.rowIndex!==e.rowIndex||this.props.expanded!==e.expanded||this.props.rowKey!==e.rowKey||this.props.tabIndex!==e.tabIndex}render(){const{expanded:e,expandable:t,expandColumnRenderer:n,tabIndex:r,rowKey:o}=this.props,i={};return void 0!==r&&-1!==r&&(i.tabIndex=r),s.default.createElement("td",{className:"expand-cell",onClick:this.handleClick,"data-testid":"expand-cell",...i},n?n({expandable:t,expanded:e,rowKey:o}):t?e?"(-)":"(+)":"")}}t.default=l},1031(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(6942)),i=r(n(5442)),a=n(6561),s=r(n(6032)),l=r(n(1632)),u=r(n(9435)),c=r(n(7701)),d=r(n(5191)),f=r(n(4652)),p=r(n(3955));class h extends((0,f.default)(i.default.Component)){constructor(e){super(e),this.getData=()=>this.visibleRows(),this.validateProps()}componentDidUpdate(e){e.onDataSizeChange&&!e.pagination&&e.data.length!==this.props.data.length&&e.onDataSizeChange({dataSize:this.props.data.length})}render(){const{loading:e,overlay:t}=this.props;if(t){const n=t(e);return i.default.createElement(n,null,this.renderTable())}return this.renderTable()}renderTable(){const{columns:e,keyField:t,tabIndexCell:n,id:r,classes:f,bootstrap4:h=!1,striped:m=!1,hover:v=!1,bordered:g=!0,condensed:E=!1,noDataIndication:_=null,caption:y,rowStyle:b,rowClasses:x,wrapperClasses:C,rowEvents:O,selectRow:w={mode:a.ROW_SELECT_DISABLED,selected:[],hideSelectColumn:!0},expandRow:S={renderer:void 0,expanded:[],nonExpandable:[]},cellEdit:R={mode:null,nonEditableRows:[]},filterPosition:P=a.FILTERS_POSITION_INLINE}=this.props,j=(0,o.default)("react-bootstrap-table",C),N=(0,o.default)("table",{"table-striped":m,"table-hover":v,"table-bordered":g,[h?"table-sm":"table-condensed"]:E},f),D=e.some(e=>e.filter||e.filterRenderer),T=p.default.filter(e,e=>p.default.has(e,"footer")).length>0,I=y&&i.default.createElement(l.default,{bootstrap4:h},y);return i.default.createElement("div",{className:j},i.default.createElement("table",{id:r,className:N},I,i.default.createElement(d.default,{columns:e,className:this.props.headerClasses,wrapperClasses:this.props.headerWrapperClasses,sortField:this.props.sortField,sortOrder:this.props.sortOrder,onSort:this.props.onSort,globalSortCaret:this.props.sort&&this.props.sort.sortCaret,onFilter:this.props.onFilter,currFilters:this.props.currFilters,onExternalFilter:this.props.onExternalFilter,selectRow:w,expandRow:S,filterPosition:P}),D&&P!==a.FILTERS_POSITION_INLINE&&i.default.createElement(u.default,{columns:e,className:this.props.filtersClasses,onSort:this.props.onSort,onFilter:this.props.onFilter,currFilters:this.props.currFilters,filterPosition:this.props.filterPosition,onExternalFilter:this.props.onExternalFilter,selectRow:w,expandRow:S}),i.default.createElement(s.default,{className:this.props.bodyClasses,data:this.getData(),keyField:t,tabIndexCell:n,columns:e,isEmpty:this.isEmpty(),visibleColumnSize:this.visibleColumnSize(),noDataIndication:_,cellEdit:R,selectRow:w,expandRow:S,rowStyle:b,rowClasses:x,rowEvents:O}),T&&i.default.createElement(c.default,{data:this.getData(),columns:e,selectRow:w,expandRow:S,className:this.props.footerClasses})))}}t.default=h},1400(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=n(6561);t.default=e=>{const{renderContent:t,selectRow:n,expandRow:r,cellEl:a,...s}=e,l=(e=i.INDICATOR_POSITION_LEFT)=>e===i.INDICATOR_POSITION_LEFT,u=t()||[];return n&&!0!==n.hideSelectColumn&&(l(n.selectColumnPosition)?u.unshift(o.default.createElement(a,{key:"selection"})):u.push(o.default.createElement(a,{key:"selection"}))),r&&r.showExpandColumn&&(l(r.expandColumnPosition)?u.unshift(o.default.createElement(a,{key:"expansion"})):u.push(o.default.createElement(a,{key:"expansion"}))),o.default.createElement("tr",{...s},u)}},1439(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=n(6561),c=s(n(3955)),d=n(3761);class f extends l.Component{constructor(e){super(e),this.handleClick=this.handleClick.bind(this)}shouldComponentUpdate(e){return this.props.rowIndex!==e.rowIndex||this.props.selected!==e.selected||this.props.disabled!==e.disabled||this.props.rowKey!==e.rowKey||this.props.tabIndex!==e.tabIndex||this.props.selectColumnStyle!==e.selectColumnStyle}handleClick(e){const{mode:t,rowKey:n,selected:r,onRowSelect:o,disabled:i,rowIndex:a=-1}=this.props;if(e.stopPropagation(),i)return;o(n,t===u.ROW_SELECT_SINGLE||!r,a,e)}render(){const{rowKey:e,mode:t,selected:n,disabled:r,tabIndex:o=-1,rowIndex:i,selectionRenderer:a,selectColumnStyle:s}=this.props,u={};return-1!==o&&(u.tabIndex=o),u.style=c.default.isFunction(s)?s({checked:n,disabled:r,rowindex:i,rowkey:e}):s,l.default.createElement(d.BootstrapContext.Consumer,null,({bootstrap4:o})=>l.default.createElement("td",{className:"selection-cell",onClick:this.handleClick,"data-testid":"selection-cell",...u},a?a({mode:t,checked:n,disabled:r??!1,rowindex:i,rowkey:e}):l.default.createElement("input",{type:t,checked:n,disabled:r??!1,className:o?"selection-input-4":"",onChange:()=>{}})))}}t.default=f},1590(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getExpandedRows=t.expandableKeys=t.isAnyExpands=void 0;const o=r(n(3955)),i=n(355);t.isAnyExpands=(e,t,n=[])=>{for(let r=0;r<e.length;r+=1){const i=o.default.get(e[r],t);if(void 0!==n.find(e=>e===i))return!0}return!1};t.expandableKeys=(e,t,n=[])=>0===n.length?e.map(e=>o.default.get(e,t)):e.filter(e=>!o.default.contains(n,o.default.get(e,t))).map(e=>o.default.get(e,t));t.getExpandedRows=(e,t,n)=>n.map(n=>(0,i.getRowByRowId)(e,t,n))},1630(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=s(n(6645)),c=s(n(3955)),d=l.default.createContext({expanded:[],isClosing:[],onClosed:()=>{},isAnyExpands:!1,onRowExpand:()=>{},onAllRowExpand:()=>{}});class f extends l.Component{constructor(){super(...arguments),this.state={expanded:this.props.expandRow.expanded||[],isClosing:this.props.expandRow.isClosing||[]},this.onClosed=e=>{this.setState({isClosing:this.state.isClosing.filter(t=>t!==e)})},this.handleRowExpand=(e,t,n,r)=>{const{data:o,keyField:i,expandRow:{onExpand:a,onlyOneExpanding:s,nonExpandable:l}}=this.props;if(l&&c.default.contains(l,e))return;let d=[...this.state.expanded],f=[...this.state.isClosing];if(t?s?(f=f.concat(d),d=[e]):d.push(e):(f.push(e),d=d.filter(t=>t!==e)),a){a(u.default.getRowByRowId(o,i,e),t,n,r)}this.setState(()=>({expanded:d,isClosing:f}))},this.handleAllRowExpand=(e,t)=>{const{data:n,keyField:r,expandRow:{onExpandAll:o,nonExpandable:i}}=this.props,{expanded:a}=this.state;let s;s=t?a.concat(u.default.expandableKeys(n,r,i)):a.filter(e=>void 0===n.find(t=>c.default.get(t,r)===e)),o&&o(t,u.default.getExpandedRows(n,r,s),e),this.setState(()=>({expanded:s}))}}static getDerivedStateFromProps(e,t){const{expandRow:n}=e;if(n){const{nonExpandable:e=[]}=n;let r=[...n.expanded||t.expanded];r=r.filter(t=>!c.default.contains(e,t));const o=t.expanded.reduce((e,t)=>(c.default.contains(r,t)||e.push(t),e),[]);return{expanded:r,isClosing:o}}return t}render(){const{data:e,keyField:t}=this.props;return l.default.createElement(d.Provider,{value:{...this.props.expandRow,nonExpandable:this.props.expandRow.nonExpandable,expanded:this.state.expanded,isClosing:this.state.isClosing,onClosed:this.onClosed,isAnyExpands:u.default.isAnyExpands(e,t,this.state.expanded),onRowExpand:this.handleRowExpand,onAllRowExpand:this.handleAllRowExpand}},this.props.children)}}t.default=()=>({Provider:f,Consumer:d.Consumer})},1632(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442));t.default=e=>{if(!e.children)return null;return e.bootstrap4?o.default.createElement("caption",{style:{captionSide:"top"}},e.children):o.default.createElement("caption",null,e.children)}},1859(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.CellEventDelegater=void 0;const o=r(n(3955)),i=["onClick","onDoubleClick","onMouseEnter","onMouseLeave","onContextMenu","onAuxClick"];t.CellEventDelegater=e=>class extends e{constructor(...e){super(...e),this.createDefaultEventHandler=this.createDefaultEventHandler.bind(this)}createDefaultEventHandler(e){return t=>{const{column:n,columnIndex:r,index:o}=this.props;e(t,n,void 0!==r?r:o)}}delegate(e={}){const t={...e};return Object.keys(e).forEach(n=>{o.default.includes(i,n)&&(t[n]=this.createDefaultEventHandler(e[n]))}),t}}},1965(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=n(3761);t.default=()=>o.default.createElement(i.BootstrapContext.Consumer,null,({bootstrap4:e})=>e?o.default.createElement("span",{className:"order-4"}):o.default.createElement("span",{className:"order"},o.default.createElement("span",{className:"dropdown"},o.default.createElement("span",{className:"caret"})),o.default.createElement("span",{className:"dropup"},o.default.createElement("span",{className:"caret"}))))},2190(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.typeConvert=void 0;const r=n(6561);t.typeConvert=(e,t)=>e===r.TYPE_STRING?String(t):e===r.TYPE_NUMBER?Number(t):e===r.TYPE_BOOLEAN?"boolean"==typeof t?t:"true"===t:e===r.TYPE_DATE?new Date(t):t},3196(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=s(n(8232)),c=s(n(3955));class d extends l.Component{shouldComponentUpdate(e){return void 0===e.shouldUpdate||e.shouldUpdate}render(){const{row:e,keyField:t,columns:n,rowIndex:r,isEditable:o,editingRowIdx:i,editingColIdx:a,atstart:s,clickToEdit:d,dbclickToEdit:f,EditingCellComponent:p,tabIndexStart:h}=this.props;let m=h;return n?.map((n,v)=>{const{dataField:g}=n,E=c.default.get(e,g);if(r===i&&v===a&&p)return l.default.createElement(p,{key:`${E}-${v}-editing`,row:e,rowIndex:r,column:n,columnIndex:v});let _,y={},b={};if("function"==typeof n.attrs?b={...n.attrs(E,e,r,v)}:"object"==typeof n.attrs&&null!==n.attrs&&(b={...n.attrs}),n.events){const t={...n.events};Object.keys(t).forEach(n=>{const o=t[n];t[n]=(...t)=>o(...t,e,r)}),b={...b,...t}}const x=c.default.isFunction(n.classes)?n.classes(E,e,r,v):n.classes;n.style&&(y=c.default.isFunction(n.style)?n.style(E,e,r,v):n.style,y={...y}),n.title&&(_=c.default.isFunction(n.title)?n.title(E,e,r,v):E,b.title=_),n.align&&(y.textAlign=c.default.isFunction(n.align)?n.align(E,e,r,v):n.align),x&&(b.className=x),c.default.isEmptyObject(y)||(b.style=y);let C=!c.default.isDefined(n.editable)||n.editable;return n.dataField!==t&&o||(C=!1),c.default.isFunction(n.editable)&&(C=n.editable(E,e,r,v)),"number"==typeof h&&-1!==h&&(b.tabIndex=m,m+=1),l.default.createElement(u.default,{key:`${E}-${v}`,row:e,editable:C.toString(),rowindex:r??0,columnindex:v,column:n,atstart:s,clicktoedit:d?d.toString():"false",dbclicktoedit:f?f.toString():"false",...b})})}}t.default=d},3285(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i={columns:[],toggles:void 0},a=o.default.createContext(i),s=({columns:e,toggles:t,children:n})=>{let r;return r=t?e.filter(e=>t[e.dataField]):e.filter(e=>!e.hidden),o.default.createElement(a.Provider,{value:{columns:r}},n)};t.default=()=>({Provider:s,Consumer:a.Consumer})},3502(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=n(7351),c=s(n(3196)),d=s(n(338));class f extends((0,d.default)((0,u.RowEventDelegater)(l.Component))){constructor(){super(...arguments),this.shouldUpdateRowContent=!1}shouldComponentUpdate(e){return this.shouldUpdateRowContent=!1,this.shouldUpdateRowContent=this.shouldRowContentUpdate(e),!!this.shouldUpdateRowContent||this.shouldUpdatedBySelfProps(e)}render(){const{editable:e=!0,className:t,style:n={},attrs:r={},visibleColumnSize:o,tabIndexCell:i,...a}=this.props,s=this.delegate(r),u=this.props.rowIndex*o+1;return l.default.createElement("tr",{style:n,className:t,...s},l.default.createElement(c.default,{shouldUpdate:this.shouldUpdateRowContent,tabIndexStart:i?u:-1,...a}))}}t.default=f},3519(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=s(n(3955)),c=l.default.createContext({data:[],getData:()=>[]});class d extends l.Component{constructor(e){super(e),this.getData=(e,t,n,r)=>r?r.data:n?n.data:t?t.data:e&&e.data.length<this.props.data.length&&!u.default.isEmpty(Object.keys(e.currFilters))?e.data:this.props.data,this.state={data:e.data}}render(){return l.default.createElement(c.Provider,{value:{data:this.state.data,getData:this.getData}},this.props.children)}}t.default=()=>({Provider:d,Consumer:c.Consumer})},3689(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){const t=t=>i.default.createElement(l.Consumer,null,n=>((t,n)=>{const r=t.value,a=s.default.contains(n.selected,r),l=!n.nonSelectable||!s.default.contains(n.nonSelectable,r),u=s.default.contains(n.nonSelectable,r);let{style:c,className:d}=t;if(a){const e=s.default.isFunction(n.style)?n.style(t.row,t.rowIndex):n.style,r=s.default.isFunction(n.classes)?n.classes(t.row,t.rowIndex):n.classes;c={...c,...e},d=(0,o.default)(d,r)||void 0,n.bgColor&&(c=c||{},c.backgroundColor=s.default.isFunction(n.bgColor)?n.bgColor(t.row,t.rowIndex):n.bgColor)}if(u){const e=s.default.isFunction(n.nonSelectableStyle)?n.nonSelectableStyle(t.row,t.rowIndex):n.nonSelectableStyle,r=s.default.isFunction(n.nonSelectableClasses)?n.nonSelectableClasses(t.row,t.rowIndex):n.nonSelectableClasses;c={...c,...e},d=(0,o.default)(d,r)||void 0}return i.default.createElement(e,{...t,style:c,className:d,selectRow:n,selected:a,selectable:l})})(t,n));return t.displayName="WithSelectionRowConsumer",t};const o=r(n(6942)),i=r(n(5442)),a=n(8145),s=r(n(3955)),l=(0,a.createSelectionContext)()},3742(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.nextOrder=t.sort=void 0;const o=n(6561),i=r(n(3955));function a(e,t){let n;return n="string"==typeof t?t.localeCompare(e):e>t?-1:e<t?1:0,n}t.sort=(e,t,{dataField:n,sortFunc:r,sortValue:s})=>{const l=[...e];return l.sort((e,l)=>{let u,c=i.default.get(e,n),d=i.default.get(l,n);return s?(c=s(c,e),d=s(d,l)):(c=i.default.isDefined(c)?c:"",d=i.default.isDefined(d)?d:""),u=r?r(c,d,t,n,e,l):t===o.SORT_DESC?a(c,d):a(d,c),u}),l};t.nextOrder=(e,{sortOrder:t,sortColumn:n},r=o.SORT_DESC)=>n&&e.dataField===n.dataField?t===o.SORT_DESC?o.SORT_ASC:o.SORT_DESC:r},3761(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.BootstrapContext=void 0;const o=r(n(5442));t.BootstrapContext=o.default.createContext({bootstrap4:!0})},3955(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(4523));function i(e){return[e].join(".").replace(/\[/g,".").replace(/\]/g,"").split(".")}t.default=Object.assign(o.default,{get:function(e,t){const n=e[t];if(null!=n)return n;const r=i(t);let o;try{o=r.reduce((e,t)=>e[t],e)}catch(e){}return o},set:function(e,t,n,r=!1){const o=i(t);let a=0;o.reduce((e,t)=>{if(a+=1,void 0===e[t]){if(!r)throw new Error(`${e}.${t} is undefined`);return e[t]={},e[t]}return a===o.length?(e[t]=n,n):e[t]},e)},isDefined:function(e){return null!=e},isEmptyObject:function(e){if(!o.default.isObject(e))return!1;const t=Object.prototype.hasOwnProperty,n=Object.keys(e);for(let r=0;r<n.length;r+=1)if(t.call(e,n[r]))return!1;return!0},sleep:function(e,t){return setTimeout(()=>e(),t)},debounce:function(e,t,n){let r;return()=>{const o=n&&!r;clearTimeout(r),r=setTimeout(()=>{r=null,n||e.apply(this,arguments)},t||0),o&&e.apply(this,arguments)}},contains:function(e,t){return o.default.includes?o.default.includes(e,t):e.indexOf(t)>-1}})},3997(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t});Object.defineProperty(t,"__esModule",{value:!0});const s=a(n(5442));class l extends s.Component{constructor(e){super(e),this.handleCheckBoxClick=this.handleCheckBoxClick.bind(this)}handleCheckBoxClick(e){const{isAnyExpands:t,onAllRowExpand:n}=this.props;n(e,!t)}render(){const{isAnyExpands:e,expandHeaderColumnRenderer:t}=this.props,n={onClick:this.handleCheckBoxClick};return s.default.createElement("th",{className:"expand-cell-header","data-row-selection":!0,...n},t?t({isAnyExpands:e??!1}):e?"(-)":"(+)")}}t.default=l},4130(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getSelectedRows=t.unSelectableKeys=t.selectableKeys=t.getSelectionSummary=void 0;const o=r(n(3955)),i=n(355);t.getSelectionSummary=(e=[],t,n=[])=>{let r=e.length>0,i=!0;const a=e.map(e=>o.default.get(e,t));for(let e=0;e<a.length;e+=1){const t=a[e];void 0===n.find(e=>e===t)?r=!1:i=!1}return{allRowsSelected:r,allRowsNotSelected:i}};t.selectableKeys=(e=[],t,n=[])=>0===n.length?e.map(e=>o.default.get(e,t)):e.filter(e=>!o.default.contains(n,o.default.get(e,t))).map(e=>o.default.get(e,t));t.unSelectableKeys=(e,t=[])=>0===t?.length?[]:e.filter(e=>o.default.contains(t,e));t.getSelectedRows=(e=[],t,n)=>n.map(n=>(0,i.getRowByRowId)(e,t,n)).filter(e=>!!e)},4523(e,t,n){"use strict";n.r(t),n.d(t,{VERSION:()=>o,after:()=>Mt,all:()=>en,allKeys:()=>ve,any:()=>tn,assign:()=>Me,before:()=>Ft,bind:()=>xt,bindAll:()=>wt,chain:()=>Et,chunk:()=>Ln,clone:()=>Le,collect:()=>Xt,compact:()=>Rn,compose:()=>It,constant:()=>Q,contains:()=>nn,countBy:()=>gn,create:()=>Ae,debounce:()=>Nt,default:()=>Wn,defaults:()=>Fe,defer:()=>Pt,delay:()=>Rt,detect:()=>Vt,difference:()=>jn,drop:()=>wn,each:()=>$t,escape:()=>at,every:()=>en,extend:()=>Ie,extendOwn:()=>Me,filter:()=>Qt,find:()=>Vt,findIndex:()=>Bt,findKey:()=>At,findLastIndex:()=>Ut,findWhere:()=>qt,first:()=>On,flatten:()=>Pn,foldl:()=>Yt,foldr:()=>Jt,forEach:()=>$t,functions:()=>De,get:()=>We,groupBy:()=>mn,has:()=>ze,head:()=>On,identity:()=>Ve,include:()=>nn,includes:()=>nn,indexBy:()=>vn,indexOf:()=>Wt,initial:()=>Cn,inject:()=>Yt,intersection:()=>In,invert:()=>Ne,invoke:()=>rn,isArguments:()=>G,isArray:()=>q,isArrayBuffer:()=>A,isBoolean:()=>P,isDataView:()=>V,isDate:()=>I,isElement:()=>j,isEmpty:()=>le,isEqual:()=>me,isError:()=>F,isFinite:()=>Y,isFunction:()=>U,isMap:()=>Oe,isMatch:()=>ue,isNaN:()=>J,isNull:()=>S,isNumber:()=>T,isObject:()=>w,isRegExp:()=>M,isSet:()=>Se,isString:()=>D,isSymbol:()=>k,isTypedArray:()=>oe,isUndefined:()=>R,isWeakMap:()=>we,isWeakSet:()=>Re,iteratee:()=>Ye,keys:()=>se,last:()=>Sn,lastIndexOf:()=>zt,map:()=>Xt,mapObject:()=>Qe,matcher:()=>qe,matches:()=>qe,max:()=>sn,memoize:()=>St,methods:()=>De,min:()=>ln,mixin:()=>Un,negate:()=>Tt,noop:()=>Ze,now:()=>rt,object:()=>kn,omit:()=>xn,once:()=>kt,pairs:()=>je,partial:()=>bt,partition:()=>En,pick:()=>bn,pluck:()=>on,property:()=>$e,propertyOf:()=>et,random:()=>nt,range:()=>An,reduce:()=>Yt,reduceRight:()=>Jt,reject:()=>Zt,rest:()=>wn,restArguments:()=>O,result:()=>mt,sample:()=>dn,select:()=>Qt,shuffle:()=>fn,size:()=>_n,some:()=>tn,sortBy:()=>pn,sortedIndex:()=>Ht,tail:()=>wn,take:()=>On,tap:()=>Be,template:()=>ht,templateSettings:()=>lt,throttle:()=>jt,times:()=>tt,toArray:()=>cn,toPath:()=>Ue,transpose:()=>Mn,unescape:()=>st,union:()=>Tn,uniq:()=>Dn,unique:()=>Dn,uniqueId:()=>gt,unzip:()=>Mn,values:()=>Pe,where:()=>an,without:()=>Nn,wrap:()=>Dt,zip:()=>Fn});var r={};n.r(r),n.d(r,{VERSION:()=>o,after:()=>Mt,all:()=>en,allKeys:()=>ve,any:()=>tn,assign:()=>Me,before:()=>Ft,bind:()=>xt,bindAll:()=>wt,chain:()=>Et,chunk:()=>Ln,clone:()=>Le,collect:()=>Xt,compact:()=>Rn,compose:()=>It,constant:()=>Q,contains:()=>nn,countBy:()=>gn,create:()=>Ae,debounce:()=>Nt,default:()=>Hn,defaults:()=>Fe,defer:()=>Pt,delay:()=>Rt,detect:()=>Vt,difference:()=>jn,drop:()=>wn,each:()=>$t,escape:()=>at,every:()=>en,extend:()=>Ie,extendOwn:()=>Me,filter:()=>Qt,find:()=>Vt,findIndex:()=>Bt,findKey:()=>At,findLastIndex:()=>Ut,findWhere:()=>qt,first:()=>On,flatten:()=>Pn,foldl:()=>Yt,foldr:()=>Jt,forEach:()=>$t,functions:()=>De,get:()=>We,groupBy:()=>mn,has:()=>ze,head:()=>On,identity:()=>Ve,include:()=>nn,includes:()=>nn,indexBy:()=>vn,indexOf:()=>Wt,initial:()=>Cn,inject:()=>Yt,intersection:()=>In,invert:()=>Ne,invoke:()=>rn,isArguments:()=>G,isArray:()=>q,isArrayBuffer:()=>A,isBoolean:()=>P,isDataView:()=>V,isDate:()=>I,isElement:()=>j,isEmpty:()=>le,isEqual:()=>me,isError:()=>F,isFinite:()=>Y,isFunction:()=>U,isMap:()=>Oe,isMatch:()=>ue,isNaN:()=>J,isNull:()=>S,isNumber:()=>T,isObject:()=>w,isRegExp:()=>M,isSet:()=>Se,isString:()=>D,isSymbol:()=>k,isTypedArray:()=>oe,isUndefined:()=>R,isWeakMap:()=>we,isWeakSet:()=>Re,iteratee:()=>Ye,keys:()=>se,last:()=>Sn,lastIndexOf:()=>zt,map:()=>Xt,mapObject:()=>Qe,matcher:()=>qe,matches:()=>qe,max:()=>sn,memoize:()=>St,methods:()=>De,min:()=>ln,mixin:()=>Un,negate:()=>Tt,noop:()=>Ze,now:()=>rt,object:()=>kn,omit:()=>xn,once:()=>kt,pairs:()=>je,partial:()=>bt,partition:()=>En,pick:()=>bn,pluck:()=>on,property:()=>$e,propertyOf:()=>et,random:()=>nt,range:()=>An,reduce:()=>Yt,reduceRight:()=>Jt,reject:()=>Zt,rest:()=>wn,restArguments:()=>O,result:()=>mt,sample:()=>dn,select:()=>Qt,shuffle:()=>fn,size:()=>_n,some:()=>tn,sortBy:()=>pn,sortedIndex:()=>Ht,tail:()=>wn,take:()=>On,tap:()=>Be,template:()=>ht,templateSettings:()=>lt,throttle:()=>jt,times:()=>tt,toArray:()=>cn,toPath:()=>Ue,transpose:()=>Mn,unescape:()=>st,union:()=>Tn,uniq:()=>Dn,unique:()=>Dn,uniqueId:()=>gt,unzip:()=>Mn,values:()=>Pe,where:()=>an,without:()=>Nn,wrap:()=>Dt,zip:()=>Fn});var o="1.13.7",i="object"==typeof self&&self.self===self&&self||"object"==typeof n.g&&n.g.global===n.g&&n.g||Function("return this")()||{},a=Array.prototype,s=Object.prototype,l="undefined"!=typeof Symbol?Symbol.prototype:null,u=a.push,c=a.slice,d=s.toString,f=s.hasOwnProperty,p="undefined"!=typeof ArrayBuffer,h="undefined"!=typeof DataView,m=Array.isArray,v=Object.keys,g=Object.create,E=p&&ArrayBuffer.isView,_=isNaN,y=isFinite,b=!{toString:null}.propertyIsEnumerable("toString"),x=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],C=Math.pow(2,53)-1;function O(e,t){return t=null==t?e.length-1:+t,function(){for(var n=Math.max(arguments.length-t,0),r=Array(n),o=0;o<n;o++)r[o]=arguments[o+t];switch(t){case 0:return e.call(this,r);case 1:return e.call(this,arguments[0],r);case 2:return e.call(this,arguments[0],arguments[1],r)}var i=Array(t+1);for(o=0;o<t;o++)i[o]=arguments[o];return i[t]=r,e.apply(this,i)}}function w(e){var t=typeof e;return"function"===t||"object"===t&&!!e}function S(e){return null===e}function R(e){return void 0===e}function P(e){return!0===e||!1===e||"[object Boolean]"===d.call(e)}function j(e){return!(!e||1!==e.nodeType)}function N(e){var t="[object "+e+"]";return function(e){return d.call(e)===t}}const D=N("String"),T=N("Number"),I=N("Date"),M=N("RegExp"),F=N("Error"),k=N("Symbol"),A=N("ArrayBuffer");var L=N("Function"),B=i.document&&i.document.childNodes;"object"!=typeof Int8Array&&"function"!=typeof B&&(L=function(e){return"function"==typeof e||!1});const U=L,H=N("Object");var K=h&&(!/\[native code\]/.test(String(DataView))||H(new DataView(new ArrayBuffer(8)))),W="undefined"!=typeof Map&&H(new Map),z=N("DataView");const V=K?function(e){return null!=e&&U(e.getInt8)&&A(e.buffer)}:z,q=m||N("Array");function $(e,t){return null!=e&&f.call(e,t)}var X=N("Arguments");!function(){X(arguments)||(X=function(e){return $(e,"callee")})}();const G=X;function Y(e){return!k(e)&&y(e)&&!isNaN(parseFloat(e))}function J(e){return T(e)&&_(e)}function Q(e){return function(){return e}}function Z(e){return function(t){var n=e(t);return"number"==typeof n&&n>=0&&n<=C}}function ee(e){return function(t){return null==t?void 0:t[e]}}const te=ee("byteLength"),ne=Z(te);var re=/\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;const oe=p?function(e){return E?E(e)&&!V(e):ne(e)&&re.test(d.call(e))}:Q(!1),ie=ee("length");function ae(e,t){t=function(e){for(var t={},n=e.length,r=0;r<n;++r)t[e[r]]=!0;return{contains:function(e){return!0===t[e]},push:function(n){return t[n]=!0,e.push(n)}}}(t);var n=x.length,r=e.constructor,o=U(r)&&r.prototype||s,i="constructor";for($(e,i)&&!t.contains(i)&&t.push(i);n--;)(i=x[n])in e&&e[i]!==o[i]&&!t.contains(i)&&t.push(i)}function se(e){if(!w(e))return[];if(v)return v(e);var t=[];for(var n in e)$(e,n)&&t.push(n);return b&&ae(e,t),t}function le(e){if(null==e)return!0;var t=ie(e);return"number"==typeof t&&(q(e)||D(e)||G(e))?0===t:0===ie(se(e))}function ue(e,t){var n=se(t),r=n.length;if(null==e)return!r;for(var o=Object(e),i=0;i<r;i++){var a=n[i];if(t[a]!==o[a]||!(a in o))return!1}return!0}function ce(e){return e instanceof ce?e:this instanceof ce?void(this._wrapped=e):new ce(e)}function de(e){return new Uint8Array(e.buffer||e,e.byteOffset||0,te(e))}ce.VERSION=o,ce.prototype.value=function(){return this._wrapped},ce.prototype.valueOf=ce.prototype.toJSON=ce.prototype.value,ce.prototype.toString=function(){return String(this._wrapped)};var fe="[object DataView]";function pe(e,t,n,r){if(e===t)return 0!==e||1/e==1/t;if(null==e||null==t)return!1;if(e!=e)return t!=t;var o=typeof e;return("function"===o||"object"===o||"object"==typeof t)&&he(e,t,n,r)}function he(e,t,n,r){e instanceof ce&&(e=e._wrapped),t instanceof ce&&(t=t._wrapped);var o=d.call(e);if(o!==d.call(t))return!1;if(K&&"[object Object]"==o&&V(e)){if(!V(t))return!1;o=fe}switch(o){case"[object RegExp]":case"[object String]":return""+e==""+t;case"[object Number]":return+e!=+e?+t!=+t:0===+e?1/+e==1/t:+e===+t;case"[object Date]":case"[object Boolean]":return+e===+t;case"[object Symbol]":return l.valueOf.call(e)===l.valueOf.call(t);case"[object ArrayBuffer]":case fe:return he(de(e),de(t),n,r)}var i="[object Array]"===o;if(!i&&oe(e)){if(te(e)!==te(t))return!1;if(e.buffer===t.buffer&&e.byteOffset===t.byteOffset)return!0;i=!0}if(!i){if("object"!=typeof e||"object"!=typeof t)return!1;var a=e.constructor,s=t.constructor;if(a!==s&&!(U(a)&&a instanceof a&&U(s)&&s instanceof s)&&"constructor"in e&&"constructor"in t)return!1}r=r||[];for(var u=(n=n||[]).length;u--;)if(n[u]===e)return r[u]===t;if(n.push(e),r.push(t),i){if((u=e.length)!==t.length)return!1;for(;u--;)if(!pe(e[u],t[u],n,r))return!1}else{var c,f=se(e);if(u=f.length,se(t).length!==u)return!1;for(;u--;)if(!$(t,c=f[u])||!pe(e[c],t[c],n,r))return!1}return n.pop(),r.pop(),!0}function me(e,t){return pe(e,t)}function ve(e){if(!w(e))return[];var t=[];for(var n in e)t.push(n);return b&&ae(e,t),t}function ge(e){var t=ie(e);return function(n){if(null==n)return!1;var r=ve(n);if(ie(r))return!1;for(var o=0;o<t;o++)if(!U(n[e[o]]))return!1;return e!==xe||!U(n[Ee])}}var Ee="forEach",_e=["clear","delete"],ye=["get","has","set"],be=_e.concat(Ee,ye),xe=_e.concat(ye),Ce=["add"].concat(_e,Ee,"has");const Oe=W?ge(be):N("Map"),we=W?ge(xe):N("WeakMap"),Se=W?ge(Ce):N("Set"),Re=N("WeakSet");function Pe(e){for(var t=se(e),n=t.length,r=Array(n),o=0;o<n;o++)r[o]=e[t[o]];return r}function je(e){for(var t=se(e),n=t.length,r=Array(n),o=0;o<n;o++)r[o]=[t[o],e[t[o]]];return r}function Ne(e){for(var t={},n=se(e),r=0,o=n.length;r<o;r++)t[e[n[r]]]=n[r];return t}function De(e){var t=[];for(var n in e)U(e[n])&&t.push(n);return t.sort()}function Te(e,t){return function(n){var r=arguments.length;if(t&&(n=Object(n)),r<2||null==n)return n;for(var o=1;o<r;o++)for(var i=arguments[o],a=e(i),s=a.length,l=0;l<s;l++){var u=a[l];t&&void 0!==n[u]||(n[u]=i[u])}return n}}const Ie=Te(ve),Me=Te(se),Fe=Te(ve,!0);function ke(e){if(!w(e))return{};if(g)return g(e);var t=function(){};t.prototype=e;var n=new t;return t.prototype=null,n}function Ae(e,t){var n=ke(e);return t&&Me(n,t),n}function Le(e){return w(e)?q(e)?e.slice():Ie({},e):e}function Be(e,t){return t(e),e}function Ue(e){return q(e)?e:[e]}function He(e){return ce.toPath(e)}function Ke(e,t){for(var n=t.length,r=0;r<n;r++){if(null==e)return;e=e[t[r]]}return n?e:void 0}function We(e,t,n){var r=Ke(e,He(t));return R(r)?n:r}function ze(e,t){for(var n=(t=He(t)).length,r=0;r<n;r++){var o=t[r];if(!$(e,o))return!1;e=e[o]}return!!n}function Ve(e){return e}function qe(e){return e=Me({},e),function(t){return ue(t,e)}}function $e(e){return e=He(e),function(t){return Ke(t,e)}}function Xe(e,t,n){if(void 0===t)return e;switch(null==n?3:n){case 1:return function(n){return e.call(t,n)};case 3:return function(n,r,o){return e.call(t,n,r,o)};case 4:return function(n,r,o,i){return e.call(t,n,r,o,i)}}return function(){return e.apply(t,arguments)}}function Ge(e,t,n){return null==e?Ve:U(e)?Xe(e,t,n):w(e)&&!q(e)?qe(e):$e(e)}function Ye(e,t){return Ge(e,t,1/0)}function Je(e,t,n){return ce.iteratee!==Ye?ce.iteratee(e,t):Ge(e,t,n)}function Qe(e,t,n){t=Je(t,n);for(var r=se(e),o=r.length,i={},a=0;a<o;a++){var s=r[a];i[s]=t(e[s],s,e)}return i}function Ze(){}function et(e){return null==e?Ze:function(t){return We(e,t)}}function tt(e,t,n){var r=Array(Math.max(0,e));t=Xe(t,n,1);for(var o=0;o<e;o++)r[o]=t(o);return r}function nt(e,t){return null==t&&(t=e,e=0),e+Math.floor(Math.random()*(t-e+1))}ce.toPath=Ue,ce.iteratee=Ye;const rt=Date.now||function(){return(new Date).getTime()};function ot(e){var t=function(t){return e[t]},n="(?:"+se(e).join("|")+")",r=RegExp(n),o=RegExp(n,"g");return function(e){return e=null==e?"":""+e,r.test(e)?e.replace(o,t):e}}const it={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},at=ot(it),st=ot(Ne(it)),lt=ce.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var ut=/(.)^/,ct={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},dt=/\\|'|\r|\n|\u2028|\u2029/g;function ft(e){return"\\"+ct[e]}var pt=/^\s*(\w|\$)+\s*$/;function ht(e,t,n){!t&&n&&(t=n),t=Fe({},t,ce.templateSettings);var r=RegExp([(t.escape||ut).source,(t.interpolate||ut).source,(t.evaluate||ut).source].join("|")+"|$","g"),o=0,i="__p+='";e.replace(r,function(t,n,r,a,s){return i+=e.slice(o,s).replace(dt,ft),o=s+t.length,n?i+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'":r?i+="'+\n((__t=("+r+"))==null?'':__t)+\n'":a&&(i+="';\n"+a+"\n__p+='"),t}),i+="';\n";var a,s=t.variable;if(s){if(!pt.test(s))throw new Error("variable is not a bare identifier: "+s)}else i="with(obj||{}){\n"+i+"}\n",s="obj";i="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+i+"return __p;\n";try{a=new Function(s,"_",i)}catch(e){throw e.source=i,e}var l=function(e){return a.call(this,e,ce)};return l.source="function("+s+"){\n"+i+"}",l}function mt(e,t,n){var r=(t=He(t)).length;if(!r)return U(n)?n.call(e):n;for(var o=0;o<r;o++){var i=null==e?void 0:e[t[o]];void 0===i&&(i=n,o=r),e=U(i)?i.call(e):i}return e}var vt=0;function gt(e){var t=++vt+"";return e?e+t:t}function Et(e){var t=ce(e);return t._chain=!0,t}function _t(e,t,n,r,o){if(!(r instanceof t))return e.apply(n,o);var i=ke(e.prototype),a=e.apply(i,o);return w(a)?a:i}var yt=O(function(e,t){var n=yt.placeholder,r=function(){for(var o=0,i=t.length,a=Array(i),s=0;s<i;s++)a[s]=t[s]===n?arguments[o++]:t[s];for(;o<arguments.length;)a.push(arguments[o++]);return _t(e,r,this,this,a)};return r});yt.placeholder=ce;const bt=yt,xt=O(function(e,t,n){if(!U(e))throw new TypeError("Bind must be called on a function");var r=O(function(o){return _t(e,r,t,this,n.concat(o))});return r}),Ct=Z(ie);function Ot(e,t,n,r){if(r=r||[],t||0===t){if(t<=0)return r.concat(e)}else t=1/0;for(var o=r.length,i=0,a=ie(e);i<a;i++){var s=e[i];if(Ct(s)&&(q(s)||G(s)))if(t>1)Ot(s,t-1,n,r),o=r.length;else for(var l=0,u=s.length;l<u;)r[o++]=s[l++];else n||(r[o++]=s)}return r}const wt=O(function(e,t){var n=(t=Ot(t,!1,!1)).length;if(n<1)throw new Error("bindAll must be passed function names");for(;n--;){var r=t[n];e[r]=xt(e[r],e)}return e});function St(e,t){var n=function(r){var o=n.cache,i=""+(t?t.apply(this,arguments):r);return $(o,i)||(o[i]=e.apply(this,arguments)),o[i]};return n.cache={},n}const Rt=O(function(e,t,n){return setTimeout(function(){return e.apply(null,n)},t)}),Pt=bt(Rt,ce,1);function jt(e,t,n){var r,o,i,a,s=0;n||(n={});var l=function(){s=!1===n.leading?0:rt(),r=null,a=e.apply(o,i),r||(o=i=null)},u=function(){var u=rt();s||!1!==n.leading||(s=u);var c=t-(u-s);return o=this,i=arguments,c<=0||c>t?(r&&(clearTimeout(r),r=null),s=u,a=e.apply(o,i),r||(o=i=null)):r||!1===n.trailing||(r=setTimeout(l,c)),a};return u.cancel=function(){clearTimeout(r),s=0,r=o=i=null},u}function Nt(e,t,n){var r,o,i,a,s,l=function(){var u=rt()-o;t>u?r=setTimeout(l,t-u):(r=null,n||(a=e.apply(s,i)),r||(i=s=null))},u=O(function(u){return s=this,i=u,o=rt(),r||(r=setTimeout(l,t),n&&(a=e.apply(s,i))),a});return u.cancel=function(){clearTimeout(r),r=i=s=null},u}function Dt(e,t){return bt(t,e)}function Tt(e){return function(){return!e.apply(this,arguments)}}function It(){var e=arguments,t=e.length-1;return function(){for(var n=t,r=e[t].apply(this,arguments);n--;)r=e[n].call(this,r);return r}}function Mt(e,t){return function(){if(--e<1)return t.apply(this,arguments)}}function Ft(e,t){var n;return function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=null),n}}const kt=bt(Ft,2);function At(e,t,n){t=Je(t,n);for(var r,o=se(e),i=0,a=o.length;i<a;i++)if(t(e[r=o[i]],r,e))return r}function Lt(e){return function(t,n,r){n=Je(n,r);for(var o=ie(t),i=e>0?0:o-1;i>=0&&i<o;i+=e)if(n(t[i],i,t))return i;return-1}}const Bt=Lt(1),Ut=Lt(-1);function Ht(e,t,n,r){for(var o=(n=Je(n,r,1))(t),i=0,a=ie(e);i<a;){var s=Math.floor((i+a)/2);n(e[s])<o?i=s+1:a=s}return i}function Kt(e,t,n){return function(r,o,i){var a=0,s=ie(r);if("number"==typeof i)e>0?a=i>=0?i:Math.max(i+s,a):s=i>=0?Math.min(i+1,s):i+s+1;else if(n&&i&&s)return r[i=n(r,o)]===o?i:-1;if(o!=o)return(i=t(c.call(r,a,s),J))>=0?i+a:-1;for(i=e>0?a:s-1;i>=0&&i<s;i+=e)if(r[i]===o)return i;return-1}}const Wt=Kt(1,Bt,Ht),zt=Kt(-1,Ut);function Vt(e,t,n){var r=(Ct(e)?Bt:At)(e,t,n);if(void 0!==r&&-1!==r)return e[r]}function qt(e,t){return Vt(e,qe(t))}function $t(e,t,n){var r,o;if(t=Xe(t,n),Ct(e))for(r=0,o=e.length;r<o;r++)t(e[r],r,e);else{var i=se(e);for(r=0,o=i.length;r<o;r++)t(e[i[r]],i[r],e)}return e}function Xt(e,t,n){t=Je(t,n);for(var r=!Ct(e)&&se(e),o=(r||e).length,i=Array(o),a=0;a<o;a++){var s=r?r[a]:a;i[a]=t(e[s],s,e)}return i}function Gt(e){return function(t,n,r,o){var i=arguments.length>=3;return function(t,n,r,o){var i=!Ct(t)&&se(t),a=(i||t).length,s=e>0?0:a-1;for(o||(r=t[i?i[s]:s],s+=e);s>=0&&s<a;s+=e){var l=i?i[s]:s;r=n(r,t[l],l,t)}return r}(t,Xe(n,o,4),r,i)}}const Yt=Gt(1),Jt=Gt(-1);function Qt(e,t,n){var r=[];return t=Je(t,n),$t(e,function(e,n,o){t(e,n,o)&&r.push(e)}),r}function Zt(e,t,n){return Qt(e,Tt(Je(t)),n)}function en(e,t,n){t=Je(t,n);for(var r=!Ct(e)&&se(e),o=(r||e).length,i=0;i<o;i++){var a=r?r[i]:i;if(!t(e[a],a,e))return!1}return!0}function tn(e,t,n){t=Je(t,n);for(var r=!Ct(e)&&se(e),o=(r||e).length,i=0;i<o;i++){var a=r?r[i]:i;if(t(e[a],a,e))return!0}return!1}function nn(e,t,n,r){return Ct(e)||(e=Pe(e)),("number"!=typeof n||r)&&(n=0),Wt(e,t,n)>=0}const rn=O(function(e,t,n){var r,o;return U(t)?o=t:(t=He(t),r=t.slice(0,-1),t=t[t.length-1]),Xt(e,function(e){var i=o;if(!i){if(r&&r.length&&(e=Ke(e,r)),null==e)return;i=e[t]}return null==i?i:i.apply(e,n)})});function on(e,t){return Xt(e,$e(t))}function an(e,t){return Qt(e,qe(t))}function sn(e,t,n){var r,o,i=-1/0,a=-1/0;if(null==t||"number"==typeof t&&"object"!=typeof e[0]&&null!=e)for(var s=0,l=(e=Ct(e)?e:Pe(e)).length;s<l;s++)null!=(r=e[s])&&r>i&&(i=r);else t=Je(t,n),$t(e,function(e,n,r){((o=t(e,n,r))>a||o===-1/0&&i===-1/0)&&(i=e,a=o)});return i}function ln(e,t,n){var r,o,i=1/0,a=1/0;if(null==t||"number"==typeof t&&"object"!=typeof e[0]&&null!=e)for(var s=0,l=(e=Ct(e)?e:Pe(e)).length;s<l;s++)null!=(r=e[s])&&r<i&&(i=r);else t=Je(t,n),$t(e,function(e,n,r){((o=t(e,n,r))<a||o===1/0&&i===1/0)&&(i=e,a=o)});return i}var un=/[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;function cn(e){return e?q(e)?c.call(e):D(e)?e.match(un):Ct(e)?Xt(e,Ve):Pe(e):[]}function dn(e,t,n){if(null==t||n)return Ct(e)||(e=Pe(e)),e[nt(e.length-1)];var r=cn(e),o=ie(r);t=Math.max(Math.min(t,o),0);for(var i=o-1,a=0;a<t;a++){var s=nt(a,i),l=r[a];r[a]=r[s],r[s]=l}return r.slice(0,t)}function fn(e){return dn(e,1/0)}function pn(e,t,n){var r=0;return t=Je(t,n),on(Xt(e,function(e,n,o){return{value:e,index:r++,criteria:t(e,n,o)}}).sort(function(e,t){var n=e.criteria,r=t.criteria;if(n!==r){if(n>r||void 0===n)return 1;if(n<r||void 0===r)return-1}return e.index-t.index}),"value")}function hn(e,t){return function(n,r,o){var i=t?[[],[]]:{};return r=Je(r,o),$t(n,function(t,o){var a=r(t,o,n);e(i,t,a)}),i}}const mn=hn(function(e,t,n){$(e,n)?e[n].push(t):e[n]=[t]}),vn=hn(function(e,t,n){e[n]=t}),gn=hn(function(e,t,n){$(e,n)?e[n]++:e[n]=1}),En=hn(function(e,t,n){e[n?0:1].push(t)},!0);function _n(e){return null==e?0:Ct(e)?e.length:se(e).length}function yn(e,t,n){return t in n}const bn=O(function(e,t){var n={},r=t[0];if(null==e)return n;U(r)?(t.length>1&&(r=Xe(r,t[1])),t=ve(e)):(r=yn,t=Ot(t,!1,!1),e=Object(e));for(var o=0,i=t.length;o<i;o++){var a=t[o],s=e[a];r(s,a,e)&&(n[a]=s)}return n}),xn=O(function(e,t){var n,r=t[0];return U(r)?(r=Tt(r),t.length>1&&(n=t[1])):(t=Xt(Ot(t,!1,!1),String),r=function(e,n){return!nn(t,n)}),bn(e,r,n)});function Cn(e,t,n){return c.call(e,0,Math.max(0,e.length-(null==t||n?1:t)))}function On(e,t,n){return null==e||e.length<1?null==t||n?void 0:[]:null==t||n?e[0]:Cn(e,e.length-t)}function wn(e,t,n){return c.call(e,null==t||n?1:t)}function Sn(e,t,n){return null==e||e.length<1?null==t||n?void 0:[]:null==t||n?e[e.length-1]:wn(e,Math.max(0,e.length-t))}function Rn(e){return Qt(e,Boolean)}function Pn(e,t){return Ot(e,t,!1)}const jn=O(function(e,t){return t=Ot(t,!0,!0),Qt(e,function(e){return!nn(t,e)})}),Nn=O(function(e,t){return jn(e,t)});function Dn(e,t,n,r){P(t)||(r=n,n=t,t=!1),null!=n&&(n=Je(n,r));for(var o=[],i=[],a=0,s=ie(e);a<s;a++){var l=e[a],u=n?n(l,a,e):l;t&&!n?(a&&i===u||o.push(l),i=u):n?nn(i,u)||(i.push(u),o.push(l)):nn(o,l)||o.push(l)}return o}const Tn=O(function(e){return Dn(Ot(e,!0,!0))});function In(e){for(var t=[],n=arguments.length,r=0,o=ie(e);r<o;r++){var i=e[r];if(!nn(t,i)){var a;for(a=1;a<n&&nn(arguments[a],i);a++);a===n&&t.push(i)}}return t}function Mn(e){for(var t=e&&sn(e,ie).length||0,n=Array(t),r=0;r<t;r++)n[r]=on(e,r);return n}const Fn=O(Mn);function kn(e,t){for(var n={},r=0,o=ie(e);r<o;r++)t?n[e[r]]=t[r]:n[e[r][0]]=e[r][1];return n}function An(e,t,n){null==t&&(t=e||0,e=0),n||(n=t<e?-1:1);for(var r=Math.max(Math.ceil((t-e)/n),0),o=Array(r),i=0;i<r;i++,e+=n)o[i]=e;return o}function Ln(e,t){if(null==t||t<1)return[];for(var n=[],r=0,o=e.length;r<o;)n.push(c.call(e,r,r+=t));return n}function Bn(e,t){return e._chain?ce(t).chain():t}function Un(e){return $t(De(e),function(t){var n=ce[t]=e[t];ce.prototype[t]=function(){var e=[this._wrapped];return u.apply(e,arguments),Bn(this,n.apply(ce,e))}}),ce}$t(["pop","push","reverse","shift","sort","splice","unshift"],function(e){var t=a[e];ce.prototype[e]=function(){var n=this._wrapped;return null!=n&&(t.apply(n,arguments),"shift"!==e&&"splice"!==e||0!==n.length||delete n[0]),Bn(this,n)}}),$t(["concat","join","slice"],function(e){var t=a[e];ce.prototype[e]=function(){var e=this._wrapped;return null!=e&&(e=t.apply(e,arguments)),Bn(this,e)}});const Hn=ce;var Kn=Un(r);Kn._=Kn;const Wn=Kn},4607(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t});Object.defineProperty(t,"__esModule",{value:!0});const s=a(n(5442)),l=n(6561);t.default=(e,t,n)=>{const r={data:[],sortOrder:void 0,onSort:()=>{},sortField:null},o=s.default.createContext(r);class i extends s.Component{constructor(r){super(r),this.state={sortOrder:l.SORT_ASC,sortColumn:{dataField:"id",text:"ID",onSort:()=>{},sortFunc:()=>{}}},this.handleSort=r=>{const o=e.nextOrder(r,this.state,this.props.defaultSortDirection);r.onSort&&r.onSort(r.dataField,o),t()&&n(r.dataField,o),this.setState(()=>({sortOrder:o,sortColumn:r}))};const{defaultSorted:o,defaultSortDirection:i,sort:a}=r;let s,u;o&&o.length>0?(s=o[0].order||i,u=this.initSort(o[0].dataField,s)):a&&a.dataField&&a.order&&(s=a.order,u=this.initSort(a.dataField,s)),this.state={sortOrder:s,sortColumn:u}}componentDidMount(){const{sortOrder:e,sortColumn:r}=this.state;t()&&e&&r&&n(r.dataField,e)}static getDerivedStateFromProps(e,t){const{sort:n,columns:r}=e;return n&&n.dataField&&n.order?{sortOrder:n.order,sortColumn:r.find(e=>e.dataField===n.dataField)}:null}initSort(e,t){const{columns:n}=this.props,r=n.filter(t=>t.dataField===e);let o;return r.length>0&&(o=r[0],o.onSort&&o.onSort(e,t)),o}render(){const{sort:n}=this.props,{sortOrder:r,sortColumn:i}=this.state;let{data:a}=this.props;if(!t()&&i){const t=i.sortFunc?i.sortFunc:n&&n.sortFunc;a=e.sort(a,r,{...i,sortFunc:t})}return s.default.createElement(o.Provider,{value:{data:a,sortOrder:r,onSort:this.handleSort,sortField:i?i.dataField:null}},this.props.children)}}return{Provider:i,Consumer:o.Consumer}}},4652(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(3955)),i=r(n(9603));t.default=e=>class extends((0,i.default)(e)){validateProps(){const{keyField:e}=this.props;if(!e)throw new Error("Please specify a field as key via keyField");if(this.visibleColumnSize(!1)<=0)throw new Error("No visible columns detected")}isEmpty(){return 0===this.props.data.length}visibleRows(){const{data:e,hiddenRows:t,keyField:n}=this.props;return t&&0!==t.length?e.filter(e=>{const r=o.default.get(e,n);return!o.default.contains(t,r)}):e}}},5191(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=n(6561),a=r(n(8610)),s=r(n(3997)),l=r(n(6572)),u=r(n(7572)),c=r(n(6510));t.default=e=>{const{className:t,columns:n,onSort:r,onFilter:d,sortField:f,sortOrder:p,selectRow:h,expandRow:m,currFilters:v,onExternalFilter:g,filterPosition:E,globalSortCaret:_,wrapperClasses:y}=e;let b=()=>null,x=()=>null;m?.showExpandColumn&&(x=(0,l.default)(s.default)),h&&(b=(0,c.default)(u.default));const C=(e=i.INDICATOR_POSITION_LEFT)=>e===i.INDICATOR_POSITION_LEFT,O=n.map((e,t)=>{const n=e.dataField===f,i=e.dataField===f;return o.default.createElement(a.default,{index:t,key:e.dataField,column:e,onSort:r,sorting:n,sortOrder:p,globalSortCaret:_,isLastSorting:i,onFilter:d,currFilters:v,onExternalFilter:g,filterPosition:E})});return h&&!h.hideSelectColumn&&(C(h.selectColumnPosition)?O.unshift(o.default.createElement(b,{key:"selection"})):O.push(o.default.createElement(b,{key:"selection"}))),m?.showExpandColumn&&(C(m.expandColumnPosition)?O.unshift(o.default.createElement(x,{key:"expansion"})):O.push(o.default.createElement(x,{key:"expansion"}))),o.default.createElement("thead",{className:y},o.default.createElement("tr",{className:t},O))}},5442(t){"use strict";t.exports=e},6003(e){"use strict";e.exports=t},6023(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(6942)),i=r(n(5442)),a=r(n(1630)),s=r(n(3955)),l=r(n(105)),u=(0,a.default)();t.default=e=>t=>i.default.createElement(u.Consumer,null,n=>((t,n)=>{if(!n)return[];let r="",a="";const u=t.value,c=s.default.contains(n.expanded,u),d=s.default.contains(n.isClosing,u),f=!n.nonExpandable||!s.default.contains(n.nonExpandable,u);return c&&(r=s.default.isFunction(n.parentClassName)?n.parentClassName(c,t.row,t.rowIndex):n.parentClassName||"",a=s.default.isFunction(n.className)?n.className(c,t.row,t.rowIndex):n.className||""),[i.default.createElement(e,{...t,key:u,expanded:c,expandable:f,expandRow:{...n},className:(0,o.default)(t.className,r)}),c||d?i.default.createElement(l.default,{key:`${u}-expanding`,colSpan:t.visibleColumnSize,expanded:c,onClosed:()=>n.onClosed(u),className:a},n.renderer(t.row,t.rowIndex)):null]})(t,n))},6032(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=n(6561),c=s(n(6023)),d=s(n(3689)),f=s(n(629)),p=s(n(285)),h=s(n(3502)),m=s(n(3955));class v extends l.Component{constructor(e){super(e);const{keyField:t,cellEdit:n,selectRow:r,expandRow:o}=e;n?.createContext&&(this.EditingCell=n.createEditingCell(m.default,n.options.onStartEdit));let i=h.default;const a=r?.mode!==u.ROW_SELECT_DISABLED,s=!!o.renderer;s&&(i=(0,c.default)(f.default)),a&&(i=(0,d.default)(s?i:f.default)),n?.createContext&&(i=n.withRowLevelCellEdit(i,a,t,m.default)),this.RowComponent=i}render(){const{columns:e,data:t,tabIndexCell:n,keyField:r,isEmpty:o,noDataIndication:i,visibleColumnSize:a,cellEdit:s,selectRow:c,rowStyle:d,rowClasses:f,rowEvents:h,expandRow:v,className:g}=this.props;let E;if(o){const e=m.default.isFunction(i)?i():i;if(!e)return null;E=l.default.createElement(p.default,{content:e,colSpan:a})}else{const o=c?.mode!==u.ROW_SELECT_DISABLED,i=!!v.renderer,p={};s?.createContext&&(p.EditingCellComponent=this.EditingCell),(o||i)&&(p.expandRow=v,p.selectRow=c),E=t.map((t,o)=>{if(t){const i=m.default.get(t,r),u={key:i,row:t,tabIndexCell:n,columns:e,keyField:r,cellEdit:s,value:i,rowIndex:o,visibleColumnSize:a,attrs:h||{},...p};return u.style=m.default.isFunction(d)?d(t,o):d,u.className=m.default.isFunction(f)?f(t,o):f,l.default.createElement(this.RowComponent,{...u})}return null})}return l.default.createElement("tbody",{className:g},E)}}t.default=v},6310(e,t,n){"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(null,arguments)}function o(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}function i(e,t){return i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},i(e,t)}function a(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,i(e,t)}function s(e,t){return e.replace(new RegExp("(^|\\s)"+t+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}n.r(t),n.d(t,{CSSTransition:()=>w,ReplaceTransition:()=>I,SwitchTransition:()=>K,Transition:()=>x,TransitionGroup:()=>D,config:()=>f});var l=n(5442),u=n.n(l),c=n(6003),d=n.n(c);const f={disabled:!1},p=u().createContext(null);var h=function(e){return e.scrollTop},m="unmounted",v="exited",g="entering",E="entered",_="exiting",y=function(e){function t(t,n){var r;r=e.call(this,t,n)||this;var o,i=n&&!n.isMounting?t.enter:t.appear;return r.appearStatus=null,t.in?i?(o=v,r.appearStatus=g):o=E:o=t.unmountOnExit||t.mountOnEnter?m:v,r.state={status:o},r.nextCallback=null,r}a(t,e),t.getDerivedStateFromProps=function(e,t){return e.in&&t.status===m?{status:v}:null};var n=t.prototype;return n.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},n.componentDidUpdate=function(e){var t=null;if(e!==this.props){var n=this.state.status;this.props.in?n!==g&&n!==E&&(t=g):n!==g&&n!==E||(t=_)}this.updateStatus(!1,t)},n.componentWillUnmount=function(){this.cancelNextCallback()},n.getTimeouts=function(){var e,t,n,r=this.props.timeout;return e=t=n=r,null!=r&&"number"!=typeof r&&(e=r.exit,t=r.enter,n=void 0!==r.appear?r.appear:t),{exit:e,enter:t,appear:n}},n.updateStatus=function(e,t){if(void 0===e&&(e=!1),null!==t)if(this.cancelNextCallback(),t===g){if(this.props.unmountOnExit||this.props.mountOnEnter){var n=this.props.nodeRef?this.props.nodeRef.current:d().findDOMNode(this);n&&h(n)}this.performEnter(e)}else this.performExit();else this.props.unmountOnExit&&this.state.status===v&&this.setState({status:m})},n.performEnter=function(e){var t=this,n=this.props.enter,r=this.context?this.context.isMounting:e,o=this.props.nodeRef?[r]:[d().findDOMNode(this),r],i=o[0],a=o[1],s=this.getTimeouts(),l=r?s.appear:s.enter;!e&&!n||f.disabled?this.safeSetState({status:E},function(){t.props.onEntered(i)}):(this.props.onEnter(i,a),this.safeSetState({status:g},function(){t.props.onEntering(i,a),t.onTransitionEnd(l,function(){t.safeSetState({status:E},function(){t.props.onEntered(i,a)})})}))},n.performExit=function(){var e=this,t=this.props.exit,n=this.getTimeouts(),r=this.props.nodeRef?void 0:d().findDOMNode(this);t&&!f.disabled?(this.props.onExit(r),this.safeSetState({status:_},function(){e.props.onExiting(r),e.onTransitionEnd(n.exit,function(){e.safeSetState({status:v},function(){e.props.onExited(r)})})})):this.safeSetState({status:v},function(){e.props.onExited(r)})},n.cancelNextCallback=function(){null!==this.nextCallback&&(this.nextCallback.cancel(),this.nextCallback=null)},n.safeSetState=function(e,t){t=this.setNextCallback(t),this.setState(e,t)},n.setNextCallback=function(e){var t=this,n=!0;return this.nextCallback=function(r){n&&(n=!1,t.nextCallback=null,e(r))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},n.onTransitionEnd=function(e,t){this.setNextCallback(t);var n=this.props.nodeRef?this.props.nodeRef.current:d().findDOMNode(this),r=null==e&&!this.props.addEndListener;if(n&&!r){if(this.props.addEndListener){var o=this.props.nodeRef?[this.nextCallback]:[n,this.nextCallback],i=o[0],a=o[1];this.props.addEndListener(i,a)}null!=e&&setTimeout(this.nextCallback,e)}else setTimeout(this.nextCallback,0)},n.render=function(){var e=this.state.status;if(e===m)return null;var t=this.props,n=t.children,r=(t.in,t.mountOnEnter,t.unmountOnExit,t.appear,t.enter,t.exit,t.timeout,t.addEndListener,t.onEnter,t.onEntering,t.onEntered,t.onExit,t.onExiting,t.onExited,t.nodeRef,o(t,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]));return u().createElement(p.Provider,{value:null},"function"==typeof n?n(e,r):u().cloneElement(u().Children.only(n),r))},t}(u().Component);function b(){}y.contextType=p,y.propTypes={},y.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:b,onEntering:b,onEntered:b,onExit:b,onExiting:b,onExited:b},y.UNMOUNTED=m,y.EXITED=v,y.ENTERING=g,y.ENTERED=E,y.EXITING=_;const x=y;var C=function(e,t){return e&&t&&t.split(" ").forEach(function(t){return r=t,void((n=e).classList?n.classList.remove(r):"string"==typeof n.className?n.className=s(n.className,r):n.setAttribute("class",s(n.className&&n.className.baseVal||"",r)));var n,r})},O=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).appliedClasses={appear:{},enter:{},exit:{}},t.onEnter=function(e,n){var r=t.resolveArguments(e,n),o=r[0],i=r[1];t.removeClasses(o,"exit"),t.addClass(o,i?"appear":"enter","base"),t.props.onEnter&&t.props.onEnter(e,n)},t.onEntering=function(e,n){var r=t.resolveArguments(e,n),o=r[0],i=r[1]?"appear":"enter";t.addClass(o,i,"active"),t.props.onEntering&&t.props.onEntering(e,n)},t.onEntered=function(e,n){var r=t.resolveArguments(e,n),o=r[0],i=r[1]?"appear":"enter";t.removeClasses(o,i),t.addClass(o,i,"done"),t.props.onEntered&&t.props.onEntered(e,n)},t.onExit=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"appear"),t.removeClasses(n,"enter"),t.addClass(n,"exit","base"),t.props.onExit&&t.props.onExit(e)},t.onExiting=function(e){var n=t.resolveArguments(e)[0];t.addClass(n,"exit","active"),t.props.onExiting&&t.props.onExiting(e)},t.onExited=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"exit"),t.addClass(n,"exit","done"),t.props.onExited&&t.props.onExited(e)},t.resolveArguments=function(e,n){return t.props.nodeRef?[t.props.nodeRef.current,e]:[e,n]},t.getClassNames=function(e){var n=t.props.classNames,r="string"==typeof n,o=r?""+(r&&n?n+"-":"")+e:n[e];return{baseClassName:o,activeClassName:r?o+"-active":n[e+"Active"],doneClassName:r?o+"-done":n[e+"Done"]}},t}a(t,e);var n=t.prototype;return n.addClass=function(e,t,n){var r=this.getClassNames(t)[n+"ClassName"],o=this.getClassNames("enter").doneClassName;"appear"===t&&"done"===n&&o&&(r+=" "+o),"active"===n&&e&&h(e),r&&(this.appliedClasses[t][n]=r,function(e,t){e&&t&&t.split(" ").forEach(function(t){return r=t,void((n=e).classList?n.classList.add(r):function(e,t){return e.classList?!!t&&e.classList.contains(t):-1!==(" "+(e.className.baseVal||e.className)+" ").indexOf(" "+t+" ")}(n,r)||("string"==typeof n.className?n.className=n.className+" "+r:n.setAttribute("class",(n.className&&n.className.baseVal||"")+" "+r)));var n,r})}(e,r))},n.removeClasses=function(e,t){var n=this.appliedClasses[t],r=n.base,o=n.active,i=n.done;this.appliedClasses[t]={},r&&C(e,r),o&&C(e,o),i&&C(e,i)},n.render=function(){var e=this.props,t=(e.classNames,o(e,["classNames"]));return u().createElement(x,r({},t,{onEnter:this.onEnter,onEntered:this.onEntered,onEntering:this.onEntering,onExit:this.onExit,onExiting:this.onExiting,onExited:this.onExited}))},t}(u().Component);O.defaultProps={classNames:""},O.propTypes={};const w=O;function S(e,t){var n=Object.create(null);return e&&l.Children.map(e,function(e){return e}).forEach(function(e){n[e.key]=function(e){return t&&(0,l.isValidElement)(e)?t(e):e}(e)}),n}function R(e,t,n){return null!=n[t]?n[t]:e.props[t]}function P(e,t,n){var r=S(e.children),o=function(e,t){function n(n){return n in t?t[n]:e[n]}e=e||{},t=t||{};var r,o=Object.create(null),i=[];for(var a in e)a in t?i.length&&(o[a]=i,i=[]):i.push(a);var s={};for(var l in t){if(o[l])for(r=0;r<o[l].length;r++){var u=o[l][r];s[o[l][r]]=n(u)}s[l]=n(l)}for(r=0;r<i.length;r++)s[i[r]]=n(i[r]);return s}(t,r);return Object.keys(o).forEach(function(i){var a=o[i];if((0,l.isValidElement)(a)){var s=i in t,u=i in r,c=t[i],d=(0,l.isValidElement)(c)&&!c.props.in;!u||s&&!d?u||!s||d?u&&s&&(0,l.isValidElement)(c)&&(o[i]=(0,l.cloneElement)(a,{onExited:n.bind(null,a),in:c.props.in,exit:R(a,"exit",e),enter:R(a,"enter",e)})):o[i]=(0,l.cloneElement)(a,{in:!1}):o[i]=(0,l.cloneElement)(a,{onExited:n.bind(null,a),in:!0,exit:R(a,"exit",e),enter:R(a,"enter",e)})}}),o}var j=Object.values||function(e){return Object.keys(e).map(function(t){return e[t]})},N=function(e){function t(t,n){var r,o=(r=e.call(this,t,n)||this).handleExited.bind(function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(r));return r.state={contextValue:{isMounting:!0},handleExited:o,firstRender:!0},r}a(t,e);var n=t.prototype;return n.componentDidMount=function(){this.mounted=!0,this.setState({contextValue:{isMounting:!1}})},n.componentWillUnmount=function(){this.mounted=!1},t.getDerivedStateFromProps=function(e,t){var n,r,o=t.children,i=t.handleExited;return{children:t.firstRender?(n=e,r=i,S(n.children,function(e){return(0,l.cloneElement)(e,{onExited:r.bind(null,e),in:!0,appear:R(e,"appear",n),enter:R(e,"enter",n),exit:R(e,"exit",n)})})):P(e,o,i),firstRender:!1}},n.handleExited=function(e,t){var n=S(this.props.children);e.key in n||(e.props.onExited&&e.props.onExited(t),this.mounted&&this.setState(function(t){var n=r({},t.children);return delete n[e.key],{children:n}}))},n.render=function(){var e=this.props,t=e.component,n=e.childFactory,r=o(e,["component","childFactory"]),i=this.state.contextValue,a=j(this.state.children).map(n);return delete r.appear,delete r.enter,delete r.exit,null===t?u().createElement(p.Provider,{value:i},a):u().createElement(p.Provider,{value:i},u().createElement(t,r,a))},t}(u().Component);N.propTypes={},N.defaultProps={component:"div",childFactory:function(e){return e}};const D=N;var T=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).handleEnter=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEnter",0,n)},t.handleEntering=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEntering",0,n)},t.handleEntered=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEntered",0,n)},t.handleExit=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExit",1,n)},t.handleExiting=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExiting",1,n)},t.handleExited=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExited",1,n)},t}a(t,e);var n=t.prototype;return n.handleLifecycle=function(e,t,n){var r,o=this.props.children,i=u().Children.toArray(o)[t];if(i.props[e]&&(r=i.props)[e].apply(r,n),this.props[e]){var a=i.props.nodeRef?void 0:d().findDOMNode(this);this.props[e](a)}},n.render=function(){var e=this.props,t=e.children,n=e.in,r=o(e,["children","in"]),i=u().Children.toArray(t),a=i[0],s=i[1];return delete r.onEnter,delete r.onEntering,delete r.onEntered,delete r.onExit,delete r.onExiting,delete r.onExited,u().createElement(D,r,n?u().cloneElement(a,{key:"first",onEnter:this.handleEnter,onEntering:this.handleEntering,onEntered:this.handleEntered}):u().cloneElement(s,{key:"second",onEnter:this.handleExit,onEntering:this.handleExiting,onEntered:this.handleExited}))},t}(u().Component);T.propTypes={};const I=T;var M,F;var k="out-in",A="in-out",L=function(e,t,n){return function(){var r;e.props[t]&&(r=e.props)[t].apply(r,arguments),n()}},B=((M={})[k]=function(e){var t=e.current,n=e.changeState;return u().cloneElement(t,{in:!1,onExited:L(t,"onExited",function(){n(g,null)})})},M[A]=function(e){var t=e.current,n=e.changeState,r=e.children;return[t,u().cloneElement(r,{in:!0,onEntered:L(r,"onEntered",function(){n(g)})})]},M),U=((F={})[k]=function(e){var t=e.children,n=e.changeState;return u().cloneElement(t,{in:!0,onEntered:L(t,"onEntered",function(){n(E,u().cloneElement(t,{in:!0}))})})},F[A]=function(e){var t=e.current,n=e.children,r=e.changeState;return[u().cloneElement(t,{in:!1,onExited:L(t,"onExited",function(){r(E,u().cloneElement(n,{in:!0}))})}),u().cloneElement(n,{in:!0})]},F),H=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).state={status:E,current:null},t.appeared=!1,t.changeState=function(e,n){void 0===n&&(n=t.state.current),t.setState({status:e,current:n})},t}a(t,e);var n=t.prototype;return n.componentDidMount=function(){this.appeared=!0},t.getDerivedStateFromProps=function(e,t){return null==e.children?{current:null}:t.status===g&&e.mode===A?{status:g}:!t.current||(n=t.current,r=e.children,n===r||u().isValidElement(n)&&u().isValidElement(r)&&null!=n.key&&n.key===r.key)?{current:u().cloneElement(e.children,{in:!0})}:{status:_};var n,r},n.render=function(){var e,t=this.props,n=t.children,r=t.mode,o=this.state,i=o.status,a=o.current,s={children:n,current:a,changeState:this.changeState,status:i};switch(i){case g:e=U[r](s);break;case _:e=B[r](s);break;case E:e=a}return u().createElement(p.Provider,{value:{isMounting:!this.appeared}},e)},t}(u().Component);H.propTypes={},H.defaultProps={mode:k};const K=H},6510(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=(0,n(8145).createSelectionContext)();t.default=e=>t=>o.default.createElement(i.Consumer,null,n=>o.default.createElement(e,{...t,...n}))},6561(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TYPE_DATE=t.TYPE_BOOLEAN=t.TYPE_NUMBER=t.TYPE_STRING=t.INDICATOR_POSITION_RIGHT=t.INDICATOR_POSITION_LEFT=t.SORT_DESC=t.SORT_ASC=t.FILTERS_POSITION_BOTTOM=t.FILTERS_POSITION_TOP=t.FILTERS_POSITION_INLINE=t.CHECKBOX_STATUS_UNCHECKED=t.CHECKBOX_STATUS_CHECKED=t.CHECKBOX_STATUS_INDETERMINATE=t.ROW_SELECT_DISABLED=t.ROW_SELECT_MULTIPLE=t.ROW_SELECT_SINGLE=void 0,t.ROW_SELECT_SINGLE="radio",t.ROW_SELECT_MULTIPLE="checkbox",t.ROW_SELECT_DISABLED="ROW_SELECT_DISABLED",t.CHECKBOX_STATUS_INDETERMINATE="indeterminate",t.CHECKBOX_STATUS_CHECKED="checked",t.CHECKBOX_STATUS_UNCHECKED="unchecked",t.FILTERS_POSITION_INLINE="inline",t.FILTERS_POSITION_TOP="top",t.FILTERS_POSITION_BOTTOM="bottom",t.SORT_ASC="asc",t.SORT_DESC="desc",t.INDICATOR_POSITION_LEFT="left",t.INDICATOR_POSITION_RIGHT="right",t.TYPE_STRING="string",t.TYPE_NUMBER="number",t.TYPE_BOOLEAN="bool",t.TYPE_DATE="date"},6572(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=(0,r(n(1630)).default)();t.default=e=>()=>o.default.createElement(i.Consumer,null,t=>o.default.createElement(e,{...t}))},6645(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t});Object.defineProperty(t,"__esModule",{value:!0});const s=a(n(1590)),l=a(n(8476)),u=a(n(355)),c=a(n(4130)),d=a(n(3742)),f=a(n(2190));t.default={...u,...c,...s,...l,...d,...f}},6942(e,t){var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e="",t=0;t<arguments.length;t++){var n=arguments[t];n&&(e=a(e,i(n)))}return e}function i(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return o.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var n in e)r.call(e,n)&&e[n]&&(t=a(t,n));return t}function a(e,t){return t?e?e+" "+t:e+t:e}e.exports?(o.default=o,e.exports=o):void 0===(n=function(){return o}.apply(t,[]))||(e.exports=n)}()},7007(e){"use strict";var t,n="object"==typeof Reflect?Reflect:null,r=n&&"function"==typeof n.apply?n.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)};t=n&&"function"==typeof n.ownKeys?n.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var o=Number.isNaN||function(e){return e!=e};function i(){i.init.call(this)}e.exports=i,e.exports.once=function(e,t){return new Promise(function(n,r){function o(n){e.removeListener(t,i),r(n)}function i(){"function"==typeof e.removeListener&&e.removeListener("error",o),n([].slice.call(arguments))}m(e,t,i,{once:!0}),"error"!==t&&function(e,t,n){"function"==typeof e.on&&m(e,"error",t,n)}(e,o,{once:!0})})},i.EventEmitter=i,i.prototype._events=void 0,i.prototype._eventsCount=0,i.prototype._maxListeners=void 0;var a=10;function s(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function l(e){return void 0===e._maxListeners?i.defaultMaxListeners:e._maxListeners}function u(e,t,n,r){var o,i,a,u;if(s(n),void 0===(i=e._events)?(i=e._events=Object.create(null),e._eventsCount=0):(void 0!==i.newListener&&(e.emit("newListener",t,n.listener?n.listener:n),i=e._events),a=i[t]),void 0===a)a=i[t]=n,++e._eventsCount;else if("function"==typeof a?a=i[t]=r?[n,a]:[a,n]:r?a.unshift(n):a.push(n),(o=l(e))>0&&a.length>o&&!a.warned){a.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=a.length,u=c,console&&console.warn&&console.warn(u)}return e}function c(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function d(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},o=c.bind(r);return o.listener=n,r.wrapFn=o,o}function f(e,t,n){var r=e._events;if(void 0===r)return[];var o=r[t];return void 0===o?[]:"function"==typeof o?n?[o.listener||o]:[o]:n?function(e){for(var t=new Array(e.length),n=0;n<t.length;++n)t[n]=e[n].listener||e[n];return t}(o):h(o,o.length)}function p(e){var t=this._events;if(void 0!==t){var n=t[e];if("function"==typeof n)return 1;if(void 0!==n)return n.length}return 0}function h(e,t){for(var n=new Array(t),r=0;r<t;++r)n[r]=e[r];return n}function m(e,t,n,r){if("function"==typeof e.on)r.once?e.once(t,n):e.on(t,n);else{if("function"!=typeof e.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,function o(i){r.once&&e.removeEventListener(t,o),n(i)})}}Object.defineProperty(i,"defaultMaxListeners",{enumerable:!0,get:function(){return a},set:function(e){if("number"!=typeof e||e<0||o(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");a=e}}),i.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},i.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||o(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},i.prototype.getMaxListeners=function(){return l(this)},i.prototype.emit=function(e){for(var t=[],n=1;n<arguments.length;n++)t.push(arguments[n]);var o="error"===e,i=this._events;if(void 0!==i)o=o&&void 0===i.error;else if(!o)return!1;if(o){var a;if(t.length>0&&(a=t[0]),a instanceof Error)throw a;var s=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw s.context=a,s}var l=i[e];if(void 0===l)return!1;if("function"==typeof l)r(l,this,t);else{var u=l.length,c=h(l,u);for(n=0;n<u;++n)r(c[n],this,t)}return!0},i.prototype.addListener=function(e,t){return u(this,e,t,!1)},i.prototype.on=i.prototype.addListener,i.prototype.prependListener=function(e,t){return u(this,e,t,!0)},i.prototype.once=function(e,t){return s(t),this.on(e,d(this,e,t)),this},i.prototype.prependOnceListener=function(e,t){return s(t),this.prependListener(e,d(this,e,t)),this},i.prototype.removeListener=function(e,t){var n,r,o,i,a;if(s(t),void 0===(r=this._events))return this;if(void 0===(n=r[e]))return this;if(n===t||n.listener===t)0===--this._eventsCount?this._events=Object.create(null):(delete r[e],r.removeListener&&this.emit("removeListener",e,n.listener||t));else if("function"!=typeof n){for(o=-1,i=n.length-1;i>=0;i--)if(n[i]===t||n[i].listener===t){a=n[i].listener,o=i;break}if(o<0)return this;0===o?n.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(n,o),1===n.length&&(r[e]=n[0]),void 0!==r.removeListener&&this.emit("removeListener",e,a||t)}return this},i.prototype.off=i.prototype.removeListener,i.prototype.removeAllListeners=function(e){var t,n,r;if(void 0===(n=this._events))return this;if(void 0===n.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==n[e]&&(0===--this._eventsCount?this._events=Object.create(null):delete n[e]),this;if(0===arguments.length){var o,i=Object.keys(n);for(r=0;r<i.length;++r)"removeListener"!==(o=i[r])&&this.removeAllListeners(o);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=n[e]))this.removeListener(e,t);else if(void 0!==t)for(r=t.length-1;r>=0;r--)this.removeListener(e,t[r]);return this},i.prototype.listeners=function(e){return f(this,e,!0)},i.prototype.rawListeners=function(e){return f(this,e,!1)},i.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):p.call(e,t)},i.prototype.listenerCount=p,i.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},7351(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.RowEventDelegater=void 0;const o=n(6561),i=r(n(3955)),a=["onClick","onDoubleClick","onMouseEnter","onMouseLeave","onContextMenu","onAuxClick"];t.RowEventDelegater=e=>class extends e{constructor(...e){super(...e),this.clickNum=0,this.createDefaultEventHandler=this.createDefaultEventHandler.bind(this),this.createClickEventHandler=this.createClickEventHandler.bind(this)}createClickEventHandler(e){return t=>{const{row:n,selected:r,keyField:a,selectable:s,expandable:l,rowIndex:u,expanded:c,expandRow:d,selectRow:f,DELAY_FOR_DBCLICK:p}=this.props,h=()=>{e&&e(t,n,u);const p=i.default.get(n,a);d&&l&&!d.expandByColumnOnly&&(f.mode!==o.ROW_SELECT_DISABLED&&f.clickToExpand||f.mode===o.ROW_SELECT_DISABLED)&&d.onRowExpand(p,!c,u,t),f.clickToSelect&&s&&f.onRowSelect(p,!r,u,t)};p?(this.clickNum+=1,i.default.debounce(()=>{1===this.clickNum&&h(),this.clickNum=0},p)()):h()}}createDefaultEventHandler(e){return t=>{const{row:n,rowIndex:r}=this.props;e(t,n,r)}}delegate(e={}){const t={...e};return Object.keys(e).forEach(n=>{i.default.includes(a,n)&&(t[n]=this.createDefaultEventHandler(e[n]))}),t}}},7572(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.CheckBox=void 0;const l=a(n(5442)),u=n(6561),c=s(n(3955)),d=n(3761);t.CheckBox=({className:e,checked:t,indeterminate:n})=>l.default.createElement("input",{type:"checkbox",checked:t,className:e,ref:e=>{e&&(e.indeterminate=n)},onChange:()=>{}});class f extends l.Component{constructor(e){super(e),this.handleCheckBoxClick=this.handleCheckBoxClick.bind(this)}shouldComponentUpdate(e){const{mode:t,checkedStatus:n}=this.props;return t!==u.ROW_SELECT_SINGLE&&e.checkedStatus!==n}handleCheckBoxClick(e){const{onAllRowsSelect:t,checkedStatus:n}=this.props;t(e,n===u.CHECKBOX_STATUS_CHECKED||n===u.CHECKBOX_STATUS_INDETERMINATE)}render(){const{mode:e,checkedStatus:n,selectionHeaderRenderer:r,hideSelectAll:o,headerColumnStyle:i}=this.props;if(o)return l.default.createElement("th",{"data-row-selection":!0});const a=n===u.CHECKBOX_STATUS_CHECKED,s=n===u.CHECKBOX_STATUS_INDETERMINATE,f={};let p;return(r||e===u.ROW_SELECT_MULTIPLE)&&(f.onClick=this.handleCheckBoxClick),f.style=c.default.isFunction(i)?i(n):i,l.default.createElement(d.BootstrapContext.Consumer,null,({bootstrap4:n})=>(r?p=r({mode:e,checked:a,indeterminate:s}):e===u.ROW_SELECT_MULTIPLE&&(p=l.default.createElement(t.CheckBox,{...this.props,checked:a,className:n?"selection-input-4":"",indeterminate:s})),l.default.createElement("th",{className:"selection-cell-header","data-row-selection":!0,...f},p)))}}t.default=f},7701(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=r(n(7920)),a=r(n(1400)),s=r(n(3955));t.default=e=>{const{data:t=[],className:n,columns:r=[],selectRow:l,expandRow:u}=e;return o.default.createElement("tfoot",null,o.default.createElement(a.default,{renderContent:function(){return r.map((e,n)=>{if(void 0===e.footer||null===e.footer)return!1;const r=s.default.pluck(t,e.dataField);return o.default.createElement(i.default,{index:n,key:e.dataField,column:e,columnData:r})})},selectRow:l,expandRow:u,className:n,cellEl:"th"}))}},7723(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=i(n(1031)),s=i(n(9421));t.default=(0,s.default)(a.default),o(n(6561),t)},7920(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=s(n(6942)),u=a(n(5442)),c=n(1859),d=s(n(3955));class f extends((0,c.CellEventDelegater)(u.Component)){render(){const{index:e,column:t,columnData:n}=this.props,{footer:r,footerTitle:o,footerAlign:i,footerFormatter:a,footerEvents:s,footerClasses:c,footerStyle:f,footerAttrs:p}=t,h=this.delegate(s),m={...d.default.isFunction(p)?p(t,e):p,...h};let v="";d.default.isString(r)?v=r:d.default.isFunction(r)&&(v=r(n||[],t,e||0));let g={};const E=d.default.isFunction(c)?c(t,e||0):c;f&&(g=d.default.isFunction(f)?f(t,e||0):f,g=g?{...g}:g),o&&(m.title=d.default.isFunction(o)?o(t,e||0):v),i&&(g.textAlign=d.default.isFunction(i)?i(t,e||0):i),E&&(m.className=(0,l.default)(m.className,E)),d.default.isEmptyObject(g)||(m.style=g);const _=a?a(t,e||0,{text:v}):v;return u.default.createElement("th",m,_)}}t.default=f},8145(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.createSelectionContext=void 0;const l=a(n(5442)),u=s(n(3955)),c=n(6561),d=s(n(6645)),f=n(4130),p=l.default.createContext({});class h extends l.Component{constructor(e){super(e),this.handleRowSelect=(e,t,n,r)=>{const{data:o,keyField:i,selectRow:{mode:a,onSelect:s}}=this.props;let l=[...this.selected],u=!0;if(s){u=s(d.default.getRowByRowId(o,i,e),t,n,r)}!0!==u&&void 0!==u||(a===c.ROW_SELECT_SINGLE?l=[e]:t?l.push(e):l=l.filter(t=>t!==e)),this.selected=l,this.isHandleRowSelect=!0,this.forceUpdate()},this.handleAllRowsSelect=(e,t)=>{const{data:n,keyField:r,selectRow:{onSelectAll:o,nonSelectable:i}}=this.props,{selected:a}=this;let s,l;s=t?a.filter(e=>void 0===n.find(t=>u.default.get(t,r)===e)):a.concat(d.default.selectableKeys(n,r,i)),o&&(l=o(!t,d.default.getSelectedRows(n,r,t?a:s),e),Array.isArray(l)&&(s=l)),this.selected=s,this.isHandleRowSelect=!0,this.forceUpdate()},this.selected=e.selectRow.selected||[],this.isHandleRowSelect=!1}getSelected(){return this.selected}componentDidUpdate(e){this.isHandleRowSelect?this.isHandleRowSelect=!1:e.selectRow&&e.selectRow.selected&&!u.default.isEqual(e.selectRow.selected,this.selected)&&(this.selected=e.selectRow.selected,this.forceUpdate())}render(){const{allRowsSelected:e,allRowsNotSelected:t}=(0,f.getSelectionSummary)(this.props.data,this.props.keyField,this.selected);let n;return n=e?c.CHECKBOX_STATUS_CHECKED:t?c.CHECKBOX_STATUS_UNCHECKED:c.CHECKBOX_STATUS_INDETERMINATE,l.default.createElement(p.Provider,{value:{...this.props.selectRow,selected:this.selected,onRowSelect:this.handleRowSelect,onAllRowsSelect:this.handleAllRowsSelect,allRowsSelected:e,allRowsNotSelected:t,checkedStatus:n}},this.props.children)}}t.createSelectionContext=()=>({Provider:h,Consumer:p.Consumer})},8232(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=n(1859),c=s(n(3955));class d extends((0,u.CellEventDelegater)(l.Component)){constructor(e){super(e),this.createHandleEditingCell=this.createHandleEditingCell.bind(this)}shouldComponentUpdate(e){let t=!1;return t=e.column.isDummyField?!c.default.isEqual(this.props.row,e.row):c.default.get(this.props.row,this.props.column.dataField)!==c.default.get(e.row,e.column.dataField),!!t||(t=!((!e.column.formatter||c.default.isEqual(this.props.row,e.row))&&this.props.column.hidden===e.column.hidden&&this.props.column.isDummyField===e.column.isDummyField&&this.props.rowindex===e.rowindex&&this.props.columnindex===e.columnindex&&this.props.className===e.className&&this.props.title===e.title&&this.props.editable===e.editable&&this.props.clicktoedit===e.clicktoedit&&this.props.dbclicktoedit===e.dbclicktoedit&&c.default.isEqual(this.props.style,e.style)&&c.default.isEqual(this.props.column.formatExtraData,e.column.formatExtraData)&&c.default.isEqual(this.props.column.events,e.column.events)&&c.default.isEqual(this.props.column.attrs,e.column.attrs)&&this.props.tabIndex===e.tabIndex),t)}createHandleEditingCell(e){return t=>{const{atstart:n,rowindex:r,columnindex:o,clicktoedit:i,dbclicktoedit:a}=this.props;(i||a)&&c.default.isFunction(e)&&e(t),n&&n(r,o)}}render(){const{row:e,column:t,atstart:n,rowindex:r,columnindex:o,editable:i,clicktoedit:a,dbclicktoedit:s,...u}=this.props,{dataField:d,formatter:f,formatExtraData:p}=t,h=this.delegate({...u});let m=t.isDummyField?null:c.default.get(e,d);return f&&(m=t.formatter(m,e,r,p)),"true"===a&&"true"===i?h.onClick=this.createHandleEditingCell(h.onClick):"true"===s&&"true"===i&&(h.onDoubleClick=this.createHandleEditingCell(h.onDoubleClick)),l.default.createElement("td",{...h},"boolean"==typeof m?`${m}`:m)}}t.default=d},8476(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.editCell=void 0;const o=r(n(3955)),i=n(355);t.editCell=(e,t,n,r,a)=>{const s=(0,i.getRowByRowId)(e,t,n);s&&o.default.set(s,r,a)}},8610(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=s(n(6942)),u=a(n(5442)),c=n(6561),d=n(1859),f=s(n(184)),p=s(n(1965)),h=s(n(3955));class m extends((0,d.CellEventDelegater)(u.Component)){render(){const{column:e,index:t,onSort:n,sorting:r,sortOrder:o,isLastSorting:i,onFilter:a,currFilters:s,filterPosition:d,onExternalFilter:m,globalSortCaret:v}=this.props,{text:g,sort:E,sortCaret:_,filter:y,filterRenderer:b,headerTitle:x,headerAlign:C,headerFormatter:O,headerEvents:w,headerClasses:S,headerStyle:R,headerAttrs:P,headerSortingClasses:j,headerSortingStyle:N}=e,D=_||v,T=this.delegate(w),I=h.default.isFunction(P)?P(e,t):P||{},M={...I,...T,tabIndex:h.default.isDefined(I.tabIndex)?I.tabIndex:0};let F,k,A={},L=h.default.isFunction(S)?S(e,t):S;if(R&&(A=h.default.isFunction(R)?R(e,t):R,A=A?{...A}:A),x&&(M.title=h.default.isFunction(x)?x(e,t):g),C&&(A.textAlign=h.default.isFunction(C)?C(e,t):C),E){const a=M.onClick,s=M.onKeyDown;M["aria-label"]=r?`${g} sort ${o}`:`${g} sortable`,M.onKeyUp=t=>{"Enter"===t.key&&(n?.(e),h.default.isFunction(s)&&s(t))},M.onClick=t=>{n?.(e),h.default.isFunction(a)&&a(t)},M.className=(0,l.default)(M.className,"sortable"),r?(F=D?D(o||c.SORT_DESC,e):u.default.createElement(f.default,{order:o}),L=(0,l.default)(L,h.default.isFunction(j)?j(e,o,i,t):j),A={...A,...h.default.isFunction(N)?N(e,o,i,t):N}):F=D?D(void 0,e):u.default.createElement(p.default,null)}if(L&&(M.className=(0,l.default)(M.className,L)),h.default.isEmptyObject(A)||(M.style=A),d===c.FILTERS_POSITION_INLINE)if(b){const t=m?.(e,y?.props.type||"");k=b(t,e)}else y&&(k=u.default.createElement(y.Filter,{...y.props,filterState:s?.[e.dataField],onFilter:a,column:e}));const B=O?O(e,t,{sortElement:F,filterElement:k}):g;return O?u.default.createElement("th",M,B):u.default.createElement("th",M,B,F,k)}}t.default=m},9421(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(7007)),i=r(n(5442)),a=r(n(9459)),s=r(n(6645)),l=r(n(3955)),u=n(3761),c=r(n(3285)),d=r(n(3519)),f=r(n(1630)),p=n(8145),h=r(n(4607));t.default=e=>class extends((0,a.default)(e)){constructor(e){if(super(e),this.DataContext=(0,d.default)(),e.registerExposedAPI){const t=new o.default;t.on("get.table.data",e=>e.result=this.table.getData()),t.on("get.selected.rows",e=>e.result=this.selectionContext.getSelected()),t.on("get.filtered.rows",e=>{this.searchContext?e.result=this.searchContext.getSearched():this.filterContext?e.result=this.filterContext.getFiltered():e.result=this.table.getData()}),e.registerExposedAPI(t)}e.columns.filter(e=>e.sort).length>0&&(this.SortContext=(0,h.default)(s.default,this.isRemoteSort,this.handleRemoteSortChange)),(e.columnToggle||e.columns.filter(e=>e.hidden).length>0)&&(this.ColumnContext=(0,c.default)()),e.selectRow&&(this.SelectionContext=(0,p.createSelectionContext)()),e.expandRow&&(this.RowExpandContext=(0,f.default)()),e.cellEdit&&e.cellEdit.createContext&&(this.CellEditContext=e.cellEdit.createContext(l.default,s.default,this.isRemoteCellEdit,this.handleRemoteCellChange)),e.filter&&(this.FilterContext=e.filter.createContext(l.default,this.isRemoteFiltering,this.handleRemoteFilterChange)),e.pagination&&(this.PaginationContext=e.pagination.createContext()),e.search&&e.search.searchContext&&(this.SearchContext=e.search.searchContext(l.default,this.isRemoteSearch,this.handleRemoteSearchChange)),e.setDependencyModules&&e.setDependencyModules(l.default),e.setPaginationRemoteEmitter&&e.setPaginationRemoteEmitter(this.remoteEmitter)}componentDidUpdate(e){e.columns.filter(e=>e.sort).length<=0?this.SortContext=null:this.SortContext||(this.SortContext=(0,h.default)(s.default,this.isRemoteSort,this.handleRemoteSortChange)),!e.pagination&&this.props.pagination&&(this.PaginationContext=null),e.pagination&&!this.props.pagination&&(this.PaginationContext=e.pagination.createContext(this.isRemotePagination,this.handleRemotePageChange)),!e.cellEdit&&this.props.cellEdit&&(this.CellEditContext=null),e.cellEdit&&!this.props.cellEdit&&(this.CellEditContext=e.cellEdit.createContext(l.default,s.default,this.isRemoteCellEdit,this.handleRemoteCellChange))}renderBase(){return(t,n,r,o,a,s)=>i.default.createElement(e,{ref:e=>{this.table=e},...this.props,...o,...n,...r,...a,...s,data:t.getData(n,r,o,a)})}renderWithColumnContext(e,t){return(n,r,o,a,s)=>i.default.createElement(this.ColumnContext.Provider,{...t,toggles:this.props.columnToggle?this.props.columnToggle.toggles:null},i.default.createElement(this.ColumnContext.Consumer,null,t=>e(n,r,o,a,s,t)))}renderWithSelectionContext(e,t){return(n,r,o,a,s)=>i.default.createElement(this.SelectionContext.Provider,{...t,ref:e=>{this.selectionContext=e},selectRow:this.props.selectRow,data:n.getData(r,o,a,s)},e(n,r,o,a,s))}renderWithRowExpandContext(e,t){return(n,r,o,a,s)=>i.default.createElement(this.RowExpandContext.Provider,{...t,ref:e=>{this.rowExpandContext=e},expandRow:this.props.expandRow,data:n.getData(r,o,a,s)},e(n,r,o,a,s))}renderWithPaginationContext(e){return(t,n,r,o)=>i.default.createElement(this.PaginationContext.Provider,{ref:e=>{this.paginationContext=e},pagination:this.props.pagination,data:t.getData(n,r,o),bootstrap4:this.props.bootstrap4,isRemotePagination:this.isRemotePagination,remoteEmitter:this.remoteEmitter,onDataSizeChange:this.props.onDataSizeChange,tableId:this.props.id},i.default.createElement(this.PaginationContext.Consumer,null,i=>e(t,n,r,o,i)))}renderWithSortContext(e,t){return(n,r,o)=>i.default.createElement(this.SortContext.Provider,{...t,ref:e=>{this.sortContext=e},defaultSorted:this.props.defaultSorted,defaultSortDirection:this.props.defaultSortDirection,sort:this.props.sort,data:n.getData(r,o)},i.default.createElement(this.SortContext.Consumer,null,t=>e(n,r,o,t)))}renderWithSearchContext(e,t){return(n,r)=>i.default.createElement(this.SearchContext.Provider,{...t,ref:e=>{this.searchContext=e},data:n.getData(r),searchText:this.props.search.searchText,dataChangeListener:this.props.dataChangeListener},i.default.createElement(this.SearchContext.Consumer,null,t=>e(n,r,t)))}renderWithFilterContext(e,t){return n=>i.default.createElement(this.FilterContext.Provider,{...t,ref:e=>{this.filterContext=e},data:n.getData(),filter:this.props.filter.options||{},dataChangeListener:this.props.dataChangeListener},i.default.createElement(this.FilterContext.Consumer,null,t=>e(n,t)))}renderWithCellEditContext(e,t){return n=>i.default.createElement(this.CellEditContext.Provider,{...t,ref:e=>{this.cellEditContext=e},selectRow:this.props.selectRow,cellEdit:this.props.cellEdit,data:n.getData()},e(n))}render(){const{keyField:e,columns:t,bootstrap4:n}=this.props,r={keyField:e,columns:t};let o=this.renderBase();return this.ColumnContext&&(o=this.renderWithColumnContext(o,r)),this.SelectionContext&&(o=this.renderWithSelectionContext(o,r)),this.RowExpandContext&&(o=this.renderWithRowExpandContext(o,r)),this.PaginationContext&&(o=this.renderWithPaginationContext(o)),this.SortContext&&(o=this.renderWithSortContext(o,r)),this.SearchContext&&(o=this.renderWithSearchContext(o,r)),this.FilterContext&&(o=this.renderWithFilterContext(o,r)),this.CellEditContext&&(o=this.renderWithCellEditContext(o,r)),i.default.createElement(u.BootstrapContext.Provider,{value:{bootstrap4:n}},i.default.createElement(this.DataContext.Provider,{...r,data:this.props.data},i.default.createElement(this.DataContext.Consumer,null,o)))}}},9435(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=n(6561),a=r(n(286)),s=r(n(1400));t.default=e=>{const{columns:t,onFilter:n,currFilters:r,filterPosition:l=i.FILTERS_POSITION_TOP,onExternalFilter:u,className:c,selectRow:d,expandRow:f}=e;return o.default.createElement("tbody",{className:c,style:{display:l===i.FILTERS_POSITION_TOP?"table-header-group":"table-footer-group"}},o.default.createElement(s.default,{renderContent:function(){const e=[];let i=!1;return t.forEach((t,s)=>{e.push(o.default.createElement(a.default,{index:s,key:t.dataField,column:t,currFilters:r,onExternalFilter:u,onFilter:n})),(t.filterRenderer||t.filter)&&(i||(i=!0))}),e},selectRow:d,expandRow:f,cellEl:"td"}))}},9459(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(7007)),i=n(5442),a=r(n(3955));t.default=e=>class extends i.Component{constructor(e){super(e),this.getNewestState=(e={})=>{let t,n,r,o,i,a={};return this.sortContext&&(t=this.sortContext.state.sortOrder,n=this.sortContext.state.sortColumn?this.sortContext.state.sortColumn.dataField:null),this.filterContext&&(a=this.filterContext.currFilters),this.paginationContext&&(r=this.paginationContext.currPage,o=this.paginationContext.currSizePerPage),this.searchContext&&(i=this.props.search.searchText),{sortOrder:t,sortField:n,filters:a,page:r,sizePerPage:o,searchText:i,...e,data:this.props.data}},this.isRemoteSearch=()=>{const{remote:e}=this.props;return!0===e||a.default.isObject(e)&&e.search||this.isRemotePagination()},this.isRemotePagination=(e={})=>{const{remote:t}=this.props;return e.result=!0===t||a.default.isObject(t)&&t.pagination,e.result},this.isRemoteFiltering=()=>{const{remote:e}=this.props;return!0===e||a.default.isObject(e)&&e.filter||this.isRemotePagination()},this.isRemoteSort=()=>{const{remote:e}=this.props;return!0===e||a.default.isObject(e)&&e.sort||this.isRemotePagination()},this.isRemoteCellEdit=()=>{const{remote:e}=this.props;return!0===e||a.default.isObject(e)&&e.cellEdit},this.handleRemotePageChange=(e,t)=>{this.props.onTableChange("pagination",this.getNewestState({page:e,sizePerPage:t}))},this.handleRemoteFilterChange=e=>{const t={filters:e};if(this.isRemotePagination()){const e=this.props.pagination.options||{};t.page=a.default.isDefined(e.pageStartIndex)?e.pageStartIndex:1}this.props.onTableChange("filter",this.getNewestState(t))},this.handleRemoteSortChange=(e,t)=>{this.props.onTableChange("sort",this.getNewestState({sortField:e,sortOrder:t}))},this.handleRemoteCellChange=(e,t,n)=>{const r={rowId:e,dataField:t,newValue:n};this.props.onTableChange("cellEdit",this.getNewestState({cellEdit:r}))},this.handleRemoteSearchChange=e=>{this.props.onTableChange("search",this.getNewestState({searchText:e}))},this.remoteEmitter=new o.default,this.remoteEmitter.on("paginationChange",this.handleRemotePageChange),this.remoteEmitter.on("isRemotePagination",this.isRemotePagination)}}},9603(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(5442);t.default=e=>class extends r.Component{visibleColumnSize(e=!0){let t;if(this.props.columnToggle&&this.props.columnToggle.toggles){const e=this.props.columnToggle.toggles;t=Object.keys(e).filter(t=>e[t]).length}else t=this.props.columns.filter(e=>!e.hidden).length;return e?(this.props.selectRow&&!this.props.selectRow.hideSelectColumn&&(t+=1),this.props.expandRow&&this.props.expandRow.showExpandColumn&&(t+=1),t):t}}}},r={};function o(e){var t=r[e];if(void 0!==t)return t.exports;var i=r[e]={exports:{}};return n[e].call(i.exports,i,i.exports,o),i.exports}return o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o(7723)})());
3
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL2Rpc3QvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLm1pbi5qcyIsIm1hcHBpbmdzIjoiO0NBQUEsU0FBMkNBLEVBQU1DLEdBQzFCLGlCQUFaQyxTQUEwQyxpQkFBWEMsT0FDeENBLE9BQU9ELFFBQVVELEVBQVFHLFFBQVEsU0FBVUEsUUFBUSxjQUMxQixtQkFBWEMsUUFBeUJBLE9BQU9DLElBQzlDRCxPQUFPLENBQUMsUUFBUyxhQUFjSixHQUNMLGlCQUFaQyxRQUNkQSxRQUErQixzQkFBSUQsRUFBUUcsUUFBUSxTQUFVQSxRQUFRLGNBRXJFSixFQUE0QixzQkFBSUMsRUFBUUQsRUFBWSxNQUFHQSxFQUFlLFNBQ3ZFLENBVEQsQ0FTR08sS0FBTSxDQUFDQyxFQUFtQ0MsSSwwS0NUN0MsbUJBQ0EsYUFDQSxVQVVBLE1BQU1DLFVBQWtCLFVBQU1DLFVBRzVCLFdBQUFDLENBQVlDLEdBQ1ZDLE1BQU1ELEdBQ05FLEtBQUtDLFFBQVUsVUFBTUMsV0FDdkIsQ0FFQSxNQUFBQyxHQUNFLE1BQU0sU0FDSkMsRUFBUSxTQUNSQyxHQUFXLEVBQUssU0FDaEJDLEVBQVEsVUFDUkMsRUFBWSxNQUNUQyxHQUNEUixLQUFLRixNQUVULE9BQ0Usa0NBQ0UsOEJBQUlTLFdBQVcsYUFBRyx3QkFBeUJBLE1BQWdCQyxHQUN6RCx3QkFBQyxFQUFBQyxjQUFhLENBQ1pDLFFBQU0sRUFDTkMsR0FBSU4sRUFDSk8sUUFBUyxJQUNUQyxXQUFXLG1CQUNYQyxTQUFVUixFQUNWTCxRQUFTRCxLQUFLQyxTQUVkLCtCQUFLYyxJQUFLZixLQUFLQyxTQUNiLCtCQUFLTSxVQUFVLHVCQUF1QkgsTUFNbEQsRUFpQkYsVUFBZVQsQywrSkNoRWYsbUJBQ0EsYUFDQSxVQUNBLFVBMEJBLFVBcEI0QyxFQUFHcUIsWUFDN0MsTUFBTUMsR0FBYSxhQUFHLG1DQUFvQyxDQUN4REMsT0FBUUYsSUFBVSxFQUFBRyxXQUdwQixPQUNFLHdCQUFDLEVBQUFDLGlCQUFpQkMs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QVMvaUMsR0FBVUEsRUFBT2dqQyxXQUM3QixJQUFPaGpDLEVBQWlCLFFBQ3hCLElBQU0sRUFFUCxPQURBMmlDLEVBQW9CbDFCLEVBQUVzMUIsRUFBUSxDQUFFM3dCLEVBQUcyd0IsSUFDNUJBLEdDTFJKLEVBQW9CbDFCLEVBQUksQ0FBQzFOLEVBQVNrakMsS0FDakMsSUFBSSxJQUFJNThCLEtBQU80OEIsRUFDWE4sRUFBb0JyWSxFQUFFMlksRUFBWTU4QixLQUFTczhCLEVBQW9CclksRUFBRXZxQixFQUFTc0csSUFDNUVtSSxPQUFPcXJCLGVBQWU5NUIsRUFBU3NHLEVBQUssQ0FBRXl6QixZQUFZLEVBQU0vMEIsSUFBS2srQixFQUFXNThCLE1DSjNFczhCLEVBQW9CM3NCLEVBQUksV0FDdkIsR0FBMEIsaUJBQWZrdEIsV0FBeUIsT0FBT0EsV0FDM0MsSUFDQyxPQUFPdGlDLE1BQVEsSUFBSXNWLFNBQVMsY0FBYixFQUNoQixDQUFFLE1BQU94TyxHQUNSLEdBQXNCLGlCQUFYeTdCLE9BQXFCLE9BQU9BLE1BQ3hDLENBQ0EsQ0FQdUIsR0NBeEJSLEVBQW9CclksRUFBSSxDQUFDcFcsRUFBS3FHLElBQVUvTCxPQUFPNkYsVUFBVUQsZUFBZUUsS0FBS0osRUFBS3FHLEdDQ2xGb29CLEVBQW9CM1ksRUFBS2pxQixJQUNILG9CQUFYd1csUUFBMEJBLE9BQU82c0IsYUFDMUM1MEIsT0FBT3FyQixlQUFlOTVCLEVBQVN3VyxPQUFPNnNCLFlBQWEsQ0FBRXYyQixNQUFPLFdBRTdEMkIsT0FBT3FyQixlQUFlOTVCLEVBQVMsYUFBYyxDQUFFOE0sT0FBTyxLQ0Y3QjgxQixFQUFvQixLIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3Jvdy1leHBhbmQvZXhwYW5kLXJvdy50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9zb3J0L2NhcmV0LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3Jvdy9yb3ctc2VjdGlvbi50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9maWx0ZXJzLWNlbGwudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93L3Nob3VsZC11cGRhdGVyLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvc3RvcmUvcm93cy50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3Jvdy9hZ2dyZWdhdGUtcm93LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3Jvdy1leHBhbmQvZXhwYW5kLWNlbGwudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvYm9vdHN0cmFwLXRhYmxlLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3Jvdy9yb3ctdGVtcGxhdGUudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93LXNlbGVjdGlvbi9zZWxlY3Rpb24tY2VsbC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9zdG9yZS9leHBhbmQudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9jb250ZXh0cy9yb3ctZXhwYW5kLWNvbnRleHQudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvY2FwdGlvbi50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9jZWxsLWV2ZW50LWRlbGVnYXRlci50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3NvcnQvc3ltYm9sLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3N0b3JlL3R5cGUudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9yb3cvcm93LXB1cmUtY29udGVudC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9jb250ZXh0cy9jb2x1bW4tY29udGV4dC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9yb3cvc2ltcGxlLXJvdy50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9jb250ZXh0cy9kYXRhLWNvbnRleHQudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93LXNlbGVjdGlvbi9yb3ctY29uc3VtZXIudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvc3RvcmUvc29ydC50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2NvbnRleHRzL2Jvb3RzdHJhcC50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3V0aWxzLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93LWV4cGFuZC9leHBhbmQtaGVhZGVyLWNlbGwudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvc3RvcmUvc2VsZWN0aW9uLnRzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX3NldHVwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvcmVzdEFyZ3VtZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzT2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNOdWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNVbmRlZmluZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc0Jvb2xlYW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc0VsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fdGFnVGVzdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNTdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc051bWJlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzRGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzUmVnRXhwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNFcnJvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzU3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNBcnJheUJ1ZmZlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzRnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9faGFzT2JqZWN0VGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX3N0cmluZ1RhZ0J1Zy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzRGF0YVZpZXcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc0FycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2hhcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzQXJndW1lbnRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNGaW5pdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc05hTi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2NvbnN0YW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2NyZWF0ZVNpemVQcm9wZXJ0eUNoZWNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX3NoYWxsb3dQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19nZXRCeXRlTGVuZ3RoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2lzQnVmZmVyTGlrZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzVHlwZWRBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19nZXRMZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fY29sbGVjdE5vbkVudW1Qcm9wcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc0VtcHR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNNYXRjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3VuZGVyc2NvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fdG9CdWZmZXJWaWV3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNFcXVhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2FsbEtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fbWV0aG9kRmluZ2VycHJpbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc01hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzV2Vha01hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzU2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNXZWFrU2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvdmFsdWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvcGFpcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pbnZlcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9mdW5jdGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fY3JlYXRlQXNzaWduZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9leHRlbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9leHRlbmRPd24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9kZWZhdWx0cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19iYXNlQ3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvY2xvbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy90YXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy90b1BhdGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fdG9QYXRoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2RlZXBHZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9nZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9oYXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pZGVudGl0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL21hdGNoZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19vcHRpbWl6ZUNiLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2Jhc2VJdGVyYXRlZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2l0ZXJhdGVlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2NiLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvbWFwT2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvbm9vcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3Byb3BlcnR5T2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy90aW1lcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3JhbmRvbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL25vdy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19jcmVhdGVFc2NhcGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2VzY2FwZU1hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2VzY2FwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3VuZXNjYXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX3VuZXNjYXBlTWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvdGVtcGxhdGVTZXR0aW5ncy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3RlbXBsYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvcmVzdWx0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvdW5pcXVlSWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9jaGFpbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19leGVjdXRlQm91bmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9wYXJ0aWFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvYmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19pc0FycmF5TGlrZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19mbGF0dGVuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvYmluZEFsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL21lbW9pemUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9kZWxheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2RlZmVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvdGhyb3R0bGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9kZWJvdW5jZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3dyYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9uZWdhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9jb21wb3NlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvYWZ0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9iZWZvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9vbmNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvZmluZEtleS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19jcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2ZpbmRJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2ZpbmRMYXN0SW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9zb3J0ZWRJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19jcmVhdGVJbmRleEZpbmRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2luZGV4T2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9sYXN0SW5kZXhPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2ZpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9maW5kV2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9lYWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvbWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2NyZWF0ZVJlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3JlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3JlZHVjZVJpZ2h0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvZmlsdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvcmVqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvZXZlcnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9zb21lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvY29udGFpbnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pbnZva2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9wbHVjay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3doZXJlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvbWF4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvbWluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvdG9BcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3NhbXBsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3NodWZmbGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9zb3J0QnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fZ3JvdXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9ncm91cEJ5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaW5kZXhCeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2NvdW50QnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9wYXJ0aXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9zaXplLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2tleUluT2JqLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvcGljay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL29taXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pbml0aWFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvZmlyc3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9yZXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvbGFzdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2NvbXBhY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9mbGF0dGVuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvZGlmZmVyZW5jZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3dpdGhvdXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy91bmlxLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvdW5pb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pbnRlcnNlY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy91bnppcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3ppcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL29iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3JhbmdlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvY2h1bmsuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fY2hhaW5SZXN1bHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9taXhpbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3VuZGVyc2NvcmUtYXJyYXktbWV0aG9kcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2luZGV4LWRlZmF1bHQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9jb250ZXh0cy9zb3J0LWNvbnRleHQudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcHJvcHMtcmVzb2x2ZXIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9oZWFkZXIudHN4Iiwid2VicGFjazovLy9leHRlcm5hbCB1bWQge1wicm9vdFwiOlwiUmVhY3RcIixcImNvbW1vbmpzMlwiOlwicmVhY3RcIixcImNvbW1vbmpzXCI6XCJyZWFjdFwiLFwiYW1kXCI6XCJyZWFjdFwifSIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgdW1kIHtcInJvb3RcIjpcIlJlYWN0RE9NXCIsXCJjb21tb25qczJcIjpcInJlYWN0LWRvbVwiLFwiY29tbW9uanNcIjpcInJlYWN0LWRvbVwiLFwiYW1kXCI6XCJyZWFjdC1kb21cIn0iLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9yb3ctZXhwYW5kL3Jvdy1jb25zdW1lci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9ib2R5LnRzeCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RvbS1oZWxwZXJzL2VzbS9yZW1vdmVDbGFzcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vY29uZmlnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9UcmFuc2l0aW9uR3JvdXBDb250ZXh0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS91dGlscy9yZWZsb3cuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1RyYW5zaXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL0NTU1RyYW5zaXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RvbS1oZWxwZXJzL2VzbS9hZGRDbGFzcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZG9tLWhlbHBlcnMvZXNtL2hhc0NsYXNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS91dGlscy9DaGlsZE1hcHBpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1RyYW5zaXRpb25Hcm91cC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9SZXBsYWNlVHJhbnNpdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vU3dpdGNoVHJhbnNpdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3Jvdy1zZWxlY3Rpb24vc2VsZWN0aW9uLWhlYWRlci1jZWxsLWNvbnN1bWVyLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2NvbnN0LnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93LWV4cGFuZC9leHBhbmQtaGVhZGVyLWNlbGwtY29uc3VtZXIudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvc3RvcmUvb3BlcmF0b3JzLnRzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9ldmVudHMvZXZlbnRzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93L2V2ZW50LWRlbGVnYXRlci50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3Jvdy1zZWxlY3Rpb24vc2VsZWN0aW9uLWhlYWRlci1jZWxsLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2Zvb3Rlci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL2luZGV4LnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvZm9vdGVyLWNlbGwudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9jb250ZXh0cy9zZWxlY3Rpb24tY29udGV4dC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9jZWxsLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3N0b3JlL211dGF0ZS50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2hlYWRlci1jZWxsLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2NvbnRleHRzL2luZGV4LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2ZpbHRlcnMudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcHJvcHMtcmVzb2x2ZXIvcmVtb3RlLXJlc29sdmVyLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcHJvcHMtcmVzb2x2ZXIvY29sdW1uLXJlc29sdmVyLnRzIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly8vd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpLCByZXF1aXJlKFwicmVhY3QtZG9tXCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcInJlYWN0XCIsIFwicmVhY3QtZG9tXCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlJlYWN0Qm9vdHN0cmFwVGFibGVOZ1wiXSA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpLCByZXF1aXJlKFwicmVhY3QtZG9tXCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJSZWFjdEJvb3RzdHJhcFRhYmxlTmdcIl0gPSBmYWN0b3J5KHJvb3RbXCJSZWFjdFwiXSwgcm9vdFtcIlJlYWN0RE9NXCJdKTtcbn0pKHNlbGYsIChfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX181NDQyX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzYwMDNfXykgPT4ge1xucmV0dXJuICIsImltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQ1NTVHJhbnNpdGlvbiB9IGZyb20gXCJyZWFjdC10cmFuc2l0aW9uLWdyb3VwXCI7XG5cbmludGVyZmFjZSBFeHBhbmRSb3dQcm9wcyB7XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xuICBleHBhbmRlZD86IGJvb2xlYW47XG4gIG9uQ2xvc2VkPzogKCkgPT4gdm9pZDtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjb2xTcGFuOiBudW1iZXI7XG59XG5cbmNsYXNzIEV4cGFuZFJvdyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxFeHBhbmRSb3dQcm9wcz4ge1xuICBub2RlUmVmOiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IEV4cGFuZFJvd1Byb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubm9kZVJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgZXhwYW5kZWQgPSBmYWxzZSxcbiAgICAgIG9uQ2xvc2VkLFxuICAgICAgY2xhc3NOYW1lID0gXCJcIixcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIHJldHVybiAoXG4gICAgICA8dHI+XG4gICAgICAgIDx0ZCBjbGFzc05hbWU9e2NzKFwicmVzZXQtZXhwYW5zaW9uLXN0eWxlXCIsIGNsYXNzTmFtZSl9IHsuLi5yZXN0fT5cbiAgICAgICAgICA8Q1NTVHJhbnNpdGlvblxuICAgICAgICAgICAgYXBwZWFyXG4gICAgICAgICAgICBpbj17ZXhwYW5kZWR9XG4gICAgICAgICAgICB0aW1lb3V0PXs0MDB9XG4gICAgICAgICAgICBjbGFzc05hbWVzPVwicm93LWV4cGFuZC1zbGlkZVwiXG4gICAgICAgICAgICBvbkV4aXRlZD17b25DbG9zZWR9XG4gICAgICAgICAgICBub2RlUmVmPXt0aGlzLm5vZGVSZWZ9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiByZWY9e3RoaXMubm9kZVJlZn0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93LWV4cGFuc2lvbi1zdHlsZVwiPntjaGlsZHJlbn08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvQ1NTVHJhbnNpdGlvbj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgKTtcbiAgfVxufVxuXG4vLyBFeHBhbmRSb3cucHJvcFR5cGVzID0ge1xuLy8gICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4vLyAgIGV4cGFuZGVkOiBQcm9wVHlwZXMuYm9vbCxcbi8vICAgb25DbG9zZWQ6IFByb3BUeXBlcy5mdW5jLFxuLy8gICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyB9O1xuXG4vLyBFeHBhbmRSb3cuZGVmYXVsdFByb3BzID0ge1xuLy8gICBjaGlsZHJlbjogbnVsbCxcbi8vICAgZXhwYW5kZWQ6IGZhbHNlLFxuLy8gICBvbkNsb3NlZDogdW5kZWZpbmVkLFxuLy8gICBjbGFzc05hbWU6IFwiXCIsXG4vLyB9O1xuXG5leHBvcnQgZGVmYXVsdCBFeHBhbmRSb3c7XG4iLCJpbXBvcnQgY3MgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFNPUlRfQVNDIH0gZnJvbSBcIi4uL2NvbnN0XCI7XG5pbXBvcnQgeyBCb290c3RyYXBDb250ZXh0IH0gZnJvbSBcIi4uL2NvbnRleHRzL2Jvb3RzdHJhcFwiO1xuXG5pbnRlcmZhY2UgU29ydENhcmV0UHJvcHMge1xuICBvcmRlcjogc3RyaW5nO1xufVxuXG5jb25zdCBTb3J0Q2FyZXQ6IFJlYWN0LkZDPFNvcnRDYXJldFByb3BzPiA9ICh7IG9yZGVyIH0pID0+IHtcbiAgY29uc3Qgb3JkZXJDbGFzcyA9IGNzKFwicmVhY3QtYm9vdHN0cmFwLXRhYmxlLXNvcnQtb3JkZXJcIiwge1xuICAgIGRyb3B1cDogb3JkZXIgPT09IFNPUlRfQVNDLFxuICB9KTtcblxuICByZXR1cm4gKFxuICAgIDxCb290c3RyYXBDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgeyh7IGJvb3RzdHJhcDQgfSkgPT5cbiAgICAgICAgYm9vdHN0cmFwNCA/IChcbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2BjYXJldC00LSR7b3JkZXJ9YH0gZGF0YS10ZXN0aWQ9XCJzb3J0LWNhcmV0XCIgLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e29yZGVyQ2xhc3N9IGRhdGEtdGVzdGlkPVwic29ydC1jYXJldFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiY2FyZXRcIiAvPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKVxuICAgICAgfVxuICAgIDwvQm9vdHN0cmFwQ29udGV4dC5Db25zdW1lcj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNvcnRDYXJldDtcbiIsImltcG9ydCBSZWFjdCwgeyBGQyB9IGZyb20gXCJyZWFjdFwiO1xuXG50eXBlIFJvd1NlY3Rpb25Qcm9wcyA9IHtcbiAgY29udGVudD86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgY29sU3Bhbj86IG51bWJlcjtcbn07XG5cbmNvbnN0IFJvd1NlY3Rpb246IEZDPFJvd1NlY3Rpb25Qcm9wcz4gPSAoeyBjb250ZW50ID0gbnVsbCwgY29sU3BhbiA9IDEgfSkgPT4gKFxuICA8dHI+XG4gICAgPHRkXG4gICAgICBkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJcbiAgICAgIGNvbFNwYW49eyBjb2xTcGFuIH1cbiAgICAgIGNsYXNzTmFtZT1cInJlYWN0LWJzLXRhYmxlLW5vLWRhdGFcIlxuICAgID5cbiAgICAgIHtjb250ZW50fVxuICAgIDwvdGQ+XG4gIDwvdHI+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBSb3dTZWN0aW9uO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IF8gZnJvbSBcIi4vdXRpbHNcIjtcblxuaW50ZXJmYWNlIEZpbHRlclByb3BzIHtcbiAgcHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIEZpbHRlcjogUmVhY3QuQ29tcG9uZW50VHlwZTxhbnk+O1xufVxuXG5pbnRlcmZhY2UgRmlsdGVyc0NlbGxQcm9wcyB7XG4gIGluZGV4OiBudW1iZXI7XG4gIGNvbHVtbjoge1xuICAgIGZpbHRlclJlbmRlcmVyPzogKGZpbHRlckhhbmRsZXI6IEZ1bmN0aW9uLCBjb2x1bW46IGFueSkgPT4gUmVhY3QuUmVhY3ROb2RlO1xuICAgIGZpbHRlcj86IEZpbHRlclByb3BzO1xuICAgIGhlYWRlckFsaWduPzogc3RyaW5nIHwgRnVuY3Rpb247XG4gICAgZGF0YUZpZWxkOiBzdHJpbmc7XG4gIH07XG4gIGN1cnJGaWx0ZXJzPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgb25GaWx0ZXI/OiAoZmlsdGVyRGF0YTogUmVjb3JkPHN0cmluZywgYW55PikgPT4gUmVhY3QuUmVhY3ROb2RlO1xuICBvbkV4dGVybmFsRmlsdGVyPzogKGNvbHVtbjogYW55LCBmaWx0ZXJUeXBlOiBzdHJpbmcpID0+ICh2YWx1ZTogYW55KSA9PiBGdW5jdGlvbjtcbn1cblxuY29uc3QgRmlsdGVyc0NlbGw6IFJlYWN0LkZDPEZpbHRlcnNDZWxsUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgaW5kZXgsIGNvbHVtbiwgY3VyckZpbHRlcnMsIG9uRXh0ZXJuYWxGaWx0ZXIgPSAoKSA9PiB7fSwgb25GaWx0ZXIgPSAoKSA9PiB7fSB9ID0gcHJvcHM7XG4gIGNvbnN0IHsgZmlsdGVyIH0gPSBjb2x1bW47XG5cbiAgbGV0IGZpbHRlckVsbTogUmVhY3QuUmVhY3ROb2RlO1xuICBjb25zdCBjZWxsQXR0cnM6IFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50PiA9IHt9O1xuICBjb25zdCBjZWxsU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7fTtcblxuICBjZWxsQXR0cnMuc3R5bGUgPSBjZWxsU3R5bGU7XG5cbiAgaWYgKGNvbHVtbi5oZWFkZXJBbGlnbikge1xuICAgIGNlbGxTdHlsZS50ZXh0QWxpZ24gPSBfLmlzRnVuY3Rpb24oY29sdW1uLmhlYWRlckFsaWduKVxuICAgICAgPyBjb2x1bW4uaGVhZGVyQWxpZ24oY29sdW1uLCBpbmRleClcbiAgICAgIDogY29sdW1uLmhlYWRlckFsaWduO1xuICB9XG5cbiAgaWYgKGNvbHVtbi5maWx0ZXJSZW5kZXJlcikge1xuICAgIGNvbnN0IG9uQ3VzdG9tRmlsdGVyID0gb25FeHRlcm5hbEZpbHRlcihjb2x1bW4sIGZpbHRlcj8ucHJvcHMudHlwZSB8fCBcIlwiKTtcbiAgICBmaWx0ZXJFbG0gPSBjb2x1bW4uZmlsdGVyUmVuZGVyZXIob25DdXN0b21GaWx0ZXIhLCBjb2x1bW4pO1xuICB9IGVsc2UgaWYgKGZpbHRlcikge1xuICAgIGZpbHRlckVsbSA9IChcbiAgICAgIDxmaWx0ZXIuRmlsdGVyXG4gICAgICAgIHsuLi5maWx0ZXIucHJvcHN9XG4gICAgICAgIGZpbHRlclN0YXRlPXtjdXJyRmlsdGVycyFbY29sdW1uLmRhdGFGaWVsZF19XG4gICAgICAgIG9uRmlsdGVyPXtvbkZpbHRlcn1cbiAgICAgICAgY29sdW1uPXtjb2x1bW59XG4gICAgICAvPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcInRoXCIsIGNlbGxBdHRycywgZmlsdGVyRWxtKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEZpbHRlcnNDZWxsO1xuIiwiaW1wb3J0IF8gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUm93UHJvcHMge1xuICBjbGlja1RvRWRpdD86IHN0cmluZztcbiAgZGJjbGlja1RvRWRpdD86IHN0cmluZztcbiAgZWRpdGFibGU/OiBib29sZWFuO1xuICBlZGl0aW5nUm93SWR4PzogbnVtYmVyIHwgbnVsbDtcbiAgZWRpdGluZ0NvbElkeD86IG51bWJlcjtcbiAgRWRpdGluZ0NlbGxDb21wb25lbnQ/OiBhbnk7XG4gIHRhYkluZGV4U3RhcnQ/OiBudW1iZXI7XG4gIHRhYkluZGV4Q2VsbD86IGJvb2xlYW47XG4gIHJvd0luZGV4PzogbnVtYmVyO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcztcbiAgYXR0cnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBjb2x1bW5zPzogYW55W107XG4gIHJvdz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHNlbGVjdFJvdz86IGFueTtcbiAgc2VsZWN0ZWQ/OiBib29sZWFuO1xuICBzZWxlY3RhYmxlPzogYm9vbGVhbjtcbiAgZXhwYW5kUm93PzogYW55O1xuICBleHBhbmRlZD86IGJvb2xlYW47XG4gIGV4cGFuZGFibGU/OiBib29sZWFuO1xuICB2aXNpYmxlQ29sdW1uU2l6ZT86IG51bWJlcjtcbiAga2V5RmllbGQ/OiBzdHJpbmc7XG4gIHZhbHVlPzogYW55O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSb3dTaG91bGRVcGRhdGVyPFQgZXh0ZW5kcyBuZXcoLi4uYXJnczogYW55W10pID0+IGFueT4oXG4gIEV4dGVuZEJhc2U6IFRcbikge1xuICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBFeHRlbmRCYXNlIHtcbiAgICBzaG91bGRVcGRhdGVCeUNlbGxFZGl0aW5nKG5leHRQcm9wczogUm93UHJvcHMpIHtcbiAgICAgIGlmICghKHRoaXMucHJvcHMuY2xpY2tUb0VkaXQgfHwgdGhpcy5wcm9wcy5kYmNsaWNrVG9FZGl0KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgbmV4dFByb3BzLmVkaXRpbmdSb3dJZHggPT09IG5leHRQcm9wcy5yb3dJbmRleCB8fFxuICAgICAgICAodGhpcy5wcm9wcy5lZGl0aW5nUm93SWR4ID09PSBuZXh0UHJvcHMucm93SW5kZXggJiZcbiAgICAgICAgICBuZXh0UHJvcHMuZWRpdGluZ1Jvd0lkeCA9PT0gbnVsbCkgfHxcbiAgICAgICAgdGhpcy5wcm9wcy5lZGl0aW5nUm93SWR4ID09PSBuZXh0UHJvcHMucm93SW5kZXhcbiAgICAgICk7XG4gICAgfVxuXG4gICAgc2hvdWxkVXBkYXRlZEJ5U2VsZlByb3BzKG5leHRQcm9wczogUm93UHJvcHMpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMucHJvcHMuY2xhc3NOYW1lICE9PSBuZXh0UHJvcHMuY2xhc3NOYW1lIHx8XG4gICAgICAgICFfLmlzRXF1YWwodGhpcy5wcm9wcy5zdHlsZSwgbmV4dFByb3BzLnN0eWxlKSB8fFxuICAgICAgICAhXy5pc0VxdWFsKHRoaXMucHJvcHMuYXR0cnMsIG5leHRQcm9wcy5hdHRycylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gT25seSB1c2UgZm9yIHNpbXBsZS1yb3dcbiAgICBzaG91bGRVcGRhdGVCeUNvbHVtbnNGb3JTaW1wbGVDaGVjayhuZXh0UHJvcHM6IFJvd1Byb3BzKSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5jb2x1bW5zLmxlbmd0aCAhPT0gbmV4dFByb3BzLmNvbHVtbnMhLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wcm9wcy5jb2x1bW5zLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmICghXy5pc0VxdWFsKHRoaXMucHJvcHMuY29sdW1uc1tpXSwgbmV4dFByb3BzLmNvbHVtbnMhW2ldKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgc2hvdWxkVXBkYXRlZEJ5Tm9ybWFsUHJvcHMobmV4dFByb3BzOiBSb3dQcm9wcykge1xuICAgICAgY29uc3Qgc2hvdWxkVXBkYXRlID1cbiAgICAgICAgdGhpcy5wcm9wcy5yb3dJbmRleCAhPT0gbmV4dFByb3BzLnJvd0luZGV4IHx8XG4gICAgICAgIHRoaXMucHJvcHMuZWRpdGFibGUgIT09IG5leHRQcm9wcy5lZGl0YWJsZSB8fFxuICAgICAgICAhXy5pc0VxdWFsKHRoaXMucHJvcHMucm93LCBuZXh0UHJvcHMucm93KSB8fFxuICAgICAgICB0aGlzLnByb3BzLmNvbHVtbnMubGVuZ3RoICE9PSBuZXh0UHJvcHMuY29sdW1ucyEubGVuZ3RoO1xuXG4gICAgICByZXR1cm4gc2hvdWxkVXBkYXRlO1xuICAgIH1cblxuICAgIHNob3VsZFVwZGF0ZUNoaWxkKG5leHRQcm9wczogUm93UHJvcHMpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuc2hvdWxkVXBkYXRlQnlDZWxsRWRpdGluZyhuZXh0UHJvcHMpIHx8XG4gICAgICAgIHRoaXMuc2hvdWxkVXBkYXRlZEJ5Tm9ybWFsUHJvcHMobmV4dFByb3BzKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBzaG91bGRSb3dDb250ZW50VXBkYXRlKG5leHRQcm9wczogUm93UHJvcHMpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuc2hvdWxkVXBkYXRlQ2hpbGQobmV4dFByb3BzKSB8fFxuICAgICAgICB0aGlzLnNob3VsZFVwZGF0ZUJ5Q29sdW1uc0ZvclNpbXBsZUNoZWNrKG5leHRQcm9wcylcbiAgICAgICk7XG4gICAgfVxuICB9O1xufVxuIiwiaW1wb3J0IF8gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmV4cG9ydCBjb25zdCBtYXRjaFJvdyA9IChrZXlGaWVsZDogYW55LCBpZDogYW55KSA9PiAocm93OiBhbnkpID0+IF8uZ2V0KHJvdywga2V5RmllbGQpID09PSBpZDtcblxuZXhwb3J0IGNvbnN0IGdldFJvd0J5Um93SWQgPSAoZGF0YTogYW55LCBrZXlGaWVsZDogYW55LCBpZDogYW55KSA9PiBkYXRhLmZpbmQobWF0Y2hSb3coa2V5RmllbGQsIGlkKSk7XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBJTkRJQ0FUT1JfUE9TSVRJT05fTEVGVCB9IGZyb20gXCIuLi9jb25zdFwiO1xuaW1wb3J0IEV4cGFuZENlbGwgZnJvbSBcIi4uL3Jvdy1leHBhbmQvZXhwYW5kLWNlbGxcIjtcbmltcG9ydCBTZWxlY3Rpb25DZWxsIGZyb20gXCIuLi9yb3ctc2VsZWN0aW9uL3NlbGVjdGlvbi1jZWxsXCI7XG5pbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IFJvd0V2ZW50RGVsZWdhdGVyIH0gZnJvbSBcIi4vZXZlbnQtZGVsZWdhdGVyXCI7XG5pbXBvcnQgUm93UHVyZUNvbnRlbnQgZnJvbSBcIi4vcm93LXB1cmUtY29udGVudFwiO1xuaW1wb3J0IHNob3VsZFVwZGF0ZXIsIHsgUm93UHJvcHMgfSBmcm9tIFwiLi9zaG91bGQtdXBkYXRlclwiO1xuXG5jbGFzcyBSb3dBZ2dyZWdhdG9yIGV4dGVuZHMgc2hvdWxkVXBkYXRlcihSb3dFdmVudERlbGVnYXRlcihDb21wb25lbnQ8Um93UHJvcHM+KSkge1xuICBjbGlja051bTogbnVtYmVyID0gMDtcbiAgc2hvdWxkVXBkYXRlUm93Q29udGVudDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBSb3dQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNyZWF0ZUNsaWNrRXZlbnRIYW5kbGVyID0gdGhpcy5jcmVhdGVDbGlja0V2ZW50SGFuZGxlci5iaW5kKHRoaXMpO1xuICB9XG5cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wczogUm93UHJvcHMpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnByb3BzLnNlbGVjdGVkICE9PSBuZXh0UHJvcHMuc2VsZWN0ZWQgfHxcbiAgICAgIHRoaXMucHJvcHMuZXhwYW5kZWQgIT09IG5leHRQcm9wcy5leHBhbmRlZCB8fFxuICAgICAgdGhpcy5wcm9wcy5leHBhbmRhYmxlICE9PSBuZXh0UHJvcHMuZXhwYW5kYWJsZSB8fFxuICAgICAgdGhpcy5wcm9wcy5zZWxlY3RhYmxlICE9PSBuZXh0UHJvcHMuc2VsZWN0YWJsZSB8fFxuICAgICAgdGhpcy5wcm9wcy5zZWxlY3RSb3cuaGlkZVNlbGVjdENvbHVtbiAhPT1cbiAgICAgIG5leHRQcm9wcy5zZWxlY3RSb3cuaGlkZVNlbGVjdENvbHVtbiB8fFxuICAgICAgdGhpcy5zaG91bGRVcGRhdGVkQnlTZWxmUHJvcHMobmV4dFByb3BzKVxuICAgICkge1xuICAgICAgdGhpcy5zaG91bGRVcGRhdGVSb3dDb250ZW50ID0gdGhpcy5zaG91bGRSb3dDb250ZW50VXBkYXRlKG5leHRQcm9wcyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5zaG91bGRVcGRhdGVSb3dDb250ZW50ID0gdGhpcy5zaG91bGRSb3dDb250ZW50VXBkYXRlKG5leHRQcm9wcyk7XG5cbiAgICByZXR1cm4gdGhpcy5zaG91bGRVcGRhdGVSb3dDb250ZW50O1xuICB9XG5cbiAgaXNSZW5kZXJGdW5jdGlvbkNvbHVtbkluTGVmdChwb3NpdGlvbiA9IElORElDQVRPUl9QT1NJVElPTl9MRUZUKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHBvc2l0aW9uID09PSBJTkRJQ0FUT1JfUE9TSVRJT05fTEVGVDtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICByb3csXG4gICAgICBjb2x1bW5zLFxuICAgICAga2V5RmllbGQsXG4gICAgICByb3dJbmRleCxcbiAgICAgIHN0eWxlLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgYXR0cnMsXG4gICAgICBzZWxlY3RSb3csXG4gICAgICBleHBhbmRSb3csXG4gICAgICBleHBhbmRlZCxcbiAgICAgIGV4cGFuZGFibGUsXG4gICAgICBzZWxlY3RlZCxcbiAgICAgIHNlbGVjdGFibGUsXG4gICAgICB2aXNpYmxlQ29sdW1uU2l6ZSxcbiAgICAgIHRhYkluZGV4Q2VsbCxcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBrZXkgPSBfLmdldChyb3csIGtleUZpZWxkKTtcbiAgICBjb25zdCB7IGhpZGVTZWxlY3RDb2x1bW4sIHNlbGVjdENvbHVtblBvc2l0aW9uLCBjbGlja1RvU2VsZWN0IH0gPSBzZWxlY3RSb3c7XG4gICAgY29uc3QgeyBzaG93RXhwYW5kQ29sdW1uID0gdW5kZWZpbmVkLCBleHBhbmRDb2x1bW5Qb3NpdGlvbiA9IHVuZGVmaW5lZCB9ID1cbiAgICAgIGV4cGFuZFJvdyA/PyB7fTtcblxuICAgIGNvbnN0IG5ld0F0dHJzID0gdGhpcy5kZWxlZ2F0ZSh7IC4uLmF0dHJzIH0pO1xuICAgIGlmIChjbGlja1RvU2VsZWN0IHx8IChleHBhbmRSb3cgJiYgISFleHBhbmRSb3cucmVuZGVyZXIpKSB7XG4gICAgICBuZXdBdHRycy5vbkNsaWNrID0gdGhpcy5jcmVhdGVDbGlja0V2ZW50SGFuZGxlcihuZXdBdHRycy5vbkNsaWNrKTtcbiAgICB9XG5cbiAgICBsZXQgdGFiSW5kZXhTdGFydCA9IHJvd0luZGV4ISAqIHZpc2libGVDb2x1bW5TaXplISArIDE7XG5cbiAgICBjb25zdCBjaGlsZHJlbnMgPSBbXG4gICAgICA8Um93UHVyZUNvbnRlbnRcbiAgICAgICAga2V5PVwicm93XCJcbiAgICAgICAgcm93PXtyb3d9XG4gICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgIGtleUZpZWxkPXtrZXlGaWVsZH1cbiAgICAgICAgcm93SW5kZXg9e3Jvd0luZGV4fVxuICAgICAgICBzaG91bGRVcGRhdGU9e3RoaXMuc2hvdWxkVXBkYXRlUm93Q29udGVudH1cbiAgICAgICAgdGFiSW5kZXhTdGFydD17dGFiSW5kZXhDZWxsID8gdGFiSW5kZXhTdGFydCA6IC0xfVxuICAgICAgICB7Li4ucmVzdH1cbiAgICAgIC8+LFxuICAgIF07XG5cbiAgICBpZiAoIWhpZGVTZWxlY3RDb2x1bW4pIHtcbiAgICAgIGNvbnN0IHNlbGVjdENlbGwgPSAoXG4gICAgICAgIDxTZWxlY3Rpb25DZWxsXG4gICAgICAgICAgey4uLnNlbGVjdFJvd31cbiAgICAgICAgICBrZXk9XCJzZWxlY3Rpb24tY2VsbFwiXG4gICAgICAgICAgcm93S2V5PXtrZXl9XG4gICAgICAgICAgcm93SW5kZXg9e3Jvd0luZGV4fVxuICAgICAgICAgIHNlbGVjdGVkPXtzZWxlY3RlZH1cbiAgICAgICAgICBkaXNhYmxlZD17IXNlbGVjdGFibGV9XG4gICAgICAgICAgdGFiSW5kZXg9e3RhYkluZGV4Q2VsbCA/ICh0YWJJbmRleFN0YXJ0ICs9IDEpIDogLTF9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgICAgaWYgKHRoaXMuaXNSZW5kZXJGdW5jdGlvbkNvbHVtbkluTGVmdChzZWxlY3RDb2x1bW5Qb3NpdGlvbikpIHtcbiAgICAgICAgY2hpbGRyZW5zLnVuc2hpZnQoc2VsZWN0Q2VsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGlsZHJlbnMucHVzaChzZWxlY3RDZWxsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2hvd0V4cGFuZENvbHVtbikge1xuICAgICAgY29uc3QgZXhwYW5kQ2VsbCA9IChcbiAgICAgICAgPEV4cGFuZENlbGxcbiAgICAgICAgICB7Li4uZXhwYW5kUm93fVxuICAgICAgICAgIGtleT1cImV4cGFuZC1jZWxsXCJcbiAgICAgICAgICByb3dLZXk9e2tleX1cbiAgICAgICAgICByb3dJbmRleD17cm93SW5kZXh9XG4gICAgICAgICAgZXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICAgIGV4cGFuZGFibGU9e2V4cGFuZGFibGV9XG4gICAgICAgICAgdGFiSW5kZXg9e3RhYkluZGV4Q2VsbCA/ICh0YWJJbmRleFN0YXJ0ICs9IDEpIDogLTF9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgICAgaWYgKHRoaXMuaXNSZW5kZXJGdW5jdGlvbkNvbHVtbkluTGVmdChleHBhbmRDb2x1bW5Qb3NpdGlvbikpIHtcbiAgICAgICAgY2hpbGRyZW5zLnVuc2hpZnQoZXhwYW5kQ2VsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGlsZHJlbnMucHVzaChleHBhbmRDZWxsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHRyIHN0eWxlPXtzdHlsZX0gY2xhc3NOYW1lPXtjbGFzc05hbWV9IHsuLi5uZXdBdHRyc30+XG4gICAgICAgIHtjaGlsZHJlbnN9XG4gICAgICA8L3RyPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUm93QWdncmVnYXRvcjtcbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIE1vdXNlRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIEV4cGFuZENlbGxQcm9wcyB7XG4gIHJvd0tleTogYW55O1xuICBleHBhbmRlZDogYm9vbGVhbjtcbiAgZXhwYW5kYWJsZTogYm9vbGVhbjtcbiAgb25Sb3dFeHBhbmQ6IChcbiAgICByb3dLZXk6IGFueSxcbiAgICBleHBhbmRlZDogYm9vbGVhbixcbiAgICByb3dJbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkLFxuICAgIGU6IE1vdXNlRXZlbnRcbiAgKSA9PiB2b2lkO1xuICBleHBhbmRDb2x1bW5SZW5kZXJlcj86IChwYXJhbXM6IHtcbiAgICBleHBhbmRhYmxlOiBib29sZWFuO1xuICAgIGV4cGFuZGVkOiBib29sZWFuO1xuICAgIHJvd0tleTogYW55O1xuICB9KSA9PiBSZWFjdC5SZWFjdE5vZGU7XG4gIHJvd0luZGV4PzogbnVtYmVyO1xuICB0YWJJbmRleD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXhwYW5kQ2VsbCBleHRlbmRzIENvbXBvbmVudDxFeHBhbmRDZWxsUHJvcHM+IHtcbiAgaGFuZGxlQ2xpY2sgPSAoZTogTW91c2VFdmVudDxIVE1MVGFibGVEYXRhQ2VsbEVsZW1lbnQ+KSA9PiB7XG4gICAgY29uc3QgeyByb3dLZXksIGV4cGFuZGVkLCBvblJvd0V4cGFuZCwgcm93SW5kZXggfSA9IHRoaXMucHJvcHM7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBvblJvd0V4cGFuZChyb3dLZXksICFleHBhbmRlZCwgcm93SW5kZXgsIGUpO1xuICB9O1xuXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6IEV4cGFuZENlbGxQcm9wcykge1xuICAgIGNvbnN0IHNob3VsZFVwZGF0ZSA9XG4gICAgICB0aGlzLnByb3BzLnJvd0luZGV4ICE9PSBuZXh0UHJvcHMucm93SW5kZXggfHxcbiAgICAgIHRoaXMucHJvcHMuZXhwYW5kZWQgIT09IG5leHRQcm9wcy5leHBhbmRlZCB8fFxuICAgICAgdGhpcy5wcm9wcy5yb3dLZXkgIT09IG5leHRQcm9wcy5yb3dLZXkgfHxcbiAgICAgIHRoaXMucHJvcHMudGFiSW5kZXggIT09IG5leHRQcm9wcy50YWJJbmRleDtcblxuICAgIHJldHVybiBzaG91bGRVcGRhdGU7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBleHBhbmRlZCwgZXhwYW5kYWJsZSwgZXhwYW5kQ29sdW1uUmVuZGVyZXIsIHRhYkluZGV4LCByb3dLZXkgfSA9XG4gICAgICB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGF0dHJzOiB7IHRhYkluZGV4PzogbnVtYmVyIH0gPSB7fTtcbiAgICBpZiAodGFiSW5kZXggIT09IHVuZGVmaW5lZCAmJiB0YWJJbmRleCAhPT0gLTEpIGF0dHJzLnRhYkluZGV4ID0gdGFiSW5kZXg7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHRkIGNsYXNzTmFtZT1cImV4cGFuZC1jZWxsXCIgb25DbGljaz17dGhpcy5oYW5kbGVDbGlja30gZGF0YS10ZXN0aWQ9XCJleHBhbmQtY2VsbFwiIHsuLi5hdHRyc30+XG4gICAgICAgIHtleHBhbmRDb2x1bW5SZW5kZXJlclxuICAgICAgICAgID8gZXhwYW5kQ29sdW1uUmVuZGVyZXIoe1xuICAgICAgICAgICAgZXhwYW5kYWJsZSxcbiAgICAgICAgICAgIGV4cGFuZGVkLFxuICAgICAgICAgICAgcm93S2V5XG4gICAgICAgICAgfSlcbiAgICAgICAgICA6IGV4cGFuZGFibGVcbiAgICAgICAgICAgID8gZXhwYW5kZWRcbiAgICAgICAgICAgICAgPyBcIigtKVwiXG4gICAgICAgICAgICAgIDogXCIoKylcIlxuICAgICAgICAgICAgOiBcIlwifVxuICAgICAgPC90ZD5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgY3MgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHtcbiAgQm9vdHN0cmFwVGFibGVQcm9wcyxcbn0gZnJvbSBcIi4vdHlwZXNcIjtcblxuaW1wb3J0IHtcbiAgRklMVEVSU19QT1NJVElPTl9JTkxJTkUsXG4gIFJPV19TRUxFQ1RfRElTQUJMRUQsXG59IGZyb20gXCIuL2NvbnN0XCI7XG5pbXBvcnQgQm9keSBmcm9tIFwiLi9ib2R5XCI7XG5pbXBvcnQgQ2FwdGlvbiBmcm9tIFwiLi9jYXB0aW9uXCI7XG5pbXBvcnQgRmlsdGVycyBmcm9tIFwiLi9maWx0ZXJzXCI7XG5pbXBvcnQgRm9vdGVyIGZyb20gXCIuL2Zvb3RlclwiO1xuaW1wb3J0IEhlYWRlciBmcm9tIFwiLi9oZWFkZXJcIjtcbmltcG9ydCBQcm9wc0Jhc2VSZXNvbHZlciBmcm9tIFwiLi9wcm9wcy1yZXNvbHZlclwiO1xuaW1wb3J0IF8gZnJvbSBcIi4vdXRpbHNcIjtcblxuY2xhc3MgQm9vdHN0cmFwVGFibGUgZXh0ZW5kcyBQcm9wc0Jhc2VSZXNvbHZlcihcbiAgUmVhY3QuQ29tcG9uZW50PEJvb3RzdHJhcFRhYmxlUHJvcHM+XG4pIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IEJvb3RzdHJhcFRhYmxlUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnZhbGlkYXRlUHJvcHMoKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZShuZXh0UHJvcHM6IEJvb3RzdHJhcFRhYmxlUHJvcHMpIHtcbiAgICBpZiAobmV4dFByb3BzLm9uRGF0YVNpemVDaGFuZ2UgJiYgIW5leHRQcm9wcy5wYWdpbmF0aW9uKSB7XG4gICAgICBpZiAobmV4dFByb3BzLmRhdGEubGVuZ3RoICE9PSB0aGlzLnByb3BzLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgIG5leHRQcm9wcy5vbkRhdGFTaXplQ2hhbmdlKHsgZGF0YVNpemU6IHRoaXMucHJvcHMuZGF0YS5sZW5ndGggfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRXhwb3NlZCBBUElzXG4gIGdldERhdGEgPSAoKSA9PiB0aGlzLnZpc2libGVSb3dzKCk7XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgbG9hZGluZywgb3ZlcmxheSB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAob3ZlcmxheSkge1xuICAgICAgY29uc3QgTG9hZGluZ092ZXJsYXkgPSBvdmVybGF5KGxvYWRpbmchKTtcbiAgICAgIHJldHVybiA8TG9hZGluZ092ZXJsYXk+e3RoaXMucmVuZGVyVGFibGUoKX08L0xvYWRpbmdPdmVybGF5PjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyVGFibGUoKTtcbiAgfVxuXG4gIHJlbmRlclRhYmxlKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbHVtbnMsXG4gICAgICBrZXlGaWVsZCxcbiAgICAgIHRhYkluZGV4Q2VsbCxcbiAgICAgIGlkLFxuICAgICAgY2xhc3NlcyxcbiAgICAgIGJvb3RzdHJhcDQgPSBmYWxzZSxcbiAgICAgIHN0cmlwZWQgPSBmYWxzZSxcbiAgICAgIGhvdmVyID0gZmFsc2UsXG4gICAgICBib3JkZXJlZCA9IHRydWUsXG4gICAgICBjb25kZW5zZWQgPSBmYWxzZSxcbiAgICAgIG5vRGF0YUluZGljYXRpb24gPSBudWxsLFxuICAgICAgY2FwdGlvbixcbiAgICAgIHJvd1N0eWxlLFxuICAgICAgcm93Q2xhc3NlcyxcbiAgICAgIHdyYXBwZXJDbGFzc2VzLFxuICAgICAgcm93RXZlbnRzLFxuICAgICAgc2VsZWN0Um93ID0ge1xuICAgICAgICBtb2RlOiBST1dfU0VMRUNUX0RJU0FCTEVELFxuICAgICAgICBzZWxlY3RlZDogW10sXG4gICAgICAgIGhpZGVTZWxlY3RDb2x1bW46IHRydWUsXG4gICAgICB9LFxuICAgICAgZXhwYW5kUm93ID0ge1xuICAgICAgICByZW5kZXJlcjogdW5kZWZpbmVkLFxuICAgICAgICBleHBhbmRlZDogW10sXG4gICAgICAgIG5vbkV4cGFuZGFibGU6IFtdLFxuICAgICAgfSxcbiAgICAgIGNlbGxFZGl0ID0ge1xuICAgICAgICBtb2RlOiBudWxsLFxuICAgICAgICBub25FZGl0YWJsZVJvd3M6IFtdLFxuICAgICAgfSxcbiAgICAgIGZpbHRlclBvc2l0aW9uID0gRklMVEVSU19QT1NJVElPTl9JTkxJTkUsXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCB0YWJsZVdyYXBwZXJDbGFzcyA9IGNzKFwicmVhY3QtYm9vdHN0cmFwLXRhYmxlXCIsIHdyYXBwZXJDbGFzc2VzKTtcblxuICAgIGNvbnN0IHRhYmxlQ2xhc3MgPSBjcyhcbiAgICAgIFwidGFibGVcIixcbiAgICAgIHtcbiAgICAgICAgXCJ0YWJsZS1zdHJpcGVkXCI6IHN0cmlwZWQsXG4gICAgICAgIFwidGFibGUtaG92ZXJcIjogaG92ZXIsXG4gICAgICAgIFwidGFibGUtYm9yZGVyZWRcIjogYm9yZGVyZWQsXG4gICAgICAgIFtib290c3RyYXA0ID8gXCJ0YWJsZS1zbVwiIDogXCJ0YWJsZS1jb25kZW5zZWRcIl06IGNvbmRlbnNlZCxcbiAgICAgIH0sXG4gICAgICBjbGFzc2VzXG4gICAgKTtcblxuICAgIGNvbnN0IGhhc0ZpbHRlcnMgPSBjb2x1bW5zLnNvbWUoXG4gICAgICAoY29sOiBhbnkpID0+IGNvbC5maWx0ZXIgfHwgY29sLmZpbHRlclJlbmRlcmVyXG4gICAgKTtcblxuICAgIGNvbnN0IGhhc0Zvb3RlciA9XG4gICAgICBfLmZpbHRlcihjb2x1bW5zLCAoY29sKSA9PiBfLmhhcyhjb2wsIFwiZm9vdGVyXCIpKS5sZW5ndGggPiAwO1xuXG4gICAgY29uc3QgdGFibGVDYXB0aW9uID0gY2FwdGlvbiAmJiAoXG4gICAgICA8Q2FwdGlvbiBib290c3RyYXA0PXtib290c3RyYXA0fT57Y2FwdGlvbn08L0NhcHRpb24+XG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGFibGVXcmFwcGVyQ2xhc3N9PlxuICAgICAgICA8dGFibGUgaWQ9e2lkfSBjbGFzc05hbWU9e3RhYmxlQ2xhc3N9PlxuICAgICAgICAgIHt0YWJsZUNhcHRpb259XG4gICAgICAgICAgPEhlYWRlclxuICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5oZWFkZXJDbGFzc2VzfVxuICAgICAgICAgICAgd3JhcHBlckNsYXNzZXM9e3RoaXMucHJvcHMuaGVhZGVyV3JhcHBlckNsYXNzZXN9XG4gICAgICAgICAgICBzb3J0RmllbGQ9e3RoaXMucHJvcHMuc29ydEZpZWxkfVxuICAgICAgICAgICAgc29ydE9yZGVyPXt0aGlzLnByb3BzLnNvcnRPcmRlcn1cbiAgICAgICAgICAgIG9uU29ydD17dGhpcy5wcm9wcy5vblNvcnR9XG4gICAgICAgICAgICBnbG9iYWxTb3J0Q2FyZXQ9e3RoaXMucHJvcHMuc29ydCAmJiB0aGlzLnByb3BzLnNvcnQuc29ydENhcmV0fVxuICAgICAgICAgICAgb25GaWx0ZXI9e3RoaXMucHJvcHMub25GaWx0ZXJ9XG4gICAgICAgICAgICBjdXJyRmlsdGVycz17dGhpcy5wcm9wcy5jdXJyRmlsdGVyc31cbiAgICAgICAgICAgIG9uRXh0ZXJuYWxGaWx0ZXI9e3RoaXMucHJvcHMub25FeHRlcm5hbEZpbHRlcn1cbiAgICAgICAgICAgIHNlbGVjdFJvdz17c2VsZWN0Um93fVxuICAgICAgICAgICAgZXhwYW5kUm93PXtleHBhbmRSb3d9XG4gICAgICAgICAgICBmaWx0ZXJQb3NpdGlvbj17ZmlsdGVyUG9zaXRpb259XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7aGFzRmlsdGVycyAmJiBmaWx0ZXJQb3NpdGlvbiAhPT0gRklMVEVSU19QT1NJVElPTl9JTkxJTkUgJiYgKFxuICAgICAgICAgICAgPEZpbHRlcnNcbiAgICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmZpbHRlcnNDbGFzc2VzfVxuICAgICAgICAgICAgICBvblNvcnQ9e3RoaXMucHJvcHMub25Tb3J0fVxuICAgICAgICAgICAgICBvbkZpbHRlcj17dGhpcy5wcm9wcy5vbkZpbHRlcn1cbiAgICAgICAgICAgICAgY3VyckZpbHRlcnM9e3RoaXMucHJvcHMuY3VyckZpbHRlcnN9XG4gICAgICAgICAgICAgIGZpbHRlclBvc2l0aW9uPXt0aGlzLnByb3BzLmZpbHRlclBvc2l0aW9ufVxuICAgICAgICAgICAgICBvbkV4dGVybmFsRmlsdGVyPXt0aGlzLnByb3BzLm9uRXh0ZXJuYWxGaWx0ZXJ9XG4gICAgICAgICAgICAgIHNlbGVjdFJvdz17c2VsZWN0Um93fVxuICAgICAgICAgICAgICBleHBhbmRSb3c9e2V4cGFuZFJvd31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8Qm9keVxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmJvZHlDbGFzc2VzfVxuICAgICAgICAgICAgZGF0YT17dGhpcy5nZXREYXRhKCl9XG4gICAgICAgICAgICBrZXlGaWVsZD17a2V5RmllbGR9XG4gICAgICAgICAgICB0YWJJbmRleENlbGw9e3RhYkluZGV4Q2VsbH1cbiAgICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgICBpc0VtcHR5PXt0aGlzLmlzRW1wdHkoKX1cbiAgICAgICAgICAgIHZpc2libGVDb2x1bW5TaXplPXt0aGlzLnZpc2libGVDb2x1bW5TaXplKCl9XG4gICAgICAgICAgICBub0RhdGFJbmRpY2F0aW9uPXtub0RhdGFJbmRpY2F0aW9ufVxuICAgICAgICAgICAgY2VsbEVkaXQ9e2NlbGxFZGl0fVxuICAgICAgICAgICAgc2VsZWN0Um93PXtzZWxlY3RSb3d9XG4gICAgICAgICAgICBleHBhbmRSb3c9e2V4cGFuZFJvd31cbiAgICAgICAgICAgIHJvd1N0eWxlPXtyb3dTdHlsZX1cbiAgICAgICAgICAgIHJvd0NsYXNzZXM9e3Jvd0NsYXNzZXN9XG4gICAgICAgICAgICByb3dFdmVudHM9e3Jvd0V2ZW50c31cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtoYXNGb290ZXIgJiYgKFxuICAgICAgICAgICAgPEZvb3RlclxuICAgICAgICAgICAgICBkYXRhPXt0aGlzLmdldERhdGEoKX1cbiAgICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgICAgc2VsZWN0Um93PXtzZWxlY3RSb3d9XG4gICAgICAgICAgICAgIGV4cGFuZFJvdz17ZXhwYW5kUm93fVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucHJvcHMuZm9vdGVyQ2xhc3Nlc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC90YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQm9vdHN0cmFwVGFibGU7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IFNlbGVjdFJvd1Byb3BzIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBJTkRJQ0FUT1JfUE9TSVRJT05fTEVGVCB9IGZyb20gXCIuLi9jb25zdFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4cGFuZFJvdyB7XG4gIHNob3dFeHBhbmRDb2x1bW4/OiBib29sZWFuO1xuICBleHBhbmRDb2x1bW5Qb3NpdGlvbj86IHN0cmluZztcbiAgbm9uRXhwYW5kYWJsZT86IGFueVtdO1xufVxuXG5pbnRlcmZhY2UgUm93VGVtcGxhdGVQcm9wcyB7XG4gIHJlbmRlckNvbnRlbnQ6ICgpID0+IGFueTtcbiAgY2VsbEVsOiBzdHJpbmc7XG4gIHNlbGVjdFJvdz86IFNlbGVjdFJvd1Byb3BzPGFueT4gfCB1bmRlZmluZWQ7XG4gIGV4cGFuZFJvdz86IEV4cGFuZFJvdztcbiAgW2tleTogc3RyaW5nXTogYW55OyAvLyBGb3IgYW55IG90aGVyIHByb3BzIHlvdSBtaWdodCBoYXZlXG59XG5cbmNvbnN0IFJvd1RlbXBsYXRlOiBSZWFjdC5GQzxSb3dUZW1wbGF0ZVByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IHJlbmRlckNvbnRlbnQsIHNlbGVjdFJvdywgZXhwYW5kUm93LCBjZWxsRWwsIC4uLnJlc3QgfSA9IHByb3BzO1xuXG4gIGNvbnN0IGlzUmVuZGVyRnVuY3Rpb25Db2x1bW5JbkxlZnQgPSAoXG4gICAgcG9zaXRpb246IHN0cmluZyA9IElORElDQVRPUl9QT1NJVElPTl9MRUZUXG4gICk6IGJvb2xlYW4gPT4gcG9zaXRpb24gPT09IElORElDQVRPUl9QT1NJVElPTl9MRUZUO1xuXG4gIGNvbnN0IGNoaWxkcmVucyA9IHJlbmRlckNvbnRlbnQoKSB8fCBbXTtcblxuICBpZiAoc2VsZWN0Um93ICYmIHNlbGVjdFJvdy5oaWRlU2VsZWN0Q29sdW1uICE9PSB0cnVlKSB7XG4gICAgaWYgKGlzUmVuZGVyRnVuY3Rpb25Db2x1bW5JbkxlZnQoc2VsZWN0Um93LnNlbGVjdENvbHVtblBvc2l0aW9uKSkge1xuICAgICAgY2hpbGRyZW5zLnVuc2hpZnQoUmVhY3QuY3JlYXRlRWxlbWVudChjZWxsRWwsIHsga2V5OiBcInNlbGVjdGlvblwiIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hpbGRyZW5zLnB1c2goUmVhY3QuY3JlYXRlRWxlbWVudChjZWxsRWwsIHsga2V5OiBcInNlbGVjdGlvblwiIH0pKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZXhwYW5kUm93ICYmIGV4cGFuZFJvdy5zaG93RXhwYW5kQ29sdW1uKSB7XG4gICAgaWYgKGlzUmVuZGVyRnVuY3Rpb25Db2x1bW5JbkxlZnQoZXhwYW5kUm93LmV4cGFuZENvbHVtblBvc2l0aW9uKSkge1xuICAgICAgY2hpbGRyZW5zLnVuc2hpZnQoUmVhY3QuY3JlYXRlRWxlbWVudChjZWxsRWwsIHsga2V5OiBcImV4cGFuc2lvblwiIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hpbGRyZW5zLnB1c2goUmVhY3QuY3JlYXRlRWxlbWVudChjZWxsRWwsIHsga2V5OiBcImV4cGFuc2lvblwiIH0pKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gPHRyIHsuLi5yZXN0fT57Y2hpbGRyZW5zfTwvdHI+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUm93VGVtcGxhdGU7XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBNb3VzZUV2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBST1dfU0VMRUNUX1NJTkdMRSB9IGZyb20gXCIuLi9jb25zdFwiO1xuaW1wb3J0IF8gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBCb290c3RyYXBDb250ZXh0IH0gZnJvbSBcIi4uL2NvbnRleHRzL2Jvb3RzdHJhcFwiO1xuXG5pbnRlcmZhY2UgU2VsZWN0aW9uQ2VsbFByb3BzIHtcbiAgbW9kZT86IHN0cmluZztcbiAgcm93S2V5OiBhbnk7XG4gIHNlbGVjdGVkOiBib29sZWFuO1xuICBvblJvd1NlbGVjdD86IChcbiAgICByb3dLZXk6IGFueSxcbiAgICBjaGVja2VkOiBib29sZWFuLFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgZTogTW91c2VFdmVudFxuICApID0+IHZvaWQ7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgcm93SW5kZXg/OiBudW1iZXI7XG4gIHRhYkluZGV4PzogbnVtYmVyO1xuICBjbGlja1RvU2VsZWN0PzogYm9vbGVhbjtcbiAgc2VsZWN0aW9uUmVuZGVyZXI/OiAoYXJnczoge1xuICAgIG1vZGU6IHN0cmluZztcbiAgICBjaGVja2VkOiBib29sZWFuO1xuICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICByb3dpbmRleD86IG51bWJlcjtcbiAgICByb3drZXk6IGFueTtcbiAgfSkgPT4gUmVhY3QuUmVhY3ROb2RlO1xuICBzZWxlY3RDb2x1bW5TdHlsZT86XG4gIHwgUmVhY3QuQ1NTUHJvcGVydGllc1xuICB8ICgoYXJnczoge1xuICAgIGNoZWNrZWQ6IGJvb2xlYW47XG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIHJvd2luZGV4PzogbnVtYmVyO1xuICAgIHJvd2tleTogYW55O1xuICB9KSA9PiBSZWFjdC5DU1NQcm9wZXJ0aWVzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VsZWN0aW9uQ2VsbCBleHRlbmRzIENvbXBvbmVudDxTZWxlY3Rpb25DZWxsUHJvcHM+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IFNlbGVjdGlvbkNlbGxQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZUNsaWNrID0gdGhpcy5oYW5kbGVDbGljay5iaW5kKHRoaXMpO1xuICB9XG5cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wczogU2VsZWN0aW9uQ2VsbFByb3BzKSB7XG4gICAgY29uc3Qgc2hvdWxkVXBkYXRlID1cbiAgICAgIHRoaXMucHJvcHMucm93SW5kZXggIT09IG5leHRQcm9wcy5yb3dJbmRleCB8fFxuICAgICAgdGhpcy5wcm9wcy5zZWxlY3RlZCAhPT0gbmV4dFByb3BzLnNlbGVjdGVkIHx8XG4gICAgICB0aGlzLnByb3BzLmRpc2FibGVkICE9PSBuZXh0UHJvcHMuZGlzYWJsZWQgfHxcbiAgICAgIHRoaXMucHJvcHMucm93S2V5ICE9PSBuZXh0UHJvcHMucm93S2V5IHx8XG4gICAgICB0aGlzLnByb3BzLnRhYkluZGV4ICE9PSBuZXh0UHJvcHMudGFiSW5kZXggfHxcbiAgICAgIHRoaXMucHJvcHMuc2VsZWN0Q29sdW1uU3R5bGUgIT09IG5leHRQcm9wcy5zZWxlY3RDb2x1bW5TdHlsZTtcblxuICAgIHJldHVybiBzaG91bGRVcGRhdGU7XG4gIH1cblxuICBoYW5kbGVDbGljayhlOiBNb3VzZUV2ZW50PEhUTUxUYWJsZUNlbGxFbGVtZW50Pikge1xuICAgIGNvbnN0IHtcbiAgICAgIG1vZGU6IGlucHV0VHlwZSxcbiAgICAgIHJvd0tleSxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgb25Sb3dTZWxlY3QsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIHJvd0luZGV4ID0gLTEsXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoZGlzYWJsZWQpIHJldHVybjtcblxuICAgIGNvbnN0IGNoZWNrZWQgPSBpbnB1dFR5cGUgPT09IFJPV19TRUxFQ1RfU0lOR0xFID8gdHJ1ZSA6ICFzZWxlY3RlZDtcblxuICAgIG9uUm93U2VsZWN0IShyb3dLZXksIGNoZWNrZWQsIHJvd0luZGV4LCBlKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICByb3dLZXksXG4gICAgICBtb2RlOiBpbnB1dFR5cGUsXG4gICAgICBzZWxlY3RlZCxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgdGFiSW5kZXggPSAtMSxcbiAgICAgIHJvd0luZGV4LFxuICAgICAgc2VsZWN0aW9uUmVuZGVyZXIsXG4gICAgICBzZWxlY3RDb2x1bW5TdHlsZSxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IGF0dHJzOiBSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MVGFibGVDZWxsRWxlbWVudD4gPSB7fTtcbiAgICBpZiAodGFiSW5kZXggIT09IC0xKSBhdHRycy50YWJJbmRleCA9IHRhYkluZGV4O1xuXG4gICAgYXR0cnMuc3R5bGUgPSAoXy5pc0Z1bmN0aW9uKHNlbGVjdENvbHVtblN0eWxlKVxuICAgICAgPyBzZWxlY3RDb2x1bW5TdHlsZSh7XG4gICAgICAgIGNoZWNrZWQ6IHNlbGVjdGVkLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgcm93aW5kZXg6IHJvd0luZGV4LFxuICAgICAgICByb3drZXk6IHJvd0tleSxcbiAgICAgIH0pXG4gICAgICA6IHNlbGVjdENvbHVtblN0eWxlKSBhcyBhbnk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEJvb3RzdHJhcENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgIHsoeyBib290c3RyYXA0IH0pID0+IChcbiAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwic2VsZWN0aW9uLWNlbGxcIiBvbkNsaWNrPXt0aGlzLmhhbmRsZUNsaWNrfSBkYXRhLXRlc3RpZD1cInNlbGVjdGlvbi1jZWxsXCIgey4uLmF0dHJzIGFzIGFueX0+XG4gICAgICAgICAgICB7c2VsZWN0aW9uUmVuZGVyZXIgPyAoXG4gICAgICAgICAgICAgIHNlbGVjdGlvblJlbmRlcmVyKHtcbiAgICAgICAgICAgICAgICBtb2RlOiBpbnB1dFR5cGUhLFxuICAgICAgICAgICAgICAgIGNoZWNrZWQ6IHNlbGVjdGVkLFxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICByb3dpbmRleDogcm93SW5kZXgsXG4gICAgICAgICAgICAgICAgcm93a2V5OiByb3dLZXksXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPXtpbnB1dFR5cGV9XG4gICAgICAgICAgICAgICAgY2hlY2tlZD17c2VsZWN0ZWR9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkID8/IGZhbHNlfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Ym9vdHN0cmFwNCA/IFwic2VsZWN0aW9uLWlucHV0LTRcIiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eygpID0+IHsgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgKX1cbiAgICAgIDwvQm9vdHN0cmFwQ29udGV4dC5Db25zdW1lcj5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IGdldFJvd0J5Um93SWQgfSBmcm9tIFwiLi9yb3dzXCI7XG5cbmV4cG9ydCBjb25zdCBpc0FueUV4cGFuZHMgPSAoXG4gIGRhdGE6IGFueSxcbiAga2V5RmllbGQ6IGFueSxcbiAgZXhwYW5kZWQ6IGFueVtdID0gW11cbikgPT4ge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCByb3dLZXkgPSBfLmdldChkYXRhW2ldLCBrZXlGaWVsZCk7XG4gICAgaWYgKHR5cGVvZiBleHBhbmRlZC5maW5kKHggPT4geCA9PT0gcm93S2V5KSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBleHBhbmRhYmxlS2V5cyA9IChkYXRhOiBhbnksIGtleUZpZWxkOiBhbnksIHNraXBzOiBhbnlbXSA9IFtdKSA9PiB7XG4gIGlmIChza2lwcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZGF0YS5tYXAoKHJvdzogYW55KSA9PiBfLmdldChyb3csIGtleUZpZWxkKSk7XG4gIH1cbiAgcmV0dXJuIGRhdGFcbiAgICAuZmlsdGVyKChyb3c6IGFueSkgPT4gIV8uY29udGFpbnMoc2tpcHMsIF8uZ2V0KHJvdywga2V5RmllbGQpKSlcbiAgICAubWFwKChyb3c6IGFueSkgPT4gXy5nZXQocm93LCBrZXlGaWVsZCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEV4cGFuZGVkUm93cyA9IChkYXRhOiBhbnksIGtleUZpZWxkOiBhbnksIGV4cGFuZGVkOiBhbnkpID0+XG4gIGV4cGFuZGVkLm1hcCgoazogYW55KSA9PiBnZXRSb3dCeVJvd0lkKGRhdGEsIGtleUZpZWxkLCBrKSk7XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBkYXRhT3BlcmF0b3IgZnJvbSBcIi4uL3N0b3JlL29wZXJhdG9yc1wiO1xuaW1wb3J0IF8gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmludGVyZmFjZSBSb3dFeHBhbmRQcm92aWRlclByb3BzIHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgZGF0YTogYW55W107XG4gIGtleUZpZWxkOiBzdHJpbmc7XG4gIGV4cGFuZFJvdzoge1xuICAgIGV4cGFuZGVkPzogYW55W107XG4gICAgaXNDbG9zaW5nPzogYW55W107XG4gICAgb25FeHBhbmQ/OiAocm93OiBhbnksIGV4cGFuZGVkOiBib29sZWFuLCByb3dJbmRleDogbnVtYmVyLCBlOiBhbnkpID0+IHZvaWQ7XG4gICAgb25FeHBhbmRBbGw/OiAoZXhwYW5kQWxsOiBib29sZWFuLCBleHBhbmRlZFJvd3M6IGFueVtdLCBlOiBhbnkpID0+IHZvaWQ7XG4gICAgb25seU9uZUV4cGFuZGluZz86IGJvb2xlYW47XG4gICAgbm9uRXhwYW5kYWJsZT86IGFueVtdO1xuICAgIHJlbmRlcmVyPzogKCkgPT4gdm9pZDtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSb3dFeHBhbmRDb250ZXh0VmFsdWUge1xuICBleHBhbmRlZDogYW55W107XG4gIGlzQ2xvc2luZzogYW55W107XG4gIG5vbkV4cGFuZGFibGU/OiBhbnlbXTtcbiAgb25DbG9zZWQ6IChjbG9zZWRSb3c6IGFueSkgPT4gdm9pZDtcbiAgaXNBbnlFeHBhbmRzOiBib29sZWFuO1xuICBvblJvd0V4cGFuZDogKFxuICAgIHJvd0tleTogYW55LFxuICAgIGV4cGFuZGVkOiBib29sZWFuLFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgZTogYW55XG4gICkgPT4gdm9pZDtcbiAgb25BbGxSb3dFeHBhbmQ6IChlOiBhbnksIGV4cGFuZEFsbDogYm9vbGVhbikgPT4gdm9pZDtcbiAgb25FeHBhbmQ/OiAocm93OiBhbnksIGV4cGFuZGVkOiBib29sZWFuLCByb3dJbmRleDogbnVtYmVyLCBlOiBhbnkpID0+IHZvaWQ7XG4gIG9uRXhwYW5kQWxsPzogKGV4cGFuZEFsbDogYm9vbGVhbiwgZXhwYW5kZWRSb3dzOiBhbnlbXSwgZTogYW55KSA9PiB2b2lkO1xuICBvbmx5T25lRXhwYW5kaW5nPzogYm9vbGVhbjtcbn1cblxuY29uc3QgZGVmYXVsdFJvd0V4cGFuZENvbnRleHQgPSB7XG4gIGV4cGFuZGVkOiBbXSxcbiAgaXNDbG9zaW5nOiBbXSxcbiAgb25DbG9zZWQ6ICgpID0+IHt9LFxuICBpc0FueUV4cGFuZHM6IGZhbHNlLFxuICBvblJvd0V4cGFuZDogKCkgPT4ge30sXG4gIG9uQWxsUm93RXhwYW5kOiAoKSA9PiB7fSxcbn07XG5jb25zdCBSb3dFeHBhbmRDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxSb3dFeHBhbmRDb250ZXh0VmFsdWU+KFxuICBkZWZhdWx0Um93RXhwYW5kQ29udGV4dFxuKTtcblxuY2xhc3MgUm93RXhwYW5kUHJvdmlkZXIgZXh0ZW5kcyBDb21wb25lbnQ8Um93RXhwYW5kUHJvdmlkZXJQcm9wcz4ge1xuICBzdGF0ZSA9IHtcbiAgICBleHBhbmRlZDogdGhpcy5wcm9wcy5leHBhbmRSb3cuZXhwYW5kZWQgfHwgW10sXG4gICAgaXNDbG9zaW5nOiB0aGlzLnByb3BzLmV4cGFuZFJvdy5pc0Nsb3NpbmcgfHwgW10sXG4gIH07XG5cbiAgb25DbG9zZWQgPSAoY2xvc2VkUm93OiBhbnkpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGlzQ2xvc2luZzogdGhpcy5zdGF0ZS5pc0Nsb3NpbmcuZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUgIT09IGNsb3NlZFJvdyksXG4gICAgfSk7XG4gIH07XG5cbiAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhcbiAgICBuZXh0UHJvcHM6IFJvd0V4cGFuZFByb3ZpZGVyUHJvcHMsXG4gICAgcHJldlN0YXRlOiB7IGV4cGFuZGVkOiBhbnlbXTsgaXNDbG9zaW5nOiBhbnlbXSB9XG4gICkge1xuICAgIGNvbnN0IHsgZXhwYW5kUm93IH0gPSBuZXh0UHJvcHM7XG5cbiAgICBpZiAoZXhwYW5kUm93KSB7XG4gICAgICBjb25zdCB7IG5vbkV4cGFuZGFibGUgPSBbXSB9ID0gZXhwYW5kUm93O1xuXG4gICAgICBsZXQgbmV4dEV4cGFuZGVkID0gWy4uLihleHBhbmRSb3cuZXhwYW5kZWQgfHwgcHJldlN0YXRlLmV4cGFuZGVkKV07XG4gICAgICBuZXh0RXhwYW5kZWQgPSBuZXh0RXhwYW5kZWQuZmlsdGVyKFxuICAgICAgICAocm93SWQpID0+ICFfLmNvbnRhaW5zKG5vbkV4cGFuZGFibGUsIHJvd0lkKVxuICAgICAgKTtcblxuICAgICAgY29uc3QgaXNDbG9zaW5nID0gcHJldlN0YXRlLmV4cGFuZGVkLnJlZHVjZSgoYWNjOiBhbnksIGN1cjogYW55KSA9PiB7XG4gICAgICAgIGlmICghXy5jb250YWlucyhuZXh0RXhwYW5kZWQsIGN1cikpIHtcbiAgICAgICAgICBhY2MucHVzaChjdXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCBbXSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4cGFuZGVkOiBuZXh0RXhwYW5kZWQsXG4gICAgICAgIGlzQ2xvc2luZyxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwcmV2U3RhdGU7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlUm93RXhwYW5kID0gKFxuICAgIHJvd0tleTogYW55LFxuICAgIGlzRXhwYW5kZWQ6IGJvb2xlYW4sXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBlOiBhbnlcbiAgKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgZGF0YSxcbiAgICAgIGtleUZpZWxkLFxuICAgICAgZXhwYW5kUm93OiB7IG9uRXhwYW5kLCBvbmx5T25lRXhwYW5kaW5nLCBub25FeHBhbmRhYmxlIH0sXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAobm9uRXhwYW5kYWJsZSAmJiBfLmNvbnRhaW5zKG5vbkV4cGFuZGFibGUsIHJvd0tleSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgY3VyckV4cGFuZGVkID0gWy4uLnRoaXMuc3RhdGUuZXhwYW5kZWRdO1xuICAgIGxldCBjdXJySXNDbG9zaW5nID0gWy4uLnRoaXMuc3RhdGUuaXNDbG9zaW5nXTtcblxuICAgIGlmIChpc0V4cGFuZGVkKSB7XG4gICAgICBpZiAob25seU9uZUV4cGFuZGluZykge1xuICAgICAgICBjdXJySXNDbG9zaW5nID0gY3VycklzQ2xvc2luZy5jb25jYXQoY3VyckV4cGFuZGVkKTtcbiAgICAgICAgY3VyckV4cGFuZGVkID0gW3Jvd0tleV07XG4gICAgICB9IGVsc2UgY3VyckV4cGFuZGVkLnB1c2gocm93S2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycklzQ2xvc2luZy5wdXNoKHJvd0tleSk7XG4gICAgICBjdXJyRXhwYW5kZWQgPSBjdXJyRXhwYW5kZWQuZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUgIT09IHJvd0tleSk7XG4gICAgfVxuXG4gICAgaWYgKG9uRXhwYW5kKSB7XG4gICAgICBjb25zdCByb3cgPSBkYXRhT3BlcmF0b3IuZ2V0Um93QnlSb3dJZChkYXRhLCBrZXlGaWVsZCwgcm93S2V5KTtcbiAgICAgIG9uRXhwYW5kKHJvdywgaXNFeHBhbmRlZCwgcm93SW5kZXgsIGUpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHsgZXhwYW5kZWQ6IGN1cnJFeHBhbmRlZCwgaXNDbG9zaW5nOiBjdXJySXNDbG9zaW5nIH0pKTtcbiAgfTtcblxuICBoYW5kbGVBbGxSb3dFeHBhbmQgPSAoZTogYW55LCBleHBhbmRBbGw6IGJvb2xlYW4pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBkYXRhLFxuICAgICAga2V5RmllbGQsXG4gICAgICBleHBhbmRSb3c6IHsgb25FeHBhbmRBbGwsIG5vbkV4cGFuZGFibGUgfSxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHsgZXhwYW5kZWQgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICBsZXQgY3VyckV4cGFuZGVkOiBhbnlbXTtcblxuICAgIGlmIChleHBhbmRBbGwpIHtcbiAgICAgIGN1cnJFeHBhbmRlZCA9IGV4cGFuZGVkLmNvbmNhdChcbiAgICAgICAgZGF0YU9wZXJhdG9yLmV4cGFuZGFibGVLZXlzKGRhdGEsIGtleUZpZWxkLCBub25FeHBhbmRhYmxlKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VyckV4cGFuZGVkID0gZXhwYW5kZWQuZmlsdGVyKFxuICAgICAgICAocykgPT4gdHlwZW9mIGRhdGEuZmluZCgoZCkgPT4gXy5nZXQoZCwga2V5RmllbGQpID09PSBzKSA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAob25FeHBhbmRBbGwpIHtcbiAgICAgIG9uRXhwYW5kQWxsKFxuICAgICAgICBleHBhbmRBbGwsXG4gICAgICAgIGRhdGFPcGVyYXRvci5nZXRFeHBhbmRlZFJvd3MoZGF0YSwga2V5RmllbGQsIGN1cnJFeHBhbmRlZCksXG4gICAgICAgIGVcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyBleHBhbmRlZDogY3VyckV4cGFuZGVkIH0pKTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBkYXRhLCBrZXlGaWVsZCB9ID0gdGhpcy5wcm9wcztcblxuICAgIHJldHVybiAoXG4gICAgICA8Um93RXhwYW5kQ29udGV4dC5Qcm92aWRlclxuICAgICAgICB2YWx1ZT17e1xuICAgICAgICAgIC4uLnRoaXMucHJvcHMuZXhwYW5kUm93LFxuICAgICAgICAgIG5vbkV4cGFuZGFibGU6IHRoaXMucHJvcHMuZXhwYW5kUm93Lm5vbkV4cGFuZGFibGUsXG4gICAgICAgICAgZXhwYW5kZWQ6IHRoaXMuc3RhdGUuZXhwYW5kZWQsXG4gICAgICAgICAgaXNDbG9zaW5nOiB0aGlzLnN0YXRlLmlzQ2xvc2luZyxcbiAgICAgICAgICBvbkNsb3NlZDogdGhpcy5vbkNsb3NlZCxcbiAgICAgICAgICBpc0FueUV4cGFuZHM6IGRhdGFPcGVyYXRvci5pc0FueUV4cGFuZHMoXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAga2V5RmllbGQsXG4gICAgICAgICAgICB0aGlzLnN0YXRlLmV4cGFuZGVkXG4gICAgICAgICAgKSxcbiAgICAgICAgICBvblJvd0V4cGFuZDogdGhpcy5oYW5kbGVSb3dFeHBhbmQsXG4gICAgICAgICAgb25BbGxSb3dFeHBhbmQ6IHRoaXMuaGFuZGxlQWxsUm93RXhwYW5kLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgIDwvUm93RXhwYW5kQ29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+ICh7XG4gIFByb3ZpZGVyOiBSb3dFeHBhbmRQcm92aWRlcixcbiAgQ29uc3VtZXI6IFJvd0V4cGFuZENvbnRleHQuQ29uc3VtZXIsXG59KTtcbiIsImltcG9ydCBSZWFjdCwgeyBGQywgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmludGVyZmFjZSBDYXB0aW9uUHJvcHMge1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgYm9vdHN0cmFwND86IGJvb2xlYW47XG59XG5cbmNvbnN0IENhcHRpb246IEZDPENhcHRpb25Qcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgaWYgKCFwcm9wcy5jaGlsZHJlbikgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgY2FwdGlvbiA9IHByb3BzLmJvb3RzdHJhcDQgPyAoXG4gICAgPGNhcHRpb24gc3R5bGU9eyB7IGNhcHRpb25TaWRlOiBcInRvcFwiIH0gfT57cHJvcHMuY2hpbGRyZW59PC9jYXB0aW9uPlxuICApIDogKFxuICAgIDxjYXB0aW9uPntwcm9wcy5jaGlsZHJlbn08L2NhcHRpb24+XG4gICk7XG5cbiAgcmV0dXJuIGNhcHRpb247XG59O1xuXG4vLyBDYXB0aW9uLnByb3BUeXBlcyA9IHtcbi8vICAgY2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuLy8gICAgIFByb3BUeXBlcy5ub2RlLFxuLy8gICAgIFByb3BUeXBlcy5zdHJpbmdcbi8vICAgXSksXG4vLyAgIGJvb3RzdHJhcDQ6IFByb3BUeXBlcy5ib29sXG4vLyB9O1xuXG5leHBvcnQgZGVmYXVsdCBDYXB0aW9uO1xuIiwiaW1wb3J0IF8gZnJvbSBcIi4vdXRpbHNcIjtcblxuY29uc3QgZXZlbnRzOiBzdHJpbmdbXSA9IFtcbiAgXCJvbkNsaWNrXCIsXG4gIFwib25Eb3VibGVDbGlja1wiLFxuICBcIm9uTW91c2VFbnRlclwiLFxuICBcIm9uTW91c2VMZWF2ZVwiLFxuICBcIm9uQ29udGV4dE1lbnVcIixcbiAgXCJvbkF1eENsaWNrXCJcbl07XG5cbmludGVyZmFjZSBDZWxsRXZlbnREZWxlZ2F0ZXJQcm9wcyB7XG4gIGNvbHVtbjogYW55O1xuICBjb2x1bW5JbmRleD86IG51bWJlcjtcbiAgaW5kZXg6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IENlbGxFdmVudERlbGVnYXRlciA9IDxcbiAgVCBleHRlbmRzIG5ldyAoLi4uYXJnczogYW55W10pID0+IGFueVxuPihFeHRlbmRCYXNlOiBUKSA9PiB7XG4gIHJldHVybiBjbGFzcyBleHRlbmRzIEV4dGVuZEJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKC4uLnByb3BzOiBhbnlbXSkge1xuICAgICAgc3VwZXIoLi4ucHJvcHMpO1xuICAgICAgdGhpcy5jcmVhdGVEZWZhdWx0RXZlbnRIYW5kbGVyID1cbiAgICAgICAgdGhpcy5jcmVhdGVEZWZhdWx0RXZlbnRIYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgY3JlYXRlRGVmYXVsdEV2ZW50SGFuZGxlcihcbiAgICAgIGNiOiAoZTogYW55LCBjb2x1bW46IGFueSwgY29sdW1uSW5kZXg6IG51bWJlcikgPT4gdm9pZFxuICAgICkge1xuICAgICAgcmV0dXJuIChlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgeyBjb2x1bW4sIGNvbHVtbkluZGV4LCBpbmRleCB9OiBDZWxsRXZlbnREZWxlZ2F0ZXJQcm9wcyA9XG4gICAgICAgICAgdGhpcy5wcm9wcztcbiAgICAgICAgY2IoZSwgY29sdW1uLCB0eXBlb2YgY29sdW1uSW5kZXggIT09IFwidW5kZWZpbmVkXCIgPyBjb2x1bW5JbmRleCA6IGluZGV4KTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZGVsZWdhdGUoYXR0cnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgICAgY29uc3QgbmV3QXR0cnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7IC4uLmF0dHJzIH07XG4gICAgICBPYmplY3Qua2V5cyhhdHRycykuZm9yRWFjaCgoYXR0cikgPT4ge1xuICAgICAgICBpZiAoXy5pbmNsdWRlcyhldmVudHMsIGF0dHIpKSB7XG4gICAgICAgICAgbmV3QXR0cnNbYXR0cl0gPSB0aGlzLmNyZWF0ZURlZmF1bHRFdmVudEhhbmRsZXIoYXR0cnNbYXR0cl0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXdBdHRycztcbiAgICB9XG4gIH07XG59XG4iLCJpbXBvcnQgUmVhY3QsIHsgRkMgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJvb3RzdHJhcENvbnRleHQgfSBmcm9tIFwiLi4vY29udGV4dHMvYm9vdHN0cmFwXCI7XG5cbmNvbnN0IFNvcnRTeW1ib2w6IEZDID0gKCkgPT4gKFxuICA8Qm9vdHN0cmFwQ29udGV4dC5Db25zdW1lcj5cbiAgICB7KHsgYm9vdHN0cmFwNCB9KSA9PlxuICAgICAgYm9vdHN0cmFwNCA/IChcbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwib3JkZXItNFwiIC8+XG4gICAgICApIDogKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJvcmRlclwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImRyb3Bkb3duXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJjYXJldFwiIC8+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImRyb3B1cFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiY2FyZXRcIiAvPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKVxuICAgIH1cbiAgPC9Cb290c3RyYXBDb250ZXh0LkNvbnN1bWVyPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgU29ydFN5bWJvbDtcbiIsImltcG9ydCB7IFRZUEVfQk9PTEVBTiwgVFlQRV9EQVRFLCBUWVBFX05VTUJFUiwgVFlQRV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RcIjtcblxuZXhwb3J0IGNvbnN0IHR5cGVDb252ZXJ0ID0gKHR5cGU6IGFueSwgdmFsdWU6IGFueSkgPT4ge1xuICBpZiAodHlwZSA9PT0gVFlQRV9TVFJJTkcpIHtcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBUWVBFX05VTUJFUikge1xuICAgIHJldHVybiBOdW1iZXIodmFsdWUpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IFRZUEVfQk9PTEVBTikge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZSA9PT0gXCJ0cnVlXCI7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gVFlQRV9EQVRFKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59O1xuIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgQ2VsbCBmcm9tIFwiLi4vY2VsbFwiO1xuaW1wb3J0IF8gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBSb3dQcm9wcyB9IGZyb20gXCIuL3Nob3VsZC11cGRhdGVyXCI7XG5cbmludGVyZmFjZSBSb3dQdXJlQ29udGVudFByb3BzIGV4dGVuZHMgUm93UHJvcHMge1xuICBhdHN0YXJ0PzogKHJvd0luZGV4OiBudW1iZXIsIGNvbHVtbkluZGV4OiBudW1iZXIpID0+IHZvaWQ7XG4gIHNob3VsZFVwZGF0ZT86IGJvb2xlYW47XG4gIGlzRWRpdGFibGU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSb3dQdXJlQ29udGVudCBleHRlbmRzIENvbXBvbmVudDxSb3dQdXJlQ29udGVudFByb3BzPiB7XG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6IFJvd1B1cmVDb250ZW50UHJvcHMpIHtcbiAgICBpZiAodHlwZW9mIG5leHRQcm9wcy5zaG91bGRVcGRhdGUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHJldHVybiBuZXh0UHJvcHMuc2hvdWxkVXBkYXRlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICByb3csXG4gICAgICBrZXlGaWVsZCxcbiAgICAgIGNvbHVtbnMsXG4gICAgICByb3dJbmRleCxcbiAgICAgIGlzRWRpdGFibGUsXG4gICAgICBlZGl0aW5nUm93SWR4LFxuICAgICAgZWRpdGluZ0NvbElkeCxcbiAgICAgIGF0c3RhcnQsXG4gICAgICBjbGlja1RvRWRpdCxcbiAgICAgIGRiY2xpY2tUb0VkaXQsXG4gICAgICBFZGl0aW5nQ2VsbENvbXBvbmVudCxcbiAgICAgIHRhYkluZGV4U3RhcnQsXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBsZXQgdGFiSW5kZXggPSB0YWJJbmRleFN0YXJ0O1xuXG4gICAgcmV0dXJuIGNvbHVtbnM/Lm1hcCgoY29sdW1uLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgeyBkYXRhRmllbGQgfSA9IGNvbHVtbjtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBfLmdldChyb3csIGRhdGFGaWVsZCk7XG4gICAgICBpZiAoXG4gICAgICAgIHJvd0luZGV4ID09PSBlZGl0aW5nUm93SWR4ICYmXG4gICAgICAgIGluZGV4ID09PSBlZGl0aW5nQ29sSWR4ICYmXG4gICAgICAgIEVkaXRpbmdDZWxsQ29tcG9uZW50XG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8RWRpdGluZ0NlbGxDb21wb25lbnRcbiAgICAgICAgICAgIGtleT17YCR7Y29udGVudH0tJHtpbmRleH0tZWRpdGluZ2B9XG4gICAgICAgICAgICByb3c9e3Jvd31cbiAgICAgICAgICAgIHJvd0luZGV4PXtyb3dJbmRleH1cbiAgICAgICAgICAgIGNvbHVtbj17Y29sdW1ufVxuICAgICAgICAgICAgY29sdW1uSW5kZXg9e2luZGV4fVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICAvLyByZW5kZXIgY2VsbFxuICAgICAgbGV0IGNlbGxUaXRsZTtcbiAgICAgIGxldCBjZWxsU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7fTtcbiAgICAgIGxldCBjZWxsQXR0cnM6IFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZUNlbGxFbGVtZW50PiA9IHt9O1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW4uYXR0cnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjZWxsQXR0cnMgPSB7IC4uLmNvbHVtbi5hdHRycyhjb250ZW50LCByb3csIHJvd0luZGV4LCBpbmRleCkgfTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbHVtbi5hdHRycyA9PT0gXCJvYmplY3RcIiAmJiBjb2x1bW4uYXR0cnMgIT09IG51bGwpIHtcbiAgICAgICAgY2VsbEF0dHJzID0geyAuLi5jb2x1bW4uYXR0cnMgfTtcbiAgICAgIH1cblxuXG4gICAgICBpZiAoY29sdW1uLmV2ZW50cykge1xuICAgICAgICBjb25zdCBldmVudHMgPSB7IC4uLmNvbHVtbi5ldmVudHMgfTtcbiAgICAgICAgT2JqZWN0LmtleXMoZXZlbnRzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICBjb25zdCBvcmlnaW5GbiA9IGV2ZW50c1trZXldO1xuICAgICAgICAgIGV2ZW50c1trZXldID0gKC4uLnJlc3Q6IGFueVtdKSA9PiBvcmlnaW5GbiguLi5yZXN0LCByb3csIHJvd0luZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNlbGxBdHRycyA9IHsgLi4uY2VsbEF0dHJzLCAuLi5ldmVudHMgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2VsbENsYXNzZXMgPSBfLmlzRnVuY3Rpb24oY29sdW1uLmNsYXNzZXMpXG4gICAgICAgID8gY29sdW1uLmNsYXNzZXMoY29udGVudCwgcm93LCByb3dJbmRleCwgaW5kZXgpXG4gICAgICAgIDogY29sdW1uLmNsYXNzZXM7XG5cbiAgICAgIGlmIChjb2x1bW4uc3R5bGUpIHtcbiAgICAgICAgY2VsbFN0eWxlID0gXy5pc0Z1bmN0aW9uKGNvbHVtbi5zdHlsZSlcbiAgICAgICAgICA/IGNvbHVtbi5zdHlsZShjb250ZW50LCByb3csIHJvd0luZGV4LCBpbmRleClcbiAgICAgICAgICA6IGNvbHVtbi5zdHlsZTtcbiAgICAgICAgY2VsbFN0eWxlID0geyAuLi5jZWxsU3R5bGUgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbHVtbi50aXRsZSkge1xuICAgICAgICBjZWxsVGl0bGUgPSBfLmlzRnVuY3Rpb24oY29sdW1uLnRpdGxlKVxuICAgICAgICAgID8gY29sdW1uLnRpdGxlKGNvbnRlbnQsIHJvdywgcm93SW5kZXgsIGluZGV4KVxuICAgICAgICAgIDogY29udGVudDtcbiAgICAgICAgY2VsbEF0dHJzLnRpdGxlID0gY2VsbFRpdGxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29sdW1uLmFsaWduKSB7XG4gICAgICAgIGNlbGxTdHlsZS50ZXh0QWxpZ24gPSBfLmlzRnVuY3Rpb24oY29sdW1uLmFsaWduKVxuICAgICAgICAgID8gY29sdW1uLmFsaWduKGNvbnRlbnQsIHJvdywgcm93SW5kZXgsIGluZGV4KVxuICAgICAgICAgIDogY29sdW1uLmFsaWduO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2VsbENsYXNzZXMpIGNlbGxBdHRycy5jbGFzc05hbWUgPSBjZWxsQ2xhc3NlcztcbiAgICAgIGlmICghXy5pc0VtcHR5T2JqZWN0KGNlbGxTdHlsZSkpIGNlbGxBdHRycy5zdHlsZSA9IGNlbGxTdHlsZTtcblxuICAgICAgbGV0IGVkaXRhYmxlQ2VsbCA9IF8uaXNEZWZpbmVkKGNvbHVtbi5lZGl0YWJsZSkgPyBjb2x1bW4uZWRpdGFibGUgOiB0cnVlO1xuICAgICAgaWYgKGNvbHVtbi5kYXRhRmllbGQgPT09IGtleUZpZWxkIHx8ICFpc0VkaXRhYmxlKSBlZGl0YWJsZUNlbGwgPSBmYWxzZTtcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24oY29sdW1uLmVkaXRhYmxlKSkge1xuICAgICAgICBlZGl0YWJsZUNlbGwgPSBjb2x1bW4uZWRpdGFibGUoY29udGVudCwgcm93LCByb3dJbmRleCwgaW5kZXgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHRhYkluZGV4U3RhcnQgPT09ICdudW1iZXInICYmIHRhYkluZGV4U3RhcnQgIT09IC0xKSB7XG4gICAgICAgIGNlbGxBdHRycy50YWJJbmRleCA9IHRhYkluZGV4ITtcbiAgICAgICAgdGFiSW5kZXggPSB0YWJJbmRleCEgKyAxO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Q2VsbFxuICAgICAgICAgIGtleT17YCR7Y29udGVudH0tJHtpbmRleH1gfVxuICAgICAgICAgIHJvdz17cm93fVxuICAgICAgICAgIGVkaXRhYmxlPXtlZGl0YWJsZUNlbGwudG9TdHJpbmcoKX1cbiAgICAgICAgICByb3dpbmRleD17cm93SW5kZXggPz8gMH1cbiAgICAgICAgICBjb2x1bW5pbmRleD17aW5kZXh9XG4gICAgICAgICAgY29sdW1uPXtjb2x1bW59XG4gICAgICAgICAgYXRzdGFydD17YXRzdGFydH1cbiAgICAgICAgICBjbGlja3RvZWRpdD17Y2xpY2tUb0VkaXQgPyBjbGlja1RvRWRpdC50b1N0cmluZygpIDogXCJmYWxzZVwifVxuICAgICAgICAgIGRiY2xpY2t0b2VkaXQ9e2RiY2xpY2tUb0VkaXQgPyBkYmNsaWNrVG9FZGl0LnRvU3RyaW5nKCkgOiBcImZhbHNlXCJ9XG4gICAgICAgICAgey4uLmNlbGxBdHRyc31cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIENvbHVtblByb3ZpZGVyUHJvcHMge1xuICBkYXRhOiBhbnk7XG4gIGNvbHVtbnM6IGFueVtdO1xuICB0b2dnbGVzPzogeyBbZGF0YUZpZWxkOiBzdHJpbmddOiBib29sZWFuIH07XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG59XG5cbmludGVyZmFjZSBDb2x1bW5Db250ZXh0VmFsdWUge1xuICBjb2x1bW5zOiBhbnlbXTtcbiAgdG9nZ2xlcz86IHsgW2RhdGFGaWVsZDogc3RyaW5nXTogYm9vbGVhbiB9O1xufVxuXG5jb25zdCBkZWZhdWx0Q29sdW1uQ29udGV4dCA9IHsgY29sdW1uczogW10sIHRvZ2dsZXM6IHVuZGVmaW5lZCB9O1xuY29uc3QgQ29sdW1uQ29udGV4dCA9XG4gIFJlYWN0LmNyZWF0ZUNvbnRleHQ8Q29sdW1uQ29udGV4dFZhbHVlPihkZWZhdWx0Q29sdW1uQ29udGV4dCk7XG5cbmNvbnN0IENvbHVtblByb3ZpZGVyOiBSZWFjdC5GQzxDb2x1bW5Qcm92aWRlclByb3BzPiA9ICh7XG4gIGNvbHVtbnMsXG4gIHRvZ2dsZXMsXG4gIGNoaWxkcmVuLFxufSkgPT4ge1xuICBsZXQgdG9nZ2xlQ29sdW1ucztcblxuICBpZiAodG9nZ2xlcykge1xuICAgIHRvZ2dsZUNvbHVtbnMgPSBjb2x1bW5zLmZpbHRlcigoY29sdW1uKSA9PiB0b2dnbGVzW2NvbHVtbi5kYXRhRmllbGRdKTtcbiAgfSBlbHNlIHtcbiAgICB0b2dnbGVDb2x1bW5zID0gY29sdW1ucy5maWx0ZXIoKGNvbHVtbikgPT4gIWNvbHVtbi5oaWRkZW4pO1xuICB9XG4gIHJldHVybiAoXG4gICAgPENvbHVtbkNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3sgY29sdW1uczogdG9nZ2xlQ29sdW1ucyB9fT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0NvbHVtbkNvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiAoe1xuICBQcm92aWRlcjogQ29sdW1uUHJvdmlkZXIsXG4gIENvbnN1bWVyOiBDb2x1bW5Db250ZXh0LkNvbnN1bWVyLFxufSk7XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IFJvd0V2ZW50RGVsZWdhdGVyIH0gZnJvbSBcIi4vZXZlbnQtZGVsZWdhdGVyXCI7XG5pbXBvcnQgUm93UHVyZUNvbnRlbnQgZnJvbSBcIi4vcm93LXB1cmUtY29udGVudFwiO1xuaW1wb3J0IHNob3VsZFVwZGF0ZXIsIHsgUm93UHJvcHMgfSBmcm9tIFwiLi9zaG91bGQtdXBkYXRlclwiO1xuXG5jbGFzcyBTaW1wbGVSb3cgZXh0ZW5kcyBzaG91bGRVcGRhdGVyKFxuICBSb3dFdmVudERlbGVnYXRlcihDb21wb25lbnQ8Um93UHJvcHM+KVxuKSB7XG4gIHNob3VsZFVwZGF0ZVJvd0NvbnRlbnQgPSBmYWxzZTtcblxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBSb3dQcm9wcykge1xuICAgIHRoaXMuc2hvdWxkVXBkYXRlUm93Q29udGVudCA9IGZhbHNlO1xuICAgIHRoaXMuc2hvdWxkVXBkYXRlUm93Q29udGVudCA9IHRoaXMuc2hvdWxkUm93Q29udGVudFVwZGF0ZShuZXh0UHJvcHMpO1xuICAgIGlmICh0aGlzLnNob3VsZFVwZGF0ZVJvd0NvbnRlbnQpIHJldHVybiB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMuc2hvdWxkVXBkYXRlZEJ5U2VsZlByb3BzKG5leHRQcm9wcyk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgZWRpdGFibGUgPSB0cnVlLFxuICAgICAgY2xhc3NOYW1lID0gdW5kZWZpbmVkLFxuICAgICAgc3R5bGUgPSB7fSxcbiAgICAgIGF0dHJzID0ge30sXG4gICAgICB2aXNpYmxlQ29sdW1uU2l6ZSxcbiAgICAgIHRhYkluZGV4Q2VsbCxcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB0ckF0dHJzID0gdGhpcy5kZWxlZ2F0ZShhdHRycyk7XG4gICAgY29uc3QgdGFiSW5kZXhTdGFydCA9IHRoaXMucHJvcHMucm93SW5kZXghICogdmlzaWJsZUNvbHVtblNpemUhICsgMTtcblxuICAgIHJldHVybiAoXG4gICAgICA8dHIgc3R5bGU9e3N0eWxlfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0gey4uLnRyQXR0cnN9PlxuICAgICAgICA8Um93UHVyZUNvbnRlbnRcbiAgICAgICAgICBzaG91bGRVcGRhdGU9e3RoaXMuc2hvdWxkVXBkYXRlUm93Q29udGVudH1cbiAgICAgICAgICB0YWJJbmRleFN0YXJ0PXt0YWJJbmRleENlbGwgPyB0YWJJbmRleFN0YXJ0IDogLTF9XG4gICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgIC8+XG4gICAgICA8L3RyPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2ltcGxlUm93O1xuIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcblxuaW50ZXJmYWNlIEZpbHRlclByb3BzIHtcbiAgZGF0YTogYW55O1xuICBjdXJyRmlsdGVyczogYW55O1xufVxuXG5pbnRlcmZhY2UgU2VhcmNoUHJvcHMge1xuICBkYXRhOiBhbnk7XG59XG5cbmludGVyZmFjZSBTb3J0UHJvcHMge1xuICBkYXRhOiBhbnk7XG59XG5cbmludGVyZmFjZSBQYWdpbmF0aW9uUHJvcHMge1xuICBkYXRhOiBhbnk7XG59XG5cbi8vXG5pbnRlcmZhY2UgRGF0YVByb3ZpZGVyUHJvcHMge1xuICBkYXRhOiBhbnlbXTtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbn1cblxuaW50ZXJmYWNlIERhdGFQcm92aWRlclN0YXRlIHtcbiAgZGF0YTogYW55W107XG59XG5cbmludGVyZmFjZSBEYXRhQ29udGV4dFZhbHVlIHtcbiAgZGF0YTogYW55W107XG4gIGdldERhdGE6IChcbiAgICBmaWx0ZXJQcm9wcz86IEZpbHRlclByb3BzLFxuICAgIHNlYXJjaFByb3BzPzogU2VhcmNoUHJvcHMsXG4gICAgc29ydFByb3BzPzogU29ydFByb3BzLFxuICAgIHBhZ2luYXRpb25Qcm9wcz86IFBhZ2luYXRpb25Qcm9wc1xuICApID0+IGFueVtdO1xufVxuXG5jb25zdCBkZWZhdWx0RGF0YUNvbnRleHQgPSB7IGRhdGE6IFtdLCBnZXREYXRhOiAoKSA9PiBbXSB9O1xuY29uc3QgRGF0YUNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PERhdGFDb250ZXh0VmFsdWU+KGRlZmF1bHREYXRhQ29udGV4dCk7XG5cbmNsYXNzIERhdGFQcm92aWRlciBleHRlbmRzIENvbXBvbmVudDxEYXRhUHJvdmlkZXJQcm9wcywgRGF0YVByb3ZpZGVyU3RhdGU+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IERhdGFQcm92aWRlclByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7IGRhdGE6IHByb3BzLmRhdGEgfTtcbiAgfVxuXG4gIGdldERhdGEgPSAoXG4gICAgZmlsdGVyUHJvcHM/OiBGaWx0ZXJQcm9wcyxcbiAgICBzZWFyY2hQcm9wcz86IFNlYXJjaFByb3BzLFxuICAgIHNvcnRQcm9wcz86IFNvcnRQcm9wcyxcbiAgICBwYWdpbmF0aW9uUHJvcHM/OiBQYWdpbmF0aW9uUHJvcHNcbiAgKSA9PiB7XG4gICAgaWYgKHBhZ2luYXRpb25Qcm9wcykge1xuICAgICAgcmV0dXJuIHBhZ2luYXRpb25Qcm9wcy5kYXRhO1xuICAgIH0gZWxzZSBpZiAoc29ydFByb3BzKSB7XG4gICAgICByZXR1cm4gc29ydFByb3BzLmRhdGE7XG4gICAgfSBlbHNlIGlmIChzZWFyY2hQcm9wcykge1xuICAgICAgcmV0dXJuIHNlYXJjaFByb3BzLmRhdGE7XG4gICAgfSBlbHNlIGlmIChmaWx0ZXJQcm9wcykge1xuICAgICAgaWYgKFxuICAgICAgICBmaWx0ZXJQcm9wcy5kYXRhLmxlbmd0aCA8IHRoaXMucHJvcHMuZGF0YS5sZW5ndGggJiZcbiAgICAgICAgIV8uaXNFbXB0eShPYmplY3Qua2V5cyhmaWx0ZXJQcm9wcy5jdXJyRmlsdGVycykpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlclByb3BzLmRhdGE7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8RGF0YUNvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgdmFsdWU9e3tcbiAgICAgICAgICBkYXRhOiB0aGlzLnN0YXRlLmRhdGEsXG4gICAgICAgICAgZ2V0RGF0YTogdGhpcy5nZXREYXRhLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgIDwvRGF0YUNvbnRleHQuUHJvdmlkZXI+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiAoe1xuICBQcm92aWRlcjogRGF0YVByb3ZpZGVyLFxuICBDb25zdW1lcjogRGF0YUNvbnRleHQuQ29uc3VtZXIsXG59KTtcbiIsImltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlU2VsZWN0aW9uQ29udGV4dCB9IGZyb20gXCIuLi9jb250ZXh0cy9zZWxlY3Rpb24tY29udGV4dFwiO1xuaW1wb3J0IF8gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IFNlbGVjdGlvbkNvbnRleHQgPSBjcmVhdGVTZWxlY3Rpb25Db250ZXh0KCk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHdpdGhSb3dTZWxlY3Rpb248VCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudFR5cGU8YW55Pj4oXG4gIENvbXBvbmVudDogVFxuKTogUmVhY3QuRkM8UmVhY3QuQ29tcG9uZW50UHJvcHM8VD4+IHtcbiAgY29uc3QgcmVuZGVyV2l0aFNlbGVjdGlvbiA9IChwcm9wczogYW55LCBzZWxlY3RSb3c6IGFueSkgPT4ge1xuICAgIGNvbnN0IGtleSA9IHByb3BzLnZhbHVlO1xuICAgIGNvbnN0IHNlbGVjdGVkID0gXy5jb250YWlucyhzZWxlY3RSb3cuc2VsZWN0ZWQsIGtleSk7XG4gICAgY29uc3Qgc2VsZWN0YWJsZSA9XG4gICAgICAhc2VsZWN0Um93Lm5vblNlbGVjdGFibGUgfHwgIV8uY29udGFpbnMoc2VsZWN0Um93Lm5vblNlbGVjdGFibGUsIGtleSk7XG4gICAgY29uc3Qgbm90U2VsZWN0YWJsZSA9IF8uY29udGFpbnMoc2VsZWN0Um93Lm5vblNlbGVjdGFibGUsIGtleSk7XG5cbiAgICBsZXQgeyBzdHlsZSwgY2xhc3NOYW1lIH0gPSBwcm9wcztcblxuICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRTdHlsZSA9IF8uaXNGdW5jdGlvbihzZWxlY3RSb3cuc3R5bGUpXG4gICAgICAgID8gc2VsZWN0Um93LnN0eWxlKHByb3BzLnJvdywgcHJvcHMucm93SW5kZXgpXG4gICAgICAgIDogc2VsZWN0Um93LnN0eWxlO1xuXG4gICAgICBjb25zdCBzZWxlY3RlZENsYXNzZXMgPSBfLmlzRnVuY3Rpb24oc2VsZWN0Um93LmNsYXNzZXMpXG4gICAgICAgID8gc2VsZWN0Um93LmNsYXNzZXMocHJvcHMucm93LCBwcm9wcy5yb3dJbmRleClcbiAgICAgICAgOiBzZWxlY3RSb3cuY2xhc3NlcztcblxuICAgICAgc3R5bGUgPSB7XG4gICAgICAgIC4uLnN0eWxlLFxuICAgICAgICAuLi5zZWxlY3RlZFN0eWxlLFxuICAgICAgfTtcbiAgICAgIGNsYXNzTmFtZSA9IGNzKGNsYXNzTmFtZSwgc2VsZWN0ZWRDbGFzc2VzKSB8fCB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChzZWxlY3RSb3cuYmdDb2xvcikge1xuICAgICAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBfLmlzRnVuY3Rpb24oc2VsZWN0Um93LmJnQ29sb3IpXG4gICAgICAgICAgPyBzZWxlY3RSb3cuYmdDb2xvcihwcm9wcy5yb3csIHByb3BzLnJvd0luZGV4KVxuICAgICAgICAgIDogc2VsZWN0Um93LmJnQ29sb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5vdFNlbGVjdGFibGUpIHtcbiAgICAgIGNvbnN0IG5vdFNlbGVjdGFibGVTdHlsZSA9IF8uaXNGdW5jdGlvbihzZWxlY3RSb3cubm9uU2VsZWN0YWJsZVN0eWxlKVxuICAgICAgICA/IHNlbGVjdFJvdy5ub25TZWxlY3RhYmxlU3R5bGUocHJvcHMucm93LCBwcm9wcy5yb3dJbmRleClcbiAgICAgICAgOiBzZWxlY3RSb3cubm9uU2VsZWN0YWJsZVN0eWxlO1xuXG4gICAgICBjb25zdCBub3RTZWxlY3RhYmxlQ2xhc3NlcyA9IF8uaXNGdW5jdGlvbihzZWxlY3RSb3cubm9uU2VsZWN0YWJsZUNsYXNzZXMpXG4gICAgICAgID8gc2VsZWN0Um93Lm5vblNlbGVjdGFibGVDbGFzc2VzKHByb3BzLnJvdywgcHJvcHMucm93SW5kZXgpXG4gICAgICAgIDogc2VsZWN0Um93Lm5vblNlbGVjdGFibGVDbGFzc2VzO1xuXG4gICAgICBzdHlsZSA9IHtcbiAgICAgICAgLi4uc3R5bGUsXG4gICAgICAgIC4uLm5vdFNlbGVjdGFibGVTdHlsZSxcbiAgICAgIH07XG4gICAgICBjbGFzc05hbWUgPSBjcyhjbGFzc05hbWUsIG5vdFNlbGVjdGFibGVDbGFzc2VzKSB8fCB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxDb21wb25lbnRcbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICBzZWxlY3RSb3c9e3NlbGVjdFJvd31cbiAgICAgICAgc2VsZWN0ZWQ9e3NlbGVjdGVkfVxuICAgICAgICBzZWxlY3RhYmxlPXtzZWxlY3RhYmxlfVxuICAgICAgLz5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IFdpdGhTZWxlY3Rpb25Sb3dDb25zdW1lcjogUmVhY3QuRkM8UmVhY3QuQ29tcG9uZW50UHJvcHM8VD4+ID0gKFxuICAgIHByb3BzXG4gICkgPT4gKFxuICAgIDxTZWxlY3Rpb25Db250ZXh0LkNvbnN1bWVyPlxuICAgICAgeyhzZWxlY3RSb3cpID0+IHJlbmRlcldpdGhTZWxlY3Rpb24ocHJvcHMsIHNlbGVjdFJvdyl9XG4gICAgPC9TZWxlY3Rpb25Db250ZXh0LkNvbnN1bWVyPlxuICApO1xuXG4gIFdpdGhTZWxlY3Rpb25Sb3dDb25zdW1lci5kaXNwbGF5TmFtZSA9IFwiV2l0aFNlbGVjdGlvblJvd0NvbnN1bWVyXCI7XG4gIHJldHVybiBXaXRoU2VsZWN0aW9uUm93Q29uc3VtZXI7XG59XG4iLCIvKiBlc2xpbnQgbm8tbmVzdGVkLXRlcm5hcnk6IDAgKi9cbi8qIGVzbGludCBuby1sb25lbHktaWY6IDAgKi9cbi8qIGVzbGludCBuby11bmRlcnNjb3JlLWRhbmdsZTogMCAqL1xuaW1wb3J0IHsgU09SVF9BU0MsIFNPUlRfREVTQyB9IGZyb20gXCIuLi9jb25zdFwiO1xuaW1wb3J0IF8gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmZ1bmN0aW9uIGNvbXBhcmF0b3IoYTogYW55LCBiOiBhbnkpIHtcbiAgbGV0IHJlc3VsdDtcbiAgaWYgKHR5cGVvZiBiID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmVzdWx0ID0gYi5sb2NhbGVDb21wYXJlKGEpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9IGEgPiBiID8gLTEgOiBhIDwgYiA/IDEgOiAwO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBjb25zdCBzb3J0ID0gKFxuICBkYXRhOiBhbnksXG4gIHNvcnRPcmRlcjogYW55LFxuICB7IGRhdGFGaWVsZCwgc29ydEZ1bmMsIHNvcnRWYWx1ZSB9OiBhbnlcbikgPT4ge1xuICBjb25zdCBfZGF0YSA9IFsuLi5kYXRhXTtcbiAgX2RhdGEuc29ydCgoYSwgYikgPT4ge1xuICAgIGxldCByZXN1bHQ7XG4gICAgbGV0IHZhbHVlQSA9IF8uZ2V0KGEsIGRhdGFGaWVsZCk7XG4gICAgbGV0IHZhbHVlQiA9IF8uZ2V0KGIsIGRhdGFGaWVsZCk7XG4gICAgaWYgKHNvcnRWYWx1ZSkge1xuICAgICAgdmFsdWVBID0gc29ydFZhbHVlKHZhbHVlQSwgYSk7XG4gICAgICB2YWx1ZUIgPSBzb3J0VmFsdWUodmFsdWVCLCBiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWVBID0gXy5pc0RlZmluZWQodmFsdWVBKSA/IHZhbHVlQSA6IFwiXCI7XG4gICAgICB2YWx1ZUIgPSBfLmlzRGVmaW5lZCh2YWx1ZUIpID8gdmFsdWVCIDogXCJcIjtcbiAgICB9XG5cbiAgICBpZiAoc29ydEZ1bmMpIHtcbiAgICAgIHJlc3VsdCA9IHNvcnRGdW5jKHZhbHVlQSwgdmFsdWVCLCBzb3J0T3JkZXIsIGRhdGFGaWVsZCwgYSwgYik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzb3J0T3JkZXIgPT09IFNPUlRfREVTQykge1xuICAgICAgICByZXN1bHQgPSBjb21wYXJhdG9yKHZhbHVlQSwgdmFsdWVCKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGNvbXBhcmF0b3IodmFsdWVCLCB2YWx1ZUEpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcbiAgcmV0dXJuIF9kYXRhO1xufTtcblxuZXhwb3J0IGNvbnN0IG5leHRPcmRlciA9IChcbiAgY3VycmVudFNvcnRDb2x1bW46IGFueSxcbiAgeyBzb3J0T3JkZXIsIHNvcnRDb2x1bW4gfTogYW55LFxuICBkZWZhdWx0T3JkZXIgPSBTT1JUX0RFU0NcbikgPT4ge1xuICBpZiAoIXNvcnRDb2x1bW4gfHwgY3VycmVudFNvcnRDb2x1bW4uZGF0YUZpZWxkICE9PSBzb3J0Q29sdW1uLmRhdGFGaWVsZCkge1xuICAgIHJldHVybiBkZWZhdWx0T3JkZXI7XG4gIH1cbiAgcmV0dXJuIHNvcnRPcmRlciA9PT0gU09SVF9ERVNDID8gU09SVF9BU0MgOiBTT1JUX0RFU0M7XG59O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgQm9vdHN0cmFwQ29udGV4dFZhbHVlIHtcbiAgYm9vdHN0cmFwNDogYm9vbGVhbjtcbn1cblxuY29uc3QgZGVmYXVsdEJvb3RzdHJhcENvbnRleHQgPSB7IGJvb3RzdHJhcDQ6IHRydWUgfTtcblxuZXhwb3J0IGNvbnN0IEJvb3RzdHJhcENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PEJvb3RzdHJhcENvbnRleHRWYWx1ZT4oXG4gIGRlZmF1bHRCb290c3RyYXBDb250ZXh0XG4pO1xuIiwiLyogZXNsaW50IG5vLWVtcHR5OiAwICovXG4vKiBlc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246IDAgKi9cbi8qIGVzbGludCBwcmVmZXItcmVzdC1wYXJhbXM6IDAgKi9cbmltcG9ydCBfIGZyb20gXCJ1bmRlcnNjb3JlXCI7XG5cbmZ1bmN0aW9uIHNwbGl0TmVzdGVkKHN0cjogYW55KSB7XG4gIHJldHVybiBbc3RyXS5qb2luKFwiLlwiKS5yZXBsYWNlKC9cXFsvZywgXCIuXCIpLnJlcGxhY2UoL1xcXS9nLCBcIlwiKS5zcGxpdChcIi5cIik7XG59XG5cbmZ1bmN0aW9uIGNvbnRhaW5zKGxpc3Q6IGFueSwgdmFsdWU6IGFueSkge1xuICBpZiAoXy5pbmNsdWRlcykge1xuICAgIHJldHVybiBfLmluY2x1ZGVzKGxpc3QsIHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiBsaXN0LmluZGV4T2YodmFsdWUpID4gLTE7XG59XG5cbmZ1bmN0aW9uIGdldCh0YXJnZXQ6IGFueSwgZmllbGQ6IGFueSkge1xuICBjb25zdCBkaXJlY3RHZXQgPSB0YXJnZXRbZmllbGRdO1xuICBpZiAoZGlyZWN0R2V0ICE9PSB1bmRlZmluZWQgJiYgZGlyZWN0R2V0ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIGRpcmVjdEdldDtcbiAgfVxuXG4gIGNvbnN0IHBhdGhBcnJheSA9IHNwbGl0TmVzdGVkKGZpZWxkKTtcbiAgbGV0IHJlc3VsdDtcbiAgdHJ5IHtcbiAgICByZXN1bHQgPSBwYXRoQXJyYXkucmVkdWNlKChjdXJyLCBwYXRoKSA9PiBjdXJyW3BhdGhdLCB0YXJnZXQpO1xuICB9IGNhdGNoIChlKSB7fVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBzZXQodGFyZ2V0OiBhbnksIGZpZWxkOiBhbnksIHZhbHVlOiBhbnksIHNhZmUgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoQXJyYXkgPSBzcGxpdE5lc3RlZChmaWVsZCk7XG4gIGxldCBsZXZlbCA9IDA7XG4gIHBhdGhBcnJheS5yZWR1Y2UoKGEsIGIpID0+IHtcbiAgICBsZXZlbCArPSAxO1xuICAgIGlmICh0eXBlb2YgYVtiXSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgaWYgKCFzYWZlKSB0aHJvdyBuZXcgRXJyb3IoYCR7YX0uJHtifSBpcyB1bmRlZmluZWRgKTtcbiAgICAgIGFbYl0gPSB7fTtcbiAgICAgIHJldHVybiBhW2JdO1xuICAgIH1cblxuICAgIGlmIChsZXZlbCA9PT0gcGF0aEFycmF5Lmxlbmd0aCkge1xuICAgICAgYVtiXSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gYVtiXTtcbiAgfSwgdGFyZ2V0KTtcbn1cblxuZnVuY3Rpb24gaXNFbXB0eU9iamVjdChvYmo6IGFueSkge1xuICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXlzW2ldKSkgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRGVmaW5lZCh2YWx1ZTogYW55KSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgIT09IFwidW5kZWZpbmVkXCIgJiYgdmFsdWUgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIHNsZWVwKGZuOiBhbnksIG1zOiBhbnkpIHtcbiAgcmV0dXJuIHNldFRpbWVvdXQoKCkgPT4gZm4oKSwgbXMpO1xufVxuXG5mdW5jdGlvbiBkZWJvdW5jZSh0aGlzOiBhbnksIGZ1bmM6IGFueSwgd2FpdDogYW55LCBpbW1lZGlhdGU6IGFueSkge1xuICBsZXQgdGltZW91dDogYW55O1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgY29uc3QgbGF0ZXIgPSAoKSA9PiB7XG4gICAgICB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaWYgKCFpbW1lZGlhdGUpIHtcbiAgICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0O1xuXG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0IHx8IDApO1xuXG4gICAgaWYgKGNhbGxOb3cpIHtcbiAgICAgIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IE9iamVjdC5hc3NpZ24oXywge1xuICBnZXQsXG4gIHNldCxcbiAgaXNEZWZpbmVkLFxuICBpc0VtcHR5T2JqZWN0LFxuICBzbGVlcCxcbiAgZGVib3VuY2UsXG4gIGNvbnRhaW5zXG59KTtcbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4cGFuc2lvbkhlYWRlckNlbGxQcm9wcyB7XG4gIGlzQW55RXhwYW5kcz86IGJvb2xlYW47XG4gIG9uQWxsUm93RXhwYW5kPzogKFxuICAgIGU6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQ+LFxuICAgIGV4cGFuZEFsbDogYm9vbGVhblxuICApID0+IHZvaWQ7XG4gIGV4cGFuZEhlYWRlckNvbHVtblJlbmRlcmVyPzogKGFyZ3M6IHsgaXNBbnlFeHBhbmRzOiBib29sZWFuIH0pID0+IFJlYWN0Tm9kZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXhwYW5zaW9uSGVhZGVyQ2VsbCBleHRlbmRzIENvbXBvbmVudDxFeHBhbnNpb25IZWFkZXJDZWxsUHJvcHM+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IEV4cGFuc2lvbkhlYWRlckNlbGxQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZUNoZWNrQm94Q2xpY2sgPSB0aGlzLmhhbmRsZUNoZWNrQm94Q2xpY2suYmluZCh0aGlzKTtcbiAgfVxuXG4gIGhhbmRsZUNoZWNrQm94Q2xpY2soZTogUmVhY3QuTW91c2VFdmVudDxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudD4pIHtcbiAgICBjb25zdCB7IGlzQW55RXhwYW5kcywgb25BbGxSb3dFeHBhbmQgfSA9IHRoaXMucHJvcHM7XG4gICAgb25BbGxSb3dFeHBhbmQhKGUsICFpc0FueUV4cGFuZHMpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgaXNBbnlFeHBhbmRzLCBleHBhbmRIZWFkZXJDb2x1bW5SZW5kZXJlciB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBhdHRycyA9IHtcbiAgICAgIG9uQ2xpY2s6IHRoaXMuaGFuZGxlQ2hlY2tCb3hDbGljayxcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDx0aCBjbGFzc05hbWU9XCJleHBhbmQtY2VsbC1oZWFkZXJcIiBkYXRhLXJvdy1zZWxlY3Rpb24gey4uLmF0dHJzfT5cbiAgICAgICAge2V4cGFuZEhlYWRlckNvbHVtblJlbmRlcmVyXG4gICAgICAgICAgPyBleHBhbmRIZWFkZXJDb2x1bW5SZW5kZXJlcih7IGlzQW55RXhwYW5kczogaXNBbnlFeHBhbmRzID8/IGZhbHNlIH0pXG4gICAgICAgICAgOiBpc0FueUV4cGFuZHNcbiAgICAgICAgICA/IFwiKC0pXCJcbiAgICAgICAgICA6IFwiKCspXCJ9XG4gICAgICA8L3RoPlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCBfIGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgZ2V0Um93QnlSb3dJZCB9IGZyb20gXCIuL3Jvd3NcIjtcblxuZXhwb3J0IGNvbnN0IGdldFNlbGVjdGlvblN1bW1hcnkgPSAoXG4gIGRhdGE6IGFueVtdID0gW10sXG4gIGtleUZpZWxkOiBhbnksXG4gIHNlbGVjdGVkOiBhbnlbXSA9IFtdXG4pID0+IHtcbiAgbGV0IGFsbFJvd3NTZWxlY3RlZCA9IGRhdGEubGVuZ3RoID4gMDtcbiAgbGV0IGFsbFJvd3NOb3RTZWxlY3RlZCA9IHRydWU7XG5cbiAgY29uc3Qgcm93S2V5cyA9IGRhdGEubWFwKChkKSA9PiBfLmdldChkLCBrZXlGaWVsZCkpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd0tleXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCBjdXJyID0gcm93S2V5c1tpXTtcbiAgICBpZiAodHlwZW9mIHNlbGVjdGVkLmZpbmQoKHgpID0+IHggPT09IGN1cnIpID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBhbGxSb3dzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWxsUm93c05vdFNlbGVjdGVkID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgYWxsUm93c1NlbGVjdGVkLFxuICAgIGFsbFJvd3NOb3RTZWxlY3RlZCxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RhYmxlS2V5cyA9IChcbiAgZGF0YTogYW55W10gPSBbXSxcbiAga2V5RmllbGQ6IGFueSxcbiAgc2tpcHM6IGFueVtdID0gW11cbikgPT4ge1xuICBpZiAoc2tpcHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGRhdGEubWFwKChyb3cpID0+IF8uZ2V0KHJvdywga2V5RmllbGQpKTtcbiAgfVxuICByZXR1cm4gZGF0YVxuICAgIC5maWx0ZXIoKHJvdykgPT4gIV8uY29udGFpbnMoc2tpcHMsIF8uZ2V0KHJvdywga2V5RmllbGQpKSlcbiAgICAubWFwKChyb3cpID0+IF8uZ2V0KHJvdywga2V5RmllbGQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1blNlbGVjdGFibGVLZXlzID0gKHNlbGVjdGVkPzogYW55LCBza2lwczogYW55W10gPSBbXSkgPT4ge1xuICBpZiAoc2tpcHM/Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gc2VsZWN0ZWQuZmlsdGVyKCh4OiBhbnkpID0+IF8uY29udGFpbnMoc2tpcHMsIHgpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTZWxlY3RlZFJvd3MgPSAoXG4gIGRhdGE6IGFueVtdID0gW10sXG4gIGtleUZpZWxkOiBhbnksXG4gIHNlbGVjdGVkOiBhbnlcbikgPT5cbiAgc2VsZWN0ZWRcbiAgICAubWFwKChrOiBhbnkpID0+IGdldFJvd0J5Um93SWQoZGF0YSwga2V5RmllbGQsIGspKVxuICAgIC5maWx0ZXIoKHg6IGFueSkgPT4gISF4KTtcbiIsIi8vIEN1cnJlbnQgdmVyc2lvbi5cbmV4cG9ydCB2YXIgVkVSU0lPTiA9ICcxLjEzLjcnO1xuXG4vLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3NlciwgYGdsb2JhbGBcbi8vIG9uIHRoZSBzZXJ2ZXIsIG9yIGB0aGlzYCBpbiBzb21lIHZpcnR1YWwgbWFjaGluZXMuIFdlIHVzZSBgc2VsZmBcbi8vIGluc3RlYWQgb2YgYHdpbmRvd2AgZm9yIGBXZWJXb3JrZXJgIHN1cHBvcnQuXG5leHBvcnQgdmFyIHJvb3QgPSAodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZi5zZWxmID09PSBzZWxmICYmIHNlbGYpIHx8XG4gICAgICAgICAgKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsLmdsb2JhbCA9PT0gZ2xvYmFsICYmIGdsb2JhbCkgfHxcbiAgICAgICAgICBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpIHx8XG4gICAgICAgICAge307XG5cbi8vIFNhdmUgYnl0ZXMgaW4gdGhlIG1pbmlmaWVkIChidXQgbm90IGd6aXBwZWQpIHZlcnNpb246XG5leHBvcnQgdmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGUsIE9ialByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcbmV4cG9ydCB2YXIgU3ltYm9sUHJvdG8gPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyA/IFN5bWJvbC5wcm90b3R5cGUgOiBudWxsO1xuXG4vLyBDcmVhdGUgcXVpY2sgcmVmZXJlbmNlIHZhcmlhYmxlcyBmb3Igc3BlZWQgYWNjZXNzIHRvIGNvcmUgcHJvdG90eXBlcy5cbmV4cG9ydCB2YXIgcHVzaCA9IEFycmF5UHJvdG8ucHVzaCxcbiAgICBzbGljZSA9IEFycmF5UHJvdG8uc2xpY2UsXG4gICAgdG9TdHJpbmcgPSBPYmpQcm90by50b1N0cmluZyxcbiAgICBoYXNPd25Qcm9wZXJ0eSA9IE9ialByb3RvLmhhc093blByb3BlcnR5O1xuXG4vLyBNb2Rlcm4gZmVhdHVyZSBkZXRlY3Rpb24uXG5leHBvcnQgdmFyIHN1cHBvcnRzQXJyYXlCdWZmZXIgPSB0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnLFxuICAgIHN1cHBvcnRzRGF0YVZpZXcgPSB0eXBlb2YgRGF0YVZpZXcgIT09ICd1bmRlZmluZWQnO1xuXG4vLyBBbGwgKipFQ01BU2NyaXB0IDUrKiogbmF0aXZlIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucyB0aGF0IHdlIGhvcGUgdG8gdXNlXG4vLyBhcmUgZGVjbGFyZWQgaGVyZS5cbmV4cG9ydCB2YXIgbmF0aXZlSXNBcnJheSA9IEFycmF5LmlzQXJyYXksXG4gICAgbmF0aXZlS2V5cyA9IE9iamVjdC5rZXlzLFxuICAgIG5hdGl2ZUNyZWF0ZSA9IE9iamVjdC5jcmVhdGUsXG4gICAgbmF0aXZlSXNWaWV3ID0gc3VwcG9ydHNBcnJheUJ1ZmZlciAmJiBBcnJheUJ1ZmZlci5pc1ZpZXc7XG5cbi8vIENyZWF0ZSByZWZlcmVuY2VzIHRvIHRoZXNlIGJ1aWx0aW4gZnVuY3Rpb25zIGJlY2F1c2Ugd2Ugb3ZlcnJpZGUgdGhlbS5cbmV4cG9ydCB2YXIgX2lzTmFOID0gaXNOYU4sXG4gICAgX2lzRmluaXRlID0gaXNGaW5pdGU7XG5cbi8vIEtleXMgaW4gSUUgPCA5IHRoYXQgd29uJ3QgYmUgaXRlcmF0ZWQgYnkgYGZvciBrZXkgaW4gLi4uYCBhbmQgdGh1cyBtaXNzZWQuXG5leHBvcnQgdmFyIGhhc0VudW1CdWcgPSAhe3RvU3RyaW5nOiBudWxsfS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgndG9TdHJpbmcnKTtcbmV4cG9ydCB2YXIgbm9uRW51bWVyYWJsZVByb3BzID0gWyd2YWx1ZU9mJywgJ2lzUHJvdG90eXBlT2YnLCAndG9TdHJpbmcnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLCAnaGFzT3duUHJvcGVydHknLCAndG9Mb2NhbGVTdHJpbmcnXTtcblxuLy8gVGhlIGxhcmdlc3QgaW50ZWdlciB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBleGFjdGx5LlxuZXhwb3J0IHZhciBNQVhfQVJSQVlfSU5ERVggPSBNYXRoLnBvdygyLCA1MykgLSAxO1xuIiwiLy8gU29tZSBmdW5jdGlvbnMgdGFrZSBhIHZhcmlhYmxlIG51bWJlciBvZiBhcmd1bWVudHMsIG9yIGEgZmV3IGV4cGVjdGVkXG4vLyBhcmd1bWVudHMgYXQgdGhlIGJlZ2lubmluZyBhbmQgdGhlbiBhIHZhcmlhYmxlIG51bWJlciBvZiB2YWx1ZXMgdG8gb3BlcmF0ZVxuLy8gb24uIFRoaXMgaGVscGVyIGFjY3VtdWxhdGVzIGFsbCByZW1haW5pbmcgYXJndW1lbnRzIHBhc3QgdGhlIGZ1bmN0aW9u4oCZc1xuLy8gYXJndW1lbnQgbGVuZ3RoIChvciBhbiBleHBsaWNpdCBgc3RhcnRJbmRleGApLCBpbnRvIGFuIGFycmF5IHRoYXQgYmVjb21lc1xuLy8gdGhlIGxhc3QgYXJndW1lbnQuIFNpbWlsYXIgdG8gRVM24oCZcyBcInJlc3QgcGFyYW1ldGVyXCIuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXN0QXJndW1lbnRzKGZ1bmMsIHN0YXJ0SW5kZXgpIHtcbiAgc3RhcnRJbmRleCA9IHN0YXJ0SW5kZXggPT0gbnVsbCA/IGZ1bmMubGVuZ3RoIC0gMSA6ICtzdGFydEluZGV4O1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KGFyZ3VtZW50cy5sZW5ndGggLSBzdGFydEluZGV4LCAwKSxcbiAgICAgICAgcmVzdCA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgIGluZGV4ID0gMDtcbiAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHJlc3RbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4ICsgc3RhcnRJbmRleF07XG4gICAgfVxuICAgIHN3aXRjaCAoc3RhcnRJbmRleCkge1xuICAgICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIHJlc3QpO1xuICAgICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIGFyZ3VtZW50c1swXSwgcmVzdCk7XG4gICAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCBhcmd1bWVudHNbMV0sIHJlc3QpO1xuICAgIH1cbiAgICB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTtcbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzdGFydEluZGV4OyBpbmRleCsrKSB7XG4gICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgfVxuICAgIGFyZ3Nbc3RhcnRJbmRleF0gPSByZXN0O1xuICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICB9O1xufVxuIiwiLy8gSXMgYSBnaXZlbiB2YXJpYWJsZSBhbiBvYmplY3Q/XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc09iamVjdChvYmopIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqO1xuICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmopO1xufVxuIiwiLy8gSXMgYSBnaXZlbiB2YWx1ZSBlcXVhbCB0byBudWxsP1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNOdWxsKG9iaikge1xuICByZXR1cm4gb2JqID09PSBudWxsO1xufVxuIiwiLy8gSXMgYSBnaXZlbiB2YXJpYWJsZSB1bmRlZmluZWQ/XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1VuZGVmaW5lZChvYmopIHtcbiAgcmV0dXJuIG9iaiA9PT0gdm9pZCAwO1xufVxuIiwiaW1wb3J0IHsgdG9TdHJpbmcgfSBmcm9tICcuL19zZXR1cC5qcyc7XG5cbi8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBib29sZWFuP1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNCb29sZWFuKG9iaikge1xuICByZXR1cm4gb2JqID09PSB0cnVlIHx8IG9iaiA9PT0gZmFsc2UgfHwgdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBCb29sZWFuXSc7XG59XG4iLCIvLyBJcyBhIGdpdmVuIHZhbHVlIGEgRE9NIGVsZW1lbnQ/XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0VsZW1lbnQob2JqKSB7XG4gIHJldHVybiAhIShvYmogJiYgb2JqLm5vZGVUeXBlID09PSAxKTtcbn1cbiIsImltcG9ydCB7IHRvU3RyaW5nIH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuXG4vLyBJbnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYSBgdG9TdHJpbmdgLWJhc2VkIHR5cGUgdGVzdGVyLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGFnVGVzdGVyKG5hbWUpIHtcbiAgdmFyIHRhZyA9ICdbb2JqZWN0ICcgKyBuYW1lICsgJ10nO1xuICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gdGFnO1xuICB9O1xufVxuIiwiaW1wb3J0IHRhZ1Rlc3RlciBmcm9tICcuL190YWdUZXN0ZXIuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB0YWdUZXN0ZXIoJ1N0cmluZycpO1xuIiwiaW1wb3J0IHRhZ1Rlc3RlciBmcm9tICcuL190YWdUZXN0ZXIuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB0YWdUZXN0ZXIoJ051bWJlcicpO1xuIiwiaW1wb3J0IHRhZ1Rlc3RlciBmcm9tICcuL190YWdUZXN0ZXIuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB0YWdUZXN0ZXIoJ0RhdGUnKTtcbiIsImltcG9ydCB0YWdUZXN0ZXIgZnJvbSAnLi9fdGFnVGVzdGVyLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgdGFnVGVzdGVyKCdSZWdFeHAnKTtcbiIsImltcG9ydCB0YWdUZXN0ZXIgZnJvbSAnLi9fdGFnVGVzdGVyLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgdGFnVGVzdGVyKCdFcnJvcicpO1xuIiwiaW1wb3J0IHRhZ1Rlc3RlciBmcm9tICcuL190YWdUZXN0ZXIuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB0YWdUZXN0ZXIoJ1N5bWJvbCcpO1xuIiwiaW1wb3J0IHRhZ1Rlc3RlciBmcm9tICcuL190YWdUZXN0ZXIuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB0YWdUZXN0ZXIoJ0FycmF5QnVmZmVyJyk7XG4iLCJpbXBvcnQgdGFnVGVzdGVyIGZyb20gJy4vX3RhZ1Rlc3Rlci5qcyc7XG5pbXBvcnQgeyByb290IH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuXG52YXIgaXNGdW5jdGlvbiA9IHRhZ1Rlc3RlcignRnVuY3Rpb24nKTtcblxuLy8gT3B0aW1pemUgYGlzRnVuY3Rpb25gIGlmIGFwcHJvcHJpYXRlLiBXb3JrIGFyb3VuZCBzb21lIGB0eXBlb2ZgIGJ1Z3MgaW4gb2xkXG4vLyB2OCwgSUUgMTEgKCMxNjIxKSwgU2FmYXJpIDggKCMxOTI5KSwgYW5kIFBoYW50b21KUyAoIzIyMzYpLlxudmFyIG5vZGVsaXN0ID0gcm9vdC5kb2N1bWVudCAmJiByb290LmRvY3VtZW50LmNoaWxkTm9kZXM7XG5pZiAodHlwZW9mIC8uLyAhPSAnZnVuY3Rpb24nICYmIHR5cGVvZiBJbnQ4QXJyYXkgIT0gJ29iamVjdCcgJiYgdHlwZW9mIG5vZGVsaXN0ICE9ICdmdW5jdGlvbicpIHtcbiAgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqID09ICdmdW5jdGlvbicgfHwgZmFsc2U7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzRnVuY3Rpb247XG4iLCJpbXBvcnQgdGFnVGVzdGVyIGZyb20gJy4vX3RhZ1Rlc3Rlci5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHRhZ1Rlc3RlcignT2JqZWN0Jyk7XG4iLCJpbXBvcnQgeyBzdXBwb3J0c0RhdGFWaWV3IH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuaW1wb3J0IGhhc09iamVjdFRhZyBmcm9tICcuL19oYXNPYmplY3RUYWcuanMnO1xuXG4vLyBJbiBJRSAxMCAtIEVkZ2UgMTMsIGBEYXRhVmlld2AgaGFzIHN0cmluZyB0YWcgYCdbb2JqZWN0IE9iamVjdF0nYC5cbi8vIEluIElFIDExLCB0aGUgbW9zdCBjb21tb24gYW1vbmcgdGhlbSwgdGhpcyBwcm9ibGVtIGFsc28gYXBwbGllcyB0b1xuLy8gYE1hcGAsIGBXZWFrTWFwYCBhbmQgYFNldGAuXG4vLyBBbHNvLCB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgYW4gYXBwbGljYXRpb24gY2FuIG92ZXJyaWRlIHRoZSBuYXRpdmVcbi8vIGBEYXRhVmlld2Agb2JqZWN0LCBpbiBjYXNlcyBsaWtlIHRoYXQgd2UgY2FuJ3QgdXNlIHRoZSBjb25zdHJ1Y3RvclxuLy8gc2FmZWx5IGFuZCBzaG91bGQganVzdCByZWx5IG9uIGFsdGVybmF0ZSBgRGF0YVZpZXdgIGNoZWNrc1xuZXhwb3J0IHZhciBoYXNEYXRhVmlld0J1ZyA9IChcbiAgICAgIHN1cHBvcnRzRGF0YVZpZXcgJiYgKCEvXFxbbmF0aXZlIGNvZGVcXF0vLnRlc3QoU3RyaW5nKERhdGFWaWV3KSkgfHwgaGFzT2JqZWN0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoOCkpKSlcbiAgICApLFxuICAgIGlzSUUxMSA9ICh0eXBlb2YgTWFwICE9PSAndW5kZWZpbmVkJyAmJiBoYXNPYmplY3RUYWcobmV3IE1hcCkpO1xuIiwiaW1wb3J0IHRhZ1Rlc3RlciBmcm9tICcuL190YWdUZXN0ZXIuanMnO1xuaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBpc0FycmF5QnVmZmVyIGZyb20gJy4vaXNBcnJheUJ1ZmZlci5qcyc7XG5pbXBvcnQgeyBoYXNEYXRhVmlld0J1ZyB9IGZyb20gJy4vX3N0cmluZ1RhZ0J1Zy5qcyc7XG5cbnZhciBpc0RhdGFWaWV3ID0gdGFnVGVzdGVyKCdEYXRhVmlldycpO1xuXG4vLyBJbiBJRSAxMCAtIEVkZ2UgMTMsIHdlIG5lZWQgYSBkaWZmZXJlbnQgaGV1cmlzdGljXG4vLyB0byBkZXRlcm1pbmUgd2hldGhlciBhbiBvYmplY3QgaXMgYSBgRGF0YVZpZXdgLlxuLy8gQWxzbywgaW4gY2FzZXMgd2hlcmUgdGhlIG5hdGl2ZSBgRGF0YVZpZXdgIGlzXG4vLyBvdmVycmlkZGVuIHdlIGNhbid0IHJlbHkgb24gdGhlIHRhZyBpdHNlbGYuXG5mdW5jdGlvbiBhbHRlcm5hdGVJc0RhdGFWaWV3KG9iaikge1xuICByZXR1cm4gb2JqICE9IG51bGwgJiYgaXNGdW5jdGlvbihvYmouZ2V0SW50OCkgJiYgaXNBcnJheUJ1ZmZlcihvYmouYnVmZmVyKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKGhhc0RhdGFWaWV3QnVnID8gYWx0ZXJuYXRlSXNEYXRhVmlldyA6IGlzRGF0YVZpZXcpO1xuIiwiaW1wb3J0IHsgbmF0aXZlSXNBcnJheSB9IGZyb20gJy4vX3NldHVwLmpzJztcbmltcG9ydCB0YWdUZXN0ZXIgZnJvbSAnLi9fdGFnVGVzdGVyLmpzJztcblxuLy8gSXMgYSBnaXZlbiB2YWx1ZSBhbiBhcnJheT9cbi8vIERlbGVnYXRlcyB0byBFQ01BNSdzIG5hdGl2ZSBgQXJyYXkuaXNBcnJheWAuXG5leHBvcnQgZGVmYXVsdCBuYXRpdmVJc0FycmF5IHx8IHRhZ1Rlc3RlcignQXJyYXknKTtcbiIsImltcG9ydCB7IGhhc093blByb3BlcnR5IH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuXG4vLyBJbnRlcm5hbCBmdW5jdGlvbiB0byBjaGVjayB3aGV0aGVyIGBrZXlgIGlzIGFuIG93biBwcm9wZXJ0eSBuYW1lIG9mIGBvYmpgLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gIHJldHVybiBvYmogIT0gbnVsbCAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KTtcbn1cbiIsImltcG9ydCB0YWdUZXN0ZXIgZnJvbSAnLi9fdGFnVGVzdGVyLmpzJztcbmltcG9ydCBoYXMgZnJvbSAnLi9faGFzLmpzJztcblxudmFyIGlzQXJndW1lbnRzID0gdGFnVGVzdGVyKCdBcmd1bWVudHMnKTtcblxuLy8gRGVmaW5lIGEgZmFsbGJhY2sgdmVyc2lvbiBvZiB0aGUgbWV0aG9kIGluIGJyb3dzZXJzIChhaGVtLCBJRSA8IDkpLCB3aGVyZVxuLy8gdGhlcmUgaXNuJ3QgYW55IGluc3BlY3RhYmxlIFwiQXJndW1lbnRzXCIgdHlwZS5cbihmdW5jdGlvbigpIHtcbiAgaWYgKCFpc0FyZ3VtZW50cyhhcmd1bWVudHMpKSB7XG4gICAgaXNBcmd1bWVudHMgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBoYXMob2JqLCAnY2FsbGVlJyk7XG4gICAgfTtcbiAgfVxufSgpKTtcblxuZXhwb3J0IGRlZmF1bHQgaXNBcmd1bWVudHM7XG4iLCJpbXBvcnQgeyBfaXNGaW5pdGUgfSBmcm9tICcuL19zZXR1cC5qcyc7XG5pbXBvcnQgaXNTeW1ib2wgZnJvbSAnLi9pc1N5bWJvbC5qcyc7XG5cbi8vIElzIGEgZ2l2ZW4gb2JqZWN0IGEgZmluaXRlIG51bWJlcj9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzRmluaXRlKG9iaikge1xuICByZXR1cm4gIWlzU3ltYm9sKG9iaikgJiYgX2lzRmluaXRlKG9iaikgJiYgIWlzTmFOKHBhcnNlRmxvYXQob2JqKSk7XG59XG4iLCJpbXBvcnQgeyBfaXNOYU4gfSBmcm9tICcuL19zZXR1cC5qcyc7XG5pbXBvcnQgaXNOdW1iZXIgZnJvbSAnLi9pc051bWJlci5qcyc7XG5cbi8vIElzIHRoZSBnaXZlbiB2YWx1ZSBgTmFOYD9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzTmFOKG9iaikge1xuICByZXR1cm4gaXNOdW1iZXIob2JqKSAmJiBfaXNOYU4ob2JqKTtcbn1cbiIsIi8vIFByZWRpY2F0ZS1nZW5lcmF0aW5nIGZ1bmN0aW9uLiBPZnRlbiB1c2VmdWwgb3V0c2lkZSBvZiBVbmRlcnNjb3JlLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcbn1cbiIsImltcG9ydCB7IE1BWF9BUlJBWV9JTkRFWCB9IGZyb20gJy4vX3NldHVwLmpzJztcblxuLy8gQ29tbW9uIGludGVybmFsIGxvZ2ljIGZvciBgaXNBcnJheUxpa2VgIGFuZCBgaXNCdWZmZXJMaWtlYC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVNpemVQcm9wZXJ0eUNoZWNrKGdldFNpemVQcm9wZXJ0eSkge1xuICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbikge1xuICAgIHZhciBzaXplUHJvcGVydHkgPSBnZXRTaXplUHJvcGVydHkoY29sbGVjdGlvbik7XG4gICAgcmV0dXJuIHR5cGVvZiBzaXplUHJvcGVydHkgPT0gJ251bWJlcicgJiYgc2l6ZVByb3BlcnR5ID49IDAgJiYgc2l6ZVByb3BlcnR5IDw9IE1BWF9BUlJBWV9JTkRFWDtcbiAgfVxufVxuIiwiLy8gSW50ZXJuYWwgaGVscGVyIHRvIGdlbmVyYXRlIGEgZnVuY3Rpb24gdG8gb2J0YWluIHByb3BlcnR5IGBrZXlgIGZyb20gYG9iamAuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzaGFsbG93UHJvcGVydHkoa2V5KSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09IG51bGwgPyB2b2lkIDAgOiBvYmpba2V5XTtcbiAgfTtcbn1cbiIsImltcG9ydCBzaGFsbG93UHJvcGVydHkgZnJvbSAnLi9fc2hhbGxvd1Byb3BlcnR5LmpzJztcblxuLy8gSW50ZXJuYWwgaGVscGVyIHRvIG9idGFpbiB0aGUgYGJ5dGVMZW5ndGhgIHByb3BlcnR5IG9mIGFuIG9iamVjdC5cbmV4cG9ydCBkZWZhdWx0IHNoYWxsb3dQcm9wZXJ0eSgnYnl0ZUxlbmd0aCcpO1xuIiwiaW1wb3J0IGNyZWF0ZVNpemVQcm9wZXJ0eUNoZWNrIGZyb20gJy4vX2NyZWF0ZVNpemVQcm9wZXJ0eUNoZWNrLmpzJztcbmltcG9ydCBnZXRCeXRlTGVuZ3RoIGZyb20gJy4vX2dldEJ5dGVMZW5ndGguanMnO1xuXG4vLyBJbnRlcm5hbCBoZWxwZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgd2Ugc2hvdWxkIHNwZW5kIGV4dGVuc2l2ZSBjaGVja3MgYWdhaW5zdFxuLy8gYEFycmF5QnVmZmVyYCBldCBhbC5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVNpemVQcm9wZXJ0eUNoZWNrKGdldEJ5dGVMZW5ndGgpO1xuIiwiaW1wb3J0IHsgc3VwcG9ydHNBcnJheUJ1ZmZlciwgbmF0aXZlSXNWaWV3LCB0b1N0cmluZyB9IGZyb20gJy4vX3NldHVwLmpzJztcbmltcG9ydCBpc0RhdGFWaWV3IGZyb20gJy4vaXNEYXRhVmlldy5qcyc7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSAnLi9jb25zdGFudC5qcyc7XG5pbXBvcnQgaXNCdWZmZXJMaWtlIGZyb20gJy4vX2lzQnVmZmVyTGlrZS5qcyc7XG5cbi8vIElzIGEgZ2l2ZW4gdmFsdWUgYSB0eXBlZCBhcnJheT9cbnZhciB0eXBlZEFycmF5UGF0dGVybiA9IC9cXFtvYmplY3QgKChJfFVpKW50KDh8MTZ8MzIpfEZsb2F0KDMyfDY0KXxVaW50OENsYW1wZWR8QmlnKEl8VWkpbnQ2NClBcnJheVxcXS87XG5mdW5jdGlvbiBpc1R5cGVkQXJyYXkob2JqKSB7XG4gIC8vIGBBcnJheUJ1ZmZlci5pc1ZpZXdgIGlzIHRoZSBtb3N0IGZ1dHVyZS1wcm9vZiwgc28gdXNlIGl0IHdoZW4gYXZhaWxhYmxlLlxuICAvLyBPdGhlcndpc2UsIGZhbGwgYmFjayBvbiB0aGUgYWJvdmUgcmVndWxhciBleHByZXNzaW9uLlxuICByZXR1cm4gbmF0aXZlSXNWaWV3ID8gKG5hdGl2ZUlzVmlldyhvYmopICYmICFpc0RhdGFWaWV3KG9iaikpIDpcbiAgICAgICAgICAgICAgICBpc0J1ZmZlckxpa2Uob2JqKSAmJiB0eXBlZEFycmF5UGF0dGVybi50ZXN0KHRvU3RyaW5nLmNhbGwob2JqKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN1cHBvcnRzQXJyYXlCdWZmZXIgPyBpc1R5cGVkQXJyYXkgOiBjb25zdGFudChmYWxzZSk7XG4iLCJpbXBvcnQgc2hhbGxvd1Byb3BlcnR5IGZyb20gJy4vX3NoYWxsb3dQcm9wZXJ0eS5qcyc7XG5cbi8vIEludGVybmFsIGhlbHBlciB0byBvYnRhaW4gdGhlIGBsZW5ndGhgIHByb3BlcnR5IG9mIGFuIG9iamVjdC5cbmV4cG9ydCBkZWZhdWx0IHNoYWxsb3dQcm9wZXJ0eSgnbGVuZ3RoJyk7XG4iLCJpbXBvcnQgeyBub25FbnVtZXJhYmxlUHJvcHMsIE9ialByb3RvIH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBoYXMgZnJvbSAnLi9faGFzLmpzJztcblxuLy8gSW50ZXJuYWwgaGVscGVyIHRvIGNyZWF0ZSBhIHNpbXBsZSBsb29rdXAgc3RydWN0dXJlLlxuLy8gYGNvbGxlY3ROb25FbnVtUHJvcHNgIHVzZWQgdG8gZGVwZW5kIG9uIGBfLmNvbnRhaW5zYCwgYnV0IHRoaXMgbGVkIHRvXG4vLyBjaXJjdWxhciBpbXBvcnRzLiBgZW11bGF0ZWRTZXRgIGlzIGEgb25lLW9mZiBzb2x1dGlvbiB0aGF0IG9ubHkgd29ya3MgZm9yXG4vLyBhcnJheXMgb2Ygc3RyaW5ncy5cbmZ1bmN0aW9uIGVtdWxhdGVkU2V0KGtleXMpIHtcbiAgdmFyIGhhc2ggPSB7fTtcbiAgZm9yICh2YXIgbCA9IGtleXMubGVuZ3RoLCBpID0gMDsgaSA8IGw7ICsraSkgaGFzaFtrZXlzW2ldXSA9IHRydWU7XG4gIHJldHVybiB7XG4gICAgY29udGFpbnM6IGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gaGFzaFtrZXldID09PSB0cnVlOyB9LFxuICAgIHB1c2g6IGZ1bmN0aW9uKGtleSkge1xuICAgICAgaGFzaFtrZXldID0gdHJ1ZTtcbiAgICAgIHJldHVybiBrZXlzLnB1c2goa2V5KTtcbiAgICB9XG4gIH07XG59XG5cbi8vIEludGVybmFsIGhlbHBlci4gQ2hlY2tzIGBrZXlzYCBmb3IgdGhlIHByZXNlbmNlIG9mIGtleXMgaW4gSUUgPCA5IHRoYXQgd29uJ3Rcbi8vIGJlIGl0ZXJhdGVkIGJ5IGBmb3Iga2V5IGluIC4uLmAgYW5kIHRodXMgbWlzc2VkLiBFeHRlbmRzIGBrZXlzYCBpbiBwbGFjZSBpZlxuLy8gbmVlZGVkLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpIHtcbiAga2V5cyA9IGVtdWxhdGVkU2V0KGtleXMpO1xuICB2YXIgbm9uRW51bUlkeCA9IG5vbkVudW1lcmFibGVQcm9wcy5sZW5ndGg7XG4gIHZhciBjb25zdHJ1Y3RvciA9IG9iai5jb25zdHJ1Y3RvcjtcbiAgdmFyIHByb3RvID0gKGlzRnVuY3Rpb24oY29uc3RydWN0b3IpICYmIGNvbnN0cnVjdG9yLnByb3RvdHlwZSkgfHwgT2JqUHJvdG87XG5cbiAgLy8gQ29uc3RydWN0b3IgaXMgYSBzcGVjaWFsIGNhc2UuXG4gIHZhciBwcm9wID0gJ2NvbnN0cnVjdG9yJztcbiAgaWYgKGhhcyhvYmosIHByb3ApICYmICFrZXlzLmNvbnRhaW5zKHByb3ApKSBrZXlzLnB1c2gocHJvcCk7XG5cbiAgd2hpbGUgKG5vbkVudW1JZHgtLSkge1xuICAgIHByb3AgPSBub25FbnVtZXJhYmxlUHJvcHNbbm9uRW51bUlkeF07XG4gICAgaWYgKHByb3AgaW4gb2JqICYmIG9ialtwcm9wXSAhPT0gcHJvdG9bcHJvcF0gJiYgIWtleXMuY29udGFpbnMocHJvcCkpIHtcbiAgICAgIGtleXMucHVzaChwcm9wKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCB7IG5hdGl2ZUtleXMsIGhhc0VudW1CdWcgfSBmcm9tICcuL19zZXR1cC5qcyc7XG5pbXBvcnQgaGFzIGZyb20gJy4vX2hhcy5qcyc7XG5pbXBvcnQgY29sbGVjdE5vbkVudW1Qcm9wcyBmcm9tICcuL19jb2xsZWN0Tm9uRW51bVByb3BzLmpzJztcblxuLy8gUmV0cmlldmUgdGhlIG5hbWVzIG9mIGFuIG9iamVjdCdzIG93biBwcm9wZXJ0aWVzLlxuLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYE9iamVjdC5rZXlzYC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGtleXMob2JqKSB7XG4gIGlmICghaXNPYmplY3Qob2JqKSkgcmV0dXJuIFtdO1xuICBpZiAobmF0aXZlS2V5cykgcmV0dXJuIG5hdGl2ZUtleXMob2JqKTtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikgaWYgKGhhcyhvYmosIGtleSkpIGtleXMucHVzaChrZXkpO1xuICAvLyBBaGVtLCBJRSA8IDkuXG4gIGlmIChoYXNFbnVtQnVnKSBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7XG4gIHJldHVybiBrZXlzO1xufVxuIiwiaW1wb3J0IGdldExlbmd0aCBmcm9tICcuL19nZXRMZW5ndGguanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc1N0cmluZyBmcm9tICcuL2lzU3RyaW5nLmpzJztcbmltcG9ydCBpc0FyZ3VtZW50cyBmcm9tICcuL2lzQXJndW1lbnRzLmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8vIElzIGEgZ2l2ZW4gYXJyYXksIHN0cmluZywgb3Igb2JqZWN0IGVtcHR5P1xuLy8gQW4gXCJlbXB0eVwiIG9iamVjdCBoYXMgbm8gZW51bWVyYWJsZSBvd24tcHJvcGVydGllcy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7XG4gIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gIC8vIFNraXAgdGhlIG1vcmUgZXhwZW5zaXZlIGB0b1N0cmluZ2AtYmFzZWQgdHlwZSBjaGVja3MgaWYgYG9iamAgaGFzIG5vXG4gIC8vIGAubGVuZ3RoYC5cbiAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChvYmopO1xuICBpZiAodHlwZW9mIGxlbmd0aCA9PSAnbnVtYmVyJyAmJiAoXG4gICAgaXNBcnJheShvYmopIHx8IGlzU3RyaW5nKG9iaikgfHwgaXNBcmd1bWVudHMob2JqKVxuICApKSByZXR1cm4gbGVuZ3RoID09PSAwO1xuICByZXR1cm4gZ2V0TGVuZ3RoKGtleXMob2JqKSkgPT09IDA7XG59XG4iLCJpbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vLyBSZXR1cm5zIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHNldCBvZiBga2V5OnZhbHVlYCBwYWlycy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzTWF0Y2gob2JqZWN0LCBhdHRycykge1xuICB2YXIgX2tleXMgPSBrZXlzKGF0dHJzKSwgbGVuZ3RoID0gX2tleXMubGVuZ3RoO1xuICBpZiAob2JqZWN0ID09IG51bGwpIHJldHVybiAhbGVuZ3RoO1xuICB2YXIgb2JqID0gT2JqZWN0KG9iamVjdCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0gX2tleXNbaV07XG4gICAgaWYgKGF0dHJzW2tleV0gIT09IG9ialtrZXldIHx8ICEoa2V5IGluIG9iaikpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbiIsImltcG9ydCB7IFZFUlNJT04gfSBmcm9tICcuL19zZXR1cC5qcyc7XG5cbi8vIElmIFVuZGVyc2NvcmUgaXMgY2FsbGVkIGFzIGEgZnVuY3Rpb24sIGl0IHJldHVybnMgYSB3cmFwcGVkIG9iamVjdCB0aGF0IGNhblxuLy8gYmUgdXNlZCBPTy1zdHlsZS4gVGhpcyB3cmFwcGVyIGhvbGRzIGFsdGVyZWQgdmVyc2lvbnMgb2YgYWxsIGZ1bmN0aW9ucyBhZGRlZFxuLy8gdGhyb3VnaCBgXy5taXhpbmAuIFdyYXBwZWQgb2JqZWN0cyBtYXkgYmUgY2hhaW5lZC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF8ob2JqKSB7XG4gIGlmIChvYmogaW5zdGFuY2VvZiBfKSByZXR1cm4gb2JqO1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgXykpIHJldHVybiBuZXcgXyhvYmopO1xuICB0aGlzLl93cmFwcGVkID0gb2JqO1xufVxuXG5fLlZFUlNJT04gPSBWRVJTSU9OO1xuXG4vLyBFeHRyYWN0cyB0aGUgcmVzdWx0IGZyb20gYSB3cmFwcGVkIGFuZCBjaGFpbmVkIG9iamVjdC5cbl8ucHJvdG90eXBlLnZhbHVlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl93cmFwcGVkO1xufTtcblxuLy8gUHJvdmlkZSB1bndyYXBwaW5nIHByb3hpZXMgZm9yIHNvbWUgbWV0aG9kcyB1c2VkIGluIGVuZ2luZSBvcGVyYXRpb25zXG4vLyBzdWNoIGFzIGFyaXRobWV0aWMgYW5kIEpTT04gc3RyaW5naWZpY2F0aW9uLlxuXy5wcm90b3R5cGUudmFsdWVPZiA9IF8ucHJvdG90eXBlLnRvSlNPTiA9IF8ucHJvdG90eXBlLnZhbHVlO1xuXG5fLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gU3RyaW5nKHRoaXMuX3dyYXBwZWQpO1xufTtcbiIsImltcG9ydCBnZXRCeXRlTGVuZ3RoIGZyb20gJy4vX2dldEJ5dGVMZW5ndGguanMnO1xuXG4vLyBJbnRlcm5hbCBmdW5jdGlvbiB0byB3cmFwIG9yIHNoYWxsb3ctY29weSBhbiBBcnJheUJ1ZmZlcixcbi8vIHR5cGVkIGFycmF5IG9yIERhdGFWaWV3IHRvIGEgbmV3IHZpZXcsIHJldXNpbmcgdGhlIGJ1ZmZlci5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvQnVmZmVyVmlldyhidWZmZXJTb3VyY2UpIHtcbiAgcmV0dXJuIG5ldyBVaW50OEFycmF5KFxuICAgIGJ1ZmZlclNvdXJjZS5idWZmZXIgfHwgYnVmZmVyU291cmNlLFxuICAgIGJ1ZmZlclNvdXJjZS5ieXRlT2Zmc2V0IHx8IDAsXG4gICAgZ2V0Qnl0ZUxlbmd0aChidWZmZXJTb3VyY2UpXG4gICk7XG59XG4iLCJpbXBvcnQgXyBmcm9tICcuL3VuZGVyc2NvcmUuanMnO1xuaW1wb3J0IHsgdG9TdHJpbmcsIFN5bWJvbFByb3RvIH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuaW1wb3J0IGdldEJ5dGVMZW5ndGggZnJvbSAnLi9fZ2V0Qnl0ZUxlbmd0aC5qcyc7XG5pbXBvcnQgaXNUeXBlZEFycmF5IGZyb20gJy4vaXNUeXBlZEFycmF5LmpzJztcbmltcG9ydCBpc0Z1bmN0aW9uIGZyb20gJy4vaXNGdW5jdGlvbi5qcyc7XG5pbXBvcnQgeyBoYXNEYXRhVmlld0J1ZyB9ICBmcm9tICcuL19zdHJpbmdUYWdCdWcuanMnO1xuaW1wb3J0IGlzRGF0YVZpZXcgZnJvbSAnLi9pc0RhdGFWaWV3LmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5pbXBvcnQgaGFzIGZyb20gJy4vX2hhcy5qcyc7XG5pbXBvcnQgdG9CdWZmZXJWaWV3IGZyb20gJy4vX3RvQnVmZmVyVmlldy5qcyc7XG5cbi8vIFdlIHVzZSB0aGlzIHN0cmluZyB0d2ljZSwgc28gZ2l2ZSBpdCBhIG5hbWUgZm9yIG1pbmlmaWNhdGlvbi5cbnZhciB0YWdEYXRhVmlldyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8vIEludGVybmFsIHJlY3Vyc2l2ZSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBgXy5pc0VxdWFsYC5cbmZ1bmN0aW9uIGVxKGEsIGIsIGFTdGFjaywgYlN0YWNrKSB7XG4gIC8vIElkZW50aWNhbCBvYmplY3RzIGFyZSBlcXVhbC4gYDAgPT09IC0wYCwgYnV0IHRoZXkgYXJlbid0IGlkZW50aWNhbC5cbiAgLy8gU2VlIHRoZSBbSGFybW9ueSBgZWdhbGAgcHJvcG9zYWxdKGh0dHBzOi8vd2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1LnBocD9pZD1oYXJtb255OmVnYWwpLlxuICBpZiAoYSA9PT0gYikgcmV0dXJuIGEgIT09IDAgfHwgMSAvIGEgPT09IDEgLyBiO1xuICAvLyBgbnVsbGAgb3IgYHVuZGVmaW5lZGAgb25seSBlcXVhbCB0byBpdHNlbGYgKHN0cmljdCBjb21wYXJpc29uKS5cbiAgaWYgKGEgPT0gbnVsbCB8fCBiID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgLy8gYE5hTmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJlZmxleGl2ZS5cbiAgaWYgKGEgIT09IGEpIHJldHVybiBiICE9PSBiO1xuICAvLyBFeGhhdXN0IHByaW1pdGl2ZSBjaGVja3NcbiAgdmFyIHR5cGUgPSB0eXBlb2YgYTtcbiAgaWYgKHR5cGUgIT09ICdmdW5jdGlvbicgJiYgdHlwZSAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIGIgIT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGRlZXBFcShhLCBiLCBhU3RhY2ssIGJTdGFjayk7XG59XG5cbi8vIEludGVybmFsIHJlY3Vyc2l2ZSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBgXy5pc0VxdWFsYC5cbmZ1bmN0aW9uIGRlZXBFcShhLCBiLCBhU3RhY2ssIGJTdGFjaykge1xuICAvLyBVbndyYXAgYW55IHdyYXBwZWQgb2JqZWN0cy5cbiAgaWYgKGEgaW5zdGFuY2VvZiBfKSBhID0gYS5fd3JhcHBlZDtcbiAgaWYgKGIgaW5zdGFuY2VvZiBfKSBiID0gYi5fd3JhcHBlZDtcbiAgLy8gQ29tcGFyZSBgW1tDbGFzc11dYCBuYW1lcy5cbiAgdmFyIGNsYXNzTmFtZSA9IHRvU3RyaW5nLmNhbGwoYSk7XG4gIGlmIChjbGFzc05hbWUgIT09IHRvU3RyaW5nLmNhbGwoYikpIHJldHVybiBmYWxzZTtcbiAgLy8gV29yayBhcm91bmQgYSBidWcgaW4gSUUgMTAgLSBFZGdlIDEzLlxuICBpZiAoaGFzRGF0YVZpZXdCdWcgJiYgY2xhc3NOYW1lID09ICdbb2JqZWN0IE9iamVjdF0nICYmIGlzRGF0YVZpZXcoYSkpIHtcbiAgICBpZiAoIWlzRGF0YVZpZXcoYikpIHJldHVybiBmYWxzZTtcbiAgICBjbGFzc05hbWUgPSB0YWdEYXRhVmlldztcbiAgfVxuICBzd2l0Y2ggKGNsYXNzTmFtZSkge1xuICAgIC8vIFRoZXNlIHR5cGVzIGFyZSBjb21wYXJlZCBieSB2YWx1ZS5cbiAgICBjYXNlICdbb2JqZWN0IFJlZ0V4cF0nOlxuICAgICAgLy8gUmVnRXhwcyBhcmUgY29lcmNlZCB0byBzdHJpbmdzIGZvciBjb21wYXJpc29uIChOb3RlOiAnJyArIC9hL2kgPT09ICcvYS9pJylcbiAgICBjYXNlICdbb2JqZWN0IFN0cmluZ10nOlxuICAgICAgLy8gUHJpbWl0aXZlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBvYmplY3Qgd3JhcHBlcnMgYXJlIGVxdWl2YWxlbnQ7IHRodXMsIGBcIjVcImAgaXNcbiAgICAgIC8vIGVxdWl2YWxlbnQgdG8gYG5ldyBTdHJpbmcoXCI1XCIpYC5cbiAgICAgIHJldHVybiAnJyArIGEgPT09ICcnICsgYjtcbiAgICBjYXNlICdbb2JqZWN0IE51bWJlcl0nOlxuICAgICAgLy8gYE5hTmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJlZmxleGl2ZS5cbiAgICAgIC8vIE9iamVjdChOYU4pIGlzIGVxdWl2YWxlbnQgdG8gTmFOLlxuICAgICAgaWYgKCthICE9PSArYSkgcmV0dXJuICtiICE9PSArYjtcbiAgICAgIC8vIEFuIGBlZ2FsYCBjb21wYXJpc29uIGlzIHBlcmZvcm1lZCBmb3Igb3RoZXIgbnVtZXJpYyB2YWx1ZXMuXG4gICAgICByZXR1cm4gK2EgPT09IDAgPyAxIC8gK2EgPT09IDEgLyBiIDogK2EgPT09ICtiO1xuICAgIGNhc2UgJ1tvYmplY3QgRGF0ZV0nOlxuICAgIGNhc2UgJ1tvYmplY3QgQm9vbGVhbl0nOlxuICAgICAgLy8gQ29lcmNlIGRhdGVzIGFuZCBib29sZWFucyB0byBudW1lcmljIHByaW1pdGl2ZSB2YWx1ZXMuIERhdGVzIGFyZSBjb21wYXJlZCBieSB0aGVpclxuICAgICAgLy8gbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zLiBOb3RlIHRoYXQgaW52YWxpZCBkYXRlcyB3aXRoIG1pbGxpc2Vjb25kIHJlcHJlc2VudGF0aW9uc1xuICAgICAgLy8gb2YgYE5hTmAgYXJlIG5vdCBlcXVpdmFsZW50LlxuICAgICAgcmV0dXJuICthID09PSArYjtcbiAgICBjYXNlICdbb2JqZWN0IFN5bWJvbF0nOlxuICAgICAgcmV0dXJuIFN5bWJvbFByb3RvLnZhbHVlT2YuY2FsbChhKSA9PT0gU3ltYm9sUHJvdG8udmFsdWVPZi5jYWxsKGIpO1xuICAgIGNhc2UgJ1tvYmplY3QgQXJyYXlCdWZmZXJdJzpcbiAgICBjYXNlIHRhZ0RhdGFWaWV3OlxuICAgICAgLy8gQ29lcmNlIHRvIHR5cGVkIGFycmF5IHNvIHdlIGNhbiBmYWxsIHRocm91Z2guXG4gICAgICByZXR1cm4gZGVlcEVxKHRvQnVmZmVyVmlldyhhKSwgdG9CdWZmZXJWaWV3KGIpLCBhU3RhY2ssIGJTdGFjayk7XG4gIH1cblxuICB2YXIgYXJlQXJyYXlzID0gY2xhc3NOYW1lID09PSAnW29iamVjdCBBcnJheV0nO1xuICBpZiAoIWFyZUFycmF5cyAmJiBpc1R5cGVkQXJyYXkoYSkpIHtcbiAgICAgIHZhciBieXRlTGVuZ3RoID0gZ2V0Qnl0ZUxlbmd0aChhKTtcbiAgICAgIGlmIChieXRlTGVuZ3RoICE9PSBnZXRCeXRlTGVuZ3RoKGIpKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoYS5idWZmZXIgPT09IGIuYnVmZmVyICYmIGEuYnl0ZU9mZnNldCA9PT0gYi5ieXRlT2Zmc2V0KSByZXR1cm4gdHJ1ZTtcbiAgICAgIGFyZUFycmF5cyA9IHRydWU7XG4gIH1cbiAgaWYgKCFhcmVBcnJheXMpIHtcbiAgICBpZiAodHlwZW9mIGEgIT0gJ29iamVjdCcgfHwgdHlwZW9mIGIgIT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIE9iamVjdHMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1aXZhbGVudCwgYnV0IGBPYmplY3RgcyBvciBgQXJyYXlgc1xuICAgIC8vIGZyb20gZGlmZmVyZW50IGZyYW1lcyBhcmUuXG4gICAgdmFyIGFDdG9yID0gYS5jb25zdHJ1Y3RvciwgYkN0b3IgPSBiLmNvbnN0cnVjdG9yO1xuICAgIGlmIChhQ3RvciAhPT0gYkN0b3IgJiYgIShpc0Z1bmN0aW9uKGFDdG9yKSAmJiBhQ3RvciBpbnN0YW5jZW9mIGFDdG9yICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRnVuY3Rpb24oYkN0b3IpICYmIGJDdG9yIGluc3RhbmNlb2YgYkN0b3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiAoJ2NvbnN0cnVjdG9yJyBpbiBhICYmICdjb25zdHJ1Y3RvcicgaW4gYikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgLy8gQXNzdW1lIGVxdWFsaXR5IGZvciBjeWNsaWMgc3RydWN0dXJlcy4gVGhlIGFsZ29yaXRobSBmb3IgZGV0ZWN0aW5nIGN5Y2xpY1xuICAvLyBzdHJ1Y3R1cmVzIGlzIGFkYXB0ZWQgZnJvbSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLCBhYnN0cmFjdCBvcGVyYXRpb24gYEpPYC5cblxuICAvLyBJbml0aWFsaXppbmcgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gIC8vIEl0J3MgZG9uZSBoZXJlIHNpbmNlIHdlIG9ubHkgbmVlZCB0aGVtIGZvciBvYmplY3RzIGFuZCBhcnJheXMgY29tcGFyaXNvbi5cbiAgYVN0YWNrID0gYVN0YWNrIHx8IFtdO1xuICBiU3RhY2sgPSBiU3RhY2sgfHwgW107XG4gIHZhciBsZW5ndGggPSBhU3RhY2subGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAvLyBMaW5lYXIgc2VhcmNoLiBQZXJmb3JtYW5jZSBpcyBpbnZlcnNlbHkgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2ZcbiAgICAvLyB1bmlxdWUgbmVzdGVkIHN0cnVjdHVyZXMuXG4gICAgaWYgKGFTdGFja1tsZW5ndGhdID09PSBhKSByZXR1cm4gYlN0YWNrW2xlbmd0aF0gPT09IGI7XG4gIH1cblxuICAvLyBBZGQgdGhlIGZpcnN0IG9iamVjdCB0byB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gIGFTdGFjay5wdXNoKGEpO1xuICBiU3RhY2sucHVzaChiKTtcblxuICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgYW5kIGFycmF5cy5cbiAgaWYgKGFyZUFycmF5cykge1xuICAgIC8vIENvbXBhcmUgYXJyYXkgbGVuZ3RocyB0byBkZXRlcm1pbmUgaWYgYSBkZWVwIGNvbXBhcmlzb24gaXMgbmVjZXNzYXJ5LlxuICAgIGxlbmd0aCA9IGEubGVuZ3RoO1xuICAgIGlmIChsZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gRGVlcCBjb21wYXJlIHRoZSBjb250ZW50cywgaWdub3Jpbmcgbm9uLW51bWVyaWMgcHJvcGVydGllcy5cbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIGlmICghZXEoYVtsZW5ndGhdLCBiW2xlbmd0aF0sIGFTdGFjaywgYlN0YWNrKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBEZWVwIGNvbXBhcmUgb2JqZWN0cy5cbiAgICB2YXIgX2tleXMgPSBrZXlzKGEpLCBrZXk7XG4gICAgbGVuZ3RoID0gX2tleXMubGVuZ3RoO1xuICAgIC8vIEVuc3VyZSB0aGF0IGJvdGggb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIG51bWJlciBvZiBwcm9wZXJ0aWVzIGJlZm9yZSBjb21wYXJpbmcgZGVlcCBlcXVhbGl0eS5cbiAgICBpZiAoa2V5cyhiKS5sZW5ndGggIT09IGxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgLy8gRGVlcCBjb21wYXJlIGVhY2ggbWVtYmVyXG4gICAgICBrZXkgPSBfa2V5c1tsZW5ndGhdO1xuICAgICAgaWYgKCEoaGFzKGIsIGtleSkgJiYgZXEoYVtrZXldLCBiW2tleV0sIGFTdGFjaywgYlN0YWNrKSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgLy8gUmVtb3ZlIHRoZSBmaXJzdCBvYmplY3QgZnJvbSB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gIGFTdGFjay5wb3AoKTtcbiAgYlN0YWNrLnBvcCgpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gUGVyZm9ybSBhIGRlZXAgY29tcGFyaXNvbiB0byBjaGVjayBpZiB0d28gb2JqZWN0cyBhcmUgZXF1YWwuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0VxdWFsKGEsIGIpIHtcbiAgcmV0dXJuIGVxKGEsIGIpO1xufVxuIiwiaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IHsgaGFzRW51bUJ1ZyB9IGZyb20gJy4vX3NldHVwLmpzJztcbmltcG9ydCBjb2xsZWN0Tm9uRW51bVByb3BzIGZyb20gJy4vX2NvbGxlY3ROb25FbnVtUHJvcHMuanMnO1xuXG4vLyBSZXRyaWV2ZSBhbGwgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYW4gb2JqZWN0LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWxsS2V5cyhvYmopIHtcbiAgaWYgKCFpc09iamVjdChvYmopKSByZXR1cm4gW107XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBvYmopIGtleXMucHVzaChrZXkpO1xuICAvLyBBaGVtLCBJRSA8IDkuXG4gIGlmIChoYXNFbnVtQnVnKSBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7XG4gIHJldHVybiBrZXlzO1xufVxuIiwiaW1wb3J0IGdldExlbmd0aCBmcm9tICcuL19nZXRMZW5ndGguanMnO1xuaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBhbGxLZXlzIGZyb20gJy4vYWxsS2V5cy5qcyc7XG5cbi8vIFNpbmNlIHRoZSByZWd1bGFyIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCB0eXBlIHRlc3RzIGRvbid0IHdvcmsgZm9yXG4vLyBzb21lIHR5cGVzIGluIElFIDExLCB3ZSB1c2UgYSBmaW5nZXJwcmludGluZyBoZXVyaXN0aWMgaW5zdGVhZCwgYmFzZWRcbi8vIG9uIHRoZSBtZXRob2RzLiBJdCdzIG5vdCBncmVhdCwgYnV0IGl0J3MgdGhlIGJlc3Qgd2UgZ290LlxuLy8gVGhlIGZpbmdlcnByaW50IG1ldGhvZCBsaXN0cyBhcmUgZGVmaW5lZCBiZWxvdy5cbmV4cG9ydCBmdW5jdGlvbiBpZTExZmluZ2VycHJpbnQobWV0aG9kcykge1xuICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKG1ldGhvZHMpO1xuICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYE1hcGAsIGBXZWFrTWFwYCBhbmQgYFNldGAgaGF2ZSBubyBlbnVtZXJhYmxlIGtleXMuXG4gICAgdmFyIGtleXMgPSBhbGxLZXlzKG9iaik7XG4gICAgaWYgKGdldExlbmd0aChrZXlzKSkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghaXNGdW5jdGlvbihvYmpbbWV0aG9kc1tpXV0pKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIElmIHdlIGFyZSB0ZXN0aW5nIGFnYWluc3QgYFdlYWtNYXBgLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0XG4gICAgLy8gYG9iamAgZG9lc24ndCBoYXZlIGEgYGZvckVhY2hgIG1ldGhvZCBpbiBvcmRlciB0byBkaXN0aW5ndWlzaFxuICAgIC8vIGl0IGZyb20gYSByZWd1bGFyIGBNYXBgLlxuICAgIHJldHVybiBtZXRob2RzICE9PSB3ZWFrTWFwTWV0aG9kcyB8fCAhaXNGdW5jdGlvbihvYmpbZm9yRWFjaE5hbWVdKTtcbiAgfTtcbn1cblxuLy8gSW4gdGhlIGludGVyZXN0IG9mIGNvbXBhY3QgbWluaWZpY2F0aW9uLCB3ZSB3cml0ZVxuLy8gZWFjaCBzdHJpbmcgaW4gdGhlIGZpbmdlcnByaW50cyBvbmx5IG9uY2UuXG52YXIgZm9yRWFjaE5hbWUgPSAnZm9yRWFjaCcsXG4gICAgaGFzTmFtZSA9ICdoYXMnLFxuICAgIGNvbW1vbkluaXQgPSBbJ2NsZWFyJywgJ2RlbGV0ZSddLFxuICAgIG1hcFRhaWwgPSBbJ2dldCcsIGhhc05hbWUsICdzZXQnXTtcblxuLy8gYE1hcGAsIGBXZWFrTWFwYCBhbmQgYFNldGAgZWFjaCBoYXZlIHNsaWdodGx5IGRpZmZlcmVudFxuLy8gY29tYmluYXRpb25zIG9mIHRoZSBhYm92ZSBzdWJsaXN0cy5cbmV4cG9ydCB2YXIgbWFwTWV0aG9kcyA9IGNvbW1vbkluaXQuY29uY2F0KGZvckVhY2hOYW1lLCBtYXBUYWlsKSxcbiAgICB3ZWFrTWFwTWV0aG9kcyA9IGNvbW1vbkluaXQuY29uY2F0KG1hcFRhaWwpLFxuICAgIHNldE1ldGhvZHMgPSBbJ2FkZCddLmNvbmNhdChjb21tb25Jbml0LCBmb3JFYWNoTmFtZSwgaGFzTmFtZSk7XG4iLCJpbXBvcnQgdGFnVGVzdGVyIGZyb20gJy4vX3RhZ1Rlc3Rlci5qcyc7XG5pbXBvcnQgeyBpc0lFMTEgfSBmcm9tICcuL19zdHJpbmdUYWdCdWcuanMnO1xuaW1wb3J0IHsgaWUxMWZpbmdlcnByaW50LCBtYXBNZXRob2RzIH0gIGZyb20gJy4vX21ldGhvZEZpbmdlcnByaW50LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgaXNJRTExID8gaWUxMWZpbmdlcnByaW50KG1hcE1ldGhvZHMpIDogdGFnVGVzdGVyKCdNYXAnKTtcbiIsImltcG9ydCB0YWdUZXN0ZXIgZnJvbSAnLi9fdGFnVGVzdGVyLmpzJztcbmltcG9ydCB7IGlzSUUxMSB9IGZyb20gJy4vX3N0cmluZ1RhZ0J1Zy5qcyc7XG5pbXBvcnQgeyBpZTExZmluZ2VycHJpbnQsIHdlYWtNYXBNZXRob2RzIH0gIGZyb20gJy4vX21ldGhvZEZpbmdlcnByaW50LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgaXNJRTExID8gaWUxMWZpbmdlcnByaW50KHdlYWtNYXBNZXRob2RzKSA6IHRhZ1Rlc3RlcignV2Vha01hcCcpO1xuIiwiaW1wb3J0IHRhZ1Rlc3RlciBmcm9tICcuL190YWdUZXN0ZXIuanMnO1xuaW1wb3J0IHsgaXNJRTExIH0gZnJvbSAnLi9fc3RyaW5nVGFnQnVnLmpzJztcbmltcG9ydCB7IGllMTFmaW5nZXJwcmludCwgc2V0TWV0aG9kcyB9ICBmcm9tICcuL19tZXRob2RGaW5nZXJwcmludC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGlzSUUxMSA/IGllMTFmaW5nZXJwcmludChzZXRNZXRob2RzKSA6IHRhZ1Rlc3RlcignU2V0Jyk7XG4iLCJpbXBvcnQgdGFnVGVzdGVyIGZyb20gJy4vX3RhZ1Rlc3Rlci5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHRhZ1Rlc3RlcignV2Vha1NldCcpO1xuIiwiaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLy8gUmV0cmlldmUgdGhlIHZhbHVlcyBvZiBhbiBvYmplY3QncyBwcm9wZXJ0aWVzLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsdWVzKG9iaikge1xuICB2YXIgX2tleXMgPSBrZXlzKG9iaik7XG4gIHZhciBsZW5ndGggPSBfa2V5cy5sZW5ndGg7XG4gIHZhciB2YWx1ZXMgPSBBcnJheShsZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgdmFsdWVzW2ldID0gb2JqW19rZXlzW2ldXTtcbiAgfVxuICByZXR1cm4gdmFsdWVzO1xufVxuIiwiaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLy8gQ29udmVydCBhbiBvYmplY3QgaW50byBhIGxpc3Qgb2YgYFtrZXksIHZhbHVlXWAgcGFpcnMuXG4vLyBUaGUgb3Bwb3NpdGUgb2YgYF8ub2JqZWN0YCB3aXRoIG9uZSBhcmd1bWVudC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBhaXJzKG9iaikge1xuICB2YXIgX2tleXMgPSBrZXlzKG9iaik7XG4gIHZhciBsZW5ndGggPSBfa2V5cy5sZW5ndGg7XG4gIHZhciBwYWlycyA9IEFycmF5KGxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBwYWlyc1tpXSA9IFtfa2V5c1tpXSwgb2JqW19rZXlzW2ldXV07XG4gIH1cbiAgcmV0dXJuIHBhaXJzO1xufVxuIiwiaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLy8gSW52ZXJ0IHRoZSBrZXlzIGFuZCB2YWx1ZXMgb2YgYW4gb2JqZWN0LiBUaGUgdmFsdWVzIG11c3QgYmUgc2VyaWFsaXphYmxlLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW52ZXJ0KG9iaikge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIHZhciBfa2V5cyA9IGtleXMob2JqKTtcbiAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IF9rZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgcmVzdWx0W29ialtfa2V5c1tpXV1dID0gX2tleXNbaV07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsImltcG9ydCBpc0Z1bmN0aW9uIGZyb20gJy4vaXNGdW5jdGlvbi5qcyc7XG5cbi8vIFJldHVybiBhIHNvcnRlZCBsaXN0IG9mIHRoZSBmdW5jdGlvbiBuYW1lcyBhdmFpbGFibGUgb24gdGhlIG9iamVjdC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZ1bmN0aW9ucyhvYmopIHtcbiAgdmFyIG5hbWVzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICBpZiAoaXNGdW5jdGlvbihvYmpba2V5XSkpIG5hbWVzLnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gbmFtZXMuc29ydCgpO1xufVxuIiwiLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGFzc2lnbmVyIGZ1bmN0aW9ucy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUFzc2lnbmVyKGtleXNGdW5jLCBkZWZhdWx0cykge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgaWYgKGRlZmF1bHRzKSBvYmogPSBPYmplY3Qob2JqKTtcbiAgICBpZiAobGVuZ3RoIDwgMiB8fCBvYmogPT0gbnVsbCkgcmV0dXJuIG9iajtcbiAgICBmb3IgKHZhciBpbmRleCA9IDE7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2luZGV4XSxcbiAgICAgICAgICBrZXlzID0ga2V5c0Z1bmMoc291cmNlKSxcbiAgICAgICAgICBsID0ga2V5cy5sZW5ndGg7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgaWYgKCFkZWZhdWx0cyB8fCBvYmpba2V5XSA9PT0gdm9pZCAwKSBvYmpba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9O1xufVxuIiwiaW1wb3J0IGNyZWF0ZUFzc2lnbmVyIGZyb20gJy4vX2NyZWF0ZUFzc2lnbmVyLmpzJztcbmltcG9ydCBhbGxLZXlzIGZyb20gJy4vYWxsS2V5cy5qcyc7XG5cbi8vIEV4dGVuZCBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgcHJvcGVydGllcyBpbiBwYXNzZWQtaW4gb2JqZWN0KHMpLlxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQXNzaWduZXIoYWxsS2V5cyk7XG4iLCJpbXBvcnQgY3JlYXRlQXNzaWduZXIgZnJvbSAnLi9fY3JlYXRlQXNzaWduZXIuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLy8gQXNzaWducyBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgb3duIHByb3BlcnRpZXMgaW4gdGhlIHBhc3NlZC1pblxuLy8gb2JqZWN0KHMpLlxuLy8gKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9hc3NpZ24pXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVBc3NpZ25lcihrZXlzKTtcbiIsImltcG9ydCBjcmVhdGVBc3NpZ25lciBmcm9tICcuL19jcmVhdGVBc3NpZ25lci5qcyc7XG5pbXBvcnQgYWxsS2V5cyBmcm9tICcuL2FsbEtleXMuanMnO1xuXG4vLyBGaWxsIGluIGEgZ2l2ZW4gb2JqZWN0IHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzLlxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQXNzaWduZXIoYWxsS2V5cywgdHJ1ZSk7XG4iLCJpbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5pbXBvcnQgeyBuYXRpdmVDcmVhdGUgfSBmcm9tICcuL19zZXR1cC5qcyc7XG5cbi8vIENyZWF0ZSBhIG5ha2VkIGZ1bmN0aW9uIHJlZmVyZW5jZSBmb3Igc3Vycm9nYXRlLXByb3RvdHlwZS1zd2FwcGluZy5cbmZ1bmN0aW9uIGN0b3IoKSB7XG4gIHJldHVybiBmdW5jdGlvbigpe307XG59XG5cbi8vIEFuIGludGVybmFsIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIG5ldyBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIGFub3RoZXIuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiYXNlQ3JlYXRlKHByb3RvdHlwZSkge1xuICBpZiAoIWlzT2JqZWN0KHByb3RvdHlwZSkpIHJldHVybiB7fTtcbiAgaWYgKG5hdGl2ZUNyZWF0ZSkgcmV0dXJuIG5hdGl2ZUNyZWF0ZShwcm90b3R5cGUpO1xuICB2YXIgQ3RvciA9IGN0b3IoKTtcbiAgQ3Rvci5wcm90b3R5cGUgPSBwcm90b3R5cGU7XG4gIHZhciByZXN1bHQgPSBuZXcgQ3RvcjtcbiAgQ3Rvci5wcm90b3R5cGUgPSBudWxsO1xuICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IGJhc2VDcmVhdGUgZnJvbSAnLi9fYmFzZUNyZWF0ZS5qcyc7XG5pbXBvcnQgZXh0ZW5kT3duIGZyb20gJy4vZXh0ZW5kT3duLmpzJztcblxuLy8gQ3JlYXRlcyBhbiBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIHRoZSBnaXZlbiBwcm90b3R5cGUgb2JqZWN0LlxuLy8gSWYgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGFyZSBwcm92aWRlZCB0aGVuIHRoZXkgd2lsbCBiZSBhZGRlZCB0byB0aGVcbi8vIGNyZWF0ZWQgb2JqZWN0LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlKHByb3RvdHlwZSwgcHJvcHMpIHtcbiAgdmFyIHJlc3VsdCA9IGJhc2VDcmVhdGUocHJvdG90eXBlKTtcbiAgaWYgKHByb3BzKSBleHRlbmRPd24ocmVzdWx0LCBwcm9wcyk7XG4gIHJldHVybiByZXN1bHQ7XG59XG4iLCJpbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGV4dGVuZCBmcm9tICcuL2V4dGVuZC5qcyc7XG5cbi8vIENyZWF0ZSBhIChzaGFsbG93LWNsb25lZCkgZHVwbGljYXRlIG9mIGFuIG9iamVjdC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNsb25lKG9iaikge1xuICBpZiAoIWlzT2JqZWN0KG9iaikpIHJldHVybiBvYmo7XG4gIHJldHVybiBpc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IGV4dGVuZCh7fSwgb2JqKTtcbn1cbiIsIi8vIEludm9rZXMgYGludGVyY2VwdG9yYCB3aXRoIHRoZSBgb2JqYCBhbmQgdGhlbiByZXR1cm5zIGBvYmpgLlxuLy8gVGhlIHByaW1hcnkgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBcInRhcCBpbnRvXCIgYSBtZXRob2QgY2hhaW4sIGluXG4vLyBvcmRlciB0byBwZXJmb3JtIG9wZXJhdGlvbnMgb24gaW50ZXJtZWRpYXRlIHJlc3VsdHMgd2l0aGluIHRoZSBjaGFpbi5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRhcChvYmosIGludGVyY2VwdG9yKSB7XG4gIGludGVyY2VwdG9yKG9iaik7XG4gIHJldHVybiBvYmo7XG59XG4iLCJpbXBvcnQgXyBmcm9tICcuL3VuZGVyc2NvcmUuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcblxuLy8gTm9ybWFsaXplIGEgKGRlZXApIHByb3BlcnR5IGBwYXRoYCB0byBhcnJheS5cbi8vIExpa2UgYF8uaXRlcmF0ZWVgLCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjdXN0b21pemVkLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9QYXRoKHBhdGgpIHtcbiAgcmV0dXJuIGlzQXJyYXkocGF0aCkgPyBwYXRoIDogW3BhdGhdO1xufVxuXy50b1BhdGggPSB0b1BhdGg7XG4iLCJpbXBvcnQgXyBmcm9tICcuL3VuZGVyc2NvcmUuanMnO1xuaW1wb3J0ICcuL3RvUGF0aC5qcyc7XG5cbi8vIEludGVybmFsIHdyYXBwZXIgZm9yIGBfLnRvUGF0aGAgdG8gZW5hYmxlIG1pbmlmaWNhdGlvbi5cbi8vIFNpbWlsYXIgdG8gYGNiYCBmb3IgYF8uaXRlcmF0ZWVgLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9QYXRoKHBhdGgpIHtcbiAgcmV0dXJuIF8udG9QYXRoKHBhdGgpO1xufVxuIiwiLy8gSW50ZXJuYWwgZnVuY3Rpb24gdG8gb2J0YWluIGEgbmVzdGVkIHByb3BlcnR5IGluIGBvYmpgIGFsb25nIGBwYXRoYC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlZXBHZXQob2JqLCBwYXRoKSB7XG4gIHZhciBsZW5ndGggPSBwYXRoLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcbiAgICBvYmogPSBvYmpbcGF0aFtpXV07XG4gIH1cbiAgcmV0dXJuIGxlbmd0aCA/IG9iaiA6IHZvaWQgMDtcbn1cbiIsImltcG9ydCB0b1BhdGggZnJvbSAnLi9fdG9QYXRoLmpzJztcbmltcG9ydCBkZWVwR2V0IGZyb20gJy4vX2RlZXBHZXQuanMnO1xuaW1wb3J0IGlzVW5kZWZpbmVkIGZyb20gJy4vaXNVbmRlZmluZWQuanMnO1xuXG4vLyBHZXQgdGhlIHZhbHVlIG9mIHRoZSAoZGVlcCkgcHJvcGVydHkgb24gYHBhdGhgIGZyb20gYG9iamVjdGAuXG4vLyBJZiBhbnkgcHJvcGVydHkgaW4gYHBhdGhgIGRvZXMgbm90IGV4aXN0IG9yIGlmIHRoZSB2YWx1ZSBpc1xuLy8gYHVuZGVmaW5lZGAsIHJldHVybiBgZGVmYXVsdFZhbHVlYCBpbnN0ZWFkLlxuLy8gVGhlIGBwYXRoYCBpcyBub3JtYWxpemVkIHRocm91Z2ggYF8udG9QYXRoYC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICB2YXIgdmFsdWUgPSBkZWVwR2V0KG9iamVjdCwgdG9QYXRoKHBhdGgpKTtcbiAgcmV0dXJuIGlzVW5kZWZpbmVkKHZhbHVlKSA/IGRlZmF1bHRWYWx1ZSA6IHZhbHVlO1xufVxuIiwiaW1wb3J0IF9oYXMgZnJvbSAnLi9faGFzLmpzJztcbmltcG9ydCB0b1BhdGggZnJvbSAnLi9fdG9QYXRoLmpzJztcblxuLy8gU2hvcnRjdXQgZnVuY3Rpb24gZm9yIGNoZWNraW5nIGlmIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBwcm9wZXJ0eSBkaXJlY3RseSBvblxuLy8gaXRzZWxmIChpbiBvdGhlciB3b3Jkcywgbm90IG9uIGEgcHJvdG90eXBlKS4gVW5saWtlIHRoZSBpbnRlcm5hbCBgaGFzYFxuLy8gZnVuY3Rpb24sIHRoaXMgcHVibGljIHZlcnNpb24gY2FuIGFsc28gdHJhdmVyc2UgbmVzdGVkIHByb3BlcnRpZXMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoYXMob2JqLCBwYXRoKSB7XG4gIHBhdGggPSB0b1BhdGgocGF0aCk7XG4gIHZhciBsZW5ndGggPSBwYXRoLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBwYXRoW2ldO1xuICAgIGlmICghX2hhcyhvYmosIGtleSkpIHJldHVybiBmYWxzZTtcbiAgICBvYmogPSBvYmpba2V5XTtcbiAgfVxuICByZXR1cm4gISFsZW5ndGg7XG59XG4iLCIvLyBLZWVwIHRoZSBpZGVudGl0eSBmdW5jdGlvbiBhcm91bmQgZm9yIGRlZmF1bHQgaXRlcmF0ZWVzLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuIiwiaW1wb3J0IGV4dGVuZE93biBmcm9tICcuL2V4dGVuZE93bi5qcyc7XG5pbXBvcnQgaXNNYXRjaCBmcm9tICcuL2lzTWF0Y2guanMnO1xuXG4vLyBSZXR1cm5zIGEgcHJlZGljYXRlIGZvciBjaGVja2luZyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2Zcbi8vIGBrZXk6dmFsdWVgIHBhaXJzLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWF0Y2hlcihhdHRycykge1xuICBhdHRycyA9IGV4dGVuZE93bih7fSwgYXR0cnMpO1xuICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIGlzTWF0Y2gob2JqLCBhdHRycyk7XG4gIH07XG59XG4iLCJpbXBvcnQgZGVlcEdldCBmcm9tICcuL19kZWVwR2V0LmpzJztcbmltcG9ydCB0b1BhdGggZnJvbSAnLi9fdG9QYXRoLmpzJztcblxuLy8gQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gcGFzc2VkIGFuIG9iamVjdCwgd2lsbCB0cmF2ZXJzZSB0aGF0IG9iamVjdOKAmXNcbi8vIHByb3BlcnRpZXMgZG93biB0aGUgZ2l2ZW4gYHBhdGhgLCBzcGVjaWZpZWQgYXMgYW4gYXJyYXkgb2Yga2V5cyBvciBpbmRpY2VzLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcHJvcGVydHkocGF0aCkge1xuICBwYXRoID0gdG9QYXRoKHBhdGgpO1xuICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIGRlZXBHZXQob2JqLCBwYXRoKTtcbiAgfTtcbn1cbiIsIi8vIEludGVybmFsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBlZmZpY2llbnQgKGZvciBjdXJyZW50IGVuZ2luZXMpIHZlcnNpb25cbi8vIG9mIHRoZSBwYXNzZWQtaW4gY2FsbGJhY2ssIHRvIGJlIHJlcGVhdGVkbHkgYXBwbGllZCBpbiBvdGhlciBVbmRlcnNjb3JlXG4vLyBmdW5jdGlvbnMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvcHRpbWl6ZUNiKGZ1bmMsIGNvbnRleHQsIGFyZ0NvdW50KSB7XG4gIGlmIChjb250ZXh0ID09PSB2b2lkIDApIHJldHVybiBmdW5jO1xuICBzd2l0Y2ggKGFyZ0NvdW50ID09IG51bGwgPyAzIDogYXJnQ291bnQpIHtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSk7XG4gICAgfTtcbiAgICAvLyBUaGUgMi1hcmd1bWVudCBjYXNlIGlzIG9taXR0ZWQgYmVjYXVzZSB3ZeKAmXJlIG5vdCB1c2luZyBpdC5cbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICB9O1xuICAgIGNhc2UgNDogcmV0dXJuIGZ1bmN0aW9uKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cbiIsImltcG9ydCBpZGVudGl0eSBmcm9tICcuL2lkZW50aXR5LmpzJztcbmltcG9ydCBpc0Z1bmN0aW9uIGZyb20gJy4vaXNGdW5jdGlvbi5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IG1hdGNoZXIgZnJvbSAnLi9tYXRjaGVyLmpzJztcbmltcG9ydCBwcm9wZXJ0eSBmcm9tICcuL3Byb3BlcnR5LmpzJztcbmltcG9ydCBvcHRpbWl6ZUNiIGZyb20gJy4vX29wdGltaXplQ2IuanMnO1xuXG4vLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBjYWxsYmFja3MgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBlYWNoXG4vLyBlbGVtZW50IGluIGEgY29sbGVjdGlvbiwgcmV0dXJuaW5nIHRoZSBkZXNpcmVkIHJlc3VsdCDigJQgZWl0aGVyIGBfLmlkZW50aXR5YCxcbi8vIGFuIGFyYml0cmFyeSBjYWxsYmFjaywgYSBwcm9wZXJ0eSBtYXRjaGVyLCBvciBhIHByb3BlcnR5IGFjY2Vzc29yLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYmFzZUl0ZXJhdGVlKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIGlkZW50aXR5O1xuICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybiBvcHRpbWl6ZUNiKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCk7XG4gIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgIWlzQXJyYXkodmFsdWUpKSByZXR1cm4gbWF0Y2hlcih2YWx1ZSk7XG4gIHJldHVybiBwcm9wZXJ0eSh2YWx1ZSk7XG59XG4iLCJpbXBvcnQgXyBmcm9tICcuL3VuZGVyc2NvcmUuanMnO1xuaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuXG4vLyBFeHRlcm5hbCB3cmFwcGVyIGZvciBvdXIgY2FsbGJhY2sgZ2VuZXJhdG9yLiBVc2VycyBtYXkgY3VzdG9taXplXG4vLyBgXy5pdGVyYXRlZWAgaWYgdGhleSB3YW50IGFkZGl0aW9uYWwgcHJlZGljYXRlL2l0ZXJhdGVlIHNob3J0aGFuZCBzdHlsZXMuXG4vLyBUaGlzIGFic3RyYWN0aW9uIGhpZGVzIHRoZSBpbnRlcm5hbC1vbmx5IGBhcmdDb3VudGAgYXJndW1lbnQuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpdGVyYXRlZSh2YWx1ZSwgY29udGV4dCkge1xuICByZXR1cm4gYmFzZUl0ZXJhdGVlKHZhbHVlLCBjb250ZXh0LCBJbmZpbml0eSk7XG59XG5fLml0ZXJhdGVlID0gaXRlcmF0ZWU7XG4iLCJpbXBvcnQgXyBmcm9tICcuL3VuZGVyc2NvcmUuanMnO1xuaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IGl0ZXJhdGVlIGZyb20gJy4vaXRlcmF0ZWUuanMnO1xuXG4vLyBUaGUgZnVuY3Rpb24gd2UgY2FsbCBpbnRlcm5hbGx5IHRvIGdlbmVyYXRlIGEgY2FsbGJhY2suIEl0IGludm9rZXNcbi8vIGBfLml0ZXJhdGVlYCBpZiBvdmVycmlkZGVuLCBvdGhlcndpc2UgYGJhc2VJdGVyYXRlZWAuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjYih2YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpIHtcbiAgaWYgKF8uaXRlcmF0ZWUgIT09IGl0ZXJhdGVlKSByZXR1cm4gXy5pdGVyYXRlZSh2YWx1ZSwgY29udGV4dCk7XG4gIHJldHVybiBiYXNlSXRlcmF0ZWUodmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KTtcbn1cbiIsImltcG9ydCBjYiBmcm9tICcuL19jYi5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vLyBSZXR1cm5zIHRoZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBgaXRlcmF0ZWVgIHRvIGVhY2ggZWxlbWVudCBvZiBgb2JqYC5cbi8vIEluIGNvbnRyYXN0IHRvIGBfLm1hcGAgaXQgcmV0dXJucyBhbiBvYmplY3QuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYXBPYmplY3Qob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgdmFyIF9rZXlzID0ga2V5cyhvYmopLFxuICAgICAgbGVuZ3RoID0gX2tleXMubGVuZ3RoLFxuICAgICAgcmVzdWx0cyA9IHt9O1xuICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgdmFyIGN1cnJlbnRLZXkgPSBfa2V5c1tpbmRleF07XG4gICAgcmVzdWx0c1tjdXJyZW50S2V5XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0cztcbn1cbiIsIi8vIFByZWRpY2F0ZS1nZW5lcmF0aW5nIGZ1bmN0aW9uLiBPZnRlbiB1c2VmdWwgb3V0c2lkZSBvZiBVbmRlcnNjb3JlLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbm9vcCgpe31cbiIsImltcG9ydCBub29wIGZyb20gJy4vbm9vcC5qcyc7XG5pbXBvcnQgZ2V0IGZyb20gJy4vZ2V0LmpzJztcblxuLy8gR2VuZXJhdGVzIGEgZnVuY3Rpb24gZm9yIGEgZ2l2ZW4gb2JqZWN0IHRoYXQgcmV0dXJucyBhIGdpdmVuIHByb3BlcnR5LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcHJvcGVydHlPZihvYmopIHtcbiAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gbm9vcDtcbiAgcmV0dXJuIGZ1bmN0aW9uKHBhdGgpIHtcbiAgICByZXR1cm4gZ2V0KG9iaiwgcGF0aCk7XG4gIH07XG59XG4iLCJpbXBvcnQgb3B0aW1pemVDYiBmcm9tICcuL19vcHRpbWl6ZUNiLmpzJztcblxuLy8gUnVuIGEgZnVuY3Rpb24gKipuKiogdGltZXMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0aW1lcyhuLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICB2YXIgYWNjdW0gPSBBcnJheShNYXRoLm1heCgwLCBuKSk7XG4gIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCwgMSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSBhY2N1bVtpXSA9IGl0ZXJhdGVlKGkpO1xuICByZXR1cm4gYWNjdW07XG59XG4iLCIvLyBSZXR1cm4gYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIGBtaW5gIGFuZCBgbWF4YCAoaW5jbHVzaXZlKS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJhbmRvbShtaW4sIG1heCkge1xuICBpZiAobWF4ID09IG51bGwpIHtcbiAgICBtYXggPSBtaW47XG4gICAgbWluID0gMDtcbiAgfVxuICByZXR1cm4gbWluICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpKTtcbn1cbiIsIi8vIEEgKHBvc3NpYmx5IGZhc3Rlcikgd2F5IHRvIGdldCB0aGUgY3VycmVudCB0aW1lc3RhbXAgYXMgYW4gaW50ZWdlci5cbmV4cG9ydCBkZWZhdWx0IERhdGUubm93IHx8IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG59O1xuIiwiaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLy8gSW50ZXJuYWwgaGVscGVyIHRvIGdlbmVyYXRlIGZ1bmN0aW9ucyBmb3IgZXNjYXBpbmcgYW5kIHVuZXNjYXBpbmcgc3RyaW5nc1xuLy8gdG8vZnJvbSBIVE1MIGludGVycG9sYXRpb24uXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVFc2NhcGVyKG1hcCkge1xuICB2YXIgZXNjYXBlciA9IGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIG1hcFttYXRjaF07XG4gIH07XG4gIC8vIFJlZ2V4ZXMgZm9yIGlkZW50aWZ5aW5nIGEga2V5IHRoYXQgbmVlZHMgdG8gYmUgZXNjYXBlZC5cbiAgdmFyIHNvdXJjZSA9ICcoPzonICsga2V5cyhtYXApLmpvaW4oJ3wnKSArICcpJztcbiAgdmFyIHRlc3RSZWdleHAgPSBSZWdFeHAoc291cmNlKTtcbiAgdmFyIHJlcGxhY2VSZWdleHAgPSBSZWdFeHAoc291cmNlLCAnZycpO1xuICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgc3RyaW5nID0gc3RyaW5nID09IG51bGwgPyAnJyA6ICcnICsgc3RyaW5nO1xuICAgIHJldHVybiB0ZXN0UmVnZXhwLnRlc3Qoc3RyaW5nKSA/IHN0cmluZy5yZXBsYWNlKHJlcGxhY2VSZWdleHAsIGVzY2FwZXIpIDogc3RyaW5nO1xuICB9O1xufVxuIiwiLy8gSW50ZXJuYWwgbGlzdCBvZiBIVE1MIGVudGl0aWVzIGZvciBlc2NhcGluZy5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgJyYnOiAnJmFtcDsnLFxuICAnPCc6ICcmbHQ7JyxcbiAgJz4nOiAnJmd0OycsXG4gICdcIic6ICcmcXVvdDsnLFxuICBcIidcIjogJyYjeDI3OycsXG4gICdgJzogJyYjeDYwOydcbn07XG4iLCJpbXBvcnQgY3JlYXRlRXNjYXBlciBmcm9tICcuL19jcmVhdGVFc2NhcGVyLmpzJztcbmltcG9ydCBlc2NhcGVNYXAgZnJvbSAnLi9fZXNjYXBlTWFwLmpzJztcblxuLy8gRnVuY3Rpb24gZm9yIGVzY2FwaW5nIHN0cmluZ3MgdG8gSFRNTCBpbnRlcnBvbGF0aW9uLlxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlRXNjYXBlcihlc2NhcGVNYXApO1xuIiwiaW1wb3J0IGNyZWF0ZUVzY2FwZXIgZnJvbSAnLi9fY3JlYXRlRXNjYXBlci5qcyc7XG5pbXBvcnQgdW5lc2NhcGVNYXAgZnJvbSAnLi9fdW5lc2NhcGVNYXAuanMnO1xuXG4vLyBGdW5jdGlvbiBmb3IgdW5lc2NhcGluZyBzdHJpbmdzIGZyb20gSFRNTCBpbnRlcnBvbGF0aW9uLlxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlRXNjYXBlcih1bmVzY2FwZU1hcCk7XG4iLCJpbXBvcnQgaW52ZXJ0IGZyb20gJy4vaW52ZXJ0LmpzJztcbmltcG9ydCBlc2NhcGVNYXAgZnJvbSAnLi9fZXNjYXBlTWFwLmpzJztcblxuLy8gSW50ZXJuYWwgbGlzdCBvZiBIVE1MIGVudGl0aWVzIGZvciB1bmVzY2FwaW5nLlxuZXhwb3J0IGRlZmF1bHQgaW52ZXJ0KGVzY2FwZU1hcCk7XG4iLCJpbXBvcnQgXyBmcm9tICcuL3VuZGVyc2NvcmUuanMnO1xuXG4vLyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxlIHRlbXBsYXRlIGRlbGltaXRlcnMuIENoYW5nZSB0aGVcbi8vIGZvbGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy5cbmV4cG9ydCBkZWZhdWx0IF8udGVtcGxhdGVTZXR0aW5ncyA9IHtcbiAgZXZhbHVhdGU6IC88JShbXFxzXFxTXSs/KSU+L2csXG4gIGludGVycG9sYXRlOiAvPCU9KFtcXHNcXFNdKz8pJT4vZyxcbiAgZXNjYXBlOiAvPCUtKFtcXHNcXFNdKz8pJT4vZ1xufTtcbiIsImltcG9ydCBkZWZhdWx0cyBmcm9tICcuL2RlZmF1bHRzLmpzJztcbmltcG9ydCBfIGZyb20gJy4vdW5kZXJzY29yZS5qcyc7XG5pbXBvcnQgJy4vdGVtcGxhdGVTZXR0aW5ncy5qcyc7XG5cbi8vIFdoZW4gY3VzdG9taXppbmcgYF8udGVtcGxhdGVTZXR0aW5nc2AsIGlmIHlvdSBkb24ndCB3YW50IHRvIGRlZmluZSBhblxuLy8gaW50ZXJwb2xhdGlvbiwgZXZhbHVhdGlvbiBvciBlc2NhcGluZyByZWdleCwgd2UgbmVlZCBvbmUgdGhhdCBpc1xuLy8gZ3VhcmFudGVlZCBub3QgdG8gbWF0Y2guXG52YXIgbm9NYXRjaCA9IC8oLileLztcblxuLy8gQ2VydGFpbiBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUgZXNjYXBlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIHB1dCBpbnRvIGFcbi8vIHN0cmluZyBsaXRlcmFsLlxudmFyIGVzY2FwZXMgPSB7XG4gIFwiJ1wiOiBcIidcIixcbiAgJ1xcXFwnOiAnXFxcXCcsXG4gICdcXHInOiAncicsXG4gICdcXG4nOiAnbicsXG4gICdcXHUyMDI4JzogJ3UyMDI4JyxcbiAgJ1xcdTIwMjknOiAndTIwMjknXG59O1xuXG52YXIgZXNjYXBlUmVnRXhwID0gL1xcXFx8J3xcXHJ8XFxufFxcdTIwMjh8XFx1MjAyOS9nO1xuXG5mdW5jdGlvbiBlc2NhcGVDaGFyKG1hdGNoKSB7XG4gIHJldHVybiAnXFxcXCcgKyBlc2NhcGVzW21hdGNoXTtcbn1cblxuLy8gSW4gb3JkZXIgdG8gcHJldmVudCB0aGlyZC1wYXJ0eSBjb2RlIGluamVjdGlvbiB0aHJvdWdoXG4vLyBgXy50ZW1wbGF0ZVNldHRpbmdzLnZhcmlhYmxlYCwgd2UgdGVzdCBpdCBhZ2FpbnN0IHRoZSBmb2xsb3dpbmcgcmVndWxhclxuLy8gZXhwcmVzc2lvbi4gSXQgaXMgaW50ZW50aW9uYWxseSBhIGJpdCBtb3JlIGxpYmVyYWwgdGhhbiBqdXN0IG1hdGNoaW5nIHZhbGlkXG4vLyBpZGVudGlmaWVycywgYnV0IHN0aWxsIHByZXZlbnRzIHBvc3NpYmxlIGxvb3Bob2xlcyB0aHJvdWdoIGRlZmF1bHRzIG9yXG4vLyBkZXN0cnVjdHVyaW5nIGFzc2lnbm1lbnQuXG52YXIgYmFyZUlkZW50aWZpZXIgPSAvXlxccyooXFx3fFxcJCkrXFxzKiQvO1xuXG4vLyBKYXZhU2NyaXB0IG1pY3JvLXRlbXBsYXRpbmcsIHNpbWlsYXIgdG8gSm9obiBSZXNpZydzIGltcGxlbWVudGF0aW9uLlxuLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5nIGhhbmRsZXMgYXJiaXRyYXJ5IGRlbGltaXRlcnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLFxuLy8gYW5kIGNvcnJlY3RseSBlc2NhcGVzIHF1b3RlcyB3aXRoaW4gaW50ZXJwb2xhdGVkIGNvZGUuXG4vLyBOQjogYG9sZFNldHRpbmdzYCBvbmx5IGV4aXN0cyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0ZW1wbGF0ZSh0ZXh0LCBzZXR0aW5ncywgb2xkU2V0dGluZ3MpIHtcbiAgaWYgKCFzZXR0aW5ncyAmJiBvbGRTZXR0aW5ncykgc2V0dGluZ3MgPSBvbGRTZXR0aW5ncztcbiAgc2V0dGluZ3MgPSBkZWZhdWx0cyh7fSwgc2V0dGluZ3MsIF8udGVtcGxhdGVTZXR0aW5ncyk7XG5cbiAgLy8gQ29tYmluZSBkZWxpbWl0ZXJzIGludG8gb25lIHJlZ3VsYXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24uXG4gIHZhciBtYXRjaGVyID0gUmVnRXhwKFtcbiAgICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gpLnNvdXJjZSxcbiAgICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01hdGNoKS5zb3VyY2VcbiAgXS5qb2luKCd8JykgKyAnfCQnLCAnZycpO1xuXG4gIC8vIENvbXBpbGUgdGhlIHRlbXBsYXRlIHNvdXJjZSwgZXNjYXBpbmcgc3RyaW5nIGxpdGVyYWxzIGFwcHJvcHJpYXRlbHkuXG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBzb3VyY2UgPSBcIl9fcCs9J1wiO1xuICB0ZXh0LnJlcGxhY2UobWF0Y2hlciwgZnVuY3Rpb24obWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHtcbiAgICBzb3VyY2UgKz0gdGV4dC5zbGljZShpbmRleCwgb2Zmc2V0KS5yZXBsYWNlKGVzY2FwZVJlZ0V4cCwgZXNjYXBlQ2hhcik7XG4gICAgaW5kZXggPSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7XG5cbiAgICBpZiAoZXNjYXBlKSB7XG4gICAgICBzb3VyY2UgKz0gXCInK1xcbigoX190PShcIiArIGVzY2FwZSArIFwiKSk9PW51bGw/Jyc6Xy5lc2NhcGUoX190KSkrXFxuJ1wiO1xuICAgIH0gZWxzZSBpZiAoaW50ZXJwb2xhdGUpIHtcbiAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgaW50ZXJwb2xhdGUgKyBcIikpPT1udWxsPycnOl9fdCkrXFxuJ1wiO1xuICAgIH0gZWxzZSBpZiAoZXZhbHVhdGUpIHtcbiAgICAgIHNvdXJjZSArPSBcIic7XFxuXCIgKyBldmFsdWF0ZSArIFwiXFxuX19wKz0nXCI7XG4gICAgfVxuXG4gICAgLy8gQWRvYmUgVk1zIG5lZWQgdGhlIG1hdGNoIHJldHVybmVkIHRvIHByb2R1Y2UgdGhlIGNvcnJlY3Qgb2Zmc2V0LlxuICAgIHJldHVybiBtYXRjaDtcbiAgfSk7XG4gIHNvdXJjZSArPSBcIic7XFxuXCI7XG5cbiAgdmFyIGFyZ3VtZW50ID0gc2V0dGluZ3MudmFyaWFibGU7XG4gIGlmIChhcmd1bWVudCkge1xuICAgIC8vIEluc3VyZSBhZ2FpbnN0IHRoaXJkLXBhcnR5IGNvZGUgaW5qZWN0aW9uLiAoQ1ZFLTIwMjEtMjMzNTgpXG4gICAgaWYgKCFiYXJlSWRlbnRpZmllci50ZXN0KGFyZ3VtZW50KSkgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ3ZhcmlhYmxlIGlzIG5vdCBhIGJhcmUgaWRlbnRpZmllcjogJyArIGFyZ3VtZW50XG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBhIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVzIGluIGxvY2FsIHNjb3BlLlxuICAgIHNvdXJjZSA9ICd3aXRoKG9ianx8e30pe1xcbicgKyBzb3VyY2UgKyAnfVxcbic7XG4gICAgYXJndW1lbnQgPSAnb2JqJztcbiAgfVxuXG4gIHNvdXJjZSA9IFwidmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLFwiICtcbiAgICBcInByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1bWVudHMsJycpO307XFxuXCIgK1xuICAgIHNvdXJjZSArICdyZXR1cm4gX19wO1xcbic7XG5cbiAgdmFyIHJlbmRlcjtcbiAgdHJ5IHtcbiAgICByZW5kZXIgPSBuZXcgRnVuY3Rpb24oYXJndW1lbnQsICdfJywgc291cmNlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGUuc291cmNlID0gc291cmNlO1xuICAgIHRocm93IGU7XG4gIH1cblxuICB2YXIgdGVtcGxhdGUgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgcmV0dXJuIHJlbmRlci5jYWxsKHRoaXMsIGRhdGEsIF8pO1xuICB9O1xuXG4gIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIHNvdXJjZSBhcyBhIGNvbnZlbmllbmNlIGZvciBwcmVjb21waWxhdGlvbi5cbiAgdGVtcGxhdGUuc291cmNlID0gJ2Z1bmN0aW9uKCcgKyBhcmd1bWVudCArICcpe1xcbicgKyBzb3VyY2UgKyAnfSc7XG5cbiAgcmV0dXJuIHRlbXBsYXRlO1xufVxuIiwiaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCB0b1BhdGggZnJvbSAnLi9fdG9QYXRoLmpzJztcblxuLy8gVHJhdmVyc2VzIHRoZSBjaGlsZHJlbiBvZiBgb2JqYCBhbG9uZyBgcGF0aGAuIElmIGEgY2hpbGQgaXMgYSBmdW5jdGlvbiwgaXRcbi8vIGlzIGludm9rZWQgd2l0aCBpdHMgcGFyZW50IGFzIGNvbnRleHQuIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBmaW5hbFxuLy8gY2hpbGQsIG9yIGBmYWxsYmFja2AgaWYgYW55IGNoaWxkIGlzIHVuZGVmaW5lZC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlc3VsdChvYmosIHBhdGgsIGZhbGxiYWNrKSB7XG4gIHBhdGggPSB0b1BhdGgocGF0aCk7XG4gIHZhciBsZW5ndGggPSBwYXRoLmxlbmd0aDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihmYWxsYmFjaykgPyBmYWxsYmFjay5jYWxsKG9iaikgOiBmYWxsYmFjaztcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHByb3AgPSBvYmogPT0gbnVsbCA/IHZvaWQgMCA6IG9ialtwYXRoW2ldXTtcbiAgICBpZiAocHJvcCA9PT0gdm9pZCAwKSB7XG4gICAgICBwcm9wID0gZmFsbGJhY2s7XG4gICAgICBpID0gbGVuZ3RoOyAvLyBFbnN1cmUgd2UgZG9uJ3QgY29udGludWUgaXRlcmF0aW5nLlxuICAgIH1cbiAgICBvYmogPSBpc0Z1bmN0aW9uKHByb3ApID8gcHJvcC5jYWxsKG9iaikgOiBwcm9wO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG4iLCIvLyBHZW5lcmF0ZSBhIHVuaXF1ZSBpbnRlZ2VyIGlkICh1bmlxdWUgd2l0aGluIHRoZSBlbnRpcmUgY2xpZW50IHNlc3Npb24pLlxuLy8gVXNlZnVsIGZvciB0ZW1wb3JhcnkgRE9NIGlkcy5cbnZhciBpZENvdW50ZXIgPSAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdW5pcXVlSWQocHJlZml4KSB7XG4gIHZhciBpZCA9ICsraWRDb3VudGVyICsgJyc7XG4gIHJldHVybiBwcmVmaXggPyBwcmVmaXggKyBpZCA6IGlkO1xufVxuIiwiaW1wb3J0IF8gZnJvbSAnLi91bmRlcnNjb3JlLmpzJztcblxuLy8gU3RhcnQgY2hhaW5pbmcgYSB3cmFwcGVkIFVuZGVyc2NvcmUgb2JqZWN0LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2hhaW4ob2JqKSB7XG4gIHZhciBpbnN0YW5jZSA9IF8ob2JqKTtcbiAgaW5zdGFuY2UuX2NoYWluID0gdHJ1ZTtcbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuIiwiaW1wb3J0IGJhc2VDcmVhdGUgZnJvbSAnLi9fYmFzZUNyZWF0ZS5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5cbi8vIEludGVybmFsIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYHNvdXJjZUZ1bmNgIGJvdW5kIHRvIGBjb250ZXh0YCB3aXRoIG9wdGlvbmFsXG4vLyBgYXJnc2AuIERldGVybWluZXMgd2hldGhlciB0byBleGVjdXRlIGEgZnVuY3Rpb24gYXMgYSBjb25zdHJ1Y3RvciBvciBhcyBhXG4vLyBub3JtYWwgZnVuY3Rpb24uXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleGVjdXRlQm91bmQoc291cmNlRnVuYywgYm91bmRGdW5jLCBjb250ZXh0LCBjYWxsaW5nQ29udGV4dCwgYXJncykge1xuICBpZiAoIShjYWxsaW5nQ29udGV4dCBpbnN0YW5jZW9mIGJvdW5kRnVuYykpIHJldHVybiBzb3VyY2VGdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICB2YXIgc2VsZiA9IGJhc2VDcmVhdGUoc291cmNlRnVuYy5wcm90b3R5cGUpO1xuICB2YXIgcmVzdWx0ID0gc291cmNlRnVuYy5hcHBseShzZWxmLCBhcmdzKTtcbiAgaWYgKGlzT2JqZWN0KHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gIHJldHVybiBzZWxmO1xufVxuIiwiaW1wb3J0IHJlc3RBcmd1bWVudHMgZnJvbSAnLi9yZXN0QXJndW1lbnRzLmpzJztcbmltcG9ydCBleGVjdXRlQm91bmQgZnJvbSAnLi9fZXhlY3V0ZUJvdW5kLmpzJztcbmltcG9ydCBfIGZyb20gJy4vdW5kZXJzY29yZS5qcyc7XG5cbi8vIFBhcnRpYWxseSBhcHBseSBhIGZ1bmN0aW9uIGJ5IGNyZWF0aW5nIGEgdmVyc2lvbiB0aGF0IGhhcyBoYWQgc29tZSBvZiBpdHNcbi8vIGFyZ3VtZW50cyBwcmUtZmlsbGVkLCB3aXRob3V0IGNoYW5naW5nIGl0cyBkeW5hbWljIGB0aGlzYCBjb250ZXh0LiBgX2AgYWN0c1xuLy8gYXMgYSBwbGFjZWhvbGRlciBieSBkZWZhdWx0LCBhbGxvd2luZyBhbnkgY29tYmluYXRpb24gb2YgYXJndW1lbnRzIHRvIGJlXG4vLyBwcmUtZmlsbGVkLiBTZXQgYF8ucGFydGlhbC5wbGFjZWhvbGRlcmAgZm9yIGEgY3VzdG9tIHBsYWNlaG9sZGVyIGFyZ3VtZW50LlxudmFyIHBhcnRpYWwgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGZ1bmMsIGJvdW5kQXJncykge1xuICB2YXIgcGxhY2Vob2xkZXIgPSBwYXJ0aWFsLnBsYWNlaG9sZGVyO1xuICB2YXIgYm91bmQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcG9zaXRpb24gPSAwLCBsZW5ndGggPSBib3VuZEFyZ3MubGVuZ3RoO1xuICAgIHZhciBhcmdzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gYm91bmRBcmdzW2ldID09PSBwbGFjZWhvbGRlciA/IGFyZ3VtZW50c1twb3NpdGlvbisrXSA6IGJvdW5kQXJnc1tpXTtcbiAgICB9XG4gICAgd2hpbGUgKHBvc2l0aW9uIDwgYXJndW1lbnRzLmxlbmd0aCkgYXJncy5wdXNoKGFyZ3VtZW50c1twb3NpdGlvbisrXSk7XG4gICAgcmV0dXJuIGV4ZWN1dGVCb3VuZChmdW5jLCBib3VuZCwgdGhpcywgdGhpcywgYXJncyk7XG4gIH07XG4gIHJldHVybiBib3VuZDtcbn0pO1xuXG5wYXJ0aWFsLnBsYWNlaG9sZGVyID0gXztcbmV4cG9ydCBkZWZhdWx0IHBhcnRpYWw7XG4iLCJpbXBvcnQgcmVzdEFyZ3VtZW50cyBmcm9tICcuL3Jlc3RBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBleGVjdXRlQm91bmQgZnJvbSAnLi9fZXhlY3V0ZUJvdW5kLmpzJztcblxuLy8gQ3JlYXRlIGEgZnVuY3Rpb24gYm91bmQgdG8gYSBnaXZlbiBvYmplY3QgKGFzc2lnbmluZyBgdGhpc2AsIGFuZCBhcmd1bWVudHMsXG4vLyBvcHRpb25hbGx5KS5cbmV4cG9ydCBkZWZhdWx0IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oZnVuYywgY29udGV4dCwgYXJncykge1xuICBpZiAoIWlzRnVuY3Rpb24oZnVuYykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JpbmQgbXVzdCBiZSBjYWxsZWQgb24gYSBmdW5jdGlvbicpO1xuICB2YXIgYm91bmQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGNhbGxBcmdzKSB7XG4gICAgcmV0dXJuIGV4ZWN1dGVCb3VuZChmdW5jLCBib3VuZCwgY29udGV4dCwgdGhpcywgYXJncy5jb25jYXQoY2FsbEFyZ3MpKTtcbiAgfSk7XG4gIHJldHVybiBib3VuZDtcbn0pO1xuIiwiaW1wb3J0IGNyZWF0ZVNpemVQcm9wZXJ0eUNoZWNrIGZyb20gJy4vX2NyZWF0ZVNpemVQcm9wZXJ0eUNoZWNrLmpzJztcbmltcG9ydCBnZXRMZW5ndGggZnJvbSAnLi9fZ2V0TGVuZ3RoLmpzJztcblxuLy8gSW50ZXJuYWwgaGVscGVyIGZvciBjb2xsZWN0aW9uIG1ldGhvZHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBjb2xsZWN0aW9uXG4vLyBzaG91bGQgYmUgaXRlcmF0ZWQgYXMgYW4gYXJyYXkgb3IgYXMgYW4gb2JqZWN0LlxuLy8gUmVsYXRlZDogaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLXRvbGVuZ3RoXG4vLyBBdm9pZHMgYSB2ZXJ5IG5hc3R5IGlPUyA4IEpJVCBidWcgb24gQVJNLTY0LiAjMjA5NFxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2soZ2V0TGVuZ3RoKTtcbiIsImltcG9ydCBnZXRMZW5ndGggZnJvbSAnLi9fZ2V0TGVuZ3RoLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL19pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzQXJndW1lbnRzIGZyb20gJy4vaXNBcmd1bWVudHMuanMnO1xuXG4vLyBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBhIHJlY3Vyc2l2ZSBgZmxhdHRlbmAgZnVuY3Rpb24uXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmbGF0dGVuKGlucHV0LCBkZXB0aCwgc3RyaWN0LCBvdXRwdXQpIHtcbiAgb3V0cHV0ID0gb3V0cHV0IHx8IFtdO1xuICBpZiAoIWRlcHRoICYmIGRlcHRoICE9PSAwKSB7XG4gICAgZGVwdGggPSBJbmZpbml0eTtcbiAgfSBlbHNlIGlmIChkZXB0aCA8PSAwKSB7XG4gICAgcmV0dXJuIG91dHB1dC5jb25jYXQoaW5wdXQpO1xuICB9XG4gIHZhciBpZHggPSBvdXRwdXQubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGlucHV0KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHZhbHVlID0gaW5wdXRbaV07XG4gICAgaWYgKGlzQXJyYXlMaWtlKHZhbHVlKSAmJiAoaXNBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpKSkge1xuICAgICAgLy8gRmxhdHRlbiBjdXJyZW50IGxldmVsIG9mIGFycmF5IG9yIGFyZ3VtZW50cyBvYmplY3QuXG4gICAgICBpZiAoZGVwdGggPiAxKSB7XG4gICAgICAgIGZsYXR0ZW4odmFsdWUsIGRlcHRoIC0gMSwgc3RyaWN0LCBvdXRwdXQpO1xuICAgICAgICBpZHggPSBvdXRwdXQubGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGogPSAwLCBsZW4gPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChqIDwgbGVuKSBvdXRwdXRbaWR4KytdID0gdmFsdWVbaisrXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFzdHJpY3QpIHtcbiAgICAgIG91dHB1dFtpZHgrK10gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dHB1dDtcbn1cbiIsImltcG9ydCByZXN0QXJndW1lbnRzIGZyb20gJy4vcmVzdEFyZ3VtZW50cy5qcyc7XG5pbXBvcnQgZmxhdHRlbiBmcm9tICcuL19mbGF0dGVuLmpzJztcbmltcG9ydCBiaW5kIGZyb20gJy4vYmluZC5qcyc7XG5cbi8vIEJpbmQgYSBudW1iZXIgb2YgYW4gb2JqZWN0J3MgbWV0aG9kcyB0byB0aGF0IG9iamVjdC4gUmVtYWluaW5nIGFyZ3VtZW50c1xuLy8gYXJlIHRoZSBtZXRob2QgbmFtZXMgdG8gYmUgYm91bmQuIFVzZWZ1bCBmb3IgZW5zdXJpbmcgdGhhdCBhbGwgY2FsbGJhY2tzXG4vLyBkZWZpbmVkIG9uIGFuIG9iamVjdCBiZWxvbmcgdG8gaXQuXG5leHBvcnQgZGVmYXVsdCByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKG9iaiwga2V5cykge1xuICBrZXlzID0gZmxhdHRlbihrZXlzLCBmYWxzZSwgZmFsc2UpO1xuICB2YXIgaW5kZXggPSBrZXlzLmxlbmd0aDtcbiAgaWYgKGluZGV4IDwgMSkgdGhyb3cgbmV3IEVycm9yKCdiaW5kQWxsIG11c3QgYmUgcGFzc2VkIGZ1bmN0aW9uIG5hbWVzJyk7XG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaW5kZXhdO1xuICAgIG9ialtrZXldID0gYmluZChvYmpba2V5XSwgb2JqKTtcbiAgfVxuICByZXR1cm4gb2JqO1xufSk7XG4iLCJpbXBvcnQgaGFzIGZyb20gJy4vX2hhcy5qcyc7XG5cbi8vIE1lbW9pemUgYW4gZXhwZW5zaXZlIGZ1bmN0aW9uIGJ5IHN0b3JpbmcgaXRzIHJlc3VsdHMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZW1vaXplKGZ1bmMsIGhhc2hlcikge1xuICB2YXIgbWVtb2l6ZSA9IGZ1bmN0aW9uKGtleSkge1xuICAgIHZhciBjYWNoZSA9IG1lbW9pemUuY2FjaGU7XG4gICAgdmFyIGFkZHJlc3MgPSAnJyArIChoYXNoZXIgPyBoYXNoZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGtleSk7XG4gICAgaWYgKCFoYXMoY2FjaGUsIGFkZHJlc3MpKSBjYWNoZVthZGRyZXNzXSA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gY2FjaGVbYWRkcmVzc107XG4gIH07XG4gIG1lbW9pemUuY2FjaGUgPSB7fTtcbiAgcmV0dXJuIG1lbW9pemU7XG59XG4iLCJpbXBvcnQgcmVzdEFyZ3VtZW50cyBmcm9tICcuL3Jlc3RBcmd1bWVudHMuanMnO1xuXG4vLyBEZWxheXMgYSBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIGFuZCB0aGVuIGNhbGxzXG4vLyBpdCB3aXRoIHRoZSBhcmd1bWVudHMgc3VwcGxpZWQuXG5leHBvcnQgZGVmYXVsdCByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGFyZ3MpIHtcbiAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkobnVsbCwgYXJncyk7XG4gIH0sIHdhaXQpO1xufSk7XG4iLCJpbXBvcnQgcGFydGlhbCBmcm9tICcuL3BhcnRpYWwuanMnO1xuaW1wb3J0IGRlbGF5IGZyb20gJy4vZGVsYXkuanMnO1xuaW1wb3J0IF8gZnJvbSAnLi91bmRlcnNjb3JlLmpzJztcblxuLy8gRGVmZXJzIGEgZnVuY3Rpb24sIHNjaGVkdWxpbmcgaXQgdG8gcnVuIGFmdGVyIHRoZSBjdXJyZW50IGNhbGwgc3RhY2sgaGFzXG4vLyBjbGVhcmVkLlxuZXhwb3J0IGRlZmF1bHQgcGFydGlhbChkZWxheSwgXywgMSk7XG4iLCJpbXBvcnQgbm93IGZyb20gJy4vbm93LmpzJztcblxuLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCB3aGVuIGludm9rZWQsIHdpbGwgb25seSBiZSB0cmlnZ2VyZWQgYXQgbW9zdCBvbmNlXG4vLyBkdXJpbmcgYSBnaXZlbiB3aW5kb3cgb2YgdGltZS4gTm9ybWFsbHksIHRoZSB0aHJvdHRsZWQgZnVuY3Rpb24gd2lsbCBydW5cbi8vIGFzIG11Y2ggYXMgaXQgY2FuLCB3aXRob3V0IGV2ZXIgZ29pbmcgbW9yZSB0aGFuIG9uY2UgcGVyIGB3YWl0YCBkdXJhdGlvbjtcbi8vIGJ1dCBpZiB5b3UnZCBsaWtlIHRvIGRpc2FibGUgdGhlIGV4ZWN1dGlvbiBvbiB0aGUgbGVhZGluZyBlZGdlLCBwYXNzXG4vLyBge2xlYWRpbmc6IGZhbHNlfWAuIFRvIGRpc2FibGUgZXhlY3V0aW9uIG9uIHRoZSB0cmFpbGluZyBlZGdlLCBkaXR0by5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRocm90dGxlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgdmFyIHRpbWVvdXQsIGNvbnRleHQsIGFyZ3MsIHJlc3VsdDtcbiAgdmFyIHByZXZpb3VzID0gMDtcbiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG5cbiAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgcHJldmlvdXMgPSBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlID8gMCA6IG5vdygpO1xuICAgIHRpbWVvdXQgPSBudWxsO1xuICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gIH07XG5cbiAgdmFyIHRocm90dGxlZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBfbm93ID0gbm93KCk7XG4gICAgaWYgKCFwcmV2aW91cyAmJiBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlKSBwcmV2aW91cyA9IF9ub3c7XG4gICAgdmFyIHJlbWFpbmluZyA9IHdhaXQgLSAoX25vdyAtIHByZXZpb3VzKTtcbiAgICBjb250ZXh0ID0gdGhpcztcbiAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgIGlmIChyZW1haW5pbmcgPD0gMCB8fCByZW1haW5pbmcgPiB3YWl0KSB7XG4gICAgICBpZiAodGltZW91dCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgfVxuICAgICAgcHJldmlvdXMgPSBfbm93O1xuICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgIH0gZWxzZSBpZiAoIXRpbWVvdXQgJiYgb3B0aW9ucy50cmFpbGluZyAhPT0gZmFsc2UpIHtcbiAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCByZW1haW5pbmcpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHRocm90dGxlZC5jYW5jZWwgPSBmdW5jdGlvbigpIHtcbiAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgcHJldmlvdXMgPSAwO1xuICAgIHRpbWVvdXQgPSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gIH07XG5cbiAgcmV0dXJuIHRocm90dGxlZDtcbn1cbiIsImltcG9ydCByZXN0QXJndW1lbnRzIGZyb20gJy4vcmVzdEFyZ3VtZW50cy5qcyc7XG5pbXBvcnQgbm93IGZyb20gJy4vbm93LmpzJztcblxuLy8gV2hlbiBhIHNlcXVlbmNlIG9mIGNhbGxzIG9mIHRoZSByZXR1cm5lZCBmdW5jdGlvbiBlbmRzLCB0aGUgYXJndW1lbnRcbi8vIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZC4gVGhlIGVuZCBvZiBhIHNlcXVlbmNlIGlzIGRlZmluZWQgYnkgdGhlIGB3YWl0YFxuLy8gcGFyYW1ldGVyLiBJZiBgaW1tZWRpYXRlYCBpcyBwYXNzZWQsIHRoZSBhcmd1bWVudCBmdW5jdGlvbiB3aWxsIGJlXG4vLyB0cmlnZ2VyZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VxdWVuY2UgaW5zdGVhZCBvZiBhdCB0aGUgZW5kLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7XG4gIHZhciB0aW1lb3V0LCBwcmV2aW91cywgYXJncywgcmVzdWx0LCBjb250ZXh0O1xuXG4gIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBwYXNzZWQgPSBub3coKSAtIHByZXZpb3VzO1xuICAgIGlmICh3YWl0ID4gcGFzc2VkKSB7XG4gICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCAtIHBhc3NlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgaWYgKCFpbW1lZGlhdGUpIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAvLyBUaGlzIGNoZWNrIGlzIG5lZWRlZCBiZWNhdXNlIGBmdW5jYCBjYW4gcmVjdXJzaXZlbHkgaW52b2tlIGBkZWJvdW5jZWRgLlxuICAgICAgaWYgKCF0aW1lb3V0KSBhcmdzID0gY29udGV4dCA9IG51bGw7XG4gICAgfVxuICB9O1xuXG4gIHZhciBkZWJvdW5jZWQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKF9hcmdzKSB7XG4gICAgY29udGV4dCA9IHRoaXM7XG4gICAgYXJncyA9IF9hcmdzO1xuICAgIHByZXZpb3VzID0gbm93KCk7XG4gICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7XG4gICAgICBpZiAoaW1tZWRpYXRlKSByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcblxuICBkZWJvdW5jZWQuY2FuY2VsID0gZnVuY3Rpb24oKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIHRpbWVvdXQgPSBhcmdzID0gY29udGV4dCA9IG51bGw7XG4gIH07XG5cbiAgcmV0dXJuIGRlYm91bmNlZDtcbn1cbiIsImltcG9ydCBwYXJ0aWFsIGZyb20gJy4vcGFydGlhbC5qcyc7XG5cbi8vIFJldHVybnMgdGhlIGZpcnN0IGZ1bmN0aW9uIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgc2Vjb25kLFxuLy8gYWxsb3dpbmcgeW91IHRvIGFkanVzdCBhcmd1bWVudHMsIHJ1biBjb2RlIGJlZm9yZSBhbmQgYWZ0ZXIsIGFuZFxuLy8gY29uZGl0aW9uYWxseSBleGVjdXRlIHRoZSBvcmlnaW5hbCBmdW5jdGlvbi5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHdyYXAoZnVuYywgd3JhcHBlcikge1xuICByZXR1cm4gcGFydGlhbCh3cmFwcGVyLCBmdW5jKTtcbn1cbiIsIi8vIFJldHVybnMgYSBuZWdhdGVkIHZlcnNpb24gb2YgdGhlIHBhc3NlZC1pbiBwcmVkaWNhdGUuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBuZWdhdGUocHJlZGljYXRlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gIXByZWRpY2F0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufVxuIiwiLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgaXMgdGhlIGNvbXBvc2l0aW9uIG9mIGEgbGlzdCBvZiBmdW5jdGlvbnMsIGVhY2hcbi8vIGNvbnN1bWluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB0aGF0IGZvbGxvd3MuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wb3NlKCkge1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgdmFyIHN0YXJ0ID0gYXJncy5sZW5ndGggLSAxO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGkgPSBzdGFydDtcbiAgICB2YXIgcmVzdWx0ID0gYXJnc1tzdGFydF0uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB3aGlsZSAoaS0tKSByZXN1bHQgPSBhcmdzW2ldLmNhbGwodGhpcywgcmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuIiwiLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIG9uIGFuZCBhZnRlciB0aGUgTnRoIGNhbGwuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZnRlcih0aW1lcywgZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgaWYgKC0tdGltZXMgPCAxKSB7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfTtcbn1cbiIsIi8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCB1cCB0byAoYnV0IG5vdCBpbmNsdWRpbmcpIHRoZVxuLy8gTnRoIGNhbGwuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiZWZvcmUodGltZXMsIGZ1bmMpIHtcbiAgdmFyIG1lbW87XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBpZiAoLS10aW1lcyA+IDApIHtcbiAgICAgIG1lbW8gPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICAgIGlmICh0aW1lcyA8PSAxKSBmdW5jID0gbnVsbDtcbiAgICByZXR1cm4gbWVtbztcbiAgfTtcbn1cbiIsImltcG9ydCBwYXJ0aWFsIGZyb20gJy4vcGFydGlhbC5qcyc7XG5pbXBvcnQgYmVmb3JlIGZyb20gJy4vYmVmb3JlLmpzJztcblxuLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBhdCBtb3N0IG9uZSB0aW1lLCBubyBtYXR0ZXIgaG93XG4vLyBvZnRlbiB5b3UgY2FsbCBpdC4gVXNlZnVsIGZvciBsYXp5IGluaXRpYWxpemF0aW9uLlxuZXhwb3J0IGRlZmF1bHQgcGFydGlhbChiZWZvcmUsIDIpO1xuIiwiaW1wb3J0IGNiIGZyb20gJy4vX2NiLmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8vIFJldHVybnMgdGhlIGZpcnN0IGtleSBvbiBhbiBvYmplY3QgdGhhdCBwYXNzZXMgYSB0cnV0aCB0ZXN0LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZmluZEtleShvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICB2YXIgX2tleXMgPSBrZXlzKG9iaiksIGtleTtcbiAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IF9rZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0gX2tleXNbaV07XG4gICAgaWYgKHByZWRpY2F0ZShvYmpba2V5XSwga2V5LCBvYmopKSByZXR1cm4ga2V5O1xuICB9XG59XG4iLCJpbXBvcnQgY2IgZnJvbSAnLi9fY2IuanMnO1xuaW1wb3J0IGdldExlbmd0aCBmcm9tICcuL19nZXRMZW5ndGguanMnO1xuXG4vLyBJbnRlcm5hbCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBgXy5maW5kSW5kZXhgIGFuZCBgXy5maW5kTGFzdEluZGV4YC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKGRpcikge1xuICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7XG4gICAgdmFyIGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5ndGggLSAxO1xuICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIpIHtcbiAgICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSByZXR1cm4gaW5kZXg7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfTtcbn1cbiIsImltcG9ydCBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlciBmcm9tICcuL19jcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlci5qcyc7XG5cbi8vIFJldHVybnMgdGhlIGZpcnN0IGluZGV4IG9uIGFuIGFycmF5LWxpa2UgdGhhdCBwYXNzZXMgYSB0cnV0aCB0ZXN0LlxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoMSk7XG4iLCJpbXBvcnQgY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIgZnJvbSAnLi9fY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIuanMnO1xuXG4vLyBSZXR1cm5zIHRoZSBsYXN0IGluZGV4IG9uIGFuIGFycmF5LWxpa2UgdGhhdCBwYXNzZXMgYSB0cnV0aCB0ZXN0LlxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoLTEpO1xuIiwiaW1wb3J0IGNiIGZyb20gJy4vX2NiLmpzJztcbmltcG9ydCBnZXRMZW5ndGggZnJvbSAnLi9fZ2V0TGVuZ3RoLmpzJztcblxuLy8gVXNlIGEgY29tcGFyYXRvciBmdW5jdGlvbiB0byBmaWd1cmUgb3V0IHRoZSBzbWFsbGVzdCBpbmRleCBhdCB3aGljaFxuLy8gYW4gb2JqZWN0IHNob3VsZCBiZSBpbnNlcnRlZCBzbyBhcyB0byBtYWludGFpbiBvcmRlci4gVXNlcyBiaW5hcnkgc2VhcmNoLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc29ydGVkSW5kZXgoYXJyYXksIG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCwgMSk7XG4gIHZhciB2YWx1ZSA9IGl0ZXJhdGVlKG9iaik7XG4gIHZhciBsb3cgPSAwLCBoaWdoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtcbiAgICB2YXIgbWlkID0gTWF0aC5mbG9vcigobG93ICsgaGlnaCkgLyAyKTtcbiAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbbWlkXSkgPCB2YWx1ZSkgbG93ID0gbWlkICsgMTsgZWxzZSBoaWdoID0gbWlkO1xuICB9XG4gIHJldHVybiBsb3c7XG59XG4iLCJpbXBvcnQgZ2V0TGVuZ3RoIGZyb20gJy4vX2dldExlbmd0aC5qcyc7XG5pbXBvcnQgeyBzbGljZSB9IGZyb20gJy4vX3NldHVwLmpzJztcbmltcG9ydCBpc05hTiBmcm9tICcuL2lzTmFOLmpzJztcblxuLy8gSW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdGhlIGBfLmluZGV4T2ZgIGFuZCBgXy5sYXN0SW5kZXhPZmAgZnVuY3Rpb25zLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlSW5kZXhGaW5kZXIoZGlyLCBwcmVkaWNhdGVGaW5kLCBzb3J0ZWRJbmRleCkge1xuICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIGl0ZW0sIGlkeCkge1xuICAgIHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICBpZiAodHlwZW9mIGlkeCA9PSAnbnVtYmVyJykge1xuICAgICAgaWYgKGRpciA+IDApIHtcbiAgICAgICAgaSA9IGlkeCA+PSAwID8gaWR4IDogTWF0aC5tYXgoaWR4ICsgbGVuZ3RoLCBpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxlbmd0aCA9IGlkeCA+PSAwID8gTWF0aC5taW4oaWR4ICsgMSwgbGVuZ3RoKSA6IGlkeCArIGxlbmd0aCArIDE7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzb3J0ZWRJbmRleCAmJiBpZHggJiYgbGVuZ3RoKSB7XG4gICAgICBpZHggPSBzb3J0ZWRJbmRleChhcnJheSwgaXRlbSk7XG4gICAgICByZXR1cm4gYXJyYXlbaWR4XSA9PT0gaXRlbSA/IGlkeCA6IC0xO1xuICAgIH1cbiAgICBpZiAoaXRlbSAhPT0gaXRlbSkge1xuICAgICAgaWR4ID0gcHJlZGljYXRlRmluZChzbGljZS5jYWxsKGFycmF5LCBpLCBsZW5ndGgpLCBpc05hTik7XG4gICAgICByZXR1cm4gaWR4ID49IDAgPyBpZHggKyBpIDogLTE7XG4gICAgfVxuICAgIGZvciAoaWR4ID0gZGlyID4gMCA/IGkgOiBsZW5ndGggLSAxOyBpZHggPj0gMCAmJiBpZHggPCBsZW5ndGg7IGlkeCArPSBkaXIpIHtcbiAgICAgIGlmIChhcnJheVtpZHhdID09PSBpdGVtKSByZXR1cm4gaWR4O1xuICAgIH1cbiAgICByZXR1cm4gLTE7XG4gIH07XG59XG4iLCJpbXBvcnQgc29ydGVkSW5kZXggZnJvbSAnLi9zb3J0ZWRJbmRleC5qcyc7XG5pbXBvcnQgZmluZEluZGV4IGZyb20gJy4vZmluZEluZGV4LmpzJztcbmltcG9ydCBjcmVhdGVJbmRleEZpbmRlciBmcm9tICcuL19jcmVhdGVJbmRleEZpbmRlci5qcyc7XG5cbi8vIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYW4gaXRlbSBpbiBhbiBhcnJheSxcbi8vIG9yIC0xIGlmIHRoZSBpdGVtIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgYXJyYXkuXG4vLyBJZiB0aGUgYXJyYXkgaXMgbGFyZ2UgYW5kIGFscmVhZHkgaW4gc29ydCBvcmRlciwgcGFzcyBgdHJ1ZWBcbi8vIGZvciAqKmlzU29ydGVkKiogdG8gdXNlIGJpbmFyeSBzZWFyY2guXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVJbmRleEZpbmRlcigxLCBmaW5kSW5kZXgsIHNvcnRlZEluZGV4KTtcbiIsImltcG9ydCBmaW5kTGFzdEluZGV4IGZyb20gJy4vZmluZExhc3RJbmRleC5qcyc7XG5pbXBvcnQgY3JlYXRlSW5kZXhGaW5kZXIgZnJvbSAnLi9fY3JlYXRlSW5kZXhGaW5kZXIuanMnO1xuXG4vLyBSZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgYW4gaXRlbSBpbiBhbiBhcnJheSxcbi8vIG9yIC0xIGlmIHRoZSBpdGVtIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgYXJyYXkuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVJbmRleEZpbmRlcigtMSwgZmluZExhc3RJbmRleCk7XG4iLCJpbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9faXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGZpbmRJbmRleCBmcm9tICcuL2ZpbmRJbmRleC5qcyc7XG5pbXBvcnQgZmluZEtleSBmcm9tICcuL2ZpbmRLZXkuanMnO1xuXG4vLyBSZXR1cm4gdGhlIGZpcnN0IHZhbHVlIHdoaWNoIHBhc3NlcyBhIHRydXRoIHRlc3QuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmaW5kKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gIHZhciBrZXlGaW5kZXIgPSBpc0FycmF5TGlrZShvYmopID8gZmluZEluZGV4IDogZmluZEtleTtcbiAgdmFyIGtleSA9IGtleUZpbmRlcihvYmosIHByZWRpY2F0ZSwgY29udGV4dCk7XG4gIGlmIChrZXkgIT09IHZvaWQgMCAmJiBrZXkgIT09IC0xKSByZXR1cm4gb2JqW2tleV07XG59XG4iLCJpbXBvcnQgZmluZCBmcm9tICcuL2ZpbmQuanMnO1xuaW1wb3J0IG1hdGNoZXIgZnJvbSAnLi9tYXRjaGVyLmpzJztcblxuLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgXy5maW5kYDogZ2V0dGluZyB0aGUgZmlyc3Rcbi8vIG9iamVjdCBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6dmFsdWVgIHBhaXJzLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZmluZFdoZXJlKG9iaiwgYXR0cnMpIHtcbiAgcmV0dXJuIGZpbmQob2JqLCBtYXRjaGVyKGF0dHJzKSk7XG59XG4iLCJpbXBvcnQgb3B0aW1pemVDYiBmcm9tICcuL19vcHRpbWl6ZUNiLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL19pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vLyBUaGUgY29ybmVyc3RvbmUgZm9yIGNvbGxlY3Rpb24gZnVuY3Rpb25zLCBhbiBgZWFjaGBcbi8vIGltcGxlbWVudGF0aW9uLCBha2EgYGZvckVhY2hgLlxuLy8gSGFuZGxlcyByYXcgb2JqZWN0cyBpbiBhZGRpdGlvbiB0byBhcnJheS1saWtlcy4gVHJlYXRzIGFsbFxuLy8gc3BhcnNlIGFycmF5LWxpa2VzIGFzIGlmIHRoZXkgd2VyZSBkZW5zZS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGVhY2gob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICB2YXIgaSwgbGVuZ3RoO1xuICBpZiAoaXNBcnJheUxpa2Uob2JqKSkge1xuICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaXRlcmF0ZWUob2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgX2tleXMgPSBrZXlzKG9iaik7XG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gX2tleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGl0ZXJhdGVlKG9ialtfa2V5c1tpXV0sIF9rZXlzW2ldLCBvYmopO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqO1xufVxuIiwiaW1wb3J0IGNiIGZyb20gJy4vX2NiLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL19pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vLyBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdGVlIHRvIGVhY2ggZWxlbWVudC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1hcChvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICB2YXIgX2tleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBrZXlzKG9iaiksXG4gICAgICBsZW5ndGggPSAoX2tleXMgfHwgb2JqKS5sZW5ndGgsXG4gICAgICByZXN1bHRzID0gQXJyYXkobGVuZ3RoKTtcbiAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgIHZhciBjdXJyZW50S2V5ID0gX2tleXMgPyBfa2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICByZXN1bHRzW2luZGV4XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0cztcbn1cbiIsImltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL19pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuaW1wb3J0IG9wdGltaXplQ2IgZnJvbSAnLi9fb3B0aW1pemVDYi5qcyc7XG5cbi8vIEludGVybmFsIGhlbHBlciB0byBjcmVhdGUgYSByZWR1Y2luZyBmdW5jdGlvbiwgaXRlcmF0aW5nIGxlZnQgb3IgcmlnaHQuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVSZWR1Y2UoZGlyKSB7XG4gIC8vIFdyYXAgY29kZSB0aGF0IHJlYXNzaWducyBhcmd1bWVudCB2YXJpYWJsZXMgaW4gYSBzZXBhcmF0ZSBmdW5jdGlvbiB0aGFuXG4gIC8vIHRoZSBvbmUgdGhhdCBhY2Nlc3NlcyBgYXJndW1lbnRzLmxlbmd0aGAgdG8gYXZvaWQgYSBwZXJmIGhpdC4gKCMxOTkxKVxuICB2YXIgcmVkdWNlciA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGluaXRpYWwpIHtcbiAgICB2YXIgX2tleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBrZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChfa2V5cyB8fCBvYmopLmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7XG4gICAgaWYgKCFpbml0aWFsKSB7XG4gICAgICBtZW1vID0gb2JqW19rZXlzID8gX2tleXNbaW5kZXhdIDogaW5kZXhdO1xuICAgICAgaW5kZXggKz0gZGlyO1xuICAgIH1cbiAgICBmb3IgKDsgaW5kZXggPj0gMCAmJiBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gZGlyKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IF9rZXlzID8gX2tleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICBtZW1vID0gaXRlcmF0ZWUobWVtbywgb2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgIH1cbiAgICByZXR1cm4gbWVtbztcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgbWVtbywgY29udGV4dCkge1xuICAgIHZhciBpbml0aWFsID0gYXJndW1lbnRzLmxlbmd0aCA+PSAzO1xuICAgIHJldHVybiByZWR1Y2VyKG9iaiwgb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCwgNCksIG1lbW8sIGluaXRpYWwpO1xuICB9O1xufVxuIiwiaW1wb3J0IGNyZWF0ZVJlZHVjZSBmcm9tICcuL19jcmVhdGVSZWR1Y2UuanMnO1xuXG4vLyAqKlJlZHVjZSoqIGJ1aWxkcyB1cCBhIHNpbmdsZSByZXN1bHQgZnJvbSBhIGxpc3Qgb2YgdmFsdWVzLCBha2EgYGluamVjdGAsXG4vLyBvciBgZm9sZGxgLlxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlUmVkdWNlKDEpO1xuIiwiaW1wb3J0IGNyZWF0ZVJlZHVjZSBmcm9tICcuL19jcmVhdGVSZWR1Y2UuanMnO1xuXG4vLyBUaGUgcmlnaHQtYXNzb2NpYXRpdmUgdmVyc2lvbiBvZiByZWR1Y2UsIGFsc28ga25vd24gYXMgYGZvbGRyYC5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVJlZHVjZSgtMSk7XG4iLCJpbXBvcnQgY2IgZnJvbSAnLi9fY2IuanMnO1xuaW1wb3J0IGVhY2ggZnJvbSAnLi9lYWNoLmpzJztcblxuLy8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgdGhhdCBwYXNzIGEgdHJ1dGggdGVzdC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZpbHRlcihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICB2YXIgcmVzdWx0cyA9IFtdO1xuICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICBlYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGxpc3QpKSByZXN1bHRzLnB1c2godmFsdWUpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdHM7XG59XG4iLCJpbXBvcnQgZmlsdGVyIGZyb20gJy4vZmlsdGVyLmpzJztcbmltcG9ydCBuZWdhdGUgZnJvbSAnLi9uZWdhdGUuanMnO1xuaW1wb3J0IGNiIGZyb20gJy4vX2NiLmpzJztcblxuLy8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgZm9yIHdoaWNoIGEgdHJ1dGggdGVzdCBmYWlscy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlamVjdChvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICByZXR1cm4gZmlsdGVyKG9iaiwgbmVnYXRlKGNiKHByZWRpY2F0ZSkpLCBjb250ZXh0KTtcbn1cbiIsImltcG9ydCBjYiBmcm9tICcuL19jYi5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9faXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLy8gRGV0ZXJtaW5lIHdoZXRoZXIgYWxsIG9mIHRoZSBlbGVtZW50cyBwYXNzIGEgdHJ1dGggdGVzdC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGV2ZXJ5KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gIHZhciBfa2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIGtleXMob2JqKSxcbiAgICAgIGxlbmd0aCA9IChfa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgIHZhciBjdXJyZW50S2V5ID0gX2tleXMgPyBfa2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICBpZiAoIXByZWRpY2F0ZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbiIsImltcG9ydCBjYiBmcm9tICcuL19jYi5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9faXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLy8gRGV0ZXJtaW5lIGlmIGF0IGxlYXN0IG9uZSBlbGVtZW50IGluIHRoZSBvYmplY3QgcGFzc2VzIGEgdHJ1dGggdGVzdC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNvbWUob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgdmFyIF9rZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYga2V5cyhvYmopLFxuICAgICAgbGVuZ3RoID0gKF9rZXlzIHx8IG9iaikubGVuZ3RoO1xuICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgdmFyIGN1cnJlbnRLZXkgPSBfa2V5cyA/IF9rZXlzW2luZGV4XSA6IGluZGV4O1xuICAgIGlmIChwcmVkaWNhdGUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4iLCJpbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9faXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IHZhbHVlcyBmcm9tICcuL3ZhbHVlcy5qcyc7XG5pbXBvcnQgaW5kZXhPZiBmcm9tICcuL2luZGV4T2YuanMnO1xuXG4vLyBEZXRlcm1pbmUgaWYgdGhlIGFycmF5IG9yIG9iamVjdCBjb250YWlucyBhIGdpdmVuIGl0ZW0gKHVzaW5nIGA9PT1gKS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRhaW5zKG9iaiwgaXRlbSwgZnJvbUluZGV4LCBndWFyZCkge1xuICBpZiAoIWlzQXJyYXlMaWtlKG9iaikpIG9iaiA9IHZhbHVlcyhvYmopO1xuICBpZiAodHlwZW9mIGZyb21JbmRleCAhPSAnbnVtYmVyJyB8fCBndWFyZCkgZnJvbUluZGV4ID0gMDtcbiAgcmV0dXJuIGluZGV4T2Yob2JqLCBpdGVtLCBmcm9tSW5kZXgpID49IDA7XG59XG4iLCJpbXBvcnQgcmVzdEFyZ3VtZW50cyBmcm9tICcuL3Jlc3RBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBtYXAgZnJvbSAnLi9tYXAuanMnO1xuaW1wb3J0IGRlZXBHZXQgZnJvbSAnLi9fZGVlcEdldC5qcyc7XG5pbXBvcnQgdG9QYXRoIGZyb20gJy4vX3RvUGF0aC5qcyc7XG5cbi8vIEludm9rZSBhIG1ldGhvZCAod2l0aCBhcmd1bWVudHMpIG9uIGV2ZXJ5IGl0ZW0gaW4gYSBjb2xsZWN0aW9uLlxuZXhwb3J0IGRlZmF1bHQgcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihvYmosIHBhdGgsIGFyZ3MpIHtcbiAgdmFyIGNvbnRleHRQYXRoLCBmdW5jO1xuICBpZiAoaXNGdW5jdGlvbihwYXRoKSkge1xuICAgIGZ1bmMgPSBwYXRoO1xuICB9IGVsc2Uge1xuICAgIHBhdGggPSB0b1BhdGgocGF0aCk7XG4gICAgY29udGV4dFBhdGggPSBwYXRoLnNsaWNlKDAsIC0xKTtcbiAgICBwYXRoID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuICB9XG4gIHJldHVybiBtYXAob2JqLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZCA9IGZ1bmM7XG4gICAgaWYgKCFtZXRob2QpIHtcbiAgICAgIGlmIChjb250ZXh0UGF0aCAmJiBjb250ZXh0UGF0aC5sZW5ndGgpIHtcbiAgICAgICAgY29udGV4dCA9IGRlZXBHZXQoY29udGV4dCwgY29udGV4dFBhdGgpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbnRleHQgPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcbiAgICAgIG1ldGhvZCA9IGNvbnRleHRbcGF0aF07XG4gICAgfVxuICAgIHJldHVybiBtZXRob2QgPT0gbnVsbCA/IG1ldGhvZCA6IG1ldGhvZC5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgfSk7XG59KTtcbiIsImltcG9ydCBtYXAgZnJvbSAnLi9tYXAuanMnO1xuaW1wb3J0IHByb3BlcnR5IGZyb20gJy4vcHJvcGVydHkuanMnO1xuXG4vLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBfLm1hcGA6IGZldGNoaW5nIGEgcHJvcGVydHkuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwbHVjayhvYmosIGtleSkge1xuICByZXR1cm4gbWFwKG9iaiwgcHJvcGVydHkoa2V5KSk7XG59XG4iLCJpbXBvcnQgZmlsdGVyIGZyb20gJy4vZmlsdGVyLmpzJztcbmltcG9ydCBtYXRjaGVyIGZyb20gJy4vbWF0Y2hlci5qcyc7XG5cbi8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYF8uZmlsdGVyYDogc2VsZWN0aW5nIG9ubHlcbi8vIG9iamVjdHMgY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHdoZXJlKG9iaiwgYXR0cnMpIHtcbiAgcmV0dXJuIGZpbHRlcihvYmosIG1hdGNoZXIoYXR0cnMpKTtcbn1cbiIsImltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL19pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQgdmFsdWVzIGZyb20gJy4vdmFsdWVzLmpzJztcbmltcG9ydCBjYiBmcm9tICcuL19jYi5qcyc7XG5pbXBvcnQgZWFjaCBmcm9tICcuL2VhY2guanMnO1xuXG4vLyBSZXR1cm4gdGhlIG1heGltdW0gZWxlbWVudCAob3IgZWxlbWVudC1iYXNlZCBjb21wdXRhdGlvbikuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYXgob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICB2YXIgcmVzdWx0ID0gLUluZmluaXR5LCBsYXN0Q29tcHV0ZWQgPSAtSW5maW5pdHksXG4gICAgICB2YWx1ZSwgY29tcHV0ZWQ7XG4gIGlmIChpdGVyYXRlZSA9PSBudWxsIHx8ICh0eXBlb2YgaXRlcmF0ZWUgPT0gJ251bWJlcicgJiYgdHlwZW9mIG9ialswXSAhPSAnb2JqZWN0JyAmJiBvYmogIT0gbnVsbCkpIHtcbiAgICBvYmogPSBpc0FycmF5TGlrZShvYmopID8gb2JqIDogdmFsdWVzKG9iaik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWUgPSBvYmpbaV07XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSA+IHJlc3VsdCkge1xuICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgZWFjaChvYmosIGZ1bmN0aW9uKHYsIGluZGV4LCBsaXN0KSB7XG4gICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKHYsIGluZGV4LCBsaXN0KTtcbiAgICAgIGlmIChjb21wdXRlZCA+IGxhc3RDb21wdXRlZCB8fCAoY29tcHV0ZWQgPT09IC1JbmZpbml0eSAmJiByZXN1bHQgPT09IC1JbmZpbml0eSkpIHtcbiAgICAgICAgcmVzdWx0ID0gdjtcbiAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsImltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL19pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQgdmFsdWVzIGZyb20gJy4vdmFsdWVzLmpzJztcbmltcG9ydCBjYiBmcm9tICcuL19jYi5qcyc7XG5pbXBvcnQgZWFjaCBmcm9tICcuL2VhY2guanMnO1xuXG4vLyBSZXR1cm4gdGhlIG1pbmltdW0gZWxlbWVudCAob3IgZWxlbWVudC1iYXNlZCBjb21wdXRhdGlvbikuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtaW4ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICB2YXIgcmVzdWx0ID0gSW5maW5pdHksIGxhc3RDb21wdXRlZCA9IEluZmluaXR5LFxuICAgICAgdmFsdWUsIGNvbXB1dGVkO1xuICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCB8fCAodHlwZW9mIGl0ZXJhdGVlID09ICdudW1iZXInICYmIHR5cGVvZiBvYmpbMF0gIT0gJ29iamVjdCcgJiYgb2JqICE9IG51bGwpKSB7XG4gICAgb2JqID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IHZhbHVlcyhvYmopO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbHVlID0gb2JqW2ldO1xuICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgPCByZXN1bHQpIHtcbiAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIGVhY2gob2JqLCBmdW5jdGlvbih2LCBpbmRleCwgbGlzdCkge1xuICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2LCBpbmRleCwgbGlzdCk7XG4gICAgICBpZiAoY29tcHV0ZWQgPCBsYXN0Q29tcHV0ZWQgfHwgKGNvbXB1dGVkID09PSBJbmZpbml0eSAmJiByZXN1bHQgPT09IEluZmluaXR5KSkge1xuICAgICAgICByZXN1bHQgPSB2O1xuICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCB7IHNsaWNlIH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuaW1wb3J0IGlzU3RyaW5nIGZyb20gJy4vaXNTdHJpbmcuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vX2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCBtYXAgZnJvbSAnLi9tYXAuanMnO1xuaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuaW1wb3J0IHZhbHVlcyBmcm9tICcuL3ZhbHVlcy5qcyc7XG5cbi8vIFNhZmVseSBjcmVhdGUgYSByZWFsLCBsaXZlIGFycmF5IGZyb20gYW55dGhpbmcgaXRlcmFibGUuXG52YXIgcmVTdHJTeW1ib2wgPSAvW15cXHVkODAwLVxcdWRmZmZdfFtcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl18W1xcdWQ4MDAtXFx1ZGZmZl0vZztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvQXJyYXkob2JqKSB7XG4gIGlmICghb2JqKSByZXR1cm4gW107XG4gIGlmIChpc0FycmF5KG9iaikpIHJldHVybiBzbGljZS5jYWxsKG9iaik7XG4gIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgLy8gS2VlcCBzdXJyb2dhdGUgcGFpciBjaGFyYWN0ZXJzIHRvZ2V0aGVyLlxuICAgIHJldHVybiBvYmoubWF0Y2gocmVTdHJTeW1ib2wpO1xuICB9XG4gIGlmIChpc0FycmF5TGlrZShvYmopKSByZXR1cm4gbWFwKG9iaiwgaWRlbnRpdHkpO1xuICByZXR1cm4gdmFsdWVzKG9iaik7XG59XG4iLCJpbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9faXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IHZhbHVlcyBmcm9tICcuL3ZhbHVlcy5qcyc7XG5pbXBvcnQgZ2V0TGVuZ3RoIGZyb20gJy4vX2dldExlbmd0aC5qcyc7XG5pbXBvcnQgcmFuZG9tIGZyb20gJy4vcmFuZG9tLmpzJztcbmltcG9ydCB0b0FycmF5IGZyb20gJy4vdG9BcnJheS5qcyc7XG5cbi8vIFNhbXBsZSAqKm4qKiByYW5kb20gdmFsdWVzIGZyb20gYSBjb2xsZWN0aW9uIHVzaW5nIHRoZSBtb2Rlcm4gdmVyc2lvbiBvZiB0aGVcbi8vIFtGaXNoZXItWWF0ZXMgc2h1ZmZsZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmlzaGVy4oCTWWF0ZXNfc2h1ZmZsZSkuXG4vLyBJZiAqKm4qKiBpcyBub3Qgc3BlY2lmaWVkLCByZXR1cm5zIGEgc2luZ2xlIHJhbmRvbSBlbGVtZW50LlxuLy8gVGhlIGludGVybmFsIGBndWFyZGAgYXJndW1lbnQgYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgXy5tYXBgLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2FtcGxlKG9iaiwgbiwgZ3VhcmQpIHtcbiAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkge1xuICAgIGlmICghaXNBcnJheUxpa2Uob2JqKSkgb2JqID0gdmFsdWVzKG9iaik7XG4gICAgcmV0dXJuIG9ialtyYW5kb20ob2JqLmxlbmd0aCAtIDEpXTtcbiAgfVxuICB2YXIgc2FtcGxlID0gdG9BcnJheShvYmopO1xuICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKHNhbXBsZSk7XG4gIG4gPSBNYXRoLm1heChNYXRoLm1pbihuLCBsZW5ndGgpLCAwKTtcbiAgdmFyIGxhc3QgPSBsZW5ndGggLSAxO1xuICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbjsgaW5kZXgrKykge1xuICAgIHZhciByYW5kID0gcmFuZG9tKGluZGV4LCBsYXN0KTtcbiAgICB2YXIgdGVtcCA9IHNhbXBsZVtpbmRleF07XG4gICAgc2FtcGxlW2luZGV4XSA9IHNhbXBsZVtyYW5kXTtcbiAgICBzYW1wbGVbcmFuZF0gPSB0ZW1wO1xuICB9XG4gIHJldHVybiBzYW1wbGUuc2xpY2UoMCwgbik7XG59XG4iLCJpbXBvcnQgc2FtcGxlIGZyb20gJy4vc2FtcGxlLmpzJztcblxuLy8gU2h1ZmZsZSBhIGNvbGxlY3Rpb24uXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzaHVmZmxlKG9iaikge1xuICByZXR1cm4gc2FtcGxlKG9iaiwgSW5maW5pdHkpO1xufVxuIiwiaW1wb3J0IGNiIGZyb20gJy4vX2NiLmpzJztcbmltcG9ydCBwbHVjayBmcm9tICcuL3BsdWNrLmpzJztcbmltcG9ydCBtYXAgZnJvbSAnLi9tYXAuanMnO1xuXG4vLyBTb3J0IHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24gcHJvZHVjZWQgYnkgYW4gaXRlcmF0ZWUuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzb3J0Qnkob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICB2YXIgaW5kZXggPSAwO1xuICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgcmV0dXJuIHBsdWNrKG1hcChvYmosIGZ1bmN0aW9uKHZhbHVlLCBrZXksIGxpc3QpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgaW5kZXg6IGluZGV4KyssXG4gICAgICBjcml0ZXJpYTogaXRlcmF0ZWUodmFsdWUsIGtleSwgbGlzdClcbiAgICB9O1xuICB9KS5zb3J0KGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7XG4gICAgdmFyIGEgPSBsZWZ0LmNyaXRlcmlhO1xuICAgIHZhciBiID0gcmlnaHQuY3JpdGVyaWE7XG4gICAgaWYgKGEgIT09IGIpIHtcbiAgICAgIGlmIChhID4gYiB8fCBhID09PSB2b2lkIDApIHJldHVybiAxO1xuICAgICAgaWYgKGEgPCBiIHx8IGIgPT09IHZvaWQgMCkgcmV0dXJuIC0xO1xuICAgIH1cbiAgICByZXR1cm4gbGVmdC5pbmRleCAtIHJpZ2h0LmluZGV4O1xuICB9KSwgJ3ZhbHVlJyk7XG59XG4iLCJpbXBvcnQgY2IgZnJvbSAnLi9fY2IuanMnO1xuaW1wb3J0IGVhY2ggZnJvbSAnLi9lYWNoLmpzJztcblxuLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gdXNlZCBmb3IgYWdncmVnYXRlIFwiZ3JvdXAgYnlcIiBvcGVyYXRpb25zLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ3JvdXAoYmVoYXZpb3IsIHBhcnRpdGlvbikge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHQgPSBwYXJ0aXRpb24gPyBbW10sIFtdXSA6IHt9O1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIGVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHtcbiAgICAgIHZhciBrZXkgPSBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIG9iaik7XG4gICAgICBiZWhhdmlvcihyZXN1bHQsIHZhbHVlLCBrZXkpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG4iLCJpbXBvcnQgZ3JvdXAgZnJvbSAnLi9fZ3JvdXAuanMnO1xuaW1wb3J0IGhhcyBmcm9tICcuL19oYXMuanMnO1xuXG4vLyBHcm91cHMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbi4gUGFzcyBlaXRoZXIgYSBzdHJpbmcgYXR0cmlidXRlXG4vLyB0byBncm91cCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGNyaXRlcmlvbi5cbmV4cG9ydCBkZWZhdWx0IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICBpZiAoaGFzKHJlc3VsdCwga2V5KSkgcmVzdWx0W2tleV0ucHVzaCh2YWx1ZSk7IGVsc2UgcmVzdWx0W2tleV0gPSBbdmFsdWVdO1xufSk7XG4iLCJpbXBvcnQgZ3JvdXAgZnJvbSAnLi9fZ3JvdXAuanMnO1xuXG4vLyBJbmRleGVzIHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24sIHNpbWlsYXIgdG8gYF8uZ3JvdXBCeWAsIGJ1dCBmb3Jcbi8vIHdoZW4geW91IGtub3cgdGhhdCB5b3VyIGluZGV4IHZhbHVlcyB3aWxsIGJlIHVuaXF1ZS5cbmV4cG9ydCBkZWZhdWx0IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICByZXN1bHRba2V5XSA9IHZhbHVlO1xufSk7XG4iLCJpbXBvcnQgZ3JvdXAgZnJvbSAnLi9fZ3JvdXAuanMnO1xuaW1wb3J0IGhhcyBmcm9tICcuL19oYXMuanMnO1xuXG4vLyBDb3VudHMgaW5zdGFuY2VzIG9mIGFuIG9iamVjdCB0aGF0IGdyb3VwIGJ5IGEgY2VydGFpbiBjcml0ZXJpb24uIFBhc3Ncbi8vIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGUgdG8gY291bnQgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZVxuLy8gY3JpdGVyaW9uLlxuZXhwb3J0IGRlZmF1bHQgZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gIGlmIChoYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XSsrOyBlbHNlIHJlc3VsdFtrZXldID0gMTtcbn0pO1xuIiwiaW1wb3J0IGdyb3VwIGZyb20gJy4vX2dyb3VwLmpzJztcblxuLy8gU3BsaXQgYSBjb2xsZWN0aW9uIGludG8gdHdvIGFycmF5czogb25lIHdob3NlIGVsZW1lbnRzIGFsbCBwYXNzIHRoZSBnaXZlblxuLy8gdHJ1dGggdGVzdCwgYW5kIG9uZSB3aG9zZSBlbGVtZW50cyBhbGwgZG8gbm90IHBhc3MgdGhlIHRydXRoIHRlc3QuXG5leHBvcnQgZGVmYXVsdCBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBwYXNzKSB7XG4gIHJlc3VsdFtwYXNzID8gMCA6IDFdLnB1c2godmFsdWUpO1xufSwgdHJ1ZSk7XG4iLCJpbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9faXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYSBjb2xsZWN0aW9uLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2l6ZShvYmopIHtcbiAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gMDtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iaikgPyBvYmoubGVuZ3RoIDoga2V5cyhvYmopLmxlbmd0aDtcbn1cbiIsIi8vIEludGVybmFsIGBfLnBpY2tgIGhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgd2hldGhlciBga2V5YCBpcyBhbiBlbnVtZXJhYmxlXG4vLyBwcm9wZXJ0eSBuYW1lIG9mIGBvYmpgLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ga2V5SW5PYmoodmFsdWUsIGtleSwgb2JqKSB7XG4gIHJldHVybiBrZXkgaW4gb2JqO1xufVxuIiwiaW1wb3J0IHJlc3RBcmd1bWVudHMgZnJvbSAnLi9yZXN0QXJndW1lbnRzLmpzJztcbmltcG9ydCBpc0Z1bmN0aW9uIGZyb20gJy4vaXNGdW5jdGlvbi5qcyc7XG5pbXBvcnQgb3B0aW1pemVDYiBmcm9tICcuL19vcHRpbWl6ZUNiLmpzJztcbmltcG9ydCBhbGxLZXlzIGZyb20gJy4vYWxsS2V5cy5qcyc7XG5pbXBvcnQga2V5SW5PYmogZnJvbSAnLi9fa2V5SW5PYmouanMnO1xuaW1wb3J0IGZsYXR0ZW4gZnJvbSAnLi9fZmxhdHRlbi5qcyc7XG5cbi8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCBvbmx5IGNvbnRhaW5pbmcgdGhlIGFsbG93ZWQgcHJvcGVydGllcy5cbmV4cG9ydCBkZWZhdWx0IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24ob2JqLCBrZXlzKSB7XG4gIHZhciByZXN1bHQgPSB7fSwgaXRlcmF0ZWUgPSBrZXlzWzBdO1xuICBpZiAob2JqID09IG51bGwpIHJldHVybiByZXN1bHQ7XG4gIGlmIChpc0Z1bmN0aW9uKGl0ZXJhdGVlKSkge1xuICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwga2V5c1sxXSk7XG4gICAga2V5cyA9IGFsbEtleXMob2JqKTtcbiAgfSBlbHNlIHtcbiAgICBpdGVyYXRlZSA9IGtleUluT2JqO1xuICAgIGtleXMgPSBmbGF0dGVuKGtleXMsIGZhbHNlLCBmYWxzZSk7XG4gICAgb2JqID0gT2JqZWN0KG9iaik7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICB2YXIgdmFsdWUgPSBvYmpba2V5XTtcbiAgICBpZiAoaXRlcmF0ZWUodmFsdWUsIGtleSwgb2JqKSkgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufSk7XG4iLCJpbXBvcnQgcmVzdEFyZ3VtZW50cyBmcm9tICcuL3Jlc3RBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBuZWdhdGUgZnJvbSAnLi9uZWdhdGUuanMnO1xuaW1wb3J0IG1hcCBmcm9tICcuL21hcC5qcyc7XG5pbXBvcnQgZmxhdHRlbiBmcm9tICcuL19mbGF0dGVuLmpzJztcbmltcG9ydCBjb250YWlucyBmcm9tICcuL2NvbnRhaW5zLmpzJztcbmltcG9ydCBwaWNrIGZyb20gJy4vcGljay5qcyc7XG5cbi8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCB3aXRob3V0IHRoZSBkaXNhbGxvd2VkIHByb3BlcnRpZXMuXG5leHBvcnQgZGVmYXVsdCByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKG9iaiwga2V5cykge1xuICB2YXIgaXRlcmF0ZWUgPSBrZXlzWzBdLCBjb250ZXh0O1xuICBpZiAoaXNGdW5jdGlvbihpdGVyYXRlZSkpIHtcbiAgICBpdGVyYXRlZSA9IG5lZ2F0ZShpdGVyYXRlZSk7XG4gICAgaWYgKGtleXMubGVuZ3RoID4gMSkgY29udGV4dCA9IGtleXNbMV07XG4gIH0gZWxzZSB7XG4gICAga2V5cyA9IG1hcChmbGF0dGVuKGtleXMsIGZhbHNlLCBmYWxzZSksIFN0cmluZyk7XG4gICAgaXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICByZXR1cm4gIWNvbnRhaW5zKGtleXMsIGtleSk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gcGljayhvYmosIGl0ZXJhdGVlLCBjb250ZXh0KTtcbn0pO1xuIiwiaW1wb3J0IHsgc2xpY2UgfSBmcm9tICcuL19zZXR1cC5qcyc7XG5cbi8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGxhc3QgZW50cnkgb2YgdGhlIGFycmF5LiBFc3BlY2lhbGx5IHVzZWZ1bCBvblxuLy8gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gYWxsIHRoZSB2YWx1ZXMgaW5cbi8vIHRoZSBhcnJheSwgZXhjbHVkaW5nIHRoZSBsYXN0IE4uXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0aWFsKGFycmF5LCBuLCBndWFyZCkge1xuICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgMCwgTWF0aC5tYXgoMCwgYXJyYXkubGVuZ3RoIC0gKG4gPT0gbnVsbCB8fCBndWFyZCA/IDEgOiBuKSkpO1xufVxuIiwiaW1wb3J0IGluaXRpYWwgZnJvbSAnLi9pbml0aWFsLmpzJztcblxuLy8gR2V0IHRoZSBmaXJzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBOXG4vLyB2YWx1ZXMgaW4gdGhlIGFycmF5LiBUaGUgKipndWFyZCoqIGNoZWNrIGFsbG93cyBpdCB0byB3b3JrIHdpdGggYF8ubWFwYC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZpcnN0KGFycmF5LCBuLCBndWFyZCkge1xuICBpZiAoYXJyYXkgPT0gbnVsbCB8fCBhcnJheS5sZW5ndGggPCAxKSByZXR1cm4gbiA9PSBudWxsIHx8IGd1YXJkID8gdm9pZCAwIDogW107XG4gIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJheVswXTtcbiAgcmV0dXJuIGluaXRpYWwoYXJyYXksIGFycmF5Lmxlbmd0aCAtIG4pO1xufVxuIiwiaW1wb3J0IHsgc2xpY2UgfSBmcm9tICcuL19zZXR1cC5qcyc7XG5cbi8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSBgYXJyYXlgLiBFc3BlY2lhbGx5IHVzZWZ1bCBvblxuLy8gdGhlIGBhcmd1bWVudHNgIG9iamVjdC4gUGFzc2luZyBhbiAqKm4qKiB3aWxsIHJldHVybiB0aGUgcmVzdCBOIHZhbHVlcyBpbiB0aGVcbi8vIGBhcnJheWAuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXN0KGFycmF5LCBuLCBndWFyZCkge1xuICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgbiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4pO1xufVxuIiwiaW1wb3J0IHJlc3QgZnJvbSAnLi9yZXN0LmpzJztcblxuLy8gR2V0IHRoZSBsYXN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGxhc3QgTlxuLy8gdmFsdWVzIGluIHRoZSBhcnJheS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxhc3QoYXJyYXksIG4sIGd1YXJkKSB7XG4gIGlmIChhcnJheSA9PSBudWxsIHx8IGFycmF5Lmxlbmd0aCA8IDEpIHJldHVybiBuID09IG51bGwgfHwgZ3VhcmQgPyB2b2lkIDAgOiBbXTtcbiAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDFdO1xuICByZXR1cm4gcmVzdChhcnJheSwgTWF0aC5tYXgoMCwgYXJyYXkubGVuZ3RoIC0gbikpO1xufVxuIiwiaW1wb3J0IGZpbHRlciBmcm9tICcuL2ZpbHRlci5qcyc7XG5cbi8vIFRyaW0gb3V0IGFsbCBmYWxzeSB2YWx1ZXMgZnJvbSBhbiBhcnJheS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXBhY3QoYXJyYXkpIHtcbiAgcmV0dXJuIGZpbHRlcihhcnJheSwgQm9vbGVhbik7XG59XG4iLCJpbXBvcnQgX2ZsYXR0ZW4gZnJvbSAnLi9fZmxhdHRlbi5qcyc7XG5cbi8vIEZsYXR0ZW4gb3V0IGFuIGFycmF5LCBlaXRoZXIgcmVjdXJzaXZlbHkgKGJ5IGRlZmF1bHQpLCBvciB1cCB0byBgZGVwdGhgLlxuLy8gUGFzc2luZyBgdHJ1ZWAgb3IgYGZhbHNlYCBhcyBgZGVwdGhgIG1lYW5zIGAxYCBvciBgSW5maW5pdHlgLCByZXNwZWN0aXZlbHkuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmbGF0dGVuKGFycmF5LCBkZXB0aCkge1xuICByZXR1cm4gX2ZsYXR0ZW4oYXJyYXksIGRlcHRoLCBmYWxzZSk7XG59XG4iLCJpbXBvcnQgcmVzdEFyZ3VtZW50cyBmcm9tICcuL3Jlc3RBcmd1bWVudHMuanMnO1xuaW1wb3J0IGZsYXR0ZW4gZnJvbSAnLi9fZmxhdHRlbi5qcyc7XG5pbXBvcnQgZmlsdGVyIGZyb20gJy4vZmlsdGVyLmpzJztcbmltcG9ydCBjb250YWlucyBmcm9tICcuL2NvbnRhaW5zLmpzJztcblxuLy8gVGFrZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG9uZSBhcnJheSBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgYXJyYXlzLlxuLy8gT25seSB0aGUgZWxlbWVudHMgcHJlc2VudCBpbiBqdXN0IHRoZSBmaXJzdCBhcnJheSB3aWxsIHJlbWFpbi5cbmV4cG9ydCBkZWZhdWx0IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oYXJyYXksIHJlc3QpIHtcbiAgcmVzdCA9IGZsYXR0ZW4ocmVzdCwgdHJ1ZSwgdHJ1ZSk7XG4gIHJldHVybiBmaWx0ZXIoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKXtcbiAgICByZXR1cm4gIWNvbnRhaW5zKHJlc3QsIHZhbHVlKTtcbiAgfSk7XG59KTtcbiIsImltcG9ydCByZXN0QXJndW1lbnRzIGZyb20gJy4vcmVzdEFyZ3VtZW50cy5qcyc7XG5pbXBvcnQgZGlmZmVyZW5jZSBmcm9tICcuL2RpZmZlcmVuY2UuanMnO1xuXG4vLyBSZXR1cm4gYSB2ZXJzaW9uIG9mIHRoZSBhcnJheSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gdGhlIHNwZWNpZmllZCB2YWx1ZShzKS5cbmV4cG9ydCBkZWZhdWx0IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oYXJyYXksIG90aGVyQXJyYXlzKSB7XG4gIHJldHVybiBkaWZmZXJlbmNlKGFycmF5LCBvdGhlckFycmF5cyk7XG59KTtcbiIsImltcG9ydCBpc0Jvb2xlYW4gZnJvbSAnLi9pc0Jvb2xlYW4uanMnO1xuaW1wb3J0IGNiIGZyb20gJy4vX2NiLmpzJztcbmltcG9ydCBnZXRMZW5ndGggZnJvbSAnLi9fZ2V0TGVuZ3RoLmpzJztcbmltcG9ydCBjb250YWlucyBmcm9tICcuL2NvbnRhaW5zLmpzJztcblxuLy8gUHJvZHVjZSBhIGR1cGxpY2F0ZS1mcmVlIHZlcnNpb24gb2YgdGhlIGFycmF5LiBJZiB0aGUgYXJyYXkgaGFzIGFscmVhZHlcbi8vIGJlZW4gc29ydGVkLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIHVzaW5nIGEgZmFzdGVyIGFsZ29yaXRobS5cbi8vIFRoZSBmYXN0ZXIgYWxnb3JpdGhtIHdpbGwgbm90IHdvcmsgd2l0aCBhbiBpdGVyYXRlZSBpZiB0aGUgaXRlcmF0ZWVcbi8vIGlzIG5vdCBhIG9uZS10by1vbmUgZnVuY3Rpb24sIHNvIHByb3ZpZGluZyBhbiBpdGVyYXRlZSB3aWxsIGRpc2FibGVcbi8vIHRoZSBmYXN0ZXIgYWxnb3JpdGhtLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdW5pcShhcnJheSwgaXNTb3J0ZWQsIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gIGlmICghaXNCb29sZWFuKGlzU29ydGVkKSkge1xuICAgIGNvbnRleHQgPSBpdGVyYXRlZTtcbiAgICBpdGVyYXRlZSA9IGlzU29ydGVkO1xuICAgIGlzU29ydGVkID0gZmFsc2U7XG4gIH1cbiAgaWYgKGl0ZXJhdGVlICE9IG51bGwpIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBzZWVuID0gW107XG4gIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpXSxcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlLCBpLCBhcnJheSkgOiB2YWx1ZTtcbiAgICBpZiAoaXNTb3J0ZWQgJiYgIWl0ZXJhdGVlKSB7XG4gICAgICBpZiAoIWkgfHwgc2VlbiAhPT0gY29tcHV0ZWQpIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgIHNlZW4gPSBjb21wdXRlZDtcbiAgICB9IGVsc2UgaWYgKGl0ZXJhdGVlKSB7XG4gICAgICBpZiAoIWNvbnRhaW5zKHNlZW4sIGNvbXB1dGVkKSkge1xuICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghY29udGFpbnMocmVzdWx0LCB2YWx1ZSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsImltcG9ydCByZXN0QXJndW1lbnRzIGZyb20gJy4vcmVzdEFyZ3VtZW50cy5qcyc7XG5pbXBvcnQgdW5pcSBmcm9tICcuL3VuaXEuanMnO1xuaW1wb3J0IGZsYXR0ZW4gZnJvbSAnLi9fZmxhdHRlbi5qcyc7XG5cbi8vIFByb2R1Y2UgYW4gYXJyYXkgdGhhdCBjb250YWlucyB0aGUgdW5pb246IGVhY2ggZGlzdGluY3QgZWxlbWVudCBmcm9tIGFsbCBvZlxuLy8gdGhlIHBhc3NlZC1pbiBhcnJheXMuXG5leHBvcnQgZGVmYXVsdCByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGFycmF5cykge1xuICByZXR1cm4gdW5pcShmbGF0dGVuKGFycmF5cywgdHJ1ZSwgdHJ1ZSkpO1xufSk7XG4iLCJpbXBvcnQgZ2V0TGVuZ3RoIGZyb20gJy4vX2dldExlbmd0aC5qcyc7XG5pbXBvcnQgY29udGFpbnMgZnJvbSAnLi9jb250YWlucy5qcyc7XG5cbi8vIFByb2R1Y2UgYW4gYXJyYXkgdGhhdCBjb250YWlucyBldmVyeSBpdGVtIHNoYXJlZCBiZXR3ZWVuIGFsbCB0aGVcbi8vIHBhc3NlZC1pbiBhcnJheXMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbnRlcnNlY3Rpb24oYXJyYXkpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgYXJnc0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaXRlbSA9IGFycmF5W2ldO1xuICAgIGlmIChjb250YWlucyhyZXN1bHQsIGl0ZW0pKSBjb250aW51ZTtcbiAgICB2YXIgajtcbiAgICBmb3IgKGogPSAxOyBqIDwgYXJnc0xlbmd0aDsgaisrKSB7XG4gICAgICBpZiAoIWNvbnRhaW5zKGFyZ3VtZW50c1tqXSwgaXRlbSkpIGJyZWFrO1xuICAgIH1cbiAgICBpZiAoaiA9PT0gYXJnc0xlbmd0aCkgcmVzdWx0LnB1c2goaXRlbSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsImltcG9ydCBtYXggZnJvbSAnLi9tYXguanMnO1xuaW1wb3J0IGdldExlbmd0aCBmcm9tICcuL19nZXRMZW5ndGguanMnO1xuaW1wb3J0IHBsdWNrIGZyb20gJy4vcGx1Y2suanMnO1xuXG4vLyBDb21wbGVtZW50IG9mIHppcC4gVW56aXAgYWNjZXB0cyBhbiBhcnJheSBvZiBhcnJheXMgYW5kIGdyb3Vwc1xuLy8gZWFjaCBhcnJheSdzIGVsZW1lbnRzIG9uIHNoYXJlZCBpbmRpY2VzLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdW56aXAoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IChhcnJheSAmJiBtYXgoYXJyYXksIGdldExlbmd0aCkubGVuZ3RoKSB8fCAwO1xuICB2YXIgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IHBsdWNrKGFycmF5LCBpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsImltcG9ydCByZXN0QXJndW1lbnRzIGZyb20gJy4vcmVzdEFyZ3VtZW50cy5qcyc7XG5pbXBvcnQgdW56aXAgZnJvbSAnLi91bnppcC5qcyc7XG5cbi8vIFppcCB0b2dldGhlciBtdWx0aXBsZSBsaXN0cyBpbnRvIGEgc2luZ2xlIGFycmF5IC0tIGVsZW1lbnRzIHRoYXQgc2hhcmVcbi8vIGFuIGluZGV4IGdvIHRvZ2V0aGVyLlxuZXhwb3J0IGRlZmF1bHQgcmVzdEFyZ3VtZW50cyh1bnppcCk7XG4iLCJpbXBvcnQgZ2V0TGVuZ3RoICBmcm9tICcuL19nZXRMZW5ndGguanMnO1xuXG4vLyBDb252ZXJ0cyBsaXN0cyBpbnRvIG9iamVjdHMuIFBhc3MgZWl0aGVyIGEgc2luZ2xlIGFycmF5IG9mIGBba2V5LCB2YWx1ZV1gXG4vLyBwYWlycywgb3IgdHdvIHBhcmFsbGVsIGFycmF5cyBvZiB0aGUgc2FtZSBsZW5ndGggLS0gb25lIG9mIGtleXMsIGFuZCBvbmUgb2Zcbi8vIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy4gUGFzc2luZyBieSBwYWlycyBpcyB0aGUgcmV2ZXJzZSBvZiBgXy5wYWlyc2AuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvYmplY3QobGlzdCwgdmFsdWVzKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChsaXN0KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHZhbHVlcykge1xuICAgICAgcmVzdWx0W2xpc3RbaV1dID0gdmFsdWVzW2ldO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRbbGlzdFtpXVswXV0gPSBsaXN0W2ldWzFdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwiLy8gR2VuZXJhdGUgYW4gaW50ZWdlciBBcnJheSBjb250YWluaW5nIGFuIGFyaXRobWV0aWMgcHJvZ3Jlc3Npb24uIEEgcG9ydCBvZlxuLy8gdGhlIG5hdGl2ZSBQeXRob24gYHJhbmdlKClgIGZ1bmN0aW9uLiBTZWVcbi8vIFt0aGUgUHl0aG9uIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjcmFuZ2UpLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmFuZ2Uoc3RhcnQsIHN0b3AsIHN0ZXApIHtcbiAgaWYgKHN0b3AgPT0gbnVsbCkge1xuICAgIHN0b3AgPSBzdGFydCB8fCAwO1xuICAgIHN0YXJ0ID0gMDtcbiAgfVxuICBpZiAoIXN0ZXApIHtcbiAgICBzdGVwID0gc3RvcCA8IHN0YXJ0ID8gLTEgOiAxO1xuICB9XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KE1hdGguY2VpbCgoc3RvcCAtIHN0YXJ0KSAvIHN0ZXApLCAwKTtcbiAgdmFyIHJhbmdlID0gQXJyYXkobGVuZ3RoKTtcblxuICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBsZW5ndGg7IGlkeCsrLCBzdGFydCArPSBzdGVwKSB7XG4gICAgcmFuZ2VbaWR4XSA9IHN0YXJ0O1xuICB9XG5cbiAgcmV0dXJuIHJhbmdlO1xufVxuIiwiaW1wb3J0IHsgc2xpY2UgfSBmcm9tICcuL19zZXR1cC5qcyc7XG5cbi8vIENodW5rIGEgc2luZ2xlIGFycmF5IGludG8gbXVsdGlwbGUgYXJyYXlzLCBlYWNoIGNvbnRhaW5pbmcgYGNvdW50YCBvciBmZXdlclxuLy8gaXRlbXMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjaHVuayhhcnJheSwgY291bnQpIHtcbiAgaWYgKGNvdW50ID09IG51bGwgfHwgY291bnQgPCAxKSByZXR1cm4gW107XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHdoaWxlIChpIDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0LnB1c2goc2xpY2UuY2FsbChhcnJheSwgaSwgaSArPSBjb3VudCkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG4iLCJpbXBvcnQgXyBmcm9tICcuL3VuZGVyc2NvcmUuanMnO1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gY29udGludWUgY2hhaW5pbmcgaW50ZXJtZWRpYXRlIHJlc3VsdHMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjaGFpblJlc3VsdChpbnN0YW5jZSwgb2JqKSB7XG4gIHJldHVybiBpbnN0YW5jZS5fY2hhaW4gPyBfKG9iaikuY2hhaW4oKSA6IG9iajtcbn1cbiIsImltcG9ydCBfIGZyb20gJy4vdW5kZXJzY29yZS5qcyc7XG5pbXBvcnQgZWFjaCBmcm9tICcuL2VhY2guanMnO1xuaW1wb3J0IGZ1bmN0aW9ucyBmcm9tICcuL2Z1bmN0aW9ucy5qcyc7XG5pbXBvcnQgeyBwdXNoIH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuaW1wb3J0IGNoYWluUmVzdWx0IGZyb20gJy4vX2NoYWluUmVzdWx0LmpzJztcblxuLy8gQWRkIHlvdXIgb3duIGN1c3RvbSBmdW5jdGlvbnMgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWl4aW4ob2JqKSB7XG4gIGVhY2goZnVuY3Rpb25zKG9iaiksIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgZnVuYyA9IF9bbmFtZV0gPSBvYmpbbmFtZV07XG4gICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBhcmdzID0gW3RoaXMuX3dyYXBwZWRdO1xuICAgICAgcHVzaC5hcHBseShhcmdzLCBhcmd1bWVudHMpO1xuICAgICAgcmV0dXJuIGNoYWluUmVzdWx0KHRoaXMsIGZ1bmMuYXBwbHkoXywgYXJncykpO1xuICAgIH07XG4gIH0pO1xuICByZXR1cm4gXztcbn1cbiIsImltcG9ydCBfIGZyb20gJy4vdW5kZXJzY29yZS5qcyc7XG5pbXBvcnQgZWFjaCBmcm9tICcuL2VhY2guanMnO1xuaW1wb3J0IHsgQXJyYXlQcm90byB9IGZyb20gJy4vX3NldHVwLmpzJztcbmltcG9ydCBjaGFpblJlc3VsdCBmcm9tICcuL19jaGFpblJlc3VsdC5qcyc7XG5cbi8vIEFkZCBhbGwgbXV0YXRvciBgQXJyYXlgIGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci5cbmVhY2goWydwb3AnLCAncHVzaCcsICdyZXZlcnNlJywgJ3NoaWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQnXSwgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgbWV0aG9kID0gQXJyYXlQcm90b1tuYW1lXTtcbiAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgb2JqID0gdGhpcy5fd3JhcHBlZDtcbiAgICBpZiAob2JqICE9IG51bGwpIHtcbiAgICAgIG1ldGhvZC5hcHBseShvYmosIGFyZ3VtZW50cyk7XG4gICAgICBpZiAoKG5hbWUgPT09ICdzaGlmdCcgfHwgbmFtZSA9PT0gJ3NwbGljZScpICYmIG9iai5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGVsZXRlIG9ialswXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNoYWluUmVzdWx0KHRoaXMsIG9iaik7XG4gIH07XG59KTtcblxuLy8gQWRkIGFsbCBhY2Nlc3NvciBgQXJyYXlgIGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci5cbmVhY2goWydjb25jYXQnLCAnam9pbicsICdzbGljZSddLCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVdO1xuICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBvYmogPSB0aGlzLl93cmFwcGVkO1xuICAgIGlmIChvYmogIT0gbnVsbCkgb2JqID0gbWV0aG9kLmFwcGx5KG9iaiwgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gY2hhaW5SZXN1bHQodGhpcywgb2JqKTtcbiAgfTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBfO1xuIiwiLy8gRGVmYXVsdCBFeHBvcnRcbi8vID09PT09PT09PT09PT09XG4vLyBJbiB0aGlzIG1vZHVsZSwgd2UgbWl4IG91ciBidW5kbGVkIGV4cG9ydHMgaW50byB0aGUgYF9gIG9iamVjdCBhbmQgZXhwb3J0XG4vLyB0aGUgcmVzdWx0LiBUaGlzIGlzIGFuYWxvZ291cyB0byBzZXR0aW5nIGBtb2R1bGUuZXhwb3J0cyA9IF9gIGluIENvbW1vbkpTLlxuLy8gSGVuY2UsIHRoaXMgbW9kdWxlIGlzIGFsc28gdGhlIGVudHJ5IHBvaW50IG9mIG91ciBVTUQgYnVuZGxlIGFuZCB0aGUgcGFja2FnZVxuLy8gZW50cnkgcG9pbnQgZm9yIENvbW1vbkpTIGFuZCBBTUQgdXNlcnMuIEluIG90aGVyIHdvcmRzLCB0aGlzIGlzICh0aGUgc291cmNlXG4vLyBvZikgdGhlIG1vZHVsZSB5b3UgYXJlIGludGVyZmFjaW5nIHdpdGggd2hlbiB5b3UgZG8gYW55IG9mIHRoZSBmb2xsb3dpbmc6XG4vL1xuLy8gYGBganNcbi8vIC8vIENvbW1vbkpTXG4vLyB2YXIgXyA9IHJlcXVpcmUoJ3VuZGVyc2NvcmUnKTtcbi8vXG4vLyAvLyBBTURcbi8vIGRlZmluZShbJ3VuZGVyc2NvcmUnXSwgZnVuY3Rpb24oXykgey4uLn0pO1xuLy9cbi8vIC8vIFVNRCBpbiB0aGUgYnJvd3NlclxuLy8gLy8gXyBpcyBhdmFpbGFibGUgYXMgYSBnbG9iYWwgdmFyaWFibGVcbi8vIGBgYFxuaW1wb3J0ICogYXMgYWxsRXhwb3J0cyBmcm9tICcuL2luZGV4LmpzJztcbmltcG9ydCB7IG1peGluIH0gZnJvbSAnLi9pbmRleC5qcyc7XG5cbi8vIEFkZCBhbGwgb2YgdGhlIFVuZGVyc2NvcmUgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyIG9iamVjdC5cbnZhciBfID0gbWl4aW4oYWxsRXhwb3J0cyk7XG4vLyBMZWdhY3kgTm9kZS5qcyBBUEkuXG5fLl8gPSBfO1xuLy8gRXhwb3J0IHRoZSBVbmRlcnNjb3JlIEFQSS5cbmV4cG9ydCBkZWZhdWx0IF87XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFNPUlRfQVNDLCBTT1JUX0RFU0MgfSBmcm9tIFwiLi4vY29uc3RcIjtcblxudHlwZSBEYXRhT3BlcmF0b3IgPSB7XG4gIG5leHRPcmRlcjogKFxuICAgIGNvbHVtbjogYW55LFxuICAgIHN0YXRlOiB7IHNvcnRPcmRlcjogc3RyaW5nIHwgdW5kZWZpbmVkOyBzb3J0Q29sdW1uOiBhbnkgfCB1bmRlZmluZWQgfSxcbiAgICBkZWZhdWx0U29ydERpcmVjdGlvbjogc3RyaW5nXG4gICkgPT4gc3RyaW5nO1xuICBzb3J0OiAoXG4gICAgZGF0YTogYW55W10sXG4gICAgb3JkZXI6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBzb3J0Q29sdW1uOiBhbnkgfCB1bmRlZmluZWRcbiAgKSA9PiBhbnlbXTtcbn07XG5cbnR5cGUgSGFuZGxlU29ydENoYW5nZSA9IChcbiAgZGF0YUZpZWxkOiBzdHJpbmcsXG4gIHNvcnRPcmRlcjogc3RyaW5nIHwgdW5kZWZpbmVkXG4pID0+IHZvaWQ7XG5cbi8vXG5pbnRlcmZhY2UgU29ydENvbnRleHRWYWx1ZSB7XG4gIGRhdGE6IGFueVtdO1xuICBzb3J0T3JkZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgb25Tb3J0OiAoY29sdW1uOiBhbnkpID0+IHZvaWQ7XG4gIHNvcnRGaWVsZDogc3RyaW5nIHwgbnVsbDtcbn1cblxuaW50ZXJmYWNlIFNvcnRQcm92aWRlclByb3BzIHtcbiAgZGF0YTogYW55W107XG4gIGNvbHVtbnM6IGFueVtdO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBkZWZhdWx0U29ydGVkPzogQXJyYXk8e1xuICAgIGRhdGFGaWVsZDogc3RyaW5nO1xuICAgIG9yZGVyOiB0eXBlb2YgU09SVF9BU0MgfCB0eXBlb2YgU09SVF9ERVNDO1xuICB9PjtcbiAgc29ydD86IHtcbiAgICBkYXRhRmllbGQ6IHN0cmluZztcbiAgICBvcmRlcjogdHlwZW9mIFNPUlRfQVNDIHwgdHlwZW9mIFNPUlRfREVTQztcbiAgICBzb3J0RnVuYzogKGE6IGFueSwgYjogYW55LCBvcmRlcjogc3RyaW5nLCBkYXRhRmllbGQ6IHN0cmluZykgPT4gbnVtYmVyO1xuICB9O1xuICBkZWZhdWx0U29ydERpcmVjdGlvbjogdHlwZW9mIFNPUlRfQVNDIHwgdHlwZW9mIFNPUlRfREVTQztcbn1cblxuZXhwb3J0IGRlZmF1bHQgKFxuICBkYXRhT3BlcmF0b3I6IERhdGFPcGVyYXRvcixcbiAgaXNSZW1vdGVTb3J0OiAoKSA9PiBib29sZWFuLFxuICBoYW5kbGVTb3J0Q2hhbmdlOiBIYW5kbGVTb3J0Q2hhbmdlXG4pID0+IHtcbiAgY29uc3QgZGVmYXVsdFNvcnRDb250ZXh0ID0ge1xuICAgIGRhdGE6IFtdLFxuICAgIHNvcnRPcmRlcjogdW5kZWZpbmVkLFxuICAgIG9uU29ydDogKCkgPT4geyB9LFxuICAgIHNvcnRGaWVsZDogbnVsbCxcbiAgfTtcbiAgY29uc3QgU29ydENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PFNvcnRDb250ZXh0VmFsdWU+KGRlZmF1bHRTb3J0Q29udGV4dCk7XG5cbiAgY2xhc3MgU29ydFByb3ZpZGVyIGV4dGVuZHMgQ29tcG9uZW50PFNvcnRQcm92aWRlclByb3BzPiB7XG4gICAgc3RhdGU6IHtcbiAgICAgIHNvcnRPcmRlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgc29ydENvbHVtbjpcbiAgICAgIHwge1xuICAgICAgICBkYXRhRmllbGQ6IHN0cmluZztcbiAgICAgICAgdGV4dDogc3RyaW5nO1xuICAgICAgICBvblNvcnQ6IEZ1bmN0aW9uO1xuICAgICAgICBzb3J0RnVuYzogRnVuY3Rpb247XG4gICAgICB9XG4gICAgICB8IHVuZGVmaW5lZDtcbiAgICB9ID0ge1xuICAgICAgICBzb3J0T3JkZXI6IFNPUlRfQVNDLFxuICAgICAgICBzb3J0Q29sdW1uOiB7XG4gICAgICAgICAgZGF0YUZpZWxkOiBcImlkXCIsXG4gICAgICAgICAgdGV4dDogXCJJRFwiLFxuICAgICAgICAgIG9uU29ydDogKCkgPT4geyB9LFxuICAgICAgICAgIHNvcnRGdW5jOiAoKSA9PiB7IH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgY29uc3RydWN0b3IocHJvcHM6IFNvcnRQcm92aWRlclByb3BzKSB7XG4gICAgICBzdXBlcihwcm9wcyk7XG4gICAgICBjb25zdCB7IGRlZmF1bHRTb3J0ZWQsIGRlZmF1bHRTb3J0RGlyZWN0aW9uLCBzb3J0IH0gPSBwcm9wcztcblxuICAgICAgbGV0IHNvcnRPcmRlcjogYW55O1xuICAgICAgbGV0IHNvcnRDb2x1bW46IGFueTtcblxuICAgICAgaWYgKGRlZmF1bHRTb3J0ZWQgJiYgZGVmYXVsdFNvcnRlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHNvcnRPcmRlciA9IGRlZmF1bHRTb3J0ZWRbMF0ub3JkZXIgfHwgZGVmYXVsdFNvcnREaXJlY3Rpb247XG4gICAgICAgIHNvcnRDb2x1bW4gPSB0aGlzLmluaXRTb3J0KGRlZmF1bHRTb3J0ZWRbMF0uZGF0YUZpZWxkLCBzb3J0T3JkZXIpO1xuICAgICAgfSBlbHNlIGlmIChzb3J0ICYmIHNvcnQuZGF0YUZpZWxkICYmIHNvcnQub3JkZXIpIHtcbiAgICAgICAgc29ydE9yZGVyID0gc29ydC5vcmRlcjtcbiAgICAgICAgc29ydENvbHVtbiA9IHRoaXMuaW5pdFNvcnQoc29ydC5kYXRhRmllbGQsIHNvcnRPcmRlcik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3RhdGUgPSB7IHNvcnRPcmRlciwgc29ydENvbHVtbiB9O1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgY29uc3QgeyBzb3J0T3JkZXIsIHNvcnRDb2x1bW4gfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIGlmIChpc1JlbW90ZVNvcnQoKSAmJiBzb3J0T3JkZXIgJiYgc29ydENvbHVtbikge1xuICAgICAgICBoYW5kbGVTb3J0Q2hhbmdlKHNvcnRDb2x1bW4uZGF0YUZpZWxkLCBzb3J0T3JkZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoXG4gICAgICBuZXh0UHJvcHM6IFNvcnRQcm92aWRlclByb3BzLFxuICAgICAgcHJldlN0YXRlOiBhbnlcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgc29ydCwgY29sdW1ucyB9ID0gbmV4dFByb3BzO1xuXG4gICAgICBpZiAoc29ydCAmJiBzb3J0LmRhdGFGaWVsZCAmJiBzb3J0Lm9yZGVyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc29ydE9yZGVyOiBzb3J0Lm9yZGVyLFxuICAgICAgICAgIHNvcnRDb2x1bW46IGNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wuZGF0YUZpZWxkID09PSBzb3J0LmRhdGFGaWVsZCksXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0U29ydChzb3J0RmllbGQ6IHN0cmluZywgc29ydE9yZGVyOiBzdHJpbmcpIHtcbiAgICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHNvcnRDb2x1bW5zID0gY29sdW1ucy5maWx0ZXIoKGNvbCkgPT4gY29sLmRhdGFGaWVsZCA9PT0gc29ydEZpZWxkKTtcblxuICAgICAgbGV0IHNvcnRDb2x1bW46IGFueTtcblxuICAgICAgaWYgKHNvcnRDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc29ydENvbHVtbiA9IHNvcnRDb2x1bW5zWzBdO1xuICAgICAgICBpZiAoc29ydENvbHVtbi5vblNvcnQpIHtcbiAgICAgICAgICBzb3J0Q29sdW1uLm9uU29ydChzb3J0RmllbGQsIHNvcnRPcmRlcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNvcnRDb2x1bW47XG4gICAgfVxuXG4gICAgaGFuZGxlU29ydCA9IChjb2x1bW46IHsgZGF0YUZpZWxkOiBzdHJpbmc7IG9uU29ydDogRnVuY3Rpb24gfSkgPT4ge1xuICAgICAgY29uc3Qgc29ydE9yZGVyID0gZGF0YU9wZXJhdG9yLm5leHRPcmRlcihcbiAgICAgICAgY29sdW1uLFxuICAgICAgICB0aGlzLnN0YXRlLFxuICAgICAgICB0aGlzLnByb3BzLmRlZmF1bHRTb3J0RGlyZWN0aW9uXG4gICAgICApO1xuXG4gICAgICBpZiAoY29sdW1uLm9uU29ydCkge1xuICAgICAgICBjb2x1bW4ub25Tb3J0KGNvbHVtbi5kYXRhRmllbGQsIHNvcnRPcmRlcik7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1JlbW90ZVNvcnQoKSkge1xuICAgICAgICBoYW5kbGVTb3J0Q2hhbmdlKGNvbHVtbi5kYXRhRmllbGQsIHNvcnRPcmRlcik7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7XG4gICAgICAgIHNvcnRPcmRlcixcbiAgICAgICAgc29ydENvbHVtbjogY29sdW1uLFxuICAgICAgfSkpO1xuICAgIH07XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7IHNvcnQgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IHNvcnRPcmRlciwgc29ydENvbHVtbiB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgbGV0IHsgZGF0YSB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgaWYgKCFpc1JlbW90ZVNvcnQoKSAmJiBzb3J0Q29sdW1uKSB7XG4gICAgICAgIGNvbnN0IHNvcnRGdW5jID0gc29ydENvbHVtbi5zb3J0RnVuY1xuICAgICAgICAgID8gc29ydENvbHVtbi5zb3J0RnVuY1xuICAgICAgICAgIDogc29ydCAmJiBzb3J0LnNvcnRGdW5jO1xuICAgICAgICBkYXRhID0gZGF0YU9wZXJhdG9yLnNvcnQoZGF0YSwgc29ydE9yZGVyLCB7IC4uLnNvcnRDb2x1bW4sIHNvcnRGdW5jIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U29ydENvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgICB2YWx1ZT17e1xuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHNvcnRPcmRlcixcbiAgICAgICAgICAgIG9uU29ydDogdGhpcy5oYW5kbGVTb3J0LFxuICAgICAgICAgICAgc29ydEZpZWxkOiBzb3J0Q29sdW1uID8gc29ydENvbHVtbi5kYXRhRmllbGQgOiBudWxsLFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgPC9Tb3J0Q29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBQcm92aWRlcjogU29ydFByb3ZpZGVyLFxuICAgIENvbnN1bWVyOiBTb3J0Q29udGV4dC5Db25zdW1lcixcbiAgfTtcbn07XG4iLCJpbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCBDb2x1bW5SZXNvbHZlciBmcm9tIFwiLi9jb2x1bW4tcmVzb2x2ZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgKEV4dGVuZEJhc2U6IGFueSkgPT5cbiAgY2xhc3MgVGFibGVSZXNvbHZlciBleHRlbmRzIENvbHVtblJlc29sdmVyKEV4dGVuZEJhc2UpIHtcbiAgICB2YWxpZGF0ZVByb3BzKCkge1xuICAgICAgY29uc3QgeyBrZXlGaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGlmICgha2V5RmllbGQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHNwZWNpZnkgYSBmaWVsZCBhcyBrZXkgdmlhIGtleUZpZWxkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudmlzaWJsZUNvbHVtblNpemUoZmFsc2UpIDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdmlzaWJsZSBjb2x1bW5zIGRldGVjdGVkXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlzRW1wdHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRhLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICB2aXNpYmxlUm93cygpIHtcbiAgICAgIGNvbnN0IHsgZGF0YSwgaGlkZGVuUm93cywga2V5RmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgICBpZiAoIWhpZGRlblJvd3MgfHwgaGlkZGVuUm93cy5sZW5ndGggPT09IDApIHJldHVybiBkYXRhO1xuICAgICAgcmV0dXJuIGRhdGEuZmlsdGVyKChyb3c6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBrZXkgPSBfLmdldChyb3csIGtleUZpZWxkKTtcbiAgICAgICAgcmV0dXJuICFfLmNvbnRhaW5zKGhpZGRlblJvd3MsIGtleSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IElORElDQVRPUl9QT1NJVElPTl9MRUZUIH0gZnJvbSBcIi4vY29uc3RcIjtcbmltcG9ydCBIZWFkZXJDZWxsIGZyb20gXCIuL2hlYWRlci1jZWxsXCI7XG5pbXBvcnQgRXhwYW5kSGVhZGVyQ2VsbCBmcm9tIFwiLi9yb3ctZXhwYW5kL2V4cGFuZC1oZWFkZXItY2VsbFwiO1xuaW1wb3J0IHdpdGhIZWFkZXJFeHBhbnNpb24gZnJvbSBcIi4vcm93LWV4cGFuZC9leHBhbmQtaGVhZGVyLWNlbGwtY29uc3VtZXJcIjtcbmltcG9ydCBTZWxlY3Rpb25IZWFkZXJDZWxsIGZyb20gXCIuL3Jvdy1zZWxlY3Rpb24vc2VsZWN0aW9uLWhlYWRlci1jZWxsXCI7XG5pbXBvcnQgd2l0aEhlYWRlclNlbGVjdGlvbiBmcm9tIFwiLi9yb3ctc2VsZWN0aW9uL3NlbGVjdGlvbi1oZWFkZXItY2VsbC1jb25zdW1lclwiO1xuXG5pbnRlcmZhY2UgSGVhZGVyUHJvcHMge1xuICBjb2x1bW5zOiBhbnlbXTtcbiAgb25Tb3J0PzogKGNvbHVtbjogYW55KSA9PiB2b2lkO1xuICBvbkZpbHRlcj86IChmaWx0ZXJEYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiB2b2lkO1xuICBzb3J0RmllbGQ/OiBzdHJpbmc7XG4gIHNvcnRPcmRlcj86IHN0cmluZztcbiAgc2VsZWN0Um93PzogYW55O1xuICBjdXJyRmlsdGVycz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIG9uRXh0ZXJuYWxGaWx0ZXI/OiAoY29sdW1uOiBhbnksIGZpbHRlclR5cGU6IHN0cmluZykgPT4gKHZhbHVlOiBhbnkpID0+IHZvaWQ7XG4gIGdsb2JhbFNvcnRDYXJldD86IChvcmRlcjogc3RyaW5nLCBjb2x1bW46IGFueSkgPT4gUmVhY3QuUmVhY3ROb2RlO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHdyYXBwZXJDbGFzc2VzPzogc3RyaW5nO1xuICBleHBhbmRSb3c/OiBhbnk7XG4gIGZpbHRlclBvc2l0aW9uPzogc3RyaW5nO1xufVxuXG5jb25zdCBIZWFkZXI6IFJlYWN0LkZDPEhlYWRlclByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NOYW1lLFxuICAgIGNvbHVtbnMsXG4gICAgb25Tb3J0LFxuICAgIG9uRmlsdGVyLFxuICAgIHNvcnRGaWVsZCxcbiAgICBzb3J0T3JkZXIsXG4gICAgc2VsZWN0Um93LFxuICAgIGV4cGFuZFJvdyxcbiAgICBjdXJyRmlsdGVycyxcbiAgICBvbkV4dGVybmFsRmlsdGVyLFxuICAgIGZpbHRlclBvc2l0aW9uLFxuICAgIGdsb2JhbFNvcnRDYXJldCxcbiAgICB3cmFwcGVyQ2xhc3NlcyxcbiAgfSA9IHByb3BzO1xuXG4gIGxldCBTZWxlY3Rpb25IZWFkZXJDZWxsQ29tcDogUmVhY3QuRkMgPSAoKSA9PiBudWxsO1xuICBsZXQgRXhwYW5zaW9uSGVhZGVyQ2VsbENvbXA6IFJlYWN0LkZDID0gKCkgPT4gbnVsbDtcblxuICBpZiAoZXhwYW5kUm93Py5zaG93RXhwYW5kQ29sdW1uKSB7XG4gICAgRXhwYW5zaW9uSGVhZGVyQ2VsbENvbXAgPSB3aXRoSGVhZGVyRXhwYW5zaW9uKEV4cGFuZEhlYWRlckNlbGwpO1xuICB9XG5cbiAgaWYgKHNlbGVjdFJvdykge1xuICAgIFNlbGVjdGlvbkhlYWRlckNlbGxDb21wID0gd2l0aEhlYWRlclNlbGVjdGlvbihTZWxlY3Rpb25IZWFkZXJDZWxsKTtcbiAgfVxuXG4gIGNvbnN0IGlzUmVuZGVyRnVuY3Rpb25Db2x1bW5JbkxlZnQgPSAocG9zaXRpb24gPSBJTkRJQ0FUT1JfUE9TSVRJT05fTEVGVCkgPT5cbiAgICBwb3NpdGlvbiA9PT0gSU5ESUNBVE9SX1BPU0lUSU9OX0xFRlQ7XG5cbiAgY29uc3QgY2hpbGRyZW5zID0gY29sdW1ucy5tYXAoKGNvbHVtbiwgaSkgPT4ge1xuICAgIGNvbnN0IGN1cnJTb3J0ID0gY29sdW1uLmRhdGFGaWVsZCA9PT0gc29ydEZpZWxkO1xuICAgIGNvbnN0IGlzTGFzdFNvcnRpbmcgPSBjb2x1bW4uZGF0YUZpZWxkID09PSBzb3J0RmllbGQ7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEhlYWRlckNlbGxcbiAgICAgICAgaW5kZXg9e2l9XG4gICAgICAgIGtleT17Y29sdW1uLmRhdGFGaWVsZH1cbiAgICAgICAgY29sdW1uPXtjb2x1bW59XG4gICAgICAgIG9uU29ydD17b25Tb3J0fVxuICAgICAgICBzb3J0aW5nPXtjdXJyU29ydH1cbiAgICAgICAgc29ydE9yZGVyPXtzb3J0T3JkZXJ9XG4gICAgICAgIGdsb2JhbFNvcnRDYXJldD17Z2xvYmFsU29ydENhcmV0fVxuICAgICAgICBpc0xhc3RTb3J0aW5nPXtpc0xhc3RTb3J0aW5nfVxuICAgICAgICBvbkZpbHRlcj17b25GaWx0ZXJ9XG4gICAgICAgIGN1cnJGaWx0ZXJzPXtjdXJyRmlsdGVyc31cbiAgICAgICAgb25FeHRlcm5hbEZpbHRlcj17b25FeHRlcm5hbEZpbHRlcn1cbiAgICAgICAgZmlsdGVyUG9zaXRpb249e2ZpbHRlclBvc2l0aW9ufVxuICAgICAgLz5cbiAgICApO1xuICB9KTtcblxuICBpZiAoc2VsZWN0Um93ICYmICFzZWxlY3RSb3cuaGlkZVNlbGVjdENvbHVtbikge1xuICAgIGlmIChpc1JlbmRlckZ1bmN0aW9uQ29sdW1uSW5MZWZ0KHNlbGVjdFJvdy5zZWxlY3RDb2x1bW5Qb3NpdGlvbikpIHtcbiAgICAgIGNoaWxkcmVucy51bnNoaWZ0KDxTZWxlY3Rpb25IZWFkZXJDZWxsQ29tcCBrZXk9XCJzZWxlY3Rpb25cIiAvPik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoaWxkcmVucy5wdXNoKDxTZWxlY3Rpb25IZWFkZXJDZWxsQ29tcCBrZXk9XCJzZWxlY3Rpb25cIiAvPik7XG4gICAgfVxuICB9XG5cbiAgaWYgKGV4cGFuZFJvdz8uc2hvd0V4cGFuZENvbHVtbikge1xuICAgIGlmIChpc1JlbmRlckZ1bmN0aW9uQ29sdW1uSW5MZWZ0KGV4cGFuZFJvdy5leHBhbmRDb2x1bW5Qb3NpdGlvbikpIHtcbiAgICAgIGNoaWxkcmVucy51bnNoaWZ0KDxFeHBhbnNpb25IZWFkZXJDZWxsQ29tcCBrZXk9XCJleHBhbnNpb25cIiAvPik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoaWxkcmVucy5wdXNoKDxFeHBhbnNpb25IZWFkZXJDZWxsQ29tcCBrZXk9XCJleHBhbnNpb25cIiAvPik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8dGhlYWQgY2xhc3NOYW1lPXt3cmFwcGVyQ2xhc3Nlc30+XG4gICAgICA8dHIgY2xhc3NOYW1lPXtjbGFzc05hbWV9PntjaGlsZHJlbnN9PC90cj5cbiAgICA8L3RoZWFkPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgSGVhZGVyO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX181NDQyX187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX182MDAzX187IiwiaW1wb3J0IGNzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY3JlYXRlRXhwYW5zaW9uQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dHMvcm93LWV4cGFuZC1jb250ZXh0XCI7XG5pbXBvcnQgeyBSb3dQcm9wcyB9IGZyb20gXCIuLi9yb3cvc2hvdWxkLXVwZGF0ZXJcIjtcbmltcG9ydCBfIGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IEV4cGFuZFJvdyBmcm9tIFwiLi9leHBhbmQtcm93XCI7XG5cbmNvbnN0IEV4cGFuc2lvbkNvbnRleHQgPSBjcmVhdGVFeHBhbnNpb25Db250ZXh0KCk7XG5cbmV4cG9ydCBkZWZhdWx0IChcbiAgQ29tcG9uZW50OiBSZWFjdC5Db21wb25lbnRUeXBlPFJvd1Byb3BzPlxuKTogUmVhY3QuRkM8Um93UHJvcHM+ID0+IHtcbiAgY29uc3QgcmVuZGVyV2l0aEV4cGFuc2lvbiA9IChcbiAgICBwcm9wczogUm93UHJvcHMsXG4gICAgZXhwYW5kUm93OiBhbnlcbiAgKTogUmVhY3QuUmVhY3ROb2RlW10gPT4ge1xuICAgIGlmICghZXhwYW5kUm93KSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgbGV0IHBhcmVudENsYXNzTmFtZSA9IFwiXCI7XG4gICAgbGV0IGNsYXNzTmFtZSA9IFwiXCI7XG4gICAgY29uc3Qga2V5ID0gcHJvcHMudmFsdWU7XG5cbiAgICBjb25zdCBleHBhbmRlZCA9IF8uY29udGFpbnMoZXhwYW5kUm93LmV4cGFuZGVkLCBrZXkpO1xuICAgIGNvbnN0IGlzQ2xvc2luZyA9IF8uY29udGFpbnMoZXhwYW5kUm93LmlzQ2xvc2luZywga2V5KTtcbiAgICBjb25zdCBleHBhbmRhYmxlID1cbiAgICAgICFleHBhbmRSb3cubm9uRXhwYW5kYWJsZSB8fCAhXy5jb250YWlucyhleHBhbmRSb3cubm9uRXhwYW5kYWJsZSwga2V5KTtcbiAgICBpZiAoZXhwYW5kZWQpIHtcbiAgICAgIHBhcmVudENsYXNzTmFtZSA9IF8uaXNGdW5jdGlvbihleHBhbmRSb3cucGFyZW50Q2xhc3NOYW1lKVxuICAgICAgICA/IGV4cGFuZFJvdy5wYXJlbnRDbGFzc05hbWUoZXhwYW5kZWQsIHByb3BzLnJvdywgcHJvcHMucm93SW5kZXgpXG4gICAgICAgIDogZXhwYW5kUm93LnBhcmVudENsYXNzTmFtZSB8fCBcIlwiO1xuXG4gICAgICBjbGFzc05hbWUgPSBfLmlzRnVuY3Rpb24oZXhwYW5kUm93LmNsYXNzTmFtZSlcbiAgICAgICAgPyBleHBhbmRSb3cuY2xhc3NOYW1lKGV4cGFuZGVkLCBwcm9wcy5yb3csIHByb3BzLnJvd0luZGV4KVxuICAgICAgICA6IGV4cGFuZFJvdy5jbGFzc05hbWUgfHwgXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gW1xuICAgICAgPENvbXBvbmVudFxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgIGV4cGFuZGFibGU9e2V4cGFuZGFibGV9XG4gICAgICAgIGV4cGFuZFJvdz17eyAuLi5leHBhbmRSb3cgfX1cbiAgICAgICAgY2xhc3NOYW1lPXtjcyhwcm9wcy5jbGFzc05hbWUsIHBhcmVudENsYXNzTmFtZSl9XG4gICAgICAvPixcbiAgICAgIGV4cGFuZGVkIHx8IGlzQ2xvc2luZyA/IChcbiAgICAgICAgPEV4cGFuZFJvd1xuICAgICAgICAgIGtleT17YCR7a2V5fS1leHBhbmRpbmdgfVxuICAgICAgICAgIGNvbFNwYW49e3Byb3BzLnZpc2libGVDb2x1bW5TaXplIX1cbiAgICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgICAgb25DbG9zZWQ9eygpID0+IGV4cGFuZFJvdy5vbkNsb3NlZChrZXkpfVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICA+XG4gICAgICAgICAge2V4cGFuZFJvdy5yZW5kZXJlcihwcm9wcy5yb3csIHByb3BzLnJvd0luZGV4KX1cbiAgICAgICAgPC9FeHBhbmRSb3c+XG4gICAgICApIDogbnVsbCxcbiAgICBdO1xuICB9O1xuXG4gIHJldHVybiAocHJvcHMpID0+IChcbiAgICA8RXhwYW5zaW9uQ29udGV4dC5Db25zdW1lcj5cbiAgICAgIHsoZXhwYW5kUm93KSA9PiByZW5kZXJXaXRoRXhwYW5zaW9uKHByb3BzLCBleHBhbmRSb3cpfVxuICAgIDwvRXhwYW5zaW9uQ29udGV4dC5Db25zdW1lcj5cbiAgKTtcbn07XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgRXhwYW5kUm93UHJvcHMsIFNlbGVjdFJvd1Byb3BzIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IFJPV19TRUxFQ1RfRElTQUJMRUQgfSBmcm9tIFwiLi9jb25zdFwiO1xuaW1wb3J0IHdpdGhSb3dFeHBhbnNpb24gZnJvbSBcIi4vcm93LWV4cGFuZC9yb3ctY29uc3VtZXJcIjtcbmltcG9ydCB3aXRoUm93U2VsZWN0aW9uIGZyb20gXCIuL3Jvdy1zZWxlY3Rpb24vcm93LWNvbnN1bWVyXCI7XG5pbXBvcnQgUm93QWdncmVnYXRvciBmcm9tIFwiLi9yb3cvYWdncmVnYXRlLXJvd1wiO1xuaW1wb3J0IFJvd1NlY3Rpb24gZnJvbSBcIi4vcm93L3Jvdy1zZWN0aW9uXCI7XG5pbXBvcnQgeyBSb3dQcm9wcyB9IGZyb20gXCIuL3Jvdy9zaG91bGQtdXBkYXRlclwiO1xuaW1wb3J0IFNpbXBsZVJvdyBmcm9tIFwiLi9yb3cvc2ltcGxlLXJvd1wiO1xuaW1wb3J0IF8gZnJvbSBcIi4vdXRpbHNcIjtcblxuaW50ZXJmYWNlIEJvZHlQcm9wcyB7XG4gIGtleUZpZWxkOiBzdHJpbmc7XG4gIGRhdGE6IGFueVtdO1xuICBjb2x1bW5zOiBhbnlbXTtcbiAgc2VsZWN0Um93PzogU2VsZWN0Um93UHJvcHM8YW55PiB8IHVuZGVmaW5lZDtcbiAgY2VsbEVkaXQ6IGFueTtcbiAgdGFiSW5kZXhDZWxsPzogYm9vbGVhbjtcbiAgaXNFbXB0eT86IGJvb2xlYW47XG4gIG5vRGF0YUluZGljYXRpb24/OlxuICB8ICgoKSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQgfCBzdHJpbmcpXG4gIHwgUmVhY3QuUmVhY3RFbGVtZW50XG4gIHwgc3RyaW5nXG4gIHwgdW5kZWZpbmVkO1xuICB2aXNpYmxlQ29sdW1uU2l6ZT86IG51bWJlcjtcbiAgcm93U3R5bGU/OlxuICB8IFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgfCAoKHJvdzogYW55LCBpbmRleDogbnVtYmVyKSA9PiBSZWFjdC5DU1NQcm9wZXJ0aWVzKTtcbiAgcm93Q2xhc3Nlcz86IHN0cmluZyB8ICgocm93OiBhbnksIGluZGV4OiBudW1iZXIpID0+IHN0cmluZyk7XG4gIHJvd0V2ZW50cz86IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsO1xuICBleHBhbmRSb3c/OiBFeHBhbmRSb3dQcm9wczxhbnksIGFueT4gfCB1bmRlZmluZWQ7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn1cblxuY2xhc3MgQm9keSBleHRlbmRzIENvbXBvbmVudDxCb2R5UHJvcHM+IHtcbiAgRWRpdGluZ0NlbGw6IGFueTtcbiAgUm93Q29tcG9uZW50OiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IEJvZHlQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBjb25zdCB7IGtleUZpZWxkLCBjZWxsRWRpdCwgc2VsZWN0Um93LCBleHBhbmRSb3cgfSA9IHByb3BzO1xuXG4gICAgLy8gQ29uc3RydWN0IEVkaXRpbmcgQ2VsbCBDb21wb25lbnRcbiAgICBpZiAoY2VsbEVkaXQ/LmNyZWF0ZUNvbnRleHQpIHtcbiAgICAgIHRoaXMuRWRpdGluZ0NlbGwgPSBjZWxsRWRpdC5jcmVhdGVFZGl0aW5nQ2VsbChcbiAgICAgICAgXyxcbiAgICAgICAgY2VsbEVkaXQub3B0aW9ucy5vblN0YXJ0RWRpdFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBDb25zdHJ1Y3QgUm93IENvbXBvbmVudFxuICAgIGxldCBSb3dDb21wb25lbnQ6IGFueSA9IFNpbXBsZVJvdztcblxuICAgIGNvbnN0IHNlbGVjdFJvd0VuYWJsZWQgPSBzZWxlY3RSb3c/Lm1vZGUgIT09IFJPV19TRUxFQ1RfRElTQUJMRUQ7XG4gICAgY29uc3QgZXhwYW5kUm93RW5hYmxlZCA9ICEhZXhwYW5kUm93IS5yZW5kZXJlcjtcblxuICAgIGlmIChleHBhbmRSb3dFbmFibGVkKSB7XG4gICAgICBSb3dDb21wb25lbnQgPSB3aXRoUm93RXhwYW5zaW9uKFJvd0FnZ3JlZ2F0b3IpO1xuICAgIH1cblxuICAgIGlmIChzZWxlY3RSb3dFbmFibGVkKSB7XG4gICAgICBSb3dDb21wb25lbnQgPSB3aXRoUm93U2VsZWN0aW9uKFxuICAgICAgICBleHBhbmRSb3dFbmFibGVkID8gUm93Q29tcG9uZW50IDogUm93QWdncmVnYXRvclxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoY2VsbEVkaXQ/LmNyZWF0ZUNvbnRleHQpIHtcbiAgICAgIFJvd0NvbXBvbmVudCA9IGNlbGxFZGl0LndpdGhSb3dMZXZlbENlbGxFZGl0KFxuICAgICAgICBSb3dDb21wb25lbnQsXG4gICAgICAgIHNlbGVjdFJvd0VuYWJsZWQsXG4gICAgICAgIGtleUZpZWxkLFxuICAgICAgICBfXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuUm93Q29tcG9uZW50ID0gUm93Q29tcG9uZW50O1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbHVtbnMsXG4gICAgICBkYXRhLFxuICAgICAgdGFiSW5kZXhDZWxsLFxuICAgICAga2V5RmllbGQsXG4gICAgICBpc0VtcHR5LFxuICAgICAgbm9EYXRhSW5kaWNhdGlvbixcbiAgICAgIHZpc2libGVDb2x1bW5TaXplLFxuICAgICAgY2VsbEVkaXQsXG4gICAgICBzZWxlY3RSb3csXG4gICAgICByb3dTdHlsZSxcbiAgICAgIHJvd0NsYXNzZXMsXG4gICAgICByb3dFdmVudHMsXG4gICAgICBleHBhbmRSb3csXG4gICAgICBjbGFzc05hbWUsXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBsZXQgY29udGVudDogUmVhY3ROb2RlO1xuXG4gICAgaWYgKGlzRW1wdHkpIHtcbiAgICAgIGNvbnN0IGluZGljYXRpb24gPSBfLmlzRnVuY3Rpb24obm9EYXRhSW5kaWNhdGlvbilcbiAgICAgICAgPyBub0RhdGFJbmRpY2F0aW9uKClcbiAgICAgICAgOiBub0RhdGFJbmRpY2F0aW9uO1xuICAgICAgaWYgKCFpbmRpY2F0aW9uKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29udGVudCA9IDxSb3dTZWN0aW9uIGNvbnRlbnQ9e2luZGljYXRpb259IGNvbFNwYW49e3Zpc2libGVDb2x1bW5TaXplfSAvPjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2VsZWN0Um93RW5hYmxlZCA9IHNlbGVjdFJvdz8ubW9kZSAhPT0gUk9XX1NFTEVDVF9ESVNBQkxFRDtcbiAgICAgIGNvbnN0IGV4cGFuZFJvd0VuYWJsZWQgPSAhIWV4cGFuZFJvdyEucmVuZGVyZXI7XG5cbiAgICAgIGNvbnN0IGFkZGl0aW9uYWxSb3dQcm9wczogUm93UHJvcHMgPSB7fTtcblxuICAgICAgaWYgKGNlbGxFZGl0Py5jcmVhdGVDb250ZXh0KSB7XG4gICAgICAgIGFkZGl0aW9uYWxSb3dQcm9wcy5FZGl0aW5nQ2VsbENvbXBvbmVudCA9IHRoaXMuRWRpdGluZ0NlbGw7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWxlY3RSb3dFbmFibGVkIHx8IGV4cGFuZFJvd0VuYWJsZWQpIHtcbiAgICAgICAgYWRkaXRpb25hbFJvd1Byb3BzLmV4cGFuZFJvdyA9IGV4cGFuZFJvdztcbiAgICAgICAgYWRkaXRpb25hbFJvd1Byb3BzLnNlbGVjdFJvdyA9IHNlbGVjdFJvdztcbiAgICAgIH1cblxuICAgICAgY29udGVudCA9IGRhdGEubWFwKChyb3csIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChyb3cpIHtcbiAgICAgICAgICBjb25zdCBrZXkgPSBfLmdldChyb3csIGtleUZpZWxkKTtcbiAgICAgICAgICBjb25zdCBiYXNlUm93UHJvcHMgPSB7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICByb3csXG4gICAgICAgICAgICB0YWJJbmRleENlbGwsXG4gICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAga2V5RmllbGQsXG4gICAgICAgICAgICBjZWxsRWRpdCxcbiAgICAgICAgICAgIHZhbHVlOiBrZXksXG4gICAgICAgICAgICByb3dJbmRleDogaW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlQ29sdW1uU2l6ZSxcbiAgICAgICAgICAgIGF0dHJzOiByb3dFdmVudHMgfHwge30sXG4gICAgICAgICAgICAuLi5hZGRpdGlvbmFsUm93UHJvcHMsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGJhc2VSb3dQcm9wcy5zdHlsZSA9IF8uaXNGdW5jdGlvbihyb3dTdHlsZSlcbiAgICAgICAgICAgID8gKHJvd1N0eWxlKHJvdywgaW5kZXgpIGFzIGFueSlcbiAgICAgICAgICAgIDogKHJvd1N0eWxlIGFzIGFueSk7XG4gICAgICAgICAgYmFzZVJvd1Byb3BzLmNsYXNzTmFtZSA9IF8uaXNGdW5jdGlvbihyb3dDbGFzc2VzKVxuICAgICAgICAgICAgPyByb3dDbGFzc2VzKHJvdywgaW5kZXgpXG4gICAgICAgICAgICA6IHJvd0NsYXNzZXM7XG5cbiAgICAgICAgICByZXR1cm4gPHRoaXMuUm93Q29tcG9uZW50IHsuLi5iYXNlUm93UHJvcHN9IC8+O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gPHRib2R5IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT57Y29udGVudH08L3Rib2R5PjtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCb2R5O1xuIiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7XG4gICAgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHtcbiAgICAgIHZhciB0ID0gYXJndW1lbnRzW2VdO1xuICAgICAgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTtcbiAgICB9XG4gICAgcmV0dXJuIG47XG4gIH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG59XG5leHBvcnQgeyBfZXh0ZW5kcyBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkge1xuICBpZiAobnVsbCA9PSByKSByZXR1cm4ge307XG4gIHZhciB0ID0ge307XG4gIGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHtcbiAgICBpZiAoLTEgIT09IGUuaW5kZXhPZihuKSkgY29udGludWU7XG4gICAgdFtuXSA9IHJbbl07XG4gIH1cbiAgcmV0dXJuIHQ7XG59XG5leHBvcnQgeyBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHtcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkge1xuICAgIHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7XG4gIH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTtcbn1cbmV4cG9ydCB7IF9zZXRQcm90b3R5cGVPZiBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5mdW5jdGlvbiBfaW5oZXJpdHNMb29zZSh0LCBvKSB7XG4gIHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShvLnByb3RvdHlwZSksIHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gdCwgc2V0UHJvdG90eXBlT2YodCwgbyk7XG59XG5leHBvcnQgeyBfaW5oZXJpdHNMb29zZSBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gcmVwbGFjZUNsYXNzTmFtZShvcmlnQ2xhc3MsIGNsYXNzVG9SZW1vdmUpIHtcbiAgcmV0dXJuIG9yaWdDbGFzcy5yZXBsYWNlKG5ldyBSZWdFeHAoXCIoXnxcXFxccylcIiArIGNsYXNzVG9SZW1vdmUgKyBcIig/OlxcXFxzfCQpXCIsICdnJyksICckMScpLnJlcGxhY2UoL1xccysvZywgJyAnKS5yZXBsYWNlKC9eXFxzKnxcXHMqJC9nLCAnJyk7XG59XG4vKipcbiAqIFJlbW92ZXMgYSBDU1MgY2xhc3MgZnJvbSBhIGdpdmVuIGVsZW1lbnQuXG4gKiBcbiAqIEBwYXJhbSBlbGVtZW50IHRoZSBlbGVtZW50XG4gKiBAcGFyYW0gY2xhc3NOYW1lIHRoZSBDU1MgY2xhc3MgbmFtZVxuICovXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVtb3ZlQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gIGlmIChlbGVtZW50LmNsYXNzTGlzdCkge1xuICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50LmNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBlbGVtZW50LmNsYXNzTmFtZSA9IHJlcGxhY2VDbGFzc05hbWUoZWxlbWVudC5jbGFzc05hbWUsIGNsYXNzTmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgcmVwbGFjZUNsYXNzTmFtZShlbGVtZW50LmNsYXNzTmFtZSAmJiBlbGVtZW50LmNsYXNzTmFtZS5iYXNlVmFsIHx8ICcnLCBjbGFzc05hbWUpKTtcbiAgfVxufSIsImV4cG9ydCBkZWZhdWx0IHtcbiAgZGlzYWJsZWQ6IGZhbHNlXG59OyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgZGVmYXVsdCBSZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpOyIsImV4cG9ydCB2YXIgZm9yY2VSZWZsb3cgPSBmdW5jdGlvbiBmb3JjZVJlZmxvdyhub2RlKSB7XG4gIHJldHVybiBub2RlLnNjcm9sbFRvcDtcbn07IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgY29uZmlnIGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IHRpbWVvdXRzU2hhcGUgfSBmcm9tICcuL3V0aWxzL1Byb3BUeXBlcyc7XG5pbXBvcnQgVHJhbnNpdGlvbkdyb3VwQ29udGV4dCBmcm9tICcuL1RyYW5zaXRpb25Hcm91cENvbnRleHQnO1xuaW1wb3J0IHsgZm9yY2VSZWZsb3cgfSBmcm9tICcuL3V0aWxzL3JlZmxvdyc7XG5leHBvcnQgdmFyIFVOTU9VTlRFRCA9ICd1bm1vdW50ZWQnO1xuZXhwb3J0IHZhciBFWElURUQgPSAnZXhpdGVkJztcbmV4cG9ydCB2YXIgRU5URVJJTkcgPSAnZW50ZXJpbmcnO1xuZXhwb3J0IHZhciBFTlRFUkVEID0gJ2VudGVyZWQnO1xuZXhwb3J0IHZhciBFWElUSU5HID0gJ2V4aXRpbmcnO1xuLyoqXG4gKiBUaGUgVHJhbnNpdGlvbiBjb21wb25lbnQgbGV0cyB5b3UgZGVzY3JpYmUgYSB0cmFuc2l0aW9uIGZyb20gb25lIGNvbXBvbmVudFxuICogc3RhdGUgdG8gYW5vdGhlciBfb3ZlciB0aW1lXyB3aXRoIGEgc2ltcGxlIGRlY2xhcmF0aXZlIEFQSS4gTW9zdCBjb21tb25seVxuICogaXQncyB1c2VkIHRvIGFuaW1hdGUgdGhlIG1vdW50aW5nIGFuZCB1bm1vdW50aW5nIG9mIGEgY29tcG9uZW50LCBidXQgY2FuIGFsc29cbiAqIGJlIHVzZWQgdG8gZGVzY3JpYmUgaW4tcGxhY2UgdHJhbnNpdGlvbiBzdGF0ZXMgYXMgd2VsbC5cbiAqXG4gKiAtLS1cbiAqXG4gKiAqKk5vdGUqKjogYFRyYW5zaXRpb25gIGlzIGEgcGxhdGZvcm0tYWdub3N0aWMgYmFzZSBjb21wb25lbnQuIElmIHlvdSdyZSB1c2luZ1xuICogdHJhbnNpdGlvbnMgaW4gQ1NTLCB5b3UnbGwgcHJvYmFibHkgd2FudCB0byB1c2VcbiAqIFtgQ1NTVHJhbnNpdGlvbmBdKGh0dHBzOi8vcmVhY3Rjb21tdW5pdHkub3JnL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvY3NzLXRyYW5zaXRpb24pXG4gKiBpbnN0ZWFkLiBJdCBpbmhlcml0cyBhbGwgdGhlIGZlYXR1cmVzIG9mIGBUcmFuc2l0aW9uYCwgYnV0IGNvbnRhaW5zXG4gKiBhZGRpdGlvbmFsIGZlYXR1cmVzIG5lY2Vzc2FyeSB0byBwbGF5IG5pY2Ugd2l0aCBDU1MgdHJhbnNpdGlvbnMgKGhlbmNlIHRoZVxuICogbmFtZSBvZiB0aGUgY29tcG9uZW50KS5cbiAqXG4gKiAtLS1cbiAqXG4gKiBCeSBkZWZhdWx0IHRoZSBgVHJhbnNpdGlvbmAgY29tcG9uZW50IGRvZXMgbm90IGFsdGVyIHRoZSBiZWhhdmlvciBvZiB0aGVcbiAqIGNvbXBvbmVudCBpdCByZW5kZXJzLCBpdCBvbmx5IHRyYWNrcyBcImVudGVyXCIgYW5kIFwiZXhpdFwiIHN0YXRlcyBmb3IgdGhlXG4gKiBjb21wb25lbnRzLiBJdCdzIHVwIHRvIHlvdSB0byBnaXZlIG1lYW5pbmcgYW5kIGVmZmVjdCB0byB0aG9zZSBzdGF0ZXMuIEZvclxuICogZXhhbXBsZSB3ZSBjYW4gYWRkIHN0eWxlcyB0byBhIGNvbXBvbmVudCB3aGVuIGl0IGVudGVycyBvciBleGl0czpcbiAqXG4gKiBgYGBqc3hcbiAqIGltcG9ydCB7IFRyYW5zaXRpb24gfSBmcm9tICdyZWFjdC10cmFuc2l0aW9uLWdyb3VwJztcbiAqXG4gKiBjb25zdCBkdXJhdGlvbiA9IDMwMDtcbiAqXG4gKiBjb25zdCBkZWZhdWx0U3R5bGUgPSB7XG4gKiAgIHRyYW5zaXRpb246IGBvcGFjaXR5ICR7ZHVyYXRpb259bXMgZWFzZS1pbi1vdXRgLFxuICogICBvcGFjaXR5OiAwLFxuICogfVxuICpcbiAqIGNvbnN0IHRyYW5zaXRpb25TdHlsZXMgPSB7XG4gKiAgIGVudGVyaW5nOiB7IG9wYWNpdHk6IDEgfSxcbiAqICAgZW50ZXJlZDogIHsgb3BhY2l0eTogMSB9LFxuICogICBleGl0aW5nOiAgeyBvcGFjaXR5OiAwIH0sXG4gKiAgIGV4aXRlZDogIHsgb3BhY2l0eTogMCB9LFxuICogfTtcbiAqXG4gKiBjb25zdCBGYWRlID0gKHsgaW46IGluUHJvcCB9KSA9PiAoXG4gKiAgIDxUcmFuc2l0aW9uIGluPXtpblByb3B9IHRpbWVvdXQ9e2R1cmF0aW9ufT5cbiAqICAgICB7c3RhdGUgPT4gKFxuICogICAgICAgPGRpdiBzdHlsZT17e1xuICogICAgICAgICAuLi5kZWZhdWx0U3R5bGUsXG4gKiAgICAgICAgIC4uLnRyYW5zaXRpb25TdHlsZXNbc3RhdGVdXG4gKiAgICAgICB9fT5cbiAqICAgICAgICAgSSdtIGEgZmFkZSBUcmFuc2l0aW9uIVxuICogICAgICAgPC9kaXY+XG4gKiAgICAgKX1cbiAqICAgPC9UcmFuc2l0aW9uPlxuICogKTtcbiAqIGBgYFxuICpcbiAqIFRoZXJlIGFyZSA0IG1haW4gc3RhdGVzIGEgVHJhbnNpdGlvbiBjYW4gYmUgaW46XG4gKiAgLSBgJ2VudGVyaW5nJ2BcbiAqICAtIGAnZW50ZXJlZCdgXG4gKiAgLSBgJ2V4aXRpbmcnYFxuICogIC0gYCdleGl0ZWQnYFxuICpcbiAqIFRyYW5zaXRpb24gc3RhdGUgaXMgdG9nZ2xlZCB2aWEgdGhlIGBpbmAgcHJvcC4gV2hlbiBgdHJ1ZWAgdGhlIGNvbXBvbmVudFxuICogYmVnaW5zIHRoZSBcIkVudGVyXCIgc3RhZ2UuIER1cmluZyB0aGlzIHN0YWdlLCB0aGUgY29tcG9uZW50IHdpbGwgc2hpZnQgZnJvbVxuICogaXRzIGN1cnJlbnQgdHJhbnNpdGlvbiBzdGF0ZSwgdG8gYCdlbnRlcmluZydgIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlXG4gKiB0cmFuc2l0aW9uIGFuZCB0aGVuIHRvIHRoZSBgJ2VudGVyZWQnYCBzdGFnZSBvbmNlIGl0J3MgY29tcGxldGUuIExldCdzIHRha2VcbiAqIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSAod2UnbGwgdXNlIHRoZVxuICogW3VzZVN0YXRlXShodHRwczovL3JlYWN0anMub3JnL2RvY3MvaG9va3MtcmVmZXJlbmNlLmh0bWwjdXNlc3RhdGUpIGhvb2spOlxuICpcbiAqIGBgYGpzeFxuICogZnVuY3Rpb24gQXBwKCkge1xuICogICBjb25zdCBbaW5Qcm9wLCBzZXRJblByb3BdID0gdXNlU3RhdGUoZmFsc2UpO1xuICogICByZXR1cm4gKFxuICogICAgIDxkaXY+XG4gKiAgICAgICA8VHJhbnNpdGlvbiBpbj17aW5Qcm9wfSB0aW1lb3V0PXs1MDB9PlxuICogICAgICAgICB7c3RhdGUgPT4gKFxuICogICAgICAgICAgIC8vIC4uLlxuICogICAgICAgICApfVxuICogICAgICAgPC9UcmFuc2l0aW9uPlxuICogICAgICAgPGJ1dHRvbiBvbkNsaWNrPXsoKSA9PiBzZXRJblByb3AodHJ1ZSl9PlxuICogICAgICAgICBDbGljayB0byBFbnRlclxuICogICAgICAgPC9idXR0b24+XG4gKiAgICAgPC9kaXY+XG4gKiAgICk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBXaGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZCB0aGUgY29tcG9uZW50IHdpbGwgc2hpZnQgdG8gdGhlIGAnZW50ZXJpbmcnYCBzdGF0ZVxuICogYW5kIHN0YXkgdGhlcmUgZm9yIDUwMG1zICh0aGUgdmFsdWUgb2YgYHRpbWVvdXRgKSBiZWZvcmUgaXQgZmluYWxseSBzd2l0Y2hlc1xuICogdG8gYCdlbnRlcmVkJ2AuXG4gKlxuICogV2hlbiBgaW5gIGlzIGBmYWxzZWAgdGhlIHNhbWUgdGhpbmcgaGFwcGVucyBleGNlcHQgdGhlIHN0YXRlIG1vdmVzIGZyb21cbiAqIGAnZXhpdGluZydgIHRvIGAnZXhpdGVkJ2AuXG4gKi9cblxudmFyIFRyYW5zaXRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoVHJhbnNpdGlvbiwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gVHJhbnNpdGlvbihwcm9wcywgY29udGV4dCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSB8fCB0aGlzO1xuICAgIHZhciBwYXJlbnRHcm91cCA9IGNvbnRleHQ7IC8vIEluIHRoZSBjb250ZXh0IG9mIGEgVHJhbnNpdGlvbkdyb3VwIGFsbCBlbnRlcnMgYXJlIHJlYWxseSBhcHBlYXJzXG5cbiAgICB2YXIgYXBwZWFyID0gcGFyZW50R3JvdXAgJiYgIXBhcmVudEdyb3VwLmlzTW91bnRpbmcgPyBwcm9wcy5lbnRlciA6IHByb3BzLmFwcGVhcjtcbiAgICB2YXIgaW5pdGlhbFN0YXR1cztcbiAgICBfdGhpcy5hcHBlYXJTdGF0dXMgPSBudWxsO1xuXG4gICAgaWYgKHByb3BzLmluKSB7XG4gICAgICBpZiAoYXBwZWFyKSB7XG4gICAgICAgIGluaXRpYWxTdGF0dXMgPSBFWElURUQ7XG4gICAgICAgIF90aGlzLmFwcGVhclN0YXR1cyA9IEVOVEVSSU5HO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1cyA9IEVOVEVSRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9wcy51bm1vdW50T25FeGl0IHx8IHByb3BzLm1vdW50T25FbnRlcikge1xuICAgICAgICBpbml0aWFsU3RhdHVzID0gVU5NT1VOVEVEO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1cyA9IEVYSVRFRDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHN0YXR1czogaW5pdGlhbFN0YXR1c1xuICAgIH07XG4gICAgX3RoaXMubmV4dENhbGxiYWNrID0gbnVsbDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBUcmFuc2l0aW9uLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhfcmVmLCBwcmV2U3RhdGUpIHtcbiAgICB2YXIgbmV4dEluID0gX3JlZi5pbjtcblxuICAgIGlmIChuZXh0SW4gJiYgcHJldlN0YXRlLnN0YXR1cyA9PT0gVU5NT1VOVEVEKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IEVYSVRFRFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgLy8gICBsZXQgbmV4dFN0YXR1cyA9IG51bGxcbiAgLy8gICBpZiAocHJldlByb3BzICE9PSB0aGlzLnByb3BzKSB7XG4gIC8vICAgICBjb25zdCB7IHN0YXR1cyB9ID0gdGhpcy5zdGF0ZVxuICAvLyAgICAgaWYgKHRoaXMucHJvcHMuaW4pIHtcbiAgLy8gICAgICAgaWYgKHN0YXR1cyAhPT0gRU5URVJJTkcgJiYgc3RhdHVzICE9PSBFTlRFUkVEKSB7XG4gIC8vICAgICAgICAgbmV4dFN0YXR1cyA9IEVOVEVSSU5HXG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH0gZWxzZSB7XG4gIC8vICAgICAgIGlmIChzdGF0dXMgPT09IEVOVEVSSU5HIHx8IHN0YXR1cyA9PT0gRU5URVJFRCkge1xuICAvLyAgICAgICAgIG5leHRTdGF0dXMgPSBFWElUSU5HXG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH1cbiAgLy8gICB9XG4gIC8vICAgcmV0dXJuIHsgbmV4dFN0YXR1cyB9XG4gIC8vIH1cbiAgO1xuXG4gIHZhciBfcHJvdG8gPSBUcmFuc2l0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLnVwZGF0ZVN0YXR1cyh0cnVlLCB0aGlzLmFwcGVhclN0YXR1cyk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICB2YXIgbmV4dFN0YXR1cyA9IG51bGw7XG5cbiAgICBpZiAocHJldlByb3BzICE9PSB0aGlzLnByb3BzKSB7XG4gICAgICB2YXIgc3RhdHVzID0gdGhpcy5zdGF0ZS5zdGF0dXM7XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLmluKSB7XG4gICAgICAgIGlmIChzdGF0dXMgIT09IEVOVEVSSU5HICYmIHN0YXR1cyAhPT0gRU5URVJFRCkge1xuICAgICAgICAgIG5leHRTdGF0dXMgPSBFTlRFUklORztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gRU5URVJJTkcgfHwgc3RhdHVzID09PSBFTlRFUkVEKSB7XG4gICAgICAgICAgbmV4dFN0YXR1cyA9IEVYSVRJTkc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVN0YXR1cyhmYWxzZSwgbmV4dFN0YXR1cyk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5jYW5jZWxOZXh0Q2FsbGJhY2soKTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0VGltZW91dHMgPSBmdW5jdGlvbiBnZXRUaW1lb3V0cygpIHtcbiAgICB2YXIgdGltZW91dCA9IHRoaXMucHJvcHMudGltZW91dDtcbiAgICB2YXIgZXhpdCwgZW50ZXIsIGFwcGVhcjtcbiAgICBleGl0ID0gZW50ZXIgPSBhcHBlYXIgPSB0aW1lb3V0O1xuXG4gICAgaWYgKHRpbWVvdXQgIT0gbnVsbCAmJiB0eXBlb2YgdGltZW91dCAhPT0gJ251bWJlcicpIHtcbiAgICAgIGV4aXQgPSB0aW1lb3V0LmV4aXQ7XG4gICAgICBlbnRlciA9IHRpbWVvdXQuZW50ZXI7IC8vIFRPRE86IHJlbW92ZSBmYWxsYmFjayBmb3IgbmV4dCBtYWpvclxuXG4gICAgICBhcHBlYXIgPSB0aW1lb3V0LmFwcGVhciAhPT0gdW5kZWZpbmVkID8gdGltZW91dC5hcHBlYXIgOiBlbnRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZXhpdDogZXhpdCxcbiAgICAgIGVudGVyOiBlbnRlcixcbiAgICAgIGFwcGVhcjogYXBwZWFyXG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8udXBkYXRlU3RhdHVzID0gZnVuY3Rpb24gdXBkYXRlU3RhdHVzKG1vdW50aW5nLCBuZXh0U3RhdHVzKSB7XG4gICAgaWYgKG1vdW50aW5nID09PSB2b2lkIDApIHtcbiAgICAgIG1vdW50aW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKG5leHRTdGF0dXMgIT09IG51bGwpIHtcbiAgICAgIC8vIG5leHRTdGF0dXMgd2lsbCBhbHdheXMgYmUgRU5URVJJTkcgb3IgRVhJVElORy5cbiAgICAgIHRoaXMuY2FuY2VsTmV4dENhbGxiYWNrKCk7XG5cbiAgICAgIGlmIChuZXh0U3RhdHVzID09PSBFTlRFUklORykge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy51bm1vdW50T25FeGl0IHx8IHRoaXMucHJvcHMubW91bnRPbkVudGVyKSB7XG4gICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyB0aGlzLnByb3BzLm5vZGVSZWYuY3VycmVudCA6IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpOyAvLyBodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL3B1bGwvNzQ5XG4gICAgICAgICAgLy8gV2l0aCB1bm1vdW50T25FeGl0IG9yIG1vdW50T25FbnRlciwgdGhlIGVudGVyIGFuaW1hdGlvbiBzaG91bGQgaGFwcGVuIGF0IHRoZSB0cmFuc2l0aW9uIGJldHdlZW4gYGV4aXRlZGAgYW5kIGBlbnRlcmluZ2AuXG4gICAgICAgICAgLy8gVG8gbWFrZSB0aGUgYW5pbWF0aW9uIGhhcHBlbiwgIHdlIGhhdmUgdG8gc2VwYXJhdGUgZWFjaCByZW5kZXJpbmcgYW5kIGF2b2lkIGJlaW5nIHByb2Nlc3NlZCBhcyBiYXRjaGVkLlxuXG4gICAgICAgICAgaWYgKG5vZGUpIGZvcmNlUmVmbG93KG5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wZXJmb3JtRW50ZXIobW91bnRpbmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wZXJmb3JtRXhpdCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy51bm1vdW50T25FeGl0ICYmIHRoaXMuc3RhdGUuc3RhdHVzID09PSBFWElURUQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXM6IFVOTU9VTlRFRFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5wZXJmb3JtRW50ZXIgPSBmdW5jdGlvbiBwZXJmb3JtRW50ZXIobW91bnRpbmcpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHZhciBlbnRlciA9IHRoaXMucHJvcHMuZW50ZXI7XG4gICAgdmFyIGFwcGVhcmluZyA9IHRoaXMuY29udGV4dCA/IHRoaXMuY29udGV4dC5pc01vdW50aW5nIDogbW91bnRpbmc7XG5cbiAgICB2YXIgX3JlZjIgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyBbYXBwZWFyaW5nXSA6IFtSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKSwgYXBwZWFyaW5nXSxcbiAgICAgICAgbWF5YmVOb2RlID0gX3JlZjJbMF0sXG4gICAgICAgIG1heWJlQXBwZWFyaW5nID0gX3JlZjJbMV07XG5cbiAgICB2YXIgdGltZW91dHMgPSB0aGlzLmdldFRpbWVvdXRzKCk7XG4gICAgdmFyIGVudGVyVGltZW91dCA9IGFwcGVhcmluZyA/IHRpbWVvdXRzLmFwcGVhciA6IHRpbWVvdXRzLmVudGVyOyAvLyBubyBlbnRlciBhbmltYXRpb24gc2tpcCByaWdodCB0byBFTlRFUkVEXG4gICAgLy8gaWYgd2UgYXJlIG1vdW50aW5nIGFuZCBydW5uaW5nIHRoaXMgaXQgbWVhbnMgYXBwZWFyIF9tdXN0XyBiZSBzZXRcblxuICAgIGlmICghbW91bnRpbmcgJiYgIWVudGVyIHx8IGNvbmZpZy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXM6IEVOVEVSRURcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMyLnByb3BzLm9uRW50ZXJlZChtYXliZU5vZGUpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wcm9wcy5vbkVudGVyKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuICAgIHRoaXMuc2FmZVNldFN0YXRlKHtcbiAgICAgIHN0YXR1czogRU5URVJJTkdcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczIucHJvcHMub25FbnRlcmluZyhtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcblxuICAgICAgX3RoaXMyLm9uVHJhbnNpdGlvbkVuZChlbnRlclRpbWVvdXQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMyLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgICAgc3RhdHVzOiBFTlRFUkVEXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczIucHJvcHMub25FbnRlcmVkKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5wZXJmb3JtRXhpdCA9IGZ1bmN0aW9uIHBlcmZvcm1FeGl0KCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIGV4aXQgPSB0aGlzLnByb3BzLmV4aXQ7XG4gICAgdmFyIHRpbWVvdXRzID0gdGhpcy5nZXRUaW1lb3V0cygpO1xuICAgIHZhciBtYXliZU5vZGUgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyB1bmRlZmluZWQgOiBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTsgLy8gbm8gZXhpdCBhbmltYXRpb24gc2tpcCByaWdodCB0byBFWElURURcblxuICAgIGlmICghZXhpdCB8fCBjb25maWcuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2FmZVNldFN0YXRlKHtcbiAgICAgICAgc3RhdHVzOiBFWElURURcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMzLnByb3BzLm9uRXhpdGVkKG1heWJlTm9kZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnByb3BzLm9uRXhpdChtYXliZU5vZGUpO1xuICAgIHRoaXMuc2FmZVNldFN0YXRlKHtcbiAgICAgIHN0YXR1czogRVhJVElOR1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5wcm9wcy5vbkV4aXRpbmcobWF5YmVOb2RlKTtcblxuICAgICAgX3RoaXMzLm9uVHJhbnNpdGlvbkVuZCh0aW1lb3V0cy5leGl0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMy5zYWZlU2V0U3RhdGUoe1xuICAgICAgICAgIHN0YXR1czogRVhJVEVEXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczMucHJvcHMub25FeGl0ZWQobWF5YmVOb2RlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY2FuY2VsTmV4dENhbGxiYWNrID0gZnVuY3Rpb24gY2FuY2VsTmV4dENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLm5leHRDYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5uZXh0Q2FsbGJhY2suY2FuY2VsKCk7XG4gICAgICB0aGlzLm5leHRDYWxsYmFjayA9IG51bGw7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5zYWZlU2V0U3RhdGUgPSBmdW5jdGlvbiBzYWZlU2V0U3RhdGUobmV4dFN0YXRlLCBjYWxsYmFjaykge1xuICAgIC8vIFRoaXMgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSwgYnV0IHRoZXJlIGFyZSB3ZWlyZCByYWNlIGNvbmRpdGlvbnMgd2l0aFxuICAgIC8vIHNldFN0YXRlIGNhbGxiYWNrcyBhbmQgdW5tb3VudGluZyBpbiB0ZXN0aW5nLCBzbyBhbHdheXMgbWFrZSBzdXJlIHRoYXRcbiAgICAvLyB3ZSBjYW4gY2FuY2VsIGFueSBwZW5kaW5nIHNldFN0YXRlIGNhbGxiYWNrcyBhZnRlciB3ZSB1bm1vdW50LlxuICAgIGNhbGxiYWNrID0gdGhpcy5zZXROZXh0Q2FsbGJhY2soY2FsbGJhY2spO1xuICAgIHRoaXMuc2V0U3RhdGUobmV4dFN0YXRlLCBjYWxsYmFjayk7XG4gIH07XG5cbiAgX3Byb3RvLnNldE5leHRDYWxsYmFjayA9IGZ1bmN0aW9uIHNldE5leHRDYWxsYmFjayhjYWxsYmFjaykge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgdmFyIGFjdGl2ZSA9IHRydWU7XG5cbiAgICB0aGlzLm5leHRDYWxsYmFjayA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICBhY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgX3RoaXM0Lm5leHRDYWxsYmFjayA9IG51bGw7XG4gICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5uZXh0Q2FsbGJhY2suY2FuY2VsID0gZnVuY3Rpb24gKCkge1xuICAgICAgYWN0aXZlID0gZmFsc2U7XG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLm5leHRDYWxsYmFjaztcbiAgfTtcblxuICBfcHJvdG8ub25UcmFuc2l0aW9uRW5kID0gZnVuY3Rpb24gb25UcmFuc2l0aW9uRW5kKHRpbWVvdXQsIGhhbmRsZXIpIHtcbiAgICB0aGlzLnNldE5leHRDYWxsYmFjayhoYW5kbGVyKTtcbiAgICB2YXIgbm9kZSA9IHRoaXMucHJvcHMubm9kZVJlZiA/IHRoaXMucHJvcHMubm9kZVJlZi5jdXJyZW50IDogUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7XG4gICAgdmFyIGRvZXNOb3RIYXZlVGltZW91dE9yTGlzdGVuZXIgPSB0aW1lb3V0ID09IG51bGwgJiYgIXRoaXMucHJvcHMuYWRkRW5kTGlzdGVuZXI7XG5cbiAgICBpZiAoIW5vZGUgfHwgZG9lc05vdEhhdmVUaW1lb3V0T3JMaXN0ZW5lcikge1xuICAgICAgc2V0VGltZW91dCh0aGlzLm5leHRDYWxsYmFjaywgMCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMuYWRkRW5kTGlzdGVuZXIpIHtcbiAgICAgIHZhciBfcmVmMyA9IHRoaXMucHJvcHMubm9kZVJlZiA/IFt0aGlzLm5leHRDYWxsYmFja10gOiBbbm9kZSwgdGhpcy5uZXh0Q2FsbGJhY2tdLFxuICAgICAgICAgIG1heWJlTm9kZSA9IF9yZWYzWzBdLFxuICAgICAgICAgIG1heWJlTmV4dENhbGxiYWNrID0gX3JlZjNbMV07XG5cbiAgICAgIHRoaXMucHJvcHMuYWRkRW5kTGlzdGVuZXIobWF5YmVOb2RlLCBtYXliZU5leHRDYWxsYmFjayk7XG4gICAgfVxuXG4gICAgaWYgKHRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgc2V0VGltZW91dCh0aGlzLm5leHRDYWxsYmFjaywgdGltZW91dCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIHN0YXR1cyA9IHRoaXMuc3RhdGUuc3RhdHVzO1xuXG4gICAgaWYgKHN0YXR1cyA9PT0gVU5NT1VOVEVEKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICBfaW4gPSBfdGhpcyRwcm9wcy5pbixcbiAgICAgICAgX21vdW50T25FbnRlciA9IF90aGlzJHByb3BzLm1vdW50T25FbnRlcixcbiAgICAgICAgX3VubW91bnRPbkV4aXQgPSBfdGhpcyRwcm9wcy51bm1vdW50T25FeGl0LFxuICAgICAgICBfYXBwZWFyID0gX3RoaXMkcHJvcHMuYXBwZWFyLFxuICAgICAgICBfZW50ZXIgPSBfdGhpcyRwcm9wcy5lbnRlcixcbiAgICAgICAgX2V4aXQgPSBfdGhpcyRwcm9wcy5leGl0LFxuICAgICAgICBfdGltZW91dCA9IF90aGlzJHByb3BzLnRpbWVvdXQsXG4gICAgICAgIF9hZGRFbmRMaXN0ZW5lciA9IF90aGlzJHByb3BzLmFkZEVuZExpc3RlbmVyLFxuICAgICAgICBfb25FbnRlciA9IF90aGlzJHByb3BzLm9uRW50ZXIsXG4gICAgICAgIF9vbkVudGVyaW5nID0gX3RoaXMkcHJvcHMub25FbnRlcmluZyxcbiAgICAgICAgX29uRW50ZXJlZCA9IF90aGlzJHByb3BzLm9uRW50ZXJlZCxcbiAgICAgICAgX29uRXhpdCA9IF90aGlzJHByb3BzLm9uRXhpdCxcbiAgICAgICAgX29uRXhpdGluZyA9IF90aGlzJHByb3BzLm9uRXhpdGluZyxcbiAgICAgICAgX29uRXhpdGVkID0gX3RoaXMkcHJvcHMub25FeGl0ZWQsXG4gICAgICAgIF9ub2RlUmVmID0gX3RoaXMkcHJvcHMubm9kZVJlZixcbiAgICAgICAgY2hpbGRQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF90aGlzJHByb3BzLCBbXCJjaGlsZHJlblwiLCBcImluXCIsIFwibW91bnRPbkVudGVyXCIsIFwidW5tb3VudE9uRXhpdFwiLCBcImFwcGVhclwiLCBcImVudGVyXCIsIFwiZXhpdFwiLCBcInRpbWVvdXRcIiwgXCJhZGRFbmRMaXN0ZW5lclwiLCBcIm9uRW50ZXJcIiwgXCJvbkVudGVyaW5nXCIsIFwib25FbnRlcmVkXCIsIFwib25FeGl0XCIsIFwib25FeGl0aW5nXCIsIFwib25FeGl0ZWRcIiwgXCJub2RlUmVmXCJdKTtcblxuICAgIHJldHVybiAoXG4gICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAvLyBhbGxvd3MgZm9yIG5lc3RlZCBUcmFuc2l0aW9uc1xuICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiBudWxsXG4gICAgICB9LCB0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicgPyBjaGlsZHJlbihzdGF0dXMsIGNoaWxkUHJvcHMpIDogUmVhY3QuY2xvbmVFbGVtZW50KFJlYWN0LkNoaWxkcmVuLm9ubHkoY2hpbGRyZW4pLCBjaGlsZFByb3BzKSlcbiAgICApO1xuICB9O1xuXG4gIHJldHVybiBUcmFuc2l0aW9uO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5UcmFuc2l0aW9uLmNvbnRleHRUeXBlID0gVHJhbnNpdGlvbkdyb3VwQ29udGV4dDtcblRyYW5zaXRpb24ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICAvKipcbiAgICogQSBSZWFjdCByZWZlcmVuY2UgdG8gRE9NIGVsZW1lbnQgdGhhdCBuZWVkIHRvIHRyYW5zaXRpb246XG4gICAqIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MTEyNzEzMC80NjcxOTMyXG4gICAqXG4gICAqICAgLSBXaGVuIGBub2RlUmVmYCBwcm9wIGlzIHVzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkIHRvIGNhbGxiYWNrIGZ1bmN0aW9uc1xuICAgKiAgICAgIChlLmcuIGBvbkVudGVyYCkgYmVjYXVzZSB1c2VyIGFscmVhZHkgaGFzIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIG5vZGUuXG4gICAqICAgLSBXaGVuIGNoYW5naW5nIGBrZXlgIHByb3Agb2YgYFRyYW5zaXRpb25gIGluIGEgYFRyYW5zaXRpb25Hcm91cGAgYSBuZXdcbiAgICogICAgIGBub2RlUmVmYCBuZWVkIHRvIGJlIHByb3ZpZGVkIHRvIGBUcmFuc2l0aW9uYCB3aXRoIGNoYW5nZWQgYGtleWAgcHJvcFxuICAgKiAgICAgKHNlZVxuICAgKiAgICAgW3Rlc3QvQ1NTVHJhbnNpdGlvbi10ZXN0LmpzXShodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2Jsb2IvMTM0MzVmODk3YjNhYjcxZjZlMTlkNzI0ZjE0NTU5NmY1OTEwNTgxYy90ZXN0L0NTU1RyYW5zaXRpb24tdGVzdC5qcyNMMzYyLUw0MzcpKS5cbiAgICovXG4gIG5vZGVSZWY6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY3VycmVudDogdHlwZW9mIEVsZW1lbnQgPT09ICd1bmRlZmluZWQnID8gUHJvcFR5cGVzLmFueSA6IGZ1bmN0aW9uIChwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICB2YXIgdmFsdWUgPSBwcm9wVmFsdWVba2V5XTtcbiAgICAgIHJldHVybiBQcm9wVHlwZXMuaW5zdGFuY2VPZih2YWx1ZSAmJiAnb3duZXJEb2N1bWVudCcgaW4gdmFsdWUgPyB2YWx1ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LkVsZW1lbnQgOiBFbGVtZW50KShwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KTtcbiAgICB9XG4gIH0pLFxuXG4gIC8qKlxuICAgKiBBIGBmdW5jdGlvbmAgY2hpbGQgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiBhIFJlYWN0IGVsZW1lbnQuIFRoaXMgZnVuY3Rpb24gaXNcbiAgICogY2FsbGVkIHdpdGggdGhlIGN1cnJlbnQgdHJhbnNpdGlvbiBzdGF0dXMgKGAnZW50ZXJpbmcnYCwgYCdlbnRlcmVkJ2AsXG4gICAqIGAnZXhpdGluZydgLCBgJ2V4aXRlZCdgKSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gYXBwbHkgY29udGV4dFxuICAgKiBzcGVjaWZpYyBwcm9wcyB0byBhIGNvbXBvbmVudC5cbiAgICpcbiAgICogYGBganN4XG4gICAqIDxUcmFuc2l0aW9uIGluPXt0aGlzLnN0YXRlLmlufSB0aW1lb3V0PXsxNTB9PlxuICAgKiAgIHtzdGF0ZSA9PiAoXG4gICAqICAgICA8TXlDb21wb25lbnQgY2xhc3NOYW1lPXtgZmFkZSBmYWRlLSR7c3RhdGV9YH0gLz5cbiAgICogICApfVxuICAgKiA8L1RyYW5zaXRpb24+XG4gICAqIGBgYFxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgKiBTaG93IHRoZSBjb21wb25lbnQ7IHRyaWdnZXJzIHRoZSBlbnRlciBvciBleGl0IHN0YXRlc1xuICAgKi9cbiAgaW46IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBjaGlsZCBjb21wb25lbnQgaXMgbW91bnRlZCBpbW1lZGlhdGVseSBhbG9uZyB3aXRoXG4gICAqIHRoZSBwYXJlbnQgYFRyYW5zaXRpb25gIGNvbXBvbmVudC4gSWYgeW91IHdhbnQgdG8gXCJsYXp5IG1vdW50XCIgdGhlIGNvbXBvbmVudCBvbiB0aGVcbiAgICogZmlyc3QgYGluPXt0cnVlfWAgeW91IGNhbiBzZXQgYG1vdW50T25FbnRlcmAuIEFmdGVyIHRoZSBmaXJzdCBlbnRlciB0cmFuc2l0aW9uIHRoZSBjb21wb25lbnQgd2lsbCBzdGF5XG4gICAqIG1vdW50ZWQsIGV2ZW4gb24gXCJleGl0ZWRcIiwgdW5sZXNzIHlvdSBhbHNvIHNwZWNpZnkgYHVubW91bnRPbkV4aXRgLlxuICAgKi9cbiAgbW91bnRPbkVudGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQnkgZGVmYXVsdCB0aGUgY2hpbGQgY29tcG9uZW50IHN0YXlzIG1vdW50ZWQgYWZ0ZXIgaXQgcmVhY2hlcyB0aGUgYCdleGl0ZWQnYCBzdGF0ZS5cbiAgICogU2V0IGB1bm1vdW50T25FeGl0YCBpZiB5b3UnZCBwcmVmZXIgdG8gdW5tb3VudCB0aGUgY29tcG9uZW50IGFmdGVyIGl0IGZpbmlzaGVzIGV4aXRpbmcuXG4gICAqL1xuICB1bm1vdW50T25FeGl0OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQnkgZGVmYXVsdCB0aGUgY2hpbGQgY29tcG9uZW50IGRvZXMgbm90IHBlcmZvcm0gdGhlIGVudGVyIHRyYW5zaXRpb24gd2hlblxuICAgKiBpdCBmaXJzdCBtb3VudHMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlIG9mIGBpbmAuIElmIHlvdSB3YW50IHRoaXNcbiAgICogYmVoYXZpb3IsIHNldCBib3RoIGBhcHBlYXJgIGFuZCBgaW5gIHRvIGB0cnVlYC5cbiAgICpcbiAgICogPiAqKk5vdGUqKjogdGhlcmUgYXJlIG5vIHNwZWNpYWwgYXBwZWFyIHN0YXRlcyBsaWtlIGBhcHBlYXJpbmdgL2BhcHBlYXJlZGAsIHRoaXMgcHJvcFxuICAgKiA+IG9ubHkgYWRkcyBhbiBhZGRpdGlvbmFsIGVudGVyIHRyYW5zaXRpb24uIEhvd2V2ZXIsIGluIHRoZVxuICAgKiA+IGA8Q1NTVHJhbnNpdGlvbj5gIGNvbXBvbmVudCB0aGF0IGZpcnN0IGVudGVyIHRyYW5zaXRpb24gZG9lcyByZXN1bHQgaW5cbiAgICogPiBhZGRpdGlvbmFsIGAuYXBwZWFyLSpgIGNsYXNzZXMsIHRoYXQgd2F5IHlvdSBjYW4gY2hvb3NlIHRvIHN0eWxlIGl0XG4gICAqID4gZGlmZmVyZW50bHkuXG4gICAqL1xuICBhcHBlYXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSBlbnRlciB0cmFuc2l0aW9ucy5cbiAgICovXG4gIGVudGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogRW5hYmxlIG9yIGRpc2FibGUgZXhpdCB0cmFuc2l0aW9ucy5cbiAgICovXG4gIGV4aXQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgZHVyYXRpb24gb2YgdGhlIHRyYW5zaXRpb24sIGluIG1pbGxpc2Vjb25kcy5cbiAgICogUmVxdWlyZWQgdW5sZXNzIGBhZGRFbmRMaXN0ZW5lcmAgaXMgcHJvdmlkZWQuXG4gICAqXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSB0aW1lb3V0IGZvciBhbGwgdHJhbnNpdGlvbnM6XG4gICAqXG4gICAqIGBgYGpzeFxuICAgKiB0aW1lb3V0PXs1MDB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBvciBpbmRpdmlkdWFsbHk6XG4gICAqXG4gICAqIGBgYGpzeFxuICAgKiB0aW1lb3V0PXt7XG4gICAqICBhcHBlYXI6IDUwMCxcbiAgICogIGVudGVyOiAzMDAsXG4gICAqICBleGl0OiA1MDAsXG4gICAqIH19XG4gICAqIGBgYFxuICAgKlxuICAgKiAtIGBhcHBlYXJgIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZiBgZW50ZXJgXG4gICAqIC0gYGVudGVyYCBkZWZhdWx0cyB0byBgMGBcbiAgICogLSBgZXhpdGAgZGVmYXVsdHMgdG8gYDBgXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXIgfCB7IGVudGVyPzogbnVtYmVyLCBleGl0PzogbnVtYmVyLCBhcHBlYXI/OiBudW1iZXIgfX1cbiAgICovXG4gIHRpbWVvdXQ6IGZ1bmN0aW9uIHRpbWVvdXQocHJvcHMpIHtcbiAgICB2YXIgcHQgPSB0aW1lb3V0c1NoYXBlO1xuICAgIGlmICghcHJvcHMuYWRkRW5kTGlzdGVuZXIpIHB0ID0gcHQuaXNSZXF1aXJlZDtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBwdC5hcHBseSh2b2lkIDAsIFtwcm9wc10uY29uY2F0KGFyZ3MpKTtcbiAgfSxcblxuICAvKipcbiAgICogQWRkIGEgY3VzdG9tIHRyYW5zaXRpb24gZW5kIHRyaWdnZXIuIENhbGxlZCB3aXRoIHRoZSB0cmFuc2l0aW9uaW5nXG4gICAqIERPTSBub2RlIGFuZCBhIGBkb25lYCBjYWxsYmFjay4gQWxsb3dzIGZvciBtb3JlIGZpbmUgZ3JhaW5lZCB0cmFuc2l0aW9uIGVuZFxuICAgKiBsb2dpYy4gVGltZW91dHMgYXJlIHN0aWxsIHVzZWQgYXMgYSBmYWxsYmFjayBpZiBwcm92aWRlZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogYGBganN4XG4gICAqIGFkZEVuZExpc3RlbmVyPXsobm9kZSwgZG9uZSkgPT4ge1xuICAgKiAgIC8vIHVzZSB0aGUgY3NzIHRyYW5zaXRpb25lbmQgZXZlbnQgdG8gbWFyayB0aGUgZmluaXNoIG9mIGEgdHJhbnNpdGlvblxuICAgKiAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIGRvbmUsIGZhbHNlKTtcbiAgICogfX1cbiAgICogYGBgXG4gICAqL1xuICBhZGRFbmRMaXN0ZW5lcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGJlZm9yZSB0aGUgXCJlbnRlcmluZ1wiIHN0YXR1cyBpcyBhcHBsaWVkLiBBbiBleHRyYSBwYXJhbWV0ZXJcbiAgICogYGlzQXBwZWFyaW5nYCBpcyBzdXBwbGllZCB0byBpbmRpY2F0ZSBpZiB0aGUgZW50ZXIgc3RhZ2UgaXMgb2NjdXJyaW5nIG9uIHRoZSBpbml0aWFsIG1vdW50XG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbCkgLT4gdm9pZFxuICAgKi9cbiAgb25FbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGFmdGVyIHRoZSBcImVudGVyaW5nXCIgc3RhdHVzIGlzIGFwcGxpZWQuIEFuIGV4dHJhIHBhcmFtZXRlclxuICAgKiBgaXNBcHBlYXJpbmdgIGlzIHN1cHBsaWVkIHRvIGluZGljYXRlIGlmIHRoZSBlbnRlciBzdGFnZSBpcyBvY2N1cnJpbmcgb24gdGhlIGluaXRpYWwgbW91bnRcbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKVxuICAgKi9cbiAgb25FbnRlcmluZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGFmdGVyIHRoZSBcImVudGVyZWRcIiBzdGF0dXMgaXMgYXBwbGllZC4gQW4gZXh0cmEgcGFyYW1ldGVyXG4gICAqIGBpc0FwcGVhcmluZ2AgaXMgc3VwcGxpZWQgdG8gaW5kaWNhdGUgaWYgdGhlIGVudGVyIHN0YWdlIGlzIG9jY3VycmluZyBvbiB0aGUgaW5pdGlhbCBtb3VudFxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpIC0+IHZvaWRcbiAgICovXG4gIG9uRW50ZXJlZDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGJlZm9yZSB0aGUgXCJleGl0aW5nXCIgc3RhdHVzIGlzIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KSAtPiB2b2lkXG4gICAqL1xuICBvbkV4aXQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBhZnRlciB0aGUgXCJleGl0aW5nXCIgc3RhdHVzIGlzIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KSAtPiB2b2lkXG4gICAqL1xuICBvbkV4aXRpbmc6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBhZnRlciB0aGUgXCJleGl0ZWRcIiBzdGF0dXMgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZFxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCkgLT4gdm9pZFxuICAgKi9cbiAgb25FeGl0ZWQ6IFByb3BUeXBlcy5mdW5jXG59IDoge307IC8vIE5hbWUgdGhlIGZ1bmN0aW9uIHNvIGl0IGlzIGNsZWFyZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cblRyYW5zaXRpb24uZGVmYXVsdFByb3BzID0ge1xuICBpbjogZmFsc2UsXG4gIG1vdW50T25FbnRlcjogZmFsc2UsXG4gIHVubW91bnRPbkV4aXQ6IGZhbHNlLFxuICBhcHBlYXI6IGZhbHNlLFxuICBlbnRlcjogdHJ1ZSxcbiAgZXhpdDogdHJ1ZSxcbiAgb25FbnRlcjogbm9vcCxcbiAgb25FbnRlcmluZzogbm9vcCxcbiAgb25FbnRlcmVkOiBub29wLFxuICBvbkV4aXQ6IG5vb3AsXG4gIG9uRXhpdGluZzogbm9vcCxcbiAgb25FeGl0ZWQ6IG5vb3Bcbn07XG5UcmFuc2l0aW9uLlVOTU9VTlRFRCA9IFVOTU9VTlRFRDtcblRyYW5zaXRpb24uRVhJVEVEID0gRVhJVEVEO1xuVHJhbnNpdGlvbi5FTlRFUklORyA9IEVOVEVSSU5HO1xuVHJhbnNpdGlvbi5FTlRFUkVEID0gRU5URVJFRDtcblRyYW5zaXRpb24uRVhJVElORyA9IEVYSVRJTkc7XG5leHBvcnQgZGVmYXVsdCBUcmFuc2l0aW9uOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgYWRkT25lQ2xhc3MgZnJvbSAnZG9tLWhlbHBlcnMvYWRkQ2xhc3MnO1xuaW1wb3J0IHJlbW92ZU9uZUNsYXNzIGZyb20gJ2RvbS1oZWxwZXJzL3JlbW92ZUNsYXNzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVHJhbnNpdGlvbiBmcm9tICcuL1RyYW5zaXRpb24nO1xuaW1wb3J0IHsgY2xhc3NOYW1lc1NoYXBlIH0gZnJvbSAnLi91dGlscy9Qcm9wVHlwZXMnO1xuaW1wb3J0IHsgZm9yY2VSZWZsb3cgfSBmcm9tICcuL3V0aWxzL3JlZmxvdyc7XG5cbnZhciBfYWRkQ2xhc3MgPSBmdW5jdGlvbiBhZGRDbGFzcyhub2RlLCBjbGFzc2VzKSB7XG4gIHJldHVybiBub2RlICYmIGNsYXNzZXMgJiYgY2xhc3Nlcy5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gYWRkT25lQ2xhc3Mobm9kZSwgYyk7XG4gIH0pO1xufTtcblxudmFyIHJlbW92ZUNsYXNzID0gZnVuY3Rpb24gcmVtb3ZlQ2xhc3Mobm9kZSwgY2xhc3Nlcykge1xuICByZXR1cm4gbm9kZSAmJiBjbGFzc2VzICYmIGNsYXNzZXMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIHJlbW92ZU9uZUNsYXNzKG5vZGUsIGMpO1xuICB9KTtcbn07XG4vKipcbiAqIEEgdHJhbnNpdGlvbiBjb21wb25lbnQgaW5zcGlyZWQgYnkgdGhlIGV4Y2VsbGVudFxuICogW25nLWFuaW1hdGVdKGh0dHBzOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZ0FuaW1hdGUpIGxpYnJhcnksIHlvdSBzaG91bGRcbiAqIHVzZSBpdCBpZiB5b3UncmUgdXNpbmcgQ1NTIHRyYW5zaXRpb25zIG9yIGFuaW1hdGlvbnMuIEl0J3MgYnVpbHQgdXBvbiB0aGVcbiAqIFtgVHJhbnNpdGlvbmBdKGh0dHBzOi8vcmVhY3Rjb21tdW5pdHkub3JnL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvdHJhbnNpdGlvbilcbiAqIGNvbXBvbmVudCwgc28gaXQgaW5oZXJpdHMgYWxsIG9mIGl0cyBwcm9wcy5cbiAqXG4gKiBgQ1NTVHJhbnNpdGlvbmAgYXBwbGllcyBhIHBhaXIgb2YgY2xhc3MgbmFtZXMgZHVyaW5nIHRoZSBgYXBwZWFyYCwgYGVudGVyYCxcbiAqIGFuZCBgZXhpdGAgc3RhdGVzIG9mIHRoZSB0cmFuc2l0aW9uLiBUaGUgZmlyc3QgY2xhc3MgaXMgYXBwbGllZCBhbmQgdGhlbiBhXG4gKiBzZWNvbmQgYCotYWN0aXZlYCBjbGFzcyBpbiBvcmRlciB0byBhY3RpdmF0ZSB0aGUgQ1NTIHRyYW5zaXRpb24uIEFmdGVyIHRoZVxuICogdHJhbnNpdGlvbiwgbWF0Y2hpbmcgYCotZG9uZWAgY2xhc3MgbmFtZXMgYXJlIGFwcGxpZWQgdG8gcGVyc2lzdCB0aGVcbiAqIHRyYW5zaXRpb24gc3RhdGUuXG4gKlxuICogYGBganN4XG4gKiBmdW5jdGlvbiBBcHAoKSB7XG4gKiAgIGNvbnN0IFtpblByb3AsIHNldEluUHJvcF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gKiAgIHJldHVybiAoXG4gKiAgICAgPGRpdj5cbiAqICAgICAgIDxDU1NUcmFuc2l0aW9uIGluPXtpblByb3B9IHRpbWVvdXQ9ezIwMH0gY2xhc3NOYW1lcz1cIm15LW5vZGVcIj5cbiAqICAgICAgICAgPGRpdj5cbiAqICAgICAgICAgICB7XCJJJ2xsIHJlY2VpdmUgbXktbm9kZS0qIGNsYXNzZXNcIn1cbiAqICAgICAgICAgPC9kaXY+XG4gKiAgICAgICA8L0NTU1RyYW5zaXRpb24+XG4gKiAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXsoKSA9PiBzZXRJblByb3AodHJ1ZSl9PlxuICogICAgICAgICBDbGljayB0byBFbnRlclxuICogICAgICAgPC9idXR0b24+XG4gKiAgICAgPC9kaXY+XG4gKiAgICk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBXaGVuIHRoZSBgaW5gIHByb3AgaXMgc2V0IHRvIGB0cnVlYCwgdGhlIGNoaWxkIGNvbXBvbmVudCB3aWxsIGZpcnN0IHJlY2VpdmVcbiAqIHRoZSBjbGFzcyBgZXhhbXBsZS1lbnRlcmAsIHRoZW4gdGhlIGBleGFtcGxlLWVudGVyLWFjdGl2ZWAgd2lsbCBiZSBhZGRlZCBpblxuICogdGhlIG5leHQgdGljay4gYENTU1RyYW5zaXRpb25gIFtmb3JjZXMgYVxuICogcmVmbG93XShodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2Jsb2IvNTAwNzMwM2U3MjlhNzRiZTY2YTIxYzNlMjIwNWU0OTE2ODIxNTI0Yi9zcmMvQ1NTVHJhbnNpdGlvbi5qcyNMMjA4LUwyMTUpXG4gKiBiZXR3ZWVuIGJlZm9yZSBhZGRpbmcgdGhlIGBleGFtcGxlLWVudGVyLWFjdGl2ZWAuIFRoaXMgaXMgYW4gaW1wb3J0YW50IHRyaWNrXG4gKiBiZWNhdXNlIGl0IGFsbG93cyB1cyB0byB0cmFuc2l0aW9uIGJldHdlZW4gYGV4YW1wbGUtZW50ZXJgIGFuZFxuICogYGV4YW1wbGUtZW50ZXItYWN0aXZlYCBldmVuIHRob3VnaCB0aGV5IHdlcmUgYWRkZWQgaW1tZWRpYXRlbHkgb25lIGFmdGVyXG4gKiBhbm90aGVyLiBNb3N0IG5vdGFibHksIHRoaXMgaXMgd2hhdCBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgdXMgdG8gYW5pbWF0ZVxuICogX2FwcGVhcmFuY2VfLlxuICpcbiAqIGBgYGNzc1xuICogLm15LW5vZGUtZW50ZXIge1xuICogICBvcGFjaXR5OiAwO1xuICogfVxuICogLm15LW5vZGUtZW50ZXItYWN0aXZlIHtcbiAqICAgb3BhY2l0eTogMTtcbiAqICAgdHJhbnNpdGlvbjogb3BhY2l0eSAyMDBtcztcbiAqIH1cbiAqIC5teS1ub2RlLWV4aXQge1xuICogICBvcGFjaXR5OiAxO1xuICogfVxuICogLm15LW5vZGUtZXhpdC1hY3RpdmUge1xuICogICBvcGFjaXR5OiAwO1xuICogICB0cmFuc2l0aW9uOiBvcGFjaXR5IDIwMG1zO1xuICogfVxuICogYGBgXG4gKlxuICogYCotYWN0aXZlYCBjbGFzc2VzIHJlcHJlc2VudCB3aGljaCBzdHlsZXMgeW91IHdhbnQgdG8gYW5pbWF0ZSAqKnRvKiosIHNvIGl0J3NcbiAqIGltcG9ydGFudCB0byBhZGQgYHRyYW5zaXRpb25gIGRlY2xhcmF0aW9uIG9ubHkgdG8gdGhlbSwgb3RoZXJ3aXNlIHRyYW5zaXRpb25zXG4gKiBtaWdodCBub3QgYmVoYXZlIGFzIGludGVuZGVkISBUaGlzIG1pZ2h0IG5vdCBiZSBvYnZpb3VzIHdoZW4gdGhlIHRyYW5zaXRpb25zXG4gKiBhcmUgc3ltbWV0cmljYWwsIGkuZS4gd2hlbiBgKi1lbnRlci1hY3RpdmVgIGlzIHRoZSBzYW1lIGFzIGAqLWV4aXRgLCBsaWtlIGluXG4gKiB0aGUgZXhhbXBsZSBhYm92ZSAobWludXMgYHRyYW5zaXRpb25gKSwgYnV0IGl0IGJlY29tZXMgYXBwYXJlbnQgaW4gbW9yZVxuICogY29tcGxleCB0cmFuc2l0aW9ucy5cbiAqXG4gKiAqKk5vdGUqKjogSWYgeW91J3JlIHVzaW5nIHRoZVxuICogW2BhcHBlYXJgXShodHRwOi8vcmVhY3Rjb21tdW5pdHkub3JnL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvdHJhbnNpdGlvbiNUcmFuc2l0aW9uLXByb3AtYXBwZWFyKVxuICogcHJvcCwgbWFrZSBzdXJlIHRvIGRlZmluZSBzdHlsZXMgZm9yIGAuYXBwZWFyLSpgIGNsYXNzZXMgYXMgd2VsbC5cbiAqL1xuXG5cbnZhciBDU1NUcmFuc2l0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKENTU1RyYW5zaXRpb24sIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIENTU1RyYW5zaXRpb24oKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsLmFwcGx5KF9SZWFjdCRDb21wb25lbnQsIFt0aGlzXS5jb25jYXQoYXJncykpIHx8IHRoaXM7XG4gICAgX3RoaXMuYXBwbGllZENsYXNzZXMgPSB7XG4gICAgICBhcHBlYXI6IHt9LFxuICAgICAgZW50ZXI6IHt9LFxuICAgICAgZXhpdDoge31cbiAgICB9O1xuXG4gICAgX3RoaXMub25FbnRlciA9IGZ1bmN0aW9uIChtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSB7XG4gICAgICB2YXIgX3RoaXMkcmVzb2x2ZUFyZ3VtZW50ID0gX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyhtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSxcbiAgICAgICAgICBub2RlID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50WzBdLFxuICAgICAgICAgIGFwcGVhcmluZyA9IF90aGlzJHJlc29sdmVBcmd1bWVudFsxXTtcblxuICAgICAgX3RoaXMucmVtb3ZlQ2xhc3Nlcyhub2RlLCAnZXhpdCcpO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCBhcHBlYXJpbmcgPyAnYXBwZWFyJyA6ICdlbnRlcicsICdiYXNlJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkVudGVyKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRW50ZXIobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLm9uRW50ZXJpbmcgPSBmdW5jdGlvbiAobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZykge1xuICAgICAgdmFyIF90aGlzJHJlc29sdmVBcmd1bWVudDIgPSBfdGhpcy5yZXNvbHZlQXJndW1lbnRzKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpLFxuICAgICAgICAgIG5vZGUgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQyWzBdLFxuICAgICAgICAgIGFwcGVhcmluZyA9IF90aGlzJHJlc29sdmVBcmd1bWVudDJbMV07XG5cbiAgICAgIHZhciB0eXBlID0gYXBwZWFyaW5nID8gJ2FwcGVhcicgOiAnZW50ZXInO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCB0eXBlLCAnYWN0aXZlJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkVudGVyaW5nKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRW50ZXJpbmcobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLm9uRW50ZXJlZCA9IGZ1bmN0aW9uIChtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSB7XG4gICAgICB2YXIgX3RoaXMkcmVzb2x2ZUFyZ3VtZW50MyA9IF90aGlzLnJlc29sdmVBcmd1bWVudHMobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyksXG4gICAgICAgICAgbm9kZSA9IF90aGlzJHJlc29sdmVBcmd1bWVudDNbMF0sXG4gICAgICAgICAgYXBwZWFyaW5nID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50M1sxXTtcblxuICAgICAgdmFyIHR5cGUgPSBhcHBlYXJpbmcgPyAnYXBwZWFyJyA6ICdlbnRlcic7XG5cbiAgICAgIF90aGlzLnJlbW92ZUNsYXNzZXMobm9kZSwgdHlwZSk7XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsIHR5cGUsICdkb25lJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkVudGVyZWQpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25FbnRlcmVkKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkV4aXQgPSBmdW5jdGlvbiAobWF5YmVOb2RlKSB7XG4gICAgICB2YXIgX3RoaXMkcmVzb2x2ZUFyZ3VtZW50NCA9IF90aGlzLnJlc29sdmVBcmd1bWVudHMobWF5YmVOb2RlKSxcbiAgICAgICAgICBub2RlID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50NFswXTtcblxuICAgICAgX3RoaXMucmVtb3ZlQ2xhc3Nlcyhub2RlLCAnYXBwZWFyJyk7XG5cbiAgICAgIF90aGlzLnJlbW92ZUNsYXNzZXMobm9kZSwgJ2VudGVyJyk7XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsICdleGl0JywgJ2Jhc2UnKTtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRXhpdCkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkV4aXQobWF5YmVOb2RlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25FeGl0aW5nID0gZnVuY3Rpb24gKG1heWJlTm9kZSkge1xuICAgICAgdmFyIF90aGlzJHJlc29sdmVBcmd1bWVudDUgPSBfdGhpcy5yZXNvbHZlQXJndW1lbnRzKG1heWJlTm9kZSksXG4gICAgICAgICAgbm9kZSA9IF90aGlzJHJlc29sdmVBcmd1bWVudDVbMF07XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsICdleGl0JywgJ2FjdGl2ZScpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25FeGl0aW5nKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRXhpdGluZyhtYXliZU5vZGUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkV4aXRlZCA9IGZ1bmN0aW9uIChtYXliZU5vZGUpIHtcbiAgICAgIHZhciBfdGhpcyRyZXNvbHZlQXJndW1lbnQ2ID0gX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyhtYXliZU5vZGUpLFxuICAgICAgICAgIG5vZGUgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQ2WzBdO1xuXG4gICAgICBfdGhpcy5yZW1vdmVDbGFzc2VzKG5vZGUsICdleGl0Jyk7XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsICdleGl0JywgJ2RvbmUnKTtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRXhpdGVkKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRXhpdGVkKG1heWJlTm9kZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLnJlc29sdmVBcmd1bWVudHMgPSBmdW5jdGlvbiAobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZykge1xuICAgICAgcmV0dXJuIF90aGlzLnByb3BzLm5vZGVSZWYgPyBbX3RoaXMucHJvcHMubm9kZVJlZi5jdXJyZW50LCBtYXliZU5vZGVdIC8vIGhlcmUgYG1heWJlTm9kZWAgaXMgYWN0dWFsbHkgYGFwcGVhcmluZ2BcbiAgICAgIDogW21heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmddO1xuICAgIH07XG5cbiAgICBfdGhpcy5nZXRDbGFzc05hbWVzID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgIHZhciBjbGFzc05hbWVzID0gX3RoaXMucHJvcHMuY2xhc3NOYW1lcztcbiAgICAgIHZhciBpc1N0cmluZ0NsYXNzTmFtZXMgPSB0eXBlb2YgY2xhc3NOYW1lcyA9PT0gJ3N0cmluZyc7XG4gICAgICB2YXIgcHJlZml4ID0gaXNTdHJpbmdDbGFzc05hbWVzICYmIGNsYXNzTmFtZXMgPyBjbGFzc05hbWVzICsgXCItXCIgOiAnJztcbiAgICAgIHZhciBiYXNlQ2xhc3NOYW1lID0gaXNTdHJpbmdDbGFzc05hbWVzID8gXCJcIiArIHByZWZpeCArIHR5cGUgOiBjbGFzc05hbWVzW3R5cGVdO1xuICAgICAgdmFyIGFjdGl2ZUNsYXNzTmFtZSA9IGlzU3RyaW5nQ2xhc3NOYW1lcyA/IGJhc2VDbGFzc05hbWUgKyBcIi1hY3RpdmVcIiA6IGNsYXNzTmFtZXNbdHlwZSArIFwiQWN0aXZlXCJdO1xuICAgICAgdmFyIGRvbmVDbGFzc05hbWUgPSBpc1N0cmluZ0NsYXNzTmFtZXMgPyBiYXNlQ2xhc3NOYW1lICsgXCItZG9uZVwiIDogY2xhc3NOYW1lc1t0eXBlICsgXCJEb25lXCJdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYmFzZUNsYXNzTmFtZTogYmFzZUNsYXNzTmFtZSxcbiAgICAgICAgYWN0aXZlQ2xhc3NOYW1lOiBhY3RpdmVDbGFzc05hbWUsXG4gICAgICAgIGRvbmVDbGFzc05hbWU6IGRvbmVDbGFzc05hbWVcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBDU1NUcmFuc2l0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uYWRkQ2xhc3MgPSBmdW5jdGlvbiBhZGRDbGFzcyhub2RlLCB0eXBlLCBwaGFzZSkge1xuICAgIHZhciBjbGFzc05hbWUgPSB0aGlzLmdldENsYXNzTmFtZXModHlwZSlbcGhhc2UgKyBcIkNsYXNzTmFtZVwiXTtcblxuICAgIHZhciBfdGhpcyRnZXRDbGFzc05hbWVzID0gdGhpcy5nZXRDbGFzc05hbWVzKCdlbnRlcicpLFxuICAgICAgICBkb25lQ2xhc3NOYW1lID0gX3RoaXMkZ2V0Q2xhc3NOYW1lcy5kb25lQ2xhc3NOYW1lO1xuXG4gICAgaWYgKHR5cGUgPT09ICdhcHBlYXInICYmIHBoYXNlID09PSAnZG9uZScgJiYgZG9uZUNsYXNzTmFtZSkge1xuICAgICAgY2xhc3NOYW1lICs9IFwiIFwiICsgZG9uZUNsYXNzTmFtZTtcbiAgICB9IC8vIFRoaXMgaXMgdG8gZm9yY2UgYSByZXBhaW50LFxuICAgIC8vIHdoaWNoIGlzIG5lY2Vzc2FyeSBpbiBvcmRlciB0byB0cmFuc2l0aW9uIHN0eWxlcyB3aGVuIGFkZGluZyBhIGNsYXNzIG5hbWUuXG5cblxuICAgIGlmIChwaGFzZSA9PT0gJ2FjdGl2ZScpIHtcbiAgICAgIGlmIChub2RlKSBmb3JjZVJlZmxvdyhub2RlKTtcbiAgICB9XG5cbiAgICBpZiAoY2xhc3NOYW1lKSB7XG4gICAgICB0aGlzLmFwcGxpZWRDbGFzc2VzW3R5cGVdW3BoYXNlXSA9IGNsYXNzTmFtZTtcblxuICAgICAgX2FkZENsYXNzKG5vZGUsIGNsYXNzTmFtZSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW1vdmVDbGFzc2VzID0gZnVuY3Rpb24gcmVtb3ZlQ2xhc3Nlcyhub2RlLCB0eXBlKSB7XG4gICAgdmFyIF90aGlzJGFwcGxpZWRDbGFzc2VzJCA9IHRoaXMuYXBwbGllZENsYXNzZXNbdHlwZV0sXG4gICAgICAgIGJhc2VDbGFzc05hbWUgPSBfdGhpcyRhcHBsaWVkQ2xhc3NlcyQuYmFzZSxcbiAgICAgICAgYWN0aXZlQ2xhc3NOYW1lID0gX3RoaXMkYXBwbGllZENsYXNzZXMkLmFjdGl2ZSxcbiAgICAgICAgZG9uZUNsYXNzTmFtZSA9IF90aGlzJGFwcGxpZWRDbGFzc2VzJC5kb25lO1xuICAgIHRoaXMuYXBwbGllZENsYXNzZXNbdHlwZV0gPSB7fTtcblxuICAgIGlmIChiYXNlQ2xhc3NOYW1lKSB7XG4gICAgICByZW1vdmVDbGFzcyhub2RlLCBiYXNlQ2xhc3NOYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoYWN0aXZlQ2xhc3NOYW1lKSB7XG4gICAgICByZW1vdmVDbGFzcyhub2RlLCBhY3RpdmVDbGFzc05hbWUpO1xuICAgIH1cblxuICAgIGlmIChkb25lQ2xhc3NOYW1lKSB7XG4gICAgICByZW1vdmVDbGFzcyhub2RlLCBkb25lQ2xhc3NOYW1lKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBfID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lcyxcbiAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wiY2xhc3NOYW1lc1wiXSk7XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICBvbkVudGVyOiB0aGlzLm9uRW50ZXIsXG4gICAgICBvbkVudGVyZWQ6IHRoaXMub25FbnRlcmVkLFxuICAgICAgb25FbnRlcmluZzogdGhpcy5vbkVudGVyaW5nLFxuICAgICAgb25FeGl0OiB0aGlzLm9uRXhpdCxcbiAgICAgIG9uRXhpdGluZzogdGhpcy5vbkV4aXRpbmcsXG4gICAgICBvbkV4aXRlZDogdGhpcy5vbkV4aXRlZFxuICAgIH0pKTtcbiAgfTtcblxuICByZXR1cm4gQ1NTVHJhbnNpdGlvbjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuQ1NTVHJhbnNpdGlvbi5kZWZhdWx0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZXM6ICcnXG59O1xuQ1NTVHJhbnNpdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBfZXh0ZW5kcyh7fSwgVHJhbnNpdGlvbi5wcm9wVHlwZXMsIHtcbiAgLyoqXG4gICAqIFRoZSBhbmltYXRpb24gY2xhc3NOYW1lcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQgYXMgaXQgYXBwZWFycywgZW50ZXJzLFxuICAgKiBleGl0cyBvciBoYXMgZmluaXNoZWQgdGhlIHRyYW5zaXRpb24uIEEgc2luZ2xlIG5hbWUgY2FuIGJlIHByb3ZpZGVkLCB3aGljaFxuICAgKiB3aWxsIGJlIHN1ZmZpeGVkIGZvciBlYWNoIHN0YWdlLCBlLmcuIGBjbGFzc05hbWVzPVwiZmFkZVwiYCBhcHBsaWVzOlxuICAgKlxuICAgKiAtIGBmYWRlLWFwcGVhcmAsIGBmYWRlLWFwcGVhci1hY3RpdmVgLCBgZmFkZS1hcHBlYXItZG9uZWBcbiAgICogLSBgZmFkZS1lbnRlcmAsIGBmYWRlLWVudGVyLWFjdGl2ZWAsIGBmYWRlLWVudGVyLWRvbmVgXG4gICAqIC0gYGZhZGUtZXhpdGAsIGBmYWRlLWV4aXQtYWN0aXZlYCwgYGZhZGUtZXhpdC1kb25lYFxuICAgKlxuICAgKiBBIGZldyBkZXRhaWxzIHRvIG5vdGUgYWJvdXQgaG93IHRoZXNlIGNsYXNzZXMgYXJlIGFwcGxpZWQ6XG4gICAqXG4gICAqIDEuIFRoZXkgYXJlIF9qb2luZWRfIHdpdGggdGhlIG9uZXMgdGhhdCBhcmUgYWxyZWFkeSBkZWZpbmVkIG9uIHRoZSBjaGlsZFxuICAgKiAgICBjb21wb25lbnQsIHNvIGlmIHlvdSB3YW50IHRvIGFkZCBzb21lIGJhc2Ugc3R5bGVzLCB5b3UgY2FuIHVzZVxuICAgKiAgICBgY2xhc3NOYW1lYCB3aXRob3V0IHdvcnJ5aW5nIHRoYXQgaXQgd2lsbCBiZSBvdmVycmlkZGVuLlxuICAgKlxuICAgKiAyLiBJZiB0aGUgdHJhbnNpdGlvbiBjb21wb25lbnQgbW91bnRzIHdpdGggYGluPXtmYWxzZX1gLCBubyBjbGFzc2VzIGFyZVxuICAgKiAgICBhcHBsaWVkIHlldC4gWW91IG1pZ2h0IGJlIGV4cGVjdGluZyBgKi1leGl0LWRvbmVgLCBidXQgaWYgeW91IHRoaW5rXG4gICAqICAgIGFib3V0IGl0LCBhIGNvbXBvbmVudCBjYW5ub3QgZmluaXNoIGV4aXRpbmcgaWYgaXQgaGFzbid0IGVudGVyZWQgeWV0LlxuICAgKlxuICAgKiAyLiBgZmFkZS1hcHBlYXItZG9uZWAgYW5kIGBmYWRlLWVudGVyLWRvbmVgIHdpbGwgX2JvdGhfIGJlIGFwcGxpZWQuIFRoaXNcbiAgICogICAgYWxsb3dzIHlvdSB0byBkZWZpbmUgZGlmZmVyZW50IGJlaGF2aW9yIGZvciB3aGVuIGFwcGVhcmluZyBpcyBkb25lIGFuZFxuICAgKiAgICB3aGVuIHJlZ3VsYXIgZW50ZXJpbmcgaXMgZG9uZSwgdXNpbmcgc2VsZWN0b3JzIGxpa2VcbiAgICogICAgYC5mYWRlLWVudGVyLWRvbmU6bm90KC5mYWRlLWFwcGVhci1kb25lKWAuIEZvciBleGFtcGxlLCB5b3UgY291bGQgYXBwbHlcbiAgICogICAgYW4gZXBpYyBlbnRyYW5jZSBhbmltYXRpb24gd2hlbiBlbGVtZW50IGZpcnN0IGFwcGVhcnMgaW4gdGhlIERPTSB1c2luZ1xuICAgKiAgICBbQW5pbWF0ZS5jc3NdKGh0dHBzOi8vZGFuZWRlbi5naXRodWIuaW8vYW5pbWF0ZS5jc3MvKS4gT3RoZXJ3aXNlIHlvdSBjYW5cbiAgICogICAgc2ltcGx5IHVzZSBgZmFkZS1lbnRlci1kb25lYCBmb3IgZGVmaW5pbmcgYm90aCBjYXNlcy5cbiAgICpcbiAgICogRWFjaCBpbmRpdmlkdWFsIGNsYXNzTmFtZXMgY2FuIGFsc28gYmUgc3BlY2lmaWVkIGluZGVwZW5kZW50bHkgbGlrZTpcbiAgICpcbiAgICogYGBganNcbiAgICogY2xhc3NOYW1lcz17e1xuICAgKiAgYXBwZWFyOiAnbXktYXBwZWFyJyxcbiAgICogIGFwcGVhckFjdGl2ZTogJ215LWFjdGl2ZS1hcHBlYXInLFxuICAgKiAgYXBwZWFyRG9uZTogJ215LWRvbmUtYXBwZWFyJyxcbiAgICogIGVudGVyOiAnbXktZW50ZXInLFxuICAgKiAgZW50ZXJBY3RpdmU6ICdteS1hY3RpdmUtZW50ZXInLFxuICAgKiAgZW50ZXJEb25lOiAnbXktZG9uZS1lbnRlcicsXG4gICAqICBleGl0OiAnbXktZXhpdCcsXG4gICAqICBleGl0QWN0aXZlOiAnbXktYWN0aXZlLWV4aXQnLFxuICAgKiAgZXhpdERvbmU6ICdteS1kb25lLWV4aXQnLFxuICAgKiB9fVxuICAgKiBgYGBcbiAgICpcbiAgICogSWYgeW91IHdhbnQgdG8gc2V0IHRoZXNlIGNsYXNzZXMgdXNpbmcgQ1NTIE1vZHVsZXM6XG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMuY3NzJztcbiAgICogYGBgXG4gICAqXG4gICAqIHlvdSBtaWdodCB3YW50IHRvIHVzZSBjYW1lbENhc2UgaW4geW91ciBDU1MgZmlsZSwgdGhhdCB3YXkgY291bGQgc2ltcGx5XG4gICAqIHNwcmVhZCB0aGVtIGluc3RlYWQgb2YgbGlzdGluZyB0aGVtIG9uZSBieSBvbmU6XG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGNsYXNzTmFtZXM9e3sgLi4uc3R5bGVzIH19XG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nIHwge1xuICAgKiAgYXBwZWFyPzogc3RyaW5nLFxuICAgKiAgYXBwZWFyQWN0aXZlPzogc3RyaW5nLFxuICAgKiAgYXBwZWFyRG9uZT86IHN0cmluZyxcbiAgICogIGVudGVyPzogc3RyaW5nLFxuICAgKiAgZW50ZXJBY3RpdmU/OiBzdHJpbmcsXG4gICAqICBlbnRlckRvbmU/OiBzdHJpbmcsXG4gICAqICBleGl0Pzogc3RyaW5nLFxuICAgKiAgZXhpdEFjdGl2ZT86IHN0cmluZyxcbiAgICogIGV4aXREb25lPzogc3RyaW5nLFxuICAgKiB9fVxuICAgKi9cbiAgY2xhc3NOYW1lczogY2xhc3NOYW1lc1NoYXBlLFxuXG4gIC8qKlxuICAgKiBBIGA8VHJhbnNpdGlvbj5gIGNhbGxiYWNrIGZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnZW50ZXInIG9yICdhcHBlYXInIGNsYXNzIGlzXG4gICAqIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbClcbiAgICovXG4gIG9uRW50ZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBBIGA8VHJhbnNpdGlvbj5gIGNhbGxiYWNrIGZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnZW50ZXItYWN0aXZlJyBvclxuICAgKiAnYXBwZWFyLWFjdGl2ZScgY2xhc3MgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKVxuICAgKi9cbiAgb25FbnRlcmluZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdlbnRlcicgb3JcbiAgICogJ2FwcGVhcicgY2xhc3NlcyBhcmUgKipyZW1vdmVkKiogYW5kIHRoZSBgZG9uZWAgY2xhc3MgaXMgYWRkZWQgdG8gdGhlIERPTSBub2RlLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpXG4gICAqL1xuICBvbkVudGVyZWQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBBIGA8VHJhbnNpdGlvbj5gIGNhbGxiYWNrIGZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnZXhpdCcgY2xhc3MgaXNcbiAgICogYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZFxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudClcbiAgICovXG4gIG9uRXhpdDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdleGl0LWFjdGl2ZScgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZFxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudClcbiAgICovXG4gIG9uRXhpdGluZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdleGl0JyBjbGFzc2VzXG4gICAqIGFyZSAqKnJlbW92ZWQqKiBhbmQgdGhlIGBleGl0LWRvbmVgIGNsYXNzIGlzIGFkZGVkIHRvIHRoZSBET00gbm9kZS5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZFxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudClcbiAgICovXG4gIG9uRXhpdGVkOiBQcm9wVHlwZXMuZnVuY1xufSkgOiB7fTtcbmV4cG9ydCBkZWZhdWx0IENTU1RyYW5zaXRpb247IiwiaW1wb3J0IGhhc0NsYXNzIGZyb20gJy4vaGFzQ2xhc3MnO1xuLyoqXG4gKiBBZGRzIGEgQ1NTIGNsYXNzIHRvIGEgZ2l2ZW4gZWxlbWVudC5cbiAqIFxuICogQHBhcmFtIGVsZW1lbnQgdGhlIGVsZW1lbnRcbiAqIEBwYXJhbSBjbGFzc05hbWUgdGhlIENTUyBjbGFzcyBuYW1lXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gIGlmIChlbGVtZW50LmNsYXNzTGlzdCkgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7ZWxzZSBpZiAoIWhhc0NsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkpIGlmICh0eXBlb2YgZWxlbWVudC5jbGFzc05hbWUgPT09ICdzdHJpbmcnKSBlbGVtZW50LmNsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1lICsgXCIgXCIgKyBjbGFzc05hbWU7ZWxzZSBlbGVtZW50LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAoZWxlbWVudC5jbGFzc05hbWUgJiYgZWxlbWVudC5jbGFzc05hbWUuYmFzZVZhbCB8fCAnJykgKyBcIiBcIiArIGNsYXNzTmFtZSk7XG59IiwiLyoqXG4gKiBDaGVja3MgaWYgYSBnaXZlbiBlbGVtZW50IGhhcyBhIENTUyBjbGFzcy5cbiAqIFxuICogQHBhcmFtIGVsZW1lbnQgdGhlIGVsZW1lbnRcbiAqIEBwYXJhbSBjbGFzc05hbWUgdGhlIENTUyBjbGFzcyBuYW1lXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGhhc0NsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xuICBpZiAoZWxlbWVudC5jbGFzc0xpc3QpIHJldHVybiAhIWNsYXNzTmFtZSAmJiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpO1xuICByZXR1cm4gKFwiIFwiICsgKGVsZW1lbnQuY2xhc3NOYW1lLmJhc2VWYWwgfHwgZWxlbWVudC5jbGFzc05hbWUpICsgXCIgXCIpLmluZGV4T2YoXCIgXCIgKyBjbGFzc05hbWUgKyBcIiBcIikgIT09IC0xO1xufSIsImltcG9ydCB7IENoaWxkcmVuLCBjbG9uZUVsZW1lbnQsIGlzVmFsaWRFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBHaXZlbiBgdGhpcy5wcm9wcy5jaGlsZHJlbmAsIHJldHVybiBhbiBvYmplY3QgbWFwcGluZyBrZXkgdG8gY2hpbGQuXG4gKlxuICogQHBhcmFtIHsqfSBjaGlsZHJlbiBgdGhpcy5wcm9wcy5jaGlsZHJlbmBcbiAqIEByZXR1cm4ge29iamVjdH0gTWFwcGluZyBvZiBrZXkgdG8gY2hpbGRcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hpbGRNYXBwaW5nKGNoaWxkcmVuLCBtYXBGbikge1xuICB2YXIgbWFwcGVyID0gZnVuY3Rpb24gbWFwcGVyKGNoaWxkKSB7XG4gICAgcmV0dXJuIG1hcEZuICYmIGlzVmFsaWRFbGVtZW50KGNoaWxkKSA/IG1hcEZuKGNoaWxkKSA6IGNoaWxkO1xuICB9O1xuXG4gIHZhciByZXN1bHQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoY2hpbGRyZW4pIENoaWxkcmVuLm1hcChjaGlsZHJlbiwgZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gYztcbiAgfSkuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAvLyBydW4gdGhlIG1hcCBmdW5jdGlvbiBoZXJlIGluc3RlYWQgc28gdGhhdCB0aGUga2V5IGlzIHRoZSBjb21wdXRlZCBvbmVcbiAgICByZXN1bHRbY2hpbGQua2V5XSA9IG1hcHBlcihjaGlsZCk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBXaGVuIHlvdSdyZSBhZGRpbmcgb3IgcmVtb3ZpbmcgY2hpbGRyZW4gc29tZSBtYXkgYmUgYWRkZWQgb3IgcmVtb3ZlZCBpbiB0aGVcbiAqIHNhbWUgcmVuZGVyIHBhc3MuIFdlIHdhbnQgdG8gc2hvdyAqYm90aCogc2luY2Ugd2Ugd2FudCB0byBzaW11bHRhbmVvdXNseVxuICogYW5pbWF0ZSBlbGVtZW50cyBpbiBhbmQgb3V0LiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgcHJldmlvdXMgc2V0IG9mIGtleXNcbiAqIGFuZCBhIG5ldyBzZXQgb2Yga2V5cyBhbmQgbWVyZ2VzIHRoZW0gd2l0aCBpdHMgYmVzdCBndWVzcyBvZiB0aGUgY29ycmVjdFxuICogb3JkZXJpbmcuIEluIHRoZSBmdXR1cmUgd2UgbWF5IGV4cG9zZSBzb21lIG9mIHRoZSB1dGlsaXRpZXMgaW5cbiAqIFJlYWN0TXVsdGlDaGlsZCB0byBtYWtlIHRoaXMgZWFzeSwgYnV0IGZvciBub3cgUmVhY3QgaXRzZWxmIGRvZXMgbm90XG4gKiBkaXJlY3RseSBoYXZlIHRoaXMgY29uY2VwdCBvZiB0aGUgdW5pb24gb2YgcHJldkNoaWxkcmVuIGFuZCBuZXh0Q2hpbGRyZW5cbiAqIHNvIHdlIGltcGxlbWVudCBpdCBoZXJlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcmV2IHByZXYgY2hpbGRyZW4gYXMgcmV0dXJuZWQgZnJvbVxuICogYFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5nZXRDaGlsZE1hcHBpbmcoKWAuXG4gKiBAcGFyYW0ge29iamVjdH0gbmV4dCBuZXh0IGNoaWxkcmVuIGFzIHJldHVybmVkIGZyb21cbiAqIGBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRNYXBwaW5nKClgLlxuICogQHJldHVybiB7b2JqZWN0fSBhIGtleSBzZXQgdGhhdCBjb250YWlucyBhbGwga2V5cyBpbiBgcHJldmAgYW5kIGFsbCBrZXlzXG4gKiBpbiBgbmV4dGAgaW4gYSByZWFzb25hYmxlIG9yZGVyLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUNoaWxkTWFwcGluZ3MocHJldiwgbmV4dCkge1xuICBwcmV2ID0gcHJldiB8fCB7fTtcbiAgbmV4dCA9IG5leHQgfHwge307XG5cbiAgZnVuY3Rpb24gZ2V0VmFsdWVGb3JLZXkoa2V5KSB7XG4gICAgcmV0dXJuIGtleSBpbiBuZXh0ID8gbmV4dFtrZXldIDogcHJldltrZXldO1xuICB9IC8vIEZvciBlYWNoIGtleSBvZiBgbmV4dGAsIHRoZSBsaXN0IG9mIGtleXMgdG8gaW5zZXJ0IGJlZm9yZSB0aGF0IGtleSBpblxuICAvLyB0aGUgY29tYmluZWQgbGlzdFxuXG5cbiAgdmFyIG5leHRLZXlzUGVuZGluZyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHZhciBwZW5kaW5nS2V5cyA9IFtdO1xuXG4gIGZvciAodmFyIHByZXZLZXkgaW4gcHJldikge1xuICAgIGlmIChwcmV2S2V5IGluIG5leHQpIHtcbiAgICAgIGlmIChwZW5kaW5nS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgbmV4dEtleXNQZW5kaW5nW3ByZXZLZXldID0gcGVuZGluZ0tleXM7XG4gICAgICAgIHBlbmRpbmdLZXlzID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlbmRpbmdLZXlzLnB1c2gocHJldktleSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGk7XG4gIHZhciBjaGlsZE1hcHBpbmcgPSB7fTtcblxuICBmb3IgKHZhciBuZXh0S2V5IGluIG5leHQpIHtcbiAgICBpZiAobmV4dEtleXNQZW5kaW5nW25leHRLZXldKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbmV4dEtleXNQZW5kaW5nW25leHRLZXldLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwZW5kaW5nTmV4dEtleSA9IG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XVtpXTtcbiAgICAgICAgY2hpbGRNYXBwaW5nW25leHRLZXlzUGVuZGluZ1tuZXh0S2V5XVtpXV0gPSBnZXRWYWx1ZUZvcktleShwZW5kaW5nTmV4dEtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2hpbGRNYXBwaW5nW25leHRLZXldID0gZ2V0VmFsdWVGb3JLZXkobmV4dEtleSk7XG4gIH0gLy8gRmluYWxseSwgYWRkIHRoZSBrZXlzIHdoaWNoIGRpZG4ndCBhcHBlYXIgYmVmb3JlIGFueSBrZXkgaW4gYG5leHRgXG5cblxuICBmb3IgKGkgPSAwOyBpIDwgcGVuZGluZ0tleXMubGVuZ3RoOyBpKyspIHtcbiAgICBjaGlsZE1hcHBpbmdbcGVuZGluZ0tleXNbaV1dID0gZ2V0VmFsdWVGb3JLZXkocGVuZGluZ0tleXNbaV0pO1xuICB9XG5cbiAgcmV0dXJuIGNoaWxkTWFwcGluZztcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcChjaGlsZCwgcHJvcCwgcHJvcHMpIHtcbiAgcmV0dXJuIHByb3BzW3Byb3BdICE9IG51bGwgPyBwcm9wc1twcm9wXSA6IGNoaWxkLnByb3BzW3Byb3BdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5pdGlhbENoaWxkTWFwcGluZyhwcm9wcywgb25FeGl0ZWQpIHtcbiAgcmV0dXJuIGdldENoaWxkTWFwcGluZyhwcm9wcy5jaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgaW46IHRydWUsXG4gICAgICBhcHBlYXI6IGdldFByb3AoY2hpbGQsICdhcHBlYXInLCBwcm9wcyksXG4gICAgICBlbnRlcjogZ2V0UHJvcChjaGlsZCwgJ2VudGVyJywgcHJvcHMpLFxuICAgICAgZXhpdDogZ2V0UHJvcChjaGlsZCwgJ2V4aXQnLCBwcm9wcylcbiAgICB9KTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV4dENoaWxkTWFwcGluZyhuZXh0UHJvcHMsIHByZXZDaGlsZE1hcHBpbmcsIG9uRXhpdGVkKSB7XG4gIHZhciBuZXh0Q2hpbGRNYXBwaW5nID0gZ2V0Q2hpbGRNYXBwaW5nKG5leHRQcm9wcy5jaGlsZHJlbik7XG4gIHZhciBjaGlsZHJlbiA9IG1lcmdlQ2hpbGRNYXBwaW5ncyhwcmV2Q2hpbGRNYXBwaW5nLCBuZXh0Q2hpbGRNYXBwaW5nKTtcbiAgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2tleV07XG4gICAgaWYgKCFpc1ZhbGlkRWxlbWVudChjaGlsZCkpIHJldHVybjtcbiAgICB2YXIgaGFzUHJldiA9IChrZXkgaW4gcHJldkNoaWxkTWFwcGluZyk7XG4gICAgdmFyIGhhc05leHQgPSAoa2V5IGluIG5leHRDaGlsZE1hcHBpbmcpO1xuICAgIHZhciBwcmV2Q2hpbGQgPSBwcmV2Q2hpbGRNYXBwaW5nW2tleV07XG4gICAgdmFyIGlzTGVhdmluZyA9IGlzVmFsaWRFbGVtZW50KHByZXZDaGlsZCkgJiYgIXByZXZDaGlsZC5wcm9wcy5pbjsgLy8gaXRlbSBpcyBuZXcgKGVudGVyaW5nKVxuXG4gICAgaWYgKGhhc05leHQgJiYgKCFoYXNQcmV2IHx8IGlzTGVhdmluZykpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdlbnRlcmluZycsIGtleSlcbiAgICAgIGNoaWxkcmVuW2tleV0gPSBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgICBpbjogdHJ1ZSxcbiAgICAgICAgZXhpdDogZ2V0UHJvcChjaGlsZCwgJ2V4aXQnLCBuZXh0UHJvcHMpLFxuICAgICAgICBlbnRlcjogZ2V0UHJvcChjaGlsZCwgJ2VudGVyJywgbmV4dFByb3BzKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICghaGFzTmV4dCAmJiBoYXNQcmV2ICYmICFpc0xlYXZpbmcpIHtcbiAgICAgIC8vIGl0ZW0gaXMgb2xkIChleGl0aW5nKVxuICAgICAgLy8gY29uc29sZS5sb2coJ2xlYXZpbmcnLCBrZXkpXG4gICAgICBjaGlsZHJlbltrZXldID0gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAgIGluOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChoYXNOZXh0ICYmIGhhc1ByZXYgJiYgaXNWYWxpZEVsZW1lbnQocHJldkNoaWxkKSkge1xuICAgICAgLy8gaXRlbSBoYXNuJ3QgY2hhbmdlZCB0cmFuc2l0aW9uIHN0YXRlc1xuICAgICAgLy8gY29weSBvdmVyIHRoZSBsYXN0IHRyYW5zaXRpb24gcHJvcHM7XG4gICAgICAvLyBjb25zb2xlLmxvZygndW5jaGFuZ2VkJywga2V5KVxuICAgICAgY2hpbGRyZW5ba2V5XSA9IGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgICBvbkV4aXRlZDogb25FeGl0ZWQuYmluZChudWxsLCBjaGlsZCksXG4gICAgICAgIGluOiBwcmV2Q2hpbGQucHJvcHMuaW4sXG4gICAgICAgIGV4aXQ6IGdldFByb3AoY2hpbGQsICdleGl0JywgbmV4dFByb3BzKSxcbiAgICAgICAgZW50ZXI6IGdldFByb3AoY2hpbGQsICdlbnRlcicsIG5leHRQcm9wcylcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjaGlsZHJlbjtcbn0iLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUcmFuc2l0aW9uR3JvdXBDb250ZXh0IGZyb20gJy4vVHJhbnNpdGlvbkdyb3VwQ29udGV4dCc7XG5pbXBvcnQgeyBnZXRDaGlsZE1hcHBpbmcsIGdldEluaXRpYWxDaGlsZE1hcHBpbmcsIGdldE5leHRDaGlsZE1hcHBpbmcgfSBmcm9tICcuL3V0aWxzL0NoaWxkTWFwcGluZyc7XG5cbnZhciB2YWx1ZXMgPSBPYmplY3QudmFsdWVzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubWFwKGZ1bmN0aW9uIChrKSB7XG4gICAgcmV0dXJuIG9ialtrXTtcbiAgfSk7XG59O1xuXG52YXIgZGVmYXVsdFByb3BzID0ge1xuICBjb21wb25lbnQ6ICdkaXYnLFxuICBjaGlsZEZhY3Rvcnk6IGZ1bmN0aW9uIGNoaWxkRmFjdG9yeShjaGlsZCkge1xuICAgIHJldHVybiBjaGlsZDtcbiAgfVxufTtcbi8qKlxuICogVGhlIGA8VHJhbnNpdGlvbkdyb3VwPmAgY29tcG9uZW50IG1hbmFnZXMgYSBzZXQgb2YgdHJhbnNpdGlvbiBjb21wb25lbnRzXG4gKiAoYDxUcmFuc2l0aW9uPmAgYW5kIGA8Q1NTVHJhbnNpdGlvbj5gKSBpbiBhIGxpc3QuIExpa2Ugd2l0aCB0aGUgdHJhbnNpdGlvblxuICogY29tcG9uZW50cywgYDxUcmFuc2l0aW9uR3JvdXA+YCBpcyBhIHN0YXRlIG1hY2hpbmUgZm9yIG1hbmFnaW5nIHRoZSBtb3VudGluZ1xuICogYW5kIHVubW91bnRpbmcgb2YgY29tcG9uZW50cyBvdmVyIHRpbWUuXG4gKlxuICogQ29uc2lkZXIgdGhlIGV4YW1wbGUgYmVsb3cuIEFzIGl0ZW1zIGFyZSByZW1vdmVkIG9yIGFkZGVkIHRvIHRoZSBUb2RvTGlzdCB0aGVcbiAqIGBpbmAgcHJvcCBpcyB0b2dnbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGA8VHJhbnNpdGlvbkdyb3VwPmAuXG4gKlxuICogTm90ZSB0aGF0IGA8VHJhbnNpdGlvbkdyb3VwPmAgIGRvZXMgbm90IGRlZmluZSBhbnkgYW5pbWF0aW9uIGJlaGF2aW9yIVxuICogRXhhY3RseSBfaG93XyBhIGxpc3QgaXRlbSBhbmltYXRlcyBpcyB1cCB0byB0aGUgaW5kaXZpZHVhbCB0cmFuc2l0aW9uXG4gKiBjb21wb25lbnQuIFRoaXMgbWVhbnMgeW91IGNhbiBtaXggYW5kIG1hdGNoIGFuaW1hdGlvbnMgYWNyb3NzIGRpZmZlcmVudCBsaXN0XG4gKiBpdGVtcy5cbiAqL1xuXG52YXIgVHJhbnNpdGlvbkdyb3VwID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKFRyYW5zaXRpb25Hcm91cCwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gVHJhbnNpdGlvbkdyb3VwKHByb3BzLCBjb250ZXh0KSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpIHx8IHRoaXM7XG5cbiAgICB2YXIgaGFuZGxlRXhpdGVkID0gX3RoaXMuaGFuZGxlRXhpdGVkLmJpbmQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpOyAvLyBJbml0aWFsIGNoaWxkcmVuIHNob3VsZCBhbGwgYmUgZW50ZXJpbmcsIGRlcGVuZGVudCBvbiBhcHBlYXJcblxuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBjb250ZXh0VmFsdWU6IHtcbiAgICAgICAgaXNNb3VudGluZzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGhhbmRsZUV4aXRlZDogaGFuZGxlRXhpdGVkLFxuICAgICAgZmlyc3RSZW5kZXI6IHRydWVcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBUcmFuc2l0aW9uR3JvdXAucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMubW91bnRlZCA9IHRydWU7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBjb250ZXh0VmFsdWU6IHtcbiAgICAgICAgaXNNb3VudGluZzogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLm1vdW50ZWQgPSBmYWxzZTtcbiAgfTtcblxuICBUcmFuc2l0aW9uR3JvdXAuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgX3JlZikge1xuICAgIHZhciBwcmV2Q2hpbGRNYXBwaW5nID0gX3JlZi5jaGlsZHJlbixcbiAgICAgICAgaGFuZGxlRXhpdGVkID0gX3JlZi5oYW5kbGVFeGl0ZWQsXG4gICAgICAgIGZpcnN0UmVuZGVyID0gX3JlZi5maXJzdFJlbmRlcjtcbiAgICByZXR1cm4ge1xuICAgICAgY2hpbGRyZW46IGZpcnN0UmVuZGVyID8gZ2V0SW5pdGlhbENoaWxkTWFwcGluZyhuZXh0UHJvcHMsIGhhbmRsZUV4aXRlZCkgOiBnZXROZXh0Q2hpbGRNYXBwaW5nKG5leHRQcm9wcywgcHJldkNoaWxkTWFwcGluZywgaGFuZGxlRXhpdGVkKSxcbiAgICAgIGZpcnN0UmVuZGVyOiBmYWxzZVxuICAgIH07XG4gIH0gLy8gbm9kZSBpcyBgdW5kZWZpbmVkYCB3aGVuIHVzZXIgcHJvdmlkZWQgYG5vZGVSZWZgIHByb3BcbiAgO1xuXG4gIF9wcm90by5oYW5kbGVFeGl0ZWQgPSBmdW5jdGlvbiBoYW5kbGVFeGl0ZWQoY2hpbGQsIG5vZGUpIHtcbiAgICB2YXIgY3VycmVudENoaWxkTWFwcGluZyA9IGdldENoaWxkTWFwcGluZyh0aGlzLnByb3BzLmNoaWxkcmVuKTtcbiAgICBpZiAoY2hpbGQua2V5IGluIGN1cnJlbnRDaGlsZE1hcHBpbmcpIHJldHVybjtcblxuICAgIGlmIChjaGlsZC5wcm9wcy5vbkV4aXRlZCkge1xuICAgICAgY2hpbGQucHJvcHMub25FeGl0ZWQobm9kZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubW91bnRlZCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gX2V4dGVuZHMoe30sIHN0YXRlLmNoaWxkcmVuKTtcblxuICAgICAgICBkZWxldGUgY2hpbGRyZW5bY2hpbGQua2V5XTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIENvbXBvbmVudCA9IF90aGlzJHByb3BzLmNvbXBvbmVudCxcbiAgICAgICAgY2hpbGRGYWN0b3J5ID0gX3RoaXMkcHJvcHMuY2hpbGRGYWN0b3J5LFxuICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF90aGlzJHByb3BzLCBbXCJjb21wb25lbnRcIiwgXCJjaGlsZEZhY3RvcnlcIl0pO1xuXG4gICAgdmFyIGNvbnRleHRWYWx1ZSA9IHRoaXMuc3RhdGUuY29udGV4dFZhbHVlO1xuICAgIHZhciBjaGlsZHJlbiA9IHZhbHVlcyh0aGlzLnN0YXRlLmNoaWxkcmVuKS5tYXAoY2hpbGRGYWN0b3J5KTtcbiAgICBkZWxldGUgcHJvcHMuYXBwZWFyO1xuICAgIGRlbGV0ZSBwcm9wcy5lbnRlcjtcbiAgICBkZWxldGUgcHJvcHMuZXhpdDtcblxuICAgIGlmIChDb21wb25lbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiBjb250ZXh0VmFsdWVcbiAgICAgIH0sIGNoaWxkcmVuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgdmFsdWU6IGNvbnRleHRWYWx1ZVxuICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbXBvbmVudCwgcHJvcHMsIGNoaWxkcmVuKSk7XG4gIH07XG5cbiAgcmV0dXJuIFRyYW5zaXRpb25Hcm91cDtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuVHJhbnNpdGlvbkdyb3VwLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgLyoqXG4gICAqIGA8VHJhbnNpdGlvbkdyb3VwPmAgcmVuZGVycyBhIGA8ZGl2PmAgYnkgZGVmYXVsdC4gWW91IGNhbiBjaGFuZ2UgdGhpc1xuICAgKiBiZWhhdmlvciBieSBwcm92aWRpbmcgYSBgY29tcG9uZW50YCBwcm9wLlxuICAgKiBJZiB5b3UgdXNlIFJlYWN0IHYxNisgYW5kIHdvdWxkIGxpa2UgdG8gYXZvaWQgYSB3cmFwcGluZyBgPGRpdj5gIGVsZW1lbnRcbiAgICogeW91IGNhbiBwYXNzIGluIGBjb21wb25lbnQ9e251bGx9YC4gVGhpcyBpcyB1c2VmdWwgaWYgdGhlIHdyYXBwaW5nIGRpdlxuICAgKiBib3JrcyB5b3VyIGNzcyBzdHlsZXMuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAqIEEgc2V0IG9mIGA8VHJhbnNpdGlvbj5gIGNvbXBvbmVudHMsIHRoYXQgYXJlIHRvZ2dsZWQgYGluYCBhbmQgb3V0IGFzIHRoZXlcbiAgICogbGVhdmUuIHRoZSBgPFRyYW5zaXRpb25Hcm91cD5gIHdpbGwgaW5qZWN0IHNwZWNpZmljIHRyYW5zaXRpb24gcHJvcHMsIHNvXG4gICAqIHJlbWVtYmVyIHRvIHNwcmVhZCB0aGVtIHRocm91Z2ggaWYgeW91IGFyZSB3cmFwcGluZyB0aGUgYDxUcmFuc2l0aW9uPmAgYXNcbiAgICogd2l0aCBvdXIgYDxGYWRlPmAgZXhhbXBsZS5cbiAgICpcbiAgICogV2hpbGUgdGhpcyBjb21wb25lbnQgaXMgbWVhbnQgZm9yIG11bHRpcGxlIGBUcmFuc2l0aW9uYCBvciBgQ1NTVHJhbnNpdGlvbmBcbiAgICogY2hpbGRyZW4sIHNvbWV0aW1lcyB5b3UgbWF5IHdhbnQgdG8gaGF2ZSBhIHNpbmdsZSB0cmFuc2l0aW9uIGNoaWxkIHdpdGhcbiAgICogY29udGVudCB0aGF0IHlvdSB3YW50IHRvIGJlIHRyYW5zaXRpb25lZCBvdXQgYW5kIGluIHdoZW4geW91IGNoYW5nZSBpdFxuICAgKiAoZS5nLiByb3V0ZXMsIGltYWdlcyBldGMuKSBJbiB0aGF0IGNhc2UgeW91IGNhbiBjaGFuZ2UgdGhlIGBrZXlgIHByb3Agb2ZcbiAgICogdGhlIHRyYW5zaXRpb24gY2hpbGQgYXMgeW91IGNoYW5nZSBpdHMgY29udGVudCwgdGhpcyB3aWxsIGNhdXNlXG4gICAqIGBUcmFuc2l0aW9uR3JvdXBgIHRvIHRyYW5zaXRpb24gdGhlIGNoaWxkIG91dCBhbmQgYmFjayBpbi5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogQSBjb252ZW5pZW5jZSBwcm9wIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBhcHBlYXIgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgYXBwZWFyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQSBjb252ZW5pZW5jZSBwcm9wIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBlbnRlciBhbmltYXRpb25zXG4gICAqIGZvciBhbGwgY2hpbGRyZW4uIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIHRoaXMgd2lsbCBvdmVycmlkZSBhbnkgZGVmYXVsdHMgc2V0XG4gICAqIG9uIGluZGl2aWR1YWwgY2hpbGRyZW4gVHJhbnNpdGlvbnMuXG4gICAqL1xuICBlbnRlcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgZXhpdCBhbmltYXRpb25zXG4gICAqIGZvciBhbGwgY2hpbGRyZW4uIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIHRoaXMgd2lsbCBvdmVycmlkZSBhbnkgZGVmYXVsdHMgc2V0XG4gICAqIG9uIGluZGl2aWR1YWwgY2hpbGRyZW4gVHJhbnNpdGlvbnMuXG4gICAqL1xuICBleGl0OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogWW91IG1heSBuZWVkIHRvIGFwcGx5IHJlYWN0aXZlIHVwZGF0ZXMgdG8gYSBjaGlsZCBhcyBpdCBpcyBleGl0aW5nLlxuICAgKiBUaGlzIGlzIGdlbmVyYWxseSBkb25lIGJ5IHVzaW5nIGBjbG9uZUVsZW1lbnRgIGhvd2V2ZXIgaW4gdGhlIGNhc2Ugb2YgYW4gZXhpdGluZ1xuICAgKiBjaGlsZCB0aGUgZWxlbWVudCBoYXMgYWxyZWFkeSBiZWVuIHJlbW92ZWQgYW5kIG5vdCBhY2Nlc3NpYmxlIHRvIHRoZSBjb25zdW1lci5cbiAgICpcbiAgICogSWYgeW91IGRvIG5lZWQgdG8gdXBkYXRlIGEgY2hpbGQgYXMgaXQgbGVhdmVzIHlvdSBjYW4gcHJvdmlkZSBhIGBjaGlsZEZhY3RvcnlgXG4gICAqIHRvIHdyYXAgZXZlcnkgY2hpbGQsIGV2ZW4gdGhlIG9uZXMgdGhhdCBhcmUgbGVhdmluZy5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24oY2hpbGQ6IFJlYWN0RWxlbWVudCkgLT4gUmVhY3RFbGVtZW50XG4gICAqL1xuICBjaGlsZEZhY3Rvcnk6IFByb3BUeXBlcy5mdW5jXG59IDoge307XG5UcmFuc2l0aW9uR3JvdXAuZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xuZXhwb3J0IGRlZmF1bHQgVHJhbnNpdGlvbkdyb3VwOyIsImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkge1xuICBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIHJldHVybiBlO1xufVxuZXhwb3J0IHsgX2Fzc2VydFRoaXNJbml0aWFsaXplZCBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgVHJhbnNpdGlvbkdyb3VwIGZyb20gJy4vVHJhbnNpdGlvbkdyb3VwJztcbi8qKlxuICogVGhlIGA8UmVwbGFjZVRyYW5zaXRpb24+YCBjb21wb25lbnQgaXMgYSBzcGVjaWFsaXplZCBgVHJhbnNpdGlvbmAgY29tcG9uZW50XG4gKiB0aGF0IGFuaW1hdGVzIGJldHdlZW4gdHdvIGNoaWxkcmVuLlxuICpcbiAqIGBgYGpzeFxuICogPFJlcGxhY2VUcmFuc2l0aW9uIGluPlxuICogICA8RmFkZT48ZGl2PkkgYXBwZWFyIGZpcnN0PC9kaXY+PC9GYWRlPlxuICogICA8RmFkZT48ZGl2PkkgcmVwbGFjZSB0aGUgYWJvdmU8L2Rpdj48L0ZhZGU+XG4gKiA8L1JlcGxhY2VUcmFuc2l0aW9uPlxuICogYGBgXG4gKi9cblxudmFyIFJlcGxhY2VUcmFuc2l0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKFJlcGxhY2VUcmFuc2l0aW9uLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBSZXBsYWNlVHJhbnNpdGlvbigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgX2FyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBfYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbC5hcHBseShfUmVhY3QkQ29tcG9uZW50LCBbdGhpc10uY29uY2F0KF9hcmdzKSkgfHwgdGhpcztcblxuICAgIF90aGlzLmhhbmRsZUVudGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUxpZmVjeWNsZSgnb25FbnRlcicsIDAsIGFyZ3MpO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVFbnRlcmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMyksIF9rZXkzID0gMDsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgICBhcmdzW19rZXkzXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVMaWZlY3ljbGUoJ29uRW50ZXJpbmcnLCAwLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlRW50ZXJlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNCksIF9rZXk0ID0gMDsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xuICAgICAgICBhcmdzW19rZXk0XSA9IGFyZ3VtZW50c1tfa2V5NF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVMaWZlY3ljbGUoJ29uRW50ZXJlZCcsIDAsIGFyZ3MpO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVFeGl0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjUgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW41KSwgX2tleTUgPSAwOyBfa2V5NSA8IF9sZW41OyBfa2V5NSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleTVdID0gYXJndW1lbnRzW19rZXk1XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUxpZmVjeWNsZSgnb25FeGl0JywgMSwgYXJncyk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUV4aXRpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuNiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjYpLCBfa2V5NiA9IDA7IF9rZXk2IDwgX2xlbjY7IF9rZXk2KyspIHtcbiAgICAgICAgYXJnc1tfa2V5Nl0gPSBhcmd1bWVudHNbX2tleTZdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkV4aXRpbmcnLCAxLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlRXhpdGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjcgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW43KSwgX2tleTcgPSAwOyBfa2V5NyA8IF9sZW43OyBfa2V5NysrKSB7XG4gICAgICAgIGFyZ3NbX2tleTddID0gYXJndW1lbnRzW19rZXk3XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUxpZmVjeWNsZSgnb25FeGl0ZWQnLCAxLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFJlcGxhY2VUcmFuc2l0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlTGlmZWN5Y2xlID0gZnVuY3Rpb24gaGFuZGxlTGlmZWN5Y2xlKGhhbmRsZXIsIGlkeCwgb3JpZ2luYWxBcmdzKSB7XG4gICAgdmFyIF9jaGlsZCRwcm9wcztcblxuICAgIHZhciBjaGlsZHJlbiA9IHRoaXMucHJvcHMuY2hpbGRyZW47XG4gICAgdmFyIGNoaWxkID0gUmVhY3QuQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbilbaWR4XTtcbiAgICBpZiAoY2hpbGQucHJvcHNbaGFuZGxlcl0pIChfY2hpbGQkcHJvcHMgPSBjaGlsZC5wcm9wcylbaGFuZGxlcl0uYXBwbHkoX2NoaWxkJHByb3BzLCBvcmlnaW5hbEFyZ3MpO1xuXG4gICAgaWYgKHRoaXMucHJvcHNbaGFuZGxlcl0pIHtcbiAgICAgIHZhciBtYXliZU5vZGUgPSBjaGlsZC5wcm9wcy5ub2RlUmVmID8gdW5kZWZpbmVkIDogUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7XG4gICAgICB0aGlzLnByb3BzW2hhbmRsZXJdKG1heWJlTm9kZSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgaW5Qcm9wID0gX3RoaXMkcHJvcHMuaW4sXG4gICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3RoaXMkcHJvcHMsIFtcImNoaWxkcmVuXCIsIFwiaW5cIl0pO1xuXG4gICAgdmFyIF9SZWFjdCRDaGlsZHJlbiR0b0FyciA9IFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pLFxuICAgICAgICBmaXJzdCA9IF9SZWFjdCRDaGlsZHJlbiR0b0FyclswXSxcbiAgICAgICAgc2Vjb25kID0gX1JlYWN0JENoaWxkcmVuJHRvQXJyWzFdO1xuXG4gICAgZGVsZXRlIHByb3BzLm9uRW50ZXI7XG4gICAgZGVsZXRlIHByb3BzLm9uRW50ZXJpbmc7XG4gICAgZGVsZXRlIHByb3BzLm9uRW50ZXJlZDtcbiAgICBkZWxldGUgcHJvcHMub25FeGl0O1xuICAgIGRlbGV0ZSBwcm9wcy5vbkV4aXRpbmc7XG4gICAgZGVsZXRlIHByb3BzLm9uRXhpdGVkO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXAsIHByb3BzLCBpblByb3AgPyBSZWFjdC5jbG9uZUVsZW1lbnQoZmlyc3QsIHtcbiAgICAgIGtleTogJ2ZpcnN0JyxcbiAgICAgIG9uRW50ZXI6IHRoaXMuaGFuZGxlRW50ZXIsXG4gICAgICBvbkVudGVyaW5nOiB0aGlzLmhhbmRsZUVudGVyaW5nLFxuICAgICAgb25FbnRlcmVkOiB0aGlzLmhhbmRsZUVudGVyZWRcbiAgICB9KSA6IFJlYWN0LmNsb25lRWxlbWVudChzZWNvbmQsIHtcbiAgICAgIGtleTogJ3NlY29uZCcsXG4gICAgICBvbkVudGVyOiB0aGlzLmhhbmRsZUV4aXQsXG4gICAgICBvbkVudGVyaW5nOiB0aGlzLmhhbmRsZUV4aXRpbmcsXG4gICAgICBvbkVudGVyZWQ6IHRoaXMuaGFuZGxlRXhpdGVkXG4gICAgfSkpO1xuICB9O1xuXG4gIHJldHVybiBSZXBsYWNlVHJhbnNpdGlvbjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuUmVwbGFjZVRyYW5zaXRpb24ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICBpbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgY2hpbGRyZW46IGZ1bmN0aW9uIGNoaWxkcmVuKHByb3BzLCBwcm9wTmFtZSkge1xuICAgIGlmIChSZWFjdC5DaGlsZHJlbi5jb3VudChwcm9wc1twcm9wTmFtZV0pICE9PSAyKSByZXR1cm4gbmV3IEVycm9yKFwiXFxcIlwiICsgcHJvcE5hbWUgKyBcIlxcXCIgbXVzdCBiZSBleGFjdGx5IHR3byB0cmFuc2l0aW9uIGNvbXBvbmVudHMuXCIpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59IDoge307XG5leHBvcnQgZGVmYXVsdCBSZXBsYWNlVHJhbnNpdGlvbjsiLCJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcblxudmFyIF9sZWF2ZVJlbmRlcnMsIF9lbnRlclJlbmRlcnM7XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgRU5URVJFRCwgRU5URVJJTkcsIEVYSVRJTkcgfSBmcm9tICcuL1RyYW5zaXRpb24nO1xuaW1wb3J0IFRyYW5zaXRpb25Hcm91cENvbnRleHQgZnJvbSAnLi9UcmFuc2l0aW9uR3JvdXBDb250ZXh0JztcblxuZnVuY3Rpb24gYXJlQ2hpbGRyZW5EaWZmZXJlbnQob2xkQ2hpbGRyZW4sIG5ld0NoaWxkcmVuKSB7XG4gIGlmIChvbGRDaGlsZHJlbiA9PT0gbmV3Q2hpbGRyZW4pIHJldHVybiBmYWxzZTtcblxuICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQob2xkQ2hpbGRyZW4pICYmIFJlYWN0LmlzVmFsaWRFbGVtZW50KG5ld0NoaWxkcmVuKSAmJiBvbGRDaGlsZHJlbi5rZXkgIT0gbnVsbCAmJiBvbGRDaGlsZHJlbi5rZXkgPT09IG5ld0NoaWxkcmVuLmtleSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuLyoqXG4gKiBFbnVtIG9mIG1vZGVzIGZvciBTd2l0Y2hUcmFuc2l0aW9uIGNvbXBvbmVudFxuICogQGVudW0geyBzdHJpbmcgfVxuICovXG5cblxuZXhwb3J0IHZhciBtb2RlcyA9IHtcbiAgb3V0OiAnb3V0LWluJyxcbiAgaW46ICdpbi1vdXQnXG59O1xuXG52YXIgY2FsbEhvb2sgPSBmdW5jdGlvbiBjYWxsSG9vayhlbGVtZW50LCBuYW1lLCBjYikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBfZWxlbWVudCRwcm9wcztcblxuICAgIGVsZW1lbnQucHJvcHNbbmFtZV0gJiYgKF9lbGVtZW50JHByb3BzID0gZWxlbWVudC5wcm9wcylbbmFtZV0uYXBwbHkoX2VsZW1lbnQkcHJvcHMsIGFyZ3VtZW50cyk7XG4gICAgY2IoKTtcbiAgfTtcbn07XG5cbnZhciBsZWF2ZVJlbmRlcnMgPSAoX2xlYXZlUmVuZGVycyA9IHt9LCBfbGVhdmVSZW5kZXJzW21vZGVzLm91dF0gPSBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgY3VycmVudCA9IF9yZWYuY3VycmVudCxcbiAgICAgIGNoYW5nZVN0YXRlID0gX3JlZi5jaGFuZ2VTdGF0ZTtcbiAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjdXJyZW50LCB7XG4gICAgaW46IGZhbHNlLFxuICAgIG9uRXhpdGVkOiBjYWxsSG9vayhjdXJyZW50LCAnb25FeGl0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjaGFuZ2VTdGF0ZShFTlRFUklORywgbnVsbCk7XG4gICAgfSlcbiAgfSk7XG59LCBfbGVhdmVSZW5kZXJzW21vZGVzLmluXSA9IGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgY3VycmVudCA9IF9yZWYyLmN1cnJlbnQsXG4gICAgICBjaGFuZ2VTdGF0ZSA9IF9yZWYyLmNoYW5nZVN0YXRlLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmMi5jaGlsZHJlbjtcbiAgcmV0dXJuIFtjdXJyZW50LCBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICBpbjogdHJ1ZSxcbiAgICBvbkVudGVyZWQ6IGNhbGxIb29rKGNoaWxkcmVuLCAnb25FbnRlcmVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY2hhbmdlU3RhdGUoRU5URVJJTkcpO1xuICAgIH0pXG4gIH0pXTtcbn0sIF9sZWF2ZVJlbmRlcnMpO1xudmFyIGVudGVyUmVuZGVycyA9IChfZW50ZXJSZW5kZXJzID0ge30sIF9lbnRlclJlbmRlcnNbbW9kZXMub3V0XSA9IGZ1bmN0aW9uIChfcmVmMykge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmMy5jaGlsZHJlbixcbiAgICAgIGNoYW5nZVN0YXRlID0gX3JlZjMuY2hhbmdlU3RhdGU7XG4gIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICBpbjogdHJ1ZSxcbiAgICBvbkVudGVyZWQ6IGNhbGxIb29rKGNoaWxkcmVuLCAnb25FbnRlcmVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY2hhbmdlU3RhdGUoRU5URVJFRCwgUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgICAgIGluOiB0cnVlXG4gICAgICB9KSk7XG4gICAgfSlcbiAgfSk7XG59LCBfZW50ZXJSZW5kZXJzW21vZGVzLmluXSA9IGZ1bmN0aW9uIChfcmVmNCkge1xuICB2YXIgY3VycmVudCA9IF9yZWY0LmN1cnJlbnQsXG4gICAgICBjaGlsZHJlbiA9IF9yZWY0LmNoaWxkcmVuLFxuICAgICAgY2hhbmdlU3RhdGUgPSBfcmVmNC5jaGFuZ2VTdGF0ZTtcbiAgcmV0dXJuIFtSZWFjdC5jbG9uZUVsZW1lbnQoY3VycmVudCwge1xuICAgIGluOiBmYWxzZSxcbiAgICBvbkV4aXRlZDogY2FsbEhvb2soY3VycmVudCwgJ29uRXhpdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY2hhbmdlU3RhdGUoRU5URVJFRCwgUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgICAgIGluOiB0cnVlXG4gICAgICB9KSk7XG4gICAgfSlcbiAgfSksIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwge1xuICAgIGluOiB0cnVlXG4gIH0pXTtcbn0sIF9lbnRlclJlbmRlcnMpO1xuLyoqXG4gKiBBIHRyYW5zaXRpb24gY29tcG9uZW50IGluc3BpcmVkIGJ5IHRoZSBbdnVlIHRyYW5zaXRpb24gbW9kZXNdKGh0dHBzOi8vdnVlanMub3JnL3YyL2d1aWRlL3RyYW5zaXRpb25zLmh0bWwjVHJhbnNpdGlvbi1Nb2RlcykuXG4gKiBZb3UgY2FuIHVzZSBpdCB3aGVuIHlvdSB3YW50IHRvIGNvbnRyb2wgdGhlIHJlbmRlciBiZXR3ZWVuIHN0YXRlIHRyYW5zaXRpb25zLlxuICogQmFzZWQgb24gdGhlIHNlbGVjdGVkIG1vZGUgYW5kIHRoZSBjaGlsZCdzIGtleSB3aGljaCBpcyB0aGUgYFRyYW5zaXRpb25gIG9yIGBDU1NUcmFuc2l0aW9uYCBjb21wb25lbnQsIHRoZSBgU3dpdGNoVHJhbnNpdGlvbmAgbWFrZXMgYSBjb25zaXN0ZW50IHRyYW5zaXRpb24gYmV0d2VlbiB0aGVtLlxuICpcbiAqIElmIHRoZSBgb3V0LWluYCBtb2RlIGlzIHNlbGVjdGVkLCB0aGUgYFN3aXRjaFRyYW5zaXRpb25gIHdhaXRzIHVudGlsIHRoZSBvbGQgY2hpbGQgbGVhdmVzIGFuZCB0aGVuIGluc2VydHMgYSBuZXcgY2hpbGQuXG4gKiBJZiB0aGUgYGluLW91dGAgbW9kZSBpcyBzZWxlY3RlZCwgdGhlIGBTd2l0Y2hUcmFuc2l0aW9uYCBpbnNlcnRzIGEgbmV3IGNoaWxkIGZpcnN0LCB3YWl0cyBmb3IgdGhlIG5ldyBjaGlsZCB0byBlbnRlciBhbmQgdGhlbiByZW1vdmVzIHRoZSBvbGQgY2hpbGQuXG4gKlxuICogKipOb3RlKio6IElmIHlvdSB3YW50IHRoZSBhbmltYXRpb24gdG8gaGFwcGVuIHNpbXVsdGFuZW91c2x5XG4gKiAodGhhdCBpcywgdG8gaGF2ZSB0aGUgb2xkIGNoaWxkIHJlbW92ZWQgYW5kIGEgbmV3IGNoaWxkIGluc2VydGVkICoqYXQgdGhlIHNhbWUgdGltZSoqKSxcbiAqIHlvdSBzaG91bGQgdXNlXG4gKiBbYFRyYW5zaXRpb25Hcm91cGBdKGh0dHBzOi8vcmVhY3Rjb21tdW5pdHkub3JnL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvdHJhbnNpdGlvbi1ncm91cClcbiAqIGluc3RlYWQuXG4gKlxuICogYGBganN4XG4gKiBmdW5jdGlvbiBBcHAoKSB7XG4gKiAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gKiAgcmV0dXJuIChcbiAqICAgIDxTd2l0Y2hUcmFuc2l0aW9uPlxuICogICAgICA8Q1NTVHJhbnNpdGlvblxuICogICAgICAgIGtleT17c3RhdGUgPyBcIkdvb2RieWUsIHdvcmxkIVwiIDogXCJIZWxsbywgd29ybGQhXCJ9XG4gKiAgICAgICAgYWRkRW5kTGlzdGVuZXI9eyhub2RlLCBkb25lKSA9PiBub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsIGRvbmUsIGZhbHNlKX1cbiAqICAgICAgICBjbGFzc05hbWVzPSdmYWRlJ1xuICogICAgICA+XG4gKiAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXsoKSA9PiBzZXRTdGF0ZShzdGF0ZSA9PiAhc3RhdGUpfT5cbiAqICAgICAgICAgIHtzdGF0ZSA/IFwiR29vZGJ5ZSwgd29ybGQhXCIgOiBcIkhlbGxvLCB3b3JsZCFcIn1cbiAqICAgICAgICA8L2J1dHRvbj5cbiAqICAgICAgPC9DU1NUcmFuc2l0aW9uPlxuICogICAgPC9Td2l0Y2hUcmFuc2l0aW9uPlxuICogICk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBgYGBjc3NcbiAqIC5mYWRlLWVudGVye1xuICogICAgb3BhY2l0eTogMDtcbiAqIH1cbiAqIC5mYWRlLWV4aXR7XG4gKiAgICBvcGFjaXR5OiAxO1xuICogfVxuICogLmZhZGUtZW50ZXItYWN0aXZle1xuICogICAgb3BhY2l0eTogMTtcbiAqIH1cbiAqIC5mYWRlLWV4aXQtYWN0aXZle1xuICogICAgb3BhY2l0eTogMDtcbiAqIH1cbiAqIC5mYWRlLWVudGVyLWFjdGl2ZSxcbiAqIC5mYWRlLWV4aXQtYWN0aXZle1xuICogICAgdHJhbnNpdGlvbjogb3BhY2l0eSA1MDBtcztcbiAqIH1cbiAqIGBgYFxuICovXG5cbnZhciBTd2l0Y2hUcmFuc2l0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKFN3aXRjaFRyYW5zaXRpb24sIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN3aXRjaFRyYW5zaXRpb24oKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsLmFwcGx5KF9SZWFjdCRDb21wb25lbnQsIFt0aGlzXS5jb25jYXQoYXJncykpIHx8IHRoaXM7XG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBzdGF0dXM6IEVOVEVSRUQsXG4gICAgICBjdXJyZW50OiBudWxsXG4gICAgfTtcbiAgICBfdGhpcy5hcHBlYXJlZCA9IGZhbHNlO1xuXG4gICAgX3RoaXMuY2hhbmdlU3RhdGUgPSBmdW5jdGlvbiAoc3RhdHVzLCBjdXJyZW50KSB7XG4gICAgICBpZiAoY3VycmVudCA9PT0gdm9pZCAwKSB7XG4gICAgICAgIGN1cnJlbnQgPSBfdGhpcy5zdGF0ZS5jdXJyZW50O1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHN0YXR1czogc3RhdHVzLFxuICAgICAgICBjdXJyZW50OiBjdXJyZW50XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN3aXRjaFRyYW5zaXRpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMuYXBwZWFyZWQgPSB0cnVlO1xuICB9O1xuXG4gIFN3aXRjaFRyYW5zaXRpb24uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHByb3BzLCBzdGF0ZSkge1xuICAgIGlmIChwcm9wcy5jaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjdXJyZW50OiBudWxsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS5zdGF0dXMgPT09IEVOVEVSSU5HICYmIHByb3BzLm1vZGUgPT09IG1vZGVzLmluKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IEVOVEVSSU5HXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS5jdXJyZW50ICYmIGFyZUNoaWxkcmVuRGlmZmVyZW50KHN0YXRlLmN1cnJlbnQsIHByb3BzLmNoaWxkcmVuKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBFWElUSU5HXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50OiBSZWFjdC5jbG9uZUVsZW1lbnQocHJvcHMuY2hpbGRyZW4sIHtcbiAgICAgICAgaW46IHRydWVcbiAgICAgIH0pXG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIG1vZGUgPSBfdGhpcyRwcm9wcy5tb2RlLFxuICAgICAgICBfdGhpcyRzdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgICAgIHN0YXR1cyA9IF90aGlzJHN0YXRlLnN0YXR1cyxcbiAgICAgICAgY3VycmVudCA9IF90aGlzJHN0YXRlLmN1cnJlbnQ7XG4gICAgdmFyIGRhdGEgPSB7XG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgICBjdXJyZW50OiBjdXJyZW50LFxuICAgICAgY2hhbmdlU3RhdGU6IHRoaXMuY2hhbmdlU3RhdGUsXG4gICAgICBzdGF0dXM6IHN0YXR1c1xuICAgIH07XG4gICAgdmFyIGNvbXBvbmVudDtcblxuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlIEVOVEVSSU5HOlxuICAgICAgICBjb21wb25lbnQgPSBlbnRlclJlbmRlcnNbbW9kZV0oZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEVYSVRJTkc6XG4gICAgICAgIGNvbXBvbmVudCA9IGxlYXZlUmVuZGVyc1ttb2RlXShkYXRhKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgRU5URVJFRDpcbiAgICAgICAgY29tcG9uZW50ID0gY3VycmVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgdmFsdWU6IHtcbiAgICAgICAgaXNNb3VudGluZzogIXRoaXMuYXBwZWFyZWRcbiAgICAgIH1cbiAgICB9LCBjb21wb25lbnQpO1xuICB9O1xuXG4gIHJldHVybiBTd2l0Y2hUcmFuc2l0aW9uO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5Td2l0Y2hUcmFuc2l0aW9uLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgLyoqXG4gICAqIFRyYW5zaXRpb24gbW9kZXMuXG4gICAqIGBvdXQtaW5gOiBDdXJyZW50IGVsZW1lbnQgdHJhbnNpdGlvbnMgb3V0IGZpcnN0LCB0aGVuIHdoZW4gY29tcGxldGUsIHRoZSBuZXcgZWxlbWVudCB0cmFuc2l0aW9ucyBpbi5cbiAgICogYGluLW91dGA6IE5ldyBlbGVtZW50IHRyYW5zaXRpb25zIGluIGZpcnN0LCB0aGVuIHdoZW4gY29tcGxldGUsIHRoZSBjdXJyZW50IGVsZW1lbnQgdHJhbnNpdGlvbnMgb3V0LlxuICAgKlxuICAgKiBAdHlwZSB7J291dC1pbid8J2luLW91dCd9XG4gICAqL1xuICBtb2RlOiBQcm9wVHlwZXMub25lT2YoW21vZGVzLmluLCBtb2Rlcy5vdXRdKSxcblxuICAvKipcbiAgICogQW55IGBUcmFuc2l0aW9uYCBvciBgQ1NTVHJhbnNpdGlvbmAgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKVxufSA6IHt9O1xuU3dpdGNoVHJhbnNpdGlvbi5kZWZhdWx0UHJvcHMgPSB7XG4gIG1vZGU6IG1vZGVzLm91dFxufTtcbmV4cG9ydCBkZWZhdWx0IFN3aXRjaFRyYW5zaXRpb247IiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgY3JlYXRlU2VsZWN0aW9uQ29udGV4dCxcbiAgU2VsZWN0aW9uQ29udGV4dFZhbHVlLFxufSBmcm9tIFwiLi4vY29udGV4dHMvc2VsZWN0aW9uLWNvbnRleHRcIjtcblxuaW50ZXJmYWNlIFByb3BzIGV4dGVuZHMgU2VsZWN0aW9uQ29udGV4dFZhbHVlIHsgfVxuXG5jb25zdCBTZWxlY3Rpb25Db250ZXh0ID0gY3JlYXRlU2VsZWN0aW9uQ29udGV4dCgpO1xuXG5jb25zdCB3aXRoU2VsZWN0aW9uQ29udGV4dCA9XG4gIChDb21wb25lbnQ6IFJlYWN0LkNvbXBvbmVudFR5cGU8UHJvcHM+KSA9PiAocHJvcHM6IGFueSkgPT4gKFxuICAgIDxTZWxlY3Rpb25Db250ZXh0LkNvbnN1bWVyPlxuICAgICAgeyhzZWxlY3RSb3cpID0+IDxDb21wb25lbnQgey4uLnByb3BzfSB7Li4uc2VsZWN0Um93fSAvPn1cbiAgICA8L1NlbGVjdGlvbkNvbnRleHQuQ29uc3VtZXI+XG4gICk7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTZWxlY3Rpb25Db250ZXh0O1xuIiwiZXhwb3J0IGNvbnN0IFJPV19TRUxFQ1RfU0lOR0xFID0gXCJyYWRpb1wiO1xuZXhwb3J0IGNvbnN0IFJPV19TRUxFQ1RfTVVMVElQTEUgPSBcImNoZWNrYm94XCI7XG5leHBvcnQgY29uc3QgUk9XX1NFTEVDVF9ESVNBQkxFRCA9IFwiUk9XX1NFTEVDVF9ESVNBQkxFRFwiO1xuZXhwb3J0IGNvbnN0IENIRUNLQk9YX1NUQVRVU19JTkRFVEVSTUlOQVRFID0gXCJpbmRldGVybWluYXRlXCI7XG5leHBvcnQgY29uc3QgQ0hFQ0tCT1hfU1RBVFVTX0NIRUNLRUQgPSBcImNoZWNrZWRcIjtcbmV4cG9ydCBjb25zdCBDSEVDS0JPWF9TVEFUVVNfVU5DSEVDS0VEID0gXCJ1bmNoZWNrZWRcIjtcbmV4cG9ydCBjb25zdCBGSUxURVJTX1BPU0lUSU9OX0lOTElORSA9IFwiaW5saW5lXCI7XG5leHBvcnQgY29uc3QgRklMVEVSU19QT1NJVElPTl9UT1AgPSBcInRvcFwiO1xuZXhwb3J0IGNvbnN0IEZJTFRFUlNfUE9TSVRJT05fQk9UVE9NID0gXCJib3R0b21cIjtcblxuZXhwb3J0IGNvbnN0IFNPUlRfQVNDID0gXCJhc2NcIjtcbmV4cG9ydCBjb25zdCBTT1JUX0RFU0MgPSBcImRlc2NcIjtcbmV4cG9ydCBjb25zdCBJTkRJQ0FUT1JfUE9TSVRJT05fTEVGVCA9IFwibGVmdFwiO1xuZXhwb3J0IGNvbnN0IElORElDQVRPUl9QT1NJVElPTl9SSUdIVCA9IFwicmlnaHRcIjtcbmV4cG9ydCBjb25zdCBUWVBFX1NUUklORyA9IFwic3RyaW5nXCI7XG5leHBvcnQgY29uc3QgVFlQRV9OVU1CRVIgPSBcIm51bWJlclwiO1xuZXhwb3J0IGNvbnN0IFRZUEVfQk9PTEVBTiA9IFwiYm9vbFwiO1xuZXhwb3J0IGNvbnN0IFRZUEVfREFURSA9IFwiZGF0ZVwiO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNyZWF0ZUV4cGFuc2lvbkNvbnRleHQsIHtcbiAgUm93RXhwYW5kQ29udGV4dFZhbHVlLFxufSBmcm9tIFwiLi4vY29udGV4dHMvcm93LWV4cGFuZC1jb250ZXh0XCI7XG5pbXBvcnQgeyBFeHBhbnNpb25IZWFkZXJDZWxsUHJvcHMgfSBmcm9tIFwiLi9leHBhbmQtaGVhZGVyLWNlbGxcIjtcblxuaW50ZXJmYWNlIFByb3BzIGV4dGVuZHMgRXhwYW5zaW9uSGVhZGVyQ2VsbFByb3BzIHtcbiAgZXhwYW5kUm93PzogUm93RXhwYW5kQ29udGV4dFZhbHVlO1xufVxuXG5jb25zdCBFeHBhbnNpb25Db250ZXh0ID0gY3JlYXRlRXhwYW5zaW9uQ29udGV4dCgpO1xuXG5jb25zdCB3aXRoRXhwYW5kQ29udGV4dCA9IChDb21wb25lbnQ6IFJlYWN0LkNvbXBvbmVudFR5cGU8UHJvcHM+KSA9PiAoKSA9PlxuICAoXG4gICAgPEV4cGFuc2lvbkNvbnRleHQuQ29uc3VtZXI+XG4gICAgICB7KGV4cGFuZFJvdykgPT4gPENvbXBvbmVudCB7IC4uLiBleHBhbmRSb3cgfSAvPn1cbiAgICA8L0V4cGFuc2lvbkNvbnRleHQuQ29uc3VtZXI+XG4gICk7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhFeHBhbmRDb250ZXh0O1xuIiwiaW1wb3J0ICogYXMgZXhwYW5kIGZyb20gXCIuL2V4cGFuZFwiO1xuaW1wb3J0ICogYXMgbXV0YXRlIGZyb20gXCIuL211dGF0ZVwiO1xuaW1wb3J0ICogYXMgcm93cyBmcm9tIFwiLi9yb3dzXCI7XG5pbXBvcnQgKiBhcyBzZWxlY3Rpb24gZnJvbSBcIi4vc2VsZWN0aW9uXCI7XG5pbXBvcnQgKiBhcyBzb3J0IGZyb20gXCIuL3NvcnRcIjtcbmltcG9ydCAqIGFzIHR5cGUgZnJvbSBcIi4vdHlwZVwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIC4uLnJvd3MsXG4gIC4uLnNlbGVjdGlvbixcbiAgLi4uZXhwYW5kLFxuICAuLi5tdXRhdGUsXG4gIC4uLnNvcnQsXG4gIC4uLnR5cGUsXG59O1xuIiwiLyohXG5cdENvcHlyaWdodCAoYykgMjAxOCBKZWQgV2F0c29uLlxuXHRMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZVxuXHRodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXG4qL1xuLyogZ2xvYmFsIGRlZmluZSAqL1xuXG4oZnVuY3Rpb24gKCkge1xuXHQndXNlIHN0cmljdCc7XG5cblx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG5cdGZ1bmN0aW9uIGNsYXNzTmFtZXMgKCkge1xuXHRcdHZhciBjbGFzc2VzID0gJyc7XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGlmIChhcmcpIHtcblx0XHRcdFx0Y2xhc3NlcyA9IGFwcGVuZENsYXNzKGNsYXNzZXMsIHBhcnNlVmFsdWUoYXJnKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBwYXJzZVZhbHVlIChhcmcpIHtcblx0XHRpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcblx0XHRcdHJldHVybiBhcmc7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBhcmcgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXMuYXBwbHkobnVsbCwgYXJnKTtcblx0XHR9XG5cblx0XHRpZiAoYXJnLnRvU3RyaW5nICE9PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nICYmICFhcmcudG9TdHJpbmcudG9TdHJpbmcoKS5pbmNsdWRlcygnW25hdGl2ZSBjb2RlXScpKSB7XG5cdFx0XHRyZXR1cm4gYXJnLnRvU3RyaW5nKCk7XG5cdFx0fVxuXG5cdFx0dmFyIGNsYXNzZXMgPSAnJztcblxuXHRcdGZvciAodmFyIGtleSBpbiBhcmcpIHtcblx0XHRcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcblx0XHRcdFx0Y2xhc3NlcyA9IGFwcGVuZENsYXNzKGNsYXNzZXMsIGtleSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBhcHBlbmRDbGFzcyAodmFsdWUsIG5ld0NsYXNzKSB7XG5cdFx0aWYgKCFuZXdDbGFzcykge1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0XG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgKyAnICcgKyBuZXdDbGFzcztcblx0XHR9XG5cdFxuXHRcdHJldHVybiB2YWx1ZSArIG5ld0NsYXNzO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0Y2xhc3NOYW1lcy5kZWZhdWx0ID0gY2xhc3NOYW1lcztcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIHJlZ2lzdGVyIGFzICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWVcblx0XHRkZWZpbmUoJ2NsYXNzbmFtZXMnLCBbXSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXM7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xuXHR9XG59KCkpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFIgPSB0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgPyBSZWZsZWN0IDogbnVsbFxudmFyIFJlZmxlY3RBcHBseSA9IFIgJiYgdHlwZW9mIFIuYXBwbHkgPT09ICdmdW5jdGlvbidcbiAgPyBSLmFwcGx5XG4gIDogZnVuY3Rpb24gUmVmbGVjdEFwcGx5KHRhcmdldCwgcmVjZWl2ZXIsIGFyZ3MpIHtcbiAgICByZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwodGFyZ2V0LCByZWNlaXZlciwgYXJncyk7XG4gIH1cblxudmFyIFJlZmxlY3RPd25LZXlzXG5pZiAoUiAmJiB0eXBlb2YgUi5vd25LZXlzID09PSAnZnVuY3Rpb24nKSB7XG4gIFJlZmxlY3RPd25LZXlzID0gUi5vd25LZXlzXG59IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgUmVmbGVjdE93bktleXMgPSBmdW5jdGlvbiBSZWZsZWN0T3duS2V5cyh0YXJnZXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KVxuICAgICAgLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRhcmdldCkpO1xuICB9O1xufSBlbHNlIHtcbiAgUmVmbGVjdE93bktleXMgPSBmdW5jdGlvbiBSZWZsZWN0T3duS2V5cyh0YXJnZXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gUHJvY2Vzc0VtaXRXYXJuaW5nKHdhcm5pbmcpIHtcbiAgaWYgKGNvbnNvbGUgJiYgY29uc29sZS53YXJuKSBjb25zb2xlLndhcm4od2FybmluZyk7XG59XG5cbnZhciBOdW1iZXJJc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiBOdW1iZXJJc05hTih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIEV2ZW50RW1pdHRlci5pbml0LmNhbGwodGhpcyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbm1vZHVsZS5leHBvcnRzLm9uY2UgPSBvbmNlO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50c0NvdW50ID0gMDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxudmFyIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuZnVuY3Rpb24gY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcikge1xuICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwibGlzdGVuZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBsaXN0ZW5lcik7XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50RW1pdHRlciwgJ2RlZmF1bHRNYXhMaXN0ZW5lcnMnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24oYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09ICdudW1iZXInIHx8IGFyZyA8IDAgfHwgTnVtYmVySXNOYU4oYXJnKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcImRlZmF1bHRNYXhMaXN0ZW5lcnNcIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgYXJnICsgJy4nKTtcbiAgICB9XG4gICAgZGVmYXVsdE1heExpc3RlbmVycyA9IGFyZztcbiAgfVxufSk7XG5cbkV2ZW50RW1pdHRlci5pbml0ID0gZnVuY3Rpb24oKSB7XG5cbiAgaWYgKHRoaXMuX2V2ZW50cyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLl9ldmVudHMgPT09IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzKSB7XG4gICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSB0aGlzLl9tYXhMaXN0ZW5lcnMgfHwgdW5kZWZpbmVkO1xufTtcblxuLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXG4vLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gc2V0TWF4TGlzdGVuZXJzKG4pIHtcbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJyB8fCBuIDwgMCB8fCBOdW1iZXJJc05hTihuKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJuXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIG4gKyAnLicpO1xuICB9XG4gIHRoaXMuX21heExpc3RlbmVycyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gX2dldE1heExpc3RlbmVycyh0aGF0KSB7XG4gIGlmICh0aGF0Ll9tYXhMaXN0ZW5lcnMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIHJldHVybiB0aGF0Ll9tYXhMaXN0ZW5lcnM7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gZ2V0TWF4TGlzdGVuZXJzKCkge1xuICByZXR1cm4gX2dldE1heExpc3RlbmVycyh0aGlzKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQodHlwZSkge1xuICB2YXIgYXJncyA9IFtdO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gIHZhciBkb0Vycm9yID0gKHR5cGUgPT09ICdlcnJvcicpO1xuXG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZClcbiAgICBkb0Vycm9yID0gKGRvRXJyb3IgJiYgZXZlbnRzLmVycm9yID09PSB1bmRlZmluZWQpO1xuICBlbHNlIGlmICghZG9FcnJvcilcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8gSWYgdGhlcmUgaXMgbm8gJ2Vycm9yJyBldmVudCBsaXN0ZW5lciB0aGVuIHRocm93LlxuICBpZiAoZG9FcnJvcikge1xuICAgIHZhciBlcjtcbiAgICBpZiAoYXJncy5sZW5ndGggPiAwKVxuICAgICAgZXIgPSBhcmdzWzBdO1xuICAgIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAvLyBOb3RlOiBUaGUgY29tbWVudHMgb24gdGhlIGB0aHJvd2AgbGluZXMgYXJlIGludGVudGlvbmFsLCB0aGV5IHNob3dcbiAgICAgIC8vIHVwIGluIE5vZGUncyBvdXRwdXQgaWYgdGhpcyByZXN1bHRzIGluIGFuIHVuaGFuZGxlZCBleGNlcHRpb24uXG4gICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgICB9XG4gICAgLy8gQXQgbGVhc3QgZ2l2ZSBzb21lIGtpbmQgb2YgY29udGV4dCB0byB0aGUgdXNlclxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ1VuaGFuZGxlZCBlcnJvci4nICsgKGVyID8gJyAoJyArIGVyLm1lc3NhZ2UgKyAnKScgOiAnJykpO1xuICAgIGVyci5jb250ZXh0ID0gZXI7XG4gICAgdGhyb3cgZXJyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICB9XG5cbiAgdmFyIGhhbmRsZXIgPSBldmVudHNbdHlwZV07XG5cbiAgaWYgKGhhbmRsZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgUmVmbGVjdEFwcGx5KGhhbmRsZXIsIHRoaXMsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW4gPSBoYW5kbGVyLmxlbmd0aDtcbiAgICB2YXIgbGlzdGVuZXJzID0gYXJyYXlDbG9uZShoYW5kbGVyLCBsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpXG4gICAgICBSZWZsZWN0QXBwbHkobGlzdGVuZXJzW2ldLCB0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gX2FkZExpc3RlbmVyKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIsIHByZXBlbmQpIHtcbiAgdmFyIG07XG4gIHZhciBldmVudHM7XG4gIHZhciBleGlzdGluZztcblxuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRhcmdldC5fZXZlbnRzQ291bnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09IFwibmV3TGlzdGVuZXJcIiEgQmVmb3JlXG4gICAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lclwiLlxuICAgIGlmIChldmVudHMubmV3TGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFyZ2V0LmVtaXQoJ25ld0xpc3RlbmVyJywgdHlwZSxcbiAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyID8gbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7XG5cbiAgICAgIC8vIFJlLWFzc2lnbiBgZXZlbnRzYCBiZWNhdXNlIGEgbmV3TGlzdGVuZXIgaGFuZGxlciBjb3VsZCBoYXZlIGNhdXNlZCB0aGVcbiAgICAgIC8vIHRoaXMuX2V2ZW50cyB0byBiZSBhc3NpZ25lZCB0byBhIG5ldyBvYmplY3RcbiAgICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICAgIH1cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXTtcbiAgfVxuXG4gIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgICArK3RhcmdldC5fZXZlbnRzQ291bnQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBleGlzdGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gQWRkaW5nIHRoZSBzZWNvbmQgZWxlbWVudCwgbmVlZCB0byBjaGFuZ2UgdG8gYXJyYXkuXG4gICAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9XG4gICAgICAgIHByZXBlbmQgPyBbbGlzdGVuZXIsIGV4aXN0aW5nXSA6IFtleGlzdGluZywgbGlzdGVuZXJdO1xuICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxuICAgIH0gZWxzZSBpZiAocHJlcGVuZCkge1xuICAgICAgZXhpc3RpbmcudW5zaGlmdChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4aXN0aW5nLnB1c2gobGlzdGVuZXIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBsaXN0ZW5lciBsZWFrXG4gICAgbSA9IF9nZXRNYXhMaXN0ZW5lcnModGFyZ2V0KTtcbiAgICBpZiAobSA+IDAgJiYgZXhpc3RpbmcubGVuZ3RoID4gbSAmJiAhZXhpc3Rpbmcud2FybmVkKSB7XG4gICAgICBleGlzdGluZy53YXJuZWQgPSB0cnVlO1xuICAgICAgLy8gTm8gZXJyb3IgY29kZSBmb3IgdGhpcyBzaW5jZSBpdCBpcyBhIFdhcm5pbmdcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgdmFyIHcgPSBuZXcgRXJyb3IoJ1Bvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmxlbmd0aCArICcgJyArIFN0cmluZyh0eXBlKSArICcgbGlzdGVuZXJzICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5jcmVhc2UgbGltaXQnKTtcbiAgICAgIHcubmFtZSA9ICdNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmcnO1xuICAgICAgdy5lbWl0dGVyID0gdGFyZ2V0O1xuICAgICAgdy50eXBlID0gdHlwZTtcbiAgICAgIHcuY291bnQgPSBleGlzdGluZy5sZW5ndGg7XG4gICAgICBQcm9jZXNzRW1pdFdhcm5pbmcodyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCB0cnVlKTtcbiAgICB9O1xuXG5mdW5jdGlvbiBvbmNlV3JhcHBlcigpIHtcbiAgaWYgKCF0aGlzLmZpcmVkKSB7XG4gICAgdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLCB0aGlzLndyYXBGbik7XG4gICAgdGhpcy5maXJlZCA9IHRydWU7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTtcbiAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCwgYXJndW1lbnRzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfb25jZVdyYXAodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgc3RhdGUgPSB7IGZpcmVkOiBmYWxzZSwgd3JhcEZuOiB1bmRlZmluZWQsIHRhcmdldDogdGFyZ2V0LCB0eXBlOiB0eXBlLCBsaXN0ZW5lcjogbGlzdGVuZXIgfTtcbiAgdmFyIHdyYXBwZWQgPSBvbmNlV3JhcHBlci5iaW5kKHN0YXRlKTtcbiAgd3JhcHBlZC5saXN0ZW5lciA9IGxpc3RlbmVyO1xuICBzdGF0ZS53cmFwRm4gPSB3cmFwcGVkO1xuICByZXR1cm4gd3JhcHBlZDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZSh0eXBlLCBsaXN0ZW5lcikge1xuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcbiAgdGhpcy5vbih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHByZXBlbmRPbmNlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgdGhpcy5wcmVwZW5kTGlzdGVuZXIodHlwZSwgX29uY2VXcmFwKHRoaXMsIHR5cGUsIGxpc3RlbmVyKSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4vLyBFbWl0cyBhICdyZW1vdmVMaXN0ZW5lcicgZXZlbnQgaWYgYW5kIG9ubHkgaWYgdGhlIGxpc3RlbmVyIHdhcyByZW1vdmVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHZhciBsaXN0LCBldmVudHMsIHBvc2l0aW9uLCBpLCBvcmlnaW5hbExpc3RlbmVyO1xuXG4gICAgICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgbGlzdCA9IGV2ZW50c1t0eXBlXTtcbiAgICAgIGlmIChsaXN0ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBpZiAobGlzdCA9PT0gbGlzdGVuZXIgfHwgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3QubGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsaXN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHBvc2l0aW9uID0gLTE7XG5cbiAgICAgICAgZm9yIChpID0gbGlzdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGlmIChsaXN0W2ldID09PSBsaXN0ZW5lciB8fCBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgb3JpZ2luYWxMaXN0ZW5lciA9IGxpc3RbaV0ubGlzdGVuZXI7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zaXRpb24gPCAwKVxuICAgICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gMClcbiAgICAgICAgICBsaXN0LnNoaWZ0KCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHNwbGljZU9uZShsaXN0LCBwb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpXG4gICAgICAgICAgZXZlbnRzW3R5cGVdID0gbGlzdFswXTtcblxuICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIG9yaWdpbmFsTGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID1cbiAgICBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnModHlwZSkge1xuICAgICAgdmFyIGxpc3RlbmVycywgZXZlbnRzLCBpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0XG4gICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudHNbdHlwZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICAvLyBlbWl0IHJlbW92ZUxpc3RlbmVyIGZvciBhbGwgbGlzdGVuZXJzIG9uIGFsbCBldmVudHNcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZXZlbnRzKTtcbiAgICAgICAgdmFyIGtleTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmIChrZXkgPT09ICdyZW1vdmVMaXN0ZW5lcicpIGNvbnRpbnVlO1xuICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlbW92ZUxpc3RlbmVyJyk7XG4gICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIGxpc3RlbmVycyA9IGV2ZW50c1t0eXBlXTtcblxuICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpO1xuICAgICAgfSBlbHNlIGlmIChsaXN0ZW5lcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBMSUZPIG9yZGVyXG4gICAgICAgIGZvciAoaSA9IGxpc3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5mdW5jdGlvbiBfbGlzdGVuZXJzKHRhcmdldCwgdHlwZSwgdW53cmFwKSB7XG4gIHZhciBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuICBpZiAoZXZsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpXG4gICAgcmV0dXJuIHVud3JhcCA/IFtldmxpc3RlbmVyLmxpc3RlbmVyIHx8IGV2bGlzdGVuZXJdIDogW2V2bGlzdGVuZXJdO1xuXG4gIHJldHVybiB1bndyYXAgP1xuICAgIHVud3JhcExpc3RlbmVycyhldmxpc3RlbmVyKSA6IGFycmF5Q2xvbmUoZXZsaXN0ZW5lciwgZXZsaXN0ZW5lci5sZW5ndGgpO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIGxpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIHRydWUpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnMgPSBmdW5jdGlvbiByYXdMaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLmxpc3RlbmVyQ291bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZW1pdHRlci5saXN0ZW5lckNvdW50KHR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsaXN0ZW5lckNvdW50LmNhbGwoZW1pdHRlciwgdHlwZSk7XG4gIH1cbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGxpc3RlbmVyQ291bnQ7XG5mdW5jdGlvbiBsaXN0ZW5lckNvdW50KHR5cGUpIHtcbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcblxuICAgIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmIChldmxpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBldmxpc3RlbmVyLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgcmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50ID4gMCA/IFJlZmxlY3RPd25LZXlzKHRoaXMuX2V2ZW50cykgOiBbXTtcbn07XG5cbmZ1bmN0aW9uIGFycmF5Q2xvbmUoYXJyLCBuKSB7XG4gIHZhciBjb3B5ID0gbmV3IEFycmF5KG4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSlcbiAgICBjb3B5W2ldID0gYXJyW2ldO1xuICByZXR1cm4gY29weTtcbn1cblxuZnVuY3Rpb24gc3BsaWNlT25lKGxpc3QsIGluZGV4KSB7XG4gIGZvciAoOyBpbmRleCArIDEgPCBsaXN0Lmxlbmd0aDsgaW5kZXgrKylcbiAgICBsaXN0W2luZGV4XSA9IGxpc3RbaW5kZXggKyAxXTtcbiAgbGlzdC5wb3AoKTtcbn1cblxuZnVuY3Rpb24gdW53cmFwTGlzdGVuZXJzKGFycikge1xuICB2YXIgcmV0ID0gbmV3IEFycmF5KGFyci5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJldC5sZW5ndGg7ICsraSkge1xuICAgIHJldFtpXSA9IGFycltpXS5saXN0ZW5lciB8fCBhcnJbaV07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gb25jZShlbWl0dGVyLCBuYW1lKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgZnVuY3Rpb24gZXJyb3JMaXN0ZW5lcihlcnIpIHtcbiAgICAgIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIobmFtZSwgcmVzb2x2ZXIpO1xuICAgICAgcmVqZWN0KGVycik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzb2x2ZXIoKSB7XG4gICAgICBpZiAodHlwZW9mIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBlcnJvckxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG4gICAgZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsIG5hbWUsIHJlc29sdmVyLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgaWYgKG5hbWUgIT09ICdlcnJvcicpIHtcbiAgICAgIGFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyKGVtaXR0ZXIsIGVycm9yTGlzdGVuZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlcihlbWl0dGVyLCBoYW5kbGVyLCBmbGFncykge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgJ2Vycm9yJywgaGFuZGxlciwgZmxhZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCBuYW1lLCBsaXN0ZW5lciwgZmxhZ3MpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLm9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKGZsYWdzLm9uY2UpIHtcbiAgICAgIGVtaXR0ZXIub25jZShuYW1lLCBsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVtaXR0ZXIub24obmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gRXZlbnRUYXJnZXQgZG9lcyBub3QgaGF2ZSBgZXJyb3JgIGV2ZW50IHNlbWFudGljcyBsaWtlIE5vZGVcbiAgICAvLyBFdmVudEVtaXR0ZXJzLCB3ZSBkbyBub3QgbGlzdGVuIGZvciBgZXJyb3JgIGV2ZW50cyBoZXJlLlxuICAgIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBmdW5jdGlvbiB3cmFwTGlzdGVuZXIoYXJnKSB7XG4gICAgICAvLyBJRSBkb2VzIG5vdCBoYXZlIGJ1aWx0aW4gYHsgb25jZTogdHJ1ZSB9YCBzdXBwb3J0IHNvIHdlXG4gICAgICAvLyBoYXZlIHRvIGRvIGl0IG1hbnVhbGx5LlxuICAgICAgaWYgKGZsYWdzLm9uY2UpIHtcbiAgICAgICAgZW1pdHRlci5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIHdyYXBMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgICBsaXN0ZW5lcihhcmcpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImVtaXR0ZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRXZlbnRFbWl0dGVyLiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2YgZW1pdHRlcik7XG4gIH1cbn1cbiIsImltcG9ydCB7IFJPV19TRUxFQ1RfRElTQUJMRUQgfSBmcm9tIFwiLi4vY29uc3RcIjtcbmltcG9ydCBfIGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBldmVudHM6IHN0cmluZ1tdID0gW1xuICBcIm9uQ2xpY2tcIixcbiAgXCJvbkRvdWJsZUNsaWNrXCIsXG4gIFwib25Nb3VzZUVudGVyXCIsXG4gIFwib25Nb3VzZUxlYXZlXCIsXG4gIFwib25Db250ZXh0TWVudVwiLFxuICBcIm9uQXV4Q2xpY2tcIixcbl07XG5cbmludGVyZmFjZSBSb3dFdmVudERlbGVnYXRlclByb3BzIHtcbiAgcm93OiBhbnk7XG4gIHNlbGVjdGVkOiBib29sZWFuO1xuICBrZXlGaWVsZDogc3RyaW5nO1xuICBzZWxlY3RhYmxlOiBib29sZWFuO1xuICBleHBhbmRhYmxlOiBib29sZWFuO1xuICByb3dJbmRleDogbnVtYmVyO1xuICBleHBhbmRlZDogYm9vbGVhbjtcbiAgZXhwYW5kUm93OiBhbnk7XG4gIHNlbGVjdFJvdzogYW55O1xuICBERUxBWV9GT1JfREJDTElDSzogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgUm93RXZlbnREZWxlZ2F0ZXIgPSA8XG4gIFQgZXh0ZW5kcyBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnlcbj4oRXh0ZW5kQmFzZTogVCkgPT4ge1xuICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBFeHRlbmRCYXNlIHtcbiAgICBjbGlja051bTogbnVtYmVyID0gMDtcblxuICAgIGNvbnN0cnVjdG9yKC4uLnByb3BzOiBhbnlbXSkge1xuICAgICAgc3VwZXIoLi4ucHJvcHMpO1xuICAgICAgdGhpcy5jcmVhdGVEZWZhdWx0RXZlbnRIYW5kbGVyID1cbiAgICAgICAgdGhpcy5jcmVhdGVEZWZhdWx0RXZlbnRIYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmNyZWF0ZUNsaWNrRXZlbnRIYW5kbGVyID0gdGhpcy5jcmVhdGVDbGlja0V2ZW50SGFuZGxlci5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGNyZWF0ZUNsaWNrRXZlbnRIYW5kbGVyKFxuICAgICAgY2I6IChlOiBFdmVudCwgcm93OiBhbnksIHJvd0luZGV4OiBudW1iZXIpID0+IHZvaWRcbiAgICApIHtcbiAgICAgIHJldHVybiAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHJvdyxcbiAgICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgICBrZXlGaWVsZCxcbiAgICAgICAgICBzZWxlY3RhYmxlLFxuICAgICAgICAgIGV4cGFuZGFibGUsXG4gICAgICAgICAgcm93SW5kZXgsXG4gICAgICAgICAgZXhwYW5kZWQsXG4gICAgICAgICAgZXhwYW5kUm93LFxuICAgICAgICAgIHNlbGVjdFJvdyxcbiAgICAgICAgICBERUxBWV9GT1JfREJDTElDSyxcbiAgICAgICAgfTogUm93RXZlbnREZWxlZ2F0ZXJQcm9wcyA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgY29uc3QgY2xpY2tGbiA9ICgpID0+IHtcbiAgICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICAgIGNiKGUsIHJvdywgcm93SW5kZXgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGtleSA9IF8uZ2V0KHJvdywga2V5RmllbGQpO1xuXG4gICAgICAgICAgaWYgKGV4cGFuZFJvdyAmJiBleHBhbmRhYmxlICYmICFleHBhbmRSb3cuZXhwYW5kQnlDb2x1bW5Pbmx5KSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIChzZWxlY3RSb3cubW9kZSAhPT0gUk9XX1NFTEVDVF9ESVNBQkxFRCAmJlxuICAgICAgICAgICAgICAgIHNlbGVjdFJvdy5jbGlja1RvRXhwYW5kKSB8fFxuICAgICAgICAgICAgICBzZWxlY3RSb3cubW9kZSA9PT0gUk9XX1NFTEVDVF9ESVNBQkxFRFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGV4cGFuZFJvdy5vblJvd0V4cGFuZChrZXksICFleHBhbmRlZCwgcm93SW5kZXgsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZWxlY3RSb3cuY2xpY2tUb1NlbGVjdCAmJiBzZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICBzZWxlY3RSb3cub25Sb3dTZWxlY3Qoa2V5LCAhc2VsZWN0ZWQsIHJvd0luZGV4LCBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKERFTEFZX0ZPUl9EQkNMSUNLKSB7XG4gICAgICAgICAgdGhpcy5jbGlja051bSArPSAxO1xuICAgICAgICAgIF8uZGVib3VuY2UoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xpY2tOdW0gPT09IDEpIHtcbiAgICAgICAgICAgICAgY2xpY2tGbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jbGlja051bSA9IDA7XG4gICAgICAgICAgfSwgREVMQVlfRk9SX0RCQ0xJQ0spKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2xpY2tGbigpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIGNyZWF0ZURlZmF1bHRFdmVudEhhbmRsZXIoXG4gICAgICBjYjogKGU6IEV2ZW50LCByb3c6IGFueSwgcm93SW5kZXg6IG51bWJlcikgPT4gdm9pZFxuICAgICkge1xuICAgICAgcmV0dXJuIChlOiBFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCB7IHJvdywgcm93SW5kZXggfTogUm93RXZlbnREZWxlZ2F0ZXJQcm9wcyA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNiKGUsIHJvdywgcm93SW5kZXgpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBkZWxlZ2F0ZShhdHRyczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9KTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgICBjb25zdCBuZXdBdHRyczogUmVjb3JkPHN0cmluZywgYW55PiA9IHsgLi4uYXR0cnMgfTtcbiAgICAgIE9iamVjdC5rZXlzKGF0dHJzKS5mb3JFYWNoKChhdHRyKSA9PiB7XG4gICAgICAgIGlmIChfLmluY2x1ZGVzKGV2ZW50cywgYXR0cikpIHtcbiAgICAgICAgICBuZXdBdHRyc1thdHRyXSA9IHRoaXMuY3JlYXRlRGVmYXVsdEV2ZW50SGFuZGxlcihhdHRyc1thdHRyXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ld0F0dHJzO1xuICAgIH1cbiAgfTtcbn1cbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgQ0hFQ0tCT1hfU1RBVFVTX0NIRUNLRUQsXG4gIENIRUNLQk9YX1NUQVRVU19JTkRFVEVSTUlOQVRFLFxuICBST1dfU0VMRUNUX01VTFRJUExFLFxuICBST1dfU0VMRUNUX1NJTkdMRSxcbn0gZnJvbSBcIi4uL2NvbnN0XCI7XG5pbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IEJvb3RzdHJhcENvbnRleHQgfSBmcm9tIFwiLi4vY29udGV4dHMvYm9vdHN0cmFwXCI7XG5cbmludGVyZmFjZSBDaGVja0JveFByb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjaGVja2VkOiBib29sZWFuO1xuICBpbmRldGVybWluYXRlOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgQ2hlY2tCb3g6IFJlYWN0LkZDPENoZWNrQm94UHJvcHM+ID0gKHtcbiAgY2xhc3NOYW1lLFxuICBjaGVja2VkLFxuICBpbmRldGVybWluYXRlLFxufSkgPT4gKFxuICA8aW5wdXRcbiAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgIGNoZWNrZWQ9e2NoZWNrZWR9XG4gICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgcmVmPXsoaW5wdXQpID0+IHtcbiAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICBpbnB1dC5pbmRldGVybWluYXRlID0gaW5kZXRlcm1pbmF0ZTtcbiAgICAgIH1cbiAgICB9fVxuICAgIG9uQ2hhbmdlPXsoKSA9PiB7IH19XG4gIC8+XG4pO1xuXG5pbnRlcmZhY2UgU2VsZWN0aW9uSGVhZGVyQ2VsbFByb3BzIHtcbiAgbW9kZT86IHN0cmluZztcbiAgY2hlY2tlZFN0YXR1cz86IHN0cmluZztcbiAgb25BbGxSb3dzU2VsZWN0PzogKFxuICAgIGU6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQ+LFxuICAgIGlzVW5TZWxlY3Q6IGJvb2xlYW5cbiAgKSA9PiB2b2lkO1xuICBoaWRlU2VsZWN0QWxsPzogYm9vbGVhbjtcbiAgc2VsZWN0aW9uSGVhZGVyUmVuZGVyZXI/OiAoYXJnczoge1xuICAgIG1vZGU/OiBzdHJpbmc7XG4gICAgY2hlY2tlZDogYm9vbGVhbjtcbiAgICBpbmRldGVybWluYXRlOiBib29sZWFuO1xuICB9KSA9PiBSZWFjdE5vZGU7XG4gIGhlYWRlckNvbHVtblN0eWxlPzpcbiAgfCBSZWFjdC5DU1NQcm9wZXJ0aWVzXG4gIHwgKChjaGVja2VkU3RhdHVzOiBzdHJpbmcpID0+IFJlYWN0LkNTU1Byb3BlcnRpZXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWxlY3Rpb25IZWFkZXJDZWxsIGV4dGVuZHMgQ29tcG9uZW50PFNlbGVjdGlvbkhlYWRlckNlbGxQcm9wcz4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogU2VsZWN0aW9uSGVhZGVyQ2VsbFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlQ2hlY2tCb3hDbGljayA9IHRoaXMuaGFuZGxlQ2hlY2tCb3hDbGljay5iaW5kKHRoaXMpO1xuICB9XG5cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wczogU2VsZWN0aW9uSGVhZGVyQ2VsbFByb3BzKSB7XG4gICAgY29uc3QgeyBtb2RlLCBjaGVja2VkU3RhdHVzIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKG1vZGUgPT09IFJPV19TRUxFQ1RfU0lOR0xFKSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gbmV4dFByb3BzLmNoZWNrZWRTdGF0dXMgIT09IGNoZWNrZWRTdGF0dXM7XG4gIH1cblxuICBoYW5kbGVDaGVja0JveENsaWNrKGU6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQ+KSB7XG4gICAgY29uc3QgeyBvbkFsbFJvd3NTZWxlY3QsIGNoZWNrZWRTdGF0dXMgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgaXNVblNlbGVjdCA9XG4gICAgICBjaGVja2VkU3RhdHVzID09PSBDSEVDS0JPWF9TVEFUVVNfQ0hFQ0tFRCB8fFxuICAgICAgY2hlY2tlZFN0YXR1cyA9PT0gQ0hFQ0tCT1hfU1RBVFVTX0lOREVURVJNSU5BVEU7XG5cbiAgICBvbkFsbFJvd3NTZWxlY3QhKGUsIGlzVW5TZWxlY3QpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIG1vZGUsXG4gICAgICBjaGVja2VkU3RhdHVzLFxuICAgICAgc2VsZWN0aW9uSGVhZGVyUmVuZGVyZXIsXG4gICAgICBoaWRlU2VsZWN0QWxsLFxuICAgICAgaGVhZGVyQ29sdW1uU3R5bGUsXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKGhpZGVTZWxlY3RBbGwpIHtcbiAgICAgIHJldHVybiA8dGggZGF0YS1yb3ctc2VsZWN0aW9uIC8+O1xuICAgIH1cblxuICAgIGNvbnN0IGNoZWNrZWQgPSBjaGVja2VkU3RhdHVzID09PSBDSEVDS0JPWF9TVEFUVVNfQ0hFQ0tFRDtcblxuICAgIGNvbnN0IGluZGV0ZXJtaW5hdGUgPSBjaGVja2VkU3RhdHVzID09PSBDSEVDS0JPWF9TVEFUVVNfSU5ERVRFUk1JTkFURTtcblxuICAgIGNvbnN0IGF0dHJzOiBSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudD4gPSB7fTtcbiAgICBsZXQgY29udGVudDogUmVhY3ROb2RlIHwgdW5kZWZpbmVkO1xuICAgIGlmIChzZWxlY3Rpb25IZWFkZXJSZW5kZXJlciB8fCBtb2RlID09PSBST1dfU0VMRUNUX01VTFRJUExFKSB7XG4gICAgICBhdHRycy5vbkNsaWNrID0gdGhpcy5oYW5kbGVDaGVja0JveENsaWNrO1xuICAgIH1cblxuICAgIGF0dHJzLnN0eWxlID0gKF8uaXNGdW5jdGlvbihoZWFkZXJDb2x1bW5TdHlsZSlcbiAgICAgID8gaGVhZGVyQ29sdW1uU3R5bGUoY2hlY2tlZFN0YXR1cyEpXG4gICAgICA6IGhlYWRlckNvbHVtblN0eWxlKSBhcyBhbnk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEJvb3RzdHJhcENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgIHsoeyBib290c3RyYXA0IH0pID0+IHtcbiAgICAgICAgICBpZiAoc2VsZWN0aW9uSGVhZGVyUmVuZGVyZXIpIHtcbiAgICAgICAgICAgIGNvbnRlbnQgPSBzZWxlY3Rpb25IZWFkZXJSZW5kZXJlcih7XG4gICAgICAgICAgICAgIG1vZGUsXG4gICAgICAgICAgICAgIGNoZWNrZWQsXG4gICAgICAgICAgICAgIGluZGV0ZXJtaW5hdGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT09IFJPV19TRUxFQ1RfTVVMVElQTEUpIHtcbiAgICAgICAgICAgIGNvbnRlbnQgPSAoXG4gICAgICAgICAgICAgIDxDaGVja0JveFxuICAgICAgICAgICAgICAgIHsuLi50aGlzLnByb3BzfVxuICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2NoZWNrZWR9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtib290c3RyYXA0ID8gXCJzZWxlY3Rpb24taW5wdXQtNFwiIDogXCJcIn1cbiAgICAgICAgICAgICAgICBpbmRldGVybWluYXRlPXtpbmRldGVybWluYXRlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJzZWxlY3Rpb24tY2VsbC1oZWFkZXJcIiBkYXRhLXJvdy1zZWxlY3Rpb24gey4uLmF0dHJzIGFzIGFueX0+XG4gICAgICAgICAgICAgIHtjb250ZW50fVxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICApO1xuICAgICAgICB9fVxuICAgICAgPC9Cb290c3RyYXBDb250ZXh0LkNvbnN1bWVyPlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgQ29sdW1uRGVzY3JpcHRpb24sIFNlbGVjdFJvd1Byb3BzIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCBGb290ZXJDZWxsIGZyb20gXCIuL2Zvb3Rlci1jZWxsXCI7XG5pbXBvcnQgUm93VGVtcGxhdGUsIHsgRXhwYW5kUm93IH0gZnJvbSBcIi4vcm93L3Jvdy10ZW1wbGF0ZVwiO1xuaW1wb3J0IF8gZnJvbSBcIi4vdXRpbHNcIjtcblxuaW50ZXJmYWNlIEZvb3RlclByb3BzIHtcbiAgZGF0YT86IGFueVtdO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNvbHVtbnM6IENvbHVtbkRlc2NyaXB0aW9uW107XG4gIHNlbGVjdFJvdz86IFNlbGVjdFJvd1Byb3BzPGFueT4gfCB1bmRlZmluZWQ7XG4gIGV4cGFuZFJvdz86IEV4cGFuZFJvdztcbn1cblxuY29uc3QgRm9vdGVyOiBSZWFjdC5GQzxGb290ZXJQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBkYXRhID0gW10sIGNsYXNzTmFtZSwgY29sdW1ucyA9IFtdLCBzZWxlY3RSb3csIGV4cGFuZFJvdyB9ID0gcHJvcHM7XG5cbiAgZnVuY3Rpb24gcmVuZGVyQ29udGVudCgpOiBSZWFjdE5vZGUge1xuICAgIHJldHVybiBjb2x1bW5zLm1hcCgoY29sdW1uLCBpKSA9PiB7XG4gICAgICBpZiAoY29sdW1uLmZvb3RlciA9PT0gdW5kZWZpbmVkIHx8IGNvbHVtbi5mb290ZXIgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb2x1bW5EYXRhID0gXy5wbHVjayhkYXRhLCBjb2x1bW4uZGF0YUZpZWxkKTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEZvb3RlckNlbGxcbiAgICAgICAgICBpbmRleD17aX1cbiAgICAgICAgICBrZXk9e2NvbHVtbi5kYXRhRmllbGR9XG4gICAgICAgICAgY29sdW1uPXtjb2x1bW59XG4gICAgICAgICAgY29sdW1uRGF0YT17Y29sdW1uRGF0YX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDx0Zm9vdD5cbiAgICAgIDxSb3dUZW1wbGF0ZVxuICAgICAgICByZW5kZXJDb250ZW50PXtyZW5kZXJDb250ZW50fVxuICAgICAgICBzZWxlY3RSb3c9e3NlbGVjdFJvd31cbiAgICAgICAgZXhwYW5kUm93PXtleHBhbmRSb3d9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICBjZWxsRWw9XCJ0aFwiXG4gICAgICAvPlxuICAgIDwvdGZvb3Q+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBGb290ZXI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ1NTUHJvcGVydGllcywgU3ludGhldGljRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IEJvb3RzdHJhcFRhYmxlIGZyb20gXCIuL3NyYy9ib290c3RyYXAtdGFibGVcIjtcbmltcG9ydCB3aXRoQ29udGV4dCBmcm9tIFwiLi9zcmMvY29udGV4dHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aENvbnRleHQoQm9vdHN0cmFwVGFibGUpO1xuXG4vLyBUeXBlIGRlZmluaXRpb25zIGZvciByZWFjdC1ib290c3RyYXAtdGFibGUtbmV4dCA0LjBcbi8vIFByb2plY3Q6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdC1ib290c3RyYXAtdGFibGUvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMiNyZWFkbWVcbi8vIERlZmluaXRpb25zIGJ5OiBXbGFkIE1laXhuZXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9nb3N0aWNrcz5cbi8vICAgICAgICAgICAgICAgIFZhbGVudGluIFNsb2JvemFuaW4gPGh0dHBzOi8vZ2l0aHViLmNvbS9pZ25lZm9saW8+XG4vLyAgICAgICAgICAgICAgICBKYWt1YiBSw7PFvGJpY2tpIDxodHRwczovL2dpdGh1Yi5jb20vanJvemJpY2tpPlxuLy8gRGVmaW5pdGlvbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9EZWZpbml0ZWx5VHlwZWQvRGVmaW5pdGVseVR5cGVkXG4vLyBUeXBlU2NyaXB0IFZlcnNpb246IDMuMFxuXG4vLyBkb2N1bWVudGF0aW9uIHRha2VuIGZyb20gaHR0cHM6Ly9yZWFjdC1ib290c3RyYXAtdGFibGUuZ2l0aHViLmlvL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvZG9jcy90YWJsZS1wcm9wcy5odG1sXG5cbmV4cG9ydCAqIGZyb20gXCIuL3NyYy9jb25zdFwiO1xuaW1wb3J0IHtcbiAgUk9XX1NFTEVDVF9TSU5HTEUsXG4gIFJPV19TRUxFQ1RfTVVMVElQTEUsXG4gIFJPV19TRUxFQ1RfRElTQUJMRUQsXG4gIENIRUNLQk9YX1NUQVRVU19JTkRFVEVSTUlOQVRFLFxuICBDSEVDS0JPWF9TVEFUVVNfQ0hFQ0tFRCxcbiAgQ0hFQ0tCT1hfU1RBVFVTX1VOQ0hFQ0tFRCxcbiAgRklMVEVSU19QT1NJVElPTl9JTkxJTkUsXG4gIEZJTFRFUlNfUE9TSVRJT05fVE9QLFxuICBGSUxURVJTX1BPU0lUSU9OX0JPVFRPTSxcbn0gZnJvbSBcIi4vc3JjL2NvbnN0XCI7XG5cbmV4cG9ydCB0eXBlIFJvd1NlbGVjdGlvblR5cGUgPVxuICB8IHR5cGVvZiBST1dfU0VMRUNUX1NJTkdMRVxuICB8IHR5cGVvZiBST1dfU0VMRUNUX01VTFRJUExFXG4gIHwgdHlwZW9mIFJPV19TRUxFQ1RfRElTQUJMRUQ7XG5leHBvcnQgdHlwZSBUYWJsZUNoZWNrYm94U3RhdHVzID1cbiAgfCB0eXBlb2YgQ0hFQ0tCT1hfU1RBVFVTX0lOREVURVJNSU5BVEVcbiAgfCB0eXBlb2YgQ0hFQ0tCT1hfU1RBVFVTX0NIRUNLRURcbiAgfCB0eXBlb2YgQ0hFQ0tCT1hfU1RBVFVTX1VOQ0hFQ0tFRDtcbmV4cG9ydCB0eXBlIEZpbHRlclBvc2l0aW9uID1cbiAgfCB0eXBlb2YgRklMVEVSU19QT1NJVElPTl9JTkxJTkVcbiAgfCB0eXBlb2YgRklMVEVSU19QT1NJVElPTl9UT1BcbiAgfCB0eXBlb2YgRklMVEVSU19QT1NJVElPTl9CT1RUT007XG5cbi8qKlxuICogVGFibGUgY2hhbmdlIGV2ZW50IHR5cGVzXG4gKi9cbmV4cG9ydCB0eXBlIFRhYmxlQ2hhbmdlVHlwZSA9IFwiZmlsdGVyXCIgfCBcInBhZ2luYXRpb25cIiB8IFwic29ydFwiIHwgXCJjZWxsRWRpdFwiO1xuXG4vKipcbiAqIFVzZWQgdG8gc3BlY2lmeSB0aGUgdGV4dCBhbGlnbm1lbnQgZm9yIGEgY29sdW1uLlxuICovXG5leHBvcnQgdHlwZSBDZWxsQWxpZ25tZW50ID1cbiAgfCAoXCJsZWZ0XCIgfCBcImNlbnRlclwiIHwgXCJyaWdodFwiIHwgXCJzdGFydFwiIHwgXCJlbmRcIilcbiAgfCBzdHJpbmc7XG5cbi8qKlxuICogRmlsdGVyIGNvbXBhcmF0b3JzIHVzZWQgZm9yIHRhYmxlIGZpbHRlcnNcbiAqL1xuZGVjbGFyZSBlbnVtIEZpbHRlckNvbXBhcmF0b3Ige1xuICBMSUtFID0gXCJMSUtFXCIsXG4gIEVRID0gXCI9XCIsXG4gIE5FID0gXCIhPVwiLFxuICBHVCA9IFwiPlwiLFxuICBHRSA9IFwiPj1cIixcbiAgTFQgPSBcIjxcIixcbiAgTEUgPSBcIjw9XCIsXG59XG5cbi8qKlxuICogU29ydCBPcmRlciB2YWx1ZXMuICdhc2MnID0gYXNjZW5kaW5nLCAnZGVzYycgPSBkZXNjZW5kaW5nLlxuICovXG5leHBvcnQgdHlwZSBTb3J0T3JkZXIgPSBcImFzY1wiIHwgXCJkZXNjXCI7XG5cbmV4cG9ydCB0eXBlIENvbHVtblNvcnRWYWx1ZTxSLCBDID0gYW55PiA9IChcbiAgY2VsbDogQyxcbiAgcm93OiBSXG4pID0+IGJvb2xlYW4gfCBzdHJpbmcgfCBudW1iZXI7XG5cbmV4cG9ydCB0eXBlIENvbHVtblNvcnRGdW5jPFQsIEUgZXh0ZW5kcyBrZXlvZiBUID0gYW55PiA9IChcbiAgYTogVFtFXSxcbiAgYjogVFtFXSxcbiAgb3JkZXI6IFwiYXNjXCIgfCBcImRlc2NcIixcbiAgZGF0YUZpZWxkOiBhbnksXG4gIHJvd0E6IFQsXG4gIHJvd0I6IFRcbikgPT4gbnVtYmVyO1xuXG5leHBvcnQgdHlwZSBDb2x1bW5Tb3J0Q2FyZXQ8VCBleHRlbmRzIG9iamVjdCA9IGFueSwgRSA9IGFueT4gPSAoXG4gIG9yZGVyOiBcImFzY1wiIHwgXCJkZXNjXCIgfCB1bmRlZmluZWQsXG4gIGNvbHVtbjogQ29sdW1uRGVzY3JpcHRpb248VCwgRT5cbikgPT4gUmVhY3QuUmVhY3RFbGVtZW50IHwgc3RyaW5nIHwgbnVsbDtcblxuZXhwb3J0IHR5cGUgSGVhZGVyU29ydGluZ0NsYXNzZXM8VCBleHRlbmRzIG9iamVjdCA9IGFueSwgRSA9IGFueT4gPVxuICB8IHN0cmluZ1xuICB8ICgoXG4gICAgY29sdW1uOiBDb2x1bW5EZXNjcmlwdGlvbjxULCBFPixcbiAgICBzb3J0T3JkZXI6IFwiYXNjXCIgfCBcImRlc2NcIixcbiAgICBpc0xhc3RTb3J0aW5nOiBib29sZWFuLFxuICAgIGNvbEluZGV4OiBudW1iZXJcbiAgKSA9PiBzdHJpbmcpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQ2hhbmdlU3RhdGU8VD4ge1xuICBwYWdlOiBudW1iZXI7XG4gIHNpemVQZXJQYWdlOiBudW1iZXI7XG4gIHNvcnRGaWVsZDogc3RyaW5nO1xuICBzb3J0T3JkZXI6IFwiYXNjXCIgfCBcImRlc2NcIjtcbiAgZmlsdGVyczoge1xuICAgIFtrZXk6IHN0cmluZ106IHsgZmlsdGVyVmFsOiBhbnk7IGZpbHRlclR5cGU6IFwiVEVYVFwiOyBjb21wYXJhdG9yOiBhbnkgfTtcbiAgfTtcbiAgZGF0YTogVFtdO1xuICBjZWxsRWRpdDoge1xuICAgIHJvd0lkOiBzdHJpbmc7XG4gICAgZGF0YUZpZWxkOiBhbnk7XG4gICAgbmV3VmFsdWU6IGFueTtcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgSGVhZGVyRm9ybWF0dGVyPFQgZXh0ZW5kcyBvYmplY3QgPSBhbnk+ID0gKFxuICBjb2x1bW46IENvbHVtbkRlc2NyaXB0aW9uPFQ+LFxuICBjb2xJbmRleDogbnVtYmVyLFxuICBjb21wb25lbnRzOiB7XG4gICAgc29ydEVsZW1lbnQ6IFJlYWN0LlJlYWN0RWxlbWVudDtcbiAgICBmaWx0ZXJFbGVtZW50OiBSZWFjdC5SZWFjdEVsZW1lbnQ7XG4gIH1cbikgPT4gUmVhY3QuUmVhY3ROb2RlO1xuXG5leHBvcnQgdHlwZSBDb2x1bW5Gb3JtYXR0ZXI8UiwgRSA9IGFueSwgQyA9IGFueT4gPSAoXG4gIGNlbGw6IEMsXG4gIHJvdzogUixcbiAgcm93SW5kZXg6IG51bWJlcixcbiAgZm9ybWF0RXh0cmFEYXRhPzogRVxuKSA9PiBSZWFjdC5SZWFjdE5vZGU7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvblJlc3VsdCB7XG4gIGFzeW5jPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgdmFsaWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbkRlc2NyaXB0aW9uPFQgZXh0ZW5kcyBvYmplY3QgPSBhbnksIEUgPSBhbnk+IHtcbiAgLyoqXG4gICAqIElmIHNldCB0aGUgY29sdW1uIHdpbGwgbm90IHVzZSBjZWxsIHZhbHVlc1xuICAgKi9cbiAgaXNEdW1teUZpZWxkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgZGF0YUZpZWxkOiBhbnk7XG4gIGZvcm1hdHRlcj86IENvbHVtbkZvcm1hdHRlcjxULCBFPiB8IHVuZGVmaW5lZDtcbiAgaGlkZGVuPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIENvbHVtbiBoZWFkZXIgZmllbGRcbiAgICovXG4gIHRleHQ6IHN0cmluZztcbiAgY2xhc3Nlcz86XG4gIHwgc3RyaW5nXG4gIHwgKChjZWxsOiBUW2tleW9mIFRdLCByb3c6IFQsIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpID0+IHN0cmluZylcbiAgfCB1bmRlZmluZWQ7XG4gIGhlYWRlckNsYXNzZXM/OlxuICB8IHN0cmluZ1xuICB8ICgoY29sdW1uOiBDb2x1bW5EZXNjcmlwdGlvbjxULCBFPiwgY29sSW5kZXg6IG51bWJlcikgPT4gc3RyaW5nKVxuICB8IHVuZGVmaW5lZDtcbiAgc3R5bGU/OlxuICB8IFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgfCAoKFxuICAgIGNlbGw6IFRba2V5b2YgVF0sXG4gICAgcm93OiBULFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgY29sSW5kZXg6IG51bWJlclxuICApID0+IFJlYWN0LkNTU1Byb3BlcnRpZXMpXG4gIHwgdW5kZWZpbmVkO1xuICBzb3J0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgc29ydFZhbHVlPzogQ29sdW1uU29ydFZhbHVlPFQ+IHwgdW5kZWZpbmVkO1xuICBzb3J0RnVuYz86IENvbHVtblNvcnRGdW5jPFQ+IHwgdW5kZWZpbmVkO1xuICBzb3J0Q2FyZXQ/OiBDb2x1bW5Tb3J0Q2FyZXQ8VCwgRT4gfCB1bmRlZmluZWQ7XG4gIHNlYXJjaGFibGU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBhbGlnbj86XG4gIHwgQ2VsbEFsaWdubWVudFxuICB8ICgoXG4gICAgY2VsbDogVFtrZXlvZiBUXSxcbiAgICByb3c6IFQsXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBjb2xJbmRleDogbnVtYmVyXG4gICkgPT4gQ2VsbEFsaWdubWVudClcbiAgfCB1bmRlZmluZWQ7XG4gIGhlYWRlclN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8ICgoKSA9PiBSZWFjdC5DU1NQcm9wZXJ0aWVzKSB8IHVuZGVmaW5lZDtcblxuICB0b29sdGlwRGF0YUZpZWxkPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBlZGl0YWJsZT86XG4gIHwgYm9vbGVhblxuICB8ICgoY2VsbDogYW55LCByb3c6IFQsIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpID0+IGJvb2xlYW4pXG4gIHwgdW5kZWZpbmVkO1xuICBlZGl0b3I/OlxuICB8IHtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgb3B0aW9ucz86IEFycmF5PHsgdmFsdWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9PiB8IHVuZGVmaW5lZDtcbiAgfVxuICB8IHVuZGVmaW5lZDtcbiAgZmlsdGVyPzogYm9vbGVhbiB8IFRhYmxlQ29sdW1uRmlsdGVyUHJvcHMgfCB1bmRlZmluZWQ7XG4gIGZpbHRlclZhbHVlPzogKChjZWxsOiBUW2tleW9mIFRdLCByb3c6IFQpID0+IHN0cmluZykgfCB1bmRlZmluZWQ7XG4gIGZpbHRlclJlbmRlcmVyPzogKChmaWx0ZXJIYW5kbGVyOiBGdW5jdGlvbiwgY29sdW1uOiBhbnkpID0+IFJlYWN0LlJlYWN0RWxlbWVudCkgfCB1bmRlZmluZWQ7XG4gIGhlYWRlckFsaWduPzogQ2VsbEFsaWdubWVudCB8IHVuZGVmaW5lZDtcbiAgaGVhZGVyRm9ybWF0dGVyPzogSGVhZGVyRm9ybWF0dGVyPFQ+IHwgdW5kZWZpbmVkO1xuICBoZWFkZXJTb3J0aW5nQ2xhc3Nlcz86IEhlYWRlclNvcnRpbmdDbGFzc2VzPFQsIEU+IHwgdW5kZWZpbmVkO1xuICBmb3JtYXRFeHRyYURhdGE/OlxuICB8ICh7XG4gICAgdG9vbHRpcEZvcm1hdHRlcj86ICgocm93OiBUKSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQpIHwgdW5kZWZpbmVkO1xuICB9ICYgRSlcbiAgfCB1bmRlZmluZWQ7XG4gIHdpZHRoPzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBmb290ZXI/OlxuICB8IGJvb2xlYW5cbiAgfCBudW1iZXJcbiAgfCBzdHJpbmdcbiAgfCAoKFxuICAgIGNvbHVtbkRhdGE6IGFueSxcbiAgICBjb2x1bW46IENvbHVtbkRlc2NyaXB0aW9uPFQsIEU+LFxuICAgIGNvbHVtbkluZGV4OiBudW1iZXJcbiAgKSA9PiBzdHJpbmcpXG4gIHwgdW5kZWZpbmVkO1xuICAvLyBUT0RPXG4gIGZvb3RlckZvcm1hdHRlcj86XG4gIHwgKChjb2x1bW46IENvbHVtbkRlc2NyaXB0aW9uPFQsIEU+LCBjb2x1bW5JbmRleDogbnVtYmVyLCB0ZXh0OiBhbnkpID0+IHZvaWQpXG4gIHwgdW5kZWZpbmVkO1xuICBmb290ZXJDbGFzc2VzPzpcbiAgfCBzdHJpbmdcbiAgfCAoKGNvbHVtbjogQ29sdW1uRGVzY3JpcHRpb248VCwgRT4sIGNvbHVtbkluZGV4OiBudW1iZXIpID0+IHN0cmluZylcbiAgfCB1bmRlZmluZWQ7XG4gIGZvb3RlclN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDtcbiAgZm9vdGVyVGl0bGU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBmb290ZXJFdmVudHM/OlxuICB8IHtcbiAgICBvbkNsaWNrOiAoXG4gICAgICBlOiBhbnksXG4gICAgICBjb2x1bW46IENvbHVtbkRlc2NyaXB0aW9uPFQsIEU+LFxuICAgICAgY29sdW1uSW5kZXg6IG51bWJlclxuICAgICkgPT4gdm9pZDtcbiAgfVxuICB8IHVuZGVmaW5lZDtcbiAgZm9vdGVyQWxpZ24/OlxuICB8IENlbGxBbGlnbm1lbnRcbiAgfCAoKGNvbHVtbjogQ29sdW1uRGVzY3JpcHRpb248VCwgRT4sIGNvbEluZGV4OiBudW1iZXIpID0+IENlbGxBbGlnbm1lbnQpXG4gIHwgdW5kZWZpbmVkO1xuICBmb290ZXJBdHRycz86XG4gIHwgb2JqZWN0XG4gIHwgKChjb2x1bW46IENvbHVtbkRlc2NyaXB0aW9uPFQsIEU+LCBjb2x1bW5JbmRleDogbnVtYmVyKSA9PiBvYmplY3QpXG4gIHwgdW5kZWZpbmVkO1xuICB2YWxpZGF0b3I/OlxuICB8ICgoXG4gICAgbmV3VmFsdWU6IGFueSxcbiAgICByb3c6IFQsXG4gICAgY29sdW1uOiBDb2x1bW5EZXNjcmlwdGlvbjxULCBFPixcbiAgICBkb25lOiAocmVzdWx0PzogVmFsaWRhdGlvblJlc3VsdCkgPT4gYW55XG4gICkgPT4gYm9vbGVhbiB8IFZhbGlkYXRpb25SZXN1bHQpXG4gIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBDU1YgQ29sdW1uIG9wdGlvbnMgb25seSB1c2VkIHdpdGggdGhlIHRvb2xraXQgcHJvdmlkZXJcbiAgICovXG5cbiAgLyoqXG4gICAqIGV4cG9ydCBjc3YgY2VsbCB0eXBlIGNhbiBiZSBOdW1iZXIgb3IgU3RyaW5nXG4gICAqL1xuICBjc3ZUeXBlPzogb2JqZWN0IHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQ3VzdG9tIGNzdiBjZWxsIGZvcm1hdHRlciB1c2VkIHdoZW4gZXhwb3J0aW5nIGNzdlxuICAgKi9cbiAgY3N2Rm9ybWF0dGVyPzogQ29sdW1uRm9ybWF0dGVyPFQsIEU+IHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogY3N2VGV4dCBkZWZhdWx0cyB0byBjb2x1bW4udGV4dFxuICAgKi9cbiAgY3N2VGV4dD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIFRvZ2dsZSBjb2x1bW4gZGlzcGxheSBpbiBDU1YgZXhwb3J0XG4gICAqL1xuICBjc3ZFeHBvcnQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQ29sdW1uIHRvZ2dsZSBsaXN0IHVzZWQgYnkgVG9vbGtpdCBwcm92aWRlclxuICAgKi9cbiAgdG9nZ2xlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZW5lcmljIHJvdyBldmVudCBoYW5kbGVyXG4gKi9cbmV4cG9ydCB0eXBlIFJvd0V2ZW50SGFuZGxlcjxUPiA9IChcbiAgZTogU3ludGhldGljRXZlbnQsXG4gIHJvdzogVCxcbiAgcm93SW5kZXg6IG51bWJlclxuKSA9PiB2b2lkO1xuXG4vKipcbiAqIFJvdyBsZXZlbCBldmVudCBoYW5kbGVyc1xuICovXG5leHBvcnQgdHlwZSBSb3dFdmVudEhhbmRsZXJQcm9wczxUID0gYW55PiA9IFBhcnRpYWw8e1xuICBvbkNsaWNrOiBSb3dFdmVudEhhbmRsZXI8VD47XG4gIG9uRG91YmxlQ2xpY2s6IFJvd0V2ZW50SGFuZGxlcjxUPjtcbiAgb25Nb3VzZUVudGVyOiBSb3dFdmVudEhhbmRsZXI8VD47XG4gIG9uTW91c2VMZWF2ZTogUm93RXZlbnRIYW5kbGVyPFQ+O1xuICBvbkNvbnRleHRNZW51OiBSb3dFdmVudEhhbmRsZXI8VD47XG59PjtcblxuLyoqXG4gKiBUYWJsZSBjaGFuZ2UgY2FsbGJhY2sgbWV0aG9kXG4gKi9cbmV4cG9ydCB0eXBlIFRhYmxlQ2hhbmdlSGFuZGxlcjxUPiA9IChcbiAgdHlwZTogVGFibGVDaGFuZ2VUeXBlLFxuICBuZXdTdGF0ZTogVGFibGVDaGFuZ2VTdGF0ZTxUPlxuKSA9PiB2b2lkO1xuXG4vKipcbiAqIEFsbCBwb3NzaWJsZSBwYWdpbmF0aW9uIG9wdGlvbnMgaGFuZGxlZCBieSB0aGUgcGFnaW5hdGlvbiBwbHVnaW5cbiAqXG4gKiBDb25zdWx0IFtkb2N1bWVudGF0aW9uXShodHRwczovL3JlYWN0LWJvb3RzdHJhcC10YWJsZS5naXRodWIuaW8vcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9kb2NzL3BhZ2luYXRpb24tcHJvcHMuaHRtbClcbiAqL1xuZXhwb3J0IHR5cGUgUGFnaW5hdGlvbk9wdGlvbnMgPSBQYXJ0aWFsPHtcbiAgY3VzdG9tOiBib29sZWFuO1xuICAvKipcbiAgICogU3BlY2lmeSB0aGUgY3VycmVudCBwYWdlLiBJdCdzIG5lY2Vzc2FyeSB3aGVuIHJlbW90ZSBpcyBlbmFibGVkXG4gICAqL1xuICBwYWdlOiBudW1iZXI7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IHRoZSBzaXplIHBlciBwYWdlLiBJdCdzIG5lY2Vzc2FyeSB3aGVuIHJlbW90ZSBpcyBlbmFibGVkXG4gICAqL1xuICBzaXplUGVyUGFnZTogbnVtYmVyO1xuICAvKipcbiAgICogVG90YWwgZGF0YSBzaXplLiBJdCdzIG5lY2Vzc2FyeSB3aGVuIHJlbW90ZSBpcyBlbmFibGVkXG4gICAqL1xuICB0b3RhbFNpemU6IG51bWJlcjtcbiAgLyoqXG4gICAqIGZpcnN0IHBhZ2Ugd2lsbCBiZSAwLCBkZWZhdWx0IGlzIDFcbiAgICovXG4gIHBhZ2VTdGFydEluZGV4OiBudW1iZXI7XG4gIC8qKlxuICAgKiB0aGUgcGFnaW5hdGlvbiBiYXIgc2l6ZSwgZGVmYXVsdCBpcyA1XG4gICAqL1xuICBwYWdpbmF0aW9uU2l6ZTogbnVtYmVyO1xuICAvKipcbiAgICogZGlzcGxheSBwYWdpbmF0aW9uIGluZm9ybWF0aW9uXG4gICAqL1xuICBzaG93VG90YWw6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBIG51bWVyaWMgYXJyYXkgaXMgYWxzbyBhdmFpbGFibGU6IFs1LCAxMF0uIHRoZSBwdXJwb3NlIG9mIGFib3ZlIGV4YW1wbGUgaXMgY3VzdG9tIHRoZSB0ZXh0XG4gICAqL1xuICBzaXplUGVyUGFnZUxpc3Q6IG51bWJlcltdIHwgQXJyYXk8eyB0ZXh0OiBzdHJpbmc7IHZhbHVlOiBudW1iZXIgfT47XG4gIC8qKlxuICAgKiBoaWRlIHRoZSBnb2luZyB0byBmaXJzdCBhbmQgbGFzdCBwYWdlIGJ1dHRvblxuICAgKi9cbiAgd2l0aEZpcnN0QW5kTGFzdDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIGFsd2F5cyBzaG93IHRoZSBuZXh0IGFuZCBwcmV2aW91cyBwYWdlIGJ1dHRvblxuICAgKi9cbiAgYWx3YXlzU2hvd0FsbEJ0bnM6IGJvb2xlYW47XG4gIC8qKlxuICAgKiB0aGUgdGV4dCBvZiBmaXJzdCBwYWdlIGJ1dHRvblxuICAgKi9cbiAgZmlyc3RQYWdlVGV4dDogc3RyaW5nIHwgUmVhY3QuUmVhY3RFbGVtZW50O1xuICAvKipcbiAgICogdGhlIHRleHQgb2YgcHJldmlvdXMgcGFnZSBidXR0b25cbiAgICovXG4gIHByZVBhZ2VUZXh0OiBzdHJpbmcgfCBSZWFjdC5SZWFjdEVsZW1lbnQ7XG4gIC8qKlxuICAgKiB0aGUgdGV4dCBvZiBuZXh0IHBhZ2UgYnV0dG9uXG4gICAqL1xuICBuZXh0UGFnZVRleHQ6IHN0cmluZyB8IFJlYWN0LlJlYWN0RWxlbWVudDtcbiAgLyoqXG4gICAqIHRoZSB0ZXh0IG9mIGxhc3QgcGFnZSBidXR0b25cbiAgICovXG4gIGxhc3RQYWdlVGV4dDogc3RyaW5nIHwgUmVhY3QuUmVhY3RFbGVtZW50O1xuICAvKipcbiAgICogdGhlIHRpdGxlIG9mIG5leHQgcGFnZSBidXR0b25cbiAgICovXG4gIG5leHRQYWdlVGl0bGU6IHN0cmluZztcbiAgLyoqXG4gICAqIHRoZSB0aXRsZSBvZiBwcmV2aW91cyBwYWdlIGJ1dHRvblxuICAgKi9cbiAgcHJlUGFnZVRpdGxlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiB0aGUgdGl0bGUgb2YgZmlyc3QgcGFnZSBidXR0b25cbiAgICovXG4gIGZpcnN0UGFnZVRpdGxlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiB0aGUgdGl0bGUgb2YgbGFzdCBwYWdlIGJ1dHRvblxuICAgKi9cbiAgbGFzdFBhZ2VUaXRsZTogc3RyaW5nO1xuICAvKipcbiAgICogaGlkZSB0aGUgc2l6ZSBwZXIgcGFnZSBkcm9wZG93blxuICAgKi9cbiAgaGlkZVNpemVQZXJQYWdlOiBib29sZWFuO1xuICAvKipcbiAgICogaGlkZSBwYWdpbmF0aW9uIGJhciB3aGVuIG9ubHkgb25lIHBhZ2UsIGRlZmF1bHQgaXMgZmFsc2VcbiAgICovXG4gIGhpZGVQYWdlTGlzdE9ubHlPbmVQYWdlOiBib29sZWFuO1xuICAvKipcbiAgICogY3VzdG9tIHBhZ2UgYnV0dG9uIGluc2lkZSB0aGUgcGFnaW5hdGlvbiBsaXN0XG4gICAqL1xuICBwYWdlQnV0dG9uUmVuZGVyZXI6IChvcHRpb25zOiBQYWdlQnV0dG9uUmVuZGVyZXJPcHRpb25zKSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQ7XG4gIC8qKlxuICAgKiBjYWxsYmFjayBmdW5jdGlvbiB3aGVuIHBhZ2Ugd2FzIGNoYW5naW5nXG4gICAqL1xuICBvblBhZ2VDaGFuZ2U6IChwYWdlOiBudW1iZXIsIHNpemVQZXJQYWdlOiBudW1iZXIpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBjYWxsYmFjayBmdW5jdGlvbiB3aGVuIHBhZ2Ugc2l6ZSB3YXMgY2hhbmdpbmdcbiAgICovXG4gIG9uU2l6ZVBlclBhZ2VDaGFuZ2U6IChwYWdlOiBudW1iZXIsIHNpemVQZXJQYWdlOiBudW1iZXIpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBjdXN0b20gcGFnaW5hdGlvbiBsaXN0IGNvbXBvbmVudFxuICAgKi9cbiAgcGFnZUxpc3RSZW5kZXJlcjogKG9wdGlvbnM6IFBhZ2VMaXN0UmVuZGVyZXJPcHRpb25zKSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQ7XG4gIC8qKlxuICAgKiBjdXN0b20gc2l6ZSBwZXIgcGFnZVxuICAgKi9cbiAgc2l6ZVBlclBhZ2VSZW5kZXJlcjogKG9wdGlvbnM6IFNpemVQZXJQYWdlUmVuZGVyZXJPcHRpb25zKSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQ7XG4gIC8qKlxuICAgKiBjdXN0b20gc2l6ZSBwZXIgcGFnZSBkcm9wZG93biBjb21wb25lbnRcbiAgICovXG4gIHNpemVQZXJQYWdlT3B0aW9uUmVuZGVyZXI6IChcbiAgICBvcHRpb25zOiBTaXplUGVyUGFnZU9wdGlvblJlbmRlcmVyT3B0aW9uc1xuICApID0+IFJlYWN0LlJlYWN0RWxlbWVudDtcbiAgLyoqXG4gICAqIGN1c3RvbSB0aGUgcGFnaW5hdGlvbiB0b3RhbFxuICAgKi9cbiAgcGFnaW5hdGlvblRvdGFsUmVuZGVyZXI6IChcbiAgICBmcm9tOiBudW1iZXIsXG4gICAgdG86IG51bWJlcixcbiAgICBzaXplOiBudW1iZXJcbiAgKSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQ7XG59PjtcblxuZXhwb3J0IGludGVyZmFjZSBTaXplUGVyUGFnZU9wdGlvblJlbmRlcmVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiB0ZXh0IG9mIHRoZSBvcHRpb25cbiAgICovXG4gIHRleHQ6IHN0cmluZztcbiAgLyoqXG4gICAqIHNpemUgb2YgcGVyIHBhZ2Ugb3B0aW9uXG4gICAqL1xuICBwYWdlOiBudW1iZXI7XG4gIC8qKlxuICAgKiBjYWxsIGl0IHdoZW4geW91IG5lZWQgdG8gY2hhbmdlIHNpemUgcGVyIHBhZ2VcbiAgICovXG4gIG9uU2l6ZVBlclBhZ2VDaGFuZ2U6IChwYWdlOiBudW1iZXIsIHNpemVQZXJQYWdlOiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZUxpc3RSZW5kZXJlck9wdGlvbnMge1xuICAvKipcbiAgICogY3VycmVudCBwYWdlXG4gICAqL1xuICBwYWdlczogQXJyYXk8e1xuICAgIGFjdGl2ZTogYm9vbGVhbjtcbiAgICBkaXNhYmxlZDogYm9vbGVhbjtcbiAgICBwYWdlOiBudW1iZXI7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgfT47XG4gIC8qKlxuICAgKiBjYWxsIGl0IHdoZW4geW91IG5lZWQgdG8gY2hhbmdlIHBhZ2VcbiAgICovXG4gIG9uUGFnZUNoYW5nZTogKHBhZ2U6IG51bWJlciwgc2l6ZVBlclBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdlQnV0dG9uUmVuZGVyZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIHBhZ2UgbnVtYmVyXG4gICAqL1xuICBwYWdlOiBudW1iZXIgfCBzdHJpbmc7XG4gIC8qKlxuICAgKiBpcyB0aGlzIHBhZ2UgdGhlIGN1cnJlbnQgcGFnZSBvciBub3RcbiAgICovXG4gIGFjdGl2ZTogYm9vbGVhbjtcbiAgLyoqXG4gICAqICBpcyB0aGlzIHBhZ2UgZGlzYWJsZWQgb3Igbm90XG4gICAqL1xuICBkaXNhYmxlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIHBhZ2UgdGl0bGVcbiAgICovXG4gIHRpdGxlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBjYWxsIGl0IHdoZW4geW91IG5lZWQgdG8gY2hhbmdlIHBhZ2VcbiAgICovXG4gIG9uUGFnZUNoYW5nZTogKHBhZ2U6IG51bWJlciwgc2l6ZVBlclBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaXplUGVyUGFnZVJlbmRlcmVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBkcm9wZG93biBvcHRpb25zXG4gICAqL1xuICBvcHRpb25zOiBBcnJheTx7IHRleHQ6IHN0cmluZzsgcGFnZTogbnVtYmVyIH0+O1xuICAvKipcbiAgICogY3VycmVudCBzaXplIHBlciBwYWdlXG4gICAqL1xuICBjdXJyU2l6ZVBlclBhZ2U6IHN0cmluZztcbiAgLyoqXG4gICAqIGNhbGwgaXQgd2hlbiB5b3UgbmVlZCB0byBjaGFuZ2Ugc2l6ZSBwZXIgcGFnZVxuICAgKi9cbiAgb25TaXplUGVyUGFnZUNoYW5nZTogKHBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RSb3dQcm9wczxUPiB7XG4gIG1vZGU6IHN0cmluZztcbiAgY2xpY2tUb1NlbGVjdD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGNsaWNrVG9FeHBhbmQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBjbGlja1RvRWRpdD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGhpZGVTZWxlY3RBbGw/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBzZWxlY3RlZD86IEFycmF5PG51bWJlciB8IHN0cmluZz4gfCB1bmRlZmluZWQ7XG4gIG9uU2VsZWN0PzpcbiAgfCAoKFxuICAgIHJvdzogVCxcbiAgICBpc1NlbGVjdGVkOiBib29sZWFuLFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgZTogU3ludGhldGljRXZlbnRcbiAgKSA9PiB2b2lkIHwgYm9vbGVhbilcbiAgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGlzIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW4gc2VsZWN0L3Vuc2VsZWN0IGFsbCBhbmQgaXQgb25seSB3b3JrIHdoZW4geW91IGNvbmZpZ3VyZSBzZWxlY3RSb3cubW9kZSBhcyBjaGVja2JveC5cbiAgICovXG4gIG9uU2VsZWN0QWxsPzpcbiAgfCAoKFxuICAgIGlzU2VsZWN0OiBib29sZWFuLFxuICAgIHJvd3M6IFRbXSxcbiAgICBlOiBSZWFjdC5TeW50aGV0aWNFdmVudFxuICApID0+IHZvaWQgfCBudW1iZXJbXSlcbiAgfCB1bmRlZmluZWQ7XG4gIHN0eWxlPzpcbiAgfCAoKHJvdzogVCwgcm93SW5kZXg6IG51bWJlcikgPT4gQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZClcbiAgfCBDU1NQcm9wZXJ0aWVzXG4gIHwgdW5kZWZpbmVkO1xuICBjbGFzc2VzPzpcbiAgfCAoKHJvdzogVCwgcm93SW5kZXg6IG51bWJlcikgPT4gc3RyaW5nIHwgdW5kZWZpbmVkKVxuICB8IHN0cmluZ1xuICB8IHVuZGVmaW5lZDtcbiAgbm9uU2VsZWN0YWJsZT86IG51bWJlcltdIHwgdW5kZWZpbmVkO1xuICBub25TZWxlY3RhYmxlU3R5bGU/OlxuICB8ICgocm93OiBULCByb3dJbmRleDogbnVtYmVyKSA9PiBDU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkKVxuICB8IENTU1Byb3BlcnRpZXNcbiAgfCB1bmRlZmluZWQ7XG4gIG5vblNlbGVjdGFibGVDbGFzc2VzPzpcbiAgfCAoKHJvdzogVCwgcm93SW5kZXg6IG51bWJlcikgPT4gc3RyaW5nIHwgdW5kZWZpbmVkKVxuICB8IHN0cmluZ1xuICB8IHVuZGVmaW5lZDtcbiAgYmdDb2xvcj86ICgocm93OiBULCByb3dJbmRleDogbnVtYmVyKSA9PiBzdHJpbmcpIHwgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBoaWRlU2VsZWN0Q29sdW1uPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgc2VsZWN0aW9uUmVuZGVyZXI/OlxuICB8ICgob3B0aW9uczoge1xuICAgIGNoZWNrZWQ6IGJvb2xlYW47XG4gICAgZGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgbW9kZTogc3RyaW5nO1xuICAgIHJvd0luZGV4OiBudW1iZXI7XG4gICAgcm93S2V5OiBzdHJpbmc7XG4gIH0pID0+IFJlYWN0LlJlYWN0RWxlbWVudClcbiAgfCB1bmRlZmluZWQ7XG4gIHNlbGVjdGlvbkhlYWRlclJlbmRlcmVyPzpcbiAgfCAoKG9wdGlvbnM6IHtcbiAgICBtb2RlOiBzdHJpbmc7XG4gICAgY2hlY2tlZDogYm9vbGVhbjtcbiAgICBpbmRldGVybWluYXRlOiBib29sZWFuO1xuICB9KSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQpXG4gIHwgdW5kZWZpbmVkO1xuICBoZWFkZXJDb2x1bW5TdHlsZT86XG4gIHwgKChzdGF0dXM6IHN0cmluZykgPT4gQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZClcbiAgfCBDU1NQcm9wZXJ0aWVzXG4gIHwgdW5kZWZpbmVkO1xuICBzZWxlY3RDb2x1bW5TdHlsZT86XG4gIHwgKChwcm9wczoge1xuICAgIGNoZWNrZWQ6IGJvb2xlYW47XG4gICAgZGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgcm93SW5kZXg6IG51bWJlcjtcbiAgICByb3dLZXk6IHN0cmluZztcbiAgfSkgPT4gQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZClcbiAgfCBDU1NQcm9wZXJ0aWVzXG4gIHwgdW5kZWZpbmVkO1xuICBzZWxlY3RDb2x1bW5Qb3NpdGlvbj86IFwibGVmdFwiIHwgXCJyaWdodFwiIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJvb3RzdHJhcFRhYmxlUmVmPFQgZXh0ZW5kcyBvYmplY3QgPSBhbnk+IHtcbiAgdGFibGU6IHtcbiAgICBwcm9wczoge1xuICAgICAgZGF0YTogVFtdO1xuICAgIH07XG4gIH07XG4gIHNlbGVjdGlvbkNvbnRleHQ/OlxuICB8IHtcbiAgICBzZWxlY3RlZD86IGFueVtdIHwgdW5kZWZpbmVkO1xuICB9XG4gIHwgdW5kZWZpbmVkO1xuICByb3dFeHBhbmRDb250ZXh0PzpcbiAgfCB7XG4gICAgc3RhdGU6IHtcbiAgICAgIGV4cGFuZGVkPzogYW55W10gfCB1bmRlZmluZWQ7XG4gICAgfTtcbiAgfVxuICB8IHVuZGVmaW5lZDtcbiAgcGFnaW5hdGlvbkNvbnRleHQ/OlxuICB8IHtcbiAgICBjdXJyUGFnZTogbnVtYmVyO1xuICAgIGN1cnJTaXplUGVyUGFnZTogbnVtYmVyO1xuICB9XG4gIHwgdW5kZWZpbmVkO1xuICBzb3J0Q29udGV4dD86XG4gIHwge1xuICAgIHN0YXRlOiB7XG4gICAgICBzb3J0Q29sdW1uOiBDb2x1bW5EZXNjcmlwdGlvbjxUPjtcbiAgICAgIHNvcnRPcmRlcjogU29ydE9yZGVyO1xuICAgIH07XG4gIH1cbiAgfCB1bmRlZmluZWQ7XG4gIGZpbHRlckNvbnRleHQ/OlxuICB8IHtcbiAgICBjdXJyRmlsdGVyczogYW55O1xuICB9XG4gIHwgdW5kZWZpbmVkO1xuICBjZWxsRWRpdENvbnRleHQ/OlxuICB8IHtcbiAgICBzdGFydEVkaXRpbmc6IChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyKSA9PiB2b2lkO1xuICB9XG4gIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJvb3RzdHJhcFRhYmxlUHJvcHM8VCBleHRlbmRzIG9iamVjdCA9IGFueSwgSyA9IG51bWJlcj4ge1xuICAvKipcbiAgICogVGVsbHMgcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nIHdoaWNoIGNvbHVtbiBpcyB1bmlxdWUuXG4gICAqL1xuICBrZXlGaWVsZDogc3RyaW5nO1xuICAvKipcbiAgICogIFByb3ZpZGVzIGRhdGEgZm9yIHlvdXIgdGFibGUuIEl0IGFjY2VwdHMgYSBzaW5nbGUgQXJyYXkgb2JqZWN0LlxuICAgKi9cbiAgZGF0YTogYW55W107XG4gIGNvbHVtbnM6IENvbHVtbkRlc2NyaXB0aW9uW107XG4gIGJvb3RzdHJhcDQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICByZW1vdGU/OlxuICB8IGJvb2xlYW5cbiAgfCBQYXJ0aWFsPHtcbiAgICBwYWdpbmF0aW9uOiBib29sZWFuO1xuICAgIGZpbHRlcjogYm9vbGVhbjtcbiAgICBzb3J0OiBib29sZWFuO1xuICAgIGNlbGxFZGl0OiBib29sZWFuO1xuICAgIHNlYXJjaDogYm9vbGVhbjtcbiAgfT5cbiAgfCB1bmRlZmluZWQ7XG4gIG5vRGF0YUluZGljYXRpb24/OlxuICB8ICgoKSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQgfCBzdHJpbmcpXG4gIHwgUmVhY3QuUmVhY3RFbGVtZW50XG4gIHwgc3RyaW5nXG4gIHwgdW5kZWZpbmVkO1xuICBzdHJpcGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgYm9yZGVyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBob3Zlcj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHRhYkluZGV4Q2VsbD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGlkPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjbGFzc2VzPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBoZWFkZXJDbGFzc2VzPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBib2R5Q2xhc3Nlcz86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgd3JhcHBlckNsYXNzZXM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGhlYWRlcldyYXBwZXJDbGFzc2VzPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjb25kZW5zZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogU2FtZSBhcyBIVE1MIGNhcHRpb24gdGFnLCB5b3UgY2FuIHNldCBpdCBhcyBTdHJpbmcgb3IgYSBSZWFjdCBKU1guXG4gICAqL1xuICBjYXB0aW9uPzogUmVhY3QuUmVhY3RFbGVtZW50IHwgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwYWdpbmF0aW9uPzogeyBvcHRpb25zPzogUGFnaW5hdGlvbk9wdGlvbnMgfCB1bmRlZmluZWQgfSB8IHVuZGVmaW5lZDtcbiAgZmlsdGVyPzogdW5rbm93biB8IHVuZGVmaW5lZDtcbiAgY2VsbEVkaXQ/OiBhbnk7XG4gIHNlbGVjdFJvdz86IFNlbGVjdFJvd1Byb3BzPFQ+IHwgdW5kZWZpbmVkO1xuICBleHBhbmRSb3c/OiBFeHBhbmRSb3dQcm9wczxULCBLPiB8IHVuZGVmaW5lZDtcbiAgcGFyZW50Q2xhc3NOYW1lPzpcbiAgfCBzdHJpbmdcbiAgfCAoKGlzRXhwYW5kOiBib29sZWFuLCByb3c6IFQsIHJvd0luZGV4OiBudW1iZXIpID0+IHN0cmluZylcbiAgfCB1bmRlZmluZWQ7XG4gIHJvd1N0eWxlPzpcbiAgfCAoKHJvdzogVCwgcm93SW5kZXg6IG51bWJlcikgPT4gQ1NTUHJvcGVydGllcylcbiAgfCBDU1NQcm9wZXJ0aWVzXG4gIHwgdW5kZWZpbmVkO1xuICByb3dFdmVudHM/OiBSb3dFdmVudEhhbmRsZXJQcm9wcyB8IHVuZGVmaW5lZDtcbiAgcm93Q2xhc3Nlcz86ICgocm93OiBULCByb3dJbmRleDogbnVtYmVyKSA9PiBzdHJpbmcpIHwgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBmaWx0ZXJzQ2xhc3Nlcz86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZmlsdGVyUG9zaXRpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGZvb3RlckNsYXNzZXM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGRlZmF1bHRTb3J0ZWQ/OiBbeyBkYXRhRmllbGQ6IGFueTsgb3JkZXI6IFNvcnRPcmRlciB9XSB8IHVuZGVmaW5lZDtcbiAgc29ydD86XG4gIHwge1xuICAgIGRhdGFGaWVsZD86IGFueTtcbiAgICBvcmRlcjogU29ydE9yZGVyO1xuICAgIHNvcnRGdW5jPzogYW55O1xuICAgIHNvcnRDYXJldD86IGFueTtcbiAgfVxuICB8IHVuZGVmaW5lZDtcbiAgZGVmYXVsdFNvcnREaXJlY3Rpb24/OiBTb3J0T3JkZXIgfCB1bmRlZmluZWQ7XG4gIG92ZXJsYXk/OiBhbnk7XG4gIG9uVGFibGVDaGFuZ2U/OiBUYWJsZUNoYW5nZUhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7XG4gIG9uU29ydD86IGFueTtcbiAgb25GaWx0ZXI/OiBhbnk7XG4gIG9uRXh0ZXJuYWxGaWx0ZXI/OiBhbnk7XG4gIC8qKlxuICAgKiBUaGlzIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIG9ubHkgd2hlbiBkYXRhIHNpemUgY2hhbmdlIGJ5IHNlYXJjaC9maWx0ZXIgZXRjLlxuICAgKi9cbiAgb25EYXRhU2l6ZUNoYW5nZT86ICgocHJvcHM6IHsgZGF0YVNpemU6IG51bWJlciB9KSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgc2VhcmNoPzogU2VhcmNoUHJvcHM8VD4gfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAvLyBUT0RPIEFkZGVkIE9uXG4gIGxvYWRpbmc/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBzb3J0RmllbGQ/OiBzdHJpbmc7XG4gIHNvcnRPcmRlcj86IHN0cmluZztcbiAgY3VyckZpbHRlcnM/OiBvYmplY3Q7XG59XG5cbi8vIGRlY2xhcmUgY2xhc3MgQm9vdHN0cmFwVGFibGU8XG4vLyAgIFQgZXh0ZW5kcyBvYmplY3QgPSBhbnksXG4vLyAgIEsgPSBudW1iZXJcbi8vID4gZXh0ZW5kcyBDb21wb25lbnQ8Qm9vdHN0cmFwVGFibGVQcm9wczxULCBLPj4ge31cbi8vIGV4cG9ydCBkZWZhdWx0IEJvb3RzdHJhcFRhYmxlO1xuXG4vKipcbiAqIFNlYXJjaCBwcm9wc1xuICpcbiAqIENvbnN1bHQgW2RvY3VtZW50YXRpb25dKGh0dHBzOi8vcmVhY3QtYm9vdHN0cmFwLXRhYmxlLmdpdGh1Yi5pby9yZWFjdC1ib290c3RyYXAtdGFibGUyL2RvY3Mvc2VhcmNoLXByb3BzLmh0bWwpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoUHJvcHM8VD4ge1xuICBwbGFjZWhvbGRlcj86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgc2VhcmNoVGV4dD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZGVmYXVsdFNlYXJjaD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyogY3VzdG9tIHNlYXJjaCBtZXRob2QsIHJldHVybiB0cnVlIGlmIG1hdGNoZWQgYW5kIGZhbHNlIGlmIG5vdCAqL1xuICBvbkNvbHVtbk1hdGNoPzpcbiAgfCAoKHNlYXJjaFByb3BzOiB7XG4gICAgc2VhcmNoVGV4dDogc3RyaW5nO1xuICAgIHZhbHVlOiBhbnk7XG4gICAgY29sdW1uOiBhbnk7XG4gICAgcm93OiBUO1xuICB9KSA9PiBib29sZWFuKVxuICB8IHVuZGVmaW5lZDtcbiAgb25DbGVhcj86ICgpID0+IHZvaWQ7XG4gIG9uU2VhcmNoPzogKHNlYXJjaFRleHQ6IHN0cmluZykgPT4gdm9pZDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRXhwYW5kQ29sdW1uUmVuZGVyZXJQcm9wcyB7XG4gIGV4cGFuZGVkOiBib29sZWFuO1xuICByb3dLZXk6IHN0cmluZztcbiAgZXhwYW5kYWJsZTogYm9vbGVhbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRXhwYW5kSGVhZGVyQ29sdW1uUmVuZGVyZXIge1xuICBpc0FueUV4cGFuZHM6IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIEV4cGFuZFJvd1Byb3BzPFQsIEsgPSBudW1iZXI+IHtcbiAgcmVuZGVyZXI6ICgocm93OiBULCByb3dJbmRleDogbnVtYmVyKSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQpIHwgdW5kZWZpbmVkO1xuICBleHBhbmRlZD86IEtbXSB8IHVuZGVmaW5lZDtcbiAgb25FeHBhbmQ/OlxuICB8ICgocm93OiBULCBpc0V4cGFuZDogYm9vbGVhbiwgcm93SW5kZXg6IG51bWJlciwgZTogU3ludGhldGljRXZlbnQpID0+IHZvaWQpXG4gIHwgdW5kZWZpbmVkO1xuICBvbkV4cGFuZEFsbD86XG4gIHwgKChpc0V4cGFuZEFsbDogYm9vbGVhbiwgcmVzdWx0czogVFtdLCBlOiBTeW50aGV0aWNFdmVudCkgPT4gdm9pZClcbiAgfCB1bmRlZmluZWQ7XG4gIG5vbkV4cGFuZGFibGU/OiBLW10gfCB1bmRlZmluZWQ7XG4gIHNob3dFeHBhbmRDb2x1bW4/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBvbmx5T25lRXhwYW5kaW5nPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgZXhwYW5kQnlDb2x1bW5Pbmx5PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgZXhwYW5kQ29sdW1uUmVuZGVyZXI/OlxuICB8ICgocHJvcHM6IEV4cGFuZENvbHVtblJlbmRlcmVyUHJvcHMpID0+IFJlYWN0LlJlYWN0RWxlbWVudClcbiAgfCB1bmRlZmluZWQ7XG4gIGV4cGFuZEhlYWRlckNvbHVtblJlbmRlcmVyPzpcbiAgfCAoKHByb3BzOiBFeHBhbmRIZWFkZXJDb2x1bW5SZW5kZXJlcikgPT4gUmVhY3QuUmVhY3RFbGVtZW50KVxuICB8IHVuZGVmaW5lZDtcbiAgZXhwYW5kQ29sdW1uUG9zaXRpb24/OiBcImxlZnRcIiB8IFwicmlnaHRcIiB8IHVuZGVmaW5lZDtcbiAgY2xhc3NOYW1lPzpcbiAgfCBzdHJpbmdcbiAgfCAoKGlzRXhwYW5kOiBib29sZWFuLCByb3c6IFQsIHJvd0luZGV4OiBudW1iZXIpID0+IHN0cmluZylcbiAgfCB1bmRlZmluZWQ7XG59XG5leHBvcnQgdHlwZSBUYWJsZUNvbHVtbkZpbHRlclByb3BzPEZWID0gYW55LCBUIGV4dGVuZHMgb2JqZWN0ID0gYW55PiA9IFBhcnRpYWw8e1xuICBpZDogc3RyaW5nO1xuICAvKipcbiAgICogIGN1c3RvbSB0aGUgaW5wdXQgcGxhY2Vob2xkZXJcbiAgICovXG4gIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIC8qKlxuICAgKiAgY3VzdG9tIGNsYXNzbmFtZSBvbiBpbnB1dFxuICAgKi9cbiAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiAgZGVmYXVsdCBmaWx0ZXJpbmcgdmFsdWVcbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogYW55O1xuICAvKipcbiAgICogIHlvdXIgY3VzdG9tIHN0eWxlcyBvbiBpbnB1dFxuICAgKi9cbiAgc3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXM7XG4gIC8qKlxuICAgKiAgaG93IGxvbmcgd2lsbCB0cmlnZ2VyIGZpbHRlcmluZyBhZnRlciB1c2VyIHR5cGluZywgZGVmYXVsdCBpcyA1MDAgbXNcbiAgICovXG4gIGRlbGF5OiBudW1iZXI7XG4gIC8qKlxuICAgKiBmb3JjZSB1cGRhdGUgdGhlIHRhYmxlIHdoZW4gZmlsdGVyIHZhbHVlIGNoYW5nZXMgZm9yIHJlbW90ZSBmaWx0ZXJpbmdcbiAgICovXG4gIGZvcmNlVXBkYXRlOiBib29sZWFuO1xuXG4gIC8qXG4gICAqIGV4cG9ydCBmaWx0ZXIgZnVuY3Rpb24gdG8gYWxsb3cgdXNlcnMgdG8gYWNjZXNzIGZpbHRlciBtZXRob2QgZXh0ZXJuYWxseS5cbiAgICovXG4gIGdldEZpbHRlcjogKGZpbHRlcjogKHZhbHVlOiBGVikgPT4gdm9pZCB8IFRbXSkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgbGlzdGVuZXIgd2hpY2ggd2lsbCBiZSBjYWxsZWQgd2hlbiBjb2x1bW4gZmlsdGVyIGJlaW5nIHRyaWdnZXJlZC4gSWYgeW91IHJldHVybiBhbiBhcnJheSB2YWx1ZSwgcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nIHdpbGwgYWRvcHQgdGhpcyB2YWx1ZSBhcyB0aGUgZmluYWwgZmlsdGVyZWQgcmVzdWx0LlxuICAgKi9cbiAgb25GaWx0ZXI6IChmaWx0ZXJWYWx1ZTogRlYpID0+IHZvaWQgfCBUW107XG59PjtcbiIsImltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IENvbHVtbkRlc2NyaXB0aW9uIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IENlbGxFdmVudERlbGVnYXRlciBhcyBldmVudERlbGVnYXRlciB9IGZyb20gXCIuL2NlbGwtZXZlbnQtZGVsZWdhdGVyXCI7XG5pbXBvcnQgXyBmcm9tIFwiLi91dGlsc1wiO1xuXG5pbnRlcmZhY2UgRm9vdGVyQ2VsbFByb3BzIHtcbiAgY29sdW1uRGF0YT86IGFueVtdO1xuICBpbmRleD86IG51bWJlcjtcbiAgY29sdW1uOiBDb2x1bW5EZXNjcmlwdGlvbjtcbn1cblxuY2xhc3MgRm9vdGVyQ2VsbCBleHRlbmRzIGV2ZW50RGVsZWdhdGVyKENvbXBvbmVudCk8Rm9vdGVyQ2VsbFByb3BzPiB7XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGluZGV4LCBjb2x1bW4sIGNvbHVtbkRhdGEgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCB7XG4gICAgICBmb290ZXIsXG4gICAgICBmb290ZXJUaXRsZSxcbiAgICAgIGZvb3RlckFsaWduLFxuICAgICAgZm9vdGVyRm9ybWF0dGVyLFxuICAgICAgZm9vdGVyRXZlbnRzLFxuICAgICAgZm9vdGVyQ2xhc3NlcyxcbiAgICAgIGZvb3RlclN0eWxlLFxuICAgICAgZm9vdGVyQXR0cnMsXG4gICAgfSA9IGNvbHVtbjtcblxuICAgIGNvbnN0IGRlbGVnYXRlRXZlbnRzID0gdGhpcy5kZWxlZ2F0ZShmb290ZXJFdmVudHMpO1xuICAgIGNvbnN0IGNlbGxBdHRycyA9IHtcbiAgICAgIC4uLihfLmlzRnVuY3Rpb24oZm9vdGVyQXR0cnMpXG4gICAgICAgID8gZm9vdGVyQXR0cnMoY29sdW1uLCBpbmRleCEpXG4gICAgICAgIDogZm9vdGVyQXR0cnMpLFxuICAgICAgLi4uZGVsZWdhdGVFdmVudHMsXG4gICAgfTtcblxuICAgIGxldCB0ZXh0ID0gXCJcIjtcbiAgICBpZiAoXy5pc1N0cmluZyhmb290ZXIpKSB7XG4gICAgICB0ZXh0ID0gZm9vdGVyO1xuICAgIH0gZWxzZSBpZiAoXy5pc0Z1bmN0aW9uKGZvb3RlcikpIHtcbiAgICAgIHRleHQgPSBmb290ZXIoY29sdW1uRGF0YSB8fCBbXSwgY29sdW1uLCBpbmRleCB8fCAwKTtcbiAgICB9XG5cbiAgICBsZXQgY2VsbFN0eWxlOiBhbnkgPSB7fTtcbiAgICBjb25zdCBjZWxsQ2xhc3NlcyA9IF8uaXNGdW5jdGlvbihmb290ZXJDbGFzc2VzKVxuICAgICAgPyBmb290ZXJDbGFzc2VzKGNvbHVtbiwgaW5kZXggfHwgMClcbiAgICAgIDogZm9vdGVyQ2xhc3NlcztcblxuICAgIGlmIChmb290ZXJTdHlsZSkge1xuICAgICAgY2VsbFN0eWxlID0gXy5pc0Z1bmN0aW9uKGZvb3RlclN0eWxlKVxuICAgICAgICA/IGZvb3RlclN0eWxlKGNvbHVtbiwgaW5kZXggfHwgMClcbiAgICAgICAgOiBmb290ZXJTdHlsZTtcbiAgICAgIGNlbGxTdHlsZSA9IGNlbGxTdHlsZSA/IHsgLi4uY2VsbFN0eWxlIH0gOiBjZWxsU3R5bGU7XG4gICAgfVxuXG4gICAgaWYgKGZvb3RlclRpdGxlKSB7XG4gICAgICBjZWxsQXR0cnMudGl0bGUgPSBfLmlzRnVuY3Rpb24oZm9vdGVyVGl0bGUpXG4gICAgICAgID8gZm9vdGVyVGl0bGUoY29sdW1uLCBpbmRleCB8fCAwKVxuICAgICAgICA6IHRleHQ7XG4gICAgfVxuXG4gICAgaWYgKGZvb3RlckFsaWduKSB7XG4gICAgICBjZWxsU3R5bGUudGV4dEFsaWduID0gXy5pc0Z1bmN0aW9uKGZvb3RlckFsaWduKVxuICAgICAgICA/IGZvb3RlckFsaWduKGNvbHVtbiwgaW5kZXggfHwgMClcbiAgICAgICAgOiBmb290ZXJBbGlnbjtcbiAgICB9XG5cbiAgICBpZiAoY2VsbENsYXNzZXMpIGNlbGxBdHRycy5jbGFzc05hbWUgPSBjcyhjZWxsQXR0cnMuY2xhc3NOYW1lLCBjZWxsQ2xhc3Nlcyk7XG4gICAgaWYgKCFfLmlzRW1wdHlPYmplY3QoY2VsbFN0eWxlKSkgY2VsbEF0dHJzLnN0eWxlID0gY2VsbFN0eWxlO1xuXG4gICAgY29uc3QgY2hpbGRyZW4gPSBmb290ZXJGb3JtYXR0ZXJcbiAgICAgID8gZm9vdGVyRm9ybWF0dGVyKGNvbHVtbiwgaW5kZXggfHwgMCwgeyB0ZXh0IH0pXG4gICAgICA6IHRleHQ7XG5cbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcInRoXCIsIGNlbGxBdHRycywgY2hpbGRyZW4gYXMgUmVhY3ROb2RlKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBGb290ZXJDZWxsO1xuIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcblxuaW1wb3J0IHtcbiAgQ0hFQ0tCT1hfU1RBVFVTX0NIRUNLRUQsXG4gIENIRUNLQk9YX1NUQVRVU19JTkRFVEVSTUlOQVRFLFxuICBDSEVDS0JPWF9TVEFUVVNfVU5DSEVDS0VELFxuICBST1dfU0VMRUNUX1NJTkdMRSxcbn0gZnJvbSBcIi4uL2NvbnN0XCI7XG5pbXBvcnQgZGF0YU9wZXJhdG9yIGZyb20gXCIuLi9zdG9yZS9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IGdldFNlbGVjdGlvblN1bW1hcnkgfSBmcm9tIFwiLi4vc3RvcmUvc2VsZWN0aW9uXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0aW9uQ29udGV4dFZhbHVlIHtcbiAgc2VsZWN0ZWQ/OiBhbnlbXTtcbiAgb25Sb3dTZWxlY3Q/OiAoXG4gICAgcm93S2V5OiBhbnksXG4gICAgY2hlY2tlZDogYm9vbGVhbixcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGU6IGFueVxuICApID0+IHZvaWQ7XG4gIG9uQWxsUm93c1NlbGVjdD86IChlOiBhbnksIGlzVW5TZWxlY3Q6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIGFsbFJvd3NTZWxlY3RlZD86IGJvb2xlYW47XG4gIGFsbFJvd3NOb3RTZWxlY3RlZD86IGJvb2xlYW47XG4gIGNoZWNrZWRTdGF0dXM/OiBzdHJpbmc7XG4gIG1vZGU/OiBzdHJpbmc7XG4gIGhpZGVTZWxlY3RDb2x1bW4/OiBib29sZWFuO1xuICBjbGlja1RvU2VsZWN0PzogYm9vbGVhbjtcbiAgY2xpY2tUb1NlbGVjdEFuZEVkaXRDZWxsPzogYm9vbGVhbjtcbiAgb25TZWxlY3Q/OiAoXG4gICAgcm93OiBhbnksXG4gICAgY2hlY2tlZDogYm9vbGVhbixcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGU6IGFueVxuICApID0+IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIG9uU2VsZWN0QWxsPzogKGNoZWNrZWQ6IGJvb2xlYW4sIHNlbGVjdGVkUm93czogYW55W10sIGU6IGFueSkgPT4gdm9pZCB8IGFueVtdO1xuICBub25TZWxlY3RhYmxlPzogYW55W107XG4gIGhpZGVTZWxlY3RBbGw/OiBib29sZWFuO1xuICBzZWxlY3Rpb25IZWFkZXJSZW5kZXJlcj86IChhcmdzOiB7XG4gICAgbW9kZT86IHN0cmluZztcbiAgICBjaGVja2VkOiBib29sZWFuO1xuICAgIGluZGV0ZXJtaW5hdGU6IGJvb2xlYW47XG4gIH0pID0+IFJlYWN0LlJlYWN0Tm9kZTtcbiAgaGVhZGVyQ29sdW1uU3R5bGU/OlxuICB8IFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgfCAoKGNoZWNrZWRTdGF0dXM6IHN0cmluZykgPT4gUmVhY3QuQ1NTUHJvcGVydGllcyk7XG59XG5cbmludGVyZmFjZSBTZWxlY3Rpb25Qcm92aWRlclByb3BzIHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgZGF0YTogYW55W107XG4gIGtleUZpZWxkOiBzdHJpbmc7XG4gIHNlbGVjdFJvdzoge1xuICAgIHNlbGVjdGVkPzogYW55W107XG4gICAgbW9kZT86IHN0cmluZztcbiAgICBoaWRlU2VsZWN0Q29sdW1uPzogYm9vbGVhbjtcbiAgICBjbGlja1RvU2VsZWN0PzogYm9vbGVhbjtcbiAgICBjbGlja1RvU2VsZWN0QW5kRWRpdENlbGw/OiBib29sZWFuO1xuICAgIG9uU2VsZWN0PzogKFxuICAgICAgcm93OiBhbnksXG4gICAgICBjaGVja2VkOiBib29sZWFuLFxuICAgICAgcm93SW5kZXg6IG51bWJlcixcbiAgICAgIGU6IGFueVxuICAgICkgPT4gYm9vbGVhbjtcbiAgICBvblNlbGVjdEFsbD86IChcbiAgICAgIGNoZWNrZWQ6IGJvb2xlYW4sXG4gICAgICBzZWxlY3RlZFJvd3M6IGFueVtdLFxuICAgICAgZTogYW55XG4gICAgKSA9PiB2b2lkIHwgYW55W107XG4gICAgbm9uU2VsZWN0YWJsZT86IGFueVtdO1xuICAgIGhpZGVTZWxlY3RBbGw/OiBib29sZWFuO1xuICAgIHNlbGVjdGlvbkhlYWRlclJlbmRlcmVyPzogKGFyZ3M6IHtcbiAgICAgIG1vZGU/OiBzdHJpbmc7XG4gICAgICBjaGVja2VkOiBib29sZWFuO1xuICAgICAgaW5kZXRlcm1pbmF0ZTogYm9vbGVhbjtcbiAgICB9KSA9PiBSZWFjdC5SZWFjdE5vZGU7XG4gICAgaGVhZGVyQ29sdW1uU3R5bGU/OlxuICAgIHwgUmVhY3QuQ1NTUHJvcGVydGllc1xuICAgIHwgKChjaGVja2VkU3RhdHVzOiBzdHJpbmcpID0+IFJlYWN0LkNTU1Byb3BlcnRpZXMpO1xuICB9O1xufVxuXG5jb25zdCBkZWZhdWx0U2VsZWN0aW9uQ29udGV4dCA9IHt9O1xuY29uc3QgU2VsZWN0aW9uQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8U2VsZWN0aW9uQ29udGV4dFZhbHVlPihcbiAgZGVmYXVsdFNlbGVjdGlvbkNvbnRleHRcbik7XG5cbmNsYXNzIFNlbGVjdGlvblByb3ZpZGVyIGV4dGVuZHMgQ29tcG9uZW50PFNlbGVjdGlvblByb3ZpZGVyUHJvcHM+IHtcbiAgc2VsZWN0ZWQ6IGFueVtdO1xuICBpc0hhbmRsZVJvd1NlbGVjdDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogU2VsZWN0aW9uUHJvdmlkZXJQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnNlbGVjdGVkID0gcHJvcHMuc2VsZWN0Um93LnNlbGVjdGVkIHx8IFtdO1xuICAgIHRoaXMuaXNIYW5kbGVSb3dTZWxlY3QgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIGV4cG9zZWQgQVBJXG4gIGdldFNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkO1xuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKG5leHRQcm9wczogU2VsZWN0aW9uUHJvdmlkZXJQcm9wcykge1xuICAgIGlmICh0aGlzLmlzSGFuZGxlUm93U2VsZWN0KSB7XG4gICAgICB0aGlzLmlzSGFuZGxlUm93U2VsZWN0ID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIG5leHRQcm9wcy5zZWxlY3RSb3cgJiZcbiAgICAgIG5leHRQcm9wcy5zZWxlY3RSb3cuc2VsZWN0ZWQgJiZcbiAgICAgICFfLmlzRXF1YWwobmV4dFByb3BzLnNlbGVjdFJvdy5zZWxlY3RlZCwgdGhpcy5zZWxlY3RlZClcbiAgICApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWQgPSBuZXh0UHJvcHMuc2VsZWN0Um93LnNlbGVjdGVkO1xuICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVJvd1NlbGVjdCA9IChcbiAgICByb3dLZXk6IGFueSxcbiAgICBjaGVja2VkOiBib29sZWFuLFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgZTogYW55XG4gICkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGRhdGEsXG4gICAgICBrZXlGaWVsZCxcbiAgICAgIHNlbGVjdFJvdzogeyBtb2RlLCBvblNlbGVjdCB9LFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgbGV0IGN1cnJTZWxlY3RlZCA9IFsuLi50aGlzLnNlbGVjdGVkXTtcblxuICAgIGxldCByZXN1bHQgPSB0cnVlO1xuICAgIGlmIChvblNlbGVjdCkge1xuICAgICAgY29uc3Qgcm93ID0gZGF0YU9wZXJhdG9yLmdldFJvd0J5Um93SWQoZGF0YSwga2V5RmllbGQsIHJvd0tleSk7XG4gICAgICByZXN1bHQgPSBvblNlbGVjdChyb3csIGNoZWNrZWQsIHJvd0luZGV4LCBlKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0ID09PSB0cnVlIHx8IHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAobW9kZSA9PT0gUk9XX1NFTEVDVF9TSU5HTEUpIHtcbiAgICAgICAgY3VyclNlbGVjdGVkID0gW3Jvd0tleV07XG4gICAgICB9IGVsc2UgaWYgKGNoZWNrZWQpIHtcbiAgICAgICAgY3VyclNlbGVjdGVkLnB1c2gocm93S2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJTZWxlY3RlZCA9IGN1cnJTZWxlY3RlZC5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZSAhPT0gcm93S2V5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZCA9IGN1cnJTZWxlY3RlZDtcbiAgICB0aGlzLmlzSGFuZGxlUm93U2VsZWN0ID0gdHJ1ZTtcbiAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gIH07XG5cbiAgaGFuZGxlQWxsUm93c1NlbGVjdCA9IChlOiBhbnksIGlzVW5TZWxlY3Q6IGJvb2xlYW4pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBkYXRhLFxuICAgICAga2V5RmllbGQsXG4gICAgICBzZWxlY3RSb3c6IHsgb25TZWxlY3RBbGwsIG5vblNlbGVjdGFibGUgfSxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHNlbGVjdGVkIH0gPSB0aGlzO1xuXG4gICAgbGV0IGN1cnJTZWxlY3RlZDogYW55O1xuXG4gICAgaWYgKCFpc1VuU2VsZWN0KSB7XG4gICAgICBjdXJyU2VsZWN0ZWQgPSBzZWxlY3RlZC5jb25jYXQoXG4gICAgICAgIGRhdGFPcGVyYXRvci5zZWxlY3RhYmxlS2V5cyhkYXRhLCBrZXlGaWVsZCwgbm9uU2VsZWN0YWJsZSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJTZWxlY3RlZCA9IHNlbGVjdGVkLmZpbHRlcihcbiAgICAgICAgKHMpID0+IHR5cGVvZiBkYXRhLmZpbmQoKGQpID0+IF8uZ2V0KGQsIGtleUZpZWxkKSA9PT0gcykgPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdDogYW55O1xuICAgIGlmIChvblNlbGVjdEFsbCkge1xuICAgICAgcmVzdWx0ID0gb25TZWxlY3RBbGwoXG4gICAgICAgICFpc1VuU2VsZWN0LFxuICAgICAgICBkYXRhT3BlcmF0b3IuZ2V0U2VsZWN0ZWRSb3dzKFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAga2V5RmllbGQsXG4gICAgICAgICAgaXNVblNlbGVjdCA/IHNlbGVjdGVkIDogY3VyclNlbGVjdGVkXG4gICAgICAgICksXG4gICAgICAgIGVcbiAgICAgICk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XG4gICAgICAgIGN1cnJTZWxlY3RlZCA9IHJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZCA9IGN1cnJTZWxlY3RlZDtcbiAgICB0aGlzLmlzSGFuZGxlUm93U2VsZWN0ID0gdHJ1ZTtcbiAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgYWxsUm93c1NlbGVjdGVkLCBhbGxSb3dzTm90U2VsZWN0ZWQgfSA9IGdldFNlbGVjdGlvblN1bW1hcnkoXG4gICAgICB0aGlzLnByb3BzLmRhdGEsXG4gICAgICB0aGlzLnByb3BzLmtleUZpZWxkLFxuICAgICAgdGhpcy5zZWxlY3RlZFxuICAgICk7XG5cbiAgICBsZXQgY2hlY2tlZFN0YXR1czogc3RyaW5nO1xuXG4gICAgaWYgKGFsbFJvd3NTZWxlY3RlZCkge1xuICAgICAgY2hlY2tlZFN0YXR1cyA9IENIRUNLQk9YX1NUQVRVU19DSEVDS0VEO1xuICAgIH0gZWxzZSBpZiAoYWxsUm93c05vdFNlbGVjdGVkKSB7XG4gICAgICBjaGVja2VkU3RhdHVzID0gQ0hFQ0tCT1hfU1RBVFVTX1VOQ0hFQ0tFRDtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hlY2tlZFN0YXR1cyA9IENIRUNLQk9YX1NUQVRVU19JTkRFVEVSTUlOQVRFO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8U2VsZWN0aW9uQ29udGV4dC5Qcm92aWRlclxuICAgICAgICB2YWx1ZT17e1xuICAgICAgICAgIC4uLnRoaXMucHJvcHMuc2VsZWN0Um93LFxuICAgICAgICAgIHNlbGVjdGVkOiB0aGlzLnNlbGVjdGVkLFxuICAgICAgICAgIG9uUm93U2VsZWN0OiB0aGlzLmhhbmRsZVJvd1NlbGVjdCxcbiAgICAgICAgICBvbkFsbFJvd3NTZWxlY3Q6IHRoaXMuaGFuZGxlQWxsUm93c1NlbGVjdCxcbiAgICAgICAgICBhbGxSb3dzU2VsZWN0ZWQsXG4gICAgICAgICAgYWxsUm93c05vdFNlbGVjdGVkLFxuICAgICAgICAgIGNoZWNrZWRTdGF0dXMsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgPC9TZWxlY3Rpb25Db250ZXh0LlByb3ZpZGVyPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNlbGVjdGlvbkNvbnRleHQgPSAoKSA9PiAoe1xuICBQcm92aWRlcjogU2VsZWN0aW9uUHJvdmlkZXIsXG4gIENvbnN1bWVyOiBTZWxlY3Rpb25Db250ZXh0LkNvbnN1bWVyLFxufSk7XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBNb3VzZUV2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IENlbGxFdmVudERlbGVnYXRlciBhcyBldmVudERlbGVnYXRlciB9IGZyb20gXCIuL2NlbGwtZXZlbnQtZGVsZWdhdGVyXCI7XG5pbXBvcnQgXyBmcm9tIFwiLi91dGlsc1wiO1xuXG5pbnRlcmZhY2UgQ2VsbFByb3BzIHtcbiAgcm93OiBhbnk7XG4gIHJvd2luZGV4OiBudW1iZXI7XG4gIGNvbHVtbjogYW55O1xuICBjb2x1bW5pbmRleDogbnVtYmVyO1xuICBhdHN0YXJ0PzogKHJvd0luZGV4OiBudW1iZXIsIGNvbHVtbkluZGV4OiBudW1iZXIpID0+IHZvaWQ7XG4gIGVkaXRhYmxlPzogc3RyaW5nO1xuICBjbGlja3RvZWRpdD86IHN0cmluZztcbiAgZGJjbGlja3RvZWRpdD86IHN0cmluZztcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xuICB0YWJJbmRleD86IG51bWJlcjtcbn1cblxuY2xhc3MgQ2VsbCBleHRlbmRzIGV2ZW50RGVsZWdhdGVyKENvbXBvbmVudCk8Q2VsbFByb3BzPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBDZWxsUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5jcmVhdGVIYW5kbGVFZGl0aW5nQ2VsbCA9IHRoaXMuY3JlYXRlSGFuZGxlRWRpdGluZ0NlbGwuYmluZCh0aGlzKTtcbiAgfVxuXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6IENlbGxQcm9wcykge1xuICAgIGxldCBzaG91bGRVcGRhdGUgPSBmYWxzZTtcbiAgICBpZiAobmV4dFByb3BzLmNvbHVtbi5pc0R1bW15RmllbGQpIHtcbiAgICAgIHNob3VsZFVwZGF0ZSA9ICFfLmlzRXF1YWwodGhpcy5wcm9wcy5yb3csIG5leHRQcm9wcy5yb3cpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaG91bGRVcGRhdGUgPVxuICAgICAgICBfLmdldCh0aGlzLnByb3BzLnJvdywgdGhpcy5wcm9wcy5jb2x1bW4uZGF0YUZpZWxkKSAhPT1cbiAgICAgICAgXy5nZXQobmV4dFByb3BzLnJvdywgbmV4dFByb3BzLmNvbHVtbi5kYXRhRmllbGQpO1xuICAgIH1cblxuICAgIGlmIChzaG91bGRVcGRhdGUpIHJldHVybiB0cnVlO1xuXG4gICAgLy8gaWYgKG5leHRQcm9wcy5mb3JtYXR0ZXIpXG5cbiAgICBzaG91bGRVcGRhdGUgPVxuICAgICAgKG5leHRQcm9wcy5jb2x1bW4uZm9ybWF0dGVyXG4gICAgICAgID8gIV8uaXNFcXVhbCh0aGlzLnByb3BzLnJvdywgbmV4dFByb3BzLnJvdylcbiAgICAgICAgOiBmYWxzZSkgfHxcbiAgICAgIHRoaXMucHJvcHMuY29sdW1uLmhpZGRlbiAhPT0gbmV4dFByb3BzLmNvbHVtbi5oaWRkZW4gfHxcbiAgICAgIHRoaXMucHJvcHMuY29sdW1uLmlzRHVtbXlGaWVsZCAhPT0gbmV4dFByb3BzLmNvbHVtbi5pc0R1bW15RmllbGQgfHxcbiAgICAgIHRoaXMucHJvcHMucm93aW5kZXggIT09IG5leHRQcm9wcy5yb3dpbmRleCB8fFxuICAgICAgdGhpcy5wcm9wcy5jb2x1bW5pbmRleCAhPT0gbmV4dFByb3BzLmNvbHVtbmluZGV4IHx8XG4gICAgICB0aGlzLnByb3BzLmNsYXNzTmFtZSAhPT0gbmV4dFByb3BzLmNsYXNzTmFtZSB8fFxuICAgICAgdGhpcy5wcm9wcy50aXRsZSAhPT0gbmV4dFByb3BzLnRpdGxlIHx8XG4gICAgICB0aGlzLnByb3BzLmVkaXRhYmxlICE9PSBuZXh0UHJvcHMuZWRpdGFibGUgfHxcbiAgICAgIHRoaXMucHJvcHMuY2xpY2t0b2VkaXQgIT09IG5leHRQcm9wcy5jbGlja3RvZWRpdCB8fFxuICAgICAgdGhpcy5wcm9wcy5kYmNsaWNrdG9lZGl0ICE9PSBuZXh0UHJvcHMuZGJjbGlja3RvZWRpdCB8fFxuICAgICAgIV8uaXNFcXVhbCh0aGlzLnByb3BzLnN0eWxlLCBuZXh0UHJvcHMuc3R5bGUpIHx8XG4gICAgICAhXy5pc0VxdWFsKFxuICAgICAgICB0aGlzLnByb3BzLmNvbHVtbi5mb3JtYXRFeHRyYURhdGEsXG4gICAgICAgIG5leHRQcm9wcy5jb2x1bW4uZm9ybWF0RXh0cmFEYXRhXG4gICAgICApIHx8XG4gICAgICAhXy5pc0VxdWFsKHRoaXMucHJvcHMuY29sdW1uLmV2ZW50cywgbmV4dFByb3BzLmNvbHVtbi5ldmVudHMpIHx8XG4gICAgICAhXy5pc0VxdWFsKHRoaXMucHJvcHMuY29sdW1uLmF0dHJzLCBuZXh0UHJvcHMuY29sdW1uLmF0dHJzKSB8fFxuICAgICAgdGhpcy5wcm9wcy50YWJJbmRleCAhPT0gbmV4dFByb3BzLnRhYkluZGV4O1xuXG4gICAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbiAgfVxuXG4gIGNyZWF0ZUhhbmRsZUVkaXRpbmdDZWxsKG9yaWdpbkZ1bmM6IChlOiBNb3VzZUV2ZW50KSA9PiB2b2lkKSB7XG4gICAgcmV0dXJuIChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IGF0c3RhcnQsIHJvd2luZGV4LCBjb2x1bW5pbmRleCwgY2xpY2t0b2VkaXQsIGRiY2xpY2t0b2VkaXQgfSA9XG4gICAgICAgIHRoaXMucHJvcHM7XG4gICAgICBpZiAoKGNsaWNrdG9lZGl0IHx8IGRiY2xpY2t0b2VkaXQpICYmIF8uaXNGdW5jdGlvbihvcmlnaW5GdW5jKSkge1xuICAgICAgICBvcmlnaW5GdW5jKGUpO1xuICAgICAgfVxuICAgICAgaWYgKGF0c3RhcnQpIHtcbiAgICAgICAgYXRzdGFydChyb3dpbmRleCwgY29sdW1uaW5kZXgpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgcm93LFxuICAgICAgY29sdW1uLFxuICAgICAgYXRzdGFydCxcbiAgICAgIHJvd2luZGV4LFxuICAgICAgY29sdW1uaW5kZXgsXG4gICAgICBlZGl0YWJsZSxcbiAgICAgIGNsaWNrdG9lZGl0LFxuICAgICAgZGJjbGlja3RvZWRpdCxcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGRhdGFGaWVsZCwgZm9ybWF0dGVyLCBmb3JtYXRFeHRyYURhdGEgfSA9IGNvbHVtbjtcbiAgICBjb25zdCBhdHRycyA9IHRoaXMuZGVsZWdhdGUoeyAuLi5yZXN0IH0pO1xuICAgIGxldCBjb250ZW50ID0gY29sdW1uLmlzRHVtbXlGaWVsZCA/IG51bGwgOiBfLmdldChyb3csIGRhdGFGaWVsZCk7XG5cbiAgICBpZiAoZm9ybWF0dGVyKSB7XG4gICAgICBjb250ZW50ID0gY29sdW1uLmZvcm1hdHRlcihcbiAgICAgICAgY29udGVudCxcbiAgICAgICAgcm93LFxuICAgICAgICByb3dpbmRleCxcbiAgICAgICAgZm9ybWF0RXh0cmFEYXRhXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChjbGlja3RvZWRpdCA9PT0gXCJ0cnVlXCIgJiYgZWRpdGFibGUgPT09IFwidHJ1ZVwiKSB7XG4gICAgICBhdHRycy5vbkNsaWNrID0gdGhpcy5jcmVhdGVIYW5kbGVFZGl0aW5nQ2VsbChhdHRycy5vbkNsaWNrKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgZGJjbGlja3RvZWRpdCA9PT0gXCJ0cnVlXCIgJiZcbiAgICAgIGVkaXRhYmxlID09PSBcInRydWVcIlxuICAgICkge1xuICAgICAgYXR0cnMub25Eb3VibGVDbGljayA9IHRoaXMuY3JlYXRlSGFuZGxlRWRpdGluZ0NlbGwoYXR0cnMub25Eb3VibGVDbGljayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDx0ZCB7Li4uYXR0cnN9PlxuICAgICAgICB7dHlwZW9mIGNvbnRlbnQgPT09IFwiYm9vbGVhblwiID8gYCR7Y29udGVudH1gIDogY29udGVudH1cbiAgICAgIDwvdGQ+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDZWxsO1xuIiwiaW1wb3J0IF8gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBnZXRSb3dCeVJvd0lkIH0gZnJvbSBcIi4vcm93c1wiO1xuXG5leHBvcnQgY29uc3QgZWRpdENlbGwgPSAoZGF0YTogYW55LCBrZXlGaWVsZDogYW55LCByb3dJZDogYW55LCBkYXRhRmllbGQ6IGFueSwgbmV3VmFsdWU6IGFueSkgPT4ge1xuICBjb25zdCByb3cgPSBnZXRSb3dCeVJvd0lkKGRhdGEsIGtleUZpZWxkLCByb3dJZCk7XG4gIGlmIChyb3cpIF8uc2V0KHJvdywgZGF0YUZpZWxkLCBuZXdWYWx1ZSk7XG59O1xuIiwiaW1wb3J0IGNzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IFByb3BlcnR5IH0gZnJvbSBcImNzc3R5cGVcIjtcbmltcG9ydCB7IEZJTFRFUlNfUE9TSVRJT05fSU5MSU5FLCBTT1JUX0RFU0MgfSBmcm9tIFwiLi9jb25zdFwiO1xuaW1wb3J0IHsgQ2VsbEV2ZW50RGVsZWdhdGVyIGFzIGV2ZW50RGVsZWdhdGVyIH0gZnJvbSBcIi4vY2VsbC1ldmVudC1kZWxlZ2F0ZXJcIjtcbmltcG9ydCBTb3J0Q2FyZXQgZnJvbSBcIi4vc29ydC9jYXJldFwiO1xuaW1wb3J0IFNvcnRTeW1ib2wgZnJvbSBcIi4vc29ydC9zeW1ib2xcIjtcbmltcG9ydCBfIGZyb20gXCIuL3V0aWxzXCI7XG5cbmludGVyZmFjZSBIZWFkZXJDZWxsUHJvcHMge1xuICBjb2x1bW46IHtcbiAgICBkYXRhRmllbGQ6IHN0cmluZztcbiAgICB0ZXh0OiBzdHJpbmc7XG4gICAgdHlwZT86IHN0cmluZztcbiAgICBpc0R1bW15RmllbGQ/OiBib29sZWFuO1xuICAgIGhpZGRlbj86IGJvb2xlYW47XG4gICAgaGVhZGVyRm9ybWF0dGVyPzogKFxuICAgICAgY29sdW1uOiBhbnksXG4gICAgICBpbmRleDogbnVtYmVyLFxuICAgICAgZXh0cmFEYXRhOiBhbnlcbiAgICApID0+IFJlYWN0LlJlYWN0Tm9kZTtcbiAgICBmb3JtYXR0ZXI/OiAoXG4gICAgICBjZWxsOiBhbnksXG4gICAgICByb3c6IGFueSxcbiAgICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgICBmb3JtYXRFeHRyYURhdGE6IGFueVxuICAgICkgPT4gUmVhY3QuUmVhY3ROb2RlO1xuICAgIGZvcm1hdEV4dHJhRGF0YT86IGFueTtcbiAgICBoZWFkZXJDbGFzc2VzPzogc3RyaW5nIHwgKChjb2x1bW46IGFueSwgaW5kZXg6IG51bWJlcikgPT4gc3RyaW5nKTtcbiAgICBjbGFzc2VzPzogc3RyaW5nIHwgKChjZWxsOiBhbnksIHJvdzogYW55LCByb3dJbmRleDogbnVtYmVyKSA9PiBzdHJpbmcpO1xuICAgIGhlYWRlclN0eWxlPzpcbiAgICB8IFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgICB8ICgoY29sdW1uOiBhbnksIGluZGV4OiBudW1iZXIpID0+IFJlYWN0LkNTU1Byb3BlcnRpZXMpO1xuICAgIGhlYWRlclNvcnRpbmdDbGFzc2VzPzpcbiAgICB8IHN0cmluZ1xuICAgIHwgKChcbiAgICAgIGNvbHVtbjogYW55LFxuICAgICAgc29ydE9yZGVyOiBzdHJpbmcsXG4gICAgICBpc0xhc3RTb3J0aW5nOiBib29sZWFuLFxuICAgICAgaW5kZXg6IG51bWJlclxuICAgICkgPT4gc3RyaW5nKTtcbiAgICBoZWFkZXJTb3J0aW5nU3R5bGU/OlxuICAgIHwgUmVhY3QuQ1NTUHJvcGVydGllc1xuICAgIHwgKChcbiAgICAgIGNvbHVtbjogYW55LFxuICAgICAgc29ydE9yZGVyOiBzdHJpbmcsXG4gICAgICBpc0xhc3RTb3J0aW5nOiBib29sZWFuLFxuICAgICAgaW5kZXg6IG51bWJlclxuICAgICkgPT4gUmVhY3QuQ1NTUHJvcGVydGllcyk7XG4gICAgc3R5bGU/OlxuICAgIHwgUmVhY3QuQ1NTUHJvcGVydGllc1xuICAgIHwgKChjZWxsOiBhbnksIHJvdzogYW55LCByb3dJbmRleDogbnVtYmVyKSA9PiBSZWFjdC5DU1NQcm9wZXJ0aWVzKTtcbiAgICBoZWFkZXJUaXRsZT86IGJvb2xlYW4gfCAoKGNvbHVtbjogYW55LCBpbmRleDogbnVtYmVyKSA9PiBib29sZWFuIHwgc3RyaW5nKTtcbiAgICB0aXRsZT86XG4gICAgfCBib29sZWFuXG4gICAgfCAoKGNlbGw6IGFueSwgcm93OiBhbnksIHJvd0luZGV4OiBudW1iZXIpID0+IGJvb2xlYW4gfCBzdHJpbmcpO1xuICAgIGhlYWRlckV2ZW50cz86IFJlY29yZDxzdHJpbmcsIChlOiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB2b2lkPjtcbiAgICBldmVudHM/OiBSZWNvcmQ8XG4gICAgICBzdHJpbmcsXG4gICAgICAoY2VsbDogYW55LCByb3c6IGFueSwgcm93SW5kZXg6IG51bWJlciwgZTogUmVhY3QuTW91c2VFdmVudCkgPT4gdm9pZFxuICAgID47XG4gICAgaGVhZGVyQWxpZ24/OlxuICAgIHwgUHJvcGVydHkuVGV4dEFsaWduXG4gICAgfCAoKGNvbHVtbjogYW55LCBpbmRleDogbnVtYmVyKSA9PiBQcm9wZXJ0eS5UZXh0QWxpZ24pO1xuICAgIGFsaWduPzogc3RyaW5nIHwgKChjZWxsOiBhbnksIHJvdzogYW55LCByb3dJbmRleDogbnVtYmVyKSA9PiBzdHJpbmcpO1xuICAgIGhlYWRlckF0dHJzPzpcbiAgICB8IFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50PlxuICAgIHwgKChcbiAgICAgIGNvbHVtbjogYW55LFxuICAgICAgaW5kZXg6IG51bWJlclxuICAgICkgPT4gUmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQ+KTtcbiAgICBhdHRycz86XG4gICAgfCBSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MVGFibGVDZWxsRWxlbWVudD5cbiAgICB8ICgoXG4gICAgICBjZWxsOiBhbnksXG4gICAgICByb3c6IGFueSxcbiAgICAgIHJvd0luZGV4OiBudW1iZXJcbiAgICApID0+IFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZUNlbGxFbGVtZW50Pik7XG4gICAgc29ydD86IGJvb2xlYW47XG4gICAgc29ydEZ1bmM/OiAoYTogYW55LCBiOiBhbnksIG9yZGVyOiBzdHJpbmcsIGNvbHVtbjogYW55KSA9PiBudW1iZXI7XG4gICAgb25Tb3J0PzogKGNvbHVtbjogYW55LCBzb3J0T3JkZXI6IHN0cmluZykgPT4gdm9pZDtcbiAgICBzb3J0Q2FyZXQ/OiBhbnk7XG4gICAgZWRpdG9yPzogb2JqZWN0O1xuICAgIGVkaXRhYmxlPzogYm9vbGVhbiB8ICgoY2VsbDogYW55LCByb3c6IGFueSwgcm93SW5kZXg6IG51bWJlcikgPT4gYm9vbGVhbik7XG4gICAgZWRpdENlbGxTdHlsZT86XG4gICAgfCBSZWFjdC5DU1NQcm9wZXJ0aWVzXG4gICAgfCAoKGNlbGw6IGFueSwgcm93OiBhbnksIHJvd0luZGV4OiBudW1iZXIpID0+IFJlYWN0LkNTU1Byb3BlcnRpZXMpO1xuICAgIGVkaXRDZWxsQ2xhc3Nlcz86XG4gICAgfCBzdHJpbmdcbiAgICB8ICgoY2VsbDogYW55LCByb3c6IGFueSwgcm93SW5kZXg6IG51bWJlcikgPT4gc3RyaW5nKTtcbiAgICBlZGl0b3JTdHlsZT86XG4gICAgfCBSZWFjdC5DU1NQcm9wZXJ0aWVzXG4gICAgfCAoKGNlbGw6IGFueSwgcm93OiBhbnksIHJvd0luZGV4OiBudW1iZXIpID0+IFJlYWN0LkNTU1Byb3BlcnRpZXMpO1xuICAgIGVkaXRvckNsYXNzZXM/OlxuICAgIHwgc3RyaW5nXG4gICAgfCAoKGNlbGw6IGFueSwgcm93OiBhbnksIHJvd0luZGV4OiBudW1iZXIpID0+IHN0cmluZyk7XG4gICAgZWRpdG9yUmVuZGVyZXI/OiAoXG4gICAgICBlZGl0b3JQcm9wczogYW55LFxuICAgICAgdmFsdWU6IGFueSxcbiAgICAgIHJvdzogYW55LFxuICAgICAgY29sdW1uOiBhbnksXG4gICAgICByb3dJbmRleDogbnVtYmVyLFxuICAgICAgY29sdW1uSW5kZXg6IG51bWJlclxuICAgICkgPT4gUmVhY3QuUmVhY3ROb2RlO1xuICAgIHZhbGlkYXRvcj86IChuZXdWYWx1ZTogYW55LCByb3c6IGFueSwgY29sdW1uOiBhbnkpID0+IGJvb2xlYW4gfCBzdHJpbmc7XG4gICAgZmlsdGVyPzogYW55O1xuICAgIGZpbHRlclJlbmRlcmVyPzogKFxuICAgICAgb25DdXN0b21GaWx0ZXI6ICh2YWx1ZTogYW55KSA9PiB2b2lkLFxuICAgICAgY29sdW1uOiBhbnlcbiAgICApID0+IFJlYWN0LlJlYWN0Tm9kZTtcbiAgICBmaWx0ZXJWYWx1ZT86IChjZWxsOiBhbnksIHJvdzogYW55KSA9PiBzdHJpbmc7XG4gICAgc2VhcmNoYWJsZT86IGJvb2xlYW47XG4gIH07XG4gIGluZGV4OiBudW1iZXI7XG4gIG9uU29ydD86IChjb2x1bW46IGFueSkgPT4gdm9pZDtcbiAgc29ydGluZz86IGJvb2xlYW47XG4gIHNvcnRPcmRlcj86IHN0cmluZztcbiAgc29ydENhcmV0PzogYW55O1xuICBpc0xhc3RTb3J0aW5nPzogYm9vbGVhbjtcbiAgb25GaWx0ZXI/OiAoZmlsdGVyRGF0YTogUmVjb3JkPHN0cmluZywgYW55PikgPT4gdm9pZDtcbiAgZmlsdGVyUG9zaXRpb24/OiBzdHJpbmc7XG4gIGN1cnJGaWx0ZXJzPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgb25FeHRlcm5hbEZpbHRlcj86IChjb2x1bW46IGFueSwgZmlsdGVyVHlwZTogc3RyaW5nKSA9PiAodmFsdWU6IGFueSkgPT4gdm9pZDtcbiAgZ2xvYmFsU29ydENhcmV0PzogKG9yZGVyOiBzdHJpbmcsIGNvbHVtbjogYW55KSA9PiBSZWFjdC5SZWFjdE5vZGU7XG59XG5cbmNsYXNzIEhlYWRlckNlbGwgZXh0ZW5kcyBldmVudERlbGVnYXRlcihDb21wb25lbnQpPEhlYWRlckNlbGxQcm9wcz4ge1xuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY29sdW1uLFxuICAgICAgaW5kZXgsXG4gICAgICBvblNvcnQsXG4gICAgICBzb3J0aW5nLFxuICAgICAgc29ydE9yZGVyLFxuICAgICAgaXNMYXN0U29ydGluZyxcbiAgICAgIG9uRmlsdGVyLFxuICAgICAgY3VyckZpbHRlcnMsXG4gICAgICBmaWx0ZXJQb3NpdGlvbixcbiAgICAgIG9uRXh0ZXJuYWxGaWx0ZXIsXG4gICAgICBnbG9iYWxTb3J0Q2FyZXQsXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCB7XG4gICAgICB0ZXh0LFxuICAgICAgc29ydCxcbiAgICAgIHNvcnRDYXJldCxcbiAgICAgIGZpbHRlcixcbiAgICAgIGZpbHRlclJlbmRlcmVyLFxuICAgICAgaGVhZGVyVGl0bGUsXG4gICAgICBoZWFkZXJBbGlnbixcbiAgICAgIGhlYWRlckZvcm1hdHRlcixcbiAgICAgIGhlYWRlckV2ZW50cyxcbiAgICAgIGhlYWRlckNsYXNzZXMsXG4gICAgICBoZWFkZXJTdHlsZSxcbiAgICAgIGhlYWRlckF0dHJzLFxuICAgICAgaGVhZGVyU29ydGluZ0NsYXNzZXMsXG4gICAgICBoZWFkZXJTb3J0aW5nU3R5bGUsXG4gICAgfSA9IGNvbHVtbjtcblxuICAgIGNvbnN0IHNvcnRDYXJldGZ1bmMgPSBzb3J0Q2FyZXQgfHwgZ2xvYmFsU29ydENhcmV0O1xuXG4gICAgY29uc3QgZGVsZWdhdGVFdmVudHMgPSB0aGlzLmRlbGVnYXRlKGhlYWRlckV2ZW50cyk7XG5cbiAgICBjb25zdCBjdXN0b21BdHRycyA9IF8uaXNGdW5jdGlvbihoZWFkZXJBdHRycylcbiAgICAgID8gaGVhZGVyQXR0cnMoY29sdW1uLCBpbmRleClcbiAgICAgIDogaGVhZGVyQXR0cnMgfHwge307XG5cbiAgICBjb25zdCBjZWxsQXR0cnM6IFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50PiA9IHtcbiAgICAgIC4uLmN1c3RvbUF0dHJzLFxuICAgICAgLi4uZGVsZWdhdGVFdmVudHMsXG4gICAgICB0YWJJbmRleDogXy5pc0RlZmluZWQoY3VzdG9tQXR0cnMudGFiSW5kZXgpID8gY3VzdG9tQXR0cnMudGFiSW5kZXggOiAwLFxuICAgIH07XG5cbiAgICBsZXQgc29ydFN5bWJvbDogUmVhY3QuUmVhY3ROb2RlO1xuICAgIGxldCBmaWx0ZXJFbGVtZW50OiBSZWFjdC5SZWFjdE5vZGU7XG4gICAgbGV0IGNlbGxTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHt9O1xuICAgIGxldCBjZWxsQ2xhc3NlcyA9IF8uaXNGdW5jdGlvbihoZWFkZXJDbGFzc2VzKVxuICAgICAgPyBoZWFkZXJDbGFzc2VzKGNvbHVtbiwgaW5kZXgpXG4gICAgICA6IGhlYWRlckNsYXNzZXM7XG5cbiAgICBpZiAoaGVhZGVyU3R5bGUpIHtcbiAgICAgIGNlbGxTdHlsZSA9IF8uaXNGdW5jdGlvbihoZWFkZXJTdHlsZSlcbiAgICAgICAgPyBoZWFkZXJTdHlsZShjb2x1bW4sIGluZGV4KVxuICAgICAgICA6IGhlYWRlclN0eWxlO1xuICAgICAgY2VsbFN0eWxlID0gY2VsbFN0eWxlID8geyAuLi5jZWxsU3R5bGUgfSA6IGNlbGxTdHlsZTtcbiAgICB9XG5cbiAgICBpZiAoaGVhZGVyVGl0bGUpIHtcbiAgICAgIGNlbGxBdHRycy50aXRsZSA9IF8uaXNGdW5jdGlvbihoZWFkZXJUaXRsZSlcbiAgICAgICAgPyAoaGVhZGVyVGl0bGUoY29sdW1uLCBpbmRleCkgYXMgc3RyaW5nKVxuICAgICAgICA6IHRleHQ7XG4gICAgfVxuXG4gICAgaWYgKGhlYWRlckFsaWduKSB7XG4gICAgICBjZWxsU3R5bGUudGV4dEFsaWduID0gXy5pc0Z1bmN0aW9uKGhlYWRlckFsaWduKVxuICAgICAgICA/IGhlYWRlckFsaWduKGNvbHVtbiwgaW5kZXgpXG4gICAgICAgIDogaGVhZGVyQWxpZ247XG4gICAgfVxuXG4gICAgaWYgKHNvcnQpIHtcbiAgICAgIGNvbnN0IGN1c3RvbUNsaWNrID0gY2VsbEF0dHJzLm9uQ2xpY2s7XG4gICAgICBjb25zdCBjdXN0b21LZXlEb3duID0gY2VsbEF0dHJzLm9uS2V5RG93bjtcbiAgICAgIGNlbGxBdHRyc1tcImFyaWEtbGFiZWxcIl0gPSBzb3J0aW5nXG4gICAgICAgID8gYCR7dGV4dH0gc29ydCAke3NvcnRPcmRlcn1gXG4gICAgICAgIDogYCR7dGV4dH0gc29ydGFibGVgO1xuICAgICAgY2VsbEF0dHJzLm9uS2V5VXAgPSAoZSkgPT4ge1xuICAgICAgICBpZiAoZS5rZXkgPT09IFwiRW50ZXJcIikge1xuICAgICAgICAgIG9uU29ydD8uKGNvbHVtbik7XG4gICAgICAgICAgLy8gVE9ET1xuICAgICAgICAgIC8vIEVycm9yOiBBcmd1bWVudCBvZiB0eXBlICdLZXlib2FyZEV2ZW50PEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50PicgaXMgbm90IGFzc2lnbmFibGUgdG9cbiAgICAgICAgICAvLyBwYXJhbWV0ZXIgb2YgdHlwZSAnTW91c2VFdmVudDxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudCwgTW91c2VFdmVudD4nLlxuICAgICAgICAgIC8vIGlmIChfLmlzRnVuY3Rpb24oY3VzdG9tQ2xpY2spKSBjdXN0b21DbGljayhlKTtcbiAgICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKGN1c3RvbUtleURvd24pKSBjdXN0b21LZXlEb3duKGUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY2VsbEF0dHJzLm9uQ2xpY2sgPSAoZSkgPT4ge1xuICAgICAgICBvblNvcnQ/Lihjb2x1bW4pO1xuICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKGN1c3RvbUNsaWNrKSkgY3VzdG9tQ2xpY2soZSk7XG4gICAgICB9O1xuICAgICAgY2VsbEF0dHJzLmNsYXNzTmFtZSA9IGNzKGNlbGxBdHRycy5jbGFzc05hbWUsIFwic29ydGFibGVcIik7XG5cbiAgICAgIGlmIChzb3J0aW5nKSB7XG4gICAgICAgIHNvcnRTeW1ib2wgPSBzb3J0Q2FyZXRmdW5jID8gKFxuICAgICAgICAgIHNvcnRDYXJldGZ1bmMoc29ydE9yZGVyIHx8IFNPUlRfREVTQywgY29sdW1uKVxuICAgICAgICApIDogKFxuICAgICAgICAgIDxTb3J0Q2FyZXQgb3JkZXI9e3NvcnRPcmRlciF9IC8+XG4gICAgICAgICk7XG5cbiAgICAgICAgY2VsbENsYXNzZXMgPSBjcyhcbiAgICAgICAgICBjZWxsQ2xhc3NlcyxcbiAgICAgICAgICBfLmlzRnVuY3Rpb24oaGVhZGVyU29ydGluZ0NsYXNzZXMpXG4gICAgICAgICAgICA/IGhlYWRlclNvcnRpbmdDbGFzc2VzKGNvbHVtbiwgc29ydE9yZGVyISwgaXNMYXN0U29ydGluZyEsIGluZGV4KVxuICAgICAgICAgICAgOiBoZWFkZXJTb3J0aW5nQ2xhc3Nlc1xuICAgICAgICApO1xuXG4gICAgICAgIGNlbGxTdHlsZSA9IHtcbiAgICAgICAgICAuLi5jZWxsU3R5bGUsXG4gICAgICAgICAgLi4uKF8uaXNGdW5jdGlvbihoZWFkZXJTb3J0aW5nU3R5bGUpXG4gICAgICAgICAgICA/IGhlYWRlclNvcnRpbmdTdHlsZShjb2x1bW4sIHNvcnRPcmRlciEsIGlzTGFzdFNvcnRpbmchLCBpbmRleClcbiAgICAgICAgICAgIDogaGVhZGVyU29ydGluZ1N0eWxlKSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNvcnRTeW1ib2wgPSBzb3J0Q2FyZXRmdW5jID8gKFxuICAgICAgICAgIHNvcnRDYXJldGZ1bmModW5kZWZpbmVkLCBjb2x1bW4pXG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPFNvcnRTeW1ib2wgLz5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2VsbENsYXNzZXMpIGNlbGxBdHRycy5jbGFzc05hbWUgPSBjcyhjZWxsQXR0cnMuY2xhc3NOYW1lLCBjZWxsQ2xhc3Nlcyk7XG4gICAgaWYgKCFfLmlzRW1wdHlPYmplY3QoY2VsbFN0eWxlKSkgY2VsbEF0dHJzLnN0eWxlID0gY2VsbFN0eWxlO1xuXG4gICAgaWYgKGZpbHRlclBvc2l0aW9uID09PSBGSUxURVJTX1BPU0lUSU9OX0lOTElORSkge1xuICAgICAgaWYgKGZpbHRlclJlbmRlcmVyKSB7XG4gICAgICAgIGNvbnN0IG9uQ3VzdG9tRmlsdGVyID0gb25FeHRlcm5hbEZpbHRlcj8uKFxuICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICBmaWx0ZXI/LnByb3BzLnR5cGUgfHwgXCJcIlxuICAgICAgICApO1xuICAgICAgICBmaWx0ZXJFbGVtZW50ID0gZmlsdGVyUmVuZGVyZXIob25DdXN0b21GaWx0ZXIhLCBjb2x1bW4pO1xuICAgICAgfSBlbHNlIGlmIChmaWx0ZXIpIHtcbiAgICAgICAgZmlsdGVyRWxlbWVudCA9IChcbiAgICAgICAgICA8ZmlsdGVyLkZpbHRlclxuICAgICAgICAgICAgey4uLmZpbHRlci5wcm9wc31cbiAgICAgICAgICAgIGZpbHRlclN0YXRlPXtjdXJyRmlsdGVycz8uW2NvbHVtbi5kYXRhRmllbGRdfVxuICAgICAgICAgICAgb25GaWx0ZXI9e29uRmlsdGVyfVxuICAgICAgICAgICAgY29sdW1uPXtjb2x1bW59XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlID0gaGVhZGVyRm9ybWF0dGVyXG4gICAgICA/IGhlYWRlckZvcm1hdHRlcihjb2x1bW4sIGluZGV4LCB7XG4gICAgICAgIHNvcnRFbGVtZW50OiBzb3J0U3ltYm9sLFxuICAgICAgICBmaWx0ZXJFbGVtZW50LFxuICAgICAgfSlcbiAgICAgIDogdGV4dDtcblxuICAgIGlmIChoZWFkZXJGb3JtYXR0ZXIpIHtcbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwidGhcIiwgY2VsbEF0dHJzLCBjaGlsZHJlbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICBcInRoXCIsXG4gICAgICBjZWxsQXR0cnMsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIHNvcnRTeW1ib2wsXG4gICAgICBmaWx0ZXJFbGVtZW50XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBIZWFkZXJDZWxsO1xuIiwiaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tIFwiZXZlbnRzXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUmVtb3RlUmVzb2x2ZXIgZnJvbSBcIi4uL3Byb3BzLXJlc29sdmVyL3JlbW90ZS1yZXNvbHZlclwiO1xuaW1wb3J0IGRhdGFPcGVyYXRvciBmcm9tIFwiLi4vc3RvcmUvb3BlcmF0b3JzXCI7XG5pbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IEJvb3RzdHJhcENvbnRleHQgfSBmcm9tIFwiLi9ib290c3RyYXBcIjtcbmltcG9ydCBjcmVhdGVDb2x1bW5Db250ZXh0IGZyb20gXCIuL2NvbHVtbi1jb250ZXh0XCI7XG5pbXBvcnQgY3JlYXRlRGF0YUNvbnRleHQgZnJvbSBcIi4vZGF0YS1jb250ZXh0XCI7XG5pbXBvcnQgY3JlYXRlUm93RXhwYW5kQ29udGV4dCBmcm9tIFwiLi9yb3ctZXhwYW5kLWNvbnRleHRcIjtcbmltcG9ydCB7IGNyZWF0ZVNlbGVjdGlvbkNvbnRleHQgfSBmcm9tIFwiLi9zZWxlY3Rpb24tY29udGV4dFwiO1xuaW1wb3J0IGNyZWF0ZVNvcnRDb250ZXh0IGZyb20gXCIuL3NvcnQtY29udGV4dFwiO1xuXG5jb25zdCB3aXRoQ29udGV4dCA9IChCYXNlOiBhbnkpID0+XG4gIGNsYXNzIEJvb3RzdHJhcFRhYmxlQ29udGFpbmVyIGV4dGVuZHMgUmVtb3RlUmVzb2x2ZXIoQmFzZSkge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgIHRoaXMuRGF0YUNvbnRleHQgPSBjcmVhdGVEYXRhQ29udGV4dCgpO1xuXG4gICAgICBpZiAocHJvcHMucmVnaXN0ZXJFeHBvc2VkQVBJKSB7XG4gICAgICAgIGNvbnN0IGV4cG9zZWRBUElFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICBleHBvc2VkQVBJRW1pdHRlci5vbihcbiAgICAgICAgICBcImdldC50YWJsZS5kYXRhXCIsXG4gICAgICAgICAgKHBheWxvYWQpID0+IChwYXlsb2FkLnJlc3VsdCA9IHRoaXMudGFibGUuZ2V0RGF0YSgpKVxuICAgICAgICApO1xuICAgICAgICBleHBvc2VkQVBJRW1pdHRlci5vbihcbiAgICAgICAgICBcImdldC5zZWxlY3RlZC5yb3dzXCIsXG4gICAgICAgICAgKHBheWxvYWQpID0+IChwYXlsb2FkLnJlc3VsdCA9IHRoaXMuc2VsZWN0aW9uQ29udGV4dC5nZXRTZWxlY3RlZCgpKVxuICAgICAgICApO1xuICAgICAgICBleHBvc2VkQVBJRW1pdHRlci5vbihcImdldC5maWx0ZXJlZC5yb3dzXCIsIChwYXlsb2FkKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoQ29udGV4dCkge1xuICAgICAgICAgICAgcGF5bG9hZC5yZXN1bHQgPSB0aGlzLnNlYXJjaENvbnRleHQuZ2V0U2VhcmNoZWQoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZmlsdGVyQ29udGV4dCkge1xuICAgICAgICAgICAgcGF5bG9hZC5yZXN1bHQgPSB0aGlzLmZpbHRlckNvbnRleHQuZ2V0RmlsdGVyZWQoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGF5bG9hZC5yZXN1bHQgPSB0aGlzLnRhYmxlLmdldERhdGEoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBwcm9wcy5yZWdpc3RlckV4cG9zZWRBUEkoZXhwb3NlZEFQSUVtaXR0ZXIpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMuY29sdW1ucy5maWx0ZXIoKGNvbDogYW55KSA9PiBjb2wuc29ydCkubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLlNvcnRDb250ZXh0ID0gY3JlYXRlU29ydENvbnRleHQoXG4gICAgICAgICAgZGF0YU9wZXJhdG9yLFxuICAgICAgICAgIHRoaXMuaXNSZW1vdGVTb3J0LFxuICAgICAgICAgIHRoaXMuaGFuZGxlUmVtb3RlU29ydENoYW5nZVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHByb3BzLmNvbHVtblRvZ2dsZSB8fFxuICAgICAgICBwcm9wcy5jb2x1bW5zLmZpbHRlcigoY29sOiBhbnkpID0+IGNvbC5oaWRkZW4pLmxlbmd0aCA+IDBcbiAgICAgICkge1xuICAgICAgICB0aGlzLkNvbHVtbkNvbnRleHQgPSBjcmVhdGVDb2x1bW5Db250ZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wcy5zZWxlY3RSb3cpIHtcbiAgICAgICAgdGhpcy5TZWxlY3Rpb25Db250ZXh0ID0gY3JlYXRlU2VsZWN0aW9uQ29udGV4dCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMuZXhwYW5kUm93KSB7XG4gICAgICAgIHRoaXMuUm93RXhwYW5kQ29udGV4dCA9IGNyZWF0ZVJvd0V4cGFuZENvbnRleHQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLmNlbGxFZGl0ICYmIHByb3BzLmNlbGxFZGl0LmNyZWF0ZUNvbnRleHQpIHtcbiAgICAgICAgdGhpcy5DZWxsRWRpdENvbnRleHQgPSBwcm9wcy5jZWxsRWRpdC5jcmVhdGVDb250ZXh0KFxuICAgICAgICAgIF8sXG4gICAgICAgICAgZGF0YU9wZXJhdG9yLFxuICAgICAgICAgIHRoaXMuaXNSZW1vdGVDZWxsRWRpdCxcbiAgICAgICAgICB0aGlzLmhhbmRsZVJlbW90ZUNlbGxDaGFuZ2VcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLmZpbHRlcikge1xuICAgICAgICB0aGlzLkZpbHRlckNvbnRleHQgPSBwcm9wcy5maWx0ZXIuY3JlYXRlQ29udGV4dChcbiAgICAgICAgICBfLFxuICAgICAgICAgIHRoaXMuaXNSZW1vdGVGaWx0ZXJpbmcsXG4gICAgICAgICAgdGhpcy5oYW5kbGVSZW1vdGVGaWx0ZXJDaGFuZ2VcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLnBhZ2luYXRpb24pIHtcbiAgICAgICAgdGhpcy5QYWdpbmF0aW9uQ29udGV4dCA9IHByb3BzLnBhZ2luYXRpb24uY3JlYXRlQ29udGV4dCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMuc2VhcmNoICYmIHByb3BzLnNlYXJjaC5zZWFyY2hDb250ZXh0KSB7XG4gICAgICAgIHRoaXMuU2VhcmNoQ29udGV4dCA9IHByb3BzLnNlYXJjaC5zZWFyY2hDb250ZXh0KFxuICAgICAgICAgIF8sXG4gICAgICAgICAgdGhpcy5pc1JlbW90ZVNlYXJjaCxcbiAgICAgICAgICB0aGlzLmhhbmRsZVJlbW90ZVNlYXJjaENoYW5nZVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMuc2V0RGVwZW5kZW5jeU1vZHVsZXMpIHtcbiAgICAgICAgcHJvcHMuc2V0RGVwZW5kZW5jeU1vZHVsZXMoXyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wcy5zZXRQYWdpbmF0aW9uUmVtb3RlRW1pdHRlcikge1xuICAgICAgICBwcm9wcy5zZXRQYWdpbmF0aW9uUmVtb3RlRW1pdHRlcih0aGlzLnJlbW90ZUVtaXR0ZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShuZXh0UHJvcHM6IGFueSkge1xuICAgICAgaWYgKG5leHRQcm9wcy5jb2x1bW5zLmZpbHRlcigoY29sOiBhbnkpID0+IGNvbC5zb3J0KS5sZW5ndGggPD0gMCkge1xuICAgICAgICB0aGlzLlNvcnRDb250ZXh0ID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuU29ydENvbnRleHQpIHtcbiAgICAgICAgdGhpcy5Tb3J0Q29udGV4dCA9IGNyZWF0ZVNvcnRDb250ZXh0KFxuICAgICAgICAgIGRhdGFPcGVyYXRvcixcbiAgICAgICAgICB0aGlzLmlzUmVtb3RlU29ydCxcbiAgICAgICAgICB0aGlzLmhhbmRsZVJlbW90ZVNvcnRDaGFuZ2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICghbmV4dFByb3BzLnBhZ2luYXRpb24gJiYgdGhpcy5wcm9wcy5wYWdpbmF0aW9uKSB7XG4gICAgICAgIHRoaXMuUGFnaW5hdGlvbkNvbnRleHQgPSBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKG5leHRQcm9wcy5wYWdpbmF0aW9uICYmICF0aGlzLnByb3BzLnBhZ2luYXRpb24pIHtcbiAgICAgICAgdGhpcy5QYWdpbmF0aW9uQ29udGV4dCA9IG5leHRQcm9wcy5wYWdpbmF0aW9uLmNyZWF0ZUNvbnRleHQoXG4gICAgICAgICAgdGhpcy5pc1JlbW90ZVBhZ2luYXRpb24sXG4gICAgICAgICAgdGhpcy5oYW5kbGVSZW1vdGVQYWdlQ2hhbmdlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoIW5leHRQcm9wcy5jZWxsRWRpdCAmJiB0aGlzLnByb3BzLmNlbGxFZGl0KSB7XG4gICAgICAgIHRoaXMuQ2VsbEVkaXRDb250ZXh0ID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChuZXh0UHJvcHMuY2VsbEVkaXQgJiYgIXRoaXMucHJvcHMuY2VsbEVkaXQpIHtcbiAgICAgICAgdGhpcy5DZWxsRWRpdENvbnRleHQgPSBuZXh0UHJvcHMuY2VsbEVkaXQuY3JlYXRlQ29udGV4dChcbiAgICAgICAgICBfLFxuICAgICAgICAgIGRhdGFPcGVyYXRvcixcbiAgICAgICAgICB0aGlzLmlzUmVtb3RlQ2VsbEVkaXQsXG4gICAgICAgICAgdGhpcy5oYW5kbGVSZW1vdGVDZWxsQ2hhbmdlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyQmFzZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHJvb3RQcm9wczoge1xuICAgICAgICAgIGdldERhdGE6IChcbiAgICAgICAgICAgIGZpbHRlclByb3BzOiBhbnksXG4gICAgICAgICAgICBzZWFyY2hQcm9wczogYW55LFxuICAgICAgICAgICAgc29ydFByb3BzOiBhbnksXG4gICAgICAgICAgICBwYWdpbmF0aW9uUHJvcHM6IGFueVxuICAgICAgICAgICkgPT4gYW55O1xuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXJQcm9wczogYW55LFxuICAgICAgICBzZWFyY2hQcm9wczogYW55LFxuICAgICAgICBzb3J0UHJvcHM6IGFueSxcbiAgICAgICAgcGFnaW5hdGlvblByb3BzOiBhbnksXG4gICAgICAgIGNvbHVtblRvZ2dsZVByb3BzOiBhbnlcbiAgICAgICkgPT4gKFxuICAgICAgICA8QmFzZVxuICAgICAgICAgIHJlZj17KG46IGFueSkgPT4geyB0aGlzLnRhYmxlID0gbjsgfX1cbiAgICAgICAgICB7Li4udGhpcy5wcm9wc31cbiAgICAgICAgICB7Li4uc29ydFByb3BzfVxuICAgICAgICAgIHsuLi5maWx0ZXJQcm9wc31cbiAgICAgICAgICB7Li4uc2VhcmNoUHJvcHN9XG4gICAgICAgICAgey4uLnBhZ2luYXRpb25Qcm9wc31cbiAgICAgICAgICB7Li4uY29sdW1uVG9nZ2xlUHJvcHN9XG4gICAgICAgICAgZGF0YT17cm9vdFByb3BzLmdldERhdGEoXG4gICAgICAgICAgICBmaWx0ZXJQcm9wcyxcbiAgICAgICAgICAgIHNlYXJjaFByb3BzLFxuICAgICAgICAgICAgc29ydFByb3BzLFxuICAgICAgICAgICAgcGFnaW5hdGlvblByb3BzXG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyV2l0aENvbHVtbkNvbnRleHQoYmFzZTogYW55LCBiYXNlUHJvcHM6IGFueSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgcm9vdFByb3BzOiBhbnksXG4gICAgICAgIGZpbHRlclByb3BzOiBhbnksXG4gICAgICAgIHNlYXJjaFByb3BzOiBhbnksXG4gICAgICAgIHNvcnRQcm9wczogYW55LFxuICAgICAgICBwYWdpbmF0aW9uUHJvcHM6IGFueVxuICAgICAgKSA9PiAoXG4gICAgICAgIDx0aGlzLkNvbHVtbkNvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgICB7Li4uYmFzZVByb3BzfVxuICAgICAgICAgIHRvZ2dsZXM9e1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5jb2x1bW5Ub2dnbGUgPyB0aGlzLnByb3BzLmNvbHVtblRvZ2dsZS50b2dnbGVzIDogbnVsbFxuICAgICAgICAgIH1cbiAgICAgICAgPlxuICAgICAgICAgIDx0aGlzLkNvbHVtbkNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICB7KGNvbHVtblRvZ2dsZVByb3BzOiBhbnkpID0+XG4gICAgICAgICAgICAgIGJhc2UoXG4gICAgICAgICAgICAgICAgcm9vdFByb3BzLFxuICAgICAgICAgICAgICAgIGZpbHRlclByb3BzLFxuICAgICAgICAgICAgICAgIHNlYXJjaFByb3BzLFxuICAgICAgICAgICAgICAgIHNvcnRQcm9wcyxcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uUHJvcHMsXG4gICAgICAgICAgICAgICAgY29sdW1uVG9nZ2xlUHJvcHNcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvdGhpcy5Db2x1bW5Db250ZXh0LkNvbnN1bWVyPlxuICAgICAgICA8L3RoaXMuQ29sdW1uQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyV2l0aFNlbGVjdGlvbkNvbnRleHQoYmFzZTogYW55LCBiYXNlUHJvcHM6IGFueSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgcm9vdFByb3BzOiB7XG4gICAgICAgICAgZ2V0RGF0YTogKFxuICAgICAgICAgICAgZmlsdGVyUHJvcHM6IGFueSxcbiAgICAgICAgICAgIHNlYXJjaFByb3BzOiBhbnksXG4gICAgICAgICAgICBzb3J0UHJvcHM6IGFueSxcbiAgICAgICAgICAgIHBhZ2luYXRpb25Qcm9wczogYW55XG4gICAgICAgICAgKSA9PiBhbnk7XG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlclByb3BzOiBhbnksXG4gICAgICAgIHNlYXJjaFByb3BzOiBhbnksXG4gICAgICAgIHNvcnRQcm9wczogYW55LFxuICAgICAgICBwYWdpbmF0aW9uUHJvcHM6IGFueVxuICAgICAgKSA9PiAoXG4gICAgICAgIDx0aGlzLlNlbGVjdGlvbkNvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgICB7Li4uYmFzZVByb3BzfVxuICAgICAgICAgIHJlZj17KG46IGFueSkgPT4geyB0aGlzLnNlbGVjdGlvbkNvbnRleHQgPSBuOyB9fVxuICAgICAgICAgIHNlbGVjdFJvdz17dGhpcy5wcm9wcy5zZWxlY3RSb3d9XG4gICAgICAgICAgZGF0YT17cm9vdFByb3BzLmdldERhdGEoXG4gICAgICAgICAgICBmaWx0ZXJQcm9wcyxcbiAgICAgICAgICAgIHNlYXJjaFByb3BzLFxuICAgICAgICAgICAgc29ydFByb3BzLFxuICAgICAgICAgICAgcGFnaW5hdGlvblByb3BzXG4gICAgICAgICAgKX1cbiAgICAgICAgPlxuICAgICAgICAgIHtiYXNlKFxuICAgICAgICAgICAgcm9vdFByb3BzLFxuICAgICAgICAgICAgZmlsdGVyUHJvcHMsXG4gICAgICAgICAgICBzZWFyY2hQcm9wcyxcbiAgICAgICAgICAgIHNvcnRQcm9wcyxcbiAgICAgICAgICAgIHBhZ2luYXRpb25Qcm9wc1xuICAgICAgICAgICl9XG4gICAgICAgIDwvdGhpcy5TZWxlY3Rpb25Db250ZXh0LlByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZW5kZXJXaXRoUm93RXhwYW5kQ29udGV4dChiYXNlOiBhbnksIGJhc2VQcm9wczogYW55KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICByb290UHJvcHM6IHtcbiAgICAgICAgICBnZXREYXRhOiAoXG4gICAgICAgICAgICBmaWx0ZXJQcm9wczogYW55LFxuICAgICAgICAgICAgc2VhcmNoUHJvcHM6IGFueSxcbiAgICAgICAgICAgIHNvcnRQcm9wczogYW55LFxuICAgICAgICAgICAgcGFnaW5hdGlvblByb3BzOiBhbnlcbiAgICAgICAgICApID0+IGFueTtcbiAgICAgICAgfSxcbiAgICAgICAgZmlsdGVyUHJvcHM6IGFueSxcbiAgICAgICAgc2VhcmNoUHJvcHM6IGFueSxcbiAgICAgICAgc29ydFByb3BzOiBhbnksXG4gICAgICAgIHBhZ2luYXRpb25Qcm9wczogYW55XG4gICAgICApID0+IChcbiAgICAgICAgPHRoaXMuUm93RXhwYW5kQ29udGV4dC5Qcm92aWRlclxuICAgICAgICAgIHsuLi5iYXNlUHJvcHN9XG4gICAgICAgICAgcmVmPXsobjogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJvd0V4cGFuZENvbnRleHQgPSBuO1xuICAgICAgICAgIH19XG4gICAgICAgICAgZXhwYW5kUm93PXt0aGlzLnByb3BzLmV4cGFuZFJvd31cbiAgICAgICAgICBkYXRhPXtyb290UHJvcHMuZ2V0RGF0YShcbiAgICAgICAgICAgIGZpbHRlclByb3BzLFxuICAgICAgICAgICAgc2VhcmNoUHJvcHMsXG4gICAgICAgICAgICBzb3J0UHJvcHMsXG4gICAgICAgICAgICBwYWdpbmF0aW9uUHJvcHNcbiAgICAgICAgICApfVxuICAgICAgICA+XG4gICAgICAgICAge2Jhc2UoXG4gICAgICAgICAgICByb290UHJvcHMsXG4gICAgICAgICAgICBmaWx0ZXJQcm9wcyxcbiAgICAgICAgICAgIHNlYXJjaFByb3BzLFxuICAgICAgICAgICAgc29ydFByb3BzLFxuICAgICAgICAgICAgcGFnaW5hdGlvblByb3BzXG4gICAgICAgICAgKX1cbiAgICAgICAgPC90aGlzLlJvd0V4cGFuZENvbnRleHQuUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJlbmRlcldpdGhQYWdpbmF0aW9uQ29udGV4dChiYXNlOiBhbnkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHJvb3RQcm9wczoge1xuICAgICAgICAgIGdldERhdGE6IChcbiAgICAgICAgICAgIGZpbHRlclByb3BzOiBhbnksXG4gICAgICAgICAgICBzZWFyY2hQcm9wczogYW55LFxuICAgICAgICAgICAgc29ydFByb3BzOiBhbnksXG4gICAgICAgICAgICBwYWdpbmF0aW9uUHJvcHM/OiBhbnlcbiAgICAgICAgICApID0+IGFueTtcbiAgICAgICAgfSxcbiAgICAgICAgZmlsdGVyUHJvcHM6IGFueSxcbiAgICAgICAgc2VhcmNoUHJvcHM6IGFueSxcbiAgICAgICAgc29ydFByb3BzOiBhbnlcbiAgICAgICkgPT4gKFxuICAgICAgICA8dGhpcy5QYWdpbmF0aW9uQ29udGV4dC5Qcm92aWRlclxuICAgICAgICAgIHJlZj17KG46IGFueSkgPT4geyB0aGlzLnBhZ2luYXRpb25Db250ZXh0ID0gbjsgfX1cbiAgICAgICAgICBwYWdpbmF0aW9uPXt0aGlzLnByb3BzLnBhZ2luYXRpb259XG4gICAgICAgICAgZGF0YT17cm9vdFByb3BzLmdldERhdGEoZmlsdGVyUHJvcHMsIHNlYXJjaFByb3BzLCBzb3J0UHJvcHMpfVxuICAgICAgICAgIGJvb3RzdHJhcDQ9e3RoaXMucHJvcHMuYm9vdHN0cmFwNH1cbiAgICAgICAgICBpc1JlbW90ZVBhZ2luYXRpb249e3RoaXMuaXNSZW1vdGVQYWdpbmF0aW9ufVxuICAgICAgICAgIHJlbW90ZUVtaXR0ZXI9e3RoaXMucmVtb3RlRW1pdHRlcn1cbiAgICAgICAgICBvbkRhdGFTaXplQ2hhbmdlPXt0aGlzLnByb3BzLm9uRGF0YVNpemVDaGFuZ2V9XG4gICAgICAgICAgdGFibGVJZD17dGhpcy5wcm9wcy5pZH1cbiAgICAgICAgPlxuICAgICAgICAgIDx0aGlzLlBhZ2luYXRpb25Db250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgICAgeyhwYWdpbmF0aW9uUHJvcHM6IGFueSkgPT5cbiAgICAgICAgICAgICAgYmFzZShcbiAgICAgICAgICAgICAgICByb290UHJvcHMsXG4gICAgICAgICAgICAgICAgZmlsdGVyUHJvcHMsXG4gICAgICAgICAgICAgICAgc2VhcmNoUHJvcHMsXG4gICAgICAgICAgICAgICAgc29ydFByb3BzLFxuICAgICAgICAgICAgICAgIHBhZ2luYXRpb25Qcm9wc1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90aGlzLlBhZ2luYXRpb25Db250ZXh0LkNvbnN1bWVyPlxuICAgICAgICA8L3RoaXMuUGFnaW5hdGlvbkNvbnRleHQuUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJlbmRlcldpdGhTb3J0Q29udGV4dChiYXNlOiBhbnksIGJhc2VQcm9wczogYW55KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICByb290UHJvcHM6IHtcbiAgICAgICAgICBnZXREYXRhOiAoXG4gICAgICAgICAgICBmaWx0ZXJQcm9wczogYW55LFxuICAgICAgICAgICAgc2VhcmNoUHJvcHM6IGFueSxcbiAgICAgICAgICAgIHNvcnRQcm9wcz86IGFueSxcbiAgICAgICAgICAgIHBhZ2luYXRpb25Qcm9wcz86IGFueVxuICAgICAgICAgICkgPT4gYW55O1xuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXJQcm9wczogYW55LFxuICAgICAgICBzZWFyY2hQcm9wczogYW55XG4gICAgICApID0+IChcbiAgICAgICAgPHRoaXMuU29ydENvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgICB7Li4uYmFzZVByb3BzfVxuICAgICAgICAgIHJlZj17KG46IGFueSkgPT4geyB0aGlzLnNvcnRDb250ZXh0ID0gbjsgfX1cbiAgICAgICAgICBkZWZhdWx0U29ydGVkPXt0aGlzLnByb3BzLmRlZmF1bHRTb3J0ZWR9XG4gICAgICAgICAgZGVmYXVsdFNvcnREaXJlY3Rpb249e3RoaXMucHJvcHMuZGVmYXVsdFNvcnREaXJlY3Rpb259XG4gICAgICAgICAgc29ydD17dGhpcy5wcm9wcy5zb3J0fVxuICAgICAgICAgIGRhdGE9e3Jvb3RQcm9wcy5nZXREYXRhKGZpbHRlclByb3BzLCBzZWFyY2hQcm9wcyl9XG4gICAgICAgID5cbiAgICAgICAgICA8dGhpcy5Tb3J0Q29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICAgIHsoc29ydFByb3BzOiBhbnkpID0+XG4gICAgICAgICAgICAgIGJhc2Uocm9vdFByb3BzLCBmaWx0ZXJQcm9wcywgc2VhcmNoUHJvcHMsIHNvcnRQcm9wcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RoaXMuU29ydENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgIDwvdGhpcy5Tb3J0Q29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyV2l0aFNlYXJjaENvbnRleHQoYmFzZTogYW55LCBiYXNlUHJvcHM6IGFueSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgcm9vdFByb3BzOiB7XG4gICAgICAgICAgZ2V0RGF0YTogKFxuICAgICAgICAgICAgZmlsdGVyUHJvcHM6IGFueSxcbiAgICAgICAgICAgIHNlYXJjaFByb3BzPzogYW55LFxuICAgICAgICAgICAgc29ydFByb3BzPzogYW55LFxuICAgICAgICAgICAgcGFnaW5hdGlvblByb3BzPzogYW55XG4gICAgICAgICAgKSA9PiBhbnk7XG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlclByb3BzOiBhbnlcbiAgICAgICkgPT4gKFxuICAgICAgICA8dGhpcy5TZWFyY2hDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgey4uLmJhc2VQcm9wc31cbiAgICAgICAgICByZWY9eyhuOiBhbnkpID0+IHsgdGhpcy5zZWFyY2hDb250ZXh0ID0gbjsgfX1cbiAgICAgICAgICBkYXRhPXtyb290UHJvcHMuZ2V0RGF0YShmaWx0ZXJQcm9wcyl9XG4gICAgICAgICAgc2VhcmNoVGV4dD17dGhpcy5wcm9wcy5zZWFyY2guc2VhcmNoVGV4dH1cbiAgICAgICAgICBkYXRhQ2hhbmdlTGlzdGVuZXI9e3RoaXMucHJvcHMuZGF0YUNoYW5nZUxpc3RlbmVyfVxuICAgICAgICA+XG4gICAgICAgICAgPHRoaXMuU2VhcmNoQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICAgIHsoc2VhcmNoUHJvcHM6IGFueSkgPT4gYmFzZShyb290UHJvcHMsIGZpbHRlclByb3BzLCBzZWFyY2hQcm9wcyl9XG4gICAgICAgICAgPC90aGlzLlNlYXJjaENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgIDwvdGhpcy5TZWFyY2hDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZW5kZXJXaXRoRmlsdGVyQ29udGV4dChiYXNlOiBhbnksIGJhc2VQcm9wczogYW55KSB7XG4gICAgICByZXR1cm4gKHJvb3RQcm9wczogYW55KSA9PiAoXG4gICAgICAgIDx0aGlzLkZpbHRlckNvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgICB7Li4uYmFzZVByb3BzfVxuICAgICAgICAgIHJlZj17KG46IGFueSkgPT4geyB0aGlzLmZpbHRlckNvbnRleHQgPSBuOyB9fVxuICAgICAgICAgIGRhdGE9e3Jvb3RQcm9wcy5nZXREYXRhKCl9XG4gICAgICAgICAgZmlsdGVyPXt0aGlzLnByb3BzLmZpbHRlci5vcHRpb25zIHx8IHt9fVxuICAgICAgICAgIGRhdGFDaGFuZ2VMaXN0ZW5lcj17dGhpcy5wcm9wcy5kYXRhQ2hhbmdlTGlzdGVuZXJ9XG4gICAgICAgID5cbiAgICAgICAgICA8dGhpcy5GaWx0ZXJDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgICAgeyhmaWx0ZXJQcm9wczogYW55KSA9PiBiYXNlKHJvb3RQcm9wcywgZmlsdGVyUHJvcHMpfVxuICAgICAgICAgIDwvdGhpcy5GaWx0ZXJDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICA8L3RoaXMuRmlsdGVyQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyV2l0aENlbGxFZGl0Q29udGV4dChiYXNlOiBhbnksIGJhc2VQcm9wczogYW55KSB7XG4gICAgICByZXR1cm4gKHJvb3RQcm9wczoge1xuICAgICAgICBnZXREYXRhOiAoXG4gICAgICAgICAgZmlsdGVyUHJvcHM/OiBhbnksXG4gICAgICAgICAgc2VhcmNoUHJvcHM/OiBhbnksXG4gICAgICAgICAgc29ydFByb3BzPzogYW55LFxuICAgICAgICAgIHBhZ2luYXRpb25Qcm9wcz86IGFueVxuICAgICAgICApID0+IGFueTtcbiAgICAgIH0pID0+IChcbiAgICAgICAgPHRoaXMuQ2VsbEVkaXRDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgey4uLmJhc2VQcm9wc31cbiAgICAgICAgICByZWY9eyhuOiBhbnkpID0+IHsgdGhpcy5jZWxsRWRpdENvbnRleHQgPSBuOyB9fVxuICAgICAgICAgIHNlbGVjdFJvdz17dGhpcy5wcm9wcy5zZWxlY3RSb3d9XG4gICAgICAgICAgY2VsbEVkaXQ9e3RoaXMucHJvcHMuY2VsbEVkaXR9XG4gICAgICAgICAgZGF0YT17cm9vdFByb3BzLmdldERhdGEoKX1cbiAgICAgICAgPlxuICAgICAgICAgIHtiYXNlKHJvb3RQcm9wcyl9XG4gICAgICAgIDwvdGhpcy5DZWxsRWRpdENvbnRleHQuUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHsga2V5RmllbGQsIGNvbHVtbnMsIGJvb3RzdHJhcDQgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBiYXNlUHJvcHMgPSB7IGtleUZpZWxkLCBjb2x1bW5zIH07XG5cbiAgICAgIGxldCBiYXNlID0gdGhpcy5yZW5kZXJCYXNlKCk7XG5cbiAgICAgIGlmICh0aGlzLkNvbHVtbkNvbnRleHQpIHtcbiAgICAgICAgYmFzZSA9IHRoaXMucmVuZGVyV2l0aENvbHVtbkNvbnRleHQoYmFzZSwgYmFzZVByb3BzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuU2VsZWN0aW9uQ29udGV4dCkge1xuICAgICAgICBiYXNlID0gdGhpcy5yZW5kZXJXaXRoU2VsZWN0aW9uQ29udGV4dChiYXNlLCBiYXNlUHJvcHMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5Sb3dFeHBhbmRDb250ZXh0KSB7XG4gICAgICAgIGJhc2UgPSB0aGlzLnJlbmRlcldpdGhSb3dFeHBhbmRDb250ZXh0KGJhc2UsIGJhc2VQcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLlBhZ2luYXRpb25Db250ZXh0KSB7XG4gICAgICAgIGJhc2UgPSB0aGlzLnJlbmRlcldpdGhQYWdpbmF0aW9uQ29udGV4dChiYXNlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuU29ydENvbnRleHQpIHtcbiAgICAgICAgYmFzZSA9IHRoaXMucmVuZGVyV2l0aFNvcnRDb250ZXh0KGJhc2UsIGJhc2VQcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLlNlYXJjaENvbnRleHQpIHtcbiAgICAgICAgYmFzZSA9IHRoaXMucmVuZGVyV2l0aFNlYXJjaENvbnRleHQoYmFzZSwgYmFzZVByb3BzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuRmlsdGVyQ29udGV4dCkge1xuICAgICAgICBiYXNlID0gdGhpcy5yZW5kZXJXaXRoRmlsdGVyQ29udGV4dChiYXNlLCBiYXNlUHJvcHMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5DZWxsRWRpdENvbnRleHQpIHtcbiAgICAgICAgYmFzZSA9IHRoaXMucmVuZGVyV2l0aENlbGxFZGl0Q29udGV4dChiYXNlLCBiYXNlUHJvcHMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Qm9vdHN0cmFwQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17eyBib290c3RyYXA0IH19PlxuICAgICAgICAgIDx0aGlzLkRhdGFDb250ZXh0LlByb3ZpZGVyIHsuLi5iYXNlUHJvcHN9IGRhdGE9e3RoaXMucHJvcHMuZGF0YX0+XG4gICAgICAgICAgICA8dGhpcy5EYXRhQ29udGV4dC5Db25zdW1lcj57YmFzZX08L3RoaXMuRGF0YUNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgPC90aGlzLkRhdGFDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICA8L0Jvb3RzdHJhcENvbnRleHQuUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aENvbnRleHQ7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEZJTFRFUlNfUE9TSVRJT05fVE9QIH0gZnJvbSBcIi4vY29uc3RcIjtcbmltcG9ydCBGaWx0ZXJzQ2VsbCBmcm9tIFwiLi9maWx0ZXJzLWNlbGxcIjtcbmltcG9ydCBSb3dUZW1wbGF0ZSBmcm9tIFwiLi9yb3cvcm93LXRlbXBsYXRlXCI7XG5cbmludGVyZmFjZSBGaWx0ZXJzUHJvcHMge1xuICBjb2x1bW5zOiBhbnlbXTtcbiAgb25GaWx0ZXI/OiAoZmlsdGVyRGF0YTogUmVjb3JkPHN0cmluZywgYW55PikgPT4gUmVhY3QuUmVhY3ROb2RlO1xuICBmaWx0ZXJQb3NpdGlvbj86IHN0cmluZztcbiAgY3VyckZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBvbkV4dGVybmFsRmlsdGVyPzogKGNvbHVtbjogYW55LCBmaWx0ZXJUeXBlOiBzdHJpbmcpID0+ICh2YWx1ZTogYW55KSA9PiBGdW5jdGlvbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBzZWxlY3RSb3c/OiBhbnk7XG4gIGV4cGFuZFJvdz86IGFueTtcbiAgb25Tb3J0PzogKGZpbHRlckRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHZvaWQ7XG59XG5cbmNvbnN0IEZpbHRlcnM6IFJlYWN0LkZDPEZpbHRlcnNQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGNvbHVtbnMsXG4gICAgb25GaWx0ZXIsXG4gICAgY3VyckZpbHRlcnMsXG4gICAgZmlsdGVyUG9zaXRpb24gPSBGSUxURVJTX1BPU0lUSU9OX1RPUCxcbiAgICBvbkV4dGVybmFsRmlsdGVyLFxuICAgIGNsYXNzTmFtZSxcbiAgICBzZWxlY3RSb3csXG4gICAgZXhwYW5kUm93LFxuICB9ID0gcHJvcHM7XG5cbiAgZnVuY3Rpb24gcmVuZGVyQ29udGVudCgpIHtcbiAgICBjb25zdCBmaWx0ZXJDb2x1bW5zOiBSZWFjdC5SZWFjdEVsZW1lbnRbXSA9IFtdO1xuICAgIGxldCBzaG93RmlsdGVyc1JvdyA9IGZhbHNlO1xuXG4gICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW4sIGkpID0+IHtcbiAgICAgIGZpbHRlckNvbHVtbnMucHVzaChcbiAgICAgICAgPEZpbHRlcnNDZWxsXG4gICAgICAgICAgaW5kZXg9e2l9XG4gICAgICAgICAga2V5PXtjb2x1bW4uZGF0YUZpZWxkfVxuICAgICAgICAgIGNvbHVtbj17Y29sdW1ufVxuICAgICAgICAgIGN1cnJGaWx0ZXJzPXtjdXJyRmlsdGVyc31cbiAgICAgICAgICBvbkV4dGVybmFsRmlsdGVyPXtvbkV4dGVybmFsRmlsdGVyfVxuICAgICAgICAgIG9uRmlsdGVyPXtvbkZpbHRlcn1cbiAgICAgICAgLz5cbiAgICAgICk7XG5cbiAgICAgIGlmIChjb2x1bW4uZmlsdGVyUmVuZGVyZXIgfHwgY29sdW1uLmZpbHRlcikge1xuICAgICAgICBpZiAoIXNob3dGaWx0ZXJzUm93KSB7XG4gICAgICAgICAgc2hvd0ZpbHRlcnNSb3cgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGZpbHRlckNvbHVtbnM7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDx0Ym9keVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICBzdHlsZT17e1xuICAgICAgICBkaXNwbGF5OlxuICAgICAgICAgIGZpbHRlclBvc2l0aW9uID09PSBGSUxURVJTX1BPU0lUSU9OX1RPUFxuICAgICAgICAgICAgPyBcInRhYmxlLWhlYWRlci1ncm91cFwiXG4gICAgICAgICAgICA6IFwidGFibGUtZm9vdGVyLWdyb3VwXCIsXG4gICAgICB9fVxuICAgID5cbiAgICAgIDxSb3dUZW1wbGF0ZVxuICAgICAgICByZW5kZXJDb250ZW50PXtyZW5kZXJDb250ZW50fVxuICAgICAgICBzZWxlY3RSb3c9e3NlbGVjdFJvd31cbiAgICAgICAgZXhwYW5kUm93PXtleHBhbmRSb3d9XG4gICAgICAgIGNlbGxFbD1cInRkXCJcbiAgICAgIC8+XG4gICAgPC90Ym9keT5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEZpbHRlcnM7XG4iLCJpbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gXCJldmVudHNcIjtcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IF8gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChFeHRlbmRCYXNlOiBhbnkpID0+XG4gIGNsYXNzIFJlbW90ZVJlc29sdmVyIGV4dGVuZHMgQ29tcG9uZW50PHR5cGVvZiBFeHRlbmRCYXNlPiB7XG4gICAgcmVtb3RlRW1pdHRlcjogRXZlbnRFbWl0dGVyO1xuXG4gICAgRGF0YUNvbnRleHQ6IGFueTtcbiAgICBDb2x1bW5Db250ZXh0OiBhbnk7XG4gICAgU2VsZWN0aW9uQ29udGV4dDogYW55O1xuICAgIFNlYXJjaENvbnRleHQ6IGFueTtcbiAgICBGaWx0ZXJDb250ZXh0OiBhbnk7XG4gICAgUm93RXhwYW5kQ29udGV4dDogYW55O1xuICAgIENlbGxFZGl0Q29udGV4dDogYW55O1xuICAgIFBhZ2luYXRpb25Db250ZXh0OiBhbnk7XG4gICAgU29ydENvbnRleHQ6IGFueTtcbiAgICBUYWJsZTogYW55O1xuXG4gICAgZGF0YUNvbnRleHQ6IGFueTtcbiAgICBjb2x1bW5Db250ZXh0OiBhbnk7XG4gICAgc2VsZWN0aW9uQ29udGV4dDogYW55O1xuICAgIHNlYXJjaENvbnRleHQ6IGFueTtcbiAgICBmaWx0ZXJDb250ZXh0OiBhbnk7XG4gICAgcm93RXhwYW5kQ29udGV4dDogYW55O1xuICAgIGNlbGxFZGl0Q29udGV4dDogYW55O1xuICAgIHBhZ2luYXRpb25Db250ZXh0OiBhbnk7XG4gICAgc29ydENvbnRleHQ6IGFueTtcbiAgICB0YWJsZTogYW55O1xuXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgdGhpcy5yZW1vdGVFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgdGhpcy5yZW1vdGVFbWl0dGVyLm9uKFwicGFnaW5hdGlvbkNoYW5nZVwiLCB0aGlzLmhhbmRsZVJlbW90ZVBhZ2VDaGFuZ2UpO1xuICAgICAgdGhpcy5yZW1vdGVFbWl0dGVyLm9uKFwiaXNSZW1vdGVQYWdpbmF0aW9uXCIsIHRoaXMuaXNSZW1vdGVQYWdpbmF0aW9uKTtcbiAgICB9XG5cbiAgICBnZXROZXdlc3RTdGF0ZSA9IChzdGF0ZTogYW55ID0ge30pID0+IHtcbiAgICAgIGxldCBzb3J0T3JkZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGxldCBzb3J0RmllbGQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGxldCBwYWdlOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgc2l6ZVBlclBhZ2U6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgIGxldCBzZWFyY2hUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgZmlsdGVyczogYW55ID0ge307XG5cbiAgICAgIGlmICh0aGlzLnNvcnRDb250ZXh0KSB7XG4gICAgICAgIHNvcnRPcmRlciA9IHRoaXMuc29ydENvbnRleHQuc3RhdGUuc29ydE9yZGVyO1xuICAgICAgICBzb3J0RmllbGQgPSB0aGlzLnNvcnRDb250ZXh0LnN0YXRlLnNvcnRDb2x1bW5cbiAgICAgICAgICA/IHRoaXMuc29ydENvbnRleHQuc3RhdGUuc29ydENvbHVtbi5kYXRhRmllbGRcbiAgICAgICAgICA6IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZpbHRlckNvbnRleHQpIHtcbiAgICAgICAgZmlsdGVycyA9IHRoaXMuZmlsdGVyQ29udGV4dC5jdXJyRmlsdGVycztcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucGFnaW5hdGlvbkNvbnRleHQpIHtcbiAgICAgICAgcGFnZSA9IHRoaXMucGFnaW5hdGlvbkNvbnRleHQuY3VyclBhZ2U7XG4gICAgICAgIHNpemVQZXJQYWdlID0gdGhpcy5wYWdpbmF0aW9uQ29udGV4dC5jdXJyU2l6ZVBlclBhZ2U7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnNlYXJjaENvbnRleHQpIHtcbiAgICAgICAgc2VhcmNoVGV4dCA9IHRoaXMucHJvcHMuc2VhcmNoLnNlYXJjaFRleHQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvcnRPcmRlcixcbiAgICAgICAgc29ydEZpZWxkLFxuICAgICAgICBmaWx0ZXJzLFxuICAgICAgICBwYWdlLFxuICAgICAgICBzaXplUGVyUGFnZSxcbiAgICAgICAgc2VhcmNoVGV4dCxcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGRhdGE6IHRoaXMucHJvcHMuZGF0YSxcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGlzUmVtb3RlU2VhcmNoID0gKCkgPT4ge1xuICAgICAgY29uc3QgeyByZW1vdGUgfSA9IHRoaXMucHJvcHM7XG4gICAgICByZXR1cm4gKFxuICAgICAgICByZW1vdGUgPT09IHRydWUgfHxcbiAgICAgICAgKF8uaXNPYmplY3QocmVtb3RlKSAmJiByZW1vdGUuc2VhcmNoKSB8fFxuICAgICAgICB0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbigpXG4gICAgICApO1xuICAgIH07XG5cbiAgICBpc1JlbW90ZVBhZ2luYXRpb24gPSAoZTogYW55ID0ge30pID0+IHtcbiAgICAgIGNvbnN0IHsgcmVtb3RlIH0gPSB0aGlzLnByb3BzO1xuICAgICAgZS5yZXN1bHQgPSByZW1vdGUgPT09IHRydWUgfHwgKF8uaXNPYmplY3QocmVtb3RlKSAmJiByZW1vdGUucGFnaW5hdGlvbik7XG4gICAgICByZXR1cm4gZS5yZXN1bHQ7XG4gICAgfTtcblxuICAgIGlzUmVtb3RlRmlsdGVyaW5nID0gKCkgPT4ge1xuICAgICAgY29uc3QgeyByZW1vdGUgfSA9IHRoaXMucHJvcHM7XG4gICAgICByZXR1cm4gKFxuICAgICAgICByZW1vdGUgPT09IHRydWUgfHxcbiAgICAgICAgKF8uaXNPYmplY3QocmVtb3RlKSAmJiByZW1vdGUuZmlsdGVyKSB8fFxuICAgICAgICB0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbigpXG4gICAgICApO1xuICAgIH07XG5cbiAgICBpc1JlbW90ZVNvcnQgPSAoKSA9PiB7XG4gICAgICBjb25zdCB7IHJlbW90ZSB9ID0gdGhpcy5wcm9wcztcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHJlbW90ZSA9PT0gdHJ1ZSB8fFxuICAgICAgICAoXy5pc09iamVjdChyZW1vdGUpICYmIHJlbW90ZS5zb3J0KSB8fFxuICAgICAgICB0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbigpXG4gICAgICApO1xuICAgIH07XG5cbiAgICBpc1JlbW90ZUNlbGxFZGl0ID0gKCkgPT4ge1xuICAgICAgY29uc3QgeyByZW1vdGUgfSA9IHRoaXMucHJvcHM7XG4gICAgICByZXR1cm4gcmVtb3RlID09PSB0cnVlIHx8IChfLmlzT2JqZWN0KHJlbW90ZSkgJiYgcmVtb3RlLmNlbGxFZGl0KTtcbiAgICB9O1xuXG4gICAgaGFuZGxlUmVtb3RlUGFnZUNoYW5nZSA9IChwYWdlOiBudW1iZXIsIHNpemVQZXJQYWdlOiBudW1iZXIpID0+IHtcbiAgICAgIHRoaXMucHJvcHMub25UYWJsZUNoYW5nZShcbiAgICAgICAgXCJwYWdpbmF0aW9uXCIsXG4gICAgICAgIHRoaXMuZ2V0TmV3ZXN0U3RhdGUoeyBwYWdlLCBzaXplUGVyUGFnZSB9KVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgaGFuZGxlUmVtb3RlRmlsdGVyQ2hhbmdlID0gKGZpbHRlcnM6IGFueSkgPT4ge1xuICAgICAgY29uc3QgbmV3U3RhdGU6IHsgZmlsdGVyczogYW55OyBwYWdlPzogbnVtYmVyIH0gPSB7IGZpbHRlcnMgfTtcbiAgICAgIGlmICh0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbigpKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnByb3BzLnBhZ2luYXRpb24ub3B0aW9ucyB8fCB7fTtcbiAgICAgICAgbmV3U3RhdGUucGFnZSA9IF8uaXNEZWZpbmVkKG9wdGlvbnMucGFnZVN0YXJ0SW5kZXgpXG4gICAgICAgICAgPyBvcHRpb25zLnBhZ2VTdGFydEluZGV4XG4gICAgICAgICAgOiAxO1xuICAgICAgfVxuICAgICAgdGhpcy5wcm9wcy5vblRhYmxlQ2hhbmdlKFwiZmlsdGVyXCIsIHRoaXMuZ2V0TmV3ZXN0U3RhdGUobmV3U3RhdGUpKTtcbiAgICB9O1xuXG4gICAgaGFuZGxlUmVtb3RlU29ydENoYW5nZSA9IChzb3J0RmllbGQ6IHN0cmluZywgc29ydE9yZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHtcbiAgICAgIHRoaXMucHJvcHMub25UYWJsZUNoYW5nZShcbiAgICAgICAgXCJzb3J0XCIsXG4gICAgICAgIHRoaXMuZ2V0TmV3ZXN0U3RhdGUoeyBzb3J0RmllbGQsIHNvcnRPcmRlciB9KVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgaGFuZGxlUmVtb3RlQ2VsbENoYW5nZSA9IChyb3dJZDogYW55LCBkYXRhRmllbGQ6IHN0cmluZywgbmV3VmFsdWU6IGFueSkgPT4ge1xuICAgICAgY29uc3QgY2VsbEVkaXQgPSB7IHJvd0lkLCBkYXRhRmllbGQsIG5ld1ZhbHVlIH07XG4gICAgICB0aGlzLnByb3BzLm9uVGFibGVDaGFuZ2UoXCJjZWxsRWRpdFwiLCB0aGlzLmdldE5ld2VzdFN0YXRlKHsgY2VsbEVkaXQgfSkpO1xuICAgIH07XG5cbiAgICBoYW5kbGVSZW1vdGVTZWFyY2hDaGFuZ2UgPSAoc2VhcmNoVGV4dDogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLm9uVGFibGVDaGFuZ2UoXCJzZWFyY2hcIiwgdGhpcy5nZXROZXdlc3RTdGF0ZSh7IHNlYXJjaFRleHQgfSkpO1xuICAgIH07XG4gIH07XG4iLCJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgKEV4dGVuZEJhc2U6IGFueSkgPT5cbiAgY2xhc3MgQ29sdW1uUmVzb2x2ZXIgZXh0ZW5kcyBDb21wb25lbnQ8dHlwZW9mIEV4dGVuZEJhc2U+IHtcbiAgICB2aXNpYmxlQ29sdW1uU2l6ZShpbmNsdWRlU2VsZWN0Q29sdW1uID0gdHJ1ZSkge1xuICAgICAgbGV0IGNvbHVtbkxlbjtcbiAgICAgIGlmICh0aGlzLnByb3BzLmNvbHVtblRvZ2dsZSAmJiB0aGlzLnByb3BzLmNvbHVtblRvZ2dsZS50b2dnbGVzKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLnByb3BzLmNvbHVtblRvZ2dsZS50b2dnbGVzO1xuICAgICAgICBjb2x1bW5MZW4gPSBPYmplY3Qua2V5cyhjb2x1bW5zKS5maWx0ZXIoKG5hbWUpID0+IGNvbHVtbnNbbmFtZV0pLmxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbHVtbkxlbiA9IHRoaXMucHJvcHMuY29sdW1ucy5maWx0ZXIoKGM6IGFueSkgPT4gIWMuaGlkZGVuKS5sZW5ndGg7XG4gICAgICB9XG4gICAgICBpZiAoIWluY2x1ZGVTZWxlY3RDb2x1bW4pIHJldHVybiBjb2x1bW5MZW47XG4gICAgICBpZiAodGhpcy5wcm9wcy5zZWxlY3RSb3cgJiYgIXRoaXMucHJvcHMuc2VsZWN0Um93LmhpZGVTZWxlY3RDb2x1bW4pIHtcbiAgICAgICAgY29sdW1uTGVuICs9IDE7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5wcm9wcy5leHBhbmRSb3cgJiYgdGhpcy5wcm9wcy5leHBhbmRSb3cuc2hvd0V4cGFuZENvbHVtbikge1xuICAgICAgICBjb2x1bW5MZW4gKz0gMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb2x1bW5MZW47XG4gICAgfVxuICB9O1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc3MjMpO1xuIl0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsInJlcXVpcmUiLCJkZWZpbmUiLCJhbWQiLCJzZWxmIiwiX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNTQ0Ml9fIiwiX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNjAwM19fIiwiRXhwYW5kUm93IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsInN1cGVyIiwidGhpcyIsIm5vZGVSZWYiLCJjcmVhdGVSZWYiLCJyZW5kZXIiLCJjaGlsZHJlbiIsImV4cGFuZGVkIiwib25DbG9zZWQiLCJjbGFzc05hbWUiLCJyZXN0IiwiQ1NTVHJhbnNpdGlvbiIsImFwcGVhciIsImluIiwidGltZW91dCIsImNsYXNzTmFtZXMiLCJvbkV4aXRlZCIsInJlZiIsIm9yZGVyIiwib3JkZXJDbGFzcyIsImRyb3B1cCIsIlNPUlRfQVNDIiwiQm9vdHN0cmFwQ29udGV4dCIsIkNvbnN1bWVyIiwiYm9vdHN0cmFwNCIsImNvbnRlbnQiLCJjb2xTcGFuIiwiaW5kZXgiLCJjb2x1bW4iLCJjdXJyRmlsdGVycyIsIm9uRXh0ZXJuYWxGaWx0ZXIiLCJvbkZpbHRlciIsImZpbHRlciIsImZpbHRlckVsbSIsImNlbGxBdHRycyIsImNlbGxTdHlsZSIsInN0eWxlIiwiaGVhZGVyQWxpZ24iLCJ0ZXh0QWxpZ24iLCJpc0Z1bmN0aW9uIiwiZmlsdGVyUmVuZGVyZXIiLCJvbkN1c3RvbUZpbHRlciIsInR5cGUiLCJGaWx0ZXIiLCJmaWx0ZXJTdGF0ZSIsImRhdGFGaWVsZCIsImNyZWF0ZUVsZW1lbnQiLCJFeHRlbmRCYXNlIiwic2hvdWxkVXBkYXRlQnlDZWxsRWRpdGluZyIsIm5leHRQcm9wcyIsImNsaWNrVG9FZGl0IiwiZGJjbGlja1RvRWRpdCIsImVkaXRpbmdSb3dJZHgiLCJyb3dJbmRleCIsInNob3VsZFVwZGF0ZWRCeVNlbGZQcm9wcyIsImlzRXF1YWwiLCJhdHRycyIsInNob3VsZFVwZGF0ZUJ5Q29sdW1uc0ZvclNpbXBsZUNoZWNrIiwiY29sdW1ucyIsImxlbmd0aCIsImkiLCJzaG91bGRVcGRhdGVkQnlOb3JtYWxQcm9wcyIsImVkaXRhYmxlIiwicm93Iiwic2hvdWxkVXBkYXRlQ2hpbGQiLCJzaG91bGRSb3dDb250ZW50VXBkYXRlIiwibWF0Y2hSb3ciLCJrZXlGaWVsZCIsImlkIiwiZ2V0IiwiZ2V0Um93QnlSb3dJZCIsImRhdGEiLCJmaW5kIiwiUm93QWdncmVnYXRvciIsIlJvd0V2ZW50RGVsZWdhdGVyIiwiY2xpY2tOdW0iLCJzaG91bGRVcGRhdGVSb3dDb250ZW50IiwiY3JlYXRlQ2xpY2tFdmVudEhhbmRsZXIiLCJiaW5kIiwic2hvdWxkQ29tcG9uZW50VXBkYXRlIiwic2VsZWN0ZWQiLCJleHBhbmRhYmxlIiwic2VsZWN0YWJsZSIsInNlbGVjdFJvdyIsImhpZGVTZWxlY3RDb2x1bW4iLCJpc1JlbmRlckZ1bmN0aW9uQ29sdW1uSW5MZWZ0IiwicG9zaXRpb24iLCJJTkRJQ0FUT1JfUE9TSVRJT05fTEVGVCIsImV4cGFuZFJvdyIsInZpc2libGVDb2x1bW5TaXplIiwidGFiSW5kZXhDZWxsIiwia2V5Iiwic2VsZWN0Q29sdW1uUG9zaXRpb24iLCJjbGlja1RvU2VsZWN0Iiwic2hvd0V4cGFuZENvbHVtbiIsImV4cGFuZENvbHVtblBvc2l0aW9uIiwibmV3QXR0cnMiLCJkZWxlZ2F0ZSIsInJlbmRlcmVyIiwib25DbGljayIsInRhYkluZGV4U3RhcnQiLCJjaGlsZHJlbnMiLCJzaG91bGRVcGRhdGUiLCJzZWxlY3RDZWxsIiwicm93S2V5IiwiZGlzYWJsZWQiLCJ0YWJJbmRleCIsInVuc2hpZnQiLCJwdXNoIiwiZXhwYW5kQ2VsbCIsIkV4cGFuZENlbGwiLCJoYW5kbGVDbGljayIsImUiLCJvblJvd0V4cGFuZCIsInN0b3BQcm9wYWdhdGlvbiIsImV4cGFuZENvbHVtblJlbmRlcmVyIiwidW5kZWZpbmVkIiwiQm9vdHN0cmFwVGFibGUiLCJnZXREYXRhIiwidmlzaWJsZVJvd3MiLCJ2YWxpZGF0ZVByb3BzIiwiY29tcG9uZW50RGlkVXBkYXRlIiwib25EYXRhU2l6ZUNoYW5nZSIsInBhZ2luYXRpb24iLCJkYXRhU2l6ZSIsImxvYWRpbmciLCJvdmVybGF5IiwiTG9hZGluZ092ZXJsYXkiLCJyZW5kZXJUYWJsZSIsImNsYXNzZXMiLCJzdHJpcGVkIiwiaG92ZXIiLCJib3JkZXJlZCIsImNvbmRlbnNlZCIsIm5vRGF0YUluZGljYXRpb24iLCJjYXB0aW9uIiwicm93U3R5bGUiLCJyb3dDbGFzc2VzIiwid3JhcHBlckNsYXNzZXMiLCJyb3dFdmVudHMiLCJtb2RlIiwiUk9XX1NFTEVDVF9ESVNBQkxFRCIsIm5vbkV4cGFuZGFibGUiLCJjZWxsRWRpdCIsIm5vbkVkaXRhYmxlUm93cyIsImZpbHRlclBvc2l0aW9uIiwiRklMVEVSU19QT1NJVElPTl9JTkxJTkUiLCJ0YWJsZVdyYXBwZXJDbGFzcyIsInRhYmxlQ2xhc3MiLCJoYXNGaWx0ZXJzIiwic29tZSIsImNvbCIsImhhc0Zvb3RlciIsImhhcyIsInRhYmxlQ2FwdGlvbiIsImhlYWRlckNsYXNzZXMiLCJoZWFkZXJXcmFwcGVyQ2xhc3NlcyIsInNvcnRGaWVsZCIsInNvcnRPcmRlciIsIm9uU29ydCIsImdsb2JhbFNvcnRDYXJldCIsInNvcnQiLCJzb3J0Q2FyZXQiLCJmaWx0ZXJzQ2xhc3NlcyIsImJvZHlDbGFzc2VzIiwiaXNFbXB0eSIsImZvb3RlckNsYXNzZXMiLCJyZW5kZXJDb250ZW50IiwiY2VsbEVsIiwiU2VsZWN0aW9uQ2VsbCIsInNlbGVjdENvbHVtblN0eWxlIiwiaW5wdXRUeXBlIiwib25Sb3dTZWxlY3QiLCJST1dfU0VMRUNUX1NJTkdMRSIsInNlbGVjdGlvblJlbmRlcmVyIiwiY2hlY2tlZCIsInJvd2luZGV4Iiwicm93a2V5Iiwib25DaGFuZ2UiLCJpc0FueUV4cGFuZHMiLCJ4IiwiZXhwYW5kYWJsZUtleXMiLCJza2lwcyIsIm1hcCIsImNvbnRhaW5zIiwiZ2V0RXhwYW5kZWRSb3dzIiwiayIsIlJvd0V4cGFuZENvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwiaXNDbG9zaW5nIiwib25BbGxSb3dFeHBhbmQiLCJSb3dFeHBhbmRQcm92aWRlciIsInN0YXRlIiwiY2xvc2VkUm93Iiwic2V0U3RhdGUiLCJ2YWx1ZSIsImhhbmRsZVJvd0V4cGFuZCIsImlzRXhwYW5kZWQiLCJvbkV4cGFuZCIsIm9ubHlPbmVFeHBhbmRpbmciLCJjdXJyRXhwYW5kZWQiLCJjdXJySXNDbG9zaW5nIiwiY29uY2F0IiwiaGFuZGxlQWxsUm93RXhwYW5kIiwiZXhwYW5kQWxsIiwib25FeHBhbmRBbGwiLCJzIiwiZCIsImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyIsInByZXZTdGF0ZSIsIm5leHRFeHBhbmRlZCIsInJvd0lkIiwicmVkdWNlIiwiYWNjIiwiY3VyIiwiUHJvdmlkZXIiLCJjYXB0aW9uU2lkZSIsImV2ZW50cyIsIkNlbGxFdmVudERlbGVnYXRlciIsImNyZWF0ZURlZmF1bHRFdmVudEhhbmRsZXIiLCJjYiIsImNvbHVtbkluZGV4IiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJhdHRyIiwiaW5jbHVkZXMiLCJ0eXBlQ29udmVydCIsIlRZUEVfU1RSSU5HIiwiU3RyaW5nIiwiVFlQRV9OVU1CRVIiLCJOdW1iZXIiLCJUWVBFX0JPT0xFQU4iLCJUWVBFX0RBVEUiLCJEYXRlIiwiUm93UHVyZUNvbnRlbnQiLCJpc0VkaXRhYmxlIiwiZWRpdGluZ0NvbElkeCIsImF0c3RhcnQiLCJFZGl0aW5nQ2VsbENvbXBvbmVudCIsImNlbGxUaXRsZSIsIm9yaWdpbkZuIiwiY2VsbENsYXNzZXMiLCJ0aXRsZSIsImFsaWduIiwiaXNFbXB0eU9iamVjdCIsImVkaXRhYmxlQ2VsbCIsImlzRGVmaW5lZCIsInRvU3RyaW5nIiwiY29sdW1uaW5kZXgiLCJjbGlja3RvZWRpdCIsImRiY2xpY2t0b2VkaXQiLCJkZWZhdWx0Q29sdW1uQ29udGV4dCIsInRvZ2dsZXMiLCJDb2x1bW5Db250ZXh0IiwiQ29sdW1uUHJvdmlkZXIiLCJ0b2dnbGVDb2x1bW5zIiwiaGlkZGVuIiwiU2ltcGxlUm93IiwidHJBdHRycyIsIkRhdGFDb250ZXh0IiwiRGF0YVByb3ZpZGVyIiwiZmlsdGVyUHJvcHMiLCJzZWFyY2hQcm9wcyIsInNvcnRQcm9wcyIsInBhZ2luYXRpb25Qcm9wcyIsIldpdGhTZWxlY3Rpb25Sb3dDb25zdW1lciIsIlNlbGVjdGlvbkNvbnRleHQiLCJub25TZWxlY3RhYmxlIiwibm90U2VsZWN0YWJsZSIsInNlbGVjdGVkU3R5bGUiLCJzZWxlY3RlZENsYXNzZXMiLCJiZ0NvbG9yIiwiYmFja2dyb3VuZENvbG9yIiwibm90U2VsZWN0YWJsZVN0eWxlIiwibm9uU2VsZWN0YWJsZVN0eWxlIiwibm90U2VsZWN0YWJsZUNsYXNzZXMiLCJub25TZWxlY3RhYmxlQ2xhc3NlcyIsInJlbmRlcldpdGhTZWxlY3Rpb24iLCJkaXNwbGF5TmFtZSIsImNyZWF0ZVNlbGVjdGlvbkNvbnRleHQiLCJjb21wYXJhdG9yIiwiYSIsImIiLCJyZXN1bHQiLCJsb2NhbGVDb21wYXJlIiwic29ydEZ1bmMiLCJzb3J0VmFsdWUiLCJfZGF0YSIsInZhbHVlQSIsInZhbHVlQiIsIlNPUlRfREVTQyIsIm5leHRPcmRlciIsImN1cnJlbnRTb3J0Q29sdW1uIiwic29ydENvbHVtbiIsImRlZmF1bHRPcmRlciIsInNwbGl0TmVzdGVkIiwic3RyIiwiam9pbiIsInJlcGxhY2UiLCJzcGxpdCIsImFzc2lnbiIsInRhcmdldCIsImZpZWxkIiwiZGlyZWN0R2V0IiwicGF0aEFycmF5IiwiY3VyciIsInBhdGgiLCJzZXQiLCJzYWZlIiwibGV2ZWwiLCJFcnJvciIsIm9iaiIsImlzT2JqZWN0IiwiaGFzT3duUHJvcGVydHkiLCJwcm90b3R5cGUiLCJjYWxsIiwic2xlZXAiLCJmbiIsIm1zIiwic2V0VGltZW91dCIsImRlYm91bmNlIiwiZnVuYyIsIndhaXQiLCJpbW1lZGlhdGUiLCJjYWxsTm93IiwiY2xlYXJUaW1lb3V0IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJsaXN0IiwiaW5kZXhPZiIsIkV4cGFuc2lvbkhlYWRlckNlbGwiLCJoYW5kbGVDaGVja0JveENsaWNrIiwiZXhwYW5kSGVhZGVyQ29sdW1uUmVuZGVyZXIiLCJnZXRTZWxlY3Rpb25TdW1tYXJ5IiwiYWxsUm93c1NlbGVjdGVkIiwiYWxsUm93c05vdFNlbGVjdGVkIiwicm93S2V5cyIsInNlbGVjdGFibGVLZXlzIiwidW5TZWxlY3RhYmxlS2V5cyIsImdldFNlbGVjdGVkUm93cyIsIlZFUlNJT04iLCJnIiwiZ2xvYmFsIiwiRnVuY3Rpb24iLCJBcnJheVByb3RvIiwiQXJyYXkiLCJPYmpQcm90byIsIlN5bWJvbFByb3RvIiwiU3ltYm9sIiwic2xpY2UiLCJzdXBwb3J0c0FycmF5QnVmZmVyIiwiQXJyYXlCdWZmZXIiLCJzdXBwb3J0c0RhdGFWaWV3IiwiRGF0YVZpZXciLCJuYXRpdmVJc0FycmF5IiwiaXNBcnJheSIsIm5hdGl2ZUtleXMiLCJuYXRpdmVDcmVhdGUiLCJjcmVhdGUiLCJuYXRpdmVJc1ZpZXciLCJpc1ZpZXciLCJfaXNOYU4iLCJpc05hTiIsIl9pc0Zpbml0ZSIsImlzRmluaXRlIiwiaGFzRW51bUJ1ZyIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwibm9uRW51bWVyYWJsZVByb3BzIiwiTUFYX0FSUkFZX0lOREVYIiwiTWF0aCIsInBvdyIsInJlc3RBcmd1bWVudHMiLCJzdGFydEluZGV4IiwibWF4IiwiYXJncyIsImlzTnVsbCIsImlzVW5kZWZpbmVkIiwiaXNCb29sZWFuIiwiaXNFbGVtZW50Iiwibm9kZVR5cGUiLCJ0YWdUZXN0ZXIiLCJuYW1lIiwidGFnIiwibm9kZWxpc3QiLCJkb2N1bWVudCIsImNoaWxkTm9kZXMiLCJJbnQ4QXJyYXkiLCJoYXNEYXRhVmlld0J1ZyIsInRlc3QiLCJpc0lFMTEiLCJNYXAiLCJpc0RhdGFWaWV3IiwiZ2V0SW50OCIsImlzQXJyYXlCdWZmZXIiLCJidWZmZXIiLCJpc0FyZ3VtZW50cyIsImlzU3ltYm9sIiwicGFyc2VGbG9hdCIsImlzTnVtYmVyIiwiY29uc3RhbnQiLCJjcmVhdGVTaXplUHJvcGVydHlDaGVjayIsImdldFNpemVQcm9wZXJ0eSIsImNvbGxlY3Rpb24iLCJzaXplUHJvcGVydHkiLCJzaGFsbG93UHJvcGVydHkiLCJ0eXBlZEFycmF5UGF0dGVybiIsImNvbGxlY3ROb25FbnVtUHJvcHMiLCJoYXNoIiwibCIsImVtdWxhdGVkU2V0Iiwibm9uRW51bUlkeCIsInByb3RvIiwicHJvcCIsImlzU3RyaW5nIiwiaXNNYXRjaCIsIm9iamVjdCIsIl9rZXlzIiwiXyIsIl93cmFwcGVkIiwidG9CdWZmZXJWaWV3IiwiYnVmZmVyU291cmNlIiwiVWludDhBcnJheSIsImJ5dGVPZmZzZXQiLCJ2YWx1ZU9mIiwidG9KU09OIiwidGFnRGF0YVZpZXciLCJlcSIsImFTdGFjayIsImJTdGFjayIsImRlZXBFcSIsImFyZUFycmF5cyIsImFDdG9yIiwiYkN0b3IiLCJwb3AiLCJhbGxLZXlzIiwiaWUxMWZpbmdlcnByaW50IiwibWV0aG9kcyIsIndlYWtNYXBNZXRob2RzIiwiZm9yRWFjaE5hbWUiLCJjb21tb25Jbml0IiwibWFwVGFpbCIsIm1hcE1ldGhvZHMiLCJzZXRNZXRob2RzIiwidmFsdWVzIiwicGFpcnMiLCJpbnZlcnQiLCJmdW5jdGlvbnMiLCJuYW1lcyIsImNyZWF0ZUFzc2lnbmVyIiwia2V5c0Z1bmMiLCJkZWZhdWx0cyIsInNvdXJjZSIsImJhc2VDcmVhdGUiLCJDdG9yIiwiZXh0ZW5kT3duIiwiY2xvbmUiLCJleHRlbmQiLCJ0YXAiLCJpbnRlcmNlcHRvciIsInRvUGF0aCIsImRlZXBHZXQiLCJkZWZhdWx0VmFsdWUiLCJpZGVudGl0eSIsIm1hdGNoZXIiLCJwcm9wZXJ0eSIsIm9wdGltaXplQ2IiLCJjb250ZXh0IiwiYXJnQ291bnQiLCJhY2N1bXVsYXRvciIsImJhc2VJdGVyYXRlZSIsIml0ZXJhdGVlIiwiSW5maW5pdHkiLCJtYXBPYmplY3QiLCJyZXN1bHRzIiwiY3VycmVudEtleSIsIm5vb3AiLCJwcm9wZXJ0eU9mIiwidGltZXMiLCJuIiwiYWNjdW0iLCJyYW5kb20iLCJtaW4iLCJmbG9vciIsIm5vdyIsImdldFRpbWUiLCJjcmVhdGVFc2NhcGVyIiwiZXNjYXBlciIsIm1hdGNoIiwidGVzdFJlZ2V4cCIsIlJlZ0V4cCIsInJlcGxhY2VSZWdleHAiLCJzdHJpbmciLCJ0ZW1wbGF0ZVNldHRpbmdzIiwiZXZhbHVhdGUiLCJpbnRlcnBvbGF0ZSIsImVzY2FwZSIsIm5vTWF0Y2giLCJlc2NhcGVzIiwiZXNjYXBlUmVnRXhwIiwiZXNjYXBlQ2hhciIsImJhcmVJZGVudGlmaWVyIiwidGVtcGxhdGUiLCJ0ZXh0Iiwic2V0dGluZ3MiLCJvbGRTZXR0aW5ncyIsIm9mZnNldCIsImFyZ3VtZW50IiwidmFyaWFibGUiLCJmYWxsYmFjayIsImlkQ291bnRlciIsInVuaXF1ZUlkIiwicHJlZml4IiwiY2hhaW4iLCJpbnN0YW5jZSIsIl9jaGFpbiIsImV4ZWN1dGVCb3VuZCIsInNvdXJjZUZ1bmMiLCJib3VuZEZ1bmMiLCJjYWxsaW5nQ29udGV4dCIsInBhcnRpYWwiLCJib3VuZEFyZ3MiLCJwbGFjZWhvbGRlciIsImJvdW5kIiwiVHlwZUVycm9yIiwiY2FsbEFyZ3MiLCJmbGF0dGVuIiwiaW5wdXQiLCJkZXB0aCIsInN0cmljdCIsIm91dHB1dCIsImlkeCIsImoiLCJsZW4iLCJtZW1vaXplIiwiaGFzaGVyIiwiY2FjaGUiLCJhZGRyZXNzIiwiZGVsYXkiLCJ0aHJvdHRsZSIsIm9wdGlvbnMiLCJwcmV2aW91cyIsImxhdGVyIiwibGVhZGluZyIsInRocm90dGxlZCIsIl9ub3ciLCJyZW1haW5pbmciLCJ0cmFpbGluZyIsImNhbmNlbCIsInBhc3NlZCIsImRlYm91bmNlZCIsIl9hcmdzIiwid3JhcCIsIndyYXBwZXIiLCJuZWdhdGUiLCJwcmVkaWNhdGUiLCJjb21wb3NlIiwic3RhcnQiLCJhZnRlciIsImJlZm9yZSIsIm1lbW8iLCJmaW5kS2V5IiwiY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIiLCJkaXIiLCJhcnJheSIsInNvcnRlZEluZGV4IiwibG93IiwiaGlnaCIsIm1pZCIsImNyZWF0ZUluZGV4RmluZGVyIiwicHJlZGljYXRlRmluZCIsIml0ZW0iLCJmaW5kSW5kZXgiLCJmaW5kTGFzdEluZGV4IiwiZmluZFdoZXJlIiwiZWFjaCIsImNyZWF0ZVJlZHVjZSIsImluaXRpYWwiLCJyZWR1Y2VyIiwicmVqZWN0IiwiZXZlcnkiLCJmcm9tSW5kZXgiLCJndWFyZCIsImNvbnRleHRQYXRoIiwibWV0aG9kIiwicGx1Y2siLCJ3aGVyZSIsImNvbXB1dGVkIiwibGFzdENvbXB1dGVkIiwidiIsInJlU3RyU3ltYm9sIiwidG9BcnJheSIsInNhbXBsZSIsImxhc3QiLCJyYW5kIiwidGVtcCIsInNodWZmbGUiLCJzb3J0QnkiLCJjcml0ZXJpYSIsImxlZnQiLCJyaWdodCIsImdyb3VwIiwiYmVoYXZpb3IiLCJwYXJ0aXRpb24iLCJwYXNzIiwic2l6ZSIsImtleUluT2JqIiwicGljayIsImZpcnN0IiwiY29tcGFjdCIsIkJvb2xlYW4iLCJvdGhlckFycmF5cyIsImRpZmZlcmVuY2UiLCJ1bmlxIiwiaXNTb3J0ZWQiLCJzZWVuIiwiYXJyYXlzIiwiaW50ZXJzZWN0aW9uIiwiYXJnc0xlbmd0aCIsInVuemlwIiwicmFuZ2UiLCJzdG9wIiwic3RlcCIsImNlaWwiLCJjaHVuayIsImNvdW50IiwiY2hhaW5SZXN1bHQiLCJtaXhpbiIsImRhdGFPcGVyYXRvciIsImlzUmVtb3RlU29ydCIsImhhbmRsZVNvcnRDaGFuZ2UiLCJkZWZhdWx0U29ydENvbnRleHQiLCJTb3J0Q29udGV4dCIsIlNvcnRQcm92aWRlciIsImhhbmRsZVNvcnQiLCJkZWZhdWx0U29ydERpcmVjdGlvbiIsImRlZmF1bHRTb3J0ZWQiLCJpbml0U29ydCIsImNvbXBvbmVudERpZE1vdW50Iiwic29ydENvbHVtbnMiLCJoaWRkZW5Sb3dzIiwiU2VsZWN0aW9uSGVhZGVyQ2VsbENvbXAiLCJFeHBhbnNpb25IZWFkZXJDZWxsQ29tcCIsImN1cnJTb3J0IiwiaXNMYXN0U29ydGluZyIsInNvcnRpbmciLCJFeHBhbnNpb25Db250ZXh0IiwicGFyZW50Q2xhc3NOYW1lIiwicmVuZGVyV2l0aEV4cGFuc2lvbiIsIkJvZHkiLCJFZGl0aW5nQ2VsbCIsImNyZWF0ZUVkaXRpbmdDZWxsIiwib25TdGFydEVkaXQiLCJSb3dDb21wb25lbnQiLCJzZWxlY3RSb3dFbmFibGVkIiwiZXhwYW5kUm93RW5hYmxlZCIsIndpdGhSb3dMZXZlbENlbGxFZGl0IiwiaW5kaWNhdGlvbiIsImFkZGl0aW9uYWxSb3dQcm9wcyIsImJhc2VSb3dQcm9wcyIsIl9leHRlbmRzIiwidCIsInIiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsIl9zZXRQcm90b3R5cGVPZiIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiX2luaGVyaXRzTG9vc2UiLCJvIiwicmVwbGFjZUNsYXNzTmFtZSIsIm9yaWdDbGFzcyIsImNsYXNzVG9SZW1vdmUiLCJmb3JjZVJlZmxvdyIsIm5vZGUiLCJzY3JvbGxUb3AiLCJVTk1PVU5URUQiLCJFWElURUQiLCJFTlRFUklORyIsIkVOVEVSRUQiLCJFWElUSU5HIiwiVHJhbnNpdGlvbiIsIl9SZWFjdCRDb21wb25lbnQiLCJfdGhpcyIsImluaXRpYWxTdGF0dXMiLCJpc01vdW50aW5nIiwiZW50ZXIiLCJhcHBlYXJTdGF0dXMiLCJ1bm1vdW50T25FeGl0IiwibW91bnRPbkVudGVyIiwic3RhdHVzIiwibmV4dENhbGxiYWNrIiwiX3JlZiIsIl9wcm90byIsInVwZGF0ZVN0YXR1cyIsInByZXZQcm9wcyIsIm5leHRTdGF0dXMiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsImNhbmNlbE5leHRDYWxsYmFjayIsImdldFRpbWVvdXRzIiwiZXhpdCIsIm1vdW50aW5nIiwiY3VycmVudCIsInBlcmZvcm1FbnRlciIsInBlcmZvcm1FeGl0IiwiX3RoaXMyIiwiYXBwZWFyaW5nIiwiX3JlZjIiLCJtYXliZU5vZGUiLCJtYXliZUFwcGVhcmluZyIsInRpbWVvdXRzIiwiZW50ZXJUaW1lb3V0IiwiY29uZmlnIiwic2FmZVNldFN0YXRlIiwib25FbnRlcmVkIiwib25FbnRlciIsIm9uRW50ZXJpbmciLCJvblRyYW5zaXRpb25FbmQiLCJfdGhpczMiLCJvbkV4aXQiLCJvbkV4aXRpbmciLCJuZXh0U3RhdGUiLCJjYWxsYmFjayIsInNldE5leHRDYWxsYmFjayIsIl90aGlzNCIsImFjdGl2ZSIsImV2ZW50IiwiaGFuZGxlciIsImRvZXNOb3RIYXZlVGltZW91dE9yTGlzdGVuZXIiLCJhZGRFbmRMaXN0ZW5lciIsIl9yZWYzIiwibWF5YmVOZXh0Q2FsbGJhY2siLCJfdGhpcyRwcm9wcyIsImNoaWxkUHJvcHMiLCJUcmFuc2l0aW9uR3JvdXBDb250ZXh0Iiwib25seSIsImNvbnRleHRUeXBlIiwicHJvcFR5cGVzIiwiZGVmYXVsdFByb3BzIiwicmVtb3ZlQ2xhc3MiLCJjIiwiZWxlbWVudCIsImNsYXNzTGlzdCIsInJlbW92ZSIsInNldEF0dHJpYnV0ZSIsImJhc2VWYWwiLCJfbGVuIiwiX2tleSIsImFwcGxpZWRDbGFzc2VzIiwiX3RoaXMkcmVzb2x2ZUFyZ3VtZW50IiwicmVzb2x2ZUFyZ3VtZW50cyIsInJlbW92ZUNsYXNzZXMiLCJhZGRDbGFzcyIsIl90aGlzJHJlc29sdmVBcmd1bWVudDIiLCJfdGhpcyRyZXNvbHZlQXJndW1lbnQzIiwiZ2V0Q2xhc3NOYW1lcyIsImlzU3RyaW5nQ2xhc3NOYW1lcyIsImJhc2VDbGFzc05hbWUiLCJhY3RpdmVDbGFzc05hbWUiLCJkb25lQ2xhc3NOYW1lIiwicGhhc2UiLCJhZGQiLCJoYXNDbGFzcyIsIl9hZGRDbGFzcyIsIl90aGlzJGFwcGxpZWRDbGFzc2VzJCIsImJhc2UiLCJkb25lIiwiZ2V0Q2hpbGRNYXBwaW5nIiwibWFwRm4iLCJDaGlsZHJlbiIsImNoaWxkIiwiaXNWYWxpZEVsZW1lbnQiLCJtYXBwZXIiLCJnZXRQcm9wIiwiZ2V0TmV4dENoaWxkTWFwcGluZyIsInByZXZDaGlsZE1hcHBpbmciLCJuZXh0Q2hpbGRNYXBwaW5nIiwicHJldiIsIm5leHQiLCJnZXRWYWx1ZUZvcktleSIsIm5leHRLZXlzUGVuZGluZyIsInBlbmRpbmdLZXlzIiwicHJldktleSIsImNoaWxkTWFwcGluZyIsIm5leHRLZXkiLCJwZW5kaW5nTmV4dEtleSIsIm1lcmdlQ2hpbGRNYXBwaW5ncyIsImhhc1ByZXYiLCJoYXNOZXh0IiwicHJldkNoaWxkIiwiaXNMZWF2aW5nIiwiY2xvbmVFbGVtZW50IiwiVHJhbnNpdGlvbkdyb3VwIiwiaGFuZGxlRXhpdGVkIiwiUmVmZXJlbmNlRXJyb3IiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiY29udGV4dFZhbHVlIiwiZmlyc3RSZW5kZXIiLCJtb3VudGVkIiwiY3VycmVudENoaWxkTWFwcGluZyIsImNvbXBvbmVudCIsImNoaWxkRmFjdG9yeSIsIlJlcGxhY2VUcmFuc2l0aW9uIiwiaGFuZGxlRW50ZXIiLCJfbGVuMiIsIl9rZXkyIiwiaGFuZGxlTGlmZWN5Y2xlIiwiaGFuZGxlRW50ZXJpbmciLCJfbGVuMyIsIl9rZXkzIiwiaGFuZGxlRW50ZXJlZCIsIl9sZW40IiwiX2tleTQiLCJoYW5kbGVFeGl0IiwiX2xlbjUiLCJfa2V5NSIsImhhbmRsZUV4aXRpbmciLCJfbGVuNiIsIl9rZXk2IiwiX2xlbjciLCJfa2V5NyIsIm9yaWdpbmFsQXJncyIsIl9jaGlsZCRwcm9wcyIsImluUHJvcCIsIl9SZWFjdCRDaGlsZHJlbiR0b0FyciIsInNlY29uZCIsIl9sZWF2ZVJlbmRlcnMiLCJfZW50ZXJSZW5kZXJzIiwibW9kZXMiLCJjYWxsSG9vayIsIl9lbGVtZW50JHByb3BzIiwibGVhdmVSZW5kZXJzIiwiY2hhbmdlU3RhdGUiLCJlbnRlclJlbmRlcnMiLCJfcmVmNCIsIlN3aXRjaFRyYW5zaXRpb24iLCJhcHBlYXJlZCIsIm9sZENoaWxkcmVuIiwibmV3Q2hpbGRyZW4iLCJfdGhpcyRzdGF0ZSIsIlJPV19TRUxFQ1RfTVVMVElQTEUiLCJDSEVDS0JPWF9TVEFUVVNfSU5ERVRFUk1JTkFURSIsIkNIRUNLQk9YX1NUQVRVU19DSEVDS0VEIiwiQ0hFQ0tCT1hfU1RBVFVTX1VOQ0hFQ0tFRCIsIkZJTFRFUlNfUE9TSVRJT05fVE9QIiwiRklMVEVSU19QT1NJVElPTl9CT1RUT00iLCJJTkRJQ0FUT1JfUE9TSVRJT05fUklHSFQiLCJyb3dzIiwic2VsZWN0aW9uIiwiZXhwYW5kIiwibXV0YXRlIiwiaGFzT3duIiwiYXJnIiwiYXBwZW5kQ2xhc3MiLCJwYXJzZVZhbHVlIiwibmV3Q2xhc3MiLCJkZWZhdWx0IiwiUmVmbGVjdE93bktleXMiLCJSIiwiUmVmbGVjdCIsIlJlZmxlY3RBcHBseSIsInJlY2VpdmVyIiwib3duS2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImdldE93blByb3BlcnR5TmFtZXMiLCJOdW1iZXJJc05hTiIsIkV2ZW50RW1pdHRlciIsImluaXQiLCJvbmNlIiwiZW1pdHRlciIsIlByb21pc2UiLCJyZXNvbHZlIiwiZXJyb3JMaXN0ZW5lciIsImVyciIsInJlbW92ZUxpc3RlbmVyIiwicmVzb2x2ZXIiLCJldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIiLCJmbGFncyIsIm9uIiwiYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIiLCJfZXZlbnRzIiwiX2V2ZW50c0NvdW50IiwiX21heExpc3RlbmVycyIsImRlZmF1bHRNYXhMaXN0ZW5lcnMiLCJjaGVja0xpc3RlbmVyIiwibGlzdGVuZXIiLCJfZ2V0TWF4TGlzdGVuZXJzIiwidGhhdCIsIl9hZGRMaXN0ZW5lciIsInByZXBlbmQiLCJtIiwiZXhpc3RpbmciLCJ3YXJuaW5nIiwibmV3TGlzdGVuZXIiLCJlbWl0Iiwid2FybmVkIiwidyIsImNvbnNvbGUiLCJ3YXJuIiwib25jZVdyYXBwZXIiLCJmaXJlZCIsIndyYXBGbiIsIl9vbmNlV3JhcCIsIndyYXBwZWQiLCJfbGlzdGVuZXJzIiwidW53cmFwIiwiZXZsaXN0ZW5lciIsImFyciIsInJldCIsInVud3JhcExpc3RlbmVycyIsImFycmF5Q2xvbmUiLCJsaXN0ZW5lckNvdW50IiwiY29weSIsImFkZEV2ZW50TGlzdGVuZXIiLCJ3cmFwTGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiUmFuZ2VFcnJvciIsImdldFByb3RvdHlwZU9mIiwic2V0TWF4TGlzdGVuZXJzIiwiZ2V0TWF4TGlzdGVuZXJzIiwiZG9FcnJvciIsImVycm9yIiwiZXIiLCJtZXNzYWdlIiwibGlzdGVuZXJzIiwiYWRkTGlzdGVuZXIiLCJwcmVwZW5kTGlzdGVuZXIiLCJwcmVwZW5kT25jZUxpc3RlbmVyIiwib3JpZ2luYWxMaXN0ZW5lciIsInNoaWZ0Iiwic3BsaWNlT25lIiwib2ZmIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwicmF3TGlzdGVuZXJzIiwiZXZlbnROYW1lcyIsIkRFTEFZX0ZPUl9EQkNMSUNLIiwiY2xpY2tGbiIsImV4cGFuZEJ5Q29sdW1uT25seSIsImNsaWNrVG9FeHBhbmQiLCJDaGVja0JveCIsImluZGV0ZXJtaW5hdGUiLCJTZWxlY3Rpb25IZWFkZXJDZWxsIiwiY2hlY2tlZFN0YXR1cyIsIm9uQWxsUm93c1NlbGVjdCIsInNlbGVjdGlvbkhlYWRlclJlbmRlcmVyIiwiaGlkZVNlbGVjdEFsbCIsImhlYWRlckNvbHVtblN0eWxlIiwiZm9vdGVyIiwiY29sdW1uRGF0YSIsIkZvb3RlckNlbGwiLCJmb290ZXJUaXRsZSIsImZvb3RlckFsaWduIiwiZm9vdGVyRm9ybWF0dGVyIiwiZm9vdGVyRXZlbnRzIiwiZm9vdGVyU3R5bGUiLCJmb290ZXJBdHRycyIsImRlbGVnYXRlRXZlbnRzIiwiU2VsZWN0aW9uUHJvdmlkZXIiLCJoYW5kbGVSb3dTZWxlY3QiLCJvblNlbGVjdCIsImN1cnJTZWxlY3RlZCIsImlzSGFuZGxlUm93U2VsZWN0IiwiZm9yY2VVcGRhdGUiLCJoYW5kbGVBbGxSb3dzU2VsZWN0IiwiaXNVblNlbGVjdCIsIm9uU2VsZWN0QWxsIiwiZ2V0U2VsZWN0ZWQiLCJDZWxsIiwiY3JlYXRlSGFuZGxlRWRpdGluZ0NlbGwiLCJpc0R1bW15RmllbGQiLCJmb3JtYXR0ZXIiLCJmb3JtYXRFeHRyYURhdGEiLCJvcmlnaW5GdW5jIiwib25Eb3VibGVDbGljayIsImVkaXRDZWxsIiwibmV3VmFsdWUiLCJIZWFkZXJDZWxsIiwiaGVhZGVyVGl0bGUiLCJoZWFkZXJGb3JtYXR0ZXIiLCJoZWFkZXJFdmVudHMiLCJoZWFkZXJTdHlsZSIsImhlYWRlckF0dHJzIiwiaGVhZGVyU29ydGluZ0NsYXNzZXMiLCJoZWFkZXJTb3J0aW5nU3R5bGUiLCJzb3J0Q2FyZXRmdW5jIiwiY3VzdG9tQXR0cnMiLCJzb3J0U3ltYm9sIiwiZmlsdGVyRWxlbWVudCIsImN1c3RvbUNsaWNrIiwiY3VzdG9tS2V5RG93biIsIm9uS2V5RG93biIsIm9uS2V5VXAiLCJzb3J0RWxlbWVudCIsIkJhc2UiLCJyZWdpc3RlckV4cG9zZWRBUEkiLCJleHBvc2VkQVBJRW1pdHRlciIsInBheWxvYWQiLCJ0YWJsZSIsInNlbGVjdGlvbkNvbnRleHQiLCJzZWFyY2hDb250ZXh0IiwiZ2V0U2VhcmNoZWQiLCJmaWx0ZXJDb250ZXh0IiwiZ2V0RmlsdGVyZWQiLCJoYW5kbGVSZW1vdGVTb3J0Q2hhbmdlIiwiY29sdW1uVG9nZ2xlIiwiQ2VsbEVkaXRDb250ZXh0IiwiaXNSZW1vdGVDZWxsRWRpdCIsImhhbmRsZVJlbW90ZUNlbGxDaGFuZ2UiLCJGaWx0ZXJDb250ZXh0IiwiaXNSZW1vdGVGaWx0ZXJpbmciLCJoYW5kbGVSZW1vdGVGaWx0ZXJDaGFuZ2UiLCJQYWdpbmF0aW9uQ29udGV4dCIsInNlYXJjaCIsIlNlYXJjaENvbnRleHQiLCJpc1JlbW90ZVNlYXJjaCIsImhhbmRsZVJlbW90ZVNlYXJjaENoYW5nZSIsInNldERlcGVuZGVuY3lNb2R1bGVzIiwic2V0UGFnaW5hdGlvblJlbW90ZUVtaXR0ZXIiLCJyZW1vdGVFbWl0dGVyIiwiaXNSZW1vdGVQYWdpbmF0aW9uIiwiaGFuZGxlUmVtb3RlUGFnZUNoYW5nZSIsInJlbmRlckJhc2UiLCJyb290UHJvcHMiLCJjb2x1bW5Ub2dnbGVQcm9wcyIsInJlbmRlcldpdGhDb2x1bW5Db250ZXh0IiwiYmFzZVByb3BzIiwicmVuZGVyV2l0aFNlbGVjdGlvbkNvbnRleHQiLCJyZW5kZXJXaXRoUm93RXhwYW5kQ29udGV4dCIsInJvd0V4cGFuZENvbnRleHQiLCJyZW5kZXJXaXRoUGFnaW5hdGlvbkNvbnRleHQiLCJwYWdpbmF0aW9uQ29udGV4dCIsInRhYmxlSWQiLCJyZW5kZXJXaXRoU29ydENvbnRleHQiLCJzb3J0Q29udGV4dCIsInJlbmRlcldpdGhTZWFyY2hDb250ZXh0Iiwic2VhcmNoVGV4dCIsImRhdGFDaGFuZ2VMaXN0ZW5lciIsInJlbmRlcldpdGhGaWx0ZXJDb250ZXh0IiwicmVuZGVyV2l0aENlbGxFZGl0Q29udGV4dCIsImNlbGxFZGl0Q29udGV4dCIsImRpc3BsYXkiLCJmaWx0ZXJDb2x1bW5zIiwic2hvd0ZpbHRlcnNSb3ciLCJnZXROZXdlc3RTdGF0ZSIsInBhZ2UiLCJzaXplUGVyUGFnZSIsImZpbHRlcnMiLCJjdXJyUGFnZSIsImN1cnJTaXplUGVyUGFnZSIsInJlbW90ZSIsIm9uVGFibGVDaGFuZ2UiLCJuZXdTdGF0ZSIsInBhZ2VTdGFydEluZGV4IiwiaW5jbHVkZVNlbGVjdENvbHVtbiIsImNvbHVtbkxlbiIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJnZXR0ZXIiLCJfX2VzTW9kdWxlIiwiZGVmaW5pdGlvbiIsImdsb2JhbFRoaXMiLCJ3aW5kb3ciLCJ0b1N0cmluZ1RhZyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9