react-bootstrap-table-ng-paginator 5.19.2 → 5.19.3

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.
Files changed (49) hide show
  1. package/dist/react-bootstrap-table-ng-paginator.js +2 -2
  2. package/dist/react-bootstrap-table-ng-paginator.min.js +2 -2
  3. package/lib/index.d.ts +4 -72
  4. package/lib/index.js +45 -5
  5. package/lib/index.js.map +1 -1
  6. package/lib/src/data-context.d.ts +1 -77
  7. package/lib/src/data-context.js +76 -99
  8. package/lib/src/data-context.js.map +1 -1
  9. package/lib/src/hooks/usePagination.d.ts +33 -0
  10. package/lib/src/hooks/usePagination.js +213 -0
  11. package/lib/src/hooks/usePagination.js.map +1 -0
  12. package/lib/src/hooks/usePaginationState.d.ts +16 -0
  13. package/lib/src/hooks/usePaginationState.js +167 -0
  14. package/lib/src/hooks/usePaginationState.js.map +1 -0
  15. package/lib/src/page-button.d.ts +2 -6
  16. package/lib/src/page-button.js +26 -95
  17. package/lib/src/page-button.js.map +1 -1
  18. package/lib/src/pagination-handler.d.ts +1 -42
  19. package/lib/src/pagination-handler.js +44 -152
  20. package/lib/src/pagination-handler.js.map +1 -1
  21. package/lib/src/pagination-list-adapter.d.ts +2 -152
  22. package/lib/src/pagination-list-adapter.js +54 -83
  23. package/lib/src/pagination-list-adapter.js.map +1 -1
  24. package/lib/src/pagination-list-standalone.d.ts +1 -1
  25. package/lib/src/pagination-total-adapter.d.ts +2 -152
  26. package/lib/src/pagination-total-adapter.js +50 -78
  27. package/lib/src/pagination-total-adapter.js.map +1 -1
  28. package/lib/src/pagination-total-standalone.d.ts +1 -1
  29. package/lib/src/pagination.d.ts +2 -43
  30. package/lib/src/pagination.js +135 -199
  31. package/lib/src/pagination.js.map +1 -1
  32. package/lib/src/size-per-page-dropdown-adapter.d.ts +2 -92
  33. package/lib/src/size-per-page-dropdown-adapter.js +94 -88
  34. package/lib/src/size-per-page-dropdown-adapter.js.map +1 -1
  35. package/lib/src/size-per-page-dropdown-standalone.d.ts +1 -1
  36. package/lib/src/size-per-page-dropdown.js +2 -1
  37. package/lib/src/size-per-page-dropdown.js.map +1 -1
  38. package/lib/src/size-per-page-option.js +6 -0
  39. package/lib/src/size-per-page-option.js.map +1 -1
  40. package/lib/src/standalone-adapter.d.ts +1 -1
  41. package/lib/src/standalone-adapter.js +52 -13
  42. package/lib/src/standalone-adapter.js.map +1 -1
  43. package/lib/src/state-context.d.ts +3 -52
  44. package/lib/src/state-context.js +26 -195
  45. package/lib/src/state-context.js.map +1 -1
  46. package/package.json +3 -3
  47. package/lib/src/page-resolver.d.ts +0 -78
  48. package/lib/src/page-resolver.js +0 -199
  49. package/lib/src/page-resolver.js.map +0 -1
@@ -1,3 +1,3 @@
1
1
  /*! For license information please see react-bootstrap-table-ng-paginator.min.js.LICENSE.txt */
2
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define(["react"],t):"object"==typeof exports?exports.ReactBootstrapTableNgPaginator=t(require("react")):e.ReactBootstrapTableNgPaginator=t(e.React)}(self,e=>{return t={7(e){"use strict";var t,a="object"==typeof Reflect?Reflect:null,n=a&&"function"==typeof a.apply?a.apply:function(e,t,a){return Function.prototype.apply.call(e,t,a)};t=a&&"function"==typeof a.ownKeys?a.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var r=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(a,n){function r(a){e.removeListener(t,i),n(a)}function i(){"function"==typeof e.removeListener&&e.removeListener("error",r),a([].slice.call(arguments))}f(e,t,i,{once:!0}),"error"!==t&&function(e,t,a){"function"==typeof e.on&&f(e,"error",t,a)}(e,r,{once:!0})})},i.EventEmitter=i,i.prototype._events=void 0,i.prototype._eventsCount=0,i.prototype._maxListeners=void 0;var o=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,a,n){var r,i,o,u;if(s(a),void 0===(i=e._events)?(i=e._events=Object.create(null),e._eventsCount=0):(void 0!==i.newListener&&(e.emit("newListener",t,a.listener?a.listener:a),i=e._events),o=i[t]),void 0===o)o=i[t]=a,++e._eventsCount;else if("function"==typeof o?o=i[t]=n?[a,o]:[o,a]:n?o.unshift(a):o.push(a),(r=l(e))>0&&o.length>r&&!o.warned){o.warned=!0;var d=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");d.name="MaxListenersExceededWarning",d.emitter=e,d.type=t,d.count=o.length,u=d,console&&console.warn&&console.warn(u)}return e}function d(){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 p(e,t,a){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:a},r=d.bind(n);return r.listener=a,n.wrapFn=r,r}function g(e,t,a){var n=e._events;if(void 0===n)return[];var r=n[t];return void 0===r?[]:"function"==typeof r?a?[r.listener||r]:[r]:a?function(e){for(var t=new Array(e.length),a=0;a<t.length;++a)t[a]=e[a].listener||e[a];return t}(r):P(r,r.length)}function c(e){var t=this._events;if(void 0!==t){var a=t[e];if("function"==typeof a)return 1;if(void 0!==a)return a.length}return 0}function P(e,t){for(var a=new Array(t),n=0;n<t;++n)a[n]=e[n];return a}function f(e,t,a,n){if("function"==typeof e.on)n.once?e.once(t,a):e.on(t,a);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 r(i){n.once&&e.removeEventListener(t,r),a(i)})}}Object.defineProperty(i,"defaultMaxListeners",{enumerable:!0,get:function(){return o},set:function(e){if("number"!=typeof e||e<0||r(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");o=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||r(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=[],a=1;a<arguments.length;a++)t.push(arguments[a]);var r="error"===e,i=this._events;if(void 0!==i)r=r&&void 0===i.error;else if(!r)return!1;if(r){var o;if(t.length>0&&(o=t[0]),o instanceof Error)throw o;var s=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw s.context=o,s}var l=i[e];if(void 0===l)return!1;if("function"==typeof l)n(l,this,t);else{var u=l.length,d=P(l,u);for(a=0;a<u;++a)n(d[a],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,p(this,e,t)),this},i.prototype.prependOnceListener=function(e,t){return s(t),this.prependListener(e,p(this,e,t)),this},i.prototype.removeListener=function(e,t){var a,n,r,i,o;if(s(t),void 0===(n=this._events))return this;if(void 0===(a=n[e]))return this;if(a===t||a.listener===t)0===--this._eventsCount?this._events=Object.create(null):(delete n[e],n.removeListener&&this.emit("removeListener",e,a.listener||t));else if("function"!=typeof a){for(r=-1,i=a.length-1;i>=0;i--)if(a[i]===t||a[i].listener===t){o=a[i].listener,r=i;break}if(r<0)return this;0===r?a.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(a,r),1===a.length&&(n[e]=a[0]),void 0!==n.removeListener&&this.emit("removeListener",e,o||t)}return this},i.prototype.off=i.prototype.removeListener,i.prototype.removeAllListeners=function(e){var t,a,n;if(void 0===(a=this._events))return this;if(void 0===a.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==a[e]&&(0===--this._eventsCount?this._events=Object.create(null):delete a[e]),this;if(0===arguments.length){var r,i=Object.keys(a);for(n=0;n<i.length;++n)"removeListener"!==(r=i[n])&&this.removeAllListeners(r);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=a[e]))this.removeListener(e,t);else if(void 0!==t)for(n=t.length-1;n>=0;n--)this.removeListener(e,t[n]);return this},i.prototype.listeners=function(e){return g(this,e,!0)},i.prototype.rawListeners=function(e){return g(this,e,!1)},i.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):c.call(e,t)},i.prototype.listenerCount=c,i.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},987(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.SizePerPageDropdownStandalone=t.PaginationTotalStandalone=t.PaginationListStandalone=t.PaginationProvider=void 0;const r=n(a(442)),i=n(a(320)),o=n(a(657));t.PaginationListStandalone=o.default;const s=n(a(991));t.PaginationTotalStandalone=s.default;const l=n(a(429));t.SizePerPageDropdownStandalone=l.default;const u=n(a(973));t.default=(e={})=>({createContext:i.default,options:e});const{Provider:d,Consumer:p}=(0,u.default)();t.PaginationProvider=e=>r.default.createElement(d,{...e},r.default.createElement(p,null,t=>e.children(t)))},971(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={PAGINATION_SIZE:5,PAGE_START_INDEX:1,With_FIRST_AND_LAST:!0,SHOW_ALL_PAGE_BTNS:!1,SHOW_TOTAL:!1,PAGINATION_TOTAL:null,FIRST_PAGE_TEXT:"<<",PRE_PAGE_TEXT:"<",NEXT_PAGE_TEXT:">",LAST_PAGE_TEXT:">>",NEXT_PAGE_TITLE:"next page",LAST_PAGE_TITLE:"last page",PRE_PAGE_TITLE:"previous page",FIRST_PAGE_TITLE:"first page",SIZE_PER_PAGE_LIST:[10,25,30,50],HIDE_SIZE_PER_PAGE:!1,HIDE_PAGE_LIST_ONLY_ONE_PAGE:!1}},320(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=n(a(971)),o=a(933),s=n(a(38)),l=n(a(973)),{Provider:u}=(0,l.default)(),d=r.default.createContext(null);class p extends u{componentDidUpdate(e){super.componentDidUpdate(e);const{currSizePerPage:t}=this,{custom:a,onPageChange:n}=e.pagination.options,r=void 0!==e.pagination.options.pageStartIndex?e.pagination.options.pageStartIndex:i.default.PAGE_START_INDEX;if(!this.isRemotePagination()&&!a){const a=(0,o.alignPage)(e.data.length,this.props.data.length,this.currPage,t,r);this.currPage!==a&&(n&&n(a,t),this.currPage=a)}e.onDataSizeChange&&e.data.length!==this.props.data.length&&e.onDataSizeChange({dataSize:this.props.data.length})}isRemotePagination=()=>this.props.isRemotePagination();renderDefaultPagination=()=>{if(!this.props.pagination.options.custom){const{page:e,sizePerPage:t,dataSize:a,...n}=this.getPaginationProps();return r.default.createElement(s.default,{...n,key:"pagination",dataSize:a||this.props.data.length,currPage:e,currSizePerPage:t})}return null};render(){const e=this.props.pagination.options,t=e.sizePerPage??this.currSizePerPage,a=void 0===e.pageStartIndex?i.default.PAGE_START_INDEX:e.pageStartIndex;let{data:n}=this.props,s=e.page??this.currPage;if(!this.isRemotePagination()&&n.length<=(s-1)*t){const e=Math.floor(n.length/t)+1;s=s>e?e:s,this.currPage=s}return this.isRemotePagination()&&(this.currPage=s),n=this.isRemotePagination()?n:(0,o.getByCurrPage)(n,s,t,a),r.default.createElement(d.Provider,{value:{data:n,setRemoteEmitter:this.setPaginationRemoteEmitter}},this.props.children,this.renderDefaultPagination())}}t.default=()=>({Provider:p,Consumer:d.Consumer})},374(e,t,a){"use strict";var n,r=this&&this.__createBinding||(Object.create?function(e,t,a,n){void 0===n&&(n=a);var r=Object.getOwnPropertyDescriptor(t,a);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,n,r)}:function(e,t,a,n){void 0===n&&(n=a),e[n]=t[a]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[t.length]=a);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a=n(e),o=0;o<a.length;o++)"default"!==a[o]&&r(t,e,a[o]);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(a(942)),u=o(a(442));class d extends u.Component{constructor(e){super(e),this.handleClick=this.handleClick.bind(this)}handleClick(e){e.preventDefault(),this.props.onPageChange(this.props.page)}render(){const{page:e,title:t,active:a,disabled:n,className:r}=this.props,i=(0,l.default)({active:a,disabled:n,"page-item":!0},r);return u.default.createElement("li",{className:i,title:t},u.default.createElement("a",{href:"#",onClick:this.handleClick,className:"page-link"},e))}}t.default=d},316(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=n(a(971));t.default=e=>class extends r.default.Component{backToPrevPage(){const{currPage:e,pageStartIndex:t}=this.props;return e-1<t?t:e-1}initialState(){const e=this.calculateTotalPage();return{totalPages:e,lastPage:this.calculateLastPage(e)}}calculateTotalPage(e=this.props.currSizePerPage,t=this.props.dataSize){return Math.ceil(t/e)}calculateLastPage(e){const{pageStartIndex:t}=this.props;return t+e-1}calculateFromTo(){const{dataSize:e,currPage:t,currSizePerPage:a,pageStartIndex:n}=this.props,r=Math.abs(i.default.PAGE_START_INDEX-n);let o=(t-n)*a;o=0===e?0:o+1;let s=Math.min(a*(t+r),e);return s>e&&(s=e),[o,s]}calculatePages(e,t){const{currPage:a,paginationSize:n,pageStartIndex:r,withFirstAndLast:i,firstPageText:o,prePageText:s,nextPageText:l,lastPageText:u,alwaysShowAllBtns:d}=this.props;let p=[],g=e;if(g<=0)return[];let c=Math.max(a-Math.floor(n/2),r);g=c+n-1,g>t&&(g=t,c=g-n+1),d&&(p=i?[o,s]:[s]),c!==r&&e>n&&i&&0===p.length?p=[o,s]:e>1&&0===p.length&&(p=[s]);for(let e=c;e<=g;e+=1)e>=r&&p.push(e);return(d||g<=t&&p.length>1)&&p.push(l),(g!==t&&i||i&&d)&&p.push(u),p}calculatePageStatus(e=[],t,a=!1){const{currPage:n,pageStartIndex:r,firstPageText:i,prePageText:o,nextPageText:s,lastPageText:l,alwaysShowAllBtns:u}=this.props,d=e=>n===r&&(e===i||e===o),p=e=>n===t&&(e===s||e===l);return e.filter(e=>!!u||!(d(e)||p(e))).map(e=>{let t;const r=e===n,u=d(e)||p(e);t=e===s?this.props.nextPageTitle:e===o?this.props.prePageTitle:e===i?this.props.firstPageTitle:e===l?this.props.lastPageTitle:`${e}`;const g={page:e,active:r,disabled:u,title:t};return a||(g.title=t),g})}calculateSizePerPageStatus(){const{sizePerPageList:e}=this.props;return e.map(e=>({text:`${void 0!==e.text?e.text:e}`,page:void 0!==e.value?e.value:e}))}}},933(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getByCurrPage=t.alignPage=void 0;const r=n(a(971)),i=(e,t,a)=>((e,t)=>e+Math.abs(1-t))(e,a)*t-1;t.alignPage=(e,t,a,n,i)=>t<e?a:a<i||e<=0?i:a>=Math.floor(e/n)+i&&1===i?Math.ceil(e/n):a>=Math.floor(e/n)&&0===i?Math.ceil(e/n)-Math.abs(r.default.PAGE_START_INDEX-i):a,t.getByCurrPage=(e,t,a,n)=>{const r=e.length;if(!r)return[];const o=i(t,a,n),s=((e,t)=>e-(t-1))(o,a),l=[];for(let t=s;t<=o&&(l.push(e[t]),t+1!==r);t+=1);return l}},881(e,t,a){"use strict";var n,r=this&&this.__createBinding||(Object.create?function(e,t,a,n){void 0===n&&(n=a);var r=Object.getOwnPropertyDescriptor(t,a);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,n,r)}:function(e,t,a,n){void 0===n&&(n=a),e[n]=t[a]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[t.length]=a);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a=n(e),o=0;o<a.length;o++)"default"!==a[o]&&r(t,e,a[o]);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=o(a(442)),u=s(a(316));t.default=e=>class extends((0,u.default)(l.Component)){constructor(e){super(e),this.handleChangePage=this.handleChangePage.bind(this),this.handleChangeSizePerPage=this.handleChangeSizePerPage.bind(this),this.state=this.initialState()}componentDidUpdate(e){const{currSizePerPage:t,dataSize:a,totalSize:n}=e;let r=0;t!==this.props.currSizePerPage||a!==this.props.dataSize||n!==this.props.totalSize?t!==this.props.currSizePerPage?r=this.calculateTotalPage(this.props.currSizePerPage,this.props.totalSize??this.props.dataSize):a!==this.props.dataSize?r=this.calculateTotalPage(this.props.currSizePerPage,this.props.dataSize):n!==this.props.totalSize&&(r=this.calculateTotalPage(this.props.currSizePerPage,this.props.totalSize)):r=this.calculateTotalPage(this.props.currSizePerPage,this.props.dataSize);const i=this.calculateLastPage(r);r===this.state.totalPages&&i===this.state.lastPage||this.setState({totalPages:r,lastPage:i})}handleChangeSizePerPage(e){const{currSizePerPage:t,onSizePerPageChange:a}=this.props,n="string"==typeof e?parseInt(e,10):e;let{currPage:r}=this.props;if(n!==t){const e=this.calculateTotalPage(n),t=this.calculateLastPage(e);r>t&&(r=t),a(n,r)}}handleChangePage(e){let t;const{currPage:a,pageStartIndex:n,prePageText:r,nextPageText:i,lastPageText:o,firstPageText:s,onPageChange:l}=this.props,{lastPage:u}=this.state;t=e===r?this.backToPrevPage():e===i?a+1>u?u:a+1:e===o?u:e===s?n:parseInt(e,10),t!==a&&l(t)}render(){return l.default.createElement(e,{...this.props,lastPage:this.state.lastPage,totalPages:this.state.totalPages,onPageChange:this.handleChangePage,onSizePerPageChange:this.handleChangeSizePerPage})}}},147(e,t,a){"use strict";var n,r=this&&this.__createBinding||(Object.create?function(e,t,a,n){void 0===n&&(n=a);var r=Object.getOwnPropertyDescriptor(t,a);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,n,r)}:function(e,t,a,n){void 0===n&&(n=a),e[n]=t[a]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[t.length]=a);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a=n(e),o=0;o<a.length;o++)"default"!==a[o]&&r(t,e,a[o]);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.PaginationListWithAdapter=void 0;const l=o(a(442)),u=s(a(316)),d=s(a(285)),p=e=>class extends((0,u.default)(l.Component)){render(){const{lastPage:t,totalPages:a,pageButtonRenderer:n,onPageChange:r,disablePageTitle:i,hidePageListOnlyOnePage:o}=this.props,s=this.calculatePageStatus(this.calculatePages(a,t),t,i);return 1===a&&o?null:l.default.createElement(e,{pageButtonRenderer:n,onPageChange:r,pages:s})}};t.PaginationListWithAdapter=p(d.default),t.default=p},657(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=n(a(881)),o=n(a(285)),s=n(a(147)),l=n(a(885));t.default=(0,l.default)((0,i.default)((0,s.default)(e=>r.default.createElement(o.default,{...e}))))},285(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=n(a(374));t.default=e=>r.default.createElement("ul",{className:"pagination react-bootstrap-table-page-btns-ul"},e.pages.map(t=>{if(e.pageButtonRenderer){const a=e.pageButtonRenderer({...t,onPageChange:e.onPageChange});return a?r.default.cloneElement(a,{key:t.page}):null}return r.default.createElement(i.default,{key:t.page,...t,onPageChange:e.onPageChange})}))},681(e,t,a){"use strict";var n,r=this&&this.__createBinding||(Object.create?function(e,t,a,n){void 0===n&&(n=a);var r=Object.getOwnPropertyDescriptor(t,a);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,n,r)}:function(e,t,a,n){void 0===n&&(n=a),e[n]=t[a]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[t.length]=a);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a=n(e),o=0;o<a.length;o++)"default"!==a[o]&&r(t,e,a[o]);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.PaginationTotalWithAdapter=void 0;const l=o(a(442)),u=s(a(316)),d=s(a(519)),p=e=>class extends((0,u.default)(l.Component)){render(){const[t,a]=this.calculateFromTo();return l.default.createElement(e,{from:t,to:a,dataSize:this.props.dataSize,paginationTotalRenderer:this.props.paginationTotalRenderer})}};t.PaginationTotalWithAdapter=p(d.default),t.default=p},991(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=n(a(519)),o=n(a(681)),s=n(a(885));t.default=(0,s.default)((0,o.default)(e=>r.default.createElement(i.default,{...e})))},519(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442));t.default=e=>e.paginationTotalRenderer?e.paginationTotalRenderer(e.from,e.to,e.dataSize):r.default.createElement("span",{className:"react-bootstrap-table-pagination-total"}," Showing rows ",e.from," to ",e.to," of ",e.dataSize)},38(e,t,a){"use strict";var n,r=this&&this.__createBinding||(Object.create?function(e,t,a,n){void 0===n&&(n=a);var r=Object.getOwnPropertyDescriptor(t,a);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,n,r)}:function(e,t,a,n){void 0===n&&(n=a),e[n]=t[a]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[t.length]=a);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a=n(e),o=0;o<a.length;o++)"default"!==a[o]&&r(t,e,a[o]);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(a(942)),u=o(a(442)),d=s(a(971)),p=s(a(316)),g=s(a(881)),c=a(147),P=a(681),f=a(527);class h extends((0,p.default)(u.Component)){render(){const{tableId:e,currPage:t,pageStartIndex:a=d.default.PAGE_START_INDEX,showTotal:n=d.default.SHOW_TOTAL,dataSize:r,pageListRenderer:i=null,pageButtonRenderer:o=null,paginationTotalRenderer:s=d.default.PAGINATION_TOTAL,hidePageListOnlyOnePage:p=d.default.HIDE_PAGE_LIST_ONLY_ONE_PAGE,totalPages:g,lastPage:h,onPageChange:_,sizePerPageList:v=d.default.SIZE_PER_PAGE_LIST,currSizePerPage:S,hideSizePerPage:T=d.default.HIDE_SIZE_PER_PAGE,sizePerPageRenderer:m=null,sizePerPageOptionRenderer:E=null,onSizePerPageChange:b,bootstrap4:y=!1,bootstrap5:O=!1,disablePageTitle:A=!1,paginationSize:z=d.default.PAGINATION_SIZE,withFirstAndLast:L=d.default.With_FIRST_AND_LAST,alwaysShowAllBtns:x=d.default.SHOW_ALL_PAGE_BTNS,firstPageText:w=d.default.FIRST_PAGE_TEXT,prePageText:I=d.default.PRE_PAGE_TEXT,nextPageText:C=d.default.NEXT_PAGE_TEXT,lastPageText:R=d.default.LAST_PAGE_TEXT,nextPageTitle:D=d.default.NEXT_PAGE_TITLE,prePageTitle:j=d.default.PRE_PAGE_TITLE,firstPageTitle:M=d.default.FIRST_PAGE_TITLE,lastPageTitle:N=d.default.LAST_PAGE_TITLE,...G}=this.props,B=this.calculatePageStatus(this.calculatePages(g,h),h),X=(0,l.default)("react-bootstrap-table-pagination-list","col-md-6 col-xs-6 col-6 col-sm-6 col-lg-6",{"react-bootstrap-table-pagination-list-hidden":p&&1===g});return u.default.createElement("div",{className:"row react-bootstrap-table-pagination"},u.default.createElement("div",{className:"col-md-6 col-xs-6 col-6 col-sm-6 col-lg-6"},u.default.createElement(f.SizePerPageDropdownWithAdapter,{bootstrap4:y,bootstrap5:O,tableId:e,sizePerPageList:v,currSizePerPage:S,hideSizePerPage:T,sizePerPageRenderer:m,sizePerPageOptionRenderer:E,onSizePerPageChange:b}),n?u.default.createElement(P.PaginationTotalWithAdapter,{currPage:t,currSizePerPage:S,pageStartIndex:a,dataSize:r,paginationTotalRenderer:s}):null),i?i({pages:B,onPageChange:_}):u.default.createElement("div",{className:X},u.default.createElement(c.PaginationListWithAdapter,{...G,currPage:t,currSizePerPage:S,pageStartIndex:a,lastPage:h,totalPages:g,pageButtonRenderer:o,onPageChange:_,paginationSize:z,withFirstAndLast:L,firstPageText:w,prePageText:I,nextPageText:C,lastPageText:R,alwaysShowAllBtns:x})))}static defaultProps={disablePageTitle:!1,bootstrap4:!1,bootstrap5:!1,pageStartIndex:d.default.PAGE_START_INDEX,paginationSize:d.default.PAGINATION_SIZE,withFirstAndLast:d.default.With_FIRST_AND_LAST,alwaysShowAllBtns:d.default.SHOW_ALL_PAGE_BTNS,showTotal:d.default.SHOW_TOTAL,pageListRenderer:null,pageButtonRenderer:null,sizePerPageRenderer:null,paginationTotalRenderer:d.default.PAGINATION_TOTAL,sizePerPageOptionRenderer:null,firstPageText:d.default.FIRST_PAGE_TEXT,prePageText:d.default.PRE_PAGE_TEXT,nextPageText:d.default.NEXT_PAGE_TEXT,lastPageText:d.default.LAST_PAGE_TEXT,sizePerPageList:d.default.SIZE_PER_PAGE_LIST,nextPageTitle:d.default.NEXT_PAGE_TITLE,prePageTitle:d.default.PRE_PAGE_TITLE,firstPageTitle:d.default.FIRST_PAGE_TITLE,lastPageTitle:d.default.LAST_PAGE_TITLE,hideSizePerPage:d.default.HIDE_SIZE_PER_PAGE,hidePageListOnlyOnePage:d.default.HIDE_PAGE_LIST_ONLY_ONE_PAGE}}t.default=(0,g.default)(h)},527(e,t,a){"use strict";var n,r=this&&this.__createBinding||(Object.create?function(e,t,a,n){void 0===n&&(n=a);var r=Object.getOwnPropertyDescriptor(t,a);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,n,r)}:function(e,t,a,n){void 0===n&&(n=a),e[n]=t[a]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[t.length]=a);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a=n(e),o=0;o<a.length;o++)"default"!==a[o]&&r(t,e,a[o]);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.SizePerPageDropdownWithAdapter=void 0;const l=o(a(442)),u=s(a(316)),d=s(a(609)),p=e=>class extends((0,u.default)(l.Component)){state={dropdownOpen:!1};constructor(e){super(e),this.closeDropDown=this.closeDropDown.bind(this),this.toggleDropDown=this.toggleDropDown.bind(this),this.handleChangeSizePerPage=this.handleChangeSizePerPage.bind(this),this.state={dropdownOpen:!1}}toggleDropDown(){const e=!this.state.dropdownOpen;this.setState(()=>({dropdownOpen:e}))}closeDropDown(){this.setState(()=>({dropdownOpen:!1}))}handleChangeSizePerPage(e){this.props.onSizePerPageChange(e),this.closeDropDown()}render(){const{tableId:t,bootstrap4:a,bootstrap5:n,sizePerPageList:r,currSizePerPage:i,hideSizePerPage:o,sizePerPageRenderer:s,sizePerPageOptionRenderer:u}=this.props,{dropdownOpen:d}=this.state;return r.length>1&&!o?s?s({options:this.calculateSizePerPageStatus(),currSizePerPage:`${i}`,onSizePerPageChange:this.handleChangeSizePerPage}):l.default.createElement(e,{...this.props,currSizePerPage:`${i}`,options:this.calculateSizePerPageStatus(),optionRenderer:u,onSizePerPageChange:this.handleChangeSizePerPage,onClick:this.toggleDropDown,onBlur:this.closeDropDown,open:d,tableId:t,bootstrap4:a,bootstrap5:n}):null}};t.SizePerPageDropdownWithAdapter=p(d.default),t.default=p},429(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=n(a(881)),o=n(a(609)),s=n(a(527)),l=n(a(885));t.default=(0,l.default)((0,i.default)((0,s.default)(e=>r.default.createElement(o.default,{...e}))))},609(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(942)),i=n(a(442)),o=n(a(869)),s={open:!1,hidden:!1,btnContextual:"btn-default btn-secondary",variation:"dropdown",className:"",optionRenderer:null,bootstrap4:!1,bootstrap5:!1,tableId:null};t.default=e=>{const{open:t,tableId:a,hidden:n,onClick:l,onBlur:u,options:d,className:p,variation:g,bootstrap4:c,bootstrap5:P,btnContextual:f,optionRenderer:h,currSizePerPage:_,onSizePerPageChange:v}={...s,...e},S=t?"open show":"",T=(0,r.default)(S,"react-bs-table-sizePerPage-dropdown",g,p),m=a?`${a}-pageDropDown`:"pageDropDown";return i.default.createElement("span",{style:{visibility:n?"hidden":"visible"},className:T,"data-testid":"size-per-page-dropdown"},i.default.createElement("button",{id:m,type:"button",className:`btn ${f} dropdown-toggle`,"data-toggle":P?void 0:"dropdown","data-bs-toggle":P?"dropdown":void 0,"aria-expanded":t,onClick:l,onBlur:u},_," ",c||P?null:i.default.createElement("span",null,i.default.createElement("span",{className:"caret"}))),i.default.createElement("ul",{className:`dropdown-menu ${S}`,role:"menu","aria-labelledby":m},d.map(e=>h?h({...e,onSizePerPageChange:v}):i.default.createElement(o.default,{...e,key:e.text,bootstrap4:c,bootstrap5:P,onSizePerPageChange:v}))))}},869(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442));t.default=({text:e,page:t,onSizePerPageChange:a,bootstrap4:n=!1,bootstrap5:i=!1})=>n||i?r.default.createElement("a",{href:"#",tabIndex:-1,role:"menuitem",className:"dropdown-item","data-page":t,onMouseDown:e=>{e.preventDefault(),a(t)}},e):r.default.createElement("li",{key:e,role:"presentation",className:"dropdown-item"},r.default.createElement("a",{href:"#",tabIndex:-1,role:"menuitem","data-page":t,onMouseDown:e=>{e.preventDefault(),a(t)}},e))},885(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442));t.default=e=>({page:t,sizePerPage:a,...n})=>r.default.createElement(e,{...n,currPage:t,currSizePerPage:a})},973(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(7)),i=n(a(442)),o=n(a(971)),s=a(933),l=i.default.createContext(null);class u extends i.default.Component{currPage;currSizePerPage;dataChangeListener;dataSize;remoteEmitter;constructor(e){let t,a;super(e),this.handleChangePage=this.handleChangePage.bind(this),this.handleDataSizeChange=this.handleDataSizeChange.bind(this),this.handleChangeSizePerPage=this.handleChangeSizePerPage.bind(this);const n=e.pagination.options,i=n.sizePerPageList||o.default.SIZE_PER_PAGE_LIST;t=void 0!==n.page?n.page:void 0!==n.pageStartIndex?n.pageStartIndex:o.default.PAGE_START_INDEX,a=void 0!==n.sizePerPage?n.sizePerPage:"object"==typeof i[0]?i[0].value:i[0],this.currPage=t,this.dataSize=n.totalSize,this.currSizePerPage=a,this.dataChangeListener=new r.default,this.dataChangeListener.on("filterChanged",this.handleDataSizeChange)}getPaginationProps=()=>{const{bootstrap4:e,tableId:t}=this.props,a=this.props.pagination.options,{currPage:n,currSizePerPage:r}=this;let i;i=this.isRemotePagination()?a.totalSize:this.dataSize;const s=void 0===a.withFirstAndLast?o.default.With_FIRST_AND_LAST:a.withFirstAndLast,l=void 0===a.alwaysShowAllBtns?o.default.SHOW_ALL_PAGE_BTNS:a.alwaysShowAllBtns,u=void 0===a.hideSizePerPage?o.default.HIDE_SIZE_PER_PAGE:a.hideSizePerPage,d=void 0===a.hidePageListOnlyOnePage?o.default.HIDE_PAGE_LIST_ONLY_ONE_PAGE:a.hidePageListOnlyOnePage,p=void 0===a.pageStartIndex?o.default.PAGE_START_INDEX:a.pageStartIndex;return{...a,bootstrap4:e,tableId:t,page:n,sizePerPage:r,pageStartIndex:p,hidePageListOnlyOnePage:d,hideSizePerPage:u,alwaysShowAllBtns:l,withFirstAndLast:s,dataSize:i,sizePerPageList:a.sizePerPageList||o.default.SIZE_PER_PAGE_LIST,paginationSize:a.paginationSize||o.default.PAGINATION_SIZE,showTotal:a.showTotal,pageListRenderer:a.pageListRenderer,pageButtonRenderer:a.pageButtonRenderer,sizePerPageRenderer:a.sizePerPageRenderer,paginationTotalRenderer:a.paginationTotalRenderer,sizePerPageOptionRenderer:a.sizePerPageOptionRenderer,firstPageText:a.firstPageText||o.default.FIRST_PAGE_TEXT,prePageText:a.prePageText||o.default.PRE_PAGE_TEXT,nextPageText:a.nextPageText||o.default.NEXT_PAGE_TEXT,lastPageText:a.lastPageText||o.default.LAST_PAGE_TEXT,prePageTitle:a.prePageTitle||o.default.PRE_PAGE_TITLE,nextPageTitle:a.nextPageTitle||o.default.NEXT_PAGE_TITLE,firstPageTitle:a.firstPageTitle||o.default.FIRST_PAGE_TITLE,lastPageTitle:a.lastPageTitle||o.default.LAST_PAGE_TITLE,onPageChange:this.handleChangePage,onSizePerPageChange:this.handleChangeSizePerPage}};setPaginationRemoteEmitter=e=>{this.remoteEmitter=e};getPaginationRemoteEmitter=()=>this.remoteEmitter||this.props.remoteEmitter;componentDidUpdate(e){const{custom:t}=e.pagination.options;(this.isRemotePagination()||t)&&(e.pagination.options.page,e.pagination.options.sizePerPage,e.pagination.options.totalSize)}isRemotePagination=()=>{const e={result:void 0};return this.remoteEmitter?.emit("isRemotePagination",e),e.result};handleDataSizeChange(e){const t=this.props.pagination.options,a=void 0===t.pageStartIndex?o.default.PAGE_START_INDEX:t.pageStartIndex;this.currPage=(0,s.alignPage)(e,this.dataSize,this.currPage,this.currSizePerPage,a),this.dataSize=e,this.forceUpdate()}handleChangePage(e){const{currSizePerPage:t}=this,a=this.props.pagination.options;a.onPageChange&&a.onPageChange(e,t),this.currPage=e,this.isRemotePagination()?this.getPaginationRemoteEmitter().emit("paginationChange",e,t):this.forceUpdate()}handleChangeSizePerPage(e,t){const a=this.props.pagination.options;a.onSizePerPageChange&&a.onSizePerPageChange(e,t),this.currPage=t,this.currSizePerPage=e,this.isRemotePagination()?this.getPaginationRemoteEmitter().emit("paginationChange",t,e):this.forceUpdate()}render(){const e=this.getPaginationProps(),t={...this.props.pagination,options:e};return i.default.createElement(l.Provider,{value:{paginationProps:e,paginationTableProps:{pagination:t,setPaginationRemoteEmitter:this.setPaginationRemoteEmitter,dataChangeListener:this.dataChangeListener}}},this.props.children)}}t.default=()=>({Provider:u,Consumer:l.Consumer})},442(t){"use strict";t.exports=e},942(e,t){var a;!function(){"use strict";var n={}.hasOwnProperty;function r(){for(var e="",t=0;t<arguments.length;t++){var a=arguments[t];a&&(e=o(e,i(a)))}return e}function i(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return r.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var a in e)n.call(e,a)&&e[a]&&(t=o(t,a));return t}function o(e,t){return t?e?e+" "+t:e+t:e}e.exports?(r.default=r,e.exports=r):void 0===(a=function(){return r}.apply(t,[]))||(e.exports=a)}()}},a={},function e(n){var r=a[n];if(void 0!==r)return r.exports;var i=a[n]={exports:{}};return t[n].call(i.exports,i,i.exports,e),i.exports}(987);var t,a});
3
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9kaXN0L3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3IubWluLmpzIiwibWFwcGluZ3MiOiI7Q0FBQSxTQUEyQ0EsRUFBTUMsR0FDMUIsaUJBQVpDLFNBQTBDLGlCQUFYQyxPQUN4Q0EsT0FBT0QsUUFBVUQsRUFBUUcsUUFBUSxVQUNSLG1CQUFYQyxRQUF5QkEsT0FBT0MsSUFDOUNELE9BQU8sQ0FBQyxTQUFVSixHQUNRLGlCQUFaQyxRQUNkQSxRQUF3QywrQkFBSUQsRUFBUUcsUUFBUSxVQUU1REosRUFBcUMsK0JBQUlDLEVBQVFELEVBQVksTUFDOUQsQ0FURCxDQVNHTyxLQUFPQyxJQUNWLE8scUJDYUEsSUFPSUMsRUFQQUMsRUFBdUIsaUJBQVpDLFFBQXVCQSxRQUFVLEtBQzVDQyxFQUFlRixHQUF3QixtQkFBWkEsRUFBRUcsTUFDN0JILEVBQUVHLE1BQ0YsU0FBc0JDLEVBQVFDLEVBQVVDLEdBQ3hDLE9BQU9DLFNBQVNDLFVBQVVMLE1BQU1NLEtBQUtMLEVBQVFDLEVBQVVDLEVBQ3pELEVBSUFQLEVBREVDLEdBQTBCLG1CQUFkQSxFQUFFVSxRQUNDVixFQUFFVSxRQUNWQyxPQUFPQyxzQkFDQyxTQUF3QlIsR0FDdkMsT0FBT08sT0FBT0Usb0JBQW9CVCxHQUMvQlUsT0FBT0gsT0FBT0Msc0JBQXNCUixHQUN6QyxFQUVpQixTQUF3QkEsR0FDdkMsT0FBT08sT0FBT0Usb0JBQW9CVCxFQUNwQyxFQU9GLElBQUlXLEVBQWNDLE9BQU9DLE9BQVMsU0FBcUJDLEdBQ3JELE9BQU9BLEdBQVVBLENBQ25CLEVBRUEsU0FBU0MsSUFDUEEsRUFBYUMsS0FBS1gsS0FBS1ksS0FDekIsQ0FDQTVCLEVBQU9ELFFBQVUyQixFQUNqQjFCLEVBQU9ELFFBQVE4QixLQXdZZixTQUFjQyxFQUFTQyxHQUNyQixPQUFPLElBQUlDLFFBQVEsU0FBVUMsRUFBU0MsR0FDcEMsU0FBU0MsRUFBY0MsR0FDckJOLEVB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USxFQUEyQixDQUFDLEVBR2hDLFNBQVNDLEVBQW9CQyxHQUU1QixJQUFJQyxFQUFlSCxFQUF5QkUsR0FDNUMsUUFBcUJsUixJQUFqQm1SLEVBQ0gsT0FBT0EsRUFBYW5VLFFBR3JCLElBQUlDLEVBQVMrVCxFQUF5QkUsR0FBWSxDQUdqRGxVLFFBQVMsQ0FBQyxHQU9YLE9BSEFvVSxFQUFvQkYsR0FBVWpULEtBQUtoQixFQUFPRCxRQUFTQyxFQUFRQSxFQUFPRCxRQUFTaVUsR0FHcEVoVSxFQUFPRCxPQUNmLENDbkIwQmlVLENBQW9CLEssTURGMUNEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL2luZGV4LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9jb25zdC50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9kYXRhLWNvbnRleHQudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3BhZ2UtYnV0dG9uLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9wYWdlLXJlc29sdmVyLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3BhZ2UudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvcGFnaW5hdGlvbi1oYW5kbGVyLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9wYWdpbmF0aW9uLWxpc3QtYWRhcHRlci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvcGFnaW5hdGlvbi1saXN0LXN0YW5kYWxvbmUudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3BhZ2luYXRpb24tbGlzdC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvcGFnaW5hdGlvbi10b3RhbC1hZGFwdGVyLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9wYWdpbmF0aW9uLXRvdGFsLXN0YW5kYWxvbmUudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3BhZ2luYXRpb24tdG90YWwudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3BhZ2luYXRpb24udHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3NpemUtcGVyLXBhZ2UtZHJvcGRvd24tYWRhcHRlci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvc2l6ZS1wZXItcGFnZS1kcm9wZG93bi1zdGFuZGFsb25lLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9zaXplLXBlci1wYWdlLWRyb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9zaXplLXBlci1wYWdlLW9wdGlvbi50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvc3RhbmRhbG9uZS1hZGFwdGVyLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9zdGF0ZS1jb250ZXh0LnRzeCIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgdW1kIHtcInJvb3RcIjpcIlJlYWN0XCIsXCJjb21tb25qczJcIjpcInJlYWN0XCIsXCJjb21tb25qc1wiOlwicmVhY3RcIixcImFtZFwiOlwicmVhY3RcIn0iLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovLy93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wicmVhY3RcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiUmVhY3RCb290c3RyYXBUYWJsZU5nUGFnaW5hdG9yXCJdID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlJlYWN0Qm9vdHN0cmFwVGFibGVOZ1BhZ2luYXRvclwiXSA9IGZhY3Rvcnkocm9vdFtcIlJlYWN0XCJdKTtcbn0pKHNlbGYsIChfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180NDJfXykgPT4ge1xucmV0dXJuICIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnID8gUmVmbGVjdCA6IG51bGxcbnZhciBSZWZsZWN0QXBwbHkgPSBSICYmIHR5cGVvZiBSLmFwcGx5ID09PSAnZnVuY3Rpb24nXG4gID8gUi5hcHBseVxuICA6IGZ1bmN0aW9uIFJlZmxlY3RBcHBseSh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKSB7XG4gICAgcmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKHRhcmdldCwgcmVjZWl2ZXIsIGFyZ3MpO1xuICB9XG5cbnZhciBSZWZsZWN0T3duS2V5c1xuaWYgKFIgJiYgdHlwZW9mIFIub3duS2V5cyA9PT0gJ2Z1bmN0aW9uJykge1xuICBSZWZsZWN0T3duS2V5cyA9IFIub3duS2V5c1xufSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gIFJlZmxlY3RPd25LZXlzID0gZnVuY3Rpb24gUmVmbGVjdE93bktleXModGFyZ2V0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldClcbiAgICAgIC5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0YXJnZXQpKTtcbiAgfTtcbn0gZWxzZSB7XG4gIFJlZmxlY3RPd25LZXlzID0gZnVuY3Rpb24gUmVmbGVjdE93bktleXModGFyZ2V0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIFByb2Nlc3NFbWl0V2FybmluZyh3YXJuaW5nKSB7XG4gIGlmIChjb25zb2xlICYmIGNvbnNvbGUud2FybikgY29uc29sZS53YXJuKHdhcm5pbmcpO1xufVxuXG52YXIgTnVtYmVySXNOYU4gPSBOdW1iZXIuaXNOYU4gfHwgZnVuY3Rpb24gTnVtYmVySXNOYU4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICBFdmVudEVtaXR0ZXIuaW5pdC5jYWxsKHRoaXMpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XG5tb2R1bGUuZXhwb3J0cy5vbmNlID0gb25jZTtcblxuLy8gQmFja3dhcmRzLWNvbXBhdCB3aXRoIG5vZGUgMC4xMC54XG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHNDb3VudCA9IDA7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnMgPSB1bmRlZmluZWQ7XG5cbi8vIEJ5IGRlZmF1bHQgRXZlbnRFbWl0dGVycyB3aWxsIHByaW50IGEgd2FybmluZyBpZiBtb3JlIHRoYW4gMTAgbGlzdGVuZXJzIGFyZVxuLy8gYWRkZWQgdG8gaXQuIFRoaXMgaXMgYSB1c2VmdWwgZGVmYXVsdCB3aGljaCBoZWxwcyBmaW5kaW5nIG1lbW9yeSBsZWFrcy5cbnZhciBkZWZhdWx0TWF4TGlzdGVuZXJzID0gMTA7XG5cbmZ1bmN0aW9uIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImxpc3RlbmVyXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uLiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2YgbGlzdGVuZXIpO1xuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudEVtaXR0ZXIsICdkZWZhdWx0TWF4TGlzdGVuZXJzJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkZWZhdWx0TWF4TGlzdGVuZXJzO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uKGFyZykge1xuICAgIGlmICh0eXBlb2YgYXJnICE9PSAnbnVtYmVyJyB8fCBhcmcgPCAwIHx8IE51bWJlcklzTmFOKGFyZykpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJkZWZhdWx0TWF4TGlzdGVuZXJzXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIGFyZyArICcuJyk7XG4gICAgfVxuICAgIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSBhcmc7XG4gIH1cbn0pO1xuXG5FdmVudEVtaXR0ZXIuaW5pdCA9IGZ1bmN0aW9uKCkge1xuXG4gIGlmICh0aGlzLl9ldmVudHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5fZXZlbnRzID09PSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2ZW50cykge1xuICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICB9XG5cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gdGhpcy5fbWF4TGlzdGVuZXJzIHx8IHVuZGVmaW5lZDtcbn07XG5cbi8vIE9idmlvdXNseSBub3QgYWxsIEVtaXR0ZXJzIHNob3VsZCBiZSBsaW1pdGVkIHRvIDEwLiBUaGlzIGZ1bmN0aW9uIGFsbG93c1xuLy8gdGhhdCB0byBiZSBpbmNyZWFzZWQuIFNldCB0byB6ZXJvIGZvciB1bmxpbWl0ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycyhuKSB7XG4gIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicgfHwgbiA8IDAgfHwgTnVtYmVySXNOYU4obikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiblwiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBuICsgJy4nKTtcbiAgfVxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSBuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIF9nZXRNYXhMaXN0ZW5lcnModGhhdCkge1xuICBpZiAodGhhdC5fbWF4TGlzdGVuZXJzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIEV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzO1xuICByZXR1cm4gdGhhdC5fbWF4TGlzdGVuZXJzO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmdldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIGdldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIF9nZXRNYXhMaXN0ZW5lcnModGhpcyk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KHR5cGUpIHtcbiAgdmFyIGFyZ3MgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICB2YXIgZG9FcnJvciA9ICh0eXBlID09PSAnZXJyb3InKTtcblxuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpXG4gICAgZG9FcnJvciA9IChkb0Vycm9yICYmIGV2ZW50cy5lcnJvciA9PT0gdW5kZWZpbmVkKTtcbiAgZWxzZSBpZiAoIWRvRXJyb3IpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIElmIHRoZXJlIGlzIG5vICdlcnJvcicgZXZlbnQgbGlzdGVuZXIgdGhlbiB0aHJvdy5cbiAgaWYgKGRvRXJyb3IpIHtcbiAgICB2YXIgZXI7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMClcbiAgICAgIGVyID0gYXJnc1swXTtcbiAgICBpZiAoZXIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgLy8gTm90ZTogVGhlIGNvbW1lbnRzIG9uIHRoZSBgdGhyb3dgIGxpbmVzIGFyZSBpbnRlbnRpb25hbCwgdGhleSBzaG93XG4gICAgICAvLyB1cCBpbiBOb2RlJ3Mgb3V0cHV0IGlmIHRoaXMgcmVzdWx0cyBpbiBhbiB1bmhhbmRsZWQgZXhjZXB0aW9uLlxuICAgICAgdGhyb3cgZXI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gICAgfVxuICAgIC8vIEF0IGxlYXN0IGdpdmUgc29tZSBraW5kIG9mIGNvbnRleHQgdG8gdGhlIHVzZXJcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdVbmhhbmRsZWQgZXJyb3IuJyArIChlciA/ICcgKCcgKyBlci5tZXNzYWdlICsgJyknIDogJycpKTtcbiAgICBlcnIuY29udGV4dCA9IGVyO1xuICAgIHRocm93IGVycjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgfVxuXG4gIHZhciBoYW5kbGVyID0gZXZlbnRzW3R5cGVdO1xuXG4gIGlmIChoYW5kbGVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIFJlZmxlY3RBcHBseShoYW5kbGVyLCB0aGlzLCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuID0gaGFuZGxlci5sZW5ndGg7XG4gICAgdmFyIGxpc3RlbmVycyA9IGFycmF5Q2xvbmUoaGFuZGxlciwgbGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKVxuICAgICAgUmVmbGVjdEFwcGx5KGxpc3RlbmVyc1tpXSwgdGhpcywgYXJncyk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmZ1bmN0aW9uIF9hZGRMaXN0ZW5lcih0YXJnZXQsIHR5cGUsIGxpc3RlbmVyLCBwcmVwZW5kKSB7XG4gIHZhciBtO1xuICB2YXIgZXZlbnRzO1xuICB2YXIgZXhpc3Rpbmc7XG5cbiAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG5cbiAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZCkge1xuICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0YXJnZXQuX2V2ZW50c0NvdW50ID0gMDtcbiAgfSBlbHNlIHtcbiAgICAvLyBUbyBhdm9pZCByZWN1cnNpb24gaW4gdGhlIGNhc2UgdGhhdCB0eXBlID09PSBcIm5ld0xpc3RlbmVyXCIhIEJlZm9yZVxuICAgIC8vIGFkZGluZyBpdCB0byB0aGUgbGlzdGVuZXJzLCBmaXJzdCBlbWl0IFwibmV3TGlzdGVuZXJcIi5cbiAgICBpZiAoZXZlbnRzLm5ld0xpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRhcmdldC5lbWl0KCduZXdMaXN0ZW5lcicsIHR5cGUsXG4gICAgICAgICAgICAgICAgICBsaXN0ZW5lci5saXN0ZW5lciA/IGxpc3RlbmVyLmxpc3RlbmVyIDogbGlzdGVuZXIpO1xuXG4gICAgICAvLyBSZS1hc3NpZ24gYGV2ZW50c2AgYmVjYXVzZSBhIG5ld0xpc3RlbmVyIGhhbmRsZXIgY291bGQgaGF2ZSBjYXVzZWQgdGhlXG4gICAgICAvLyB0aGlzLl9ldmVudHMgdG8gYmUgYXNzaWduZWQgdG8gYSBuZXcgb2JqZWN0XG4gICAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgICB9XG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV07XG4gIH1cblxuICBpZiAoZXhpc3RpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9wdGltaXplIHRoZSBjYXNlIG9mIG9uZSBsaXN0ZW5lci4gRG9uJ3QgbmVlZCB0aGUgZXh0cmEgYXJyYXkgb2JqZWN0LlxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID0gbGlzdGVuZXI7XG4gICAgKyt0YXJnZXQuX2V2ZW50c0NvdW50O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgZXhpc3RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIEFkZGluZyB0aGUgc2Vjb25kIGVsZW1lbnQsIG5lZWQgdG8gY2hhbmdlIHRvIGFycmF5LlxuICAgICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPVxuICAgICAgICBwcmVwZW5kID8gW2xpc3RlbmVyLCBleGlzdGluZ10gOiBbZXhpc3RpbmcsIGxpc3RlbmVyXTtcbiAgICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZ290IGFuIGFycmF5LCBqdXN0IGFwcGVuZC5cbiAgICB9IGVsc2UgaWYgKHByZXBlbmQpIHtcbiAgICAgIGV4aXN0aW5nLnVuc2hpZnQobGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleGlzdGluZy5wdXNoKGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgbGlzdGVuZXIgbGVha1xuICAgIG0gPSBfZ2V0TWF4TGlzdGVuZXJzKHRhcmdldCk7XG4gICAgaWYgKG0gPiAwICYmIGV4aXN0aW5nLmxlbmd0aCA+IG0gJiYgIWV4aXN0aW5nLndhcm5lZCkge1xuICAgICAgZXhpc3Rpbmcud2FybmVkID0gdHJ1ZTtcbiAgICAgIC8vIE5vIGVycm9yIGNvZGUgZm9yIHRoaXMgc2luY2UgaXQgaXMgYSBXYXJuaW5nXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgIHZhciB3ID0gbmV3IEVycm9yKCdQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5sZW5ndGggKyAnICcgKyBTdHJpbmcodHlwZSkgKyAnIGxpc3RlbmVycyAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FkZGVkLiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luY3JlYXNlIGxpbWl0Jyk7XG4gICAgICB3Lm5hbWUgPSAnTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nJztcbiAgICAgIHcuZW1pdHRlciA9IHRhcmdldDtcbiAgICAgIHcudHlwZSA9IHR5cGU7XG4gICAgICB3LmNvdW50ID0gZXhpc3RpbmcubGVuZ3RoO1xuICAgICAgUHJvY2Vzc0VtaXRXYXJuaW5nKHcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiBhZGRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5wcmVwZW5kTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHByZXBlbmRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgdHJ1ZSk7XG4gICAgfTtcblxuZnVuY3Rpb24gb25jZVdyYXBwZXIoKSB7XG4gIGlmICghdGhpcy5maXJlZCkge1xuICAgIHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSwgdGhpcy53cmFwRm4pO1xuICAgIHRoaXMuZmlyZWQgPSB0cnVlO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk7XG4gICAgcmV0dXJuIHRoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsIGFyZ3VtZW50cyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX29uY2VXcmFwKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIpIHtcbiAgdmFyIHN0YXRlID0geyBmaXJlZDogZmFsc2UsIHdyYXBGbjogdW5kZWZpbmVkLCB0YXJnZXQ6IHRhcmdldCwgdHlwZTogdHlwZSwgbGlzdGVuZXI6IGxpc3RlbmVyIH07XG4gIHZhciB3cmFwcGVkID0gb25jZVdyYXBwZXIuYmluZChzdGF0ZSk7XG4gIHdyYXBwZWQubGlzdGVuZXIgPSBsaXN0ZW5lcjtcbiAgc3RhdGUud3JhcEZuID0gd3JhcHBlZDtcbiAgcmV0dXJuIHdyYXBwZWQ7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UodHlwZSwgbGlzdGVuZXIpIHtcbiAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gIHRoaXMub24odHlwZSwgX29uY2VXcmFwKHRoaXMsIHR5cGUsIGxpc3RlbmVyKSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kT25jZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgIHRoaXMucHJlcGVuZExpc3RlbmVyKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuLy8gRW1pdHMgYSAncmVtb3ZlTGlzdGVuZXInIGV2ZW50IGlmIGFuZCBvbmx5IGlmIHRoZSBsaXN0ZW5lciB3YXMgcmVtb3ZlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICB2YXIgbGlzdCwgZXZlbnRzLCBwb3NpdGlvbiwgaSwgb3JpZ2luYWxMaXN0ZW5lcjtcblxuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGxpc3QgPSBldmVudHNbdHlwZV07XG4gICAgICBpZiAobGlzdCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgaWYgKGxpc3QgPT09IGxpc3RlbmVyIHx8IGxpc3QubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lcilcbiAgICAgICAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBsaXN0Lmxpc3RlbmVyIHx8IGxpc3RlbmVyKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbGlzdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwb3NpdGlvbiA9IC0xO1xuXG4gICAgICAgIGZvciAoaSA9IGxpc3QubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBpZiAobGlzdFtpXSA9PT0gbGlzdGVuZXIgfHwgbGlzdFtpXS5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsTGlzdGVuZXIgPSBsaXN0W2ldLmxpc3RlbmVyO1xuICAgICAgICAgICAgcG9zaXRpb24gPSBpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uIDwgMClcbiAgICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgICBpZiAocG9zaXRpb24gPT09IDApXG4gICAgICAgICAgbGlzdC5zaGlmdCgpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBzcGxpY2VPbmUobGlzdCwgcG9zaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxpc3QubGVuZ3RoID09PSAxKVxuICAgICAgICAgIGV2ZW50c1t0eXBlXSA9IGxpc3RbMF07XG5cbiAgICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBvcmlnaW5hbExpc3RlbmVyIHx8IGxpc3RlbmVyKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9XG4gICAgZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKHR5cGUpIHtcbiAgICAgIHZhciBsaXN0ZW5lcnMsIGV2ZW50cywgaTtcblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgLy8gbm90IGxpc3RlbmluZyBmb3IgcmVtb3ZlTGlzdGVuZXIsIG5vIG5lZWQgdG8gZW1pdFxuICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnRzW3R5cGVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgLy8gZW1pdCByZW1vdmVMaXN0ZW5lciBmb3IgYWxsIGxpc3RlbmVycyBvbiBhbGwgZXZlbnRzXG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGV2ZW50cyk7XG4gICAgICAgIHZhciBrZXk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICBpZiAoa2V5ID09PSAncmVtb3ZlTGlzdGVuZXInKSBjb250aW51ZTtcbiAgICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdyZW1vdmVMaXN0ZW5lcicpO1xuICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICBsaXN0ZW5lcnMgPSBldmVudHNbdHlwZV07XG5cbiAgICAgIGlmICh0eXBlb2YgbGlzdGVuZXJzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzKTtcbiAgICAgIH0gZWxzZSBpZiAobGlzdGVuZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gTElGTyBvcmRlclxuICAgICAgICBmb3IgKGkgPSBsaXN0ZW5lcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuZnVuY3Rpb24gX2xpc3RlbmVycyh0YXJnZXQsIHR5cGUsIHVud3JhcCkge1xuICB2YXIgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG5cbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcbiAgaWYgKGV2bGlzdGVuZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKVxuICAgIHJldHVybiB1bndyYXAgPyBbZXZsaXN0ZW5lci5saXN0ZW5lciB8fCBldmxpc3RlbmVyXSA6IFtldmxpc3RlbmVyXTtcblxuICByZXR1cm4gdW53cmFwID9cbiAgICB1bndyYXBMaXN0ZW5lcnMoZXZsaXN0ZW5lcikgOiBhcnJheUNsb25lKGV2bGlzdGVuZXIsIGV2bGlzdGVuZXIubGVuZ3RoKTtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCB0cnVlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmF3TGlzdGVuZXJzID0gZnVuY3Rpb24gcmF3TGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5saXN0ZW5lckNvdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJDb3VudCh0eXBlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbGlzdGVuZXJDb3VudC5jYWxsKGVtaXR0ZXIsIHR5cGUpO1xuICB9XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQgPSBsaXN0ZW5lckNvdW50O1xuZnVuY3Rpb24gbGlzdGVuZXJDb3VudCh0eXBlKSB7XG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG5cbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG5cbiAgICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSBpZiAoZXZsaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZXZsaXN0ZW5lci5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIDA7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZXZlbnROYW1lcyA9IGZ1bmN0aW9uIGV2ZW50TmFtZXMoKSB7XG4gIHJldHVybiB0aGlzLl9ldmVudHNDb3VudCA+IDAgPyBSZWZsZWN0T3duS2V5cyh0aGlzLl9ldmVudHMpIDogW107XG59O1xuXG5mdW5jdGlvbiBhcnJheUNsb25lKGFyciwgbikge1xuICB2YXIgY29weSA9IG5ldyBBcnJheShuKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpXG4gICAgY29weVtpXSA9IGFycltpXTtcbiAgcmV0dXJuIGNvcHk7XG59XG5cbmZ1bmN0aW9uIHNwbGljZU9uZShsaXN0LCBpbmRleCkge1xuICBmb3IgKDsgaW5kZXggKyAxIDwgbGlzdC5sZW5ndGg7IGluZGV4KyspXG4gICAgbGlzdFtpbmRleF0gPSBsaXN0W2luZGV4ICsgMV07XG4gIGxpc3QucG9wKCk7XG59XG5cbmZ1bmN0aW9uIHVud3JhcExpc3RlbmVycyhhcnIpIHtcbiAgdmFyIHJldCA9IG5ldyBBcnJheShhcnIubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXQubGVuZ3RoOyArK2kpIHtcbiAgICByZXRbaV0gPSBhcnJbaV0ubGlzdGVuZXIgfHwgYXJyW2ldO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIG9uY2UoZW1pdHRlciwgbmFtZSkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGZ1bmN0aW9uIGVycm9yTGlzdGVuZXIoZXJyKSB7XG4gICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKG5hbWUsIHJlc29sdmVyKTtcbiAgICAgIHJlamVjdChlcnIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc29sdmVyKCkge1xuICAgICAgaWYgKHR5cGVvZiBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgICByZXNvbHZlKFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCBuYW1lLCByZXNvbHZlciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIGlmIChuYW1lICE9PSAnZXJyb3InKSB7XG4gICAgICBhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlcihlbWl0dGVyLCBlcnJvckxpc3RlbmVyLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIoZW1pdHRlciwgaGFuZGxlciwgZmxhZ3MpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLm9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsICdlcnJvcicsIGhhbmRsZXIsIGZsYWdzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgbGlzdGVuZXIsIGZsYWdzKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChmbGFncy5vbmNlKSB7XG4gICAgICBlbWl0dGVyLm9uY2UobmFtZSwgbGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbWl0dGVyLm9uKG5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIEV2ZW50VGFyZ2V0IGRvZXMgbm90IGhhdmUgYGVycm9yYCBldmVudCBzZW1hbnRpY3MgbGlrZSBOb2RlXG4gICAgLy8gRXZlbnRFbWl0dGVycywgd2UgZG8gbm90IGxpc3RlbiBmb3IgYGVycm9yYCBldmVudHMgaGVyZS5cbiAgICBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIobmFtZSwgZnVuY3Rpb24gd3JhcExpc3RlbmVyKGFyZykge1xuICAgICAgLy8gSUUgZG9lcyBub3QgaGF2ZSBidWlsdGluIGB7IG9uY2U6IHRydWUgfWAgc3VwcG9ydCBzbyB3ZVxuICAgICAgLy8gaGF2ZSB0byBkbyBpdCBtYW51YWxseS5cbiAgICAgIGlmIChmbGFncy5vbmNlKSB7XG4gICAgICAgIGVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCB3cmFwTGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgbGlzdGVuZXIoYXJnKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJlbWl0dGVyXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEV2ZW50RW1pdHRlci4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGVtaXR0ZXIpO1xuICB9XG59XG4iLCJcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFBhZ2luYXRpb25PcHRpb25zIH0gZnJvbSBcInJlYWN0LWJvb3RzdHJhcC10YWJsZS1uZ1wiO1xuXG5pbXBvcnQgY3JlYXRlRGF0YUNvbnRleHQgZnJvbSBcIi4vc3JjL2RhdGEtY29udGV4dFwiO1xuaW1wb3J0IFBhZ2luYXRpb25MaXN0U3RhbmRhbG9uZSBmcm9tIFwiLi9zcmMvcGFnaW5hdGlvbi1saXN0LXN0YW5kYWxvbmVcIjtcbmltcG9ydCBQYWdpbmF0aW9uVG90YWxTdGFuZGFsb25lIGZyb20gXCIuL3NyYy9wYWdpbmF0aW9uLXRvdGFsLXN0YW5kYWxvbmVcIjtcbmltcG9ydCBTaXplUGVyUGFnZURyb3Bkb3duU3RhbmRhbG9uZSBmcm9tIFwiLi9zcmMvc2l6ZS1wZXItcGFnZS1kcm9wZG93bi1zdGFuZGFsb25lXCI7XG5pbXBvcnQgY3JlYXRlQmFzZUNvbnRleHQgZnJvbSBcIi4vc3JjL3N0YXRlLWNvbnRleHRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uQ3R4T3B0aW9ucyB7XG4gIG9wdGlvbnM/OiBQYWdpbmF0aW9uT3B0aW9ucyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uQ2hpbGRQcm9wcyBleHRlbmRzIFBhZ2luYXRpb25PcHRpb25zIHtcbiAgdGFibGVJZD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgYm9vdHN0cmFwND86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnaW5hdGlvblByb3ZpZGVyUHJvcHMge1xuICBwYWdpbmF0aW9uPzogUGFnaW5hdGlvbkN0eE9wdGlvbnMgfCB1bmRlZmluZWQ7XG4gIC8vIFRPRE9cbiAgLy8gY2hpbGRyZW46IChjaGlsZFByb3BzOiB7XG4gIC8vICAgcGFnaW5hdGlvblByb3BzOiBQYWdpbmF0aW9uQ2hpbGRQcm9wcztcbiAgLy8gICBwYWdpbmF0aW9uVGFibGVQcm9wczogQm9vdHN0cmFwVGFibGVQcm9wcztcbiAgLy8gfSkgPT4gUmVhY3QuUmVhY3RFbGVtZW50IHwgbnVsbDtcbiAgY2hpbGRyZW46IGFueTtcbiAgdGFibGVJZD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgYm9vdHN0cmFwND86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGJvb3RzdHJhcDU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICByZW1vdGVFbWl0dGVyOiBhbnk7XG4gIGRhdGE6IGFueVtdO1xuICBpc1JlbW90ZVBhZ2luYXRpb246IEZ1bmN0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb25EYXRhUHJvdmlkZXJQcm9wcyB7XG4gIGRhdGE6IGFueVtdO1xuICByZW1vdGVFbWl0dGVyOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpc1JlbW90ZVBhZ2luYXRpb246ICgpID0+IGJvb2xlYW47XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIHBhZ2luYXRpb246IHtcbiAgICBvcHRpb25zOiB7XG4gICAgICBjdXN0b20/OiBib29sZWFuO1xuICAgICAgcGFnZVN0YXJ0SW5kZXg/OiBudW1iZXI7XG4gICAgICBvblBhZ2VDaGFuZ2U6IChuZXdQYWdlOiBhbnksIGN1cnJTaXplUGVyUGFnZTogbnVtYmVyKSA9PiB2b2lkO1xuICAgIH07XG4gIH07XG4gIG9uRGF0YVNpemVDaGFuZ2U/OiAoZGF0YVNpemU6IHsgZGF0YVNpemU6IG51bWJlciB9KSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCAob3B0aW9ucyA9IHt9KSA9PiAoe1xuICBjcmVhdGVDb250ZXh0OiBjcmVhdGVEYXRhQ29udGV4dCxcbiAgb3B0aW9ucyxcbn0pO1xuXG5jb25zdCB7IFByb3ZpZGVyLCBDb25zdW1lciB9ID0gY3JlYXRlQmFzZUNvbnRleHQoKTtcblxuY29uc3QgQ3VzdG9taXphYmxlUHJvdmlkZXIgPSAocHJvcHM6IFBhZ2luYXRpb25Qcm92aWRlclByb3BzKSA9PiAoXG4gIDxQcm92aWRlciB7Li4ucHJvcHN9PlxuICAgIDxDb25zdW1lcj5cbiAgICAgIHsocGFnaW5hdGlvblByb3BzOiBhbnkpID0+IHByb3BzLmNoaWxkcmVuKHBhZ2luYXRpb25Qcm9wcyl9XG4gICAgPC9Db25zdW1lcj5cbiAgPC9Qcm92aWRlcj5cbik7XG5cblxuXG5leHBvcnQgY29uc3QgUGFnaW5hdGlvblByb3ZpZGVyID0gQ3VzdG9taXphYmxlUHJvdmlkZXI7XG5leHBvcnQge1xuICBQYWdpbmF0aW9uTGlzdFN0YW5kYWxvbmUsXG4gIFBhZ2luYXRpb25Ub3RhbFN0YW5kYWxvbmUsXG4gIFNpemVQZXJQYWdlRHJvcGRvd25TdGFuZGFsb25lLFxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgUEFHSU5BVElPTl9TSVpFOiA1LFxuICBQQUdFX1NUQVJUX0lOREVYOiAxLFxuICBXaXRoX0ZJUlNUX0FORF9MQVNUOiB0cnVlLFxuICBTSE9XX0FMTF9QQUdFX0JUTlM6IGZhbHNlLFxuICBTSE9XX1RPVEFMOiBmYWxzZSxcbiAgUEFHSU5BVElPTl9UT1RBTDogbnVsbCxcbiAgRklSU1RfUEFHRV9URVhUOiBcIjw8XCIsXG4gIFBSRV9QQUdFX1RFWFQ6IFwiPFwiLFxuICBORVhUX1BBR0VfVEVYVDogXCI+XCIsXG4gIExBU1RfUEFHRV9URVhUOiBcIj4+XCIsXG4gIE5FWFRfUEFHRV9USVRMRTogXCJuZXh0IHBhZ2VcIixcbiAgTEFTVF9QQUdFX1RJVExFOiBcImxhc3QgcGFnZVwiLFxuICBQUkVfUEFHRV9USVRMRTogXCJwcmV2aW91cyBwYWdlXCIsXG4gIEZJUlNUX1BBR0VfVElUTEU6IFwiZmlyc3QgcGFnZVwiLFxuICBTSVpFX1BFUl9QQUdFX0xJU1Q6IFsxMCwgMjUsIDMwLCA1MF0sXG4gIEhJREVfU0laRV9QRVJfUEFHRTogZmFsc2UsXG4gIEhJREVfUEFHRV9MSVNUX09OTFlfT05FX1BBR0U6IGZhbHNlLFxufTtcbiIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG4vKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgbm8tbG9uZWx5LWlmOiAwICovXG5cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgUGFnaW5hdGlvbkRhdGFQcm92aWRlclByb3BzIH0gZnJvbSBcIi4uXCI7XG5pbXBvcnQgQ29uc3QgZnJvbSBcIi4vY29uc3RcIjtcbmltcG9ydCB7IGFsaWduUGFnZSwgZ2V0QnlDdXJyUGFnZSB9IGZyb20gXCIuL3BhZ2VcIjtcbmltcG9ydCBQYWdpbmF0aW9uIGZyb20gXCIuL3BhZ2luYXRpb25cIjtcbmltcG9ydCBjcmVhdGVCYXNlQ29udGV4dCBmcm9tIFwiLi9zdGF0ZS1jb250ZXh0XCI7XG5cbmNvbnN0IHsgUHJvdmlkZXIgfSA9IGNyZWF0ZUJhc2VDb250ZXh0KCk7XG5cbmNvbnN0IFBhZ2luYXRpb25EYXRhQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8YW55PihudWxsKTtcblxuY2xhc3MgUGFnaW5hdGlvbkRhdGFQcm92aWRlciBleHRlbmRzIFByb3ZpZGVyIHtcblxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZShuZXh0UHJvcHM6IFBhZ2luYXRpb25EYXRhUHJvdmlkZXJQcm9wcykge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShuZXh0UHJvcHMpO1xuICAgIGNvbnN0IHsgY3VyclNpemVQZXJQYWdlIH0gPSB0aGlzO1xuICAgIGNvbnN0IHsgY3VzdG9tLCBvblBhZ2VDaGFuZ2UgfSA9IG5leHRQcm9wcy5wYWdpbmF0aW9uLm9wdGlvbnM7XG5cbiAgICBjb25zdCBwYWdlU3RhcnRJbmRleCA9XG4gICAgICB0eXBlb2YgbmV4dFByb3BzLnBhZ2luYXRpb24ub3B0aW9ucy5wYWdlU3RhcnRJbmRleCAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IG5leHRQcm9wcy5wYWdpbmF0aW9uLm9wdGlvbnMucGFnZVN0YXJ0SW5kZXhcbiAgICAgICAgOiBDb25zdC5QQUdFX1NUQVJUX0lOREVYO1xuXG4gICAgLy8gdXNlciBzaG91bGQgYWxpZ24gdGhlIHBhZ2Ugd2hlbiB0aGUgcGFnZSBpcyBub3QgZml0IHRvIHRoZSBkYXRhIHNpemUgd2hlbiByZW1vdGUgZW5hYmxlXG4gICAgaWYgKCF0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbigpICYmICFjdXN0b20pIHtcbiAgICAgIGNvbnN0IG5ld1BhZ2UgPSBhbGlnblBhZ2UoXG4gICAgICAgIG5leHRQcm9wcy5kYXRhLmxlbmd0aCxcbiAgICAgICAgdGhpcy5wcm9wcy5kYXRhLmxlbmd0aCxcbiAgICAgICAgdGhpcy5jdXJyUGFnZSxcbiAgICAgICAgY3VyclNpemVQZXJQYWdlLFxuICAgICAgICBwYWdlU3RhcnRJbmRleFxuICAgICAgKTtcblxuICAgICAgaWYgKHRoaXMuY3VyclBhZ2UgIT09IG5ld1BhZ2UpIHtcbiAgICAgICAgaWYgKG9uUGFnZUNoYW5nZSkge1xuICAgICAgICAgIG9uUGFnZUNoYW5nZShuZXdQYWdlLCBjdXJyU2l6ZVBlclBhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VyclBhZ2UgPSBuZXdQYWdlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBuZXh0UHJvcHMub25EYXRhU2l6ZUNoYW5nZSAmJlxuICAgICAgbmV4dFByb3BzLmRhdGEubGVuZ3RoICE9PSB0aGlzLnByb3BzLmRhdGEubGVuZ3RoXG4gICAgKSB7XG4gICAgICBuZXh0UHJvcHMub25EYXRhU2l6ZUNoYW5nZSh7IGRhdGFTaXplOiB0aGlzLnByb3BzLmRhdGEubGVuZ3RoIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlzUmVtb3RlUGFnaW5hdGlvbiA9ICgpID0+IHRoaXMucHJvcHMuaXNSZW1vdGVQYWdpbmF0aW9uKCk7XG5cbiAgcmVuZGVyRGVmYXVsdFBhZ2luYXRpb24gPSAoKSA9PiB7XG4gICAgaWYgKCF0aGlzLnByb3BzLnBhZ2luYXRpb24hLm9wdGlvbnMhLmN1c3RvbSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBwYWdlOiBjdXJyUGFnZSxcbiAgICAgICAgc2l6ZVBlclBhZ2U6IGN1cnJTaXplUGVyUGFnZSxcbiAgICAgICAgZGF0YVNpemUsXG4gICAgICAgIC4uLnJlc3RcbiAgICAgIH0gPSB0aGlzLmdldFBhZ2luYXRpb25Qcm9wcygpO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFBhZ2luYXRpb25cbiAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICBrZXk9XCJwYWdpbmF0aW9uXCJcbiAgICAgICAgICBkYXRhU2l6ZT17ZGF0YVNpemUgfHwgdGhpcy5wcm9wcy5kYXRhLmxlbmd0aH1cbiAgICAgICAgICBjdXJyUGFnZT17Y3VyclBhZ2V9XG4gICAgICAgICAgY3VyclNpemVQZXJQYWdlPXtjdXJyU2l6ZVBlclBhZ2V9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMucHJvcHMucGFnaW5hdGlvbiEub3B0aW9ucyE7XG4gICAgY29uc3QgY3VyclNpemVQZXJQYWdlID0gb3B0aW9ucy5zaXplUGVyUGFnZSA/PyB0aGlzLmN1cnJTaXplUGVyUGFnZTtcbiAgICBjb25zdCBwYWdlU3RhcnRJbmRleCA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucy5wYWdlU3RhcnRJbmRleCA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IENvbnN0LlBBR0VfU1RBUlRfSU5ERVhcbiAgICAgICAgOiBvcHRpb25zLnBhZ2VTdGFydEluZGV4O1xuXG4gICAgLy8gd29ya2Fyb3VuZCBhbiBpc3N1ZSB3aXRoIGN1cnJQYWdlIGlzIG5vdCAxLCBidXQgZGF0YSBzaXplIGlzIGxlc3MgdGhhbiBjdXJyU2l6ZVBlclBhZ2VcbiAgICAvLyB3aGVuIFNlYXJjaEJhciBpbnB1dCBjaGFuZ2VkLCBjb21wb25lbnREaWRVcGRhdGUgaW4gdGhlIFNBTUUgVG9vbGtpdCB1cGRhdGVkIChzZWFyY2hpbmcgdGhlIGRhdGEpXG4gICAgLy8gc2Vjb25kbHkgYWZ0ZXIgY29tcG9uZW50RGlkVXBkYXRlIChjYWxjdWxhdGluZyBjdXJyUGFnZSkgaW4gdGhpcyBwYWNrYWdlIHRyaWdnZXJlZCBhdCBmaXJzdFxuICAgIGxldCB7IGRhdGEgfSA9IHRoaXMucHJvcHM7XG4gICAgbGV0IGN1cnJQYWdlID0gb3B0aW9ucy5wYWdlID8/IHRoaXMuY3VyclBhZ2U7XG5cbiAgICBpZiAoIXRoaXMuaXNSZW1vdGVQYWdpbmF0aW9uKCkgJiYgZGF0YS5sZW5ndGggPD0gKGN1cnJQYWdlIC0gMSkgKiBjdXJyU2l6ZVBlclBhZ2UpIHtcbiAgICAgIGNvbnN0IHRvdGFsUGFnZXMgPSBNYXRoLmZsb29yKGRhdGEubGVuZ3RoIC8gY3VyclNpemVQZXJQYWdlKSArIDE7XG4gICAgICBjdXJyUGFnZSA9IGN1cnJQYWdlID4gdG90YWxQYWdlcyA/IHRvdGFsUGFnZXMgOiBjdXJyUGFnZTtcbiAgICAgIHRoaXMuY3VyclBhZ2UgPSBjdXJyUGFnZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1JlbW90ZVBhZ2luYXRpb24oKSkge1xuICAgICAgdGhpcy5jdXJyUGFnZSA9IGN1cnJQYWdlO1xuICAgIH1cblxuICAgIGRhdGEgPSB0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbigpXG4gICAgICA/IGRhdGFcbiAgICAgIDogZ2V0QnlDdXJyUGFnZShkYXRhLCBjdXJyUGFnZSwgY3VyclNpemVQZXJQYWdlLCBwYWdlU3RhcnRJbmRleCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFBhZ2luYXRpb25EYXRhQ29udGV4dC5Qcm92aWRlclxuICAgICAgICB2YWx1ZT17eyBkYXRhLCBzZXRSZW1vdGVFbWl0dGVyOiB0aGlzLnNldFBhZ2luYXRpb25SZW1vdGVFbWl0dGVyIH19XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgICB7dGhpcy5yZW5kZXJEZWZhdWx0UGFnaW5hdGlvbigpfVxuICAgICAgPC9QYWdpbmF0aW9uRGF0YUNvbnRleHQuUHJvdmlkZXI+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiAoe1xuICBQcm92aWRlcjogUGFnaW5hdGlvbkRhdGFQcm92aWRlcixcbiAgQ29uc3VtZXI6IFBhZ2luYXRpb25EYXRhQ29udGV4dC5Db25zdW1lcixcbn0pO1xuIiwiLyogZXNsaW50IHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wczogMCAqL1xuaW1wb3J0IGNzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmludGVyZmFjZSBQYWdlQnV0dG9uUHJvcHMge1xuICBvblBhZ2VDaGFuZ2U6IChwYWdlOiBhbnkpID0+IHZvaWQ7XG4gIHBhZ2U6IFJlYWN0LlJlYWN0Tm9kZSB8IG51bWJlciB8IHN0cmluZztcbiAgYWN0aXZlOiBib29sZWFuO1xuICBkaXNhYmxlZDogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcbn1cblxuY2xhc3MgUGFnZUJ1dHRvbiBleHRlbmRzIENvbXBvbmVudDxQYWdlQnV0dG9uUHJvcHM+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZUNsaWNrID0gdGhpcy5oYW5kbGVDbGljay5iaW5kKHRoaXMpO1xuICB9XG5cbiAgaGFuZGxlQ2xpY2soZTogYW55KSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMucHJvcHMub25QYWdlQ2hhbmdlKHRoaXMucHJvcHMucGFnZSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBwYWdlLCB0aXRsZSwgYWN0aXZlLCBkaXNhYmxlZCwgY2xhc3NOYW1lIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGNsYXNzZXMgPSBjcyhcbiAgICAgIHtcbiAgICAgICAgYWN0aXZlLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgXCJwYWdlLWl0ZW1cIjogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBjbGFzc05hbWVcbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxsaSBjbGFzc05hbWU9e2NsYXNzZXN9IHRpdGxlPXt0aXRsZX0+XG4gICAgICAgIDxhIGhyZWY9XCIjXCIgb25DbGljaz17dGhpcy5oYW5kbGVDbGlja30gY2xhc3NOYW1lPVwicGFnZS1saW5rXCI+XG4gICAgICAgICAge3BhZ2V9XG4gICAgICAgIDwvYT5cbiAgICAgIDwvbGk+XG4gICAgKTtcbiAgfVxufVxuXG5cblxuZXhwb3J0IGRlZmF1bHQgUGFnZUJ1dHRvbjtcbiIsIi8qIGVzbGludCBuby1taXhlZC1vcGVyYXRvcnM6IDAgKi9cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBDb25zdCBmcm9tIFwiLi9jb25zdFwiO1xuXG5leHBvcnQgZGVmYXVsdCAoRXh0ZW5kQmFzZTogYW55KSA9PlxuICBjbGFzcyBQYWdlUmVzb2x2ZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8dHlwZW9mIEV4dGVuZEJhc2U+IHtcbiAgICBiYWNrVG9QcmV2UGFnZSgpIHtcbiAgICAgIGNvbnN0IHsgY3VyclBhZ2UsIHBhZ2VTdGFydEluZGV4IH0gPSB0aGlzLnByb3BzO1xuICAgICAgcmV0dXJuIGN1cnJQYWdlIC0gMSA8IHBhZ2VTdGFydEluZGV4ID8gcGFnZVN0YXJ0SW5kZXggOiBjdXJyUGFnZSAtIDE7XG4gICAgfVxuXG4gICAgaW5pdGlhbFN0YXRlKCkge1xuICAgICAgY29uc3QgdG90YWxQYWdlcyA9IHRoaXMuY2FsY3VsYXRlVG90YWxQYWdlKCk7XG4gICAgICBjb25zdCBsYXN0UGFnZSA9IHRoaXMuY2FsY3VsYXRlTGFzdFBhZ2UodG90YWxQYWdlcyk7XG4gICAgICByZXR1cm4geyB0b3RhbFBhZ2VzLCBsYXN0UGFnZSB9O1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZVRvdGFsUGFnZShcbiAgICAgIHNpemVQZXJQYWdlID0gdGhpcy5wcm9wcy5jdXJyU2l6ZVBlclBhZ2UsXG4gICAgICBkYXRhU2l6ZSA9IHRoaXMucHJvcHMuZGF0YVNpemVcbiAgICApIHtcbiAgICAgIHJldHVybiBNYXRoLmNlaWwoZGF0YVNpemUgLyBzaXplUGVyUGFnZSk7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlTGFzdFBhZ2UodG90YWxQYWdlczogYW55KSB7XG4gICAgICBjb25zdCB7IHBhZ2VTdGFydEluZGV4IH0gPSB0aGlzLnByb3BzO1xuICAgICAgcmV0dXJuIHBhZ2VTdGFydEluZGV4ICsgdG90YWxQYWdlcyAtIDE7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlRnJvbVRvKCkge1xuICAgICAgY29uc3QgeyBkYXRhU2l6ZSwgY3VyclBhZ2UsIGN1cnJTaXplUGVyUGFnZSwgcGFnZVN0YXJ0SW5kZXggfSA9XG4gICAgICAgIHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBvZmZzZXQgPSBNYXRoLmFicyhDb25zdC5QQUdFX1NUQVJUX0lOREVYIC0gcGFnZVN0YXJ0SW5kZXgpO1xuXG4gICAgICBsZXQgZnJvbSA9IChjdXJyUGFnZSAtIHBhZ2VTdGFydEluZGV4KSAqIGN1cnJTaXplUGVyUGFnZTtcbiAgICAgIGZyb20gPSBkYXRhU2l6ZSA9PT0gMCA/IDAgOiBmcm9tICsgMTtcbiAgICAgIGxldCB0byA9IE1hdGgubWluKGN1cnJTaXplUGVyUGFnZSAqIChjdXJyUGFnZSArIG9mZnNldCksIGRhdGFTaXplKTtcbiAgICAgIGlmICh0byA+IGRhdGFTaXplKSB0byA9IGRhdGFTaXplO1xuXG4gICAgICByZXR1cm4gW2Zyb20sIHRvXTtcbiAgICB9XG5cbiAgICBjYWxjdWxhdGVQYWdlcyh0b3RhbFBhZ2VzOiBhbnksIGxhc3RQYWdlOiBhbnkpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY3VyclBhZ2UsXG4gICAgICAgIHBhZ2luYXRpb25TaXplLFxuICAgICAgICBwYWdlU3RhcnRJbmRleCxcbiAgICAgICAgd2l0aEZpcnN0QW5kTGFzdCxcbiAgICAgICAgZmlyc3RQYWdlVGV4dCxcbiAgICAgICAgcHJlUGFnZVRleHQsXG4gICAgICAgIG5leHRQYWdlVGV4dCxcbiAgICAgICAgbGFzdFBhZ2VUZXh0LFxuICAgICAgICBhbHdheXNTaG93QWxsQnRucyxcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBsZXQgcGFnZXM6IGFueSA9IFtdO1xuICAgICAgbGV0IGVuZFBhZ2UgPSB0b3RhbFBhZ2VzO1xuICAgICAgaWYgKGVuZFBhZ2UgPD0gMCkgcmV0dXJuIFtdO1xuXG4gICAgICBsZXQgc3RhcnRQYWdlID0gTWF0aC5tYXgoXG4gICAgICAgIGN1cnJQYWdlIC0gTWF0aC5mbG9vcihwYWdpbmF0aW9uU2l6ZSAvIDIpLFxuICAgICAgICBwYWdlU3RhcnRJbmRleFxuICAgICAgKTtcbiAgICAgIGVuZFBhZ2UgPSBzdGFydFBhZ2UgKyBwYWdpbmF0aW9uU2l6ZSAtIDE7XG5cbiAgICAgIGlmIChlbmRQYWdlID4gbGFzdFBhZ2UpIHtcbiAgICAgICAgZW5kUGFnZSA9IGxhc3RQYWdlO1xuICAgICAgICBzdGFydFBhZ2UgPSBlbmRQYWdlIC0gcGFnaW5hdGlvblNpemUgKyAxO1xuICAgICAgfVxuXG4gICAgICBpZiAoYWx3YXlzU2hvd0FsbEJ0bnMpIHtcbiAgICAgICAgaWYgKHdpdGhGaXJzdEFuZExhc3QpIHtcbiAgICAgICAgICBwYWdlcyA9IFtmaXJzdFBhZ2VUZXh0LCBwcmVQYWdlVGV4dF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFnZXMgPSBbcHJlUGFnZVRleHRdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgc3RhcnRQYWdlICE9PSBwYWdlU3RhcnRJbmRleCAmJlxuICAgICAgICB0b3RhbFBhZ2VzID4gcGFnaW5hdGlvblNpemUgJiZcbiAgICAgICAgd2l0aEZpcnN0QW5kTGFzdCAmJlxuICAgICAgICBwYWdlcy5sZW5ndGggPT09IDBcbiAgICAgICkge1xuICAgICAgICBwYWdlcyA9IFtmaXJzdFBhZ2VUZXh0LCBwcmVQYWdlVGV4dF07XG4gICAgICB9IGVsc2UgaWYgKHRvdGFsUGFnZXMgPiAxICYmIHBhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBwYWdlcyA9IFtwcmVQYWdlVGV4dF07XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSBzdGFydFBhZ2U7IGkgPD0gZW5kUGFnZTsgaSArPSAxKSB7XG4gICAgICAgIGlmIChpID49IHBhZ2VTdGFydEluZGV4KSBwYWdlcy5wdXNoKGkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYWx3YXlzU2hvd0FsbEJ0bnMgfHwgKGVuZFBhZ2UgPD0gbGFzdFBhZ2UgJiYgcGFnZXMubGVuZ3RoID4gMSkpIHtcbiAgICAgICAgcGFnZXMucHVzaChuZXh0UGFnZVRleHQpO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICAoZW5kUGFnZSAhPT0gbGFzdFBhZ2UgJiYgd2l0aEZpcnN0QW5kTGFzdCkgfHxcbiAgICAgICAgKHdpdGhGaXJzdEFuZExhc3QgJiYgYWx3YXlzU2hvd0FsbEJ0bnMpXG4gICAgICApIHtcbiAgICAgICAgcGFnZXMucHVzaChsYXN0UGFnZVRleHQpO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiAoKGVuZFBhZ2UgPD0gbGFzdFBhZ2UgJiYgcGFnZXMubGVuZ3RoID4gMSkgfHwgYWx3YXlzU2hvd0FsbEJ0bnMpIHtcbiAgICAgIC8vICAgcGFnZXMucHVzaChuZXh0UGFnZVRleHQpO1xuICAgICAgLy8gfVxuICAgICAgLy8gaWYgKGVuZFBhZ2UgIT09IGxhc3RQYWdlICYmIHdpdGhGaXJzdEFuZExhc3QpIHtcbiAgICAgIC8vICAgcGFnZXMucHVzaChsYXN0UGFnZVRleHQpO1xuICAgICAgLy8gfVxuXG4gICAgICByZXR1cm4gcGFnZXM7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlUGFnZVN0YXR1cyhwYWdlcyA9IFtdLCBsYXN0UGFnZTogYW55LCBkaXNhYmxlUGFnZVRpdGxlID0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY3VyclBhZ2UsXG4gICAgICAgIHBhZ2VTdGFydEluZGV4LFxuICAgICAgICBmaXJzdFBhZ2VUZXh0LFxuICAgICAgICBwcmVQYWdlVGV4dCxcbiAgICAgICAgbmV4dFBhZ2VUZXh0LFxuICAgICAgICBsYXN0UGFnZVRleHQsXG4gICAgICAgIGFsd2F5c1Nob3dBbGxCdG5zLFxuICAgICAgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBpc1N0YXJ0ID0gKHBhZ2U6IGFueSkgPT5cbiAgICAgICAgY3VyclBhZ2UgPT09IHBhZ2VTdGFydEluZGV4ICYmXG4gICAgICAgIChwYWdlID09PSBmaXJzdFBhZ2VUZXh0IHx8IHBhZ2UgPT09IHByZVBhZ2VUZXh0KTtcbiAgICAgIGNvbnN0IGlzRW5kID0gKHBhZ2U6IGFueSkgPT5cbiAgICAgICAgY3VyclBhZ2UgPT09IGxhc3RQYWdlICYmXG4gICAgICAgIChwYWdlID09PSBuZXh0UGFnZVRleHQgfHwgcGFnZSA9PT0gbGFzdFBhZ2VUZXh0KTtcblxuICAgICAgcmV0dXJuIHBhZ2VzXG4gICAgICAgIC5maWx0ZXIoKHBhZ2UpID0+IHtcbiAgICAgICAgICBpZiAoYWx3YXlzU2hvd0FsbEJ0bnMpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gIShpc1N0YXJ0KHBhZ2UpIHx8IGlzRW5kKHBhZ2UpKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm1hcCgocGFnZSkgPT4ge1xuICAgICAgICAgIGxldCB0aXRsZTogYW55O1xuICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IHBhZ2UgPT09IGN1cnJQYWdlO1xuICAgICAgICAgIGNvbnN0IGRpc2FibGVkID0gaXNTdGFydChwYWdlKSB8fCBpc0VuZChwYWdlKTtcblxuICAgICAgICAgIGlmIChwYWdlID09PSBuZXh0UGFnZVRleHQpIHtcbiAgICAgICAgICAgIHRpdGxlID0gdGhpcy5wcm9wcy5uZXh0UGFnZVRpdGxlO1xuICAgICAgICAgIH0gZWxzZSBpZiAocGFnZSA9PT0gcHJlUGFnZVRleHQpIHtcbiAgICAgICAgICAgIHRpdGxlID0gdGhpcy5wcm9wcy5wcmVQYWdlVGl0bGU7XG4gICAgICAgICAgfSBlbHNlIGlmIChwYWdlID09PSBmaXJzdFBhZ2VUZXh0KSB7XG4gICAgICAgICAgICB0aXRsZSA9IHRoaXMucHJvcHMuZmlyc3RQYWdlVGl0bGU7XG4gICAgICAgICAgfSBlbHNlIGlmIChwYWdlID09PSBsYXN0UGFnZVRleHQpIHtcbiAgICAgICAgICAgIHRpdGxlID0gdGhpcy5wcm9wcy5sYXN0UGFnZVRpdGxlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aXRsZSA9IGAke3BhZ2V9YDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBwYWdlUmVzdWx0ID0geyBwYWdlLCBhY3RpdmUsIGRpc2FibGVkLCB0aXRsZSB9O1xuICAgICAgICAgIGlmICghZGlzYWJsZVBhZ2VUaXRsZSkge1xuICAgICAgICAgICAgcGFnZVJlc3VsdC50aXRsZSA9IHRpdGxlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcGFnZVJlc3VsdDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlU2l6ZVBlclBhZ2VTdGF0dXMoKSB7XG4gICAgICBjb25zdCB7IHNpemVQZXJQYWdlTGlzdCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIHJldHVybiBzaXplUGVyUGFnZUxpc3QubWFwKChfc2l6ZVBlclBhZ2U6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBwYWdlVGV4dCA9XG4gICAgICAgICAgdHlwZW9mIF9zaXplUGVyUGFnZS50ZXh0ICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgICA/IF9zaXplUGVyUGFnZS50ZXh0XG4gICAgICAgICAgICA6IF9zaXplUGVyUGFnZTtcbiAgICAgICAgY29uc3QgcGFnZU51bWJlciA9XG4gICAgICAgICAgdHlwZW9mIF9zaXplUGVyUGFnZS52YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgPyBfc2l6ZVBlclBhZ2UudmFsdWVcbiAgICAgICAgICAgIDogX3NpemVQZXJQYWdlO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRleHQ6IGAke3BhZ2VUZXh0fWAsXG4gICAgICAgICAgcGFnZTogcGFnZU51bWJlcixcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbiIsImltcG9ydCBDb25zdCBmcm9tIFwiLi9jb25zdFwiO1xuXG5jb25zdCBnZXROb3JtYWxpemVkUGFnZSA9IChwYWdlOiBhbnksIHBhZ2VTdGFydEluZGV4OiBhbnkpID0+IHtcbiAgY29uc3Qgb2Zmc2V0ID0gTWF0aC5hYnMoMSAtIHBhZ2VTdGFydEluZGV4KTtcbiAgcmV0dXJuIHBhZ2UgKyBvZmZzZXQ7XG59O1xuXG5jb25zdCBlbmRJbmRleCA9IChwYWdlOiBhbnksIHNpemVQZXJQYWdlOiBhbnksIHBhZ2VTdGFydEluZGV4OiBhbnkpID0+XG4gIGdldE5vcm1hbGl6ZWRQYWdlKHBhZ2UsIHBhZ2VTdGFydEluZGV4KSAqIHNpemVQZXJQYWdlIC0gMTtcblxuY29uc3Qgc3RhcnRJbmRleCA9IChlbmQ6IGFueSwgc2l6ZVBlclBhZ2U6IGFueSkgPT4gZW5kIC0gKHNpemVQZXJQYWdlIC0gMSk7XG5cbmV4cG9ydCBjb25zdCBhbGlnblBhZ2UgPSAoXG4gIGRhdGFTaXplOiBhbnksXG4gIHByZXZEYXRhU2l6ZTogYW55LFxuICBwYWdlOiBhbnksXG4gIHNpemVQZXJQYWdlOiBhbnksXG4gIHBhZ2VTdGFydEluZGV4OiBhbnlcbikgPT4ge1xuICBpZiAocHJldkRhdGFTaXplIDwgZGF0YVNpemUpIHJldHVybiBwYWdlO1xuICBpZiAocGFnZSA8IHBhZ2VTdGFydEluZGV4KSByZXR1cm4gcGFnZVN0YXJ0SW5kZXg7XG4gIGlmIChkYXRhU2l6ZSA8PSAwKSByZXR1cm4gcGFnZVN0YXJ0SW5kZXg7XG4gIGlmIChcbiAgICBwYWdlID49IE1hdGguZmxvb3IoZGF0YVNpemUgLyBzaXplUGVyUGFnZSkgKyBwYWdlU3RhcnRJbmRleCAmJlxuICAgIHBhZ2VTdGFydEluZGV4ID09PSAxXG4gICkge1xuICAgIHJldHVybiBNYXRoLmNlaWwoZGF0YVNpemUgLyBzaXplUGVyUGFnZSk7XG4gIH1cbiAgaWYgKHBhZ2UgPj0gTWF0aC5mbG9vcihkYXRhU2l6ZSAvIHNpemVQZXJQYWdlKSAmJiBwYWdlU3RhcnRJbmRleCA9PT0gMCkge1xuICAgIGNvbnN0IG5ld1BhZ2UgPSBNYXRoLmNlaWwoZGF0YVNpemUgLyBzaXplUGVyUGFnZSk7XG4gICAgcmV0dXJuIG5ld1BhZ2UgLSBNYXRoLmFicyhDb25zdC5QQUdFX1NUQVJUX0lOREVYIC0gcGFnZVN0YXJ0SW5kZXgpO1xuICB9XG4gIHJldHVybiBwYWdlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJ5Q3VyclBhZ2UgPSAoXG4gIGRhdGE6IGFueSxcbiAgcGFnZTogYW55LFxuICBzaXplUGVyUGFnZTogYW55LFxuICBwYWdlU3RhcnRJbmRleDogYW55XG4pID0+IHtcbiAgY29uc3QgZGF0YVNpemUgPSBkYXRhLmxlbmd0aDtcbiAgaWYgKCFkYXRhU2l6ZSkgcmV0dXJuIFtdO1xuXG4gIGNvbnN0IGVuZCA9IGVuZEluZGV4KHBhZ2UsIHNpemVQZXJQYWdlLCBwYWdlU3RhcnRJbmRleCk7XG4gIGNvbnN0IHN0YXJ0ID0gc3RhcnRJbmRleChlbmQsIHNpemVQZXJQYWdlKTtcblxuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSArPSAxKSB7XG4gICAgcmVzdWx0LnB1c2goZGF0YVtpXSk7XG4gICAgaWYgKGkgKyAxID09PSBkYXRhU2l6ZSkgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuLyogZXNsaW50IGNhbWVsY2FzZTogMCAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgcGFnZVJlc29sdmVyIGZyb20gXCIuL3BhZ2UtcmVzb2x2ZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgKFdyYXBwZWRDb21wb25lbnQ6IGFueSkgPT5cbiAgY2xhc3MgUGFnaW5hdGlvbkhhbmRsZXIgZXh0ZW5kcyBwYWdlUmVzb2x2ZXIoQ29tcG9uZW50KSB7XG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgdGhpcy5oYW5kbGVDaGFuZ2VQYWdlID0gdGhpcy5oYW5kbGVDaGFuZ2VQYWdlLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmhhbmRsZUNoYW5nZVNpemVQZXJQYWdlID0gdGhpcy5oYW5kbGVDaGFuZ2VTaXplUGVyUGFnZS5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5zdGF0ZSA9IHRoaXMuaW5pdGlhbFN0YXRlKCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKGN1cnJQcm9wczogYW55KSB7XG4gICAgICBjb25zdCB7IGN1cnJTaXplUGVyUGFnZSwgZGF0YVNpemUsIHRvdGFsU2l6ZSB9ID0gY3VyclByb3BzO1xuICAgICAgbGV0IHRvdGFsUGFnZXMgPSAwO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGN1cnJTaXplUGVyUGFnZSAhPT0gdGhpcy5wcm9wcy5jdXJyU2l6ZVBlclBhZ2UgfHxcbiAgICAgICAgZGF0YVNpemUgIT09IHRoaXMucHJvcHMuZGF0YVNpemUgfHxcbiAgICAgICAgdG90YWxTaXplICE9PSB0aGlzLnByb3BzLnRvdGFsU2l6ZVxuICAgICAgKSB7XG4gICAgICAgIGlmIChjdXJyU2l6ZVBlclBhZ2UgIT09IHRoaXMucHJvcHMuY3VyclNpemVQZXJQYWdlKSB7XG4gICAgICAgICAgdG90YWxQYWdlcyA9IHRoaXMuY2FsY3VsYXRlVG90YWxQYWdlKFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5jdXJyU2l6ZVBlclBhZ2UsXG4gICAgICAgICAgICB0aGlzLnByb3BzLnRvdGFsU2l6ZSA/PyB0aGlzLnByb3BzLmRhdGFTaXplXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhU2l6ZSAhPT0gdGhpcy5wcm9wcy5kYXRhU2l6ZSkge1xuICAgICAgICAgIHRvdGFsUGFnZXMgPSB0aGlzLmNhbGN1bGF0ZVRvdGFsUGFnZShcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY3VyclNpemVQZXJQYWdlLFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5kYXRhU2l6ZVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAodG90YWxTaXplICE9PSB0aGlzLnByb3BzLnRvdGFsU2l6ZSkge1xuICAgICAgICAgIHRvdGFsUGFnZXMgPSB0aGlzLmNhbGN1bGF0ZVRvdGFsUGFnZShcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY3VyclNpemVQZXJQYWdlLFxuICAgICAgICAgICAgdGhpcy5wcm9wcy50b3RhbFNpemVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3RhbFBhZ2VzID0gdGhpcy5jYWxjdWxhdGVUb3RhbFBhZ2UoXG4gICAgICAgICAgdGhpcy5wcm9wcy5jdXJyU2l6ZVBlclBhZ2UsXG4gICAgICAgICAgdGhpcy5wcm9wcy5kYXRhU2l6ZVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsYXN0UGFnZSA9IHRoaXMuY2FsY3VsYXRlTGFzdFBhZ2UodG90YWxQYWdlcyk7XG5cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGlmICh0b3RhbFBhZ2VzICE9PSB0aGlzLnN0YXRlLnRvdGFsUGFnZXMgfHwgbGFzdFBhZ2UgIT09IHRoaXMuc3RhdGUubGFzdFBhZ2UpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHRvdGFsUGFnZXMsIGxhc3RQYWdlIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZVNpemVQZXJQYWdlKHNpemVQZXJQYWdlOiBhbnkpIHtcbiAgICAgIGNvbnN0IHsgY3VyclNpemVQZXJQYWdlLCBvblNpemVQZXJQYWdlQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3Qgc2VsZWN0ZWRTaXplID1cbiAgICAgICAgdHlwZW9mIHNpemVQZXJQYWdlID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgPyBwYXJzZUludChzaXplUGVyUGFnZSwgMTApXG4gICAgICAgICAgOiBzaXplUGVyUGFnZTtcbiAgICAgIGxldCB7IGN1cnJQYWdlIH0gPSB0aGlzLnByb3BzO1xuICAgICAgaWYgKHNlbGVjdGVkU2l6ZSAhPT0gY3VyclNpemVQZXJQYWdlKSB7XG4gICAgICAgIGNvbnN0IG5ld1RvdGFsUGFnZXMgPSB0aGlzLmNhbGN1bGF0ZVRvdGFsUGFnZShzZWxlY3RlZFNpemUpO1xuICAgICAgICBjb25zdCBuZXdMYXN0UGFnZSA9IHRoaXMuY2FsY3VsYXRlTGFzdFBhZ2UobmV3VG90YWxQYWdlcyk7XG4gICAgICAgIGlmIChjdXJyUGFnZSA+IG5ld0xhc3RQYWdlKSBjdXJyUGFnZSA9IG5ld0xhc3RQYWdlO1xuICAgICAgICBvblNpemVQZXJQYWdlQ2hhbmdlKHNlbGVjdGVkU2l6ZSwgY3VyclBhZ2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZVBhZ2UobmV3UGFnZTogYW55KSB7XG4gICAgICBsZXQgcGFnZTogYW55O1xuICAgICAgY29uc3Qge1xuICAgICAgICBjdXJyUGFnZSxcbiAgICAgICAgcGFnZVN0YXJ0SW5kZXgsXG4gICAgICAgIHByZVBhZ2VUZXh0LFxuICAgICAgICBuZXh0UGFnZVRleHQsXG4gICAgICAgIGxhc3RQYWdlVGV4dCxcbiAgICAgICAgZmlyc3RQYWdlVGV4dCxcbiAgICAgICAgb25QYWdlQ2hhbmdlLFxuICAgICAgfSA9IHRoaXMucHJvcHM7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCB7IGxhc3RQYWdlIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBpZiAobmV3UGFnZSA9PT0gcHJlUGFnZVRleHQpIHtcbiAgICAgICAgcGFnZSA9IHRoaXMuYmFja1RvUHJldlBhZ2UoKTtcbiAgICAgIH0gZWxzZSBpZiAobmV3UGFnZSA9PT0gbmV4dFBhZ2VUZXh0KSB7XG4gICAgICAgIHBhZ2UgPSBjdXJyUGFnZSArIDEgPiBsYXN0UGFnZSA/IGxhc3RQYWdlIDogY3VyclBhZ2UgKyAxO1xuICAgICAgfSBlbHNlIGlmIChuZXdQYWdlID09PSBsYXN0UGFnZVRleHQpIHtcbiAgICAgICAgcGFnZSA9IGxhc3RQYWdlO1xuICAgICAgfSBlbHNlIGlmIChuZXdQYWdlID09PSBmaXJzdFBhZ2VUZXh0KSB7XG4gICAgICAgIHBhZ2UgPSBwYWdlU3RhcnRJbmRleDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhZ2UgPSBwYXJzZUludChuZXdQYWdlLCAxMCk7XG4gICAgICB9XG4gICAgICBpZiAocGFnZSAhPT0gY3VyclBhZ2UpIHtcbiAgICAgICAgb25QYWdlQ2hhbmdlKHBhZ2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxXcmFwcGVkQ29tcG9uZW50XG4gICAgICAgICAgey4uLnRoaXMucHJvcHN9XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIGxhc3RQYWdlPXt0aGlzLnN0YXRlLmxhc3RQYWdlfVxuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICB0b3RhbFBhZ2VzPXt0aGlzLnN0YXRlLnRvdGFsUGFnZXN9XG4gICAgICAgICAgb25QYWdlQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZVBhZ2V9XG4gICAgICAgICAgb25TaXplUGVyUGFnZUNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2VTaXplUGVyUGFnZX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICB9O1xuIiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHBhZ2VSZXNvbHZlciBmcm9tIFwiLi9wYWdlLXJlc29sdmVyXCI7XG5pbXBvcnQgUGFnaW5hdGlvbkxpc3QgZnJvbSBcIi4vcGFnaW5hdGlvbi1saXN0XCI7XG5cbmNvbnN0IHBhZ2luYXRpb25MaXN0QWRhcHRlciA9IChXcmFwcGVkQ29tcG9uZW50OiBhbnkpID0+XG4gIGNsYXNzIFBhZ2luYXRpb25MaXN0QWRhcHRlciBleHRlbmRzIHBhZ2VSZXNvbHZlcihDb21wb25lbnQpIHtcbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGxhc3RQYWdlLFxuICAgICAgICB0b3RhbFBhZ2VzLFxuICAgICAgICBwYWdlQnV0dG9uUmVuZGVyZXIsXG4gICAgICAgIG9uUGFnZUNoYW5nZSxcbiAgICAgICAgZGlzYWJsZVBhZ2VUaXRsZSxcbiAgICAgICAgaGlkZVBhZ2VMaXN0T25seU9uZVBhZ2UsXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHBhZ2VzID0gdGhpcy5jYWxjdWxhdGVQYWdlU3RhdHVzKFxuICAgICAgICB0aGlzLmNhbGN1bGF0ZVBhZ2VzKHRvdGFsUGFnZXMsIGxhc3RQYWdlKSxcbiAgICAgICAgbGFzdFBhZ2UsXG4gICAgICAgIGRpc2FibGVQYWdlVGl0bGVcbiAgICAgICk7XG4gICAgICBpZiAodG90YWxQYWdlcyA9PT0gMSAmJiBoaWRlUGFnZUxpc3RPbmx5T25lUGFnZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxXcmFwcGVkQ29tcG9uZW50XG4gICAgICAgICAgcGFnZUJ1dHRvblJlbmRlcmVyPXtwYWdlQnV0dG9uUmVuZGVyZXJ9XG4gICAgICAgICAgb25QYWdlQ2hhbmdlPXtvblBhZ2VDaGFuZ2V9XG4gICAgICAgICAgcGFnZXM9e3BhZ2VzfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbmV4cG9ydCBjb25zdCBQYWdpbmF0aW9uTGlzdFdpdGhBZGFwdGVyID0gcGFnaW5hdGlvbkxpc3RBZGFwdGVyKFBhZ2luYXRpb25MaXN0KTtcbmV4cG9ydCBkZWZhdWx0IHBhZ2luYXRpb25MaXN0QWRhcHRlcjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBQYWdpbmF0aW9uSGFuZGxlciBmcm9tIFwiLi9wYWdpbmF0aW9uLWhhbmRsZXJcIjtcbmltcG9ydCBQYWdpbmF0aW9uTGlzdCBmcm9tIFwiLi9wYWdpbmF0aW9uLWxpc3RcIjtcbmltcG9ydCBwYWdpbmF0aW9uTGlzdEFkYXB0ZXIgZnJvbSBcIi4vcGFnaW5hdGlvbi1saXN0LWFkYXB0ZXJcIjtcbmltcG9ydCBzdGFuZGFsb25lQWRhcHRlciBmcm9tIFwiLi9zdGFuZGFsb25lLWFkYXB0ZXJcIjtcblxuY29uc3QgUGFnaW5hdGlvbkxpc3RTdGFuZGFsb25lID0gKHByb3BzOiBhbnkpID0+IDxQYWdpbmF0aW9uTGlzdCB7Li4ucHJvcHN9IC8+O1xuXG5leHBvcnQgZGVmYXVsdCBzdGFuZGFsb25lQWRhcHRlcihcbiAgUGFnaW5hdGlvbkhhbmRsZXIocGFnaW5hdGlvbkxpc3RBZGFwdGVyKFBhZ2luYXRpb25MaXN0U3RhbmRhbG9uZSkpXG4pO1xuIiwiXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBQYWdlQnV0dG9uIGZyb20gXCIuL3BhZ2UtYnV0dG9uXCI7XG5cbmludGVyZmFjZSBQYWdpbmF0aW9uTGlzdFByb3BzIHtcbiAgcGFnZXM6IEFycmF5PHtcbiAgICBwYWdlOiBSZWFjdC5SZWFjdE5vZGUgfCBudW1iZXIgfCBzdHJpbmc7XG4gICAgYWN0aXZlPzogYm9vbGVhbjtcbiAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gICAgdGl0bGU/OiBzdHJpbmc7XG4gIH0+O1xuICBvblBhZ2VDaGFuZ2U6IChwYWdlOiBhbnkpID0+IHZvaWQ7XG4gIHBhZ2VCdXR0b25SZW5kZXJlcj86IChwcm9wczogYW55KSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQgfCBudWxsO1xufVxuXG5jb25zdCBQYWdpbmF0b25MaXN0ID0gKHByb3BzOiBQYWdpbmF0aW9uTGlzdFByb3BzKSA9PiAoXG4gIDx1bCBjbGFzc05hbWU9XCJwYWdpbmF0aW9uIHJlYWN0LWJvb3RzdHJhcC10YWJsZS1wYWdlLWJ0bnMtdWxcIj5cbiAgICB7cHJvcHMucGFnZXMubWFwKChwYWdlUHJvcHM6IGFueSkgPT4ge1xuICAgICAgaWYgKHByb3BzLnBhZ2VCdXR0b25SZW5kZXJlcikge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gcHJvcHMucGFnZUJ1dHRvblJlbmRlcmVyKHtcbiAgICAgICAgICAuLi5wYWdlUHJvcHMsXG4gICAgICAgICAgb25QYWdlQ2hhbmdlOiBwcm9wcy5vblBhZ2VDaGFuZ2UsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZWxlbWVudCA/IFJlYWN0LmNsb25lRWxlbWVudChlbGVtZW50LCB7IGtleTogcGFnZVByb3BzLnBhZ2UgfSkgOiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFBhZ2VCdXR0b25cbiAgICAgICAgICBrZXk9e3BhZ2VQcm9wcy5wYWdlfVxuICAgICAgICAgIHsuLi5wYWdlUHJvcHN9XG4gICAgICAgICAgb25QYWdlQ2hhbmdlPXtwcm9wcy5vblBhZ2VDaGFuZ2V9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH0pfVxuICA8L3VsPlxuKTtcblxuXG5leHBvcnQgZGVmYXVsdCBQYWdpbmF0b25MaXN0O1xuIiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHBhZ2VSZXNvbHZlciBmcm9tIFwiLi9wYWdlLXJlc29sdmVyXCI7XG5pbXBvcnQgUGFnaW5hdGlvblRvdGFsIGZyb20gXCIuL3BhZ2luYXRpb24tdG90YWxcIjtcblxuY29uc3QgcGFnaW5hdGlvblRvdGFsQWRhcHRlciA9IChXcmFwcGVkQ29tcG9uZW50OiBhbnkpID0+XG4gIGNsYXNzIFBhZ2luYXRpb25Ub3RhbEFkYXB0ZXIgZXh0ZW5kcyBwYWdlUmVzb2x2ZXIoQ29tcG9uZW50KSB7XG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3QgW2Zyb20sIHRvXSA9IHRoaXMuY2FsY3VsYXRlRnJvbVRvKCk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8V3JhcHBlZENvbXBvbmVudFxuICAgICAgICAgIGZyb209e2Zyb219XG4gICAgICAgICAgdG89e3RvfVxuICAgICAgICAgIGRhdGFTaXplPXt0aGlzLnByb3BzLmRhdGFTaXplfVxuICAgICAgICAgIHBhZ2luYXRpb25Ub3RhbFJlbmRlcmVyPXt0aGlzLnByb3BzLnBhZ2luYXRpb25Ub3RhbFJlbmRlcmVyfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbmV4cG9ydCBjb25zdCBQYWdpbmF0aW9uVG90YWxXaXRoQWRhcHRlciA9XG4gIHBhZ2luYXRpb25Ub3RhbEFkYXB0ZXIoUGFnaW5hdGlvblRvdGFsKTtcbmV4cG9ydCBkZWZhdWx0IHBhZ2luYXRpb25Ub3RhbEFkYXB0ZXI7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUGFnaW5hdGlvblRvdGFsIGZyb20gXCIuL3BhZ2luYXRpb24tdG90YWxcIjtcbmltcG9ydCBwYWdpbmF0aW9uVG90YWxBZGFwdGVyIGZyb20gXCIuL3BhZ2luYXRpb24tdG90YWwtYWRhcHRlclwiO1xuaW1wb3J0IHN0YW5kYWxvbmVBZGFwdGVyIGZyb20gXCIuL3N0YW5kYWxvbmUtYWRhcHRlclwiO1xuXG5jb25zdCBQYWdpbmF0aW9uVG90YWxTdGFuZGFsb25lID0gKHByb3BzOiBhbnkpID0+IChcbiAgPFBhZ2luYXRpb25Ub3RhbCB7Li4ucHJvcHN9IC8+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBzdGFuZGFsb25lQWRhcHRlcihcbiAgcGFnaW5hdGlvblRvdGFsQWRhcHRlcihQYWdpbmF0aW9uVG90YWxTdGFuZGFsb25lKVxuKTtcbiIsIlxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgUGFnaW5hdGlvblRvdGFsUHJvcHMge1xuICBmcm9tOiBudW1iZXI7XG4gIHRvOiBudW1iZXI7XG4gIGRhdGFTaXplOiBudW1iZXI7XG4gIHBhZ2luYXRpb25Ub3RhbFJlbmRlcmVyPzogKGZyb206IG51bWJlciwgdG86IG51bWJlciwgZGF0YVNpemU6IG51bWJlcikgPT4gUmVhY3QuUmVhY3RFbGVtZW50IHwgbnVsbDtcbn1cblxuY29uc3QgUGFnaW5hdGlvblRvdGFsID0gKHByb3BzOiBQYWdpbmF0aW9uVG90YWxQcm9wcykgPT4ge1xuICBpZiAocHJvcHMucGFnaW5hdGlvblRvdGFsUmVuZGVyZXIpIHtcbiAgICByZXR1cm4gcHJvcHMucGFnaW5hdGlvblRvdGFsUmVuZGVyZXIocHJvcHMuZnJvbSwgcHJvcHMudG8sIHByb3BzLmRhdGFTaXplKTtcbiAgfVxuICByZXR1cm4gKFxuICAgIDxzcGFuIGNsYXNzTmFtZT1cInJlYWN0LWJvb3RzdHJhcC10YWJsZS1wYWdpbmF0aW9uLXRvdGFsXCI+XG4gICAgICAmbmJzcDtTaG93aW5nIHJvd3Mge3Byb3BzLmZyb219IHRvJm5ic3A7e3Byb3BzLnRvfSBvZiZuYnNwO1xuICAgICAge3Byb3BzLmRhdGFTaXplfVxuICAgIDwvc3Bhbj5cbiAgKTtcbn07XG5cblxuZXhwb3J0IGRlZmF1bHQgUGFnaW5hdGlvblRvdGFsO1xuIiwiLyogZXNsaW50IHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wczogMCAqL1xuLyogZXNsaW50IGFycm93LWJvZHktc3R5bGU6IDAgKi9cbmltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IENvbnN0IGZyb20gXCIuL2NvbnN0XCI7XG5pbXBvcnQgcGFnZVJlc29sdmVyIGZyb20gXCIuL3BhZ2UtcmVzb2x2ZXJcIjtcbmltcG9ydCBwYWdpbmF0aW9uSGFuZGxlciBmcm9tIFwiLi9wYWdpbmF0aW9uLWhhbmRsZXJcIjtcbmltcG9ydCB7IFBhZ2luYXRpb25MaXN0V2l0aEFkYXB0ZXIgfSBmcm9tIFwiLi9wYWdpbmF0aW9uLWxpc3QtYWRhcHRlclwiO1xuaW1wb3J0IHsgUGFnaW5hdGlvblRvdGFsV2l0aEFkYXB0ZXIgfSBmcm9tIFwiLi9wYWdpbmF0aW9uLXRvdGFsLWFkYXB0ZXJcIjtcbmltcG9ydCB7IFNpemVQZXJQYWdlRHJvcGRvd25XaXRoQWRhcHRlciB9IGZyb20gXCIuL3NpemUtcGVyLXBhZ2UtZHJvcGRvd24tYWRhcHRlclwiO1xuXG5jbGFzcyBQYWdpbmF0aW9uIGV4dGVuZHMgcGFnZVJlc29sdmVyKENvbXBvbmVudCkge1xuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgdGFibGVJZCxcbiAgICAgIGN1cnJQYWdlLFxuICAgICAgcGFnZVN0YXJ0SW5kZXggPSBDb25zdC5QQUdFX1NUQVJUX0lOREVYLFxuICAgICAgc2hvd1RvdGFsID0gQ29uc3QuU0hPV19UT1RBTCxcbiAgICAgIGRhdGFTaXplLFxuICAgICAgcGFnZUxpc3RSZW5kZXJlciA9IG51bGwsXG4gICAgICBwYWdlQnV0dG9uUmVuZGVyZXIgPSBudWxsLFxuICAgICAgcGFnaW5hdGlvblRvdGFsUmVuZGVyZXIgPSBDb25zdC5QQUdJTkFUSU9OX1RPVEFMLFxuICAgICAgaGlkZVBhZ2VMaXN0T25seU9uZVBhZ2UgPSBDb25zdC5ISURFX1BBR0VfTElTVF9PTkxZX09ORV9QQUdFLFxuICAgICAgdG90YWxQYWdlcyxcbiAgICAgIGxhc3RQYWdlLFxuICAgICAgb25QYWdlQ2hhbmdlLFxuICAgICAgc2l6ZVBlclBhZ2VMaXN0ID0gQ29uc3QuU0laRV9QRVJfUEFHRV9MSVNULFxuICAgICAgY3VyclNpemVQZXJQYWdlLFxuICAgICAgaGlkZVNpemVQZXJQYWdlID0gQ29uc3QuSElERV9TSVpFX1BFUl9QQUdFLFxuICAgICAgc2l6ZVBlclBhZ2VSZW5kZXJlciA9IG51bGwsXG4gICAgICBzaXplUGVyUGFnZU9wdGlvblJlbmRlcmVyID0gbnVsbCxcbiAgICAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2UsXG4gICAgICBib290c3RyYXA0ID0gZmFsc2UsXG4gICAgICBib290c3RyYXA1ID0gZmFsc2UsXG4gICAgICBkaXNhYmxlUGFnZVRpdGxlID0gZmFsc2UsXG4gICAgICBwYWdpbmF0aW9uU2l6ZSA9IENvbnN0LlBBR0lOQVRJT05fU0laRSxcbiAgICAgIHdpdGhGaXJzdEFuZExhc3QgPSBDb25zdC5XaXRoX0ZJUlNUX0FORF9MQVNULFxuICAgICAgYWx3YXlzU2hvd0FsbEJ0bnMgPSBDb25zdC5TSE9XX0FMTF9QQUdFX0JUTlMsXG4gICAgICBmaXJzdFBhZ2VUZXh0ID0gQ29uc3QuRklSU1RfUEFHRV9URVhULFxuICAgICAgcHJlUGFnZVRleHQgPSBDb25zdC5QUkVfUEFHRV9URVhULFxuICAgICAgbmV4dFBhZ2VUZXh0ID0gQ29uc3QuTkVYVF9QQUdFX1RFWFQsXG4gICAgICBsYXN0UGFnZVRleHQgPSBDb25zdC5MQVNUX1BBR0VfVEVYVCxcbiAgICAgIG5leHRQYWdlVGl0bGUgPSBDb25zdC5ORVhUX1BBR0VfVElUTEUsXG4gICAgICBwcmVQYWdlVGl0bGUgPSBDb25zdC5QUkVfUEFHRV9USVRMRSxcbiAgICAgIGZpcnN0UGFnZVRpdGxlID0gQ29uc3QuRklSU1RfUEFHRV9USVRMRSxcbiAgICAgIGxhc3RQYWdlVGl0bGUgPSBDb25zdC5MQVNUX1BBR0VfVElUTEUsXG4gICAgICAuLi5yZXN0XG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCBwYWdlcyA9IHRoaXMuY2FsY3VsYXRlUGFnZVN0YXR1cyhcbiAgICAgIHRoaXMuY2FsY3VsYXRlUGFnZXModG90YWxQYWdlcywgbGFzdFBhZ2UpLFxuICAgICAgbGFzdFBhZ2VcbiAgICApO1xuICAgIGNvbnN0IHBhZ2VMaXN0Q2xhc3MgPSBjcyhcbiAgICAgIFwicmVhY3QtYm9vdHN0cmFwLXRhYmxlLXBhZ2luYXRpb24tbGlzdFwiLFxuICAgICAgXCJjb2wtbWQtNiBjb2wteHMtNiBjb2wtNiBjb2wtc20tNiBjb2wtbGctNlwiLFxuICAgICAge1xuICAgICAgICBcInJlYWN0LWJvb3RzdHJhcC10YWJsZS1wYWdpbmF0aW9uLWxpc3QtaGlkZGVuXCI6XG4gICAgICAgICAgaGlkZVBhZ2VMaXN0T25seU9uZVBhZ2UgJiYgdG90YWxQYWdlcyA9PT0gMSxcbiAgICAgIH1cbiAgICApO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInJvdyByZWFjdC1ib290c3RyYXAtdGFibGUtcGFnaW5hdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC02IGNvbC14cy02IGNvbC02IGNvbC1zbS02IGNvbC1sZy02XCI+XG4gICAgICAgICAgPFNpemVQZXJQYWdlRHJvcGRvd25XaXRoQWRhcHRlclxuICAgICAgICAgICAgYm9vdHN0cmFwND17Ym9vdHN0cmFwNH1cbiAgICAgICAgICAgIGJvb3RzdHJhcDU9e2Jvb3RzdHJhcDV9XG4gICAgICAgICAgICB0YWJsZUlkPXt0YWJsZUlkfVxuICAgICAgICAgICAgc2l6ZVBlclBhZ2VMaXN0PXtzaXplUGVyUGFnZUxpc3R9XG4gICAgICAgICAgICBjdXJyU2l6ZVBlclBhZ2U9e2N1cnJTaXplUGVyUGFnZX1cbiAgICAgICAgICAgIGhpZGVTaXplUGVyUGFnZT17aGlkZVNpemVQZXJQYWdlfVxuICAgICAgICAgICAgc2l6ZVBlclBhZ2VSZW5kZXJlcj17c2l6ZVBlclBhZ2VSZW5kZXJlcn1cbiAgICAgICAgICAgIHNpemVQZXJQYWdlT3B0aW9uUmVuZGVyZXI9e3NpemVQZXJQYWdlT3B0aW9uUmVuZGVyZXJ9XG4gICAgICAgICAgICBvblNpemVQZXJQYWdlQ2hhbmdlPXtvblNpemVQZXJQYWdlQ2hhbmdlfVxuICAgICAgICAgIC8+XG4gICAgICAgICAge3Nob3dUb3RhbCA/IChcbiAgICAgICAgICAgIDxQYWdpbmF0aW9uVG90YWxXaXRoQWRhcHRlclxuICAgICAgICAgICAgICBjdXJyUGFnZT17Y3VyclBhZ2V9XG4gICAgICAgICAgICAgIGN1cnJTaXplUGVyUGFnZT17Y3VyclNpemVQZXJQYWdlfVxuICAgICAgICAgICAgICBwYWdlU3RhcnRJbmRleD17cGFnZVN0YXJ0SW5kZXh9XG4gICAgICAgICAgICAgIGRhdGFTaXplPXtkYXRhU2l6ZX1cbiAgICAgICAgICAgICAgcGFnaW5hdGlvblRvdGFsUmVuZGVyZXI9e3BhZ2luYXRpb25Ub3RhbFJlbmRlcmVyfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtwYWdlTGlzdFJlbmRlcmVyID8gKFxuICAgICAgICAgIHBhZ2VMaXN0UmVuZGVyZXIoe1xuICAgICAgICAgICAgcGFnZXMsXG4gICAgICAgICAgICBvblBhZ2VDaGFuZ2UsXG4gICAgICAgICAgfSlcbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17cGFnZUxpc3RDbGFzc30+XG4gICAgICAgICAgICA8UGFnaW5hdGlvbkxpc3RXaXRoQWRhcHRlclxuICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgY3VyclBhZ2U9e2N1cnJQYWdlfVxuICAgICAgICAgICAgICBjdXJyU2l6ZVBlclBhZ2U9e2N1cnJTaXplUGVyUGFnZX1cbiAgICAgICAgICAgICAgcGFnZVN0YXJ0SW5kZXg9e3BhZ2VTdGFydEluZGV4fVxuICAgICAgICAgICAgICBsYXN0UGFnZT17bGFzdFBhZ2V9XG4gICAgICAgICAgICAgIHRvdGFsUGFnZXM9e3RvdGFsUGFnZXN9XG4gICAgICAgICAgICAgIHBhZ2VCdXR0b25SZW5kZXJlcj17cGFnZUJ1dHRvblJlbmRlcmVyfVxuICAgICAgICAgICAgICBvblBhZ2VDaGFuZ2U9e29uUGFnZUNoYW5nZX1cbiAgICAgICAgICAgICAgcGFnaW5hdGlvblNpemU9e3BhZ2luYXRpb25TaXplfVxuICAgICAgICAgICAgICB3aXRoRmlyc3RBbmRMYXN0PXt3aXRoRmlyc3RBbmRMYXN0fVxuICAgICAgICAgICAgICBmaXJzdFBhZ2VUZXh0PXtmaXJzdFBhZ2VUZXh0fVxuICAgICAgICAgICAgICBwcmVQYWdlVGV4dD17cHJlUGFnZVRleHR9XG4gICAgICAgICAgICAgIG5leHRQYWdlVGV4dD17bmV4dFBhZ2VUZXh0fVxuICAgICAgICAgICAgICBsYXN0UGFnZVRleHQ9e2xhc3RQYWdlVGV4dH1cbiAgICAgICAgICAgICAgYWx3YXlzU2hvd0FsbEJ0bnM9e2Fsd2F5c1Nob3dBbGxCdG5zfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGRpc2FibGVQYWdlVGl0bGU6IGZhbHNlLFxuICAgIGJvb3RzdHJhcDQ6IGZhbHNlLFxuICAgIGJvb3RzdHJhcDU6IGZhbHNlLFxuICAgIHBhZ2VTdGFydEluZGV4OiBDb25zdC5QQUdFX1NUQVJUX0lOREVYLFxuICAgIHBhZ2luYXRpb25TaXplOiBDb25zdC5QQUdJTkFUSU9OX1NJWkUsXG4gICAgd2l0aEZpcnN0QW5kTGFzdDogQ29uc3QuV2l0aF9GSVJTVF9BTkRfTEFTVCxcbiAgICBhbHdheXNTaG93QWxsQnRuczogQ29uc3QuU0hPV19BTExfUEFHRV9CVE5TLFxuICAgIHNob3dUb3RhbDogQ29uc3QuU0hPV19UT1RBTCxcbiAgICBwYWdlTGlzdFJlbmRlcmVyOiBudWxsLFxuICAgIHBhZ2VCdXR0b25SZW5kZXJlcjogbnVsbCxcbiAgICBzaXplUGVyUGFnZVJlbmRlcmVyOiBudWxsLFxuICAgIHBhZ2luYXRpb25Ub3RhbFJlbmRlcmVyOiBDb25zdC5QQUdJTkFUSU9OX1RPVEFMLFxuICAgIHNpemVQZXJQYWdlT3B0aW9uUmVuZGVyZXI6IG51bGwsXG4gICAgZmlyc3RQYWdlVGV4dDogQ29uc3QuRklSU1RfUEFHRV9URVhULFxuICAgIHByZVBhZ2VUZXh0OiBDb25zdC5QUkVfUEFHRV9URVhULFxuICAgIG5leHRQYWdlVGV4dDogQ29uc3QuTkVYVF9QQUdFX1RFWFQsXG4gICAgbGFzdFBhZ2VUZXh0OiBDb25zdC5MQVNUX1BBR0VfVEVYVCxcbiAgICBzaXplUGVyUGFnZUxpc3Q6IENvbnN0LlNJWkVfUEVSX1BBR0VfTElTVCxcbiAgICBuZXh0UGFnZVRpdGxlOiBDb25zdC5ORVhUX1BBR0VfVElUTEUsXG4gICAgcHJlUGFnZVRpdGxlOiBDb25zdC5QUkVfUEFHRV9USVRMRSxcbiAgICBmaXJzdFBhZ2VUaXRsZTogQ29uc3QuRklSU1RfUEFHRV9USVRMRSxcbiAgICBsYXN0UGFnZVRpdGxlOiBDb25zdC5MQVNUX1BBR0VfVElUTEUsXG4gICAgaGlkZVNpemVQZXJQYWdlOiBDb25zdC5ISURFX1NJWkVfUEVSX1BBR0UsXG4gICAgaGlkZVBhZ2VMaXN0T25seU9uZVBhZ2U6IENvbnN0LkhJREVfUEFHRV9MSVNUX09OTFlfT05FX1BBR0UsXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHBhZ2luYXRpb25IYW5kbGVyKFBhZ2luYXRpb24pO1xuIiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgUGFnaW5hdGlvbkNoaWxkUHJvcHMgfSBmcm9tIFwiLi5cIjtcbmltcG9ydCBwYWdlUmVzb2x2ZXIgZnJvbSBcIi4vcGFnZS1yZXNvbHZlclwiO1xuaW1wb3J0IFNpemVQZXJQYWdlRHJvcERvd24gZnJvbSBcIi4vc2l6ZS1wZXItcGFnZS1kcm9wZG93blwiO1xuXG5jb25zdCBzaXplUGVyUGFnZURyb3Bkb3duQWRhcHRlciA9IChXcmFwcGVkQ29tcG9uZW50OiBhbnkpID0+XG4gIGNsYXNzIFNpemVQZXJQYWdlRHJvcGRvd25BZGFwdGVyIGV4dGVuZHMgcGFnZVJlc29sdmVyKENvbXBvbmVudCkge1xuICAgIHN0YXRlID0geyBkcm9wZG93bk9wZW46IGZhbHNlIH07XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogUGFnaW5hdGlvbkNoaWxkUHJvcHMpIHtcbiAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgIHRoaXMuY2xvc2VEcm9wRG93biA9IHRoaXMuY2xvc2VEcm9wRG93bi5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy50b2dnbGVEcm9wRG93biA9IHRoaXMudG9nZ2xlRHJvcERvd24uYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZVNpemVQZXJQYWdlLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLnN0YXRlID0geyBkcm9wZG93bk9wZW46IGZhbHNlIH07XG4gICAgfVxuXG4gICAgdG9nZ2xlRHJvcERvd24oKSB7XG4gICAgICBjb25zdCBkcm9wZG93bk9wZW4gPSAhdGhpcy5zdGF0ZS5kcm9wZG93bk9wZW47XG4gICAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7IGRyb3Bkb3duT3BlbiB9KSk7XG4gICAgfVxuXG4gICAgY2xvc2VEcm9wRG93bigpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHsgZHJvcGRvd25PcGVuOiBmYWxzZSB9KSk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2Uoc2l6ZVBlclBhZ2U6IGFueSkge1xuICAgICAgdGhpcy5wcm9wcy5vblNpemVQZXJQYWdlQ2hhbmdlKHNpemVQZXJQYWdlKTtcbiAgICAgIHRoaXMuY2xvc2VEcm9wRG93bigpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgdGFibGVJZCxcbiAgICAgICAgYm9vdHN0cmFwNCxcbiAgICAgICAgYm9vdHN0cmFwNSxcbiAgICAgICAgc2l6ZVBlclBhZ2VMaXN0LFxuICAgICAgICBjdXJyU2l6ZVBlclBhZ2UsXG4gICAgICAgIGhpZGVTaXplUGVyUGFnZSxcbiAgICAgICAgc2l6ZVBlclBhZ2VSZW5kZXJlcixcbiAgICAgICAgc2l6ZVBlclBhZ2VPcHRpb25SZW5kZXJlcixcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBkcm9wZG93bk9wZW46IG9wZW4gfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIGlmIChzaXplUGVyUGFnZUxpc3QubGVuZ3RoID4gMSAmJiAhaGlkZVNpemVQZXJQYWdlKSB7XG4gICAgICAgIGlmIChzaXplUGVyUGFnZVJlbmRlcmVyKSB7XG4gICAgICAgICAgcmV0dXJuIHNpemVQZXJQYWdlUmVuZGVyZXIoe1xuICAgICAgICAgICAgb3B0aW9uczogdGhpcy5jYWxjdWxhdGVTaXplUGVyUGFnZVN0YXR1cygpLFxuICAgICAgICAgICAgY3VyclNpemVQZXJQYWdlOiBgJHtjdXJyU2l6ZVBlclBhZ2V9YCxcbiAgICAgICAgICAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2U6IHRoaXMuaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8V3JhcHBlZENvbXBvbmVudFxuICAgICAgICAgICAgey4uLnRoaXMucHJvcHN9XG4gICAgICAgICAgICBjdXJyU2l6ZVBlclBhZ2U9e2Ake2N1cnJTaXplUGVyUGFnZX1gfVxuICAgICAgICAgICAgb3B0aW9ucz17dGhpcy5jYWxjdWxhdGVTaXplUGVyUGFnZVN0YXR1cygpfVxuICAgICAgICAgICAgb3B0aW9uUmVuZGVyZXI9e3NpemVQZXJQYWdlT3B0aW9uUmVuZGVyZXJ9XG4gICAgICAgICAgICBvblNpemVQZXJQYWdlQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZVNpemVQZXJQYWdlfVxuICAgICAgICAgICAgb25DbGljaz17dGhpcy50b2dnbGVEcm9wRG93bn1cbiAgICAgICAgICAgIG9uQmx1cj17dGhpcy5jbG9zZURyb3BEb3dufVxuICAgICAgICAgICAgb3Blbj17b3Blbn1cbiAgICAgICAgICAgIHRhYmxlSWQ9e3RhYmxlSWR9XG4gICAgICAgICAgICBib290c3RyYXA0PXtib290c3RyYXA0fVxuICAgICAgICAgICAgYm9vdHN0cmFwNT17Ym9vdHN0cmFwNX1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuXG5leHBvcnQgY29uc3QgU2l6ZVBlclBhZ2VEcm9wZG93bldpdGhBZGFwdGVyID1cbiAgc2l6ZVBlclBhZ2VEcm9wZG93bkFkYXB0ZXIoU2l6ZVBlclBhZ2VEcm9wRG93bik7XG5leHBvcnQgZGVmYXVsdCBzaXplUGVyUGFnZURyb3Bkb3duQWRhcHRlcjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBwYWdpbmF0aW9uSGFuZGxlciBmcm9tIFwiLi9wYWdpbmF0aW9uLWhhbmRsZXJcIjtcbmltcG9ydCBTaXplUGVyUGFnZURyb3Bkb3duIGZyb20gXCIuL3NpemUtcGVyLXBhZ2UtZHJvcGRvd25cIjtcbmltcG9ydCBzaXplUGVyUGFnZURyb3Bkb3duQWRhcHRlciBmcm9tIFwiLi9zaXplLXBlci1wYWdlLWRyb3Bkb3duLWFkYXB0ZXJcIjtcbmltcG9ydCBzdGFuZGFsb25lQWRhcHRlciBmcm9tIFwiLi9zdGFuZGFsb25lLWFkYXB0ZXJcIjtcblxuY29uc3QgU2l6ZVBlclBhZ2VEcm9wZG93blN0YW5kYWxvbmUgPSAocHJvcHM6IGFueSkgPT4gKFxuICA8U2l6ZVBlclBhZ2VEcm9wZG93biB7Li4ucHJvcHN9IC8+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBzdGFuZGFsb25lQWRhcHRlcihcbiAgcGFnaW5hdGlvbkhhbmRsZXIoc2l6ZVBlclBhZ2VEcm9wZG93bkFkYXB0ZXIoU2l6ZVBlclBhZ2VEcm9wZG93blN0YW5kYWxvbmUpKVxuKTtcbiIsImltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgU2l6ZVBlclBhZ2VPcHRpb24gZnJvbSBcIi4vc2l6ZS1wZXItcGFnZS1vcHRpb25cIjtcblxuY29uc3Qgc2l6ZVBlclBhZ2VEZWZhdWx0Q2xhc3MgPSBcInJlYWN0LWJzLXRhYmxlLXNpemVQZXJQYWdlLWRyb3Bkb3duXCI7XG5cbmNvbnN0IHNpemVQZXJQYWdlRHJvcERvd25EZWZhdWx0UHJvcHMgPSB7XG4gIG9wZW46IGZhbHNlLFxuICBoaWRkZW46IGZhbHNlLFxuICBidG5Db250ZXh0dWFsOiBcImJ0bi1kZWZhdWx0IGJ0bi1zZWNvbmRhcnlcIixcbiAgdmFyaWF0aW9uOiBcImRyb3Bkb3duXCIsXG4gIGNsYXNzTmFtZTogXCJcIixcbiAgb3B0aW9uUmVuZGVyZXI6IG51bGwsXG4gIGJvb3RzdHJhcDQ6IGZhbHNlLFxuICBib290c3RyYXA1OiBmYWxzZSxcbiAgdGFibGVJZDogbnVsbCxcbn07XG5cbmludGVyZmFjZSBTaXplUGVyUGFnZURyb3BEb3duUHJvcHMge1xuICBjdXJyU2l6ZVBlclBhZ2U6IHN0cmluZyB8IG51bWJlcjtcbiAgb3B0aW9uczogQXJyYXk8e1xuICAgIHRleHQ6IHN0cmluZztcbiAgICBwYWdlOiBudW1iZXI7XG4gIH0+O1xuICBvbkNsaWNrOiAoZTogUmVhY3QuTW91c2VFdmVudCkgPT4gdm9pZDtcbiAgb25CbHVyOiAoZTogUmVhY3QuRm9jdXNFdmVudCkgPT4gdm9pZDtcbiAgb25TaXplUGVyUGFnZUNoYW5nZTogKHNpemVQZXJQYWdlOiBudW1iZXIpID0+IHZvaWQ7XG4gIGJvb3RzdHJhcDQ/OiBib29sZWFuO1xuICBib290c3RyYXA1PzogYm9vbGVhbjtcbiAgdGFibGVJZD86IHN0cmluZztcbiAgb3Blbj86IGJvb2xlYW47XG4gIGhpZGRlbj86IGJvb2xlYW47XG4gIGJ0bkNvbnRleHR1YWw/OiBzdHJpbmc7XG4gIHZhcmlhdGlvbj86IFwiZHJvcGRvd25cIiB8IFwiZHJvcHVwXCI7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgb3B0aW9uUmVuZGVyZXI/OiAocHJvcHM6IGFueSkgPT4gUmVhY3QuUmVhY3RFbGVtZW50IHwgbnVsbDtcbn1cblxuY29uc3QgU2l6ZVBlclBhZ2VEcm9wRG93biA9IChwcm9wczogU2l6ZVBlclBhZ2VEcm9wRG93blByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBvcGVuLFxuICAgIHRhYmxlSWQsXG4gICAgaGlkZGVuLFxuICAgIG9uQ2xpY2ssXG4gICAgb25CbHVyLFxuICAgIG9wdGlvbnMsXG4gICAgY2xhc3NOYW1lLFxuICAgIHZhcmlhdGlvbixcbiAgICBib290c3RyYXA0LFxuICAgIGJvb3RzdHJhcDUsXG4gICAgYnRuQ29udGV4dHVhbCxcbiAgICBvcHRpb25SZW5kZXJlcixcbiAgICBjdXJyU2l6ZVBlclBhZ2UsXG4gICAgb25TaXplUGVyUGFnZUNoYW5nZSxcbiAgfSA9IHsgLi4uc2l6ZVBlclBhZ2VEcm9wRG93bkRlZmF1bHRQcm9wcywgLi4ucHJvcHMgfTtcblxuICBjb25zdCBvcGVuQ2xhc3MgPSBvcGVuID8gXCJvcGVuIHNob3dcIiA6IFwiXCI7XG4gIGNvbnN0IGRyb3Bkb3duQ2xhc3NlcyA9IGNzKFxuICAgIG9wZW5DbGFzcyxcbiAgICBzaXplUGVyUGFnZURlZmF1bHRDbGFzcyxcbiAgICB2YXJpYXRpb24sXG4gICAgY2xhc3NOYW1lXG4gICk7XG5cbiAgY29uc3QgaWQgPSB0YWJsZUlkID8gYCR7dGFibGVJZH0tcGFnZURyb3BEb3duYCA6IFwicGFnZURyb3BEb3duXCI7XG5cbiAgcmV0dXJuIChcbiAgICA8c3BhblxuICAgICAgc3R5bGU9e3sgdmlzaWJpbGl0eTogaGlkZGVuID8gXCJoaWRkZW5cIiA6IFwidmlzaWJsZVwiIH19XG4gICAgICBjbGFzc05hbWU9e2Ryb3Bkb3duQ2xhc3Nlc31cbiAgICAgIGRhdGEtdGVzdGlkPVwic2l6ZS1wZXItcGFnZS1kcm9wZG93blwiXG4gICAgPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBpZD17aWR9XG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzc05hbWU9e2BidG4gJHtidG5Db250ZXh0dWFsfSBkcm9wZG93bi10b2dnbGVgfVxuICAgICAgICBkYXRhLXRvZ2dsZT17Ym9vdHN0cmFwNSA/IHVuZGVmaW5lZCA6IFwiZHJvcGRvd25cIn1cbiAgICAgICAgZGF0YS1icy10b2dnbGU9e2Jvb3RzdHJhcDUgPyBcImRyb3Bkb3duXCIgOiB1bmRlZmluZWR9XG4gICAgICAgIGFyaWEtZXhwYW5kZWQ9e29wZW59XG4gICAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICAgIG9uQmx1cj17b25CbHVyfVxuICAgICAgPlxuICAgICAgICB7Y3VyclNpemVQZXJQYWdlfXtcIiBcIn1cbiAgICAgICAge2Jvb3RzdHJhcDQgfHwgYm9vdHN0cmFwNSA/IG51bGwgOiAoXG4gICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJjYXJldFwiIC8+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICApfVxuICAgICAgPC9idXR0b24+XG4gICAgICA8dWxcbiAgICAgICAgY2xhc3NOYW1lPXtgZHJvcGRvd24tbWVudSAke29wZW5DbGFzc31gfVxuICAgICAgICByb2xlPVwibWVudVwiXG4gICAgICAgIGFyaWEtbGFiZWxsZWRieT17aWR9XG4gICAgICA+XG4gICAgICAgIHtvcHRpb25zLm1hcCgob3B0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAob3B0aW9uUmVuZGVyZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25SZW5kZXJlcih7XG4gICAgICAgICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgICAgICAgb25TaXplUGVyUGFnZUNoYW5nZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFNpemVQZXJQYWdlT3B0aW9uXG4gICAgICAgICAgICAgIHsuLi5vcHRpb259XG4gICAgICAgICAgICAgIGtleT17b3B0aW9uLnRleHR9XG4gICAgICAgICAgICAgIGJvb3RzdHJhcDQ9e2Jvb3RzdHJhcDR9XG4gICAgICAgICAgICAgIGJvb3RzdHJhcDU9e2Jvb3RzdHJhcDV9XG4gICAgICAgICAgICAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2U9e29uU2l6ZVBlclBhZ2VDaGFuZ2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICk7XG4gICAgICAgIH0pfVxuICAgICAgPC91bD5cbiAgICA8L3NwYW4+XG4gICk7XG59O1xuXG5cblxuZXhwb3J0IGRlZmF1bHQgU2l6ZVBlclBhZ2VEcm9wRG93bjtcbiIsIlxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgU2l6ZVBlclBhZ2VPcHRpb25Qcm9wcyB7XG4gIHRleHQ6IHN0cmluZztcbiAgcGFnZTogbnVtYmVyO1xuICBvblNpemVQZXJQYWdlQ2hhbmdlOiAocGFnZTogbnVtYmVyKSA9PiB2b2lkO1xuICBib290c3RyYXA0PzogYm9vbGVhbjtcbiAgYm9vdHN0cmFwNT86IGJvb2xlYW47XG59XG5cbmNvbnN0IFNpemVQZXJQYWdlT3B0aW9uID0gKHtcbiAgdGV4dCxcbiAgcGFnZSxcbiAgb25TaXplUGVyUGFnZUNoYW5nZSxcbiAgYm9vdHN0cmFwNCA9IGZhbHNlLFxuICBib290c3RyYXA1ID0gZmFsc2UsXG59OiBTaXplUGVyUGFnZU9wdGlvblByb3BzKSA9PlxuICBib290c3RyYXA0IHx8IGJvb3RzdHJhcDUgPyAoXG4gICAgPGFcbiAgICAgIGhyZWY9XCIjXCJcbiAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgIHJvbGU9XCJtZW51aXRlbVwiXG4gICAgICBjbGFzc05hbWU9XCJkcm9wZG93bi1pdGVtXCJcbiAgICAgIGRhdGEtcGFnZT17cGFnZX1cbiAgICAgIG9uTW91c2VEb3duPXsoZSkgPT4ge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2UocGFnZSk7XG4gICAgICB9fVxuICAgID5cbiAgICAgIHt0ZXh0fVxuICAgIDwvYT5cbiAgKSA6IChcbiAgICA8bGkga2V5PXt0ZXh0fSByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3NOYW1lPVwiZHJvcGRvd24taXRlbVwiPlxuICAgICAgPGFcbiAgICAgICAgaHJlZj1cIiNcIlxuICAgICAgICB0YWJJbmRleD17LTF9XG4gICAgICAgIHJvbGU9XCJtZW51aXRlbVwiXG4gICAgICAgIGRhdGEtcGFnZT17cGFnZX1cbiAgICAgICAgb25Nb3VzZURvd249eyhlKSA9PiB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2UocGFnZSk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHt0ZXh0fVxuICAgICAgPC9hPlxuICAgIDwvbGk+XG4gICk7XG5cblxuZXhwb3J0IGRlZmF1bHQgU2l6ZVBlclBhZ2VPcHRpb247XG4iLCIvKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5leHBvcnQgZGVmYXVsdCAoV3JhcHBlZENvbXBvbmVudDogYW55KSA9PlxuICAoeyBwYWdlLCBzaXplUGVyUGFnZSwgLi4ucmVzdCB9OiBhbnkpID0+XG4gICAgKFxuICAgICAgPFdyYXBwZWRDb21wb25lbnRcbiAgICAgICAgey4uLnJlc3R9XG4gICAgICAgIGN1cnJQYWdlPXtwYWdlfVxuICAgICAgICBjdXJyU2l6ZVBlclBhZ2U9e3NpemVQZXJQYWdlfVxuICAgICAgLz5cbiAgICApO1xuIiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbi8qIGVzbGludCBuby1sb25lbHktaWY6IDAgKi9cbi8qIGVzbGludCBjYW1lbGNhc2U6IDAgKi9cbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcImV2ZW50c1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IENvbnN0IGZyb20gXCIuL2NvbnN0XCI7XG5cbmltcG9ydCB7IFBhZ2luYXRpb25Qcm92aWRlclByb3BzIH0gZnJvbSBcIi4uXCI7XG5pbXBvcnQgeyBhbGlnblBhZ2UgfSBmcm9tIFwiLi9wYWdlXCI7XG5cbmNvbnN0IFN0YXRlQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8YW55PihudWxsKTtcblxuY2xhc3MgU3RhdGVQcm92aWRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxQYWdpbmF0aW9uUHJvdmlkZXJQcm9wcz4ge1xuICBjdXJyUGFnZTogbnVtYmVyO1xuICBjdXJyU2l6ZVBlclBhZ2U6IG51bWJlcjtcbiAgZGF0YUNoYW5nZUxpc3RlbmVyOiBhbnk7XG4gIGRhdGFTaXplOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIHJlbW90ZUVtaXR0ZXI6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogUGFnaW5hdGlvblByb3ZpZGVyUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVDaGFuZ2VQYWdlID0gdGhpcy5oYW5kbGVDaGFuZ2VQYWdlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVEYXRhU2l6ZUNoYW5nZSA9IHRoaXMuaGFuZGxlRGF0YVNpemVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZUNoYW5nZVNpemVQZXJQYWdlID0gdGhpcy5oYW5kbGVDaGFuZ2VTaXplUGVyUGFnZS5iaW5kKHRoaXMpO1xuXG4gICAgbGV0IGN1cnJQYWdlOiBhbnk7XG4gICAgbGV0IGN1cnJTaXplUGVyUGFnZTogYW55O1xuICAgIGNvbnN0IG9wdGlvbnMgPSBwcm9wcy5wYWdpbmF0aW9uIS5vcHRpb25zITtcbiAgICBjb25zdCBzaXplUGVyUGFnZUxpc3QgPSBvcHRpb25zLnNpemVQZXJQYWdlTGlzdCB8fCBDb25zdC5TSVpFX1BFUl9QQUdFX0xJU1Q7XG5cbiAgICAvLyBpbml0aWFsaXplIGN1cnJlbnQgcGFnZVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5wYWdlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBjdXJyUGFnZSA9IG9wdGlvbnMucGFnZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zLnBhZ2VTdGFydEluZGV4ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBjdXJyUGFnZSA9IG9wdGlvbnMucGFnZVN0YXJ0SW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJQYWdlID0gQ29uc3QuUEFHRV9TVEFSVF9JTkRFWDtcbiAgICB9XG5cbiAgICAvLyBpbml0aWFsaXplIGN1cnJlbnQgc2l6ZVBlclBhZ2VcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuc2l6ZVBlclBhZ2UgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGN1cnJTaXplUGVyUGFnZSA9IG9wdGlvbnMuc2l6ZVBlclBhZ2U7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygc2l6ZVBlclBhZ2VMaXN0WzBdID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBjdXJyU2l6ZVBlclBhZ2UgPSBzaXplUGVyUGFnZUxpc3RbMF0udmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJTaXplUGVyUGFnZSA9IHNpemVQZXJQYWdlTGlzdFswXTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJQYWdlID0gY3VyclBhZ2U7XG4gICAgdGhpcy5kYXRhU2l6ZSA9IG9wdGlvbnMudG90YWxTaXplO1xuICAgIHRoaXMuY3VyclNpemVQZXJQYWdlID0gY3VyclNpemVQZXJQYWdlO1xuICAgIHRoaXMuZGF0YUNoYW5nZUxpc3RlbmVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIHRoaXMuZGF0YUNoYW5nZUxpc3RlbmVyLm9uKFwiZmlsdGVyQ2hhbmdlZFwiLCB0aGlzLmhhbmRsZURhdGFTaXplQ2hhbmdlKTtcbiAgfVxuXG4gIGdldFBhZ2luYXRpb25Qcm9wcyA9ICgpID0+IHtcbiAgICBjb25zdCB7IGJvb3RzdHJhcDQsIHRhYmxlSWQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMucHJvcHMucGFnaW5hdGlvbiEub3B0aW9ucyE7XG4gICAgY29uc3QgeyBjdXJyUGFnZSwgY3VyclNpemVQZXJQYWdlIH0gPSB0aGlzO1xuICAgIGxldCBkYXRhU2l6ZTogbnVtYmVyO1xuICAgIGlmICh0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbigpKSB7XG4gICAgICBkYXRhU2l6ZSA9IG9wdGlvbnMudG90YWxTaXplITtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YVNpemUgPSB0aGlzLmRhdGFTaXplITtcbiAgICB9XG4gICAgY29uc3Qgd2l0aEZpcnN0QW5kTGFzdCA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucy53aXRoRmlyc3RBbmRMYXN0ID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgID8gQ29uc3QuV2l0aF9GSVJTVF9BTkRfTEFTVFxuICAgICAgICA6IG9wdGlvbnMud2l0aEZpcnN0QW5kTGFzdDtcbiAgICBjb25zdCBhbHdheXNTaG93QWxsQnRucyA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucy5hbHdheXNTaG93QWxsQnRucyA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IENvbnN0LlNIT1dfQUxMX1BBR0VfQlROU1xuICAgICAgICA6IG9wdGlvbnMuYWx3YXlzU2hvd0FsbEJ0bnM7XG4gICAgY29uc3QgaGlkZVNpemVQZXJQYWdlID1cbiAgICAgIHR5cGVvZiBvcHRpb25zLmhpZGVTaXplUGVyUGFnZSA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IENvbnN0LkhJREVfU0laRV9QRVJfUEFHRVxuICAgICAgICA6IG9wdGlvbnMuaGlkZVNpemVQZXJQYWdlO1xuICAgIGNvbnN0IGhpZGVQYWdlTGlzdE9ubHlPbmVQYWdlID1cbiAgICAgIHR5cGVvZiBvcHRpb25zLmhpZGVQYWdlTGlzdE9ubHlPbmVQYWdlID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgID8gQ29uc3QuSElERV9QQUdFX0xJU1RfT05MWV9PTkVfUEFHRVxuICAgICAgICA6IG9wdGlvbnMuaGlkZVBhZ2VMaXN0T25seU9uZVBhZ2U7XG4gICAgY29uc3QgcGFnZVN0YXJ0SW5kZXggPVxuICAgICAgdHlwZW9mIG9wdGlvbnMucGFnZVN0YXJ0SW5kZXggPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgPyBDb25zdC5QQUdFX1NUQVJUX0lOREVYXG4gICAgICAgIDogb3B0aW9ucy5wYWdlU3RhcnRJbmRleDtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGJvb3RzdHJhcDQsXG4gICAgICB0YWJsZUlkLFxuICAgICAgcGFnZTogY3VyclBhZ2UsXG4gICAgICBzaXplUGVyUGFnZTogY3VyclNpemVQZXJQYWdlLFxuICAgICAgcGFnZVN0YXJ0SW5kZXgsXG4gICAgICBoaWRlUGFnZUxpc3RPbmx5T25lUGFnZSxcbiAgICAgIGhpZGVTaXplUGVyUGFnZSxcbiAgICAgIGFsd2F5c1Nob3dBbGxCdG5zLFxuICAgICAgd2l0aEZpcnN0QW5kTGFzdCxcbiAgICAgIGRhdGFTaXplLFxuICAgICAgc2l6ZVBlclBhZ2VMaXN0OiBvcHRpb25zLnNpemVQZXJQYWdlTGlzdCB8fCBDb25zdC5TSVpFX1BFUl9QQUdFX0xJU1QsXG4gICAgICBwYWdpbmF0aW9uU2l6ZTogb3B0aW9ucy5wYWdpbmF0aW9uU2l6ZSB8fCBDb25zdC5QQUdJTkFUSU9OX1NJWkUsXG4gICAgICBzaG93VG90YWw6IG9wdGlvbnMuc2hvd1RvdGFsLFxuICAgICAgcGFnZUxpc3RSZW5kZXJlcjogb3B0aW9ucy5wYWdlTGlzdFJlbmRlcmVyLFxuICAgICAgcGFnZUJ1dHRvblJlbmRlcmVyOiBvcHRpb25zLnBhZ2VCdXR0b25SZW5kZXJlcixcbiAgICAgIHNpemVQZXJQYWdlUmVuZGVyZXI6IG9wdGlvbnMuc2l6ZVBlclBhZ2VSZW5kZXJlcixcbiAgICAgIHBhZ2luYXRpb25Ub3RhbFJlbmRlcmVyOiBvcHRpb25zLnBhZ2luYXRpb25Ub3RhbFJlbmRlcmVyLFxuICAgICAgc2l6ZVBlclBhZ2VPcHRpb25SZW5kZXJlcjogb3B0aW9ucy5zaXplUGVyUGFnZU9wdGlvblJlbmRlcmVyLFxuICAgICAgZmlyc3RQYWdlVGV4dDogb3B0aW9ucy5maXJzdFBhZ2VUZXh0IHx8IENvbnN0LkZJUlNUX1BBR0VfVEVYVCxcbiAgICAgIHByZVBhZ2VUZXh0OiBvcHRpb25zLnByZVBhZ2VUZXh0IHx8IENvbnN0LlBSRV9QQUdFX1RFWFQsXG4gICAgICBuZXh0UGFnZVRleHQ6IG9wdGlvbnMubmV4dFBhZ2VUZXh0IHx8IENvbnN0Lk5FWFRfUEFHRV9URVhULFxuICAgICAgbGFzdFBhZ2VUZXh0OiBvcHRpb25zLmxhc3RQYWdlVGV4dCB8fCBDb25zdC5MQVNUX1BBR0VfVEVYVCxcbiAgICAgIHByZVBhZ2VUaXRsZTogb3B0aW9ucy5wcmVQYWdlVGl0bGUgfHwgQ29uc3QuUFJFX1BBR0VfVElUTEUsXG4gICAgICBuZXh0UGFnZVRpdGxlOiBvcHRpb25zLm5leHRQYWdlVGl0bGUgfHwgQ29uc3QuTkVYVF9QQUdFX1RJVExFLFxuICAgICAgZmlyc3RQYWdlVGl0bGU6IG9wdGlvbnMuZmlyc3RQYWdlVGl0bGUgfHwgQ29uc3QuRklSU1RfUEFHRV9USVRMRSxcbiAgICAgIGxhc3RQYWdlVGl0bGU6IG9wdGlvbnMubGFzdFBhZ2VUaXRsZSB8fCBDb25zdC5MQVNUX1BBR0VfVElUTEUsXG4gICAgICBvblBhZ2VDaGFuZ2U6IHRoaXMuaGFuZGxlQ2hhbmdlUGFnZSxcbiAgICAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2U6IHRoaXMuaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2UsXG4gICAgfTtcbiAgfTtcblxuICBzZXRQYWdpbmF0aW9uUmVtb3RlRW1pdHRlciA9IChyZW1vdGVFbWl0dGVyOiBhbnkpID0+IHtcbiAgICB0aGlzLnJlbW90ZUVtaXR0ZXIgPSByZW1vdGVFbWl0dGVyO1xuICB9O1xuXG4gIGdldFBhZ2luYXRpb25SZW1vdGVFbWl0dGVyID0gKCkgPT5cbiAgICB0aGlzLnJlbW90ZUVtaXR0ZXIgfHwgdGhpcy5wcm9wcy5yZW1vdGVFbWl0dGVyO1xuXG4gIGNvbXBvbmVudERpZFVwZGF0ZShuZXh0UHJvcHM6IGFueSkge1xuICAgIGNvbnN0IHsgY3VzdG9tIH0gPSBuZXh0UHJvcHMucGFnaW5hdGlvbi5vcHRpb25zO1xuXG4gICAgLy8gdXNlciBzaG91bGQgYWxpZ24gdGhlIHBhZ2Ugd2hlbiB0aGUgcGFnZSBpcyBub3QgZml0IHRvIHRoZSBkYXRhIHNpemUgd2hlbiByZW1vdGUgZW5hYmxlXG4gICAgaWYgKHRoaXMuaXNSZW1vdGVQYWdpbmF0aW9uKCkgfHwgY3VzdG9tKSB7XG4gICAgICBpZiAodHlwZW9mIG5leHRQcm9wcy5wYWdpbmF0aW9uLm9wdGlvbnMucGFnZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAvLyB0aGlzLmN1cnJQYWdlID0gbmV4dFByb3BzLnBhZ2luYXRpb24ub3B0aW9ucy5wYWdlO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBuZXh0UHJvcHMucGFnaW5hdGlvbi5vcHRpb25zLnNpemVQZXJQYWdlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIC8vIHRoaXMuY3VyclNpemVQZXJQYWdlID0gbmV4dFByb3BzLnBhZ2luYXRpb24ub3B0aW9ucy5zaXplUGVyUGFnZTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgbmV4dFByb3BzLnBhZ2luYXRpb24ub3B0aW9ucy50b3RhbFNpemUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgLy8gdGhpcy5kYXRhU2l6ZSA9IG5leHRQcm9wcy5wYWdpbmF0aW9uLm9wdGlvbnMudG90YWxTaXplO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzUmVtb3RlUGFnaW5hdGlvbiA9ICgpID0+IHtcbiAgICBjb25zdCBlID0geyByZXN1bHQ6IHVuZGVmaW5lZCB9O1xuICAgIHRoaXMucmVtb3RlRW1pdHRlcj8uZW1pdChcImlzUmVtb3RlUGFnaW5hdGlvblwiLCBlKTtcbiAgICByZXR1cm4gZS5yZXN1bHQ7XG4gIH07XG5cbiAgaGFuZGxlRGF0YVNpemVDaGFuZ2UobmV3RGF0YVNpemU6IGFueSkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnByb3BzLnBhZ2luYXRpb24hLm9wdGlvbnMhO1xuICAgIGNvbnN0IHBhZ2VTdGFydEluZGV4ID1cbiAgICAgIHR5cGVvZiBvcHRpb25zLnBhZ2VTdGFydEluZGV4ID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgID8gQ29uc3QuUEFHRV9TVEFSVF9JTkRFWFxuICAgICAgICA6IG9wdGlvbnMucGFnZVN0YXJ0SW5kZXg7XG4gICAgdGhpcy5jdXJyUGFnZSA9IGFsaWduUGFnZShcbiAgICAgIG5ld0RhdGFTaXplLFxuICAgICAgdGhpcy5kYXRhU2l6ZSxcbiAgICAgIHRoaXMuY3VyclBhZ2UsXG4gICAgICB0aGlzLmN1cnJTaXplUGVyUGFnZSxcbiAgICAgIHBhZ2VTdGFydEluZGV4XG4gICAgKTtcbiAgICB0aGlzLmRhdGFTaXplID0gbmV3RGF0YVNpemU7XG4gICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICB9XG5cbiAgaGFuZGxlQ2hhbmdlUGFnZShjdXJyUGFnZTogYW55KSB7XG4gICAgY29uc3QgeyBjdXJyU2l6ZVBlclBhZ2UgfSA9IHRoaXM7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMucHJvcHMucGFnaW5hdGlvbiEub3B0aW9ucyE7XG5cbiAgICBpZiAob3B0aW9ucy5vblBhZ2VDaGFuZ2UpIHtcbiAgICAgIG9wdGlvbnMub25QYWdlQ2hhbmdlKGN1cnJQYWdlLCBjdXJyU2l6ZVBlclBhZ2UpO1xuICAgIH1cblxuICAgIHRoaXMuY3VyclBhZ2UgPSBjdXJyUGFnZTtcblxuICAgIGlmICh0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbigpKSB7XG4gICAgICB0aGlzLmdldFBhZ2luYXRpb25SZW1vdGVFbWl0dGVyKCkuZW1pdChcbiAgICAgICAgXCJwYWdpbmF0aW9uQ2hhbmdlXCIsXG4gICAgICAgIGN1cnJQYWdlLFxuICAgICAgICBjdXJyU2l6ZVBlclBhZ2VcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgfVxuXG4gIGhhbmRsZUNoYW5nZVNpemVQZXJQYWdlKGN1cnJTaXplUGVyUGFnZTogYW55LCBjdXJyUGFnZTogYW55KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMucHJvcHMucGFnaW5hdGlvbiEub3B0aW9ucyE7XG5cbiAgICBpZiAob3B0aW9ucy5vblNpemVQZXJQYWdlQ2hhbmdlKSB7XG4gICAgICBvcHRpb25zLm9uU2l6ZVBlclBhZ2VDaGFuZ2UoY3VyclNpemVQZXJQYWdlLCBjdXJyUGFnZSk7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyUGFnZSA9IGN1cnJQYWdlO1xuICAgIHRoaXMuY3VyclNpemVQZXJQYWdlID0gY3VyclNpemVQZXJQYWdlO1xuXG4gICAgaWYgKHRoaXMuaXNSZW1vdGVQYWdpbmF0aW9uKCkpIHtcbiAgICAgIHRoaXMuZ2V0UGFnaW5hdGlvblJlbW90ZUVtaXR0ZXIoKS5lbWl0KFxuICAgICAgICBcInBhZ2luYXRpb25DaGFuZ2VcIixcbiAgICAgICAgY3VyclBhZ2UsXG4gICAgICAgIGN1cnJTaXplUGVyUGFnZVxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHBhZ2luYXRpb25Qcm9wcyA9IHRoaXMuZ2V0UGFnaW5hdGlvblByb3BzKCk7XG4gICAgY29uc3QgcGFnaW5hdGlvbiA9IHtcbiAgICAgIC4uLnRoaXMucHJvcHMucGFnaW5hdGlvbixcbiAgICAgIG9wdGlvbnM6IHBhZ2luYXRpb25Qcm9wcyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTdGF0ZUNvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgdmFsdWU9e3tcbiAgICAgICAgICBwYWdpbmF0aW9uUHJvcHMsXG4gICAgICAgICAgcGFnaW5hdGlvblRhYmxlUHJvcHM6IHtcbiAgICAgICAgICAgIHBhZ2luYXRpb24sXG4gICAgICAgICAgICBzZXRQYWdpbmF0aW9uUmVtb3RlRW1pdHRlcjogdGhpcy5zZXRQYWdpbmF0aW9uUmVtb3RlRW1pdHRlcixcbiAgICAgICAgICAgIGRhdGFDaGFuZ2VMaXN0ZW5lcjogdGhpcy5kYXRhQ2hhbmdlTGlzdGVuZXIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICA8L1N0YXRlQ29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+ICh7XG4gIFByb3ZpZGVyOiBTdGF0ZVByb3ZpZGVyLFxuICBDb25zdW1lcjogU3RhdGVDb250ZXh0LkNvbnN1bWVyLFxufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzQ0Ml9fOyIsIi8qIVxuXHRDb3B5cmlnaHQgKGMpIDIwMTggSmVkIFdhdHNvbi5cblx0TGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWVcblx0aHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lc1xuKi9cbi8qIGdsb2JhbCBkZWZpbmUgKi9cblxuKGZ1bmN0aW9uICgpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuXHRmdW5jdGlvbiBjbGFzc05hbWVzICgpIHtcblx0XHR2YXIgY2xhc3NlcyA9ICcnO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoYXJnKSB7XG5cdFx0XHRcdGNsYXNzZXMgPSBhcHBlbmRDbGFzcyhjbGFzc2VzLCBwYXJzZVZhbHVlKGFyZykpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzO1xuXHR9XG5cblx0ZnVuY3Rpb24gcGFyc2VWYWx1ZSAoYXJnKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG5cdFx0XHRyZXR1cm4gYXJnO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgYXJnICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblxuXHRcdGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzLmFwcGx5KG51bGwsIGFyZyk7XG5cdFx0fVxuXG5cdFx0aWYgKGFyZy50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAmJiAhYXJnLnRvU3RyaW5nLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1tuYXRpdmUgY29kZV0nKSkge1xuXHRcdFx0cmV0dXJuIGFyZy50b1N0cmluZygpO1xuXHRcdH1cblxuXHRcdHZhciBjbGFzc2VzID0gJyc7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRpZiAoaGFzT3duLmNhbGwoYXJnLCBrZXkpICYmIGFyZ1trZXldKSB7XG5cdFx0XHRcdGNsYXNzZXMgPSBhcHBlbmRDbGFzcyhjbGFzc2VzLCBrZXkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzO1xuXHR9XG5cblx0ZnVuY3Rpb24gYXBwZW5kQ2xhc3MgKHZhbHVlLCBuZXdDbGFzcykge1xuXHRcdGlmICghbmV3Q2xhc3MpIHtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdFxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlICsgJyAnICsgbmV3Q2xhc3M7XG5cdFx0fVxuXHRcblx0XHRyZXR1cm4gdmFsdWUgKyBuZXdDbGFzcztcblx0fVxuXG5cdGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuXHRcdGNsYXNzTmFtZXMuZGVmYXVsdCA9IGNsYXNzTmFtZXM7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyByZWdpc3RlciBhcyAnY2xhc3NuYW1lcycsIGNvbnNpc3RlbnQgd2l0aCBucG0gcGFja2FnZSBuYW1lXG5cdFx0ZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lcztcblx0fVxufSgpKTtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTg3KTtcbiJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJyZXF1aXJlIiwiZGVmaW5lIiwiYW1kIiwic2VsZiIsIl9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzQ0Ml9fIiwiUmVmbGVjdE93bktleXMiLCJSIiwiUmVmbGVjdCIsIlJlZmxlY3RBcHBseSIsImFwcGx5IiwidGFyZ2V0IiwicmVjZWl2ZXIiLCJhcmdzIiwiRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJjYWxsIiwib3duS2V5cyIsIk9iamVjdCIsImdldE93blByb3BlcnR5U3ltYm9scyIsImdldE93blByb3BlcnR5TmFtZXMiLCJjb25jYXQiLCJOdW1iZXJJc05hTiIsIk51bWJlciIsImlzTmFOIiwidmFsdWUiLCJFdmVudEVtaXR0ZXIiLCJpbml0IiwidGhpcyIsIm9uY2UiLCJlbWl0dGVyIiwibmFtZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZXJyb3JMaXN0ZW5lciIsImVyciIsInJlbW92ZUxpc3RlbmVyIiwicmVzb2x2ZXIiLCJzbGljZSIsImFyZ3VtZW50cyIsImV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lciIsImhhbmRsZXIiLCJmbGFncyIsIm9uIiwiYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIiLCJfZXZlbnRzIiwidW5kZWZpbmVkIiwiX2V2ZW50c0NvdW50IiwiX21heExpc3RlbmVycyIsImRlZmF1bHRNYXhMaXN0ZW5lcnMiLCJjaGVja0xpc3RlbmVyIiwibGlzdGVuZXIiLCJUeXBlRXJyb3IiLCJfZ2V0TWF4TGlzdGVuZXJzIiwidGhhdCIsIl9hZGRMaXN0ZW5lciIsInR5cGUiLCJwcmVwZW5kIiwibSIsImV2ZW50cyIsImV4aXN0aW5nIiwid2FybmluZyIsImNyZWF0ZSIsIm5ld0xpc3RlbmVyIiwiZW1pdCIsInVuc2hpZnQiLCJwdXNoIiwibGVuZ3RoIiwid2FybmVkIiwidyIsIkVycm9yIiwiU3RyaW5nIiwiY291bnQiLCJjb25zb2xlIiwid2FybiIsIm9uY2VXcmFwcGVyIiwiZmlyZWQiLCJ3cmFwRm4iLCJfb25jZVdyYXAiLCJzdGF0ZSIsIndyYXBwZWQiLCJiaW5kIiwiX2xpc3RlbmVycyIsInVud3JhcCIsImV2bGlzdGVuZXIiLCJhcnIiLCJyZXQiLCJBcnJheSIsImkiLCJ1bndyYXBMaXN0ZW5lcnMiLCJhcnJheUNsb25lIiwibGlzdGVuZXJDb3VudCIsIm4iLCJjb3B5IiwiYWRkRXZlbnRMaXN0ZW5lciIsIndyYXBMaXN0ZW5lciIsImFyZyIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJzZXQiLCJSYW5nZUVycm9yIiwiZ2V0UHJvdG90eXBlT2YiLCJzZXRNYXhMaXN0ZW5lcnMiLCJnZXRNYXhMaXN0ZW5lcnMiLCJkb0Vycm9yIiwiZXJyb3IiLCJlciIsIm1lc3NhZ2UiLCJjb250ZXh0IiwibGVuIiwibGlzdGVuZXJzIiwiYWRkTGlzdGVuZXIiLCJwcmVwZW5kTGlzdGVuZXIiLCJwcmVwZW5kT25jZUxpc3RlbmVyIiwibGlzdCIsInBvc2l0aW9uIiwib3JpZ2luYWxMaXN0ZW5lciIsInNoaWZ0IiwiaW5kZXgiLCJwb3AiLCJzcGxpY2VPbmUiLCJvZmYiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJrZXkiLCJrZXlzIiwicmF3TGlzdGVuZXJzIiwiZXZlbnROYW1lcyIsIlBhZ2luYXRpb25MaXN0U3RhbmRhbG9uZSIsIlBhZ2luYXRpb25Ub3RhbFN0YW5kYWxvbmUiLCJTaXplUGVyUGFnZURyb3Bkb3duU3RhbmRhbG9uZSIsIm9wdGlvbnMiLCJjcmVhdGVDb250ZXh0IiwiUHJvdmlkZXIiLCJDb25zdW1lciIsIlBhZ2luYXRpb25Qcm92aWRlciIsInByb3BzIiwicGFnaW5hdGlvblByb3BzIiwiY2hpbGRyZW4iLCJQQUdJTkFUSU9OX1NJWkUiLCJQQUdFX1NUQVJUX0lOREVYIiwiV2l0aF9GSVJTVF9BTkRfTEFTVCIsIlNIT1dfQUxMX1BBR0VfQlROUyIsIlNIT1dfVE9UQUwiLCJQQUdJTkFUSU9OX1RPVEFMIiwiRklSU1RfUEFHRV9URVhUIiwiUFJFX1BBR0VfVEVYVCIsIk5FWFRfUEFHRV9URVhUIiwiTEFTVF9QQUdFX1RFWFQiLCJORVhUX1BBR0VfVElUTEUiLCJMQVNUX1BBR0VfVElUTEUiLCJQUkVfUEFHRV9USVRMRSIsIkZJUlNUX1BBR0VfVElUTEUiLCJTSVpFX1BFUl9QQUdFX0xJU1QiLCJISURFX1NJWkVfUEVSX1BBR0UiLCJISURFX1BBR0VfTElTVF9PTkxZX09ORV9QQUdFIiwiUGFnaW5hdGlvbkRhdGFDb250ZXh0IiwiUGFnaW5hdGlvbkRhdGFQcm92aWRlciIsImNvbXBvbmVudERpZFVwZGF0ZSIsIm5leHRQcm9wcyIsInN1cGVyIiwiY3VyclNpemVQZXJQYWdlIiwiY3VzdG9tIiwib25QYWdlQ2hhbmdlIiwicGFnaW5hdGlvbiIsInBhZ2VTdGFydEluZGV4IiwiaXNSZW1vdGVQYWdpbmF0aW9uIiwibmV3UGFnZSIsImFsaWduUGFnZSIsImRhdGEiLCJjdXJyUGFnZSIsIm9uRGF0YVNpemVDaGFuZ2UiLCJkYXRhU2l6ZSIsInJlbmRlckRlZmF1bHRQYWdpbmF0aW9uIiwicGFnZSIsInNpemVQZXJQYWdlIiwicmVzdCIsImdldFBhZ2luYXRpb25Qcm9wcyIsInJlbmRlciIsInRvdGFsUGFnZXMiLCJNYXRoIiwiZmxvb3IiLCJnZXRCeUN1cnJQYWdlIiwic2V0UmVtb3RlRW1pdHRlciIsInNldFBhZ2luYXRpb25SZW1vdGVFbWl0dGVyIiwiUGFnZUJ1dHRvbiIsIkNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwiaGFuZGxlQ2xpY2siLCJlIiwicHJldmVudERlZmF1bHQiLCJ0aXRsZSIsImFjdGl2ZSIsImRpc2FibGVkIiwiY2xhc3NOYW1lIiwiY2xhc3NlcyIsImhyZWYiLCJvbkNsaWNrIiwiRXh0ZW5kQmFzZSIsImJhY2tUb1ByZXZQYWdlIiwiaW5pdGlhbFN0YXRlIiwiY2FsY3VsYXRlVG90YWxQYWdlIiwibGFzdFBhZ2UiLCJjYWxjdWxhdGVMYXN0UGFnZSIsImNlaWwiLCJjYWxjdWxhdGVGcm9tVG8iLCJvZmZzZXQiLCJhYnMiLCJmcm9tIiwidG8iLCJtaW4iLCJjYWxjdWxhdGVQYWdlcyIsInBhZ2luYXRpb25TaXplIiwid2l0aEZpcnN0QW5kTGFzdCIsImZpcnN0UGFnZVRleHQiLCJwcmVQYWdlVGV4dCIsIm5leHRQYWdlVGV4dCIsImxhc3RQYWdlVGV4dCIsImFsd2F5c1Nob3dBbGxCdG5zIiwicGFnZXMiLCJlbmRQYWdlIiwic3RhcnRQYWdlIiwibWF4IiwiY2FsY3VsYXRlUGFnZVN0YXR1cyIsImRpc2FibGVQYWdlVGl0bGUiLCJpc1N0YXJ0IiwiaXNFbmQiLCJmaWx0ZXIiLCJtYXAiLCJuZXh0UGFnZVRpdGxlIiwicHJlUGFnZVRpdGxlIiwiZmlyc3RQYWdlVGl0bGUiLCJsYXN0UGFnZVRpdGxlIiwicGFnZVJlc3VsdCIsImNhbGN1bGF0ZVNpemVQZXJQYWdlU3RhdHVzIiwic2l6ZVBlclBhZ2VMaXN0IiwiX3NpemVQZXJQYWdlIiwidGV4dCIsImVuZEluZGV4IiwiZ2V0Tm9ybWFsaXplZFBhZ2UiLCJwcmV2RGF0YVNpemUiLCJlbmQiLCJzdGFydCIsInN0YXJ0SW5kZXgiLCJyZXN1bHQiLCJXcmFwcGVkQ29tcG9uZW50IiwiaGFuZGxlQ2hhbmdlUGFnZSIsImhhbmRsZUNoYW5nZVNpemVQZXJQYWdlIiwiY3VyclByb3BzIiwidG90YWxTaXplIiwic2V0U3RhdGUiLCJvblNpemVQZXJQYWdlQ2hhbmdlIiwic2VsZWN0ZWRTaXplIiwicGFyc2VJbnQiLCJuZXdUb3RhbFBhZ2VzIiwibmV3TGFzdFBhZ2UiLCJwYWdpbmF0aW9uTGlzdEFkYXB0ZXIiLCJwYWdlQnV0dG9uUmVuZGVyZXIiLCJoaWRlUGFnZUxpc3RPbmx5T25lUGFnZSIsIlBhZ2luYXRpb25MaXN0V2l0aEFkYXB0ZXIiLCJwYWdlUHJvcHMiLCJlbGVtZW50IiwiY2xvbmVFbGVtZW50IiwicGFnaW5hdGlvblRvdGFsQWRhcHRlciIsInBhZ2luYXRpb25Ub3RhbFJlbmRlcmVyIiwiUGFnaW5hdGlvblRvdGFsV2l0aEFkYXB0ZXIiLCJQYWdpbmF0aW9uIiwidGFibGVJZCIsInNob3dUb3RhbCIsInBhZ2VMaXN0UmVuZGVyZXIiLCJoaWRlU2l6ZVBlclBhZ2UiLCJzaXplUGVyUGFnZVJlbmRlcmVyIiwic2l6ZVBlclBhZ2VPcHRpb25SZW5kZXJlciIsImJvb3RzdHJhcDQiLCJib290c3RyYXA1IiwicGFnZUxpc3RDbGFzcyIsIlNpemVQZXJQYWdlRHJvcGRvd25XaXRoQWRhcHRlciIsInN0YXRpYyIsInNpemVQZXJQYWdlRHJvcGRvd25BZGFwdGVyIiwiZHJvcGRvd25PcGVuIiwiY2xvc2VEcm9wRG93biIsInRvZ2dsZURyb3BEb3duIiwib3BlbiIsIm9wdGlvblJlbmRlcmVyIiwib25CbHVyIiwic2l6ZVBlclBhZ2VEcm9wRG93bkRlZmF1bHRQcm9wcyIsImhpZGRlbiIsImJ0bkNvbnRleHR1YWwiLCJ2YXJpYXRpb24iLCJvcGVuQ2xhc3MiLCJkcm9wZG93bkNsYXNzZXMiLCJpZCIsInN0eWxlIiwidmlzaWJpbGl0eSIsInJvbGUiLCJvcHRpb24iLCJ0YWJJbmRleCIsIm9uTW91c2VEb3duIiwiU3RhdGVDb250ZXh0IiwiU3RhdGVQcm92aWRlciIsImRhdGFDaGFuZ2VMaXN0ZW5lciIsInJlbW90ZUVtaXR0ZXIiLCJoYW5kbGVEYXRhU2l6ZUNoYW5nZSIsImdldFBhZ2luYXRpb25SZW1vdGVFbWl0dGVyIiwibmV3RGF0YVNpemUiLCJmb3JjZVVwZGF0ZSIsInBhZ2luYXRpb25UYWJsZVByb3BzIiwiaGFzT3duIiwiaGFzT3duUHJvcGVydHkiLCJjbGFzc05hbWVzIiwiYXBwZW5kQ2xhc3MiLCJwYXJzZVZhbHVlIiwiaXNBcnJheSIsInRvU3RyaW5nIiwiaW5jbHVkZXMiLCJuZXdDbGFzcyIsImRlZmF1bHQiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIl0sInNvdXJjZVJvb3QiOiIifQ==
2
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define(["react"],t):"object"==typeof exports?exports.ReactBootstrapTableNgPaginator=t(require("react")):e.ReactBootstrapTableNgPaginator=t(e.React)}(self,e=>{return t={7(e){"use strict";var t,a="object"==typeof Reflect?Reflect:null,n=a&&"function"==typeof a.apply?a.apply:function(e,t,a){return Function.prototype.apply.call(e,t,a)};t=a&&"function"==typeof a.ownKeys?a.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var r=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(a,n){function r(a){e.removeListener(t,i),n(a)}function i(){"function"==typeof e.removeListener&&e.removeListener("error",r),a([].slice.call(arguments))}p(e,t,i,{once:!0}),"error"!==t&&function(e,t,a){"function"==typeof e.on&&p(e,"error",t,a)}(e,r,{once:!0})})},i.EventEmitter=i,i.prototype._events=void 0,i.prototype._eventsCount=0,i.prototype._maxListeners=void 0;var o=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,a,n){var r,i,o,u;if(s(a),void 0===(i=e._events)?(i=e._events=Object.create(null),e._eventsCount=0):(void 0!==i.newListener&&(e.emit("newListener",t,a.listener?a.listener:a),i=e._events),o=i[t]),void 0===o)o=i[t]=a,++e._eventsCount;else if("function"==typeof o?o=i[t]=n?[a,o]:[o,a]:n?o.unshift(a):o.push(a),(r=l(e))>0&&o.length>r&&!o.warned){o.warned=!0;var g=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");g.name="MaxListenersExceededWarning",g.emitter=e,g.type=t,g.count=o.length,u=g,console&&console.warn&&console.warn(u)}return e}function g(){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,a){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:a},r=g.bind(n);return r.listener=a,n.wrapFn=r,r}function P(e,t,a){var n=e._events;if(void 0===n)return[];var r=n[t];return void 0===r?[]:"function"==typeof r?a?[r.listener||r]:[r]:a?function(e){for(var t=new Array(e.length),a=0;a<t.length;++a)t[a]=e[a].listener||e[a];return t}(r):c(r,r.length)}function f(e){var t=this._events;if(void 0!==t){var a=t[e];if("function"==typeof a)return 1;if(void 0!==a)return a.length}return 0}function c(e,t){for(var a=new Array(t),n=0;n<t;++n)a[n]=e[n];return a}function p(e,t,a,n){if("function"==typeof e.on)n.once?e.once(t,a):e.on(t,a);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 r(i){n.once&&e.removeEventListener(t,r),a(i)})}}Object.defineProperty(i,"defaultMaxListeners",{enumerable:!0,get:function(){return o},set:function(e){if("number"!=typeof e||e<0||r(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");o=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||r(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=[],a=1;a<arguments.length;a++)t.push(arguments[a]);var r="error"===e,i=this._events;if(void 0!==i)r=r&&void 0===i.error;else if(!r)return!1;if(r){var o;if(t.length>0&&(o=t[0]),o instanceof Error)throw o;var s=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw s.context=o,s}var l=i[e];if(void 0===l)return!1;if("function"==typeof l)n(l,this,t);else{var u=l.length,g=c(l,u);for(a=0;a<u;++a)n(g[a],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 a,n,r,i,o;if(s(t),void 0===(n=this._events))return this;if(void 0===(a=n[e]))return this;if(a===t||a.listener===t)0===--this._eventsCount?this._events=Object.create(null):(delete n[e],n.removeListener&&this.emit("removeListener",e,a.listener||t));else if("function"!=typeof a){for(r=-1,i=a.length-1;i>=0;i--)if(a[i]===t||a[i].listener===t){o=a[i].listener,r=i;break}if(r<0)return this;0===r?a.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(a,r),1===a.length&&(n[e]=a[0]),void 0!==n.removeListener&&this.emit("removeListener",e,o||t)}return this},i.prototype.off=i.prototype.removeListener,i.prototype.removeAllListeners=function(e){var t,a,n;if(void 0===(a=this._events))return this;if(void 0===a.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==a[e]&&(0===--this._eventsCount?this._events=Object.create(null):delete a[e]),this;if(0===arguments.length){var r,i=Object.keys(a);for(n=0;n<i.length;++n)"removeListener"!==(r=i[n])&&this.removeAllListeners(r);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=a[e]))this.removeListener(e,t);else if(void 0!==t)for(n=t.length-1;n>=0;n--)this.removeListener(e,t[n]);return this},i.prototype.listeners=function(e){return P(this,e,!0)},i.prototype.rawListeners=function(e){return P(this,e,!1)},i.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):f.call(e,t)},i.prototype.listenerCount=f,i.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},987(e,t,a){"use strict";var n,r=this&&this.__createBinding||(Object.create?function(e,t,a,n){void 0===n&&(n=a);var r=Object.getOwnPropertyDescriptor(t,a);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,n,r)}:function(e,t,a,n){void 0===n&&(n=a),e[n]=t[a]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[t.length]=a);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a=n(e),o=0;o<a.length;o++)"default"!==a[o]&&r(t,e,a[o]);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.SizePerPageDropdownStandalone=t.PaginationTotalStandalone=t.PaginationListStandalone=t.PaginationProvider=void 0;const l=s(a(442)),u=s(a(320)),g=s(a(657));t.PaginationListStandalone=g.default;const d=s(a(991));t.PaginationTotalStandalone=d.default;const P=s(a(429));t.SizePerPageDropdownStandalone=P.default;const f=o(a(973));t.default=(e={})=>({createContext:u.default,options:e});const{Provider:c}=(0,f.default)();t.PaginationProvider=e=>l.default.createElement(c,{...e},l.default.createElement(f.StateContext.Consumer,null,t=>e.children(t)))},971(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={PAGINATION_SIZE:5,PAGE_START_INDEX:1,With_FIRST_AND_LAST:!0,SHOW_ALL_PAGE_BTNS:!1,SHOW_TOTAL:!1,PAGINATION_TOTAL:null,FIRST_PAGE_TEXT:"<<",PRE_PAGE_TEXT:"<",NEXT_PAGE_TEXT:">",LAST_PAGE_TEXT:">>",NEXT_PAGE_TITLE:"next page",LAST_PAGE_TITLE:"last page",PRE_PAGE_TITLE:"previous page",FIRST_PAGE_TITLE:"first page",SIZE_PER_PAGE_LIST:[10,25,30,50],HIDE_SIZE_PER_PAGE:!1,HIDE_PAGE_LIST_ONLY_ONE_PAGE:!1}},320(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=n(a(971)),o=a(933),s=n(a(38)),l=a(323),u=r.default.createContext(null),g=r.default.forwardRef((e,t)=>{const{data:a,pagination:n,onDataSizeChange:g,children:d}=e,{currPage:P,setCurrPage:f,currSizePerPage:c,getPaginationProps:p,isRemotePagination:h,remoteEmitterRef:_}=(0,l.usePaginationState)(e);r.default.useImperativeHandle(t,()=>({currPage:P,currSizePerPage:c}));const T=r.default.useRef(a.length);r.default.useEffect(()=>{const e=n.options,{custom:t,onPageChange:r}=e,s=void 0!==e.pageStartIndex?e.pageStartIndex:i.default.PAGE_START_INDEX;if(!h()&&!t){const e=(0,o.alignPage)(a.length,T.current,P,c,s);P!==e&&(r&&r(e,c),f(e))}g&&a.length!==T.current&&g({dataSize:T.current}),T.current=a.length},[a.length,n,g,P,c,h,f]);const v=n.options,S=v.sizePerPage??c,m=void 0===v.pageStartIndex?i.default.PAGE_START_INDEX:v.pageStartIndex;let E=a,b=v.page??P;if(!h()&&E.length<=(b-1)*S){const e=Math.floor(E.length/S)+1;b=b>e?e:P}const y=h()?E:(0,o.getByCurrPage)(E,b,S,m);return r.default.createElement(u.Provider,{value:{data:y,setRemoteEmitter:e=>{_.current=e}}},d,(()=>{if(!v.custom){const{page:e,sizePerPage:t,dataSize:n,...i}=p();return r.default.createElement(s.default,{...i,key:"pagination",dataSize:n||a.length,currPage:e,currSizePerPage:t})}return null})())});t.default=()=>({Provider:g,Consumer:u.Consumer})},464(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.usePagination=void 0;const r=a(442),i=n(a(971));t.usePagination=e=>{const{currPage:t,currSizePerPage:a,dataSize:n,pageStartIndex:o,paginationSize:s,withFirstAndLast:l,firstPageText:u,prePageText:g,nextPageText:d,lastPageText:P,alwaysShowAllBtns:f,sizePerPageList:c,onPageChange:p,onSizePerPageChange:h,nextPageTitle:_=i.default.NEXT_PAGE_TITLE,prePageTitle:T=i.default.PRE_PAGE_TITLE,firstPageTitle:v=i.default.FIRST_PAGE_TITLE,lastPageTitle:S=i.default.LAST_PAGE_TITLE,disablePageTitle:m=!1}=e,E=(0,r.useMemo)(()=>Math.ceil(n/a),[n,a]),b=(0,r.useMemo)(()=>o+E-1,[o,E]),y=(0,r.useCallback)(()=>t-1<o?o:t-1,[t,o]),x=(0,r.useCallback)(()=>{let e=[],a=E;if(a<=0)return[];let n=Math.max(t-Math.floor(s/2),o);a=n+s-1,a>b&&(a=b,n=a-s+1),f||n!==o&&E>s?l?(e.push({type:"first",page:u}),e.push({type:"pre",page:g})):e.push({type:"pre",page:g}):E>1&&0===e.length&&e.push({type:"pre",page:g});for(let t=n;t<=a;t+=1)t>=o&&e.push({type:"page",page:t});return(f||a<=b&&e.length>1)&&e.push({type:"next",page:d}),l&&(f||a<=b&&e.length>1)&&e.push({type:"last",page:P}),e},[t,s,o,l,u,g,d,P,f,E,b]),A=(0,r.useCallback)(()=>{const e=x(),a=e=>t===o&&("first"===e.type||"pre"===e.type),n=e=>t===b&&("next"===e.type||"last"===e.type);return e.filter(e=>!!f||!(a(e)||n(e))).map(e=>{let r;const i=e.page===t,o=a(e)||n(e);r="next"===e.type?_:"pre"===e.type?T:"first"===e.type?v:"last"===e.type?S:`${e.page}`;const s={page:e.page,active:i,disabled:o,title:r};return m||(s.title=r),s})},[x,t,o,u,g,d,P,f,b,_,T,v,S,m]),z=(0,r.useCallback)(e=>{let n;n=e===g?y():e===d?t+1>b?b:t+1:e===P?b:e===u?o:parseInt(e,10),n!==t&&p(n,a)},[y,t,o,g,d,P,u,p,b]),L=(0,r.useCallback)(e=>{const r="string"==typeof e?parseInt(e,10):e;let i=t;if(r!==a){const e=Math.ceil(n/r),t=o+e-1;i>t&&(i=t),h&&h(r,i)}},[t,a,n,o,h]),w=(0,r.useCallback)(()=>c.map(e=>({text:`${void 0!==e.text?e.text:e}`,page:void 0!==e.value?e.value:e})),[c]),C=(0,r.useMemo)(()=>{const e=Math.abs(i.default.PAGE_START_INDEX-o);let r=(t-o)*a;r=0===n?0:r+1;let s=Math.min(a*(t+e),n);return s>n&&(s=n),[r,s]},[n,t,a,o]);return{totalPages:E,lastPage:b,getPageStatus:A,handleChangePage:z,handleChangeSizePerPage:L,getSizePerPageStatus:w,fromTo:C}}},323(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.usePaginationState=void 0;const r=a(442),i=n(a(7)),o=n(a(971)),s=a(933);t.usePaginationState=e=>{const{pagination:t,bootstrap4:a,tableId:n,remoteEmitter:l}=e,u=t.options,g=u.sizePerPageList||o.default.SIZE_PER_PAGE_LIST,[d,P]=(0,r.useState)(()=>void 0!==u.page?u.page:void 0!==u.pageStartIndex?u.pageStartIndex:o.default.PAGE_START_INDEX),[f,c]=(0,r.useState)(()=>void 0!==u.sizePerPage?u.sizePerPage:"object"==typeof g[0]?g[0].value:g[0]),[p,h]=(0,r.useState)(u.totalSize),_=(0,r.useRef)(new i.default),T=(0,r.useRef)(null),v=(0,r.useRef)(e.isRemotePagination),S=(0,r.useRef)(l);(0,r.useLayoutEffect)(()=>{v.current=e.isRemotePagination,S.current=l});const m=(0,r.useCallback)(()=>{if("function"==typeof v.current)return v.current();const e={result:void 0},t=T.current||S.current;return t?.emit("isRemotePagination",e),e.result},[]),E=(0,r.useCallback)(e=>{const t=void 0===u.pageStartIndex?o.default.PAGE_START_INDEX:u.pageStartIndex;P(a=>(0,s.alignPage)(e,p,a,f,t)),h(e)},[u.pageStartIndex,p,f]);(0,r.useEffect)(()=>{const e=_.current;return e.on("filterChanged",E),()=>{e.off("filterChanged",E)}},[E]);const b=(0,r.useCallback)(e=>{if(u.onPageChange&&u.onPageChange(e,f),P(e),m()){const t=T.current||l;t?.emit("paginationChange",e,f)}},[u,f,m,l]),y=(0,r.useCallback)((e,t)=>{if(u.onSizePerPageChange&&u.onSizePerPageChange(e,t),P(t),c(e),m()){const a=T.current||l;a?.emit("paginationChange",t,e)}},[u,m,l]),x=(0,r.useCallback)(()=>{const e=m()?u.totalSize:p,t=void 0===u.withFirstAndLast?o.default.With_FIRST_AND_LAST:u.withFirstAndLast,r=void 0===u.alwaysShowAllBtns?o.default.SHOW_ALL_PAGE_BTNS:u.alwaysShowAllBtns,i=void 0===u.hideSizePerPage?o.default.HIDE_SIZE_PER_PAGE:u.hideSizePerPage,s=void 0===u.hidePageListOnlyOnePage?o.default.HIDE_PAGE_LIST_ONLY_ONE_PAGE:u.hidePageListOnlyOnePage,l=void 0===u.pageStartIndex?o.default.PAGE_START_INDEX:u.pageStartIndex;return{...u,bootstrap4:a,tableId:n,page:u.page??d,sizePerPage:f,pageStartIndex:l,hidePageListOnlyOnePage:s,hideSizePerPage:i,alwaysShowAllBtns:r,withFirstAndLast:t,totalSize:e,dataSize:e,sizePerPageList:g,paginationSize:u.paginationSize||o.default.PAGINATION_SIZE,showTotal:u.showTotal,pageListRenderer:u.pageListRenderer,pageButtonRenderer:u.pageButtonRenderer,sizePerPageRenderer:u.sizePerPageRenderer,paginationTotalRenderer:u.paginationTotalRenderer,sizePerPageOptionRenderer:u.sizePerPageOptionRenderer,firstPageText:u.firstPageText||o.default.FIRST_PAGE_TEXT,prePageText:u.prePageText||o.default.PRE_PAGE_TEXT,nextPageText:u.nextPageText||o.default.NEXT_PAGE_TEXT,lastPageText:u.lastPageText||o.default.LAST_PAGE_TEXT,prePageTitle:u.prePageTitle||o.default.PRE_PAGE_TITLE,nextPageTitle:u.nextPageTitle||o.default.NEXT_PAGE_TITLE,firstPageTitle:u.firstPageTitle||o.default.FIRST_PAGE_TITLE,lastPageTitle:u.lastPageTitle||o.default.LAST_PAGE_TITLE,onPageChange:b,onSizePerPageChange:y}},[m,u,p,a,n,d,f,g,b,y]);return{currPage:d,setCurrPage:P,currSizePerPage:f,setCurrSizePerPage:c,dataSize:p,setDataSize:h,dataChangeListener:_.current,remoteEmitterRef:T,isRemotePagination:m,handleChangePage:b,handleChangeSizePerPage:y,getPaginationProps:x}}},374(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(942)),i=n(a(442)),o=i.default.memo(e=>{const{page:t,title:a,active:n,disabled:o,className:s,onPageChange:l}=e,u=(0,r.default)({active:n,disabled:o,"page-item":!0},s);return i.default.createElement("li",{className:u,title:a},i.default.createElement("a",{href:"#",onClick:e=>{e.preventDefault(),l(t)},className:"page-link"},t))});t.default=o},933(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getByCurrPage=t.alignPage=void 0;const r=n(a(971)),i=(e,t,a)=>((e,t)=>e+Math.abs(1-t))(e,a)*t-1;t.alignPage=(e,t,a,n,i)=>t<e?a:a<i||e<=0?i:a>=Math.floor(e/n)+i&&1===i?Math.ceil(e/n):a>=Math.floor(e/n)&&0===i?Math.ceil(e/n)-Math.abs(r.default.PAGE_START_INDEX-i):a,t.getByCurrPage=(e,t,a,n)=>{const r=e.length;if(!r)return[];const o=i(t,a,n),s=((e,t)=>e-(t-1))(o,a),l=[];for(let t=s;t<=o&&(l.push(e[t]),t+1!==r);t+=1);return l}},881(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=a(464);t.default=e=>t=>{const{currPage:a,currSizePerPage:n,dataSize:o,totalSize:s,pageStartIndex:l,paginationSize:u,withFirstAndLast:g,firstPageText:d,prePageText:P,nextPageText:f,lastPageText:c,alwaysShowAllBtns:p,onPageChange:h,onSizePerPageChange:_}=t,{totalPages:T,lastPage:v,handleChangePage:S,handleChangeSizePerPage:m}=(0,i.usePagination)({currPage:a,currSizePerPage:n,dataSize:s??o,pageStartIndex:l,paginationSize:u,withFirstAndLast:g,firstPageText:d,prePageText:P,nextPageText:f,lastPageText:c,alwaysShowAllBtns:p,onPageChange:h,onSizePerPageChange:_});return r.default.createElement(e,{...t,lastPage:v,totalPages:T,onPageChange:S,onSizePerPageChange:m})}},147(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.PaginationListWithAdapter=void 0;const r=n(a(442)),i=a(464),o=n(a(285)),s=e=>t=>{const{lastPage:a,totalPages:n,pageButtonRenderer:o,onPageChange:s,disablePageTitle:l,hidePageListOnlyOnePage:u,currPage:g,currSizePerPage:d,dataSize:P,pageStartIndex:f,paginationSize:c,withFirstAndLast:p,alwaysShowAllBtns:h,firstPageText:_,prePageText:T,nextPageText:v,lastPageText:S,nextPageTitle:m,prePageTitle:E,firstPageTitle:b,lastPageTitle:y}=t,{getPageStatus:x}=(0,i.usePagination)({currPage:g,currSizePerPage:d,dataSize:P,pageStartIndex:f,paginationSize:c,withFirstAndLast:p,alwaysShowAllBtns:h,firstPageText:_,prePageText:T,nextPageText:v,lastPageText:S,sizePerPageList:t.sizePerPageList||[],onPageChange:s,nextPageTitle:m,prePageTitle:E,firstPageTitle:b,lastPageTitle:y,disablePageTitle:l}),A=x();return 1===n&&u?null:r.default.createElement(e,{pageButtonRenderer:o,onPageChange:s,pages:A})};t.PaginationListWithAdapter=s(o.default),t.default=s},657(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=n(a(881)),o=n(a(285)),s=n(a(147)),l=n(a(885));t.default=(0,l.default)((0,i.default)((0,s.default)(e=>r.default.createElement(o.default,{...e}))))},285(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=n(a(374));t.default=e=>r.default.createElement("ul",{className:"pagination react-bootstrap-table-page-btns-ul"},e.pages.map(t=>{if(e.pageButtonRenderer){const a=e.pageButtonRenderer({...t,onPageChange:e.onPageChange});return a?r.default.cloneElement(a,{key:t.page}):null}return r.default.createElement(i.default,{key:t.page,...t,onPageChange:e.onPageChange})}))},681(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.PaginationTotalWithAdapter=void 0;const r=n(a(442)),i=a(464),o=n(a(519)),s=e=>t=>{const{currPage:a,currSizePerPage:n,pageStartIndex:o,dataSize:s,paginationTotalRenderer:l,paginationSize:u=5,withFirstAndLast:g=!0,alwaysShowAllBtns:d=!1,firstPageText:P="<<",prePageText:f="<",nextPageText:c=">",lastPageText:p=">>",onPageChange:h=()=>{}}=t,{fromTo:_}=(0,i.usePagination)({currPage:a,currSizePerPage:n,dataSize:s,pageStartIndex:o,paginationSize:u,withFirstAndLast:g,alwaysShowAllBtns:d,firstPageText:P,prePageText:f,nextPageText:c,lastPageText:p,sizePerPageList:t.sizePerPageList||[],onPageChange:h}),[T,v]=_;return r.default.createElement(e,{from:T,to:v,dataSize:s,paginationTotalRenderer:l})};t.PaginationTotalWithAdapter=s(o.default),t.default=s},991(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=n(a(519)),o=n(a(681)),s=n(a(885));t.default=(0,s.default)((0,o.default)(e=>r.default.createElement(i.default,{...e})))},519(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442));t.default=e=>e.paginationTotalRenderer?e.paginationTotalRenderer(e.from,e.to,e.dataSize):r.default.createElement("span",{className:"react-bootstrap-table-pagination-total"}," Showing rows ",e.from," to ",e.to," of ",e.dataSize)},38(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(942)),i=n(a(442)),o=n(a(971)),s=a(147),l=a(681),u=a(527),g=a(464);t.default=e=>{const{tableId:t,currPage:a,pageStartIndex:n=o.default.PAGE_START_INDEX,showTotal:d=o.default.SHOW_TOTAL,dataSize:P,pageListRenderer:f=null,pageButtonRenderer:c=null,paginationTotalRenderer:p=o.default.PAGINATION_TOTAL,hidePageListOnlyOnePage:h=o.default.HIDE_PAGE_LIST_ONLY_ONE_PAGE,onPageChange:_,sizePerPageList:T=o.default.SIZE_PER_PAGE_LIST,currSizePerPage:v,hideSizePerPage:S=o.default.HIDE_SIZE_PER_PAGE,sizePerPageRenderer:m=null,sizePerPageOptionRenderer:E=null,onSizePerPageChange:b,bootstrap4:y=!1,bootstrap5:x=!1,disablePageTitle:A=!1,paginationSize:z=o.default.PAGINATION_SIZE,withFirstAndLast:L=o.default.With_FIRST_AND_LAST,alwaysShowAllBtns:w=o.default.SHOW_ALL_PAGE_BTNS,firstPageText:C=o.default.FIRST_PAGE_TEXT,prePageText:I=o.default.PRE_PAGE_TEXT,nextPageText:O=o.default.NEXT_PAGE_TEXT,lastPageText:R=o.default.LAST_PAGE_TEXT,nextPageTitle:M=o.default.NEXT_PAGE_TITLE,prePageTitle:N=o.default.PRE_PAGE_TITLE,firstPageTitle:j=o.default.FIRST_PAGE_TITLE,lastPageTitle:D=o.default.LAST_PAGE_TITLE,...G}=e,{totalPages:B,lastPage:F,getPageStatus:k,handleChangePage:X,handleChangeSizePerPage:W}=(0,g.usePagination)({currPage:a,currSizePerPage:v,dataSize:P,pageStartIndex:n,paginationSize:z,withFirstAndLast:L,firstPageText:C,prePageText:I,nextPageText:O,lastPageText:R,alwaysShowAllBtns:w,sizePerPageList:T,onPageChange:_,onSizePerPageChange:b,nextPageTitle:M,prePageTitle:N,firstPageTitle:j,lastPageTitle:D,disablePageTitle:A}),H=k(),Z=(0,r.default)("react-bootstrap-table-pagination-list","col-md-6 col-xs-6 col-6 col-sm-6 col-lg-6",{"react-bootstrap-table-pagination-list-hidden":h&&1===B});return i.default.createElement("div",{className:"row react-bootstrap-table-pagination"},i.default.createElement("div",{className:"col-md-6 col-xs-6 col-6 col-sm-6 col-lg-6"},i.default.createElement(u.SizePerPageDropdownWithAdapter,{bootstrap4:y,bootstrap5:x,tableId:t,sizePerPageList:T,currSizePerPage:v,hideSizePerPage:S,sizePerPageRenderer:m,sizePerPageOptionRenderer:E,onSizePerPageChange:W}),d?i.default.createElement(l.PaginationTotalWithAdapter,{currPage:a,currSizePerPage:v,pageStartIndex:n,dataSize:P,paginationTotalRenderer:p}):null),f?f({pages:H,onPageChange:X}):i.default.createElement("div",{className:Z},i.default.createElement(s.PaginationListWithAdapter,{...G,currPage:a,currSizePerPage:v,dataSize:P,pageStartIndex:n,lastPage:F,totalPages:B,pageButtonRenderer:c,onPageChange:X,paginationSize:z,withFirstAndLast:L,firstPageText:C,prePageText:I,nextPageText:O,lastPageText:R,alwaysShowAllBtns:w})))}},527(e,t,a){"use strict";var n,r=this&&this.__createBinding||(Object.create?function(e,t,a,n){void 0===n&&(n=a);var r=Object.getOwnPropertyDescriptor(t,a);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,n,r)}:function(e,t,a,n){void 0===n&&(n=a),e[n]=t[a]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[t.length]=a);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a=n(e),o=0;o<a.length;o++)"default"!==a[o]&&r(t,e,a[o]);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.SizePerPageDropdownWithAdapter=void 0;const l=o(a(442)),u=a(464),g=s(a(609)),d=e=>t=>{const{tableId:a,bootstrap4:n,bootstrap5:r,sizePerPageList:i,currSizePerPage:o,hideSizePerPage:s,sizePerPageRenderer:g,sizePerPageOptionRenderer:d,onSizePerPageChange:P,currPage:f=1,dataSize:c=0,pageStartIndex:p=1,paginationSize:h=5,withFirstAndLast:_=!0,alwaysShowAllBtns:T=!1,firstPageText:v="<<",prePageText:S="<",nextPageText:m=">",lastPageText:E=">>",onPageChange:b=()=>{}}=t,[y,x]=(0,l.useState)(!1),{getSizePerPageStatus:A,handleChangeSizePerPage:z}=(0,u.usePagination)({currPage:f,currSizePerPage:o,dataSize:c,pageStartIndex:p,paginationSize:h,withFirstAndLast:_,alwaysShowAllBtns:T,firstPageText:v,prePageText:S,nextPageText:m,lastPageText:E,sizePerPageList:i,onPageChange:b,onSizePerPageChange:P}),L=(0,l.useCallback)(()=>{x(e=>!e)},[]),w=(0,l.useCallback)(()=>{x(!1)},[]),C=(0,l.useCallback)(e=>{z(e),w()},[z,w]);if(i.length>1&&!s){const i=A();return g?g({options:i,currSizePerPage:`${o}`,onSizePerPageChange:C}):l.default.createElement(e,{...t,currSizePerPage:`${o}`,options:i,optionRenderer:d,onSizePerPageChange:C,onClick:L,onBlur:w,open:y,tableId:a,bootstrap4:n,bootstrap5:r})}return null};t.SizePerPageDropdownWithAdapter=d(g.default),t.default=d},429(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=n(a(881)),o=n(a(609)),s=n(a(527)),l=n(a(885));t.default=(0,l.default)((0,i.default)((0,s.default)(e=>r.default.createElement(o.default,{...e}))))},609(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(942)),i=n(a(442)),o=n(a(869)),s={open:!1,hidden:!1,btnContextual:"btn-default btn-secondary",variation:"dropdown",className:"",optionRenderer:null,bootstrap4:!1,bootstrap5:!1,tableId:null};t.default=e=>{const{open:t,tableId:a,hidden:n,onClick:l,onBlur:u,options:g,className:d,variation:P,bootstrap4:f,bootstrap5:c,btnContextual:p,optionRenderer:h,currSizePerPage:_,onSizePerPageChange:T}={...s,...e},v=t?"open show":"",S=(0,r.default)(v,"react-bs-table-sizePerPage-dropdown",P,d),m=i.default.useId(),E=a?`${a}-pageDropDown`:`pageDropDown-${m}`;return i.default.createElement("span",{style:{visibility:n?"hidden":"visible"},className:S,"data-testid":"size-per-page-dropdown"},i.default.createElement("button",{id:E,type:"button",className:`btn ${p} dropdown-toggle`,"data-toggle":c?void 0:"dropdown","data-bs-toggle":c?"dropdown":void 0,"aria-expanded":t,onClick:l,onBlur:u},_," ",f||c?null:i.default.createElement("span",null,i.default.createElement("span",{className:"caret"}))),i.default.createElement("ul",{className:`dropdown-menu ${v}`,role:"menu","aria-labelledby":E},g.map(e=>h?h({...e,onSizePerPageChange:T}):i.default.createElement(o.default,{...e,key:e.text,bootstrap4:f,bootstrap5:c,onSizePerPageChange:T}))))}},869(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442));t.default=({text:e,page:t,onSizePerPageChange:a,bootstrap4:n=!1,bootstrap5:i=!1})=>n||i?r.default.createElement("a",{href:"#",tabIndex:-1,role:"menuitem",className:"dropdown-item","data-page":t,onMouseDown:e=>{e.preventDefault(),a(t)},onClick:e=>{e.preventDefault()}},e):r.default.createElement("li",{key:e,role:"presentation",className:"dropdown-item"},r.default.createElement("a",{href:"#",tabIndex:-1,role:"menuitem","data-page":t,onMouseDown:e=>{e.preventDefault(),a(t)},onClick:e=>{e.preventDefault()}},e))},885(e,t,a){"use strict";var n,r=this&&this.__createBinding||(Object.create?function(e,t,a,n){void 0===n&&(n=a);var r=Object.getOwnPropertyDescriptor(t,a);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,n,r)}:function(e,t,a,n){void 0===n&&(n=a),e[n]=t[a]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[t.length]=a);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a=n(e),o=0;o<a.length;o++)"default"!==a[o]&&r(t,e,a[o]);return i(t,e),t});Object.defineProperty(t,"__esModule",{value:!0});const s=o(a(442)),l=a(973);t.default=e=>t=>{const a=(0,s.useContext)(l.StateContext),n=a?a.paginationProps:{},{page:r,sizePerPage:i,...o}=t;return s.default.createElement(e,{...n,...o,currPage:r??n.page,currSizePerPage:i??n.sizePerPage})}},973(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.StateContext=void 0;const r=n(a(442)),i=a(323),o=r.default.createContext(null);t.StateContext=o;const s=e=>{const{pagination:t,children:a}=e,{dataChangeListener:n,remoteEmitterRef:s,getPaginationProps:l}=(0,i.usePaginationState)(e),u=l(),g=r.default.useMemo(()=>({...t,options:u}),[t,u]);return r.default.createElement(o.Provider,{value:{paginationProps:u,paginationTableProps:{pagination:g,setPaginationRemoteEmitter:e=>{s.current=e},dataChangeListener:n}}},a)};t.default=()=>({Provider:s,Consumer:o.Consumer})},442(t){"use strict";t.exports=e},942(e,t){var a;!function(){"use strict";var n={}.hasOwnProperty;function r(){for(var e="",t=0;t<arguments.length;t++){var a=arguments[t];a&&(e=o(e,i(a)))}return e}function i(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return r.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var a in e)n.call(e,a)&&e[a]&&(t=o(t,a));return t}function o(e,t){return t?e?e+" "+t:e+t:e}e.exports?(r.default=r,e.exports=r):void 0===(a=function(){return r}.apply(t,[]))||(e.exports=a)}()}},a={},function e(n){var r=a[n];if(void 0!==r)return r.exports;var i=a[n]={exports:{}};return t[n].call(i.exports,i,i.exports,e),i.exports}(987);var t,a});
3
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9kaXN0L3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3IubWluLmpzIiwibWFwcGluZ3MiOiI7Q0FBQSxTQUEyQ0EsRUFBTUMsR0FDMUIsaUJBQVpDLFNBQTBDLGlCQUFYQyxPQUN4Q0EsT0FBT0QsUUFBVUQsRUFBUUcsUUFBUSxVQUNSLG1CQUFYQyxRQUF5QkEsT0FBT0MsSUFDOUNELE9BQU8sQ0FBQyxTQUFVSixHQUNRLGlCQUFaQyxRQUNkQSxRQUF3QywrQkFBSUQsRUFBUUcsUUFBUSxVQUU1REosRUFBcUMsK0JBQUlDLEVBQVFELEVBQVksTUFDOUQsQ0FURCxDQVNHTyxLQUFPQyxJQUNWLE8scUJDYUEsSUFPSUMsRUFQQUMsRUFBdUIsaUJBQVpDLFFBQXVCQSxRQUFVLEtBQzVDQyxFQUFlRixHQUF3QixtQkFBWkEsRUFBRUcsTUFDN0JILEVBQUVHLE1BQ0YsU0FBc0JDLEVBQVFDLEVBQVVDLEdBQ3hDLE9BQU9DLFNBQVNDLFVBQVVMLE1BQU1NLEtBQUtMLEVBQVFDLEVBQVVDLEVBQ3pELEVBSUFQLEVBREVDLEdBQTBCLG1CQUFkQSxFQUFFVSxRQUNDVixFQUFFVSxRQUNWQyxPQUFPQyxzQkFDQyxTQUF3QlIsR0FDdkMsT0FBT08sT0FBT0Usb0JBQW9CVCxHQUMvQlUsT0FBT0gsT0FBT0Msc0JBQXNCUixHQUN6QyxFQUVpQixTQUF3QkEsR0FDdkMsT0FBT08sT0FBT0Usb0JBQW9CVCxFQUNwQyxFQU9GLElBQUlXLEVBQWNDLE9BQU9DLE9BQVMsU0FBcUJDLEdBQ3JELE9BQU9BLEdBQVVBLENBQ25CLEVBRUEsU0FBU0MsSUFDUEEsRUFBYUMsS0FBS1gsS0FBS1ksS0FDekIsQ0FDQTVCLEVBQU9ELFFBQVUyQixFQUNqQjFCLEVBQU9ELFFBQVE4QixLQXdZZixTQUFjQyxFQUFTQyxHQUNyQixPQUFPLElBQUlDLFFBQVEsU0FBVUMsRUFBU0MsR0FDcEMsU0FBU0MsRUFBY0MsR0FDckJOLEVB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T0FBT0EsRUFBYXpWLFFBR3JCLElBQUlDLEVBQVNxVixFQUF5QkUsR0FBWSxDQUdqRHhWLFFBQVMsQ0FBQyxHQU9YLE9BSEEwVixFQUFvQkYsR0FBVXZVLEtBQUtoQixFQUFPRCxRQUFTQyxFQUFRQSxFQUFPRCxRQUFTdVYsR0FHcEV0VixFQUFPRCxPQUNmLENDbkIwQnVWLENBQW9CLEssTURGMUNEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL2luZGV4LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9jb25zdC50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9kYXRhLWNvbnRleHQudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL2hvb2tzL3VzZVBhZ2luYXRpb24udHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvaG9va3MvdXNlUGFnaW5hdGlvblN0YXRlLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3BhZ2UtYnV0dG9uLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9wYWdlLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3BhZ2luYXRpb24taGFuZGxlci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvcGFnaW5hdGlvbi1saXN0LWFkYXB0ZXIudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3BhZ2luYXRpb24tbGlzdC1zdGFuZGFsb25lLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9wYWdpbmF0aW9uLWxpc3QudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3BhZ2luYXRpb24tdG90YWwtYWRhcHRlci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvcGFnaW5hdGlvbi10b3RhbC1zdGFuZGFsb25lLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9wYWdpbmF0aW9uLXRvdGFsLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9wYWdpbmF0aW9uLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9zaXplLXBlci1wYWdlLWRyb3Bkb3duLWFkYXB0ZXIudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3NpemUtcGVyLXBhZ2UtZHJvcGRvd24tc3RhbmRhbG9uZS50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvc2l6ZS1wZXItcGFnZS1kcm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvc2l6ZS1wZXItcGFnZS1vcHRpb24udHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3N0YW5kYWxvbmUtYWRhcHRlci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvc3RhdGUtY29udGV4dC50c3giLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHVtZCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4LmpzIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly8vd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcInJlYWN0XCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlJlYWN0Qm9vdHN0cmFwVGFibGVOZ1BhZ2luYXRvclwiXSA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJSZWFjdEJvb3RzdHJhcFRhYmxlTmdQYWdpbmF0b3JcIl0gPSBmYWN0b3J5KHJvb3RbXCJSZWFjdFwiXSk7XG59KShzZWxmLCAoX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX18pID0+IHtcbnJldHVybiAiLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUiA9IHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyA/IFJlZmxlY3QgOiBudWxsXG52YXIgUmVmbGVjdEFwcGx5ID0gUiAmJiB0eXBlb2YgUi5hcHBseSA9PT0gJ2Z1bmN0aW9uJ1xuICA/IFIuYXBwbHlcbiAgOiBmdW5jdGlvbiBSZWZsZWN0QXBwbHkodGFyZ2V0LCByZWNlaXZlciwgYXJncykge1xuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKTtcbiAgfVxuXG52YXIgUmVmbGVjdE93bktleXNcbmlmIChSICYmIHR5cGVvZiBSLm93bktleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVmbGVjdE93bktleXMgPSBSLm93bktleXNcbn0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpXG4gICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSk7XG4gIH07XG59IGVsc2Uge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBQcm9jZXNzRW1pdFdhcm5pbmcod2FybmluZykge1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbn1cblxudmFyIE51bWJlcklzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIE51bWJlcklzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgRXZlbnRFbWl0dGVyLmluaXQuY2FsbCh0aGlzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xubW9kdWxlLmV4cG9ydHMub25jZSA9IG9uY2U7XG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuMTAueFxuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzQ291bnQgPSAwO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuXG4vLyBCeSBkZWZhdWx0IEV2ZW50RW1pdHRlcnMgd2lsbCBwcmludCBhIHdhcm5pbmcgaWYgbW9yZSB0aGFuIDEwIGxpc3RlbmVycyBhcmVcbi8vIGFkZGVkIHRvIGl0LiBUaGlzIGlzIGEgdXNlZnVsIGRlZmF1bHQgd2hpY2ggaGVscHMgZmluZGluZyBtZW1vcnkgbGVha3MuXG52YXIgZGVmYXVsdE1heExpc3RlbmVycyA9IDEwO1xuXG5mdW5jdGlvbiBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKSB7XG4gIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnRFbWl0dGVyLCAnZGVmYXVsdE1heExpc3RlbmVycycsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGVmYXVsdE1heExpc3RlbmVycztcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihhcmcpIHtcbiAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ251bWJlcicgfHwgYXJnIDwgMCB8fCBOdW1iZXJJc05hTihhcmcpKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiZGVmYXVsdE1heExpc3RlbmVyc1wiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBhcmcgKyAnLicpO1xuICAgIH1cbiAgICBkZWZhdWx0TWF4TGlzdGVuZXJzID0gYXJnO1xuICB9XG59KTtcblxuRXZlbnRFbWl0dGVyLmluaXQgPSBmdW5jdGlvbigpIHtcblxuICBpZiAodGhpcy5fZXZlbnRzID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuX2V2ZW50cyA9PT0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpIHtcbiAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG59O1xuXG4vLyBPYnZpb3VzbHkgbm90IGFsbCBFbWl0dGVycyBzaG91bGQgYmUgbGltaXRlZCB0byAxMC4gVGhpcyBmdW5jdGlvbiBhbGxvd3Ncbi8vIHRoYXQgdG8gYmUgaW5jcmVhc2VkLiBTZXQgdG8gemVybyBmb3IgdW5saW1pdGVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMobikge1xuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInIHx8IG4gPCAwIHx8IE51bWJlcklzTmFOKG4pKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcIm5cIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgbiArICcuJyk7XG4gIH1cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBfZ2V0TWF4TGlzdGVuZXJzKHRoYXQpIHtcbiAgaWYgKHRoYXQuX21heExpc3RlbmVycyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycztcbiAgcmV0dXJuIHRoYXQuX21heExpc3RlbmVycztcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBnZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiBfZ2V0TWF4TGlzdGVuZXJzKHRoaXMpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdCh0eXBlKSB7XG4gIHZhciBhcmdzID0gW107XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgdmFyIGRvRXJyb3IgPSAodHlwZSA9PT0gJ2Vycm9yJyk7XG5cbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKVxuICAgIGRvRXJyb3IgPSAoZG9FcnJvciAmJiBldmVudHMuZXJyb3IgPT09IHVuZGVmaW5lZCk7XG4gIGVsc2UgaWYgKCFkb0Vycm9yKVxuICAgIHJldHVybiBmYWxzZTtcblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmIChkb0Vycm9yKSB7XG4gICAgdmFyIGVyO1xuICAgIGlmIChhcmdzLmxlbmd0aCA+IDApXG4gICAgICBlciA9IGFyZ3NbMF07XG4gICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIC8vIE5vdGU6IFRoZSBjb21tZW50cyBvbiB0aGUgYHRocm93YCBsaW5lcyBhcmUgaW50ZW50aW9uYWwsIHRoZXkgc2hvd1xuICAgICAgLy8gdXAgaW4gTm9kZSdzIG91dHB1dCBpZiB0aGlzIHJlc3VsdHMgaW4gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbi5cbiAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICAgIH1cbiAgICAvLyBBdCBsZWFzdCBnaXZlIHNvbWUga2luZCBvZiBjb250ZXh0IHRvIHRoZSB1c2VyXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignVW5oYW5kbGVkIGVycm9yLicgKyAoZXIgPyAnICgnICsgZXIubWVzc2FnZSArICcpJyA6ICcnKSk7XG4gICAgZXJyLmNvbnRleHQgPSBlcjtcbiAgICB0aHJvdyBlcnI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gIH1cblxuICB2YXIgaGFuZGxlciA9IGV2ZW50c1t0eXBlXTtcblxuICBpZiAoaGFuZGxlciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBSZWZsZWN0QXBwbHkoaGFuZGxlciwgdGhpcywgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbiA9IGhhbmRsZXIubGVuZ3RoO1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhcnJheUNsb25lKGhhbmRsZXIsIGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgIFJlZmxlY3RBcHBseShsaXN0ZW5lcnNbaV0sIHRoaXMsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5mdW5jdGlvbiBfYWRkTGlzdGVuZXIodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lciwgcHJlcGVuZCkge1xuICB2YXIgbTtcbiAgdmFyIGV2ZW50cztcbiAgdmFyIGV4aXN0aW5nO1xuXG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGFyZ2V0Ll9ldmVudHNDb3VudCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gXCJuZXdMaXN0ZW5lclwiISBCZWZvcmVcbiAgICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXG4gICAgaWYgKGV2ZW50cy5uZXdMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0YXJnZXQuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuICAgICAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgPyBsaXN0ZW5lci5saXN0ZW5lciA6IGxpc3RlbmVyKTtcblxuICAgICAgLy8gUmUtYXNzaWduIGBldmVudHNgIGJlY2F1c2UgYSBuZXdMaXN0ZW5lciBoYW5kbGVyIGNvdWxkIGhhdmUgY2F1c2VkIHRoZVxuICAgICAgLy8gdGhpcy5fZXZlbnRzIHRvIGJlIGFzc2lnbmVkIHRvIGEgbmV3IG9iamVjdFxuICAgICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gICAgfVxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdO1xuICB9XG5cbiAgaWYgKGV4aXN0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPcHRpbWl6ZSB0aGUgY2FzZSBvZiBvbmUgbGlzdGVuZXIuIERvbid0IG5lZWQgdGhlIGV4dHJhIGFycmF5IG9iamVjdC5cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuICAgICsrdGFyZ2V0Ll9ldmVudHNDb3VudDtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGV4aXN0aW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNoYW5nZSB0byBhcnJheS5cbiAgICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID1cbiAgICAgICAgcHJlcGVuZCA/IFtsaXN0ZW5lciwgZXhpc3RpbmddIDogW2V4aXN0aW5nLCBsaXN0ZW5lcl07XG4gICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBhcnJheSwganVzdCBhcHBlbmQuXG4gICAgfSBlbHNlIGlmIChwcmVwZW5kKSB7XG4gICAgICBleGlzdGluZy51bnNoaWZ0KGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhpc3RpbmcucHVzaChsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgICBtID0gX2dldE1heExpc3RlbmVycyh0YXJnZXQpO1xuICAgIGlmIChtID4gMCAmJiBleGlzdGluZy5sZW5ndGggPiBtICYmICFleGlzdGluZy53YXJuZWQpIHtcbiAgICAgIGV4aXN0aW5nLndhcm5lZCA9IHRydWU7XG4gICAgICAvLyBObyBlcnJvciBjb2RlIGZvciB0aGlzIHNpbmNlIGl0IGlzIGEgV2FybmluZ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICB2YXIgdyA9IG5ldyBFcnJvcignUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcubGVuZ3RoICsgJyAnICsgU3RyaW5nKHR5cGUpICsgJyBsaXN0ZW5lcnMgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdpbmNyZWFzZSBsaW1pdCcpO1xuICAgICAgdy5uYW1lID0gJ01heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyc7XG4gICAgICB3LmVtaXR0ZXIgPSB0YXJnZXQ7XG4gICAgICB3LnR5cGUgPSB0eXBlO1xuICAgICAgdy5jb3VudCA9IGV4aXN0aW5nLmxlbmd0aDtcbiAgICAgIFByb2Nlc3NFbWl0V2FybmluZyh3KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gZnVuY3Rpb24gYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIHRydWUpO1xuICAgIH07XG5cbmZ1bmN0aW9uIG9uY2VXcmFwcGVyKCkge1xuICBpZiAoIXRoaXMuZmlyZWQpIHtcbiAgICB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsIHRoaXMud3JhcEZuKTtcbiAgICB0aGlzLmZpcmVkID0gdHJ1ZTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpO1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LCBhcmd1bWVudHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9vbmNlV3JhcCh0YXJnZXQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBzdGF0ZSA9IHsgZmlyZWQ6IGZhbHNlLCB3cmFwRm46IHVuZGVmaW5lZCwgdGFyZ2V0OiB0YXJnZXQsIHR5cGU6IHR5cGUsIGxpc3RlbmVyOiBsaXN0ZW5lciB9O1xuICB2YXIgd3JhcHBlZCA9IG9uY2VXcmFwcGVyLmJpbmQoc3RhdGUpO1xuICB3cmFwcGVkLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHN0YXRlLndyYXBGbiA9IHdyYXBwZWQ7XG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICB0aGlzLm9uKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZE9uY2VMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICB0aGlzLnByZXBlbmRMaXN0ZW5lcih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbi8vIEVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZiBhbmQgb25seSBpZiB0aGUgbGlzdGVuZXIgd2FzIHJlbW92ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgdmFyIGxpc3QsIGV2ZW50cywgcG9zaXRpb24sIGksIG9yaWdpbmFsTGlzdGVuZXI7XG5cbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBsaXN0ID0gZXZlbnRzW3R5cGVdO1xuICAgICAgaWYgKGxpc3QgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fCBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdC5saXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGxpc3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcG9zaXRpb24gPSAtMTtcblxuICAgICAgICBmb3IgKGkgPSBsaXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8IGxpc3RbaV0ubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgICAgICBvcmlnaW5hbExpc3RlbmVyID0gbGlzdFtpXS5saXN0ZW5lcjtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDApXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSAwKVxuICAgICAgICAgIGxpc3Quc2hpZnQoKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgc3BsaWNlT25lKGxpc3QsIHBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICBldmVudHNbdHlwZV0gPSBsaXN0WzBdO1xuXG4gICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgb3JpZ2luYWxMaXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyh0eXBlKSB7XG4gICAgICB2YXIgbGlzdGVuZXJzLCBldmVudHMsIGk7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIC8vIG5vdCBsaXN0ZW5pbmcgZm9yIHJlbW92ZUxpc3RlbmVyLCBubyBuZWVkIHRvIGVtaXRcbiAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50c1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhldmVudHMpO1xuICAgICAgICB2YXIga2V5O1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7XG4gICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgbGlzdGVuZXJzID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgICBpZiAodHlwZW9mIGxpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7XG4gICAgICB9IGVsc2UgaWYgKGxpc3RlbmVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIExJRk8gb3JkZXJcbiAgICAgICAgZm9yIChpID0gbGlzdGVuZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbmZ1bmN0aW9uIF9saXN0ZW5lcnModGFyZ2V0LCB0eXBlLCB1bndyYXApIHtcbiAgdmFyIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG4gIGlmIChldmxpc3RlbmVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJylcbiAgICByZXR1cm4gdW53cmFwID8gW2V2bGlzdGVuZXIubGlzdGVuZXIgfHwgZXZsaXN0ZW5lcl0gOiBbZXZsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIHVud3JhcCA/XG4gICAgdW53cmFwTGlzdGVuZXJzKGV2bGlzdGVuZXIpIDogYXJyYXlDbG9uZShldmxpc3RlbmVyLCBldmxpc3RlbmVyLmxlbmd0aCk7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgdHJ1ZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJhd0xpc3RlbmVycyA9IGZ1bmN0aW9uIHJhd0xpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIubGlzdGVuZXJDb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBlbWl0dGVyLmxpc3RlbmVyQ291bnQodHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyQ291bnQuY2FsbChlbWl0dGVyLCB0eXBlKTtcbiAgfVxufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gbGlzdGVuZXJDb3VudDtcbmZ1bmN0aW9uIGxpc3RlbmVyQ291bnQodHlwZSkge1xuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKGV2bGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGV2bGlzdGVuZXIubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmV2ZW50TmFtZXMgPSBmdW5jdGlvbiBldmVudE5hbWVzKCkge1xuICByZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQgPiAwID8gUmVmbGVjdE93bktleXModGhpcy5fZXZlbnRzKSA6IFtdO1xufTtcblxuZnVuY3Rpb24gYXJyYXlDbG9uZShhcnIsIG4pIHtcbiAgdmFyIGNvcHkgPSBuZXcgQXJyYXkobik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKVxuICAgIGNvcHlbaV0gPSBhcnJbaV07XG4gIHJldHVybiBjb3B5O1xufVxuXG5mdW5jdGlvbiBzcGxpY2VPbmUobGlzdCwgaW5kZXgpIHtcbiAgZm9yICg7IGluZGV4ICsgMSA8IGxpc3QubGVuZ3RoOyBpbmRleCsrKVxuICAgIGxpc3RbaW5kZXhdID0gbGlzdFtpbmRleCArIDFdO1xuICBsaXN0LnBvcCgpO1xufVxuXG5mdW5jdGlvbiB1bndyYXBMaXN0ZW5lcnMoYXJyKSB7XG4gIHZhciByZXQgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmV0Lmxlbmd0aDsgKytpKSB7XG4gICAgcmV0W2ldID0gYXJyW2ldLmxpc3RlbmVyIHx8IGFycltpXTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBvbmNlKGVtaXR0ZXIsIG5hbWUpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBmdW5jdGlvbiBlcnJvckxpc3RlbmVyKGVycikge1xuICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcihuYW1lLCByZXNvbHZlcik7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNvbHZlcigpIHtcbiAgICAgIGlmICh0eXBlb2YgZW1pdHRlci5yZW1vdmVMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIGVycm9yTGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgcmVzb2x2ZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBpZiAobmFtZSAhPT0gJ2Vycm9yJykge1xuICAgICAgYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIoZW1pdHRlciwgZXJyb3JMaXN0ZW5lciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyKGVtaXR0ZXIsIGhhbmRsZXIsIGZsYWdzKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCAnZXJyb3InLCBoYW5kbGVyLCBmbGFncyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsIG5hbWUsIGxpc3RlbmVyLCBmbGFncykge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgZW1pdHRlci5vbmNlKG5hbWUsIGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW1pdHRlci5vbihuYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBFdmVudFRhcmdldCBkb2VzIG5vdCBoYXZlIGBlcnJvcmAgZXZlbnQgc2VtYW50aWNzIGxpa2UgTm9kZVxuICAgIC8vIEV2ZW50RW1pdHRlcnMsIHdlIGRvIG5vdCBsaXN0ZW4gZm9yIGBlcnJvcmAgZXZlbnRzIGhlcmUuXG4gICAgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyKG5hbWUsIGZ1bmN0aW9uIHdyYXBMaXN0ZW5lcihhcmcpIHtcbiAgICAgIC8vIElFIGRvZXMgbm90IGhhdmUgYnVpbHRpbiBgeyBvbmNlOiB0cnVlIH1gIHN1cHBvcnQgc28gd2VcbiAgICAgIC8vIGhhdmUgdG8gZG8gaXQgbWFudWFsbHkuXG4gICAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgd3JhcExpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIGxpc3RlbmVyKGFyZyk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiZW1pdHRlclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBlbWl0dGVyKTtcbiAgfVxufVxuIiwiXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBQYWdpbmF0aW9uT3B0aW9ucyB9IGZyb20gXCJyZWFjdC1ib290c3RyYXAtdGFibGUtbmdcIjtcblxuaW1wb3J0IGNyZWF0ZURhdGFDb250ZXh0IGZyb20gXCIuL3NyYy9kYXRhLWNvbnRleHRcIjtcbmltcG9ydCBQYWdpbmF0aW9uTGlzdFN0YW5kYWxvbmUgZnJvbSBcIi4vc3JjL3BhZ2luYXRpb24tbGlzdC1zdGFuZGFsb25lXCI7XG5pbXBvcnQgUGFnaW5hdGlvblRvdGFsU3RhbmRhbG9uZSBmcm9tIFwiLi9zcmMvcGFnaW5hdGlvbi10b3RhbC1zdGFuZGFsb25lXCI7XG5pbXBvcnQgU2l6ZVBlclBhZ2VEcm9wZG93blN0YW5kYWxvbmUgZnJvbSBcIi4vc3JjL3NpemUtcGVyLXBhZ2UtZHJvcGRvd24tc3RhbmRhbG9uZVwiO1xuaW1wb3J0IGNyZWF0ZUJhc2VDb250ZXh0LCB7IFN0YXRlQ29udGV4dCB9IGZyb20gXCIuL3NyYy9zdGF0ZS1jb250ZXh0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnaW5hdGlvbkN0eE9wdGlvbnMge1xuICBvcHRpb25zPzogUGFnaW5hdGlvbk9wdGlvbnMgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnaW5hdGlvbkNoaWxkUHJvcHMgZXh0ZW5kcyBQYWdpbmF0aW9uT3B0aW9ucyB7XG4gIHRhYmxlSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGJvb3RzdHJhcDQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb25Qcm92aWRlclByb3BzIHtcbiAgcGFnaW5hdGlvbj86IFBhZ2luYXRpb25DdHhPcHRpb25zIHwgdW5kZWZpbmVkO1xuICAvLyBUT0RPXG4gIC8vIGNoaWxkcmVuOiAoY2hpbGRQcm9wczoge1xuICAvLyAgIHBhZ2luYXRpb25Qcm9wczogUGFnaW5hdGlvbkNoaWxkUHJvcHM7XG4gIC8vICAgcGFnaW5hdGlvblRhYmxlUHJvcHM6IEJvb3RzdHJhcFRhYmxlUHJvcHM7XG4gIC8vIH0pID0+IFJlYWN0LlJlYWN0RWxlbWVudCB8IG51bGw7XG4gIGNoaWxkcmVuOiBhbnk7XG4gIHRhYmxlSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGJvb3RzdHJhcDQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBib290c3RyYXA1PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgcmVtb3RlRW1pdHRlcjogYW55O1xuICBkYXRhOiBhbnlbXTtcbiAgaXNSZW1vdGVQYWdpbmF0aW9uOiBGdW5jdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uRGF0YVByb3ZpZGVyUHJvcHMge1xuICBkYXRhOiBhbnlbXTtcbiAgcmVtb3RlRW1pdHRlcjogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgaXNSZW1vdGVQYWdpbmF0aW9uOiAoKSA9PiBib29sZWFuO1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICBwYWdpbmF0aW9uOiB7XG4gICAgb3B0aW9uczoge1xuICAgICAgY3VzdG9tPzogYm9vbGVhbjtcbiAgICAgIHBhZ2VTdGFydEluZGV4PzogbnVtYmVyO1xuICAgICAgb25QYWdlQ2hhbmdlOiAobmV3UGFnZTogYW55LCBjdXJyU2l6ZVBlclBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbiAgICAgIHNpemVQZXJQYWdlPzogbnVtYmVyO1xuICAgICAgcGFnZT86IG51bWJlcjtcbiAgICB9O1xuICB9O1xuICBvbkRhdGFTaXplQ2hhbmdlPzogKGRhdGFTaXplOiB7IGRhdGFTaXplOiBudW1iZXIgfSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKG9wdGlvbnMgPSB7fSkgPT4gKHtcbiAgY3JlYXRlQ29udGV4dDogY3JlYXRlRGF0YUNvbnRleHQsXG4gIG9wdGlvbnMsXG59KTtcblxuY29uc3QgeyBQcm92aWRlciB9ID0gY3JlYXRlQmFzZUNvbnRleHQoKTtcblxuY29uc3QgQ3VzdG9taXphYmxlUHJvdmlkZXI6IFJlYWN0LkZDPFBhZ2luYXRpb25Qcm92aWRlclByb3BzPiA9IChwcm9wcykgPT4ge1xuICByZXR1cm4gKFxuICAgIDxQcm92aWRlciB7Li4ucHJvcHN9PlxuICAgICAgPFN0YXRlQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgeyhjb250ZXh0OiBhbnkpID0+IHByb3BzLmNoaWxkcmVuKGNvbnRleHQpfVxuICAgICAgPC9TdGF0ZUNvbnRleHQuQ29uc3VtZXI+XG4gICAgPC9Qcm92aWRlcj5cbiAgKTtcbn07XG5cblxuXG5leHBvcnQgY29uc3QgUGFnaW5hdGlvblByb3ZpZGVyID0gQ3VzdG9taXphYmxlUHJvdmlkZXI7XG5leHBvcnQge1xuICBQYWdpbmF0aW9uTGlzdFN0YW5kYWxvbmUsXG4gIFBhZ2luYXRpb25Ub3RhbFN0YW5kYWxvbmUsXG4gIFNpemVQZXJQYWdlRHJvcGRvd25TdGFuZGFsb25lLFxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgUEFHSU5BVElPTl9TSVpFOiA1LFxuICBQQUdFX1NUQVJUX0lOREVYOiAxLFxuICBXaXRoX0ZJUlNUX0FORF9MQVNUOiB0cnVlLFxuICBTSE9XX0FMTF9QQUdFX0JUTlM6IGZhbHNlLFxuICBTSE9XX1RPVEFMOiBmYWxzZSxcbiAgUEFHSU5BVElPTl9UT1RBTDogbnVsbCxcbiAgRklSU1RfUEFHRV9URVhUOiBcIjw8XCIsXG4gIFBSRV9QQUdFX1RFWFQ6IFwiPFwiLFxuICBORVhUX1BBR0VfVEVYVDogXCI+XCIsXG4gIExBU1RfUEFHRV9URVhUOiBcIj4+XCIsXG4gIE5FWFRfUEFHRV9USVRMRTogXCJuZXh0IHBhZ2VcIixcbiAgTEFTVF9QQUdFX1RJVExFOiBcImxhc3QgcGFnZVwiLFxuICBQUkVfUEFHRV9USVRMRTogXCJwcmV2aW91cyBwYWdlXCIsXG4gIEZJUlNUX1BBR0VfVElUTEU6IFwiZmlyc3QgcGFnZVwiLFxuICBTSVpFX1BFUl9QQUdFX0xJU1Q6IFsxMCwgMjUsIDMwLCA1MF0sXG4gIEhJREVfU0laRV9QRVJfUEFHRTogZmFsc2UsXG4gIEhJREVfUEFHRV9MSVNUX09OTFlfT05FX1BBR0U6IGZhbHNlLFxufTtcbiIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG4vKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgbm8tbG9uZWx5LWlmOiAwICovXG5cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgUGFnaW5hdGlvbkRhdGFQcm92aWRlclByb3BzIH0gZnJvbSBcIi4uXCI7XG5pbXBvcnQgQ29uc3QgZnJvbSBcIi4vY29uc3RcIjtcbmltcG9ydCB7IGFsaWduUGFnZSwgZ2V0QnlDdXJyUGFnZSB9IGZyb20gXCIuL3BhZ2VcIjtcbmltcG9ydCBQYWdpbmF0aW9uIGZyb20gXCIuL3BhZ2luYXRpb25cIjtcbmltcG9ydCBjcmVhdGVCYXNlQ29udGV4dCBmcm9tIFwiLi9zdGF0ZS1jb250ZXh0XCI7XG5cbmltcG9ydCB7IHVzZVBhZ2luYXRpb25TdGF0ZSB9IGZyb20gXCIuL2hvb2tzL3VzZVBhZ2luYXRpb25TdGF0ZVwiO1xuXG5jb25zdCBQYWdpbmF0aW9uRGF0YUNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PGFueT4obnVsbCk7XG5cbmNvbnN0IFBhZ2luYXRpb25EYXRhUHJvdmlkZXIgPSBSZWFjdC5mb3J3YXJkUmVmPGFueSwgUGFnaW5hdGlvbkRhdGFQcm92aWRlclByb3BzPigocHJvcHMsIHJlZikgPT4ge1xuICBjb25zdCB7XG4gICAgZGF0YTogcHJvcERhdGEsXG4gICAgcGFnaW5hdGlvbixcbiAgICBvbkRhdGFTaXplQ2hhbmdlLFxuICAgIGNoaWxkcmVuLFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3Qge1xuICAgIGN1cnJQYWdlLFxuICAgIHNldEN1cnJQYWdlLFxuICAgIGN1cnJTaXplUGVyUGFnZSxcbiAgICBnZXRQYWdpbmF0aW9uUHJvcHMsXG4gICAgaXNSZW1vdGVQYWdpbmF0aW9uLFxuICAgIHJlbW90ZUVtaXR0ZXJSZWYsXG4gIH0gPSB1c2VQYWdpbmF0aW9uU3RhdGUocHJvcHMpO1xuXG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgIGN1cnJQYWdlLFxuICAgIGN1cnJTaXplUGVyUGFnZSxcbiAgfSkpO1xuXG4gIGNvbnN0IHByZXZEYXRhTGVuZ3RoUmVmID0gUmVhY3QudXNlUmVmKHByb3BEYXRhLmxlbmd0aCk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvcHRpb25zID0gcGFnaW5hdGlvbiEub3B0aW9ucyE7XG4gICAgY29uc3QgeyBjdXN0b20sIG9uUGFnZUNoYW5nZSB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBwYWdlU3RhcnRJbmRleCA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucy5wYWdlU3RhcnRJbmRleCAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IG9wdGlvbnMucGFnZVN0YXJ0SW5kZXhcbiAgICAgICAgOiBDb25zdC5QQUdFX1NUQVJUX0lOREVYO1xuXG4gICAgaWYgKCFpc1JlbW90ZVBhZ2luYXRpb24oKSAmJiAhY3VzdG9tKSB7XG4gICAgICBjb25zdCBuZXdQYWdlID0gYWxpZ25QYWdlKFxuICAgICAgICBwcm9wRGF0YS5sZW5ndGgsXG4gICAgICAgIHByZXZEYXRhTGVuZ3RoUmVmLmN1cnJlbnQsXG4gICAgICAgIGN1cnJQYWdlLFxuICAgICAgICBjdXJyU2l6ZVBlclBhZ2UsXG4gICAgICAgIHBhZ2VTdGFydEluZGV4XG4gICAgICApO1xuXG4gICAgICBpZiAoY3VyclBhZ2UgIT09IG5ld1BhZ2UpIHtcbiAgICAgICAgaWYgKG9uUGFnZUNoYW5nZSkge1xuICAgICAgICAgIG9uUGFnZUNoYW5nZShuZXdQYWdlLCBjdXJyU2l6ZVBlclBhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHNldEN1cnJQYWdlKG5ld1BhZ2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvbkRhdGFTaXplQ2hhbmdlICYmIHByb3BEYXRhLmxlbmd0aCAhPT0gcHJldkRhdGFMZW5ndGhSZWYuY3VycmVudCkge1xuICAgICAgb25EYXRhU2l6ZUNoYW5nZSh7IGRhdGFTaXplOiBwcmV2RGF0YUxlbmd0aFJlZi5jdXJyZW50IH0pO1xuICAgIH1cbiAgICBwcmV2RGF0YUxlbmd0aFJlZi5jdXJyZW50ID0gcHJvcERhdGEubGVuZ3RoO1xuICB9LCBbXG4gICAgcHJvcERhdGEubGVuZ3RoLFxuICAgIHBhZ2luYXRpb24sXG4gICAgb25EYXRhU2l6ZUNoYW5nZSxcbiAgICBjdXJyUGFnZSxcbiAgICBjdXJyU2l6ZVBlclBhZ2UsXG4gICAgaXNSZW1vdGVQYWdpbmF0aW9uLFxuICAgIHNldEN1cnJQYWdlLFxuICBdKTtcblxuICBjb25zdCBvcHRpb25zID0gcGFnaW5hdGlvbiEub3B0aW9ucyE7XG4gIGNvbnN0IGVmZmVjdGl2ZUN1cnJTaXplUGVyUGFnZSA9IG9wdGlvbnMuc2l6ZVBlclBhZ2UgPz8gY3VyclNpemVQZXJQYWdlO1xuICBjb25zdCBwYWdlU3RhcnRJbmRleCA9XG4gICAgdHlwZW9mIG9wdGlvbnMucGFnZVN0YXJ0SW5kZXggPT09IFwidW5kZWZpbmVkXCJcbiAgICAgID8gQ29uc3QuUEFHRV9TVEFSVF9JTkRFWFxuICAgICAgOiBvcHRpb25zLnBhZ2VTdGFydEluZGV4O1xuXG4gIGxldCBkYXRhID0gcHJvcERhdGE7XG4gIGxldCBlZmZlY3RpdmVDdXJyUGFnZSA9IG9wdGlvbnMucGFnZSA/PyBjdXJyUGFnZTtcblxuICBpZiAoIWlzUmVtb3RlUGFnaW5hdGlvbigpICYmIGRhdGEubGVuZ3RoIDw9IChlZmZlY3RpdmVDdXJyUGFnZSAtIDEpICogZWZmZWN0aXZlQ3VyclNpemVQZXJQYWdlKSB7XG4gICAgY29uc3QgdG90YWxQYWdlcyA9IE1hdGguZmxvb3IoZGF0YS5sZW5ndGggLyBlZmZlY3RpdmVDdXJyU2l6ZVBlclBhZ2UpICsgMTtcbiAgICBlZmZlY3RpdmVDdXJyUGFnZSA9IGVmZmVjdGl2ZUN1cnJQYWdlID4gdG90YWxQYWdlcyA/IHRvdGFsUGFnZXMgOiBjdXJyUGFnZTtcbiAgICAvLyBOb3RlOiBXZSBkb24ndCB1c2Ugc2V0Q3VyclBhZ2UgaGVyZSB0byBhdm9pZCByZW5kZXIgbG9vcHMsIHNpbWlsYXIgdG8gdGhlIGNsYXNzIGNvbXBvbmVudCdzIGRpcmVjdCBhc3NpZ25tZW50XG4gIH1cblxuICBjb25zdCBzbGljZWREYXRhID0gaXNSZW1vdGVQYWdpbmF0aW9uKClcbiAgICA/IGRhdGFcbiAgICA6IGdldEJ5Q3VyclBhZ2UoZGF0YSwgZWZmZWN0aXZlQ3VyclBhZ2UsIGVmZmVjdGl2ZUN1cnJTaXplUGVyUGFnZSwgcGFnZVN0YXJ0SW5kZXgpO1xuXG4gIGNvbnN0IHJlbmRlckRlZmF1bHRQYWdpbmF0aW9uID0gKCkgPT4ge1xuICAgIGlmICghb3B0aW9ucy5jdXN0b20pIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGFnZTogcGFnaW5hdGlvblBhZ2UsXG4gICAgICAgIHNpemVQZXJQYWdlOiBwYWdpbmF0aW9uU2l6ZVBlclBhZ2UsXG4gICAgICAgIGRhdGFTaXplLFxuICAgICAgICAuLi5yZXN0XG4gICAgICB9ID0gZ2V0UGFnaW5hdGlvblByb3BzKCk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8UGFnaW5hdGlvblxuICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgIGtleT1cInBhZ2luYXRpb25cIlxuICAgICAgICAgIGRhdGFTaXplPXtkYXRhU2l6ZSB8fCBwcm9wRGF0YS5sZW5ndGh9XG4gICAgICAgICAgY3VyclBhZ2U9e3BhZ2luYXRpb25QYWdlfVxuICAgICAgICAgIGN1cnJTaXplUGVyUGFnZT17cGFnaW5hdGlvblNpemVQZXJQYWdlfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8UGFnaW5hdGlvbkRhdGFDb250ZXh0LlByb3ZpZGVyXG4gICAgICB2YWx1ZT17e1xuICAgICAgICBkYXRhOiBzbGljZWREYXRhLFxuICAgICAgICBzZXRSZW1vdGVFbWl0dGVyOiAoZW1pdHRlcjogYW55KSA9PiB7XG4gICAgICAgICAgcmVtb3RlRW1pdHRlclJlZi5jdXJyZW50ID0gZW1pdHRlcjtcbiAgICAgICAgfSxcbiAgICAgIH19XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgICAge3JlbmRlckRlZmF1bHRQYWdpbmF0aW9uKCl9XG4gICAgPC9QYWdpbmF0aW9uRGF0YUNvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4gKHtcbiAgUHJvdmlkZXI6IFBhZ2luYXRpb25EYXRhUHJvdmlkZXIsXG4gIENvbnN1bWVyOiBQYWdpbmF0aW9uRGF0YUNvbnRleHQuQ29uc3VtZXIsXG59KTtcbiIsImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgQ29uc3QgZnJvbSBcIi4uL2NvbnN0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlUGFnaW5hdGlvblByb3BzIHtcbiAgY3VyclBhZ2U6IG51bWJlcjtcbiAgY3VyclNpemVQZXJQYWdlOiBudW1iZXI7XG4gIGRhdGFTaXplOiBudW1iZXI7XG4gIHBhZ2VTdGFydEluZGV4OiBudW1iZXI7XG4gIHBhZ2luYXRpb25TaXplOiBudW1iZXI7XG4gIHdpdGhGaXJzdEFuZExhc3Q6IGJvb2xlYW47XG4gIGZpcnN0UGFnZVRleHQ6IHN0cmluZztcbiAgcHJlUGFnZVRleHQ6IHN0cmluZztcbiAgbmV4dFBhZ2VUZXh0OiBzdHJpbmc7XG4gIGxhc3RQYWdlVGV4dDogc3RyaW5nO1xuICBhbHdheXNTaG93QWxsQnRuczogYm9vbGVhbjtcbiAgc2l6ZVBlclBhZ2VMaXN0OiBhbnlbXTtcbiAgb25QYWdlQ2hhbmdlOiAocGFnZTogbnVtYmVyLCBjdXJyU2l6ZVBlclBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbiAgb25TaXplUGVyUGFnZUNoYW5nZT86IChzaXplUGVyUGFnZTogbnVtYmVyLCBwYWdlOiBudW1iZXIpID0+IHZvaWQ7XG4gIG5leHRQYWdlVGl0bGU/OiBzdHJpbmc7XG4gIHByZVBhZ2VUaXRsZT86IHN0cmluZztcbiAgZmlyc3RQYWdlVGl0bGU/OiBzdHJpbmc7XG4gIGxhc3RQYWdlVGl0bGU/OiBzdHJpbmc7XG4gIGRpc2FibGVQYWdlVGl0bGU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgdXNlUGFnaW5hdGlvbiA9IChwcm9wczogVXNlUGFnaW5hdGlvblByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjdXJyUGFnZSxcbiAgICBjdXJyU2l6ZVBlclBhZ2UsXG4gICAgZGF0YVNpemUsXG4gICAgcGFnZVN0YXJ0SW5kZXgsXG4gICAgcGFnaW5hdGlvblNpemUsXG4gICAgd2l0aEZpcnN0QW5kTGFzdCxcbiAgICBmaXJzdFBhZ2VUZXh0LFxuICAgIHByZVBhZ2VUZXh0LFxuICAgIG5leHRQYWdlVGV4dCxcbiAgICBsYXN0UGFnZVRleHQsXG4gICAgYWx3YXlzU2hvd0FsbEJ0bnMsXG4gICAgc2l6ZVBlclBhZ2VMaXN0LFxuICAgIG9uUGFnZUNoYW5nZSxcbiAgICBvblNpemVQZXJQYWdlQ2hhbmdlLFxuICAgIG5leHRQYWdlVGl0bGUgPSBDb25zdC5ORVhUX1BBR0VfVElUTEUsXG4gICAgcHJlUGFnZVRpdGxlID0gQ29uc3QuUFJFX1BBR0VfVElUTEUsXG4gICAgZmlyc3RQYWdlVGl0bGUgPSBDb25zdC5GSVJTVF9QQUdFX1RJVExFLFxuICAgIGxhc3RQYWdlVGl0bGUgPSBDb25zdC5MQVNUX1BBR0VfVElUTEUsXG4gICAgZGlzYWJsZVBhZ2VUaXRsZSA9IGZhbHNlLFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgdG90YWxQYWdlcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBNYXRoLmNlaWwoZGF0YVNpemUgLyBjdXJyU2l6ZVBlclBhZ2UpO1xuICB9LCBbZGF0YVNpemUsIGN1cnJTaXplUGVyUGFnZV0pO1xuXG4gIGNvbnN0IGxhc3RQYWdlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHBhZ2VTdGFydEluZGV4ICsgdG90YWxQYWdlcyAtIDE7XG4gIH0sIFtwYWdlU3RhcnRJbmRleCwgdG90YWxQYWdlc10pO1xuXG4gIGNvbnN0IGJhY2tUb1ByZXZQYWdlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHJldHVybiBjdXJyUGFnZSAtIDEgPCBwYWdlU3RhcnRJbmRleCA/IHBhZ2VTdGFydEluZGV4IDogY3VyclBhZ2UgLSAxO1xuICB9LCBbY3VyclBhZ2UsIHBhZ2VTdGFydEluZGV4XSk7XG5cbiAgY29uc3QgY2FsY3VsYXRlUGFnZXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgbGV0IHBhZ2VzOiBhbnkgPSBbXTtcbiAgICBsZXQgZW5kUGFnZSA9IHRvdGFsUGFnZXM7XG4gICAgaWYgKGVuZFBhZ2UgPD0gMCkgcmV0dXJuIFtdO1xuXG4gICAgbGV0IHN0YXJ0UGFnZSA9IE1hdGgubWF4KFxuICAgICAgY3VyclBhZ2UgLSBNYXRoLmZsb29yKHBhZ2luYXRpb25TaXplIC8gMiksXG4gICAgICBwYWdlU3RhcnRJbmRleFxuICAgICk7XG4gICAgZW5kUGFnZSA9IHN0YXJ0UGFnZSArIHBhZ2luYXRpb25TaXplIC0gMTtcblxuICAgIGlmIChlbmRQYWdlID4gbGFzdFBhZ2UpIHtcbiAgICAgIGVuZFBhZ2UgPSBsYXN0UGFnZTtcbiAgICAgIHN0YXJ0UGFnZSA9IGVuZFBhZ2UgLSBwYWdpbmF0aW9uU2l6ZSArIDE7XG4gICAgfVxuXG4gICAgaWYgKGFsd2F5c1Nob3dBbGxCdG5zKSB7XG4gICAgICBpZiAod2l0aEZpcnN0QW5kTGFzdCkge1xuICAgICAgICBwYWdlcy5wdXNoKHsgdHlwZTogJ2ZpcnN0JywgcGFnZTogZmlyc3RQYWdlVGV4dCB9KTtcbiAgICAgICAgcGFnZXMucHVzaCh7IHR5cGU6ICdwcmUnLCBwYWdlOiBwcmVQYWdlVGV4dCB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhZ2VzLnB1c2goeyB0eXBlOiAncHJlJywgcGFnZTogcHJlUGFnZVRleHQgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdGFydFBhZ2UgIT09IHBhZ2VTdGFydEluZGV4ICYmIHRvdGFsUGFnZXMgPiBwYWdpbmF0aW9uU2l6ZSkge1xuICAgICAgaWYgKHdpdGhGaXJzdEFuZExhc3QpIHtcbiAgICAgICAgcGFnZXMucHVzaCh7IHR5cGU6ICdmaXJzdCcsIHBhZ2U6IGZpcnN0UGFnZVRleHQgfSk7XG4gICAgICAgIHBhZ2VzLnB1c2goeyB0eXBlOiAncHJlJywgcGFnZTogcHJlUGFnZVRleHQgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYWdlcy5wdXNoKHsgdHlwZTogJ3ByZScsIHBhZ2U6IHByZVBhZ2VUZXh0IH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodG90YWxQYWdlcyA+IDEgJiYgcGFnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBwYWdlcy5wdXNoKHsgdHlwZTogJ3ByZScsIHBhZ2U6IHByZVBhZ2VUZXh0IH0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSBzdGFydFBhZ2U7IGkgPD0gZW5kUGFnZTsgaSArPSAxKSB7XG4gICAgICBpZiAoaSA+PSBwYWdlU3RhcnRJbmRleCkgcGFnZXMucHVzaCh7IHR5cGU6ICdwYWdlJywgcGFnZTogaSB9KTtcbiAgICB9XG5cbiAgICBpZiAoYWx3YXlzU2hvd0FsbEJ0bnMgfHwgKGVuZFBhZ2UgPD0gbGFzdFBhZ2UgJiYgcGFnZXMubGVuZ3RoID4gMSkpIHtcbiAgICAgIHBhZ2VzLnB1c2goeyB0eXBlOiAnbmV4dCcsIHBhZ2U6IG5leHRQYWdlVGV4dCB9KTtcbiAgICB9XG4gICAgaWYgKHdpdGhGaXJzdEFuZExhc3QgJiYgKGFsd2F5c1Nob3dBbGxCdG5zIHx8IChlbmRQYWdlIDw9IGxhc3RQYWdlICYmIHBhZ2VzLmxlbmd0aCA+IDEpKSkge1xuICAgICAgcGFnZXMucHVzaCh7IHR5cGU6ICdsYXN0JywgcGFnZTogbGFzdFBhZ2VUZXh0IH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwYWdlcztcbiAgfSwgW1xuICAgIGN1cnJQYWdlLFxuICAgIHBhZ2luYXRpb25TaXplLFxuICAgIHBhZ2VTdGFydEluZGV4LFxuICAgIHdpdGhGaXJzdEFuZExhc3QsXG4gICAgZmlyc3RQYWdlVGV4dCxcbiAgICBwcmVQYWdlVGV4dCxcbiAgICBuZXh0UGFnZVRleHQsXG4gICAgbGFzdFBhZ2VUZXh0LFxuICAgIGFsd2F5c1Nob3dBbGxCdG5zLFxuICAgIHRvdGFsUGFnZXMsXG4gICAgbGFzdFBhZ2UsXG4gIF0pO1xuXG4gIGNvbnN0IGdldFBhZ2VTdGF0dXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgcGFnZXMgPSBjYWxjdWxhdGVQYWdlcygpO1xuICAgIGNvbnN0IGlzU3RhcnQgPSAocGFnZUl0ZW06IGFueSkgPT5cbiAgICAgIGN1cnJQYWdlID09PSBwYWdlU3RhcnRJbmRleCAmJlxuICAgICAgKHBhZ2VJdGVtLnR5cGUgPT09ICdmaXJzdCcgfHwgcGFnZUl0ZW0udHlwZSA9PT0gJ3ByZScpO1xuICAgIGNvbnN0IGlzRW5kID0gKHBhZ2VJdGVtOiBhbnkpID0+XG4gICAgICBjdXJyUGFnZSA9PT0gbGFzdFBhZ2UgJiZcbiAgICAgIChwYWdlSXRlbS50eXBlID09PSAnbmV4dCcgfHwgcGFnZUl0ZW0udHlwZSA9PT0gJ2xhc3QnKTtcblxuICAgIHJldHVybiBwYWdlc1xuICAgICAgLmZpbHRlcigocGFnZUl0ZW06IGFueSkgPT4ge1xuICAgICAgICBpZiAoYWx3YXlzU2hvd0FsbEJ0bnMpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIShpc1N0YXJ0KHBhZ2VJdGVtKSB8fCBpc0VuZChwYWdlSXRlbSkpO1xuICAgICAgfSlcbiAgICAgIC5tYXAoKHBhZ2VJdGVtOiBhbnkpID0+IHtcbiAgICAgICAgbGV0IHRpdGxlOiBhbnk7XG4gICAgICAgIGNvbnN0IGFjdGl2ZSA9IHBhZ2VJdGVtLnBhZ2UgPT09IGN1cnJQYWdlO1xuICAgICAgICBjb25zdCBkaXNhYmxlZCA9IGlzU3RhcnQocGFnZUl0ZW0pIHx8IGlzRW5kKHBhZ2VJdGVtKTtcblxuICAgICAgICBpZiAocGFnZUl0ZW0udHlwZSA9PT0gJ25leHQnKSB7XG4gICAgICAgICAgdGl0bGUgPSBuZXh0UGFnZVRpdGxlO1xuICAgICAgICB9IGVsc2UgaWYgKHBhZ2VJdGVtLnR5cGUgPT09ICdwcmUnKSB7XG4gICAgICAgICAgdGl0bGUgPSBwcmVQYWdlVGl0bGU7XG4gICAgICAgIH0gZWxzZSBpZiAocGFnZUl0ZW0udHlwZSA9PT0gJ2ZpcnN0Jykge1xuICAgICAgICAgIHRpdGxlID0gZmlyc3RQYWdlVGl0bGU7XG4gICAgICAgIH0gZWxzZSBpZiAocGFnZUl0ZW0udHlwZSA9PT0gJ2xhc3QnKSB7XG4gICAgICAgICAgdGl0bGUgPSBsYXN0UGFnZVRpdGxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRpdGxlID0gYCR7cGFnZUl0ZW0ucGFnZX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFnZVJlc3VsdDogYW55ID0geyBwYWdlOiBwYWdlSXRlbS5wYWdlLCBhY3RpdmUsIGRpc2FibGVkLCB0aXRsZSB9O1xuICAgICAgICBpZiAoIWRpc2FibGVQYWdlVGl0bGUpIHtcbiAgICAgICAgICBwYWdlUmVzdWx0LnRpdGxlID0gdGl0bGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhZ2VSZXN1bHQ7XG4gICAgICB9KTtcbiAgfSwgW1xuICAgIGNhbGN1bGF0ZVBhZ2VzLFxuICAgIGN1cnJQYWdlLFxuICAgIHBhZ2VTdGFydEluZGV4LFxuICAgIGZpcnN0UGFnZVRleHQsXG4gICAgcHJlUGFnZVRleHQsXG4gICAgbmV4dFBhZ2VUZXh0LFxuICAgIGxhc3RQYWdlVGV4dCxcbiAgICBhbHdheXNTaG93QWxsQnRucyxcbiAgICBsYXN0UGFnZSxcbiAgICBuZXh0UGFnZVRpdGxlLFxuICAgIHByZVBhZ2VUaXRsZSxcbiAgICBmaXJzdFBhZ2VUaXRsZSxcbiAgICBsYXN0UGFnZVRpdGxlLFxuICAgIGRpc2FibGVQYWdlVGl0bGUsXG4gIF0pO1xuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZVBhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAobmV3UGFnZTogYW55KSA9PiB7XG4gICAgICBsZXQgcGFnZTogYW55O1xuICAgICAgaWYgKG5ld1BhZ2UgPT09IHByZVBhZ2VUZXh0KSB7XG4gICAgICAgIHBhZ2UgPSBiYWNrVG9QcmV2UGFnZSgpO1xuICAgICAgfSBlbHNlIGlmIChuZXdQYWdlID09PSBuZXh0UGFnZVRleHQpIHtcbiAgICAgICAgcGFnZSA9IGN1cnJQYWdlICsgMSA+IGxhc3RQYWdlID8gbGFzdFBhZ2UgOiBjdXJyUGFnZSArIDE7XG4gICAgICB9IGVsc2UgaWYgKG5ld1BhZ2UgPT09IGxhc3RQYWdlVGV4dCkge1xuICAgICAgICBwYWdlID0gbGFzdFBhZ2U7XG4gICAgICB9IGVsc2UgaWYgKG5ld1BhZ2UgPT09IGZpcnN0UGFnZVRleHQpIHtcbiAgICAgICAgcGFnZSA9IHBhZ2VTdGFydEluZGV4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFnZSA9IHBhcnNlSW50KG5ld1BhZ2UsIDEwKTtcbiAgICAgIH1cbiAgICAgIGlmIChwYWdlICE9PSBjdXJyUGFnZSkge1xuICAgICAgICBvblBhZ2VDaGFuZ2UocGFnZSwgY3VyclNpemVQZXJQYWdlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGJhY2tUb1ByZXZQYWdlLFxuICAgICAgY3VyclBhZ2UsXG4gICAgICBwYWdlU3RhcnRJbmRleCxcbiAgICAgIHByZVBhZ2VUZXh0LFxuICAgICAgbmV4dFBhZ2VUZXh0LFxuICAgICAgbGFzdFBhZ2VUZXh0LFxuICAgICAgZmlyc3RQYWdlVGV4dCxcbiAgICAgIG9uUGFnZUNoYW5nZSxcbiAgICAgIGxhc3RQYWdlLFxuICAgIF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVDaGFuZ2VTaXplUGVyUGFnZSA9IHVzZUNhbGxiYWNrKFxuICAgIChzaXplUGVyUGFnZTogYW55KSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RlZFNpemUgPVxuICAgICAgICB0eXBlb2Ygc2l6ZVBlclBhZ2UgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICA/IHBhcnNlSW50KHNpemVQZXJQYWdlLCAxMClcbiAgICAgICAgICA6IHNpemVQZXJQYWdlO1xuICAgICAgbGV0IG5ld0N1cnJQYWdlID0gY3VyclBhZ2U7XG4gICAgICBpZiAoc2VsZWN0ZWRTaXplICE9PSBjdXJyU2l6ZVBlclBhZ2UpIHtcbiAgICAgICAgY29uc3QgbmV3VG90YWxQYWdlcyA9IE1hdGguY2VpbChkYXRhU2l6ZSAvIHNlbGVjdGVkU2l6ZSk7XG4gICAgICAgIGNvbnN0IG5ld0xhc3RQYWdlID0gcGFnZVN0YXJ0SW5kZXggKyBuZXdUb3RhbFBhZ2VzIC0gMTtcbiAgICAgICAgaWYgKG5ld0N1cnJQYWdlID4gbmV3TGFzdFBhZ2UpIG5ld0N1cnJQYWdlID0gbmV3TGFzdFBhZ2U7XG4gICAgICAgIGlmIChvblNpemVQZXJQYWdlQ2hhbmdlKSB7XG4gICAgICAgICAgb25TaXplUGVyUGFnZUNoYW5nZShzZWxlY3RlZFNpemUsIG5ld0N1cnJQYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW2N1cnJQYWdlLCBjdXJyU2l6ZVBlclBhZ2UsIGRhdGFTaXplLCBwYWdlU3RhcnRJbmRleCwgb25TaXplUGVyUGFnZUNoYW5nZV1cbiAgKTtcblxuICBjb25zdCBnZXRTaXplUGVyUGFnZVN0YXR1cyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICByZXR1cm4gc2l6ZVBlclBhZ2VMaXN0Lm1hcCgoX3NpemVQZXJQYWdlOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHBhZ2VUZXh0ID1cbiAgICAgICAgdHlwZW9mIF9zaXplUGVyUGFnZS50ZXh0ICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgPyBfc2l6ZVBlclBhZ2UudGV4dFxuICAgICAgICAgIDogX3NpemVQZXJQYWdlO1xuICAgICAgY29uc3QgcGFnZU51bWJlciA9XG4gICAgICAgIHR5cGVvZiBfc2l6ZVBlclBhZ2UudmFsdWUgIT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgICA/IF9zaXplUGVyUGFnZS52YWx1ZVxuICAgICAgICAgIDogX3NpemVQZXJQYWdlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGV4dDogYCR7cGFnZVRleHR9YCxcbiAgICAgICAgcGFnZTogcGFnZU51bWJlcixcbiAgICAgIH07XG4gICAgfSk7XG4gIH0sIFtzaXplUGVyUGFnZUxpc3RdKTtcblxuICBjb25zdCBmcm9tVG8gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBvZmZzZXQgPSBNYXRoLmFicyhDb25zdC5QQUdFX1NUQVJUX0lOREVYIC0gcGFnZVN0YXJ0SW5kZXgpO1xuXG4gICAgbGV0IGZyb20gPSAoY3VyclBhZ2UgLSBwYWdlU3RhcnRJbmRleCkgKiBjdXJyU2l6ZVBlclBhZ2U7XG4gICAgZnJvbSA9IGRhdGFTaXplID09PSAwID8gMCA6IGZyb20gKyAxO1xuICAgIGxldCB0byA9IE1hdGgubWluKGN1cnJTaXplUGVyUGFnZSAqIChjdXJyUGFnZSArIG9mZnNldCksIGRhdGFTaXplKTtcbiAgICBpZiAodG8gPiBkYXRhU2l6ZSkgdG8gPSBkYXRhU2l6ZTtcblxuICAgIHJldHVybiBbZnJvbSwgdG9dO1xuICB9LCBbZGF0YVNpemUsIGN1cnJQYWdlLCBjdXJyU2l6ZVBlclBhZ2UsIHBhZ2VTdGFydEluZGV4XSk7XG5cbiAgcmV0dXJuIHtcbiAgICB0b3RhbFBhZ2VzLFxuICAgIGxhc3RQYWdlLFxuICAgIGdldFBhZ2VTdGF0dXMsXG4gICAgaGFuZGxlQ2hhbmdlUGFnZSxcbiAgICBoYW5kbGVDaGFuZ2VTaXplUGVyUGFnZSxcbiAgICBnZXRTaXplUGVyUGFnZVN0YXR1cyxcbiAgICBmcm9tVG8sXG4gIH07XG59O1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZUxheW91dEVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tIFwiZXZlbnRzXCI7XG5pbXBvcnQgQ29uc3QgZnJvbSBcIi4uL2NvbnN0XCI7XG5pbXBvcnQgeyBhbGlnblBhZ2UgfSBmcm9tIFwiLi4vcGFnZVwiO1xuXG5leHBvcnQgY29uc3QgdXNlUGFnaW5hdGlvblN0YXRlID0gKHByb3BzOiBhbnkpID0+IHtcbiAgY29uc3QgeyBwYWdpbmF0aW9uLCBib290c3RyYXA0LCB0YWJsZUlkLCByZW1vdGVFbWl0dGVyOiBwcm9wUmVtb3RlRW1pdHRlciB9ID0gcHJvcHM7XG4gIGNvbnN0IG9wdGlvbnMgPSBwYWdpbmF0aW9uIS5vcHRpb25zITtcbiAgY29uc3Qgc2l6ZVBlclBhZ2VMaXN0ID0gb3B0aW9ucy5zaXplUGVyUGFnZUxpc3QgfHwgQ29uc3QuU0laRV9QRVJfUEFHRV9MSVNUO1xuXG4gIGNvbnN0IFtjdXJyUGFnZSwgc2V0Q3VyclBhZ2VdID0gdXNlU3RhdGUoKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5wYWdlICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gb3B0aW9ucy5wYWdlO1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5wYWdlU3RhcnRJbmRleCAhPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIG9wdGlvbnMucGFnZVN0YXJ0SW5kZXg7XG4gICAgcmV0dXJuIENvbnN0LlBBR0VfU1RBUlRfSU5ERVg7XG4gIH0pO1xuXG4gIGNvbnN0IFtjdXJyU2l6ZVBlclBhZ2UsIHNldEN1cnJTaXplUGVyUGFnZV0gPSB1c2VTdGF0ZSgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnNpemVQZXJQYWdlICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gb3B0aW9ucy5zaXplUGVyUGFnZTtcbiAgICBpZiAodHlwZW9mIHNpemVQZXJQYWdlTGlzdFswXSA9PT0gXCJvYmplY3RcIikgcmV0dXJuIChzaXplUGVyUGFnZUxpc3RbMF0gYXMgYW55KS52YWx1ZTtcbiAgICByZXR1cm4gc2l6ZVBlclBhZ2VMaXN0WzBdIGFzIG51bWJlcjtcbiAgfSk7XG5cbiAgY29uc3QgW2RhdGFTaXplLCBzZXREYXRhU2l6ZV0gPSB1c2VTdGF0ZShvcHRpb25zLnRvdGFsU2l6ZSk7XG5cbiAgY29uc3QgZGF0YUNoYW5nZUxpc3RlbmVyUmVmID0gdXNlUmVmKG5ldyBFdmVudEVtaXR0ZXIoKSk7XG4gIGNvbnN0IHJlbW90ZUVtaXR0ZXJSZWYgPSB1c2VSZWY8YW55PihudWxsKTtcblxuICAvLyBTdG9yZSB0aGUgbGF0ZXN0IGlzUmVtb3RlUGFnaW5hdGlvbiBwcm9wIGluIGEgcmVmIHRvIGF2b2lkIHVuc3RhYmxlIGZ1bmN0aW9uIHJlZmVyZW5jZXNcbiAgLy8gKGUuZy4gd2hlbiB0aGUgY2FsbGVyIHBhc3NlcyBhbiBpbmxpbmUgYXJyb3cgZnVuY3Rpb24gbGlrZSBgKCkgPT4gZmFsc2VgKS5cbiAgY29uc3QgaXNSZW1vdGVQYWdpbmF0aW9uUHJvcFJlZiA9IHVzZVJlZihwcm9wcy5pc1JlbW90ZVBhZ2luYXRpb24pO1xuICBjb25zdCBwcm9wUmVtb3RlRW1pdHRlclJlZiA9IHVzZVJlZihwcm9wUmVtb3RlRW1pdHRlcik7XG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaXNSZW1vdGVQYWdpbmF0aW9uUHJvcFJlZi5jdXJyZW50ID0gcHJvcHMuaXNSZW1vdGVQYWdpbmF0aW9uO1xuICAgIHByb3BSZW1vdGVFbWl0dGVyUmVmLmN1cnJlbnQgPSBwcm9wUmVtb3RlRW1pdHRlcjtcbiAgfSk7XG5cbiAgLy8gU3RhYmxlIGNhbGxiYWNrIOKAkyBuZXZlciBjaGFuZ2VzIGlkZW50aXR5LCByZWFkcyBsYXRlc3QgcHJvcCB2YWx1ZXMgdmlhIHJlZnMuXG4gIGNvbnN0IGlzUmVtb3RlUGFnaW5hdGlvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAodHlwZW9mIGlzUmVtb3RlUGFnaW5hdGlvblByb3BSZWYuY3VycmVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gaXNSZW1vdGVQYWdpbmF0aW9uUHJvcFJlZi5jdXJyZW50KCk7XG4gICAgfVxuICAgIGNvbnN0IGUgPSB7IHJlc3VsdDogdW5kZWZpbmVkIH07XG4gICAgY29uc3QgZW1pdHRlciA9IHJlbW90ZUVtaXR0ZXJSZWYuY3VycmVudCB8fCBwcm9wUmVtb3RlRW1pdHRlclJlZi5jdXJyZW50O1xuICAgIGVtaXR0ZXI/LmVtaXQoXCJpc1JlbW90ZVBhZ2luYXRpb25cIiwgZSk7XG4gICAgcmV0dXJuIGUucmVzdWx0O1xuICB9LCBbXSk7IC8vIFtdIOKAkyBpbnRlbnRpb25hbGx5IHN0YWJsZVxuXG4gIGNvbnN0IGhhbmRsZURhdGFTaXplQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKG5ld0RhdGFTaXplOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHBhZ2VTdGFydEluZGV4ID1cbiAgICAgICAgdHlwZW9mIG9wdGlvbnMucGFnZVN0YXJ0SW5kZXggPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgICA/IENvbnN0LlBBR0VfU1RBUlRfSU5ERVhcbiAgICAgICAgICA6IG9wdGlvbnMucGFnZVN0YXJ0SW5kZXg7XG5cbiAgICAgIHNldEN1cnJQYWdlKChwcmV2UGFnZTogbnVtYmVyKSA9PlxuICAgICAgICBhbGlnblBhZ2UoXG4gICAgICAgICAgbmV3RGF0YVNpemUsXG4gICAgICAgICAgZGF0YVNpemUsXG4gICAgICAgICAgcHJldlBhZ2UsXG4gICAgICAgICAgY3VyclNpemVQZXJQYWdlLFxuICAgICAgICAgIHBhZ2VTdGFydEluZGV4XG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBzZXREYXRhU2l6ZShuZXdEYXRhU2l6ZSk7XG4gICAgfSxcbiAgICBbb3B0aW9ucy5wYWdlU3RhcnRJbmRleCwgZGF0YVNpemUsIGN1cnJTaXplUGVyUGFnZV1cbiAgKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGVtaXR0ZXIgPSBkYXRhQ2hhbmdlTGlzdGVuZXJSZWYuY3VycmVudDtcbiAgICBlbWl0dGVyLm9uKFwiZmlsdGVyQ2hhbmdlZFwiLCBoYW5kbGVEYXRhU2l6ZUNoYW5nZSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGVtaXR0ZXIub2ZmKFwiZmlsdGVyQ2hhbmdlZFwiLCBoYW5kbGVEYXRhU2l6ZUNoYW5nZSk7XG4gICAgfTtcbiAgfSwgW2hhbmRsZURhdGFTaXplQ2hhbmdlXSk7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlUGFnZSA9IHVzZUNhbGxiYWNrKFxuICAgIChwYWdlOiBhbnkpID0+IHtcbiAgICAgIGlmIChvcHRpb25zLm9uUGFnZUNoYW5nZSkge1xuICAgICAgICBvcHRpb25zLm9uUGFnZUNoYW5nZShwYWdlLCBjdXJyU2l6ZVBlclBhZ2UpO1xuICAgICAgfVxuXG4gICAgICBzZXRDdXJyUGFnZShwYWdlKTtcblxuICAgICAgaWYgKGlzUmVtb3RlUGFnaW5hdGlvbigpKSB7XG4gICAgICAgIGNvbnN0IGVtaXR0ZXIgPSByZW1vdGVFbWl0dGVyUmVmLmN1cnJlbnQgfHwgcHJvcFJlbW90ZUVtaXR0ZXI7XG4gICAgICAgIGVtaXR0ZXI/LmVtaXQoXCJwYWdpbmF0aW9uQ2hhbmdlXCIsIHBhZ2UsIGN1cnJTaXplUGVyUGFnZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb3B0aW9ucywgY3VyclNpemVQZXJQYWdlLCBpc1JlbW90ZVBhZ2luYXRpb24sIHByb3BSZW1vdGVFbWl0dGVyXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZVNpemVQZXJQYWdlID0gdXNlQ2FsbGJhY2soXG4gICAgKHNpemVQZXJQYWdlOiBhbnksIHBhZ2U6IGFueSkgPT4ge1xuICAgICAgaWYgKG9wdGlvbnMub25TaXplUGVyUGFnZUNoYW5nZSkge1xuICAgICAgICBvcHRpb25zLm9uU2l6ZVBlclBhZ2VDaGFuZ2Uoc2l6ZVBlclBhZ2UsIHBhZ2UpO1xuICAgICAgfVxuXG4gICAgICBzZXRDdXJyUGFnZShwYWdlKTtcbiAgICAgIHNldEN1cnJTaXplUGVyUGFnZShzaXplUGVyUGFnZSk7XG5cbiAgICAgIGlmIChpc1JlbW90ZVBhZ2luYXRpb24oKSkge1xuICAgICAgICBjb25zdCBlbWl0dGVyID0gcmVtb3RlRW1pdHRlclJlZi5jdXJyZW50IHx8IHByb3BSZW1vdGVFbWl0dGVyO1xuICAgICAgICBlbWl0dGVyPy5lbWl0KFwicGFnaW5hdGlvbkNoYW5nZVwiLCBwYWdlLCBzaXplUGVyUGFnZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb3B0aW9ucywgaXNSZW1vdGVQYWdpbmF0aW9uLCBwcm9wUmVtb3RlRW1pdHRlcl1cbiAgKTtcblxuICBjb25zdCBnZXRQYWdpbmF0aW9uUHJvcHMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgZWZmZWN0aXZlRGF0YVNpemUgPSBpc1JlbW90ZVBhZ2luYXRpb24oKSA/IG9wdGlvbnMudG90YWxTaXplISA6IGRhdGFTaXplITtcbiAgICBjb25zdCB3aXRoRmlyc3RBbmRMYXN0ID1cbiAgICAgIHR5cGVvZiBvcHRpb25zLndpdGhGaXJzdEFuZExhc3QgPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgPyBDb25zdC5XaXRoX0ZJUlNUX0FORF9MQVNUXG4gICAgICAgIDogb3B0aW9ucy53aXRoRmlyc3RBbmRMYXN0O1xuICAgIGNvbnN0IGFsd2F5c1Nob3dBbGxCdG5zID1cbiAgICAgIHR5cGVvZiBvcHRpb25zLmFsd2F5c1Nob3dBbGxCdG5zID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgID8gQ29uc3QuU0hPV19BTExfUEFHRV9CVE5TXG4gICAgICAgIDogb3B0aW9ucy5hbHdheXNTaG93QWxsQnRucztcbiAgICBjb25zdCBoaWRlU2l6ZVBlclBhZ2UgPVxuICAgICAgdHlwZW9mIG9wdGlvbnMuaGlkZVNpemVQZXJQYWdlID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgID8gQ29uc3QuSElERV9TSVpFX1BFUl9QQUdFXG4gICAgICAgIDogb3B0aW9ucy5oaWRlU2l6ZVBlclBhZ2U7XG4gICAgY29uc3QgaGlkZVBhZ2VMaXN0T25seU9uZVBhZ2UgPVxuICAgICAgdHlwZW9mIG9wdGlvbnMuaGlkZVBhZ2VMaXN0T25seU9uZVBhZ2UgPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgPyBDb25zdC5ISURFX1BBR0VfTElTVF9PTkxZX09ORV9QQUdFXG4gICAgICAgIDogb3B0aW9ucy5oaWRlUGFnZUxpc3RPbmx5T25lUGFnZTtcbiAgICBjb25zdCBwYWdlU3RhcnRJbmRleCA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucy5wYWdlU3RhcnRJbmRleCA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IENvbnN0LlBBR0VfU1RBUlRfSU5ERVhcbiAgICAgICAgOiBvcHRpb25zLnBhZ2VTdGFydEluZGV4O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBib290c3RyYXA0LFxuICAgICAgdGFibGVJZCxcbiAgICAgIHBhZ2U6IG9wdGlvbnMucGFnZSA/PyBjdXJyUGFnZSxcbiAgICAgIHNpemVQZXJQYWdlOiBjdXJyU2l6ZVBlclBhZ2UsXG4gICAgICBwYWdlU3RhcnRJbmRleCxcbiAgICAgIGhpZGVQYWdlTGlzdE9ubHlPbmVQYWdlLFxuICAgICAgaGlkZVNpemVQZXJQYWdlLFxuICAgICAgYWx3YXlzU2hvd0FsbEJ0bnMsXG4gICAgICB3aXRoRmlyc3RBbmRMYXN0LFxuICAgICAgdG90YWxTaXplOiBlZmZlY3RpdmVEYXRhU2l6ZSxcbiAgICAgIGRhdGFTaXplOiBlZmZlY3RpdmVEYXRhU2l6ZSxcbiAgICAgIHNpemVQZXJQYWdlTGlzdCxcbiAgICAgIHBhZ2luYXRpb25TaXplOiBvcHRpb25zLnBhZ2luYXRpb25TaXplIHx8IENvbnN0LlBBR0lOQVRJT05fU0laRSxcbiAgICAgIHNob3dUb3RhbDogb3B0aW9ucy5zaG93VG90YWwsXG4gICAgICBwYWdlTGlzdFJlbmRlcmVyOiBvcHRpb25zLnBhZ2VMaXN0UmVuZGVyZXIsXG4gICAgICBwYWdlQnV0dG9uUmVuZGVyZXI6IG9wdGlvbnMucGFnZUJ1dHRvblJlbmRlcmVyLFxuICAgICAgc2l6ZVBlclBhZ2VSZW5kZXJlcjogb3B0aW9ucy5zaXplUGVyUGFnZVJlbmRlcmVyLFxuICAgICAgcGFnaW5hdGlvblRvdGFsUmVuZGVyZXI6IG9wdGlvbnMucGFnaW5hdGlvblRvdGFsUmVuZGVyZXIsXG4gICAgICBzaXplUGVyUGFnZU9wdGlvblJlbmRlcmVyOiBvcHRpb25zLnNpemVQZXJQYWdlT3B0aW9uUmVuZGVyZXIsXG4gICAgICBmaXJzdFBhZ2VUZXh0OiBvcHRpb25zLmZpcnN0UGFnZVRleHQgfHwgQ29uc3QuRklSU1RfUEFHRV9URVhULFxuICAgICAgcHJlUGFnZVRleHQ6IG9wdGlvbnMucHJlUGFnZVRleHQgfHwgQ29uc3QuUFJFX1BBR0VfVEVYVCxcbiAgICAgIG5leHRQYWdlVGV4dDogb3B0aW9ucy5uZXh0UGFnZVRleHQgfHwgQ29uc3QuTkVYVF9QQUdFX1RFWFQsXG4gICAgICBsYXN0UGFnZVRleHQ6IG9wdGlvbnMubGFzdFBhZ2VUZXh0IHx8IENvbnN0LkxBU1RfUEFHRV9URVhULFxuICAgICAgcHJlUGFnZVRpdGxlOiBvcHRpb25zLnByZVBhZ2VUaXRsZSB8fCBDb25zdC5QUkVfUEFHRV9USVRMRSxcbiAgICAgIG5leHRQYWdlVGl0bGU6IG9wdGlvbnMubmV4dFBhZ2VUaXRsZSB8fCBDb25zdC5ORVhUX1BBR0VfVElUTEUsXG4gICAgICBmaXJzdFBhZ2VUaXRsZTogb3B0aW9ucy5maXJzdFBhZ2VUaXRsZSB8fCBDb25zdC5GSVJTVF9QQUdFX1RJVExFLFxuICAgICAgbGFzdFBhZ2VUaXRsZTogb3B0aW9ucy5sYXN0UGFnZVRpdGxlIHx8IENvbnN0LkxBU1RfUEFHRV9USVRMRSxcbiAgICAgIG9uUGFnZUNoYW5nZTogaGFuZGxlQ2hhbmdlUGFnZSxcbiAgICAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2U6IGhhbmRsZUNoYW5nZVNpemVQZXJQYWdlLFxuICAgIH07XG4gIH0sIFtcbiAgICBpc1JlbW90ZVBhZ2luYXRpb24sXG4gICAgb3B0aW9ucyxcbiAgICBkYXRhU2l6ZSxcbiAgICBib290c3RyYXA0LFxuICAgIHRhYmxlSWQsXG4gICAgY3VyclBhZ2UsXG4gICAgY3VyclNpemVQZXJQYWdlLFxuICAgIHNpemVQZXJQYWdlTGlzdCxcbiAgICBoYW5kbGVDaGFuZ2VQYWdlLFxuICAgIGhhbmRsZUNoYW5nZVNpemVQZXJQYWdlLFxuICBdKTtcblxuICByZXR1cm4ge1xuICAgIGN1cnJQYWdlLFxuICAgIHNldEN1cnJQYWdlLFxuICAgIGN1cnJTaXplUGVyUGFnZSxcbiAgICBzZXRDdXJyU2l6ZVBlclBhZ2UsXG4gICAgZGF0YVNpemUsXG4gICAgc2V0RGF0YVNpemUsXG4gICAgZGF0YUNoYW5nZUxpc3RlbmVyOiBkYXRhQ2hhbmdlTGlzdGVuZXJSZWYuY3VycmVudCxcbiAgICByZW1vdGVFbWl0dGVyUmVmLFxuICAgIGlzUmVtb3RlUGFnaW5hdGlvbixcbiAgICBoYW5kbGVDaGFuZ2VQYWdlLFxuICAgIGhhbmRsZUNoYW5nZVNpemVQZXJQYWdlLFxuICAgIGdldFBhZ2luYXRpb25Qcm9wcyxcbiAgfTtcbn07XG4iLCIvKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG5pbXBvcnQgY3MgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIFBhZ2VCdXR0b25Qcm9wcyB7XG4gIG9uUGFnZUNoYW5nZTogKHBhZ2U6IGFueSkgPT4gdm9pZDtcbiAgcGFnZTogUmVhY3QuUmVhY3ROb2RlIHwgbnVtYmVyIHwgc3RyaW5nO1xuICBhY3RpdmU6IGJvb2xlYW47XG4gIGRpc2FibGVkOiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xufVxuXG5jb25zdCBQYWdlQnV0dG9uOiBSZWFjdC5GQzxQYWdlQnV0dG9uUHJvcHM+ID0gUmVhY3QubWVtbygocHJvcHMpID0+IHtcbiAgY29uc3QgeyBwYWdlLCB0aXRsZSwgYWN0aXZlLCBkaXNhYmxlZCwgY2xhc3NOYW1lLCBvblBhZ2VDaGFuZ2UgfSA9IHByb3BzO1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gKGU6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTEFuY2hvckVsZW1lbnQ+KSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIG9uUGFnZUNoYW5nZShwYWdlKTtcbiAgfTtcblxuICBjb25zdCBjbGFzc2VzID0gY3MoXG4gICAge1xuICAgICAgYWN0aXZlLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBcInBhZ2UtaXRlbVwiOiB0cnVlLFxuICAgIH0sXG4gICAgY2xhc3NOYW1lXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8bGkgY2xhc3NOYW1lPXtjbGFzc2VzfSB0aXRsZT17dGl0bGV9PlxuICAgICAgPGEgaHJlZj1cIiNcIiBvbkNsaWNrPXtoYW5kbGVDbGlja30gY2xhc3NOYW1lPVwicGFnZS1saW5rXCI+XG4gICAgICAgIHtwYWdlfVxuICAgICAgPC9hPlxuICAgIDwvbGk+XG4gICk7XG59KTtcblxuXG5cbmV4cG9ydCBkZWZhdWx0IFBhZ2VCdXR0b247XG4iLCJpbXBvcnQgQ29uc3QgZnJvbSBcIi4vY29uc3RcIjtcblxuY29uc3QgZ2V0Tm9ybWFsaXplZFBhZ2UgPSAocGFnZTogYW55LCBwYWdlU3RhcnRJbmRleDogYW55KSA9PiB7XG4gIGNvbnN0IG9mZnNldCA9IE1hdGguYWJzKDEgLSBwYWdlU3RhcnRJbmRleCk7XG4gIHJldHVybiBwYWdlICsgb2Zmc2V0O1xufTtcblxuY29uc3QgZW5kSW5kZXggPSAocGFnZTogYW55LCBzaXplUGVyUGFnZTogYW55LCBwYWdlU3RhcnRJbmRleDogYW55KSA9PlxuICBnZXROb3JtYWxpemVkUGFnZShwYWdlLCBwYWdlU3RhcnRJbmRleCkgKiBzaXplUGVyUGFnZSAtIDE7XG5cbmNvbnN0IHN0YXJ0SW5kZXggPSAoZW5kOiBhbnksIHNpemVQZXJQYWdlOiBhbnkpID0+IGVuZCAtIChzaXplUGVyUGFnZSAtIDEpO1xuXG5leHBvcnQgY29uc3QgYWxpZ25QYWdlID0gKFxuICBkYXRhU2l6ZTogYW55LFxuICBwcmV2RGF0YVNpemU6IGFueSxcbiAgcGFnZTogYW55LFxuICBzaXplUGVyUGFnZTogYW55LFxuICBwYWdlU3RhcnRJbmRleDogYW55XG4pID0+IHtcbiAgaWYgKHByZXZEYXRhU2l6ZSA8IGRhdGFTaXplKSByZXR1cm4gcGFnZTtcbiAgaWYgKHBhZ2UgPCBwYWdlU3RhcnRJbmRleCkgcmV0dXJuIHBhZ2VTdGFydEluZGV4O1xuICBpZiAoZGF0YVNpemUgPD0gMCkgcmV0dXJuIHBhZ2VTdGFydEluZGV4O1xuICBpZiAoXG4gICAgcGFnZSA+PSBNYXRoLmZsb29yKGRhdGFTaXplIC8gc2l6ZVBlclBhZ2UpICsgcGFnZVN0YXJ0SW5kZXggJiZcbiAgICBwYWdlU3RhcnRJbmRleCA9PT0gMVxuICApIHtcbiAgICByZXR1cm4gTWF0aC5jZWlsKGRhdGFTaXplIC8gc2l6ZVBlclBhZ2UpO1xuICB9XG4gIGlmIChwYWdlID49IE1hdGguZmxvb3IoZGF0YVNpemUgLyBzaXplUGVyUGFnZSkgJiYgcGFnZVN0YXJ0SW5kZXggPT09IDApIHtcbiAgICBjb25zdCBuZXdQYWdlID0gTWF0aC5jZWlsKGRhdGFTaXplIC8gc2l6ZVBlclBhZ2UpO1xuICAgIHJldHVybiBuZXdQYWdlIC0gTWF0aC5hYnMoQ29uc3QuUEFHRV9TVEFSVF9JTkRFWCAtIHBhZ2VTdGFydEluZGV4KTtcbiAgfVxuICByZXR1cm4gcGFnZTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRCeUN1cnJQYWdlID0gKFxuICBkYXRhOiBhbnksXG4gIHBhZ2U6IGFueSxcbiAgc2l6ZVBlclBhZ2U6IGFueSxcbiAgcGFnZVN0YXJ0SW5kZXg6IGFueVxuKSA9PiB7XG4gIGNvbnN0IGRhdGFTaXplID0gZGF0YS5sZW5ndGg7XG4gIGlmICghZGF0YVNpemUpIHJldHVybiBbXTtcblxuICBjb25zdCBlbmQgPSBlbmRJbmRleChwYWdlLCBzaXplUGVyUGFnZSwgcGFnZVN0YXJ0SW5kZXgpO1xuICBjb25zdCBzdGFydCA9IHN0YXJ0SW5kZXgoZW5kLCBzaXplUGVyUGFnZSk7XG5cbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGZvciAobGV0IGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkgKz0gMSkge1xuICAgIHJlc3VsdC5wdXNoKGRhdGFbaV0pO1xuICAgIGlmIChpICsgMSA9PT0gZGF0YVNpemUpIGJyZWFrO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiaW1wb3J0IFJlYWN0LCB7IEZDIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VQYWdpbmF0aW9uIH0gZnJvbSBcIi4vaG9va3MvdXNlUGFnaW5hdGlvblwiO1xuXG5leHBvcnQgZGVmYXVsdCAoV3JhcHBlZENvbXBvbmVudDogYW55KSA9PiB7XG4gIGNvbnN0IFBhZ2luYXRpb25IYW5kbGVyOiBGQzxhbnk+ID0gKHByb3BzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgY3VyclBhZ2UsXG4gICAgICBjdXJyU2l6ZVBlclBhZ2UsXG4gICAgICBkYXRhU2l6ZSxcbiAgICAgIHRvdGFsU2l6ZSxcbiAgICAgIHBhZ2VTdGFydEluZGV4LFxuICAgICAgcGFnaW5hdGlvblNpemUsXG4gICAgICB3aXRoRmlyc3RBbmRMYXN0LFxuICAgICAgZmlyc3RQYWdlVGV4dCxcbiAgICAgIHByZVBhZ2VUZXh0LFxuICAgICAgbmV4dFBhZ2VUZXh0LFxuICAgICAgbGFzdFBhZ2VUZXh0LFxuICAgICAgYWx3YXlzU2hvd0FsbEJ0bnMsXG4gICAgICBvblBhZ2VDaGFuZ2UsXG4gICAgICBvblNpemVQZXJQYWdlQ2hhbmdlLFxuICAgIH0gPSBwcm9wcztcblxuICAgIGNvbnN0IHtcbiAgICAgIHRvdGFsUGFnZXMsXG4gICAgICBsYXN0UGFnZSxcbiAgICAgIGhhbmRsZUNoYW5nZVBhZ2UsXG4gICAgICBoYW5kbGVDaGFuZ2VTaXplUGVyUGFnZSxcbiAgICB9ID0gdXNlUGFnaW5hdGlvbih7XG4gICAgICBjdXJyUGFnZSxcbiAgICAgIGN1cnJTaXplUGVyUGFnZSxcbiAgICAgIGRhdGFTaXplOiB0b3RhbFNpemUgPz8gZGF0YVNpemUsXG4gICAgICBwYWdlU3RhcnRJbmRleCxcbiAgICAgIHBhZ2luYXRpb25TaXplLFxuICAgICAgd2l0aEZpcnN0QW5kTGFzdCxcbiAgICAgIGZpcnN0UGFnZVRleHQsXG4gICAgICBwcmVQYWdlVGV4dCxcbiAgICAgIG5leHRQYWdlVGV4dCxcbiAgICAgIGxhc3RQYWdlVGV4dCxcbiAgICAgIGFsd2F5c1Nob3dBbGxCdG5zLFxuICAgICAgb25QYWdlQ2hhbmdlLFxuICAgICAgb25TaXplUGVyUGFnZUNoYW5nZSxcbiAgICB9IGFzIGFueSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFdyYXBwZWRDb21wb25lbnRcbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgICBsYXN0UGFnZT17bGFzdFBhZ2V9XG4gICAgICAgIHRvdGFsUGFnZXM9e3RvdGFsUGFnZXN9XG4gICAgICAgIG9uUGFnZUNoYW5nZT17aGFuZGxlQ2hhbmdlUGFnZX1cbiAgICAgICAgb25TaXplUGVyUGFnZUNoYW5nZT17aGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2V9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIFBhZ2luYXRpb25IYW5kbGVyO1xufTtcbiIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IHVzZVBhZ2luYXRpb24gfSBmcm9tIFwiLi9ob29rcy91c2VQYWdpbmF0aW9uXCI7XG5pbXBvcnQgUGFnaW5hdGlvbkxpc3QgZnJvbSBcIi4vcGFnaW5hdGlvbi1saXN0XCI7XG5cbmNvbnN0IHBhZ2luYXRpb25MaXN0QWRhcHRlciA9IChXcmFwcGVkQ29tcG9uZW50OiBhbnkpID0+IHtcbiAgcmV0dXJuIChwcm9wczogYW55KSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgbGFzdFBhZ2UsXG4gICAgICB0b3RhbFBhZ2VzLFxuICAgICAgcGFnZUJ1dHRvblJlbmRlcmVyLFxuICAgICAgb25QYWdlQ2hhbmdlLFxuICAgICAgZGlzYWJsZVBhZ2VUaXRsZSxcbiAgICAgIGhpZGVQYWdlTGlzdE9ubHlPbmVQYWdlLFxuICAgICAgY3VyclBhZ2UsXG4gICAgICBjdXJyU2l6ZVBlclBhZ2UsXG4gICAgICBkYXRhU2l6ZSxcbiAgICAgIHBhZ2VTdGFydEluZGV4LFxuICAgICAgcGFnaW5hdGlvblNpemUsXG4gICAgICB3aXRoRmlyc3RBbmRMYXN0LFxuICAgICAgYWx3YXlzU2hvd0FsbEJ0bnMsXG4gICAgICBmaXJzdFBhZ2VUZXh0LFxuICAgICAgcHJlUGFnZVRleHQsXG4gICAgICBuZXh0UGFnZVRleHQsXG4gICAgICBsYXN0UGFnZVRleHQsXG4gICAgICBuZXh0UGFnZVRpdGxlLFxuICAgICAgcHJlUGFnZVRpdGxlLFxuICAgICAgZmlyc3RQYWdlVGl0bGUsXG4gICAgICBsYXN0UGFnZVRpdGxlLFxuICAgIH0gPSBwcm9wcztcblxuICAgIGNvbnN0IHsgZ2V0UGFnZVN0YXR1cyB9ID0gdXNlUGFnaW5hdGlvbih7XG4gICAgICBjdXJyUGFnZSxcbiAgICAgIGN1cnJTaXplUGVyUGFnZSxcbiAgICAgIGRhdGFTaXplLFxuICAgICAgcGFnZVN0YXJ0SW5kZXgsXG4gICAgICBwYWdpbmF0aW9uU2l6ZSxcbiAgICAgIHdpdGhGaXJzdEFuZExhc3QsXG4gICAgICBhbHdheXNTaG93QWxsQnRucyxcbiAgICAgIGZpcnN0UGFnZVRleHQsXG4gICAgICBwcmVQYWdlVGV4dCxcbiAgICAgIG5leHRQYWdlVGV4dCxcbiAgICAgIGxhc3RQYWdlVGV4dCxcbiAgICAgIHNpemVQZXJQYWdlTGlzdDogcHJvcHMuc2l6ZVBlclBhZ2VMaXN0IHx8IFtdLFxuICAgICAgb25QYWdlQ2hhbmdlLFxuICAgICAgbmV4dFBhZ2VUaXRsZSxcbiAgICAgIHByZVBhZ2VUaXRsZSxcbiAgICAgIGZpcnN0UGFnZVRpdGxlLFxuICAgICAgbGFzdFBhZ2VUaXRsZSxcbiAgICAgIGRpc2FibGVQYWdlVGl0bGUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBwYWdlcyA9IGdldFBhZ2VTdGF0dXMoKTtcblxuICAgIGlmICh0b3RhbFBhZ2VzID09PSAxICYmIGhpZGVQYWdlTGlzdE9ubHlPbmVQYWdlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFdyYXBwZWRDb21wb25lbnRcbiAgICAgICAgcGFnZUJ1dHRvblJlbmRlcmVyPXtwYWdlQnV0dG9uUmVuZGVyZXJ9XG4gICAgICAgIG9uUGFnZUNoYW5nZT17b25QYWdlQ2hhbmdlfVxuICAgICAgICBwYWdlcz17cGFnZXN9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgUGFnaW5hdGlvbkxpc3RXaXRoQWRhcHRlciA9IHBhZ2luYXRpb25MaXN0QWRhcHRlcihQYWdpbmF0aW9uTGlzdCk7XG5leHBvcnQgZGVmYXVsdCBwYWdpbmF0aW9uTGlzdEFkYXB0ZXI7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUGFnaW5hdGlvbkhhbmRsZXIgZnJvbSBcIi4vcGFnaW5hdGlvbi1oYW5kbGVyXCI7XG5pbXBvcnQgUGFnaW5hdGlvbkxpc3QgZnJvbSBcIi4vcGFnaW5hdGlvbi1saXN0XCI7XG5pbXBvcnQgcGFnaW5hdGlvbkxpc3RBZGFwdGVyIGZyb20gXCIuL3BhZ2luYXRpb24tbGlzdC1hZGFwdGVyXCI7XG5pbXBvcnQgc3RhbmRhbG9uZUFkYXB0ZXIgZnJvbSBcIi4vc3RhbmRhbG9uZS1hZGFwdGVyXCI7XG5cbmNvbnN0IFBhZ2luYXRpb25MaXN0U3RhbmRhbG9uZSA9IChwcm9wczogYW55KSA9PiA8UGFnaW5hdGlvbkxpc3Qgey4uLnByb3BzfSAvPjtcblxuZXhwb3J0IGRlZmF1bHQgc3RhbmRhbG9uZUFkYXB0ZXIoXG4gIFBhZ2luYXRpb25IYW5kbGVyKHBhZ2luYXRpb25MaXN0QWRhcHRlcihQYWdpbmF0aW9uTGlzdFN0YW5kYWxvbmUpKVxuKTtcbiIsIlxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgUGFnZUJ1dHRvbiBmcm9tIFwiLi9wYWdlLWJ1dHRvblwiO1xuXG5pbnRlcmZhY2UgUGFnaW5hdGlvbkxpc3RQcm9wcyB7XG4gIHBhZ2VzOiBBcnJheTx7XG4gICAgcGFnZTogUmVhY3QuUmVhY3ROb2RlIHwgbnVtYmVyIHwgc3RyaW5nO1xuICAgIGFjdGl2ZT86IGJvb2xlYW47XG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIHRpdGxlPzogc3RyaW5nO1xuICB9PjtcbiAgb25QYWdlQ2hhbmdlOiAocGFnZTogYW55KSA9PiB2b2lkO1xuICBwYWdlQnV0dG9uUmVuZGVyZXI/OiAocHJvcHM6IGFueSkgPT4gUmVhY3QuUmVhY3RFbGVtZW50IHwgbnVsbDtcbn1cblxuY29uc3QgUGFnaW5hdG9uTGlzdCA9IChwcm9wczogUGFnaW5hdGlvbkxpc3RQcm9wcykgPT4gKFxuICA8dWwgY2xhc3NOYW1lPVwicGFnaW5hdGlvbiByZWFjdC1ib290c3RyYXAtdGFibGUtcGFnZS1idG5zLXVsXCI+XG4gICAge3Byb3BzLnBhZ2VzLm1hcCgocGFnZVByb3BzOiBhbnkpID0+IHtcbiAgICAgIGlmIChwcm9wcy5wYWdlQnV0dG9uUmVuZGVyZXIpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHByb3BzLnBhZ2VCdXR0b25SZW5kZXJlcih7XG4gICAgICAgICAgLi4ucGFnZVByb3BzLFxuICAgICAgICAgIG9uUGFnZUNoYW5nZTogcHJvcHMub25QYWdlQ2hhbmdlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQgPyBSZWFjdC5jbG9uZUVsZW1lbnQoZWxlbWVudCwgeyBrZXk6IHBhZ2VQcm9wcy5wYWdlIH0pIDogbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxQYWdlQnV0dG9uXG4gICAgICAgICAga2V5PXtwYWdlUHJvcHMucGFnZX1cbiAgICAgICAgICB7Li4ucGFnZVByb3BzfVxuICAgICAgICAgIG9uUGFnZUNoYW5nZT17cHJvcHMub25QYWdlQ2hhbmdlfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9KX1cbiAgPC91bD5cbik7XG5cblxuZXhwb3J0IGRlZmF1bHQgUGFnaW5hdG9uTGlzdDtcbiIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VQYWdpbmF0aW9uIH0gZnJvbSBcIi4vaG9va3MvdXNlUGFnaW5hdGlvblwiO1xuaW1wb3J0IFBhZ2luYXRpb25Ub3RhbCBmcm9tIFwiLi9wYWdpbmF0aW9uLXRvdGFsXCI7XG5cbmNvbnN0IHBhZ2luYXRpb25Ub3RhbEFkYXB0ZXIgPSAoV3JhcHBlZENvbXBvbmVudDogYW55KSA9PiB7XG4gIHJldHVybiAocHJvcHM6IGFueSkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGN1cnJQYWdlLFxuICAgICAgY3VyclNpemVQZXJQYWdlLFxuICAgICAgcGFnZVN0YXJ0SW5kZXgsXG4gICAgICBkYXRhU2l6ZSxcbiAgICAgIHBhZ2luYXRpb25Ub3RhbFJlbmRlcmVyLFxuICAgICAgLy8gRGVmYXVsdCB2YWx1ZXMgZnJvbSB1c2VQYWdpbmF0aW9uU3RhdGUgb3IgcHJvcHNcbiAgICAgIHBhZ2luYXRpb25TaXplID0gNSxcbiAgICAgIHdpdGhGaXJzdEFuZExhc3QgPSB0cnVlLFxuICAgICAgYWx3YXlzU2hvd0FsbEJ0bnMgPSBmYWxzZSxcbiAgICAgIGZpcnN0UGFnZVRleHQgPSBcIjw8XCIsXG4gICAgICBwcmVQYWdlVGV4dCA9IFwiPFwiLFxuICAgICAgbmV4dFBhZ2VUZXh0ID0gXCI+XCIsXG4gICAgICBsYXN0UGFnZVRleHQgPSBcIj4+XCIsXG4gICAgICBvblBhZ2VDaGFuZ2UgPSAoKSA9PiB7fSxcbiAgICB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCB7IGZyb21UbyB9ID0gdXNlUGFnaW5hdGlvbih7XG4gICAgICBjdXJyUGFnZSxcbiAgICAgIGN1cnJTaXplUGVyUGFnZSxcbiAgICAgIGRhdGFTaXplLFxuICAgICAgcGFnZVN0YXJ0SW5kZXgsXG4gICAgICBwYWdpbmF0aW9uU2l6ZSxcbiAgICAgIHdpdGhGaXJzdEFuZExhc3QsXG4gICAgICBhbHdheXNTaG93QWxsQnRucyxcbiAgICAgIGZpcnN0UGFnZVRleHQsXG4gICAgICBwcmVQYWdlVGV4dCxcbiAgICAgIG5leHRQYWdlVGV4dCxcbiAgICAgIGxhc3RQYWdlVGV4dCxcbiAgICAgIHNpemVQZXJQYWdlTGlzdDogcHJvcHMuc2l6ZVBlclBhZ2VMaXN0IHx8IFtdLFxuICAgICAgb25QYWdlQ2hhbmdlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgW2Zyb20sIHRvXSA9IGZyb21UbztcblxuICAgIHJldHVybiAoXG4gICAgICA8V3JhcHBlZENvbXBvbmVudFxuICAgICAgICBmcm9tPXtmcm9tfVxuICAgICAgICB0bz17dG99XG4gICAgICAgIGRhdGFTaXplPXtkYXRhU2l6ZX1cbiAgICAgICAgcGFnaW5hdGlvblRvdGFsUmVuZGVyZXI9e3BhZ2luYXRpb25Ub3RhbFJlbmRlcmVyfVxuICAgICAgLz5cbiAgICApO1xuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IFBhZ2luYXRpb25Ub3RhbFdpdGhBZGFwdGVyID1cbiAgcGFnaW5hdGlvblRvdGFsQWRhcHRlcihQYWdpbmF0aW9uVG90YWwpO1xuZXhwb3J0IGRlZmF1bHQgcGFnaW5hdGlvblRvdGFsQWRhcHRlcjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBQYWdpbmF0aW9uVG90YWwgZnJvbSBcIi4vcGFnaW5hdGlvbi10b3RhbFwiO1xuaW1wb3J0IHBhZ2luYXRpb25Ub3RhbEFkYXB0ZXIgZnJvbSBcIi4vcGFnaW5hdGlvbi10b3RhbC1hZGFwdGVyXCI7XG5pbXBvcnQgc3RhbmRhbG9uZUFkYXB0ZXIgZnJvbSBcIi4vc3RhbmRhbG9uZS1hZGFwdGVyXCI7XG5cbmNvbnN0IFBhZ2luYXRpb25Ub3RhbFN0YW5kYWxvbmUgPSAocHJvcHM6IGFueSkgPT4gKFxuICA8UGFnaW5hdGlvblRvdGFsIHsuLi5wcm9wc30gLz5cbik7XG5cbmV4cG9ydCBkZWZhdWx0IHN0YW5kYWxvbmVBZGFwdGVyKFxuICBwYWdpbmF0aW9uVG90YWxBZGFwdGVyKFBhZ2luYXRpb25Ub3RhbFN0YW5kYWxvbmUpXG4pO1xuIiwiXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmludGVyZmFjZSBQYWdpbmF0aW9uVG90YWxQcm9wcyB7XG4gIGZyb206IG51bWJlcjtcbiAgdG86IG51bWJlcjtcbiAgZGF0YVNpemU6IG51bWJlcjtcbiAgcGFnaW5hdGlvblRvdGFsUmVuZGVyZXI/OiAoZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyLCBkYXRhU2l6ZTogbnVtYmVyKSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQgfCBudWxsO1xufVxuXG5jb25zdCBQYWdpbmF0aW9uVG90YWwgPSAocHJvcHM6IFBhZ2luYXRpb25Ub3RhbFByb3BzKSA9PiB7XG4gIGlmIChwcm9wcy5wYWdpbmF0aW9uVG90YWxSZW5kZXJlcikge1xuICAgIHJldHVybiBwcm9wcy5wYWdpbmF0aW9uVG90YWxSZW5kZXJlcihwcm9wcy5mcm9tLCBwcm9wcy50bywgcHJvcHMuZGF0YVNpemUpO1xuICB9XG4gIHJldHVybiAoXG4gICAgPHNwYW4gY2xhc3NOYW1lPVwicmVhY3QtYm9vdHN0cmFwLXRhYmxlLXBhZ2luYXRpb24tdG90YWxcIj5cbiAgICAgICZuYnNwO1Nob3dpbmcgcm93cyB7cHJvcHMuZnJvbX0gdG8mbmJzcDt7cHJvcHMudG99IG9mJm5ic3A7XG4gICAgICB7cHJvcHMuZGF0YVNpemV9XG4gICAgPC9zcGFuPlxuICApO1xufTtcblxuXG5leHBvcnQgZGVmYXVsdCBQYWdpbmF0aW9uVG90YWw7XG4iLCIvKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgYXJyb3ctYm9keS1zdHlsZTogMCAqL1xuaW1wb3J0IGNzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgQ29uc3QgZnJvbSBcIi4vY29uc3RcIjtcbmltcG9ydCB7IFBhZ2luYXRpb25MaXN0V2l0aEFkYXB0ZXIgfSBmcm9tIFwiLi9wYWdpbmF0aW9uLWxpc3QtYWRhcHRlclwiO1xuaW1wb3J0IHsgUGFnaW5hdGlvblRvdGFsV2l0aEFkYXB0ZXIgfSBmcm9tIFwiLi9wYWdpbmF0aW9uLXRvdGFsLWFkYXB0ZXJcIjtcbmltcG9ydCB7IFNpemVQZXJQYWdlRHJvcGRvd25XaXRoQWRhcHRlciB9IGZyb20gXCIuL3NpemUtcGVyLXBhZ2UtZHJvcGRvd24tYWRhcHRlclwiO1xuaW1wb3J0IHsgdXNlUGFnaW5hdGlvbiB9IGZyb20gXCIuL2hvb2tzL3VzZVBhZ2luYXRpb25cIjtcblxuY29uc3QgUGFnaW5hdGlvbjogUmVhY3QuRkM8YW55PiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgdGFibGVJZCxcbiAgICBjdXJyUGFnZSxcbiAgICBwYWdlU3RhcnRJbmRleCA9IENvbnN0LlBBR0VfU1RBUlRfSU5ERVgsXG4gICAgc2hvd1RvdGFsID0gQ29uc3QuU0hPV19UT1RBTCxcbiAgICBkYXRhU2l6ZSxcbiAgICBwYWdlTGlzdFJlbmRlcmVyID0gbnVsbCxcbiAgICBwYWdlQnV0dG9uUmVuZGVyZXIgPSBudWxsLFxuICAgIHBhZ2luYXRpb25Ub3RhbFJlbmRlcmVyID0gQ29uc3QuUEFHSU5BVElPTl9UT1RBTCxcbiAgICBoaWRlUGFnZUxpc3RPbmx5T25lUGFnZSA9IENvbnN0LkhJREVfUEFHRV9MSVNUX09OTFlfT05FX1BBR0UsXG4gICAgb25QYWdlQ2hhbmdlLFxuICAgIHNpemVQZXJQYWdlTGlzdCA9IENvbnN0LlNJWkVfUEVSX1BBR0VfTElTVCxcbiAgICBjdXJyU2l6ZVBlclBhZ2UsXG4gICAgaGlkZVNpemVQZXJQYWdlID0gQ29uc3QuSElERV9TSVpFX1BFUl9QQUdFLFxuICAgIHNpemVQZXJQYWdlUmVuZGVyZXIgPSBudWxsLFxuICAgIHNpemVQZXJQYWdlT3B0aW9uUmVuZGVyZXIgPSBudWxsLFxuICAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2UsXG4gICAgYm9vdHN0cmFwNCA9IGZhbHNlLFxuICAgIGJvb3RzdHJhcDUgPSBmYWxzZSxcbiAgICBkaXNhYmxlUGFnZVRpdGxlID0gZmFsc2UsXG4gICAgcGFnaW5hdGlvblNpemUgPSBDb25zdC5QQUdJTkFUSU9OX1NJWkUsXG4gICAgd2l0aEZpcnN0QW5kTGFzdCA9IENvbnN0LldpdGhfRklSU1RfQU5EX0xBU1QsXG4gICAgYWx3YXlzU2hvd0FsbEJ0bnMgPSBDb25zdC5TSE9XX0FMTF9QQUdFX0JUTlMsXG4gICAgZmlyc3RQYWdlVGV4dCA9IENvbnN0LkZJUlNUX1BBR0VfVEVYVCxcbiAgICBwcmVQYWdlVGV4dCA9IENvbnN0LlBSRV9QQUdFX1RFWFQsXG4gICAgbmV4dFBhZ2VUZXh0ID0gQ29uc3QuTkVYVF9QQUdFX1RFWFQsXG4gICAgbGFzdFBhZ2VUZXh0ID0gQ29uc3QuTEFTVF9QQUdFX1RFWFQsXG4gICAgbmV4dFBhZ2VUaXRsZSA9IENvbnN0Lk5FWFRfUEFHRV9USVRMRSxcbiAgICBwcmVQYWdlVGl0bGUgPSBDb25zdC5QUkVfUEFHRV9USVRMRSxcbiAgICBmaXJzdFBhZ2VUaXRsZSA9IENvbnN0LkZJUlNUX1BBR0VfVElUTEUsXG4gICAgbGFzdFBhZ2VUaXRsZSA9IENvbnN0LkxBU1RfUEFHRV9USVRMRSxcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcblxuICBjb25zdCB7XG4gICAgdG90YWxQYWdlcyxcbiAgICBsYXN0UGFnZSxcbiAgICBnZXRQYWdlU3RhdHVzLFxuICAgIGhhbmRsZUNoYW5nZVBhZ2UsXG4gICAgaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2UsXG4gIH0gPSB1c2VQYWdpbmF0aW9uKHtcbiAgICBjdXJyUGFnZSxcbiAgICBjdXJyU2l6ZVBlclBhZ2UsXG4gICAgZGF0YVNpemUsXG4gICAgcGFnZVN0YXJ0SW5kZXgsXG4gICAgcGFnaW5hdGlvblNpemUsXG4gICAgd2l0aEZpcnN0QW5kTGFzdCxcbiAgICBmaXJzdFBhZ2VUZXh0LFxuICAgIHByZVBhZ2VUZXh0LFxuICAgIG5leHRQYWdlVGV4dCxcbiAgICBsYXN0UGFnZVRleHQsXG4gICAgYWx3YXlzU2hvd0FsbEJ0bnMsXG4gICAgc2l6ZVBlclBhZ2VMaXN0LFxuICAgIG9uUGFnZUNoYW5nZSxcbiAgICBvblNpemVQZXJQYWdlQ2hhbmdlLFxuICAgIG5leHRQYWdlVGl0bGUsXG4gICAgcHJlUGFnZVRpdGxlLFxuICAgIGZpcnN0UGFnZVRpdGxlLFxuICAgIGxhc3RQYWdlVGl0bGUsXG4gICAgZGlzYWJsZVBhZ2VUaXRsZSxcbiAgfSk7XG5cbiAgY29uc3QgcGFnZXMgPSBnZXRQYWdlU3RhdHVzKCk7XG5cbiAgY29uc3QgcGFnZUxpc3RDbGFzcyA9IGNzKFxuICAgIFwicmVhY3QtYm9vdHN0cmFwLXRhYmxlLXBhZ2luYXRpb24tbGlzdFwiLFxuICAgIFwiY29sLW1kLTYgY29sLXhzLTYgY29sLTYgY29sLXNtLTYgY29sLWxnLTZcIixcbiAgICB7XG4gICAgICBcInJlYWN0LWJvb3RzdHJhcC10YWJsZS1wYWdpbmF0aW9uLWxpc3QtaGlkZGVuXCI6XG4gICAgICAgIGhpZGVQYWdlTGlzdE9ubHlPbmVQYWdlICYmIHRvdGFsUGFnZXMgPT09IDEsXG4gICAgfVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJyb3cgcmVhY3QtYm9vdHN0cmFwLXRhYmxlLXBhZ2luYXRpb25cIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTYgY29sLXhzLTYgY29sLTYgY29sLXNtLTYgY29sLWxnLTZcIj5cbiAgICAgICAgPFNpemVQZXJQYWdlRHJvcGRvd25XaXRoQWRhcHRlclxuICAgICAgICAgIGJvb3RzdHJhcDQ9e2Jvb3RzdHJhcDR9XG4gICAgICAgICAgYm9vdHN0cmFwNT17Ym9vdHN0cmFwNX1cbiAgICAgICAgICB0YWJsZUlkPXt0YWJsZUlkfVxuICAgICAgICAgIHNpemVQZXJQYWdlTGlzdD17c2l6ZVBlclBhZ2VMaXN0fVxuICAgICAgICAgIGN1cnJTaXplUGVyUGFnZT17Y3VyclNpemVQZXJQYWdlfVxuICAgICAgICAgIGhpZGVTaXplUGVyUGFnZT17aGlkZVNpemVQZXJQYWdlfVxuICAgICAgICAgIHNpemVQZXJQYWdlUmVuZGVyZXI9e3NpemVQZXJQYWdlUmVuZGVyZXJ9XG4gICAgICAgICAgc2l6ZVBlclBhZ2VPcHRpb25SZW5kZXJlcj17c2l6ZVBlclBhZ2VPcHRpb25SZW5kZXJlcn1cbiAgICAgICAgICBvblNpemVQZXJQYWdlQ2hhbmdlPXtoYW5kbGVDaGFuZ2VTaXplUGVyUGFnZX1cbiAgICAgICAgLz5cbiAgICAgICAge3Nob3dUb3RhbCA/IChcbiAgICAgICAgICA8UGFnaW5hdGlvblRvdGFsV2l0aEFkYXB0ZXJcbiAgICAgICAgICAgIGN1cnJQYWdlPXtjdXJyUGFnZX1cbiAgICAgICAgICAgIGN1cnJTaXplUGVyUGFnZT17Y3VyclNpemVQZXJQYWdlfVxuICAgICAgICAgICAgcGFnZVN0YXJ0SW5kZXg9e3BhZ2VTdGFydEluZGV4fVxuICAgICAgICAgICAgZGF0YVNpemU9e2RhdGFTaXplfVxuICAgICAgICAgICAgcGFnaW5hdGlvblRvdGFsUmVuZGVyZXI9e3BhZ2luYXRpb25Ub3RhbFJlbmRlcmVyfVxuICAgICAgICAgIC8+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgICB7cGFnZUxpc3RSZW5kZXJlciA/IChcbiAgICAgICAgcGFnZUxpc3RSZW5kZXJlcih7XG4gICAgICAgICAgcGFnZXMsXG4gICAgICAgICAgb25QYWdlQ2hhbmdlOiBoYW5kbGVDaGFuZ2VQYWdlLFxuICAgICAgICB9KVxuICAgICAgKSA6IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3BhZ2VMaXN0Q2xhc3N9PlxuICAgICAgICAgIDxQYWdpbmF0aW9uTGlzdFdpdGhBZGFwdGVyXG4gICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgIGN1cnJQYWdlPXtjdXJyUGFnZX1cbiAgICAgICAgICAgIGN1cnJTaXplUGVyUGFnZT17Y3VyclNpemVQZXJQYWdlfVxuICAgICAgICAgICAgZGF0YVNpemU9e2RhdGFTaXplfVxuICAgICAgICAgICAgcGFnZVN0YXJ0SW5kZXg9e3BhZ2VTdGFydEluZGV4fVxuICAgICAgICAgICAgbGFzdFBhZ2U9e2xhc3RQYWdlfVxuICAgICAgICAgICAgdG90YWxQYWdlcz17dG90YWxQYWdlc31cbiAgICAgICAgICAgIHBhZ2VCdXR0b25SZW5kZXJlcj17cGFnZUJ1dHRvblJlbmRlcmVyfVxuICAgICAgICAgICAgb25QYWdlQ2hhbmdlPXtoYW5kbGVDaGFuZ2VQYWdlfVxuICAgICAgICAgICAgcGFnaW5hdGlvblNpemU9e3BhZ2luYXRpb25TaXplfVxuICAgICAgICAgICAgd2l0aEZpcnN0QW5kTGFzdD17d2l0aEZpcnN0QW5kTGFzdH1cbiAgICAgICAgICAgIGZpcnN0UGFnZVRleHQ9e2ZpcnN0UGFnZVRleHR9XG4gICAgICAgICAgICBwcmVQYWdlVGV4dD17cHJlUGFnZVRleHR9XG4gICAgICAgICAgICBuZXh0UGFnZVRleHQ9e25leHRQYWdlVGV4dH1cbiAgICAgICAgICAgIGxhc3RQYWdlVGV4dD17bGFzdFBhZ2VUZXh0fVxuICAgICAgICAgICAgYWx3YXlzU2hvd0FsbEJ0bnM9e2Fsd2F5c1Nob3dBbGxCdG5zfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFBhZ2luYXRpb247XG4iLCIvKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlUGFnaW5hdGlvbiB9IGZyb20gXCIuL2hvb2tzL3VzZVBhZ2luYXRpb25cIjtcbmltcG9ydCBTaXplUGVyUGFnZURyb3BEb3duIGZyb20gXCIuL3NpemUtcGVyLXBhZ2UtZHJvcGRvd25cIjtcblxuY29uc3Qgc2l6ZVBlclBhZ2VEcm9wZG93bkFkYXB0ZXIgPSAoV3JhcHBlZENvbXBvbmVudDogYW55KSA9PiB7XG4gIHJldHVybiAocHJvcHM6IGFueSkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHRhYmxlSWQsXG4gICAgICBib290c3RyYXA0LFxuICAgICAgYm9vdHN0cmFwNSxcbiAgICAgIHNpemVQZXJQYWdlTGlzdCxcbiAgICAgIGN1cnJTaXplUGVyUGFnZSxcbiAgICAgIGhpZGVTaXplUGVyUGFnZSxcbiAgICAgIHNpemVQZXJQYWdlUmVuZGVyZXIsXG4gICAgICBzaXplUGVyUGFnZU9wdGlvblJlbmRlcmVyLFxuICAgICAgb25TaXplUGVyUGFnZUNoYW5nZSxcbiAgICAgIC8vIERlZmF1bHQgdmFsdWVzIGZvciB1c2VQYWdpbmF0aW9uXG4gICAgICBjdXJyUGFnZSA9IDEsXG4gICAgICBkYXRhU2l6ZSA9IDAsXG4gICAgICBwYWdlU3RhcnRJbmRleCA9IDEsXG4gICAgICBwYWdpbmF0aW9uU2l6ZSA9IDUsXG4gICAgICB3aXRoRmlyc3RBbmRMYXN0ID0gdHJ1ZSxcbiAgICAgIGFsd2F5c1Nob3dBbGxCdG5zID0gZmFsc2UsXG4gICAgICBmaXJzdFBhZ2VUZXh0ID0gXCI8PFwiLFxuICAgICAgcHJlUGFnZVRleHQgPSBcIjxcIixcbiAgICAgIG5leHRQYWdlVGV4dCA9IFwiPlwiLFxuICAgICAgbGFzdFBhZ2VUZXh0ID0gXCI+PlwiLFxuICAgICAgb25QYWdlQ2hhbmdlID0gKCkgPT4ge30sXG4gICAgfSA9IHByb3BzO1xuXG4gICAgY29uc3QgW2Ryb3Bkb3duT3Blbiwgc2V0RHJvcGRvd25PcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICAgIGNvbnN0IHsgZ2V0U2l6ZVBlclBhZ2VTdGF0dXMsIGhhbmRsZUNoYW5nZVNpemVQZXJQYWdlIH0gPSB1c2VQYWdpbmF0aW9uKHtcbiAgICAgIGN1cnJQYWdlLFxuICAgICAgY3VyclNpemVQZXJQYWdlLFxuICAgICAgZGF0YVNpemUsXG4gICAgICBwYWdlU3RhcnRJbmRleCxcbiAgICAgIHBhZ2luYXRpb25TaXplLFxuICAgICAgd2l0aEZpcnN0QW5kTGFzdCxcbiAgICAgIGFsd2F5c1Nob3dBbGxCdG5zLFxuICAgICAgZmlyc3RQYWdlVGV4dCxcbiAgICAgIHByZVBhZ2VUZXh0LFxuICAgICAgbmV4dFBhZ2VUZXh0LFxuICAgICAgbGFzdFBhZ2VUZXh0LFxuICAgICAgc2l6ZVBlclBhZ2VMaXN0LFxuICAgICAgb25QYWdlQ2hhbmdlLFxuICAgICAgb25TaXplUGVyUGFnZUNoYW5nZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRvZ2dsZURyb3BEb3duID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgc2V0RHJvcGRvd25PcGVuKChwcmV2KSA9PiAhcHJldik7XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3QgY2xvc2VEcm9wRG93biA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIHNldERyb3Bkb3duT3BlbihmYWxzZSk7XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3QgaGFuZGxlU2l6ZVBlclBhZ2VDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAgIChzaXplUGVyUGFnZTogYW55KSA9PiB7XG4gICAgICAgIGhhbmRsZUNoYW5nZVNpemVQZXJQYWdlKHNpemVQZXJQYWdlKTtcbiAgICAgICAgY2xvc2VEcm9wRG93bigpO1xuICAgICAgfSxcbiAgICAgIFtoYW5kbGVDaGFuZ2VTaXplUGVyUGFnZSwgY2xvc2VEcm9wRG93bl1cbiAgICApO1xuXG4gICAgaWYgKHNpemVQZXJQYWdlTGlzdC5sZW5ndGggPiAxICYmICFoaWRlU2l6ZVBlclBhZ2UpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBnZXRTaXplUGVyUGFnZVN0YXR1cygpO1xuICAgICAgaWYgKHNpemVQZXJQYWdlUmVuZGVyZXIpIHtcbiAgICAgICAgcmV0dXJuIHNpemVQZXJQYWdlUmVuZGVyZXIoe1xuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgY3VyclNpemVQZXJQYWdlOiBgJHtjdXJyU2l6ZVBlclBhZ2V9YCxcbiAgICAgICAgICBvblNpemVQZXJQYWdlQ2hhbmdlOiBoYW5kbGVTaXplUGVyUGFnZUNoYW5nZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8V3JhcHBlZENvbXBvbmVudFxuICAgICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgICBjdXJyU2l6ZVBlclBhZ2U9e2Ake2N1cnJTaXplUGVyUGFnZX1gfVxuICAgICAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICAgICAgb3B0aW9uUmVuZGVyZXI9e3NpemVQZXJQYWdlT3B0aW9uUmVuZGVyZXJ9XG4gICAgICAgICAgb25TaXplUGVyUGFnZUNoYW5nZT17aGFuZGxlU2l6ZVBlclBhZ2VDaGFuZ2V9XG4gICAgICAgICAgb25DbGljaz17dG9nZ2xlRHJvcERvd259XG4gICAgICAgICAgb25CbHVyPXtjbG9zZURyb3BEb3dufVxuICAgICAgICAgIG9wZW49e2Ryb3Bkb3duT3Blbn1cbiAgICAgICAgICB0YWJsZUlkPXt0YWJsZUlkfVxuICAgICAgICAgIGJvb3RzdHJhcDQ9e2Jvb3RzdHJhcDR9XG4gICAgICAgICAgYm9vdHN0cmFwNT17Ym9vdHN0cmFwNX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IFNpemVQZXJQYWdlRHJvcGRvd25XaXRoQWRhcHRlciA9XG4gIHNpemVQZXJQYWdlRHJvcGRvd25BZGFwdGVyKFNpemVQZXJQYWdlRHJvcERvd24pO1xuZXhwb3J0IGRlZmF1bHQgc2l6ZVBlclBhZ2VEcm9wZG93bkFkYXB0ZXI7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgcGFnaW5hdGlvbkhhbmRsZXIgZnJvbSBcIi4vcGFnaW5hdGlvbi1oYW5kbGVyXCI7XG5pbXBvcnQgU2l6ZVBlclBhZ2VEcm9wZG93biBmcm9tIFwiLi9zaXplLXBlci1wYWdlLWRyb3Bkb3duXCI7XG5pbXBvcnQgc2l6ZVBlclBhZ2VEcm9wZG93bkFkYXB0ZXIgZnJvbSBcIi4vc2l6ZS1wZXItcGFnZS1kcm9wZG93bi1hZGFwdGVyXCI7XG5pbXBvcnQgc3RhbmRhbG9uZUFkYXB0ZXIgZnJvbSBcIi4vc3RhbmRhbG9uZS1hZGFwdGVyXCI7XG5cbmNvbnN0IFNpemVQZXJQYWdlRHJvcGRvd25TdGFuZGFsb25lID0gKHByb3BzOiBhbnkpID0+IChcbiAgPFNpemVQZXJQYWdlRHJvcGRvd24gey4uLnByb3BzfSAvPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgc3RhbmRhbG9uZUFkYXB0ZXIoXG4gIHBhZ2luYXRpb25IYW5kbGVyKHNpemVQZXJQYWdlRHJvcGRvd25BZGFwdGVyKFNpemVQZXJQYWdlRHJvcGRvd25TdGFuZGFsb25lKSlcbik7XG4iLCJpbXBvcnQgY3MgZnJvbSBcImNsYXNzbmFtZXNcIjtcblxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFNpemVQZXJQYWdlT3B0aW9uIGZyb20gXCIuL3NpemUtcGVyLXBhZ2Utb3B0aW9uXCI7XG5cbmNvbnN0IHNpemVQZXJQYWdlRGVmYXVsdENsYXNzID0gXCJyZWFjdC1icy10YWJsZS1zaXplUGVyUGFnZS1kcm9wZG93blwiO1xuXG5jb25zdCBzaXplUGVyUGFnZURyb3BEb3duRGVmYXVsdFByb3BzID0ge1xuICBvcGVuOiBmYWxzZSxcbiAgaGlkZGVuOiBmYWxzZSxcbiAgYnRuQ29udGV4dHVhbDogXCJidG4tZGVmYXVsdCBidG4tc2Vjb25kYXJ5XCIsXG4gIHZhcmlhdGlvbjogXCJkcm9wZG93blwiLFxuICBjbGFzc05hbWU6IFwiXCIsXG4gIG9wdGlvblJlbmRlcmVyOiBudWxsLFxuICBib290c3RyYXA0OiBmYWxzZSxcbiAgYm9vdHN0cmFwNTogZmFsc2UsXG4gIHRhYmxlSWQ6IG51bGwsXG59O1xuXG5pbnRlcmZhY2UgU2l6ZVBlclBhZ2VEcm9wRG93blByb3BzIHtcbiAgY3VyclNpemVQZXJQYWdlOiBzdHJpbmcgfCBudW1iZXI7XG4gIG9wdGlvbnM6IEFycmF5PHtcbiAgICB0ZXh0OiBzdHJpbmc7XG4gICAgcGFnZTogbnVtYmVyO1xuICB9PjtcbiAgb25DbGljazogKGU6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHZvaWQ7XG4gIG9uQmx1cjogKGU6IFJlYWN0LkZvY3VzRXZlbnQpID0+IHZvaWQ7XG4gIG9uU2l6ZVBlclBhZ2VDaGFuZ2U6IChzaXplUGVyUGFnZTogbnVtYmVyKSA9PiB2b2lkO1xuICBib290c3RyYXA0PzogYm9vbGVhbjtcbiAgYm9vdHN0cmFwNT86IGJvb2xlYW47XG4gIHRhYmxlSWQ/OiBzdHJpbmc7XG4gIG9wZW4/OiBib29sZWFuO1xuICBoaWRkZW4/OiBib29sZWFuO1xuICBidG5Db250ZXh0dWFsPzogc3RyaW5nO1xuICB2YXJpYXRpb24/OiBcImRyb3Bkb3duXCIgfCBcImRyb3B1cFwiO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIG9wdGlvblJlbmRlcmVyPzogKHByb3BzOiBhbnkpID0+IFJlYWN0LlJlYWN0RWxlbWVudCB8IG51bGw7XG59XG5cbmNvbnN0IFNpemVQZXJQYWdlRHJvcERvd24gPSAocHJvcHM6IFNpemVQZXJQYWdlRHJvcERvd25Qcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgb3BlbixcbiAgICB0YWJsZUlkLFxuICAgIGhpZGRlbixcbiAgICBvbkNsaWNrLFxuICAgIG9uQmx1cixcbiAgICBvcHRpb25zLFxuICAgIGNsYXNzTmFtZSxcbiAgICB2YXJpYXRpb24sXG4gICAgYm9vdHN0cmFwNCxcbiAgICBib290c3RyYXA1LFxuICAgIGJ0bkNvbnRleHR1YWwsXG4gICAgb3B0aW9uUmVuZGVyZXIsXG4gICAgY3VyclNpemVQZXJQYWdlLFxuICAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2UsXG4gIH0gPSB7IC4uLnNpemVQZXJQYWdlRHJvcERvd25EZWZhdWx0UHJvcHMsIC4uLnByb3BzIH07XG5cbiAgY29uc3Qgb3BlbkNsYXNzID0gb3BlbiA/IFwib3BlbiBzaG93XCIgOiBcIlwiO1xuICBjb25zdCBkcm9wZG93bkNsYXNzZXMgPSBjcyhcbiAgICBvcGVuQ2xhc3MsXG4gICAgc2l6ZVBlclBhZ2VEZWZhdWx0Q2xhc3MsXG4gICAgdmFyaWF0aW9uLFxuICAgIGNsYXNzTmFtZVxuICApO1xuXG4gIGNvbnN0IGdlbmVyYXRlZElkID0gUmVhY3QudXNlSWQoKTtcbiAgY29uc3QgaWQgPSB0YWJsZUlkID8gYCR7dGFibGVJZH0tcGFnZURyb3BEb3duYCA6IGBwYWdlRHJvcERvd24tJHtnZW5lcmF0ZWRJZH1gO1xuXG4gIHJldHVybiAoXG4gICAgPHNwYW5cbiAgICAgIHN0eWxlPXt7IHZpc2liaWxpdHk6IGhpZGRlbiA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIiB9fVxuICAgICAgY2xhc3NOYW1lPXtkcm9wZG93bkNsYXNzZXN9XG4gICAgICBkYXRhLXRlc3RpZD1cInNpemUtcGVyLXBhZ2UtZHJvcGRvd25cIlxuICAgID5cbiAgICAgIDxidXR0b25cbiAgICAgICAgaWQ9e2lkfVxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3NOYW1lPXtgYnRuICR7YnRuQ29udGV4dHVhbH0gZHJvcGRvd24tdG9nZ2xlYH1cbiAgICAgICAgZGF0YS10b2dnbGU9e2Jvb3RzdHJhcDUgPyB1bmRlZmluZWQgOiBcImRyb3Bkb3duXCJ9XG4gICAgICAgIGRhdGEtYnMtdG9nZ2xlPXtib290c3RyYXA1ID8gXCJkcm9wZG93blwiIDogdW5kZWZpbmVkfVxuICAgICAgICBhcmlhLWV4cGFuZGVkPXtvcGVufVxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICBvbkJsdXI9e29uQmx1cn1cbiAgICAgID5cbiAgICAgICAge2N1cnJTaXplUGVyUGFnZX17XCIgXCJ9XG4gICAgICAgIHtib290c3RyYXA0IHx8IGJvb3RzdHJhcDUgPyBudWxsIDogKFxuICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiY2FyZXRcIiAvPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPHVsXG4gICAgICAgIGNsYXNzTmFtZT17YGRyb3Bkb3duLW1lbnUgJHtvcGVuQ2xhc3N9YH1cbiAgICAgICAgcm9sZT1cIm1lbnVcIlxuICAgICAgICBhcmlhLWxhYmVsbGVkYnk9e2lkfVxuICAgICAgPlxuICAgICAgICB7b3B0aW9ucy5tYXAoKG9wdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKG9wdGlvblJlbmRlcmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uUmVuZGVyZXIoe1xuICAgICAgICAgICAgICAuLi5vcHRpb24sXG4gICAgICAgICAgICAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxTaXplUGVyUGFnZU9wdGlvblxuICAgICAgICAgICAgICB7Li4ub3B0aW9ufVxuICAgICAgICAgICAgICBrZXk9e29wdGlvbi50ZXh0fVxuICAgICAgICAgICAgICBib290c3RyYXA0PXtib290c3RyYXA0fVxuICAgICAgICAgICAgICBib290c3RyYXA1PXtib290c3RyYXA1fVxuICAgICAgICAgICAgICBvblNpemVQZXJQYWdlQ2hhbmdlPXtvblNpemVQZXJQYWdlQ2hhbmdlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICAgIDwvdWw+XG4gICAgPC9zcGFuPlxuICApO1xufTtcblxuXG5cbmV4cG9ydCBkZWZhdWx0IFNpemVQZXJQYWdlRHJvcERvd247XG4iLCJcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIFNpemVQZXJQYWdlT3B0aW9uUHJvcHMge1xuICB0ZXh0OiBzdHJpbmc7XG4gIHBhZ2U6IG51bWJlcjtcbiAgb25TaXplUGVyUGFnZUNoYW5nZTogKHBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbiAgYm9vdHN0cmFwND86IGJvb2xlYW47XG4gIGJvb3RzdHJhcDU/OiBib29sZWFuO1xufVxuXG5jb25zdCBTaXplUGVyUGFnZU9wdGlvbiA9ICh7XG4gIHRleHQsXG4gIHBhZ2UsXG4gIG9uU2l6ZVBlclBhZ2VDaGFuZ2UsXG4gIGJvb3RzdHJhcDQgPSBmYWxzZSxcbiAgYm9vdHN0cmFwNSA9IGZhbHNlLFxufTogU2l6ZVBlclBhZ2VPcHRpb25Qcm9wcykgPT5cbiAgYm9vdHN0cmFwNCB8fCBib290c3RyYXA1ID8gKFxuICAgIDxhXG4gICAgICBocmVmPVwiI1wiXG4gICAgICB0YWJJbmRleD17LTF9XG4gICAgICByb2xlPVwibWVudWl0ZW1cIlxuICAgICAgY2xhc3NOYW1lPVwiZHJvcGRvd24taXRlbVwiXG4gICAgICBkYXRhLXBhZ2U9e3BhZ2V9XG4gICAgICBvbk1vdXNlRG93bj17KGUpID0+IHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBvblNpemVQZXJQYWdlQ2hhbmdlKHBhZ2UpO1xuICAgICAgfX1cbiAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH19XG4gICAgPlxuICAgICAge3RleHR9XG4gICAgPC9hPlxuICApIDogKFxuICAgIDxsaSBrZXk9e3RleHR9IHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzc05hbWU9XCJkcm9wZG93bi1pdGVtXCI+XG4gICAgICA8YVxuICAgICAgICBocmVmPVwiI1wiXG4gICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcbiAgICAgICAgZGF0YS1wYWdlPXtwYWdlfVxuICAgICAgICBvbk1vdXNlRG93bj17KGUpID0+IHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgb25TaXplUGVyUGFnZUNoYW5nZShwYWdlKTtcbiAgICAgICAgfX1cbiAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHt0ZXh0fVxuICAgICAgPC9hPlxuICAgIDwvbGk+XG4gICk7XG5cblxuZXhwb3J0IGRlZmF1bHQgU2l6ZVBlclBhZ2VPcHRpb247XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ29udGV4dCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3RhdGVDb250ZXh0IH0gZnJvbSBcIi4vc3RhdGUtY29udGV4dFwiO1xuXG5leHBvcnQgZGVmYXVsdCAoV3JhcHBlZENvbXBvbmVudDogYW55KSA9PiB7XG4gIGNvbnN0IFN0YW5kYWxvbmVBZGFwdGVyID0gKHByb3BzOiBhbnkpID0+IHtcbiAgICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChTdGF0ZUNvbnRleHQpO1xuICAgIGNvbnN0IHBhZ2luYXRpb25Qcm9wcyA9IGNvbnRleHQgPyBjb250ZXh0LnBhZ2luYXRpb25Qcm9wcyA6IHt9O1xuXG4gICAgY29uc3QgeyBwYWdlLCBzaXplUGVyUGFnZSwgLi4ucmVzdCB9ID0gcHJvcHM7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFdyYXBwZWRDb21wb25lbnRcbiAgICAgICAgey4uLnBhZ2luYXRpb25Qcm9wc31cbiAgICAgICAgey4uLnJlc3R9XG4gICAgICAgIGN1cnJQYWdlPXtwYWdlID8/IHBhZ2luYXRpb25Qcm9wcy5wYWdlfVxuICAgICAgICBjdXJyU2l6ZVBlclBhZ2U9e3NpemVQZXJQYWdlID8/IHBhZ2luYXRpb25Qcm9wcy5zaXplUGVyUGFnZX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcbiAgcmV0dXJuIFN0YW5kYWxvbmVBZGFwdGVyO1xufTtcbiIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG4vKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgbm8tbG9uZWx5LWlmOiAwICovXG4vKiBlc2xpbnQgY2FtZWxjYXNlOiAwICovXG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gXCJldmVudHNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBDb25zdCBmcm9tIFwiLi9jb25zdFwiO1xuXG5pbXBvcnQgeyBQYWdpbmF0aW9uUHJvdmlkZXJQcm9wcyB9IGZyb20gXCIuLlwiO1xuaW1wb3J0IHsgYWxpZ25QYWdlIH0gZnJvbSBcIi4vcGFnZVwiO1xuXG5pbXBvcnQgeyB1c2VQYWdpbmF0aW9uU3RhdGUgfSBmcm9tIFwiLi9ob29rcy91c2VQYWdpbmF0aW9uU3RhdGVcIjtcblxuY29uc3QgU3RhdGVDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxhbnk+KG51bGwpO1xuZXhwb3J0IHsgU3RhdGVDb250ZXh0IH07XG5cbmNvbnN0IFN0YXRlUHJvdmlkZXI6IFJlYWN0LkZDPFBhZ2luYXRpb25Qcm92aWRlclByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IHBhZ2luYXRpb24sIGNoaWxkcmVuIH0gPSBwcm9wcztcbiAgY29uc3Qge1xuICAgIGRhdGFDaGFuZ2VMaXN0ZW5lcixcbiAgICByZW1vdGVFbWl0dGVyUmVmLFxuICAgIGdldFBhZ2luYXRpb25Qcm9wcyxcbiAgfSA9IHVzZVBhZ2luYXRpb25TdGF0ZShwcm9wcyk7XG5cbiAgY29uc3QgcGFnaW5hdGlvblByb3BzID0gZ2V0UGFnaW5hdGlvblByb3BzKCk7XG4gIGNvbnN0IHBhZ2luYXRpb25WYWx1ZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICAuLi5wYWdpbmF0aW9uLFxuICAgIG9wdGlvbnM6IHBhZ2luYXRpb25Qcm9wcyxcbiAgfSksIFtwYWdpbmF0aW9uLCBwYWdpbmF0aW9uUHJvcHNdKTtcblxuICByZXR1cm4gKFxuICAgIDxTdGF0ZUNvbnRleHQuUHJvdmlkZXJcbiAgICAgIHZhbHVlPXt7XG4gICAgICAgIHBhZ2luYXRpb25Qcm9wcyxcbiAgICAgICAgcGFnaW5hdGlvblRhYmxlUHJvcHM6IHtcbiAgICAgICAgICBwYWdpbmF0aW9uOiBwYWdpbmF0aW9uVmFsdWUsXG4gICAgICAgICAgc2V0UGFnaW5hdGlvblJlbW90ZUVtaXR0ZXI6IChlbWl0dGVyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJlbW90ZUVtaXR0ZXJSZWYuY3VycmVudCA9IGVtaXR0ZXI7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBkYXRhQ2hhbmdlTGlzdGVuZXIsXG4gICAgICAgIH0sXG4gICAgICB9fVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L1N0YXRlQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+ICh7XG4gIFByb3ZpZGVyOiBTdGF0ZVByb3ZpZGVyLFxuICBDb25zdW1lcjogU3RhdGVDb250ZXh0LkNvbnN1bWVyLFxufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzQ0Ml9fOyIsIi8qIVxuXHRDb3B5cmlnaHQgKGMpIDIwMTggSmVkIFdhdHNvbi5cblx0TGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWVcblx0aHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lc1xuKi9cbi8qIGdsb2JhbCBkZWZpbmUgKi9cblxuKGZ1bmN0aW9uICgpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuXHRmdW5jdGlvbiBjbGFzc05hbWVzICgpIHtcblx0XHR2YXIgY2xhc3NlcyA9ICcnO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoYXJnKSB7XG5cdFx0XHRcdGNsYXNzZXMgPSBhcHBlbmRDbGFzcyhjbGFzc2VzLCBwYXJzZVZhbHVlKGFyZykpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzO1xuXHR9XG5cblx0ZnVuY3Rpb24gcGFyc2VWYWx1ZSAoYXJnKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG5cdFx0XHRyZXR1cm4gYXJnO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgYXJnICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblxuXHRcdGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzLmFwcGx5KG51bGwsIGFyZyk7XG5cdFx0fVxuXG5cdFx0aWYgKGFyZy50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAmJiAhYXJnLnRvU3RyaW5nLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1tuYXRpdmUgY29kZV0nKSkge1xuXHRcdFx0cmV0dXJuIGFyZy50b1N0cmluZygpO1xuXHRcdH1cblxuXHRcdHZhciBjbGFzc2VzID0gJyc7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRpZiAoaGFzT3duLmNhbGwoYXJnLCBrZXkpICYmIGFyZ1trZXldKSB7XG5cdFx0XHRcdGNsYXNzZXMgPSBhcHBlbmRDbGFzcyhjbGFzc2VzLCBrZXkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzO1xuXHR9XG5cblx0ZnVuY3Rpb24gYXBwZW5kQ2xhc3MgKHZhbHVlLCBuZXdDbGFzcykge1xuXHRcdGlmICghbmV3Q2xhc3MpIHtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdFxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlICsgJyAnICsgbmV3Q2xhc3M7XG5cdFx0fVxuXHRcblx0XHRyZXR1cm4gdmFsdWUgKyBuZXdDbGFzcztcblx0fVxuXG5cdGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuXHRcdGNsYXNzTmFtZXMuZGVmYXVsdCA9IGNsYXNzTmFtZXM7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyByZWdpc3RlciBhcyAnY2xhc3NuYW1lcycsIGNvbnNpc3RlbnQgd2l0aCBucG0gcGFja2FnZSBuYW1lXG5cdFx0ZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lcztcblx0fVxufSgpKTtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTg3KTtcbiJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJyZXF1aXJlIiwiZGVmaW5lIiwiYW1kIiwic2VsZiIsIl9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzQ0Ml9fIiwiUmVmbGVjdE93bktleXMiLCJSIiwiUmVmbGVjdCIsIlJlZmxlY3RBcHBseSIsImFwcGx5IiwidGFyZ2V0IiwicmVjZWl2ZXIiLCJhcmdzIiwiRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJjYWxsIiwib3duS2V5cyIsIk9iamVjdCIsImdldE93blByb3BlcnR5U3ltYm9scyIsImdldE93blByb3BlcnR5TmFtZXMiLCJjb25jYXQiLCJOdW1iZXJJc05hTiIsIk51bWJlciIsImlzTmFOIiwidmFsdWUiLCJFdmVudEVtaXR0ZXIiLCJpbml0IiwidGhpcyIsIm9uY2UiLCJlbWl0dGVyIiwibmFtZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZXJyb3JMaXN0ZW5lciIsImVyciIsInJlbW92ZUxpc3RlbmVyIiwicmVzb2x2ZXIiLCJzbGljZSIsImFyZ3VtZW50cyIsImV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lciIsImhhbmRsZXIiLCJmbGFncyIsIm9uIiwiYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIiLCJfZXZlbnRzIiwidW5kZWZpbmVkIiwiX2V2ZW50c0NvdW50IiwiX21heExpc3RlbmVycyIsImRlZmF1bHRNYXhMaXN0ZW5lcnMiLCJjaGVja0xpc3RlbmVyIiwibGlzdGVuZXIiLCJUeXBlRXJyb3IiLCJfZ2V0TWF4TGlzdGVuZXJzIiwidGhhdCIsIl9hZGRMaXN0ZW5lciIsInR5cGUiLCJwcmVwZW5kIiwibSIsImV2ZW50cyIsImV4aXN0aW5nIiwid2FybmluZyIsImNyZWF0ZSIsIm5ld0xpc3RlbmVyIiwiZW1pdCIsInVuc2hpZnQiLCJwdXNoIiwibGVuZ3RoIiwid2FybmVkIiwidyIsIkVycm9yIiwiU3RyaW5nIiwiY291bnQiLCJjb25zb2xlIiwid2FybiIsIm9uY2VXcmFwcGVyIiwiZmlyZWQiLCJ3cmFwRm4iLCJfb25jZVdyYXAiLCJzdGF0ZSIsIndyYXBwZWQiLCJiaW5kIiwiX2xpc3RlbmVycyIsInVud3JhcCIsImV2bGlzdGVuZXIiLCJhcnIiLCJyZXQiLCJBcnJheSIsImkiLCJ1bndyYXBMaXN0ZW5lcnMiLCJhcnJheUNsb25lIiwibGlzdGVuZXJDb3VudCIsIm4iLCJjb3B5IiwiYWRkRXZlbnRMaXN0ZW5lciIsIndyYXBMaXN0ZW5lciIsImFyZyIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJzZXQiLCJSYW5nZUVycm9yIiwiZ2V0UHJvdG90eXBlT2YiLCJzZXRNYXhMaXN0ZW5lcnMiLCJnZXRNYXhMaXN0ZW5lcnMiLCJkb0Vycm9yIiwiZXJyb3IiLCJlciIsIm1lc3NhZ2UiLCJjb250ZXh0IiwibGVuIiwibGlzdGVuZXJzIiwiYWRkTGlzdGVuZXIiLCJwcmVwZW5kTGlzdGVuZXIiLCJwcmVwZW5kT25jZUxpc3RlbmVyIiwibGlzdCIsInBvc2l0aW9uIiwib3JpZ2luYWxMaXN0ZW5lciIsInNoaWZ0IiwiaW5kZXgiLCJwb3AiLCJzcGxpY2VPbmUiLCJvZmYiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJrZXkiLCJrZXlzIiwicmF3TGlzdGVuZXJzIiwiZXZlbnROYW1lcyIsIlBhZ2luYXRpb25MaXN0U3RhbmRhbG9uZSIsIlBhZ2luYXRpb25Ub3RhbFN0YW5kYWxvbmUiLCJTaXplUGVyUGFnZURyb3Bkb3duU3RhbmRhbG9uZSIsIm9wdGlvbnMiLCJjcmVhdGVDb250ZXh0IiwiUHJvdmlkZXIiLCJQYWdpbmF0aW9uUHJvdmlkZXIiLCJwcm9wcyIsIlN0YXRlQ29udGV4dCIsIkNvbnN1bWVyIiwiY2hpbGRyZW4iLCJQQUdJTkFUSU9OX1NJWkUiLCJQQUdFX1NUQVJUX0lOREVYIiwiV2l0aF9GSVJTVF9BTkRfTEFTVCIsIlNIT1dfQUxMX1BBR0VfQlROUyIsIlNIT1dfVE9UQUwiLCJQQUdJTkFUSU9OX1RPVEFMIiwiRklSU1RfUEFHRV9URVhUIiwiUFJFX1BBR0VfVEVYVCIsIk5FWFRfUEFHRV9URVhUIiwiTEFTVF9QQUdFX1RFWFQiLCJORVhUX1BBR0VfVElUTEUiLCJMQVNUX1BBR0VfVElUTEUiLCJQUkVfUEFHRV9USVRMRSIsIkZJUlNUX1BBR0VfVElUTEUiLCJTSVpFX1BFUl9QQUdFX0xJU1QiLCJISURFX1NJWkVfUEVSX1BBR0UiLCJISURFX1BBR0VfTElTVF9PTkxZX09ORV9QQUdFIiwiUGFnaW5hdGlvbkRhdGFDb250ZXh0IiwiUGFnaW5hdGlvbkRhdGFQcm92aWRlciIsImZvcndhcmRSZWYiLCJyZWYiLCJkYXRhIiwicHJvcERhdGEiLCJwYWdpbmF0aW9uIiwib25EYXRhU2l6ZUNoYW5nZSIsImN1cnJQYWdlIiwic2V0Q3VyclBhZ2UiLCJjdXJyU2l6ZVBlclBhZ2UiLCJnZXRQYWdpbmF0aW9uUHJvcHMiLCJpc1JlbW90ZVBhZ2luYXRpb24iLCJyZW1vdGVFbWl0dGVyUmVmIiwidXNlUGFnaW5hdGlvblN0YXRlIiwidXNlSW1wZXJhdGl2ZUhhbmRsZSIsInByZXZEYXRhTGVuZ3RoUmVmIiwidXNlUmVmIiwidXNlRWZmZWN0IiwiY3VzdG9tIiwib25QYWdlQ2hhbmdlIiwicGFnZVN0YXJ0SW5kZXgiLCJuZXdQYWdlIiwiYWxpZ25QYWdlIiwiY3VycmVudCIsImRhdGFTaXplIiwiZWZmZWN0aXZlQ3VyclNpemVQZXJQYWdlIiwic2l6ZVBlclBhZ2UiLCJlZmZlY3RpdmVDdXJyUGFnZSIsInBhZ2UiLCJ0b3RhbFBhZ2VzIiwiTWF0aCIsImZsb29yIiwic2xpY2VkRGF0YSIsImdldEJ5Q3VyclBhZ2UiLCJzZXRSZW1vdGVFbWl0dGVyIiwicGFnaW5hdGlvblBhZ2UiLCJwYWdpbmF0aW9uU2l6ZVBlclBhZ2UiLCJyZXN0IiwicmVuZGVyRGVmYXVsdFBhZ2luYXRpb24iLCJ1c2VQYWdpbmF0aW9uIiwicGFnaW5hdGlvblNpemUiLCJ3aXRoRmlyc3RBbmRMYXN0IiwiZmlyc3RQYWdlVGV4dCIsInByZVBhZ2VUZXh0IiwibmV4dFBhZ2VUZXh0IiwibGFzdFBhZ2VUZXh0IiwiYWx3YXlzU2hvd0FsbEJ0bnMiLCJzaXplUGVyUGFnZUxpc3QiLCJvblNpemVQZXJQYWdlQ2hhbmdlIiwibmV4dFBhZ2VUaXRsZSIsInByZVBhZ2VUaXRsZSIsImZpcnN0UGFnZVRpdGxlIiwibGFzdFBhZ2VUaXRsZSIsImRpc2FibGVQYWdlVGl0bGUiLCJ1c2VNZW1vIiwiY2VpbCIsImxhc3RQYWdlIiwiYmFja1RvUHJldlBhZ2UiLCJ1c2VDYWxsYmFjayIsImNhbGN1bGF0ZVBhZ2VzIiwicGFnZXMiLCJlbmRQYWdlIiwic3RhcnRQYWdlIiwibWF4IiwiZ2V0UGFnZVN0YXR1cyIsImlzU3RhcnQiLCJwYWdlSXRlbSIsImlzRW5kIiwiZmlsdGVyIiwibWFwIiwidGl0bGUiLCJhY3RpdmUiLCJkaXNhYmxlZCIsInBhZ2VSZXN1bHQiLCJoYW5kbGVDaGFuZ2VQYWdlIiwicGFyc2VJbnQiLCJoYW5kbGVDaGFuZ2VTaXplUGVyUGFnZSIsInNlbGVjdGVkU2l6ZSIsIm5ld0N1cnJQYWdlIiwibmV3VG90YWxQYWdlcyIsIm5ld0xhc3RQYWdlIiwiZ2V0U2l6ZVBlclBhZ2VTdGF0dXMiLCJfc2l6ZVBlclBhZ2UiLCJ0ZXh0IiwiZnJvbVRvIiwib2Zmc2V0IiwiYWJzIiwiZnJvbSIsInRvIiwibWluIiwiYm9vdHN0cmFwNCIsInRhYmxlSWQiLCJyZW1vdGVFbWl0dGVyIiwicHJvcFJlbW90ZUVtaXR0ZXIiLCJ1c2VTdGF0ZSIsInNldEN1cnJTaXplUGVyUGFnZSIsInNldERhdGFTaXplIiwidG90YWxTaXplIiwiZGF0YUNoYW5nZUxpc3RlbmVyUmVmIiwiaXNSZW1vdGVQYWdpbmF0aW9uUHJvcFJlZiIsInByb3BSZW1vdGVFbWl0dGVyUmVmIiwidXNlTGF5b3V0RWZmZWN0IiwiZSIsInJlc3VsdCIsImhhbmRsZURhdGFTaXplQ2hhbmdlIiwibmV3RGF0YVNpemUiLCJwcmV2UGFnZSIsImVmZmVjdGl2ZURhdGFTaXplIiwiaGlkZVNpemVQZXJQYWdlIiwiaGlkZVBhZ2VMaXN0T25seU9uZVBhZ2UiLCJzaG93VG90YWwiLCJwYWdlTGlzdFJlbmRlcmVyIiwicGFnZUJ1dHRvblJlbmRlcmVyIiwic2l6ZVBlclBhZ2VSZW5kZXJlciIsInBhZ2luYXRpb25Ub3RhbFJlbmRlcmVyIiwic2l6ZVBlclBhZ2VPcHRpb25SZW5kZXJlciIsImRhdGFDaGFuZ2VMaXN0ZW5lciIsIlBhZ2VCdXR0b24iLCJtZW1vIiwiY2xhc3NOYW1lIiwiY2xhc3NlcyIsImhyZWYiLCJvbkNsaWNrIiwicHJldmVudERlZmF1bHQiLCJlbmRJbmRleCIsImdldE5vcm1hbGl6ZWRQYWdlIiwicHJldkRhdGFTaXplIiwiZW5kIiwic3RhcnQiLCJzdGFydEluZGV4IiwiV3JhcHBlZENvbXBvbmVudCIsInBhZ2luYXRpb25MaXN0QWRhcHRlciIsIlBhZ2luYXRpb25MaXN0V2l0aEFkYXB0ZXIiLCJwYWdlUHJvcHMiLCJlbGVtZW50IiwiY2xvbmVFbGVtZW50IiwicGFnaW5hdGlvblRvdGFsQWRhcHRlciIsIlBhZ2luYXRpb25Ub3RhbFdpdGhBZGFwdGVyIiwiYm9vdHN0cmFwNSIsInBhZ2VMaXN0Q2xhc3MiLCJTaXplUGVyUGFnZURyb3Bkb3duV2l0aEFkYXB0ZXIiLCJzaXplUGVyUGFnZURyb3Bkb3duQWRhcHRlciIsImRyb3Bkb3duT3BlbiIsInNldERyb3Bkb3duT3BlbiIsInRvZ2dsZURyb3BEb3duIiwicHJldiIsImNsb3NlRHJvcERvd24iLCJoYW5kbGVTaXplUGVyUGFnZUNoYW5nZSIsIm9wdGlvblJlbmRlcmVyIiwib25CbHVyIiwib3BlbiIsInNpemVQZXJQYWdlRHJvcERvd25EZWZhdWx0UHJvcHMiLCJoaWRkZW4iLCJidG5Db250ZXh0dWFsIiwidmFyaWF0aW9uIiwib3BlbkNsYXNzIiwiZHJvcGRvd25DbGFzc2VzIiwiZ2VuZXJhdGVkSWQiLCJ1c2VJZCIsImlkIiwic3R5bGUiLCJ2aXNpYmlsaXR5Iiwicm9sZSIsIm9wdGlvbiIsInRhYkluZGV4Iiwib25Nb3VzZURvd24iLCJ1c2VDb250ZXh0IiwicGFnaW5hdGlvblByb3BzIiwiU3RhdGVQcm92aWRlciIsInBhZ2luYXRpb25WYWx1ZSIsInBhZ2luYXRpb25UYWJsZVByb3BzIiwic2V0UGFnaW5hdGlvblJlbW90ZUVtaXR0ZXIiLCJoYXNPd24iLCJoYXNPd25Qcm9wZXJ0eSIsImNsYXNzTmFtZXMiLCJhcHBlbmRDbGFzcyIsInBhcnNlVmFsdWUiLCJpc0FycmF5IiwidG9TdHJpbmciLCJpbmNsdWRlcyIsIm5ld0NsYXNzIiwiZGVmYXVsdCIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iXSwic291cmNlUm9vdCI6IiJ9